├── .github ├── FUNDING.yml └── workflows │ ├── semantic-pr-title.yml │ └── test-coverage-pr.yml ├── .gitignore ├── LICENSE ├── README.md ├── __tests__ ├── Fuzzy.test.ts ├── __snapshots__ │ ├── Fuzzy.test.ts.snap │ └── utils.test.ts.snap ├── index.test.ts └── utils.test.ts ├── package.json ├── playground ├── countries.ts ├── index.html ├── index.scss ├── index.ts ├── tsconfig.json └── vite.config.ts ├── src ├── Fuzzy.ts ├── index.ts └── utils.ts ├── tsconfig.json ├── vitest.config.ts └── yarn.lock /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: ad1992 2 | -------------------------------------------------------------------------------- /.github/workflows/semantic-pr-title.yml: -------------------------------------------------------------------------------- 1 | name: Semantic PR title 2 | 3 | on: 4 | pull_request: 5 | types: [opened,edited] 6 | 7 | jobs: 8 | verify-pr-title: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: semantic-pull-request 12 | uses: amannn/action-semantic-pull-request@v5.5.3 13 | env: 14 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 15 | 16 | -------------------------------------------------------------------------------- /.github/workflows/test-coverage-pr.yml: -------------------------------------------------------------------------------- 1 | # ./.github/workflows/test-coverage-pr.yml 2 | # 3 | # Automated GitHub Actions workflow to run tests and coverage 4 | name: Test Coverage Pull Request 5 | 6 | # Enable the workflow for auto push, pull_request 7 | # and manual workflow_dispatch events. 8 | on: 9 | push: 10 | pull_request: 11 | workflow_dispatch: 12 | 13 | jobs: 14 | coverage: 15 | name: Test Coverage 16 | 17 | permissions: 18 | contents: read 19 | pull-requests: write 20 | 21 | runs-on: ubuntu-latest 22 | 23 | steps: 24 | - uses: actions/checkout@v4 25 | 26 | - name: Set Node.js 18.x 27 | uses: actions/setup-node@v4 28 | with: 29 | node-version: 18.x 30 | 31 | - name: Install dependencies 32 | run: yarn install 33 | 34 | - name: Run tests 35 | run: yarn test 36 | 37 | - name: Run coverage 38 | if: always() 39 | uses: davelosert/vitest-coverage-report-action@v2 40 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | /dist 3 | /public 4 | .cache 5 | .parcel-cache 6 | /excalidraw-package 7 | /public 8 | /package 9 | 10 | # dependencies 11 | /node_modules 12 | /.pnp 13 | .pnp.js 14 | 15 | # testing 16 | /coverage 17 | 18 | # misc 19 | .DS_Store 20 | .env.local 21 | .env.development.local 22 | .env.test.local 23 | .env.production.local 24 | .vscode 25 | 26 | npm-debug.log* 27 | yarn-debug.log* 28 | yarn-error.log* 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Excalidraw 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 | # fuzzify 2 | 3 | A tiny lightweight library for Fuzzy Search. 4 | 5 | ## Why 6 | 7 | I made this library as a result of learning about [Levenshtein Distance](https://en.wikipedia.org/wiki/Levenshtein_distance) algorithm to calculate the minimum number of single-character edits (insertions, deletions or substitutions) required to transform one word to another by [Vladimir Levenshtein](https://en.wikipedia.org/wiki/Vladimir_Levenshtein). 8 | 9 | > [!NOTE] 10 | > Note: The library is at a very early stage so if you want to 11 | > To help improve it, please open an [issue](https://github.com/ad1992/fuzzify/issues). 12 | 13 | ## Live Demo 14 | 15 | You can check the demo [here](https://fuzzify.vercel.app/). 16 | 17 | 18 | ## Installation 19 | 20 | with `yarn` 21 | 22 | ```bash 23 | yarn add fuzzify 24 | ``` 25 | 26 | with `npm` 27 | 28 | ```bash 29 | npm install fuzzify 30 | ``` 31 | 32 | ## Usage 33 | 34 | ```js 35 | import Fuzzy from "fuzzify"; 36 | 37 | const countries = [ 38 | "Australia", 39 | "France", 40 | "Germany", 41 | "Hungary", 42 | "Iceland", 43 | "India", 44 | "Israel", 45 | "Italy", 46 | "Japan", 47 | "Malawi", 48 | "Malaysia", 49 | "Maldives", 50 | ]; 51 | const fuzzy = new Fuzzy(countries); 52 | 53 | const query = "ala"; 54 | const results = fuzzy.search(query); 55 | 56 | console.log("RESULTS", results); 57 | ``` 58 | 59 | The `search` API gives approximate matched strings with the passed query in the below format. 60 | 61 | | Attributes | Description | 62 | | ---------- | ------------------------------------------------------------------------------------------------------------------ | 63 | | text | The target string against which the query is matched | 64 | | distance | The minimum number of edits (Insertion / Deletion / Substitutions) required to transform the query to target text. | 65 | 66 | ```js 67 | [ 68 | { 69 | text: "Malawi", 70 | distance: 3, 71 | }, 72 | { 73 | text: "Malaysia", 74 | distance: 5, 75 | }, 76 | { 77 | text: "Australia", 78 | distance: 6, 79 | }, 80 | { 81 | text: "Italy", 82 | distance: 3, 83 | }, 84 | { 85 | text: "Japan", 86 | distance: 3, 87 | }, 88 | { 89 | text: "Iceland", 90 | distance: 5, 91 | }, 92 | { 93 | text: "Maldives", 94 | distance: 6, 95 | }, 96 | { 97 | text: "Israel", 98 | distance: 5, 99 | }, 100 | { 101 | text: "India", 102 | distance: 4, 103 | }, 104 | { 105 | text: "France", 106 | distance: 5, 107 | }, 108 | { 109 | text: "Germany", 110 | distance: 6, 111 | }, 112 | { 113 | text: "Hungary", 114 | distance: 6, 115 | }, 116 | ]; 117 | ``` 118 | 119 | ## Options 120 | 121 | ### `includeMatches` 122 | 123 | `includeMatches` - Determines whether the `indices` at which characters match should be returned in the response. 124 | Each `match` element consists of two indices - 125 | 126 | 1. The index of query string where match is found. 127 | 2. The index of target string where a match is found. 128 | 129 | Example :point_down: 130 | 131 | ```js 132 | query = "ala", target string = "Australia" 133 | matches: [ 134 | [0, 5], 135 | [1, 6], 136 | [2, 8], 137 | ], 138 | ``` 139 | 140 | In the above example :point_down: matches are found 141 | 142 | 1. character `a` at `0th` index in `ala` matches with characater `a` at `5th` index in `Australia` 143 | 2. character `l` at `1st` index in `ala` matches with characater `a` at `6th` index in `Australia` 144 | 3. character `a` at `2nd` index in `ala` matches with characater `a` at `8th` index in `Australia` 145 | 146 | The complete response would be :point_down: 147 | 148 | ```js 149 | [ 150 | { 151 | text: "Malawi", 152 | distance: 3, 153 | matches: [ 154 | [0, 1], 155 | [1, 2], 156 | [2, 3], 157 | ], 158 | }, 159 | { 160 | text: "Malaysia", 161 | distance: 5, 162 | matches: [ 163 | [0, 1], 164 | [1, 2], 165 | [2, 7], 166 | ], 167 | }, 168 | { 169 | text: "Australia", 170 | distance: 6, 171 | matches: [ 172 | [0, 5], 173 | [1, 6], 174 | [2, 8], 175 | ], 176 | }, 177 | { 178 | text: "Italy", 179 | distance: 3, 180 | matches: [ 181 | [0, 2], 182 | [1, 3], 183 | ], 184 | }, 185 | { 186 | text: "Japan", 187 | distance: 3, 188 | matches: [ 189 | [0, 1], 190 | [2, 3], 191 | ], 192 | }, 193 | { 194 | text: "Iceland", 195 | distance: 5, 196 | matches: [ 197 | [1, 3], 198 | [2, 4], 199 | ], 200 | }, 201 | { 202 | text: "Maldives", 203 | distance: 6, 204 | matches: [ 205 | [0, 1], 206 | [1, 2], 207 | ], 208 | }, 209 | { 210 | text: "Israel", 211 | distance: 5, 212 | matches: [ 213 | [0, 3], 214 | [1, 5], 215 | ], 216 | }, 217 | { 218 | text: "India", 219 | distance: 4, 220 | matches: [[2, 4]], 221 | }, 222 | { 223 | text: "France", 224 | distance: 5, 225 | matches: [[2, 2]], 226 | }, 227 | { 228 | text: "Germany", 229 | distance: 6, 230 | matches: [[2, 4]], 231 | }, 232 | { 233 | text: "Hungary", 234 | distance: 6, 235 | matches: [[2, 4]], 236 | }, 237 | ]; 238 | ``` 239 | 240 | ### `includeScore` 241 | 242 | Determines whether a score should be added in the result. A score of `1` means an exact match, however a score of `0` means 243 | no match and those options are removed from the result. 244 | If you want to get all the options in the result, please open an [issue](https://github.com/ad1992/fuzzy/issues) and let's discuss. 245 | 246 | ### `caseSensitive` 247 | 248 | Determines whether the query should be case-sensitive or not. 249 | By default, this option is `false`. 250 | 251 | ## Set up 252 | 253 | Install packages: 254 | 255 | ``` 256 | yarn 257 | ``` 258 | 259 | Start development playground: 260 | 261 | ``` 262 | yarn start 263 | ``` 264 | 265 | Build command: 266 | 267 | ``` 268 | yarn build 269 | ``` 270 | 271 | ## Contributing 272 | 273 | Please open an [issue](https://github.com/ad1992/fuzzify/issues) so we can start discussing. Any help to improve the library is most welcome :). 274 | -------------------------------------------------------------------------------- /__tests__/Fuzzy.test.ts: -------------------------------------------------------------------------------- 1 | import Fuzzy from "../src/Fuzzy"; 2 | 3 | describe("Test Fuzzy", () => { 4 | const list = ["apple", "banana", "grape", "orange", "pineapple"]; 5 | const fuzzy = new Fuzzy(list); 6 | 7 | it("should return correct results for a query", () => { 8 | const query = "apple"; 9 | const results = fuzzy.search(query); 10 | expect(results).toMatchInlineSnapshot(` 11 | [ 12 | { 13 | "distance": 0, 14 | "text": "apple", 15 | }, 16 | { 17 | "distance": 4, 18 | "text": "pineapple", 19 | }, 20 | { 21 | "distance": 5, 22 | "text": "orange", 23 | }, 24 | { 25 | "distance": 5, 26 | "text": "banana", 27 | }, 28 | ] 29 | `); 30 | }); 31 | 32 | it('should return correct results when "caseSensitive" option is true', () => { 33 | const fuzzy = new Fuzzy(list, { caseSensitive: true }); 34 | const query = 'Apple'; 35 | const results = fuzzy.search(query); 36 | 37 | // The Distance is updated since the query is caseSensitive 38 | expect(results).toMatchInlineSnapshot(` 39 | [ 40 | { 41 | "distance": 1, 42 | "text": "apple", 43 | }, 44 | { 45 | "distance": 5, 46 | "text": "pineapple", 47 | }, 48 | { 49 | "distance": 5, 50 | "text": "orange", 51 | }, 52 | ] 53 | `); 54 | }); 55 | 56 | it("should return empty array for no matches", () => { 57 | const query = "xyz"; 58 | const results = fuzzy.search(query); 59 | expect(results).toMatchInlineSnapshot(`[]`); 60 | }); 61 | 62 | // Branch coverage: includeMatches option is true. 63 | it("should include matches if includeMatches option is true", () => { 64 | const fuzzyWithMatches = new Fuzzy(list, { includeMatches: true }); 65 | const query = "apple"; 66 | const results = fuzzyWithMatches.search(query); 67 | expect(results).toMatchSnapshot(); 68 | }); 69 | 70 | // Edge case: list is undefined. 71 | it("should set this.list to an empty array if list is undefined", () => { 72 | // Simulate absence of list 73 | const badFuzzy = new Fuzzy(undefined as any); 74 | expect(badFuzzy).toMatchInlineSnapshot(` 75 | Fuzzy { 76 | "list": [], 77 | "options": { 78 | "caseSensitive": false, 79 | "includeMatches": false, 80 | "includeScore": false, 81 | }, 82 | "search": [Function], 83 | } 84 | `) 85 | }); 86 | 87 | it("should include score if includeScore option is true", () => { 88 | const fuzzy = new Fuzzy(list, { includeScore: true }); 89 | const query = "apple"; 90 | const results = fuzzy.search(query); 91 | expect(results).toMatchInlineSnapshot(` 92 | [ 93 | { 94 | "distance": 0, 95 | "score": 1, 96 | "text": "apple", 97 | }, 98 | { 99 | "distance": 4, 100 | "score": 0.7777777777777778, 101 | "text": "pineapple", 102 | }, 103 | { 104 | "distance": 5, 105 | "score": 0.2833333333333333, 106 | "text": "orange", 107 | }, 108 | { 109 | "distance": 5, 110 | "score": 0.18333333333333332, 111 | "text": "banana", 112 | }, 113 | ] 114 | `) 115 | }) 116 | }); 117 | -------------------------------------------------------------------------------- /__tests__/__snapshots__/Fuzzy.test.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`Test Fuzzy > should include matches if includeMatches option is true 1`] = ` 4 | [ 5 | { 6 | "distance": 0, 7 | "matches": [ 8 | [ 9 | 0, 10 | 0, 11 | ], 12 | [ 13 | 1, 14 | 1, 15 | ], 16 | [ 17 | 2, 18 | 2, 19 | ], 20 | [ 21 | 3, 22 | 3, 23 | ], 24 | [ 25 | 4, 26 | 4, 27 | ], 28 | ], 29 | "text": "apple", 30 | }, 31 | { 32 | "distance": 4, 33 | "matches": [ 34 | [ 35 | 0, 36 | 4, 37 | ], 38 | [ 39 | 1, 40 | 5, 41 | ], 42 | [ 43 | 2, 44 | 6, 45 | ], 46 | [ 47 | 3, 48 | 7, 49 | ], 50 | [ 51 | 4, 52 | 8, 53 | ], 54 | ], 55 | "text": "pineapple", 56 | }, 57 | { 58 | "distance": 5, 59 | "matches": [ 60 | [ 61 | 0, 62 | 2, 63 | ], 64 | [ 65 | 4, 66 | 5, 67 | ], 68 | ], 69 | "text": "orange", 70 | }, 71 | { 72 | "distance": 5, 73 | "matches": [ 74 | [ 75 | 0, 76 | 1, 77 | ], 78 | ], 79 | "text": "banana", 80 | }, 81 | ] 82 | `; 83 | -------------------------------------------------------------------------------- /__tests__/__snapshots__/utils.test.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`Test getMatchingIndices > should return the correct matching indices 1`] = ` 4 | [ 5 | [ 6 | 3, 7 | 3, 8 | ], 9 | ] 10 | `; 11 | 12 | exports[`Test levenshteinFullMatrixSearch > should return a matrix of the correct dimensions 1`] = ` 13 | [ 14 | [ 15 | 0, 16 | 1, 17 | 2, 18 | 3, 19 | 4, 20 | 5, 21 | ], 22 | [ 23 | 1, 24 | 1, 25 | 2, 26 | 3, 27 | 4, 28 | 5, 29 | ], 30 | [ 31 | 2, 32 | 2, 33 | 2, 34 | 3, 35 | 4, 36 | 5, 37 | ], 38 | [ 39 | 3, 40 | 3, 41 | 3, 42 | 3, 43 | 3, 44 | 4, 45 | ], 46 | [ 47 | 4, 48 | 4, 49 | 4, 50 | 4, 51 | 3, 52 | 4, 53 | ], 54 | [ 55 | 5, 56 | 5, 57 | 4, 58 | 5, 59 | 4, 60 | 4, 61 | ], 62 | ] 63 | `; 64 | 65 | exports[`Test levenshteinFullMatrixSearch > should return a matrix with the correct values 1`] = ` 66 | [ 67 | [ 68 | 0, 69 | 1, 70 | 2, 71 | 3, 72 | 4, 73 | 5, 74 | ], 75 | [ 76 | 1, 77 | 1, 78 | 2, 79 | 3, 80 | 4, 81 | 5, 82 | ], 83 | [ 84 | 2, 85 | 2, 86 | 2, 87 | 3, 88 | 4, 89 | 5, 90 | ], 91 | [ 92 | 3, 93 | 3, 94 | 3, 95 | 3, 96 | 3, 97 | 4, 98 | ], 99 | [ 100 | 4, 101 | 4, 102 | 4, 103 | 4, 104 | 3, 105 | 4, 106 | ], 107 | [ 108 | 5, 109 | 5, 110 | 4, 111 | 5, 112 | 4, 113 | 4, 114 | ], 115 | ] 116 | `; 117 | -------------------------------------------------------------------------------- /__tests__/index.test.ts: -------------------------------------------------------------------------------- 1 | // ./__tests__/index.test.ts 2 | // 3 | // Integration test for the package entrypoint. 4 | 5 | import Fuzzy from "../src/Fuzzy"; 6 | import * as IndexExport from "../src/index"; 7 | 8 | describe("Test package entrypoint", () => { 9 | it("should correctly export the Fuzzy class", () => { 10 | expect(IndexExport.default).toBe(Fuzzy); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /__tests__/utils.test.ts: -------------------------------------------------------------------------------- 1 | // ./__tests__/utils.test.ts 2 | // 3 | // Unittests for the L-Dist utility functions. 4 | 5 | // Local utility functions import. 6 | import { 7 | calculateScore, 8 | getMatchingIndices, 9 | getMaxLevenshteinDistance, 10 | levenshteinFullMatrixSearch, 11 | } from '../src/utils'; 12 | 13 | // levenshteinFullMatrixSearch test suite. 14 | describe('Test levenshteinFullMatrixSearch', () => { 15 | it('should return a matrix of the correct dimensions', () => { 16 | const query = 'hello'; 17 | const target = 'world'; 18 | const matrix = levenshteinFullMatrixSearch(query, target); 19 | expect(matrix).toMatchSnapshot(); 20 | }); 21 | 22 | it('should return a matrix with the correct values', () => { 23 | const query = 'hello'; 24 | const target = 'world'; 25 | const matrix = levenshteinFullMatrixSearch(query, target); 26 | expect(matrix).toMatchSnapshot(); 27 | }); 28 | }); 29 | 30 | // getMaxLevenshteinDistance test suite. 31 | describe('Test getMaxLevenshteinDistance', () => { 32 | it('should return strictly 3 for short len 0~5 strings', () => { 33 | expect(getMaxLevenshteinDistance('', '')).toBe(3); // Empty str edge case. 34 | expect(getMaxLevenshteinDistance('a', '12')).toBe(3); // Routine case. 35 | expect(getMaxLevenshteinDistance('12345', 'cd')).toBe(3); // Len 5 edge case. 36 | }); 37 | 38 | it('should return strictly 10 for medium len 6~15 strings', () => { 39 | expect(getMaxLevenshteinDistance('123456', 'hey')).toBe(10); // Len 6 edge case. 40 | expect(getMaxLevenshteinDistance('hello world', 'world')).toBe(10); // Routine case. 41 | expect(getMaxLevenshteinDistance('hello world', '123456789012345')).toBe(10); // Len 15 edge case. 42 | }); 43 | 44 | it('should return strictly 15 for long len >=16 strings', () => { 45 | expect(getMaxLevenshteinDistance('hello world, world hello', '')).toBe(15); 46 | }); 47 | }); 48 | 49 | // getMatchingIndices test suite. 50 | describe('Test getMatchingIndices', () => { 51 | it('should return the correct matching indices', () => { 52 | const query = 'hello'; 53 | const target = 'world'; 54 | const matrix = levenshteinFullMatrixSearch(query, target); 55 | const matches = getMatchingIndices(matrix, query, target); 56 | expect(matches).toMatchSnapshot(); 57 | }); 58 | }); 59 | 60 | // calculateScore test suite. 61 | describe('Test calculateScore', () => { 62 | it('should return the correct score when param dist <= max dist', () => { 63 | const query = 'hello'; 64 | const target = 'world'; 65 | const matrix = levenshteinFullMatrixSearch(query, target); 66 | const matches = getMatchingIndices(matrix, query, target); 67 | const score = calculateScore(query, target, matches, 0); 68 | expect(score).toBe(0.6); 69 | }); 70 | 71 | it('should return strictly 0 when param dist > max dist', () => { 72 | const query = 'hello'; 73 | const target = 'world'; 74 | const matrix = levenshteinFullMatrixSearch(query, target); 75 | const matches = getMatchingIndices(matrix, query, target); 76 | const score = calculateScore(query, target, matches, 9999); 77 | expect(score).toBe(0); 78 | }); 79 | }); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fuzzify", 3 | "version": "0.1.1", 4 | "description": "A lightweight fuzzy search library", 5 | "main": "dist/src/index.js", 6 | "types": "dist/src/index.d.ts", 7 | "type": "module", 8 | "module": "dist/src/index.js", 9 | "files": [ 10 | "dist/*" 11 | ], 12 | "scripts": { 13 | "test": "vitest", 14 | "build": "rm -rf dist && tsc", 15 | "build:playground": "vite build playground", 16 | "start": "vite playground", 17 | "preview": "vite preview --outDir ./public" 18 | }, 19 | "repository": { 20 | "type": "git", 21 | "url": "git+https://github.com/ad1992/fuzzify.git" 22 | }, 23 | "keywords": [ 24 | "fuzzy", 25 | "search" 26 | ], 27 | "author": "Aakansha Doshi", 28 | "license": "MIT", 29 | "bugs": { 30 | "url": "https://github.com/ad1992/fuzzify/issues" 31 | }, 32 | "homepage": "https://github.com/ad1992/fuzzify#readme", 33 | "packageManager": "yarn@1.22.22", 34 | "devDependencies": { 35 | "@types/node": "^20.14.12", 36 | "@vitest/coverage-v8": "^2.0.4", 37 | "fuzzify": "^0.1.0-test5", 38 | "sass": "^1.77.8", 39 | "ts-node": "^10.9.2", 40 | "typescript": "^5.5.3", 41 | "vite": "^5.3.4", 42 | "vitest": "^2.0.4" 43 | }, 44 | "engines": { 45 | "node": ">=18.0.0" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /playground/countries.ts: -------------------------------------------------------------------------------- 1 | export const countries = [ 2 | "Afghanistan", 3 | "Albania", 4 | "Algeria", 5 | "Andorra", 6 | "Angola", 7 | "Antigua and Barbuda", 8 | "Argentina", 9 | "Armenia", 10 | "Australia", 11 | "Austria", 12 | "Azerbaijan", 13 | "Bahamas", 14 | "Bahrain", 15 | "Bangladesh", 16 | "Barbados", 17 | "Belarus", 18 | "Belgium", 19 | "Belize", 20 | "Benin", 21 | "Bhutan", 22 | "Bolivia", 23 | "Bosnia and Herzegovina", 24 | "Botswana", 25 | "Brazil", 26 | "Brunei", 27 | "Bulgaria", 28 | "Burkina Faso", 29 | "Burundi", 30 | "Cabo Verde", 31 | "Cambodia", 32 | "Cameroon", 33 | "Canada", 34 | "Central African Republic", 35 | "Chad", 36 | "Chile", 37 | "China", 38 | "Colombia", 39 | "Comoros", 40 | "Congo, Democratic Republic of the", 41 | "Congo, Republic of the", 42 | "Costa Rica", 43 | "Croatia", 44 | "Cuba", 45 | "Cyprus", 46 | "Czech Republic", 47 | "Denmark", 48 | "Djibouti", 49 | "Dominica", 50 | "Dominican Republic", 51 | "Ecuador", 52 | "Egypt", 53 | "El Salvador", 54 | "Equatorial Guinea", 55 | "Eritrea", 56 | "Estonia", 57 | "Eswatini", 58 | "Ethiopia", 59 | "Fiji", 60 | "Finland", 61 | "France", 62 | "Gabon", 63 | "Gambia", 64 | "Georgia", 65 | "Germany", 66 | "Ghana", 67 | "Greece", 68 | "Grenada", 69 | "Guatemala", 70 | "Guinea", 71 | "Guinea-Bissau", 72 | "Guyana", 73 | "Haiti", 74 | "Honduras", 75 | "Hungary", 76 | "Iceland", 77 | "India", 78 | "Indonesia", 79 | "Iran", 80 | "Iraq", 81 | "Ireland", 82 | "Israel", 83 | "Italy", 84 | "Jamaica", 85 | "Japan", 86 | "Jordan", 87 | "Kazakhstan", 88 | "Kenya", 89 | "Kiribati", 90 | "Korea, North", 91 | "Korea, South", 92 | "Kosovo", 93 | "Kuwait", 94 | "Kyrgyzstan", 95 | "Laos", 96 | "Latvia", 97 | "Lebanon", 98 | "Lesotho", 99 | "Liberia", 100 | "Libya", 101 | "Liechtenstein", 102 | "Lithuania", 103 | "Luxembourg", 104 | "Madagascar", 105 | "Malawi", 106 | "Malaysia", 107 | "Maldives", 108 | "Mali", 109 | "Malta", 110 | "Marshall Islands", 111 | "Mauritania", 112 | "Mauritius", 113 | "Mexico", 114 | "Micronesia", 115 | "Moldova", 116 | "Monaco", 117 | "Mongolia", 118 | "Montenegro", 119 | "Morocco", 120 | "Mozambique", 121 | "Myanmar", 122 | "Namibia", 123 | "Nauru", 124 | "Nepal", 125 | "Netherlands", 126 | "New Zealand", 127 | "Nicaragua", 128 | "Niger", 129 | "Nigeria", 130 | "North Macedonia", 131 | "Norway", 132 | "Oman", 133 | "Pakistan", 134 | "Palau", 135 | "Palestine", 136 | "Panama", 137 | "Papua New Guinea", 138 | "Paraguay", 139 | "Peru", 140 | "Philippines", 141 | "Poland", 142 | "Portugal", 143 | "Qatar", 144 | "Romania", 145 | "Russia", 146 | "Rwanda", 147 | "Saint Kitts and Nevis", 148 | "Saint Lucia", 149 | "Saint Vincent and the Grenadines", 150 | "Samoa", 151 | "San Marino", 152 | "Sao Tome and Principe", 153 | "Saudi Arabia", 154 | "Senegal", 155 | "Serbia", 156 | "Seychelles", 157 | "Sierra Leone", 158 | "Singapore", 159 | "Slovakia", 160 | "Slovenia", 161 | "Solomon Islands", 162 | "Somalia", 163 | "South Africa", 164 | "South Sudan", 165 | "Spain", 166 | "Sri Lanka", 167 | "Sudan", 168 | "Suriname", 169 | "Sweden", 170 | "Switzerland", 171 | "Syria", 172 | "Taiwan", 173 | "Tajikistan", 174 | "Tanzania", 175 | "Thailand", 176 | "Timor-Leste", 177 | "Togo", 178 | "Tonga", 179 | "Trinidad and Tobago", 180 | "Tunisia", 181 | "Turkey", 182 | "Turkmenistan", 183 | "Tuvalu", 184 | "Uganda", 185 | "Ukraine", 186 | "United Arab Emirates", 187 | "United Kingdom", 188 | "United States", 189 | "Uruguay", 190 | "Uzbekistan", 191 | "Vanuatu", 192 | "Vatican City", 193 | "Venezuela", 194 | "Vietnam", 195 | "Yemen", 196 | "Zambia", 197 | "Zimbabwe", 198 | ]; 199 | -------------------------------------------------------------------------------- /playground/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Fuzzy Search Playground 7 | 8 | 9 | 10 |

11 | Fuzzy 12 | Search Playground 13 |

14 |
15 | 16 | 21 | 22 | 23 | 29 | 34 | 35 | 36 |
37 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /playground/index.scss: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: Arial, sans-serif; 3 | background-color: #f0f0f0; 4 | padding: 20px; 5 | font-size: 20px; 6 | } 7 | 8 | h1 { 9 | color: #333; 10 | text-align: center; 11 | width: 80%; 12 | } 13 | 14 | #searchInput { 15 | width: 80%; 16 | padding: 10px; 17 | margin-bottom: 20px; 18 | border: 1px solid #ccc; 19 | border-radius: 4px; 20 | box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 21 | margin-bottom: 0; 22 | font-size: 20px; 23 | color: #868e96; 24 | font-weight: 500; 25 | } 26 | 27 | ul { 28 | list-style-type: none; 29 | padding: 20px; 30 | width: 80%; 31 | font-weight: 600; 32 | margin-top: 0; 33 | } 34 | 35 | li { 36 | background-color: #fff; 37 | margin-bottom: 10px; 38 | padding: 10px; 39 | border: 1px solid #ccc; 40 | border-radius: 4px; 41 | box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 42 | } 43 | 44 | .highlight { 45 | color: #12a3e1; 46 | text-decoration: underline; 47 | padding: 2px; 48 | border-radius: 2px; 49 | } 50 | 51 | /* Github corner */ 52 | .github-corner:hover .octo-arm { 53 | animation: octocat-wave 560ms ease-in-out; 54 | 55 | } 56 | 57 | @keyframes octocat-wave { 58 | 59 | 0%, 60 | 100% { 61 | transform: rotate(0); 62 | } 63 | 64 | 20%, 65 | 60% { 66 | transform: rotate(-25deg); 67 | } 68 | 69 | 40%, 70 | 80% { 71 | transform: rotate(10deg); 72 | } 73 | } 74 | 75 | .github-corner svg { 76 | fill: #70b7fd; 77 | color: #fff; 78 | position: absolute; 79 | top: 0; 80 | border: 0; 81 | right: 0; 82 | } 83 | 84 | @media (max-width: 500px) { 85 | .github-corner .octo-arm { 86 | animation: octocat-wave 560ms ease-in-out; 87 | } 88 | 89 | .github-corner:hover .octo-arm { 90 | animation: none; 91 | } 92 | } -------------------------------------------------------------------------------- /playground/index.ts: -------------------------------------------------------------------------------- 1 | import Fuzzy from "../src/index"; 2 | import { Result } from "../src/Fuzzy"; 3 | 4 | import { countries } from "./countries"; 5 | 6 | function performSearch() { 7 | const searchInput = document.getElementById("searchInput"); 8 | const query = (searchInput as HTMLInputElement).value; 9 | const fuzzy = new Fuzzy(countries, { includeMatches: true, includeScore: true}); 10 | const results = fuzzy.search(query); 11 | displayResults(results); 12 | } 13 | 14 | function displayResults(results: Result) { 15 | const resultsList = document.getElementById("resultsList")!; 16 | resultsList.innerHTML = ""; 17 | 18 | results.forEach((result) => { 19 | const item = document.createElement("li"); 20 | const text = result.text; 21 | 22 | let highlightedTitle = ""; 23 | const matchIndexes = result.matches?.map((match) => match[1]); 24 | for (let i = 0; i < text.length; i++) { 25 | const ch = text.charAt(i); 26 | // check if this index matches except for space 27 | if (matchIndexes?.includes(i) && ch !== " ") { 28 | highlightedTitle += `${ch}`; 29 | } else { 30 | highlightedTitle += ch; 31 | } 32 | } 33 | item.innerHTML = highlightedTitle; 34 | resultsList.appendChild(item); 35 | }); 36 | } 37 | 38 | const input = document.getElementById("searchInput"); 39 | 40 | input?.addEventListener("input", performSearch); 41 | -------------------------------------------------------------------------------- /playground/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2016", 4 | "outDir": "example/dist", 5 | "module": "commonjs", 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "strict": true, 9 | "skipLibCheck": true 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /playground/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | 3 | // https://vitejs.dev/config/ 4 | export default defineConfig({ 5 | server: { 6 | port: 5001, 7 | // open the browser 8 | open: true, 9 | }, 10 | build: { 11 | outDir: "../public", 12 | emptyOutDir: true, 13 | assetsDir: "./", 14 | }, 15 | }); 16 | -------------------------------------------------------------------------------- /src/Fuzzy.ts: -------------------------------------------------------------------------------- 1 | import { 2 | calculateScore, 3 | getMatchingIndices, 4 | levenshteinFullMatrixSearch, 5 | } from "./utils"; 6 | 7 | interface Options { 8 | /** 9 | * Whether to include the matching indices in the result. 10 | */ 11 | includeMatches?: boolean; 12 | /** 13 | * Whether to include the score in the result. 14 | */ 15 | includeScore?: boolean; 16 | /** 17 | * Whether the search is case-sensitive. 18 | */ 19 | caseSensitive?: boolean; 20 | } 21 | 22 | export type SingleResult = { 23 | /** 24 | * The text matched against the query 25 | */ 26 | text: string; 27 | /** 28 | * Represents the distance between the query and the text. 29 | */ 30 | distance: number; 31 | /** 32 | * Represents the indices of the matching characters. 33 | */ 34 | matches?: number[][]; 35 | /** 36 | * Represents the score of the match. 37 | */ 38 | score?: number; 39 | }; 40 | export type Result = Array; 41 | 42 | class Fuzzy { 43 | /** 44 | * The list of strings to search within. 45 | */ 46 | private readonly list: Array; 47 | /** 48 | * The options for the fuzzy search. 49 | */ 50 | private options: Options; 51 | 52 | constructor(list: Array, options?: Options) { 53 | this.list = list || []; 54 | this.options = options || { 55 | includeMatches: false, 56 | includeScore: false, 57 | caseSensitive: false, 58 | }; 59 | } 60 | 61 | /** 62 | * Search for the query in the list 63 | * @param {string} query - The query string 64 | * @returns {Result} - An array of results matching the query 65 | */ 66 | public search = (query: string): Result => { 67 | const result: (SingleResult & { score: number })[] = []; 68 | const updateQuery = this.options.caseSensitive ? query : query.toLowerCase(); 69 | for (let i = 0; i < this.list.length; i++) { 70 | const item = this.options.caseSensitive ? this.list[i] : this.list[i].toLowerCase(); 71 | const matrix = levenshteinFullMatrixSearch( 72 | updateQuery, 73 | item, 74 | ); 75 | const matches = getMatchingIndices( 76 | matrix, 77 | updateQuery, 78 | item 79 | ); 80 | const target = this.list[i]; 81 | const distance = matrix[query.length][target.length]; 82 | const score = calculateScore(query, target, matches, distance); 83 | 84 | result[i] = { 85 | text: target, 86 | distance, 87 | matches, 88 | score, 89 | }; 90 | } 91 | 92 | // Sort by score in descending order 93 | result.sort((x, y) => { 94 | return y.score - x.score; 95 | }); 96 | 97 | const approxMatches: Result = []; 98 | result.forEach((res, index) => { 99 | const obj: SingleResult = { text: res.text, distance: res.distance }; 100 | if (res.score > 0) { 101 | if (this.options.includeMatches) { 102 | obj.matches = res.matches; 103 | } 104 | if (this.options.includeScore) { 105 | obj.score = res.score 106 | } 107 | approxMatches[index] = obj; 108 | } 109 | }); 110 | 111 | return approxMatches; 112 | }; 113 | } 114 | export default Fuzzy; 115 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import Fuzzy from "./Fuzzy"; 2 | 3 | export default Fuzzy; 4 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | // Weights for matching score and normalized distance 2 | 3 | const MATCHING_SCORE_WEIGHT = 0.5; 4 | const NORMALIZED_DISTANCE_WEIGHT = 0.5; 5 | 6 | // Calculate Levenshtein distance between two strings 7 | export const levenshteinFullMatrixSearch = (query: string, target: string) => { 8 | const dp = new Array(query.length + 1) 9 | .fill(0) 10 | .map(() => new Array(target.length + 1).fill(0)); 11 | 12 | for (let j = 0; j <= query.length; j++) { 13 | dp[j][0] = j; 14 | } 15 | for (let k = 0; k <= target.length; k++) { 16 | dp[0][k] = k; 17 | } 18 | for (let j = 1; j <= query.length; j++) { 19 | for (let k = 1; k <= target.length; k++) { 20 | if (query[j - 1] === target[k - 1]) { 21 | dp[j][k] = dp[j - 1][k - 1]; 22 | } else { 23 | dp[j][k] = Math.min(dp[j][k - 1], dp[j - 1][k], dp[j - 1][k - 1]) + 1; 24 | } 25 | } 26 | } 27 | return dp; 28 | }; 29 | 30 | // Set max distance based on the length of the strings 31 | export const getMaxLevenshteinDistance = (query: string, target: string) => { 32 | const length = Math.max(query.length, target.length); 33 | if (length <= 5) { 34 | return 3; 35 | } 36 | if (length <= 15) { 37 | return 10; 38 | } 39 | return 15; 40 | }; 41 | 42 | // Get matching indices from the matrix 43 | export const getMatchingIndices = ( 44 | matrix: Array[], 45 | query: string, 46 | target: string 47 | ) => { 48 | const matches = []; 49 | let i = query.length; 50 | let j = target.length; 51 | 52 | while (i > 0 && j > 0) { 53 | if (query[i - 1] === target[j - 1]) { 54 | matches.unshift([i - 1, j - 1]); 55 | i--; 56 | j--; 57 | } else if (matrix[i - 1][j] > matrix[i][j - 1]) { 58 | j--; 59 | } else { 60 | i--; 61 | } 62 | } 63 | return matches; 64 | }; 65 | 66 | // Calculate score based on matching score and normalized distance 67 | export const calculateScore = ( 68 | query: string, 69 | target: string, 70 | matches: number[][], 71 | distance: number 72 | ) => { 73 | const maxLevenshteinDistance = getMaxLevenshteinDistance(query, target); 74 | 75 | if (distance > maxLevenshteinDistance) { 76 | return 0; 77 | } 78 | const matchingScore = matches.length / Math.min(target.length, query.length); 79 | const normalizedDistance = distance / Math.max(query.length, target.length); 80 | const score = 81 | NORMALIZED_DISTANCE_WEIGHT * (1 - normalizedDistance) + 82 | MATCHING_SCORE_WEIGHT * matchingScore; 83 | 84 | return score; 85 | }; 86 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "exclude": ["**/*.test.*", "__tests__", "types", "playground", "dist"], 3 | "compilerOptions": { 4 | "target": "ESNext", 5 | "outDir": "dist", 6 | "module": "ESNext", 7 | "moduleResolution": "node", 8 | "paths": { 9 | "vitest/config": ["./node_modules/vitest/config"] 10 | }, 11 | "types": [ 12 | "vitest/globals" 13 | ], 14 | "esModuleInterop": true, 15 | "declaration": true, 16 | "forceConsistentCasingInFileNames": true, 17 | "strict": true, 18 | "skipLibCheck": true 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | // ./vitest.config.ts 2 | // 3 | // Global config file for vitest. 4 | 5 | import { defineConfig } from "vitest/config"; 6 | 7 | export default defineConfig({ 8 | test: { 9 | // Files to include and exclude. Exlusion takes precedence. 10 | include: ["__tests__/**/*.test.ts"], 11 | exclude: ["src", "node_modules", "dist", "playground", "public"], 12 | 13 | // Enable globals to avoid redundant imports. 14 | globals: true, 15 | 16 | // Enable typescript typechecking. 17 | typecheck: { 18 | enabled: true, 19 | }, 20 | 21 | // Enable coverage generation and reporting via the 22 | // @vitest/coverage-v8 dev dependency. 23 | coverage: { 24 | enabled: true, 25 | include: ["src/**/*.ts"], 26 | provider: "v8", 27 | 28 | // Json and json-summary are required for GitHub vitest coverage report. 29 | // For better debugging, enable generate coverage even on failure. 30 | reporter: ["text", "html", "clover", "json", "json-summary"], 31 | reportOnFailure: true, 32 | 33 | reportsDirectory: "coverage", 34 | thresholds: { 35 | statements: 90, 36 | branches: 90, 37 | functions: 90, 38 | lines: 90, 39 | }, 40 | }, 41 | 42 | // Disable watch mode to simplify workflow. 43 | watch: false, 44 | }, 45 | }); 46 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ampproject/remapping@^2.3.0": 6 | version "2.3.0" 7 | resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" 8 | integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== 9 | dependencies: 10 | "@jridgewell/gen-mapping" "^0.3.5" 11 | "@jridgewell/trace-mapping" "^0.3.24" 12 | 13 | "@babel/helper-string-parser@^7.24.8": 14 | version "7.24.8" 15 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" 16 | integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== 17 | 18 | "@babel/helper-validator-identifier@^7.24.7": 19 | version "7.24.7" 20 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" 21 | integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== 22 | 23 | "@babel/parser@^7.24.4": 24 | version "7.25.0" 25 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.0.tgz#9fdc9237504d797b6e7b8f66e78ea7f570d256ad" 26 | integrity sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA== 27 | 28 | "@babel/types@^7.24.0": 29 | version "7.25.0" 30 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.0.tgz#e6e3656c581f28da8452ed4f69e38008ec0ba41b" 31 | integrity sha512-LcnxQSsd9aXOIgmmSpvZ/1yo46ra2ESYyqLcryaBZOghxy5qqOBjvCWP5JfkI8yl9rlxRgdLTTMCQQRcN2hdCg== 32 | dependencies: 33 | "@babel/helper-string-parser" "^7.24.8" 34 | "@babel/helper-validator-identifier" "^7.24.7" 35 | to-fast-properties "^2.0.0" 36 | 37 | "@bcoe/v8-coverage@^0.2.3": 38 | version "0.2.3" 39 | resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" 40 | integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== 41 | 42 | "@cspotcode/source-map-support@^0.8.0": 43 | version "0.8.1" 44 | resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" 45 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== 46 | dependencies: 47 | "@jridgewell/trace-mapping" "0.3.9" 48 | 49 | "@esbuild/aix-ppc64@0.21.5": 50 | version "0.21.5" 51 | resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" 52 | integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== 53 | 54 | "@esbuild/android-arm64@0.21.5": 55 | version "0.21.5" 56 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" 57 | integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== 58 | 59 | "@esbuild/android-arm@0.21.5": 60 | version "0.21.5" 61 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" 62 | integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== 63 | 64 | "@esbuild/android-x64@0.21.5": 65 | version "0.21.5" 66 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" 67 | integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== 68 | 69 | "@esbuild/darwin-arm64@0.21.5": 70 | version "0.21.5" 71 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" 72 | integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== 73 | 74 | "@esbuild/darwin-x64@0.21.5": 75 | version "0.21.5" 76 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" 77 | integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== 78 | 79 | "@esbuild/freebsd-arm64@0.21.5": 80 | version "0.21.5" 81 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" 82 | integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== 83 | 84 | "@esbuild/freebsd-x64@0.21.5": 85 | version "0.21.5" 86 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" 87 | integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== 88 | 89 | "@esbuild/linux-arm64@0.21.5": 90 | version "0.21.5" 91 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" 92 | integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== 93 | 94 | "@esbuild/linux-arm@0.21.5": 95 | version "0.21.5" 96 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" 97 | integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== 98 | 99 | "@esbuild/linux-ia32@0.21.5": 100 | version "0.21.5" 101 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" 102 | integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== 103 | 104 | "@esbuild/linux-loong64@0.21.5": 105 | version "0.21.5" 106 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" 107 | integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== 108 | 109 | "@esbuild/linux-mips64el@0.21.5": 110 | version "0.21.5" 111 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" 112 | integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== 113 | 114 | "@esbuild/linux-ppc64@0.21.5": 115 | version "0.21.5" 116 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" 117 | integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== 118 | 119 | "@esbuild/linux-riscv64@0.21.5": 120 | version "0.21.5" 121 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" 122 | integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== 123 | 124 | "@esbuild/linux-s390x@0.21.5": 125 | version "0.21.5" 126 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" 127 | integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== 128 | 129 | "@esbuild/linux-x64@0.21.5": 130 | version "0.21.5" 131 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" 132 | integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== 133 | 134 | "@esbuild/netbsd-x64@0.21.5": 135 | version "0.21.5" 136 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" 137 | integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== 138 | 139 | "@esbuild/openbsd-x64@0.21.5": 140 | version "0.21.5" 141 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" 142 | integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== 143 | 144 | "@esbuild/sunos-x64@0.21.5": 145 | version "0.21.5" 146 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" 147 | integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== 148 | 149 | "@esbuild/win32-arm64@0.21.5": 150 | version "0.21.5" 151 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" 152 | integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== 153 | 154 | "@esbuild/win32-ia32@0.21.5": 155 | version "0.21.5" 156 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" 157 | integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== 158 | 159 | "@esbuild/win32-x64@0.21.5": 160 | version "0.21.5" 161 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" 162 | integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== 163 | 164 | "@isaacs/cliui@^8.0.2": 165 | version "8.0.2" 166 | resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" 167 | integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== 168 | dependencies: 169 | string-width "^5.1.2" 170 | string-width-cjs "npm:string-width@^4.2.0" 171 | strip-ansi "^7.0.1" 172 | strip-ansi-cjs "npm:strip-ansi@^6.0.1" 173 | wrap-ansi "^8.1.0" 174 | wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" 175 | 176 | "@istanbuljs/schema@^0.1.2": 177 | version "0.1.3" 178 | resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" 179 | integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== 180 | 181 | "@jridgewell/gen-mapping@^0.3.5": 182 | version "0.3.5" 183 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" 184 | integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== 185 | dependencies: 186 | "@jridgewell/set-array" "^1.2.1" 187 | "@jridgewell/sourcemap-codec" "^1.4.10" 188 | "@jridgewell/trace-mapping" "^0.3.24" 189 | 190 | "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": 191 | version "3.1.2" 192 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" 193 | integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== 194 | 195 | "@jridgewell/set-array@^1.2.1": 196 | version "1.2.1" 197 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" 198 | integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== 199 | 200 | "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": 201 | version "1.5.0" 202 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" 203 | integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== 204 | 205 | "@jridgewell/trace-mapping@0.3.9": 206 | version "0.3.9" 207 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" 208 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== 209 | dependencies: 210 | "@jridgewell/resolve-uri" "^3.0.3" 211 | "@jridgewell/sourcemap-codec" "^1.4.10" 212 | 213 | "@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24": 214 | version "0.3.25" 215 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" 216 | integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== 217 | dependencies: 218 | "@jridgewell/resolve-uri" "^3.1.0" 219 | "@jridgewell/sourcemap-codec" "^1.4.14" 220 | 221 | "@pkgjs/parseargs@^0.11.0": 222 | version "0.11.0" 223 | resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" 224 | integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== 225 | 226 | "@rollup/rollup-android-arm-eabi@4.18.1": 227 | version "4.18.1" 228 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.1.tgz#f0da481244b7d9ea15296b35f7fe39cd81157396" 229 | integrity sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA== 230 | 231 | "@rollup/rollup-android-arm64@4.18.1": 232 | version "4.18.1" 233 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.1.tgz#82ab3c575f4235fb647abea5e08eec6cf325964e" 234 | integrity sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg== 235 | 236 | "@rollup/rollup-darwin-arm64@4.18.1": 237 | version "4.18.1" 238 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.1.tgz#6a530452e68a9152809ce58de1f89597632a085b" 239 | integrity sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ== 240 | 241 | "@rollup/rollup-darwin-x64@4.18.1": 242 | version "4.18.1" 243 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.1.tgz#47727479f5ca292cf434d7e75af2725b724ecbc7" 244 | integrity sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA== 245 | 246 | "@rollup/rollup-linux-arm-gnueabihf@4.18.1": 247 | version "4.18.1" 248 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.1.tgz#46193c498aa7902a8db89ac00128060320e84fef" 249 | integrity sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g== 250 | 251 | "@rollup/rollup-linux-arm-musleabihf@4.18.1": 252 | version "4.18.1" 253 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.1.tgz#22d831fe239643c1d05c98906420325cee439d85" 254 | integrity sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ== 255 | 256 | "@rollup/rollup-linux-arm64-gnu@4.18.1": 257 | version "4.18.1" 258 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.1.tgz#19abd33695ec9d588b4a858d122631433084e4a3" 259 | integrity sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ== 260 | 261 | "@rollup/rollup-linux-arm64-musl@4.18.1": 262 | version "4.18.1" 263 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.1.tgz#d60af8c0b9be424424ff96a0ba19fce65d26f6ab" 264 | integrity sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ== 265 | 266 | "@rollup/rollup-linux-powerpc64le-gnu@4.18.1": 267 | version "4.18.1" 268 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.1.tgz#b1194e5ed6d138fdde0842d126fccde74a90f457" 269 | integrity sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ== 270 | 271 | "@rollup/rollup-linux-riscv64-gnu@4.18.1": 272 | version "4.18.1" 273 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.1.tgz#f5a635c017b9bff8b856b0221fbd5c0e3373b7ec" 274 | integrity sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg== 275 | 276 | "@rollup/rollup-linux-s390x-gnu@4.18.1": 277 | version "4.18.1" 278 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.1.tgz#f1043d9f4026bf6995863cb3f8dd4732606e4baa" 279 | integrity sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg== 280 | 281 | "@rollup/rollup-linux-x64-gnu@4.18.1": 282 | version "4.18.1" 283 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.1.tgz#1e781730be445119f06c9df5f185e193bc82c610" 284 | integrity sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g== 285 | 286 | "@rollup/rollup-linux-x64-musl@4.18.1": 287 | version "4.18.1" 288 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.1.tgz#08f12e1965d6f27d6898ff932592121cca6abc4b" 289 | integrity sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ== 290 | 291 | "@rollup/rollup-win32-arm64-msvc@4.18.1": 292 | version "4.18.1" 293 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.1.tgz#4a5dcbbe7af7d41cac92b09798e7c1831da1f599" 294 | integrity sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g== 295 | 296 | "@rollup/rollup-win32-ia32-msvc@4.18.1": 297 | version "4.18.1" 298 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.1.tgz#075b0713de627843a73b4cf0e087c56b53e9d780" 299 | integrity sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg== 300 | 301 | "@rollup/rollup-win32-x64-msvc@4.18.1": 302 | version "4.18.1" 303 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.1.tgz#0cb240c147c0dfd0e3eaff4cc060a772d39e155c" 304 | integrity sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw== 305 | 306 | "@tsconfig/node10@^1.0.7": 307 | version "1.0.11" 308 | resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" 309 | integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== 310 | 311 | "@tsconfig/node12@^1.0.7": 312 | version "1.0.11" 313 | resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" 314 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== 315 | 316 | "@tsconfig/node14@^1.0.0": 317 | version "1.0.3" 318 | resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" 319 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== 320 | 321 | "@tsconfig/node16@^1.0.2": 322 | version "1.0.4" 323 | resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" 324 | integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== 325 | 326 | "@types/estree@1.0.5", "@types/estree@^1.0.0": 327 | version "1.0.5" 328 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" 329 | integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== 330 | 331 | "@types/node@^20.14.12": 332 | version "20.14.12" 333 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.12.tgz#129d7c3a822cb49fc7ff661235f19cfefd422b49" 334 | integrity sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ== 335 | dependencies: 336 | undici-types "~5.26.4" 337 | 338 | "@vitest/coverage-v8@^2.0.4": 339 | version "2.0.4" 340 | resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-2.0.4.tgz#a90605b6ce4243bb9c4be05e3bbeac72f956f792" 341 | integrity sha512-i4lx/Wpg5zF1h2op7j0wdwuEQxaL/YTwwQaKuKMHYj7MMh8c7I4W7PNfOptZBCSBZI0z1qwn64o0pM/pA8Tz1g== 342 | dependencies: 343 | "@ampproject/remapping" "^2.3.0" 344 | "@bcoe/v8-coverage" "^0.2.3" 345 | debug "^4.3.5" 346 | istanbul-lib-coverage "^3.2.2" 347 | istanbul-lib-report "^3.0.1" 348 | istanbul-lib-source-maps "^5.0.6" 349 | istanbul-reports "^3.1.7" 350 | magic-string "^0.30.10" 351 | magicast "^0.3.4" 352 | std-env "^3.7.0" 353 | test-exclude "^7.0.1" 354 | tinyrainbow "^1.2.0" 355 | 356 | "@vitest/expect@2.0.4": 357 | version "2.0.4" 358 | resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-2.0.4.tgz#d365c106c84f2a3aae96000e95be21956acc099c" 359 | integrity sha512-39jr5EguIoanChvBqe34I8m1hJFI4+jxvdOpD7gslZrVQBKhh8H9eD7J/LJX4zakrw23W+dITQTDqdt43xVcJw== 360 | dependencies: 361 | "@vitest/spy" "2.0.4" 362 | "@vitest/utils" "2.0.4" 363 | chai "^5.1.1" 364 | tinyrainbow "^1.2.0" 365 | 366 | "@vitest/pretty-format@2.0.4", "@vitest/pretty-format@^2.0.4": 367 | version "2.0.4" 368 | resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-2.0.4.tgz#9a3934932e7f8ddd836b38c34ddaeec91bd0f82e" 369 | integrity sha512-RYZl31STbNGqf4l2eQM1nvKPXE0NhC6Eq0suTTePc4mtMQ1Fn8qZmjV4emZdEdG2NOWGKSCrHZjmTqDCDoeFBw== 370 | dependencies: 371 | tinyrainbow "^1.2.0" 372 | 373 | "@vitest/runner@2.0.4": 374 | version "2.0.4" 375 | resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-2.0.4.tgz#0b1edb8ab5f81a1c7dfd50090e5e7e971a117891" 376 | integrity sha512-Gk+9Su/2H2zNfNdeJR124gZckd5st4YoSuhF1Rebi37qTXKnqYyFCd9KP4vl2cQHbtuVKjfEKrNJxHHCW8thbQ== 377 | dependencies: 378 | "@vitest/utils" "2.0.4" 379 | pathe "^1.1.2" 380 | 381 | "@vitest/snapshot@2.0.4": 382 | version "2.0.4" 383 | resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-2.0.4.tgz#7d7dea9df17c5c13386f1a7a433b99dc0ffe3c14" 384 | integrity sha512-or6Mzoz/pD7xTvuJMFYEtso1vJo1S5u6zBTinfl+7smGUhqybn6VjzCDMhmTyVOFWwkCMuNjmNNxnyXPgKDoPw== 385 | dependencies: 386 | "@vitest/pretty-format" "2.0.4" 387 | magic-string "^0.30.10" 388 | pathe "^1.1.2" 389 | 390 | "@vitest/spy@2.0.4": 391 | version "2.0.4" 392 | resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-2.0.4.tgz#19083386a741a158c2f142beffe43be68b1375cf" 393 | integrity sha512-uTXU56TNoYrTohb+6CseP8IqNwlNdtPwEO0AWl+5j7NelS6x0xZZtP0bDWaLvOfUbaYwhhWp1guzXUxkC7mW7Q== 394 | dependencies: 395 | tinyspy "^3.0.0" 396 | 397 | "@vitest/utils@2.0.4": 398 | version "2.0.4" 399 | resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-2.0.4.tgz#2db1df35aaeb5caa932770a190df636a68d284d5" 400 | integrity sha512-Zc75QuuoJhOBnlo99ZVUkJIuq4Oj0zAkrQ2VzCqNCx6wAwViHEh5Fnp4fiJTE9rA+sAoXRf00Z9xGgfEzV6fzQ== 401 | dependencies: 402 | "@vitest/pretty-format" "2.0.4" 403 | estree-walker "^3.0.3" 404 | loupe "^3.1.1" 405 | tinyrainbow "^1.2.0" 406 | 407 | acorn-walk@^8.1.1: 408 | version "8.3.3" 409 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.3.tgz#9caeac29eefaa0c41e3d4c65137de4d6f34df43e" 410 | integrity sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw== 411 | dependencies: 412 | acorn "^8.11.0" 413 | 414 | acorn@^8.11.0, acorn@^8.4.1: 415 | version "8.12.1" 416 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" 417 | integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== 418 | 419 | ansi-regex@^5.0.1: 420 | version "5.0.1" 421 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 422 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 423 | 424 | ansi-regex@^6.0.1: 425 | version "6.0.1" 426 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" 427 | integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== 428 | 429 | ansi-styles@^4.0.0: 430 | version "4.3.0" 431 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 432 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 433 | dependencies: 434 | color-convert "^2.0.1" 435 | 436 | ansi-styles@^6.1.0: 437 | version "6.2.1" 438 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" 439 | integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== 440 | 441 | anymatch@~3.1.2: 442 | version "3.1.3" 443 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 444 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 445 | dependencies: 446 | normalize-path "^3.0.0" 447 | picomatch "^2.0.4" 448 | 449 | arg@^4.1.0: 450 | version "4.1.3" 451 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 452 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 453 | 454 | assertion-error@^2.0.1: 455 | version "2.0.1" 456 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" 457 | integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== 458 | 459 | balanced-match@^1.0.0: 460 | version "1.0.2" 461 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 462 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 463 | 464 | binary-extensions@^2.0.0: 465 | version "2.3.0" 466 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" 467 | integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== 468 | 469 | brace-expansion@^2.0.1: 470 | version "2.0.1" 471 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 472 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 473 | dependencies: 474 | balanced-match "^1.0.0" 475 | 476 | braces@~3.0.2: 477 | version "3.0.3" 478 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" 479 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== 480 | dependencies: 481 | fill-range "^7.1.1" 482 | 483 | cac@^6.7.14: 484 | version "6.7.14" 485 | resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" 486 | integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== 487 | 488 | chai@^5.1.1: 489 | version "5.1.1" 490 | resolved "https://registry.yarnpkg.com/chai/-/chai-5.1.1.tgz#f035d9792a22b481ead1c65908d14bb62ec1c82c" 491 | integrity sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA== 492 | dependencies: 493 | assertion-error "^2.0.1" 494 | check-error "^2.1.1" 495 | deep-eql "^5.0.1" 496 | loupe "^3.1.0" 497 | pathval "^2.0.0" 498 | 499 | check-error@^2.1.1: 500 | version "2.1.1" 501 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" 502 | integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== 503 | 504 | "chokidar@>=3.0.0 <4.0.0": 505 | version "3.6.0" 506 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" 507 | integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== 508 | dependencies: 509 | anymatch "~3.1.2" 510 | braces "~3.0.2" 511 | glob-parent "~5.1.2" 512 | is-binary-path "~2.1.0" 513 | is-glob "~4.0.1" 514 | normalize-path "~3.0.0" 515 | readdirp "~3.6.0" 516 | optionalDependencies: 517 | fsevents "~2.3.2" 518 | 519 | color-convert@^2.0.1: 520 | version "2.0.1" 521 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 522 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 523 | dependencies: 524 | color-name "~1.1.4" 525 | 526 | color-name@~1.1.4: 527 | version "1.1.4" 528 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 529 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 530 | 531 | create-require@^1.1.0: 532 | version "1.1.1" 533 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" 534 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 535 | 536 | cross-spawn@^7.0.0, cross-spawn@^7.0.3: 537 | version "7.0.3" 538 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 539 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 540 | dependencies: 541 | path-key "^3.1.0" 542 | shebang-command "^2.0.0" 543 | which "^2.0.1" 544 | 545 | debug@^4.1.1, debug@^4.3.5: 546 | version "4.3.5" 547 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" 548 | integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== 549 | dependencies: 550 | ms "2.1.2" 551 | 552 | deep-eql@^5.0.1: 553 | version "5.0.2" 554 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" 555 | integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== 556 | 557 | diff@^4.0.1: 558 | version "4.0.2" 559 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 560 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 561 | 562 | eastasianwidth@^0.2.0: 563 | version "0.2.0" 564 | resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" 565 | integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== 566 | 567 | emoji-regex@^8.0.0: 568 | version "8.0.0" 569 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 570 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 571 | 572 | emoji-regex@^9.2.2: 573 | version "9.2.2" 574 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" 575 | integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== 576 | 577 | esbuild@^0.21.3: 578 | version "0.21.5" 579 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" 580 | integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== 581 | optionalDependencies: 582 | "@esbuild/aix-ppc64" "0.21.5" 583 | "@esbuild/android-arm" "0.21.5" 584 | "@esbuild/android-arm64" "0.21.5" 585 | "@esbuild/android-x64" "0.21.5" 586 | "@esbuild/darwin-arm64" "0.21.5" 587 | "@esbuild/darwin-x64" "0.21.5" 588 | "@esbuild/freebsd-arm64" "0.21.5" 589 | "@esbuild/freebsd-x64" "0.21.5" 590 | "@esbuild/linux-arm" "0.21.5" 591 | "@esbuild/linux-arm64" "0.21.5" 592 | "@esbuild/linux-ia32" "0.21.5" 593 | "@esbuild/linux-loong64" "0.21.5" 594 | "@esbuild/linux-mips64el" "0.21.5" 595 | "@esbuild/linux-ppc64" "0.21.5" 596 | "@esbuild/linux-riscv64" "0.21.5" 597 | "@esbuild/linux-s390x" "0.21.5" 598 | "@esbuild/linux-x64" "0.21.5" 599 | "@esbuild/netbsd-x64" "0.21.5" 600 | "@esbuild/openbsd-x64" "0.21.5" 601 | "@esbuild/sunos-x64" "0.21.5" 602 | "@esbuild/win32-arm64" "0.21.5" 603 | "@esbuild/win32-ia32" "0.21.5" 604 | "@esbuild/win32-x64" "0.21.5" 605 | 606 | estree-walker@^3.0.3: 607 | version "3.0.3" 608 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" 609 | integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== 610 | dependencies: 611 | "@types/estree" "^1.0.0" 612 | 613 | execa@^8.0.1: 614 | version "8.0.1" 615 | resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" 616 | integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== 617 | dependencies: 618 | cross-spawn "^7.0.3" 619 | get-stream "^8.0.1" 620 | human-signals "^5.0.0" 621 | is-stream "^3.0.0" 622 | merge-stream "^2.0.0" 623 | npm-run-path "^5.1.0" 624 | onetime "^6.0.0" 625 | signal-exit "^4.1.0" 626 | strip-final-newline "^3.0.0" 627 | 628 | fill-range@^7.1.1: 629 | version "7.1.1" 630 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" 631 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== 632 | dependencies: 633 | to-regex-range "^5.0.1" 634 | 635 | foreground-child@^3.1.0: 636 | version "3.2.1" 637 | resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7" 638 | integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== 639 | dependencies: 640 | cross-spawn "^7.0.0" 641 | signal-exit "^4.0.1" 642 | 643 | fsevents@~2.3.2, fsevents@~2.3.3: 644 | version "2.3.3" 645 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" 646 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== 647 | 648 | fuzzify@^0.1.0-test5: 649 | version "0.1.0-test5" 650 | resolved "https://registry.yarnpkg.com/fuzzify/-/fuzzify-0.1.0-test5.tgz#b46b64c4a9727d80d4c8dc542df95477c1237ccc" 651 | integrity sha512-23GzYVrKcGhXdSVJ1YYhIhvDGOzBrlkeRkq0BCyq662khsDsXdN7PZgYYnNsUxPOIkutVP/UtMoyI4QoCMyU5A== 652 | 653 | get-func-name@^2.0.1: 654 | version "2.0.2" 655 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" 656 | integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== 657 | 658 | get-stream@^8.0.1: 659 | version "8.0.1" 660 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" 661 | integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== 662 | 663 | glob-parent@~5.1.2: 664 | version "5.1.2" 665 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 666 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 667 | dependencies: 668 | is-glob "^4.0.1" 669 | 670 | glob@^10.4.1: 671 | version "10.4.5" 672 | resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" 673 | integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== 674 | dependencies: 675 | foreground-child "^3.1.0" 676 | jackspeak "^3.1.2" 677 | minimatch "^9.0.4" 678 | minipass "^7.1.2" 679 | package-json-from-dist "^1.0.0" 680 | path-scurry "^1.11.1" 681 | 682 | has-flag@^4.0.0: 683 | version "4.0.0" 684 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 685 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 686 | 687 | html-escaper@^2.0.0: 688 | version "2.0.2" 689 | resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" 690 | integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== 691 | 692 | human-signals@^5.0.0: 693 | version "5.0.0" 694 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" 695 | integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== 696 | 697 | immutable@^4.0.0: 698 | version "4.3.7" 699 | resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381" 700 | integrity sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw== 701 | 702 | is-binary-path@~2.1.0: 703 | version "2.1.0" 704 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 705 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 706 | dependencies: 707 | binary-extensions "^2.0.0" 708 | 709 | is-extglob@^2.1.1: 710 | version "2.1.1" 711 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 712 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 713 | 714 | is-fullwidth-code-point@^3.0.0: 715 | version "3.0.0" 716 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 717 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 718 | 719 | is-glob@^4.0.1, is-glob@~4.0.1: 720 | version "4.0.3" 721 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 722 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 723 | dependencies: 724 | is-extglob "^2.1.1" 725 | 726 | is-number@^7.0.0: 727 | version "7.0.0" 728 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 729 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 730 | 731 | is-stream@^3.0.0: 732 | version "3.0.0" 733 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" 734 | integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== 735 | 736 | isexe@^2.0.0: 737 | version "2.0.0" 738 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 739 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 740 | 741 | istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.2: 742 | version "3.2.2" 743 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" 744 | integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== 745 | 746 | istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1: 747 | version "3.0.1" 748 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" 749 | integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== 750 | dependencies: 751 | istanbul-lib-coverage "^3.0.0" 752 | make-dir "^4.0.0" 753 | supports-color "^7.1.0" 754 | 755 | istanbul-lib-source-maps@^5.0.6: 756 | version "5.0.6" 757 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz#acaef948df7747c8eb5fbf1265cb980f6353a441" 758 | integrity sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A== 759 | dependencies: 760 | "@jridgewell/trace-mapping" "^0.3.23" 761 | debug "^4.1.1" 762 | istanbul-lib-coverage "^3.0.0" 763 | 764 | istanbul-reports@^3.1.7: 765 | version "3.1.7" 766 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" 767 | integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== 768 | dependencies: 769 | html-escaper "^2.0.0" 770 | istanbul-lib-report "^3.0.0" 771 | 772 | jackspeak@^3.1.2: 773 | version "3.4.3" 774 | resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" 775 | integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== 776 | dependencies: 777 | "@isaacs/cliui" "^8.0.2" 778 | optionalDependencies: 779 | "@pkgjs/parseargs" "^0.11.0" 780 | 781 | loupe@^3.1.0, loupe@^3.1.1: 782 | version "3.1.1" 783 | resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.1.tgz#71d038d59007d890e3247c5db97c1ec5a92edc54" 784 | integrity sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw== 785 | dependencies: 786 | get-func-name "^2.0.1" 787 | 788 | lru-cache@^10.2.0: 789 | version "10.4.3" 790 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" 791 | integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== 792 | 793 | magic-string@^0.30.10: 794 | version "0.30.10" 795 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" 796 | integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== 797 | dependencies: 798 | "@jridgewell/sourcemap-codec" "^1.4.15" 799 | 800 | magicast@^0.3.4: 801 | version "0.3.4" 802 | resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.3.4.tgz#bbda1791d03190a24b00ff3dd18151e7fd381d19" 803 | integrity sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q== 804 | dependencies: 805 | "@babel/parser" "^7.24.4" 806 | "@babel/types" "^7.24.0" 807 | source-map-js "^1.2.0" 808 | 809 | make-dir@^4.0.0: 810 | version "4.0.0" 811 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" 812 | integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== 813 | dependencies: 814 | semver "^7.5.3" 815 | 816 | make-error@^1.1.1: 817 | version "1.3.6" 818 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 819 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 820 | 821 | merge-stream@^2.0.0: 822 | version "2.0.0" 823 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 824 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 825 | 826 | mimic-fn@^4.0.0: 827 | version "4.0.0" 828 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" 829 | integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== 830 | 831 | minimatch@^9.0.4: 832 | version "9.0.5" 833 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" 834 | integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== 835 | dependencies: 836 | brace-expansion "^2.0.1" 837 | 838 | "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: 839 | version "7.1.2" 840 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" 841 | integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== 842 | 843 | ms@2.1.2: 844 | version "2.1.2" 845 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 846 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 847 | 848 | nanoid@^3.3.7: 849 | version "3.3.7" 850 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" 851 | integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== 852 | 853 | normalize-path@^3.0.0, normalize-path@~3.0.0: 854 | version "3.0.0" 855 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 856 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 857 | 858 | npm-run-path@^5.1.0: 859 | version "5.3.0" 860 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" 861 | integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== 862 | dependencies: 863 | path-key "^4.0.0" 864 | 865 | onetime@^6.0.0: 866 | version "6.0.0" 867 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" 868 | integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== 869 | dependencies: 870 | mimic-fn "^4.0.0" 871 | 872 | package-json-from-dist@^1.0.0: 873 | version "1.0.0" 874 | resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" 875 | integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== 876 | 877 | path-key@^3.1.0: 878 | version "3.1.1" 879 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 880 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 881 | 882 | path-key@^4.0.0: 883 | version "4.0.0" 884 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" 885 | integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== 886 | 887 | path-scurry@^1.11.1: 888 | version "1.11.1" 889 | resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" 890 | integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== 891 | dependencies: 892 | lru-cache "^10.2.0" 893 | minipass "^5.0.0 || ^6.0.2 || ^7.0.0" 894 | 895 | pathe@^1.1.2: 896 | version "1.1.2" 897 | resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" 898 | integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== 899 | 900 | pathval@^2.0.0: 901 | version "2.0.0" 902 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25" 903 | integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== 904 | 905 | picocolors@^1.0.1: 906 | version "1.0.1" 907 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" 908 | integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== 909 | 910 | picomatch@^2.0.4, picomatch@^2.2.1: 911 | version "2.3.1" 912 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 913 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 914 | 915 | postcss@^8.4.39: 916 | version "8.4.39" 917 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.39.tgz#aa3c94998b61d3a9c259efa51db4b392e1bde0e3" 918 | integrity sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw== 919 | dependencies: 920 | nanoid "^3.3.7" 921 | picocolors "^1.0.1" 922 | source-map-js "^1.2.0" 923 | 924 | readdirp@~3.6.0: 925 | version "3.6.0" 926 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 927 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 928 | dependencies: 929 | picomatch "^2.2.1" 930 | 931 | rollup@^4.13.0: 932 | version "4.18.1" 933 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.18.1.tgz#18a606df5e76ca53b8a69f2d8eab256d69dda851" 934 | integrity sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A== 935 | dependencies: 936 | "@types/estree" "1.0.5" 937 | optionalDependencies: 938 | "@rollup/rollup-android-arm-eabi" "4.18.1" 939 | "@rollup/rollup-android-arm64" "4.18.1" 940 | "@rollup/rollup-darwin-arm64" "4.18.1" 941 | "@rollup/rollup-darwin-x64" "4.18.1" 942 | "@rollup/rollup-linux-arm-gnueabihf" "4.18.1" 943 | "@rollup/rollup-linux-arm-musleabihf" "4.18.1" 944 | "@rollup/rollup-linux-arm64-gnu" "4.18.1" 945 | "@rollup/rollup-linux-arm64-musl" "4.18.1" 946 | "@rollup/rollup-linux-powerpc64le-gnu" "4.18.1" 947 | "@rollup/rollup-linux-riscv64-gnu" "4.18.1" 948 | "@rollup/rollup-linux-s390x-gnu" "4.18.1" 949 | "@rollup/rollup-linux-x64-gnu" "4.18.1" 950 | "@rollup/rollup-linux-x64-musl" "4.18.1" 951 | "@rollup/rollup-win32-arm64-msvc" "4.18.1" 952 | "@rollup/rollup-win32-ia32-msvc" "4.18.1" 953 | "@rollup/rollup-win32-x64-msvc" "4.18.1" 954 | fsevents "~2.3.2" 955 | 956 | sass@^1.77.8: 957 | version "1.77.8" 958 | resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.8.tgz#9f18b449ea401759ef7ec1752a16373e296b52bd" 959 | integrity sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ== 960 | dependencies: 961 | chokidar ">=3.0.0 <4.0.0" 962 | immutable "^4.0.0" 963 | source-map-js ">=0.6.2 <2.0.0" 964 | 965 | semver@^7.5.3: 966 | version "7.6.3" 967 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" 968 | integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== 969 | 970 | shebang-command@^2.0.0: 971 | version "2.0.0" 972 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 973 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 974 | dependencies: 975 | shebang-regex "^3.0.0" 976 | 977 | shebang-regex@^3.0.0: 978 | version "3.0.0" 979 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 980 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 981 | 982 | siginfo@^2.0.0: 983 | version "2.0.0" 984 | resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" 985 | integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== 986 | 987 | signal-exit@^4.0.1, signal-exit@^4.1.0: 988 | version "4.1.0" 989 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" 990 | integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== 991 | 992 | "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.0: 993 | version "1.2.0" 994 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" 995 | integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== 996 | 997 | stackback@0.0.2: 998 | version "0.0.2" 999 | resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" 1000 | integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== 1001 | 1002 | std-env@^3.7.0: 1003 | version "3.7.0" 1004 | resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" 1005 | integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== 1006 | 1007 | "string-width-cjs@npm:string-width@^4.2.0": 1008 | version "4.2.3" 1009 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1010 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1011 | dependencies: 1012 | emoji-regex "^8.0.0" 1013 | is-fullwidth-code-point "^3.0.0" 1014 | strip-ansi "^6.0.1" 1015 | 1016 | string-width@^4.1.0: 1017 | version "4.2.3" 1018 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1019 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1020 | dependencies: 1021 | emoji-regex "^8.0.0" 1022 | is-fullwidth-code-point "^3.0.0" 1023 | strip-ansi "^6.0.1" 1024 | 1025 | string-width@^5.0.1, string-width@^5.1.2: 1026 | version "5.1.2" 1027 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" 1028 | integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== 1029 | dependencies: 1030 | eastasianwidth "^0.2.0" 1031 | emoji-regex "^9.2.2" 1032 | strip-ansi "^7.0.1" 1033 | 1034 | "strip-ansi-cjs@npm:strip-ansi@^6.0.1": 1035 | version "6.0.1" 1036 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1037 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1038 | dependencies: 1039 | ansi-regex "^5.0.1" 1040 | 1041 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1042 | version "6.0.1" 1043 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1044 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1045 | dependencies: 1046 | ansi-regex "^5.0.1" 1047 | 1048 | strip-ansi@^7.0.1: 1049 | version "7.1.0" 1050 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" 1051 | integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== 1052 | dependencies: 1053 | ansi-regex "^6.0.1" 1054 | 1055 | strip-final-newline@^3.0.0: 1056 | version "3.0.0" 1057 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" 1058 | integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== 1059 | 1060 | supports-color@^7.1.0: 1061 | version "7.2.0" 1062 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1063 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1064 | dependencies: 1065 | has-flag "^4.0.0" 1066 | 1067 | test-exclude@^7.0.1: 1068 | version "7.0.1" 1069 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-7.0.1.tgz#20b3ba4906ac20994e275bbcafd68d510264c2a2" 1070 | integrity sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg== 1071 | dependencies: 1072 | "@istanbuljs/schema" "^0.1.2" 1073 | glob "^10.4.1" 1074 | minimatch "^9.0.4" 1075 | 1076 | tinybench@^2.8.0: 1077 | version "2.8.0" 1078 | resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.8.0.tgz#30e19ae3a27508ee18273ffed9ac7018949acd7b" 1079 | integrity sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw== 1080 | 1081 | tinypool@^1.0.0: 1082 | version "1.0.0" 1083 | resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.0.0.tgz#a68965218e04f4ad9de037d2a1cd63cda9afb238" 1084 | integrity sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ== 1085 | 1086 | tinyrainbow@^1.2.0: 1087 | version "1.2.0" 1088 | resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-1.2.0.tgz#5c57d2fc0fb3d1afd78465c33ca885d04f02abb5" 1089 | integrity sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ== 1090 | 1091 | tinyspy@^3.0.0: 1092 | version "3.0.0" 1093 | resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-3.0.0.tgz#cb61644f2713cd84dee184863f4642e06ddf0585" 1094 | integrity sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA== 1095 | 1096 | to-fast-properties@^2.0.0: 1097 | version "2.0.0" 1098 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 1099 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 1100 | 1101 | to-regex-range@^5.0.1: 1102 | version "5.0.1" 1103 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1104 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1105 | dependencies: 1106 | is-number "^7.0.0" 1107 | 1108 | ts-node@^10.9.2: 1109 | version "10.9.2" 1110 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" 1111 | integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== 1112 | dependencies: 1113 | "@cspotcode/source-map-support" "^0.8.0" 1114 | "@tsconfig/node10" "^1.0.7" 1115 | "@tsconfig/node12" "^1.0.7" 1116 | "@tsconfig/node14" "^1.0.0" 1117 | "@tsconfig/node16" "^1.0.2" 1118 | acorn "^8.4.1" 1119 | acorn-walk "^8.1.1" 1120 | arg "^4.1.0" 1121 | create-require "^1.1.0" 1122 | diff "^4.0.1" 1123 | make-error "^1.1.1" 1124 | v8-compile-cache-lib "^3.0.1" 1125 | yn "3.1.1" 1126 | 1127 | typescript@^5.5.3: 1128 | version "5.5.3" 1129 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.3.tgz#e1b0a3c394190838a0b168e771b0ad56a0af0faa" 1130 | integrity sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ== 1131 | 1132 | undici-types@~5.26.4: 1133 | version "5.26.5" 1134 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" 1135 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== 1136 | 1137 | v8-compile-cache-lib@^3.0.1: 1138 | version "3.0.1" 1139 | resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" 1140 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== 1141 | 1142 | vite-node@2.0.4: 1143 | version "2.0.4" 1144 | resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-2.0.4.tgz#5600cc9f0d9c3ff9a64050c6858e7e1b62fb3fcd" 1145 | integrity sha512-ZpJVkxcakYtig5iakNeL7N3trufe3M6vGuzYAr4GsbCTwobDeyPJpE4cjDhhPluv8OvQCFzu2LWp6GkoKRITXA== 1146 | dependencies: 1147 | cac "^6.7.14" 1148 | debug "^4.3.5" 1149 | pathe "^1.1.2" 1150 | tinyrainbow "^1.2.0" 1151 | vite "^5.0.0" 1152 | 1153 | vite@^5.0.0: 1154 | version "5.3.5" 1155 | resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.5.tgz#b847f846fb2b6cb6f6f4ed50a830186138cb83d8" 1156 | integrity sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA== 1157 | dependencies: 1158 | esbuild "^0.21.3" 1159 | postcss "^8.4.39" 1160 | rollup "^4.13.0" 1161 | optionalDependencies: 1162 | fsevents "~2.3.3" 1163 | 1164 | vite@^5.3.4: 1165 | version "5.3.4" 1166 | resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.4.tgz#b36ebd47c8a5e3a8727046375d5f10bf9fdf8715" 1167 | integrity sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA== 1168 | dependencies: 1169 | esbuild "^0.21.3" 1170 | postcss "^8.4.39" 1171 | rollup "^4.13.0" 1172 | optionalDependencies: 1173 | fsevents "~2.3.3" 1174 | 1175 | vitest@^2.0.4: 1176 | version "2.0.4" 1177 | resolved "https://registry.yarnpkg.com/vitest/-/vitest-2.0.4.tgz#ac6bfbaee53e502cee864b07a5b2edf1fcba793e" 1178 | integrity sha512-luNLDpfsnxw5QSW4bISPe6tkxVvv5wn2BBs/PuDRkhXZ319doZyLOBr1sjfB5yCEpTiU7xCAdViM8TNVGPwoog== 1179 | dependencies: 1180 | "@ampproject/remapping" "^2.3.0" 1181 | "@vitest/expect" "2.0.4" 1182 | "@vitest/pretty-format" "^2.0.4" 1183 | "@vitest/runner" "2.0.4" 1184 | "@vitest/snapshot" "2.0.4" 1185 | "@vitest/spy" "2.0.4" 1186 | "@vitest/utils" "2.0.4" 1187 | chai "^5.1.1" 1188 | debug "^4.3.5" 1189 | execa "^8.0.1" 1190 | magic-string "^0.30.10" 1191 | pathe "^1.1.2" 1192 | std-env "^3.7.0" 1193 | tinybench "^2.8.0" 1194 | tinypool "^1.0.0" 1195 | tinyrainbow "^1.2.0" 1196 | vite "^5.0.0" 1197 | vite-node "2.0.4" 1198 | why-is-node-running "^2.3.0" 1199 | 1200 | which@^2.0.1: 1201 | version "2.0.2" 1202 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1203 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1204 | dependencies: 1205 | isexe "^2.0.0" 1206 | 1207 | why-is-node-running@^2.3.0: 1208 | version "2.3.0" 1209 | resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04" 1210 | integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== 1211 | dependencies: 1212 | siginfo "^2.0.0" 1213 | stackback "0.0.2" 1214 | 1215 | "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": 1216 | version "7.0.0" 1217 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1218 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1219 | dependencies: 1220 | ansi-styles "^4.0.0" 1221 | string-width "^4.1.0" 1222 | strip-ansi "^6.0.0" 1223 | 1224 | wrap-ansi@^8.1.0: 1225 | version "8.1.0" 1226 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" 1227 | integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== 1228 | dependencies: 1229 | ansi-styles "^6.1.0" 1230 | string-width "^5.0.1" 1231 | strip-ansi "^7.0.1" 1232 | 1233 | yn@3.1.1: 1234 | version "3.1.1" 1235 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 1236 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 1237 | --------------------------------------------------------------------------------