├── .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 |
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 |
--------------------------------------------------------------------------------