├── .github └── workflows │ └── run.yml ├── .gitignore ├── .husky └── pre-commit ├── .nvmrc ├── LICENSE ├── README.md ├── examples ├── built-in.js └── demo.js ├── package-lock.json ├── package.json ├── src ├── __snapshots__ │ └── index.spec.ts.snap ├── index.spec.ts └── index.ts ├── tsconfig.json └── vitest.config.ts /.github/workflows/run.yml: -------------------------------------------------------------------------------- 1 | name: CI/CD 2 | 3 | on: 4 | - push 5 | - pull_request 6 | - workflow_dispatch 7 | 8 | jobs: 9 | lint: 10 | name: Lint 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v4 14 | - uses: actions/setup-node@v4 15 | with: 16 | node-version: 20 17 | - run: npm ci 18 | - run: npm run lint 19 | 20 | test: 21 | name: Test (Node v${{ matrix.node }}) 22 | runs-on: ubuntu-latest 23 | strategy: 24 | matrix: 25 | node: [14, 20] 26 | steps: 27 | - uses: actions/checkout@v4 28 | - uses: actions/setup-node@v4 29 | with: 30 | node-version: ${{ matrix.node }} 31 | - run: npm ci --ignore-scripts 32 | - run: npm run build 33 | - run: npm run coverage 34 | if: matrix.node == 20 35 | - name: Update code coverage 36 | if: matrix.node == 20 37 | uses: codecov/codecov-action@v4 38 | with: 39 | token: ${{ secrets.CODECOV_TOKEN }} 40 | publish: 41 | name: Publish on npm 42 | runs-on: ubuntu-latest 43 | if: startsWith(github.ref, 'refs/tags/') 44 | needs: 45 | - lint 46 | - test 47 | steps: 48 | - uses: actions/checkout@v4 49 | - uses: actions/setup-node@v4 50 | with: 51 | node-version: 20 52 | registry-url: https://registry.npmjs.org/ 53 | - run: npm ci 54 | - name: Publish on npm 55 | run: npm publish 56 | env: 57 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 58 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | coverage 3 | dist 4 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | npx lint-staged --concurrent false 2 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v20.17.0 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Boris K - github.com/bokub 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # gradient-string 2 | 3 | [![Build Status][build-src]][build-href] 4 | [![Version][version-src]][version-href] 5 | [![Codecov][codecov-src]][codecov-href] 6 | [![Downloads][downloads-src]][downloads-href] 7 | [![code style: prettier][code-style-src]][code-style-href] 8 | [![Mentioned in Awesome Node.js][awesome-src]][awesome-href] 9 | 10 | > Beautiful color gradients in terminal output 11 | 12 | [![gradient-string](http://bit.ly/gradient-string-preview)](http://bit.ly/gradient-string-large) 13 | 14 | ## Install 15 | 16 | ``` 17 | $ npm i gradient-string 18 | ``` 19 | 20 | ## Usage 21 | 22 | ```javascript 23 | import gradient from 'gradient-string'; 24 | 25 | console.log(gradient(['cyan', 'pink'])('Hello world!')); 26 | ``` 27 | 28 | ### Initialize a gradient 29 | 30 | ```javascript 31 | // Provide an array of colors 32 | const coolGradient = gradient(['#FF0000', '#00FF00', '#0000FF']); 33 | ``` 34 | 35 | The colors are parsed with TinyColor, [multiple formats are accepted](https://github.com/bgrins/TinyColor/blob/master/README.md#accepted-string-input). 36 | 37 | ```javascript 38 | const coolGradient = gradient([ 39 | tinycolor('#FFBB65'), // tinycolor object 40 | { r: 0, g: 255, b: 0 }, // RGB object 41 | { h: 240, s: 1, v: 1, a: 1 }, // HSVa object 42 | 'rgb(120, 120, 0)', // RGB CSS string 43 | 'gold', // named color 44 | ]); 45 | ``` 46 | 47 | ### Use a gradient 48 | 49 | ```javascript 50 | const coolString = coolGradient('This is a fancy string!'); 51 | console.log(coolString); 52 | ``` 53 | 54 | ## Built-in gradients 55 | 56 | ### Usage 57 | 58 | ```javascript 59 | import { rainbow, pastel } from 'gradient-string'; 60 | 61 | // Use the pastel built-in gradient 62 | console.log(pastel('I love gradient-string!')); 63 | 64 | // Use the rainbow built-in gradient 65 | console.log(rainbow('It is so pretty! 🌈')); 66 | ``` 67 | 68 | ### Available built-in gradients 69 | 70 | [![Built-in gradients](http://bit.ly/2uFygrL)](http://bit.ly/2ufX07r) 71 | 72 | ## Multi line gradients 73 | 74 | In some cases, you may want to apply the same horizontal gradient on each line of a long text (or a piece of ASCII art). 75 | 76 | You can use the `multiline()` method of a gradient to ensure that the colors are vertically aligned. 77 | 78 | ```javascript 79 | import gradient, { rainbow } from 'gradient-string'; 80 | 81 | // Use the same gradient on every line 82 | const duck = gradient(['green', 'yellow']).multiline(` 83 | __ 84 | <(o )___ 85 | ( ._> / 86 | --- 87 | `); 88 | console.log(duck); 89 | 90 | // Works with aliases 91 | rainbow.multiline('Multi line\nstring'); 92 | 93 | // Works with advanced options (read below) 94 | gradient(['cyan', 'pink'], { interpolation: 'hsv' }).multiline('Multi line\nstring'); 95 | ``` 96 | 97 | ## Advanced gradients 98 | 99 | There are also more advanced options for gradient customization, such as custom color stops, or choice of color interpolation 100 | 101 | ### Custom color stops 102 | 103 | By default, the gradient color stops are distributed equidistantly. 104 | 105 | You can specify the position of each color stop (between `0` and `1`), using the following syntax: 106 | 107 | ```javascript 108 | let coolGradient = gradient([ 109 | { color: '#d8e0de', pos: 0 }, 110 | { color: '#255B53', pos: 0.8 }, 111 | { color: '#000000', pos: 1 }, 112 | ]); 113 | ``` 114 | 115 | ### Color interpolation 116 | 117 | When creating a gradient, you can provide a second parameter to choose how the colors will be generated. 118 | 119 | Here is the full `gradient` API: 120 | 121 | #### `gradient([colors], options?)(text)` 122 | 123 | ##### colors 124 | 125 | Type: `Array`
126 | Colors of the gradient. [Multiple formats are accepted](https://github.com/bgrins/TinyColor/blob/master/README.md#accepted-string-input). 127 | 128 | ##### text 129 | 130 | Type: `String`
131 | String you want to color. 132 | 133 | ##### options 134 | 135 | Type: `Object` _(optional)_
136 | 137 | ###### interpolation 138 | 139 | Type: `string`
140 | The gradient can be generated using RGB or HSV interpolation. HSV usually produces brighter colors. 141 | `interpolation` can be set to `rgb` for RGB interpolation, or`hsv` for HSV interpolation.
142 | Defaults to `rgb`. Case-insensitive 143 | 144 | ###### hsvSpin 145 | 146 | Type: `string`
147 | Used only in the case of HSV interpolation.
148 | Because hue can be considered as a circle, there are two ways to go from a color to another color.
149 | `hsvSpin` can be either `short` or `long`, depending on if you want to take the shortest or the longest way between two colors.
150 | Defaults to `short`. Case-insensitive 151 | 152 | #### Example 153 | 154 | ##### Code 155 | 156 | ```javascript 157 | const str = '■'.repeat(48); 158 | 159 | // Standard RGB gradient 160 | const standardRGBGradient = gradient(['red', 'green']); 161 | 162 | // Short HSV gradient: red -> yellow -> green 163 | const shortHSVGradient = gradient(['red', 'green'], { interpolation: 'hsv' }); 164 | 165 | // Long HSV gradient: red -> magenta -> blue -> cyan -> green 166 | const longHSVGradient = gradient(['red', 'green'], { interpolation: 'hsv', hsvSpin: 'long' }); 167 | 168 | console.log(standardRGBGradient(str)); 169 | console.log(shortHSVGradient(str)); 170 | console.log(longHSVGradient(str)); 171 | ``` 172 | 173 | ##### Result 174 | 175 | ![Example result](http://i.imgur.com/plQAN2Q.png) 176 | 177 | ## Dependencies 178 | 179 | - [chalk](https://github.com/chalk/chalk) - Output colored text to terminal 180 | - [tinygradient](https://github.com/mistic100/tinygradient) - Generate gradients 181 | 182 | ## Who uses gradient-string? 183 | 184 | - [Shopify](https://shopify.com/) in [Shopify CLI](https://www.npmjs.com/package/@shopify/cli-kit?activeTab=dependencies#:~:text=gradient%2Dstring) 185 | - [Turoborepo](https://turbo.build/) in [@turbo/workspaces](https://www.npmjs.com/package/@turbo/workspaces?activeTab=dependencies#:~:text=gradient%2Dstring) and [@turbo/codemod](https://www.npmjs.com/package/@turbo/codemod?activeTab=dependencies#:~:text=gradient%2Dstring) 186 | - [Tencent](https://www.tencent.com/) in [CloudBase Framework](https://www.npmjs.com/package/@cloudbase/framework-core?activeTab=dependencies#:~:text=gradient%2Dstring) 187 | - [Microsoft](https://microsoft.com) in [@lage-run/reporters](https://www.npmjs.com/package/@lage-run/reporters?activeTab=dependencies#:~:text=gradient%2Dstring) 188 | - [Fireship](https://fireship.io/) in [this YouTube video](https://youtu.be/_oHByo8tiEY?si=-G6EOqca31UYlWqr&t=341), where he shows how he built [javascript-millionaire](https://github.com/fireship-io/javascript-millionaire) 189 | - [Magic UI](https://magicui.design/) in [Magic UI CLI](https://www.npmjs.com/package/magicui-cli?activeTab=dependencies#:~:text=gradient%2Dstring) 190 | - [Myself](https://github.com/bokub) in [chalk-animation](https://github.com/bokub/chalk-animation), the animated version of gradient-string 191 | - [Sindre Sorhus](https://github.com/sindresorhus) in [ink-gradient](https://www.npmjs.com/package/ink-gradient?activeTab=dependencies#:~:text=gradient%2Dstring), the [Ink](https://github.com/vadimdemedes/ink) version of gradient-string 192 | - [And ![many](https://flat.badgen.net/github/dependents-repo/bokub/gradient-string?color=000&label=) more in open-source projects](https://github.com/bokub/gradient-string/network/dependents), who downloaded gradient-string [more than ![many](https://flat.badgen.net/npm/dt/gradient-string?color=000&label=) times][downloads-href]! 193 | 194 | ## License 195 | 196 | MIT © [Boris K](https://github.com/bokub) 197 | 198 | [build-src]: https://flat.badgen.net/github/checks/bokub/gradient-string?label=tests 199 | [version-src]: https://gradgen.bokub.workers.dev/npm/v/gradient-string?gradient=b65cff,11cbfa&style=flat&label=version 200 | [codecov-src]: https://img.shields.io/codecov/c/github/bokub/rgb-light-card?style=flat-square 201 | [downloads-src]: https://flat.badgen.net/npm/dw/gradient-string?color=FF9800 202 | [code-style-src]: https://flat.badgen.net/badge/code%20style/prettier/ff69b4 203 | [awesome-src]: https://awesome.re/mentioned-badge-flat.svg 204 | [build-href]: https://github.com/bokub/gradient-string/actions/workflows/run.yml 205 | [version-href]: https://www.npmjs.com/package/gradient-string 206 | [codecov-href]: https://codecov.io/gh/bokub/gradient-string 207 | [downloads-href]: https://www.npmjs.com/package/gradient-string 208 | [code-style-href]: https://github.com/bokub/prettier-config 209 | [awesome-href]: https://github.com/sindresorhus/awesome-nodejs 210 | -------------------------------------------------------------------------------- /examples/built-in.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // Run with "npm run built-in" 4 | import gradient from '../dist/index.js'; 5 | 6 | const { log } = console; 7 | const str = '■'.repeat(48); 8 | 9 | log(''); 10 | 11 | for (const t of [ 12 | 'cristal', 13 | 'teen', 14 | 'mind', 15 | 'morning', 16 | 'vice', 17 | 'passion', 18 | 'fruit', 19 | 'instagram', 20 | 'atlas', 21 | 'retro', 22 | 'summer', 23 | 'pastel', 24 | 'rainbow', 25 | ]) { 26 | log(' ' + t.padEnd(11, ' '), gradient[t](str)); 27 | } 28 | 29 | log(''); 30 | -------------------------------------------------------------------------------- /examples/demo.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // Run with "npm run demo" 4 | import gradient from '../dist/index.js'; 5 | 6 | const { log } = console; 7 | const str = ' Lorem ipsum dolor sit amet, consectetur adipiscing elit'; 8 | const title = ` 9 | _ _ _ _ _ 10 | __ _ _ __ __ _ __| (_) ___ _ __ | |_ ___| |_ _ __(_)_ __ __ _ 11 | / _\` | '__/ _\` |/ _\` | |/ _ \\ '_ \\| __|____/ __| __| '__| | '_ \\ / _\` | 12 | | (_| | | | (_| | (_| | | __/ | | | ||_____\\__ \\ |_| | | | | | | (_| | 13 | \\__, |_| \\__,_|\\__,_|_|\\___|_| |_|\\__| |___/\\__|_| |_|_| |_|\\__, | 14 | |___/ |___/ 15 | `; 16 | 17 | log(gradient.pastel.multiline(title) + '\n'); 18 | 19 | for (const t of ['atlas', 'pastel', 'morning', 'cristal', 'rainbow']) { 20 | log(gradient[t](str) + '\n'); 21 | } 22 | 23 | log(''); 24 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gradient-string", 3 | "version": "3.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "gradient-string", 9 | "version": "3.0.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "chalk": "^5.3.0", 13 | "tinygradient": "^1.1.5" 14 | }, 15 | "devDependencies": { 16 | "@bokub/prettier-config": "^2.1.0", 17 | "@vitest/coverage-v8": "^2.1.1", 18 | "husky": "^9.1.6", 19 | "lint-staged": "^15.2.10", 20 | "prettier": "^3.3.3", 21 | "typescript": "^5.6.2", 22 | "vitest": "^2.1.1" 23 | }, 24 | "engines": { 25 | "node": ">=14" 26 | } 27 | }, 28 | "node_modules/@ampproject/remapping": { 29 | "version": "2.3.0", 30 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", 31 | "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", 32 | "dev": true, 33 | "dependencies": { 34 | "@jridgewell/gen-mapping": "^0.3.5", 35 | "@jridgewell/trace-mapping": "^0.3.24" 36 | }, 37 | "engines": { 38 | "node": ">=6.0.0" 39 | } 40 | }, 41 | "node_modules/@babel/helper-string-parser": { 42 | "version": "7.24.8", 43 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", 44 | "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", 45 | "dev": true, 46 | "engines": { 47 | "node": ">=6.9.0" 48 | } 49 | }, 50 | "node_modules/@babel/helper-validator-identifier": { 51 | "version": "7.24.7", 52 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", 53 | "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", 54 | "dev": true, 55 | "engines": { 56 | "node": ">=6.9.0" 57 | } 58 | }, 59 | "node_modules/@babel/parser": { 60 | "version": "7.25.6", 61 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", 62 | "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", 63 | "dev": true, 64 | "dependencies": { 65 | "@babel/types": "^7.25.6" 66 | }, 67 | "bin": { 68 | "parser": "bin/babel-parser.js" 69 | }, 70 | "engines": { 71 | "node": ">=6.0.0" 72 | } 73 | }, 74 | "node_modules/@babel/types": { 75 | "version": "7.25.6", 76 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", 77 | "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", 78 | "dev": true, 79 | "dependencies": { 80 | "@babel/helper-string-parser": "^7.24.8", 81 | "@babel/helper-validator-identifier": "^7.24.7", 82 | "to-fast-properties": "^2.0.0" 83 | }, 84 | "engines": { 85 | "node": ">=6.9.0" 86 | } 87 | }, 88 | "node_modules/@bcoe/v8-coverage": { 89 | "version": "0.2.3", 90 | "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", 91 | "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", 92 | "dev": true 93 | }, 94 | "node_modules/@bokub/prettier-config": { 95 | "version": "2.1.0", 96 | "resolved": "https://registry.npmjs.org/@bokub/prettier-config/-/prettier-config-2.1.0.tgz", 97 | "integrity": "sha512-b2ZcqpwpT0mF12E9Es00uoALK5HrejLwYil9BMtFGi0PaMfo2vHVIoPMUVEn4h6rGiyMZSUynlGH2EneGhGXow==", 98 | "dev": true 99 | }, 100 | "node_modules/@esbuild/aix-ppc64": { 101 | "version": "0.21.5", 102 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", 103 | "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", 104 | "cpu": [ 105 | "ppc64" 106 | ], 107 | "dev": true, 108 | "optional": true, 109 | "os": [ 110 | "aix" 111 | ], 112 | "engines": { 113 | "node": ">=12" 114 | } 115 | }, 116 | "node_modules/@esbuild/android-arm": { 117 | "version": "0.21.5", 118 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", 119 | "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", 120 | "cpu": [ 121 | "arm" 122 | ], 123 | "dev": true, 124 | "optional": true, 125 | "os": [ 126 | "android" 127 | ], 128 | "engines": { 129 | "node": ">=12" 130 | } 131 | }, 132 | "node_modules/@esbuild/android-arm64": { 133 | "version": "0.21.5", 134 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", 135 | "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", 136 | "cpu": [ 137 | "arm64" 138 | ], 139 | "dev": true, 140 | "optional": true, 141 | "os": [ 142 | "android" 143 | ], 144 | "engines": { 145 | "node": ">=12" 146 | } 147 | }, 148 | "node_modules/@esbuild/android-x64": { 149 | "version": "0.21.5", 150 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", 151 | "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", 152 | "cpu": [ 153 | "x64" 154 | ], 155 | "dev": true, 156 | "optional": true, 157 | "os": [ 158 | "android" 159 | ], 160 | "engines": { 161 | "node": ">=12" 162 | } 163 | }, 164 | "node_modules/@esbuild/darwin-arm64": { 165 | "version": "0.21.5", 166 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", 167 | "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", 168 | "cpu": [ 169 | "arm64" 170 | ], 171 | "dev": true, 172 | "optional": true, 173 | "os": [ 174 | "darwin" 175 | ], 176 | "engines": { 177 | "node": ">=12" 178 | } 179 | }, 180 | "node_modules/@esbuild/darwin-x64": { 181 | "version": "0.21.5", 182 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", 183 | "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", 184 | "cpu": [ 185 | "x64" 186 | ], 187 | "dev": true, 188 | "optional": true, 189 | "os": [ 190 | "darwin" 191 | ], 192 | "engines": { 193 | "node": ">=12" 194 | } 195 | }, 196 | "node_modules/@esbuild/freebsd-arm64": { 197 | "version": "0.21.5", 198 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", 199 | "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", 200 | "cpu": [ 201 | "arm64" 202 | ], 203 | "dev": true, 204 | "optional": true, 205 | "os": [ 206 | "freebsd" 207 | ], 208 | "engines": { 209 | "node": ">=12" 210 | } 211 | }, 212 | "node_modules/@esbuild/freebsd-x64": { 213 | "version": "0.21.5", 214 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", 215 | "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", 216 | "cpu": [ 217 | "x64" 218 | ], 219 | "dev": true, 220 | "optional": true, 221 | "os": [ 222 | "freebsd" 223 | ], 224 | "engines": { 225 | "node": ">=12" 226 | } 227 | }, 228 | "node_modules/@esbuild/linux-arm": { 229 | "version": "0.21.5", 230 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", 231 | "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", 232 | "cpu": [ 233 | "arm" 234 | ], 235 | "dev": true, 236 | "optional": true, 237 | "os": [ 238 | "linux" 239 | ], 240 | "engines": { 241 | "node": ">=12" 242 | } 243 | }, 244 | "node_modules/@esbuild/linux-arm64": { 245 | "version": "0.21.5", 246 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", 247 | "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", 248 | "cpu": [ 249 | "arm64" 250 | ], 251 | "dev": true, 252 | "optional": true, 253 | "os": [ 254 | "linux" 255 | ], 256 | "engines": { 257 | "node": ">=12" 258 | } 259 | }, 260 | "node_modules/@esbuild/linux-ia32": { 261 | "version": "0.21.5", 262 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", 263 | "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", 264 | "cpu": [ 265 | "ia32" 266 | ], 267 | "dev": true, 268 | "optional": true, 269 | "os": [ 270 | "linux" 271 | ], 272 | "engines": { 273 | "node": ">=12" 274 | } 275 | }, 276 | "node_modules/@esbuild/linux-loong64": { 277 | "version": "0.21.5", 278 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", 279 | "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", 280 | "cpu": [ 281 | "loong64" 282 | ], 283 | "dev": true, 284 | "optional": true, 285 | "os": [ 286 | "linux" 287 | ], 288 | "engines": { 289 | "node": ">=12" 290 | } 291 | }, 292 | "node_modules/@esbuild/linux-mips64el": { 293 | "version": "0.21.5", 294 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", 295 | "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", 296 | "cpu": [ 297 | "mips64el" 298 | ], 299 | "dev": true, 300 | "optional": true, 301 | "os": [ 302 | "linux" 303 | ], 304 | "engines": { 305 | "node": ">=12" 306 | } 307 | }, 308 | "node_modules/@esbuild/linux-ppc64": { 309 | "version": "0.21.5", 310 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", 311 | "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", 312 | "cpu": [ 313 | "ppc64" 314 | ], 315 | "dev": true, 316 | "optional": true, 317 | "os": [ 318 | "linux" 319 | ], 320 | "engines": { 321 | "node": ">=12" 322 | } 323 | }, 324 | "node_modules/@esbuild/linux-riscv64": { 325 | "version": "0.21.5", 326 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", 327 | "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", 328 | "cpu": [ 329 | "riscv64" 330 | ], 331 | "dev": true, 332 | "optional": true, 333 | "os": [ 334 | "linux" 335 | ], 336 | "engines": { 337 | "node": ">=12" 338 | } 339 | }, 340 | "node_modules/@esbuild/linux-s390x": { 341 | "version": "0.21.5", 342 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", 343 | "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", 344 | "cpu": [ 345 | "s390x" 346 | ], 347 | "dev": true, 348 | "optional": true, 349 | "os": [ 350 | "linux" 351 | ], 352 | "engines": { 353 | "node": ">=12" 354 | } 355 | }, 356 | "node_modules/@esbuild/linux-x64": { 357 | "version": "0.21.5", 358 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", 359 | "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", 360 | "cpu": [ 361 | "x64" 362 | ], 363 | "dev": true, 364 | "optional": true, 365 | "os": [ 366 | "linux" 367 | ], 368 | "engines": { 369 | "node": ">=12" 370 | } 371 | }, 372 | "node_modules/@esbuild/netbsd-x64": { 373 | "version": "0.21.5", 374 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", 375 | "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", 376 | "cpu": [ 377 | "x64" 378 | ], 379 | "dev": true, 380 | "optional": true, 381 | "os": [ 382 | "netbsd" 383 | ], 384 | "engines": { 385 | "node": ">=12" 386 | } 387 | }, 388 | "node_modules/@esbuild/openbsd-x64": { 389 | "version": "0.21.5", 390 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", 391 | "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", 392 | "cpu": [ 393 | "x64" 394 | ], 395 | "dev": true, 396 | "optional": true, 397 | "os": [ 398 | "openbsd" 399 | ], 400 | "engines": { 401 | "node": ">=12" 402 | } 403 | }, 404 | "node_modules/@esbuild/sunos-x64": { 405 | "version": "0.21.5", 406 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", 407 | "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", 408 | "cpu": [ 409 | "x64" 410 | ], 411 | "dev": true, 412 | "optional": true, 413 | "os": [ 414 | "sunos" 415 | ], 416 | "engines": { 417 | "node": ">=12" 418 | } 419 | }, 420 | "node_modules/@esbuild/win32-arm64": { 421 | "version": "0.21.5", 422 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", 423 | "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", 424 | "cpu": [ 425 | "arm64" 426 | ], 427 | "dev": true, 428 | "optional": true, 429 | "os": [ 430 | "win32" 431 | ], 432 | "engines": { 433 | "node": ">=12" 434 | } 435 | }, 436 | "node_modules/@esbuild/win32-ia32": { 437 | "version": "0.21.5", 438 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", 439 | "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", 440 | "cpu": [ 441 | "ia32" 442 | ], 443 | "dev": true, 444 | "optional": true, 445 | "os": [ 446 | "win32" 447 | ], 448 | "engines": { 449 | "node": ">=12" 450 | } 451 | }, 452 | "node_modules/@esbuild/win32-x64": { 453 | "version": "0.21.5", 454 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", 455 | "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", 456 | "cpu": [ 457 | "x64" 458 | ], 459 | "dev": true, 460 | "optional": true, 461 | "os": [ 462 | "win32" 463 | ], 464 | "engines": { 465 | "node": ">=12" 466 | } 467 | }, 468 | "node_modules/@isaacs/cliui": { 469 | "version": "8.0.2", 470 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 471 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 472 | "dev": true, 473 | "dependencies": { 474 | "string-width": "^5.1.2", 475 | "string-width-cjs": "npm:string-width@^4.2.0", 476 | "strip-ansi": "^7.0.1", 477 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 478 | "wrap-ansi": "^8.1.0", 479 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 480 | }, 481 | "engines": { 482 | "node": ">=12" 483 | } 484 | }, 485 | "node_modules/@isaacs/cliui/node_modules/ansi-regex": { 486 | "version": "6.1.0", 487 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 488 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 489 | "dev": true, 490 | "engines": { 491 | "node": ">=12" 492 | }, 493 | "funding": { 494 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 495 | } 496 | }, 497 | "node_modules/@isaacs/cliui/node_modules/ansi-styles": { 498 | "version": "6.2.1", 499 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 500 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 501 | "dev": true, 502 | "engines": { 503 | "node": ">=12" 504 | }, 505 | "funding": { 506 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 507 | } 508 | }, 509 | "node_modules/@isaacs/cliui/node_modules/emoji-regex": { 510 | "version": "9.2.2", 511 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 512 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 513 | "dev": true 514 | }, 515 | "node_modules/@isaacs/cliui/node_modules/string-width": { 516 | "version": "5.1.2", 517 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 518 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 519 | "dev": true, 520 | "dependencies": { 521 | "eastasianwidth": "^0.2.0", 522 | "emoji-regex": "^9.2.2", 523 | "strip-ansi": "^7.0.1" 524 | }, 525 | "engines": { 526 | "node": ">=12" 527 | }, 528 | "funding": { 529 | "url": "https://github.com/sponsors/sindresorhus" 530 | } 531 | }, 532 | "node_modules/@isaacs/cliui/node_modules/strip-ansi": { 533 | "version": "7.1.0", 534 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 535 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 536 | "dev": true, 537 | "dependencies": { 538 | "ansi-regex": "^6.0.1" 539 | }, 540 | "engines": { 541 | "node": ">=12" 542 | }, 543 | "funding": { 544 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 545 | } 546 | }, 547 | "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { 548 | "version": "8.1.0", 549 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 550 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 551 | "dev": true, 552 | "dependencies": { 553 | "ansi-styles": "^6.1.0", 554 | "string-width": "^5.0.1", 555 | "strip-ansi": "^7.0.1" 556 | }, 557 | "engines": { 558 | "node": ">=12" 559 | }, 560 | "funding": { 561 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 562 | } 563 | }, 564 | "node_modules/@istanbuljs/schema": { 565 | "version": "0.1.3", 566 | "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", 567 | "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", 568 | "dev": true, 569 | "engines": { 570 | "node": ">=8" 571 | } 572 | }, 573 | "node_modules/@jridgewell/gen-mapping": { 574 | "version": "0.3.5", 575 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", 576 | "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", 577 | "dev": true, 578 | "dependencies": { 579 | "@jridgewell/set-array": "^1.2.1", 580 | "@jridgewell/sourcemap-codec": "^1.4.10", 581 | "@jridgewell/trace-mapping": "^0.3.24" 582 | }, 583 | "engines": { 584 | "node": ">=6.0.0" 585 | } 586 | }, 587 | "node_modules/@jridgewell/resolve-uri": { 588 | "version": "3.1.2", 589 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 590 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 591 | "dev": true, 592 | "engines": { 593 | "node": ">=6.0.0" 594 | } 595 | }, 596 | "node_modules/@jridgewell/set-array": { 597 | "version": "1.2.1", 598 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 599 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 600 | "dev": true, 601 | "engines": { 602 | "node": ">=6.0.0" 603 | } 604 | }, 605 | "node_modules/@jridgewell/source-map": { 606 | "version": "0.3.2", 607 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", 608 | "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", 609 | "dev": true, 610 | "optional": true, 611 | "peer": true, 612 | "dependencies": { 613 | "@jridgewell/gen-mapping": "^0.3.0", 614 | "@jridgewell/trace-mapping": "^0.3.9" 615 | } 616 | }, 617 | "node_modules/@jridgewell/sourcemap-codec": { 618 | "version": "1.5.0", 619 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 620 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 621 | "dev": true 622 | }, 623 | "node_modules/@jridgewell/trace-mapping": { 624 | "version": "0.3.25", 625 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 626 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 627 | "dev": true, 628 | "dependencies": { 629 | "@jridgewell/resolve-uri": "^3.1.0", 630 | "@jridgewell/sourcemap-codec": "^1.4.14" 631 | } 632 | }, 633 | "node_modules/@pkgjs/parseargs": { 634 | "version": "0.11.0", 635 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 636 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 637 | "dev": true, 638 | "optional": true, 639 | "engines": { 640 | "node": ">=14" 641 | } 642 | }, 643 | "node_modules/@rollup/rollup-android-arm-eabi": { 644 | "version": "4.22.5", 645 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.5.tgz", 646 | "integrity": "sha512-SU5cvamg0Eyu/F+kLeMXS7GoahL+OoizlclVFX3l5Ql6yNlywJJ0OuqTzUx0v+aHhPHEB/56CT06GQrRrGNYww==", 647 | "cpu": [ 648 | "arm" 649 | ], 650 | "dev": true, 651 | "optional": true, 652 | "os": [ 653 | "android" 654 | ] 655 | }, 656 | "node_modules/@rollup/rollup-android-arm64": { 657 | "version": "4.22.5", 658 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.5.tgz", 659 | "integrity": "sha512-S4pit5BP6E5R5C8S6tgU/drvgjtYW76FBuG6+ibG3tMvlD1h9LHVF9KmlmaUBQ8Obou7hEyS+0w+IR/VtxwNMQ==", 660 | "cpu": [ 661 | "arm64" 662 | ], 663 | "dev": true, 664 | "optional": true, 665 | "os": [ 666 | "android" 667 | ] 668 | }, 669 | "node_modules/@rollup/rollup-darwin-arm64": { 670 | "version": "4.22.5", 671 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.5.tgz", 672 | "integrity": "sha512-250ZGg4ipTL0TGvLlfACkIxS9+KLtIbn7BCZjsZj88zSg2Lvu3Xdw6dhAhfe/FjjXPVNCtcSp+WZjVsD3a/Zlw==", 673 | "cpu": [ 674 | "arm64" 675 | ], 676 | "dev": true, 677 | "optional": true, 678 | "os": [ 679 | "darwin" 680 | ] 681 | }, 682 | "node_modules/@rollup/rollup-darwin-x64": { 683 | "version": "4.22.5", 684 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.5.tgz", 685 | "integrity": "sha512-D8brJEFg5D+QxFcW6jYANu+Rr9SlKtTenmsX5hOSzNYVrK5oLAEMTUgKWYJP+wdKyCdeSwnapLsn+OVRFycuQg==", 686 | "cpu": [ 687 | "x64" 688 | ], 689 | "dev": true, 690 | "optional": true, 691 | "os": [ 692 | "darwin" 693 | ] 694 | }, 695 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 696 | "version": "4.22.5", 697 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.5.tgz", 698 | "integrity": "sha512-PNqXYmdNFyWNg0ma5LdY8wP+eQfdvyaBAojAXgO7/gs0Q/6TQJVXAXe8gwW9URjbS0YAammur0fynYGiWsKlXw==", 699 | "cpu": [ 700 | "arm" 701 | ], 702 | "dev": true, 703 | "optional": true, 704 | "os": [ 705 | "linux" 706 | ] 707 | }, 708 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 709 | "version": "4.22.5", 710 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.5.tgz", 711 | "integrity": "sha512-kSSCZOKz3HqlrEuwKd9TYv7vxPYD77vHSUvM2y0YaTGnFc8AdI5TTQRrM1yIp3tXCKrSL9A7JLoILjtad5t8pQ==", 712 | "cpu": [ 713 | "arm" 714 | ], 715 | "dev": true, 716 | "optional": true, 717 | "os": [ 718 | "linux" 719 | ] 720 | }, 721 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 722 | "version": "4.22.5", 723 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.5.tgz", 724 | "integrity": "sha512-oTXQeJHRbOnwRnRffb6bmqmUugz0glXaPyspp4gbQOPVApdpRrY/j7KP3lr7M8kTfQTyrBUzFjj5EuHAhqH4/w==", 725 | "cpu": [ 726 | "arm64" 727 | ], 728 | "dev": true, 729 | "optional": true, 730 | "os": [ 731 | "linux" 732 | ] 733 | }, 734 | "node_modules/@rollup/rollup-linux-arm64-musl": { 735 | "version": "4.22.5", 736 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.5.tgz", 737 | "integrity": "sha512-qnOTIIs6tIGFKCHdhYitgC2XQ2X25InIbZFor5wh+mALH84qnFHvc+vmWUpyX97B0hNvwNUL4B+MB8vJvH65Fw==", 738 | "cpu": [ 739 | "arm64" 740 | ], 741 | "dev": true, 742 | "optional": true, 743 | "os": [ 744 | "linux" 745 | ] 746 | }, 747 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 748 | "version": "4.22.5", 749 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.5.tgz", 750 | "integrity": "sha512-TMYu+DUdNlgBXING13rHSfUc3Ky5nLPbWs4bFnT+R6Vu3OvXkTkixvvBKk8uO4MT5Ab6lC3U7x8S8El2q5o56w==", 751 | "cpu": [ 752 | "ppc64" 753 | ], 754 | "dev": true, 755 | "optional": true, 756 | "os": [ 757 | "linux" 758 | ] 759 | }, 760 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 761 | "version": "4.22.5", 762 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.5.tgz", 763 | "integrity": "sha512-PTQq1Kz22ZRvuhr3uURH+U/Q/a0pbxJoICGSprNLAoBEkyD3Sh9qP5I0Asn0y0wejXQBbsVMRZRxlbGFD9OK4A==", 764 | "cpu": [ 765 | "riscv64" 766 | ], 767 | "dev": true, 768 | "optional": true, 769 | "os": [ 770 | "linux" 771 | ] 772 | }, 773 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 774 | "version": "4.22.5", 775 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.5.tgz", 776 | "integrity": "sha512-bR5nCojtpuMss6TDEmf/jnBnzlo+6n1UhgwqUvRoe4VIotC7FG1IKkyJbwsT7JDsF2jxR+NTnuOwiGv0hLyDoQ==", 777 | "cpu": [ 778 | "s390x" 779 | ], 780 | "dev": true, 781 | "optional": true, 782 | "os": [ 783 | "linux" 784 | ] 785 | }, 786 | "node_modules/@rollup/rollup-linux-x64-gnu": { 787 | "version": "4.22.5", 788 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.5.tgz", 789 | "integrity": "sha512-N0jPPhHjGShcB9/XXZQWuWBKZQnC1F36Ce3sDqWpujsGjDz/CQtOL9LgTrJ+rJC8MJeesMWrMWVLKKNR/tMOCA==", 790 | "cpu": [ 791 | "x64" 792 | ], 793 | "dev": true, 794 | "optional": true, 795 | "os": [ 796 | "linux" 797 | ] 798 | }, 799 | "node_modules/@rollup/rollup-linux-x64-musl": { 800 | "version": "4.22.5", 801 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.5.tgz", 802 | "integrity": "sha512-uBa2e28ohzNNwjr6Uxm4XyaA1M/8aTgfF2T7UIlElLaeXkgpmIJ2EitVNQxjO9xLLLy60YqAgKn/AqSpCUkE9g==", 803 | "cpu": [ 804 | "x64" 805 | ], 806 | "dev": true, 807 | "optional": true, 808 | "os": [ 809 | "linux" 810 | ] 811 | }, 812 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 813 | "version": "4.22.5", 814 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.5.tgz", 815 | "integrity": "sha512-RXT8S1HP8AFN/Kr3tg4fuYrNxZ/pZf1HemC5Tsddc6HzgGnJm0+Lh5rAHJkDuW3StI0ynNXukidROMXYl6ew8w==", 816 | "cpu": [ 817 | "arm64" 818 | ], 819 | "dev": true, 820 | "optional": true, 821 | "os": [ 822 | "win32" 823 | ] 824 | }, 825 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 826 | "version": "4.22.5", 827 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.5.tgz", 828 | "integrity": "sha512-ElTYOh50InL8kzyUD6XsnPit7jYCKrphmddKAe1/Ytt74apOxDq5YEcbsiKs0fR3vff3jEneMM+3I7jbqaMyBg==", 829 | "cpu": [ 830 | "ia32" 831 | ], 832 | "dev": true, 833 | "optional": true, 834 | "os": [ 835 | "win32" 836 | ] 837 | }, 838 | "node_modules/@rollup/rollup-win32-x64-msvc": { 839 | "version": "4.22.5", 840 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.5.tgz", 841 | "integrity": "sha512-+lvL/4mQxSV8MukpkKyyvfwhH266COcWlXE/1qxwN08ajovta3459zrjLghYMgDerlzNwLAcFpvU+WWE5y6nAQ==", 842 | "cpu": [ 843 | "x64" 844 | ], 845 | "dev": true, 846 | "optional": true, 847 | "os": [ 848 | "win32" 849 | ] 850 | }, 851 | "node_modules/@types/node": { 852 | "version": "22.7.3", 853 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.3.tgz", 854 | "integrity": "sha512-qXKfhXXqGTyBskvWEzJZPUxSslAiLaB6JGP1ic/XTH9ctGgzdgYguuLP1C601aRTSDNlLb0jbKqXjZ48GNraSA==", 855 | "dev": true, 856 | "optional": true, 857 | "peer": true, 858 | "dependencies": { 859 | "undici-types": "~6.19.2" 860 | } 861 | }, 862 | "node_modules/@types/tinycolor2": { 863 | "version": "1.4.3", 864 | "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.3.tgz", 865 | "integrity": "sha512-Kf1w9NE5HEgGxCRyIcRXR/ZYtDv0V8FVPtYHwLxl0O+maGX0erE77pQlD0gpP+/KByMZ87mOA79SjifhSB3PjQ==" 866 | }, 867 | "node_modules/@vitest/coverage-v8": { 868 | "version": "2.1.1", 869 | "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.1.tgz", 870 | "integrity": "sha512-md/A7A3c42oTT8JUHSqjP5uKTWJejzUW4jalpvs+rZ27gsURsMU8DEb+8Jf8C6Kj2gwfSHJqobDNBuoqlm0cFw==", 871 | "dev": true, 872 | "dependencies": { 873 | "@ampproject/remapping": "^2.3.0", 874 | "@bcoe/v8-coverage": "^0.2.3", 875 | "debug": "^4.3.6", 876 | "istanbul-lib-coverage": "^3.2.2", 877 | "istanbul-lib-report": "^3.0.1", 878 | "istanbul-lib-source-maps": "^5.0.6", 879 | "istanbul-reports": "^3.1.7", 880 | "magic-string": "^0.30.11", 881 | "magicast": "^0.3.4", 882 | "std-env": "^3.7.0", 883 | "test-exclude": "^7.0.1", 884 | "tinyrainbow": "^1.2.0" 885 | }, 886 | "funding": { 887 | "url": "https://opencollective.com/vitest" 888 | }, 889 | "peerDependencies": { 890 | "@vitest/browser": "2.1.1", 891 | "vitest": "2.1.1" 892 | }, 893 | "peerDependenciesMeta": { 894 | "@vitest/browser": { 895 | "optional": true 896 | } 897 | } 898 | }, 899 | "node_modules/@vitest/coverage-v8/node_modules/brace-expansion": { 900 | "version": "2.0.1", 901 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 902 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 903 | "dev": true, 904 | "dependencies": { 905 | "balanced-match": "^1.0.0" 906 | } 907 | }, 908 | "node_modules/@vitest/coverage-v8/node_modules/foreground-child": { 909 | "version": "3.3.0", 910 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", 911 | "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", 912 | "dev": true, 913 | "dependencies": { 914 | "cross-spawn": "^7.0.0", 915 | "signal-exit": "^4.0.1" 916 | }, 917 | "engines": { 918 | "node": ">=14" 919 | }, 920 | "funding": { 921 | "url": "https://github.com/sponsors/isaacs" 922 | } 923 | }, 924 | "node_modules/@vitest/coverage-v8/node_modules/glob": { 925 | "version": "10.4.5", 926 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", 927 | "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", 928 | "dev": true, 929 | "dependencies": { 930 | "foreground-child": "^3.1.0", 931 | "jackspeak": "^3.1.2", 932 | "minimatch": "^9.0.4", 933 | "minipass": "^7.1.2", 934 | "package-json-from-dist": "^1.0.0", 935 | "path-scurry": "^1.11.1" 936 | }, 937 | "bin": { 938 | "glob": "dist/esm/bin.mjs" 939 | }, 940 | "funding": { 941 | "url": "https://github.com/sponsors/isaacs" 942 | } 943 | }, 944 | "node_modules/@vitest/coverage-v8/node_modules/minimatch": { 945 | "version": "9.0.5", 946 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 947 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 948 | "dev": true, 949 | "dependencies": { 950 | "brace-expansion": "^2.0.1" 951 | }, 952 | "engines": { 953 | "node": ">=16 || 14 >=14.17" 954 | }, 955 | "funding": { 956 | "url": "https://github.com/sponsors/isaacs" 957 | } 958 | }, 959 | "node_modules/@vitest/coverage-v8/node_modules/signal-exit": { 960 | "version": "4.1.0", 961 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 962 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 963 | "dev": true, 964 | "engines": { 965 | "node": ">=14" 966 | }, 967 | "funding": { 968 | "url": "https://github.com/sponsors/isaacs" 969 | } 970 | }, 971 | "node_modules/@vitest/coverage-v8/node_modules/test-exclude": { 972 | "version": "7.0.1", 973 | "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", 974 | "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", 975 | "dev": true, 976 | "dependencies": { 977 | "@istanbuljs/schema": "^0.1.2", 978 | "glob": "^10.4.1", 979 | "minimatch": "^9.0.4" 980 | }, 981 | "engines": { 982 | "node": ">=18" 983 | } 984 | }, 985 | "node_modules/@vitest/expect": { 986 | "version": "2.1.1", 987 | "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.1.tgz", 988 | "integrity": "sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==", 989 | "dev": true, 990 | "dependencies": { 991 | "@vitest/spy": "2.1.1", 992 | "@vitest/utils": "2.1.1", 993 | "chai": "^5.1.1", 994 | "tinyrainbow": "^1.2.0" 995 | }, 996 | "funding": { 997 | "url": "https://opencollective.com/vitest" 998 | } 999 | }, 1000 | "node_modules/@vitest/pretty-format": { 1001 | "version": "2.1.1", 1002 | "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.1.tgz", 1003 | "integrity": "sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==", 1004 | "dev": true, 1005 | "dependencies": { 1006 | "tinyrainbow": "^1.2.0" 1007 | }, 1008 | "funding": { 1009 | "url": "https://opencollective.com/vitest" 1010 | } 1011 | }, 1012 | "node_modules/@vitest/runner": { 1013 | "version": "2.1.1", 1014 | "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.1.tgz", 1015 | "integrity": "sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==", 1016 | "dev": true, 1017 | "dependencies": { 1018 | "@vitest/utils": "2.1.1", 1019 | "pathe": "^1.1.2" 1020 | }, 1021 | "funding": { 1022 | "url": "https://opencollective.com/vitest" 1023 | } 1024 | }, 1025 | "node_modules/@vitest/snapshot": { 1026 | "version": "2.1.1", 1027 | "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.1.tgz", 1028 | "integrity": "sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==", 1029 | "dev": true, 1030 | "dependencies": { 1031 | "@vitest/pretty-format": "2.1.1", 1032 | "magic-string": "^0.30.11", 1033 | "pathe": "^1.1.2" 1034 | }, 1035 | "funding": { 1036 | "url": "https://opencollective.com/vitest" 1037 | } 1038 | }, 1039 | "node_modules/@vitest/spy": { 1040 | "version": "2.1.1", 1041 | "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.1.tgz", 1042 | "integrity": "sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==", 1043 | "dev": true, 1044 | "dependencies": { 1045 | "tinyspy": "^3.0.0" 1046 | }, 1047 | "funding": { 1048 | "url": "https://opencollective.com/vitest" 1049 | } 1050 | }, 1051 | "node_modules/@vitest/utils": { 1052 | "version": "2.1.1", 1053 | "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.1.tgz", 1054 | "integrity": "sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==", 1055 | "dev": true, 1056 | "dependencies": { 1057 | "@vitest/pretty-format": "2.1.1", 1058 | "loupe": "^3.1.1", 1059 | "tinyrainbow": "^1.2.0" 1060 | }, 1061 | "funding": { 1062 | "url": "https://opencollective.com/vitest" 1063 | } 1064 | }, 1065 | "node_modules/acorn": { 1066 | "version": "8.7.0", 1067 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", 1068 | "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", 1069 | "dev": true, 1070 | "optional": true, 1071 | "peer": true, 1072 | "bin": { 1073 | "acorn": "bin/acorn" 1074 | }, 1075 | "engines": { 1076 | "node": ">=0.4.0" 1077 | } 1078 | }, 1079 | "node_modules/ansi-regex": { 1080 | "version": "5.0.1", 1081 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1082 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1083 | "dev": true, 1084 | "engines": { 1085 | "node": ">=8" 1086 | } 1087 | }, 1088 | "node_modules/ansi-styles": { 1089 | "version": "4.3.0", 1090 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1091 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1092 | "dev": true, 1093 | "dependencies": { 1094 | "color-convert": "^2.0.1" 1095 | }, 1096 | "engines": { 1097 | "node": ">=8" 1098 | }, 1099 | "funding": { 1100 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1101 | } 1102 | }, 1103 | "node_modules/assertion-error": { 1104 | "version": "2.0.1", 1105 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", 1106 | "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", 1107 | "dev": true, 1108 | "engines": { 1109 | "node": ">=12" 1110 | } 1111 | }, 1112 | "node_modules/balanced-match": { 1113 | "version": "1.0.2", 1114 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1115 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1116 | "dev": true 1117 | }, 1118 | "node_modules/braces": { 1119 | "version": "3.0.3", 1120 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 1121 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 1122 | "dev": true, 1123 | "dependencies": { 1124 | "fill-range": "^7.1.1" 1125 | }, 1126 | "engines": { 1127 | "node": ">=8" 1128 | } 1129 | }, 1130 | "node_modules/buffer-from": { 1131 | "version": "1.1.2", 1132 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 1133 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 1134 | "dev": true, 1135 | "optional": true, 1136 | "peer": true 1137 | }, 1138 | "node_modules/cac": { 1139 | "version": "6.7.14", 1140 | "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", 1141 | "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", 1142 | "dev": true, 1143 | "engines": { 1144 | "node": ">=8" 1145 | } 1146 | }, 1147 | "node_modules/chai": { 1148 | "version": "5.1.1", 1149 | "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", 1150 | "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", 1151 | "dev": true, 1152 | "dependencies": { 1153 | "assertion-error": "^2.0.1", 1154 | "check-error": "^2.1.1", 1155 | "deep-eql": "^5.0.1", 1156 | "loupe": "^3.1.0", 1157 | "pathval": "^2.0.0" 1158 | }, 1159 | "engines": { 1160 | "node": ">=12" 1161 | } 1162 | }, 1163 | "node_modules/chalk": { 1164 | "version": "5.3.0", 1165 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", 1166 | "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", 1167 | "engines": { 1168 | "node": "^12.17.0 || ^14.13 || >=16.0.0" 1169 | }, 1170 | "funding": { 1171 | "url": "https://github.com/chalk/chalk?sponsor=1" 1172 | } 1173 | }, 1174 | "node_modules/check-error": { 1175 | "version": "2.1.1", 1176 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", 1177 | "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", 1178 | "dev": true, 1179 | "engines": { 1180 | "node": ">= 16" 1181 | } 1182 | }, 1183 | "node_modules/cli-cursor": { 1184 | "version": "5.0.0", 1185 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", 1186 | "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", 1187 | "dev": true, 1188 | "dependencies": { 1189 | "restore-cursor": "^5.0.0" 1190 | }, 1191 | "engines": { 1192 | "node": ">=18" 1193 | }, 1194 | "funding": { 1195 | "url": "https://github.com/sponsors/sindresorhus" 1196 | } 1197 | }, 1198 | "node_modules/cli-truncate": { 1199 | "version": "4.0.0", 1200 | "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", 1201 | "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", 1202 | "dev": true, 1203 | "dependencies": { 1204 | "slice-ansi": "^5.0.0", 1205 | "string-width": "^7.0.0" 1206 | }, 1207 | "engines": { 1208 | "node": ">=18" 1209 | }, 1210 | "funding": { 1211 | "url": "https://github.com/sponsors/sindresorhus" 1212 | } 1213 | }, 1214 | "node_modules/cli-truncate/node_modules/ansi-regex": { 1215 | "version": "6.1.0", 1216 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 1217 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 1218 | "dev": true, 1219 | "engines": { 1220 | "node": ">=12" 1221 | }, 1222 | "funding": { 1223 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 1224 | } 1225 | }, 1226 | "node_modules/cli-truncate/node_modules/emoji-regex": { 1227 | "version": "10.4.0", 1228 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", 1229 | "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", 1230 | "dev": true 1231 | }, 1232 | "node_modules/cli-truncate/node_modules/string-width": { 1233 | "version": "7.2.0", 1234 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", 1235 | "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", 1236 | "dev": true, 1237 | "dependencies": { 1238 | "emoji-regex": "^10.3.0", 1239 | "get-east-asian-width": "^1.0.0", 1240 | "strip-ansi": "^7.1.0" 1241 | }, 1242 | "engines": { 1243 | "node": ">=18" 1244 | }, 1245 | "funding": { 1246 | "url": "https://github.com/sponsors/sindresorhus" 1247 | } 1248 | }, 1249 | "node_modules/cli-truncate/node_modules/strip-ansi": { 1250 | "version": "7.1.0", 1251 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 1252 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 1253 | "dev": true, 1254 | "dependencies": { 1255 | "ansi-regex": "^6.0.1" 1256 | }, 1257 | "engines": { 1258 | "node": ">=12" 1259 | }, 1260 | "funding": { 1261 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 1262 | } 1263 | }, 1264 | "node_modules/color-convert": { 1265 | "version": "2.0.1", 1266 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1267 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1268 | "dev": true, 1269 | "dependencies": { 1270 | "color-name": "~1.1.4" 1271 | }, 1272 | "engines": { 1273 | "node": ">=7.0.0" 1274 | } 1275 | }, 1276 | "node_modules/color-name": { 1277 | "version": "1.1.4", 1278 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1279 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1280 | "dev": true 1281 | }, 1282 | "node_modules/colorette": { 1283 | "version": "2.0.20", 1284 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", 1285 | "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", 1286 | "dev": true 1287 | }, 1288 | "node_modules/commander": { 1289 | "version": "2.20.3", 1290 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1291 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1292 | "dev": true, 1293 | "optional": true, 1294 | "peer": true 1295 | }, 1296 | "node_modules/cross-spawn": { 1297 | "version": "7.0.3", 1298 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1299 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1300 | "dev": true, 1301 | "dependencies": { 1302 | "path-key": "^3.1.0", 1303 | "shebang-command": "^2.0.0", 1304 | "which": "^2.0.1" 1305 | }, 1306 | "engines": { 1307 | "node": ">= 8" 1308 | } 1309 | }, 1310 | "node_modules/debug": { 1311 | "version": "4.3.7", 1312 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 1313 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 1314 | "dev": true, 1315 | "dependencies": { 1316 | "ms": "^2.1.3" 1317 | }, 1318 | "engines": { 1319 | "node": ">=6.0" 1320 | }, 1321 | "peerDependenciesMeta": { 1322 | "supports-color": { 1323 | "optional": true 1324 | } 1325 | } 1326 | }, 1327 | "node_modules/deep-eql": { 1328 | "version": "5.0.2", 1329 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", 1330 | "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", 1331 | "dev": true, 1332 | "engines": { 1333 | "node": ">=6" 1334 | } 1335 | }, 1336 | "node_modules/eastasianwidth": { 1337 | "version": "0.2.0", 1338 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 1339 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 1340 | "dev": true 1341 | }, 1342 | "node_modules/emoji-regex": { 1343 | "version": "8.0.0", 1344 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1345 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1346 | "dev": true 1347 | }, 1348 | "node_modules/environment": { 1349 | "version": "1.1.0", 1350 | "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", 1351 | "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", 1352 | "dev": true, 1353 | "engines": { 1354 | "node": ">=18" 1355 | }, 1356 | "funding": { 1357 | "url": "https://github.com/sponsors/sindresorhus" 1358 | } 1359 | }, 1360 | "node_modules/esbuild": { 1361 | "version": "0.21.5", 1362 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", 1363 | "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", 1364 | "dev": true, 1365 | "hasInstallScript": true, 1366 | "bin": { 1367 | "esbuild": "bin/esbuild" 1368 | }, 1369 | "engines": { 1370 | "node": ">=12" 1371 | }, 1372 | "optionalDependencies": { 1373 | "@esbuild/aix-ppc64": "0.21.5", 1374 | "@esbuild/android-arm": "0.21.5", 1375 | "@esbuild/android-arm64": "0.21.5", 1376 | "@esbuild/android-x64": "0.21.5", 1377 | "@esbuild/darwin-arm64": "0.21.5", 1378 | "@esbuild/darwin-x64": "0.21.5", 1379 | "@esbuild/freebsd-arm64": "0.21.5", 1380 | "@esbuild/freebsd-x64": "0.21.5", 1381 | "@esbuild/linux-arm": "0.21.5", 1382 | "@esbuild/linux-arm64": "0.21.5", 1383 | "@esbuild/linux-ia32": "0.21.5", 1384 | "@esbuild/linux-loong64": "0.21.5", 1385 | "@esbuild/linux-mips64el": "0.21.5", 1386 | "@esbuild/linux-ppc64": "0.21.5", 1387 | "@esbuild/linux-riscv64": "0.21.5", 1388 | "@esbuild/linux-s390x": "0.21.5", 1389 | "@esbuild/linux-x64": "0.21.5", 1390 | "@esbuild/netbsd-x64": "0.21.5", 1391 | "@esbuild/openbsd-x64": "0.21.5", 1392 | "@esbuild/sunos-x64": "0.21.5", 1393 | "@esbuild/win32-arm64": "0.21.5", 1394 | "@esbuild/win32-ia32": "0.21.5", 1395 | "@esbuild/win32-x64": "0.21.5" 1396 | } 1397 | }, 1398 | "node_modules/estree-walker": { 1399 | "version": "3.0.3", 1400 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", 1401 | "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 1402 | "dev": true, 1403 | "dependencies": { 1404 | "@types/estree": "^1.0.0" 1405 | } 1406 | }, 1407 | "node_modules/estree-walker/node_modules/@types/estree": { 1408 | "version": "1.0.6", 1409 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", 1410 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", 1411 | "dev": true 1412 | }, 1413 | "node_modules/eventemitter3": { 1414 | "version": "5.0.1", 1415 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", 1416 | "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", 1417 | "dev": true 1418 | }, 1419 | "node_modules/fill-range": { 1420 | "version": "7.1.1", 1421 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 1422 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 1423 | "dev": true, 1424 | "dependencies": { 1425 | "to-regex-range": "^5.0.1" 1426 | }, 1427 | "engines": { 1428 | "node": ">=8" 1429 | } 1430 | }, 1431 | "node_modules/fsevents": { 1432 | "version": "2.3.3", 1433 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1434 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1435 | "dev": true, 1436 | "hasInstallScript": true, 1437 | "optional": true, 1438 | "os": [ 1439 | "darwin" 1440 | ], 1441 | "engines": { 1442 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1443 | } 1444 | }, 1445 | "node_modules/get-east-asian-width": { 1446 | "version": "1.2.0", 1447 | "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", 1448 | "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", 1449 | "dev": true, 1450 | "engines": { 1451 | "node": ">=18" 1452 | }, 1453 | "funding": { 1454 | "url": "https://github.com/sponsors/sindresorhus" 1455 | } 1456 | }, 1457 | "node_modules/get-func-name": { 1458 | "version": "2.0.2", 1459 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", 1460 | "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", 1461 | "dev": true, 1462 | "engines": { 1463 | "node": "*" 1464 | } 1465 | }, 1466 | "node_modules/get-stream": { 1467 | "version": "8.0.1", 1468 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", 1469 | "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", 1470 | "dev": true, 1471 | "engines": { 1472 | "node": ">=16" 1473 | }, 1474 | "funding": { 1475 | "url": "https://github.com/sponsors/sindresorhus" 1476 | } 1477 | }, 1478 | "node_modules/html-escaper": { 1479 | "version": "2.0.2", 1480 | "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", 1481 | "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", 1482 | "dev": true 1483 | }, 1484 | "node_modules/husky": { 1485 | "version": "9.1.6", 1486 | "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.6.tgz", 1487 | "integrity": "sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==", 1488 | "dev": true, 1489 | "bin": { 1490 | "husky": "bin.js" 1491 | }, 1492 | "engines": { 1493 | "node": ">=18" 1494 | }, 1495 | "funding": { 1496 | "url": "https://github.com/sponsors/typicode" 1497 | } 1498 | }, 1499 | "node_modules/is-fullwidth-code-point": { 1500 | "version": "3.0.0", 1501 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1502 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1503 | "dev": true, 1504 | "engines": { 1505 | "node": ">=8" 1506 | } 1507 | }, 1508 | "node_modules/is-number": { 1509 | "version": "7.0.0", 1510 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1511 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1512 | "dev": true, 1513 | "engines": { 1514 | "node": ">=0.12.0" 1515 | } 1516 | }, 1517 | "node_modules/isexe": { 1518 | "version": "2.0.0", 1519 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1520 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1521 | "dev": true 1522 | }, 1523 | "node_modules/istanbul-lib-coverage": { 1524 | "version": "3.2.2", 1525 | "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", 1526 | "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", 1527 | "dev": true, 1528 | "engines": { 1529 | "node": ">=8" 1530 | } 1531 | }, 1532 | "node_modules/istanbul-lib-report": { 1533 | "version": "3.0.1", 1534 | "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", 1535 | "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", 1536 | "dev": true, 1537 | "dependencies": { 1538 | "istanbul-lib-coverage": "^3.0.0", 1539 | "make-dir": "^4.0.0", 1540 | "supports-color": "^7.1.0" 1541 | }, 1542 | "engines": { 1543 | "node": ">=10" 1544 | } 1545 | }, 1546 | "node_modules/istanbul-lib-report/node_modules/make-dir": { 1547 | "version": "4.0.0", 1548 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", 1549 | "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", 1550 | "dev": true, 1551 | "dependencies": { 1552 | "semver": "^7.5.3" 1553 | }, 1554 | "engines": { 1555 | "node": ">=10" 1556 | }, 1557 | "funding": { 1558 | "url": "https://github.com/sponsors/sindresorhus" 1559 | } 1560 | }, 1561 | "node_modules/istanbul-lib-source-maps": { 1562 | "version": "5.0.6", 1563 | "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", 1564 | "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", 1565 | "dev": true, 1566 | "dependencies": { 1567 | "@jridgewell/trace-mapping": "^0.3.23", 1568 | "debug": "^4.1.1", 1569 | "istanbul-lib-coverage": "^3.0.0" 1570 | }, 1571 | "engines": { 1572 | "node": ">=10" 1573 | } 1574 | }, 1575 | "node_modules/istanbul-reports": { 1576 | "version": "3.1.7", 1577 | "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", 1578 | "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", 1579 | "dev": true, 1580 | "dependencies": { 1581 | "html-escaper": "^2.0.0", 1582 | "istanbul-lib-report": "^3.0.0" 1583 | }, 1584 | "engines": { 1585 | "node": ">=8" 1586 | } 1587 | }, 1588 | "node_modules/jackspeak": { 1589 | "version": "3.4.3", 1590 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", 1591 | "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", 1592 | "dev": true, 1593 | "dependencies": { 1594 | "@isaacs/cliui": "^8.0.2" 1595 | }, 1596 | "funding": { 1597 | "url": "https://github.com/sponsors/isaacs" 1598 | }, 1599 | "optionalDependencies": { 1600 | "@pkgjs/parseargs": "^0.11.0" 1601 | } 1602 | }, 1603 | "node_modules/lilconfig": { 1604 | "version": "3.1.2", 1605 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", 1606 | "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", 1607 | "dev": true, 1608 | "engines": { 1609 | "node": ">=14" 1610 | }, 1611 | "funding": { 1612 | "url": "https://github.com/sponsors/antonk52" 1613 | } 1614 | }, 1615 | "node_modules/lint-staged": { 1616 | "version": "15.2.10", 1617 | "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", 1618 | "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", 1619 | "dev": true, 1620 | "dependencies": { 1621 | "chalk": "~5.3.0", 1622 | "commander": "~12.1.0", 1623 | "debug": "~4.3.6", 1624 | "execa": "~8.0.1", 1625 | "lilconfig": "~3.1.2", 1626 | "listr2": "~8.2.4", 1627 | "micromatch": "~4.0.8", 1628 | "pidtree": "~0.6.0", 1629 | "string-argv": "~0.3.2", 1630 | "yaml": "~2.5.0" 1631 | }, 1632 | "bin": { 1633 | "lint-staged": "bin/lint-staged.js" 1634 | }, 1635 | "engines": { 1636 | "node": ">=18.12.0" 1637 | }, 1638 | "funding": { 1639 | "url": "https://opencollective.com/lint-staged" 1640 | } 1641 | }, 1642 | "node_modules/lint-staged/node_modules/commander": { 1643 | "version": "12.1.0", 1644 | "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", 1645 | "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", 1646 | "dev": true, 1647 | "engines": { 1648 | "node": ">=18" 1649 | } 1650 | }, 1651 | "node_modules/lint-staged/node_modules/execa": { 1652 | "version": "8.0.1", 1653 | "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", 1654 | "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", 1655 | "dev": true, 1656 | "dependencies": { 1657 | "cross-spawn": "^7.0.3", 1658 | "get-stream": "^8.0.1", 1659 | "human-signals": "^5.0.0", 1660 | "is-stream": "^3.0.0", 1661 | "merge-stream": "^2.0.0", 1662 | "npm-run-path": "^5.1.0", 1663 | "onetime": "^6.0.0", 1664 | "signal-exit": "^4.1.0", 1665 | "strip-final-newline": "^3.0.0" 1666 | }, 1667 | "engines": { 1668 | "node": ">=16.17" 1669 | }, 1670 | "funding": { 1671 | "url": "https://github.com/sindresorhus/execa?sponsor=1" 1672 | } 1673 | }, 1674 | "node_modules/lint-staged/node_modules/human-signals": { 1675 | "version": "5.0.0", 1676 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", 1677 | "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", 1678 | "dev": true, 1679 | "engines": { 1680 | "node": ">=16.17.0" 1681 | } 1682 | }, 1683 | "node_modules/lint-staged/node_modules/is-stream": { 1684 | "version": "3.0.0", 1685 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", 1686 | "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", 1687 | "dev": true, 1688 | "engines": { 1689 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1690 | }, 1691 | "funding": { 1692 | "url": "https://github.com/sponsors/sindresorhus" 1693 | } 1694 | }, 1695 | "node_modules/lint-staged/node_modules/mimic-fn": { 1696 | "version": "4.0.0", 1697 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", 1698 | "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", 1699 | "dev": true, 1700 | "engines": { 1701 | "node": ">=12" 1702 | }, 1703 | "funding": { 1704 | "url": "https://github.com/sponsors/sindresorhus" 1705 | } 1706 | }, 1707 | "node_modules/lint-staged/node_modules/npm-run-path": { 1708 | "version": "5.3.0", 1709 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", 1710 | "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", 1711 | "dev": true, 1712 | "dependencies": { 1713 | "path-key": "^4.0.0" 1714 | }, 1715 | "engines": { 1716 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1717 | }, 1718 | "funding": { 1719 | "url": "https://github.com/sponsors/sindresorhus" 1720 | } 1721 | }, 1722 | "node_modules/lint-staged/node_modules/onetime": { 1723 | "version": "6.0.0", 1724 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", 1725 | "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", 1726 | "dev": true, 1727 | "dependencies": { 1728 | "mimic-fn": "^4.0.0" 1729 | }, 1730 | "engines": { 1731 | "node": ">=12" 1732 | }, 1733 | "funding": { 1734 | "url": "https://github.com/sponsors/sindresorhus" 1735 | } 1736 | }, 1737 | "node_modules/lint-staged/node_modules/path-key": { 1738 | "version": "4.0.0", 1739 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", 1740 | "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", 1741 | "dev": true, 1742 | "engines": { 1743 | "node": ">=12" 1744 | }, 1745 | "funding": { 1746 | "url": "https://github.com/sponsors/sindresorhus" 1747 | } 1748 | }, 1749 | "node_modules/lint-staged/node_modules/signal-exit": { 1750 | "version": "4.1.0", 1751 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 1752 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 1753 | "dev": true, 1754 | "engines": { 1755 | "node": ">=14" 1756 | }, 1757 | "funding": { 1758 | "url": "https://github.com/sponsors/isaacs" 1759 | } 1760 | }, 1761 | "node_modules/lint-staged/node_modules/strip-final-newline": { 1762 | "version": "3.0.0", 1763 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", 1764 | "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", 1765 | "dev": true, 1766 | "engines": { 1767 | "node": ">=12" 1768 | }, 1769 | "funding": { 1770 | "url": "https://github.com/sponsors/sindresorhus" 1771 | } 1772 | }, 1773 | "node_modules/lint-staged/node_modules/yaml": { 1774 | "version": "2.5.1", 1775 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", 1776 | "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", 1777 | "dev": true, 1778 | "bin": { 1779 | "yaml": "bin.mjs" 1780 | }, 1781 | "engines": { 1782 | "node": ">= 14" 1783 | } 1784 | }, 1785 | "node_modules/listr2": { 1786 | "version": "8.2.4", 1787 | "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", 1788 | "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", 1789 | "dev": true, 1790 | "dependencies": { 1791 | "cli-truncate": "^4.0.0", 1792 | "colorette": "^2.0.20", 1793 | "eventemitter3": "^5.0.1", 1794 | "log-update": "^6.1.0", 1795 | "rfdc": "^1.4.1", 1796 | "wrap-ansi": "^9.0.0" 1797 | }, 1798 | "engines": { 1799 | "node": ">=18.0.0" 1800 | } 1801 | }, 1802 | "node_modules/log-update": { 1803 | "version": "6.1.0", 1804 | "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", 1805 | "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", 1806 | "dev": true, 1807 | "dependencies": { 1808 | "ansi-escapes": "^7.0.0", 1809 | "cli-cursor": "^5.0.0", 1810 | "slice-ansi": "^7.1.0", 1811 | "strip-ansi": "^7.1.0", 1812 | "wrap-ansi": "^9.0.0" 1813 | }, 1814 | "engines": { 1815 | "node": ">=18" 1816 | }, 1817 | "funding": { 1818 | "url": "https://github.com/sponsors/sindresorhus" 1819 | } 1820 | }, 1821 | "node_modules/log-update/node_modules/ansi-escapes": { 1822 | "version": "7.0.0", 1823 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", 1824 | "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", 1825 | "dev": true, 1826 | "dependencies": { 1827 | "environment": "^1.0.0" 1828 | }, 1829 | "engines": { 1830 | "node": ">=18" 1831 | }, 1832 | "funding": { 1833 | "url": "https://github.com/sponsors/sindresorhus" 1834 | } 1835 | }, 1836 | "node_modules/log-update/node_modules/ansi-regex": { 1837 | "version": "6.1.0", 1838 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 1839 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 1840 | "dev": true, 1841 | "engines": { 1842 | "node": ">=12" 1843 | }, 1844 | "funding": { 1845 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 1846 | } 1847 | }, 1848 | "node_modules/log-update/node_modules/ansi-styles": { 1849 | "version": "6.2.1", 1850 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 1851 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 1852 | "dev": true, 1853 | "engines": { 1854 | "node": ">=12" 1855 | }, 1856 | "funding": { 1857 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1858 | } 1859 | }, 1860 | "node_modules/log-update/node_modules/is-fullwidth-code-point": { 1861 | "version": "5.0.0", 1862 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", 1863 | "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", 1864 | "dev": true, 1865 | "dependencies": { 1866 | "get-east-asian-width": "^1.0.0" 1867 | }, 1868 | "engines": { 1869 | "node": ">=18" 1870 | }, 1871 | "funding": { 1872 | "url": "https://github.com/sponsors/sindresorhus" 1873 | } 1874 | }, 1875 | "node_modules/log-update/node_modules/slice-ansi": { 1876 | "version": "7.1.0", 1877 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", 1878 | "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", 1879 | "dev": true, 1880 | "dependencies": { 1881 | "ansi-styles": "^6.2.1", 1882 | "is-fullwidth-code-point": "^5.0.0" 1883 | }, 1884 | "engines": { 1885 | "node": ">=18" 1886 | }, 1887 | "funding": { 1888 | "url": "https://github.com/chalk/slice-ansi?sponsor=1" 1889 | } 1890 | }, 1891 | "node_modules/log-update/node_modules/strip-ansi": { 1892 | "version": "7.1.0", 1893 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 1894 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 1895 | "dev": true, 1896 | "dependencies": { 1897 | "ansi-regex": "^6.0.1" 1898 | }, 1899 | "engines": { 1900 | "node": ">=12" 1901 | }, 1902 | "funding": { 1903 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 1904 | } 1905 | }, 1906 | "node_modules/loupe": { 1907 | "version": "3.1.1", 1908 | "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", 1909 | "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", 1910 | "dev": true, 1911 | "dependencies": { 1912 | "get-func-name": "^2.0.1" 1913 | } 1914 | }, 1915 | "node_modules/magic-string": { 1916 | "version": "0.30.11", 1917 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", 1918 | "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", 1919 | "dev": true, 1920 | "dependencies": { 1921 | "@jridgewell/sourcemap-codec": "^1.5.0" 1922 | } 1923 | }, 1924 | "node_modules/magicast": { 1925 | "version": "0.3.5", 1926 | "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", 1927 | "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", 1928 | "dev": true, 1929 | "dependencies": { 1930 | "@babel/parser": "^7.25.4", 1931 | "@babel/types": "^7.25.4", 1932 | "source-map-js": "^1.2.0" 1933 | } 1934 | }, 1935 | "node_modules/merge-stream": { 1936 | "version": "2.0.0", 1937 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1938 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1939 | "dev": true 1940 | }, 1941 | "node_modules/micromatch": { 1942 | "version": "4.0.8", 1943 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 1944 | "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 1945 | "dev": true, 1946 | "dependencies": { 1947 | "braces": "^3.0.3", 1948 | "picomatch": "^2.3.1" 1949 | }, 1950 | "engines": { 1951 | "node": ">=8.6" 1952 | } 1953 | }, 1954 | "node_modules/mimic-function": { 1955 | "version": "5.0.1", 1956 | "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", 1957 | "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", 1958 | "dev": true, 1959 | "engines": { 1960 | "node": ">=18" 1961 | }, 1962 | "funding": { 1963 | "url": "https://github.com/sponsors/sindresorhus" 1964 | } 1965 | }, 1966 | "node_modules/minipass": { 1967 | "version": "7.1.2", 1968 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 1969 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 1970 | "dev": true, 1971 | "engines": { 1972 | "node": ">=16 || 14 >=14.17" 1973 | } 1974 | }, 1975 | "node_modules/ms": { 1976 | "version": "2.1.3", 1977 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1978 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1979 | "dev": true 1980 | }, 1981 | "node_modules/nanoid": { 1982 | "version": "3.3.7", 1983 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 1984 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 1985 | "dev": true, 1986 | "funding": [ 1987 | { 1988 | "type": "github", 1989 | "url": "https://github.com/sponsors/ai" 1990 | } 1991 | ], 1992 | "bin": { 1993 | "nanoid": "bin/nanoid.cjs" 1994 | }, 1995 | "engines": { 1996 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1997 | } 1998 | }, 1999 | "node_modules/package-json-from-dist": { 2000 | "version": "1.0.1", 2001 | "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", 2002 | "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", 2003 | "dev": true 2004 | }, 2005 | "node_modules/path-key": { 2006 | "version": "3.1.1", 2007 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2008 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2009 | "dev": true, 2010 | "engines": { 2011 | "node": ">=8" 2012 | } 2013 | }, 2014 | "node_modules/path-scurry": { 2015 | "version": "1.11.1", 2016 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", 2017 | "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", 2018 | "dev": true, 2019 | "dependencies": { 2020 | "lru-cache": "^10.2.0", 2021 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 2022 | }, 2023 | "engines": { 2024 | "node": ">=16 || 14 >=14.18" 2025 | }, 2026 | "funding": { 2027 | "url": "https://github.com/sponsors/isaacs" 2028 | } 2029 | }, 2030 | "node_modules/path-scurry/node_modules/lru-cache": { 2031 | "version": "10.4.3", 2032 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", 2033 | "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", 2034 | "dev": true 2035 | }, 2036 | "node_modules/pathe": { 2037 | "version": "1.1.2", 2038 | "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", 2039 | "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", 2040 | "dev": true 2041 | }, 2042 | "node_modules/pathval": { 2043 | "version": "2.0.0", 2044 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", 2045 | "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", 2046 | "dev": true, 2047 | "engines": { 2048 | "node": ">= 14.16" 2049 | } 2050 | }, 2051 | "node_modules/picocolors": { 2052 | "version": "1.1.0", 2053 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", 2054 | "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", 2055 | "dev": true 2056 | }, 2057 | "node_modules/picomatch": { 2058 | "version": "2.3.1", 2059 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2060 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2061 | "dev": true, 2062 | "engines": { 2063 | "node": ">=8.6" 2064 | }, 2065 | "funding": { 2066 | "url": "https://github.com/sponsors/jonschlinkert" 2067 | } 2068 | }, 2069 | "node_modules/pidtree": { 2070 | "version": "0.6.0", 2071 | "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", 2072 | "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", 2073 | "dev": true, 2074 | "bin": { 2075 | "pidtree": "bin/pidtree.js" 2076 | }, 2077 | "engines": { 2078 | "node": ">=0.10" 2079 | } 2080 | }, 2081 | "node_modules/postcss": { 2082 | "version": "8.4.47", 2083 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", 2084 | "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", 2085 | "dev": true, 2086 | "funding": [ 2087 | { 2088 | "type": "opencollective", 2089 | "url": "https://opencollective.com/postcss/" 2090 | }, 2091 | { 2092 | "type": "tidelift", 2093 | "url": "https://tidelift.com/funding/github/npm/postcss" 2094 | }, 2095 | { 2096 | "type": "github", 2097 | "url": "https://github.com/sponsors/ai" 2098 | } 2099 | ], 2100 | "dependencies": { 2101 | "nanoid": "^3.3.7", 2102 | "picocolors": "^1.1.0", 2103 | "source-map-js": "^1.2.1" 2104 | }, 2105 | "engines": { 2106 | "node": "^10 || ^12 || >=14" 2107 | } 2108 | }, 2109 | "node_modules/prettier": { 2110 | "version": "3.3.3", 2111 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", 2112 | "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", 2113 | "dev": true, 2114 | "bin": { 2115 | "prettier": "bin/prettier.cjs" 2116 | }, 2117 | "engines": { 2118 | "node": ">=14" 2119 | }, 2120 | "funding": { 2121 | "url": "https://github.com/prettier/prettier?sponsor=1" 2122 | } 2123 | }, 2124 | "node_modules/restore-cursor": { 2125 | "version": "5.1.0", 2126 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", 2127 | "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", 2128 | "dev": true, 2129 | "dependencies": { 2130 | "onetime": "^7.0.0", 2131 | "signal-exit": "^4.1.0" 2132 | }, 2133 | "engines": { 2134 | "node": ">=18" 2135 | }, 2136 | "funding": { 2137 | "url": "https://github.com/sponsors/sindresorhus" 2138 | } 2139 | }, 2140 | "node_modules/restore-cursor/node_modules/onetime": { 2141 | "version": "7.0.0", 2142 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", 2143 | "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", 2144 | "dev": true, 2145 | "dependencies": { 2146 | "mimic-function": "^5.0.0" 2147 | }, 2148 | "engines": { 2149 | "node": ">=18" 2150 | }, 2151 | "funding": { 2152 | "url": "https://github.com/sponsors/sindresorhus" 2153 | } 2154 | }, 2155 | "node_modules/restore-cursor/node_modules/signal-exit": { 2156 | "version": "4.1.0", 2157 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 2158 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 2159 | "dev": true, 2160 | "engines": { 2161 | "node": ">=14" 2162 | }, 2163 | "funding": { 2164 | "url": "https://github.com/sponsors/isaacs" 2165 | } 2166 | }, 2167 | "node_modules/rfdc": { 2168 | "version": "1.4.1", 2169 | "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", 2170 | "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", 2171 | "dev": true 2172 | }, 2173 | "node_modules/rollup": { 2174 | "version": "4.22.5", 2175 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.5.tgz", 2176 | "integrity": "sha512-WoinX7GeQOFMGznEcWA1WrTQCd/tpEbMkc3nuMs9BT0CPjMdSjPMTVClwWd4pgSQwJdP65SK9mTCNvItlr5o7w==", 2177 | "dev": true, 2178 | "dependencies": { 2179 | "@types/estree": "1.0.6" 2180 | }, 2181 | "bin": { 2182 | "rollup": "dist/bin/rollup" 2183 | }, 2184 | "engines": { 2185 | "node": ">=18.0.0", 2186 | "npm": ">=8.0.0" 2187 | }, 2188 | "optionalDependencies": { 2189 | "@rollup/rollup-android-arm-eabi": "4.22.5", 2190 | "@rollup/rollup-android-arm64": "4.22.5", 2191 | "@rollup/rollup-darwin-arm64": "4.22.5", 2192 | "@rollup/rollup-darwin-x64": "4.22.5", 2193 | "@rollup/rollup-linux-arm-gnueabihf": "4.22.5", 2194 | "@rollup/rollup-linux-arm-musleabihf": "4.22.5", 2195 | "@rollup/rollup-linux-arm64-gnu": "4.22.5", 2196 | "@rollup/rollup-linux-arm64-musl": "4.22.5", 2197 | "@rollup/rollup-linux-powerpc64le-gnu": "4.22.5", 2198 | "@rollup/rollup-linux-riscv64-gnu": "4.22.5", 2199 | "@rollup/rollup-linux-s390x-gnu": "4.22.5", 2200 | "@rollup/rollup-linux-x64-gnu": "4.22.5", 2201 | "@rollup/rollup-linux-x64-musl": "4.22.5", 2202 | "@rollup/rollup-win32-arm64-msvc": "4.22.5", 2203 | "@rollup/rollup-win32-ia32-msvc": "4.22.5", 2204 | "@rollup/rollup-win32-x64-msvc": "4.22.5", 2205 | "fsevents": "~2.3.2" 2206 | } 2207 | }, 2208 | "node_modules/rollup/node_modules/@types/estree": { 2209 | "version": "1.0.6", 2210 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", 2211 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", 2212 | "dev": true 2213 | }, 2214 | "node_modules/semver": { 2215 | "version": "7.6.3", 2216 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", 2217 | "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", 2218 | "dev": true, 2219 | "bin": { 2220 | "semver": "bin/semver.js" 2221 | }, 2222 | "engines": { 2223 | "node": ">=10" 2224 | } 2225 | }, 2226 | "node_modules/shebang-command": { 2227 | "version": "2.0.0", 2228 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2229 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2230 | "dev": true, 2231 | "dependencies": { 2232 | "shebang-regex": "^3.0.0" 2233 | }, 2234 | "engines": { 2235 | "node": ">=8" 2236 | } 2237 | }, 2238 | "node_modules/shebang-regex": { 2239 | "version": "3.0.0", 2240 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2241 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2242 | "dev": true, 2243 | "engines": { 2244 | "node": ">=8" 2245 | } 2246 | }, 2247 | "node_modules/siginfo": { 2248 | "version": "2.0.0", 2249 | "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", 2250 | "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", 2251 | "dev": true 2252 | }, 2253 | "node_modules/slice-ansi": { 2254 | "version": "5.0.0", 2255 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", 2256 | "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", 2257 | "dev": true, 2258 | "dependencies": { 2259 | "ansi-styles": "^6.0.0", 2260 | "is-fullwidth-code-point": "^4.0.0" 2261 | }, 2262 | "engines": { 2263 | "node": ">=12" 2264 | }, 2265 | "funding": { 2266 | "url": "https://github.com/chalk/slice-ansi?sponsor=1" 2267 | } 2268 | }, 2269 | "node_modules/slice-ansi/node_modules/ansi-styles": { 2270 | "version": "6.2.1", 2271 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 2272 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 2273 | "dev": true, 2274 | "engines": { 2275 | "node": ">=12" 2276 | }, 2277 | "funding": { 2278 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2279 | } 2280 | }, 2281 | "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { 2282 | "version": "4.0.0", 2283 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", 2284 | "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", 2285 | "dev": true, 2286 | "engines": { 2287 | "node": ">=12" 2288 | }, 2289 | "funding": { 2290 | "url": "https://github.com/sponsors/sindresorhus" 2291 | } 2292 | }, 2293 | "node_modules/source-map": { 2294 | "version": "0.6.1", 2295 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2296 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2297 | "dev": true, 2298 | "optional": true, 2299 | "peer": true, 2300 | "engines": { 2301 | "node": ">=0.10.0" 2302 | } 2303 | }, 2304 | "node_modules/source-map-js": { 2305 | "version": "1.2.1", 2306 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 2307 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 2308 | "dev": true, 2309 | "engines": { 2310 | "node": ">=0.10.0" 2311 | } 2312 | }, 2313 | "node_modules/source-map-support": { 2314 | "version": "0.5.21", 2315 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 2316 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 2317 | "dev": true, 2318 | "optional": true, 2319 | "peer": true, 2320 | "dependencies": { 2321 | "buffer-from": "^1.0.0", 2322 | "source-map": "^0.6.0" 2323 | } 2324 | }, 2325 | "node_modules/stackback": { 2326 | "version": "0.0.2", 2327 | "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", 2328 | "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", 2329 | "dev": true 2330 | }, 2331 | "node_modules/std-env": { 2332 | "version": "3.7.0", 2333 | "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", 2334 | "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", 2335 | "dev": true 2336 | }, 2337 | "node_modules/string-argv": { 2338 | "version": "0.3.2", 2339 | "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", 2340 | "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", 2341 | "dev": true, 2342 | "engines": { 2343 | "node": ">=0.6.19" 2344 | } 2345 | }, 2346 | "node_modules/string-width": { 2347 | "version": "4.2.3", 2348 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2349 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2350 | "dev": true, 2351 | "dependencies": { 2352 | "emoji-regex": "^8.0.0", 2353 | "is-fullwidth-code-point": "^3.0.0", 2354 | "strip-ansi": "^6.0.1" 2355 | }, 2356 | "engines": { 2357 | "node": ">=8" 2358 | } 2359 | }, 2360 | "node_modules/string-width-cjs": { 2361 | "name": "string-width", 2362 | "version": "4.2.3", 2363 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2364 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2365 | "dev": true, 2366 | "dependencies": { 2367 | "emoji-regex": "^8.0.0", 2368 | "is-fullwidth-code-point": "^3.0.0", 2369 | "strip-ansi": "^6.0.1" 2370 | }, 2371 | "engines": { 2372 | "node": ">=8" 2373 | } 2374 | }, 2375 | "node_modules/strip-ansi": { 2376 | "version": "6.0.1", 2377 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2378 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2379 | "dev": true, 2380 | "dependencies": { 2381 | "ansi-regex": "^5.0.1" 2382 | }, 2383 | "engines": { 2384 | "node": ">=8" 2385 | } 2386 | }, 2387 | "node_modules/strip-ansi-cjs": { 2388 | "name": "strip-ansi", 2389 | "version": "6.0.1", 2390 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2391 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2392 | "dev": true, 2393 | "dependencies": { 2394 | "ansi-regex": "^5.0.1" 2395 | }, 2396 | "engines": { 2397 | "node": ">=8" 2398 | } 2399 | }, 2400 | "node_modules/supports-color": { 2401 | "version": "7.2.0", 2402 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2403 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2404 | "dev": true, 2405 | "dependencies": { 2406 | "has-flag": "^4.0.0" 2407 | }, 2408 | "engines": { 2409 | "node": ">=8" 2410 | } 2411 | }, 2412 | "node_modules/supports-color/node_modules/has-flag": { 2413 | "version": "4.0.0", 2414 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2415 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2416 | "dev": true, 2417 | "engines": { 2418 | "node": ">=8" 2419 | } 2420 | }, 2421 | "node_modules/terser": { 2422 | "version": "5.15.0", 2423 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz", 2424 | "integrity": "sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==", 2425 | "dev": true, 2426 | "optional": true, 2427 | "peer": true, 2428 | "dependencies": { 2429 | "@jridgewell/source-map": "^0.3.2", 2430 | "acorn": "^8.5.0", 2431 | "commander": "^2.20.0", 2432 | "source-map-support": "~0.5.20" 2433 | }, 2434 | "bin": { 2435 | "terser": "bin/terser" 2436 | }, 2437 | "engines": { 2438 | "node": ">=10" 2439 | } 2440 | }, 2441 | "node_modules/tinybench": { 2442 | "version": "2.9.0", 2443 | "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", 2444 | "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", 2445 | "dev": true 2446 | }, 2447 | "node_modules/tinycolor2": { 2448 | "version": "1.4.2", 2449 | "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", 2450 | "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", 2451 | "engines": { 2452 | "node": "*" 2453 | } 2454 | }, 2455 | "node_modules/tinyexec": { 2456 | "version": "0.3.0", 2457 | "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.0.tgz", 2458 | "integrity": "sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==", 2459 | "dev": true 2460 | }, 2461 | "node_modules/tinygradient": { 2462 | "version": "1.1.5", 2463 | "resolved": "https://registry.npmjs.org/tinygradient/-/tinygradient-1.1.5.tgz", 2464 | "integrity": "sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==", 2465 | "dependencies": { 2466 | "@types/tinycolor2": "^1.4.0", 2467 | "tinycolor2": "^1.0.0" 2468 | } 2469 | }, 2470 | "node_modules/tinypool": { 2471 | "version": "1.0.1", 2472 | "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz", 2473 | "integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==", 2474 | "dev": true, 2475 | "engines": { 2476 | "node": "^18.0.0 || >=20.0.0" 2477 | } 2478 | }, 2479 | "node_modules/tinyrainbow": { 2480 | "version": "1.2.0", 2481 | "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", 2482 | "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", 2483 | "dev": true, 2484 | "engines": { 2485 | "node": ">=14.0.0" 2486 | } 2487 | }, 2488 | "node_modules/tinyspy": { 2489 | "version": "3.0.2", 2490 | "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", 2491 | "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", 2492 | "dev": true, 2493 | "engines": { 2494 | "node": ">=14.0.0" 2495 | } 2496 | }, 2497 | "node_modules/to-fast-properties": { 2498 | "version": "2.0.0", 2499 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 2500 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", 2501 | "dev": true, 2502 | "engines": { 2503 | "node": ">=4" 2504 | } 2505 | }, 2506 | "node_modules/to-regex-range": { 2507 | "version": "5.0.1", 2508 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2509 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2510 | "dev": true, 2511 | "dependencies": { 2512 | "is-number": "^7.0.0" 2513 | }, 2514 | "engines": { 2515 | "node": ">=8.0" 2516 | } 2517 | }, 2518 | "node_modules/typescript": { 2519 | "version": "5.6.2", 2520 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", 2521 | "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", 2522 | "dev": true, 2523 | "bin": { 2524 | "tsc": "bin/tsc", 2525 | "tsserver": "bin/tsserver" 2526 | }, 2527 | "engines": { 2528 | "node": ">=14.17" 2529 | } 2530 | }, 2531 | "node_modules/undici-types": { 2532 | "version": "6.19.8", 2533 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 2534 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", 2535 | "dev": true, 2536 | "optional": true, 2537 | "peer": true 2538 | }, 2539 | "node_modules/vite": { 2540 | "version": "5.4.8", 2541 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", 2542 | "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", 2543 | "dev": true, 2544 | "dependencies": { 2545 | "esbuild": "^0.21.3", 2546 | "postcss": "^8.4.43", 2547 | "rollup": "^4.20.0" 2548 | }, 2549 | "bin": { 2550 | "vite": "bin/vite.js" 2551 | }, 2552 | "engines": { 2553 | "node": "^18.0.0 || >=20.0.0" 2554 | }, 2555 | "funding": { 2556 | "url": "https://github.com/vitejs/vite?sponsor=1" 2557 | }, 2558 | "optionalDependencies": { 2559 | "fsevents": "~2.3.3" 2560 | }, 2561 | "peerDependencies": { 2562 | "@types/node": "^18.0.0 || >=20.0.0", 2563 | "less": "*", 2564 | "lightningcss": "^1.21.0", 2565 | "sass": "*", 2566 | "sass-embedded": "*", 2567 | "stylus": "*", 2568 | "sugarss": "*", 2569 | "terser": "^5.4.0" 2570 | }, 2571 | "peerDependenciesMeta": { 2572 | "@types/node": { 2573 | "optional": true 2574 | }, 2575 | "less": { 2576 | "optional": true 2577 | }, 2578 | "lightningcss": { 2579 | "optional": true 2580 | }, 2581 | "sass": { 2582 | "optional": true 2583 | }, 2584 | "sass-embedded": { 2585 | "optional": true 2586 | }, 2587 | "stylus": { 2588 | "optional": true 2589 | }, 2590 | "sugarss": { 2591 | "optional": true 2592 | }, 2593 | "terser": { 2594 | "optional": true 2595 | } 2596 | } 2597 | }, 2598 | "node_modules/vite-node": { 2599 | "version": "2.1.1", 2600 | "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.1.tgz", 2601 | "integrity": "sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==", 2602 | "dev": true, 2603 | "dependencies": { 2604 | "cac": "^6.7.14", 2605 | "debug": "^4.3.6", 2606 | "pathe": "^1.1.2", 2607 | "vite": "^5.0.0" 2608 | }, 2609 | "bin": { 2610 | "vite-node": "vite-node.mjs" 2611 | }, 2612 | "engines": { 2613 | "node": "^18.0.0 || >=20.0.0" 2614 | }, 2615 | "funding": { 2616 | "url": "https://opencollective.com/vitest" 2617 | } 2618 | }, 2619 | "node_modules/vitest": { 2620 | "version": "2.1.1", 2621 | "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.1.tgz", 2622 | "integrity": "sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==", 2623 | "dev": true, 2624 | "dependencies": { 2625 | "@vitest/expect": "2.1.1", 2626 | "@vitest/mocker": "2.1.1", 2627 | "@vitest/pretty-format": "^2.1.1", 2628 | "@vitest/runner": "2.1.1", 2629 | "@vitest/snapshot": "2.1.1", 2630 | "@vitest/spy": "2.1.1", 2631 | "@vitest/utils": "2.1.1", 2632 | "chai": "^5.1.1", 2633 | "debug": "^4.3.6", 2634 | "magic-string": "^0.30.11", 2635 | "pathe": "^1.1.2", 2636 | "std-env": "^3.7.0", 2637 | "tinybench": "^2.9.0", 2638 | "tinyexec": "^0.3.0", 2639 | "tinypool": "^1.0.0", 2640 | "tinyrainbow": "^1.2.0", 2641 | "vite": "^5.0.0", 2642 | "vite-node": "2.1.1", 2643 | "why-is-node-running": "^2.3.0" 2644 | }, 2645 | "bin": { 2646 | "vitest": "vitest.mjs" 2647 | }, 2648 | "engines": { 2649 | "node": "^18.0.0 || >=20.0.0" 2650 | }, 2651 | "funding": { 2652 | "url": "https://opencollective.com/vitest" 2653 | }, 2654 | "peerDependencies": { 2655 | "@edge-runtime/vm": "*", 2656 | "@types/node": "^18.0.0 || >=20.0.0", 2657 | "@vitest/browser": "2.1.1", 2658 | "@vitest/ui": "2.1.1", 2659 | "happy-dom": "*", 2660 | "jsdom": "*" 2661 | }, 2662 | "peerDependenciesMeta": { 2663 | "@edge-runtime/vm": { 2664 | "optional": true 2665 | }, 2666 | "@types/node": { 2667 | "optional": true 2668 | }, 2669 | "@vitest/browser": { 2670 | "optional": true 2671 | }, 2672 | "@vitest/ui": { 2673 | "optional": true 2674 | }, 2675 | "happy-dom": { 2676 | "optional": true 2677 | }, 2678 | "jsdom": { 2679 | "optional": true 2680 | } 2681 | } 2682 | }, 2683 | "node_modules/vitest/node_modules/@vitest/mocker": { 2684 | "version": "2.1.1", 2685 | "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.1.tgz", 2686 | "integrity": "sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==", 2687 | "dev": true, 2688 | "dependencies": { 2689 | "@vitest/spy": "^2.1.0-beta.1", 2690 | "estree-walker": "^3.0.3", 2691 | "magic-string": "^0.30.11" 2692 | }, 2693 | "funding": { 2694 | "url": "https://opencollective.com/vitest" 2695 | }, 2696 | "peerDependencies": { 2697 | "@vitest/spy": "2.1.1", 2698 | "msw": "^2.3.5", 2699 | "vite": "^5.0.0" 2700 | }, 2701 | "peerDependenciesMeta": { 2702 | "msw": { 2703 | "optional": true 2704 | }, 2705 | "vite": { 2706 | "optional": true 2707 | } 2708 | } 2709 | }, 2710 | "node_modules/which": { 2711 | "version": "2.0.2", 2712 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2713 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2714 | "dev": true, 2715 | "dependencies": { 2716 | "isexe": "^2.0.0" 2717 | }, 2718 | "bin": { 2719 | "node-which": "bin/node-which" 2720 | }, 2721 | "engines": { 2722 | "node": ">= 8" 2723 | } 2724 | }, 2725 | "node_modules/why-is-node-running": { 2726 | "version": "2.3.0", 2727 | "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", 2728 | "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", 2729 | "dev": true, 2730 | "dependencies": { 2731 | "siginfo": "^2.0.0", 2732 | "stackback": "0.0.2" 2733 | }, 2734 | "bin": { 2735 | "why-is-node-running": "cli.js" 2736 | }, 2737 | "engines": { 2738 | "node": ">=8" 2739 | } 2740 | }, 2741 | "node_modules/wrap-ansi": { 2742 | "version": "9.0.0", 2743 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", 2744 | "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", 2745 | "dev": true, 2746 | "dependencies": { 2747 | "ansi-styles": "^6.2.1", 2748 | "string-width": "^7.0.0", 2749 | "strip-ansi": "^7.1.0" 2750 | }, 2751 | "engines": { 2752 | "node": ">=18" 2753 | }, 2754 | "funding": { 2755 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2756 | } 2757 | }, 2758 | "node_modules/wrap-ansi-cjs": { 2759 | "name": "wrap-ansi", 2760 | "version": "7.0.0", 2761 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2762 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2763 | "dev": true, 2764 | "dependencies": { 2765 | "ansi-styles": "^4.0.0", 2766 | "string-width": "^4.1.0", 2767 | "strip-ansi": "^6.0.0" 2768 | }, 2769 | "engines": { 2770 | "node": ">=10" 2771 | }, 2772 | "funding": { 2773 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2774 | } 2775 | }, 2776 | "node_modules/wrap-ansi/node_modules/ansi-regex": { 2777 | "version": "6.1.0", 2778 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 2779 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 2780 | "dev": true, 2781 | "engines": { 2782 | "node": ">=12" 2783 | }, 2784 | "funding": { 2785 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 2786 | } 2787 | }, 2788 | "node_modules/wrap-ansi/node_modules/ansi-styles": { 2789 | "version": "6.2.1", 2790 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 2791 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 2792 | "dev": true, 2793 | "engines": { 2794 | "node": ">=12" 2795 | }, 2796 | "funding": { 2797 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2798 | } 2799 | }, 2800 | "node_modules/wrap-ansi/node_modules/emoji-regex": { 2801 | "version": "10.4.0", 2802 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", 2803 | "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", 2804 | "dev": true 2805 | }, 2806 | "node_modules/wrap-ansi/node_modules/string-width": { 2807 | "version": "7.2.0", 2808 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", 2809 | "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", 2810 | "dev": true, 2811 | "dependencies": { 2812 | "emoji-regex": "^10.3.0", 2813 | "get-east-asian-width": "^1.0.0", 2814 | "strip-ansi": "^7.1.0" 2815 | }, 2816 | "engines": { 2817 | "node": ">=18" 2818 | }, 2819 | "funding": { 2820 | "url": "https://github.com/sponsors/sindresorhus" 2821 | } 2822 | }, 2823 | "node_modules/wrap-ansi/node_modules/strip-ansi": { 2824 | "version": "7.1.0", 2825 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 2826 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 2827 | "dev": true, 2828 | "dependencies": { 2829 | "ansi-regex": "^6.0.1" 2830 | }, 2831 | "engines": { 2832 | "node": ">=12" 2833 | }, 2834 | "funding": { 2835 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 2836 | } 2837 | } 2838 | }, 2839 | "dependencies": { 2840 | "@ampproject/remapping": { 2841 | "version": "2.3.0", 2842 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", 2843 | "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", 2844 | "dev": true, 2845 | "requires": { 2846 | "@jridgewell/gen-mapping": "^0.3.5", 2847 | "@jridgewell/trace-mapping": "^0.3.24" 2848 | } 2849 | }, 2850 | "@babel/helper-string-parser": { 2851 | "version": "7.24.8", 2852 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", 2853 | "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", 2854 | "dev": true 2855 | }, 2856 | "@babel/helper-validator-identifier": { 2857 | "version": "7.24.7", 2858 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", 2859 | "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", 2860 | "dev": true 2861 | }, 2862 | "@babel/parser": { 2863 | "version": "7.25.6", 2864 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", 2865 | "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", 2866 | "dev": true, 2867 | "requires": { 2868 | "@babel/types": "^7.25.6" 2869 | } 2870 | }, 2871 | "@babel/types": { 2872 | "version": "7.25.6", 2873 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", 2874 | "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", 2875 | "dev": true, 2876 | "requires": { 2877 | "@babel/helper-string-parser": "^7.24.8", 2878 | "@babel/helper-validator-identifier": "^7.24.7", 2879 | "to-fast-properties": "^2.0.0" 2880 | } 2881 | }, 2882 | "@bcoe/v8-coverage": { 2883 | "version": "0.2.3", 2884 | "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", 2885 | "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", 2886 | "dev": true 2887 | }, 2888 | "@bokub/prettier-config": { 2889 | "version": "2.1.0", 2890 | "resolved": "https://registry.npmjs.org/@bokub/prettier-config/-/prettier-config-2.1.0.tgz", 2891 | "integrity": "sha512-b2ZcqpwpT0mF12E9Es00uoALK5HrejLwYil9BMtFGi0PaMfo2vHVIoPMUVEn4h6rGiyMZSUynlGH2EneGhGXow==", 2892 | "dev": true 2893 | }, 2894 | "@esbuild/aix-ppc64": { 2895 | "version": "0.21.5", 2896 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", 2897 | "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", 2898 | "dev": true, 2899 | "optional": true 2900 | }, 2901 | "@esbuild/android-arm": { 2902 | "version": "0.21.5", 2903 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", 2904 | "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", 2905 | "dev": true, 2906 | "optional": true 2907 | }, 2908 | "@esbuild/android-arm64": { 2909 | "version": "0.21.5", 2910 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", 2911 | "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", 2912 | "dev": true, 2913 | "optional": true 2914 | }, 2915 | "@esbuild/android-x64": { 2916 | "version": "0.21.5", 2917 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", 2918 | "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", 2919 | "dev": true, 2920 | "optional": true 2921 | }, 2922 | "@esbuild/darwin-arm64": { 2923 | "version": "0.21.5", 2924 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", 2925 | "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", 2926 | "dev": true, 2927 | "optional": true 2928 | }, 2929 | "@esbuild/darwin-x64": { 2930 | "version": "0.21.5", 2931 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", 2932 | "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", 2933 | "dev": true, 2934 | "optional": true 2935 | }, 2936 | "@esbuild/freebsd-arm64": { 2937 | "version": "0.21.5", 2938 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", 2939 | "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", 2940 | "dev": true, 2941 | "optional": true 2942 | }, 2943 | "@esbuild/freebsd-x64": { 2944 | "version": "0.21.5", 2945 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", 2946 | "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", 2947 | "dev": true, 2948 | "optional": true 2949 | }, 2950 | "@esbuild/linux-arm": { 2951 | "version": "0.21.5", 2952 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", 2953 | "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", 2954 | "dev": true, 2955 | "optional": true 2956 | }, 2957 | "@esbuild/linux-arm64": { 2958 | "version": "0.21.5", 2959 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", 2960 | "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", 2961 | "dev": true, 2962 | "optional": true 2963 | }, 2964 | "@esbuild/linux-ia32": { 2965 | "version": "0.21.5", 2966 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", 2967 | "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", 2968 | "dev": true, 2969 | "optional": true 2970 | }, 2971 | "@esbuild/linux-loong64": { 2972 | "version": "0.21.5", 2973 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", 2974 | "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", 2975 | "dev": true, 2976 | "optional": true 2977 | }, 2978 | "@esbuild/linux-mips64el": { 2979 | "version": "0.21.5", 2980 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", 2981 | "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", 2982 | "dev": true, 2983 | "optional": true 2984 | }, 2985 | "@esbuild/linux-ppc64": { 2986 | "version": "0.21.5", 2987 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", 2988 | "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", 2989 | "dev": true, 2990 | "optional": true 2991 | }, 2992 | "@esbuild/linux-riscv64": { 2993 | "version": "0.21.5", 2994 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", 2995 | "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", 2996 | "dev": true, 2997 | "optional": true 2998 | }, 2999 | "@esbuild/linux-s390x": { 3000 | "version": "0.21.5", 3001 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", 3002 | "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", 3003 | "dev": true, 3004 | "optional": true 3005 | }, 3006 | "@esbuild/linux-x64": { 3007 | "version": "0.21.5", 3008 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", 3009 | "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", 3010 | "dev": true, 3011 | "optional": true 3012 | }, 3013 | "@esbuild/netbsd-x64": { 3014 | "version": "0.21.5", 3015 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", 3016 | "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", 3017 | "dev": true, 3018 | "optional": true 3019 | }, 3020 | "@esbuild/openbsd-x64": { 3021 | "version": "0.21.5", 3022 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", 3023 | "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", 3024 | "dev": true, 3025 | "optional": true 3026 | }, 3027 | "@esbuild/sunos-x64": { 3028 | "version": "0.21.5", 3029 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", 3030 | "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", 3031 | "dev": true, 3032 | "optional": true 3033 | }, 3034 | "@esbuild/win32-arm64": { 3035 | "version": "0.21.5", 3036 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", 3037 | "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", 3038 | "dev": true, 3039 | "optional": true 3040 | }, 3041 | "@esbuild/win32-ia32": { 3042 | "version": "0.21.5", 3043 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", 3044 | "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", 3045 | "dev": true, 3046 | "optional": true 3047 | }, 3048 | "@esbuild/win32-x64": { 3049 | "version": "0.21.5", 3050 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", 3051 | "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", 3052 | "dev": true, 3053 | "optional": true 3054 | }, 3055 | "@isaacs/cliui": { 3056 | "version": "8.0.2", 3057 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 3058 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 3059 | "dev": true, 3060 | "requires": { 3061 | "string-width": "^5.1.2", 3062 | "string-width-cjs": "npm:string-width@^4.2.0", 3063 | "strip-ansi": "^7.0.1", 3064 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 3065 | "wrap-ansi": "^8.1.0", 3066 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 3067 | }, 3068 | "dependencies": { 3069 | "ansi-regex": { 3070 | "version": "6.1.0", 3071 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 3072 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 3073 | "dev": true 3074 | }, 3075 | "ansi-styles": { 3076 | "version": "6.2.1", 3077 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 3078 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 3079 | "dev": true 3080 | }, 3081 | "emoji-regex": { 3082 | "version": "9.2.2", 3083 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 3084 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 3085 | "dev": true 3086 | }, 3087 | "string-width": { 3088 | "version": "5.1.2", 3089 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 3090 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 3091 | "dev": true, 3092 | "requires": { 3093 | "eastasianwidth": "^0.2.0", 3094 | "emoji-regex": "^9.2.2", 3095 | "strip-ansi": "^7.0.1" 3096 | } 3097 | }, 3098 | "strip-ansi": { 3099 | "version": "7.1.0", 3100 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 3101 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 3102 | "dev": true, 3103 | "requires": { 3104 | "ansi-regex": "^6.0.1" 3105 | } 3106 | }, 3107 | "wrap-ansi": { 3108 | "version": "8.1.0", 3109 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 3110 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 3111 | "dev": true, 3112 | "requires": { 3113 | "ansi-styles": "^6.1.0", 3114 | "string-width": "^5.0.1", 3115 | "strip-ansi": "^7.0.1" 3116 | } 3117 | } 3118 | } 3119 | }, 3120 | "@istanbuljs/schema": { 3121 | "version": "0.1.3", 3122 | "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", 3123 | "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", 3124 | "dev": true 3125 | }, 3126 | "@jridgewell/gen-mapping": { 3127 | "version": "0.3.5", 3128 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", 3129 | "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", 3130 | "dev": true, 3131 | "requires": { 3132 | "@jridgewell/set-array": "^1.2.1", 3133 | "@jridgewell/sourcemap-codec": "^1.4.10", 3134 | "@jridgewell/trace-mapping": "^0.3.24" 3135 | } 3136 | }, 3137 | "@jridgewell/resolve-uri": { 3138 | "version": "3.1.2", 3139 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 3140 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 3141 | "dev": true 3142 | }, 3143 | "@jridgewell/set-array": { 3144 | "version": "1.2.1", 3145 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 3146 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 3147 | "dev": true 3148 | }, 3149 | "@jridgewell/source-map": { 3150 | "version": "0.3.2", 3151 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", 3152 | "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", 3153 | "dev": true, 3154 | "optional": true, 3155 | "peer": true, 3156 | "requires": { 3157 | "@jridgewell/gen-mapping": "^0.3.0", 3158 | "@jridgewell/trace-mapping": "^0.3.9" 3159 | } 3160 | }, 3161 | "@jridgewell/sourcemap-codec": { 3162 | "version": "1.5.0", 3163 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 3164 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 3165 | "dev": true 3166 | }, 3167 | "@jridgewell/trace-mapping": { 3168 | "version": "0.3.25", 3169 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 3170 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 3171 | "dev": true, 3172 | "requires": { 3173 | "@jridgewell/resolve-uri": "^3.1.0", 3174 | "@jridgewell/sourcemap-codec": "^1.4.14" 3175 | } 3176 | }, 3177 | "@pkgjs/parseargs": { 3178 | "version": "0.11.0", 3179 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 3180 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 3181 | "dev": true, 3182 | "optional": true 3183 | }, 3184 | "@rollup/rollup-android-arm-eabi": { 3185 | "version": "4.22.5", 3186 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.5.tgz", 3187 | "integrity": "sha512-SU5cvamg0Eyu/F+kLeMXS7GoahL+OoizlclVFX3l5Ql6yNlywJJ0OuqTzUx0v+aHhPHEB/56CT06GQrRrGNYww==", 3188 | "dev": true, 3189 | "optional": true 3190 | }, 3191 | "@rollup/rollup-android-arm64": { 3192 | "version": "4.22.5", 3193 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.5.tgz", 3194 | "integrity": "sha512-S4pit5BP6E5R5C8S6tgU/drvgjtYW76FBuG6+ibG3tMvlD1h9LHVF9KmlmaUBQ8Obou7hEyS+0w+IR/VtxwNMQ==", 3195 | "dev": true, 3196 | "optional": true 3197 | }, 3198 | "@rollup/rollup-darwin-arm64": { 3199 | "version": "4.22.5", 3200 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.5.tgz", 3201 | "integrity": "sha512-250ZGg4ipTL0TGvLlfACkIxS9+KLtIbn7BCZjsZj88zSg2Lvu3Xdw6dhAhfe/FjjXPVNCtcSp+WZjVsD3a/Zlw==", 3202 | "dev": true, 3203 | "optional": true 3204 | }, 3205 | "@rollup/rollup-darwin-x64": { 3206 | "version": "4.22.5", 3207 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.5.tgz", 3208 | "integrity": "sha512-D8brJEFg5D+QxFcW6jYANu+Rr9SlKtTenmsX5hOSzNYVrK5oLAEMTUgKWYJP+wdKyCdeSwnapLsn+OVRFycuQg==", 3209 | "dev": true, 3210 | "optional": true 3211 | }, 3212 | "@rollup/rollup-linux-arm-gnueabihf": { 3213 | "version": "4.22.5", 3214 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.5.tgz", 3215 | "integrity": "sha512-PNqXYmdNFyWNg0ma5LdY8wP+eQfdvyaBAojAXgO7/gs0Q/6TQJVXAXe8gwW9URjbS0YAammur0fynYGiWsKlXw==", 3216 | "dev": true, 3217 | "optional": true 3218 | }, 3219 | "@rollup/rollup-linux-arm-musleabihf": { 3220 | "version": "4.22.5", 3221 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.5.tgz", 3222 | "integrity": "sha512-kSSCZOKz3HqlrEuwKd9TYv7vxPYD77vHSUvM2y0YaTGnFc8AdI5TTQRrM1yIp3tXCKrSL9A7JLoILjtad5t8pQ==", 3223 | "dev": true, 3224 | "optional": true 3225 | }, 3226 | "@rollup/rollup-linux-arm64-gnu": { 3227 | "version": "4.22.5", 3228 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.5.tgz", 3229 | "integrity": "sha512-oTXQeJHRbOnwRnRffb6bmqmUugz0glXaPyspp4gbQOPVApdpRrY/j7KP3lr7M8kTfQTyrBUzFjj5EuHAhqH4/w==", 3230 | "dev": true, 3231 | "optional": true 3232 | }, 3233 | "@rollup/rollup-linux-arm64-musl": { 3234 | "version": "4.22.5", 3235 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.5.tgz", 3236 | "integrity": "sha512-qnOTIIs6tIGFKCHdhYitgC2XQ2X25InIbZFor5wh+mALH84qnFHvc+vmWUpyX97B0hNvwNUL4B+MB8vJvH65Fw==", 3237 | "dev": true, 3238 | "optional": true 3239 | }, 3240 | "@rollup/rollup-linux-powerpc64le-gnu": { 3241 | "version": "4.22.5", 3242 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.5.tgz", 3243 | "integrity": "sha512-TMYu+DUdNlgBXING13rHSfUc3Ky5nLPbWs4bFnT+R6Vu3OvXkTkixvvBKk8uO4MT5Ab6lC3U7x8S8El2q5o56w==", 3244 | "dev": true, 3245 | "optional": true 3246 | }, 3247 | "@rollup/rollup-linux-riscv64-gnu": { 3248 | "version": "4.22.5", 3249 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.5.tgz", 3250 | "integrity": "sha512-PTQq1Kz22ZRvuhr3uURH+U/Q/a0pbxJoICGSprNLAoBEkyD3Sh9qP5I0Asn0y0wejXQBbsVMRZRxlbGFD9OK4A==", 3251 | "dev": true, 3252 | "optional": true 3253 | }, 3254 | "@rollup/rollup-linux-s390x-gnu": { 3255 | "version": "4.22.5", 3256 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.5.tgz", 3257 | "integrity": "sha512-bR5nCojtpuMss6TDEmf/jnBnzlo+6n1UhgwqUvRoe4VIotC7FG1IKkyJbwsT7JDsF2jxR+NTnuOwiGv0hLyDoQ==", 3258 | "dev": true, 3259 | "optional": true 3260 | }, 3261 | "@rollup/rollup-linux-x64-gnu": { 3262 | "version": "4.22.5", 3263 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.5.tgz", 3264 | "integrity": "sha512-N0jPPhHjGShcB9/XXZQWuWBKZQnC1F36Ce3sDqWpujsGjDz/CQtOL9LgTrJ+rJC8MJeesMWrMWVLKKNR/tMOCA==", 3265 | "dev": true, 3266 | "optional": true 3267 | }, 3268 | "@rollup/rollup-linux-x64-musl": { 3269 | "version": "4.22.5", 3270 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.5.tgz", 3271 | "integrity": "sha512-uBa2e28ohzNNwjr6Uxm4XyaA1M/8aTgfF2T7UIlElLaeXkgpmIJ2EitVNQxjO9xLLLy60YqAgKn/AqSpCUkE9g==", 3272 | "dev": true, 3273 | "optional": true 3274 | }, 3275 | "@rollup/rollup-win32-arm64-msvc": { 3276 | "version": "4.22.5", 3277 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.5.tgz", 3278 | "integrity": "sha512-RXT8S1HP8AFN/Kr3tg4fuYrNxZ/pZf1HemC5Tsddc6HzgGnJm0+Lh5rAHJkDuW3StI0ynNXukidROMXYl6ew8w==", 3279 | "dev": true, 3280 | "optional": true 3281 | }, 3282 | "@rollup/rollup-win32-ia32-msvc": { 3283 | "version": "4.22.5", 3284 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.5.tgz", 3285 | "integrity": "sha512-ElTYOh50InL8kzyUD6XsnPit7jYCKrphmddKAe1/Ytt74apOxDq5YEcbsiKs0fR3vff3jEneMM+3I7jbqaMyBg==", 3286 | "dev": true, 3287 | "optional": true 3288 | }, 3289 | "@rollup/rollup-win32-x64-msvc": { 3290 | "version": "4.22.5", 3291 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.5.tgz", 3292 | "integrity": "sha512-+lvL/4mQxSV8MukpkKyyvfwhH266COcWlXE/1qxwN08ajovta3459zrjLghYMgDerlzNwLAcFpvU+WWE5y6nAQ==", 3293 | "dev": true, 3294 | "optional": true 3295 | }, 3296 | "@types/node": { 3297 | "version": "22.7.3", 3298 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.3.tgz", 3299 | "integrity": "sha512-qXKfhXXqGTyBskvWEzJZPUxSslAiLaB6JGP1ic/XTH9ctGgzdgYguuLP1C601aRTSDNlLb0jbKqXjZ48GNraSA==", 3300 | "dev": true, 3301 | "optional": true, 3302 | "peer": true, 3303 | "requires": { 3304 | "undici-types": "~6.19.2" 3305 | } 3306 | }, 3307 | "@types/tinycolor2": { 3308 | "version": "1.4.3", 3309 | "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.3.tgz", 3310 | "integrity": "sha512-Kf1w9NE5HEgGxCRyIcRXR/ZYtDv0V8FVPtYHwLxl0O+maGX0erE77pQlD0gpP+/KByMZ87mOA79SjifhSB3PjQ==" 3311 | }, 3312 | "@vitest/coverage-v8": { 3313 | "version": "2.1.1", 3314 | "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.1.tgz", 3315 | "integrity": "sha512-md/A7A3c42oTT8JUHSqjP5uKTWJejzUW4jalpvs+rZ27gsURsMU8DEb+8Jf8C6Kj2gwfSHJqobDNBuoqlm0cFw==", 3316 | "dev": true, 3317 | "requires": { 3318 | "@ampproject/remapping": "^2.3.0", 3319 | "@bcoe/v8-coverage": "^0.2.3", 3320 | "debug": "^4.3.6", 3321 | "istanbul-lib-coverage": "^3.2.2", 3322 | "istanbul-lib-report": "^3.0.1", 3323 | "istanbul-lib-source-maps": "^5.0.6", 3324 | "istanbul-reports": "^3.1.7", 3325 | "magic-string": "^0.30.11", 3326 | "magicast": "^0.3.4", 3327 | "std-env": "^3.7.0", 3328 | "test-exclude": "^7.0.1", 3329 | "tinyrainbow": "^1.2.0" 3330 | }, 3331 | "dependencies": { 3332 | "brace-expansion": { 3333 | "version": "2.0.1", 3334 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 3335 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 3336 | "dev": true, 3337 | "requires": { 3338 | "balanced-match": "^1.0.0" 3339 | } 3340 | }, 3341 | "foreground-child": { 3342 | "version": "3.3.0", 3343 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", 3344 | "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", 3345 | "dev": true, 3346 | "requires": { 3347 | "cross-spawn": "^7.0.0", 3348 | "signal-exit": "^4.0.1" 3349 | } 3350 | }, 3351 | "glob": { 3352 | "version": "10.4.5", 3353 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", 3354 | "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", 3355 | "dev": true, 3356 | "requires": { 3357 | "foreground-child": "^3.1.0", 3358 | "jackspeak": "^3.1.2", 3359 | "minimatch": "^9.0.4", 3360 | "minipass": "^7.1.2", 3361 | "package-json-from-dist": "^1.0.0", 3362 | "path-scurry": "^1.11.1" 3363 | } 3364 | }, 3365 | "minimatch": { 3366 | "version": "9.0.5", 3367 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 3368 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 3369 | "dev": true, 3370 | "requires": { 3371 | "brace-expansion": "^2.0.1" 3372 | } 3373 | }, 3374 | "signal-exit": { 3375 | "version": "4.1.0", 3376 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 3377 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 3378 | "dev": true 3379 | }, 3380 | "test-exclude": { 3381 | "version": "7.0.1", 3382 | "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", 3383 | "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", 3384 | "dev": true, 3385 | "requires": { 3386 | "@istanbuljs/schema": "^0.1.2", 3387 | "glob": "^10.4.1", 3388 | "minimatch": "^9.0.4" 3389 | } 3390 | } 3391 | } 3392 | }, 3393 | "@vitest/expect": { 3394 | "version": "2.1.1", 3395 | "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.1.tgz", 3396 | "integrity": "sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==", 3397 | "dev": true, 3398 | "requires": { 3399 | "@vitest/spy": "2.1.1", 3400 | "@vitest/utils": "2.1.1", 3401 | "chai": "^5.1.1", 3402 | "tinyrainbow": "^1.2.0" 3403 | } 3404 | }, 3405 | "@vitest/pretty-format": { 3406 | "version": "2.1.1", 3407 | "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.1.tgz", 3408 | "integrity": "sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==", 3409 | "dev": true, 3410 | "requires": { 3411 | "tinyrainbow": "^1.2.0" 3412 | } 3413 | }, 3414 | "@vitest/runner": { 3415 | "version": "2.1.1", 3416 | "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.1.tgz", 3417 | "integrity": "sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==", 3418 | "dev": true, 3419 | "requires": { 3420 | "@vitest/utils": "2.1.1", 3421 | "pathe": "^1.1.2" 3422 | } 3423 | }, 3424 | "@vitest/snapshot": { 3425 | "version": "2.1.1", 3426 | "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.1.tgz", 3427 | "integrity": "sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==", 3428 | "dev": true, 3429 | "requires": { 3430 | "@vitest/pretty-format": "2.1.1", 3431 | "magic-string": "^0.30.11", 3432 | "pathe": "^1.1.2" 3433 | } 3434 | }, 3435 | "@vitest/spy": { 3436 | "version": "2.1.1", 3437 | "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.1.tgz", 3438 | "integrity": "sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==", 3439 | "dev": true, 3440 | "requires": { 3441 | "tinyspy": "^3.0.0" 3442 | } 3443 | }, 3444 | "@vitest/utils": { 3445 | "version": "2.1.1", 3446 | "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.1.tgz", 3447 | "integrity": "sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==", 3448 | "dev": true, 3449 | "requires": { 3450 | "@vitest/pretty-format": "2.1.1", 3451 | "loupe": "^3.1.1", 3452 | "tinyrainbow": "^1.2.0" 3453 | } 3454 | }, 3455 | "acorn": { 3456 | "version": "8.7.0", 3457 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", 3458 | "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", 3459 | "dev": true, 3460 | "optional": true, 3461 | "peer": true 3462 | }, 3463 | "ansi-regex": { 3464 | "version": "5.0.1", 3465 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 3466 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 3467 | "dev": true 3468 | }, 3469 | "ansi-styles": { 3470 | "version": "4.3.0", 3471 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 3472 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 3473 | "dev": true, 3474 | "requires": { 3475 | "color-convert": "^2.0.1" 3476 | } 3477 | }, 3478 | "assertion-error": { 3479 | "version": "2.0.1", 3480 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", 3481 | "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", 3482 | "dev": true 3483 | }, 3484 | "balanced-match": { 3485 | "version": "1.0.2", 3486 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 3487 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 3488 | "dev": true 3489 | }, 3490 | "braces": { 3491 | "version": "3.0.3", 3492 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 3493 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 3494 | "dev": true, 3495 | "requires": { 3496 | "fill-range": "^7.1.1" 3497 | } 3498 | }, 3499 | "buffer-from": { 3500 | "version": "1.1.2", 3501 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 3502 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 3503 | "dev": true, 3504 | "optional": true, 3505 | "peer": true 3506 | }, 3507 | "cac": { 3508 | "version": "6.7.14", 3509 | "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", 3510 | "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", 3511 | "dev": true 3512 | }, 3513 | "chai": { 3514 | "version": "5.1.1", 3515 | "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", 3516 | "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", 3517 | "dev": true, 3518 | "requires": { 3519 | "assertion-error": "^2.0.1", 3520 | "check-error": "^2.1.1", 3521 | "deep-eql": "^5.0.1", 3522 | "loupe": "^3.1.0", 3523 | "pathval": "^2.0.0" 3524 | } 3525 | }, 3526 | "chalk": { 3527 | "version": "5.3.0", 3528 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", 3529 | "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" 3530 | }, 3531 | "check-error": { 3532 | "version": "2.1.1", 3533 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", 3534 | "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", 3535 | "dev": true 3536 | }, 3537 | "cli-cursor": { 3538 | "version": "5.0.0", 3539 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", 3540 | "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", 3541 | "dev": true, 3542 | "requires": { 3543 | "restore-cursor": "^5.0.0" 3544 | } 3545 | }, 3546 | "cli-truncate": { 3547 | "version": "4.0.0", 3548 | "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", 3549 | "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", 3550 | "dev": true, 3551 | "requires": { 3552 | "slice-ansi": "^5.0.0", 3553 | "string-width": "^7.0.0" 3554 | }, 3555 | "dependencies": { 3556 | "ansi-regex": { 3557 | "version": "6.1.0", 3558 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 3559 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 3560 | "dev": true 3561 | }, 3562 | "emoji-regex": { 3563 | "version": "10.4.0", 3564 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", 3565 | "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", 3566 | "dev": true 3567 | }, 3568 | "string-width": { 3569 | "version": "7.2.0", 3570 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", 3571 | "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", 3572 | "dev": true, 3573 | "requires": { 3574 | "emoji-regex": "^10.3.0", 3575 | "get-east-asian-width": "^1.0.0", 3576 | "strip-ansi": "^7.1.0" 3577 | } 3578 | }, 3579 | "strip-ansi": { 3580 | "version": "7.1.0", 3581 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 3582 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 3583 | "dev": true, 3584 | "requires": { 3585 | "ansi-regex": "^6.0.1" 3586 | } 3587 | } 3588 | } 3589 | }, 3590 | "color-convert": { 3591 | "version": "2.0.1", 3592 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 3593 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 3594 | "dev": true, 3595 | "requires": { 3596 | "color-name": "~1.1.4" 3597 | } 3598 | }, 3599 | "color-name": { 3600 | "version": "1.1.4", 3601 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 3602 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 3603 | "dev": true 3604 | }, 3605 | "colorette": { 3606 | "version": "2.0.20", 3607 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", 3608 | "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", 3609 | "dev": true 3610 | }, 3611 | "commander": { 3612 | "version": "2.20.3", 3613 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 3614 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 3615 | "dev": true, 3616 | "optional": true, 3617 | "peer": true 3618 | }, 3619 | "cross-spawn": { 3620 | "version": "7.0.3", 3621 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 3622 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 3623 | "dev": true, 3624 | "requires": { 3625 | "path-key": "^3.1.0", 3626 | "shebang-command": "^2.0.0", 3627 | "which": "^2.0.1" 3628 | } 3629 | }, 3630 | "debug": { 3631 | "version": "4.3.7", 3632 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 3633 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 3634 | "dev": true, 3635 | "requires": { 3636 | "ms": "^2.1.3" 3637 | } 3638 | }, 3639 | "deep-eql": { 3640 | "version": "5.0.2", 3641 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", 3642 | "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", 3643 | "dev": true 3644 | }, 3645 | "eastasianwidth": { 3646 | "version": "0.2.0", 3647 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 3648 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 3649 | "dev": true 3650 | }, 3651 | "emoji-regex": { 3652 | "version": "8.0.0", 3653 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 3654 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 3655 | "dev": true 3656 | }, 3657 | "environment": { 3658 | "version": "1.1.0", 3659 | "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", 3660 | "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", 3661 | "dev": true 3662 | }, 3663 | "esbuild": { 3664 | "version": "0.21.5", 3665 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", 3666 | "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", 3667 | "dev": true, 3668 | "requires": { 3669 | "@esbuild/aix-ppc64": "0.21.5", 3670 | "@esbuild/android-arm": "0.21.5", 3671 | "@esbuild/android-arm64": "0.21.5", 3672 | "@esbuild/android-x64": "0.21.5", 3673 | "@esbuild/darwin-arm64": "0.21.5", 3674 | "@esbuild/darwin-x64": "0.21.5", 3675 | "@esbuild/freebsd-arm64": "0.21.5", 3676 | "@esbuild/freebsd-x64": "0.21.5", 3677 | "@esbuild/linux-arm": "0.21.5", 3678 | "@esbuild/linux-arm64": "0.21.5", 3679 | "@esbuild/linux-ia32": "0.21.5", 3680 | "@esbuild/linux-loong64": "0.21.5", 3681 | "@esbuild/linux-mips64el": "0.21.5", 3682 | "@esbuild/linux-ppc64": "0.21.5", 3683 | "@esbuild/linux-riscv64": "0.21.5", 3684 | "@esbuild/linux-s390x": "0.21.5", 3685 | "@esbuild/linux-x64": "0.21.5", 3686 | "@esbuild/netbsd-x64": "0.21.5", 3687 | "@esbuild/openbsd-x64": "0.21.5", 3688 | "@esbuild/sunos-x64": "0.21.5", 3689 | "@esbuild/win32-arm64": "0.21.5", 3690 | "@esbuild/win32-ia32": "0.21.5", 3691 | "@esbuild/win32-x64": "0.21.5" 3692 | } 3693 | }, 3694 | "estree-walker": { 3695 | "version": "3.0.3", 3696 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", 3697 | "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 3698 | "dev": true, 3699 | "requires": { 3700 | "@types/estree": "^1.0.0" 3701 | }, 3702 | "dependencies": { 3703 | "@types/estree": { 3704 | "version": "1.0.6", 3705 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", 3706 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", 3707 | "dev": true 3708 | } 3709 | } 3710 | }, 3711 | "eventemitter3": { 3712 | "version": "5.0.1", 3713 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", 3714 | "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", 3715 | "dev": true 3716 | }, 3717 | "fill-range": { 3718 | "version": "7.1.1", 3719 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 3720 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 3721 | "dev": true, 3722 | "requires": { 3723 | "to-regex-range": "^5.0.1" 3724 | } 3725 | }, 3726 | "fsevents": { 3727 | "version": "2.3.3", 3728 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 3729 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 3730 | "dev": true, 3731 | "optional": true 3732 | }, 3733 | "get-east-asian-width": { 3734 | "version": "1.2.0", 3735 | "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", 3736 | "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", 3737 | "dev": true 3738 | }, 3739 | "get-func-name": { 3740 | "version": "2.0.2", 3741 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", 3742 | "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", 3743 | "dev": true 3744 | }, 3745 | "get-stream": { 3746 | "version": "8.0.1", 3747 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", 3748 | "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", 3749 | "dev": true 3750 | }, 3751 | "html-escaper": { 3752 | "version": "2.0.2", 3753 | "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", 3754 | "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", 3755 | "dev": true 3756 | }, 3757 | "husky": { 3758 | "version": "9.1.6", 3759 | "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.6.tgz", 3760 | "integrity": "sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==", 3761 | "dev": true 3762 | }, 3763 | "is-fullwidth-code-point": { 3764 | "version": "3.0.0", 3765 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 3766 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 3767 | "dev": true 3768 | }, 3769 | "is-number": { 3770 | "version": "7.0.0", 3771 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 3772 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 3773 | "dev": true 3774 | }, 3775 | "isexe": { 3776 | "version": "2.0.0", 3777 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 3778 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 3779 | "dev": true 3780 | }, 3781 | "istanbul-lib-coverage": { 3782 | "version": "3.2.2", 3783 | "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", 3784 | "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", 3785 | "dev": true 3786 | }, 3787 | "istanbul-lib-report": { 3788 | "version": "3.0.1", 3789 | "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", 3790 | "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", 3791 | "dev": true, 3792 | "requires": { 3793 | "istanbul-lib-coverage": "^3.0.0", 3794 | "make-dir": "^4.0.0", 3795 | "supports-color": "^7.1.0" 3796 | }, 3797 | "dependencies": { 3798 | "make-dir": { 3799 | "version": "4.0.0", 3800 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", 3801 | "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", 3802 | "dev": true, 3803 | "requires": { 3804 | "semver": "^7.5.3" 3805 | } 3806 | } 3807 | } 3808 | }, 3809 | "istanbul-lib-source-maps": { 3810 | "version": "5.0.6", 3811 | "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", 3812 | "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", 3813 | "dev": true, 3814 | "requires": { 3815 | "@jridgewell/trace-mapping": "^0.3.23", 3816 | "debug": "^4.1.1", 3817 | "istanbul-lib-coverage": "^3.0.0" 3818 | } 3819 | }, 3820 | "istanbul-reports": { 3821 | "version": "3.1.7", 3822 | "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", 3823 | "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", 3824 | "dev": true, 3825 | "requires": { 3826 | "html-escaper": "^2.0.0", 3827 | "istanbul-lib-report": "^3.0.0" 3828 | } 3829 | }, 3830 | "jackspeak": { 3831 | "version": "3.4.3", 3832 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", 3833 | "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", 3834 | "dev": true, 3835 | "requires": { 3836 | "@isaacs/cliui": "^8.0.2", 3837 | "@pkgjs/parseargs": "^0.11.0" 3838 | } 3839 | }, 3840 | "lilconfig": { 3841 | "version": "3.1.2", 3842 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", 3843 | "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", 3844 | "dev": true 3845 | }, 3846 | "lint-staged": { 3847 | "version": "15.2.10", 3848 | "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", 3849 | "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", 3850 | "dev": true, 3851 | "requires": { 3852 | "chalk": "~5.3.0", 3853 | "commander": "~12.1.0", 3854 | "debug": "~4.3.6", 3855 | "execa": "~8.0.1", 3856 | "lilconfig": "~3.1.2", 3857 | "listr2": "~8.2.4", 3858 | "micromatch": "~4.0.8", 3859 | "pidtree": "~0.6.0", 3860 | "string-argv": "~0.3.2", 3861 | "yaml": "~2.5.0" 3862 | }, 3863 | "dependencies": { 3864 | "commander": { 3865 | "version": "12.1.0", 3866 | "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", 3867 | "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", 3868 | "dev": true 3869 | }, 3870 | "execa": { 3871 | "version": "8.0.1", 3872 | "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", 3873 | "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", 3874 | "dev": true, 3875 | "requires": { 3876 | "cross-spawn": "^7.0.3", 3877 | "get-stream": "^8.0.1", 3878 | "human-signals": "^5.0.0", 3879 | "is-stream": "^3.0.0", 3880 | "merge-stream": "^2.0.0", 3881 | "npm-run-path": "^5.1.0", 3882 | "onetime": "^6.0.0", 3883 | "signal-exit": "^4.1.0", 3884 | "strip-final-newline": "^3.0.0" 3885 | } 3886 | }, 3887 | "human-signals": { 3888 | "version": "5.0.0", 3889 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", 3890 | "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", 3891 | "dev": true 3892 | }, 3893 | "is-stream": { 3894 | "version": "3.0.0", 3895 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", 3896 | "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", 3897 | "dev": true 3898 | }, 3899 | "mimic-fn": { 3900 | "version": "4.0.0", 3901 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", 3902 | "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", 3903 | "dev": true 3904 | }, 3905 | "npm-run-path": { 3906 | "version": "5.3.0", 3907 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", 3908 | "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", 3909 | "dev": true, 3910 | "requires": { 3911 | "path-key": "^4.0.0" 3912 | } 3913 | }, 3914 | "onetime": { 3915 | "version": "6.0.0", 3916 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", 3917 | "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", 3918 | "dev": true, 3919 | "requires": { 3920 | "mimic-fn": "^4.0.0" 3921 | } 3922 | }, 3923 | "path-key": { 3924 | "version": "4.0.0", 3925 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", 3926 | "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", 3927 | "dev": true 3928 | }, 3929 | "signal-exit": { 3930 | "version": "4.1.0", 3931 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 3932 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 3933 | "dev": true 3934 | }, 3935 | "strip-final-newline": { 3936 | "version": "3.0.0", 3937 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", 3938 | "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", 3939 | "dev": true 3940 | }, 3941 | "yaml": { 3942 | "version": "2.5.1", 3943 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", 3944 | "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", 3945 | "dev": true 3946 | } 3947 | } 3948 | }, 3949 | "listr2": { 3950 | "version": "8.2.4", 3951 | "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", 3952 | "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", 3953 | "dev": true, 3954 | "requires": { 3955 | "cli-truncate": "^4.0.0", 3956 | "colorette": "^2.0.20", 3957 | "eventemitter3": "^5.0.1", 3958 | "log-update": "^6.1.0", 3959 | "rfdc": "^1.4.1", 3960 | "wrap-ansi": "^9.0.0" 3961 | } 3962 | }, 3963 | "log-update": { 3964 | "version": "6.1.0", 3965 | "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", 3966 | "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", 3967 | "dev": true, 3968 | "requires": { 3969 | "ansi-escapes": "^7.0.0", 3970 | "cli-cursor": "^5.0.0", 3971 | "slice-ansi": "^7.1.0", 3972 | "strip-ansi": "^7.1.0", 3973 | "wrap-ansi": "^9.0.0" 3974 | }, 3975 | "dependencies": { 3976 | "ansi-escapes": { 3977 | "version": "7.0.0", 3978 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", 3979 | "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", 3980 | "dev": true, 3981 | "requires": { 3982 | "environment": "^1.0.0" 3983 | } 3984 | }, 3985 | "ansi-regex": { 3986 | "version": "6.1.0", 3987 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 3988 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 3989 | "dev": true 3990 | }, 3991 | "ansi-styles": { 3992 | "version": "6.2.1", 3993 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 3994 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 3995 | "dev": true 3996 | }, 3997 | "is-fullwidth-code-point": { 3998 | "version": "5.0.0", 3999 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", 4000 | "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", 4001 | "dev": true, 4002 | "requires": { 4003 | "get-east-asian-width": "^1.0.0" 4004 | } 4005 | }, 4006 | "slice-ansi": { 4007 | "version": "7.1.0", 4008 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", 4009 | "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", 4010 | "dev": true, 4011 | "requires": { 4012 | "ansi-styles": "^6.2.1", 4013 | "is-fullwidth-code-point": "^5.0.0" 4014 | } 4015 | }, 4016 | "strip-ansi": { 4017 | "version": "7.1.0", 4018 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 4019 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 4020 | "dev": true, 4021 | "requires": { 4022 | "ansi-regex": "^6.0.1" 4023 | } 4024 | } 4025 | } 4026 | }, 4027 | "loupe": { 4028 | "version": "3.1.1", 4029 | "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", 4030 | "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", 4031 | "dev": true, 4032 | "requires": { 4033 | "get-func-name": "^2.0.1" 4034 | } 4035 | }, 4036 | "magic-string": { 4037 | "version": "0.30.11", 4038 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", 4039 | "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", 4040 | "dev": true, 4041 | "requires": { 4042 | "@jridgewell/sourcemap-codec": "^1.5.0" 4043 | } 4044 | }, 4045 | "magicast": { 4046 | "version": "0.3.5", 4047 | "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", 4048 | "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", 4049 | "dev": true, 4050 | "requires": { 4051 | "@babel/parser": "^7.25.4", 4052 | "@babel/types": "^7.25.4", 4053 | "source-map-js": "^1.2.0" 4054 | } 4055 | }, 4056 | "merge-stream": { 4057 | "version": "2.0.0", 4058 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 4059 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 4060 | "dev": true 4061 | }, 4062 | "micromatch": { 4063 | "version": "4.0.8", 4064 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 4065 | "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 4066 | "dev": true, 4067 | "requires": { 4068 | "braces": "^3.0.3", 4069 | "picomatch": "^2.3.1" 4070 | } 4071 | }, 4072 | "mimic-function": { 4073 | "version": "5.0.1", 4074 | "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", 4075 | "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", 4076 | "dev": true 4077 | }, 4078 | "minipass": { 4079 | "version": "7.1.2", 4080 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 4081 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 4082 | "dev": true 4083 | }, 4084 | "ms": { 4085 | "version": "2.1.3", 4086 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 4087 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 4088 | "dev": true 4089 | }, 4090 | "nanoid": { 4091 | "version": "3.3.7", 4092 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 4093 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 4094 | "dev": true 4095 | }, 4096 | "package-json-from-dist": { 4097 | "version": "1.0.1", 4098 | "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", 4099 | "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", 4100 | "dev": true 4101 | }, 4102 | "path-key": { 4103 | "version": "3.1.1", 4104 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 4105 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 4106 | "dev": true 4107 | }, 4108 | "path-scurry": { 4109 | "version": "1.11.1", 4110 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", 4111 | "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", 4112 | "dev": true, 4113 | "requires": { 4114 | "lru-cache": "^10.2.0", 4115 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 4116 | }, 4117 | "dependencies": { 4118 | "lru-cache": { 4119 | "version": "10.4.3", 4120 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", 4121 | "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", 4122 | "dev": true 4123 | } 4124 | } 4125 | }, 4126 | "pathe": { 4127 | "version": "1.1.2", 4128 | "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", 4129 | "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", 4130 | "dev": true 4131 | }, 4132 | "pathval": { 4133 | "version": "2.0.0", 4134 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", 4135 | "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", 4136 | "dev": true 4137 | }, 4138 | "picocolors": { 4139 | "version": "1.1.0", 4140 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", 4141 | "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", 4142 | "dev": true 4143 | }, 4144 | "picomatch": { 4145 | "version": "2.3.1", 4146 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 4147 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 4148 | "dev": true 4149 | }, 4150 | "pidtree": { 4151 | "version": "0.6.0", 4152 | "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", 4153 | "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", 4154 | "dev": true 4155 | }, 4156 | "postcss": { 4157 | "version": "8.4.47", 4158 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", 4159 | "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", 4160 | "dev": true, 4161 | "requires": { 4162 | "nanoid": "^3.3.7", 4163 | "picocolors": "^1.1.0", 4164 | "source-map-js": "^1.2.1" 4165 | } 4166 | }, 4167 | "prettier": { 4168 | "version": "3.3.3", 4169 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", 4170 | "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", 4171 | "dev": true 4172 | }, 4173 | "restore-cursor": { 4174 | "version": "5.1.0", 4175 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", 4176 | "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", 4177 | "dev": true, 4178 | "requires": { 4179 | "onetime": "^7.0.0", 4180 | "signal-exit": "^4.1.0" 4181 | }, 4182 | "dependencies": { 4183 | "onetime": { 4184 | "version": "7.0.0", 4185 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", 4186 | "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", 4187 | "dev": true, 4188 | "requires": { 4189 | "mimic-function": "^5.0.0" 4190 | } 4191 | }, 4192 | "signal-exit": { 4193 | "version": "4.1.0", 4194 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 4195 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 4196 | "dev": true 4197 | } 4198 | } 4199 | }, 4200 | "rfdc": { 4201 | "version": "1.4.1", 4202 | "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", 4203 | "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", 4204 | "dev": true 4205 | }, 4206 | "rollup": { 4207 | "version": "4.22.5", 4208 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.5.tgz", 4209 | "integrity": "sha512-WoinX7GeQOFMGznEcWA1WrTQCd/tpEbMkc3nuMs9BT0CPjMdSjPMTVClwWd4pgSQwJdP65SK9mTCNvItlr5o7w==", 4210 | "dev": true, 4211 | "requires": { 4212 | "@rollup/rollup-android-arm-eabi": "4.22.5", 4213 | "@rollup/rollup-android-arm64": "4.22.5", 4214 | "@rollup/rollup-darwin-arm64": "4.22.5", 4215 | "@rollup/rollup-darwin-x64": "4.22.5", 4216 | "@rollup/rollup-linux-arm-gnueabihf": "4.22.5", 4217 | "@rollup/rollup-linux-arm-musleabihf": "4.22.5", 4218 | "@rollup/rollup-linux-arm64-gnu": "4.22.5", 4219 | "@rollup/rollup-linux-arm64-musl": "4.22.5", 4220 | "@rollup/rollup-linux-powerpc64le-gnu": "4.22.5", 4221 | "@rollup/rollup-linux-riscv64-gnu": "4.22.5", 4222 | "@rollup/rollup-linux-s390x-gnu": "4.22.5", 4223 | "@rollup/rollup-linux-x64-gnu": "4.22.5", 4224 | "@rollup/rollup-linux-x64-musl": "4.22.5", 4225 | "@rollup/rollup-win32-arm64-msvc": "4.22.5", 4226 | "@rollup/rollup-win32-ia32-msvc": "4.22.5", 4227 | "@rollup/rollup-win32-x64-msvc": "4.22.5", 4228 | "@types/estree": "1.0.6", 4229 | "fsevents": "~2.3.2" 4230 | }, 4231 | "dependencies": { 4232 | "@types/estree": { 4233 | "version": "1.0.6", 4234 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", 4235 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", 4236 | "dev": true 4237 | } 4238 | } 4239 | }, 4240 | "semver": { 4241 | "version": "7.6.3", 4242 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", 4243 | "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", 4244 | "dev": true 4245 | }, 4246 | "shebang-command": { 4247 | "version": "2.0.0", 4248 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 4249 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 4250 | "dev": true, 4251 | "requires": { 4252 | "shebang-regex": "^3.0.0" 4253 | } 4254 | }, 4255 | "shebang-regex": { 4256 | "version": "3.0.0", 4257 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 4258 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 4259 | "dev": true 4260 | }, 4261 | "siginfo": { 4262 | "version": "2.0.0", 4263 | "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", 4264 | "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", 4265 | "dev": true 4266 | }, 4267 | "slice-ansi": { 4268 | "version": "5.0.0", 4269 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", 4270 | "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", 4271 | "dev": true, 4272 | "requires": { 4273 | "ansi-styles": "^6.0.0", 4274 | "is-fullwidth-code-point": "^4.0.0" 4275 | }, 4276 | "dependencies": { 4277 | "ansi-styles": { 4278 | "version": "6.2.1", 4279 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 4280 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 4281 | "dev": true 4282 | }, 4283 | "is-fullwidth-code-point": { 4284 | "version": "4.0.0", 4285 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", 4286 | "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", 4287 | "dev": true 4288 | } 4289 | } 4290 | }, 4291 | "source-map": { 4292 | "version": "0.6.1", 4293 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 4294 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 4295 | "dev": true, 4296 | "optional": true, 4297 | "peer": true 4298 | }, 4299 | "source-map-js": { 4300 | "version": "1.2.1", 4301 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 4302 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 4303 | "dev": true 4304 | }, 4305 | "source-map-support": { 4306 | "version": "0.5.21", 4307 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 4308 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 4309 | "dev": true, 4310 | "optional": true, 4311 | "peer": true, 4312 | "requires": { 4313 | "buffer-from": "^1.0.0", 4314 | "source-map": "^0.6.0" 4315 | } 4316 | }, 4317 | "stackback": { 4318 | "version": "0.0.2", 4319 | "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", 4320 | "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", 4321 | "dev": true 4322 | }, 4323 | "std-env": { 4324 | "version": "3.7.0", 4325 | "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", 4326 | "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", 4327 | "dev": true 4328 | }, 4329 | "string-argv": { 4330 | "version": "0.3.2", 4331 | "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", 4332 | "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", 4333 | "dev": true 4334 | }, 4335 | "string-width": { 4336 | "version": "4.2.3", 4337 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 4338 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 4339 | "dev": true, 4340 | "requires": { 4341 | "emoji-regex": "^8.0.0", 4342 | "is-fullwidth-code-point": "^3.0.0", 4343 | "strip-ansi": "^6.0.1" 4344 | } 4345 | }, 4346 | "string-width-cjs": { 4347 | "version": "npm:string-width@4.2.3", 4348 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 4349 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 4350 | "dev": true, 4351 | "requires": { 4352 | "emoji-regex": "^8.0.0", 4353 | "is-fullwidth-code-point": "^3.0.0", 4354 | "strip-ansi": "^6.0.1" 4355 | } 4356 | }, 4357 | "strip-ansi": { 4358 | "version": "6.0.1", 4359 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 4360 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 4361 | "dev": true, 4362 | "requires": { 4363 | "ansi-regex": "^5.0.1" 4364 | } 4365 | }, 4366 | "strip-ansi-cjs": { 4367 | "version": "npm:strip-ansi@6.0.1", 4368 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 4369 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 4370 | "dev": true, 4371 | "requires": { 4372 | "ansi-regex": "^5.0.1" 4373 | } 4374 | }, 4375 | "supports-color": { 4376 | "version": "7.2.0", 4377 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 4378 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 4379 | "dev": true, 4380 | "requires": { 4381 | "has-flag": "^4.0.0" 4382 | }, 4383 | "dependencies": { 4384 | "has-flag": { 4385 | "version": "4.0.0", 4386 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 4387 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 4388 | "dev": true 4389 | } 4390 | } 4391 | }, 4392 | "terser": { 4393 | "version": "5.15.0", 4394 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz", 4395 | "integrity": "sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==", 4396 | "dev": true, 4397 | "optional": true, 4398 | "peer": true, 4399 | "requires": { 4400 | "@jridgewell/source-map": "^0.3.2", 4401 | "acorn": "^8.5.0", 4402 | "commander": "^2.20.0", 4403 | "source-map-support": "~0.5.20" 4404 | } 4405 | }, 4406 | "tinybench": { 4407 | "version": "2.9.0", 4408 | "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", 4409 | "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", 4410 | "dev": true 4411 | }, 4412 | "tinycolor2": { 4413 | "version": "1.4.2", 4414 | "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", 4415 | "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" 4416 | }, 4417 | "tinyexec": { 4418 | "version": "0.3.0", 4419 | "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.0.tgz", 4420 | "integrity": "sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==", 4421 | "dev": true 4422 | }, 4423 | "tinygradient": { 4424 | "version": "1.1.5", 4425 | "resolved": "https://registry.npmjs.org/tinygradient/-/tinygradient-1.1.5.tgz", 4426 | "integrity": "sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==", 4427 | "requires": { 4428 | "@types/tinycolor2": "^1.4.0", 4429 | "tinycolor2": "^1.0.0" 4430 | } 4431 | }, 4432 | "tinypool": { 4433 | "version": "1.0.1", 4434 | "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz", 4435 | "integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==", 4436 | "dev": true 4437 | }, 4438 | "tinyrainbow": { 4439 | "version": "1.2.0", 4440 | "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", 4441 | "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", 4442 | "dev": true 4443 | }, 4444 | "tinyspy": { 4445 | "version": "3.0.2", 4446 | "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", 4447 | "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", 4448 | "dev": true 4449 | }, 4450 | "to-fast-properties": { 4451 | "version": "2.0.0", 4452 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 4453 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", 4454 | "dev": true 4455 | }, 4456 | "to-regex-range": { 4457 | "version": "5.0.1", 4458 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 4459 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 4460 | "dev": true, 4461 | "requires": { 4462 | "is-number": "^7.0.0" 4463 | } 4464 | }, 4465 | "typescript": { 4466 | "version": "5.6.2", 4467 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", 4468 | "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", 4469 | "dev": true 4470 | }, 4471 | "undici-types": { 4472 | "version": "6.19.8", 4473 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 4474 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", 4475 | "dev": true, 4476 | "optional": true, 4477 | "peer": true 4478 | }, 4479 | "vite": { 4480 | "version": "5.4.8", 4481 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", 4482 | "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", 4483 | "dev": true, 4484 | "requires": { 4485 | "esbuild": "^0.21.3", 4486 | "fsevents": "~2.3.3", 4487 | "postcss": "^8.4.43", 4488 | "rollup": "^4.20.0" 4489 | } 4490 | }, 4491 | "vite-node": { 4492 | "version": "2.1.1", 4493 | "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.1.tgz", 4494 | "integrity": "sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==", 4495 | "dev": true, 4496 | "requires": { 4497 | "cac": "^6.7.14", 4498 | "debug": "^4.3.6", 4499 | "pathe": "^1.1.2", 4500 | "vite": "^5.0.0" 4501 | } 4502 | }, 4503 | "vitest": { 4504 | "version": "2.1.1", 4505 | "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.1.tgz", 4506 | "integrity": "sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==", 4507 | "dev": true, 4508 | "requires": { 4509 | "@vitest/expect": "2.1.1", 4510 | "@vitest/mocker": "2.1.1", 4511 | "@vitest/pretty-format": "^2.1.1", 4512 | "@vitest/runner": "2.1.1", 4513 | "@vitest/snapshot": "2.1.1", 4514 | "@vitest/spy": "2.1.1", 4515 | "@vitest/utils": "2.1.1", 4516 | "chai": "^5.1.1", 4517 | "debug": "^4.3.6", 4518 | "magic-string": "^0.30.11", 4519 | "pathe": "^1.1.2", 4520 | "std-env": "^3.7.0", 4521 | "tinybench": "^2.9.0", 4522 | "tinyexec": "^0.3.0", 4523 | "tinypool": "^1.0.0", 4524 | "tinyrainbow": "^1.2.0", 4525 | "vite": "^5.0.0", 4526 | "vite-node": "2.1.1", 4527 | "why-is-node-running": "^2.3.0" 4528 | }, 4529 | "dependencies": { 4530 | "@vitest/mocker": { 4531 | "version": "2.1.1", 4532 | "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.1.tgz", 4533 | "integrity": "sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==", 4534 | "dev": true, 4535 | "requires": { 4536 | "@vitest/spy": "^2.1.0-beta.1", 4537 | "estree-walker": "^3.0.3", 4538 | "magic-string": "^0.30.11" 4539 | } 4540 | } 4541 | } 4542 | }, 4543 | "which": { 4544 | "version": "2.0.2", 4545 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 4546 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 4547 | "dev": true, 4548 | "requires": { 4549 | "isexe": "^2.0.0" 4550 | } 4551 | }, 4552 | "why-is-node-running": { 4553 | "version": "2.3.0", 4554 | "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", 4555 | "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", 4556 | "dev": true, 4557 | "requires": { 4558 | "siginfo": "^2.0.0", 4559 | "stackback": "0.0.2" 4560 | } 4561 | }, 4562 | "wrap-ansi": { 4563 | "version": "9.0.0", 4564 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", 4565 | "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", 4566 | "dev": true, 4567 | "requires": { 4568 | "ansi-styles": "^6.2.1", 4569 | "string-width": "^7.0.0", 4570 | "strip-ansi": "^7.1.0" 4571 | }, 4572 | "dependencies": { 4573 | "ansi-regex": { 4574 | "version": "6.1.0", 4575 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 4576 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 4577 | "dev": true 4578 | }, 4579 | "ansi-styles": { 4580 | "version": "6.2.1", 4581 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 4582 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 4583 | "dev": true 4584 | }, 4585 | "emoji-regex": { 4586 | "version": "10.4.0", 4587 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", 4588 | "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", 4589 | "dev": true 4590 | }, 4591 | "string-width": { 4592 | "version": "7.2.0", 4593 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", 4594 | "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", 4595 | "dev": true, 4596 | "requires": { 4597 | "emoji-regex": "^10.3.0", 4598 | "get-east-asian-width": "^1.0.0", 4599 | "strip-ansi": "^7.1.0" 4600 | } 4601 | }, 4602 | "strip-ansi": { 4603 | "version": "7.1.0", 4604 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 4605 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 4606 | "dev": true, 4607 | "requires": { 4608 | "ansi-regex": "^6.0.1" 4609 | } 4610 | } 4611 | } 4612 | }, 4613 | "wrap-ansi-cjs": { 4614 | "version": "npm:wrap-ansi@7.0.0", 4615 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 4616 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 4617 | "dev": true, 4618 | "requires": { 4619 | "ansi-styles": "^4.0.0", 4620 | "string-width": "^4.1.0", 4621 | "strip-ansi": "^6.0.0" 4622 | } 4623 | } 4624 | } 4625 | } 4626 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gradient-string", 3 | "description": "Beautiful color gradients in terminal output", 4 | "version": "3.0.0", 5 | "author": "Boris K", 6 | "license": "MIT", 7 | "main": "dist/index.js", 8 | "types": "dist/index.d.ts", 9 | "type": "module", 10 | "scripts": { 11 | "build": "rm -fr dist && tsc && rm -fr dist/*.spec.*", 12 | "built-in": "[ ! -f dist/index.js ] && npm run build; node examples/built-in.js", 13 | "test": "vitest run", 14 | "coverage": "vitest run --coverage", 15 | "demo": "[ ! -f dist/index.js ] && npm run build; node examples/demo.js", 16 | "lint": "prettier --check .", 17 | "prepare": "husky", 18 | "prepublishOnly": "npm run build" 19 | }, 20 | "dependencies": { 21 | "chalk": "^5.3.0", 22 | "tinygradient": "^1.1.5" 23 | }, 24 | "devDependencies": { 25 | "@bokub/prettier-config": "^2.1.0", 26 | "@vitest/coverage-v8": "^2.1.1", 27 | "husky": "^9.1.6", 28 | "lint-staged": "^15.2.10", 29 | "prettier": "^3.3.3", 30 | "typescript": "^5.6.2", 31 | "vitest": "^2.1.1" 32 | }, 33 | "files": [ 34 | "dist" 35 | ], 36 | "engines": { 37 | "node": ">=14" 38 | }, 39 | "repository": "bokub/gradient-string", 40 | "homepage": "https://github.com/bokub/gradient-string", 41 | "bugs": "https://github.com/bokub/gradient-string/issues", 42 | "keywords": [ 43 | "cli", 44 | "color", 45 | "colors", 46 | "colour", 47 | "command-line", 48 | "console", 49 | "formatting", 50 | "gradient", 51 | "gradients", 52 | "log", 53 | "logging", 54 | "shell", 55 | "string", 56 | "style", 57 | "styles", 58 | "terminal" 59 | ], 60 | "prettier": "@bokub/prettier-config", 61 | "lint-staged": { 62 | "*": "prettier --write --ignore-unknown" 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`Gradient Tests > should always return the same result for the same input 1`] = `"Lorem Ipsum! "`; 4 | 5 | exports[`Gradient Tests > should always return the same result for the same input 2`] = `"Lorem Ipsum"`; 6 | 7 | exports[`Gradient Tests > should always return the same result for the same input 3`] = `"Lorem Ipsum"`; 8 | 9 | exports[`Gradient Tests > should always return the same result for the same input 4`] = ` 10 | "Lorem 11 | 12 | Ipsum" 13 | `; 14 | -------------------------------------------------------------------------------- /src/index.spec.ts: -------------------------------------------------------------------------------- 1 | import { describe, it, expect, beforeEach } from 'vitest'; 2 | import chalk from 'chalk'; 3 | import gradient, { rainbow, cristal, pastel, atlas } from '.'; 4 | 5 | describe('Gradient Tests', () => { 6 | beforeEach(() => { 7 | chalk.level = 2; 8 | }); 9 | 10 | it('should throw an error if wrong gradient arguments are passed', () => { 11 | expect(() => gradient()('abc')).toThrowError('Missing gradient colors'); 12 | expect(() => gradient('red')('abc')).toThrowError('Expected an array of colors, received "red"'); 13 | expect(() => gradient(['red'])('abc')).toThrowError('Invalid number of stops (< 2)'); 14 | }); 15 | 16 | it('should not throw an error if there is nothing to color', () => { 17 | // Deprecated v2 syntax 18 | expect((gradient('gold', 'silver') as any)()).toBe(''); 19 | expect(gradient('gold', 'silver')(null as any)).toBe(''); 20 | // v3 syntax 21 | expect((gradient(['gold', 'silver']) as any)()).toBe(''); 22 | expect(gradient(['gold', 'silver'])(null as any)).toBe(''); 23 | }); 24 | 25 | it('should throw an error if options is not an object', () => { 26 | // Deprecated v2 syntax 27 | expect(() => gradient('blue', 'red')('abc', false as any)).toThrowError( 28 | 'Expected `options` to be an `object`, got `boolean`', 29 | ); 30 | // v3 syntax 31 | expect(() => gradient(['blue', 'red'], false as any)('abc')).toThrowError( 32 | 'Expected `options` to be an `object`, got `boolean`', 33 | ); 34 | }); 35 | 36 | it('should throw an error if interpolation is not a string', () => { 37 | // Deprecated v2 syntax 38 | expect(() => gradient('blue', 'red')('abc', { interpolation: 1000 } as any)).toThrowError( 39 | 'Expected `options.interpolation` to be `rgb` or `hsv`, got `number`', 40 | ); 41 | // v3 syntax 42 | expect(() => gradient(['blue', 'red'], { interpolation: 1000 } as any)('abc')).toThrowError( 43 | 'Expected `options.interpolation` to be `rgb` or `hsv`, got `number`', 44 | ); 45 | }); 46 | 47 | it('should throw an error if hsvSpin is not a string, but only if interpolation is HSV', () => { 48 | // Deprecated v2 syntax 49 | expect(() => gradient('blue', 'red')('abc', { hsvSpin: 42 } as any)).not.toThrow(); 50 | expect(() => gradient('blue', 'red')('abc', { interpolation: 'hsv', hsvSpin: 42 } as any)).toThrowError( 51 | 'Expected `options.hsvSpin` to be a `short` or `long`, got `number`', 52 | ); 53 | // v3 syntax 54 | expect(() => gradient(['blue', 'red'], { hsvSpin: 42 } as any)('abc')).not.toThrow(); 55 | expect(() => gradient(['blue', 'red'], { interpolation: 'hsv', hsvSpin: 42 } as any)('abc')).toThrowError( 56 | 'Expected `options.hsvSpin` to be a `short` or `long`, got `number`', 57 | ); 58 | }); 59 | 60 | it('should work correctly with different gradient and interpolation options', () => { 61 | // Deprecated v2 syntax 62 | expect(gradient('blue', 'white', 'red')('abc')).not.toBe('abc'); 63 | // v3 syntax 64 | expect(gradient('red', 'green')('abc', { interpolation: 'hsv' })).not.toBe('abc'); 65 | 66 | describe('should generate red -> yellow -> green (short arc)', () => { 67 | // Deprecated v2 syntax 68 | expect(gradient('red', 'green')('abc')).not.toBe(gradient('red', 'green')('abc', { interpolation: 'hsv' })); 69 | // v3 syntax 70 | expect(gradient(['red', 'green'])('abc')).not.toBe(gradient(['red', 'green'], { interpolation: 'hsv' })('abc')); 71 | }); 72 | 73 | describe('should generate red -> blue -> green (long arc)', () => { 74 | // Deprecated v2 syntax 75 | expect(gradient('red', 'green')('abc')).not.toBe( 76 | gradient('red', 'green')('abc', { interpolation: 'hsv', hsvSpin: 'long' }), 77 | ); 78 | // v3 syntax 79 | expect(gradient(['red', 'green'])('abc')).not.toBe( 80 | gradient(['red', 'green'], { interpolation: 'hsv', hsvSpin: 'long' })('abc'), 81 | ); 82 | }); 83 | 84 | // Deprecated v2 syntax 85 | expect(gradient('red', 'green')('abc', { interpolation: 'hsv' })).not.toBe( 86 | gradient('red', 'green')('abc', { interpolation: 'hsv', hsvSpin: 'long' }), 87 | ); 88 | // v3 syntax 89 | expect(gradient(['red', 'green'], { interpolation: 'hsv' })('abc')).not.toBe( 90 | gradient(['red', 'green'], { interpolation: 'hsv', hsvSpin: 'long' })('abc'), 91 | ); 92 | }); 93 | 94 | it('should support varargs syntax exactly like array syntax, even if deprecated', () => { 95 | // Deprecated v2 syntax 96 | expect(gradient('yellow', 'green')('abc')).toBe(gradient(['yellow', 'green'])('abc')); 97 | }); 98 | 99 | it('should support aliases', () => { 100 | // Deprecated v2 syntax 101 | expect(cristal('Hello world')).toBe(gradient('#bdfff3', '#4ac29a')('Hello world')); 102 | expect(pastel('Hello world')).toBe( 103 | gradient('#74ebd5', '#74ecd5')('Hello world', { interpolation: 'hsv', hsvSpin: 'long' }), 104 | ); 105 | 106 | // v3 syntax 107 | expect(cristal('Hello world')).toBe(gradient(['#bdfff3', '#4ac29a'])('Hello world')); 108 | expect(pastel('Hello world')).toBe( 109 | gradient(['#74ebd5', '#74ecd5'], { interpolation: 'hsv', hsvSpin: 'long' })('Hello world'), 110 | ); 111 | }); 112 | 113 | it('should have aliases registered in gradient object, even if deprecated', () => { 114 | // Deprecated v2 syntax 115 | expect(gradient.cristal('Hello world')).toBe(cristal('Hello world')); 116 | expect(gradient.pastel('Hello world')).toBe(pastel('Hello world')); 117 | }); 118 | 119 | it('multiline option should work the same way on one-line strings', () => { 120 | // Deprecated v2 syntax 121 | expect(gradient('blue', 'white', 'red').multiline('abc')).toBe(gradient('blue', 'white', 'red')('abc')); 122 | expect(gradient('red', 'green').multiline('abc', { interpolation: 'hsv' })).toBe( 123 | gradient('red', 'green')('abc', { interpolation: 'hsv' }), 124 | ); 125 | 126 | // v3 syntax 127 | expect(gradient(['blue', 'white', 'red']).multiline('abc')).toBe(gradient(['blue', 'white', 'red'])('abc')); 128 | expect(gradient(['red', 'green']).multiline('abc', { interpolation: 'hsv' })).toBe( 129 | gradient(['red', 'green'])('abc', { interpolation: 'hsv' }), 130 | ); 131 | }); 132 | 133 | it('multiline option should work correctly', () => { 134 | // Deprecated v2 syntax 135 | expect(gradient('orange', 'purple').multiline('hello\nworld')).toBe( 136 | gradient('orange', 'purple')('hello') + '\n' + gradient('orange', 'purple')('world'), 137 | ); 138 | expect(gradient.atlas.multiline('abc\n\ndef')).toBe(gradient.atlas('abc') + '\n\n' + gradient.atlas('def')); 139 | expect(gradient.rainbow.multiline('hi\nworld')).not.toBe(gradient.rainbow('hi') + '\n' + gradient.rainbow('world')); 140 | 141 | // v3 syntax 142 | expect(gradient(['orange', 'purple']).multiline('hello\nworld')).toBe( 143 | gradient(['orange', 'purple'])('hello') + '\n' + gradient(['orange', 'purple'])('world'), 144 | ); 145 | expect(atlas.multiline('abc\n\ndef')).toBe(atlas('abc') + '\n\n' + atlas('def')); 146 | expect(rainbow.multiline('hi\nworld')).not.toBe(rainbow('hi') + '\n' + rainbow('world')); 147 | }); 148 | 149 | it('case-insensitive options should work correctly', () => { 150 | // Deprecated v2 syntax 151 | expect(gradient('red', 'green')('abc', { interpolation: 'hsv', hsvSpin: 'long' })).toBe( 152 | gradient('red', 'green')('abc', { interpolation: 'HSV' as any, hsvSpin: 'Long' as any }), 153 | ); 154 | 155 | // v3 syntax 156 | expect(gradient(['red', 'green'], { interpolation: 'hsv', hsvSpin: 'long' })('abc')).toBe( 157 | gradient(['red', 'green'], { interpolation: 'HSV' as any, hsvSpin: 'Long' as any })('abc'), 158 | ); 159 | }); 160 | 161 | it('should always return the same result for the same input', () => { 162 | expect(gradient(['red', 'green', 'blue'])('Lorem Ipsum! ')).toMatchSnapshot(); 163 | expect( 164 | gradient(['red', 'green'], { 165 | interpolation: 'hsv', 166 | hsvSpin: 'short', 167 | })('Lorem Ipsum'), 168 | ).toMatchSnapshot(); 169 | expect( 170 | gradient(['cyan', 'yellow', 'magenta'], { 171 | interpolation: 'hsv', 172 | hsvSpin: 'long', 173 | })('Lorem Ipsum'), 174 | ).toMatchSnapshot(); 175 | expect(gradient.atlas.multiline('Lorem\n\nIpsum')).toMatchSnapshot(); 176 | }); 177 | }); 178 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import chalk from 'chalk'; 2 | import tinygradient, { StopInput, Instance as TinyGradient, ArcMode } from 'tinygradient'; 3 | import { ColorInput, Instance as TinyColor } from 'tinycolor2'; 4 | 5 | interface GradientOptions { 6 | interpolation?: 'rgb' | 'hsv'; 7 | hsvSpin?: 'short' | 'long'; 8 | } 9 | 10 | interface GradientFunction { 11 | (str: string): string; 12 | multiline: MultiLineGradientFunction; 13 | 14 | /** 15 | * @deprecated 16 | * Pass options like this instead: myGradient = gradient(['red', 'blue'], options) 17 | */ 18 | (str: string, opts?: GradientOptions): string; 19 | } 20 | 21 | interface MultiLineGradientFunction { 22 | (str: string): string; 23 | 24 | /** 25 | * @deprecated 26 | * Pass options like this instead: gradient(['red', 'blue'], options).multiline('...') 27 | */ 28 | (str: string, opts?: GradientOptions): string; 29 | } 30 | 31 | interface AliasGradientFunction { 32 | (str: string): string; 33 | multiline: (str: string) => string; 34 | } 35 | 36 | interface GradientCreator { 37 | (...colors: [ColorInput[] | StopInput[], GradientOptions?]): GradientFunction; 38 | 39 | /** 40 | * @deprecated 41 | * Pass your colors in an array, like this: myGradient = gradient(['red', 'blue'], options) 42 | */ 43 | (...colors: (ColorInput | StopInput | GradientOptions)[]): GradientFunction; 44 | 45 | /** @deprecated Use import { atlas } from 'gradient-string' instead */ 46 | atlas: AliasGradientFunction; 47 | /** @deprecated Use import { cristal } from 'gradient-string' instead */ 48 | cristal: AliasGradientFunction; 49 | /** @deprecated Use import { teen } from 'gradient-string' instead */ 50 | teen: AliasGradientFunction; 51 | /** @deprecated Use import { mind } from 'gradient-string' instead */ 52 | mind: AliasGradientFunction; 53 | /** @deprecated Use import { morning } from 'gradient-string' instead */ 54 | morning: AliasGradientFunction; 55 | /** @deprecated Use import { vice } from 'gradient-string' instead */ 56 | vice: AliasGradientFunction; 57 | /** @deprecated Use import { passion } from 'gradient-string' instead */ 58 | passion: AliasGradientFunction; 59 | /** @deprecated Use import { fruit } from 'gradient-string' instead */ 60 | fruit: AliasGradientFunction; 61 | /** @deprecated Use import { instagram } from 'gradient-string' instead */ 62 | instagram: AliasGradientFunction; 63 | /** @deprecated Use import { retro } from 'gradient-string' instead */ 64 | retro: AliasGradientFunction; 65 | /** @deprecated Use import { summer } from 'gradient-string' instead */ 66 | summer: AliasGradientFunction; 67 | /** @deprecated Use import { rainbow } from 'gradient-string' instead */ 68 | rainbow: AliasGradientFunction; 69 | /** @deprecated Use import { pastel } from 'gradient-string' instead */ 70 | pastel: AliasGradientFunction; 71 | } 72 | 73 | const gradient: GradientCreator = (...colors) => { 74 | let gradient: TinyGradient; 75 | let options: GradientOptions; 76 | 77 | if (colors.length === 0) { 78 | throw new Error('Missing gradient colors'); 79 | } 80 | 81 | if (!Array.isArray(colors[0])) { 82 | // Deprecated varargs syntax 83 | if (colors.length === 1) { 84 | throw new Error(`Expected an array of colors, received ${JSON.stringify(colors[0])}`); 85 | } 86 | gradient = tinygradient(...(colors as ColorInput[])); 87 | } 88 | // New syntax: (colors[], options) 89 | else { 90 | gradient = tinygradient(colors[0] as ColorInput[]); 91 | options = validateOptions(colors[1] as GradientOptions); 92 | } 93 | 94 | const fn: GradientFunction = (str, deprecatedOptions?) => { 95 | return applyGradient(str ? str.toString() : '', gradient, deprecatedOptions ?? options); 96 | }; 97 | 98 | fn.multiline = (str, deprecatedOptions?) => 99 | multiline(str ? str.toString() : '', gradient, deprecatedOptions ?? options); 100 | return fn; 101 | }; 102 | 103 | const getColors = (gradient: TinyGradient, options: GradientOptions, count: number): TinyColor[] => { 104 | return options.interpolation?.toLowerCase() === 'hsv' 105 | ? gradient.hsv(count, (options.hsvSpin?.toLowerCase() as ArcMode) || false) 106 | : gradient.rgb(count); 107 | }; 108 | 109 | function applyGradient(str: string, gradient: TinyGradient, opts?: GradientOptions): string { 110 | const options = validateOptions(opts); 111 | const colorsCount = Math.max(str.replace(/\s/g, '').length, gradient.stops.length); 112 | const colors: TinyColor[] = getColors(gradient, options, colorsCount); 113 | let result = ''; 114 | 115 | for (const s of str) { 116 | result += s.match(/\s/g) ? s : chalk.hex(colors.shift()?.toHex() || '#000')(s); 117 | } 118 | 119 | return result; 120 | } 121 | 122 | export function multiline(str: string, gradient: TinyGradient, opts?: GradientOptions): string { 123 | const options = validateOptions(opts); 124 | const lines = str.split('\n'); 125 | const maxLength = Math.max(...lines.map((l) => l.length), gradient.stops.length); 126 | const colors = getColors(gradient, options, maxLength); 127 | const results: string[] = []; 128 | 129 | for (const line of lines) { 130 | const lineColors = colors.slice(0); 131 | let lineResult = ''; 132 | 133 | for (const l of line) { 134 | lineResult += chalk.hex(lineColors.shift()?.toHex() || '#000')(l); 135 | } 136 | 137 | results.push(lineResult); 138 | } 139 | 140 | return results.join('\n'); 141 | } 142 | 143 | function validateOptions(opts?: GradientOptions): GradientOptions { 144 | const options: GradientOptions = { interpolation: 'rgb', hsvSpin: 'short', ...opts }; 145 | 146 | if (opts !== undefined && typeof opts !== 'object') { 147 | throw new TypeError(`Expected \`options\` to be an \`object\`, got \`${typeof opts}\``); 148 | } 149 | 150 | if (typeof options.interpolation !== 'string') { 151 | throw new TypeError( 152 | `Expected \`options.interpolation\` to be \`rgb\` or \`hsv\`, got \`${typeof options.interpolation}\``, 153 | ); 154 | } 155 | 156 | if (options.interpolation.toLowerCase() === 'hsv' && typeof options.hsvSpin !== 'string') { 157 | throw new TypeError( 158 | `Expected \`options.hsvSpin\` to be a \`short\` or \`long\`, got \`${typeof options.hsvSpin}\``, 159 | ); 160 | } 161 | 162 | return options; 163 | } 164 | 165 | type GradientAlias = { colors: ColorInput[]; options: GradientOptions }; 166 | const aliases: Record = { 167 | atlas: { colors: ['#feac5e', '#c779d0', '#4bc0c8'], options: {} }, 168 | cristal: { colors: ['#bdfff3', '#4ac29a'], options: {} }, 169 | teen: { colors: ['#77a1d3', '#79cbca', '#e684ae'], options: {} }, 170 | mind: { colors: ['#473b7b', '#3584a7', '#30d2be'], options: {} }, 171 | morning: { colors: ['#ff5f6d', '#ffc371'], options: { interpolation: 'hsv' } }, 172 | vice: { colors: ['#5ee7df', '#b490ca'], options: { interpolation: 'hsv' } }, 173 | passion: { colors: ['#f43b47', '#453a94'], options: {} }, 174 | fruit: { colors: ['#ff4e50', '#f9d423'], options: {} }, 175 | instagram: { colors: ['#833ab4', '#fd1d1d', '#fcb045'], options: {} }, 176 | retro: { 177 | colors: ['#3f51b1', '#5a55ae', '#7b5fac', '#8f6aae', '#a86aa4', '#cc6b8e', '#f18271', '#f3a469', '#f7c978'], 178 | options: {}, 179 | }, 180 | summer: { colors: ['#fdbb2d', '#22c1c3'], options: {} }, 181 | rainbow: { colors: ['#ff0000', '#ff0100'], options: { interpolation: 'hsv', hsvSpin: 'long' } }, 182 | pastel: { colors: ['#74ebd5', '#74ecd5'], options: { interpolation: 'hsv', hsvSpin: 'long' } }, 183 | }; 184 | 185 | function gradientAlias(alias: GradientAlias): AliasGradientFunction { 186 | const result = (str: string) => gradient(...alias.colors)(str, alias.options); 187 | result.multiline = (str = '') => gradient(...alias.colors).multiline(str, alias.options); 188 | return result; 189 | } 190 | 191 | export default gradient; 192 | 193 | export const atlas = gradientAlias(aliases.atlas); 194 | export const cristal = gradientAlias(aliases.cristal); 195 | export const teen = gradientAlias(aliases.teen); 196 | export const mind = gradientAlias(aliases.mind); 197 | export const morning = gradientAlias(aliases.morning); 198 | export const vice = gradientAlias(aliases.vice); 199 | export const passion = gradientAlias(aliases.passion); 200 | export const fruit = gradientAlias(aliases.fruit); 201 | export const instagram = gradientAlias(aliases.instagram); 202 | export const retro = gradientAlias(aliases.retro); 203 | export const summer = gradientAlias(aliases.summer); 204 | export const rainbow = gradientAlias(aliases.rainbow); 205 | export const pastel = gradientAlias(aliases.pastel); 206 | 207 | // Deprecated exports 208 | gradient.atlas = atlas; 209 | gradient.cristal = cristal; 210 | gradient.teen = teen; 211 | gradient.mind = mind; 212 | gradient.morning = morning; 213 | gradient.vice = vice; 214 | gradient.passion = passion; 215 | gradient.fruit = fruit; 216 | gradient.instagram = instagram; 217 | gradient.retro = retro; 218 | gradient.summer = summer; 219 | gradient.rainbow = rainbow; 220 | gradient.pastel = pastel; 221 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "module": "ESNext", 5 | "moduleResolution": "Node", 6 | "declaration": true, 7 | "outDir": "./dist", 8 | "esModuleInterop": true, 9 | "strict": true, 10 | "skipLibCheck": true, 11 | "forceConsistentCasingInFileNames": true 12 | }, 13 | "include": ["src/**/*"], 14 | "exclude": ["node_modules", "dist"] 15 | } 16 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { coverageConfigDefaults, defineConfig } from 'vitest/config'; 2 | 3 | export default defineConfig({ 4 | test: { 5 | coverage: { 6 | provider: 'v8', 7 | exclude: ['./examples', ...coverageConfigDefaults.exclude], 8 | }, 9 | }, 10 | }); 11 | --------------------------------------------------------------------------------