├── .eslintrc.cjs ├── .github └── workflows │ └── test.yml ├── .gitignore ├── README.md ├── game-demo.ts ├── package-lock.json ├── package.json ├── pnpm-lock.yaml ├── src ├── ai.ts ├── board-val-replacement.d.ts ├── board.d.ts ├── index.ts ├── prompt.d.ts ├── utils.d.ts └── win-conditions.d.ts ├── tests ├── ai.spec.ts ├── board-val-replacement.spec.ts ├── board.spec.ts ├── prompt.spec.ts ├── utils.spec.ts └── win-conditions.spec.ts └── tsconfig.json /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: [ 3 | "plugin:@typescript-eslint/recommended", 4 | "plugin:prettier/recommended", 5 | ], 6 | parser: "@typescript-eslint/parser", 7 | plugins: ["prettier"], 8 | parserOptions: { 9 | tsconfigRootDir: __dirname, 10 | project: true, 11 | } 12 | }; -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | pull_request: 7 | branches: [ main ] 8 | 9 | jobs: 10 | test: 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - uses: actions/checkout@v3 15 | - uses: actions/setup-node@v3 16 | with: 17 | node-version: '18' 18 | cache: 'npm' 19 | 20 | - name: Install packages 21 | run: npm ci 22 | 23 | - name: Run tests 24 | run: npm run test -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.js -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |

✖️ Tic-Tac-Type ⭕

3 |

An implementation of Tic-Tac-Toe written using only TypeScript types

4 |
5 | 6 | --- 7 | 8 |
9 | 10 | [![Test Status](https://img.shields.io/github/actions/workflow/status/crutchcorn/tic-tac-types/test.yml?branch=main&label=tests)](https://github.com/crutchcorn/tic-tac-types/actions/workflows/test.yml?query=branch%3Amain) 11 | [![license](https://badgen.now.sh/badge/license/MIT)](./LICENSE.md) 12 | 13 |
14 | 15 | --- 16 | 17 | There is zero JavaScript to play this game of Tic-Tac-Toe, only TypeScript type definitions. You'll notice everything in `src` is written as `.d.ts` files to prove this to you. 18 | 19 | There are also tests to validate the functionality of the games' components. 20 | 21 | ## How to Play 22 | 23 | The game is set up and ready to play in [`./game-demo.ts`](./game-demo.ts). The board that's set up is structed like so: 24 | 25 | ```ts 26 | type Board = [ 27 | ["1", "2", "3"], 28 | ["4", "5", "6"], 29 | ["7", "8", "9"], 30 | ]; 31 | ``` 32 | 33 | To play a move, you use the `Prompt` type: 34 | 35 | ```ts 36 | type TurnOne = Prompt; 37 | ``` 38 | 39 | This will play `X` where the `"7"` previously was, and the "AI" will automatically play `"O"`: 40 | 41 | ```ts 42 | type Board = [ 43 | ["O", "2", "3"], 44 | ["4", "5", "6"], 45 | ["X", "8", "9"], 46 | ]; 47 | ``` 48 | 49 | When a few moves are played: 50 | 51 | ```ts 52 | type Board = [ 53 | ["O", "O", "3"], 54 | ["4", "5", "6"], 55 | ["X", "X", "9"], 56 | ]; 57 | 58 | Prompt 59 | ``` 60 | 61 | It will output: `"Player wins!"` or `"Computer wins!"` depending on who last played. 62 | 63 | ## Notes 64 | 65 | - The AI will only ever play the first available move on the board, making it trivial to cheat 66 | - The only file that needs to be changed here is `ai.ts`, everything else should support this 67 | - In the future, the final played board would be nice to see the win/loss against 68 | - Win conditions are currently represented as strings in `win-conditions.ts`. 69 | - It might be nice to define the size of a board, and would require this logic to change -------------------------------------------------------------------------------- /game-demo.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-unused-vars */ 2 | import { GenericBoard, Prompt } from "./src"; 3 | 4 | const board = [ 5 | ["1", "2", "3"], 6 | ["4", "5", "6"], 7 | ["7", "8", "9"], 8 | ] satisfies GenericBoard; 9 | 10 | type Board = typeof board; 11 | 12 | /** 13 | * User is X, game-engine is O 14 | * 15 | * Game engine inserts at first `X|O` value 16 | * @example 17 | * ["1", "2", "3"], 18 | * ["4", "5", "6"], 19 | * ["X", "8", "9"] 20 | * 21 | * @example 22 | * ["O", "2", "3"], 23 | * ["4", "5", "6"], 24 | * ["X", "8", "9"] 25 | */ 26 | type TurnOneBoard = Prompt; 27 | type TurnTwoBoard = Prompt; 28 | type TurnThreeBoard = Prompt; // Player wins! 29 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tic-tac-types", 3 | "version": "0.0.1", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "tic-tac-types", 9 | "version": "0.0.1", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "@typescript-eslint/eslint-plugin": "^7.1.0", 13 | "@typescript-eslint/parser": "^7.1.0", 14 | "eslint": "^8.57.0", 15 | "eslint-config-prettier": "^9.1.0", 16 | "eslint-plugin-prettier": "^5.1.3", 17 | "prettier": "^3.2.5", 18 | "typescript": "5.3.3", 19 | "vitest": "^1.3.1" 20 | } 21 | }, 22 | "node_modules/@aashutoshrathi/word-wrap": { 23 | "version": "1.2.6", 24 | "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", 25 | "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", 26 | "dev": true, 27 | "engines": { 28 | "node": ">=0.10.0" 29 | } 30 | }, 31 | "node_modules/@esbuild/aix-ppc64": { 32 | "version": "0.19.12", 33 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", 34 | "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", 35 | "cpu": [ 36 | "ppc64" 37 | ], 38 | "dev": true, 39 | "optional": true, 40 | "os": [ 41 | "aix" 42 | ], 43 | "engines": { 44 | "node": ">=12" 45 | } 46 | }, 47 | "node_modules/@esbuild/android-arm": { 48 | "version": "0.19.12", 49 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", 50 | "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", 51 | "cpu": [ 52 | "arm" 53 | ], 54 | "dev": true, 55 | "optional": true, 56 | "os": [ 57 | "android" 58 | ], 59 | "engines": { 60 | "node": ">=12" 61 | } 62 | }, 63 | "node_modules/@esbuild/android-arm64": { 64 | "version": "0.19.12", 65 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", 66 | "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", 67 | "cpu": [ 68 | "arm64" 69 | ], 70 | "dev": true, 71 | "optional": true, 72 | "os": [ 73 | "android" 74 | ], 75 | "engines": { 76 | "node": ">=12" 77 | } 78 | }, 79 | "node_modules/@esbuild/android-x64": { 80 | "version": "0.19.12", 81 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", 82 | "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", 83 | "cpu": [ 84 | "x64" 85 | ], 86 | "dev": true, 87 | "optional": true, 88 | "os": [ 89 | "android" 90 | ], 91 | "engines": { 92 | "node": ">=12" 93 | } 94 | }, 95 | "node_modules/@esbuild/darwin-arm64": { 96 | "version": "0.19.12", 97 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", 98 | "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", 99 | "cpu": [ 100 | "arm64" 101 | ], 102 | "dev": true, 103 | "optional": true, 104 | "os": [ 105 | "darwin" 106 | ], 107 | "engines": { 108 | "node": ">=12" 109 | } 110 | }, 111 | "node_modules/@esbuild/darwin-x64": { 112 | "version": "0.19.12", 113 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", 114 | "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", 115 | "cpu": [ 116 | "x64" 117 | ], 118 | "dev": true, 119 | "optional": true, 120 | "os": [ 121 | "darwin" 122 | ], 123 | "engines": { 124 | "node": ">=12" 125 | } 126 | }, 127 | "node_modules/@esbuild/freebsd-arm64": { 128 | "version": "0.19.12", 129 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", 130 | "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", 131 | "cpu": [ 132 | "arm64" 133 | ], 134 | "dev": true, 135 | "optional": true, 136 | "os": [ 137 | "freebsd" 138 | ], 139 | "engines": { 140 | "node": ">=12" 141 | } 142 | }, 143 | "node_modules/@esbuild/freebsd-x64": { 144 | "version": "0.19.12", 145 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", 146 | "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", 147 | "cpu": [ 148 | "x64" 149 | ], 150 | "dev": true, 151 | "optional": true, 152 | "os": [ 153 | "freebsd" 154 | ], 155 | "engines": { 156 | "node": ">=12" 157 | } 158 | }, 159 | "node_modules/@esbuild/linux-arm": { 160 | "version": "0.19.12", 161 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", 162 | "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", 163 | "cpu": [ 164 | "arm" 165 | ], 166 | "dev": true, 167 | "optional": true, 168 | "os": [ 169 | "linux" 170 | ], 171 | "engines": { 172 | "node": ">=12" 173 | } 174 | }, 175 | "node_modules/@esbuild/linux-arm64": { 176 | "version": "0.19.12", 177 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", 178 | "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", 179 | "cpu": [ 180 | "arm64" 181 | ], 182 | "dev": true, 183 | "optional": true, 184 | "os": [ 185 | "linux" 186 | ], 187 | "engines": { 188 | "node": ">=12" 189 | } 190 | }, 191 | "node_modules/@esbuild/linux-ia32": { 192 | "version": "0.19.12", 193 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", 194 | "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", 195 | "cpu": [ 196 | "ia32" 197 | ], 198 | "dev": true, 199 | "optional": true, 200 | "os": [ 201 | "linux" 202 | ], 203 | "engines": { 204 | "node": ">=12" 205 | } 206 | }, 207 | "node_modules/@esbuild/linux-loong64": { 208 | "version": "0.19.12", 209 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", 210 | "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", 211 | "cpu": [ 212 | "loong64" 213 | ], 214 | "dev": true, 215 | "optional": true, 216 | "os": [ 217 | "linux" 218 | ], 219 | "engines": { 220 | "node": ">=12" 221 | } 222 | }, 223 | "node_modules/@esbuild/linux-mips64el": { 224 | "version": "0.19.12", 225 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", 226 | "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", 227 | "cpu": [ 228 | "mips64el" 229 | ], 230 | "dev": true, 231 | "optional": true, 232 | "os": [ 233 | "linux" 234 | ], 235 | "engines": { 236 | "node": ">=12" 237 | } 238 | }, 239 | "node_modules/@esbuild/linux-ppc64": { 240 | "version": "0.19.12", 241 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", 242 | "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", 243 | "cpu": [ 244 | "ppc64" 245 | ], 246 | "dev": true, 247 | "optional": true, 248 | "os": [ 249 | "linux" 250 | ], 251 | "engines": { 252 | "node": ">=12" 253 | } 254 | }, 255 | "node_modules/@esbuild/linux-riscv64": { 256 | "version": "0.19.12", 257 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", 258 | "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", 259 | "cpu": [ 260 | "riscv64" 261 | ], 262 | "dev": true, 263 | "optional": true, 264 | "os": [ 265 | "linux" 266 | ], 267 | "engines": { 268 | "node": ">=12" 269 | } 270 | }, 271 | "node_modules/@esbuild/linux-s390x": { 272 | "version": "0.19.12", 273 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", 274 | "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", 275 | "cpu": [ 276 | "s390x" 277 | ], 278 | "dev": true, 279 | "optional": true, 280 | "os": [ 281 | "linux" 282 | ], 283 | "engines": { 284 | "node": ">=12" 285 | } 286 | }, 287 | "node_modules/@esbuild/linux-x64": { 288 | "version": "0.19.12", 289 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", 290 | "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", 291 | "cpu": [ 292 | "x64" 293 | ], 294 | "dev": true, 295 | "optional": true, 296 | "os": [ 297 | "linux" 298 | ], 299 | "engines": { 300 | "node": ">=12" 301 | } 302 | }, 303 | "node_modules/@esbuild/netbsd-x64": { 304 | "version": "0.19.12", 305 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", 306 | "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", 307 | "cpu": [ 308 | "x64" 309 | ], 310 | "dev": true, 311 | "optional": true, 312 | "os": [ 313 | "netbsd" 314 | ], 315 | "engines": { 316 | "node": ">=12" 317 | } 318 | }, 319 | "node_modules/@esbuild/openbsd-x64": { 320 | "version": "0.19.12", 321 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", 322 | "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", 323 | "cpu": [ 324 | "x64" 325 | ], 326 | "dev": true, 327 | "optional": true, 328 | "os": [ 329 | "openbsd" 330 | ], 331 | "engines": { 332 | "node": ">=12" 333 | } 334 | }, 335 | "node_modules/@esbuild/sunos-x64": { 336 | "version": "0.19.12", 337 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", 338 | "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", 339 | "cpu": [ 340 | "x64" 341 | ], 342 | "dev": true, 343 | "optional": true, 344 | "os": [ 345 | "sunos" 346 | ], 347 | "engines": { 348 | "node": ">=12" 349 | } 350 | }, 351 | "node_modules/@esbuild/win32-arm64": { 352 | "version": "0.19.12", 353 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", 354 | "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", 355 | "cpu": [ 356 | "arm64" 357 | ], 358 | "dev": true, 359 | "optional": true, 360 | "os": [ 361 | "win32" 362 | ], 363 | "engines": { 364 | "node": ">=12" 365 | } 366 | }, 367 | "node_modules/@esbuild/win32-ia32": { 368 | "version": "0.19.12", 369 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", 370 | "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", 371 | "cpu": [ 372 | "ia32" 373 | ], 374 | "dev": true, 375 | "optional": true, 376 | "os": [ 377 | "win32" 378 | ], 379 | "engines": { 380 | "node": ">=12" 381 | } 382 | }, 383 | "node_modules/@esbuild/win32-x64": { 384 | "version": "0.19.12", 385 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", 386 | "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", 387 | "cpu": [ 388 | "x64" 389 | ], 390 | "dev": true, 391 | "optional": true, 392 | "os": [ 393 | "win32" 394 | ], 395 | "engines": { 396 | "node": ">=12" 397 | } 398 | }, 399 | "node_modules/@eslint-community/eslint-utils": { 400 | "version": "4.4.0", 401 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 402 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 403 | "dev": true, 404 | "dependencies": { 405 | "eslint-visitor-keys": "^3.3.0" 406 | }, 407 | "engines": { 408 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 409 | }, 410 | "peerDependencies": { 411 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 412 | } 413 | }, 414 | "node_modules/@eslint-community/regexpp": { 415 | "version": "4.10.0", 416 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", 417 | "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", 418 | "dev": true, 419 | "engines": { 420 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 421 | } 422 | }, 423 | "node_modules/@eslint/eslintrc": { 424 | "version": "2.1.4", 425 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", 426 | "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", 427 | "dev": true, 428 | "dependencies": { 429 | "ajv": "^6.12.4", 430 | "debug": "^4.3.2", 431 | "espree": "^9.6.0", 432 | "globals": "^13.19.0", 433 | "ignore": "^5.2.0", 434 | "import-fresh": "^3.2.1", 435 | "js-yaml": "^4.1.0", 436 | "minimatch": "^3.1.2", 437 | "strip-json-comments": "^3.1.1" 438 | }, 439 | "engines": { 440 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 441 | }, 442 | "funding": { 443 | "url": "https://opencollective.com/eslint" 444 | } 445 | }, 446 | "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { 447 | "version": "1.1.11", 448 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 449 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 450 | "dev": true, 451 | "dependencies": { 452 | "balanced-match": "^1.0.0", 453 | "concat-map": "0.0.1" 454 | } 455 | }, 456 | "node_modules/@eslint/eslintrc/node_modules/minimatch": { 457 | "version": "3.1.2", 458 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 459 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 460 | "dev": true, 461 | "dependencies": { 462 | "brace-expansion": "^1.1.7" 463 | }, 464 | "engines": { 465 | "node": "*" 466 | } 467 | }, 468 | "node_modules/@eslint/js": { 469 | "version": "8.57.0", 470 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", 471 | "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", 472 | "dev": true, 473 | "engines": { 474 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 475 | } 476 | }, 477 | "node_modules/@humanwhocodes/config-array": { 478 | "version": "0.11.14", 479 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", 480 | "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", 481 | "dev": true, 482 | "dependencies": { 483 | "@humanwhocodes/object-schema": "^2.0.2", 484 | "debug": "^4.3.1", 485 | "minimatch": "^3.0.5" 486 | }, 487 | "engines": { 488 | "node": ">=10.10.0" 489 | } 490 | }, 491 | "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { 492 | "version": "1.1.11", 493 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 494 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 495 | "dev": true, 496 | "dependencies": { 497 | "balanced-match": "^1.0.0", 498 | "concat-map": "0.0.1" 499 | } 500 | }, 501 | "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { 502 | "version": "3.1.2", 503 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 504 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 505 | "dev": true, 506 | "dependencies": { 507 | "brace-expansion": "^1.1.7" 508 | }, 509 | "engines": { 510 | "node": "*" 511 | } 512 | }, 513 | "node_modules/@humanwhocodes/module-importer": { 514 | "version": "1.0.1", 515 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 516 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 517 | "dev": true, 518 | "engines": { 519 | "node": ">=12.22" 520 | }, 521 | "funding": { 522 | "type": "github", 523 | "url": "https://github.com/sponsors/nzakas" 524 | } 525 | }, 526 | "node_modules/@humanwhocodes/object-schema": { 527 | "version": "2.0.2", 528 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", 529 | "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", 530 | "dev": true 531 | }, 532 | "node_modules/@jest/schemas": { 533 | "version": "29.6.3", 534 | "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", 535 | "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", 536 | "dev": true, 537 | "dependencies": { 538 | "@sinclair/typebox": "^0.27.8" 539 | }, 540 | "engines": { 541 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 542 | } 543 | }, 544 | "node_modules/@jridgewell/sourcemap-codec": { 545 | "version": "1.4.15", 546 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 547 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 548 | "dev": true 549 | }, 550 | "node_modules/@nodelib/fs.scandir": { 551 | "version": "2.1.5", 552 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 553 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 554 | "dev": true, 555 | "dependencies": { 556 | "@nodelib/fs.stat": "2.0.5", 557 | "run-parallel": "^1.1.9" 558 | }, 559 | "engines": { 560 | "node": ">= 8" 561 | } 562 | }, 563 | "node_modules/@nodelib/fs.stat": { 564 | "version": "2.0.5", 565 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 566 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 567 | "dev": true, 568 | "engines": { 569 | "node": ">= 8" 570 | } 571 | }, 572 | "node_modules/@nodelib/fs.walk": { 573 | "version": "1.2.8", 574 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 575 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 576 | "dev": true, 577 | "dependencies": { 578 | "@nodelib/fs.scandir": "2.1.5", 579 | "fastq": "^1.6.0" 580 | }, 581 | "engines": { 582 | "node": ">= 8" 583 | } 584 | }, 585 | "node_modules/@pkgr/core": { 586 | "version": "0.1.1", 587 | "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", 588 | "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", 589 | "dev": true, 590 | "engines": { 591 | "node": "^12.20.0 || ^14.18.0 || >=16.0.0" 592 | }, 593 | "funding": { 594 | "url": "https://opencollective.com/unts" 595 | } 596 | }, 597 | "node_modules/@rollup/rollup-android-arm-eabi": { 598 | "version": "4.12.0", 599 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", 600 | "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==", 601 | "cpu": [ 602 | "arm" 603 | ], 604 | "dev": true, 605 | "optional": true, 606 | "os": [ 607 | "android" 608 | ] 609 | }, 610 | "node_modules/@rollup/rollup-android-arm64": { 611 | "version": "4.12.0", 612 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz", 613 | "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==", 614 | "cpu": [ 615 | "arm64" 616 | ], 617 | "dev": true, 618 | "optional": true, 619 | "os": [ 620 | "android" 621 | ] 622 | }, 623 | "node_modules/@rollup/rollup-darwin-arm64": { 624 | "version": "4.12.0", 625 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", 626 | "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==", 627 | "cpu": [ 628 | "arm64" 629 | ], 630 | "dev": true, 631 | "optional": true, 632 | "os": [ 633 | "darwin" 634 | ] 635 | }, 636 | "node_modules/@rollup/rollup-darwin-x64": { 637 | "version": "4.12.0", 638 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz", 639 | "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==", 640 | "cpu": [ 641 | "x64" 642 | ], 643 | "dev": true, 644 | "optional": true, 645 | "os": [ 646 | "darwin" 647 | ] 648 | }, 649 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 650 | "version": "4.12.0", 651 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz", 652 | "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==", 653 | "cpu": [ 654 | "arm" 655 | ], 656 | "dev": true, 657 | "optional": true, 658 | "os": [ 659 | "linux" 660 | ] 661 | }, 662 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 663 | "version": "4.12.0", 664 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz", 665 | "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==", 666 | "cpu": [ 667 | "arm64" 668 | ], 669 | "dev": true, 670 | "optional": true, 671 | "os": [ 672 | "linux" 673 | ] 674 | }, 675 | "node_modules/@rollup/rollup-linux-arm64-musl": { 676 | "version": "4.12.0", 677 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz", 678 | "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==", 679 | "cpu": [ 680 | "arm64" 681 | ], 682 | "dev": true, 683 | "optional": true, 684 | "os": [ 685 | "linux" 686 | ] 687 | }, 688 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 689 | "version": "4.12.0", 690 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz", 691 | "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==", 692 | "cpu": [ 693 | "riscv64" 694 | ], 695 | "dev": true, 696 | "optional": true, 697 | "os": [ 698 | "linux" 699 | ] 700 | }, 701 | "node_modules/@rollup/rollup-linux-x64-gnu": { 702 | "version": "4.12.0", 703 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz", 704 | "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==", 705 | "cpu": [ 706 | "x64" 707 | ], 708 | "dev": true, 709 | "optional": true, 710 | "os": [ 711 | "linux" 712 | ] 713 | }, 714 | "node_modules/@rollup/rollup-linux-x64-musl": { 715 | "version": "4.12.0", 716 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz", 717 | "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==", 718 | "cpu": [ 719 | "x64" 720 | ], 721 | "dev": true, 722 | "optional": true, 723 | "os": [ 724 | "linux" 725 | ] 726 | }, 727 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 728 | "version": "4.12.0", 729 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz", 730 | "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==", 731 | "cpu": [ 732 | "arm64" 733 | ], 734 | "dev": true, 735 | "optional": true, 736 | "os": [ 737 | "win32" 738 | ] 739 | }, 740 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 741 | "version": "4.12.0", 742 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz", 743 | "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==", 744 | "cpu": [ 745 | "ia32" 746 | ], 747 | "dev": true, 748 | "optional": true, 749 | "os": [ 750 | "win32" 751 | ] 752 | }, 753 | "node_modules/@rollup/rollup-win32-x64-msvc": { 754 | "version": "4.12.0", 755 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz", 756 | "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==", 757 | "cpu": [ 758 | "x64" 759 | ], 760 | "dev": true, 761 | "optional": true, 762 | "os": [ 763 | "win32" 764 | ] 765 | }, 766 | "node_modules/@sinclair/typebox": { 767 | "version": "0.27.8", 768 | "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", 769 | "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", 770 | "dev": true 771 | }, 772 | "node_modules/@types/estree": { 773 | "version": "1.0.5", 774 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", 775 | "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", 776 | "dev": true 777 | }, 778 | "node_modules/@types/json-schema": { 779 | "version": "7.0.15", 780 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 781 | "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 782 | "dev": true 783 | }, 784 | "node_modules/@types/semver": { 785 | "version": "7.5.8", 786 | "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", 787 | "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", 788 | "dev": true 789 | }, 790 | "node_modules/@typescript-eslint/eslint-plugin": { 791 | "version": "7.1.0", 792 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.0.tgz", 793 | "integrity": "sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==", 794 | "dev": true, 795 | "dependencies": { 796 | "@eslint-community/regexpp": "^4.5.1", 797 | "@typescript-eslint/scope-manager": "7.1.0", 798 | "@typescript-eslint/type-utils": "7.1.0", 799 | "@typescript-eslint/utils": "7.1.0", 800 | "@typescript-eslint/visitor-keys": "7.1.0", 801 | "debug": "^4.3.4", 802 | "graphemer": "^1.4.0", 803 | "ignore": "^5.2.4", 804 | "natural-compare": "^1.4.0", 805 | "semver": "^7.5.4", 806 | "ts-api-utils": "^1.0.1" 807 | }, 808 | "engines": { 809 | "node": "^16.0.0 || >=18.0.0" 810 | }, 811 | "funding": { 812 | "type": "opencollective", 813 | "url": "https://opencollective.com/typescript-eslint" 814 | }, 815 | "peerDependencies": { 816 | "@typescript-eslint/parser": "^7.0.0", 817 | "eslint": "^8.56.0" 818 | }, 819 | "peerDependenciesMeta": { 820 | "typescript": { 821 | "optional": true 822 | } 823 | } 824 | }, 825 | "node_modules/@typescript-eslint/parser": { 826 | "version": "7.1.0", 827 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.1.0.tgz", 828 | "integrity": "sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w==", 829 | "dev": true, 830 | "dependencies": { 831 | "@typescript-eslint/scope-manager": "7.1.0", 832 | "@typescript-eslint/types": "7.1.0", 833 | "@typescript-eslint/typescript-estree": "7.1.0", 834 | "@typescript-eslint/visitor-keys": "7.1.0", 835 | "debug": "^4.3.4" 836 | }, 837 | "engines": { 838 | "node": "^16.0.0 || >=18.0.0" 839 | }, 840 | "funding": { 841 | "type": "opencollective", 842 | "url": "https://opencollective.com/typescript-eslint" 843 | }, 844 | "peerDependencies": { 845 | "eslint": "^8.56.0" 846 | }, 847 | "peerDependenciesMeta": { 848 | "typescript": { 849 | "optional": true 850 | } 851 | } 852 | }, 853 | "node_modules/@typescript-eslint/scope-manager": { 854 | "version": "7.1.0", 855 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.1.0.tgz", 856 | "integrity": "sha512-6TmN4OJiohHfoOdGZ3huuLhpiUgOGTpgXNUPJgeZOZR3DnIpdSgtt83RS35OYNNXxM4TScVlpVKC9jyQSETR1A==", 857 | "dev": true, 858 | "dependencies": { 859 | "@typescript-eslint/types": "7.1.0", 860 | "@typescript-eslint/visitor-keys": "7.1.0" 861 | }, 862 | "engines": { 863 | "node": "^16.0.0 || >=18.0.0" 864 | }, 865 | "funding": { 866 | "type": "opencollective", 867 | "url": "https://opencollective.com/typescript-eslint" 868 | } 869 | }, 870 | "node_modules/@typescript-eslint/type-utils": { 871 | "version": "7.1.0", 872 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.1.0.tgz", 873 | "integrity": "sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew==", 874 | "dev": true, 875 | "dependencies": { 876 | "@typescript-eslint/typescript-estree": "7.1.0", 877 | "@typescript-eslint/utils": "7.1.0", 878 | "debug": "^4.3.4", 879 | "ts-api-utils": "^1.0.1" 880 | }, 881 | "engines": { 882 | "node": "^16.0.0 || >=18.0.0" 883 | }, 884 | "funding": { 885 | "type": "opencollective", 886 | "url": "https://opencollective.com/typescript-eslint" 887 | }, 888 | "peerDependencies": { 889 | "eslint": "^8.56.0" 890 | }, 891 | "peerDependenciesMeta": { 892 | "typescript": { 893 | "optional": true 894 | } 895 | } 896 | }, 897 | "node_modules/@typescript-eslint/types": { 898 | "version": "7.1.0", 899 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.1.0.tgz", 900 | "integrity": "sha512-qTWjWieJ1tRJkxgZYXx6WUYtWlBc48YRxgY2JN1aGeVpkhmnopq+SUC8UEVGNXIvWH7XyuTjwALfG6bFEgCkQA==", 901 | "dev": true, 902 | "engines": { 903 | "node": "^16.0.0 || >=18.0.0" 904 | }, 905 | "funding": { 906 | "type": "opencollective", 907 | "url": "https://opencollective.com/typescript-eslint" 908 | } 909 | }, 910 | "node_modules/@typescript-eslint/typescript-estree": { 911 | "version": "7.1.0", 912 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.0.tgz", 913 | "integrity": "sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ==", 914 | "dev": true, 915 | "dependencies": { 916 | "@typescript-eslint/types": "7.1.0", 917 | "@typescript-eslint/visitor-keys": "7.1.0", 918 | "debug": "^4.3.4", 919 | "globby": "^11.1.0", 920 | "is-glob": "^4.0.3", 921 | "minimatch": "9.0.3", 922 | "semver": "^7.5.4", 923 | "ts-api-utils": "^1.0.1" 924 | }, 925 | "engines": { 926 | "node": "^16.0.0 || >=18.0.0" 927 | }, 928 | "funding": { 929 | "type": "opencollective", 930 | "url": "https://opencollective.com/typescript-eslint" 931 | }, 932 | "peerDependenciesMeta": { 933 | "typescript": { 934 | "optional": true 935 | } 936 | } 937 | }, 938 | "node_modules/@typescript-eslint/utils": { 939 | "version": "7.1.0", 940 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.1.0.tgz", 941 | "integrity": "sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw==", 942 | "dev": true, 943 | "dependencies": { 944 | "@eslint-community/eslint-utils": "^4.4.0", 945 | "@types/json-schema": "^7.0.12", 946 | "@types/semver": "^7.5.0", 947 | "@typescript-eslint/scope-manager": "7.1.0", 948 | "@typescript-eslint/types": "7.1.0", 949 | "@typescript-eslint/typescript-estree": "7.1.0", 950 | "semver": "^7.5.4" 951 | }, 952 | "engines": { 953 | "node": "^16.0.0 || >=18.0.0" 954 | }, 955 | "funding": { 956 | "type": "opencollective", 957 | "url": "https://opencollective.com/typescript-eslint" 958 | }, 959 | "peerDependencies": { 960 | "eslint": "^8.56.0" 961 | } 962 | }, 963 | "node_modules/@typescript-eslint/visitor-keys": { 964 | "version": "7.1.0", 965 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.0.tgz", 966 | "integrity": "sha512-FhUqNWluiGNzlvnDZiXad4mZRhtghdoKW6e98GoEOYSu5cND+E39rG5KwJMUzeENwm1ztYBRqof8wMLP+wNPIA==", 967 | "dev": true, 968 | "dependencies": { 969 | "@typescript-eslint/types": "7.1.0", 970 | "eslint-visitor-keys": "^3.4.1" 971 | }, 972 | "engines": { 973 | "node": "^16.0.0 || >=18.0.0" 974 | }, 975 | "funding": { 976 | "type": "opencollective", 977 | "url": "https://opencollective.com/typescript-eslint" 978 | } 979 | }, 980 | "node_modules/@ungap/structured-clone": { 981 | "version": "1.2.0", 982 | "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", 983 | "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", 984 | "dev": true 985 | }, 986 | "node_modules/@vitest/expect": { 987 | "version": "1.3.1", 988 | "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.3.1.tgz", 989 | "integrity": "sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==", 990 | "dev": true, 991 | "dependencies": { 992 | "@vitest/spy": "1.3.1", 993 | "@vitest/utils": "1.3.1", 994 | "chai": "^4.3.10" 995 | }, 996 | "funding": { 997 | "url": "https://opencollective.com/vitest" 998 | } 999 | }, 1000 | "node_modules/@vitest/runner": { 1001 | "version": "1.3.1", 1002 | "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.3.1.tgz", 1003 | "integrity": "sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg==", 1004 | "dev": true, 1005 | "dependencies": { 1006 | "@vitest/utils": "1.3.1", 1007 | "p-limit": "^5.0.0", 1008 | "pathe": "^1.1.1" 1009 | }, 1010 | "funding": { 1011 | "url": "https://opencollective.com/vitest" 1012 | } 1013 | }, 1014 | "node_modules/@vitest/snapshot": { 1015 | "version": "1.3.1", 1016 | "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.3.1.tgz", 1017 | "integrity": "sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ==", 1018 | "dev": true, 1019 | "dependencies": { 1020 | "magic-string": "^0.30.5", 1021 | "pathe": "^1.1.1", 1022 | "pretty-format": "^29.7.0" 1023 | }, 1024 | "funding": { 1025 | "url": "https://opencollective.com/vitest" 1026 | } 1027 | }, 1028 | "node_modules/@vitest/spy": { 1029 | "version": "1.3.1", 1030 | "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.3.1.tgz", 1031 | "integrity": "sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==", 1032 | "dev": true, 1033 | "dependencies": { 1034 | "tinyspy": "^2.2.0" 1035 | }, 1036 | "funding": { 1037 | "url": "https://opencollective.com/vitest" 1038 | } 1039 | }, 1040 | "node_modules/@vitest/utils": { 1041 | "version": "1.3.1", 1042 | "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.3.1.tgz", 1043 | "integrity": "sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==", 1044 | "dev": true, 1045 | "dependencies": { 1046 | "diff-sequences": "^29.6.3", 1047 | "estree-walker": "^3.0.3", 1048 | "loupe": "^2.3.7", 1049 | "pretty-format": "^29.7.0" 1050 | }, 1051 | "funding": { 1052 | "url": "https://opencollective.com/vitest" 1053 | } 1054 | }, 1055 | "node_modules/acorn": { 1056 | "version": "8.11.3", 1057 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", 1058 | "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", 1059 | "dev": true, 1060 | "bin": { 1061 | "acorn": "bin/acorn" 1062 | }, 1063 | "engines": { 1064 | "node": ">=0.4.0" 1065 | } 1066 | }, 1067 | "node_modules/acorn-jsx": { 1068 | "version": "5.3.2", 1069 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1070 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1071 | "dev": true, 1072 | "peerDependencies": { 1073 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 1074 | } 1075 | }, 1076 | "node_modules/acorn-walk": { 1077 | "version": "8.3.2", 1078 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", 1079 | "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", 1080 | "dev": true, 1081 | "engines": { 1082 | "node": ">=0.4.0" 1083 | } 1084 | }, 1085 | "node_modules/ajv": { 1086 | "version": "6.12.6", 1087 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1088 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1089 | "dev": true, 1090 | "dependencies": { 1091 | "fast-deep-equal": "^3.1.1", 1092 | "fast-json-stable-stringify": "^2.0.0", 1093 | "json-schema-traverse": "^0.4.1", 1094 | "uri-js": "^4.2.2" 1095 | }, 1096 | "funding": { 1097 | "type": "github", 1098 | "url": "https://github.com/sponsors/epoberezkin" 1099 | } 1100 | }, 1101 | "node_modules/ansi-regex": { 1102 | "version": "5.0.1", 1103 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1104 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1105 | "dev": true, 1106 | "engines": { 1107 | "node": ">=8" 1108 | } 1109 | }, 1110 | "node_modules/ansi-styles": { 1111 | "version": "5.2.0", 1112 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", 1113 | "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", 1114 | "dev": true, 1115 | "engines": { 1116 | "node": ">=10" 1117 | }, 1118 | "funding": { 1119 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1120 | } 1121 | }, 1122 | "node_modules/argparse": { 1123 | "version": "2.0.1", 1124 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1125 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1126 | "dev": true 1127 | }, 1128 | "node_modules/array-union": { 1129 | "version": "2.1.0", 1130 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 1131 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 1132 | "dev": true, 1133 | "engines": { 1134 | "node": ">=8" 1135 | } 1136 | }, 1137 | "node_modules/assertion-error": { 1138 | "version": "1.1.0", 1139 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 1140 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 1141 | "dev": true, 1142 | "engines": { 1143 | "node": "*" 1144 | } 1145 | }, 1146 | "node_modules/balanced-match": { 1147 | "version": "1.0.2", 1148 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1149 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1150 | "dev": true 1151 | }, 1152 | "node_modules/brace-expansion": { 1153 | "version": "2.0.1", 1154 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 1155 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 1156 | "dev": true, 1157 | "dependencies": { 1158 | "balanced-match": "^1.0.0" 1159 | } 1160 | }, 1161 | "node_modules/braces": { 1162 | "version": "3.0.2", 1163 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1164 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1165 | "dev": true, 1166 | "dependencies": { 1167 | "fill-range": "^7.0.1" 1168 | }, 1169 | "engines": { 1170 | "node": ">=8" 1171 | } 1172 | }, 1173 | "node_modules/cac": { 1174 | "version": "6.7.14", 1175 | "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", 1176 | "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", 1177 | "dev": true, 1178 | "engines": { 1179 | "node": ">=8" 1180 | } 1181 | }, 1182 | "node_modules/callsites": { 1183 | "version": "3.1.0", 1184 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1185 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1186 | "dev": true, 1187 | "engines": { 1188 | "node": ">=6" 1189 | } 1190 | }, 1191 | "node_modules/chai": { 1192 | "version": "4.4.1", 1193 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", 1194 | "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", 1195 | "dev": true, 1196 | "dependencies": { 1197 | "assertion-error": "^1.1.0", 1198 | "check-error": "^1.0.3", 1199 | "deep-eql": "^4.1.3", 1200 | "get-func-name": "^2.0.2", 1201 | "loupe": "^2.3.6", 1202 | "pathval": "^1.1.1", 1203 | "type-detect": "^4.0.8" 1204 | }, 1205 | "engines": { 1206 | "node": ">=4" 1207 | } 1208 | }, 1209 | "node_modules/chalk": { 1210 | "version": "4.1.2", 1211 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1212 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1213 | "dev": true, 1214 | "dependencies": { 1215 | "ansi-styles": "^4.1.0", 1216 | "supports-color": "^7.1.0" 1217 | }, 1218 | "engines": { 1219 | "node": ">=10" 1220 | }, 1221 | "funding": { 1222 | "url": "https://github.com/chalk/chalk?sponsor=1" 1223 | } 1224 | }, 1225 | "node_modules/chalk/node_modules/ansi-styles": { 1226 | "version": "4.3.0", 1227 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1228 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1229 | "dev": true, 1230 | "dependencies": { 1231 | "color-convert": "^2.0.1" 1232 | }, 1233 | "engines": { 1234 | "node": ">=8" 1235 | }, 1236 | "funding": { 1237 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1238 | } 1239 | }, 1240 | "node_modules/check-error": { 1241 | "version": "1.0.3", 1242 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", 1243 | "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", 1244 | "dev": true, 1245 | "dependencies": { 1246 | "get-func-name": "^2.0.2" 1247 | }, 1248 | "engines": { 1249 | "node": "*" 1250 | } 1251 | }, 1252 | "node_modules/color-convert": { 1253 | "version": "2.0.1", 1254 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1255 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1256 | "dev": true, 1257 | "dependencies": { 1258 | "color-name": "~1.1.4" 1259 | }, 1260 | "engines": { 1261 | "node": ">=7.0.0" 1262 | } 1263 | }, 1264 | "node_modules/color-name": { 1265 | "version": "1.1.4", 1266 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1267 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1268 | "dev": true 1269 | }, 1270 | "node_modules/concat-map": { 1271 | "version": "0.0.1", 1272 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1273 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1274 | "dev": true 1275 | }, 1276 | "node_modules/cross-spawn": { 1277 | "version": "7.0.3", 1278 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1279 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1280 | "dev": true, 1281 | "dependencies": { 1282 | "path-key": "^3.1.0", 1283 | "shebang-command": "^2.0.0", 1284 | "which": "^2.0.1" 1285 | }, 1286 | "engines": { 1287 | "node": ">= 8" 1288 | } 1289 | }, 1290 | "node_modules/debug": { 1291 | "version": "4.3.4", 1292 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1293 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1294 | "dev": true, 1295 | "dependencies": { 1296 | "ms": "2.1.2" 1297 | }, 1298 | "engines": { 1299 | "node": ">=6.0" 1300 | }, 1301 | "peerDependenciesMeta": { 1302 | "supports-color": { 1303 | "optional": true 1304 | } 1305 | } 1306 | }, 1307 | "node_modules/deep-eql": { 1308 | "version": "4.1.3", 1309 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", 1310 | "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", 1311 | "dev": true, 1312 | "dependencies": { 1313 | "type-detect": "^4.0.0" 1314 | }, 1315 | "engines": { 1316 | "node": ">=6" 1317 | } 1318 | }, 1319 | "node_modules/deep-is": { 1320 | "version": "0.1.4", 1321 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1322 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1323 | "dev": true 1324 | }, 1325 | "node_modules/diff-sequences": { 1326 | "version": "29.6.3", 1327 | "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", 1328 | "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", 1329 | "dev": true, 1330 | "engines": { 1331 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 1332 | } 1333 | }, 1334 | "node_modules/dir-glob": { 1335 | "version": "3.0.1", 1336 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 1337 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 1338 | "dev": true, 1339 | "dependencies": { 1340 | "path-type": "^4.0.0" 1341 | }, 1342 | "engines": { 1343 | "node": ">=8" 1344 | } 1345 | }, 1346 | "node_modules/doctrine": { 1347 | "version": "3.0.0", 1348 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 1349 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 1350 | "dev": true, 1351 | "dependencies": { 1352 | "esutils": "^2.0.2" 1353 | }, 1354 | "engines": { 1355 | "node": ">=6.0.0" 1356 | } 1357 | }, 1358 | "node_modules/esbuild": { 1359 | "version": "0.19.12", 1360 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", 1361 | "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", 1362 | "dev": true, 1363 | "hasInstallScript": true, 1364 | "bin": { 1365 | "esbuild": "bin/esbuild" 1366 | }, 1367 | "engines": { 1368 | "node": ">=12" 1369 | }, 1370 | "optionalDependencies": { 1371 | "@esbuild/aix-ppc64": "0.19.12", 1372 | "@esbuild/android-arm": "0.19.12", 1373 | "@esbuild/android-arm64": "0.19.12", 1374 | "@esbuild/android-x64": "0.19.12", 1375 | "@esbuild/darwin-arm64": "0.19.12", 1376 | "@esbuild/darwin-x64": "0.19.12", 1377 | "@esbuild/freebsd-arm64": "0.19.12", 1378 | "@esbuild/freebsd-x64": "0.19.12", 1379 | "@esbuild/linux-arm": "0.19.12", 1380 | "@esbuild/linux-arm64": "0.19.12", 1381 | "@esbuild/linux-ia32": "0.19.12", 1382 | "@esbuild/linux-loong64": "0.19.12", 1383 | "@esbuild/linux-mips64el": "0.19.12", 1384 | "@esbuild/linux-ppc64": "0.19.12", 1385 | "@esbuild/linux-riscv64": "0.19.12", 1386 | "@esbuild/linux-s390x": "0.19.12", 1387 | "@esbuild/linux-x64": "0.19.12", 1388 | "@esbuild/netbsd-x64": "0.19.12", 1389 | "@esbuild/openbsd-x64": "0.19.12", 1390 | "@esbuild/sunos-x64": "0.19.12", 1391 | "@esbuild/win32-arm64": "0.19.12", 1392 | "@esbuild/win32-ia32": "0.19.12", 1393 | "@esbuild/win32-x64": "0.19.12" 1394 | } 1395 | }, 1396 | "node_modules/escape-string-regexp": { 1397 | "version": "4.0.0", 1398 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1399 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1400 | "dev": true, 1401 | "engines": { 1402 | "node": ">=10" 1403 | }, 1404 | "funding": { 1405 | "url": "https://github.com/sponsors/sindresorhus" 1406 | } 1407 | }, 1408 | "node_modules/eslint": { 1409 | "version": "8.57.0", 1410 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", 1411 | "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", 1412 | "dev": true, 1413 | "dependencies": { 1414 | "@eslint-community/eslint-utils": "^4.2.0", 1415 | "@eslint-community/regexpp": "^4.6.1", 1416 | "@eslint/eslintrc": "^2.1.4", 1417 | "@eslint/js": "8.57.0", 1418 | "@humanwhocodes/config-array": "^0.11.14", 1419 | "@humanwhocodes/module-importer": "^1.0.1", 1420 | "@nodelib/fs.walk": "^1.2.8", 1421 | "@ungap/structured-clone": "^1.2.0", 1422 | "ajv": "^6.12.4", 1423 | "chalk": "^4.0.0", 1424 | "cross-spawn": "^7.0.2", 1425 | "debug": "^4.3.2", 1426 | "doctrine": "^3.0.0", 1427 | "escape-string-regexp": "^4.0.0", 1428 | "eslint-scope": "^7.2.2", 1429 | "eslint-visitor-keys": "^3.4.3", 1430 | "espree": "^9.6.1", 1431 | "esquery": "^1.4.2", 1432 | "esutils": "^2.0.2", 1433 | "fast-deep-equal": "^3.1.3", 1434 | "file-entry-cache": "^6.0.1", 1435 | "find-up": "^5.0.0", 1436 | "glob-parent": "^6.0.2", 1437 | "globals": "^13.19.0", 1438 | "graphemer": "^1.4.0", 1439 | "ignore": "^5.2.0", 1440 | "imurmurhash": "^0.1.4", 1441 | "is-glob": "^4.0.0", 1442 | "is-path-inside": "^3.0.3", 1443 | "js-yaml": "^4.1.0", 1444 | "json-stable-stringify-without-jsonify": "^1.0.1", 1445 | "levn": "^0.4.1", 1446 | "lodash.merge": "^4.6.2", 1447 | "minimatch": "^3.1.2", 1448 | "natural-compare": "^1.4.0", 1449 | "optionator": "^0.9.3", 1450 | "strip-ansi": "^6.0.1", 1451 | "text-table": "^0.2.0" 1452 | }, 1453 | "bin": { 1454 | "eslint": "bin/eslint.js" 1455 | }, 1456 | "engines": { 1457 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1458 | }, 1459 | "funding": { 1460 | "url": "https://opencollective.com/eslint" 1461 | } 1462 | }, 1463 | "node_modules/eslint-config-prettier": { 1464 | "version": "9.1.0", 1465 | "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", 1466 | "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", 1467 | "dev": true, 1468 | "bin": { 1469 | "eslint-config-prettier": "bin/cli.js" 1470 | }, 1471 | "peerDependencies": { 1472 | "eslint": ">=7.0.0" 1473 | } 1474 | }, 1475 | "node_modules/eslint-plugin-prettier": { 1476 | "version": "5.1.3", 1477 | "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", 1478 | "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", 1479 | "dev": true, 1480 | "dependencies": { 1481 | "prettier-linter-helpers": "^1.0.0", 1482 | "synckit": "^0.8.6" 1483 | }, 1484 | "engines": { 1485 | "node": "^14.18.0 || >=16.0.0" 1486 | }, 1487 | "funding": { 1488 | "url": "https://opencollective.com/eslint-plugin-prettier" 1489 | }, 1490 | "peerDependencies": { 1491 | "@types/eslint": ">=8.0.0", 1492 | "eslint": ">=8.0.0", 1493 | "eslint-config-prettier": "*", 1494 | "prettier": ">=3.0.0" 1495 | }, 1496 | "peerDependenciesMeta": { 1497 | "@types/eslint": { 1498 | "optional": true 1499 | }, 1500 | "eslint-config-prettier": { 1501 | "optional": true 1502 | } 1503 | } 1504 | }, 1505 | "node_modules/eslint-scope": { 1506 | "version": "7.2.2", 1507 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", 1508 | "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", 1509 | "dev": true, 1510 | "dependencies": { 1511 | "esrecurse": "^4.3.0", 1512 | "estraverse": "^5.2.0" 1513 | }, 1514 | "engines": { 1515 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1516 | }, 1517 | "funding": { 1518 | "url": "https://opencollective.com/eslint" 1519 | } 1520 | }, 1521 | "node_modules/eslint-visitor-keys": { 1522 | "version": "3.4.3", 1523 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 1524 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 1525 | "dev": true, 1526 | "engines": { 1527 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1528 | }, 1529 | "funding": { 1530 | "url": "https://opencollective.com/eslint" 1531 | } 1532 | }, 1533 | "node_modules/eslint/node_modules/brace-expansion": { 1534 | "version": "1.1.11", 1535 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1536 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1537 | "dev": true, 1538 | "dependencies": { 1539 | "balanced-match": "^1.0.0", 1540 | "concat-map": "0.0.1" 1541 | } 1542 | }, 1543 | "node_modules/eslint/node_modules/minimatch": { 1544 | "version": "3.1.2", 1545 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1546 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1547 | "dev": true, 1548 | "dependencies": { 1549 | "brace-expansion": "^1.1.7" 1550 | }, 1551 | "engines": { 1552 | "node": "*" 1553 | } 1554 | }, 1555 | "node_modules/espree": { 1556 | "version": "9.6.1", 1557 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", 1558 | "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 1559 | "dev": true, 1560 | "dependencies": { 1561 | "acorn": "^8.9.0", 1562 | "acorn-jsx": "^5.3.2", 1563 | "eslint-visitor-keys": "^3.4.1" 1564 | }, 1565 | "engines": { 1566 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1567 | }, 1568 | "funding": { 1569 | "url": "https://opencollective.com/eslint" 1570 | } 1571 | }, 1572 | "node_modules/esquery": { 1573 | "version": "1.5.0", 1574 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", 1575 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", 1576 | "dev": true, 1577 | "dependencies": { 1578 | "estraverse": "^5.1.0" 1579 | }, 1580 | "engines": { 1581 | "node": ">=0.10" 1582 | } 1583 | }, 1584 | "node_modules/esrecurse": { 1585 | "version": "4.3.0", 1586 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1587 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1588 | "dev": true, 1589 | "dependencies": { 1590 | "estraverse": "^5.2.0" 1591 | }, 1592 | "engines": { 1593 | "node": ">=4.0" 1594 | } 1595 | }, 1596 | "node_modules/estraverse": { 1597 | "version": "5.3.0", 1598 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1599 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1600 | "dev": true, 1601 | "engines": { 1602 | "node": ">=4.0" 1603 | } 1604 | }, 1605 | "node_modules/estree-walker": { 1606 | "version": "3.0.3", 1607 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", 1608 | "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 1609 | "dev": true, 1610 | "dependencies": { 1611 | "@types/estree": "^1.0.0" 1612 | } 1613 | }, 1614 | "node_modules/esutils": { 1615 | "version": "2.0.3", 1616 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1617 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1618 | "dev": true, 1619 | "engines": { 1620 | "node": ">=0.10.0" 1621 | } 1622 | }, 1623 | "node_modules/execa": { 1624 | "version": "8.0.1", 1625 | "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", 1626 | "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", 1627 | "dev": true, 1628 | "dependencies": { 1629 | "cross-spawn": "^7.0.3", 1630 | "get-stream": "^8.0.1", 1631 | "human-signals": "^5.0.0", 1632 | "is-stream": "^3.0.0", 1633 | "merge-stream": "^2.0.0", 1634 | "npm-run-path": "^5.1.0", 1635 | "onetime": "^6.0.0", 1636 | "signal-exit": "^4.1.0", 1637 | "strip-final-newline": "^3.0.0" 1638 | }, 1639 | "engines": { 1640 | "node": ">=16.17" 1641 | }, 1642 | "funding": { 1643 | "url": "https://github.com/sindresorhus/execa?sponsor=1" 1644 | } 1645 | }, 1646 | "node_modules/fast-deep-equal": { 1647 | "version": "3.1.3", 1648 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1649 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1650 | "dev": true 1651 | }, 1652 | "node_modules/fast-diff": { 1653 | "version": "1.3.0", 1654 | "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", 1655 | "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", 1656 | "dev": true 1657 | }, 1658 | "node_modules/fast-glob": { 1659 | "version": "3.3.2", 1660 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", 1661 | "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", 1662 | "dev": true, 1663 | "dependencies": { 1664 | "@nodelib/fs.stat": "^2.0.2", 1665 | "@nodelib/fs.walk": "^1.2.3", 1666 | "glob-parent": "^5.1.2", 1667 | "merge2": "^1.3.0", 1668 | "micromatch": "^4.0.4" 1669 | }, 1670 | "engines": { 1671 | "node": ">=8.6.0" 1672 | } 1673 | }, 1674 | "node_modules/fast-glob/node_modules/glob-parent": { 1675 | "version": "5.1.2", 1676 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1677 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1678 | "dev": true, 1679 | "dependencies": { 1680 | "is-glob": "^4.0.1" 1681 | }, 1682 | "engines": { 1683 | "node": ">= 6" 1684 | } 1685 | }, 1686 | "node_modules/fast-json-stable-stringify": { 1687 | "version": "2.1.0", 1688 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1689 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1690 | "dev": true 1691 | }, 1692 | "node_modules/fast-levenshtein": { 1693 | "version": "2.0.6", 1694 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1695 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 1696 | "dev": true 1697 | }, 1698 | "node_modules/fastq": { 1699 | "version": "1.17.1", 1700 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", 1701 | "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", 1702 | "dev": true, 1703 | "dependencies": { 1704 | "reusify": "^1.0.4" 1705 | } 1706 | }, 1707 | "node_modules/file-entry-cache": { 1708 | "version": "6.0.1", 1709 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 1710 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 1711 | "dev": true, 1712 | "dependencies": { 1713 | "flat-cache": "^3.0.4" 1714 | }, 1715 | "engines": { 1716 | "node": "^10.12.0 || >=12.0.0" 1717 | } 1718 | }, 1719 | "node_modules/fill-range": { 1720 | "version": "7.0.1", 1721 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1722 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1723 | "dev": true, 1724 | "dependencies": { 1725 | "to-regex-range": "^5.0.1" 1726 | }, 1727 | "engines": { 1728 | "node": ">=8" 1729 | } 1730 | }, 1731 | "node_modules/find-up": { 1732 | "version": "5.0.0", 1733 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1734 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1735 | "dev": true, 1736 | "dependencies": { 1737 | "locate-path": "^6.0.0", 1738 | "path-exists": "^4.0.0" 1739 | }, 1740 | "engines": { 1741 | "node": ">=10" 1742 | }, 1743 | "funding": { 1744 | "url": "https://github.com/sponsors/sindresorhus" 1745 | } 1746 | }, 1747 | "node_modules/flat-cache": { 1748 | "version": "3.2.0", 1749 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", 1750 | "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", 1751 | "dev": true, 1752 | "dependencies": { 1753 | "flatted": "^3.2.9", 1754 | "keyv": "^4.5.3", 1755 | "rimraf": "^3.0.2" 1756 | }, 1757 | "engines": { 1758 | "node": "^10.12.0 || >=12.0.0" 1759 | } 1760 | }, 1761 | "node_modules/flatted": { 1762 | "version": "3.3.1", 1763 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", 1764 | "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", 1765 | "dev": true 1766 | }, 1767 | "node_modules/fs.realpath": { 1768 | "version": "1.0.0", 1769 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1770 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1771 | "dev": true 1772 | }, 1773 | "node_modules/fsevents": { 1774 | "version": "2.3.3", 1775 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1776 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1777 | "dev": true, 1778 | "hasInstallScript": true, 1779 | "optional": true, 1780 | "os": [ 1781 | "darwin" 1782 | ], 1783 | "engines": { 1784 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1785 | } 1786 | }, 1787 | "node_modules/get-func-name": { 1788 | "version": "2.0.2", 1789 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", 1790 | "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", 1791 | "dev": true, 1792 | "engines": { 1793 | "node": "*" 1794 | } 1795 | }, 1796 | "node_modules/get-stream": { 1797 | "version": "8.0.1", 1798 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", 1799 | "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", 1800 | "dev": true, 1801 | "engines": { 1802 | "node": ">=16" 1803 | }, 1804 | "funding": { 1805 | "url": "https://github.com/sponsors/sindresorhus" 1806 | } 1807 | }, 1808 | "node_modules/glob": { 1809 | "version": "7.2.3", 1810 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1811 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1812 | "dev": true, 1813 | "dependencies": { 1814 | "fs.realpath": "^1.0.0", 1815 | "inflight": "^1.0.4", 1816 | "inherits": "2", 1817 | "minimatch": "^3.1.1", 1818 | "once": "^1.3.0", 1819 | "path-is-absolute": "^1.0.0" 1820 | }, 1821 | "engines": { 1822 | "node": "*" 1823 | }, 1824 | "funding": { 1825 | "url": "https://github.com/sponsors/isaacs" 1826 | } 1827 | }, 1828 | "node_modules/glob-parent": { 1829 | "version": "6.0.2", 1830 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1831 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1832 | "dev": true, 1833 | "dependencies": { 1834 | "is-glob": "^4.0.3" 1835 | }, 1836 | "engines": { 1837 | "node": ">=10.13.0" 1838 | } 1839 | }, 1840 | "node_modules/glob/node_modules/brace-expansion": { 1841 | "version": "1.1.11", 1842 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1843 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1844 | "dev": true, 1845 | "dependencies": { 1846 | "balanced-match": "^1.0.0", 1847 | "concat-map": "0.0.1" 1848 | } 1849 | }, 1850 | "node_modules/glob/node_modules/minimatch": { 1851 | "version": "3.1.2", 1852 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1853 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1854 | "dev": true, 1855 | "dependencies": { 1856 | "brace-expansion": "^1.1.7" 1857 | }, 1858 | "engines": { 1859 | "node": "*" 1860 | } 1861 | }, 1862 | "node_modules/globals": { 1863 | "version": "13.24.0", 1864 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", 1865 | "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", 1866 | "dev": true, 1867 | "dependencies": { 1868 | "type-fest": "^0.20.2" 1869 | }, 1870 | "engines": { 1871 | "node": ">=8" 1872 | }, 1873 | "funding": { 1874 | "url": "https://github.com/sponsors/sindresorhus" 1875 | } 1876 | }, 1877 | "node_modules/globby": { 1878 | "version": "11.1.0", 1879 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 1880 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 1881 | "dev": true, 1882 | "dependencies": { 1883 | "array-union": "^2.1.0", 1884 | "dir-glob": "^3.0.1", 1885 | "fast-glob": "^3.2.9", 1886 | "ignore": "^5.2.0", 1887 | "merge2": "^1.4.1", 1888 | "slash": "^3.0.0" 1889 | }, 1890 | "engines": { 1891 | "node": ">=10" 1892 | }, 1893 | "funding": { 1894 | "url": "https://github.com/sponsors/sindresorhus" 1895 | } 1896 | }, 1897 | "node_modules/graphemer": { 1898 | "version": "1.4.0", 1899 | "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 1900 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 1901 | "dev": true 1902 | }, 1903 | "node_modules/has-flag": { 1904 | "version": "4.0.0", 1905 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1906 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1907 | "dev": true, 1908 | "engines": { 1909 | "node": ">=8" 1910 | } 1911 | }, 1912 | "node_modules/human-signals": { 1913 | "version": "5.0.0", 1914 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", 1915 | "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", 1916 | "dev": true, 1917 | "engines": { 1918 | "node": ">=16.17.0" 1919 | } 1920 | }, 1921 | "node_modules/ignore": { 1922 | "version": "5.3.1", 1923 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", 1924 | "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", 1925 | "dev": true, 1926 | "engines": { 1927 | "node": ">= 4" 1928 | } 1929 | }, 1930 | "node_modules/import-fresh": { 1931 | "version": "3.3.0", 1932 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1933 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1934 | "dev": true, 1935 | "dependencies": { 1936 | "parent-module": "^1.0.0", 1937 | "resolve-from": "^4.0.0" 1938 | }, 1939 | "engines": { 1940 | "node": ">=6" 1941 | }, 1942 | "funding": { 1943 | "url": "https://github.com/sponsors/sindresorhus" 1944 | } 1945 | }, 1946 | "node_modules/imurmurhash": { 1947 | "version": "0.1.4", 1948 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1949 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 1950 | "dev": true, 1951 | "engines": { 1952 | "node": ">=0.8.19" 1953 | } 1954 | }, 1955 | "node_modules/inflight": { 1956 | "version": "1.0.6", 1957 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1958 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1959 | "dev": true, 1960 | "dependencies": { 1961 | "once": "^1.3.0", 1962 | "wrappy": "1" 1963 | } 1964 | }, 1965 | "node_modules/inherits": { 1966 | "version": "2.0.4", 1967 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1968 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1969 | "dev": true 1970 | }, 1971 | "node_modules/is-extglob": { 1972 | "version": "2.1.1", 1973 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1974 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1975 | "dev": true, 1976 | "engines": { 1977 | "node": ">=0.10.0" 1978 | } 1979 | }, 1980 | "node_modules/is-glob": { 1981 | "version": "4.0.3", 1982 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1983 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1984 | "dev": true, 1985 | "dependencies": { 1986 | "is-extglob": "^2.1.1" 1987 | }, 1988 | "engines": { 1989 | "node": ">=0.10.0" 1990 | } 1991 | }, 1992 | "node_modules/is-number": { 1993 | "version": "7.0.0", 1994 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1995 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1996 | "dev": true, 1997 | "engines": { 1998 | "node": ">=0.12.0" 1999 | } 2000 | }, 2001 | "node_modules/is-path-inside": { 2002 | "version": "3.0.3", 2003 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 2004 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 2005 | "dev": true, 2006 | "engines": { 2007 | "node": ">=8" 2008 | } 2009 | }, 2010 | "node_modules/is-stream": { 2011 | "version": "3.0.0", 2012 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", 2013 | "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", 2014 | "dev": true, 2015 | "engines": { 2016 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 2017 | }, 2018 | "funding": { 2019 | "url": "https://github.com/sponsors/sindresorhus" 2020 | } 2021 | }, 2022 | "node_modules/isexe": { 2023 | "version": "2.0.0", 2024 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2025 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2026 | "dev": true 2027 | }, 2028 | "node_modules/js-tokens": { 2029 | "version": "8.0.3", 2030 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz", 2031 | "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==", 2032 | "dev": true 2033 | }, 2034 | "node_modules/js-yaml": { 2035 | "version": "4.1.0", 2036 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2037 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2038 | "dev": true, 2039 | "dependencies": { 2040 | "argparse": "^2.0.1" 2041 | }, 2042 | "bin": { 2043 | "js-yaml": "bin/js-yaml.js" 2044 | } 2045 | }, 2046 | "node_modules/json-buffer": { 2047 | "version": "3.0.1", 2048 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 2049 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 2050 | "dev": true 2051 | }, 2052 | "node_modules/json-schema-traverse": { 2053 | "version": "0.4.1", 2054 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2055 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2056 | "dev": true 2057 | }, 2058 | "node_modules/json-stable-stringify-without-jsonify": { 2059 | "version": "1.0.1", 2060 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2061 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 2062 | "dev": true 2063 | }, 2064 | "node_modules/jsonc-parser": { 2065 | "version": "3.2.1", 2066 | "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", 2067 | "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", 2068 | "dev": true 2069 | }, 2070 | "node_modules/keyv": { 2071 | "version": "4.5.4", 2072 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 2073 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 2074 | "dev": true, 2075 | "dependencies": { 2076 | "json-buffer": "3.0.1" 2077 | } 2078 | }, 2079 | "node_modules/levn": { 2080 | "version": "0.4.1", 2081 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2082 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 2083 | "dev": true, 2084 | "dependencies": { 2085 | "prelude-ls": "^1.2.1", 2086 | "type-check": "~0.4.0" 2087 | }, 2088 | "engines": { 2089 | "node": ">= 0.8.0" 2090 | } 2091 | }, 2092 | "node_modules/local-pkg": { 2093 | "version": "0.5.0", 2094 | "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", 2095 | "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", 2096 | "dev": true, 2097 | "dependencies": { 2098 | "mlly": "^1.4.2", 2099 | "pkg-types": "^1.0.3" 2100 | }, 2101 | "engines": { 2102 | "node": ">=14" 2103 | }, 2104 | "funding": { 2105 | "url": "https://github.com/sponsors/antfu" 2106 | } 2107 | }, 2108 | "node_modules/locate-path": { 2109 | "version": "6.0.0", 2110 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2111 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2112 | "dev": true, 2113 | "dependencies": { 2114 | "p-locate": "^5.0.0" 2115 | }, 2116 | "engines": { 2117 | "node": ">=10" 2118 | }, 2119 | "funding": { 2120 | "url": "https://github.com/sponsors/sindresorhus" 2121 | } 2122 | }, 2123 | "node_modules/lodash.merge": { 2124 | "version": "4.6.2", 2125 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 2126 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 2127 | "dev": true 2128 | }, 2129 | "node_modules/loupe": { 2130 | "version": "2.3.7", 2131 | "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", 2132 | "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", 2133 | "dev": true, 2134 | "dependencies": { 2135 | "get-func-name": "^2.0.1" 2136 | } 2137 | }, 2138 | "node_modules/lru-cache": { 2139 | "version": "6.0.0", 2140 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 2141 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 2142 | "dev": true, 2143 | "dependencies": { 2144 | "yallist": "^4.0.0" 2145 | }, 2146 | "engines": { 2147 | "node": ">=10" 2148 | } 2149 | }, 2150 | "node_modules/magic-string": { 2151 | "version": "0.30.7", 2152 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", 2153 | "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", 2154 | "dev": true, 2155 | "dependencies": { 2156 | "@jridgewell/sourcemap-codec": "^1.4.15" 2157 | }, 2158 | "engines": { 2159 | "node": ">=12" 2160 | } 2161 | }, 2162 | "node_modules/merge-stream": { 2163 | "version": "2.0.0", 2164 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 2165 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 2166 | "dev": true 2167 | }, 2168 | "node_modules/merge2": { 2169 | "version": "1.4.1", 2170 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2171 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 2172 | "dev": true, 2173 | "engines": { 2174 | "node": ">= 8" 2175 | } 2176 | }, 2177 | "node_modules/micromatch": { 2178 | "version": "4.0.5", 2179 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 2180 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 2181 | "dev": true, 2182 | "dependencies": { 2183 | "braces": "^3.0.2", 2184 | "picomatch": "^2.3.1" 2185 | }, 2186 | "engines": { 2187 | "node": ">=8.6" 2188 | } 2189 | }, 2190 | "node_modules/mimic-fn": { 2191 | "version": "4.0.0", 2192 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", 2193 | "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", 2194 | "dev": true, 2195 | "engines": { 2196 | "node": ">=12" 2197 | }, 2198 | "funding": { 2199 | "url": "https://github.com/sponsors/sindresorhus" 2200 | } 2201 | }, 2202 | "node_modules/minimatch": { 2203 | "version": "9.0.3", 2204 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", 2205 | "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", 2206 | "dev": true, 2207 | "dependencies": { 2208 | "brace-expansion": "^2.0.1" 2209 | }, 2210 | "engines": { 2211 | "node": ">=16 || 14 >=14.17" 2212 | }, 2213 | "funding": { 2214 | "url": "https://github.com/sponsors/isaacs" 2215 | } 2216 | }, 2217 | "node_modules/mlly": { 2218 | "version": "1.6.1", 2219 | "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz", 2220 | "integrity": "sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==", 2221 | "dev": true, 2222 | "dependencies": { 2223 | "acorn": "^8.11.3", 2224 | "pathe": "^1.1.2", 2225 | "pkg-types": "^1.0.3", 2226 | "ufo": "^1.3.2" 2227 | } 2228 | }, 2229 | "node_modules/ms": { 2230 | "version": "2.1.2", 2231 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2232 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2233 | "dev": true 2234 | }, 2235 | "node_modules/nanoid": { 2236 | "version": "3.3.7", 2237 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 2238 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 2239 | "dev": true, 2240 | "funding": [ 2241 | { 2242 | "type": "github", 2243 | "url": "https://github.com/sponsors/ai" 2244 | } 2245 | ], 2246 | "bin": { 2247 | "nanoid": "bin/nanoid.cjs" 2248 | }, 2249 | "engines": { 2250 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 2251 | } 2252 | }, 2253 | "node_modules/natural-compare": { 2254 | "version": "1.4.0", 2255 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2256 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 2257 | "dev": true 2258 | }, 2259 | "node_modules/npm-run-path": { 2260 | "version": "5.3.0", 2261 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", 2262 | "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", 2263 | "dev": true, 2264 | "dependencies": { 2265 | "path-key": "^4.0.0" 2266 | }, 2267 | "engines": { 2268 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 2269 | }, 2270 | "funding": { 2271 | "url": "https://github.com/sponsors/sindresorhus" 2272 | } 2273 | }, 2274 | "node_modules/npm-run-path/node_modules/path-key": { 2275 | "version": "4.0.0", 2276 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", 2277 | "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", 2278 | "dev": true, 2279 | "engines": { 2280 | "node": ">=12" 2281 | }, 2282 | "funding": { 2283 | "url": "https://github.com/sponsors/sindresorhus" 2284 | } 2285 | }, 2286 | "node_modules/once": { 2287 | "version": "1.4.0", 2288 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2289 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2290 | "dev": true, 2291 | "dependencies": { 2292 | "wrappy": "1" 2293 | } 2294 | }, 2295 | "node_modules/onetime": { 2296 | "version": "6.0.0", 2297 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", 2298 | "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", 2299 | "dev": true, 2300 | "dependencies": { 2301 | "mimic-fn": "^4.0.0" 2302 | }, 2303 | "engines": { 2304 | "node": ">=12" 2305 | }, 2306 | "funding": { 2307 | "url": "https://github.com/sponsors/sindresorhus" 2308 | } 2309 | }, 2310 | "node_modules/optionator": { 2311 | "version": "0.9.3", 2312 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", 2313 | "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", 2314 | "dev": true, 2315 | "dependencies": { 2316 | "@aashutoshrathi/word-wrap": "^1.2.3", 2317 | "deep-is": "^0.1.3", 2318 | "fast-levenshtein": "^2.0.6", 2319 | "levn": "^0.4.1", 2320 | "prelude-ls": "^1.2.1", 2321 | "type-check": "^0.4.0" 2322 | }, 2323 | "engines": { 2324 | "node": ">= 0.8.0" 2325 | } 2326 | }, 2327 | "node_modules/p-limit": { 2328 | "version": "5.0.0", 2329 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", 2330 | "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", 2331 | "dev": true, 2332 | "dependencies": { 2333 | "yocto-queue": "^1.0.0" 2334 | }, 2335 | "engines": { 2336 | "node": ">=18" 2337 | }, 2338 | "funding": { 2339 | "url": "https://github.com/sponsors/sindresorhus" 2340 | } 2341 | }, 2342 | "node_modules/p-locate": { 2343 | "version": "5.0.0", 2344 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 2345 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 2346 | "dev": true, 2347 | "dependencies": { 2348 | "p-limit": "^3.0.2" 2349 | }, 2350 | "engines": { 2351 | "node": ">=10" 2352 | }, 2353 | "funding": { 2354 | "url": "https://github.com/sponsors/sindresorhus" 2355 | } 2356 | }, 2357 | "node_modules/p-locate/node_modules/p-limit": { 2358 | "version": "3.1.0", 2359 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 2360 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 2361 | "dev": true, 2362 | "dependencies": { 2363 | "yocto-queue": "^0.1.0" 2364 | }, 2365 | "engines": { 2366 | "node": ">=10" 2367 | }, 2368 | "funding": { 2369 | "url": "https://github.com/sponsors/sindresorhus" 2370 | } 2371 | }, 2372 | "node_modules/p-locate/node_modules/yocto-queue": { 2373 | "version": "0.1.0", 2374 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 2375 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 2376 | "dev": true, 2377 | "engines": { 2378 | "node": ">=10" 2379 | }, 2380 | "funding": { 2381 | "url": "https://github.com/sponsors/sindresorhus" 2382 | } 2383 | }, 2384 | "node_modules/parent-module": { 2385 | "version": "1.0.1", 2386 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2387 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2388 | "dev": true, 2389 | "dependencies": { 2390 | "callsites": "^3.0.0" 2391 | }, 2392 | "engines": { 2393 | "node": ">=6" 2394 | } 2395 | }, 2396 | "node_modules/path-exists": { 2397 | "version": "4.0.0", 2398 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2399 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2400 | "dev": true, 2401 | "engines": { 2402 | "node": ">=8" 2403 | } 2404 | }, 2405 | "node_modules/path-is-absolute": { 2406 | "version": "1.0.1", 2407 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2408 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 2409 | "dev": true, 2410 | "engines": { 2411 | "node": ">=0.10.0" 2412 | } 2413 | }, 2414 | "node_modules/path-key": { 2415 | "version": "3.1.1", 2416 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2417 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2418 | "dev": true, 2419 | "engines": { 2420 | "node": ">=8" 2421 | } 2422 | }, 2423 | "node_modules/path-type": { 2424 | "version": "4.0.0", 2425 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 2426 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 2427 | "dev": true, 2428 | "engines": { 2429 | "node": ">=8" 2430 | } 2431 | }, 2432 | "node_modules/pathe": { 2433 | "version": "1.1.2", 2434 | "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", 2435 | "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", 2436 | "dev": true 2437 | }, 2438 | "node_modules/pathval": { 2439 | "version": "1.1.1", 2440 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", 2441 | "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", 2442 | "dev": true, 2443 | "engines": { 2444 | "node": "*" 2445 | } 2446 | }, 2447 | "node_modules/picocolors": { 2448 | "version": "1.0.0", 2449 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 2450 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 2451 | "dev": true 2452 | }, 2453 | "node_modules/picomatch": { 2454 | "version": "2.3.1", 2455 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2456 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2457 | "dev": true, 2458 | "engines": { 2459 | "node": ">=8.6" 2460 | }, 2461 | "funding": { 2462 | "url": "https://github.com/sponsors/jonschlinkert" 2463 | } 2464 | }, 2465 | "node_modules/pkg-types": { 2466 | "version": "1.0.3", 2467 | "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", 2468 | "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", 2469 | "dev": true, 2470 | "dependencies": { 2471 | "jsonc-parser": "^3.2.0", 2472 | "mlly": "^1.2.0", 2473 | "pathe": "^1.1.0" 2474 | } 2475 | }, 2476 | "node_modules/postcss": { 2477 | "version": "8.4.35", 2478 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", 2479 | "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", 2480 | "dev": true, 2481 | "funding": [ 2482 | { 2483 | "type": "opencollective", 2484 | "url": "https://opencollective.com/postcss/" 2485 | }, 2486 | { 2487 | "type": "tidelift", 2488 | "url": "https://tidelift.com/funding/github/npm/postcss" 2489 | }, 2490 | { 2491 | "type": "github", 2492 | "url": "https://github.com/sponsors/ai" 2493 | } 2494 | ], 2495 | "dependencies": { 2496 | "nanoid": "^3.3.7", 2497 | "picocolors": "^1.0.0", 2498 | "source-map-js": "^1.0.2" 2499 | }, 2500 | "engines": { 2501 | "node": "^10 || ^12 || >=14" 2502 | } 2503 | }, 2504 | "node_modules/prelude-ls": { 2505 | "version": "1.2.1", 2506 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 2507 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 2508 | "dev": true, 2509 | "engines": { 2510 | "node": ">= 0.8.0" 2511 | } 2512 | }, 2513 | "node_modules/prettier": { 2514 | "version": "3.2.5", 2515 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", 2516 | "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", 2517 | "dev": true, 2518 | "bin": { 2519 | "prettier": "bin/prettier.cjs" 2520 | }, 2521 | "engines": { 2522 | "node": ">=14" 2523 | }, 2524 | "funding": { 2525 | "url": "https://github.com/prettier/prettier?sponsor=1" 2526 | } 2527 | }, 2528 | "node_modules/prettier-linter-helpers": { 2529 | "version": "1.0.0", 2530 | "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", 2531 | "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", 2532 | "dev": true, 2533 | "dependencies": { 2534 | "fast-diff": "^1.1.2" 2535 | }, 2536 | "engines": { 2537 | "node": ">=6.0.0" 2538 | } 2539 | }, 2540 | "node_modules/pretty-format": { 2541 | "version": "29.7.0", 2542 | "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", 2543 | "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", 2544 | "dev": true, 2545 | "dependencies": { 2546 | "@jest/schemas": "^29.6.3", 2547 | "ansi-styles": "^5.0.0", 2548 | "react-is": "^18.0.0" 2549 | }, 2550 | "engines": { 2551 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2552 | } 2553 | }, 2554 | "node_modules/punycode": { 2555 | "version": "2.3.1", 2556 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 2557 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 2558 | "dev": true, 2559 | "engines": { 2560 | "node": ">=6" 2561 | } 2562 | }, 2563 | "node_modules/queue-microtask": { 2564 | "version": "1.2.3", 2565 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2566 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2567 | "dev": true, 2568 | "funding": [ 2569 | { 2570 | "type": "github", 2571 | "url": "https://github.com/sponsors/feross" 2572 | }, 2573 | { 2574 | "type": "patreon", 2575 | "url": "https://www.patreon.com/feross" 2576 | }, 2577 | { 2578 | "type": "consulting", 2579 | "url": "https://feross.org/support" 2580 | } 2581 | ] 2582 | }, 2583 | "node_modules/react-is": { 2584 | "version": "18.2.0", 2585 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", 2586 | "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", 2587 | "dev": true 2588 | }, 2589 | "node_modules/resolve-from": { 2590 | "version": "4.0.0", 2591 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2592 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2593 | "dev": true, 2594 | "engines": { 2595 | "node": ">=4" 2596 | } 2597 | }, 2598 | "node_modules/reusify": { 2599 | "version": "1.0.4", 2600 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2601 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2602 | "dev": true, 2603 | "engines": { 2604 | "iojs": ">=1.0.0", 2605 | "node": ">=0.10.0" 2606 | } 2607 | }, 2608 | "node_modules/rimraf": { 2609 | "version": "3.0.2", 2610 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 2611 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 2612 | "dev": true, 2613 | "dependencies": { 2614 | "glob": "^7.1.3" 2615 | }, 2616 | "bin": { 2617 | "rimraf": "bin.js" 2618 | }, 2619 | "funding": { 2620 | "url": "https://github.com/sponsors/isaacs" 2621 | } 2622 | }, 2623 | "node_modules/rollup": { 2624 | "version": "4.12.0", 2625 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz", 2626 | "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==", 2627 | "dev": true, 2628 | "dependencies": { 2629 | "@types/estree": "1.0.5" 2630 | }, 2631 | "bin": { 2632 | "rollup": "dist/bin/rollup" 2633 | }, 2634 | "engines": { 2635 | "node": ">=18.0.0", 2636 | "npm": ">=8.0.0" 2637 | }, 2638 | "optionalDependencies": { 2639 | "@rollup/rollup-android-arm-eabi": "4.12.0", 2640 | "@rollup/rollup-android-arm64": "4.12.0", 2641 | "@rollup/rollup-darwin-arm64": "4.12.0", 2642 | "@rollup/rollup-darwin-x64": "4.12.0", 2643 | "@rollup/rollup-linux-arm-gnueabihf": "4.12.0", 2644 | "@rollup/rollup-linux-arm64-gnu": "4.12.0", 2645 | "@rollup/rollup-linux-arm64-musl": "4.12.0", 2646 | "@rollup/rollup-linux-riscv64-gnu": "4.12.0", 2647 | "@rollup/rollup-linux-x64-gnu": "4.12.0", 2648 | "@rollup/rollup-linux-x64-musl": "4.12.0", 2649 | "@rollup/rollup-win32-arm64-msvc": "4.12.0", 2650 | "@rollup/rollup-win32-ia32-msvc": "4.12.0", 2651 | "@rollup/rollup-win32-x64-msvc": "4.12.0", 2652 | "fsevents": "~2.3.2" 2653 | } 2654 | }, 2655 | "node_modules/run-parallel": { 2656 | "version": "1.2.0", 2657 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2658 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2659 | "dev": true, 2660 | "funding": [ 2661 | { 2662 | "type": "github", 2663 | "url": "https://github.com/sponsors/feross" 2664 | }, 2665 | { 2666 | "type": "patreon", 2667 | "url": "https://www.patreon.com/feross" 2668 | }, 2669 | { 2670 | "type": "consulting", 2671 | "url": "https://feross.org/support" 2672 | } 2673 | ], 2674 | "dependencies": { 2675 | "queue-microtask": "^1.2.2" 2676 | } 2677 | }, 2678 | "node_modules/semver": { 2679 | "version": "7.6.0", 2680 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", 2681 | "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", 2682 | "dev": true, 2683 | "dependencies": { 2684 | "lru-cache": "^6.0.0" 2685 | }, 2686 | "bin": { 2687 | "semver": "bin/semver.js" 2688 | }, 2689 | "engines": { 2690 | "node": ">=10" 2691 | } 2692 | }, 2693 | "node_modules/shebang-command": { 2694 | "version": "2.0.0", 2695 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2696 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2697 | "dev": true, 2698 | "dependencies": { 2699 | "shebang-regex": "^3.0.0" 2700 | }, 2701 | "engines": { 2702 | "node": ">=8" 2703 | } 2704 | }, 2705 | "node_modules/shebang-regex": { 2706 | "version": "3.0.0", 2707 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2708 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2709 | "dev": true, 2710 | "engines": { 2711 | "node": ">=8" 2712 | } 2713 | }, 2714 | "node_modules/siginfo": { 2715 | "version": "2.0.0", 2716 | "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", 2717 | "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", 2718 | "dev": true 2719 | }, 2720 | "node_modules/signal-exit": { 2721 | "version": "4.1.0", 2722 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 2723 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 2724 | "dev": true, 2725 | "engines": { 2726 | "node": ">=14" 2727 | }, 2728 | "funding": { 2729 | "url": "https://github.com/sponsors/isaacs" 2730 | } 2731 | }, 2732 | "node_modules/slash": { 2733 | "version": "3.0.0", 2734 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 2735 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 2736 | "dev": true, 2737 | "engines": { 2738 | "node": ">=8" 2739 | } 2740 | }, 2741 | "node_modules/source-map-js": { 2742 | "version": "1.0.2", 2743 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 2744 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 2745 | "dev": true, 2746 | "engines": { 2747 | "node": ">=0.10.0" 2748 | } 2749 | }, 2750 | "node_modules/stackback": { 2751 | "version": "0.0.2", 2752 | "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", 2753 | "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", 2754 | "dev": true 2755 | }, 2756 | "node_modules/std-env": { 2757 | "version": "3.7.0", 2758 | "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", 2759 | "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", 2760 | "dev": true 2761 | }, 2762 | "node_modules/strip-ansi": { 2763 | "version": "6.0.1", 2764 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2765 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2766 | "dev": true, 2767 | "dependencies": { 2768 | "ansi-regex": "^5.0.1" 2769 | }, 2770 | "engines": { 2771 | "node": ">=8" 2772 | } 2773 | }, 2774 | "node_modules/strip-final-newline": { 2775 | "version": "3.0.0", 2776 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", 2777 | "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", 2778 | "dev": true, 2779 | "engines": { 2780 | "node": ">=12" 2781 | }, 2782 | "funding": { 2783 | "url": "https://github.com/sponsors/sindresorhus" 2784 | } 2785 | }, 2786 | "node_modules/strip-json-comments": { 2787 | "version": "3.1.1", 2788 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 2789 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 2790 | "dev": true, 2791 | "engines": { 2792 | "node": ">=8" 2793 | }, 2794 | "funding": { 2795 | "url": "https://github.com/sponsors/sindresorhus" 2796 | } 2797 | }, 2798 | "node_modules/strip-literal": { 2799 | "version": "2.0.0", 2800 | "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.0.0.tgz", 2801 | "integrity": "sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==", 2802 | "dev": true, 2803 | "dependencies": { 2804 | "js-tokens": "^8.0.2" 2805 | }, 2806 | "funding": { 2807 | "url": "https://github.com/sponsors/antfu" 2808 | } 2809 | }, 2810 | "node_modules/supports-color": { 2811 | "version": "7.2.0", 2812 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2813 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2814 | "dev": true, 2815 | "dependencies": { 2816 | "has-flag": "^4.0.0" 2817 | }, 2818 | "engines": { 2819 | "node": ">=8" 2820 | } 2821 | }, 2822 | "node_modules/synckit": { 2823 | "version": "0.8.8", 2824 | "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", 2825 | "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", 2826 | "dev": true, 2827 | "dependencies": { 2828 | "@pkgr/core": "^0.1.0", 2829 | "tslib": "^2.6.2" 2830 | }, 2831 | "engines": { 2832 | "node": "^14.18.0 || >=16.0.0" 2833 | }, 2834 | "funding": { 2835 | "url": "https://opencollective.com/unts" 2836 | } 2837 | }, 2838 | "node_modules/text-table": { 2839 | "version": "0.2.0", 2840 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 2841 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 2842 | "dev": true 2843 | }, 2844 | "node_modules/tinybench": { 2845 | "version": "2.6.0", 2846 | "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", 2847 | "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==", 2848 | "dev": true 2849 | }, 2850 | "node_modules/tinypool": { 2851 | "version": "0.8.2", 2852 | "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", 2853 | "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", 2854 | "dev": true, 2855 | "engines": { 2856 | "node": ">=14.0.0" 2857 | } 2858 | }, 2859 | "node_modules/tinyspy": { 2860 | "version": "2.2.1", 2861 | "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", 2862 | "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", 2863 | "dev": true, 2864 | "engines": { 2865 | "node": ">=14.0.0" 2866 | } 2867 | }, 2868 | "node_modules/to-regex-range": { 2869 | "version": "5.0.1", 2870 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2871 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2872 | "dev": true, 2873 | "dependencies": { 2874 | "is-number": "^7.0.0" 2875 | }, 2876 | "engines": { 2877 | "node": ">=8.0" 2878 | } 2879 | }, 2880 | "node_modules/ts-api-utils": { 2881 | "version": "1.2.1", 2882 | "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", 2883 | "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", 2884 | "dev": true, 2885 | "engines": { 2886 | "node": ">=16" 2887 | }, 2888 | "peerDependencies": { 2889 | "typescript": ">=4.2.0" 2890 | } 2891 | }, 2892 | "node_modules/tslib": { 2893 | "version": "2.6.2", 2894 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 2895 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", 2896 | "dev": true 2897 | }, 2898 | "node_modules/type-check": { 2899 | "version": "0.4.0", 2900 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 2901 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 2902 | "dev": true, 2903 | "dependencies": { 2904 | "prelude-ls": "^1.2.1" 2905 | }, 2906 | "engines": { 2907 | "node": ">= 0.8.0" 2908 | } 2909 | }, 2910 | "node_modules/type-detect": { 2911 | "version": "4.0.8", 2912 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 2913 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", 2914 | "dev": true, 2915 | "engines": { 2916 | "node": ">=4" 2917 | } 2918 | }, 2919 | "node_modules/type-fest": { 2920 | "version": "0.20.2", 2921 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 2922 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 2923 | "dev": true, 2924 | "engines": { 2925 | "node": ">=10" 2926 | }, 2927 | "funding": { 2928 | "url": "https://github.com/sponsors/sindresorhus" 2929 | } 2930 | }, 2931 | "node_modules/typescript": { 2932 | "version": "5.3.3", 2933 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", 2934 | "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", 2935 | "dev": true, 2936 | "bin": { 2937 | "tsc": "bin/tsc", 2938 | "tsserver": "bin/tsserver" 2939 | }, 2940 | "engines": { 2941 | "node": ">=14.17" 2942 | } 2943 | }, 2944 | "node_modules/ufo": { 2945 | "version": "1.4.0", 2946 | "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz", 2947 | "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==", 2948 | "dev": true 2949 | }, 2950 | "node_modules/uri-js": { 2951 | "version": "4.4.1", 2952 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2953 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2954 | "dev": true, 2955 | "dependencies": { 2956 | "punycode": "^2.1.0" 2957 | } 2958 | }, 2959 | "node_modules/vite": { 2960 | "version": "5.1.4", 2961 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.4.tgz", 2962 | "integrity": "sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==", 2963 | "dev": true, 2964 | "dependencies": { 2965 | "esbuild": "^0.19.3", 2966 | "postcss": "^8.4.35", 2967 | "rollup": "^4.2.0" 2968 | }, 2969 | "bin": { 2970 | "vite": "bin/vite.js" 2971 | }, 2972 | "engines": { 2973 | "node": "^18.0.0 || >=20.0.0" 2974 | }, 2975 | "funding": { 2976 | "url": "https://github.com/vitejs/vite?sponsor=1" 2977 | }, 2978 | "optionalDependencies": { 2979 | "fsevents": "~2.3.3" 2980 | }, 2981 | "peerDependencies": { 2982 | "@types/node": "^18.0.0 || >=20.0.0", 2983 | "less": "*", 2984 | "lightningcss": "^1.21.0", 2985 | "sass": "*", 2986 | "stylus": "*", 2987 | "sugarss": "*", 2988 | "terser": "^5.4.0" 2989 | }, 2990 | "peerDependenciesMeta": { 2991 | "@types/node": { 2992 | "optional": true 2993 | }, 2994 | "less": { 2995 | "optional": true 2996 | }, 2997 | "lightningcss": { 2998 | "optional": true 2999 | }, 3000 | "sass": { 3001 | "optional": true 3002 | }, 3003 | "stylus": { 3004 | "optional": true 3005 | }, 3006 | "sugarss": { 3007 | "optional": true 3008 | }, 3009 | "terser": { 3010 | "optional": true 3011 | } 3012 | } 3013 | }, 3014 | "node_modules/vite-node": { 3015 | "version": "1.3.1", 3016 | "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.3.1.tgz", 3017 | "integrity": "sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==", 3018 | "dev": true, 3019 | "dependencies": { 3020 | "cac": "^6.7.14", 3021 | "debug": "^4.3.4", 3022 | "pathe": "^1.1.1", 3023 | "picocolors": "^1.0.0", 3024 | "vite": "^5.0.0" 3025 | }, 3026 | "bin": { 3027 | "vite-node": "vite-node.mjs" 3028 | }, 3029 | "engines": { 3030 | "node": "^18.0.0 || >=20.0.0" 3031 | }, 3032 | "funding": { 3033 | "url": "https://opencollective.com/vitest" 3034 | } 3035 | }, 3036 | "node_modules/vitest": { 3037 | "version": "1.3.1", 3038 | "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.3.1.tgz", 3039 | "integrity": "sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==", 3040 | "dev": true, 3041 | "dependencies": { 3042 | "@vitest/expect": "1.3.1", 3043 | "@vitest/runner": "1.3.1", 3044 | "@vitest/snapshot": "1.3.1", 3045 | "@vitest/spy": "1.3.1", 3046 | "@vitest/utils": "1.3.1", 3047 | "acorn-walk": "^8.3.2", 3048 | "chai": "^4.3.10", 3049 | "debug": "^4.3.4", 3050 | "execa": "^8.0.1", 3051 | "local-pkg": "^0.5.0", 3052 | "magic-string": "^0.30.5", 3053 | "pathe": "^1.1.1", 3054 | "picocolors": "^1.0.0", 3055 | "std-env": "^3.5.0", 3056 | "strip-literal": "^2.0.0", 3057 | "tinybench": "^2.5.1", 3058 | "tinypool": "^0.8.2", 3059 | "vite": "^5.0.0", 3060 | "vite-node": "1.3.1", 3061 | "why-is-node-running": "^2.2.2" 3062 | }, 3063 | "bin": { 3064 | "vitest": "vitest.mjs" 3065 | }, 3066 | "engines": { 3067 | "node": "^18.0.0 || >=20.0.0" 3068 | }, 3069 | "funding": { 3070 | "url": "https://opencollective.com/vitest" 3071 | }, 3072 | "peerDependencies": { 3073 | "@edge-runtime/vm": "*", 3074 | "@types/node": "^18.0.0 || >=20.0.0", 3075 | "@vitest/browser": "1.3.1", 3076 | "@vitest/ui": "1.3.1", 3077 | "happy-dom": "*", 3078 | "jsdom": "*" 3079 | }, 3080 | "peerDependenciesMeta": { 3081 | "@edge-runtime/vm": { 3082 | "optional": true 3083 | }, 3084 | "@types/node": { 3085 | "optional": true 3086 | }, 3087 | "@vitest/browser": { 3088 | "optional": true 3089 | }, 3090 | "@vitest/ui": { 3091 | "optional": true 3092 | }, 3093 | "happy-dom": { 3094 | "optional": true 3095 | }, 3096 | "jsdom": { 3097 | "optional": true 3098 | } 3099 | } 3100 | }, 3101 | "node_modules/which": { 3102 | "version": "2.0.2", 3103 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3104 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3105 | "dev": true, 3106 | "dependencies": { 3107 | "isexe": "^2.0.0" 3108 | }, 3109 | "bin": { 3110 | "node-which": "bin/node-which" 3111 | }, 3112 | "engines": { 3113 | "node": ">= 8" 3114 | } 3115 | }, 3116 | "node_modules/why-is-node-running": { 3117 | "version": "2.2.2", 3118 | "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", 3119 | "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", 3120 | "dev": true, 3121 | "dependencies": { 3122 | "siginfo": "^2.0.0", 3123 | "stackback": "0.0.2" 3124 | }, 3125 | "bin": { 3126 | "why-is-node-running": "cli.js" 3127 | }, 3128 | "engines": { 3129 | "node": ">=8" 3130 | } 3131 | }, 3132 | "node_modules/wrappy": { 3133 | "version": "1.0.2", 3134 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3135 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 3136 | "dev": true 3137 | }, 3138 | "node_modules/yallist": { 3139 | "version": "4.0.0", 3140 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 3141 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 3142 | "dev": true 3143 | }, 3144 | "node_modules/yocto-queue": { 3145 | "version": "1.0.0", 3146 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", 3147 | "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", 3148 | "dev": true, 3149 | "engines": { 3150 | "node": ">=12.20" 3151 | }, 3152 | "funding": { 3153 | "url": "https://github.com/sponsors/sindresorhus" 3154 | } 3155 | } 3156 | } 3157 | } 3158 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tic-tac-types", 3 | "version": "0.0.1", 4 | "type": "module", 5 | "private": true, 6 | "description": "An implementation of Tic-Tac-Toe written using only TypeScript types", 7 | "scripts": { 8 | "format": "eslint . --fix", 9 | "lint": "eslint .", 10 | "test": "vitest --typecheck" 11 | }, 12 | "license": "MIT", 13 | "devDependencies": { 14 | "@typescript-eslint/eslint-plugin": "^7.1.0", 15 | "@typescript-eslint/parser": "^7.1.0", 16 | "eslint": "^8.57.0", 17 | "eslint-config-prettier": "^9.1.0", 18 | "eslint-plugin-prettier": "^5.1.3", 19 | "prettier": "^3.2.5", 20 | "typescript": "5.3.3", 21 | "vitest": "^1.3.1" 22 | } 23 | } -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | devDependencies: 8 | eslint: 9 | specifier: ^8.57.0 10 | version: 8.57.0 11 | eslint-config-prettier: 12 | specifier: ^9.1.0 13 | version: 9.1.0(eslint@8.57.0) 14 | eslint-plugin-prettier: 15 | specifier: ^5.1.3 16 | version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) 17 | prettier: 18 | specifier: ^3.2.5 19 | version: 3.2.5 20 | typescript: 21 | specifier: 5.3.3 22 | version: 5.3.3 23 | vitest: 24 | specifier: ^1.3.1 25 | version: 1.3.1 26 | 27 | packages: 28 | 29 | /@aashutoshrathi/word-wrap@1.2.6: 30 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 31 | engines: {node: '>=0.10.0'} 32 | dev: true 33 | 34 | /@esbuild/aix-ppc64@0.19.12: 35 | resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} 36 | engines: {node: '>=12'} 37 | cpu: [ppc64] 38 | os: [aix] 39 | requiresBuild: true 40 | dev: true 41 | optional: true 42 | 43 | /@esbuild/android-arm64@0.19.12: 44 | resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} 45 | engines: {node: '>=12'} 46 | cpu: [arm64] 47 | os: [android] 48 | requiresBuild: true 49 | dev: true 50 | optional: true 51 | 52 | /@esbuild/android-arm@0.19.12: 53 | resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} 54 | engines: {node: '>=12'} 55 | cpu: [arm] 56 | os: [android] 57 | requiresBuild: true 58 | dev: true 59 | optional: true 60 | 61 | /@esbuild/android-x64@0.19.12: 62 | resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} 63 | engines: {node: '>=12'} 64 | cpu: [x64] 65 | os: [android] 66 | requiresBuild: true 67 | dev: true 68 | optional: true 69 | 70 | /@esbuild/darwin-arm64@0.19.12: 71 | resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} 72 | engines: {node: '>=12'} 73 | cpu: [arm64] 74 | os: [darwin] 75 | requiresBuild: true 76 | dev: true 77 | optional: true 78 | 79 | /@esbuild/darwin-x64@0.19.12: 80 | resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} 81 | engines: {node: '>=12'} 82 | cpu: [x64] 83 | os: [darwin] 84 | requiresBuild: true 85 | dev: true 86 | optional: true 87 | 88 | /@esbuild/freebsd-arm64@0.19.12: 89 | resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} 90 | engines: {node: '>=12'} 91 | cpu: [arm64] 92 | os: [freebsd] 93 | requiresBuild: true 94 | dev: true 95 | optional: true 96 | 97 | /@esbuild/freebsd-x64@0.19.12: 98 | resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} 99 | engines: {node: '>=12'} 100 | cpu: [x64] 101 | os: [freebsd] 102 | requiresBuild: true 103 | dev: true 104 | optional: true 105 | 106 | /@esbuild/linux-arm64@0.19.12: 107 | resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} 108 | engines: {node: '>=12'} 109 | cpu: [arm64] 110 | os: [linux] 111 | requiresBuild: true 112 | dev: true 113 | optional: true 114 | 115 | /@esbuild/linux-arm@0.19.12: 116 | resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} 117 | engines: {node: '>=12'} 118 | cpu: [arm] 119 | os: [linux] 120 | requiresBuild: true 121 | dev: true 122 | optional: true 123 | 124 | /@esbuild/linux-ia32@0.19.12: 125 | resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} 126 | engines: {node: '>=12'} 127 | cpu: [ia32] 128 | os: [linux] 129 | requiresBuild: true 130 | dev: true 131 | optional: true 132 | 133 | /@esbuild/linux-loong64@0.19.12: 134 | resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} 135 | engines: {node: '>=12'} 136 | cpu: [loong64] 137 | os: [linux] 138 | requiresBuild: true 139 | dev: true 140 | optional: true 141 | 142 | /@esbuild/linux-mips64el@0.19.12: 143 | resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} 144 | engines: {node: '>=12'} 145 | cpu: [mips64el] 146 | os: [linux] 147 | requiresBuild: true 148 | dev: true 149 | optional: true 150 | 151 | /@esbuild/linux-ppc64@0.19.12: 152 | resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} 153 | engines: {node: '>=12'} 154 | cpu: [ppc64] 155 | os: [linux] 156 | requiresBuild: true 157 | dev: true 158 | optional: true 159 | 160 | /@esbuild/linux-riscv64@0.19.12: 161 | resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} 162 | engines: {node: '>=12'} 163 | cpu: [riscv64] 164 | os: [linux] 165 | requiresBuild: true 166 | dev: true 167 | optional: true 168 | 169 | /@esbuild/linux-s390x@0.19.12: 170 | resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} 171 | engines: {node: '>=12'} 172 | cpu: [s390x] 173 | os: [linux] 174 | requiresBuild: true 175 | dev: true 176 | optional: true 177 | 178 | /@esbuild/linux-x64@0.19.12: 179 | resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} 180 | engines: {node: '>=12'} 181 | cpu: [x64] 182 | os: [linux] 183 | requiresBuild: true 184 | dev: true 185 | optional: true 186 | 187 | /@esbuild/netbsd-x64@0.19.12: 188 | resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} 189 | engines: {node: '>=12'} 190 | cpu: [x64] 191 | os: [netbsd] 192 | requiresBuild: true 193 | dev: true 194 | optional: true 195 | 196 | /@esbuild/openbsd-x64@0.19.12: 197 | resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} 198 | engines: {node: '>=12'} 199 | cpu: [x64] 200 | os: [openbsd] 201 | requiresBuild: true 202 | dev: true 203 | optional: true 204 | 205 | /@esbuild/sunos-x64@0.19.12: 206 | resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} 207 | engines: {node: '>=12'} 208 | cpu: [x64] 209 | os: [sunos] 210 | requiresBuild: true 211 | dev: true 212 | optional: true 213 | 214 | /@esbuild/win32-arm64@0.19.12: 215 | resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} 216 | engines: {node: '>=12'} 217 | cpu: [arm64] 218 | os: [win32] 219 | requiresBuild: true 220 | dev: true 221 | optional: true 222 | 223 | /@esbuild/win32-ia32@0.19.12: 224 | resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} 225 | engines: {node: '>=12'} 226 | cpu: [ia32] 227 | os: [win32] 228 | requiresBuild: true 229 | dev: true 230 | optional: true 231 | 232 | /@esbuild/win32-x64@0.19.12: 233 | resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} 234 | engines: {node: '>=12'} 235 | cpu: [x64] 236 | os: [win32] 237 | requiresBuild: true 238 | dev: true 239 | optional: true 240 | 241 | /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): 242 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 243 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 244 | peerDependencies: 245 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 246 | dependencies: 247 | eslint: 8.57.0 248 | eslint-visitor-keys: 3.4.3 249 | dev: true 250 | 251 | /@eslint-community/regexpp@4.10.0: 252 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} 253 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 254 | dev: true 255 | 256 | /@eslint/eslintrc@2.1.4: 257 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 258 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 259 | dependencies: 260 | ajv: 6.12.6 261 | debug: 4.3.4 262 | espree: 9.6.1 263 | globals: 13.24.0 264 | ignore: 5.3.1 265 | import-fresh: 3.3.0 266 | js-yaml: 4.1.0 267 | minimatch: 3.1.2 268 | strip-json-comments: 3.1.1 269 | transitivePeerDependencies: 270 | - supports-color 271 | dev: true 272 | 273 | /@eslint/js@8.57.0: 274 | resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} 275 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 276 | dev: true 277 | 278 | /@humanwhocodes/config-array@0.11.14: 279 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} 280 | engines: {node: '>=10.10.0'} 281 | dependencies: 282 | '@humanwhocodes/object-schema': 2.0.2 283 | debug: 4.3.4 284 | minimatch: 3.1.2 285 | transitivePeerDependencies: 286 | - supports-color 287 | dev: true 288 | 289 | /@humanwhocodes/module-importer@1.0.1: 290 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 291 | engines: {node: '>=12.22'} 292 | dev: true 293 | 294 | /@humanwhocodes/object-schema@2.0.2: 295 | resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} 296 | dev: true 297 | 298 | /@jest/schemas@29.6.3: 299 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 300 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 301 | dependencies: 302 | '@sinclair/typebox': 0.27.8 303 | dev: true 304 | 305 | /@jridgewell/sourcemap-codec@1.4.15: 306 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 307 | dev: true 308 | 309 | /@nodelib/fs.scandir@2.1.5: 310 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 311 | engines: {node: '>= 8'} 312 | dependencies: 313 | '@nodelib/fs.stat': 2.0.5 314 | run-parallel: 1.2.0 315 | dev: true 316 | 317 | /@nodelib/fs.stat@2.0.5: 318 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 319 | engines: {node: '>= 8'} 320 | dev: true 321 | 322 | /@nodelib/fs.walk@1.2.8: 323 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 324 | engines: {node: '>= 8'} 325 | dependencies: 326 | '@nodelib/fs.scandir': 2.1.5 327 | fastq: 1.17.1 328 | dev: true 329 | 330 | /@pkgr/core@0.1.1: 331 | resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} 332 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 333 | dev: true 334 | 335 | /@rollup/rollup-android-arm-eabi@4.12.0: 336 | resolution: {integrity: sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==} 337 | cpu: [arm] 338 | os: [android] 339 | requiresBuild: true 340 | dev: true 341 | optional: true 342 | 343 | /@rollup/rollup-android-arm64@4.12.0: 344 | resolution: {integrity: sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==} 345 | cpu: [arm64] 346 | os: [android] 347 | requiresBuild: true 348 | dev: true 349 | optional: true 350 | 351 | /@rollup/rollup-darwin-arm64@4.12.0: 352 | resolution: {integrity: sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==} 353 | cpu: [arm64] 354 | os: [darwin] 355 | requiresBuild: true 356 | dev: true 357 | optional: true 358 | 359 | /@rollup/rollup-darwin-x64@4.12.0: 360 | resolution: {integrity: sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==} 361 | cpu: [x64] 362 | os: [darwin] 363 | requiresBuild: true 364 | dev: true 365 | optional: true 366 | 367 | /@rollup/rollup-linux-arm-gnueabihf@4.12.0: 368 | resolution: {integrity: sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==} 369 | cpu: [arm] 370 | os: [linux] 371 | requiresBuild: true 372 | dev: true 373 | optional: true 374 | 375 | /@rollup/rollup-linux-arm64-gnu@4.12.0: 376 | resolution: {integrity: sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==} 377 | cpu: [arm64] 378 | os: [linux] 379 | requiresBuild: true 380 | dev: true 381 | optional: true 382 | 383 | /@rollup/rollup-linux-arm64-musl@4.12.0: 384 | resolution: {integrity: sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==} 385 | cpu: [arm64] 386 | os: [linux] 387 | requiresBuild: true 388 | dev: true 389 | optional: true 390 | 391 | /@rollup/rollup-linux-riscv64-gnu@4.12.0: 392 | resolution: {integrity: sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==} 393 | cpu: [riscv64] 394 | os: [linux] 395 | requiresBuild: true 396 | dev: true 397 | optional: true 398 | 399 | /@rollup/rollup-linux-x64-gnu@4.12.0: 400 | resolution: {integrity: sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==} 401 | cpu: [x64] 402 | os: [linux] 403 | requiresBuild: true 404 | dev: true 405 | optional: true 406 | 407 | /@rollup/rollup-linux-x64-musl@4.12.0: 408 | resolution: {integrity: sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==} 409 | cpu: [x64] 410 | os: [linux] 411 | requiresBuild: true 412 | dev: true 413 | optional: true 414 | 415 | /@rollup/rollup-win32-arm64-msvc@4.12.0: 416 | resolution: {integrity: sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==} 417 | cpu: [arm64] 418 | os: [win32] 419 | requiresBuild: true 420 | dev: true 421 | optional: true 422 | 423 | /@rollup/rollup-win32-ia32-msvc@4.12.0: 424 | resolution: {integrity: sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==} 425 | cpu: [ia32] 426 | os: [win32] 427 | requiresBuild: true 428 | dev: true 429 | optional: true 430 | 431 | /@rollup/rollup-win32-x64-msvc@4.12.0: 432 | resolution: {integrity: sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==} 433 | cpu: [x64] 434 | os: [win32] 435 | requiresBuild: true 436 | dev: true 437 | optional: true 438 | 439 | /@sinclair/typebox@0.27.8: 440 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 441 | dev: true 442 | 443 | /@types/estree@1.0.5: 444 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 445 | dev: true 446 | 447 | /@ungap/structured-clone@1.2.0: 448 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 449 | dev: true 450 | 451 | /@vitest/expect@1.3.1: 452 | resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==} 453 | dependencies: 454 | '@vitest/spy': 1.3.1 455 | '@vitest/utils': 1.3.1 456 | chai: 4.4.1 457 | dev: true 458 | 459 | /@vitest/runner@1.3.1: 460 | resolution: {integrity: sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg==} 461 | dependencies: 462 | '@vitest/utils': 1.3.1 463 | p-limit: 5.0.0 464 | pathe: 1.1.2 465 | dev: true 466 | 467 | /@vitest/snapshot@1.3.1: 468 | resolution: {integrity: sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ==} 469 | dependencies: 470 | magic-string: 0.30.7 471 | pathe: 1.1.2 472 | pretty-format: 29.7.0 473 | dev: true 474 | 475 | /@vitest/spy@1.3.1: 476 | resolution: {integrity: sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==} 477 | dependencies: 478 | tinyspy: 2.2.1 479 | dev: true 480 | 481 | /@vitest/utils@1.3.1: 482 | resolution: {integrity: sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==} 483 | dependencies: 484 | diff-sequences: 29.6.3 485 | estree-walker: 3.0.3 486 | loupe: 2.3.7 487 | pretty-format: 29.7.0 488 | dev: true 489 | 490 | /acorn-jsx@5.3.2(acorn@8.11.3): 491 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 492 | peerDependencies: 493 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 494 | dependencies: 495 | acorn: 8.11.3 496 | dev: true 497 | 498 | /acorn-walk@8.3.2: 499 | resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} 500 | engines: {node: '>=0.4.0'} 501 | dev: true 502 | 503 | /acorn@8.11.3: 504 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} 505 | engines: {node: '>=0.4.0'} 506 | hasBin: true 507 | dev: true 508 | 509 | /ajv@6.12.6: 510 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 511 | dependencies: 512 | fast-deep-equal: 3.1.3 513 | fast-json-stable-stringify: 2.1.0 514 | json-schema-traverse: 0.4.1 515 | uri-js: 4.4.1 516 | dev: true 517 | 518 | /ansi-regex@5.0.1: 519 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 520 | engines: {node: '>=8'} 521 | dev: true 522 | 523 | /ansi-styles@4.3.0: 524 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 525 | engines: {node: '>=8'} 526 | dependencies: 527 | color-convert: 2.0.1 528 | dev: true 529 | 530 | /ansi-styles@5.2.0: 531 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 532 | engines: {node: '>=10'} 533 | dev: true 534 | 535 | /argparse@2.0.1: 536 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 537 | dev: true 538 | 539 | /assertion-error@1.1.0: 540 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 541 | dev: true 542 | 543 | /balanced-match@1.0.2: 544 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 545 | dev: true 546 | 547 | /brace-expansion@1.1.11: 548 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 549 | dependencies: 550 | balanced-match: 1.0.2 551 | concat-map: 0.0.1 552 | dev: true 553 | 554 | /cac@6.7.14: 555 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 556 | engines: {node: '>=8'} 557 | dev: true 558 | 559 | /callsites@3.1.0: 560 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 561 | engines: {node: '>=6'} 562 | dev: true 563 | 564 | /chai@4.4.1: 565 | resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} 566 | engines: {node: '>=4'} 567 | dependencies: 568 | assertion-error: 1.1.0 569 | check-error: 1.0.3 570 | deep-eql: 4.1.3 571 | get-func-name: 2.0.2 572 | loupe: 2.3.7 573 | pathval: 1.1.1 574 | type-detect: 4.0.8 575 | dev: true 576 | 577 | /chalk@4.1.2: 578 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 579 | engines: {node: '>=10'} 580 | dependencies: 581 | ansi-styles: 4.3.0 582 | supports-color: 7.2.0 583 | dev: true 584 | 585 | /check-error@1.0.3: 586 | resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} 587 | dependencies: 588 | get-func-name: 2.0.2 589 | dev: true 590 | 591 | /color-convert@2.0.1: 592 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 593 | engines: {node: '>=7.0.0'} 594 | dependencies: 595 | color-name: 1.1.4 596 | dev: true 597 | 598 | /color-name@1.1.4: 599 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 600 | dev: true 601 | 602 | /concat-map@0.0.1: 603 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 604 | dev: true 605 | 606 | /cross-spawn@7.0.3: 607 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 608 | engines: {node: '>= 8'} 609 | dependencies: 610 | path-key: 3.1.1 611 | shebang-command: 2.0.0 612 | which: 2.0.2 613 | dev: true 614 | 615 | /debug@4.3.4: 616 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 617 | engines: {node: '>=6.0'} 618 | peerDependencies: 619 | supports-color: '*' 620 | peerDependenciesMeta: 621 | supports-color: 622 | optional: true 623 | dependencies: 624 | ms: 2.1.2 625 | dev: true 626 | 627 | /deep-eql@4.1.3: 628 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} 629 | engines: {node: '>=6'} 630 | dependencies: 631 | type-detect: 4.0.8 632 | dev: true 633 | 634 | /deep-is@0.1.4: 635 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 636 | dev: true 637 | 638 | /diff-sequences@29.6.3: 639 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 640 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 641 | dev: true 642 | 643 | /doctrine@3.0.0: 644 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 645 | engines: {node: '>=6.0.0'} 646 | dependencies: 647 | esutils: 2.0.3 648 | dev: true 649 | 650 | /esbuild@0.19.12: 651 | resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} 652 | engines: {node: '>=12'} 653 | hasBin: true 654 | requiresBuild: true 655 | optionalDependencies: 656 | '@esbuild/aix-ppc64': 0.19.12 657 | '@esbuild/android-arm': 0.19.12 658 | '@esbuild/android-arm64': 0.19.12 659 | '@esbuild/android-x64': 0.19.12 660 | '@esbuild/darwin-arm64': 0.19.12 661 | '@esbuild/darwin-x64': 0.19.12 662 | '@esbuild/freebsd-arm64': 0.19.12 663 | '@esbuild/freebsd-x64': 0.19.12 664 | '@esbuild/linux-arm': 0.19.12 665 | '@esbuild/linux-arm64': 0.19.12 666 | '@esbuild/linux-ia32': 0.19.12 667 | '@esbuild/linux-loong64': 0.19.12 668 | '@esbuild/linux-mips64el': 0.19.12 669 | '@esbuild/linux-ppc64': 0.19.12 670 | '@esbuild/linux-riscv64': 0.19.12 671 | '@esbuild/linux-s390x': 0.19.12 672 | '@esbuild/linux-x64': 0.19.12 673 | '@esbuild/netbsd-x64': 0.19.12 674 | '@esbuild/openbsd-x64': 0.19.12 675 | '@esbuild/sunos-x64': 0.19.12 676 | '@esbuild/win32-arm64': 0.19.12 677 | '@esbuild/win32-ia32': 0.19.12 678 | '@esbuild/win32-x64': 0.19.12 679 | dev: true 680 | 681 | /escape-string-regexp@4.0.0: 682 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 683 | engines: {node: '>=10'} 684 | dev: true 685 | 686 | /eslint-config-prettier@9.1.0(eslint@8.57.0): 687 | resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} 688 | hasBin: true 689 | peerDependencies: 690 | eslint: '>=7.0.0' 691 | dependencies: 692 | eslint: 8.57.0 693 | dev: true 694 | 695 | /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5): 696 | resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} 697 | engines: {node: ^14.18.0 || >=16.0.0} 698 | peerDependencies: 699 | '@types/eslint': '>=8.0.0' 700 | eslint: '>=8.0.0' 701 | eslint-config-prettier: '*' 702 | prettier: '>=3.0.0' 703 | peerDependenciesMeta: 704 | '@types/eslint': 705 | optional: true 706 | eslint-config-prettier: 707 | optional: true 708 | dependencies: 709 | eslint: 8.57.0 710 | eslint-config-prettier: 9.1.0(eslint@8.57.0) 711 | prettier: 3.2.5 712 | prettier-linter-helpers: 1.0.0 713 | synckit: 0.8.8 714 | dev: true 715 | 716 | /eslint-scope@7.2.2: 717 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 718 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 719 | dependencies: 720 | esrecurse: 4.3.0 721 | estraverse: 5.3.0 722 | dev: true 723 | 724 | /eslint-visitor-keys@3.4.3: 725 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 726 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 727 | dev: true 728 | 729 | /eslint@8.57.0: 730 | resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} 731 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 732 | hasBin: true 733 | dependencies: 734 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 735 | '@eslint-community/regexpp': 4.10.0 736 | '@eslint/eslintrc': 2.1.4 737 | '@eslint/js': 8.57.0 738 | '@humanwhocodes/config-array': 0.11.14 739 | '@humanwhocodes/module-importer': 1.0.1 740 | '@nodelib/fs.walk': 1.2.8 741 | '@ungap/structured-clone': 1.2.0 742 | ajv: 6.12.6 743 | chalk: 4.1.2 744 | cross-spawn: 7.0.3 745 | debug: 4.3.4 746 | doctrine: 3.0.0 747 | escape-string-regexp: 4.0.0 748 | eslint-scope: 7.2.2 749 | eslint-visitor-keys: 3.4.3 750 | espree: 9.6.1 751 | esquery: 1.5.0 752 | esutils: 2.0.3 753 | fast-deep-equal: 3.1.3 754 | file-entry-cache: 6.0.1 755 | find-up: 5.0.0 756 | glob-parent: 6.0.2 757 | globals: 13.24.0 758 | graphemer: 1.4.0 759 | ignore: 5.3.1 760 | imurmurhash: 0.1.4 761 | is-glob: 4.0.3 762 | is-path-inside: 3.0.3 763 | js-yaml: 4.1.0 764 | json-stable-stringify-without-jsonify: 1.0.1 765 | levn: 0.4.1 766 | lodash.merge: 4.6.2 767 | minimatch: 3.1.2 768 | natural-compare: 1.4.0 769 | optionator: 0.9.3 770 | strip-ansi: 6.0.1 771 | text-table: 0.2.0 772 | transitivePeerDependencies: 773 | - supports-color 774 | dev: true 775 | 776 | /espree@9.6.1: 777 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 778 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 779 | dependencies: 780 | acorn: 8.11.3 781 | acorn-jsx: 5.3.2(acorn@8.11.3) 782 | eslint-visitor-keys: 3.4.3 783 | dev: true 784 | 785 | /esquery@1.5.0: 786 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 787 | engines: {node: '>=0.10'} 788 | dependencies: 789 | estraverse: 5.3.0 790 | dev: true 791 | 792 | /esrecurse@4.3.0: 793 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 794 | engines: {node: '>=4.0'} 795 | dependencies: 796 | estraverse: 5.3.0 797 | dev: true 798 | 799 | /estraverse@5.3.0: 800 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 801 | engines: {node: '>=4.0'} 802 | dev: true 803 | 804 | /estree-walker@3.0.3: 805 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 806 | dependencies: 807 | '@types/estree': 1.0.5 808 | dev: true 809 | 810 | /esutils@2.0.3: 811 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 812 | engines: {node: '>=0.10.0'} 813 | dev: true 814 | 815 | /execa@8.0.1: 816 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} 817 | engines: {node: '>=16.17'} 818 | dependencies: 819 | cross-spawn: 7.0.3 820 | get-stream: 8.0.1 821 | human-signals: 5.0.0 822 | is-stream: 3.0.0 823 | merge-stream: 2.0.0 824 | npm-run-path: 5.3.0 825 | onetime: 6.0.0 826 | signal-exit: 4.1.0 827 | strip-final-newline: 3.0.0 828 | dev: true 829 | 830 | /fast-deep-equal@3.1.3: 831 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 832 | dev: true 833 | 834 | /fast-diff@1.3.0: 835 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 836 | dev: true 837 | 838 | /fast-json-stable-stringify@2.1.0: 839 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 840 | dev: true 841 | 842 | /fast-levenshtein@2.0.6: 843 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 844 | dev: true 845 | 846 | /fastq@1.17.1: 847 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 848 | dependencies: 849 | reusify: 1.0.4 850 | dev: true 851 | 852 | /file-entry-cache@6.0.1: 853 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 854 | engines: {node: ^10.12.0 || >=12.0.0} 855 | dependencies: 856 | flat-cache: 3.2.0 857 | dev: true 858 | 859 | /find-up@5.0.0: 860 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 861 | engines: {node: '>=10'} 862 | dependencies: 863 | locate-path: 6.0.0 864 | path-exists: 4.0.0 865 | dev: true 866 | 867 | /flat-cache@3.2.0: 868 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 869 | engines: {node: ^10.12.0 || >=12.0.0} 870 | dependencies: 871 | flatted: 3.3.1 872 | keyv: 4.5.4 873 | rimraf: 3.0.2 874 | dev: true 875 | 876 | /flatted@3.3.1: 877 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 878 | dev: true 879 | 880 | /fs.realpath@1.0.0: 881 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 882 | dev: true 883 | 884 | /fsevents@2.3.3: 885 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 886 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 887 | os: [darwin] 888 | requiresBuild: true 889 | dev: true 890 | optional: true 891 | 892 | /get-func-name@2.0.2: 893 | resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} 894 | dev: true 895 | 896 | /get-stream@8.0.1: 897 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} 898 | engines: {node: '>=16'} 899 | dev: true 900 | 901 | /glob-parent@6.0.2: 902 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 903 | engines: {node: '>=10.13.0'} 904 | dependencies: 905 | is-glob: 4.0.3 906 | dev: true 907 | 908 | /glob@7.2.3: 909 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 910 | dependencies: 911 | fs.realpath: 1.0.0 912 | inflight: 1.0.6 913 | inherits: 2.0.4 914 | minimatch: 3.1.2 915 | once: 1.4.0 916 | path-is-absolute: 1.0.1 917 | dev: true 918 | 919 | /globals@13.24.0: 920 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 921 | engines: {node: '>=8'} 922 | dependencies: 923 | type-fest: 0.20.2 924 | dev: true 925 | 926 | /graphemer@1.4.0: 927 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 928 | dev: true 929 | 930 | /has-flag@4.0.0: 931 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 932 | engines: {node: '>=8'} 933 | dev: true 934 | 935 | /human-signals@5.0.0: 936 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} 937 | engines: {node: '>=16.17.0'} 938 | dev: true 939 | 940 | /ignore@5.3.1: 941 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} 942 | engines: {node: '>= 4'} 943 | dev: true 944 | 945 | /import-fresh@3.3.0: 946 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 947 | engines: {node: '>=6'} 948 | dependencies: 949 | parent-module: 1.0.1 950 | resolve-from: 4.0.0 951 | dev: true 952 | 953 | /imurmurhash@0.1.4: 954 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 955 | engines: {node: '>=0.8.19'} 956 | dev: true 957 | 958 | /inflight@1.0.6: 959 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 960 | dependencies: 961 | once: 1.4.0 962 | wrappy: 1.0.2 963 | dev: true 964 | 965 | /inherits@2.0.4: 966 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 967 | dev: true 968 | 969 | /is-extglob@2.1.1: 970 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 971 | engines: {node: '>=0.10.0'} 972 | dev: true 973 | 974 | /is-glob@4.0.3: 975 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 976 | engines: {node: '>=0.10.0'} 977 | dependencies: 978 | is-extglob: 2.1.1 979 | dev: true 980 | 981 | /is-path-inside@3.0.3: 982 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 983 | engines: {node: '>=8'} 984 | dev: true 985 | 986 | /is-stream@3.0.0: 987 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 988 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 989 | dev: true 990 | 991 | /isexe@2.0.0: 992 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 993 | dev: true 994 | 995 | /js-tokens@8.0.3: 996 | resolution: {integrity: sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==} 997 | dev: true 998 | 999 | /js-yaml@4.1.0: 1000 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1001 | hasBin: true 1002 | dependencies: 1003 | argparse: 2.0.1 1004 | dev: true 1005 | 1006 | /json-buffer@3.0.1: 1007 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1008 | dev: true 1009 | 1010 | /json-schema-traverse@0.4.1: 1011 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1012 | dev: true 1013 | 1014 | /json-stable-stringify-without-jsonify@1.0.1: 1015 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1016 | dev: true 1017 | 1018 | /jsonc-parser@3.2.1: 1019 | resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} 1020 | dev: true 1021 | 1022 | /keyv@4.5.4: 1023 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1024 | dependencies: 1025 | json-buffer: 3.0.1 1026 | dev: true 1027 | 1028 | /levn@0.4.1: 1029 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1030 | engines: {node: '>= 0.8.0'} 1031 | dependencies: 1032 | prelude-ls: 1.2.1 1033 | type-check: 0.4.0 1034 | dev: true 1035 | 1036 | /local-pkg@0.5.0: 1037 | resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} 1038 | engines: {node: '>=14'} 1039 | dependencies: 1040 | mlly: 1.6.1 1041 | pkg-types: 1.0.3 1042 | dev: true 1043 | 1044 | /locate-path@6.0.0: 1045 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1046 | engines: {node: '>=10'} 1047 | dependencies: 1048 | p-locate: 5.0.0 1049 | dev: true 1050 | 1051 | /lodash.merge@4.6.2: 1052 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1053 | dev: true 1054 | 1055 | /loupe@2.3.7: 1056 | resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} 1057 | dependencies: 1058 | get-func-name: 2.0.2 1059 | dev: true 1060 | 1061 | /magic-string@0.30.7: 1062 | resolution: {integrity: sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==} 1063 | engines: {node: '>=12'} 1064 | dependencies: 1065 | '@jridgewell/sourcemap-codec': 1.4.15 1066 | dev: true 1067 | 1068 | /merge-stream@2.0.0: 1069 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1070 | dev: true 1071 | 1072 | /mimic-fn@4.0.0: 1073 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 1074 | engines: {node: '>=12'} 1075 | dev: true 1076 | 1077 | /minimatch@3.1.2: 1078 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1079 | dependencies: 1080 | brace-expansion: 1.1.11 1081 | dev: true 1082 | 1083 | /mlly@1.6.1: 1084 | resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} 1085 | dependencies: 1086 | acorn: 8.11.3 1087 | pathe: 1.1.2 1088 | pkg-types: 1.0.3 1089 | ufo: 1.4.0 1090 | dev: true 1091 | 1092 | /ms@2.1.2: 1093 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1094 | dev: true 1095 | 1096 | /nanoid@3.3.7: 1097 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1098 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1099 | hasBin: true 1100 | dev: true 1101 | 1102 | /natural-compare@1.4.0: 1103 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1104 | dev: true 1105 | 1106 | /npm-run-path@5.3.0: 1107 | resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} 1108 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1109 | dependencies: 1110 | path-key: 4.0.0 1111 | dev: true 1112 | 1113 | /once@1.4.0: 1114 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1115 | dependencies: 1116 | wrappy: 1.0.2 1117 | dev: true 1118 | 1119 | /onetime@6.0.0: 1120 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 1121 | engines: {node: '>=12'} 1122 | dependencies: 1123 | mimic-fn: 4.0.0 1124 | dev: true 1125 | 1126 | /optionator@0.9.3: 1127 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 1128 | engines: {node: '>= 0.8.0'} 1129 | dependencies: 1130 | '@aashutoshrathi/word-wrap': 1.2.6 1131 | deep-is: 0.1.4 1132 | fast-levenshtein: 2.0.6 1133 | levn: 0.4.1 1134 | prelude-ls: 1.2.1 1135 | type-check: 0.4.0 1136 | dev: true 1137 | 1138 | /p-limit@3.1.0: 1139 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1140 | engines: {node: '>=10'} 1141 | dependencies: 1142 | yocto-queue: 0.1.0 1143 | dev: true 1144 | 1145 | /p-limit@5.0.0: 1146 | resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} 1147 | engines: {node: '>=18'} 1148 | dependencies: 1149 | yocto-queue: 1.0.0 1150 | dev: true 1151 | 1152 | /p-locate@5.0.0: 1153 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1154 | engines: {node: '>=10'} 1155 | dependencies: 1156 | p-limit: 3.1.0 1157 | dev: true 1158 | 1159 | /parent-module@1.0.1: 1160 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1161 | engines: {node: '>=6'} 1162 | dependencies: 1163 | callsites: 3.1.0 1164 | dev: true 1165 | 1166 | /path-exists@4.0.0: 1167 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1168 | engines: {node: '>=8'} 1169 | dev: true 1170 | 1171 | /path-is-absolute@1.0.1: 1172 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1173 | engines: {node: '>=0.10.0'} 1174 | dev: true 1175 | 1176 | /path-key@3.1.1: 1177 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1178 | engines: {node: '>=8'} 1179 | dev: true 1180 | 1181 | /path-key@4.0.0: 1182 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 1183 | engines: {node: '>=12'} 1184 | dev: true 1185 | 1186 | /pathe@1.1.2: 1187 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} 1188 | dev: true 1189 | 1190 | /pathval@1.1.1: 1191 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 1192 | dev: true 1193 | 1194 | /picocolors@1.0.0: 1195 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1196 | dev: true 1197 | 1198 | /pkg-types@1.0.3: 1199 | resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} 1200 | dependencies: 1201 | jsonc-parser: 3.2.1 1202 | mlly: 1.6.1 1203 | pathe: 1.1.2 1204 | dev: true 1205 | 1206 | /postcss@8.4.35: 1207 | resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} 1208 | engines: {node: ^10 || ^12 || >=14} 1209 | dependencies: 1210 | nanoid: 3.3.7 1211 | picocolors: 1.0.0 1212 | source-map-js: 1.0.2 1213 | dev: true 1214 | 1215 | /prelude-ls@1.2.1: 1216 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1217 | engines: {node: '>= 0.8.0'} 1218 | dev: true 1219 | 1220 | /prettier-linter-helpers@1.0.0: 1221 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 1222 | engines: {node: '>=6.0.0'} 1223 | dependencies: 1224 | fast-diff: 1.3.0 1225 | dev: true 1226 | 1227 | /prettier@3.2.5: 1228 | resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} 1229 | engines: {node: '>=14'} 1230 | hasBin: true 1231 | dev: true 1232 | 1233 | /pretty-format@29.7.0: 1234 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 1235 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1236 | dependencies: 1237 | '@jest/schemas': 29.6.3 1238 | ansi-styles: 5.2.0 1239 | react-is: 18.2.0 1240 | dev: true 1241 | 1242 | /punycode@2.3.1: 1243 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1244 | engines: {node: '>=6'} 1245 | dev: true 1246 | 1247 | /queue-microtask@1.2.3: 1248 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1249 | dev: true 1250 | 1251 | /react-is@18.2.0: 1252 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} 1253 | dev: true 1254 | 1255 | /resolve-from@4.0.0: 1256 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1257 | engines: {node: '>=4'} 1258 | dev: true 1259 | 1260 | /reusify@1.0.4: 1261 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1262 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1263 | dev: true 1264 | 1265 | /rimraf@3.0.2: 1266 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1267 | hasBin: true 1268 | dependencies: 1269 | glob: 7.2.3 1270 | dev: true 1271 | 1272 | /rollup@4.12.0: 1273 | resolution: {integrity: sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==} 1274 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1275 | hasBin: true 1276 | dependencies: 1277 | '@types/estree': 1.0.5 1278 | optionalDependencies: 1279 | '@rollup/rollup-android-arm-eabi': 4.12.0 1280 | '@rollup/rollup-android-arm64': 4.12.0 1281 | '@rollup/rollup-darwin-arm64': 4.12.0 1282 | '@rollup/rollup-darwin-x64': 4.12.0 1283 | '@rollup/rollup-linux-arm-gnueabihf': 4.12.0 1284 | '@rollup/rollup-linux-arm64-gnu': 4.12.0 1285 | '@rollup/rollup-linux-arm64-musl': 4.12.0 1286 | '@rollup/rollup-linux-riscv64-gnu': 4.12.0 1287 | '@rollup/rollup-linux-x64-gnu': 4.12.0 1288 | '@rollup/rollup-linux-x64-musl': 4.12.0 1289 | '@rollup/rollup-win32-arm64-msvc': 4.12.0 1290 | '@rollup/rollup-win32-ia32-msvc': 4.12.0 1291 | '@rollup/rollup-win32-x64-msvc': 4.12.0 1292 | fsevents: 2.3.3 1293 | dev: true 1294 | 1295 | /run-parallel@1.2.0: 1296 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1297 | dependencies: 1298 | queue-microtask: 1.2.3 1299 | dev: true 1300 | 1301 | /shebang-command@2.0.0: 1302 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1303 | engines: {node: '>=8'} 1304 | dependencies: 1305 | shebang-regex: 3.0.0 1306 | dev: true 1307 | 1308 | /shebang-regex@3.0.0: 1309 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1310 | engines: {node: '>=8'} 1311 | dev: true 1312 | 1313 | /siginfo@2.0.0: 1314 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1315 | dev: true 1316 | 1317 | /signal-exit@4.1.0: 1318 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1319 | engines: {node: '>=14'} 1320 | dev: true 1321 | 1322 | /source-map-js@1.0.2: 1323 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1324 | engines: {node: '>=0.10.0'} 1325 | dev: true 1326 | 1327 | /stackback@0.0.2: 1328 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1329 | dev: true 1330 | 1331 | /std-env@3.7.0: 1332 | resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} 1333 | dev: true 1334 | 1335 | /strip-ansi@6.0.1: 1336 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1337 | engines: {node: '>=8'} 1338 | dependencies: 1339 | ansi-regex: 5.0.1 1340 | dev: true 1341 | 1342 | /strip-final-newline@3.0.0: 1343 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 1344 | engines: {node: '>=12'} 1345 | dev: true 1346 | 1347 | /strip-json-comments@3.1.1: 1348 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1349 | engines: {node: '>=8'} 1350 | dev: true 1351 | 1352 | /strip-literal@2.0.0: 1353 | resolution: {integrity: sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==} 1354 | dependencies: 1355 | js-tokens: 8.0.3 1356 | dev: true 1357 | 1358 | /supports-color@7.2.0: 1359 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1360 | engines: {node: '>=8'} 1361 | dependencies: 1362 | has-flag: 4.0.0 1363 | dev: true 1364 | 1365 | /synckit@0.8.8: 1366 | resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} 1367 | engines: {node: ^14.18.0 || >=16.0.0} 1368 | dependencies: 1369 | '@pkgr/core': 0.1.1 1370 | tslib: 2.6.2 1371 | dev: true 1372 | 1373 | /text-table@0.2.0: 1374 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1375 | dev: true 1376 | 1377 | /tinybench@2.6.0: 1378 | resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} 1379 | dev: true 1380 | 1381 | /tinypool@0.8.2: 1382 | resolution: {integrity: sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==} 1383 | engines: {node: '>=14.0.0'} 1384 | dev: true 1385 | 1386 | /tinyspy@2.2.1: 1387 | resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} 1388 | engines: {node: '>=14.0.0'} 1389 | dev: true 1390 | 1391 | /tslib@2.6.2: 1392 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 1393 | dev: true 1394 | 1395 | /type-check@0.4.0: 1396 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1397 | engines: {node: '>= 0.8.0'} 1398 | dependencies: 1399 | prelude-ls: 1.2.1 1400 | dev: true 1401 | 1402 | /type-detect@4.0.8: 1403 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 1404 | engines: {node: '>=4'} 1405 | dev: true 1406 | 1407 | /type-fest@0.20.2: 1408 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1409 | engines: {node: '>=10'} 1410 | dev: true 1411 | 1412 | /typescript@5.3.3: 1413 | resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} 1414 | engines: {node: '>=14.17'} 1415 | hasBin: true 1416 | dev: true 1417 | 1418 | /ufo@1.4.0: 1419 | resolution: {integrity: sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==} 1420 | dev: true 1421 | 1422 | /uri-js@4.4.1: 1423 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1424 | dependencies: 1425 | punycode: 2.3.1 1426 | dev: true 1427 | 1428 | /vite-node@1.3.1: 1429 | resolution: {integrity: sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==} 1430 | engines: {node: ^18.0.0 || >=20.0.0} 1431 | hasBin: true 1432 | dependencies: 1433 | cac: 6.7.14 1434 | debug: 4.3.4 1435 | pathe: 1.1.2 1436 | picocolors: 1.0.0 1437 | vite: 5.1.4 1438 | transitivePeerDependencies: 1439 | - '@types/node' 1440 | - less 1441 | - lightningcss 1442 | - sass 1443 | - stylus 1444 | - sugarss 1445 | - supports-color 1446 | - terser 1447 | dev: true 1448 | 1449 | /vite@5.1.4: 1450 | resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==} 1451 | engines: {node: ^18.0.0 || >=20.0.0} 1452 | hasBin: true 1453 | peerDependencies: 1454 | '@types/node': ^18.0.0 || >=20.0.0 1455 | less: '*' 1456 | lightningcss: ^1.21.0 1457 | sass: '*' 1458 | stylus: '*' 1459 | sugarss: '*' 1460 | terser: ^5.4.0 1461 | peerDependenciesMeta: 1462 | '@types/node': 1463 | optional: true 1464 | less: 1465 | optional: true 1466 | lightningcss: 1467 | optional: true 1468 | sass: 1469 | optional: true 1470 | stylus: 1471 | optional: true 1472 | sugarss: 1473 | optional: true 1474 | terser: 1475 | optional: true 1476 | dependencies: 1477 | esbuild: 0.19.12 1478 | postcss: 8.4.35 1479 | rollup: 4.12.0 1480 | optionalDependencies: 1481 | fsevents: 2.3.3 1482 | dev: true 1483 | 1484 | /vitest@1.3.1: 1485 | resolution: {integrity: sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==} 1486 | engines: {node: ^18.0.0 || >=20.0.0} 1487 | hasBin: true 1488 | peerDependencies: 1489 | '@edge-runtime/vm': '*' 1490 | '@types/node': ^18.0.0 || >=20.0.0 1491 | '@vitest/browser': 1.3.1 1492 | '@vitest/ui': 1.3.1 1493 | happy-dom: '*' 1494 | jsdom: '*' 1495 | peerDependenciesMeta: 1496 | '@edge-runtime/vm': 1497 | optional: true 1498 | '@types/node': 1499 | optional: true 1500 | '@vitest/browser': 1501 | optional: true 1502 | '@vitest/ui': 1503 | optional: true 1504 | happy-dom: 1505 | optional: true 1506 | jsdom: 1507 | optional: true 1508 | dependencies: 1509 | '@vitest/expect': 1.3.1 1510 | '@vitest/runner': 1.3.1 1511 | '@vitest/snapshot': 1.3.1 1512 | '@vitest/spy': 1.3.1 1513 | '@vitest/utils': 1.3.1 1514 | acorn-walk: 8.3.2 1515 | chai: 4.4.1 1516 | debug: 4.3.4 1517 | execa: 8.0.1 1518 | local-pkg: 0.5.0 1519 | magic-string: 0.30.7 1520 | pathe: 1.1.2 1521 | picocolors: 1.0.0 1522 | std-env: 3.7.0 1523 | strip-literal: 2.0.0 1524 | tinybench: 2.6.0 1525 | tinypool: 0.8.2 1526 | vite: 5.1.4 1527 | vite-node: 1.3.1 1528 | why-is-node-running: 2.2.2 1529 | transitivePeerDependencies: 1530 | - less 1531 | - lightningcss 1532 | - sass 1533 | - stylus 1534 | - sugarss 1535 | - supports-color 1536 | - terser 1537 | dev: true 1538 | 1539 | /which@2.0.2: 1540 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1541 | engines: {node: '>= 8'} 1542 | hasBin: true 1543 | dependencies: 1544 | isexe: 2.0.0 1545 | dev: true 1546 | 1547 | /why-is-node-running@2.2.2: 1548 | resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} 1549 | engines: {node: '>=8'} 1550 | hasBin: true 1551 | dependencies: 1552 | siginfo: 2.0.0 1553 | stackback: 0.0.2 1554 | dev: true 1555 | 1556 | /wrappy@1.0.2: 1557 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1558 | dev: true 1559 | 1560 | /yocto-queue@0.1.0: 1561 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1562 | engines: {node: '>=10'} 1563 | dev: true 1564 | 1565 | /yocto-queue@1.0.0: 1566 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} 1567 | engines: {node: '>=12.20'} 1568 | dev: true 1569 | -------------------------------------------------------------------------------- /src/ai.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * The computer "AI" to find a valid move against the player 3 | */ 4 | import { GenericBoard, UserInput } from "./board"; 5 | 6 | // null === no valid moves 7 | type FindValidRowMove< 8 | RowT extends GenericBoard[number], 9 | // Do not allow numbers larger than 3, as a row can only have an index of 2 10 | IdxTArr extends never[] = [], 11 | > = IdxTArr["length"] extends 3 12 | ? null 13 | : RowT[IdxTArr["length"]] extends UserInput 14 | ? IdxTArr["length"] 15 | : FindValidRowMove; 16 | 17 | export type FindValidBoardMove< 18 | BoardT extends GenericBoard, 19 | // Do not allow numbers larger than 3, as a row can only have an index of 2 20 | IdxTArr extends never[] = [], 21 | > = IdxTArr["length"] extends 3 22 | ? null 23 | : FindValidRowMove extends infer ValidMove 24 | ? ValidMove extends null 25 | ? FindValidBoardMove 26 | : ValidMove extends number 27 | ? BoardT[IdxTArr["length"]][ValidMove] 28 | : never 29 | : never; 30 | -------------------------------------------------------------------------------- /src/board-val-replacement.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Given a board, allow an immutable replacement of a single value 3 | */ 4 | import { 5 | GenericBoard, 6 | GetBoardAllowedVals, 7 | GetRowAllowedVals, 8 | XOrO, 9 | } from "./board"; 10 | import { ReplaceIdxWith } from "./utils"; 11 | 12 | type ReplaceBoardRowWith< 13 | RowT extends GenericBoard[number], 14 | ValT extends GetRowAllowedVals, 15 | XorOT extends XOrO, 16 | // Do not allow numbers larger than 3, as a column can only have an index of 2 17 | IdxTArr extends never[] = [], 18 | > = IdxTArr["length"] extends 3 19 | ? RowT 20 | : ValT extends RowT[IdxTArr["length"]] 21 | ? ReplaceIdxWith 22 | : ReplaceBoardRowWith; 23 | 24 | export type ReplaceBoardValWith< 25 | BoardT extends GenericBoard, 26 | ValT extends GetBoardAllowedVals, 27 | XorOT extends XOrO, 28 | // Do not allow numbers larger than 3, as a row can only have an index of 2 29 | IdxTArr extends never[] = [], 30 | > = IdxTArr["length"] extends 3 31 | ? BoardT 32 | : BoardT[IdxTArr["length"]] extends GenericBoard[number] 33 | ? ReplaceIdxWith< 34 | BoardT, 35 | IdxTArr["length"], 36 | ReplaceBoardRowWith 37 | > extends infer NewBoard 38 | ? NewBoard extends GenericBoard 39 | ? ReplaceBoardValWith 40 | : never 41 | : never 42 | : never; 43 | -------------------------------------------------------------------------------- /src/board.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * All generic types that pertain to user input and board construction 3 | */ 4 | import { ArrToStr } from "./utils"; 5 | 6 | export type UserInput = `${0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9}`; 7 | export type XOrO = "X" | "O"; 8 | 9 | export type GenericBoard = [ 10 | [XOrO | "1", XOrO | "2", XOrO | "3"], 11 | [XOrO | "4", XOrO | "5", XOrO | "6"], 12 | [XOrO | "7", XOrO | "8", XOrO | "9"], 13 | ]; 14 | 15 | export type BoardToString< 16 | ArrArrT extends string[][], 17 | AccT extends string = "", 18 | > = ArrArrT extends [infer ArrT, ...infer RestT] 19 | ? ArrT extends string[] 20 | ? RestT extends string[][] 21 | ? BoardToString> 22 | : `${AccT}\n` 23 | : `${AccT}\n` 24 | : `${AccT}\n`; 25 | 26 | export type GetBoardAllowedVals = T[number][number]; 27 | export type GetRowAllowedVals = T[number]; 28 | export type AllowedGenericPromptVals = GetBoardAllowedVals; 29 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export { GenericBoard } from "./board"; 2 | export { Prompt } from "./prompt"; 3 | -------------------------------------------------------------------------------- /src/prompt.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * The prompt that allows the user to play the game 3 | */ 4 | import { FindValidBoardMove } from "./ai"; 5 | import { 6 | AllowedGenericPromptVals, 7 | GenericBoard, 8 | GetBoardAllowedVals, 9 | } from "./board"; 10 | import { ReplaceBoardValWith } from "./board-val-replacement"; 11 | import { CheckWin } from "./win-conditions"; 12 | 13 | export type Prompt< 14 | BoardT extends GenericBoard, 15 | ValT extends AllowedGenericPromptVals, 16 | > = 17 | ValT extends GetBoardAllowedVals 18 | ? ReplaceBoardValWith extends infer UserPlayedBoard 19 | ? UserPlayedBoard extends GenericBoard 20 | ? FindValidBoardMove extends infer MoveComputerPlays 21 | ? MoveComputerPlays extends GetBoardAllowedVals 22 | ? ReplaceBoardValWith< 23 | UserPlayedBoard, 24 | MoveComputerPlays, 25 | "O" 26 | > extends infer ComputerPlayedBoard 27 | ? ComputerPlayedBoard extends GenericBoard 28 | ? true extends CheckWin 29 | ? "Player wins!" 30 | : true extends CheckWin 31 | ? "Computer wins!" 32 | : ComputerPlayedBoard 33 | : never 34 | : never 35 | : // Game is over: Calculate winner 36 | true extends CheckWin 37 | ? "Player wins!" 38 | : true extends CheckWin 39 | ? "Computer wins!" 40 | : "Tie!" 41 | : never 42 | : never 43 | : never 44 | : "You must input a valid number"; 45 | -------------------------------------------------------------------------------- /src/utils.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * All utilities that don't relate to this specific application 3 | */ 4 | export type Replace< 5 | StrT extends string, 6 | FromT extends string, 7 | ToT extends string, 8 | Acc extends string = "", 9 | > = StrT extends `${infer CharOneT}${infer RestOfStrT}` 10 | ? CharOneT extends FromT 11 | ? Replace 12 | : Replace 13 | : Acc; 14 | 15 | export type ArrToStr< 16 | ArrT extends string[], 17 | AccT extends string = "", 18 | > = ArrT extends [infer ItemT, ...infer RestT] 19 | ? ItemT extends string 20 | ? RestT extends string[] 21 | ? ArrToStr 22 | : AccT 23 | : AccT 24 | : AccT; 25 | 26 | type ReplaceIdxWith< 27 | ArrT extends unknown[], 28 | Idx extends number, 29 | Val, 30 | Acc extends ArrT[number][] = [], 31 | > = ArrT extends [infer ItemT, ...infer RestT] 32 | ? Acc["length"] extends Idx 33 | ? [...Acc, Val, ...RestT] 34 | : ReplaceIdxWith 35 | : Acc; 36 | -------------------------------------------------------------------------------- /src/win-conditions.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * All calculations about win conditions 3 | */ 4 | import { BoardToString, GenericBoard, UserInput, XOrO } from "./board"; 5 | import { Replace } from "./utils"; 6 | 7 | type BoardWins = 8 | | ` 9 | *** 10 | ||| 11 | ||| 12 | ` 13 | | ` 14 | ||| 15 | *** 16 | ||| 17 | ` 18 | | ` 19 | ||| 20 | ||| 21 | *** 22 | ` 23 | | ` 24 | *|| 25 | *|| 26 | *|| 27 | ` 28 | | ` 29 | |*| 30 | |*| 31 | |*| 32 | ` 33 | | ` 34 | ||* 35 | ||* 36 | ||* 37 | ` 38 | | ` 39 | *|| 40 | |*| 41 | ||* 42 | ` 43 | | ` 44 | ||* 45 | |*| 46 | *|| 47 | `; 48 | 49 | /** 50 | * `false` means no win 51 | * `true` means win 52 | */ 53 | type InnerCheckWin< 54 | BoardT extends GenericBoard, 55 | PlayerValT extends XOrO, 56 | ComputerValT extends XOrO, 57 | > = 58 | Replace< 59 | BoardToString, 60 | ComputerValT | UserInput, 61 | `${string}` 62 | > extends Replace, "|", `${string}`> 63 | ? true 64 | : false; 65 | 66 | export type CheckWin< 67 | BoardT extends GenericBoard, 68 | PlayerValT extends XOrO, 69 | > = PlayerValT extends "O" 70 | ? "X" extends infer ComputerValT 71 | ? ComputerValT extends XOrO 72 | ? InnerCheckWin 73 | : never 74 | : never 75 | : PlayerValT extends "X" 76 | ? "O" extends infer ComputerValT 77 | ? ComputerValT extends XOrO 78 | ? InnerCheckWin 79 | : never 80 | : never 81 | : never; 82 | -------------------------------------------------------------------------------- /tests/ai.spec.ts: -------------------------------------------------------------------------------- 1 | import { test, describe, assertType } from "vitest"; 2 | import { GenericBoard } from "../src/board"; 3 | import { FindValidBoardMove } from "../src/ai"; 4 | 5 | describe("FindValidBoardMove", () => { 6 | test("Finds value after user's play", () => { 7 | const egPlayedBoard = [ 8 | ["X", "O", "3"], 9 | ["4", "5", "6"], 10 | ["7", "8", "9"], 11 | ] satisfies GenericBoard; 12 | 13 | assertType>("3"); 14 | }); 15 | 16 | test('Find a "complex" move', () => { 17 | const egMorePlayedBoard = [ 18 | ["X", "O", "X"], 19 | ["O", "X", "6"], 20 | ["7", "8", "9"], 21 | ] satisfies GenericBoard; 22 | 23 | assertType>("6"); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /tests/board-val-replacement.spec.ts: -------------------------------------------------------------------------------- 1 | import { test, describe, assertType } from "vitest"; 2 | import { ReplaceBoardValWith } from "../src/board-val-replacement"; 3 | import { BoardToString, GenericBoard } from "../src/board"; 4 | 5 | describe("ReplaceBoardValWith", () => { 6 | test("Replaces the first row val", () => { 7 | const egBoard = [ 8 | ["1", "2", "3"], 9 | ["4", "5", "6"], 10 | ["7", "8", "9"], 11 | ] satisfies GenericBoard; 12 | 13 | assertType>>( 14 | "\n1X3\n456\n789\n", 15 | ); 16 | }); 17 | 18 | test("Replaces a val in the last row", () => { 19 | const egBoard = [ 20 | ["1", "2", "3"], 21 | ["4", "5", "6"], 22 | ["7", "8", "9"], 23 | ] satisfies GenericBoard; 24 | 25 | assertType>>( 26 | "\n123\n456\nX89\n", 27 | ); 28 | }); 29 | }); 30 | -------------------------------------------------------------------------------- /tests/board.spec.ts: -------------------------------------------------------------------------------- 1 | import { test, describe, assertType } from "vitest"; 2 | import { BoardToString, GenericBoard } from "../src/board"; 3 | 4 | describe("BoardToString", () => { 5 | test("Stringifies a basic board", () => { 6 | const egBoard = [ 7 | ["1", "2", "3"], 8 | ["4", "5", "6"], 9 | ["7", "8", "9"], 10 | ] satisfies GenericBoard; 11 | 12 | assertType>("\n123\n456\n789\n"); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /tests/prompt.spec.ts: -------------------------------------------------------------------------------- 1 | import { test, describe, assertType } from "vitest"; 2 | import { GenericBoard } from "../src/board"; 3 | import { Prompt } from "../src"; 4 | 5 | describe("Prompt", () => { 6 | test("Shows correct winner on win", () => { 7 | const computerWinBoard = [ 8 | ["1", "2", "3"], 9 | ["O", "O", "O"], 10 | ["7", "O", "X"], 11 | ] satisfies GenericBoard; 12 | 13 | type ComputerWinBoard = typeof computerWinBoard; 14 | 15 | assertType>("Computer wins!"); 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /tests/utils.spec.ts: -------------------------------------------------------------------------------- 1 | import { test, describe, assertType } from "vitest"; 2 | import { ArrToStr, Replace, ReplaceIdxWith } from "../src/utils"; 3 | 4 | describe("Replace", () => { 5 | test("Replacing a single character works", () => { 6 | assertType>("ASDC"); 7 | }); 8 | }); 9 | 10 | describe("ArrToStr", () => { 11 | test("Joins an array of strings", () => { 12 | assertType>("123"); 13 | }); 14 | }); 15 | 16 | describe("ReplaceIdxWith", () => { 17 | test("Replaces first index", () => { 18 | assertType>([9, 2, 3]); 19 | }); 20 | 21 | test("Replaces last index", () => { 22 | assertType>([1, 2, 9]); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /tests/win-conditions.spec.ts: -------------------------------------------------------------------------------- 1 | import { test, describe, assertType } from "vitest"; 2 | import { GenericBoard } from "../src/board"; 3 | import { CheckWin } from "../src/win-conditions"; 4 | 5 | describe("CheckWin", () => { 6 | test("Checks win condition properly", () => { 7 | const computerWinBoard = [ 8 | ["1", "2", "3"], 9 | ["O", "O", "O"], 10 | ["7", "O", "X"], 11 | ] satisfies GenericBoard; 12 | 13 | type ComputerWinBoard = typeof computerWinBoard; 14 | 15 | assertType>(false); 16 | assertType>(true); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "module": "ESNext", 5 | "moduleResolution": "Node", 6 | "noEmit": true, 7 | "strict": true, 8 | } 9 | } --------------------------------------------------------------------------------