WIP: A simple cli for daily tangled use cases and AI integration. This is for my personal use right now, but happy if others get mileage from it! :)

Phase 1: Scaffolding

markbennett.ca 0480fec6 9d00fc97

verified
+2483 -6
+8
.claude/settings.json
··· 1 + { 2 + "permissions": { 3 + "allow": [ 4 + "Bash(npm run test:*)", 5 + "Bash(npm run build:*)" 6 + ] 7 + } 8 + }
.gitginore src/utils/.gitkeep
+32
.gitignore
··· 1 + # Dependencies 2 + node_modules/ 3 + 4 + # Build output 5 + dist/ 6 + *.tsbuildinfo 7 + 8 + # Test coverage 9 + coverage/ 10 + 11 + # Environment files 12 + .env 13 + .env.local 14 + .env.*.local 15 + 16 + # IDE 17 + .vscode/ 18 + .idea/ 19 + *.swp 20 + *.swo 21 + *~ 22 + 23 + # OS 24 + .DS_Store 25 + Thumbs.db 26 + 27 + # Logs 28 + *.log 29 + npm-debug.log* 30 + pnpm-debug.log* 31 + yarn-debug.log* 32 + yarn-error.log*
+21
LICENSE
··· 1 + MIT License 2 + 3 + Copyright (c) 2026 Mark Bennett 4 + 5 + Permission is hereby granted, free of charge, to any person obtaining a copy 6 + of this software and associated documentation files (the "Software"), to deal 7 + in the Software without restriction, including without limitation the rights 8 + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 + copies of the Software, and to permit persons to whom the Software is 10 + furnished to do so, subject to the following conditions: 11 + 12 + The above copyright notice and this permission notice shall be included in all 13 + copies or substantial portions of the Software. 14 + 15 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 + SOFTWARE.
+69
README.md
··· 177 177 ## 10. Task Management 178 178 179 179 We're bootstrapping task tracking with TODO.md, but will migrate all tasks into Tangled issues and dog food the product as soon as we have basic issue creation and listing working. 180 + 181 + ## 11. Development 182 + 183 + ### Prerequisites 184 + 185 + - Node.js 22.0.0 or higher (latest LTS) 186 + - npm (comes with Node.js) 187 + 188 + ### Installation 189 + 190 + Clone the repository and install dependencies: 191 + 192 + ```bash 193 + npm install 194 + ``` 195 + 196 + ### Available Scripts 197 + 198 + - `npm run dev` - Run the CLI in development mode (with hot reload via tsx) 199 + - `npm run build` - Build TypeScript to JavaScript (output to `dist/`) 200 + - `npm test` - Run tests once 201 + - `npm run test:watch` - Run tests in watch mode 202 + - `npm run test:coverage` - Run tests with coverage report 203 + - `npm run lint` - Check code with Biome linter 204 + - `npm run lint:fix` - Auto-fix linting issues 205 + - `npm run format` - Format code with Biome 206 + - `npm run typecheck` - Type check without building 207 + 208 + ### Running Locally 209 + 210 + ```bash 211 + # Run the CLI in development mode 212 + npm run dev -- --version 213 + npm run dev -- --help 214 + 215 + # Build and run the production version 216 + npm run build 217 + node dist/index.js --version 218 + 219 + # Install globally for local testing 220 + npm link 221 + tangled --version 222 + tangled --help 223 + npm unlink -g tangled-cli # Unlink when done 224 + ``` 225 + 226 + ### Project Structure 227 + 228 + ``` 229 + tangled-cli/ 230 + ├── src/ 231 + │ ├── index.ts # Main CLI entry point 232 + │ ├── commands/ # Command implementations 233 + │ ├── lib/ # Core business logic 234 + │ └── utils/ # Helper functions 235 + ├── tests/ # Test files 236 + ├── dist/ # Build output (gitignored) 237 + └── package.json # Package configuration 238 + ``` 239 + 240 + ### Technology Stack 241 + 242 + - **TypeScript 5.7.2** - Latest stable with strict mode enabled 243 + - **Node.js 22+** - Latest LTS target 244 + - **ES2023** - Latest stable ECMAScript target 245 + - **Biome** - Fast linter and formatter (replaces ESLint + Prettier) 246 + - **Vitest** - Fast unit test framework 247 + - **Commander.js** - CLI framework 248 + - **tsx** - Fast TypeScript execution for development
+6 -6
TODO.md
··· 4 4 5 5 ## 1. Project Setup & Core Structure (Commander.js) 6 6 7 - - [ ] Initialize Node.js project. 8 - - [ ] Install `commander` for CLI routing. 9 - - [ ] Implement basic CLI command structure (e.g., `tangled --version`, `tangled --help`). 10 - - [ ] Set up TypeScript configuration. 11 - - [ ] Configure linting and formatting (ESLint, Prettier). 12 - - [ ] Configure vitest for testing. 7 + - [x] Initialize Node.js project. 8 + - [x] Install `commander` for CLI routing. 9 + - [x] Implement basic CLI command structure (e.g., `tangled --version`, `tangled --help`). 10 + - [x] Set up TypeScript configuration. 11 + - [x] Configure linting and formatting (Biome). 12 + - [x] Configure vitest for testing. 13 13 14 14 ## 2. Authentication (Auth) 15 15
+41
biome.json
··· 1 + { 2 + "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", 3 + "vcs": { 4 + "enabled": true, 5 + "clientKind": "git", 6 + "useIgnoreFile": true 7 + }, 8 + "files": { 9 + "ignoreUnknown": false, 10 + "ignore": ["node_modules", "dist", "coverage"] 11 + }, 12 + "formatter": { 13 + "enabled": true, 14 + "indentStyle": "space", 15 + "indentWidth": 2, 16 + "lineWidth": 100 17 + }, 18 + "linter": { 19 + "enabled": true, 20 + "rules": { 21 + "recommended": true, 22 + "suspicious": { 23 + "noExplicitAny": "warn" 24 + }, 25 + "style": { 26 + "useConst": "error", 27 + "useTemplate": "warn" 28 + } 29 + } 30 + }, 31 + "javascript": { 32 + "formatter": { 33 + "quoteStyle": "single", 34 + "trailingCommas": "es5", 35 + "semicolons": "always" 36 + } 37 + }, 38 + "organizeImports": { 39 + "enabled": true 40 + } 41 + }
+2166
package-lock.json
··· 1 + { 2 + "name": "tangled-cli", 3 + "version": "0.0.1", 4 + "lockfileVersion": 3, 5 + "requires": true, 6 + "packages": { 7 + "": { 8 + "name": "tangled-cli", 9 + "version": "0.0.1", 10 + "license": "ISC", 11 + "dependencies": { 12 + "commander": "^12.1.0" 13 + }, 14 + "bin": { 15 + "tangled": "dist/index.js" 16 + }, 17 + "devDependencies": { 18 + "@biomejs/biome": "^1.9.4", 19 + "@types/node": "^22.10.2", 20 + "tsx": "^4.19.2", 21 + "typescript": "^5.7.2", 22 + "vitest": "^2.1.8" 23 + }, 24 + "engines": { 25 + "node": ">=22.0.0" 26 + } 27 + }, 28 + "node_modules/@biomejs/biome": { 29 + "version": "1.9.4", 30 + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz", 31 + "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==", 32 + "dev": true, 33 + "hasInstallScript": true, 34 + "license": "MIT OR Apache-2.0", 35 + "bin": { 36 + "biome": "bin/biome" 37 + }, 38 + "engines": { 39 + "node": ">=14.21.3" 40 + }, 41 + "funding": { 42 + "type": "opencollective", 43 + "url": "https://opencollective.com/biome" 44 + }, 45 + "optionalDependencies": { 46 + "@biomejs/cli-darwin-arm64": "1.9.4", 47 + "@biomejs/cli-darwin-x64": "1.9.4", 48 + "@biomejs/cli-linux-arm64": "1.9.4", 49 + "@biomejs/cli-linux-arm64-musl": "1.9.4", 50 + "@biomejs/cli-linux-x64": "1.9.4", 51 + "@biomejs/cli-linux-x64-musl": "1.9.4", 52 + "@biomejs/cli-win32-arm64": "1.9.4", 53 + "@biomejs/cli-win32-x64": "1.9.4" 54 + } 55 + }, 56 + "node_modules/@biomejs/cli-darwin-arm64": { 57 + "version": "1.9.4", 58 + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz", 59 + "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==", 60 + "cpu": [ 61 + "arm64" 62 + ], 63 + "dev": true, 64 + "license": "MIT OR Apache-2.0", 65 + "optional": true, 66 + "os": [ 67 + "darwin" 68 + ], 69 + "engines": { 70 + "node": ">=14.21.3" 71 + } 72 + }, 73 + "node_modules/@biomejs/cli-darwin-x64": { 74 + "version": "1.9.4", 75 + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", 76 + "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==", 77 + "cpu": [ 78 + "x64" 79 + ], 80 + "dev": true, 81 + "license": "MIT OR Apache-2.0", 82 + "optional": true, 83 + "os": [ 84 + "darwin" 85 + ], 86 + "engines": { 87 + "node": ">=14.21.3" 88 + } 89 + }, 90 + "node_modules/@biomejs/cli-linux-arm64": { 91 + "version": "1.9.4", 92 + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", 93 + "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==", 94 + "cpu": [ 95 + "arm64" 96 + ], 97 + "dev": true, 98 + "license": "MIT OR Apache-2.0", 99 + "optional": true, 100 + "os": [ 101 + "linux" 102 + ], 103 + "engines": { 104 + "node": ">=14.21.3" 105 + } 106 + }, 107 + "node_modules/@biomejs/cli-linux-arm64-musl": { 108 + "version": "1.9.4", 109 + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", 110 + "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==", 111 + "cpu": [ 112 + "arm64" 113 + ], 114 + "dev": true, 115 + "license": "MIT OR Apache-2.0", 116 + "optional": true, 117 + "os": [ 118 + "linux" 119 + ], 120 + "engines": { 121 + "node": ">=14.21.3" 122 + } 123 + }, 124 + "node_modules/@biomejs/cli-linux-x64": { 125 + "version": "1.9.4", 126 + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", 127 + "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==", 128 + "cpu": [ 129 + "x64" 130 + ], 131 + "dev": true, 132 + "license": "MIT OR Apache-2.0", 133 + "optional": true, 134 + "os": [ 135 + "linux" 136 + ], 137 + "engines": { 138 + "node": ">=14.21.3" 139 + } 140 + }, 141 + "node_modules/@biomejs/cli-linux-x64-musl": { 142 + "version": "1.9.4", 143 + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", 144 + "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==", 145 + "cpu": [ 146 + "x64" 147 + ], 148 + "dev": true, 149 + "license": "MIT OR Apache-2.0", 150 + "optional": true, 151 + "os": [ 152 + "linux" 153 + ], 154 + "engines": { 155 + "node": ">=14.21.3" 156 + } 157 + }, 158 + "node_modules/@biomejs/cli-win32-arm64": { 159 + "version": "1.9.4", 160 + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", 161 + "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==", 162 + "cpu": [ 163 + "arm64" 164 + ], 165 + "dev": true, 166 + "license": "MIT OR Apache-2.0", 167 + "optional": true, 168 + "os": [ 169 + "win32" 170 + ], 171 + "engines": { 172 + "node": ">=14.21.3" 173 + } 174 + }, 175 + "node_modules/@biomejs/cli-win32-x64": { 176 + "version": "1.9.4", 177 + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", 178 + "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==", 179 + "cpu": [ 180 + "x64" 181 + ], 182 + "dev": true, 183 + "license": "MIT OR Apache-2.0", 184 + "optional": true, 185 + "os": [ 186 + "win32" 187 + ], 188 + "engines": { 189 + "node": ">=14.21.3" 190 + } 191 + }, 192 + "node_modules/@esbuild/aix-ppc64": { 193 + "version": "0.27.3", 194 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", 195 + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", 196 + "cpu": [ 197 + "ppc64" 198 + ], 199 + "dev": true, 200 + "license": "MIT", 201 + "optional": true, 202 + "os": [ 203 + "aix" 204 + ], 205 + "engines": { 206 + "node": ">=18" 207 + } 208 + }, 209 + "node_modules/@esbuild/android-arm": { 210 + "version": "0.27.3", 211 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", 212 + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", 213 + "cpu": [ 214 + "arm" 215 + ], 216 + "dev": true, 217 + "license": "MIT", 218 + "optional": true, 219 + "os": [ 220 + "android" 221 + ], 222 + "engines": { 223 + "node": ">=18" 224 + } 225 + }, 226 + "node_modules/@esbuild/android-arm64": { 227 + "version": "0.27.3", 228 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", 229 + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", 230 + "cpu": [ 231 + "arm64" 232 + ], 233 + "dev": true, 234 + "license": "MIT", 235 + "optional": true, 236 + "os": [ 237 + "android" 238 + ], 239 + "engines": { 240 + "node": ">=18" 241 + } 242 + }, 243 + "node_modules/@esbuild/android-x64": { 244 + "version": "0.27.3", 245 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", 246 + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", 247 + "cpu": [ 248 + "x64" 249 + ], 250 + "dev": true, 251 + "license": "MIT", 252 + "optional": true, 253 + "os": [ 254 + "android" 255 + ], 256 + "engines": { 257 + "node": ">=18" 258 + } 259 + }, 260 + "node_modules/@esbuild/darwin-arm64": { 261 + "version": "0.27.3", 262 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", 263 + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", 264 + "cpu": [ 265 + "arm64" 266 + ], 267 + "dev": true, 268 + "license": "MIT", 269 + "optional": true, 270 + "os": [ 271 + "darwin" 272 + ], 273 + "engines": { 274 + "node": ">=18" 275 + } 276 + }, 277 + "node_modules/@esbuild/darwin-x64": { 278 + "version": "0.27.3", 279 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", 280 + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", 281 + "cpu": [ 282 + "x64" 283 + ], 284 + "dev": true, 285 + "license": "MIT", 286 + "optional": true, 287 + "os": [ 288 + "darwin" 289 + ], 290 + "engines": { 291 + "node": ">=18" 292 + } 293 + }, 294 + "node_modules/@esbuild/freebsd-arm64": { 295 + "version": "0.27.3", 296 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", 297 + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", 298 + "cpu": [ 299 + "arm64" 300 + ], 301 + "dev": true, 302 + "license": "MIT", 303 + "optional": true, 304 + "os": [ 305 + "freebsd" 306 + ], 307 + "engines": { 308 + "node": ">=18" 309 + } 310 + }, 311 + "node_modules/@esbuild/freebsd-x64": { 312 + "version": "0.27.3", 313 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", 314 + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", 315 + "cpu": [ 316 + "x64" 317 + ], 318 + "dev": true, 319 + "license": "MIT", 320 + "optional": true, 321 + "os": [ 322 + "freebsd" 323 + ], 324 + "engines": { 325 + "node": ">=18" 326 + } 327 + }, 328 + "node_modules/@esbuild/linux-arm": { 329 + "version": "0.27.3", 330 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", 331 + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", 332 + "cpu": [ 333 + "arm" 334 + ], 335 + "dev": true, 336 + "license": "MIT", 337 + "optional": true, 338 + "os": [ 339 + "linux" 340 + ], 341 + "engines": { 342 + "node": ">=18" 343 + } 344 + }, 345 + "node_modules/@esbuild/linux-arm64": { 346 + "version": "0.27.3", 347 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", 348 + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", 349 + "cpu": [ 350 + "arm64" 351 + ], 352 + "dev": true, 353 + "license": "MIT", 354 + "optional": true, 355 + "os": [ 356 + "linux" 357 + ], 358 + "engines": { 359 + "node": ">=18" 360 + } 361 + }, 362 + "node_modules/@esbuild/linux-ia32": { 363 + "version": "0.27.3", 364 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", 365 + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", 366 + "cpu": [ 367 + "ia32" 368 + ], 369 + "dev": true, 370 + "license": "MIT", 371 + "optional": true, 372 + "os": [ 373 + "linux" 374 + ], 375 + "engines": { 376 + "node": ">=18" 377 + } 378 + }, 379 + "node_modules/@esbuild/linux-loong64": { 380 + "version": "0.27.3", 381 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", 382 + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", 383 + "cpu": [ 384 + "loong64" 385 + ], 386 + "dev": true, 387 + "license": "MIT", 388 + "optional": true, 389 + "os": [ 390 + "linux" 391 + ], 392 + "engines": { 393 + "node": ">=18" 394 + } 395 + }, 396 + "node_modules/@esbuild/linux-mips64el": { 397 + "version": "0.27.3", 398 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", 399 + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", 400 + "cpu": [ 401 + "mips64el" 402 + ], 403 + "dev": true, 404 + "license": "MIT", 405 + "optional": true, 406 + "os": [ 407 + "linux" 408 + ], 409 + "engines": { 410 + "node": ">=18" 411 + } 412 + }, 413 + "node_modules/@esbuild/linux-ppc64": { 414 + "version": "0.27.3", 415 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", 416 + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", 417 + "cpu": [ 418 + "ppc64" 419 + ], 420 + "dev": true, 421 + "license": "MIT", 422 + "optional": true, 423 + "os": [ 424 + "linux" 425 + ], 426 + "engines": { 427 + "node": ">=18" 428 + } 429 + }, 430 + "node_modules/@esbuild/linux-riscv64": { 431 + "version": "0.27.3", 432 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", 433 + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", 434 + "cpu": [ 435 + "riscv64" 436 + ], 437 + "dev": true, 438 + "license": "MIT", 439 + "optional": true, 440 + "os": [ 441 + "linux" 442 + ], 443 + "engines": { 444 + "node": ">=18" 445 + } 446 + }, 447 + "node_modules/@esbuild/linux-s390x": { 448 + "version": "0.27.3", 449 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", 450 + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", 451 + "cpu": [ 452 + "s390x" 453 + ], 454 + "dev": true, 455 + "license": "MIT", 456 + "optional": true, 457 + "os": [ 458 + "linux" 459 + ], 460 + "engines": { 461 + "node": ">=18" 462 + } 463 + }, 464 + "node_modules/@esbuild/linux-x64": { 465 + "version": "0.27.3", 466 + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", 467 + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", 468 + "cpu": [ 469 + "x64" 470 + ], 471 + "dev": true, 472 + "license": "MIT", 473 + "optional": true, 474 + "os": [ 475 + "linux" 476 + ], 477 + "engines": { 478 + "node": ">=18" 479 + } 480 + }, 481 + "node_modules/@esbuild/netbsd-arm64": { 482 + "version": "0.27.3", 483 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", 484 + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", 485 + "cpu": [ 486 + "arm64" 487 + ], 488 + "dev": true, 489 + "license": "MIT", 490 + "optional": true, 491 + "os": [ 492 + "netbsd" 493 + ], 494 + "engines": { 495 + "node": ">=18" 496 + } 497 + }, 498 + "node_modules/@esbuild/netbsd-x64": { 499 + "version": "0.27.3", 500 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", 501 + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", 502 + "cpu": [ 503 + "x64" 504 + ], 505 + "dev": true, 506 + "license": "MIT", 507 + "optional": true, 508 + "os": [ 509 + "netbsd" 510 + ], 511 + "engines": { 512 + "node": ">=18" 513 + } 514 + }, 515 + "node_modules/@esbuild/openbsd-arm64": { 516 + "version": "0.27.3", 517 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", 518 + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", 519 + "cpu": [ 520 + "arm64" 521 + ], 522 + "dev": true, 523 + "license": "MIT", 524 + "optional": true, 525 + "os": [ 526 + "openbsd" 527 + ], 528 + "engines": { 529 + "node": ">=18" 530 + } 531 + }, 532 + "node_modules/@esbuild/openbsd-x64": { 533 + "version": "0.27.3", 534 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", 535 + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", 536 + "cpu": [ 537 + "x64" 538 + ], 539 + "dev": true, 540 + "license": "MIT", 541 + "optional": true, 542 + "os": [ 543 + "openbsd" 544 + ], 545 + "engines": { 546 + "node": ">=18" 547 + } 548 + }, 549 + "node_modules/@esbuild/openharmony-arm64": { 550 + "version": "0.27.3", 551 + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", 552 + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", 553 + "cpu": [ 554 + "arm64" 555 + ], 556 + "dev": true, 557 + "license": "MIT", 558 + "optional": true, 559 + "os": [ 560 + "openharmony" 561 + ], 562 + "engines": { 563 + "node": ">=18" 564 + } 565 + }, 566 + "node_modules/@esbuild/sunos-x64": { 567 + "version": "0.27.3", 568 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", 569 + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", 570 + "cpu": [ 571 + "x64" 572 + ], 573 + "dev": true, 574 + "license": "MIT", 575 + "optional": true, 576 + "os": [ 577 + "sunos" 578 + ], 579 + "engines": { 580 + "node": ">=18" 581 + } 582 + }, 583 + "node_modules/@esbuild/win32-arm64": { 584 + "version": "0.27.3", 585 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", 586 + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", 587 + "cpu": [ 588 + "arm64" 589 + ], 590 + "dev": true, 591 + "license": "MIT", 592 + "optional": true, 593 + "os": [ 594 + "win32" 595 + ], 596 + "engines": { 597 + "node": ">=18" 598 + } 599 + }, 600 + "node_modules/@esbuild/win32-ia32": { 601 + "version": "0.27.3", 602 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", 603 + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", 604 + "cpu": [ 605 + "ia32" 606 + ], 607 + "dev": true, 608 + "license": "MIT", 609 + "optional": true, 610 + "os": [ 611 + "win32" 612 + ], 613 + "engines": { 614 + "node": ">=18" 615 + } 616 + }, 617 + "node_modules/@esbuild/win32-x64": { 618 + "version": "0.27.3", 619 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", 620 + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", 621 + "cpu": [ 622 + "x64" 623 + ], 624 + "dev": true, 625 + "license": "MIT", 626 + "optional": true, 627 + "os": [ 628 + "win32" 629 + ], 630 + "engines": { 631 + "node": ">=18" 632 + } 633 + }, 634 + "node_modules/@jridgewell/sourcemap-codec": { 635 + "version": "1.5.5", 636 + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", 637 + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", 638 + "dev": true, 639 + "license": "MIT" 640 + }, 641 + "node_modules/@rollup/rollup-android-arm-eabi": { 642 + "version": "4.57.1", 643 + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", 644 + "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", 645 + "cpu": [ 646 + "arm" 647 + ], 648 + "dev": true, 649 + "license": "MIT", 650 + "optional": true, 651 + "os": [ 652 + "android" 653 + ] 654 + }, 655 + "node_modules/@rollup/rollup-android-arm64": { 656 + "version": "4.57.1", 657 + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", 658 + "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", 659 + "cpu": [ 660 + "arm64" 661 + ], 662 + "dev": true, 663 + "license": "MIT", 664 + "optional": true, 665 + "os": [ 666 + "android" 667 + ] 668 + }, 669 + "node_modules/@rollup/rollup-darwin-arm64": { 670 + "version": "4.57.1", 671 + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", 672 + "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", 673 + "cpu": [ 674 + "arm64" 675 + ], 676 + "dev": true, 677 + "license": "MIT", 678 + "optional": true, 679 + "os": [ 680 + "darwin" 681 + ] 682 + }, 683 + "node_modules/@rollup/rollup-darwin-x64": { 684 + "version": "4.57.1", 685 + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", 686 + "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", 687 + "cpu": [ 688 + "x64" 689 + ], 690 + "dev": true, 691 + "license": "MIT", 692 + "optional": true, 693 + "os": [ 694 + "darwin" 695 + ] 696 + }, 697 + "node_modules/@rollup/rollup-freebsd-arm64": { 698 + "version": "4.57.1", 699 + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", 700 + "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", 701 + "cpu": [ 702 + "arm64" 703 + ], 704 + "dev": true, 705 + "license": "MIT", 706 + "optional": true, 707 + "os": [ 708 + "freebsd" 709 + ] 710 + }, 711 + "node_modules/@rollup/rollup-freebsd-x64": { 712 + "version": "4.57.1", 713 + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", 714 + "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", 715 + "cpu": [ 716 + "x64" 717 + ], 718 + "dev": true, 719 + "license": "MIT", 720 + "optional": true, 721 + "os": [ 722 + "freebsd" 723 + ] 724 + }, 725 + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 726 + "version": "4.57.1", 727 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", 728 + "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", 729 + "cpu": [ 730 + "arm" 731 + ], 732 + "dev": true, 733 + "license": "MIT", 734 + "optional": true, 735 + "os": [ 736 + "linux" 737 + ] 738 + }, 739 + "node_modules/@rollup/rollup-linux-arm-musleabihf": { 740 + "version": "4.57.1", 741 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", 742 + "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", 743 + "cpu": [ 744 + "arm" 745 + ], 746 + "dev": true, 747 + "license": "MIT", 748 + "optional": true, 749 + "os": [ 750 + "linux" 751 + ] 752 + }, 753 + "node_modules/@rollup/rollup-linux-arm64-gnu": { 754 + "version": "4.57.1", 755 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", 756 + "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", 757 + "cpu": [ 758 + "arm64" 759 + ], 760 + "dev": true, 761 + "license": "MIT", 762 + "optional": true, 763 + "os": [ 764 + "linux" 765 + ] 766 + }, 767 + "node_modules/@rollup/rollup-linux-arm64-musl": { 768 + "version": "4.57.1", 769 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", 770 + "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", 771 + "cpu": [ 772 + "arm64" 773 + ], 774 + "dev": true, 775 + "license": "MIT", 776 + "optional": true, 777 + "os": [ 778 + "linux" 779 + ] 780 + }, 781 + "node_modules/@rollup/rollup-linux-loong64-gnu": { 782 + "version": "4.57.1", 783 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", 784 + "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", 785 + "cpu": [ 786 + "loong64" 787 + ], 788 + "dev": true, 789 + "license": "MIT", 790 + "optional": true, 791 + "os": [ 792 + "linux" 793 + ] 794 + }, 795 + "node_modules/@rollup/rollup-linux-loong64-musl": { 796 + "version": "4.57.1", 797 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", 798 + "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", 799 + "cpu": [ 800 + "loong64" 801 + ], 802 + "dev": true, 803 + "license": "MIT", 804 + "optional": true, 805 + "os": [ 806 + "linux" 807 + ] 808 + }, 809 + "node_modules/@rollup/rollup-linux-ppc64-gnu": { 810 + "version": "4.57.1", 811 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", 812 + "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", 813 + "cpu": [ 814 + "ppc64" 815 + ], 816 + "dev": true, 817 + "license": "MIT", 818 + "optional": true, 819 + "os": [ 820 + "linux" 821 + ] 822 + }, 823 + "node_modules/@rollup/rollup-linux-ppc64-musl": { 824 + "version": "4.57.1", 825 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", 826 + "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", 827 + "cpu": [ 828 + "ppc64" 829 + ], 830 + "dev": true, 831 + "license": "MIT", 832 + "optional": true, 833 + "os": [ 834 + "linux" 835 + ] 836 + }, 837 + "node_modules/@rollup/rollup-linux-riscv64-gnu": { 838 + "version": "4.57.1", 839 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", 840 + "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", 841 + "cpu": [ 842 + "riscv64" 843 + ], 844 + "dev": true, 845 + "license": "MIT", 846 + "optional": true, 847 + "os": [ 848 + "linux" 849 + ] 850 + }, 851 + "node_modules/@rollup/rollup-linux-riscv64-musl": { 852 + "version": "4.57.1", 853 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", 854 + "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", 855 + "cpu": [ 856 + "riscv64" 857 + ], 858 + "dev": true, 859 + "license": "MIT", 860 + "optional": true, 861 + "os": [ 862 + "linux" 863 + ] 864 + }, 865 + "node_modules/@rollup/rollup-linux-s390x-gnu": { 866 + "version": "4.57.1", 867 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", 868 + "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", 869 + "cpu": [ 870 + "s390x" 871 + ], 872 + "dev": true, 873 + "license": "MIT", 874 + "optional": true, 875 + "os": [ 876 + "linux" 877 + ] 878 + }, 879 + "node_modules/@rollup/rollup-linux-x64-gnu": { 880 + "version": "4.57.1", 881 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", 882 + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", 883 + "cpu": [ 884 + "x64" 885 + ], 886 + "dev": true, 887 + "license": "MIT", 888 + "optional": true, 889 + "os": [ 890 + "linux" 891 + ] 892 + }, 893 + "node_modules/@rollup/rollup-linux-x64-musl": { 894 + "version": "4.57.1", 895 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", 896 + "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", 897 + "cpu": [ 898 + "x64" 899 + ], 900 + "dev": true, 901 + "license": "MIT", 902 + "optional": true, 903 + "os": [ 904 + "linux" 905 + ] 906 + }, 907 + "node_modules/@rollup/rollup-openbsd-x64": { 908 + "version": "4.57.1", 909 + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", 910 + "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", 911 + "cpu": [ 912 + "x64" 913 + ], 914 + "dev": true, 915 + "license": "MIT", 916 + "optional": true, 917 + "os": [ 918 + "openbsd" 919 + ] 920 + }, 921 + "node_modules/@rollup/rollup-openharmony-arm64": { 922 + "version": "4.57.1", 923 + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", 924 + "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", 925 + "cpu": [ 926 + "arm64" 927 + ], 928 + "dev": true, 929 + "license": "MIT", 930 + "optional": true, 931 + "os": [ 932 + "openharmony" 933 + ] 934 + }, 935 + "node_modules/@rollup/rollup-win32-arm64-msvc": { 936 + "version": "4.57.1", 937 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", 938 + "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", 939 + "cpu": [ 940 + "arm64" 941 + ], 942 + "dev": true, 943 + "license": "MIT", 944 + "optional": true, 945 + "os": [ 946 + "win32" 947 + ] 948 + }, 949 + "node_modules/@rollup/rollup-win32-ia32-msvc": { 950 + "version": "4.57.1", 951 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", 952 + "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", 953 + "cpu": [ 954 + "ia32" 955 + ], 956 + "dev": true, 957 + "license": "MIT", 958 + "optional": true, 959 + "os": [ 960 + "win32" 961 + ] 962 + }, 963 + "node_modules/@rollup/rollup-win32-x64-gnu": { 964 + "version": "4.57.1", 965 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", 966 + "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", 967 + "cpu": [ 968 + "x64" 969 + ], 970 + "dev": true, 971 + "license": "MIT", 972 + "optional": true, 973 + "os": [ 974 + "win32" 975 + ] 976 + }, 977 + "node_modules/@rollup/rollup-win32-x64-msvc": { 978 + "version": "4.57.1", 979 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", 980 + "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", 981 + "cpu": [ 982 + "x64" 983 + ], 984 + "dev": true, 985 + "license": "MIT", 986 + "optional": true, 987 + "os": [ 988 + "win32" 989 + ] 990 + }, 991 + "node_modules/@types/estree": { 992 + "version": "1.0.8", 993 + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", 994 + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", 995 + "dev": true, 996 + "license": "MIT" 997 + }, 998 + "node_modules/@types/node": { 999 + "version": "22.19.10", 1000 + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.10.tgz", 1001 + "integrity": "sha512-tF5VOugLS/EuDlTBijk0MqABfP8UxgYazTLo3uIn3b4yJgg26QRbVYJYsDtHrjdDUIRfP70+VfhTTc+CE1yskw==", 1002 + "dev": true, 1003 + "license": "MIT", 1004 + "dependencies": { 1005 + "undici-types": "~6.21.0" 1006 + } 1007 + }, 1008 + "node_modules/@vitest/expect": { 1009 + "version": "2.1.9", 1010 + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz", 1011 + "integrity": "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==", 1012 + "dev": true, 1013 + "license": "MIT", 1014 + "dependencies": { 1015 + "@vitest/spy": "2.1.9", 1016 + "@vitest/utils": "2.1.9", 1017 + "chai": "^5.1.2", 1018 + "tinyrainbow": "^1.2.0" 1019 + }, 1020 + "funding": { 1021 + "url": "https://opencollective.com/vitest" 1022 + } 1023 + }, 1024 + "node_modules/@vitest/mocker": { 1025 + "version": "2.1.9", 1026 + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.9.tgz", 1027 + "integrity": "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==", 1028 + "dev": true, 1029 + "license": "MIT", 1030 + "dependencies": { 1031 + "@vitest/spy": "2.1.9", 1032 + "estree-walker": "^3.0.3", 1033 + "magic-string": "^0.30.12" 1034 + }, 1035 + "funding": { 1036 + "url": "https://opencollective.com/vitest" 1037 + }, 1038 + "peerDependencies": { 1039 + "msw": "^2.4.9", 1040 + "vite": "^5.0.0" 1041 + }, 1042 + "peerDependenciesMeta": { 1043 + "msw": { 1044 + "optional": true 1045 + }, 1046 + "vite": { 1047 + "optional": true 1048 + } 1049 + } 1050 + }, 1051 + "node_modules/@vitest/pretty-format": { 1052 + "version": "2.1.9", 1053 + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz", 1054 + "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==", 1055 + "dev": true, 1056 + "license": "MIT", 1057 + "dependencies": { 1058 + "tinyrainbow": "^1.2.0" 1059 + }, 1060 + "funding": { 1061 + "url": "https://opencollective.com/vitest" 1062 + } 1063 + }, 1064 + "node_modules/@vitest/runner": { 1065 + "version": "2.1.9", 1066 + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.9.tgz", 1067 + "integrity": "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==", 1068 + "dev": true, 1069 + "license": "MIT", 1070 + "dependencies": { 1071 + "@vitest/utils": "2.1.9", 1072 + "pathe": "^1.1.2" 1073 + }, 1074 + "funding": { 1075 + "url": "https://opencollective.com/vitest" 1076 + } 1077 + }, 1078 + "node_modules/@vitest/snapshot": { 1079 + "version": "2.1.9", 1080 + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.9.tgz", 1081 + "integrity": "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==", 1082 + "dev": true, 1083 + "license": "MIT", 1084 + "dependencies": { 1085 + "@vitest/pretty-format": "2.1.9", 1086 + "magic-string": "^0.30.12", 1087 + "pathe": "^1.1.2" 1088 + }, 1089 + "funding": { 1090 + "url": "https://opencollective.com/vitest" 1091 + } 1092 + }, 1093 + "node_modules/@vitest/spy": { 1094 + "version": "2.1.9", 1095 + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.9.tgz", 1096 + "integrity": "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==", 1097 + "dev": true, 1098 + "license": "MIT", 1099 + "dependencies": { 1100 + "tinyspy": "^3.0.2" 1101 + }, 1102 + "funding": { 1103 + "url": "https://opencollective.com/vitest" 1104 + } 1105 + }, 1106 + "node_modules/@vitest/utils": { 1107 + "version": "2.1.9", 1108 + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz", 1109 + "integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==", 1110 + "dev": true, 1111 + "license": "MIT", 1112 + "dependencies": { 1113 + "@vitest/pretty-format": "2.1.9", 1114 + "loupe": "^3.1.2", 1115 + "tinyrainbow": "^1.2.0" 1116 + }, 1117 + "funding": { 1118 + "url": "https://opencollective.com/vitest" 1119 + } 1120 + }, 1121 + "node_modules/assertion-error": { 1122 + "version": "2.0.1", 1123 + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", 1124 + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", 1125 + "dev": true, 1126 + "license": "MIT", 1127 + "engines": { 1128 + "node": ">=12" 1129 + } 1130 + }, 1131 + "node_modules/cac": { 1132 + "version": "6.7.14", 1133 + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", 1134 + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", 1135 + "dev": true, 1136 + "license": "MIT", 1137 + "engines": { 1138 + "node": ">=8" 1139 + } 1140 + }, 1141 + "node_modules/chai": { 1142 + "version": "5.3.3", 1143 + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", 1144 + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", 1145 + "dev": true, 1146 + "license": "MIT", 1147 + "dependencies": { 1148 + "assertion-error": "^2.0.1", 1149 + "check-error": "^2.1.1", 1150 + "deep-eql": "^5.0.1", 1151 + "loupe": "^3.1.0", 1152 + "pathval": "^2.0.0" 1153 + }, 1154 + "engines": { 1155 + "node": ">=18" 1156 + } 1157 + }, 1158 + "node_modules/check-error": { 1159 + "version": "2.1.3", 1160 + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", 1161 + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", 1162 + "dev": true, 1163 + "license": "MIT", 1164 + "engines": { 1165 + "node": ">= 16" 1166 + } 1167 + }, 1168 + "node_modules/commander": { 1169 + "version": "12.1.0", 1170 + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", 1171 + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", 1172 + "license": "MIT", 1173 + "engines": { 1174 + "node": ">=18" 1175 + } 1176 + }, 1177 + "node_modules/debug": { 1178 + "version": "4.4.3", 1179 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", 1180 + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", 1181 + "dev": true, 1182 + "license": "MIT", 1183 + "dependencies": { 1184 + "ms": "^2.1.3" 1185 + }, 1186 + "engines": { 1187 + "node": ">=6.0" 1188 + }, 1189 + "peerDependenciesMeta": { 1190 + "supports-color": { 1191 + "optional": true 1192 + } 1193 + } 1194 + }, 1195 + "node_modules/deep-eql": { 1196 + "version": "5.0.2", 1197 + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", 1198 + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", 1199 + "dev": true, 1200 + "license": "MIT", 1201 + "engines": { 1202 + "node": ">=6" 1203 + } 1204 + }, 1205 + "node_modules/es-module-lexer": { 1206 + "version": "1.7.0", 1207 + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", 1208 + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", 1209 + "dev": true, 1210 + "license": "MIT" 1211 + }, 1212 + "node_modules/esbuild": { 1213 + "version": "0.27.3", 1214 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", 1215 + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", 1216 + "dev": true, 1217 + "hasInstallScript": true, 1218 + "license": "MIT", 1219 + "bin": { 1220 + "esbuild": "bin/esbuild" 1221 + }, 1222 + "engines": { 1223 + "node": ">=18" 1224 + }, 1225 + "optionalDependencies": { 1226 + "@esbuild/aix-ppc64": "0.27.3", 1227 + "@esbuild/android-arm": "0.27.3", 1228 + "@esbuild/android-arm64": "0.27.3", 1229 + "@esbuild/android-x64": "0.27.3", 1230 + "@esbuild/darwin-arm64": "0.27.3", 1231 + "@esbuild/darwin-x64": "0.27.3", 1232 + "@esbuild/freebsd-arm64": "0.27.3", 1233 + "@esbuild/freebsd-x64": "0.27.3", 1234 + "@esbuild/linux-arm": "0.27.3", 1235 + "@esbuild/linux-arm64": "0.27.3", 1236 + "@esbuild/linux-ia32": "0.27.3", 1237 + "@esbuild/linux-loong64": "0.27.3", 1238 + "@esbuild/linux-mips64el": "0.27.3", 1239 + "@esbuild/linux-ppc64": "0.27.3", 1240 + "@esbuild/linux-riscv64": "0.27.3", 1241 + "@esbuild/linux-s390x": "0.27.3", 1242 + "@esbuild/linux-x64": "0.27.3", 1243 + "@esbuild/netbsd-arm64": "0.27.3", 1244 + "@esbuild/netbsd-x64": "0.27.3", 1245 + "@esbuild/openbsd-arm64": "0.27.3", 1246 + "@esbuild/openbsd-x64": "0.27.3", 1247 + "@esbuild/openharmony-arm64": "0.27.3", 1248 + "@esbuild/sunos-x64": "0.27.3", 1249 + "@esbuild/win32-arm64": "0.27.3", 1250 + "@esbuild/win32-ia32": "0.27.3", 1251 + "@esbuild/win32-x64": "0.27.3" 1252 + } 1253 + }, 1254 + "node_modules/estree-walker": { 1255 + "version": "3.0.3", 1256 + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", 1257 + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 1258 + "dev": true, 1259 + "license": "MIT", 1260 + "dependencies": { 1261 + "@types/estree": "^1.0.0" 1262 + } 1263 + }, 1264 + "node_modules/expect-type": { 1265 + "version": "1.3.0", 1266 + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", 1267 + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", 1268 + "dev": true, 1269 + "license": "Apache-2.0", 1270 + "engines": { 1271 + "node": ">=12.0.0" 1272 + } 1273 + }, 1274 + "node_modules/fsevents": { 1275 + "version": "2.3.3", 1276 + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1277 + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1278 + "dev": true, 1279 + "hasInstallScript": true, 1280 + "license": "MIT", 1281 + "optional": true, 1282 + "os": [ 1283 + "darwin" 1284 + ], 1285 + "engines": { 1286 + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1287 + } 1288 + }, 1289 + "node_modules/get-tsconfig": { 1290 + "version": "4.13.6", 1291 + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz", 1292 + "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==", 1293 + "dev": true, 1294 + "license": "MIT", 1295 + "dependencies": { 1296 + "resolve-pkg-maps": "^1.0.0" 1297 + }, 1298 + "funding": { 1299 + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" 1300 + } 1301 + }, 1302 + "node_modules/loupe": { 1303 + "version": "3.2.1", 1304 + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", 1305 + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", 1306 + "dev": true, 1307 + "license": "MIT" 1308 + }, 1309 + "node_modules/magic-string": { 1310 + "version": "0.30.21", 1311 + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", 1312 + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", 1313 + "dev": true, 1314 + "license": "MIT", 1315 + "dependencies": { 1316 + "@jridgewell/sourcemap-codec": "^1.5.5" 1317 + } 1318 + }, 1319 + "node_modules/ms": { 1320 + "version": "2.1.3", 1321 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1322 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1323 + "dev": true, 1324 + "license": "MIT" 1325 + }, 1326 + "node_modules/nanoid": { 1327 + "version": "3.3.11", 1328 + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 1329 + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 1330 + "dev": true, 1331 + "funding": [ 1332 + { 1333 + "type": "github", 1334 + "url": "https://github.com/sponsors/ai" 1335 + } 1336 + ], 1337 + "license": "MIT", 1338 + "bin": { 1339 + "nanoid": "bin/nanoid.cjs" 1340 + }, 1341 + "engines": { 1342 + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1343 + } 1344 + }, 1345 + "node_modules/pathe": { 1346 + "version": "1.1.2", 1347 + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", 1348 + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", 1349 + "dev": true, 1350 + "license": "MIT" 1351 + }, 1352 + "node_modules/pathval": { 1353 + "version": "2.0.1", 1354 + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", 1355 + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", 1356 + "dev": true, 1357 + "license": "MIT", 1358 + "engines": { 1359 + "node": ">= 14.16" 1360 + } 1361 + }, 1362 + "node_modules/picocolors": { 1363 + "version": "1.1.1", 1364 + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1365 + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 1366 + "dev": true, 1367 + "license": "ISC" 1368 + }, 1369 + "node_modules/postcss": { 1370 + "version": "8.5.6", 1371 + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", 1372 + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", 1373 + "dev": true, 1374 + "funding": [ 1375 + { 1376 + "type": "opencollective", 1377 + "url": "https://opencollective.com/postcss/" 1378 + }, 1379 + { 1380 + "type": "tidelift", 1381 + "url": "https://tidelift.com/funding/github/npm/postcss" 1382 + }, 1383 + { 1384 + "type": "github", 1385 + "url": "https://github.com/sponsors/ai" 1386 + } 1387 + ], 1388 + "license": "MIT", 1389 + "dependencies": { 1390 + "nanoid": "^3.3.11", 1391 + "picocolors": "^1.1.1", 1392 + "source-map-js": "^1.2.1" 1393 + }, 1394 + "engines": { 1395 + "node": "^10 || ^12 || >=14" 1396 + } 1397 + }, 1398 + "node_modules/resolve-pkg-maps": { 1399 + "version": "1.0.0", 1400 + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", 1401 + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", 1402 + "dev": true, 1403 + "license": "MIT", 1404 + "funding": { 1405 + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" 1406 + } 1407 + }, 1408 + "node_modules/rollup": { 1409 + "version": "4.57.1", 1410 + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", 1411 + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", 1412 + "dev": true, 1413 + "license": "MIT", 1414 + "dependencies": { 1415 + "@types/estree": "1.0.8" 1416 + }, 1417 + "bin": { 1418 + "rollup": "dist/bin/rollup" 1419 + }, 1420 + "engines": { 1421 + "node": ">=18.0.0", 1422 + "npm": ">=8.0.0" 1423 + }, 1424 + "optionalDependencies": { 1425 + "@rollup/rollup-android-arm-eabi": "4.57.1", 1426 + "@rollup/rollup-android-arm64": "4.57.1", 1427 + "@rollup/rollup-darwin-arm64": "4.57.1", 1428 + "@rollup/rollup-darwin-x64": "4.57.1", 1429 + "@rollup/rollup-freebsd-arm64": "4.57.1", 1430 + "@rollup/rollup-freebsd-x64": "4.57.1", 1431 + "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", 1432 + "@rollup/rollup-linux-arm-musleabihf": "4.57.1", 1433 + "@rollup/rollup-linux-arm64-gnu": "4.57.1", 1434 + "@rollup/rollup-linux-arm64-musl": "4.57.1", 1435 + "@rollup/rollup-linux-loong64-gnu": "4.57.1", 1436 + "@rollup/rollup-linux-loong64-musl": "4.57.1", 1437 + "@rollup/rollup-linux-ppc64-gnu": "4.57.1", 1438 + "@rollup/rollup-linux-ppc64-musl": "4.57.1", 1439 + "@rollup/rollup-linux-riscv64-gnu": "4.57.1", 1440 + "@rollup/rollup-linux-riscv64-musl": "4.57.1", 1441 + "@rollup/rollup-linux-s390x-gnu": "4.57.1", 1442 + "@rollup/rollup-linux-x64-gnu": "4.57.1", 1443 + "@rollup/rollup-linux-x64-musl": "4.57.1", 1444 + "@rollup/rollup-openbsd-x64": "4.57.1", 1445 + "@rollup/rollup-openharmony-arm64": "4.57.1", 1446 + "@rollup/rollup-win32-arm64-msvc": "4.57.1", 1447 + "@rollup/rollup-win32-ia32-msvc": "4.57.1", 1448 + "@rollup/rollup-win32-x64-gnu": "4.57.1", 1449 + "@rollup/rollup-win32-x64-msvc": "4.57.1", 1450 + "fsevents": "~2.3.2" 1451 + } 1452 + }, 1453 + "node_modules/siginfo": { 1454 + "version": "2.0.0", 1455 + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", 1456 + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", 1457 + "dev": true, 1458 + "license": "ISC" 1459 + }, 1460 + "node_modules/source-map-js": { 1461 + "version": "1.2.1", 1462 + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 1463 + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 1464 + "dev": true, 1465 + "license": "BSD-3-Clause", 1466 + "engines": { 1467 + "node": ">=0.10.0" 1468 + } 1469 + }, 1470 + "node_modules/stackback": { 1471 + "version": "0.0.2", 1472 + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", 1473 + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", 1474 + "dev": true, 1475 + "license": "MIT" 1476 + }, 1477 + "node_modules/std-env": { 1478 + "version": "3.10.0", 1479 + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", 1480 + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", 1481 + "dev": true, 1482 + "license": "MIT" 1483 + }, 1484 + "node_modules/tinybench": { 1485 + "version": "2.9.0", 1486 + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", 1487 + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", 1488 + "dev": true, 1489 + "license": "MIT" 1490 + }, 1491 + "node_modules/tinyexec": { 1492 + "version": "0.3.2", 1493 + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", 1494 + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", 1495 + "dev": true, 1496 + "license": "MIT" 1497 + }, 1498 + "node_modules/tinypool": { 1499 + "version": "1.1.1", 1500 + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", 1501 + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", 1502 + "dev": true, 1503 + "license": "MIT", 1504 + "engines": { 1505 + "node": "^18.0.0 || >=20.0.0" 1506 + } 1507 + }, 1508 + "node_modules/tinyrainbow": { 1509 + "version": "1.2.0", 1510 + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", 1511 + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", 1512 + "dev": true, 1513 + "license": "MIT", 1514 + "engines": { 1515 + "node": ">=14.0.0" 1516 + } 1517 + }, 1518 + "node_modules/tinyspy": { 1519 + "version": "3.0.2", 1520 + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", 1521 + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", 1522 + "dev": true, 1523 + "license": "MIT", 1524 + "engines": { 1525 + "node": ">=14.0.0" 1526 + } 1527 + }, 1528 + "node_modules/tsx": { 1529 + "version": "4.21.0", 1530 + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", 1531 + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", 1532 + "dev": true, 1533 + "license": "MIT", 1534 + "dependencies": { 1535 + "esbuild": "~0.27.0", 1536 + "get-tsconfig": "^4.7.5" 1537 + }, 1538 + "bin": { 1539 + "tsx": "dist/cli.mjs" 1540 + }, 1541 + "engines": { 1542 + "node": ">=18.0.0" 1543 + }, 1544 + "optionalDependencies": { 1545 + "fsevents": "~2.3.3" 1546 + } 1547 + }, 1548 + "node_modules/typescript": { 1549 + "version": "5.9.3", 1550 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", 1551 + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", 1552 + "dev": true, 1553 + "license": "Apache-2.0", 1554 + "bin": { 1555 + "tsc": "bin/tsc", 1556 + "tsserver": "bin/tsserver" 1557 + }, 1558 + "engines": { 1559 + "node": ">=14.17" 1560 + } 1561 + }, 1562 + "node_modules/undici-types": { 1563 + "version": "6.21.0", 1564 + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", 1565 + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", 1566 + "dev": true, 1567 + "license": "MIT" 1568 + }, 1569 + "node_modules/vite": { 1570 + "version": "5.4.21", 1571 + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", 1572 + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", 1573 + "dev": true, 1574 + "license": "MIT", 1575 + "dependencies": { 1576 + "esbuild": "^0.21.3", 1577 + "postcss": "^8.4.43", 1578 + "rollup": "^4.20.0" 1579 + }, 1580 + "bin": { 1581 + "vite": "bin/vite.js" 1582 + }, 1583 + "engines": { 1584 + "node": "^18.0.0 || >=20.0.0" 1585 + }, 1586 + "funding": { 1587 + "url": "https://github.com/vitejs/vite?sponsor=1" 1588 + }, 1589 + "optionalDependencies": { 1590 + "fsevents": "~2.3.3" 1591 + }, 1592 + "peerDependencies": { 1593 + "@types/node": "^18.0.0 || >=20.0.0", 1594 + "less": "*", 1595 + "lightningcss": "^1.21.0", 1596 + "sass": "*", 1597 + "sass-embedded": "*", 1598 + "stylus": "*", 1599 + "sugarss": "*", 1600 + "terser": "^5.4.0" 1601 + }, 1602 + "peerDependenciesMeta": { 1603 + "@types/node": { 1604 + "optional": true 1605 + }, 1606 + "less": { 1607 + "optional": true 1608 + }, 1609 + "lightningcss": { 1610 + "optional": true 1611 + }, 1612 + "sass": { 1613 + "optional": true 1614 + }, 1615 + "sass-embedded": { 1616 + "optional": true 1617 + }, 1618 + "stylus": { 1619 + "optional": true 1620 + }, 1621 + "sugarss": { 1622 + "optional": true 1623 + }, 1624 + "terser": { 1625 + "optional": true 1626 + } 1627 + } 1628 + }, 1629 + "node_modules/vite-node": { 1630 + "version": "2.1.9", 1631 + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.9.tgz", 1632 + "integrity": "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==", 1633 + "dev": true, 1634 + "license": "MIT", 1635 + "dependencies": { 1636 + "cac": "^6.7.14", 1637 + "debug": "^4.3.7", 1638 + "es-module-lexer": "^1.5.4", 1639 + "pathe": "^1.1.2", 1640 + "vite": "^5.0.0" 1641 + }, 1642 + "bin": { 1643 + "vite-node": "vite-node.mjs" 1644 + }, 1645 + "engines": { 1646 + "node": "^18.0.0 || >=20.0.0" 1647 + }, 1648 + "funding": { 1649 + "url": "https://opencollective.com/vitest" 1650 + } 1651 + }, 1652 + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { 1653 + "version": "0.21.5", 1654 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", 1655 + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", 1656 + "cpu": [ 1657 + "ppc64" 1658 + ], 1659 + "dev": true, 1660 + "license": "MIT", 1661 + "optional": true, 1662 + "os": [ 1663 + "aix" 1664 + ], 1665 + "engines": { 1666 + "node": ">=12" 1667 + } 1668 + }, 1669 + "node_modules/vite/node_modules/@esbuild/android-arm": { 1670 + "version": "0.21.5", 1671 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", 1672 + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", 1673 + "cpu": [ 1674 + "arm" 1675 + ], 1676 + "dev": true, 1677 + "license": "MIT", 1678 + "optional": true, 1679 + "os": [ 1680 + "android" 1681 + ], 1682 + "engines": { 1683 + "node": ">=12" 1684 + } 1685 + }, 1686 + "node_modules/vite/node_modules/@esbuild/android-arm64": { 1687 + "version": "0.21.5", 1688 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", 1689 + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", 1690 + "cpu": [ 1691 + "arm64" 1692 + ], 1693 + "dev": true, 1694 + "license": "MIT", 1695 + "optional": true, 1696 + "os": [ 1697 + "android" 1698 + ], 1699 + "engines": { 1700 + "node": ">=12" 1701 + } 1702 + }, 1703 + "node_modules/vite/node_modules/@esbuild/android-x64": { 1704 + "version": "0.21.5", 1705 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", 1706 + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", 1707 + "cpu": [ 1708 + "x64" 1709 + ], 1710 + "dev": true, 1711 + "license": "MIT", 1712 + "optional": true, 1713 + "os": [ 1714 + "android" 1715 + ], 1716 + "engines": { 1717 + "node": ">=12" 1718 + } 1719 + }, 1720 + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { 1721 + "version": "0.21.5", 1722 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", 1723 + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", 1724 + "cpu": [ 1725 + "arm64" 1726 + ], 1727 + "dev": true, 1728 + "license": "MIT", 1729 + "optional": true, 1730 + "os": [ 1731 + "darwin" 1732 + ], 1733 + "engines": { 1734 + "node": ">=12" 1735 + } 1736 + }, 1737 + "node_modules/vite/node_modules/@esbuild/darwin-x64": { 1738 + "version": "0.21.5", 1739 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", 1740 + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", 1741 + "cpu": [ 1742 + "x64" 1743 + ], 1744 + "dev": true, 1745 + "license": "MIT", 1746 + "optional": true, 1747 + "os": [ 1748 + "darwin" 1749 + ], 1750 + "engines": { 1751 + "node": ">=12" 1752 + } 1753 + }, 1754 + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { 1755 + "version": "0.21.5", 1756 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", 1757 + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", 1758 + "cpu": [ 1759 + "arm64" 1760 + ], 1761 + "dev": true, 1762 + "license": "MIT", 1763 + "optional": true, 1764 + "os": [ 1765 + "freebsd" 1766 + ], 1767 + "engines": { 1768 + "node": ">=12" 1769 + } 1770 + }, 1771 + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { 1772 + "version": "0.21.5", 1773 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", 1774 + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", 1775 + "cpu": [ 1776 + "x64" 1777 + ], 1778 + "dev": true, 1779 + "license": "MIT", 1780 + "optional": true, 1781 + "os": [ 1782 + "freebsd" 1783 + ], 1784 + "engines": { 1785 + "node": ">=12" 1786 + } 1787 + }, 1788 + "node_modules/vite/node_modules/@esbuild/linux-arm": { 1789 + "version": "0.21.5", 1790 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", 1791 + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", 1792 + "cpu": [ 1793 + "arm" 1794 + ], 1795 + "dev": true, 1796 + "license": "MIT", 1797 + "optional": true, 1798 + "os": [ 1799 + "linux" 1800 + ], 1801 + "engines": { 1802 + "node": ">=12" 1803 + } 1804 + }, 1805 + "node_modules/vite/node_modules/@esbuild/linux-arm64": { 1806 + "version": "0.21.5", 1807 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", 1808 + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", 1809 + "cpu": [ 1810 + "arm64" 1811 + ], 1812 + "dev": true, 1813 + "license": "MIT", 1814 + "optional": true, 1815 + "os": [ 1816 + "linux" 1817 + ], 1818 + "engines": { 1819 + "node": ">=12" 1820 + } 1821 + }, 1822 + "node_modules/vite/node_modules/@esbuild/linux-ia32": { 1823 + "version": "0.21.5", 1824 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", 1825 + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", 1826 + "cpu": [ 1827 + "ia32" 1828 + ], 1829 + "dev": true, 1830 + "license": "MIT", 1831 + "optional": true, 1832 + "os": [ 1833 + "linux" 1834 + ], 1835 + "engines": { 1836 + "node": ">=12" 1837 + } 1838 + }, 1839 + "node_modules/vite/node_modules/@esbuild/linux-loong64": { 1840 + "version": "0.21.5", 1841 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", 1842 + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", 1843 + "cpu": [ 1844 + "loong64" 1845 + ], 1846 + "dev": true, 1847 + "license": "MIT", 1848 + "optional": true, 1849 + "os": [ 1850 + "linux" 1851 + ], 1852 + "engines": { 1853 + "node": ">=12" 1854 + } 1855 + }, 1856 + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { 1857 + "version": "0.21.5", 1858 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", 1859 + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", 1860 + "cpu": [ 1861 + "mips64el" 1862 + ], 1863 + "dev": true, 1864 + "license": "MIT", 1865 + "optional": true, 1866 + "os": [ 1867 + "linux" 1868 + ], 1869 + "engines": { 1870 + "node": ">=12" 1871 + } 1872 + }, 1873 + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { 1874 + "version": "0.21.5", 1875 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", 1876 + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", 1877 + "cpu": [ 1878 + "ppc64" 1879 + ], 1880 + "dev": true, 1881 + "license": "MIT", 1882 + "optional": true, 1883 + "os": [ 1884 + "linux" 1885 + ], 1886 + "engines": { 1887 + "node": ">=12" 1888 + } 1889 + }, 1890 + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { 1891 + "version": "0.21.5", 1892 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", 1893 + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", 1894 + "cpu": [ 1895 + "riscv64" 1896 + ], 1897 + "dev": true, 1898 + "license": "MIT", 1899 + "optional": true, 1900 + "os": [ 1901 + "linux" 1902 + ], 1903 + "engines": { 1904 + "node": ">=12" 1905 + } 1906 + }, 1907 + "node_modules/vite/node_modules/@esbuild/linux-s390x": { 1908 + "version": "0.21.5", 1909 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", 1910 + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", 1911 + "cpu": [ 1912 + "s390x" 1913 + ], 1914 + "dev": true, 1915 + "license": "MIT", 1916 + "optional": true, 1917 + "os": [ 1918 + "linux" 1919 + ], 1920 + "engines": { 1921 + "node": ">=12" 1922 + } 1923 + }, 1924 + "node_modules/vite/node_modules/@esbuild/linux-x64": { 1925 + "version": "0.21.5", 1926 + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", 1927 + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", 1928 + "cpu": [ 1929 + "x64" 1930 + ], 1931 + "dev": true, 1932 + "license": "MIT", 1933 + "optional": true, 1934 + "os": [ 1935 + "linux" 1936 + ], 1937 + "engines": { 1938 + "node": ">=12" 1939 + } 1940 + }, 1941 + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { 1942 + "version": "0.21.5", 1943 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", 1944 + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", 1945 + "cpu": [ 1946 + "x64" 1947 + ], 1948 + "dev": true, 1949 + "license": "MIT", 1950 + "optional": true, 1951 + "os": [ 1952 + "netbsd" 1953 + ], 1954 + "engines": { 1955 + "node": ">=12" 1956 + } 1957 + }, 1958 + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { 1959 + "version": "0.21.5", 1960 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", 1961 + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", 1962 + "cpu": [ 1963 + "x64" 1964 + ], 1965 + "dev": true, 1966 + "license": "MIT", 1967 + "optional": true, 1968 + "os": [ 1969 + "openbsd" 1970 + ], 1971 + "engines": { 1972 + "node": ">=12" 1973 + } 1974 + }, 1975 + "node_modules/vite/node_modules/@esbuild/sunos-x64": { 1976 + "version": "0.21.5", 1977 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", 1978 + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", 1979 + "cpu": [ 1980 + "x64" 1981 + ], 1982 + "dev": true, 1983 + "license": "MIT", 1984 + "optional": true, 1985 + "os": [ 1986 + "sunos" 1987 + ], 1988 + "engines": { 1989 + "node": ">=12" 1990 + } 1991 + }, 1992 + "node_modules/vite/node_modules/@esbuild/win32-arm64": { 1993 + "version": "0.21.5", 1994 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", 1995 + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", 1996 + "cpu": [ 1997 + "arm64" 1998 + ], 1999 + "dev": true, 2000 + "license": "MIT", 2001 + "optional": true, 2002 + "os": [ 2003 + "win32" 2004 + ], 2005 + "engines": { 2006 + "node": ">=12" 2007 + } 2008 + }, 2009 + "node_modules/vite/node_modules/@esbuild/win32-ia32": { 2010 + "version": "0.21.5", 2011 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", 2012 + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", 2013 + "cpu": [ 2014 + "ia32" 2015 + ], 2016 + "dev": true, 2017 + "license": "MIT", 2018 + "optional": true, 2019 + "os": [ 2020 + "win32" 2021 + ], 2022 + "engines": { 2023 + "node": ">=12" 2024 + } 2025 + }, 2026 + "node_modules/vite/node_modules/@esbuild/win32-x64": { 2027 + "version": "0.21.5", 2028 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", 2029 + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", 2030 + "cpu": [ 2031 + "x64" 2032 + ], 2033 + "dev": true, 2034 + "license": "MIT", 2035 + "optional": true, 2036 + "os": [ 2037 + "win32" 2038 + ], 2039 + "engines": { 2040 + "node": ">=12" 2041 + } 2042 + }, 2043 + "node_modules/vite/node_modules/esbuild": { 2044 + "version": "0.21.5", 2045 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", 2046 + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", 2047 + "dev": true, 2048 + "hasInstallScript": true, 2049 + "license": "MIT", 2050 + "bin": { 2051 + "esbuild": "bin/esbuild" 2052 + }, 2053 + "engines": { 2054 + "node": ">=12" 2055 + }, 2056 + "optionalDependencies": { 2057 + "@esbuild/aix-ppc64": "0.21.5", 2058 + "@esbuild/android-arm": "0.21.5", 2059 + "@esbuild/android-arm64": "0.21.5", 2060 + "@esbuild/android-x64": "0.21.5", 2061 + "@esbuild/darwin-arm64": "0.21.5", 2062 + "@esbuild/darwin-x64": "0.21.5", 2063 + "@esbuild/freebsd-arm64": "0.21.5", 2064 + "@esbuild/freebsd-x64": "0.21.5", 2065 + "@esbuild/linux-arm": "0.21.5", 2066 + "@esbuild/linux-arm64": "0.21.5", 2067 + "@esbuild/linux-ia32": "0.21.5", 2068 + "@esbuild/linux-loong64": "0.21.5", 2069 + "@esbuild/linux-mips64el": "0.21.5", 2070 + "@esbuild/linux-ppc64": "0.21.5", 2071 + "@esbuild/linux-riscv64": "0.21.5", 2072 + "@esbuild/linux-s390x": "0.21.5", 2073 + "@esbuild/linux-x64": "0.21.5", 2074 + "@esbuild/netbsd-x64": "0.21.5", 2075 + "@esbuild/openbsd-x64": "0.21.5", 2076 + "@esbuild/sunos-x64": "0.21.5", 2077 + "@esbuild/win32-arm64": "0.21.5", 2078 + "@esbuild/win32-ia32": "0.21.5", 2079 + "@esbuild/win32-x64": "0.21.5" 2080 + } 2081 + }, 2082 + "node_modules/vitest": { 2083 + "version": "2.1.9", 2084 + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.9.tgz", 2085 + "integrity": "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==", 2086 + "dev": true, 2087 + "license": "MIT", 2088 + "dependencies": { 2089 + "@vitest/expect": "2.1.9", 2090 + "@vitest/mocker": "2.1.9", 2091 + "@vitest/pretty-format": "^2.1.9", 2092 + "@vitest/runner": "2.1.9", 2093 + "@vitest/snapshot": "2.1.9", 2094 + "@vitest/spy": "2.1.9", 2095 + "@vitest/utils": "2.1.9", 2096 + "chai": "^5.1.2", 2097 + "debug": "^4.3.7", 2098 + "expect-type": "^1.1.0", 2099 + "magic-string": "^0.30.12", 2100 + "pathe": "^1.1.2", 2101 + "std-env": "^3.8.0", 2102 + "tinybench": "^2.9.0", 2103 + "tinyexec": "^0.3.1", 2104 + "tinypool": "^1.0.1", 2105 + "tinyrainbow": "^1.2.0", 2106 + "vite": "^5.0.0", 2107 + "vite-node": "2.1.9", 2108 + "why-is-node-running": "^2.3.0" 2109 + }, 2110 + "bin": { 2111 + "vitest": "vitest.mjs" 2112 + }, 2113 + "engines": { 2114 + "node": "^18.0.0 || >=20.0.0" 2115 + }, 2116 + "funding": { 2117 + "url": "https://opencollective.com/vitest" 2118 + }, 2119 + "peerDependencies": { 2120 + "@edge-runtime/vm": "*", 2121 + "@types/node": "^18.0.0 || >=20.0.0", 2122 + "@vitest/browser": "2.1.9", 2123 + "@vitest/ui": "2.1.9", 2124 + "happy-dom": "*", 2125 + "jsdom": "*" 2126 + }, 2127 + "peerDependenciesMeta": { 2128 + "@edge-runtime/vm": { 2129 + "optional": true 2130 + }, 2131 + "@types/node": { 2132 + "optional": true 2133 + }, 2134 + "@vitest/browser": { 2135 + "optional": true 2136 + }, 2137 + "@vitest/ui": { 2138 + "optional": true 2139 + }, 2140 + "happy-dom": { 2141 + "optional": true 2142 + }, 2143 + "jsdom": { 2144 + "optional": true 2145 + } 2146 + } 2147 + }, 2148 + "node_modules/why-is-node-running": { 2149 + "version": "2.3.0", 2150 + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", 2151 + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", 2152 + "dev": true, 2153 + "license": "MIT", 2154 + "dependencies": { 2155 + "siginfo": "^2.0.0", 2156 + "stackback": "0.0.2" 2157 + }, 2158 + "bin": { 2159 + "why-is-node-running": "cli.js" 2160 + }, 2161 + "engines": { 2162 + "node": ">=8" 2163 + } 2164 + } 2165 + } 2166 + }
+42
package.json
··· 1 + { 2 + "name": "tangled-cli", 3 + "version": "0.0.1", 4 + "description": "A simple CLI for Tangled.org. Inspired by GitHub CLI, and usable by humans and AI.", 5 + "type": "module", 6 + "main": "./dist/index.js", 7 + "bin": { 8 + "tangled": "./dist/index.js" 9 + }, 10 + "scripts": { 11 + "dev": "tsx src/index.ts", 12 + "build": "tsc", 13 + "test": "vitest run", 14 + "test:watch": "vitest watch", 15 + "test:coverage": "vitest run --coverage", 16 + "lint": "biome check .", 17 + "lint:fix": "biome check --write .", 18 + "format": "biome format --write .", 19 + "typecheck": "tsc --noEmit", 20 + "prepublishOnly": "npm run build" 21 + }, 22 + "engines": { 23 + "node": ">=22.0.0" 24 + }, 25 + "repository": { 26 + "type": "git", 27 + "url": "git@tangled.org:markbennett.ca/tangled-cli" 28 + }, 29 + "keywords": ["git", "tangled", "pds", "atproto", "cli"], 30 + "author": "Mark Bennett", 31 + "license": "MIT", 32 + "dependencies": { 33 + "commander": "^12.1.0" 34 + }, 35 + "devDependencies": { 36 + "@biomejs/biome": "^1.9.4", 37 + "@types/node": "^22.10.2", 38 + "tsx": "^4.19.2", 39 + "typescript": "^5.7.2", 40 + "vitest": "^2.1.8" 41 + } 42 + }
src/commands/.gitkeep

This is a binary file and will not be displayed.

+28
src/index.ts
··· 1 + #!/usr/bin/env node 2 + import { readFileSync } from 'node:fs'; 3 + import { dirname, join } from 'node:path'; 4 + import { fileURLToPath } from 'node:url'; 5 + import { Command } from 'commander'; 6 + 7 + // Get package.json for version 8 + const __filename = fileURLToPath(import.meta.url); 9 + const __dirname = dirname(__filename); 10 + const packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8')); 11 + 12 + const program = new Command(); 13 + 14 + program 15 + .name('tangled') 16 + .description('A CLI for Tangled.org - AT Protocol-based Git hosting') 17 + .version(packageJson.version, '-v, --version', 'Output the current version'); 18 + 19 + // Future command registrations will go here 20 + // Example: 21 + // program 22 + // .command('auth') 23 + // .description('Authenticate with Tangled.org') 24 + // .action(() => { 25 + // console.log('Auth command coming soon!'); 26 + // }); 27 + 28 + program.parse(process.argv);
src/lib/.gitkeep

This is a binary file and will not be displayed.

+32
tests/index.test.ts
··· 1 + import { execSync } from 'node:child_process'; 2 + import { readFileSync } from 'node:fs'; 3 + import { dirname, join } from 'node:path'; 4 + import { fileURLToPath } from 'node:url'; 5 + import { describe, expect, it } from 'vitest'; 6 + 7 + const __filename = fileURLToPath(import.meta.url); 8 + const __dirname = dirname(__filename); 9 + const packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8')); 10 + 11 + describe('Tangled CLI', () => { 12 + it('should display version', () => { 13 + const output = execSync('tsx src/index.ts --version', { 14 + encoding: 'utf-8', 15 + cwd: join(__dirname, '..'), 16 + }); 17 + expect(output.trim()).toBe(packageJson.version); 18 + }); 19 + 20 + it('should display help', () => { 21 + const output = execSync('tsx src/index.ts --help', { 22 + encoding: 'utf-8', 23 + cwd: join(__dirname, '..'), 24 + }); 25 + expect(output).toContain('A CLI for Tangled.org'); 26 + expect(output).toContain('Usage:'); 27 + }); 28 + 29 + it('package.json should have correct name', () => { 30 + expect(packageJson.name).toBe('tangled-cli'); 31 + }); 32 + });
+25
tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "target": "ES2023", 4 + "module": "NodeNext", 5 + "moduleResolution": "NodeNext", 6 + "lib": ["ES2023"], 7 + "outDir": "./dist", 8 + "rootDir": "./src", 9 + "strict": true, 10 + "esModuleInterop": true, 11 + "skipLibCheck": true, 12 + "forceConsistentCasingInFileNames": true, 13 + "resolveJsonModule": true, 14 + "declaration": true, 15 + "declarationMap": true, 16 + "sourceMap": true, 17 + "noUnusedLocals": true, 18 + "noUnusedParameters": true, 19 + "noImplicitReturns": true, 20 + "noFallthroughCasesInSwitch": true, 21 + "allowSyntheticDefaultImports": true 22 + }, 23 + "include": ["src/**/*"], 24 + "exclude": ["node_modules", "dist", "tests"] 25 + }
+13
vitest.config.ts
··· 1 + import { defineConfig } from 'vitest/config'; 2 + 3 + export default defineConfig({ 4 + test: { 5 + globals: true, 6 + environment: 'node', 7 + coverage: { 8 + provider: 'v8', 9 + reporter: ['text', 'json', 'html'], 10 + exclude: ['node_modules/', 'dist/', 'tests/'], 11 + }, 12 + }, 13 + });