├── .github └── workflows │ ├── ci.yml │ └── release.yml ├── .gitignore ├── LICENSE ├── README.md ├── deno.json ├── package-lock.json ├── package.json ├── src ├── index.ts ├── prefixPlugin.ts ├── resolvePlugin.ts ├── resolver.ts └── utils.ts ├── tests ├── fixture │ ├── alias-hash-prefix.ts │ ├── alias-mapped.ts │ ├── alias-target.ts │ ├── alias.ts │ ├── deno.json │ ├── deno.lock │ ├── http.ts │ ├── inlineExternal.ts │ ├── inlineHttp.ts │ ├── inlineJsr.ts │ ├── inlineNpm.ts │ ├── jsr.ts │ ├── mapped │ │ ├── dep.ts │ │ ├── foo.ts │ │ └── main.ts │ ├── npm.ts │ ├── resolveInRootDir.ts │ └── vite.config.ts └── plugin.test.ts └── tsconfig.json /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | branches: [main] 8 | 9 | jobs: 10 | lint-and-format: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v4 14 | - uses: denoland/setup-deno@v2 15 | with: 16 | deno-version: v2.x 17 | - run: deno fmt --check 18 | - run: deno lint 19 | 20 | test: 21 | strategy: 22 | matrix: 23 | platform: [ubuntu-latest, macos-latest, windows-latest] 24 | node-version: ["22.x"] 25 | 26 | runs-on: ${{ matrix.platform }} 27 | 28 | steps: 29 | - uses: actions/checkout@v4 30 | - uses: denoland/setup-deno@v1 31 | with: 32 | deno-version: canary 33 | - name: Use Node.js ${{ matrix.node-version }} 34 | uses: actions/setup-node@v4 35 | with: 36 | node-version: ${{ matrix.node-version }} 37 | 38 | - run: npm i 39 | - run: npm run build --if-present 40 | - name: Build fixture 41 | working-directory: ./tests/fixture 42 | run: npx vite build --debug 43 | 44 | - run: npm test 45 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Publish Package to npmjs 2 | on: 3 | release: 4 | types: [published] 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | permissions: 9 | contents: read 10 | id-token: write 11 | steps: 12 | - uses: actions/checkout@v4 13 | # Setup .npmrc file to publish to npm 14 | - uses: actions/setup-node@v4 15 | with: 16 | node-version: "22.x" 17 | registry-url: "https://registry.npmjs.org" 18 | - run: npm ci 19 | - run: npm publish --access public 20 | env: 21 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Optional stylelint cache 58 | .stylelintcache 59 | 60 | # Microbundle cache 61 | .rpt2_cache/ 62 | .rts2_cache_cjs/ 63 | .rts2_cache_es/ 64 | .rts2_cache_umd/ 65 | 66 | # Optional REPL history 67 | .node_repl_history 68 | 69 | # Output of 'npm pack' 70 | *.tgz 71 | 72 | # Yarn Integrity file 73 | .yarn-integrity 74 | 75 | # dotenv environment variable files 76 | .env 77 | .env.development.local 78 | .env.test.local 79 | .env.production.local 80 | .env.local 81 | 82 | # parcel-bundler cache (https://parceljs.org/) 83 | .cache 84 | .parcel-cache 85 | 86 | # Next.js build output 87 | .next 88 | out 89 | 90 | # Nuxt.js build / generate output 91 | .nuxt 92 | dist 93 | 94 | # Gatsby files 95 | .cache/ 96 | # Comment in the public line in if your project uses Gatsby and not Next.js 97 | # https://nextjs.org/blog/next-9-1#public-directory-support 98 | # public 99 | 100 | # vuepress build output 101 | .vuepress/dist 102 | 103 | # vuepress v2.x temp and cache directory 104 | .temp 105 | .cache 106 | 107 | # Docusaurus cache and generated files 108 | .docusaurus 109 | 110 | # Serverless directories 111 | .serverless/ 112 | 113 | # FuseBox cache 114 | .fusebox/ 115 | 116 | # DynamoDB Local files 117 | .dynamodb/ 118 | 119 | # TernJS port file 120 | .tern-port 121 | 122 | # Stores VSCode versions used for testing VSCode extensions 123 | .vscode-test 124 | 125 | # yarn v2 126 | .yarn/cache 127 | .yarn/unplugged 128 | .yarn/build-state.yml 129 | .yarn/install-state.gz 130 | .pnp.* 131 | 132 | .vite/ 133 | 134 | # deno vendor 135 | vendor/ 136 | dist/ 137 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright 2024 the Deno authors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | 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, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Deno vite plugin 2 | 3 | Plugin to enable Deno resolution inside [vite](https://github.com/vitejs/vite). 4 | It supports: 5 | 6 | - Alias mappings in `deno.json` 7 | - `npm:` specifier 8 | - `jsr:` specifier 9 | - `http:` and `https:` specifiers 10 | 11 | ## Limitations 12 | 13 | Deno specific resolution cannot be used in `vite.config.ts` because it's not 14 | possible to intercept the bundling process of the config file in vite. 15 | 16 | ## Usage 17 | 18 | Install this package: 19 | 20 | ```sh 21 | # npm 22 | npm install @deno/vite-plugin 23 | # pnpm 24 | pnpm install @deno/vite-plugin 25 | # deno 26 | deno install npm:@deno/vite-plugin 27 | ``` 28 | 29 | Add the plugin to your vite configuration file `vite.config.ts`: 30 | 31 | ```diff 32 | import { defineConfig } from "vite"; 33 | + import deno from "@deno/vite-plugin"; 34 | 35 | export default defineConfig({ 36 | + plugins: [deno()], 37 | }); 38 | ``` 39 | 40 | ## License 41 | 42 | MIT, see [the license file](./LICENSE). 43 | -------------------------------------------------------------------------------- /deno.json: -------------------------------------------------------------------------------- 1 | { 2 | "unstable": ["sloppy-imports"], 3 | "lint": { 4 | "rules": { 5 | "exclude": ["no-sloppy-imports"] 6 | }, 7 | "exclude": ["tests/fixture/dist/", "dist/"] 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@deno/vite-plugin", 3 | "version": "1.0.4", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "@deno/vite-plugin", 9 | "version": "1.0.4", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "@types/node": "^22.5.5", 13 | "esbuild": "^0.23.1", 14 | "rimraf": "^6.0.1", 15 | "ts-node": "^10.9.2", 16 | "typescript": "^5.6.2", 17 | "vitest": "^2.1.1" 18 | }, 19 | "peerDependencies": { 20 | "vite": "5.x || 6.x" 21 | } 22 | }, 23 | "node_modules/@cspotcode/source-map-support": { 24 | "version": "0.8.1", 25 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 26 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 27 | "dev": true, 28 | "license": "MIT", 29 | "dependencies": { 30 | "@jridgewell/trace-mapping": "0.3.9" 31 | }, 32 | "engines": { 33 | "node": ">=12" 34 | } 35 | }, 36 | "node_modules/@esbuild/aix-ppc64": { 37 | "version": "0.23.1", 38 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", 39 | "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", 40 | "cpu": [ 41 | "ppc64" 42 | ], 43 | "dev": true, 44 | "license": "MIT", 45 | "optional": true, 46 | "os": [ 47 | "aix" 48 | ], 49 | "engines": { 50 | "node": ">=18" 51 | } 52 | }, 53 | "node_modules/@esbuild/android-arm": { 54 | "version": "0.23.1", 55 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", 56 | "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", 57 | "cpu": [ 58 | "arm" 59 | ], 60 | "dev": true, 61 | "license": "MIT", 62 | "optional": true, 63 | "os": [ 64 | "android" 65 | ], 66 | "engines": { 67 | "node": ">=18" 68 | } 69 | }, 70 | "node_modules/@esbuild/android-arm64": { 71 | "version": "0.23.1", 72 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", 73 | "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", 74 | "cpu": [ 75 | "arm64" 76 | ], 77 | "dev": true, 78 | "license": "MIT", 79 | "optional": true, 80 | "os": [ 81 | "android" 82 | ], 83 | "engines": { 84 | "node": ">=18" 85 | } 86 | }, 87 | "node_modules/@esbuild/android-x64": { 88 | "version": "0.23.1", 89 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", 90 | "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", 91 | "cpu": [ 92 | "x64" 93 | ], 94 | "dev": true, 95 | "license": "MIT", 96 | "optional": true, 97 | "os": [ 98 | "android" 99 | ], 100 | "engines": { 101 | "node": ">=18" 102 | } 103 | }, 104 | "node_modules/@esbuild/darwin-arm64": { 105 | "version": "0.23.1", 106 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", 107 | "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", 108 | "cpu": [ 109 | "arm64" 110 | ], 111 | "dev": true, 112 | "license": "MIT", 113 | "optional": true, 114 | "os": [ 115 | "darwin" 116 | ], 117 | "engines": { 118 | "node": ">=18" 119 | } 120 | }, 121 | "node_modules/@esbuild/darwin-x64": { 122 | "version": "0.23.1", 123 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", 124 | "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", 125 | "cpu": [ 126 | "x64" 127 | ], 128 | "dev": true, 129 | "license": "MIT", 130 | "optional": true, 131 | "os": [ 132 | "darwin" 133 | ], 134 | "engines": { 135 | "node": ">=18" 136 | } 137 | }, 138 | "node_modules/@esbuild/freebsd-arm64": { 139 | "version": "0.23.1", 140 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", 141 | "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", 142 | "cpu": [ 143 | "arm64" 144 | ], 145 | "dev": true, 146 | "license": "MIT", 147 | "optional": true, 148 | "os": [ 149 | "freebsd" 150 | ], 151 | "engines": { 152 | "node": ">=18" 153 | } 154 | }, 155 | "node_modules/@esbuild/freebsd-x64": { 156 | "version": "0.23.1", 157 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", 158 | "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", 159 | "cpu": [ 160 | "x64" 161 | ], 162 | "dev": true, 163 | "license": "MIT", 164 | "optional": true, 165 | "os": [ 166 | "freebsd" 167 | ], 168 | "engines": { 169 | "node": ">=18" 170 | } 171 | }, 172 | "node_modules/@esbuild/linux-arm": { 173 | "version": "0.23.1", 174 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", 175 | "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", 176 | "cpu": [ 177 | "arm" 178 | ], 179 | "dev": true, 180 | "license": "MIT", 181 | "optional": true, 182 | "os": [ 183 | "linux" 184 | ], 185 | "engines": { 186 | "node": ">=18" 187 | } 188 | }, 189 | "node_modules/@esbuild/linux-arm64": { 190 | "version": "0.23.1", 191 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", 192 | "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", 193 | "cpu": [ 194 | "arm64" 195 | ], 196 | "dev": true, 197 | "license": "MIT", 198 | "optional": true, 199 | "os": [ 200 | "linux" 201 | ], 202 | "engines": { 203 | "node": ">=18" 204 | } 205 | }, 206 | "node_modules/@esbuild/linux-ia32": { 207 | "version": "0.23.1", 208 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", 209 | "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", 210 | "cpu": [ 211 | "ia32" 212 | ], 213 | "dev": true, 214 | "license": "MIT", 215 | "optional": true, 216 | "os": [ 217 | "linux" 218 | ], 219 | "engines": { 220 | "node": ">=18" 221 | } 222 | }, 223 | "node_modules/@esbuild/linux-loong64": { 224 | "version": "0.23.1", 225 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", 226 | "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", 227 | "cpu": [ 228 | "loong64" 229 | ], 230 | "dev": true, 231 | "license": "MIT", 232 | "optional": true, 233 | "os": [ 234 | "linux" 235 | ], 236 | "engines": { 237 | "node": ">=18" 238 | } 239 | }, 240 | "node_modules/@esbuild/linux-mips64el": { 241 | "version": "0.23.1", 242 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", 243 | "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", 244 | "cpu": [ 245 | "mips64el" 246 | ], 247 | "dev": true, 248 | "license": "MIT", 249 | "optional": true, 250 | "os": [ 251 | "linux" 252 | ], 253 | "engines": { 254 | "node": ">=18" 255 | } 256 | }, 257 | "node_modules/@esbuild/linux-ppc64": { 258 | "version": "0.23.1", 259 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", 260 | "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", 261 | "cpu": [ 262 | "ppc64" 263 | ], 264 | "dev": true, 265 | "license": "MIT", 266 | "optional": true, 267 | "os": [ 268 | "linux" 269 | ], 270 | "engines": { 271 | "node": ">=18" 272 | } 273 | }, 274 | "node_modules/@esbuild/linux-riscv64": { 275 | "version": "0.23.1", 276 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", 277 | "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", 278 | "cpu": [ 279 | "riscv64" 280 | ], 281 | "dev": true, 282 | "license": "MIT", 283 | "optional": true, 284 | "os": [ 285 | "linux" 286 | ], 287 | "engines": { 288 | "node": ">=18" 289 | } 290 | }, 291 | "node_modules/@esbuild/linux-s390x": { 292 | "version": "0.23.1", 293 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", 294 | "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", 295 | "cpu": [ 296 | "s390x" 297 | ], 298 | "dev": true, 299 | "license": "MIT", 300 | "optional": true, 301 | "os": [ 302 | "linux" 303 | ], 304 | "engines": { 305 | "node": ">=18" 306 | } 307 | }, 308 | "node_modules/@esbuild/linux-x64": { 309 | "version": "0.23.1", 310 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", 311 | "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", 312 | "cpu": [ 313 | "x64" 314 | ], 315 | "dev": true, 316 | "license": "MIT", 317 | "optional": true, 318 | "os": [ 319 | "linux" 320 | ], 321 | "engines": { 322 | "node": ">=18" 323 | } 324 | }, 325 | "node_modules/@esbuild/netbsd-x64": { 326 | "version": "0.23.1", 327 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", 328 | "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", 329 | "cpu": [ 330 | "x64" 331 | ], 332 | "dev": true, 333 | "license": "MIT", 334 | "optional": true, 335 | "os": [ 336 | "netbsd" 337 | ], 338 | "engines": { 339 | "node": ">=18" 340 | } 341 | }, 342 | "node_modules/@esbuild/openbsd-arm64": { 343 | "version": "0.23.1", 344 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", 345 | "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", 346 | "cpu": [ 347 | "arm64" 348 | ], 349 | "dev": true, 350 | "license": "MIT", 351 | "optional": true, 352 | "os": [ 353 | "openbsd" 354 | ], 355 | "engines": { 356 | "node": ">=18" 357 | } 358 | }, 359 | "node_modules/@esbuild/openbsd-x64": { 360 | "version": "0.23.1", 361 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", 362 | "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", 363 | "cpu": [ 364 | "x64" 365 | ], 366 | "dev": true, 367 | "license": "MIT", 368 | "optional": true, 369 | "os": [ 370 | "openbsd" 371 | ], 372 | "engines": { 373 | "node": ">=18" 374 | } 375 | }, 376 | "node_modules/@esbuild/sunos-x64": { 377 | "version": "0.23.1", 378 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", 379 | "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", 380 | "cpu": [ 381 | "x64" 382 | ], 383 | "dev": true, 384 | "license": "MIT", 385 | "optional": true, 386 | "os": [ 387 | "sunos" 388 | ], 389 | "engines": { 390 | "node": ">=18" 391 | } 392 | }, 393 | "node_modules/@esbuild/win32-arm64": { 394 | "version": "0.23.1", 395 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", 396 | "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", 397 | "cpu": [ 398 | "arm64" 399 | ], 400 | "dev": true, 401 | "license": "MIT", 402 | "optional": true, 403 | "os": [ 404 | "win32" 405 | ], 406 | "engines": { 407 | "node": ">=18" 408 | } 409 | }, 410 | "node_modules/@esbuild/win32-ia32": { 411 | "version": "0.23.1", 412 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", 413 | "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", 414 | "cpu": [ 415 | "ia32" 416 | ], 417 | "dev": true, 418 | "license": "MIT", 419 | "optional": true, 420 | "os": [ 421 | "win32" 422 | ], 423 | "engines": { 424 | "node": ">=18" 425 | } 426 | }, 427 | "node_modules/@esbuild/win32-x64": { 428 | "version": "0.23.1", 429 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", 430 | "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", 431 | "cpu": [ 432 | "x64" 433 | ], 434 | "dev": true, 435 | "license": "MIT", 436 | "optional": true, 437 | "os": [ 438 | "win32" 439 | ], 440 | "engines": { 441 | "node": ">=18" 442 | } 443 | }, 444 | "node_modules/@isaacs/cliui": { 445 | "version": "8.0.2", 446 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 447 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 448 | "dev": true, 449 | "license": "ISC", 450 | "dependencies": { 451 | "string-width": "^5.1.2", 452 | "string-width-cjs": "npm:string-width@^4.2.0", 453 | "strip-ansi": "^7.0.1", 454 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 455 | "wrap-ansi": "^8.1.0", 456 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 457 | }, 458 | "engines": { 459 | "node": ">=12" 460 | } 461 | }, 462 | "node_modules/@jridgewell/resolve-uri": { 463 | "version": "3.1.2", 464 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 465 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 466 | "dev": true, 467 | "license": "MIT", 468 | "engines": { 469 | "node": ">=6.0.0" 470 | } 471 | }, 472 | "node_modules/@jridgewell/sourcemap-codec": { 473 | "version": "1.5.0", 474 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 475 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 476 | "dev": true, 477 | "license": "MIT" 478 | }, 479 | "node_modules/@jridgewell/trace-mapping": { 480 | "version": "0.3.9", 481 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 482 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 483 | "dev": true, 484 | "license": "MIT", 485 | "dependencies": { 486 | "@jridgewell/resolve-uri": "^3.0.3", 487 | "@jridgewell/sourcemap-codec": "^1.4.10" 488 | } 489 | }, 490 | "node_modules/@pkgjs/parseargs": { 491 | "version": "0.11.0", 492 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 493 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 494 | "dev": true, 495 | "license": "MIT", 496 | "optional": true, 497 | "engines": { 498 | "node": ">=14" 499 | } 500 | }, 501 | "node_modules/@rollup/rollup-android-arm-eabi": { 502 | "version": "4.22.4", 503 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", 504 | "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", 505 | "cpu": [ 506 | "arm" 507 | ], 508 | "license": "MIT", 509 | "optional": true, 510 | "os": [ 511 | "android" 512 | ] 513 | }, 514 | "node_modules/@rollup/rollup-android-arm64": { 515 | "version": "4.22.4", 516 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", 517 | "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", 518 | "cpu": [ 519 | "arm64" 520 | ], 521 | "license": "MIT", 522 | "optional": true, 523 | "os": [ 524 | "android" 525 | ] 526 | }, 527 | "node_modules/@rollup/rollup-darwin-arm64": { 528 | "version": "4.22.4", 529 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", 530 | "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", 531 | "cpu": [ 532 | "arm64" 533 | ], 534 | "license": "MIT", 535 | "optional": true, 536 | "os": [ 537 | "darwin" 538 | ] 539 | }, 540 | "node_modules/@rollup/rollup-darwin-x64": { 541 | "version": "4.22.4", 542 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", 543 | "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", 544 | "cpu": [ 545 | "x64" 546 | ], 547 | "license": "MIT", 548 | "optional": true, 549 | "os": [ 550 | "darwin" 551 | ] 552 | }, 553 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 554 | "version": "4.22.4", 555 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", 556 | "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", 557 | "cpu": [ 558 | "arm" 559 | ], 560 | "license": "MIT", 561 | "optional": true, 562 | "os": [ 563 | "linux" 564 | ] 565 | }, 566 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 567 | "version": "4.22.4", 568 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", 569 | "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", 570 | "cpu": [ 571 | "arm" 572 | ], 573 | "license": "MIT", 574 | "optional": true, 575 | "os": [ 576 | "linux" 577 | ] 578 | }, 579 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 580 | "version": "4.22.4", 581 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", 582 | "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", 583 | "cpu": [ 584 | "arm64" 585 | ], 586 | "license": "MIT", 587 | "optional": true, 588 | "os": [ 589 | "linux" 590 | ] 591 | }, 592 | "node_modules/@rollup/rollup-linux-arm64-musl": { 593 | "version": "4.22.4", 594 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", 595 | "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", 596 | "cpu": [ 597 | "arm64" 598 | ], 599 | "license": "MIT", 600 | "optional": true, 601 | "os": [ 602 | "linux" 603 | ] 604 | }, 605 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 606 | "version": "4.22.4", 607 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", 608 | "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", 609 | "cpu": [ 610 | "ppc64" 611 | ], 612 | "license": "MIT", 613 | "optional": true, 614 | "os": [ 615 | "linux" 616 | ] 617 | }, 618 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 619 | "version": "4.22.4", 620 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", 621 | "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", 622 | "cpu": [ 623 | "riscv64" 624 | ], 625 | "license": "MIT", 626 | "optional": true, 627 | "os": [ 628 | "linux" 629 | ] 630 | }, 631 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 632 | "version": "4.22.4", 633 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", 634 | "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", 635 | "cpu": [ 636 | "s390x" 637 | ], 638 | "license": "MIT", 639 | "optional": true, 640 | "os": [ 641 | "linux" 642 | ] 643 | }, 644 | "node_modules/@rollup/rollup-linux-x64-gnu": { 645 | "version": "4.22.4", 646 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", 647 | "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", 648 | "cpu": [ 649 | "x64" 650 | ], 651 | "license": "MIT", 652 | "optional": true, 653 | "os": [ 654 | "linux" 655 | ] 656 | }, 657 | "node_modules/@rollup/rollup-linux-x64-musl": { 658 | "version": "4.22.4", 659 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", 660 | "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", 661 | "cpu": [ 662 | "x64" 663 | ], 664 | "license": "MIT", 665 | "optional": true, 666 | "os": [ 667 | "linux" 668 | ] 669 | }, 670 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 671 | "version": "4.22.4", 672 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", 673 | "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", 674 | "cpu": [ 675 | "arm64" 676 | ], 677 | "license": "MIT", 678 | "optional": true, 679 | "os": [ 680 | "win32" 681 | ] 682 | }, 683 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 684 | "version": "4.22.4", 685 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", 686 | "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", 687 | "cpu": [ 688 | "ia32" 689 | ], 690 | "license": "MIT", 691 | "optional": true, 692 | "os": [ 693 | "win32" 694 | ] 695 | }, 696 | "node_modules/@rollup/rollup-win32-x64-msvc": { 697 | "version": "4.22.4", 698 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", 699 | "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", 700 | "cpu": [ 701 | "x64" 702 | ], 703 | "license": "MIT", 704 | "optional": true, 705 | "os": [ 706 | "win32" 707 | ] 708 | }, 709 | "node_modules/@tsconfig/node10": { 710 | "version": "1.0.11", 711 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", 712 | "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", 713 | "dev": true, 714 | "license": "MIT" 715 | }, 716 | "node_modules/@tsconfig/node12": { 717 | "version": "1.0.11", 718 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 719 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 720 | "dev": true, 721 | "license": "MIT" 722 | }, 723 | "node_modules/@tsconfig/node14": { 724 | "version": "1.0.3", 725 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 726 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 727 | "dev": true, 728 | "license": "MIT" 729 | }, 730 | "node_modules/@tsconfig/node16": { 731 | "version": "1.0.4", 732 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", 733 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", 734 | "dev": true, 735 | "license": "MIT" 736 | }, 737 | "node_modules/@types/estree": { 738 | "version": "1.0.5", 739 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", 740 | "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", 741 | "license": "MIT" 742 | }, 743 | "node_modules/@types/node": { 744 | "version": "22.5.5", 745 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.5.tgz", 746 | "integrity": "sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==", 747 | "devOptional": true, 748 | "license": "MIT", 749 | "dependencies": { 750 | "undici-types": "~6.19.2" 751 | } 752 | }, 753 | "node_modules/@vitest/expect": { 754 | "version": "2.1.1", 755 | "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.1.tgz", 756 | "integrity": "sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==", 757 | "dev": true, 758 | "license": "MIT", 759 | "dependencies": { 760 | "@vitest/spy": "2.1.1", 761 | "@vitest/utils": "2.1.1", 762 | "chai": "^5.1.1", 763 | "tinyrainbow": "^1.2.0" 764 | }, 765 | "funding": { 766 | "url": "https://opencollective.com/vitest" 767 | } 768 | }, 769 | "node_modules/@vitest/mocker": { 770 | "version": "2.1.1", 771 | "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.1.tgz", 772 | "integrity": "sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==", 773 | "dev": true, 774 | "license": "MIT", 775 | "dependencies": { 776 | "@vitest/spy": "^2.1.0-beta.1", 777 | "estree-walker": "^3.0.3", 778 | "magic-string": "^0.30.11" 779 | }, 780 | "funding": { 781 | "url": "https://opencollective.com/vitest" 782 | }, 783 | "peerDependencies": { 784 | "@vitest/spy": "2.1.1", 785 | "msw": "^2.3.5", 786 | "vite": "^5.0.0" 787 | }, 788 | "peerDependenciesMeta": { 789 | "msw": { 790 | "optional": true 791 | }, 792 | "vite": { 793 | "optional": true 794 | } 795 | } 796 | }, 797 | "node_modules/@vitest/pretty-format": { 798 | "version": "2.1.1", 799 | "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.1.tgz", 800 | "integrity": "sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==", 801 | "dev": true, 802 | "license": "MIT", 803 | "dependencies": { 804 | "tinyrainbow": "^1.2.0" 805 | }, 806 | "funding": { 807 | "url": "https://opencollective.com/vitest" 808 | } 809 | }, 810 | "node_modules/@vitest/runner": { 811 | "version": "2.1.1", 812 | "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.1.tgz", 813 | "integrity": "sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==", 814 | "dev": true, 815 | "license": "MIT", 816 | "dependencies": { 817 | "@vitest/utils": "2.1.1", 818 | "pathe": "^1.1.2" 819 | }, 820 | "funding": { 821 | "url": "https://opencollective.com/vitest" 822 | } 823 | }, 824 | "node_modules/@vitest/snapshot": { 825 | "version": "2.1.1", 826 | "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.1.tgz", 827 | "integrity": "sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==", 828 | "dev": true, 829 | "license": "MIT", 830 | "dependencies": { 831 | "@vitest/pretty-format": "2.1.1", 832 | "magic-string": "^0.30.11", 833 | "pathe": "^1.1.2" 834 | }, 835 | "funding": { 836 | "url": "https://opencollective.com/vitest" 837 | } 838 | }, 839 | "node_modules/@vitest/spy": { 840 | "version": "2.1.1", 841 | "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.1.tgz", 842 | "integrity": "sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==", 843 | "dev": true, 844 | "license": "MIT", 845 | "dependencies": { 846 | "tinyspy": "^3.0.0" 847 | }, 848 | "funding": { 849 | "url": "https://opencollective.com/vitest" 850 | } 851 | }, 852 | "node_modules/@vitest/utils": { 853 | "version": "2.1.1", 854 | "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.1.tgz", 855 | "integrity": "sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==", 856 | "dev": true, 857 | "license": "MIT", 858 | "dependencies": { 859 | "@vitest/pretty-format": "2.1.1", 860 | "loupe": "^3.1.1", 861 | "tinyrainbow": "^1.2.0" 862 | }, 863 | "funding": { 864 | "url": "https://opencollective.com/vitest" 865 | } 866 | }, 867 | "node_modules/acorn": { 868 | "version": "8.12.1", 869 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", 870 | "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", 871 | "dev": true, 872 | "license": "MIT", 873 | "bin": { 874 | "acorn": "bin/acorn" 875 | }, 876 | "engines": { 877 | "node": ">=0.4.0" 878 | } 879 | }, 880 | "node_modules/acorn-walk": { 881 | "version": "8.3.4", 882 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", 883 | "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", 884 | "dev": true, 885 | "license": "MIT", 886 | "dependencies": { 887 | "acorn": "^8.11.0" 888 | }, 889 | "engines": { 890 | "node": ">=0.4.0" 891 | } 892 | }, 893 | "node_modules/ansi-regex": { 894 | "version": "6.1.0", 895 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 896 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 897 | "dev": true, 898 | "license": "MIT", 899 | "engines": { 900 | "node": ">=12" 901 | }, 902 | "funding": { 903 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 904 | } 905 | }, 906 | "node_modules/ansi-styles": { 907 | "version": "6.2.1", 908 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 909 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 910 | "dev": true, 911 | "license": "MIT", 912 | "engines": { 913 | "node": ">=12" 914 | }, 915 | "funding": { 916 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 917 | } 918 | }, 919 | "node_modules/arg": { 920 | "version": "4.1.3", 921 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 922 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 923 | "dev": true, 924 | "license": "MIT" 925 | }, 926 | "node_modules/assertion-error": { 927 | "version": "2.0.1", 928 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", 929 | "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", 930 | "dev": true, 931 | "license": "MIT", 932 | "engines": { 933 | "node": ">=12" 934 | } 935 | }, 936 | "node_modules/balanced-match": { 937 | "version": "1.0.2", 938 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 939 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 940 | "dev": true, 941 | "license": "MIT" 942 | }, 943 | "node_modules/brace-expansion": { 944 | "version": "2.0.1", 945 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 946 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 947 | "dev": true, 948 | "license": "MIT", 949 | "dependencies": { 950 | "balanced-match": "^1.0.0" 951 | } 952 | }, 953 | "node_modules/cac": { 954 | "version": "6.7.14", 955 | "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", 956 | "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", 957 | "dev": true, 958 | "license": "MIT", 959 | "engines": { 960 | "node": ">=8" 961 | } 962 | }, 963 | "node_modules/chai": { 964 | "version": "5.1.1", 965 | "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", 966 | "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", 967 | "dev": true, 968 | "license": "MIT", 969 | "dependencies": { 970 | "assertion-error": "^2.0.1", 971 | "check-error": "^2.1.1", 972 | "deep-eql": "^5.0.1", 973 | "loupe": "^3.1.0", 974 | "pathval": "^2.0.0" 975 | }, 976 | "engines": { 977 | "node": ">=12" 978 | } 979 | }, 980 | "node_modules/check-error": { 981 | "version": "2.1.1", 982 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", 983 | "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", 984 | "dev": true, 985 | "license": "MIT", 986 | "engines": { 987 | "node": ">= 16" 988 | } 989 | }, 990 | "node_modules/color-convert": { 991 | "version": "2.0.1", 992 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 993 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 994 | "dev": true, 995 | "license": "MIT", 996 | "dependencies": { 997 | "color-name": "~1.1.4" 998 | }, 999 | "engines": { 1000 | "node": ">=7.0.0" 1001 | } 1002 | }, 1003 | "node_modules/color-name": { 1004 | "version": "1.1.4", 1005 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1006 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1007 | "dev": true, 1008 | "license": "MIT" 1009 | }, 1010 | "node_modules/create-require": { 1011 | "version": "1.1.1", 1012 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 1013 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 1014 | "dev": true, 1015 | "license": "MIT" 1016 | }, 1017 | "node_modules/cross-spawn": { 1018 | "version": "7.0.3", 1019 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1020 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1021 | "dev": true, 1022 | "license": "MIT", 1023 | "dependencies": { 1024 | "path-key": "^3.1.0", 1025 | "shebang-command": "^2.0.0", 1026 | "which": "^2.0.1" 1027 | }, 1028 | "engines": { 1029 | "node": ">= 8" 1030 | } 1031 | }, 1032 | "node_modules/debug": { 1033 | "version": "4.3.7", 1034 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 1035 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 1036 | "dev": true, 1037 | "license": "MIT", 1038 | "dependencies": { 1039 | "ms": "^2.1.3" 1040 | }, 1041 | "engines": { 1042 | "node": ">=6.0" 1043 | }, 1044 | "peerDependenciesMeta": { 1045 | "supports-color": { 1046 | "optional": true 1047 | } 1048 | } 1049 | }, 1050 | "node_modules/deep-eql": { 1051 | "version": "5.0.2", 1052 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", 1053 | "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", 1054 | "dev": true, 1055 | "license": "MIT", 1056 | "engines": { 1057 | "node": ">=6" 1058 | } 1059 | }, 1060 | "node_modules/eastasianwidth": { 1061 | "version": "0.2.0", 1062 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 1063 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 1064 | "dev": true, 1065 | "license": "MIT" 1066 | }, 1067 | "node_modules/emoji-regex": { 1068 | "version": "9.2.2", 1069 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 1070 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 1071 | "dev": true, 1072 | "license": "MIT" 1073 | }, 1074 | "node_modules/esbuild": { 1075 | "version": "0.23.1", 1076 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", 1077 | "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", 1078 | "dev": true, 1079 | "hasInstallScript": true, 1080 | "license": "MIT", 1081 | "bin": { 1082 | "esbuild": "bin/esbuild" 1083 | }, 1084 | "engines": { 1085 | "node": ">=18" 1086 | }, 1087 | "optionalDependencies": { 1088 | "@esbuild/aix-ppc64": "0.23.1", 1089 | "@esbuild/android-arm": "0.23.1", 1090 | "@esbuild/android-arm64": "0.23.1", 1091 | "@esbuild/android-x64": "0.23.1", 1092 | "@esbuild/darwin-arm64": "0.23.1", 1093 | "@esbuild/darwin-x64": "0.23.1", 1094 | "@esbuild/freebsd-arm64": "0.23.1", 1095 | "@esbuild/freebsd-x64": "0.23.1", 1096 | "@esbuild/linux-arm": "0.23.1", 1097 | "@esbuild/linux-arm64": "0.23.1", 1098 | "@esbuild/linux-ia32": "0.23.1", 1099 | "@esbuild/linux-loong64": "0.23.1", 1100 | "@esbuild/linux-mips64el": "0.23.1", 1101 | "@esbuild/linux-ppc64": "0.23.1", 1102 | "@esbuild/linux-riscv64": "0.23.1", 1103 | "@esbuild/linux-s390x": "0.23.1", 1104 | "@esbuild/linux-x64": "0.23.1", 1105 | "@esbuild/netbsd-x64": "0.23.1", 1106 | "@esbuild/openbsd-arm64": "0.23.1", 1107 | "@esbuild/openbsd-x64": "0.23.1", 1108 | "@esbuild/sunos-x64": "0.23.1", 1109 | "@esbuild/win32-arm64": "0.23.1", 1110 | "@esbuild/win32-ia32": "0.23.1", 1111 | "@esbuild/win32-x64": "0.23.1" 1112 | } 1113 | }, 1114 | "node_modules/estree-walker": { 1115 | "version": "3.0.3", 1116 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", 1117 | "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 1118 | "dev": true, 1119 | "license": "MIT", 1120 | "dependencies": { 1121 | "@types/estree": "^1.0.0" 1122 | } 1123 | }, 1124 | "node_modules/foreground-child": { 1125 | "version": "3.3.0", 1126 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", 1127 | "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", 1128 | "dev": true, 1129 | "license": "ISC", 1130 | "dependencies": { 1131 | "cross-spawn": "^7.0.0", 1132 | "signal-exit": "^4.0.1" 1133 | }, 1134 | "engines": { 1135 | "node": ">=14" 1136 | }, 1137 | "funding": { 1138 | "url": "https://github.com/sponsors/isaacs" 1139 | } 1140 | }, 1141 | "node_modules/fsevents": { 1142 | "version": "2.3.3", 1143 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1144 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1145 | "hasInstallScript": true, 1146 | "license": "MIT", 1147 | "optional": true, 1148 | "os": [ 1149 | "darwin" 1150 | ], 1151 | "engines": { 1152 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1153 | } 1154 | }, 1155 | "node_modules/get-func-name": { 1156 | "version": "2.0.2", 1157 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", 1158 | "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", 1159 | "dev": true, 1160 | "license": "MIT", 1161 | "engines": { 1162 | "node": "*" 1163 | } 1164 | }, 1165 | "node_modules/glob": { 1166 | "version": "11.0.0", 1167 | "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", 1168 | "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", 1169 | "dev": true, 1170 | "license": "ISC", 1171 | "dependencies": { 1172 | "foreground-child": "^3.1.0", 1173 | "jackspeak": "^4.0.1", 1174 | "minimatch": "^10.0.0", 1175 | "minipass": "^7.1.2", 1176 | "package-json-from-dist": "^1.0.0", 1177 | "path-scurry": "^2.0.0" 1178 | }, 1179 | "bin": { 1180 | "glob": "dist/esm/bin.mjs" 1181 | }, 1182 | "engines": { 1183 | "node": "20 || >=22" 1184 | }, 1185 | "funding": { 1186 | "url": "https://github.com/sponsors/isaacs" 1187 | } 1188 | }, 1189 | "node_modules/is-fullwidth-code-point": { 1190 | "version": "3.0.0", 1191 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1192 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1193 | "dev": true, 1194 | "license": "MIT", 1195 | "engines": { 1196 | "node": ">=8" 1197 | } 1198 | }, 1199 | "node_modules/isexe": { 1200 | "version": "2.0.0", 1201 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1202 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1203 | "dev": true, 1204 | "license": "ISC" 1205 | }, 1206 | "node_modules/jackspeak": { 1207 | "version": "4.0.1", 1208 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", 1209 | "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", 1210 | "dev": true, 1211 | "license": "BlueOak-1.0.0", 1212 | "dependencies": { 1213 | "@isaacs/cliui": "^8.0.2" 1214 | }, 1215 | "engines": { 1216 | "node": "20 || >=22" 1217 | }, 1218 | "funding": { 1219 | "url": "https://github.com/sponsors/isaacs" 1220 | }, 1221 | "optionalDependencies": { 1222 | "@pkgjs/parseargs": "^0.11.0" 1223 | } 1224 | }, 1225 | "node_modules/loupe": { 1226 | "version": "3.1.1", 1227 | "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", 1228 | "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", 1229 | "dev": true, 1230 | "license": "MIT", 1231 | "dependencies": { 1232 | "get-func-name": "^2.0.1" 1233 | } 1234 | }, 1235 | "node_modules/lru-cache": { 1236 | "version": "11.0.1", 1237 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", 1238 | "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", 1239 | "dev": true, 1240 | "license": "ISC", 1241 | "engines": { 1242 | "node": "20 || >=22" 1243 | } 1244 | }, 1245 | "node_modules/magic-string": { 1246 | "version": "0.30.11", 1247 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", 1248 | "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", 1249 | "dev": true, 1250 | "license": "MIT", 1251 | "dependencies": { 1252 | "@jridgewell/sourcemap-codec": "^1.5.0" 1253 | } 1254 | }, 1255 | "node_modules/make-error": { 1256 | "version": "1.3.6", 1257 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 1258 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 1259 | "dev": true, 1260 | "license": "ISC" 1261 | }, 1262 | "node_modules/minimatch": { 1263 | "version": "10.0.1", 1264 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", 1265 | "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", 1266 | "dev": true, 1267 | "license": "ISC", 1268 | "dependencies": { 1269 | "brace-expansion": "^2.0.1" 1270 | }, 1271 | "engines": { 1272 | "node": "20 || >=22" 1273 | }, 1274 | "funding": { 1275 | "url": "https://github.com/sponsors/isaacs" 1276 | } 1277 | }, 1278 | "node_modules/minipass": { 1279 | "version": "7.1.2", 1280 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 1281 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 1282 | "dev": true, 1283 | "license": "ISC", 1284 | "engines": { 1285 | "node": ">=16 || 14 >=14.17" 1286 | } 1287 | }, 1288 | "node_modules/ms": { 1289 | "version": "2.1.3", 1290 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1291 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1292 | "dev": true, 1293 | "license": "MIT" 1294 | }, 1295 | "node_modules/nanoid": { 1296 | "version": "3.3.7", 1297 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 1298 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 1299 | "funding": [ 1300 | { 1301 | "type": "github", 1302 | "url": "https://github.com/sponsors/ai" 1303 | } 1304 | ], 1305 | "license": "MIT", 1306 | "bin": { 1307 | "nanoid": "bin/nanoid.cjs" 1308 | }, 1309 | "engines": { 1310 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1311 | } 1312 | }, 1313 | "node_modules/package-json-from-dist": { 1314 | "version": "1.0.0", 1315 | "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", 1316 | "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", 1317 | "dev": true, 1318 | "license": "BlueOak-1.0.0" 1319 | }, 1320 | "node_modules/path-key": { 1321 | "version": "3.1.1", 1322 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1323 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1324 | "dev": true, 1325 | "license": "MIT", 1326 | "engines": { 1327 | "node": ">=8" 1328 | } 1329 | }, 1330 | "node_modules/path-scurry": { 1331 | "version": "2.0.0", 1332 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", 1333 | "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", 1334 | "dev": true, 1335 | "license": "BlueOak-1.0.0", 1336 | "dependencies": { 1337 | "lru-cache": "^11.0.0", 1338 | "minipass": "^7.1.2" 1339 | }, 1340 | "engines": { 1341 | "node": "20 || >=22" 1342 | }, 1343 | "funding": { 1344 | "url": "https://github.com/sponsors/isaacs" 1345 | } 1346 | }, 1347 | "node_modules/pathe": { 1348 | "version": "1.1.2", 1349 | "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", 1350 | "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", 1351 | "dev": true, 1352 | "license": "MIT" 1353 | }, 1354 | "node_modules/pathval": { 1355 | "version": "2.0.0", 1356 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", 1357 | "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", 1358 | "dev": true, 1359 | "license": "MIT", 1360 | "engines": { 1361 | "node": ">= 14.16" 1362 | } 1363 | }, 1364 | "node_modules/picocolors": { 1365 | "version": "1.1.0", 1366 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", 1367 | "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", 1368 | "license": "ISC" 1369 | }, 1370 | "node_modules/postcss": { 1371 | "version": "8.4.47", 1372 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", 1373 | "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", 1374 | "funding": [ 1375 | { 1376 | "type": "opencollective", 1377 | "url": "https://opencollective.com/postcss/" 1378 | }, 1379 | { 1380 | "type": "tidelift", 1381 | "url": "https://tidelift.com/funding/github/npm/postcss" 1382 | }, 1383 | { 1384 | "type": "github", 1385 | "url": "https://github.com/sponsors/ai" 1386 | } 1387 | ], 1388 | "license": "MIT", 1389 | "dependencies": { 1390 | "nanoid": "^3.3.7", 1391 | "picocolors": "^1.1.0", 1392 | "source-map-js": "^1.2.1" 1393 | }, 1394 | "engines": { 1395 | "node": "^10 || ^12 || >=14" 1396 | } 1397 | }, 1398 | "node_modules/rimraf": { 1399 | "version": "6.0.1", 1400 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", 1401 | "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", 1402 | "dev": true, 1403 | "license": "ISC", 1404 | "dependencies": { 1405 | "glob": "^11.0.0", 1406 | "package-json-from-dist": "^1.0.0" 1407 | }, 1408 | "bin": { 1409 | "rimraf": "dist/esm/bin.mjs" 1410 | }, 1411 | "engines": { 1412 | "node": "20 || >=22" 1413 | }, 1414 | "funding": { 1415 | "url": "https://github.com/sponsors/isaacs" 1416 | } 1417 | }, 1418 | "node_modules/rollup": { 1419 | "version": "4.22.4", 1420 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", 1421 | "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", 1422 | "license": "MIT", 1423 | "dependencies": { 1424 | "@types/estree": "1.0.5" 1425 | }, 1426 | "bin": { 1427 | "rollup": "dist/bin/rollup" 1428 | }, 1429 | "engines": { 1430 | "node": ">=18.0.0", 1431 | "npm": ">=8.0.0" 1432 | }, 1433 | "optionalDependencies": { 1434 | "@rollup/rollup-android-arm-eabi": "4.22.4", 1435 | "@rollup/rollup-android-arm64": "4.22.4", 1436 | "@rollup/rollup-darwin-arm64": "4.22.4", 1437 | "@rollup/rollup-darwin-x64": "4.22.4", 1438 | "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", 1439 | "@rollup/rollup-linux-arm-musleabihf": "4.22.4", 1440 | "@rollup/rollup-linux-arm64-gnu": "4.22.4", 1441 | "@rollup/rollup-linux-arm64-musl": "4.22.4", 1442 | "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", 1443 | "@rollup/rollup-linux-riscv64-gnu": "4.22.4", 1444 | "@rollup/rollup-linux-s390x-gnu": "4.22.4", 1445 | "@rollup/rollup-linux-x64-gnu": "4.22.4", 1446 | "@rollup/rollup-linux-x64-musl": "4.22.4", 1447 | "@rollup/rollup-win32-arm64-msvc": "4.22.4", 1448 | "@rollup/rollup-win32-ia32-msvc": "4.22.4", 1449 | "@rollup/rollup-win32-x64-msvc": "4.22.4", 1450 | "fsevents": "~2.3.2" 1451 | } 1452 | }, 1453 | "node_modules/shebang-command": { 1454 | "version": "2.0.0", 1455 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1456 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1457 | "dev": true, 1458 | "license": "MIT", 1459 | "dependencies": { 1460 | "shebang-regex": "^3.0.0" 1461 | }, 1462 | "engines": { 1463 | "node": ">=8" 1464 | } 1465 | }, 1466 | "node_modules/shebang-regex": { 1467 | "version": "3.0.0", 1468 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1469 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1470 | "dev": true, 1471 | "license": "MIT", 1472 | "engines": { 1473 | "node": ">=8" 1474 | } 1475 | }, 1476 | "node_modules/siginfo": { 1477 | "version": "2.0.0", 1478 | "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", 1479 | "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", 1480 | "dev": true, 1481 | "license": "ISC" 1482 | }, 1483 | "node_modules/signal-exit": { 1484 | "version": "4.1.0", 1485 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 1486 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 1487 | "dev": true, 1488 | "license": "ISC", 1489 | "engines": { 1490 | "node": ">=14" 1491 | }, 1492 | "funding": { 1493 | "url": "https://github.com/sponsors/isaacs" 1494 | } 1495 | }, 1496 | "node_modules/source-map-js": { 1497 | "version": "1.2.1", 1498 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 1499 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 1500 | "license": "BSD-3-Clause", 1501 | "engines": { 1502 | "node": ">=0.10.0" 1503 | } 1504 | }, 1505 | "node_modules/stackback": { 1506 | "version": "0.0.2", 1507 | "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", 1508 | "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", 1509 | "dev": true, 1510 | "license": "MIT" 1511 | }, 1512 | "node_modules/std-env": { 1513 | "version": "3.7.0", 1514 | "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", 1515 | "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", 1516 | "dev": true, 1517 | "license": "MIT" 1518 | }, 1519 | "node_modules/string-width": { 1520 | "version": "5.1.2", 1521 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 1522 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 1523 | "dev": true, 1524 | "license": "MIT", 1525 | "dependencies": { 1526 | "eastasianwidth": "^0.2.0", 1527 | "emoji-regex": "^9.2.2", 1528 | "strip-ansi": "^7.0.1" 1529 | }, 1530 | "engines": { 1531 | "node": ">=12" 1532 | }, 1533 | "funding": { 1534 | "url": "https://github.com/sponsors/sindresorhus" 1535 | } 1536 | }, 1537 | "node_modules/string-width-cjs": { 1538 | "name": "string-width", 1539 | "version": "4.2.3", 1540 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1541 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1542 | "dev": true, 1543 | "license": "MIT", 1544 | "dependencies": { 1545 | "emoji-regex": "^8.0.0", 1546 | "is-fullwidth-code-point": "^3.0.0", 1547 | "strip-ansi": "^6.0.1" 1548 | }, 1549 | "engines": { 1550 | "node": ">=8" 1551 | } 1552 | }, 1553 | "node_modules/string-width-cjs/node_modules/ansi-regex": { 1554 | "version": "5.0.1", 1555 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1556 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1557 | "dev": true, 1558 | "license": "MIT", 1559 | "engines": { 1560 | "node": ">=8" 1561 | } 1562 | }, 1563 | "node_modules/string-width-cjs/node_modules/emoji-regex": { 1564 | "version": "8.0.0", 1565 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1566 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1567 | "dev": true, 1568 | "license": "MIT" 1569 | }, 1570 | "node_modules/string-width-cjs/node_modules/strip-ansi": { 1571 | "version": "6.0.1", 1572 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1573 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1574 | "dev": true, 1575 | "license": "MIT", 1576 | "dependencies": { 1577 | "ansi-regex": "^5.0.1" 1578 | }, 1579 | "engines": { 1580 | "node": ">=8" 1581 | } 1582 | }, 1583 | "node_modules/strip-ansi": { 1584 | "version": "7.1.0", 1585 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 1586 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 1587 | "dev": true, 1588 | "license": "MIT", 1589 | "dependencies": { 1590 | "ansi-regex": "^6.0.1" 1591 | }, 1592 | "engines": { 1593 | "node": ">=12" 1594 | }, 1595 | "funding": { 1596 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 1597 | } 1598 | }, 1599 | "node_modules/strip-ansi-cjs": { 1600 | "name": "strip-ansi", 1601 | "version": "6.0.1", 1602 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1603 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1604 | "dev": true, 1605 | "license": "MIT", 1606 | "dependencies": { 1607 | "ansi-regex": "^5.0.1" 1608 | }, 1609 | "engines": { 1610 | "node": ">=8" 1611 | } 1612 | }, 1613 | "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { 1614 | "version": "5.0.1", 1615 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1616 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1617 | "dev": true, 1618 | "license": "MIT", 1619 | "engines": { 1620 | "node": ">=8" 1621 | } 1622 | }, 1623 | "node_modules/tinybench": { 1624 | "version": "2.9.0", 1625 | "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", 1626 | "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", 1627 | "dev": true, 1628 | "license": "MIT" 1629 | }, 1630 | "node_modules/tinyexec": { 1631 | "version": "0.3.0", 1632 | "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.0.tgz", 1633 | "integrity": "sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==", 1634 | "dev": true, 1635 | "license": "MIT" 1636 | }, 1637 | "node_modules/tinypool": { 1638 | "version": "1.0.1", 1639 | "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz", 1640 | "integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==", 1641 | "dev": true, 1642 | "license": "MIT", 1643 | "engines": { 1644 | "node": "^18.0.0 || >=20.0.0" 1645 | } 1646 | }, 1647 | "node_modules/tinyrainbow": { 1648 | "version": "1.2.0", 1649 | "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", 1650 | "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", 1651 | "dev": true, 1652 | "license": "MIT", 1653 | "engines": { 1654 | "node": ">=14.0.0" 1655 | } 1656 | }, 1657 | "node_modules/tinyspy": { 1658 | "version": "3.0.2", 1659 | "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", 1660 | "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", 1661 | "dev": true, 1662 | "license": "MIT", 1663 | "engines": { 1664 | "node": ">=14.0.0" 1665 | } 1666 | }, 1667 | "node_modules/ts-node": { 1668 | "version": "10.9.2", 1669 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", 1670 | "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", 1671 | "dev": true, 1672 | "license": "MIT", 1673 | "dependencies": { 1674 | "@cspotcode/source-map-support": "^0.8.0", 1675 | "@tsconfig/node10": "^1.0.7", 1676 | "@tsconfig/node12": "^1.0.7", 1677 | "@tsconfig/node14": "^1.0.0", 1678 | "@tsconfig/node16": "^1.0.2", 1679 | "acorn": "^8.4.1", 1680 | "acorn-walk": "^8.1.1", 1681 | "arg": "^4.1.0", 1682 | "create-require": "^1.1.0", 1683 | "diff": "^4.0.1", 1684 | "make-error": "^1.1.1", 1685 | "v8-compile-cache-lib": "^3.0.1", 1686 | "yn": "3.1.1" 1687 | }, 1688 | "bin": { 1689 | "ts-node": "dist/bin.js", 1690 | "ts-node-cwd": "dist/bin-cwd.js", 1691 | "ts-node-esm": "dist/bin-esm.js", 1692 | "ts-node-script": "dist/bin-script.js", 1693 | "ts-node-transpile-only": "dist/bin-transpile.js", 1694 | "ts-script": "dist/bin-script-deprecated.js" 1695 | }, 1696 | "peerDependencies": { 1697 | "@swc/core": ">=1.2.50", 1698 | "@swc/wasm": ">=1.2.50", 1699 | "@types/node": "*", 1700 | "typescript": ">=2.7" 1701 | }, 1702 | "peerDependenciesMeta": { 1703 | "@swc/core": { 1704 | "optional": true 1705 | }, 1706 | "@swc/wasm": { 1707 | "optional": true 1708 | } 1709 | } 1710 | }, 1711 | "node_modules/ts-node/node_modules/diff": { 1712 | "version": "4.0.2", 1713 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 1714 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 1715 | "dev": true, 1716 | "license": "BSD-3-Clause", 1717 | "engines": { 1718 | "node": ">=0.3.1" 1719 | } 1720 | }, 1721 | "node_modules/typescript": { 1722 | "version": "5.6.2", 1723 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", 1724 | "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", 1725 | "dev": true, 1726 | "license": "Apache-2.0", 1727 | "bin": { 1728 | "tsc": "bin/tsc", 1729 | "tsserver": "bin/tsserver" 1730 | }, 1731 | "engines": { 1732 | "node": ">=14.17" 1733 | } 1734 | }, 1735 | "node_modules/undici-types": { 1736 | "version": "6.19.8", 1737 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 1738 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", 1739 | "devOptional": true, 1740 | "license": "MIT" 1741 | }, 1742 | "node_modules/v8-compile-cache-lib": { 1743 | "version": "3.0.1", 1744 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 1745 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 1746 | "dev": true, 1747 | "license": "MIT" 1748 | }, 1749 | "node_modules/vite": { 1750 | "version": "5.4.6", 1751 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.6.tgz", 1752 | "integrity": "sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==", 1753 | "license": "MIT", 1754 | "dependencies": { 1755 | "esbuild": "^0.21.3", 1756 | "postcss": "^8.4.43", 1757 | "rollup": "^4.20.0" 1758 | }, 1759 | "bin": { 1760 | "vite": "bin/vite.js" 1761 | }, 1762 | "engines": { 1763 | "node": "^18.0.0 || >=20.0.0" 1764 | }, 1765 | "funding": { 1766 | "url": "https://github.com/vitejs/vite?sponsor=1" 1767 | }, 1768 | "optionalDependencies": { 1769 | "fsevents": "~2.3.3" 1770 | }, 1771 | "peerDependencies": { 1772 | "@types/node": "^18.0.0 || >=20.0.0", 1773 | "less": "*", 1774 | "lightningcss": "^1.21.0", 1775 | "sass": "*", 1776 | "sass-embedded": "*", 1777 | "stylus": "*", 1778 | "sugarss": "*", 1779 | "terser": "^5.4.0" 1780 | }, 1781 | "peerDependenciesMeta": { 1782 | "@types/node": { 1783 | "optional": true 1784 | }, 1785 | "less": { 1786 | "optional": true 1787 | }, 1788 | "lightningcss": { 1789 | "optional": true 1790 | }, 1791 | "sass": { 1792 | "optional": true 1793 | }, 1794 | "sass-embedded": { 1795 | "optional": true 1796 | }, 1797 | "stylus": { 1798 | "optional": true 1799 | }, 1800 | "sugarss": { 1801 | "optional": true 1802 | }, 1803 | "terser": { 1804 | "optional": true 1805 | } 1806 | } 1807 | }, 1808 | "node_modules/vite-node": { 1809 | "version": "2.1.1", 1810 | "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.1.tgz", 1811 | "integrity": "sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==", 1812 | "dev": true, 1813 | "license": "MIT", 1814 | "dependencies": { 1815 | "cac": "^6.7.14", 1816 | "debug": "^4.3.6", 1817 | "pathe": "^1.1.2", 1818 | "vite": "^5.0.0" 1819 | }, 1820 | "bin": { 1821 | "vite-node": "vite-node.mjs" 1822 | }, 1823 | "engines": { 1824 | "node": "^18.0.0 || >=20.0.0" 1825 | }, 1826 | "funding": { 1827 | "url": "https://opencollective.com/vitest" 1828 | } 1829 | }, 1830 | "node_modules/vite/node_modules/@esbuild/aix-ppc64": { 1831 | "version": "0.21.5", 1832 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", 1833 | "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", 1834 | "cpu": [ 1835 | "ppc64" 1836 | ], 1837 | "license": "MIT", 1838 | "optional": true, 1839 | "os": [ 1840 | "aix" 1841 | ], 1842 | "engines": { 1843 | "node": ">=12" 1844 | } 1845 | }, 1846 | "node_modules/vite/node_modules/@esbuild/android-arm": { 1847 | "version": "0.21.5", 1848 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", 1849 | "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", 1850 | "cpu": [ 1851 | "arm" 1852 | ], 1853 | "license": "MIT", 1854 | "optional": true, 1855 | "os": [ 1856 | "android" 1857 | ], 1858 | "engines": { 1859 | "node": ">=12" 1860 | } 1861 | }, 1862 | "node_modules/vite/node_modules/@esbuild/android-arm64": { 1863 | "version": "0.21.5", 1864 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", 1865 | "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", 1866 | "cpu": [ 1867 | "arm64" 1868 | ], 1869 | "license": "MIT", 1870 | "optional": true, 1871 | "os": [ 1872 | "android" 1873 | ], 1874 | "engines": { 1875 | "node": ">=12" 1876 | } 1877 | }, 1878 | "node_modules/vite/node_modules/@esbuild/android-x64": { 1879 | "version": "0.21.5", 1880 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", 1881 | "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", 1882 | "cpu": [ 1883 | "x64" 1884 | ], 1885 | "license": "MIT", 1886 | "optional": true, 1887 | "os": [ 1888 | "android" 1889 | ], 1890 | "engines": { 1891 | "node": ">=12" 1892 | } 1893 | }, 1894 | "node_modules/vite/node_modules/@esbuild/darwin-arm64": { 1895 | "version": "0.21.5", 1896 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", 1897 | "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", 1898 | "cpu": [ 1899 | "arm64" 1900 | ], 1901 | "license": "MIT", 1902 | "optional": true, 1903 | "os": [ 1904 | "darwin" 1905 | ], 1906 | "engines": { 1907 | "node": ">=12" 1908 | } 1909 | }, 1910 | "node_modules/vite/node_modules/@esbuild/darwin-x64": { 1911 | "version": "0.21.5", 1912 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", 1913 | "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", 1914 | "cpu": [ 1915 | "x64" 1916 | ], 1917 | "license": "MIT", 1918 | "optional": true, 1919 | "os": [ 1920 | "darwin" 1921 | ], 1922 | "engines": { 1923 | "node": ">=12" 1924 | } 1925 | }, 1926 | "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { 1927 | "version": "0.21.5", 1928 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", 1929 | "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", 1930 | "cpu": [ 1931 | "arm64" 1932 | ], 1933 | "license": "MIT", 1934 | "optional": true, 1935 | "os": [ 1936 | "freebsd" 1937 | ], 1938 | "engines": { 1939 | "node": ">=12" 1940 | } 1941 | }, 1942 | "node_modules/vite/node_modules/@esbuild/freebsd-x64": { 1943 | "version": "0.21.5", 1944 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", 1945 | "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", 1946 | "cpu": [ 1947 | "x64" 1948 | ], 1949 | "license": "MIT", 1950 | "optional": true, 1951 | "os": [ 1952 | "freebsd" 1953 | ], 1954 | "engines": { 1955 | "node": ">=12" 1956 | } 1957 | }, 1958 | "node_modules/vite/node_modules/@esbuild/linux-arm": { 1959 | "version": "0.21.5", 1960 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", 1961 | "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", 1962 | "cpu": [ 1963 | "arm" 1964 | ], 1965 | "license": "MIT", 1966 | "optional": true, 1967 | "os": [ 1968 | "linux" 1969 | ], 1970 | "engines": { 1971 | "node": ">=12" 1972 | } 1973 | }, 1974 | "node_modules/vite/node_modules/@esbuild/linux-arm64": { 1975 | "version": "0.21.5", 1976 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", 1977 | "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", 1978 | "cpu": [ 1979 | "arm64" 1980 | ], 1981 | "license": "MIT", 1982 | "optional": true, 1983 | "os": [ 1984 | "linux" 1985 | ], 1986 | "engines": { 1987 | "node": ">=12" 1988 | } 1989 | }, 1990 | "node_modules/vite/node_modules/@esbuild/linux-ia32": { 1991 | "version": "0.21.5", 1992 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", 1993 | "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", 1994 | "cpu": [ 1995 | "ia32" 1996 | ], 1997 | "license": "MIT", 1998 | "optional": true, 1999 | "os": [ 2000 | "linux" 2001 | ], 2002 | "engines": { 2003 | "node": ">=12" 2004 | } 2005 | }, 2006 | "node_modules/vite/node_modules/@esbuild/linux-loong64": { 2007 | "version": "0.21.5", 2008 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", 2009 | "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", 2010 | "cpu": [ 2011 | "loong64" 2012 | ], 2013 | "license": "MIT", 2014 | "optional": true, 2015 | "os": [ 2016 | "linux" 2017 | ], 2018 | "engines": { 2019 | "node": ">=12" 2020 | } 2021 | }, 2022 | "node_modules/vite/node_modules/@esbuild/linux-mips64el": { 2023 | "version": "0.21.5", 2024 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", 2025 | "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", 2026 | "cpu": [ 2027 | "mips64el" 2028 | ], 2029 | "license": "MIT", 2030 | "optional": true, 2031 | "os": [ 2032 | "linux" 2033 | ], 2034 | "engines": { 2035 | "node": ">=12" 2036 | } 2037 | }, 2038 | "node_modules/vite/node_modules/@esbuild/linux-ppc64": { 2039 | "version": "0.21.5", 2040 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", 2041 | "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", 2042 | "cpu": [ 2043 | "ppc64" 2044 | ], 2045 | "license": "MIT", 2046 | "optional": true, 2047 | "os": [ 2048 | "linux" 2049 | ], 2050 | "engines": { 2051 | "node": ">=12" 2052 | } 2053 | }, 2054 | "node_modules/vite/node_modules/@esbuild/linux-riscv64": { 2055 | "version": "0.21.5", 2056 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", 2057 | "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", 2058 | "cpu": [ 2059 | "riscv64" 2060 | ], 2061 | "license": "MIT", 2062 | "optional": true, 2063 | "os": [ 2064 | "linux" 2065 | ], 2066 | "engines": { 2067 | "node": ">=12" 2068 | } 2069 | }, 2070 | "node_modules/vite/node_modules/@esbuild/linux-s390x": { 2071 | "version": "0.21.5", 2072 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", 2073 | "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", 2074 | "cpu": [ 2075 | "s390x" 2076 | ], 2077 | "license": "MIT", 2078 | "optional": true, 2079 | "os": [ 2080 | "linux" 2081 | ], 2082 | "engines": { 2083 | "node": ">=12" 2084 | } 2085 | }, 2086 | "node_modules/vite/node_modules/@esbuild/linux-x64": { 2087 | "version": "0.21.5", 2088 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", 2089 | "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", 2090 | "cpu": [ 2091 | "x64" 2092 | ], 2093 | "license": "MIT", 2094 | "optional": true, 2095 | "os": [ 2096 | "linux" 2097 | ], 2098 | "engines": { 2099 | "node": ">=12" 2100 | } 2101 | }, 2102 | "node_modules/vite/node_modules/@esbuild/netbsd-x64": { 2103 | "version": "0.21.5", 2104 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", 2105 | "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", 2106 | "cpu": [ 2107 | "x64" 2108 | ], 2109 | "license": "MIT", 2110 | "optional": true, 2111 | "os": [ 2112 | "netbsd" 2113 | ], 2114 | "engines": { 2115 | "node": ">=12" 2116 | } 2117 | }, 2118 | "node_modules/vite/node_modules/@esbuild/openbsd-x64": { 2119 | "version": "0.21.5", 2120 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", 2121 | "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", 2122 | "cpu": [ 2123 | "x64" 2124 | ], 2125 | "license": "MIT", 2126 | "optional": true, 2127 | "os": [ 2128 | "openbsd" 2129 | ], 2130 | "engines": { 2131 | "node": ">=12" 2132 | } 2133 | }, 2134 | "node_modules/vite/node_modules/@esbuild/sunos-x64": { 2135 | "version": "0.21.5", 2136 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", 2137 | "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", 2138 | "cpu": [ 2139 | "x64" 2140 | ], 2141 | "license": "MIT", 2142 | "optional": true, 2143 | "os": [ 2144 | "sunos" 2145 | ], 2146 | "engines": { 2147 | "node": ">=12" 2148 | } 2149 | }, 2150 | "node_modules/vite/node_modules/@esbuild/win32-arm64": { 2151 | "version": "0.21.5", 2152 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", 2153 | "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", 2154 | "cpu": [ 2155 | "arm64" 2156 | ], 2157 | "license": "MIT", 2158 | "optional": true, 2159 | "os": [ 2160 | "win32" 2161 | ], 2162 | "engines": { 2163 | "node": ">=12" 2164 | } 2165 | }, 2166 | "node_modules/vite/node_modules/@esbuild/win32-ia32": { 2167 | "version": "0.21.5", 2168 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", 2169 | "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", 2170 | "cpu": [ 2171 | "ia32" 2172 | ], 2173 | "license": "MIT", 2174 | "optional": true, 2175 | "os": [ 2176 | "win32" 2177 | ], 2178 | "engines": { 2179 | "node": ">=12" 2180 | } 2181 | }, 2182 | "node_modules/vite/node_modules/@esbuild/win32-x64": { 2183 | "version": "0.21.5", 2184 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", 2185 | "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", 2186 | "cpu": [ 2187 | "x64" 2188 | ], 2189 | "license": "MIT", 2190 | "optional": true, 2191 | "os": [ 2192 | "win32" 2193 | ], 2194 | "engines": { 2195 | "node": ">=12" 2196 | } 2197 | }, 2198 | "node_modules/vite/node_modules/esbuild": { 2199 | "version": "0.21.5", 2200 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", 2201 | "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", 2202 | "hasInstallScript": true, 2203 | "license": "MIT", 2204 | "bin": { 2205 | "esbuild": "bin/esbuild" 2206 | }, 2207 | "engines": { 2208 | "node": ">=12" 2209 | }, 2210 | "optionalDependencies": { 2211 | "@esbuild/aix-ppc64": "0.21.5", 2212 | "@esbuild/android-arm": "0.21.5", 2213 | "@esbuild/android-arm64": "0.21.5", 2214 | "@esbuild/android-x64": "0.21.5", 2215 | "@esbuild/darwin-arm64": "0.21.5", 2216 | "@esbuild/darwin-x64": "0.21.5", 2217 | "@esbuild/freebsd-arm64": "0.21.5", 2218 | "@esbuild/freebsd-x64": "0.21.5", 2219 | "@esbuild/linux-arm": "0.21.5", 2220 | "@esbuild/linux-arm64": "0.21.5", 2221 | "@esbuild/linux-ia32": "0.21.5", 2222 | "@esbuild/linux-loong64": "0.21.5", 2223 | "@esbuild/linux-mips64el": "0.21.5", 2224 | "@esbuild/linux-ppc64": "0.21.5", 2225 | "@esbuild/linux-riscv64": "0.21.5", 2226 | "@esbuild/linux-s390x": "0.21.5", 2227 | "@esbuild/linux-x64": "0.21.5", 2228 | "@esbuild/netbsd-x64": "0.21.5", 2229 | "@esbuild/openbsd-x64": "0.21.5", 2230 | "@esbuild/sunos-x64": "0.21.5", 2231 | "@esbuild/win32-arm64": "0.21.5", 2232 | "@esbuild/win32-ia32": "0.21.5", 2233 | "@esbuild/win32-x64": "0.21.5" 2234 | } 2235 | }, 2236 | "node_modules/vitest": { 2237 | "version": "2.1.1", 2238 | "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.1.tgz", 2239 | "integrity": "sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==", 2240 | "dev": true, 2241 | "license": "MIT", 2242 | "dependencies": { 2243 | "@vitest/expect": "2.1.1", 2244 | "@vitest/mocker": "2.1.1", 2245 | "@vitest/pretty-format": "^2.1.1", 2246 | "@vitest/runner": "2.1.1", 2247 | "@vitest/snapshot": "2.1.1", 2248 | "@vitest/spy": "2.1.1", 2249 | "@vitest/utils": "2.1.1", 2250 | "chai": "^5.1.1", 2251 | "debug": "^4.3.6", 2252 | "magic-string": "^0.30.11", 2253 | "pathe": "^1.1.2", 2254 | "std-env": "^3.7.0", 2255 | "tinybench": "^2.9.0", 2256 | "tinyexec": "^0.3.0", 2257 | "tinypool": "^1.0.0", 2258 | "tinyrainbow": "^1.2.0", 2259 | "vite": "^5.0.0", 2260 | "vite-node": "2.1.1", 2261 | "why-is-node-running": "^2.3.0" 2262 | }, 2263 | "bin": { 2264 | "vitest": "vitest.mjs" 2265 | }, 2266 | "engines": { 2267 | "node": "^18.0.0 || >=20.0.0" 2268 | }, 2269 | "funding": { 2270 | "url": "https://opencollective.com/vitest" 2271 | }, 2272 | "peerDependencies": { 2273 | "@edge-runtime/vm": "*", 2274 | "@types/node": "^18.0.0 || >=20.0.0", 2275 | "@vitest/browser": "2.1.1", 2276 | "@vitest/ui": "2.1.1", 2277 | "happy-dom": "*", 2278 | "jsdom": "*" 2279 | }, 2280 | "peerDependenciesMeta": { 2281 | "@edge-runtime/vm": { 2282 | "optional": true 2283 | }, 2284 | "@types/node": { 2285 | "optional": true 2286 | }, 2287 | "@vitest/browser": { 2288 | "optional": true 2289 | }, 2290 | "@vitest/ui": { 2291 | "optional": true 2292 | }, 2293 | "happy-dom": { 2294 | "optional": true 2295 | }, 2296 | "jsdom": { 2297 | "optional": true 2298 | } 2299 | } 2300 | }, 2301 | "node_modules/which": { 2302 | "version": "2.0.2", 2303 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2304 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2305 | "dev": true, 2306 | "license": "ISC", 2307 | "dependencies": { 2308 | "isexe": "^2.0.0" 2309 | }, 2310 | "bin": { 2311 | "node-which": "bin/node-which" 2312 | }, 2313 | "engines": { 2314 | "node": ">= 8" 2315 | } 2316 | }, 2317 | "node_modules/why-is-node-running": { 2318 | "version": "2.3.0", 2319 | "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", 2320 | "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", 2321 | "dev": true, 2322 | "license": "MIT", 2323 | "dependencies": { 2324 | "siginfo": "^2.0.0", 2325 | "stackback": "0.0.2" 2326 | }, 2327 | "bin": { 2328 | "why-is-node-running": "cli.js" 2329 | }, 2330 | "engines": { 2331 | "node": ">=8" 2332 | } 2333 | }, 2334 | "node_modules/wrap-ansi": { 2335 | "version": "8.1.0", 2336 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 2337 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 2338 | "dev": true, 2339 | "license": "MIT", 2340 | "dependencies": { 2341 | "ansi-styles": "^6.1.0", 2342 | "string-width": "^5.0.1", 2343 | "strip-ansi": "^7.0.1" 2344 | }, 2345 | "engines": { 2346 | "node": ">=12" 2347 | }, 2348 | "funding": { 2349 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2350 | } 2351 | }, 2352 | "node_modules/wrap-ansi-cjs": { 2353 | "name": "wrap-ansi", 2354 | "version": "7.0.0", 2355 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2356 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2357 | "dev": true, 2358 | "license": "MIT", 2359 | "dependencies": { 2360 | "ansi-styles": "^4.0.0", 2361 | "string-width": "^4.1.0", 2362 | "strip-ansi": "^6.0.0" 2363 | }, 2364 | "engines": { 2365 | "node": ">=10" 2366 | }, 2367 | "funding": { 2368 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2369 | } 2370 | }, 2371 | "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { 2372 | "version": "5.0.1", 2373 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2374 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2375 | "dev": true, 2376 | "license": "MIT", 2377 | "engines": { 2378 | "node": ">=8" 2379 | } 2380 | }, 2381 | "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { 2382 | "version": "4.3.0", 2383 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2384 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2385 | "dev": true, 2386 | "license": "MIT", 2387 | "dependencies": { 2388 | "color-convert": "^2.0.1" 2389 | }, 2390 | "engines": { 2391 | "node": ">=8" 2392 | }, 2393 | "funding": { 2394 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2395 | } 2396 | }, 2397 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { 2398 | "version": "8.0.0", 2399 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2400 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 2401 | "dev": true, 2402 | "license": "MIT" 2403 | }, 2404 | "node_modules/wrap-ansi-cjs/node_modules/string-width": { 2405 | "version": "4.2.3", 2406 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2407 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2408 | "dev": true, 2409 | "license": "MIT", 2410 | "dependencies": { 2411 | "emoji-regex": "^8.0.0", 2412 | "is-fullwidth-code-point": "^3.0.0", 2413 | "strip-ansi": "^6.0.1" 2414 | }, 2415 | "engines": { 2416 | "node": ">=8" 2417 | } 2418 | }, 2419 | "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { 2420 | "version": "6.0.1", 2421 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2422 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2423 | "dev": true, 2424 | "license": "MIT", 2425 | "dependencies": { 2426 | "ansi-regex": "^5.0.1" 2427 | }, 2428 | "engines": { 2429 | "node": ">=8" 2430 | } 2431 | }, 2432 | "node_modules/yn": { 2433 | "version": "3.1.1", 2434 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 2435 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 2436 | "dev": true, 2437 | "license": "MIT", 2438 | "engines": { 2439 | "node": ">=6" 2440 | } 2441 | } 2442 | } 2443 | } 2444 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@deno/vite-plugin", 3 | "version": "1.0.4", 4 | "type": "module", 5 | "license": "MIT", 6 | "exports": { 7 | ".": { 8 | "import": "./dist/index.js" 9 | } 10 | }, 11 | "files": [ 12 | "dist/" 13 | ], 14 | "keywords": [ 15 | "deno", 16 | "vite", 17 | "plugin" 18 | ], 19 | "repository": { 20 | "type": "git", 21 | "url": "git+https://github.com/denoland/deno-vite-plugin.git" 22 | }, 23 | "scripts": { 24 | "test": "vitest", 25 | "build": "rimraf dist/ && tsc", 26 | "build:fixture": "cd tests/fixture && vite build", 27 | "prepublishOnly": "npm run build" 28 | }, 29 | "peerDependencies": { 30 | "vite": "5.x || 6.x" 31 | }, 32 | "devDependencies": { 33 | "@types/node": "^22.5.5", 34 | "esbuild": "^0.23.1", 35 | "rimraf": "^6.0.1", 36 | "ts-node": "^10.9.2", 37 | "typescript": "^5.6.2", 38 | "vitest": "^2.1.1" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { Plugin } from "vite"; 2 | import prefixPlugin from "./prefixPlugin.js"; 3 | import mainPlugin from "./resolvePlugin.js"; 4 | import { DenoResolveResult } from "./resolver.js"; 5 | 6 | export default function deno(): Plugin[] { 7 | const cache = new Map(); 8 | 9 | return [prefixPlugin(cache), mainPlugin(cache)]; 10 | } 11 | -------------------------------------------------------------------------------- /src/prefixPlugin.ts: -------------------------------------------------------------------------------- 1 | import { Plugin } from "vite"; 2 | import { 3 | DenoResolveResult, 4 | resolveDeno, 5 | resolveViteSpecifier, 6 | } from "./resolver.js"; 7 | import process from "node:process"; 8 | 9 | export default function denoPrefixPlugin( 10 | cache: Map, 11 | ): Plugin { 12 | let root = process.cwd(); 13 | 14 | return { 15 | name: "deno:prefix", 16 | enforce: "pre", 17 | configResolved(config) { 18 | root = config.root; 19 | }, 20 | async resolveId(id, importer) { 21 | if (id.startsWith("npm:")) { 22 | const resolved = await resolveDeno(id, root); 23 | if (resolved === null) return; 24 | 25 | // TODO: Resolving custom versions is not supported at the moment 26 | const actual = resolved.id.slice(0, resolved.id.indexOf("@")); 27 | const result = await this.resolve(actual); 28 | return result ?? actual; 29 | } else if (id.startsWith("http:") || id.startsWith("https:")) { 30 | return await resolveViteSpecifier(id, cache, root, importer); 31 | } 32 | }, 33 | }; 34 | } 35 | -------------------------------------------------------------------------------- /src/resolvePlugin.ts: -------------------------------------------------------------------------------- 1 | import { Plugin } from "vite"; 2 | import { 3 | type DenoMediaType, 4 | type DenoResolveResult, 5 | isDenoSpecifier, 6 | parseDenoSpecifier, 7 | resolveViteSpecifier, 8 | } from "./resolver.js"; 9 | import { type Loader, transform } from "esbuild"; 10 | import * as fsp from "node:fs/promises"; 11 | import process from "node:process"; 12 | 13 | export default function denoPlugin( 14 | cache: Map, 15 | ): Plugin { 16 | let root = process.cwd(); 17 | 18 | return { 19 | name: "deno", 20 | configResolved(config) { 21 | root = config.root; 22 | }, 23 | async resolveId(id, importer) { 24 | // The "pre"-resolve plugin already resolved it 25 | if (isDenoSpecifier(id)) return; 26 | 27 | return await resolveViteSpecifier(id, cache, root, importer); 28 | }, 29 | async load(id) { 30 | if (!isDenoSpecifier(id)) return; 31 | 32 | const { loader, resolved } = parseDenoSpecifier(id); 33 | 34 | const content = await fsp.readFile(resolved, "utf-8"); 35 | if (loader === "JavaScript") return content; 36 | if (loader === "Json") { 37 | return `export default ${content}`; 38 | } 39 | 40 | const result = await transform(content, { 41 | format: "esm", 42 | loader: mediaTypeToLoader(loader), 43 | logLevel: "debug", 44 | }); 45 | 46 | // Issue: https://github.com/denoland/deno-vite-plugin/issues/38 47 | // Esbuild uses an empty string as empty value and vite expects 48 | // `null` to be the empty value. This seems to be only the case in 49 | // `dev` mode 50 | const map = result.map === "" ? null : result.map; 51 | 52 | return { 53 | code: result.code, 54 | map, 55 | }; 56 | }, 57 | }; 58 | } 59 | 60 | function mediaTypeToLoader(media: DenoMediaType): Loader { 61 | switch (media) { 62 | case "JSX": 63 | return "jsx"; 64 | case "JavaScript": 65 | return "js"; 66 | case "Json": 67 | return "json"; 68 | case "TSX": 69 | return "tsx"; 70 | case "TypeScript": 71 | return "ts"; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /src/resolver.ts: -------------------------------------------------------------------------------- 1 | import { execFile } from "node:child_process"; 2 | import process from "node:process"; 3 | import path from "node:path"; 4 | import { fileURLToPath } from "node:url"; 5 | import { execAsync } from "./utils.js"; 6 | 7 | export type DenoMediaType = 8 | | "TypeScript" 9 | | "TSX" 10 | | "JavaScript" 11 | | "JSX" 12 | | "Json"; 13 | 14 | interface ResolvedInfo { 15 | kind: "esm"; 16 | local: string; 17 | size: number; 18 | mediaType: DenoMediaType; 19 | specifier: string; 20 | dependencies: Array<{ 21 | specifier: string; 22 | code: { 23 | specifier: string; 24 | span: { start: unknown; end: unknown }; 25 | }; 26 | }>; 27 | } 28 | 29 | interface NpmResolvedInfo { 30 | kind: "npm"; 31 | specifier: string; 32 | npmPackage: string; 33 | } 34 | 35 | interface ExternalResolvedInfo { 36 | kind: "external"; 37 | specifier: string; 38 | } 39 | 40 | interface ResolveError { 41 | specifier: string; 42 | error: string; 43 | } 44 | 45 | interface DenoInfoJsonV1 { 46 | version: 1; 47 | redirects: Record; 48 | roots: string[]; 49 | modules: Array< 50 | NpmResolvedInfo | ResolvedInfo | ExternalResolvedInfo | ResolveError 51 | >; 52 | } 53 | 54 | export interface DenoResolveResult { 55 | id: string; 56 | kind: "esm" | "npm"; 57 | loader: DenoMediaType | null; 58 | dependencies: ResolvedInfo["dependencies"]; 59 | } 60 | 61 | function isResolveError( 62 | info: NpmResolvedInfo | ResolvedInfo | ExternalResolvedInfo | ResolveError, 63 | ): info is ResolveError { 64 | return "error" in info && typeof info.error === "string"; 65 | } 66 | 67 | let checkedDenoInstall = false; 68 | const DENO_BINARY = process.platform === "win32" ? "deno.exe" : "deno"; 69 | 70 | export async function resolveDeno( 71 | id: string, 72 | cwd: string, 73 | ): Promise { 74 | if (!checkedDenoInstall) { 75 | try { 76 | await execAsync(`${DENO_BINARY} --version`, { cwd }); 77 | checkedDenoInstall = true; 78 | } catch { 79 | throw new Error( 80 | `Deno binary could not be found. Install Deno to resolve this error.`, 81 | ); 82 | } 83 | } 84 | 85 | // There is no JS-API in Deno to get the final file path in Deno's 86 | // cache directory. The `deno info` command reveals that information 87 | // though, so we can use that. 88 | const output = await new Promise((resolve, reject) => { 89 | execFile(DENO_BINARY, ["info", "--json", id], { cwd }, (error, stdout) => { 90 | if (error) { 91 | if (String(error).includes("Integrity check failed")) { 92 | reject(error); 93 | } else { 94 | resolve(null); 95 | } 96 | } else resolve(stdout); 97 | }); 98 | }); 99 | 100 | if (output === null) return null; 101 | 102 | const json = JSON.parse(output) as DenoInfoJsonV1; 103 | const actualId = json.roots[0]; 104 | 105 | // Find the final resolved cache path. First, we need to check 106 | // if the redirected specifier, which represents the final specifier. 107 | // This is often used for `http://` imports where a server can do 108 | // redirects. 109 | const redirected = json.redirects[actualId] ?? actualId; 110 | 111 | // Find the module information based on the redirected speciffier 112 | const mod = json.modules.find((info) => info.specifier === redirected); 113 | if (mod === undefined) return null; 114 | 115 | // Specifier not found by deno 116 | if (isResolveError(mod)) { 117 | return null; 118 | } 119 | 120 | if (mod.kind === "esm") { 121 | return { 122 | id: mod.local, 123 | kind: mod.kind, 124 | loader: mod.mediaType, 125 | dependencies: mod.dependencies, 126 | }; 127 | } else if (mod.kind === "npm") { 128 | return { 129 | id: mod.npmPackage, 130 | kind: mod.kind, 131 | loader: null, 132 | dependencies: [], 133 | }; 134 | } else if (mod.kind === "external") { 135 | // Let vite handle this 136 | return null; 137 | } 138 | 139 | throw new Error(`Unsupported: ${JSON.stringify(mod, null, 2)}`); 140 | } 141 | 142 | export async function resolveViteSpecifier( 143 | id: string, 144 | cache: Map, 145 | root: string, 146 | importer?: string, 147 | ) { 148 | // Resolve import map 149 | if (!id.startsWith(".") && !id.startsWith("/")) { 150 | try { 151 | id = import.meta.resolve(id); 152 | } catch { 153 | // Ignore: not resolvable 154 | } 155 | } 156 | 157 | if (importer && isDenoSpecifier(importer)) { 158 | const { resolved: parent } = parseDenoSpecifier(importer); 159 | 160 | const cached = cache.get(parent); 161 | if (cached === undefined) return; 162 | 163 | const found = cached.dependencies.find((dep) => dep.specifier === id); 164 | 165 | if (found === undefined) return; 166 | 167 | // Check if we need to continue resolution 168 | id = found.code.specifier; 169 | if (id.startsWith("file://")) { 170 | return fileURLToPath(id); 171 | } 172 | } 173 | 174 | const resolved = cache.get(id) ?? await resolveDeno(id, root); 175 | 176 | // Deno cannot resolve this 177 | if (resolved === null) return; 178 | 179 | if (resolved.kind === "npm") { 180 | return null; 181 | } 182 | 183 | cache.set(resolved.id, resolved); 184 | 185 | // Vite can load this 186 | if ( 187 | resolved.loader === null || 188 | resolved.id.startsWith(path.resolve(root)) && 189 | !path.relative(root, resolved.id).startsWith(".") 190 | ) { 191 | return resolved.id; 192 | } 193 | 194 | // We must load it 195 | return toDenoSpecifier(resolved.loader, id, resolved.id); 196 | } 197 | 198 | export type DenoSpecifierName = string & { __brand: "deno" }; 199 | 200 | export function isDenoSpecifier(str: string): str is DenoSpecifierName { 201 | return str.startsWith("\0deno"); 202 | } 203 | 204 | export function toDenoSpecifier( 205 | loader: DenoMediaType, 206 | id: string, 207 | resolved: string, 208 | ): DenoSpecifierName { 209 | return `\0deno::${loader}::${id}::${resolved}` as DenoSpecifierName; 210 | } 211 | 212 | export function parseDenoSpecifier(spec: DenoSpecifierName): { 213 | loader: DenoMediaType; 214 | id: string; 215 | resolved: string; 216 | } { 217 | const [_, loader, id, resolved] = spec.split("::") as [ 218 | string, 219 | string, 220 | DenoMediaType, 221 | string, 222 | ]; 223 | return { loader: loader as DenoMediaType, id, resolved }; 224 | } 225 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | import child_process from "node:child_process"; 2 | 3 | export async function execAsync( 4 | cmd: string, 5 | options: child_process.ExecOptions, 6 | ): Promise<{ stderr: string; stdout: string }> { 7 | return await new Promise((resolve, reject) => 8 | child_process.exec(cmd, options, (error, stdout, stderr) => { 9 | if (error) reject(error); 10 | else resolve({ stdout, stderr }); 11 | }) 12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /tests/fixture/alias-hash-prefix.ts: -------------------------------------------------------------------------------- 1 | import { value } from "#hash-prefix/main.ts"; 2 | 3 | console.log(value); 4 | -------------------------------------------------------------------------------- /tests/fixture/alias-mapped.ts: -------------------------------------------------------------------------------- 1 | import { value } from "mapped/main.ts"; 2 | 3 | console.log(value); 4 | -------------------------------------------------------------------------------- /tests/fixture/alias-target.ts: -------------------------------------------------------------------------------- 1 | export const result = "it works"; 2 | -------------------------------------------------------------------------------- /tests/fixture/alias.ts: -------------------------------------------------------------------------------- 1 | import { result } from "import-map-alias"; 2 | 3 | console.log(result); 4 | -------------------------------------------------------------------------------- /tests/fixture/deno.json: -------------------------------------------------------------------------------- 1 | { 2 | "unstable": ["sloppy-imports"], 3 | "lint": { 4 | "rules": { 5 | "exclude": ["no-sloppy-imports"] 6 | } 7 | }, 8 | "nodeModulesDir": "auto", 9 | "imports": { 10 | "@std/path": "jsr:@std/path@^1.0.6", 11 | "import-map-alias": "./alias-target.ts", 12 | "preact": "npm:preact@^10.24.0", 13 | "preact-http": "https://esm.sh/preact", 14 | "mapped/": "./mapped/", 15 | "#hash-prefix/": "./mapped/" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /tests/fixture/deno.lock: -------------------------------------------------------------------------------- 1 | { 2 | "version": "4", 3 | "specifiers": { 4 | "jsr:@std/path@^1.0.6": "1.0.8", 5 | "npm:preact@^10.24.0": "10.25.4" 6 | }, 7 | "jsr": { 8 | "@std/path@1.0.8": { 9 | "integrity": "548fa456bb6a04d3c1a1e7477986b6cffbce95102d0bb447c67c4ee70e0364be" 10 | } 11 | }, 12 | "npm": { 13 | "preact@10.25.4": { 14 | "integrity": "sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==" 15 | } 16 | }, 17 | "remote": { 18 | "https://esm.sh/preact@10.25.4/denonext/preact.mjs": "5b19c5a3daab9e9f4f4bed775afbb84dd4de2b8cc670ee332f5458c53a6a2d45" 19 | }, 20 | "workspace": { 21 | "dependencies": [ 22 | "jsr:@std/path@^1.0.6", 23 | "npm:preact@^10.24.0" 24 | ] 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /tests/fixture/http.ts: -------------------------------------------------------------------------------- 1 | import { render } from "preact-http"; 2 | 3 | if (typeof render === "function") { 4 | console.log("it works"); 5 | } 6 | -------------------------------------------------------------------------------- /tests/fixture/inlineExternal.ts: -------------------------------------------------------------------------------- 1 | import * as helper from "\0vite/preload-helper.js"; 2 | 3 | if (helper !== undefined) { 4 | console.log("it works"); 5 | } 6 | -------------------------------------------------------------------------------- /tests/fixture/inlineHttp.ts: -------------------------------------------------------------------------------- 1 | import { render } from "https://esm.sh/preact"; 2 | 3 | if (typeof render === "function") { 4 | console.log("it works"); 5 | } 6 | -------------------------------------------------------------------------------- /tests/fixture/inlineJsr.ts: -------------------------------------------------------------------------------- 1 | import { join } from "jsr:@std/path"; 2 | 3 | if (typeof join === "function") { 4 | console.log("it works"); 5 | } 6 | -------------------------------------------------------------------------------- /tests/fixture/inlineNpm.ts: -------------------------------------------------------------------------------- 1 | import { render } from "npm:preact"; 2 | 3 | if (typeof render === "function") { 4 | console.log("it works"); 5 | } 6 | -------------------------------------------------------------------------------- /tests/fixture/jsr.ts: -------------------------------------------------------------------------------- 1 | import { join } from "@std/path"; 2 | 3 | if (typeof join === "function") { 4 | console.log("it works"); 5 | } 6 | -------------------------------------------------------------------------------- /tests/fixture/mapped/dep.ts: -------------------------------------------------------------------------------- 1 | export const dep = "it works"; 2 | -------------------------------------------------------------------------------- /tests/fixture/mapped/foo.ts: -------------------------------------------------------------------------------- 1 | // will be transformed by a plugin 2 | export const value = "it doesn't work"; 3 | -------------------------------------------------------------------------------- /tests/fixture/mapped/main.ts: -------------------------------------------------------------------------------- 1 | import { dep } from "./dep.ts"; 2 | 3 | export const value = dep; 4 | -------------------------------------------------------------------------------- /tests/fixture/npm.ts: -------------------------------------------------------------------------------- 1 | import { render } from "preact"; 2 | 3 | if (typeof render === "function") { 4 | console.log("it works"); 5 | } 6 | -------------------------------------------------------------------------------- /tests/fixture/resolveInRootDir.ts: -------------------------------------------------------------------------------- 1 | import { value } from "mapped/foo.ts"; 2 | 3 | console.log(value); 4 | -------------------------------------------------------------------------------- /tests/fixture/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import deno from "../../src/index"; 3 | import path from "node:path"; 4 | 5 | export default defineConfig({ 6 | plugins: [deno(), { 7 | name: "mapped-transform", 8 | // @ts-ignore not sure 9 | transform(code, id) { 10 | if (id.startsWith("\0")) return; 11 | if (!id.includes("mapped") || path.basename(id) !== "foo.ts") return; 12 | 13 | return code.replace("it doesn't work", "it works"); 14 | }, 15 | }], 16 | build: { 17 | lib: { 18 | formats: ["es"], 19 | entry: { 20 | importMapAlias: "alias.ts", 21 | importMapAliasMapped: "alias-mapped.ts", 22 | importMapAliasHashPrefix: "alias-hash-prefix.ts", 23 | importMapNpm: "npm.ts", 24 | importMapJsr: "jsr.ts", 25 | importMapHttp: "http.ts", 26 | inlineExternal: "inlineExternal.ts", 27 | inlineNpm: "inlineNpm.ts", 28 | inlineJsr: "inlineJsr.ts", 29 | inlineHttp: "inlineHttp.ts", 30 | resolveInRootDir: "resolveInRootDir.ts", 31 | }, 32 | }, 33 | }, 34 | }); 35 | -------------------------------------------------------------------------------- /tests/plugin.test.ts: -------------------------------------------------------------------------------- 1 | import * as path from "node:path"; 2 | import { beforeAll, describe, expect, it } from "vitest"; 3 | import { execAsync } from "../src/utils.ts"; 4 | 5 | const fixtureDir = path.join(import.meta.dirname!, "fixture"); 6 | 7 | async function runTest(file: string) { 8 | const res = await execAsync(`node dist/${file}`, { 9 | cwd: fixtureDir, 10 | }); 11 | expect(res.stdout.trim()).toEqual("it works"); 12 | } 13 | 14 | describe("Deno plugin", () => { 15 | beforeAll(async () => { 16 | await execAsync(`npx vite build`, { 17 | cwd: fixtureDir, 18 | }); 19 | }); 20 | 21 | describe("import map", () => { 22 | it("resolves alias", async () => { 23 | await runTest(`importMapAlias.js`); 24 | }); 25 | 26 | it("resolves alias mapped", async () => { 27 | await runTest(`importMapAliasMapped.js`); 28 | }); 29 | 30 | it("resolves alias mapped with hash prefix", async () => { 31 | await runTest(`importMapAliasHashPrefix.js`); 32 | }); 33 | 34 | it("resolves npm:", async () => { 35 | await runTest(`importMapNpm.js`); 36 | }); 37 | 38 | it("resolves jsr:", async () => { 39 | await runTest(`importMapJsr.js`); 40 | }); 41 | 42 | it("resolves http:", async () => { 43 | await runTest(`importMapHttp.js`); 44 | }); 45 | }); 46 | 47 | describe("inline", () => { 48 | it("resolves external:", async () => { 49 | await runTest(`inlineExternal.js`); 50 | }); 51 | 52 | it("resolves npm:", async () => { 53 | await runTest(`inlineNpm.js`); 54 | }); 55 | 56 | it("resolves jsr:", async () => { 57 | await runTest(`inlineJsr.js`); 58 | }); 59 | 60 | it("resolves http:", async () => { 61 | await runTest(`inlineHttp.js`); 62 | }); 63 | }); 64 | 65 | // https://github.com/denoland/deno-vite-plugin/issues/42 66 | it("resolve to file in root dir", async () => { 67 | await runTest(`resolveInRootDir.js`); 68 | }); 69 | }); 70 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "./dist/", 4 | "declaration": true, 5 | "target": "ES2020", 6 | "module": "NodeNext", 7 | "moduleResolution": "NodeNext" 8 | }, 9 | "include": ["src"], 10 | "exclude": ["vendor/"] 11 | } 12 | --------------------------------------------------------------------------------