├── .gitignore ├── packages ├── ts-gleam │ ├── .npmignore │ ├── package.json │ ├── README.md │ ├── tsconfig.json │ ├── LICENSE │ ├── .gitignore │ └── src │ │ └── index.ts ├── vite-gleam │ ├── .gitignore │ ├── .npmignore │ ├── tsdown.config.js │ ├── LICENSE │ ├── package.json │ ├── README.md │ └── src │ │ └── index.ts └── example │ ├── src │ ├── vite-env.d.ts │ ├── ffi_dom.ts │ ├── counter.gleam │ ├── main.ts │ ├── style.css │ └── gleam.svg │ ├── README.md │ ├── gleam.toml │ ├── vite.config.ts │ ├── .gitignore │ ├── manifest.toml │ ├── index.html │ ├── package.json │ ├── tsconfig.json │ ├── LICENSE │ └── public │ └── vite.svg ├── .vscode ├── settings.json ├── launch.json └── gleam.code-workspace ├── pnpm-workspace.yaml ├── package.json ├── README.md ├── LICENSE └── pnpm-lock.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /packages/ts-gleam/.npmignore: -------------------------------------------------------------------------------- 1 | example -------------------------------------------------------------------------------- /packages/vite-gleam/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmake.configureOnOpen": false 3 | } 4 | -------------------------------------------------------------------------------- /packages/vite-gleam/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | src 3 | .gitignore 4 | -------------------------------------------------------------------------------- /packages/example/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/example/README.md: -------------------------------------------------------------------------------- 1 | This is an example project for `vite-gleam` and `ts-gleam`. 2 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - packages/* 3 | onlyBuiltDependencies: 4 | - esbuild 5 | -------------------------------------------------------------------------------- /packages/example/gleam.toml: -------------------------------------------------------------------------------- 1 | name = "example" 2 | version = "1.0.0" 3 | target = "javascript" 4 | 5 | [javascript] 6 | typescript_declarations = true 7 | 8 | [dependencies] 9 | gleam_stdlib = "~> 0.30" 10 | -------------------------------------------------------------------------------- /packages/example/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import Inspect from 'vite-plugin-inspect'; 3 | import gleam from 'vite-gleam'; 4 | 5 | export default defineConfig({ 6 | plugins: [gleam(), Inspect()], 7 | build: { sourcemap: true }, 8 | }); 9 | -------------------------------------------------------------------------------- /packages/example/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | build 14 | manifest.toml 15 | *.local 16 | 17 | # Editor directories and files 18 | .vscode/* 19 | !.vscode/extensions.json 20 | .idea 21 | .DS_Store 22 | *.suo 23 | *.ntvs* 24 | *.njsproj 25 | *.sln 26 | *.sw? 27 | -------------------------------------------------------------------------------- /packages/example/manifest.toml: -------------------------------------------------------------------------------- 1 | # This file was generated by Gleam 2 | # You typically do not need to edit this file 3 | 4 | packages = [ 5 | { name = "gleam_stdlib", version = "0.65.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "7C69C71D8C493AE11A5184828A77110EB05A7786EBF8B25B36A72F879C3EE107" }, 6 | ] 7 | 8 | [requirements] 9 | gleam_stdlib = { version = "~> 0.30" } 10 | -------------------------------------------------------------------------------- /packages/example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + TS 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /packages/vite-gleam/tsdown.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "tsdown"; 2 | 3 | export default defineConfig({ 4 | entry: ["src/index.ts"], 5 | 6 | clean: true, 7 | target: 'es2022', 8 | format: ["esm", "cjs"], 9 | 10 | bundle: true, 11 | dts: { 12 | resolve: true, 13 | entry: "src/index.ts", 14 | compilerOptions: { 15 | moduleResolution: 'node' 16 | } 17 | } 18 | }) 19 | -------------------------------------------------------------------------------- /packages/example/src/ffi_dom.ts: -------------------------------------------------------------------------------- 1 | export function qs(selector: string) { 2 | return document.querySelector(selector); 3 | } 4 | 5 | export function update( 6 | element: HTMLElement, 7 | property: Prop, 8 | updater: (v: HTMLElement[Prop]) => HTMLElement[Prop], 9 | ) { 10 | element[property] = updater(element[property]); 11 | } 12 | 13 | export function onclick(element: HTMLElement, handler: () => void) { 14 | element.addEventListener("click", handler); 15 | } 16 | -------------------------------------------------------------------------------- /packages/example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "tsc && vite build", 9 | "preview": "vite preview", 10 | "format": "prettier -w packages/*/src" 11 | }, 12 | "devDependencies": { 13 | "ts-gleam": "file:../ts-gleam", 14 | "typescript": "^5.9.3", 15 | "vite": "^7.2.4", 16 | "vite-gleam": "link:../vite-gleam", 17 | "vite-plugin-inspect": "^11.3.3" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /packages/ts-gleam/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ts-gleam", 3 | "description": "get type safety when importing .gleam from javascript", 4 | "version": "1.1.0", 5 | "repository": { 6 | "url": "https://github.com/Enderchief/gleam-tools/tree/master/packages/ts-gleam" 7 | }, 8 | "author": "Enderchief", 9 | "license": "MIT", 10 | "scripts": { 11 | "build": "tsc", 12 | "dev": "tsc --watch" 13 | }, 14 | "main": "./out", 15 | "dependencies": { 16 | "@iarna/toml": "^2.2.5", 17 | "typescript": "^5.9.3" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | // See: https://github.com/microsoft/TypeScript/wiki/Debugging-Language-Service-in-VS-Code 9 | "type": "node", 10 | "request": "attach", 11 | "name": "Attach to VS Code TS Server via Port", 12 | "processId": "${command:PickProcess}", 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-gleam", 3 | "version": "1.1.0", 4 | "description": "Import directly from *.gleam files", 5 | "scripts": { 6 | "build:pkg": "pnpm -r --filter='./packages/vite-gleam' run build", 7 | "build": "pnpm build:pkg", 8 | "format": "prettier -w packages/*/src", 9 | "dev": "pnpm -r --filter='./packages/*' run dev", 10 | "prepublish": "pnpm build", 11 | "publish": "pnpm publish --filter='./packages/vite-gleam'" 12 | }, 13 | "keywords": [ 14 | "gleam", 15 | "vite", 16 | "vite-plugin" 17 | ], 18 | "author": "Enderchief", 19 | "license": "MIT" 20 | } 21 | -------------------------------------------------------------------------------- /packages/example/src/counter.gleam: -------------------------------------------------------------------------------- 1 | import gleam/int 2 | 3 | pub type HtmlElement 4 | 5 | @external(javascript, "./ffi_dom.ts", "update") 6 | fn update(element: HtmlElement, property: String, updater: fn(a) -> a) -> Nil 7 | 8 | @external(javascript, "./ffi_dom.ts", "onclick") 9 | fn onclick(element: HtmlElement, func: fn() -> Nil) -> Nil 10 | 11 | pub fn setup_counter(btn: HtmlElement, counter: HtmlElement) -> Nil { 12 | onclick(btn, fn() { 13 | update(counter, "innerHTML", fn(v: String) { 14 | let assert Ok(count) = int.parse(v) 15 | int.to_string(count + 1) 16 | }) 17 | }) 18 | 19 | Nil 20 | } 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Gleam JavaScript Tools 2 | 3 | This is a monorepo for various related tools for Gleam with JavaScript. 4 | 5 | --- 6 | 7 | ## [vite-gleam](https://github.com/Enderchief/gleam-tools/tree/master/packages/vite-gleam) [![npm](https://img.shields.io/npm/v/vite-gleam)](https://npmjs.com/package/vite-gleam) 8 | 9 | Vite plugin to import Gleam code from JavaScript. 10 | 11 | ## [ts-gleam](https://github.com/Enderchief/gleam-tools/tree/master/packages/ts-gleam) [![npm](https://img.shields.io/npm/v/ts-gleam)](https://npmjs.com/package/ts-gleam) 12 | 13 | TypeScript LSP Plugin to provide type safety when importing Gleam code. 14 | -------------------------------------------------------------------------------- /packages/example/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "allowImportingTsExtensions": true, 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "noEmit": true, 15 | 16 | /* Linting */ 17 | "strict": true, 18 | "noUnusedLocals": true, 19 | "noUnusedParameters": true, 20 | "noFallthroughCasesInSwitch": true, 21 | 22 | "allowJs": true, 23 | "plugins": [{ "name": "ts-gleam" }], 24 | "allowArbitraryExtensions": true 25 | }, 26 | "include": ["src"] 27 | } 28 | -------------------------------------------------------------------------------- /.vscode/gleam.code-workspace: -------------------------------------------------------------------------------- 1 | { 2 | "folders": [ 3 | { 4 | "name": "✨ root", 5 | "path": ".." 6 | }, 7 | { 8 | "name": "📦 example", 9 | "path": "../packages/example" 10 | }, 11 | { 12 | "name": "📦 vite-gleam", 13 | "path": "../packages/vite-gleam" 14 | }, 15 | { 16 | "name": "📦 ts-gleam", 17 | "path": "../packages/ts-gleam" 18 | } 19 | ], 20 | "settings": { 21 | "editor.formatOnSave": true, 22 | "editor.defaultFormatter": "esbenp.prettier-vscode", 23 | "prettier.singleQuote": false, 24 | "prettier.tabWidth": 2, 25 | "prettier.useTabs": false, 26 | "prettier.trailingComma": "all", 27 | "[gleam]": { 28 | "editor.defaultFormatter": "gleam.gleam" 29 | }, 30 | "typescript.tsdk": "📦 example/node_modules/typescript/lib" 31 | }, 32 | "extensions": { 33 | "recommendations": ["gleam.gleam"] 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /packages/ts-gleam/README.md: -------------------------------------------------------------------------------- 1 | # ts-gleam [![npm](https://img.shields.io/npm/v/ts-gleam)](https://npmjs.com/ckage/ts-gleam) 2 | 3 | TypeScript LSP Plugin for importing [Gleam](https://gleam.run) files. 4 | 5 | ## Usage 6 | 7 | 1. Create a new Gleam project. 8 | 2. In `gleam.toml`, set `target=javascript` and under `[javascript]` set `typescript_declarations=true`. 9 | 3. `npm add ts-gleam` 10 | 4. Create a `tsconfig.json`/`jsconfig.json` and set `compilerOptions.plugins` to `[{"name": "ts-gleam"}]` 11 | 5. Build your Gleam project when ever you have changes and import away! 12 | 13 | ## Note 14 | 15 | This **does not** build and resolve imports for your. All this is, is for the LSP to type check correctly. 16 | For building with Gleam/JavaScript, check out [`vite-gleam`](https://github.com/Enderchief/gleam-tools/tree/master/packages/vite-gleam) or to quickly scaffold an app try [`create-gleam`](https://github.com/Enderchief/create-gleam). 17 | -------------------------------------------------------------------------------- /packages/example/src/main.ts: -------------------------------------------------------------------------------- 1 | import "./style.css"; 2 | import gleamLogo from "./gleam.svg"; 3 | import viteLogo from "/vite.svg"; 4 | import { setup_counter } from "./counter.gleam"; 5 | 6 | document.querySelector("#app")!.innerHTML = ` 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |

Vite + Gleam

15 |
16 | 17 |
18 |

19 | Click on the Vite and Gleam logos to learn more 20 |

21 |
22 | `; 23 | 24 | setup_counter( 25 | document.querySelector("#counter")!, 26 | document.querySelector("#count")!, 27 | ); 28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Enderchief 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /packages/ts-gleam/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "paths": ["src/**"], 3 | "exclude": ["example"], 4 | "compilerOptions": { 5 | "target": "es2017", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 6 | "module": "commonjs", /* Specify what module code is generated. */ 7 | "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 8 | "outDir": "./out", /* Specify an output folder for all emitted files. */ 9 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ 10 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 11 | "strict": true, /* Enable all strict type-checking options. */ 12 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/example/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Enderchief 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /packages/ts-gleam/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Enderchief 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /packages/vite-gleam/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Enderchief 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /packages/vite-gleam/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-gleam", 3 | "version": "1.7.1", 4 | "description": "Import directly from *.gleam files using Vite", 5 | "repository": { 6 | "url": "https://github.com/Enderchief/gleam-tools/tree/master/packages/vite-gleam" 7 | }, 8 | "scripts": { 9 | "build": "tsdown", 10 | "dev": "tsdown --watch src", 11 | "format": "prettier -w src" 12 | }, 13 | "main": "./dist/index.js", 14 | "module": "./dist/index.mjs", 15 | "types": "./dist/index.d.mts", 16 | "exports": { 17 | ".": { 18 | "types": "./dist/index.d.mts", 19 | "import": "./dist/index.mjs", 20 | "require": "./dist/index.js", 21 | "default": "./dist/index.mjs" 22 | } 23 | }, 24 | "keywords": [ 25 | "gleam", 26 | "vite", 27 | "vite-plugin" 28 | ], 29 | "files": [ 30 | "dist" 31 | ], 32 | "author": "Enderchief", 33 | "license": "MIT", 34 | "devDependencies": { 35 | "@types/node": "^20.19.25", 36 | "prettier": "^3.6.2", 37 | "tsdown": "^0.16.6" 38 | }, 39 | "dependencies": { 40 | "magic-string": "^0.30.21", 41 | "toml": "^3.0.0", 42 | "vite": "^7.2.4" 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /packages/vite-gleam/README.md: -------------------------------------------------------------------------------- 1 | # vite-gleam [![npm](https://img.shields.io/npm/v/vite-gleam)](https://npmjs.com/package/vite-gleam) 2 | 3 | Import from [Gleam](https://gleam.run/) (`*.gleam`) files directly. 4 | 5 | Given the version number X.Y.Z, X refers to a breaking change, Y refers to the Vite version, and Z refers to a minor change. 6 | 7 | ## Usage 8 | 9 | 1. `npm i vite-gleam` 10 | 2. Create a basic Vite project (`npm create vite`) 11 | 3. Create a `gleam.toml` and add Gleam dependencies 12 | 4. Update your vite config 13 | 14 | ```ts 15 | // vite.config.{ts,js} 16 | import gleam from "vite-gleam"; 17 | 18 | export default { 19 | plugins: [gleam()], 20 | }; 21 | ``` 22 | 23 | 5. Start importing from Gleam! 24 | 25 | ## Note 26 | 27 | By default, TypeScript (LSP) will complain about importing files with the `.gleam` extension. There are two choices for fixes: 28 | 29 | - If the type of the import doesn't matter , add `declare module "*.gleam";` inside any TypeScript file. A caveat is the LSP does not know if an export exists so it will not provide autocompletion when importing a Gleam file and it will type exports as `any`. 30 | - Alternatively, if the vite dev server is running you can have full type safety when importing from Gleam. `npm i ts-gleam`. Create a `tsconfig.json`/`jsconfig.json` and set `compilerOptions.plugins` to `[{"name": "ts-gleam"}]` 31 | -------------------------------------------------------------------------------- /packages/ts-gleam/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (https://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # TypeScript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | .DS_Store 45 | 46 | # Optional eslint cache 47 | .eslintcache 48 | 49 | # Optional REPL history 50 | .node_repl_history 51 | 52 | # Output of 'npm pack' 53 | *.tgz 54 | 55 | # Yarn Integrity file 56 | .yarn-integrity 57 | 58 | # dotenv environment variables file 59 | .env 60 | 61 | # next.js build output 62 | .next 63 | 64 | # cra 65 | .cache 66 | 67 | # tdsx 68 | dist 69 | 70 | .yarn/cache 71 | .yarn/unplugged 72 | .yarn/build-state.yml 73 | .yarn/install-state.gz 74 | out -------------------------------------------------------------------------------- /packages/example/public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/example/src/style.css: -------------------------------------------------------------------------------- 1 | :root { 2 | font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; 3 | line-height: 1.5; 4 | font-weight: 400; 5 | 6 | color-scheme: light dark; 7 | color: rgba(255, 255, 255, 0.87); 8 | background-color: #242424; 9 | 10 | font-synthesis: none; 11 | text-rendering: optimizeLegibility; 12 | -webkit-font-smoothing: antialiased; 13 | -moz-osx-font-smoothing: grayscale; 14 | -webkit-text-size-adjust: 100%; 15 | } 16 | 17 | a { 18 | font-weight: 500; 19 | color: #646cff; 20 | text-decoration: inherit; 21 | } 22 | a:hover { 23 | color: #535bf2; 24 | } 25 | 26 | body { 27 | margin: 0; 28 | display: flex; 29 | place-items: center; 30 | min-width: 320px; 31 | min-height: 100vh; 32 | } 33 | 34 | h1 { 35 | font-size: 3.2em; 36 | line-height: 1.1; 37 | } 38 | 39 | #app { 40 | max-width: 1280px; 41 | margin: 0 auto; 42 | padding: 2rem; 43 | text-align: center; 44 | } 45 | 46 | .logo { 47 | height: 6em; 48 | padding: 1.5em; 49 | will-change: filter; 50 | transition: filter 300ms; 51 | } 52 | .logo:hover { 53 | filter: drop-shadow(0 0 2em #646cffaa); 54 | } 55 | .logo.gleam:hover { 56 | filter: drop-shadow(0 0 2em #ffaff3aa); 57 | } 58 | 59 | .card { 60 | padding: 2em; 61 | } 62 | 63 | .read-the-docs { 64 | color: #888; 65 | } 66 | 67 | button { 68 | border-radius: 8px; 69 | border: 1px solid transparent; 70 | padding: 0.6em 1.2em; 71 | font-size: 1em; 72 | font-weight: 500; 73 | font-family: inherit; 74 | background-color: #1a1a1a; 75 | cursor: pointer; 76 | transition: border-color 0.25s; 77 | } 78 | button:hover { 79 | border-color: #646cff; 80 | } 81 | button:focus, 82 | button:focus-visible { 83 | outline: 4px auto -webkit-focus-ring-color; 84 | } 85 | 86 | @media (prefers-color-scheme: light) { 87 | :root { 88 | color: #213547; 89 | background-color: #ffffff; 90 | } 91 | a:hover { 92 | color: #747bff; 93 | } 94 | button { 95 | background-color: #f9f9f9; 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /packages/vite-gleam/src/index.ts: -------------------------------------------------------------------------------- 1 | import { lstat, readdir, readFile } from "node:fs/promises"; 2 | 3 | import type { Plugin } from "vite"; 4 | import { execSync } from "node:child_process"; 5 | import { parse } from "toml"; 6 | import { join, relative, resolve, sep } from "node:path"; 7 | import MagicString from "magic-string"; 8 | 9 | interface GleamConfig { 10 | name: string; 11 | version: string; 12 | target: string; 13 | } 14 | 15 | let gleam_config: GleamConfig | undefined = undefined; 16 | 17 | export async function readDeps(BASE_PATH = `.${sep}build${sep}packages`) { 18 | let stat = await lstat(BASE_PATH); 19 | if (!stat.isDirectory()) return; 20 | return makeDeps(BASE_PATH, {}); 21 | } 22 | 23 | async function makeDeps(path: string, o: Record = {}) { 24 | const stat = await lstat(path); 25 | if (stat.isDirectory()) { 26 | await Promise.allSettled( 27 | (await readdir(path)).map( 28 | async (p) => await makeDeps(`${path}${sep}${p}`, o), 29 | ), 30 | ); 31 | } else if (stat.isFile()) { 32 | const f = await readFile(path, { encoding: "utf8" }); 33 | o[path.slice(1)] = f; 34 | } 35 | 36 | return o; 37 | } 38 | 39 | export async function build() { 40 | if (!gleam_config) throw new Error("gleam.toml not found"); 41 | console.log("$ gleam build --target=javascript"); 42 | const out = execSync("gleam build --target=javascript", { encoding: "utf8" }); 43 | console.log(out); 44 | } 45 | 46 | export function jsPath(id: string): string { 47 | id = id.replace(".gleam", ".mjs"); 48 | 49 | let path = relative(resolve("."), id); 50 | if (path.startsWith("src")) { 51 | path = path.replace(`src${sep}`, `${gleam_config?.name}${sep}`); 52 | } 53 | 54 | return path; 55 | } 56 | 57 | export default async function gleamVite(): Promise { 58 | return { 59 | name: "gleam", 60 | config(config, env) { 61 | config.build ||= {}; 62 | if (config.build.watch === null || config.build.watch === undefined) 63 | return; 64 | if (typeof config.build.watch !== "object") config.build.watch = {}; 65 | let origin = config.build.watch!.exclude; 66 | if (!origin) origin = []; 67 | else if (typeof origin !== "object") origin = [origin]; 68 | 69 | (origin).push("build/**"); 70 | config.build.watch!.exclude = origin; 71 | }, 72 | async buildStart() { 73 | const toml_exist = await lstat(`.${sep}gleam.toml`); 74 | if (!toml_exist.isFile()) throw Error("gleam.toml not found"); 75 | const file = await readFile(`.${sep}gleam.toml`, { encoding: "utf8" }); 76 | gleam_config = parse(file) as GleamConfig; 77 | 78 | await build(); 79 | }, 80 | async resolveId(source, importer) { 81 | if (!importer) return; 82 | else if (source.startsWith("hex:")) { 83 | const path = join( 84 | resolve("."), 85 | `${sep}build${sep}dev${sep}javascript`, 86 | source.slice(4), 87 | ); 88 | return { id: path }; 89 | } 90 | 91 | if (!importer.endsWith(".gleam") && !source.endsWith("gleam.mjs")) return; 92 | 93 | importer = jsPath(importer); 94 | 95 | const path = join( 96 | resolve("."), 97 | "/build/dev/javascript/", 98 | importer, 99 | "..", 100 | source, 101 | ); 102 | return { 103 | id: path, 104 | }; 105 | }, 106 | async transform(code, id) { 107 | if (!id.endsWith(".gleam")) return; 108 | 109 | const path = id.replace(".gleam", ".mjs"); 110 | 111 | const file = await readFile( 112 | `.${sep}build${sep}dev${sep}javascript${sep}${jsPath(path)}`, 113 | { 114 | encoding: "utf8", 115 | }, 116 | ); 117 | 118 | const s = new MagicString(code); 119 | s.overwrite(0, code.length - 1, file); 120 | 121 | const map = s.generateMap({ source: id, includeContent: true }); 122 | 123 | return { 124 | code: file, 125 | map: map, 126 | }; 127 | }, 128 | async handleHotUpdate(ctx) { 129 | if (ctx.file.endsWith(".gleam")) await build(); 130 | }, 131 | } satisfies Plugin; 132 | } 133 | -------------------------------------------------------------------------------- /packages/ts-gleam/src/index.ts: -------------------------------------------------------------------------------- 1 | import fs from "node:fs"; 2 | import path from "node:path"; 3 | import { JsonArray, JsonMap, parse } from "@iarna/toml"; 4 | import type tsModule from "typescript/lib/tsserverlibrary.js"; 5 | 6 | const GLEAM_REGEX = /\.gleam/; 7 | 8 | function _isGleam(fileName: string): boolean { 9 | return GLEAM_REGEX.test(fileName); 10 | } 11 | 12 | function _hasDeclaration( 13 | fileName: string, 14 | projectName: string, 15 | logger: tsModule.server.Logger, 16 | ) { 17 | const _filepath = fileName 18 | .replace("/src/", `/build/dev/javascript/${projectName}/`) 19 | .replace(/\.gleam/, ".d.mts"); 20 | logger.info(`[ts-gleam] checking if declaration exists at "${_filepath}"`); 21 | return fs.existsSync(_filepath); 22 | } 23 | 24 | function getDtsSnapshot( 25 | ts: typeof tsModule, 26 | projectName: string, 27 | fileName: string, 28 | logger: tsModule.server.Logger, 29 | ): tsModule.IScriptSnapshot { 30 | const _filepath = fileName 31 | .replace("/src/", `/build/dev/javascript/${projectName}/`) 32 | .replace(/\.gleam/, ".d.mts"); 33 | logger.info(`[ts-gleam] loading declaration from ${_filepath}`); 34 | const _file = fs.readFileSync(_filepath, { encoding: "utf-8" }); 35 | const _dts = ts.ScriptSnapshot.fromString(_file); 36 | return _dts; 37 | } 38 | 39 | function init(modules: { 40 | typescript: typeof import("typescript/lib/tsserverlibrary.js"); 41 | }) { 42 | const ts = modules.typescript; 43 | 44 | function create(info: tsModule.server.PluginCreateInfo) { 45 | const logger = info.project.projectService.logger; 46 | 47 | logger.info("[ts-gleam] initializing ts-gleam"); 48 | 49 | const directory = info.project.getCurrentDirectory(); 50 | process.chdir(directory); 51 | 52 | const languageServiceHost = {} as Partial; 53 | const languageServiceHostProxy = new Proxy(info.languageServiceHost, { 54 | get(target, key: keyof tsModule.LanguageServiceHost) { 55 | return languageServiceHost[key] 56 | ? languageServiceHost[key] 57 | : target[key]; 58 | }, 59 | }); 60 | 61 | const languageService = ts.createLanguageService(languageServiceHostProxy); 62 | 63 | let projectName: string = "theta"; 64 | const _gleam_toml_path = path.join(directory, "./gleam.toml"); 65 | if (!fs.existsSync(_gleam_toml_path)) { 66 | debugger; 67 | logger.info("[ts-gleam] ERROR | gleam.toml does not exist"); 68 | return languageService; 69 | } 70 | const _gleam_toml_raw = fs.readFileSync(_gleam_toml_path, { 71 | encoding: "utf-8", 72 | }); 73 | 74 | let _gleam_toml: JsonMap; 75 | try { 76 | _gleam_toml = parse(_gleam_toml_raw); 77 | } catch (e) { 78 | logger.info(`[ts-gleam] ERROR | ${e}`); 79 | return languageService; 80 | } 81 | 82 | const _name = _gleam_toml["name"]; 83 | logger.info(`[ts-gleam] name is: "${_name}"`); 84 | if (typeof _name === "string") projectName = _name; 85 | else { 86 | logger.info(`[ts-gleam] ERROR | name does not exist`); 87 | return languageService; 88 | } 89 | if ( 90 | typeof _gleam_toml.javascript !== "object" || 91 | (_gleam_toml.javascript).typescript_declarations !== true 92 | ) { 93 | logger.info("[ts-gleam] ERROR | typescript declarations not enabled"); 94 | return languageService; 95 | } 96 | 97 | languageServiceHost.getScriptKind = (fileName) => { 98 | if (!info.languageServiceHost.getScriptKind) { 99 | return ts.ScriptKind.Unknown; 100 | } 101 | if ( 102 | _isGleam(fileName) && 103 | _hasDeclaration(fileName, projectName, logger) 104 | ) { 105 | return ts.ScriptKind.TS; 106 | } 107 | return info.languageServiceHost.getScriptKind(fileName); 108 | }; 109 | 110 | languageServiceHost.getScriptSnapshot = (fileName) => { 111 | if ( 112 | _isGleam(fileName) && 113 | _hasDeclaration(fileName, projectName, logger) 114 | ) { 115 | logger.info(`[ts-gleam] current: ${fileName}`); 116 | const dts = getDtsSnapshot(ts, projectName, fileName, logger); 117 | return dts; 118 | } 119 | return info.languageServiceHost.getScriptSnapshot(fileName); 120 | }; 121 | 122 | function createModuleResolver(containingFile: string) { 123 | return ( 124 | moduleName: tsModule.StringLiteralLike, 125 | resolveModule: () => 126 | | tsModule.ResolvedModuleWithFailedLookupLocations 127 | | undefined, 128 | ): tsModule.ResolvedModuleFull | undefined => { 129 | const p = path.resolve(path.dirname(containingFile), moduleName.text); 130 | if (_isGleam(moduleName.text)) { 131 | return { 132 | extension: ts.Extension.Dts, 133 | isExternalLibraryImport: false, 134 | resolvedFileName: p 135 | .replace("/src/", `/build/dev/javascript/${projectName}/`) 136 | .replace(/\.gleam/, ".d.mts"), 137 | }; 138 | } 139 | }; 140 | } 141 | 142 | if (info.languageServiceHost.resolveModuleNameLiterals) { 143 | const _resolveModuleNameLiterals = 144 | info.languageServiceHost.resolveModuleNameLiterals!.bind( 145 | info.languageServiceHost, 146 | ); 147 | languageServiceHost.resolveModuleNameLiterals = ( 148 | modulesLiterals, 149 | containingFile, 150 | ...rest 151 | ) => { 152 | const resolvedModules = _resolveModuleNameLiterals( 153 | modulesLiterals, 154 | containingFile, 155 | ...rest, 156 | ); 157 | 158 | const moduleResolver = createModuleResolver(containingFile); 159 | 160 | return modulesLiterals.map((moduleName, index) => { 161 | try { 162 | const resolvedModule = moduleResolver( 163 | moduleName, 164 | () => 165 | languageServiceHost.getResolvedModuleWithFailedLookupLocationsFromCache?.( 166 | moduleName.text, 167 | containingFile, 168 | ), 169 | ); 170 | 171 | if (resolvedModule) return { resolvedModule }; 172 | } catch (e) { 173 | logger.info(`[ts-gleam] ERR: ${e}`); 174 | return resolvedModules[index]; 175 | } 176 | return resolvedModules[index]; 177 | }); 178 | }; 179 | } 180 | 181 | return languageService; 182 | } 183 | 184 | function getExternalFiles( 185 | project: tsModule.server.ConfiguredProject, 186 | ): string[] { 187 | return project.getFileNames().filter(_isGleam); 188 | } 189 | 190 | return { create, getExternalFiles }; 191 | } 192 | 193 | export = init; 194 | -------------------------------------------------------------------------------- /packages/example/src/gleam.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: {} 10 | 11 | packages/example: 12 | devDependencies: 13 | ts-gleam: 14 | specifier: file:../ts-gleam 15 | version: link:../ts-gleam 16 | typescript: 17 | specifier: ^5.9.3 18 | version: 5.9.3 19 | vite: 20 | specifier: ^7.2.4 21 | version: 7.2.4(@types/node@20.19.25)(yaml@2.8.1) 22 | vite-gleam: 23 | specifier: link:../vite-gleam 24 | version: link:../vite-gleam 25 | vite-plugin-inspect: 26 | specifier: ^11.3.3 27 | version: 11.3.3(vite@7.2.4(@types/node@20.19.25)(yaml@2.8.1)) 28 | 29 | packages/ts-gleam: 30 | dependencies: 31 | '@iarna/toml': 32 | specifier: ^2.2.5 33 | version: 2.2.5 34 | typescript: 35 | specifier: ^5.9.3 36 | version: 5.9.3 37 | 38 | packages/vite-gleam: 39 | dependencies: 40 | magic-string: 41 | specifier: ^0.30.21 42 | version: 0.30.21 43 | toml: 44 | specifier: ^3.0.0 45 | version: 3.0.0 46 | vite: 47 | specifier: ^7.2.4 48 | version: 7.2.4(@types/node@20.19.25)(yaml@2.8.1) 49 | devDependencies: 50 | '@types/node': 51 | specifier: ^20.19.25 52 | version: 20.19.25 53 | prettier: 54 | specifier: ^3.6.2 55 | version: 3.6.2 56 | tsdown: 57 | specifier: ^0.16.6 58 | version: 0.16.6(typescript@5.9.3) 59 | 60 | packages: 61 | 62 | '@babel/generator@7.28.5': 63 | resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} 64 | engines: {node: '>=6.9.0'} 65 | 66 | '@babel/helper-string-parser@7.27.1': 67 | resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 68 | engines: {node: '>=6.9.0'} 69 | 70 | '@babel/helper-validator-identifier@7.28.5': 71 | resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} 72 | engines: {node: '>=6.9.0'} 73 | 74 | '@babel/parser@7.28.5': 75 | resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} 76 | engines: {node: '>=6.0.0'} 77 | hasBin: true 78 | 79 | '@babel/types@7.28.5': 80 | resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} 81 | engines: {node: '>=6.9.0'} 82 | 83 | '@emnapi/core@1.7.1': 84 | resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} 85 | 86 | '@emnapi/runtime@1.7.1': 87 | resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} 88 | 89 | '@emnapi/wasi-threads@1.1.0': 90 | resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} 91 | 92 | '@esbuild/aix-ppc64@0.25.12': 93 | resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} 94 | engines: {node: '>=18'} 95 | cpu: [ppc64] 96 | os: [aix] 97 | 98 | '@esbuild/android-arm64@0.25.12': 99 | resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} 100 | engines: {node: '>=18'} 101 | cpu: [arm64] 102 | os: [android] 103 | 104 | '@esbuild/android-arm@0.25.12': 105 | resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} 106 | engines: {node: '>=18'} 107 | cpu: [arm] 108 | os: [android] 109 | 110 | '@esbuild/android-x64@0.25.12': 111 | resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} 112 | engines: {node: '>=18'} 113 | cpu: [x64] 114 | os: [android] 115 | 116 | '@esbuild/darwin-arm64@0.25.12': 117 | resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} 118 | engines: {node: '>=18'} 119 | cpu: [arm64] 120 | os: [darwin] 121 | 122 | '@esbuild/darwin-x64@0.25.12': 123 | resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} 124 | engines: {node: '>=18'} 125 | cpu: [x64] 126 | os: [darwin] 127 | 128 | '@esbuild/freebsd-arm64@0.25.12': 129 | resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} 130 | engines: {node: '>=18'} 131 | cpu: [arm64] 132 | os: [freebsd] 133 | 134 | '@esbuild/freebsd-x64@0.25.12': 135 | resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} 136 | engines: {node: '>=18'} 137 | cpu: [x64] 138 | os: [freebsd] 139 | 140 | '@esbuild/linux-arm64@0.25.12': 141 | resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} 142 | engines: {node: '>=18'} 143 | cpu: [arm64] 144 | os: [linux] 145 | 146 | '@esbuild/linux-arm@0.25.12': 147 | resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} 148 | engines: {node: '>=18'} 149 | cpu: [arm] 150 | os: [linux] 151 | 152 | '@esbuild/linux-ia32@0.25.12': 153 | resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} 154 | engines: {node: '>=18'} 155 | cpu: [ia32] 156 | os: [linux] 157 | 158 | '@esbuild/linux-loong64@0.25.12': 159 | resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} 160 | engines: {node: '>=18'} 161 | cpu: [loong64] 162 | os: [linux] 163 | 164 | '@esbuild/linux-mips64el@0.25.12': 165 | resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} 166 | engines: {node: '>=18'} 167 | cpu: [mips64el] 168 | os: [linux] 169 | 170 | '@esbuild/linux-ppc64@0.25.12': 171 | resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} 172 | engines: {node: '>=18'} 173 | cpu: [ppc64] 174 | os: [linux] 175 | 176 | '@esbuild/linux-riscv64@0.25.12': 177 | resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} 178 | engines: {node: '>=18'} 179 | cpu: [riscv64] 180 | os: [linux] 181 | 182 | '@esbuild/linux-s390x@0.25.12': 183 | resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} 184 | engines: {node: '>=18'} 185 | cpu: [s390x] 186 | os: [linux] 187 | 188 | '@esbuild/linux-x64@0.25.12': 189 | resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} 190 | engines: {node: '>=18'} 191 | cpu: [x64] 192 | os: [linux] 193 | 194 | '@esbuild/netbsd-arm64@0.25.12': 195 | resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} 196 | engines: {node: '>=18'} 197 | cpu: [arm64] 198 | os: [netbsd] 199 | 200 | '@esbuild/netbsd-x64@0.25.12': 201 | resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} 202 | engines: {node: '>=18'} 203 | cpu: [x64] 204 | os: [netbsd] 205 | 206 | '@esbuild/openbsd-arm64@0.25.12': 207 | resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} 208 | engines: {node: '>=18'} 209 | cpu: [arm64] 210 | os: [openbsd] 211 | 212 | '@esbuild/openbsd-x64@0.25.12': 213 | resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} 214 | engines: {node: '>=18'} 215 | cpu: [x64] 216 | os: [openbsd] 217 | 218 | '@esbuild/openharmony-arm64@0.25.12': 219 | resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} 220 | engines: {node: '>=18'} 221 | cpu: [arm64] 222 | os: [openharmony] 223 | 224 | '@esbuild/sunos-x64@0.25.12': 225 | resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} 226 | engines: {node: '>=18'} 227 | cpu: [x64] 228 | os: [sunos] 229 | 230 | '@esbuild/win32-arm64@0.25.12': 231 | resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} 232 | engines: {node: '>=18'} 233 | cpu: [arm64] 234 | os: [win32] 235 | 236 | '@esbuild/win32-ia32@0.25.12': 237 | resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} 238 | engines: {node: '>=18'} 239 | cpu: [ia32] 240 | os: [win32] 241 | 242 | '@esbuild/win32-x64@0.25.12': 243 | resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} 244 | engines: {node: '>=18'} 245 | cpu: [x64] 246 | os: [win32] 247 | 248 | '@iarna/toml@2.2.5': 249 | resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} 250 | 251 | '@jridgewell/gen-mapping@0.3.13': 252 | resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 253 | 254 | '@jridgewell/resolve-uri@3.1.2': 255 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 256 | engines: {node: '>=6.0.0'} 257 | 258 | '@jridgewell/sourcemap-codec@1.5.5': 259 | resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 260 | 261 | '@jridgewell/trace-mapping@0.3.31': 262 | resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 263 | 264 | '@napi-rs/wasm-runtime@1.0.7': 265 | resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} 266 | 267 | '@oxc-project/runtime@0.96.0': 268 | resolution: {integrity: sha512-34lh4o9CcSw09Hx6fKihPu85+m+4pmDlkXwJrLvN5nMq5JrcGhhihVM415zDqT8j8IixO1PYYdQZRN4SwQCncg==} 269 | engines: {node: ^20.19.0 || >=22.12.0} 270 | 271 | '@oxc-project/types@0.98.0': 272 | resolution: {integrity: sha512-Vzmd6FsqVuz5HQVcRC/hrx7Ujo3WEVeQP7C2UNP5uy1hUY4SQvMB+93jxkI1KRHz9a/6cni3glPOtvteN+zpsw==} 273 | 274 | '@polka/url@1.0.0-next.29': 275 | resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} 276 | 277 | '@quansync/fs@0.1.5': 278 | resolution: {integrity: sha512-lNS9hL2aS2NZgNW7BBj+6EBl4rOf8l+tQ0eRY6JWCI8jI2kc53gSoqbjojU0OnAWhzoXiOjFyGsHcDGePB3lhA==} 279 | 280 | '@rolldown/binding-android-arm64@1.0.0-beta.51': 281 | resolution: {integrity: sha512-Ctn8FUXKWWQI9pWC61P1yumS9WjQtelNS9riHwV7oCkknPGaAry4o7eFx2KgoLMnI2BgFJYpW7Im8/zX3BuONg==} 282 | engines: {node: ^20.19.0 || >=22.12.0} 283 | cpu: [arm64] 284 | os: [android] 285 | 286 | '@rolldown/binding-darwin-arm64@1.0.0-beta.51': 287 | resolution: {integrity: sha512-EL1aRW2Oq15ShUEkBPsDtLMO8GTqfb/ktM/dFaVzXKQiEE96Ss6nexMgfgQrg8dGnNpndFyffVDb5IdSibsu1g==} 288 | engines: {node: ^20.19.0 || >=22.12.0} 289 | cpu: [arm64] 290 | os: [darwin] 291 | 292 | '@rolldown/binding-darwin-x64@1.0.0-beta.51': 293 | resolution: {integrity: sha512-uGtYKlFen9pMIPvkHPWZVDtmYhMQi5g5Ddsndg1gf3atScKYKYgs5aDP4DhHeTwGXQglhfBG7lEaOIZ4UAIWww==} 294 | engines: {node: ^20.19.0 || >=22.12.0} 295 | cpu: [x64] 296 | os: [darwin] 297 | 298 | '@rolldown/binding-freebsd-x64@1.0.0-beta.51': 299 | resolution: {integrity: sha512-JRoVTQtHYbZj1P07JLiuTuXjiBtIa7ag7/qgKA6CIIXnAcdl4LrOf7nfDuHPJcuRKaP5dzecMgY99itvWfmUFQ==} 300 | engines: {node: ^20.19.0 || >=22.12.0} 301 | cpu: [x64] 302 | os: [freebsd] 303 | 304 | '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.51': 305 | resolution: {integrity: sha512-BKATVnpPZ0TYBW9XfDwyd4kPGgvf964HiotIwUgpMrFOFYWqpZ+9ONNzMV4UFAYC7Hb5C2qgYQk/qj2OnAd4RQ==} 306 | engines: {node: ^20.19.0 || >=22.12.0} 307 | cpu: [arm] 308 | os: [linux] 309 | 310 | '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.51': 311 | resolution: {integrity: sha512-xLd7da5jkfbVsBCm1buIRdWtuXY8+hU3+6ESXY/Tk5X5DPHaifrUblhYDgmA34dQt6WyNC2kfXGgrduPEvDI6Q==} 312 | engines: {node: ^20.19.0 || >=22.12.0} 313 | cpu: [arm64] 314 | os: [linux] 315 | 316 | '@rolldown/binding-linux-arm64-musl@1.0.0-beta.51': 317 | resolution: {integrity: sha512-EQFXTgHxxTzv3t5EmjUP/DfxzFYx9sMndfLsYaAY4DWF6KsK1fXGYsiupif6qPTViPC9eVmRm78q0pZU/kuIPg==} 318 | engines: {node: ^20.19.0 || >=22.12.0} 319 | cpu: [arm64] 320 | os: [linux] 321 | 322 | '@rolldown/binding-linux-x64-gnu@1.0.0-beta.51': 323 | resolution: {integrity: sha512-p5P6Xpa68w3yFaAdSzIZJbj+AfuDnMDqNSeglBXM7UlJT14Q4zwK+rV+8Mhp9MiUb4XFISZtbI/seBprhkQbiQ==} 324 | engines: {node: ^20.19.0 || >=22.12.0} 325 | cpu: [x64] 326 | os: [linux] 327 | 328 | '@rolldown/binding-linux-x64-musl@1.0.0-beta.51': 329 | resolution: {integrity: sha512-sNVVyLa8HB8wkFipdfz1s6i0YWinwpbMWk5hO5S+XAYH2UH67YzUT13gs6wZTKg2x/3gtgXzYnHyF5wMIqoDAw==} 330 | engines: {node: ^20.19.0 || >=22.12.0} 331 | cpu: [x64] 332 | os: [linux] 333 | 334 | '@rolldown/binding-openharmony-arm64@1.0.0-beta.51': 335 | resolution: {integrity: sha512-e/JMTz9Q8+T3g/deEi8DK44sFWZWGKr9AOCW5e8C8SCVWzAXqYXAG7FXBWBNzWEZK0Rcwo9TQHTQ9Q0gXgdCaA==} 336 | engines: {node: ^20.19.0 || >=22.12.0} 337 | cpu: [arm64] 338 | os: [openharmony] 339 | 340 | '@rolldown/binding-wasm32-wasi@1.0.0-beta.51': 341 | resolution: {integrity: sha512-We3LWqSu6J9s5Y0MK+N7fUiiu37aBGPG3Pc347EoaROuAwkCS2u9xJ5dpIyLW4B49CIbS3KaPmn4kTgPb3EyPw==} 342 | engines: {node: '>=14.0.0'} 343 | cpu: [wasm32] 344 | 345 | '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.51': 346 | resolution: {integrity: sha512-fj56buHRuMM+r/cb6ZYfNjNvO/0xeFybI6cTkTROJatdP4fvmQ1NS8D/Lm10FCSDEOkqIz8hK3TGpbAThbPHsA==} 347 | engines: {node: ^20.19.0 || >=22.12.0} 348 | cpu: [arm64] 349 | os: [win32] 350 | 351 | '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.51': 352 | resolution: {integrity: sha512-fkqEqaeEx8AySXiDm54b/RdINb3C0VovzJA3osMhZsbn6FoD73H0AOIiaVAtGr6x63hefruVKTX8irAm4Jkt2w==} 353 | engines: {node: ^20.19.0 || >=22.12.0} 354 | cpu: [ia32] 355 | os: [win32] 356 | 357 | '@rolldown/binding-win32-x64-msvc@1.0.0-beta.51': 358 | resolution: {integrity: sha512-CWuLG/HMtrVcjKGa0C4GnuxONrku89g0+CsH8nT0SNhOtREXuzwgjIXNJImpE/A/DMf9JF+1Xkrq/YRr+F/rCg==} 359 | engines: {node: ^20.19.0 || >=22.12.0} 360 | cpu: [x64] 361 | os: [win32] 362 | 363 | '@rolldown/pluginutils@1.0.0-beta.51': 364 | resolution: {integrity: sha512-51/8cNXMrqWqX3o8DZidhwz1uYq0BhHDDSfVygAND1Skx5s1TDw3APSSxCMcFFedwgqGcx34gRouwY+m404BBQ==} 365 | 366 | '@rollup/rollup-android-arm-eabi@4.53.3': 367 | resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} 368 | cpu: [arm] 369 | os: [android] 370 | 371 | '@rollup/rollup-android-arm64@4.53.3': 372 | resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} 373 | cpu: [arm64] 374 | os: [android] 375 | 376 | '@rollup/rollup-darwin-arm64@4.53.3': 377 | resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} 378 | cpu: [arm64] 379 | os: [darwin] 380 | 381 | '@rollup/rollup-darwin-x64@4.53.3': 382 | resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} 383 | cpu: [x64] 384 | os: [darwin] 385 | 386 | '@rollup/rollup-freebsd-arm64@4.53.3': 387 | resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} 388 | cpu: [arm64] 389 | os: [freebsd] 390 | 391 | '@rollup/rollup-freebsd-x64@4.53.3': 392 | resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} 393 | cpu: [x64] 394 | os: [freebsd] 395 | 396 | '@rollup/rollup-linux-arm-gnueabihf@4.53.3': 397 | resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} 398 | cpu: [arm] 399 | os: [linux] 400 | 401 | '@rollup/rollup-linux-arm-musleabihf@4.53.3': 402 | resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} 403 | cpu: [arm] 404 | os: [linux] 405 | 406 | '@rollup/rollup-linux-arm64-gnu@4.53.3': 407 | resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} 408 | cpu: [arm64] 409 | os: [linux] 410 | 411 | '@rollup/rollup-linux-arm64-musl@4.53.3': 412 | resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} 413 | cpu: [arm64] 414 | os: [linux] 415 | 416 | '@rollup/rollup-linux-loong64-gnu@4.53.3': 417 | resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} 418 | cpu: [loong64] 419 | os: [linux] 420 | 421 | '@rollup/rollup-linux-ppc64-gnu@4.53.3': 422 | resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} 423 | cpu: [ppc64] 424 | os: [linux] 425 | 426 | '@rollup/rollup-linux-riscv64-gnu@4.53.3': 427 | resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} 428 | cpu: [riscv64] 429 | os: [linux] 430 | 431 | '@rollup/rollup-linux-riscv64-musl@4.53.3': 432 | resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} 433 | cpu: [riscv64] 434 | os: [linux] 435 | 436 | '@rollup/rollup-linux-s390x-gnu@4.53.3': 437 | resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} 438 | cpu: [s390x] 439 | os: [linux] 440 | 441 | '@rollup/rollup-linux-x64-gnu@4.53.3': 442 | resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} 443 | cpu: [x64] 444 | os: [linux] 445 | 446 | '@rollup/rollup-linux-x64-musl@4.53.3': 447 | resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} 448 | cpu: [x64] 449 | os: [linux] 450 | 451 | '@rollup/rollup-openharmony-arm64@4.53.3': 452 | resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} 453 | cpu: [arm64] 454 | os: [openharmony] 455 | 456 | '@rollup/rollup-win32-arm64-msvc@4.53.3': 457 | resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} 458 | cpu: [arm64] 459 | os: [win32] 460 | 461 | '@rollup/rollup-win32-ia32-msvc@4.53.3': 462 | resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} 463 | cpu: [ia32] 464 | os: [win32] 465 | 466 | '@rollup/rollup-win32-x64-gnu@4.53.3': 467 | resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} 468 | cpu: [x64] 469 | os: [win32] 470 | 471 | '@rollup/rollup-win32-x64-msvc@4.53.3': 472 | resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} 473 | cpu: [x64] 474 | os: [win32] 475 | 476 | '@tybys/wasm-util@0.10.1': 477 | resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} 478 | 479 | '@types/estree@1.0.8': 480 | resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 481 | 482 | '@types/node@20.19.25': 483 | resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==} 484 | 485 | ansis@4.2.0: 486 | resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} 487 | engines: {node: '>=14'} 488 | 489 | ast-kit@2.2.0: 490 | resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==} 491 | engines: {node: '>=20.19.0'} 492 | 493 | birpc@2.8.0: 494 | resolution: {integrity: sha512-Bz2a4qD/5GRhiHSwj30c/8kC8QGj12nNDwz3D4ErQ4Xhy35dsSDvF+RA/tWpjyU0pdGtSDiEk6B5fBGE1qNVhw==} 495 | 496 | bundle-name@4.1.0: 497 | resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} 498 | engines: {node: '>=18'} 499 | 500 | cac@6.7.14: 501 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 502 | engines: {node: '>=8'} 503 | 504 | chokidar@4.0.3: 505 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 506 | engines: {node: '>= 14.16.0'} 507 | 508 | debug@4.4.3: 509 | resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 510 | engines: {node: '>=6.0'} 511 | peerDependencies: 512 | supports-color: '*' 513 | peerDependenciesMeta: 514 | supports-color: 515 | optional: true 516 | 517 | default-browser-id@5.0.1: 518 | resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} 519 | engines: {node: '>=18'} 520 | 521 | default-browser@5.4.0: 522 | resolution: {integrity: sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==} 523 | engines: {node: '>=18'} 524 | 525 | define-lazy-prop@3.0.0: 526 | resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} 527 | engines: {node: '>=12'} 528 | 529 | diff@8.0.2: 530 | resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} 531 | engines: {node: '>=0.3.1'} 532 | 533 | dts-resolver@2.1.3: 534 | resolution: {integrity: sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw==} 535 | engines: {node: '>=20.19.0'} 536 | peerDependencies: 537 | oxc-resolver: '>=11.0.0' 538 | peerDependenciesMeta: 539 | oxc-resolver: 540 | optional: true 541 | 542 | empathic@2.0.0: 543 | resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} 544 | engines: {node: '>=14'} 545 | 546 | error-stack-parser-es@1.0.5: 547 | resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} 548 | 549 | esbuild@0.25.12: 550 | resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} 551 | engines: {node: '>=18'} 552 | hasBin: true 553 | 554 | fdir@6.5.0: 555 | resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 556 | engines: {node: '>=12.0.0'} 557 | peerDependencies: 558 | picomatch: ^3 || ^4 559 | peerDependenciesMeta: 560 | picomatch: 561 | optional: true 562 | 563 | fsevents@2.3.3: 564 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 565 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 566 | os: [darwin] 567 | 568 | get-tsconfig@4.13.0: 569 | resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} 570 | 571 | hookable@5.5.3: 572 | resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} 573 | 574 | is-docker@3.0.0: 575 | resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} 576 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 577 | hasBin: true 578 | 579 | is-inside-container@1.0.0: 580 | resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} 581 | engines: {node: '>=14.16'} 582 | hasBin: true 583 | 584 | is-wsl@3.1.0: 585 | resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} 586 | engines: {node: '>=16'} 587 | 588 | jsesc@3.1.0: 589 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 590 | engines: {node: '>=6'} 591 | hasBin: true 592 | 593 | magic-string@0.30.21: 594 | resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} 595 | 596 | mrmime@2.0.1: 597 | resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} 598 | engines: {node: '>=10'} 599 | 600 | ms@2.1.3: 601 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 602 | 603 | nanoid@3.3.11: 604 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 605 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 606 | hasBin: true 607 | 608 | obug@2.1.0: 609 | resolution: {integrity: sha512-uu/tgLPoa75CFA7UDkmqspKbefvZh1WMPwkU3bNr0PY746a/+xwXVgbw5co5C3GvJj3h5u8g/pbxXzI0gd1QFg==} 610 | 611 | ohash@2.0.11: 612 | resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} 613 | 614 | open@10.2.0: 615 | resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} 616 | engines: {node: '>=18'} 617 | 618 | pathe@2.0.3: 619 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 620 | 621 | perfect-debounce@2.0.0: 622 | resolution: {integrity: sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==} 623 | 624 | picocolors@1.1.1: 625 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 626 | 627 | picomatch@4.0.3: 628 | resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 629 | engines: {node: '>=12'} 630 | 631 | postcss@8.5.6: 632 | resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 633 | engines: {node: ^10 || ^12 || >=14} 634 | 635 | prettier@3.6.2: 636 | resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} 637 | engines: {node: '>=14'} 638 | hasBin: true 639 | 640 | quansync@0.2.11: 641 | resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} 642 | 643 | readdirp@4.1.2: 644 | resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} 645 | engines: {node: '>= 14.18.0'} 646 | 647 | resolve-pkg-maps@1.0.0: 648 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 649 | 650 | rolldown-plugin-dts@0.18.0: 651 | resolution: {integrity: sha512-2CJtKYa9WPClZxkJeCt4bGUegQvQKQ1VJp9jFJzG0h8I/80XI6qDgoWfVJUOEhT2swbsRQh/42N1RIWvbXT4rA==} 652 | engines: {node: '>=20.19.0'} 653 | peerDependencies: 654 | '@ts-macro/tsc': ^0.3.6 655 | '@typescript/native-preview': '>=7.0.0-dev.20250601.1' 656 | rolldown: ^1.0.0-beta.51 657 | typescript: ^5.0.0 658 | vue-tsc: ~3.1.0 659 | peerDependenciesMeta: 660 | '@ts-macro/tsc': 661 | optional: true 662 | '@typescript/native-preview': 663 | optional: true 664 | typescript: 665 | optional: true 666 | vue-tsc: 667 | optional: true 668 | 669 | rolldown@1.0.0-beta.51: 670 | resolution: {integrity: sha512-ZRLgPlS91l4JztLYEZnmMcd3Umcla1hkXJgiEiR4HloRJBBoeaX8qogTu5Jfu36rRMVLndzqYv0h+M5gJAkUfg==} 671 | engines: {node: ^20.19.0 || >=22.12.0} 672 | hasBin: true 673 | 674 | rollup@4.53.3: 675 | resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} 676 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 677 | hasBin: true 678 | 679 | run-applescript@7.1.0: 680 | resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} 681 | engines: {node: '>=18'} 682 | 683 | semver@7.7.3: 684 | resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} 685 | engines: {node: '>=10'} 686 | hasBin: true 687 | 688 | sirv@3.0.2: 689 | resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} 690 | engines: {node: '>=18'} 691 | 692 | source-map-js@1.2.1: 693 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 694 | engines: {node: '>=0.10.0'} 695 | 696 | tinyexec@1.0.2: 697 | resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} 698 | engines: {node: '>=18'} 699 | 700 | tinyglobby@0.2.15: 701 | resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 702 | engines: {node: '>=12.0.0'} 703 | 704 | toml@3.0.0: 705 | resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} 706 | 707 | totalist@3.0.1: 708 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 709 | engines: {node: '>=6'} 710 | 711 | tree-kill@1.2.2: 712 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 713 | hasBin: true 714 | 715 | tsdown@0.16.6: 716 | resolution: {integrity: sha512-g3xHEnGdfwJTlXhEkqww3Q/KlCfyNFw4rnzuQ9Gqw8T2xjDYrw94qmSw5wYYTAW5zV1sEfWDlfgxZo5mmtu0NQ==} 717 | engines: {node: '>=20.19.0'} 718 | hasBin: true 719 | peerDependencies: 720 | '@arethetypeswrong/core': ^0.18.1 721 | '@vitejs/devtools': ^0.0.0-alpha.17 722 | publint: ^0.3.0 723 | typescript: ^5.0.0 724 | unplugin-lightningcss: ^0.4.0 725 | unplugin-unused: ^0.5.0 726 | peerDependenciesMeta: 727 | '@arethetypeswrong/core': 728 | optional: true 729 | '@vitejs/devtools': 730 | optional: true 731 | publint: 732 | optional: true 733 | typescript: 734 | optional: true 735 | unplugin-lightningcss: 736 | optional: true 737 | unplugin-unused: 738 | optional: true 739 | 740 | tslib@2.8.1: 741 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 742 | 743 | typescript@5.9.3: 744 | resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 745 | engines: {node: '>=14.17'} 746 | hasBin: true 747 | 748 | unconfig-core@7.4.1: 749 | resolution: {integrity: sha512-Bp/bPZjV2Vl/fofoA2OYLSnw1Z0MOhCX7zHnVCYrazpfZvseBbGhwcNQMxsg185Mqh7VZQqK3C8hFG/Dyng+yA==} 750 | 751 | undici-types@6.21.0: 752 | resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} 753 | 754 | unplugin-utils@0.3.1: 755 | resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==} 756 | engines: {node: '>=20.19.0'} 757 | 758 | unrun@0.2.11: 759 | resolution: {integrity: sha512-HjUuNLRGfRxMvxkwOuO/CpkSzdizTPPApbarLplsTzUm8Kex+nS9eomKU1qgVus6WGWkDYhtf/mgNxGEpyTR6A==} 760 | engines: {node: '>=20.19.0'} 761 | hasBin: true 762 | peerDependencies: 763 | synckit: ^0.11.11 764 | peerDependenciesMeta: 765 | synckit: 766 | optional: true 767 | 768 | vite-dev-rpc@1.1.0: 769 | resolution: {integrity: sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==} 770 | peerDependencies: 771 | vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0 772 | 773 | vite-hot-client@2.1.0: 774 | resolution: {integrity: sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==} 775 | peerDependencies: 776 | vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 777 | 778 | vite-plugin-inspect@11.3.3: 779 | resolution: {integrity: sha512-u2eV5La99oHoYPHE6UvbwgEqKKOQGz86wMg40CCosP6q8BkB6e5xPneZfYagK4ojPJSj5anHCrnvC20DpwVdRA==} 780 | engines: {node: '>=14'} 781 | peerDependencies: 782 | '@nuxt/kit': '*' 783 | vite: ^6.0.0 || ^7.0.0-0 784 | peerDependenciesMeta: 785 | '@nuxt/kit': 786 | optional: true 787 | 788 | vite@7.2.4: 789 | resolution: {integrity: sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==} 790 | engines: {node: ^20.19.0 || >=22.12.0} 791 | hasBin: true 792 | peerDependencies: 793 | '@types/node': ^20.19.0 || >=22.12.0 794 | jiti: '>=1.21.0' 795 | less: ^4.0.0 796 | lightningcss: ^1.21.0 797 | sass: ^1.70.0 798 | sass-embedded: ^1.70.0 799 | stylus: '>=0.54.8' 800 | sugarss: ^5.0.0 801 | terser: ^5.16.0 802 | tsx: ^4.8.1 803 | yaml: ^2.4.2 804 | peerDependenciesMeta: 805 | '@types/node': 806 | optional: true 807 | jiti: 808 | optional: true 809 | less: 810 | optional: true 811 | lightningcss: 812 | optional: true 813 | sass: 814 | optional: true 815 | sass-embedded: 816 | optional: true 817 | stylus: 818 | optional: true 819 | sugarss: 820 | optional: true 821 | terser: 822 | optional: true 823 | tsx: 824 | optional: true 825 | yaml: 826 | optional: true 827 | 828 | wsl-utils@0.1.0: 829 | resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} 830 | engines: {node: '>=18'} 831 | 832 | yaml@2.8.1: 833 | resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} 834 | engines: {node: '>= 14.6'} 835 | hasBin: true 836 | 837 | snapshots: 838 | 839 | '@babel/generator@7.28.5': 840 | dependencies: 841 | '@babel/parser': 7.28.5 842 | '@babel/types': 7.28.5 843 | '@jridgewell/gen-mapping': 0.3.13 844 | '@jridgewell/trace-mapping': 0.3.31 845 | jsesc: 3.1.0 846 | 847 | '@babel/helper-string-parser@7.27.1': {} 848 | 849 | '@babel/helper-validator-identifier@7.28.5': {} 850 | 851 | '@babel/parser@7.28.5': 852 | dependencies: 853 | '@babel/types': 7.28.5 854 | 855 | '@babel/types@7.28.5': 856 | dependencies: 857 | '@babel/helper-string-parser': 7.27.1 858 | '@babel/helper-validator-identifier': 7.28.5 859 | 860 | '@emnapi/core@1.7.1': 861 | dependencies: 862 | '@emnapi/wasi-threads': 1.1.0 863 | tslib: 2.8.1 864 | optional: true 865 | 866 | '@emnapi/runtime@1.7.1': 867 | dependencies: 868 | tslib: 2.8.1 869 | optional: true 870 | 871 | '@emnapi/wasi-threads@1.1.0': 872 | dependencies: 873 | tslib: 2.8.1 874 | optional: true 875 | 876 | '@esbuild/aix-ppc64@0.25.12': 877 | optional: true 878 | 879 | '@esbuild/android-arm64@0.25.12': 880 | optional: true 881 | 882 | '@esbuild/android-arm@0.25.12': 883 | optional: true 884 | 885 | '@esbuild/android-x64@0.25.12': 886 | optional: true 887 | 888 | '@esbuild/darwin-arm64@0.25.12': 889 | optional: true 890 | 891 | '@esbuild/darwin-x64@0.25.12': 892 | optional: true 893 | 894 | '@esbuild/freebsd-arm64@0.25.12': 895 | optional: true 896 | 897 | '@esbuild/freebsd-x64@0.25.12': 898 | optional: true 899 | 900 | '@esbuild/linux-arm64@0.25.12': 901 | optional: true 902 | 903 | '@esbuild/linux-arm@0.25.12': 904 | optional: true 905 | 906 | '@esbuild/linux-ia32@0.25.12': 907 | optional: true 908 | 909 | '@esbuild/linux-loong64@0.25.12': 910 | optional: true 911 | 912 | '@esbuild/linux-mips64el@0.25.12': 913 | optional: true 914 | 915 | '@esbuild/linux-ppc64@0.25.12': 916 | optional: true 917 | 918 | '@esbuild/linux-riscv64@0.25.12': 919 | optional: true 920 | 921 | '@esbuild/linux-s390x@0.25.12': 922 | optional: true 923 | 924 | '@esbuild/linux-x64@0.25.12': 925 | optional: true 926 | 927 | '@esbuild/netbsd-arm64@0.25.12': 928 | optional: true 929 | 930 | '@esbuild/netbsd-x64@0.25.12': 931 | optional: true 932 | 933 | '@esbuild/openbsd-arm64@0.25.12': 934 | optional: true 935 | 936 | '@esbuild/openbsd-x64@0.25.12': 937 | optional: true 938 | 939 | '@esbuild/openharmony-arm64@0.25.12': 940 | optional: true 941 | 942 | '@esbuild/sunos-x64@0.25.12': 943 | optional: true 944 | 945 | '@esbuild/win32-arm64@0.25.12': 946 | optional: true 947 | 948 | '@esbuild/win32-ia32@0.25.12': 949 | optional: true 950 | 951 | '@esbuild/win32-x64@0.25.12': 952 | optional: true 953 | 954 | '@iarna/toml@2.2.5': {} 955 | 956 | '@jridgewell/gen-mapping@0.3.13': 957 | dependencies: 958 | '@jridgewell/sourcemap-codec': 1.5.5 959 | '@jridgewell/trace-mapping': 0.3.31 960 | 961 | '@jridgewell/resolve-uri@3.1.2': {} 962 | 963 | '@jridgewell/sourcemap-codec@1.5.5': {} 964 | 965 | '@jridgewell/trace-mapping@0.3.31': 966 | dependencies: 967 | '@jridgewell/resolve-uri': 3.1.2 968 | '@jridgewell/sourcemap-codec': 1.5.5 969 | 970 | '@napi-rs/wasm-runtime@1.0.7': 971 | dependencies: 972 | '@emnapi/core': 1.7.1 973 | '@emnapi/runtime': 1.7.1 974 | '@tybys/wasm-util': 0.10.1 975 | optional: true 976 | 977 | '@oxc-project/runtime@0.96.0': {} 978 | 979 | '@oxc-project/types@0.98.0': {} 980 | 981 | '@polka/url@1.0.0-next.29': {} 982 | 983 | '@quansync/fs@0.1.5': 984 | dependencies: 985 | quansync: 0.2.11 986 | 987 | '@rolldown/binding-android-arm64@1.0.0-beta.51': 988 | optional: true 989 | 990 | '@rolldown/binding-darwin-arm64@1.0.0-beta.51': 991 | optional: true 992 | 993 | '@rolldown/binding-darwin-x64@1.0.0-beta.51': 994 | optional: true 995 | 996 | '@rolldown/binding-freebsd-x64@1.0.0-beta.51': 997 | optional: true 998 | 999 | '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.51': 1000 | optional: true 1001 | 1002 | '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.51': 1003 | optional: true 1004 | 1005 | '@rolldown/binding-linux-arm64-musl@1.0.0-beta.51': 1006 | optional: true 1007 | 1008 | '@rolldown/binding-linux-x64-gnu@1.0.0-beta.51': 1009 | optional: true 1010 | 1011 | '@rolldown/binding-linux-x64-musl@1.0.0-beta.51': 1012 | optional: true 1013 | 1014 | '@rolldown/binding-openharmony-arm64@1.0.0-beta.51': 1015 | optional: true 1016 | 1017 | '@rolldown/binding-wasm32-wasi@1.0.0-beta.51': 1018 | dependencies: 1019 | '@napi-rs/wasm-runtime': 1.0.7 1020 | optional: true 1021 | 1022 | '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.51': 1023 | optional: true 1024 | 1025 | '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.51': 1026 | optional: true 1027 | 1028 | '@rolldown/binding-win32-x64-msvc@1.0.0-beta.51': 1029 | optional: true 1030 | 1031 | '@rolldown/pluginutils@1.0.0-beta.51': {} 1032 | 1033 | '@rollup/rollup-android-arm-eabi@4.53.3': 1034 | optional: true 1035 | 1036 | '@rollup/rollup-android-arm64@4.53.3': 1037 | optional: true 1038 | 1039 | '@rollup/rollup-darwin-arm64@4.53.3': 1040 | optional: true 1041 | 1042 | '@rollup/rollup-darwin-x64@4.53.3': 1043 | optional: true 1044 | 1045 | '@rollup/rollup-freebsd-arm64@4.53.3': 1046 | optional: true 1047 | 1048 | '@rollup/rollup-freebsd-x64@4.53.3': 1049 | optional: true 1050 | 1051 | '@rollup/rollup-linux-arm-gnueabihf@4.53.3': 1052 | optional: true 1053 | 1054 | '@rollup/rollup-linux-arm-musleabihf@4.53.3': 1055 | optional: true 1056 | 1057 | '@rollup/rollup-linux-arm64-gnu@4.53.3': 1058 | optional: true 1059 | 1060 | '@rollup/rollup-linux-arm64-musl@4.53.3': 1061 | optional: true 1062 | 1063 | '@rollup/rollup-linux-loong64-gnu@4.53.3': 1064 | optional: true 1065 | 1066 | '@rollup/rollup-linux-ppc64-gnu@4.53.3': 1067 | optional: true 1068 | 1069 | '@rollup/rollup-linux-riscv64-gnu@4.53.3': 1070 | optional: true 1071 | 1072 | '@rollup/rollup-linux-riscv64-musl@4.53.3': 1073 | optional: true 1074 | 1075 | '@rollup/rollup-linux-s390x-gnu@4.53.3': 1076 | optional: true 1077 | 1078 | '@rollup/rollup-linux-x64-gnu@4.53.3': 1079 | optional: true 1080 | 1081 | '@rollup/rollup-linux-x64-musl@4.53.3': 1082 | optional: true 1083 | 1084 | '@rollup/rollup-openharmony-arm64@4.53.3': 1085 | optional: true 1086 | 1087 | '@rollup/rollup-win32-arm64-msvc@4.53.3': 1088 | optional: true 1089 | 1090 | '@rollup/rollup-win32-ia32-msvc@4.53.3': 1091 | optional: true 1092 | 1093 | '@rollup/rollup-win32-x64-gnu@4.53.3': 1094 | optional: true 1095 | 1096 | '@rollup/rollup-win32-x64-msvc@4.53.3': 1097 | optional: true 1098 | 1099 | '@tybys/wasm-util@0.10.1': 1100 | dependencies: 1101 | tslib: 2.8.1 1102 | optional: true 1103 | 1104 | '@types/estree@1.0.8': {} 1105 | 1106 | '@types/node@20.19.25': 1107 | dependencies: 1108 | undici-types: 6.21.0 1109 | 1110 | ansis@4.2.0: {} 1111 | 1112 | ast-kit@2.2.0: 1113 | dependencies: 1114 | '@babel/parser': 7.28.5 1115 | pathe: 2.0.3 1116 | 1117 | birpc@2.8.0: {} 1118 | 1119 | bundle-name@4.1.0: 1120 | dependencies: 1121 | run-applescript: 7.1.0 1122 | 1123 | cac@6.7.14: {} 1124 | 1125 | chokidar@4.0.3: 1126 | dependencies: 1127 | readdirp: 4.1.2 1128 | 1129 | debug@4.4.3: 1130 | dependencies: 1131 | ms: 2.1.3 1132 | 1133 | default-browser-id@5.0.1: {} 1134 | 1135 | default-browser@5.4.0: 1136 | dependencies: 1137 | bundle-name: 4.1.0 1138 | default-browser-id: 5.0.1 1139 | 1140 | define-lazy-prop@3.0.0: {} 1141 | 1142 | diff@8.0.2: {} 1143 | 1144 | dts-resolver@2.1.3: {} 1145 | 1146 | empathic@2.0.0: {} 1147 | 1148 | error-stack-parser-es@1.0.5: {} 1149 | 1150 | esbuild@0.25.12: 1151 | optionalDependencies: 1152 | '@esbuild/aix-ppc64': 0.25.12 1153 | '@esbuild/android-arm': 0.25.12 1154 | '@esbuild/android-arm64': 0.25.12 1155 | '@esbuild/android-x64': 0.25.12 1156 | '@esbuild/darwin-arm64': 0.25.12 1157 | '@esbuild/darwin-x64': 0.25.12 1158 | '@esbuild/freebsd-arm64': 0.25.12 1159 | '@esbuild/freebsd-x64': 0.25.12 1160 | '@esbuild/linux-arm': 0.25.12 1161 | '@esbuild/linux-arm64': 0.25.12 1162 | '@esbuild/linux-ia32': 0.25.12 1163 | '@esbuild/linux-loong64': 0.25.12 1164 | '@esbuild/linux-mips64el': 0.25.12 1165 | '@esbuild/linux-ppc64': 0.25.12 1166 | '@esbuild/linux-riscv64': 0.25.12 1167 | '@esbuild/linux-s390x': 0.25.12 1168 | '@esbuild/linux-x64': 0.25.12 1169 | '@esbuild/netbsd-arm64': 0.25.12 1170 | '@esbuild/netbsd-x64': 0.25.12 1171 | '@esbuild/openbsd-arm64': 0.25.12 1172 | '@esbuild/openbsd-x64': 0.25.12 1173 | '@esbuild/openharmony-arm64': 0.25.12 1174 | '@esbuild/sunos-x64': 0.25.12 1175 | '@esbuild/win32-arm64': 0.25.12 1176 | '@esbuild/win32-ia32': 0.25.12 1177 | '@esbuild/win32-x64': 0.25.12 1178 | 1179 | fdir@6.5.0(picomatch@4.0.3): 1180 | optionalDependencies: 1181 | picomatch: 4.0.3 1182 | 1183 | fsevents@2.3.3: 1184 | optional: true 1185 | 1186 | get-tsconfig@4.13.0: 1187 | dependencies: 1188 | resolve-pkg-maps: 1.0.0 1189 | 1190 | hookable@5.5.3: {} 1191 | 1192 | is-docker@3.0.0: {} 1193 | 1194 | is-inside-container@1.0.0: 1195 | dependencies: 1196 | is-docker: 3.0.0 1197 | 1198 | is-wsl@3.1.0: 1199 | dependencies: 1200 | is-inside-container: 1.0.0 1201 | 1202 | jsesc@3.1.0: {} 1203 | 1204 | magic-string@0.30.21: 1205 | dependencies: 1206 | '@jridgewell/sourcemap-codec': 1.5.5 1207 | 1208 | mrmime@2.0.1: {} 1209 | 1210 | ms@2.1.3: {} 1211 | 1212 | nanoid@3.3.11: {} 1213 | 1214 | obug@2.1.0: {} 1215 | 1216 | ohash@2.0.11: {} 1217 | 1218 | open@10.2.0: 1219 | dependencies: 1220 | default-browser: 5.4.0 1221 | define-lazy-prop: 3.0.0 1222 | is-inside-container: 1.0.0 1223 | wsl-utils: 0.1.0 1224 | 1225 | pathe@2.0.3: {} 1226 | 1227 | perfect-debounce@2.0.0: {} 1228 | 1229 | picocolors@1.1.1: {} 1230 | 1231 | picomatch@4.0.3: {} 1232 | 1233 | postcss@8.5.6: 1234 | dependencies: 1235 | nanoid: 3.3.11 1236 | picocolors: 1.1.1 1237 | source-map-js: 1.2.1 1238 | 1239 | prettier@3.6.2: {} 1240 | 1241 | quansync@0.2.11: {} 1242 | 1243 | readdirp@4.1.2: {} 1244 | 1245 | resolve-pkg-maps@1.0.0: {} 1246 | 1247 | rolldown-plugin-dts@0.18.0(rolldown@1.0.0-beta.51)(typescript@5.9.3): 1248 | dependencies: 1249 | '@babel/generator': 7.28.5 1250 | '@babel/parser': 7.28.5 1251 | '@babel/types': 7.28.5 1252 | ast-kit: 2.2.0 1253 | birpc: 2.8.0 1254 | dts-resolver: 2.1.3 1255 | get-tsconfig: 4.13.0 1256 | magic-string: 0.30.21 1257 | obug: 2.1.0 1258 | rolldown: 1.0.0-beta.51 1259 | optionalDependencies: 1260 | typescript: 5.9.3 1261 | transitivePeerDependencies: 1262 | - oxc-resolver 1263 | 1264 | rolldown@1.0.0-beta.51: 1265 | dependencies: 1266 | '@oxc-project/types': 0.98.0 1267 | '@rolldown/pluginutils': 1.0.0-beta.51 1268 | optionalDependencies: 1269 | '@rolldown/binding-android-arm64': 1.0.0-beta.51 1270 | '@rolldown/binding-darwin-arm64': 1.0.0-beta.51 1271 | '@rolldown/binding-darwin-x64': 1.0.0-beta.51 1272 | '@rolldown/binding-freebsd-x64': 1.0.0-beta.51 1273 | '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.51 1274 | '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.51 1275 | '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.51 1276 | '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.51 1277 | '@rolldown/binding-linux-x64-musl': 1.0.0-beta.51 1278 | '@rolldown/binding-openharmony-arm64': 1.0.0-beta.51 1279 | '@rolldown/binding-wasm32-wasi': 1.0.0-beta.51 1280 | '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.51 1281 | '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.51 1282 | '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.51 1283 | 1284 | rollup@4.53.3: 1285 | dependencies: 1286 | '@types/estree': 1.0.8 1287 | optionalDependencies: 1288 | '@rollup/rollup-android-arm-eabi': 4.53.3 1289 | '@rollup/rollup-android-arm64': 4.53.3 1290 | '@rollup/rollup-darwin-arm64': 4.53.3 1291 | '@rollup/rollup-darwin-x64': 4.53.3 1292 | '@rollup/rollup-freebsd-arm64': 4.53.3 1293 | '@rollup/rollup-freebsd-x64': 4.53.3 1294 | '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 1295 | '@rollup/rollup-linux-arm-musleabihf': 4.53.3 1296 | '@rollup/rollup-linux-arm64-gnu': 4.53.3 1297 | '@rollup/rollup-linux-arm64-musl': 4.53.3 1298 | '@rollup/rollup-linux-loong64-gnu': 4.53.3 1299 | '@rollup/rollup-linux-ppc64-gnu': 4.53.3 1300 | '@rollup/rollup-linux-riscv64-gnu': 4.53.3 1301 | '@rollup/rollup-linux-riscv64-musl': 4.53.3 1302 | '@rollup/rollup-linux-s390x-gnu': 4.53.3 1303 | '@rollup/rollup-linux-x64-gnu': 4.53.3 1304 | '@rollup/rollup-linux-x64-musl': 4.53.3 1305 | '@rollup/rollup-openharmony-arm64': 4.53.3 1306 | '@rollup/rollup-win32-arm64-msvc': 4.53.3 1307 | '@rollup/rollup-win32-ia32-msvc': 4.53.3 1308 | '@rollup/rollup-win32-x64-gnu': 4.53.3 1309 | '@rollup/rollup-win32-x64-msvc': 4.53.3 1310 | fsevents: 2.3.3 1311 | 1312 | run-applescript@7.1.0: {} 1313 | 1314 | semver@7.7.3: {} 1315 | 1316 | sirv@3.0.2: 1317 | dependencies: 1318 | '@polka/url': 1.0.0-next.29 1319 | mrmime: 2.0.1 1320 | totalist: 3.0.1 1321 | 1322 | source-map-js@1.2.1: {} 1323 | 1324 | tinyexec@1.0.2: {} 1325 | 1326 | tinyglobby@0.2.15: 1327 | dependencies: 1328 | fdir: 6.5.0(picomatch@4.0.3) 1329 | picomatch: 4.0.3 1330 | 1331 | toml@3.0.0: {} 1332 | 1333 | totalist@3.0.1: {} 1334 | 1335 | tree-kill@1.2.2: {} 1336 | 1337 | tsdown@0.16.6(typescript@5.9.3): 1338 | dependencies: 1339 | ansis: 4.2.0 1340 | cac: 6.7.14 1341 | chokidar: 4.0.3 1342 | diff: 8.0.2 1343 | empathic: 2.0.0 1344 | hookable: 5.5.3 1345 | obug: 2.1.0 1346 | rolldown: 1.0.0-beta.51 1347 | rolldown-plugin-dts: 0.18.0(rolldown@1.0.0-beta.51)(typescript@5.9.3) 1348 | semver: 7.7.3 1349 | tinyexec: 1.0.2 1350 | tinyglobby: 0.2.15 1351 | tree-kill: 1.2.2 1352 | unconfig-core: 7.4.1 1353 | unrun: 0.2.11 1354 | optionalDependencies: 1355 | typescript: 5.9.3 1356 | transitivePeerDependencies: 1357 | - '@ts-macro/tsc' 1358 | - '@typescript/native-preview' 1359 | - oxc-resolver 1360 | - synckit 1361 | - vue-tsc 1362 | 1363 | tslib@2.8.1: 1364 | optional: true 1365 | 1366 | typescript@5.9.3: {} 1367 | 1368 | unconfig-core@7.4.1: 1369 | dependencies: 1370 | '@quansync/fs': 0.1.5 1371 | quansync: 0.2.11 1372 | 1373 | undici-types@6.21.0: {} 1374 | 1375 | unplugin-utils@0.3.1: 1376 | dependencies: 1377 | pathe: 2.0.3 1378 | picomatch: 4.0.3 1379 | 1380 | unrun@0.2.11: 1381 | dependencies: 1382 | '@oxc-project/runtime': 0.96.0 1383 | rolldown: 1.0.0-beta.51 1384 | 1385 | vite-dev-rpc@1.1.0(vite@7.2.4(@types/node@20.19.25)(yaml@2.8.1)): 1386 | dependencies: 1387 | birpc: 2.8.0 1388 | vite: 7.2.4(@types/node@20.19.25)(yaml@2.8.1) 1389 | vite-hot-client: 2.1.0(vite@7.2.4(@types/node@20.19.25)(yaml@2.8.1)) 1390 | 1391 | vite-hot-client@2.1.0(vite@7.2.4(@types/node@20.19.25)(yaml@2.8.1)): 1392 | dependencies: 1393 | vite: 7.2.4(@types/node@20.19.25)(yaml@2.8.1) 1394 | 1395 | vite-plugin-inspect@11.3.3(vite@7.2.4(@types/node@20.19.25)(yaml@2.8.1)): 1396 | dependencies: 1397 | ansis: 4.2.0 1398 | debug: 4.4.3 1399 | error-stack-parser-es: 1.0.5 1400 | ohash: 2.0.11 1401 | open: 10.2.0 1402 | perfect-debounce: 2.0.0 1403 | sirv: 3.0.2 1404 | unplugin-utils: 0.3.1 1405 | vite: 7.2.4(@types/node@20.19.25)(yaml@2.8.1) 1406 | vite-dev-rpc: 1.1.0(vite@7.2.4(@types/node@20.19.25)(yaml@2.8.1)) 1407 | transitivePeerDependencies: 1408 | - supports-color 1409 | 1410 | vite@7.2.4(@types/node@20.19.25)(yaml@2.8.1): 1411 | dependencies: 1412 | esbuild: 0.25.12 1413 | fdir: 6.5.0(picomatch@4.0.3) 1414 | picomatch: 4.0.3 1415 | postcss: 8.5.6 1416 | rollup: 4.53.3 1417 | tinyglobby: 0.2.15 1418 | optionalDependencies: 1419 | '@types/node': 20.19.25 1420 | fsevents: 2.3.3 1421 | yaml: 2.8.1 1422 | 1423 | wsl-utils@0.1.0: 1424 | dependencies: 1425 | is-wsl: 3.1.0 1426 | 1427 | yaml@2.8.1: 1428 | optional: true 1429 | --------------------------------------------------------------------------------