├── .editorconfig ├── .github ├── FUNDING.yml └── workflows │ └── main.yml ├── .gitignore ├── LICENSE ├── eslint.config.mjs ├── jest.config.js ├── package.json ├── readme.md ├── src └── truncate.ts ├── test ├── demo.ts └── truncate.spec.ts ├── tsconfig.json ├── vite.config.ts └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.{md,markdown}] 12 | trim_trailing_whitespace = false 13 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | 4 | ko_fi: esaiya 5 | github: oe 6 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: CI 4 | 5 | # Controls when the action will run. Triggers the workflow on push or pull request 6 | # events but only for the main branch 7 | on: 8 | push: 9 | branches: 10 | - main 11 | - feat/* 12 | pull_request: 13 | branches: [ main ] 14 | 15 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 16 | jobs: 17 | # This workflow contains a single job called "build" 18 | build: 19 | # The type of runner that the job will run on 20 | runs-on: ubuntu-latest 21 | 22 | # Steps represent a sequence of tasks that will be executed as part of the job 23 | steps: 24 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 25 | - uses: actions/checkout@v2 26 | - name: Use Node.js 27 | uses: actions/setup-node@v1 28 | with: 29 | node-version: '18.x' 30 | 31 | - name: install deps 32 | run: yarn 33 | 34 | - name: build lib 35 | run: yarn test && yarn build 36 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | config.codekit 2 | validate.js 3 | test.coffee 4 | lib/test.js 5 | lib/truncate-old.coffee 6 | node_modules 7 | coverage 8 | npm-debug.log 9 | .idea 10 | .vscode 11 | .rpt2_cache 12 | .parcel-cache 13 | dist -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Saiya 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 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslint from '@eslint/js'; 2 | import tseslint from 'typescript-eslint'; 3 | 4 | export default tseslint.config( 5 | eslint.configs.recommended, 6 | ...tseslint.configs.strict, 7 | ...tseslint.configs.stylistic, 8 | ); 9 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('ts-jest').JestConfigWithTsJest} */ 2 | module.exports = { 3 | preset: 'ts-jest', 4 | testEnvironment: 'node', 5 | collectCoverage: true, 6 | }; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "truncate-html", 3 | "version": "1.2.1", 4 | "description": "Truncate HTML and Keep Tags", 5 | "main": "dist/truncate.cjs.js", 6 | "module": "dist/truncate.es.js", 7 | "types": "dist/truncate.d.ts", 8 | "files": [ 9 | "dist" 10 | ], 11 | "scripts": { 12 | "dev": "tsx ./test/demo.ts", 13 | "build": "vite build", 14 | "prepublish": "yarn test && yarn build", 15 | "test": "vitest --coverage", 16 | "test:server": "vitest --watch", 17 | "lint": "eslint src" 18 | }, 19 | "dependencies": { 20 | "cheerio": "1.0.0-rc.12" 21 | }, 22 | "devDependencies": { 23 | "@eslint/js": "^9.12.0", 24 | "@types/eslint__js": "^8.42.3", 25 | "@vitest/coverage-v8": "2.1.2", 26 | "eslint": "^9.12.0", 27 | "tsx": "^4.19.1", 28 | "typescript": "^5.6.3", 29 | "typescript-eslint": "^8.8.1", 30 | "vite": "^5.4.8", 31 | "vite-plugin-dts": "^4.2.4", 32 | "vitest": "^2.1.2" 33 | }, 34 | "repository": { 35 | "type": "git", 36 | "url": "git+https://oe@github.com/oe/truncate-html.git" 37 | }, 38 | "keywords": [ 39 | "truncate html", 40 | "html", 41 | "truncate" 42 | ], 43 | "author": { 44 | "name": "Saiya", 45 | "url": "https://github.com/oe" 46 | }, 47 | "contributors": [ 48 | { 49 | "name": "Caleb Eno", 50 | "url": "https://github.com/calebeno" 51 | }, 52 | { 53 | "name": "Aaditya Thakkar", 54 | "url": "https://github.com/aaditya-thakkar" 55 | } 56 | ], 57 | "license": "MIT", 58 | "bugs": { 59 | "url": "https://github.com/oe/truncate-html/issues" 60 | }, 61 | "homepage": "https://github.com/oe/truncate-html#readme" 62 | } 63 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 |

truncate-html

2 | 3 |
Truncate html string(even contains emoji chars) and keep tags in safe. You can custom ellipsis sign, ignore unwanted elements and truncate html by words.
4 |
5 | 6 | Github Actions 7 | 8 | 9 | code with typescript 10 | 11 | 12 | npm version 13 | 14 | 15 | npm downloads 16 | 17 |
18 | 19 |
20 | 21 | **Notice** This is a node module depends on [cheerio](https://github.com/cheeriojs/cheerio) _can only run on nodejs_. If you need a browser version, you may consider [truncate](https://github.com/pathable/truncate) or [nodejs-html-truncate](https://github.com/huang47/nodejs-html-truncate). 22 | 23 | ```javascript 24 | const truncate = require('truncate-html') 25 | truncate('

Hello from earth!

', 2, { byWords: true }) 26 | // =>

Hello from ...

27 | ``` 28 | 29 | ## Installation 30 | 31 | `npm install truncate-html`
32 | or
33 | `yarn add truncate-html` 34 | 35 | ## Try it online 36 | 37 | Click **** to try. 38 | 39 | ## API 40 | 41 | ```ts 42 | /** 43 | * custom node strategy, default to Cheerio 44 | * * 'remove' to remove the node 45 | * * 'keep' to keep the node(and anything inside it) anyway, and won't be counted as there is no text content in it 46 | * * Cheerio truncate the returned node 47 | * * undefined or any falsy value to truncate original node 48 | */ 49 | type ICustomNodeStrategy = (node: Cheerio) => 'remove' | 'keep' | Cheerio | undefined 50 | 51 | /** 52 | * truncate-html full options object 53 | */ 54 | interface IFullOptions { 55 | /** 56 | * remove all tags, default false 57 | */ 58 | stripTags: boolean 59 | /** 60 | * ellipsis sign, default '...' 61 | */ 62 | ellipsis: string 63 | /** 64 | * decode html entities(e.g. convert `&` to `&`) before counting length, default false 65 | */ 66 | decodeEntities: boolean 67 | /** 68 | * elements' selector you want ignore 69 | */ 70 | excludes: string | string[] 71 | /** 72 | * custom node strategy, default to Cheerio 73 | * * 'remove' to remove the node 74 | * * 'keep' to keep the node(and anything inside it) anyway, and won't be counted as there is no text content in it 75 | * * Cheerio truncate the returned node 76 | * * undefined or any falsy value to truncate original node 77 | */ 78 | customNodeStrategy: ICustomNodeStrategy 79 | /** 80 | * how many letters(words if `byWords` is true) you want reserve 81 | */ 82 | length: number 83 | /** 84 | * if true, length means how many words to reserve 85 | */ 86 | byWords: boolean 87 | /** 88 | * how to deal with when truncate in the middle of a word 89 | * 1. by default, just cut at that position. 90 | * 2. set it to true, with max exceed 10 letters can exceed to reserver the last word 91 | * 3. set it to a positive number decide how many letters can exceed to reserve the last word 92 | * 4. set it to negative number to remove the last word if cut in the middle. 93 | */ 94 | reserveLastWord: boolean | number 95 | /** 96 | * if reserveLastWord set to negative number, and there is only one word in the html string, when trimTheOnlyWord set to true, the extra letters will be sliced if word's length longer than `length`. 97 | * see issue #23 for more details 98 | */ 99 | trimTheOnlyWord: boolean 100 | /** 101 | * keep whitespaces, by default continuous paces will 102 | * be replaced with one space, set it true to keep them 103 | */ 104 | keepWhitespaces: boolean 105 | } 106 | 107 | /** 108 | * options interface for function 109 | */ 110 | type IOptions = Partial 111 | 112 | function truncate(html: string | CheerioAPI, length?: number | IOptions, truncateOptions?: IOptions): string 113 | // and truncate.setup to change default options 114 | truncate.setup(options: IOptions): void 115 | ``` 116 | 117 | ### Default options 118 | 119 | ```js 120 | { 121 | stripTags: false, 122 | ellipsis: '...', 123 | decodeEntities: false, 124 | excludes: '', 125 | byWords: false, 126 | reserveLastWord: false, 127 | trimTheOnlyWord: false, 128 | keepWhitespaces: false 129 | } 130 | ``` 131 | 132 | You can change default options by using `truncate.setup` 133 | 134 | e.g. 135 | 136 | ```ts 137 | truncate.setup({ stripTags: true, length: 10 }) 138 | truncate('

Hello from earth!

') 139 | // => Hello from 140 | ``` 141 | 142 | or use existing [cheerio instance](https://github.com/cheeriojs/cheerio#loading) 143 | 144 | ```ts 145 | import * as cheerio from 'cheerio' 146 | truncate.setup({ stripTags: true, length: 10 }) 147 | // truncate option `decodeEntities` will not work 148 | // you should config it in cheerio options by yourself 149 | const $ = cheerio.load('

Hello from earth!

', { 150 | /** set decodeEntities if you need it */ 151 | decodeEntities: true 152 | /* any cheerio instance options*/ 153 | }, false) // third parameter is for `isDocument` option, set to false to get rid of extra wrappers, see cheerio's doc for details 154 | truncate($) 155 | // => Hello from 156 | ``` 157 | 158 | 159 | ## Notice 160 | 161 | ### Typescript support 162 | 163 | This lib is written with typescript and has a type definition file along with it. ~~You may need to update your `tsconfig.json` by adding `"esModuleInterop": true` to the `compilerOptions` if you encounter some typing errors, see [#19](https://github.com/oe/truncate-html/issues/19).~~ 164 | 165 | ```ts 166 | import truncate, { type IOptions } from 'truncate-html' 167 | 168 | 169 | const html = '

italicboldThis is a string

for test.' 170 | 171 | const options: IOptions = { 172 | length: 10, 173 | byWords: true 174 | } 175 | 176 | truncate(html, options) 177 | // =>

italicbold...

178 | ``` 179 | 180 | ### custom node truncate strategy 181 | In complex html string, you may want to keep some special elements and truncate the others. You can use `customNodeStrategy` to achieve this: 182 | * return `'remove'` to remove the node 183 | * `keep` to keep the node(and anything inside it) anyway, and won't be counted as there is no text content in it 184 | * `Cheerio` to truncate the returned node, or any falsy value to truncate the original node. 185 | 186 | ```ts 187 | import truncate, { type IOptions, type ICustomNodeStrategy } from 'truncate-html' 188 | 189 | // argument node is a cheerio instance 190 | const customNodeStrategy: ICustomNodeStrategy = node => { 191 | // remove img tag 192 | if (node.is('img')) { 193 | return 'remove' 194 | } 195 | // keep italic tag and its children 196 | if (node.is('i')) { 197 | return 'keep' 198 | } 199 | // truncate summary tag that inside details tag instead of details tag 200 | if (node.is('details')) { 201 | return node.find('summary') 202 | } 203 | } 204 | 205 | const html = '
italicbold
Click me

Some details

This is a string
for test.' 206 | 207 | const options: IOptions = { 208 | length: 10, 209 | customNodeStrategy 210 | } 211 | 212 | truncate(html, options) 213 | // =>
italicbold
Click me

Some details

Th...
214 | 215 | 216 | ``` 217 | 218 | ### About final string length 219 | 220 | If the html string content's length is shorter than `options.length`, then no ellipsis will be appended to the final html string. If longer, then the final string length will be `options.length` + `options.ellipsis`. And if you set `reserveLastWord` to true or none zero number or using `customNodeStrategy`, the final string will be various. 221 | 222 | ### About html comments 223 | 224 | All html comments `` will be removed 225 | 226 | ### About dealing with none alphabetic languages 227 | 228 | When dealing with none alphabetic languages, such as Chinese/Japanese/Korean, they don't separate words with whitespaces, so options `byWords` and `reserveLastWord` should only works well with alphabetic languages. 229 | 230 | And the only dependency of this project `cheerio` has an issue when dealing with none alphabetic languages, see [Known Issues](#known-issues) for details. 231 | 232 | ### Using existing cheerio instance 233 | 234 | If you want to use existing cheerio instance, truncate option `decodeEntities` will not work, you should set it in your own cheerio instance: 235 | 236 | ```js 237 | var html = '

This is a string

for test.' 238 | const $ = cheerio.load(`${html}`, { 239 | decodeEntities: true 240 | /** other cheerio options */ 241 | }, false) // third parameter is for `isDocument` option, set to false to get rid of extra wrappers, see cheerio's doc for details 242 | truncate($, 10) 243 | 244 | ``` 245 | 246 | ## Examples 247 | 248 | ```javascript 249 | var truncate = require('truncate-html') 250 | 251 | // truncate html 252 | var html = '

This is a string

for test.' 253 | truncate(html, 10) 254 | // returns:

This is a ...

255 | 256 | // truncate string with emojis 257 | var string = '

poo 💩💩💩💩💩

' 258 | truncate(string, 6) 259 | // returns:

poo 💩💩...

260 | 261 | // with options, remove all tags 262 | var html = '

This is a string

for test.' 263 | truncate(html, 10, { stripTags: true }) 264 | // returns: This is a ... 265 | 266 | // with options, truncate by words. 267 | // if you try to truncate none alphabet language(like CJK) 268 | // it will not act as you wish 269 | var html = '

This is a string

for test.' 270 | truncate(html, 3, { byWords: true }) 271 | // returns:

This is a ...

272 | 273 | // with options, keep whitespaces 274 | var html = '

This is a string

for test.' 275 | truncate(html, 10, { keepWhitespaces: true }) 276 | // returns:

This is a ...

277 | 278 | // combine length and options 279 | var html = '

This is a string

for test.' 280 | truncate(html, { 281 | length: 10, 282 | stripTags: true 283 | }) 284 | // returns: This is a ... 285 | 286 | // custom ellipsis sign 287 | var html = '

This is a string

for test.' 288 | truncate(html, { 289 | length: 10, 290 | ellipsis: '~' 291 | }) 292 | // returns:

This is a ~

293 | 294 | // exclude some special elements(by selector), they will be removed before counting content's length 295 | var html = '

This is a string

for test.' 296 | truncate(html, { 297 | length: 10, 298 | ellipsis: '~', 299 | excludes: 'img' 300 | }) 301 | // returns:

This is a ~

302 | 303 | // exclude more than one category elements 304 | var html = 305 | '

This is a string

unwanted string inserted ( ´•̥̥̥ω•̥̥̥` )
for test.' 306 | truncate(html, { 307 | length: 20, 308 | stripTags: true, 309 | ellipsis: '~', 310 | excludes: ['img', '.something-unwanted'] 311 | }) 312 | // returns: This is a string for~ 313 | 314 | // handing encoded characters 315 | var html = '

 test for <p> encoded string

' 316 | truncate(html, { 317 | length: 20, 318 | decodeEntities: true 319 | }) 320 | // returns:

test for <p> encode...

321 | 322 | // when set decodeEntities false 323 | var html = '

 test for <p> encoded string

' 324 | truncate(html, { 325 | length: 20, 326 | decodeEntities: false // this is the default value 327 | }) 328 | // returns:

 test for <p...

329 | 330 | // and there may be a surprise by setting `decodeEntities` to true when handing CJK characters 331 | var html = '

 test for <p> 中文 string

' 332 | truncate(html, { 333 | length: 20, 334 | decodeEntities: true 335 | }) 336 | // returns:

test for <p> 中文 str...

337 | // to fix this, see below for instructions 338 | 339 | 340 | // custom node strategy to keep some special elements 341 | var html = '

italicboldThis is a string

for test.' 342 | truncate(html, { 343 | length: 10, 344 | customNodeStrategy: node => { 345 | if (node.is('img')) { 346 | return 'remove' 347 | } 348 | if (node.is('i')) { 349 | return 'keep' 350 | } 351 | } 352 | }) 353 | // returns:

italicboldThis is a ...

354 | 355 | // custom node strategy to truncate summary instead of original node 356 | var html = '
Click me

Some details

other things
' 357 | truncate(html, { 358 | length: 10, 359 | customNodeStrategy: node => { 360 | if (node.is('details')) { 361 | return node.find('summary') 362 | } 363 | } 364 | }) 365 | // returns:
Click me

Some details

ot...
366 | ``` 367 | 368 | for More usages, check [truncate.spec.ts](./test/truncate.spec.ts) 369 | 370 | ## Credits 371 | 372 | Thanks to: 373 | 374 | - [@calebeno](https://github.com/calebeno) es6 support and unit tests 375 | - [@aaditya-thakkar](https://github.com/aaditya-thakkar) emoji truncating support 376 | -------------------------------------------------------------------------------- /src/truncate.ts: -------------------------------------------------------------------------------- 1 | import cheerio, { CheerioAPI, Cheerio, AnyNode } from 'cheerio' 2 | 3 | /** 4 | * custom node strategy, default to Cheerio 5 | * * 'remove' to remove the node 6 | * * 'keep' to keep the node(and anything inside it) anyway, and won't be counted as there is no text content in it 7 | * * Cheerio truncate the returned node 8 | * * undefined or any falsy value to truncate original node 9 | */ 10 | export type ICustomNodeStrategy = (node: Cheerio) => 'remove' | 'keep' | Cheerio | undefined 11 | 12 | /** 13 | * truncate-html full options object 14 | */ 15 | export interface IFullOptions { 16 | /** 17 | * remove all tags, default false 18 | */ 19 | stripTags: boolean 20 | /** 21 | * ellipsis sign, default '...' 22 | */ 23 | ellipsis: string 24 | /** 25 | * decode html entities(e.g. convert `&` to `&`) before counting length, default false 26 | */ 27 | decodeEntities: boolean 28 | /** 29 | * elements' selector you want ignore 30 | */ 31 | excludes: string | string[] 32 | /** 33 | * custom node strategy, default to Cheerio 34 | * * 'remove' to remove the node 35 | * * 'keep' to keep the node(and anything inside it) anyway, and won't be counted as there is no text content in it 36 | * * Cheerio truncate the returned node 37 | * * undefined or any falsy value to truncate original node 38 | */ 39 | customNodeStrategy: ICustomNodeStrategy 40 | /** 41 | * how many letters(words if `byWords` is true) you want reserve 42 | */ 43 | length: number 44 | /** 45 | * if true, length means how many words to reserve 46 | */ 47 | byWords: boolean 48 | /** 49 | * how to deal with when truncate in the middle of a word 50 | * 1. by default, just cut at that position. 51 | * 2. set it to true, with max exceed 10 letters can exceed to reserver the last word 52 | * 3. set it to a positive number decide how many letters can exceed to reserve the last word 53 | * 4. set it to negative number to remove the last word if cut in the middle. 54 | */ 55 | reserveLastWord: boolean | number 56 | /** 57 | * if reserveLastWord set to negative number, and there is only one word in the html string, when trimTheOnlyWord set to true, the extra letters will be sliced if word's length longer than `length`. 58 | * see issue #23 for more details 59 | */ 60 | trimTheOnlyWord: boolean 61 | /** 62 | * keep whitespaces, by default continuous paces will 63 | * be replaced with one space, set it true to keep them 64 | */ 65 | keepWhitespaces: boolean 66 | } 67 | 68 | type ITruncateOptions = IFullOptions & { limit: number } 69 | 70 | /** 71 | * options interface for function 72 | */ 73 | export type IOptions = Partial 74 | 75 | const astralRange = /\ud83c[\udffb-\udfff](?=\ud83c[\udffb-\udfff])|(?:[^\ud800-\udfff][\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]?|[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?(?:\u200d(?:[^\ud800-\udfff]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?)*/g 76 | 77 | const defaultOptions: IOptions = { 78 | // remove all tags 79 | stripTags: false, 80 | // postfix of the string 81 | ellipsis: '...', 82 | // decode html entities 83 | decodeEntities: false, 84 | // whether truncate by words 85 | byWords: false, 86 | // // truncate by words, set to true keep words 87 | // // set to number then truncate by word count 88 | // length: 0 89 | excludes: '', // remove tags 90 | customNodeStrategy: (n: Cheerio) => n, 91 | reserveLastWord: false, // keep word completed if truncate at the middle of the word, works no matter byWords is true/false 92 | trimTheOnlyWord: false, 93 | keepWhitespaces: false // even if set true, continuous whitespace will count as one 94 | } 95 | 96 | // an special object to store user's default options, keep the defaultOptions clean 97 | let userDefaults: IOptions = defaultOptions 98 | 99 | export default function truncate(html: string | CheerioAPI, length?: number | IOptions, truncateOptions?: IOptions): string { 100 | const options = sanitizeOptions(length, truncateOptions) 101 | 102 | if (!html || 103 | isNaN(options.length) || 104 | options.length < 1 || 105 | options.length === Infinity) { 106 | return isCheerioInstance(html) ? (html.html() || '') : html 107 | } 108 | 109 | let $: CheerioAPI 110 | 111 | if (isCheerioInstance(html)) { 112 | $ = html 113 | } else { 114 | // Add a wrapper for text node without tag like: 115 | //

Lorem ipsum

dolor sit =>

Lorem ipsum

dolor sit

116 | // the third parameter is false to prevent wrap html in html/body tags 117 | $ = cheerio.load(`${html}`, { 118 | decodeEntities: options.decodeEntities 119 | }, false) 120 | } 121 | 122 | const $html = $.root() 123 | // remove excludes elements 124 | if (options.excludes) $html.find(options.excludes as string).remove() 125 | 126 | if (options.stripTags) { 127 | return truncateText($html.text(), options) 128 | } 129 | 130 | const travelChildren = function ($ele: Cheerio, isParentLastNode = true) { 131 | const contents = $ele.contents() 132 | const lastIdx = contents.length - 1 133 | return contents.each(function (this: AnyNode, idx) { 134 | const nodeType = this.type 135 | const node = $(this) 136 | if (nodeType === 'text') { 137 | if (!options.limit) { 138 | node.remove() 139 | return 140 | } 141 | this.data = truncateText( 142 | node.text(), 143 | options, 144 | isParentLastNode && idx === lastIdx 145 | ) 146 | return 147 | } 148 | if (nodeType === 'tag') { 149 | if (!options.limit) { 150 | node.remove() 151 | return 152 | } 153 | const strategy = options.customNodeStrategy(node) 154 | if(strategy === 'remove') { 155 | node.remove() 156 | return 157 | } 158 | if (strategy === 'keep') { 159 | return 160 | } 161 | travelChildren(strategy || node, isParentLastNode && idx === lastIdx) 162 | return 163 | } 164 | // for comments and other node types 165 | node.remove() 166 | return 167 | }) 168 | } 169 | 170 | travelChildren($html) 171 | return $html.html() || '' 172 | } 173 | 174 | truncate.setup = function (options: IOptions) { 175 | userDefaults = extendOptions(options, defaultOptions) 176 | } 177 | 178 | 179 | function truncateText(text: string, options: ITruncateOptions, isLastNode?: boolean): string { 180 | if (!options.keepWhitespaces) { 181 | text = text.replace(/\s+/g, ' ') 182 | } 183 | const byWords = options.byWords 184 | const match = text.match(astralRange) 185 | const astralSafeCharacterArray = match === null ? [] : match 186 | const strLen = match === null ? 0 : astralSafeCharacterArray.length 187 | let idx = 0 188 | let count = 0 189 | let prevIsBlank = byWords 190 | let curIsBlank = false 191 | while (idx < strLen) { 192 | curIsBlank = isBlank(astralSafeCharacterArray[idx++]) 193 | // keep same then continue 194 | if (byWords && prevIsBlank === curIsBlank) continue 195 | if (count === options.limit) { 196 | // reserve trailing whitespace, only when prev is blank too 197 | if (prevIsBlank && curIsBlank) { 198 | prevIsBlank = curIsBlank 199 | continue 200 | } 201 | // fix idx because current char belong to next words which exceed the limit 202 | --idx 203 | break 204 | } 205 | 206 | if (byWords) { 207 | if (!curIsBlank) ++count 208 | } else { 209 | if (!(curIsBlank && prevIsBlank)) ++count 210 | } 211 | prevIsBlank = curIsBlank 212 | } 213 | options.limit -= count 214 | if (options.limit) { 215 | return text 216 | } 217 | let str: string 218 | if (byWords) { 219 | str = text.substring(0, idx) 220 | } else { 221 | // @ts-expect-error fix ts error caused by regex 222 | str = astralSafeCharacterArray.length ? substr(astralSafeCharacterArray, idx, options) : '' 223 | } 224 | if (str === text) { 225 | // if is lat node, no need of ellipsis, or add it 226 | return isLastNode ? text : text + options.ellipsis 227 | } else { 228 | return str + options.ellipsis 229 | } 230 | } 231 | 232 | function substr (astralSafeCharacterArray: RegExpMatchArray, len: number, options: IFullOptions) { 233 | const sliced = astralSafeCharacterArray.slice(0, len).join('') 234 | if (!options.reserveLastWord || astralSafeCharacterArray.length === len) { 235 | return sliced 236 | } 237 | const boundary = astralSafeCharacterArray.slice(len - 1, len + 1).join('') 238 | // if truncate at word boundary, just return 239 | if (/\W/.test(boundary)) { 240 | return sliced 241 | } 242 | if (typeof options.reserveLastWord === 'number' && options.reserveLastWord < 0) { 243 | const result = sliced.replace(/\w+$/, '') 244 | // if the sliced is not the first and the only word 245 | // then return result, or return the whole word 246 | if (!(result.length === 0 && sliced.length === options.length)) { 247 | return result 248 | } 249 | if (options.trimTheOnlyWord) return sliced 250 | } 251 | 252 | // set max exceeded to 10 if this.reserveLastWord is true or < 0 253 | const maxExceeded = 254 | options.reserveLastWord !== true && options.reserveLastWord > 0 255 | ? options.reserveLastWord 256 | : 10 257 | const mtc = astralSafeCharacterArray.slice(len).join('').match(/(\w+)/) 258 | const exceeded = mtc ? mtc[1] : '' 259 | return sliced + exceeded.substring(0, maxExceeded) 260 | } 261 | 262 | function sanitizeOptions(length?: number | IOptions, truncateOptions?: IOptions) { 263 | switch (typeof length) { 264 | case 'object': 265 | truncateOptions = length 266 | break 267 | case 'number': 268 | if (typeof truncateOptions === 'object') { 269 | truncateOptions.length = length 270 | } else { 271 | truncateOptions = { 272 | length: length 273 | } 274 | } 275 | } 276 | if (truncateOptions && truncateOptions.excludes) { 277 | if (!Array.isArray(truncateOptions.excludes)) { 278 | truncateOptions.excludes = [truncateOptions.excludes] 279 | } 280 | truncateOptions.excludes = truncateOptions.excludes.join(',') 281 | } 282 | const options = extendOptions(Object.assign({}, userDefaults, truncateOptions), defaultOptions) 283 | options.limit = options.length 284 | return options as unknown as ITruncateOptions 285 | } 286 | 287 | // test a char whether a whitespace char 288 | function isBlank (char) { 289 | return ( 290 | char === ' ' || 291 | char === '\f' || 292 | char === '\n' || 293 | char === '\r' || 294 | char === '\t' || 295 | char === '\v' || 296 | char === '\u00A0' || 297 | char === '\u2028' || 298 | char === '\u2029' 299 | ) 300 | } 301 | 302 | function extendOptions(options: Record, defaultOptions: Record){ 303 | if (options == null) { 304 | options = {} 305 | } 306 | for (const k in defaultOptions) { 307 | const v = defaultOptions[k] 308 | if (options[k] != null) { 309 | continue 310 | } 311 | options[k] = v 312 | } 313 | return options 314 | } 315 | 316 | /** return true if elem is CheerioStatic */ 317 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 318 | function isCheerioInstance (elem: any): elem is CheerioAPI { 319 | return elem && 320 | elem.contains && 321 | elem.html && 322 | elem.parseHTML && true 323 | } 324 | -------------------------------------------------------------------------------- /test/demo.ts: -------------------------------------------------------------------------------- 1 | import truncate, { type ICustomNodeStrategy, type IOptions } from '../src/truncate' 2 | import * as cheerio from 'cheerio' 3 | // truncate.setup({ length: 5 }) 4 | // const html = 'string' 5 | // const expected = '12345...' 6 | 7 | // const str = 'string' 8 | // const html = cheerio.load(str) 9 | 10 | // expect(truncate(html)).toBe(str) 11 | // expect(truncate(test, 7, { 12 | // reserveLastWord: -1 // exceed 10 letters 13 | // })).toBe(expected) 14 | // @ts-ignore 15 | // console.log(truncate(html)) 16 | // console.log('expected', html) 17 | 18 | // const test = '123456789' 19 | // const expected = '12345...' 20 | // const $ = cheerio.load(test) 21 | // console.log(truncate($, 5)) 22 | // console.log(expected) 23 | 24 | // const str = '

poo 💩💩💩💩💩

' 25 | // console.log(truncate(str, 6)) 26 | 27 | let str = 'demo' 28 | str = '

a b c d ef

' 29 | // console.log(truncate(str, { length: 10, reserveLastWord: -1, ellipsis: '..' })) 30 | 31 | str = '

1234567890

' 32 | console.log(truncate(str, { length: 5, reserveLastWord: -1, trimTheOnlyWord: true, ellipsis: '...' })) 33 | 34 | let html = '

italicboldThis is a string

for test.' 35 | console.log(truncate(html, { 36 | length: 10, 37 | customNodeStrategy: node => { 38 | if (node.is('img')) { 39 | return 'remove' 40 | } 41 | if (node.is('i')) { 42 | return 'keep' 43 | } 44 | } 45 | })) 46 | // const testString = '123456
7
89
12' 47 | 48 | html = '

italicboldThis is a string

for test.' 49 | 50 | console.log(truncate(html, { 51 | length: 2, 52 | byWords: true 53 | })) 54 | 55 | html = '
Click me

Some details

other things
' 56 | console.log(truncate(html, { 57 | length: 10, 58 | customNodeStrategy: node => { 59 | if (node.is('details')) { 60 | return node.find('summary') 61 | } 62 | } 63 | })) 64 | 65 | const customNodeStrategy: ICustomNodeStrategy = node => { 66 | // remove img tag 67 | if (node.is('img')) { 68 | return 'remove' 69 | } 70 | // keep italic tag and its children 71 | if (node.is('i')) { 72 | return 'keep' 73 | } 74 | // truncate summary tag that inside details tag instead of details tag 75 | if (node.is('details')) { 76 | return node.find('summary') 77 | } 78 | } 79 | 80 | html = '
italicbold
Click me

Some details

This is a string
for test.' 81 | 82 | const options: IOptions = { 83 | length: 10, 84 | customNodeStrategy 85 | } 86 | 87 | console.log(truncate(html, options)) 88 | 89 | // const expected = '123456...' 90 | // console.log(truncate(testString, 6)) 91 | 92 | // argument node is a cheerio instance 93 | const customNodeStrategy2: ICustomNodeStrategy = node => { 94 | // truncate summary tag that inside details tag instead of details tag 95 | if (node.is('details')) { 96 | return 'keep' 97 | } 98 | } 99 | 100 | html = '
Click me

Some details

other things
' 101 | 102 | console.log(truncate(html, { 103 | length: 3, 104 | customNodeStrategy: customNodeStrategy2 105 | })) 106 | -------------------------------------------------------------------------------- /test/truncate.spec.ts: -------------------------------------------------------------------------------- 1 | import { describe, it, expect, afterEach } from 'vitest' 2 | import truncate from '../src/truncate' 3 | import cheerio, { AnyNode, Cheerio } from 'cheerio' 4 | 5 | describe('Truncate html', () => { 6 | describe('should works well when false params are given', () => { 7 | it('should NOT truncate a string if no string provided', () => { 8 | // @ts-expect-error test for null 9 | expect(truncate(null)).toBe(null) 10 | }) 11 | 12 | it('should NOT truncate a string if NO length provided', () => { 13 | const html = 'string' 14 | 15 | expect(truncate(html)).toBe(html) 16 | }) 17 | 18 | it("should NOT truncate a empty string", () => { 19 | const html = ""; 20 | expect(truncate(html, 10)).toBe(html); 21 | }); 22 | it("should NOT truncate a empty string instance", () => { 23 | const html = ""; 24 | // third parameter for removing the document wrapper 25 | const $ = cheerio.load(html, {}, false); 26 | expect(truncate($)).toBe(''); 27 | }); 28 | 29 | it("should NOT truncate a comment string", () => { 30 | const html = ""; 31 | 32 | expect(truncate(html, 2)).toBe(''); 33 | }); 34 | 35 | it('should NOT truncate a string if NO length provided $', () => { 36 | const html = 'string' 37 | const $ = cheerio.load(html) 38 | 39 | expect(truncate($)).toBe('string') 40 | }) 41 | 42 | it('should NOT truncate a string if length is less than or equal to zero', () => { 43 | const html = 'string' 44 | 45 | expect(truncate(html, 0)).toBe(html) 46 | }) 47 | 48 | it('should NOT truncate a string if length is less than or equal to zero $', () => { 49 | const html = 'string' 50 | const $ = cheerio.load(html) 51 | 52 | expect(truncate($, 0)).toBe('string') 53 | }) 54 | }) 55 | 56 | describe('truncate with options.length', () => { 57 | it('should truncate a string', () => { 58 | const test = '123456789' 59 | const expected = '12345...' 60 | 61 | expect(truncate(test, 5)).toBe(expected) 62 | }) 63 | it('should truncate a string $', () => { 64 | const test = '123456789' 65 | const expected = '12345...' 66 | const $ = cheerio.load(test, null, false) 67 | expect(truncate($, 5)).toBe(expected) 68 | }) 69 | 70 | it('should truncate a string with tags', () => { 71 | const test = '

123456789

' 72 | const expected = '

123456...

' 73 | 74 | expect(truncate(test, { length: 6 })).toBe(expected) 75 | }) 76 | it('should kepp all the string if length logger than the origin string', () => { 77 | const test = '

123456789

' 78 | const expected = '

123456789

' 79 | 80 | expect(truncate(test, { length: 100 })).toBe(expected) 81 | }) 82 | 83 | it('should truncate a string with characters outside of tags', () => { 84 | const test = '

12345

6789' 85 | const expected = '

12345

678...' 86 | 87 | expect(truncate(test, 8)).toBe(expected) 88 | }) 89 | 90 | it('should works well when truncate at tag boundary', () => { 91 | const test = 'Hello world' 92 | const expected = 'Hello ...' 93 | 94 | expect(truncate(test, 6)).toBe(expected) 95 | }) 96 | 97 | it('should works well when truncate at tag boundary-2', () => { 98 | const test = 'Hello world' 99 | const expected = 'Hello world' 100 | 101 | expect(truncate(test, 11)).toBe(expected) 102 | }) 103 | 104 | it('should truncate a string two sets of tags', () => { 105 | const test = '

12345

6789

' 106 | const expected = '

12345

67...

' 107 | 108 | expect(truncate(test, 7)).toBe(expected) 109 | }) 110 | 111 | it('should truncate a string two sets of tags $', () => { 112 | const test = cheerio.load('

12345

6789

', null, false) 113 | const expected = '

12345

67...

' 114 | 115 | expect(truncate(test, 7)).toBe(expected) 116 | }) 117 | 118 | it('should keep empty tag', () => { 119 | const test = 120 | '

12345

6789

reset text ' 121 | const expected = '

12345

67...

' 122 | 123 | expect(truncate(test, 7)).toBe(expected) 124 | }) 125 | 126 | it('should keep empty tag $', () => { 127 | const test = 128 | cheerio.load('

12345

6789

reset text ', null, false) 129 | const expected = '

12345

67...

' 130 | 131 | expect(truncate(test, 7)).toBe(expected) 132 | }) 133 | 134 | it('should remove comment', () => { 135 | const test = '

12345

6789

' 136 | const expected = '

12345

67...

' 137 | 138 | expect(truncate(test, 7)).toBe(expected) 139 | }) 140 | 141 | it('should remove comment in tag', () => { 142 | const test = '

12345

6789

' 143 | const expected = '

12345

67...

' 144 | 145 | expect(truncate(test, 7)).toBe(expected) 146 | }) 147 | 148 | describe('works with options.reserveLastWord', () => { 149 | it('should reserve the last word', () => { 150 | const test = '

12345

6789

' 151 | const expected = '

12345

6789

' 152 | 153 | expect( 154 | truncate(test, 7, { 155 | reserveLastWord: true 156 | }) 157 | ).toBe(expected) 158 | }) 159 | 160 | it('should reserve the last word(i18n)', () => { 161 | const test = '

internationalization

' 162 | const expected = '

internationalization

' 163 | 164 | expect( 165 | truncate(test, 7, { 166 | reserveLastWord: 20 // exceed 20 letters 167 | }) 168 | ).toBe(expected) 169 | }) 170 | 171 | it('should cut at the last word(i18n)', () => { 172 | const test = '

internationalization

' 173 | const expected = '

internationalizat...

' 174 | 175 | expect( 176 | truncate(test, 7, { 177 | reserveLastWord: true // exceed 10 letters 178 | }) 179 | ).toBe(expected) 180 | }) 181 | 182 | it('should reserve the last word if only one word', () => { 183 | const test = '

internationalization

' 184 | const expected = '

internationalizat...

' 185 | 186 | expect( 187 | truncate(test, 7, { 188 | reserveLastWord: -1 // exceed 10 letters 189 | }) 190 | ).toBe(expected) 191 | }) 192 | 193 | it('should remove the last word if the edge if not the only one word', () => { 194 | const test = '

abc internationalization

' 195 | const expected = '

abc ...

' 196 | 197 | expect( 198 | truncate(test, 7, { 199 | reserveLastWord: -1 // exceed 10 letters 200 | }) 201 | ).toBe(expected) 202 | }) 203 | 204 | it('should cut the only word if trimTheOnlyWord true', () => { 205 | const test = '

internationalization

' 206 | const expected = '

interna...

' 207 | 208 | expect( 209 | truncate(test, 7, { 210 | reserveLastWord: -1, // exceed 10 letters 211 | trimTheOnlyWord: true 212 | }) 213 | ).toBe(expected) 214 | }) 215 | 216 | it('should reserve the last word if only one word $', () => { 217 | const test = cheerio.load('

internationalization

', null, false) 218 | const expected = '

internationalizat...

' 219 | 220 | expect( 221 | truncate(test, 7, { 222 | reserveLastWord: true // exceed 10 letters 223 | }) 224 | ).toBe(expected) 225 | }) 226 | 227 | it('should reserve the last word if at the boundary', () => { 228 | const test = '

Hello world from earth

' 229 | const expected = '

Hello world...

' 230 | 231 | expect( 232 | truncate(test, 11, { 233 | reserveLastWord: -1 // exceed 10 letters 234 | }) 235 | ).toBe(expected) 236 | }) 237 | 238 | it('should reserve the last word if at the boundary even trimTheOnlyWord is true ', () => { 239 | const test = '

Hello world from earth

' 240 | const expected = '

Hello world...

' 241 | 242 | expect( 243 | truncate(test, 11, { 244 | reserveLastWord: -1, // exceed 10 letters 245 | trimTheOnlyWord: true 246 | }) 247 | ).toBe(expected) 248 | }) 249 | 250 | // from issue #24 251 | it('should cut correctly if string\'s length is equal to the truncation length', () => { 252 | const test = '

a b c d ef

' 253 | const expected = '

a b c d ef

' 254 | expect( 255 | truncate(test, 10, { 256 | reserveLastWord: -1 // exceed 10 letters 257 | }) 258 | ).toBe(expected) 259 | }) 260 | 261 | it('should remove the last word if more than one(i18n, reserveLastWord negative)', () => { 262 | const test = '

hello internationalization

' 263 | const expected = '

hello ...

' 264 | 265 | expect( 266 | truncate(test, 7, { 267 | reserveLastWord: -1 // exceed 10 letters 268 | }) 269 | ).toBe(expected) 270 | }) 271 | }) 272 | }) 273 | 274 | describe('with self-close tags', () => { 275 | it('should truncate a string with an image tag', () => { 276 | const html = '

This is a string

for test.' 277 | const expected = '

This is a ...

' 278 | 279 | expect(truncate(html, 10)).toBe(expected) 280 | }) 281 | 282 | it('should truncate a string with an image and br tags', () => { 283 | const html = '

This
is a string

for test.' 284 | const expected = '

This
is a ...

' 285 | 286 | expect(truncate(html, 10)).toBe(expected) 287 | }) 288 | }) 289 | 290 | describe('with options.stripTags', () => { 291 | it('should works well with plain text', () => { 292 | const html = 'This is a string for test.' 293 | const expected = 'This is a ...' 294 | const options = { 295 | stripTags: true 296 | } 297 | 298 | expect(truncate(html, 10, options)).toBe(expected) 299 | }) 300 | 301 | it('should remove all tags', () => { 302 | const html = 303 | '

This


is a string


for test.' 304 | const expected = 'This is a ...' 305 | const options = { 306 | stripTags: true 307 | } 308 | expect(truncate(html, 10, options)).toBe(expected) 309 | }) 310 | }) 311 | 312 | describe('with options.byWords', () => { 313 | it('should truncate by words', () => { 314 | const html = '

This is a string do

for test.' 315 | const expected = '

This is a string...

' 316 | const options = { 317 | byWords: true 318 | } 319 | expect(truncate(html, 4, options)).toBe(expected) 320 | }) 321 | 322 | it('should reverse the whole string when if length is bigger', () => { 323 | const html = '

This is a string do

for test.' 324 | const expected = '

This is a string do

for test.' 325 | const options = { 326 | byWords: true 327 | } 328 | expect(truncate(html, 10, options)).toBe(expected) 329 | }) 330 | 331 | it('should works well when truncate at tag boundary', () => { 332 | const test = 'Hello world' 333 | const expected = 'Hello...' 334 | const options = { 335 | byWords: true 336 | } 337 | expect(truncate(test, 1, options)).toBe(expected) 338 | }) 339 | 340 | it('should works well when truncate at tag boundary', () => { 341 | const test = 'Hello world' 342 | const expected = 'Hello world' 343 | const options = { 344 | byWords: true 345 | } 346 | expect(truncate(test, 2, options)).toBe(expected) 347 | }) 348 | 349 | describe('works with options.reserveLastWord', () => { 350 | it('should ignore reserveLastWord when byWords is on(length bigger)', () => { 351 | const html = '

This is a string do

for test.' 352 | const expected = 353 | '

This is a string do

for test.' 354 | const options = { 355 | byWords: true, 356 | reserveLastWord: true 357 | } 358 | expect(truncate(html, 10, options)).toBe(expected) 359 | }) 360 | 361 | it('should ignore reserveLastWord when byWords is on(length smaller)', () => { 362 | const html = '

This is a string do

for test.' 363 | const expected = '

This is a...

' 364 | const options = { 365 | byWords: true, 366 | reserveLastWord: true 367 | } 368 | expect(truncate(html, 3, options)).toBe(expected) 369 | }) 370 | }) 371 | }) 372 | 373 | describe('with options.whitespaces', () => { 374 | it('should trim whitespaces', () => { 375 | const html = 376 | '

This is a string

for test.' 377 | const expected = '

This is a...

' 378 | const options = { 379 | keepWhitespaces: false 380 | } 381 | 382 | expect(truncate(html, 10, options)).toBe(expected) 383 | }) 384 | 385 | it('should preserve whitespaces', () => { 386 | const html = 387 | '

This is a string

for test.' 388 | const expected = '

This is a...

' 389 | const options = { 390 | keepWhitespaces: true 391 | } 392 | 393 | expect(truncate(html, 10, options)).toBe(expected) 394 | }) 395 | 396 | it('should preserve last whitespace at boundary', () => { 397 | const html = 398 | '

Hello image. This is a string

for test.' 399 | const expected = '

Hello image. This is ...

' 400 | const options = { 401 | keepWhitespaces: true 402 | } 403 | 404 | expect(truncate(html, 21, options)).toBe(expected) 405 | }) 406 | 407 | it('should count continuous whitespaces as one', () => { 408 | const html = 409 | '

Hello image. This is a string

for test.' 410 | const expected = '

Hello image. This is...

' 411 | const options = { 412 | keepWhitespaces: true 413 | } 414 | 415 | expect(truncate(html, 20, options)).toBe(expected) 416 | }) 417 | }) 418 | 419 | describe('combine length and options', () => { 420 | it('should works with length and options separate', () => { 421 | const html = '

This is a string

for test.' 422 | const expected = 'This is a ...' 423 | const options = { 424 | stripTags: true 425 | } 426 | expect(truncate(html, 10, options)).toBe(expected) 427 | }) 428 | 429 | it('should allow length argument to be combined into the options object', () => { 430 | const html = '

This is a string

for test.' 431 | const expected = 'This is a ...' 432 | const options = { 433 | length: 10, 434 | stripTags: true 435 | } 436 | expect(truncate(html, options)).toBe(expected) 437 | }) 438 | }) 439 | 440 | describe('with options.ellipsis', () => { 441 | it('should insert a custom ellipsis sign', () => { 442 | const html = '

This is a string

for test.' 443 | const expected = '

This is a ~

' 444 | const options = { 445 | length: 10, 446 | ellipsis: '~' 447 | } 448 | 449 | expect(truncate(html, options)).toBe(expected) 450 | }) 451 | 452 | it('should not insert a custom ellipsis sign', () => { 453 | const html = '

This is a string

for test.' 454 | const expected = '

This is a string

for test.' 455 | const options = { 456 | length: 50, 457 | ellipsis: '~' 458 | } 459 | expect(truncate(html, options)).toBe(expected) 460 | }) 461 | 462 | describe('last character in html tag', () => { 463 | const testString = '123456
7
89
12' 464 | 465 | it('should add ellipsis before a tag', () => { 466 | const expected = '123456...' 467 | expect(truncate(testString, 6)).toBe(expected) 468 | }) 469 | 470 | it('should add ellipsis in a tag with one character', () => { 471 | const expected = '123456
7...
' 472 | expect(truncate(testString, 7)).toBe(expected) 473 | }) 474 | 475 | it('should add ellipsis within tag', () => { 476 | const expected = '123456
7
8...
' 477 | expect(truncate(testString, 8)).toBe(expected) 478 | }) 479 | 480 | it('should add ellipsis in a tag with multiple characters', () => { 481 | const expected = '123456
7
89...
' 482 | expect(truncate(testString, 9)).toBe(expected) 483 | }) 484 | 485 | it('should add ellipsis after a character after closing tag', () => { 486 | const expected = '123456
7
89
1...' 487 | expect(truncate(testString, 10)).toBe(expected) 488 | }) 489 | 490 | it('should add ellipsis in a nested tag ', () => { 491 | const test = '123456
7
89
12' 492 | const expected = '123456
7
89...
' 493 | expect(truncate(test, 9)).toBe(expected) 494 | }) 495 | }) 496 | }) 497 | 498 | describe('with options.excludes', () => { 499 | it('should exclude elements by selector', () => { 500 | const html = '

This is a string

for test.' 501 | const expected = '

This is a ...

' 502 | const options = { 503 | length: 10, 504 | excludes: 'img' 505 | } 506 | 507 | expect(truncate(html, options)).toBe(expected) 508 | }) 509 | 510 | it('should exclude multiple elements by selector', () => { 511 | const html = 512 | '

This is a string

unwanted string inserted ( ´•̥̥̥ω•̥̥̥` )
for test.' 513 | const expected = '

This is a string

for...' 514 | const options = { 515 | length: 20, 516 | excludes: ['img', '.something-unwanted'] 517 | } 518 | 519 | expect(truncate(html, options)).toBe(expected) 520 | }) 521 | }) 522 | 523 | describe('with options.decodeEntities', () => { 524 | it('should handle encoded characters', () => { 525 | const html = '

 test for <p> encoded string

' 526 | const expected = '

test for <p> encode...

' 527 | const options = { 528 | length: 20, 529 | decodeEntities: true 530 | } 531 | 532 | expect(truncate(html, options)).toBe(expected) 533 | }) 534 | 535 | // it('should leave encoded characters as is', () => { 536 | // const html = '

  test for <p> encoded string

' 537 | // const expected = '

  test for <p...

' 538 | // const options = { 539 | // length: 20, 540 | // decodeEntities: false // this is the default value 541 | // } 542 | 543 | // expect(truncate(html, options)).toBe(expected) 544 | // }) 545 | 546 | it('should leave encoded characters as is', () => { 547 | const html = '

 test for <p> encoded string

' 548 | const expected = '

test for <p> encode...

' 549 | const options = { 550 | length: 20, 551 | decodeEntities: false // this is the default value 552 | } 553 | 554 | expect(truncate(html, options)).toBe(expected) 555 | }) 556 | 557 | 558 | 559 | it('should works with CJK when decodeEntities is true', () => { 560 | const html = '

 test for <p>@ 中文 string

' 561 | const expected = '

test for <p>@ 中文 st...

' 562 | const options = { 563 | length: 20, 564 | decodeEntities: true 565 | } 566 | expect(truncate(html, options)).toBe(expected) 567 | }) 568 | 569 | it('should convert CJK from encoded with decodeEntities to false', () => { 570 | const html = '

 test for <p> 中文 string

' 571 | const expected = '

test for <p> 中文 str...

' 572 | const options = { 573 | length: 20, 574 | decodeEntities: true 575 | } 576 | 577 | expect(truncate(html, options)).toBe(expected) 578 | }) 579 | 580 | it('should convert CJK from encoded with decodeEntities to false', () => { 581 | const html = '

 test for <p>@ 中文 string

' 582 | const expected = '

test for <p>@ 中文 st...

' 583 | const options = { 584 | length: 20, 585 | decodeEntities: false 586 | } 587 | expect(truncate(html, options)).toBe(expected) 588 | }) 589 | }) 590 | 591 | describe('with truncate.setup', () => { 592 | afterEach(function () { 593 | truncate.setup({ 594 | byWords: false, 595 | stripTags: false, 596 | ellipsis: "...", 597 | // @ts-expect-error only for test 598 | length: null, 599 | decodeEntities: false, 600 | keepWhitespaces: false, 601 | excludes: "", 602 | reserveLastWord: false, 603 | }); 604 | }) 605 | it('should works well if setup with empty', () => { 606 | // @ts-expect-error only for test 607 | truncate.setup() 608 | const test = 'hello from earth' 609 | const expected = 'hello from e...' 610 | 611 | expect(truncate(test, 12)).toBe(expected) 612 | }) 613 | 614 | it('should use default length', () => { 615 | truncate.setup({ length: 5 }) 616 | const test = '123456789' 617 | const expected = '12345...' 618 | 619 | expect(truncate(test)).toBe(expected) 620 | }) 621 | 622 | it('should use default byWords settings', () => { 623 | truncate.setup({ byWords: true }) 624 | const test = 'hello from earth' 625 | const expected = 'hello from...' 626 | 627 | expect(truncate(test, 2)).toBe(expected) 628 | }) 629 | 630 | it('should use default reserveLastWord settings', () => { 631 | truncate.setup({ reserveLastWord: true }) 632 | const test = 'hello from earth' 633 | const expected = 'hello from earth' 634 | 635 | expect(truncate(test, 12)).toBe(expected) 636 | }) 637 | }) 638 | 639 | describe('should correcty handle text with emoji characters', () => { 640 | it('emojis with character length more than 1', () => { 641 | const test = '💩💩💩💩💩' 642 | const expected = '💩💩💩...' 643 | 644 | expect(truncate(test, 3)).toEqual(expected) 645 | }) 646 | 647 | it('emojis with text', () => { 648 | const test = 'Hello there, how are you?? 👍👍👍‍' 649 | const expected = 'Hello there, how are you?? 👍👍...' 650 | 651 | expect(truncate(test, 29)).toEqual(expected) 652 | }) 653 | 654 | it('emojis with reservedLastWord setting', () => { 655 | truncate.setup({ reserveLastWord: true }) 656 | const test = 'Hello there 😎😎😎‍' 657 | const expected = 'Hello there 😎...' 658 | 659 | expect(truncate(test, 13)).toEqual(expected) 660 | }) 661 | 662 | it('emojis with byWords setting, with keepWhitespaces false', () => { 663 | truncate.setup({ byWords: true, keepWhitespaces: false }) 664 | const test = 'Hello there, how are you?? 😎😎😎‍' 665 | const expected = 'Hello there, how are you?? 😎😎😎‍' 666 | 667 | expect(truncate(test, 20)).toEqual(expected) 668 | }) 669 | 670 | it('emojis with keepWhitespaces setting', () => { 671 | truncate.setup({ keepWhitespaces: true }) 672 | const test = 'Hello there 💩 💩 💩‍' 673 | const expected = 'Hello there 💩 💩 💩‍' 674 | 675 | expect(truncate(test, 20)).toEqual(expected) 676 | }) 677 | }) 678 | 679 | describe('customNodeStrategy', () => { 680 | 681 | it('should works with customNodeStrategy is Keep', () => { 682 | const test = '

123456789abcefghijk

' 683 | const expected = '

123456789abcefg...

' 684 | const customNodeStrategy = (node: Cheerio) => { 685 | if (node.prop('tagName') === 'I') return 'keep' 686 | return 687 | } 688 | expect(truncate(test, 12, { customNodeStrategy } )).toEqual(expected) 689 | }) 690 | 691 | it('should works with customNodeStrategy is remove', () => { 692 | const test = "

123456789abcefghijk

"; 693 | const expected = "

123456789efg...

"; 694 | const customNodeStrategy = (node: Cheerio) => { 695 | if (node.prop("tagName") === "I") return "remove"; 696 | return; 697 | }; 698 | expect(truncate(test, 12, { customNodeStrategy })).toEqual(expected); 699 | }) 700 | 701 | it('should works with customNodeStrategy is custom node', () => { 702 | const test = '
123456789
abchello cccc
' 703 | const expected = '
123456789
abchello cccc
' 704 | const customNodeStrategy = (node: Cheerio) => { 705 | if (node.prop('tagName') === 'DETAILS') { 706 | return node.find('summary') 707 | } 708 | return 709 | } 710 | expect(truncate(test, 12, { customNodeStrategy } )).toEqual(expected) 711 | }) 712 | 713 | it('should works with customNodeStrategy is custom node', () => { 714 | const test = '
123456789
abchello cccc
' 715 | const expected = '
123456789
abchello cccc
' 716 | const customNodeStrategy = (node: Cheerio) => { 717 | if (node.prop('tagName') === 'DETAILS') { 718 | return node.find('summary') 719 | } 720 | return 721 | } 722 | expect(truncate(test, 12, { customNodeStrategy } )).toEqual(expected) 723 | }) 724 | 725 | it('should works with customNodeStrategy is custom node 2', () => { 726 | const test = '
123456789
abchello cccc
word
' 727 | const expected = '
123456789
abc...hello cccc
' 728 | const customNodeStrategy = (node: Cheerio) => { 729 | if (node.prop('tagName') === 'DETAILS') { 730 | return node.find('summary') 731 | } 732 | return 733 | } 734 | expect(truncate(test, 12, { customNodeStrategy } )).toEqual(expected) 735 | }) 736 | 737 | it('should works with customNodeStrategy is custom node 3', () => { 738 | const test = '
123456789
abchello cccc
word
' 739 | const expected = '
123456789
abchello cccc
w...
' 740 | const customNodeStrategy = (node: Cheerio) => { 741 | if (node.prop('tagName') === 'DETAILS') { 742 | return node.find('summary') 743 | } 744 | return 745 | } 746 | expect(truncate(test, 13, { customNodeStrategy } )).toEqual(expected) 747 | }) 748 | }) 749 | }) 750 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "./built/", 4 | "sourceMap": true, 5 | "declaration": true, 6 | "strict": true, 7 | "noImplicitReturns": true, 8 | "noImplicitAny": false, 9 | "emitDecoratorMetadata": true, 10 | "experimentalDecorators": true, 11 | "allowSyntheticDefaultImports": true, 12 | "module": "commonjs", 13 | "moduleResolution": "node", 14 | "esModuleInterop": true, 15 | "target": "es6", 16 | "allowJs": false, 17 | "baseUrl": "./", 18 | "lib": ["dom", "es7"] 19 | }, 20 | "include": ["./src/**/*.ts"] 21 | } 22 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | /// 2 | import { defineConfig } from 'vite' 3 | import dts from 'vite-plugin-dts' 4 | 5 | export default defineConfig({ 6 | root: './', 7 | test: { 8 | watch: false, 9 | environment: 'node', 10 | include: ['test/**/*.spec.ts'], 11 | exclude: ['node_modules', 'scripts', 'dist'], 12 | }, 13 | build: { 14 | minify: false, 15 | outDir: 'dist', 16 | lib: { 17 | // Could also be a dictionary or array of multiple entry points 18 | entry: 'src/truncate.ts', 19 | name: 'truncate', 20 | // the proper extensions will be added 21 | formats: ['es', 'cjs'], 22 | fileName: (format) => `truncate.${format}.js`, 23 | }, 24 | rollupOptions: { 25 | // make sure to externalize deps that shouldn't be bundled 26 | // into your library 27 | external: ['cheerio'], 28 | }, 29 | }, 30 | plugins: [dts()], 31 | }) 32 | -------------------------------------------------------------------------------- /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.25.7": 14 | version "7.25.7" 15 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz#d50e8d37b1176207b4fe9acedec386c565a44a54" 16 | integrity sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g== 17 | 18 | "@babel/helper-validator-identifier@^7.25.7": 19 | version "7.25.7" 20 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz#77b7f60c40b15c97df735b38a66ba1d7c3e93da5" 21 | integrity sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg== 22 | 23 | "@babel/parser@^7.25.3", "@babel/parser@^7.25.4": 24 | version "7.25.8" 25 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.8.tgz#f6aaf38e80c36129460c1657c0762db584c9d5e2" 26 | integrity sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ== 27 | dependencies: 28 | "@babel/types" "^7.25.8" 29 | 30 | "@babel/types@^7.25.4", "@babel/types@^7.25.8": 31 | version "7.25.8" 32 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.8.tgz#5cf6037258e8a9bcad533f4979025140cb9993e1" 33 | integrity sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg== 34 | dependencies: 35 | "@babel/helper-string-parser" "^7.25.7" 36 | "@babel/helper-validator-identifier" "^7.25.7" 37 | to-fast-properties "^2.0.0" 38 | 39 | "@bcoe/v8-coverage@^0.2.3": 40 | version "0.2.3" 41 | resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" 42 | integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== 43 | 44 | "@esbuild/aix-ppc64@0.21.5": 45 | version "0.21.5" 46 | resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" 47 | integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== 48 | 49 | "@esbuild/aix-ppc64@0.23.1": 50 | version "0.23.1" 51 | resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz#51299374de171dbd80bb7d838e1cfce9af36f353" 52 | integrity sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ== 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-arm64@0.23.1": 60 | version "0.23.1" 61 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz#58565291a1fe548638adb9c584237449e5e14018" 62 | integrity sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw== 63 | 64 | "@esbuild/android-arm@0.21.5": 65 | version "0.21.5" 66 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" 67 | integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== 68 | 69 | "@esbuild/android-arm@0.23.1": 70 | version "0.23.1" 71 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.1.tgz#5eb8c652d4c82a2421e3395b808e6d9c42c862ee" 72 | integrity sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ== 73 | 74 | "@esbuild/android-x64@0.21.5": 75 | version "0.21.5" 76 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" 77 | integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== 78 | 79 | "@esbuild/android-x64@0.23.1": 80 | version "0.23.1" 81 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.1.tgz#ae19d665d2f06f0f48a6ac9a224b3f672e65d517" 82 | integrity sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg== 83 | 84 | "@esbuild/darwin-arm64@0.21.5": 85 | version "0.21.5" 86 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" 87 | integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== 88 | 89 | "@esbuild/darwin-arm64@0.23.1": 90 | version "0.23.1" 91 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz#05b17f91a87e557b468a9c75e9d85ab10c121b16" 92 | integrity sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q== 93 | 94 | "@esbuild/darwin-x64@0.21.5": 95 | version "0.21.5" 96 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" 97 | integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== 98 | 99 | "@esbuild/darwin-x64@0.23.1": 100 | version "0.23.1" 101 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz#c58353b982f4e04f0d022284b8ba2733f5ff0931" 102 | integrity sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw== 103 | 104 | "@esbuild/freebsd-arm64@0.21.5": 105 | version "0.21.5" 106 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" 107 | integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== 108 | 109 | "@esbuild/freebsd-arm64@0.23.1": 110 | version "0.23.1" 111 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz#f9220dc65f80f03635e1ef96cfad5da1f446f3bc" 112 | integrity sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA== 113 | 114 | "@esbuild/freebsd-x64@0.21.5": 115 | version "0.21.5" 116 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" 117 | integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== 118 | 119 | "@esbuild/freebsd-x64@0.23.1": 120 | version "0.23.1" 121 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz#69bd8511fa013b59f0226d1609ac43f7ce489730" 122 | integrity sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g== 123 | 124 | "@esbuild/linux-arm64@0.21.5": 125 | version "0.21.5" 126 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" 127 | integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== 128 | 129 | "@esbuild/linux-arm64@0.23.1": 130 | version "0.23.1" 131 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz#8050af6d51ddb388c75653ef9871f5ccd8f12383" 132 | integrity sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g== 133 | 134 | "@esbuild/linux-arm@0.21.5": 135 | version "0.21.5" 136 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" 137 | integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== 138 | 139 | "@esbuild/linux-arm@0.23.1": 140 | version "0.23.1" 141 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz#ecaabd1c23b701070484990db9a82f382f99e771" 142 | integrity sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ== 143 | 144 | "@esbuild/linux-ia32@0.21.5": 145 | version "0.21.5" 146 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" 147 | integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== 148 | 149 | "@esbuild/linux-ia32@0.23.1": 150 | version "0.23.1" 151 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz#3ed2273214178109741c09bd0687098a0243b333" 152 | integrity sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ== 153 | 154 | "@esbuild/linux-loong64@0.21.5": 155 | version "0.21.5" 156 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" 157 | integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== 158 | 159 | "@esbuild/linux-loong64@0.23.1": 160 | version "0.23.1" 161 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz#a0fdf440b5485c81b0fbb316b08933d217f5d3ac" 162 | integrity sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw== 163 | 164 | "@esbuild/linux-mips64el@0.21.5": 165 | version "0.21.5" 166 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" 167 | integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== 168 | 169 | "@esbuild/linux-mips64el@0.23.1": 170 | version "0.23.1" 171 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz#e11a2806346db8375b18f5e104c5a9d4e81807f6" 172 | integrity sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q== 173 | 174 | "@esbuild/linux-ppc64@0.21.5": 175 | version "0.21.5" 176 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" 177 | integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== 178 | 179 | "@esbuild/linux-ppc64@0.23.1": 180 | version "0.23.1" 181 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz#06a2744c5eaf562b1a90937855b4d6cf7c75ec96" 182 | integrity sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw== 183 | 184 | "@esbuild/linux-riscv64@0.21.5": 185 | version "0.21.5" 186 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" 187 | integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== 188 | 189 | "@esbuild/linux-riscv64@0.23.1": 190 | version "0.23.1" 191 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz#65b46a2892fc0d1af4ba342af3fe0fa4a8fe08e7" 192 | integrity sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA== 193 | 194 | "@esbuild/linux-s390x@0.21.5": 195 | version "0.21.5" 196 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" 197 | integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== 198 | 199 | "@esbuild/linux-s390x@0.23.1": 200 | version "0.23.1" 201 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz#e71ea18c70c3f604e241d16e4e5ab193a9785d6f" 202 | integrity sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw== 203 | 204 | "@esbuild/linux-x64@0.21.5": 205 | version "0.21.5" 206 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" 207 | integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== 208 | 209 | "@esbuild/linux-x64@0.23.1": 210 | version "0.23.1" 211 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz#d47f97391e80690d4dfe811a2e7d6927ad9eed24" 212 | integrity sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ== 213 | 214 | "@esbuild/netbsd-x64@0.21.5": 215 | version "0.21.5" 216 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" 217 | integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== 218 | 219 | "@esbuild/netbsd-x64@0.23.1": 220 | version "0.23.1" 221 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz#44e743c9778d57a8ace4b72f3c6b839a3b74a653" 222 | integrity sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA== 223 | 224 | "@esbuild/openbsd-arm64@0.23.1": 225 | version "0.23.1" 226 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz#05c5a1faf67b9881834758c69f3e51b7dee015d7" 227 | integrity sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q== 228 | 229 | "@esbuild/openbsd-x64@0.21.5": 230 | version "0.21.5" 231 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" 232 | integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== 233 | 234 | "@esbuild/openbsd-x64@0.23.1": 235 | version "0.23.1" 236 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz#2e58ae511bacf67d19f9f2dcd9e8c5a93f00c273" 237 | integrity sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA== 238 | 239 | "@esbuild/sunos-x64@0.21.5": 240 | version "0.21.5" 241 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" 242 | integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== 243 | 244 | "@esbuild/sunos-x64@0.23.1": 245 | version "0.23.1" 246 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz#adb022b959d18d3389ac70769cef5a03d3abd403" 247 | integrity sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA== 248 | 249 | "@esbuild/win32-arm64@0.21.5": 250 | version "0.21.5" 251 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" 252 | integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== 253 | 254 | "@esbuild/win32-arm64@0.23.1": 255 | version "0.23.1" 256 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz#84906f50c212b72ec360f48461d43202f4c8b9a2" 257 | integrity sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A== 258 | 259 | "@esbuild/win32-ia32@0.21.5": 260 | version "0.21.5" 261 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" 262 | integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== 263 | 264 | "@esbuild/win32-ia32@0.23.1": 265 | version "0.23.1" 266 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz#5e3eacc515820ff729e90d0cb463183128e82fac" 267 | integrity sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ== 268 | 269 | "@esbuild/win32-x64@0.21.5": 270 | version "0.21.5" 271 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" 272 | integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== 273 | 274 | "@esbuild/win32-x64@0.23.1": 275 | version "0.23.1" 276 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699" 277 | integrity sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg== 278 | 279 | "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": 280 | version "4.4.0" 281 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" 282 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 283 | dependencies: 284 | eslint-visitor-keys "^3.3.0" 285 | 286 | "@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.11.0": 287 | version "4.11.1" 288 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.1.tgz#a547badfc719eb3e5f4b556325e542fbe9d7a18f" 289 | integrity sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q== 290 | 291 | "@eslint/config-array@^0.18.0": 292 | version "0.18.0" 293 | resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.18.0.tgz#37d8fe656e0d5e3dbaea7758ea56540867fd074d" 294 | integrity sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw== 295 | dependencies: 296 | "@eslint/object-schema" "^2.1.4" 297 | debug "^4.3.1" 298 | minimatch "^3.1.2" 299 | 300 | "@eslint/core@^0.6.0": 301 | version "0.6.0" 302 | resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.6.0.tgz#9930b5ba24c406d67a1760e94cdbac616a6eb674" 303 | integrity sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg== 304 | 305 | "@eslint/eslintrc@^3.1.0": 306 | version "3.1.0" 307 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.1.0.tgz#dbd3482bfd91efa663cbe7aa1f506839868207b6" 308 | integrity sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ== 309 | dependencies: 310 | ajv "^6.12.4" 311 | debug "^4.3.2" 312 | espree "^10.0.1" 313 | globals "^14.0.0" 314 | ignore "^5.2.0" 315 | import-fresh "^3.2.1" 316 | js-yaml "^4.1.0" 317 | minimatch "^3.1.2" 318 | strip-json-comments "^3.1.1" 319 | 320 | "@eslint/js@9.12.0", "@eslint/js@^9.12.0": 321 | version "9.12.0" 322 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.12.0.tgz#69ca3ca9fab9a808ec6d67b8f6edb156cbac91e1" 323 | integrity sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA== 324 | 325 | "@eslint/object-schema@^2.1.4": 326 | version "2.1.4" 327 | resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.4.tgz#9e69f8bb4031e11df79e03db09f9dbbae1740843" 328 | integrity sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ== 329 | 330 | "@eslint/plugin-kit@^0.2.0": 331 | version "0.2.0" 332 | resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz#8712dccae365d24e9eeecb7b346f85e750ba343d" 333 | integrity sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig== 334 | dependencies: 335 | levn "^0.4.1" 336 | 337 | "@humanfs/core@^0.19.0": 338 | version "0.19.0" 339 | resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.0.tgz#08db7a8c73bb07673d9ebd925f2dad746411fcec" 340 | integrity sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw== 341 | 342 | "@humanfs/node@^0.16.5": 343 | version "0.16.5" 344 | resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.5.tgz#a9febb7e7ad2aff65890fdc630938f8d20aa84ba" 345 | integrity sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg== 346 | dependencies: 347 | "@humanfs/core" "^0.19.0" 348 | "@humanwhocodes/retry" "^0.3.0" 349 | 350 | "@humanwhocodes/module-importer@^1.0.1": 351 | version "1.0.1" 352 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 353 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 354 | 355 | "@humanwhocodes/retry@^0.3.0", "@humanwhocodes/retry@^0.3.1": 356 | version "0.3.1" 357 | resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" 358 | integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== 359 | 360 | "@isaacs/cliui@^8.0.2": 361 | version "8.0.2" 362 | resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" 363 | integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== 364 | dependencies: 365 | string-width "^5.1.2" 366 | string-width-cjs "npm:string-width@^4.2.0" 367 | strip-ansi "^7.0.1" 368 | strip-ansi-cjs "npm:strip-ansi@^6.0.1" 369 | wrap-ansi "^8.1.0" 370 | wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" 371 | 372 | "@istanbuljs/schema@^0.1.2": 373 | version "0.1.3" 374 | resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" 375 | integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== 376 | 377 | "@jridgewell/gen-mapping@^0.3.5": 378 | version "0.3.5" 379 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" 380 | integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== 381 | dependencies: 382 | "@jridgewell/set-array" "^1.2.1" 383 | "@jridgewell/sourcemap-codec" "^1.4.10" 384 | "@jridgewell/trace-mapping" "^0.3.24" 385 | 386 | "@jridgewell/resolve-uri@^3.1.0": 387 | version "3.1.2" 388 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" 389 | integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== 390 | 391 | "@jridgewell/set-array@^1.2.1": 392 | version "1.2.1" 393 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" 394 | integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== 395 | 396 | "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": 397 | version "1.5.0" 398 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" 399 | integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== 400 | 401 | "@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24": 402 | version "0.3.25" 403 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" 404 | integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== 405 | dependencies: 406 | "@jridgewell/resolve-uri" "^3.1.0" 407 | "@jridgewell/sourcemap-codec" "^1.4.14" 408 | 409 | "@microsoft/api-extractor-model@7.29.6": 410 | version "7.29.6" 411 | resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.29.6.tgz#e5941514502049b06ca9af21e2096f8f1ad5a01b" 412 | integrity sha512-gC0KGtrZvxzf/Rt9oMYD2dHvtN/1KPEYsrQPyMKhLHnlVuO/f4AFN3E4toqZzD2pt4LhkKoYmL2H9tX3yCOyRw== 413 | dependencies: 414 | "@microsoft/tsdoc" "~0.15.0" 415 | "@microsoft/tsdoc-config" "~0.17.0" 416 | "@rushstack/node-core-library" "5.7.0" 417 | 418 | "@microsoft/api-extractor@7.47.7": 419 | version "7.47.7" 420 | resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.47.7.tgz#3bc4450fe46c265bef857ab938aa15b9fc7a85de" 421 | integrity sha512-fNiD3G55ZJGhPOBPMKD/enozj8yxJSYyVJWxRWdcUtw842rvthDHJgUWq9gXQTensFlMHv2wGuCjjivPv53j0A== 422 | dependencies: 423 | "@microsoft/api-extractor-model" "7.29.6" 424 | "@microsoft/tsdoc" "~0.15.0" 425 | "@microsoft/tsdoc-config" "~0.17.0" 426 | "@rushstack/node-core-library" "5.7.0" 427 | "@rushstack/rig-package" "0.5.3" 428 | "@rushstack/terminal" "0.14.0" 429 | "@rushstack/ts-command-line" "4.22.6" 430 | lodash "~4.17.15" 431 | minimatch "~3.0.3" 432 | resolve "~1.22.1" 433 | semver "~7.5.4" 434 | source-map "~0.6.1" 435 | typescript "5.4.2" 436 | 437 | "@microsoft/tsdoc-config@~0.17.0": 438 | version "0.17.0" 439 | resolved "https://registry.yarnpkg.com/@microsoft/tsdoc-config/-/tsdoc-config-0.17.0.tgz#82605152b3c1d3f5cd4a11697bc298437484d55d" 440 | integrity sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg== 441 | dependencies: 442 | "@microsoft/tsdoc" "0.15.0" 443 | ajv "~8.12.0" 444 | jju "~1.4.0" 445 | resolve "~1.22.2" 446 | 447 | "@microsoft/tsdoc@0.15.0", "@microsoft/tsdoc@~0.15.0": 448 | version "0.15.0" 449 | resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.15.0.tgz#f29a55df17cb6e87cfbabce33ff6a14a9f85076d" 450 | integrity sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA== 451 | 452 | "@nodelib/fs.scandir@2.1.5": 453 | version "2.1.5" 454 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 455 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 456 | dependencies: 457 | "@nodelib/fs.stat" "2.0.5" 458 | run-parallel "^1.1.9" 459 | 460 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 461 | version "2.0.5" 462 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 463 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 464 | 465 | "@nodelib/fs.walk@^1.2.3": 466 | version "1.2.8" 467 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 468 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 469 | dependencies: 470 | "@nodelib/fs.scandir" "2.1.5" 471 | fastq "^1.6.0" 472 | 473 | "@pkgjs/parseargs@^0.11.0": 474 | version "0.11.0" 475 | resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" 476 | integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== 477 | 478 | "@rollup/pluginutils@^5.1.0": 479 | version "5.1.2" 480 | resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.2.tgz#d3bc9f0fea4fd4086aaac6aa102f3fa587ce8bd9" 481 | integrity sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw== 482 | dependencies: 483 | "@types/estree" "^1.0.0" 484 | estree-walker "^2.0.2" 485 | picomatch "^2.3.1" 486 | 487 | "@rollup/rollup-android-arm-eabi@4.24.0": 488 | version "4.24.0" 489 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz#1661ff5ea9beb362795304cb916049aba7ac9c54" 490 | integrity sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA== 491 | 492 | "@rollup/rollup-android-arm64@4.24.0": 493 | version "4.24.0" 494 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz#2ffaa91f1b55a0082b8a722525741aadcbd3971e" 495 | integrity sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA== 496 | 497 | "@rollup/rollup-darwin-arm64@4.24.0": 498 | version "4.24.0" 499 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz#627007221b24b8cc3063703eee0b9177edf49c1f" 500 | integrity sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA== 501 | 502 | "@rollup/rollup-darwin-x64@4.24.0": 503 | version "4.24.0" 504 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz#0605506142b9e796c370d59c5984ae95b9758724" 505 | integrity sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ== 506 | 507 | "@rollup/rollup-linux-arm-gnueabihf@4.24.0": 508 | version "4.24.0" 509 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz#62dfd196d4b10c0c2db833897164d2d319ee0cbb" 510 | integrity sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA== 511 | 512 | "@rollup/rollup-linux-arm-musleabihf@4.24.0": 513 | version "4.24.0" 514 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz#53ce72aeb982f1f34b58b380baafaf6a240fddb3" 515 | integrity sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw== 516 | 517 | "@rollup/rollup-linux-arm64-gnu@4.24.0": 518 | version "4.24.0" 519 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz#1632990f62a75c74f43e4b14ab3597d7ed416496" 520 | integrity sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA== 521 | 522 | "@rollup/rollup-linux-arm64-musl@4.24.0": 523 | version "4.24.0" 524 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz#8c03a996efb41e257b414b2e0560b7a21f2d9065" 525 | integrity sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw== 526 | 527 | "@rollup/rollup-linux-powerpc64le-gnu@4.24.0": 528 | version "4.24.0" 529 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz#5b98729628d5bcc8f7f37b58b04d6845f85c7b5d" 530 | integrity sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw== 531 | 532 | "@rollup/rollup-linux-riscv64-gnu@4.24.0": 533 | version "4.24.0" 534 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz#48e42e41f4cabf3573cfefcb448599c512e22983" 535 | integrity sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg== 536 | 537 | "@rollup/rollup-linux-s390x-gnu@4.24.0": 538 | version "4.24.0" 539 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz#e0b4f9a966872cb7d3e21b9e412a4b7efd7f0b58" 540 | integrity sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g== 541 | 542 | "@rollup/rollup-linux-x64-gnu@4.24.0": 543 | version "4.24.0" 544 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz#78144741993100f47bd3da72fce215e077ae036b" 545 | integrity sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A== 546 | 547 | "@rollup/rollup-linux-x64-musl@4.24.0": 548 | version "4.24.0" 549 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz#d9fe32971883cd1bd858336bd33a1c3ca6146127" 550 | integrity sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ== 551 | 552 | "@rollup/rollup-win32-arm64-msvc@4.24.0": 553 | version "4.24.0" 554 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz#71fa3ea369316db703a909c790743972e98afae5" 555 | integrity sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ== 556 | 557 | "@rollup/rollup-win32-ia32-msvc@4.24.0": 558 | version "4.24.0" 559 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz#653f5989a60658e17d7576a3996deb3902e342e2" 560 | integrity sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ== 561 | 562 | "@rollup/rollup-win32-x64-msvc@4.24.0": 563 | version "4.24.0" 564 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz#0574d7e87b44ee8511d08cc7f914bcb802b70818" 565 | integrity sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw== 566 | 567 | "@rushstack/node-core-library@5.7.0": 568 | version "5.7.0" 569 | resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-5.7.0.tgz#f28699c7d0b3de0120a207f8b9d5bd7c69806e18" 570 | integrity sha512-Ff9Cz/YlWu9ce4dmqNBZpA45AEya04XaBFIjV7xTVeEf+y/kTjEasmozqFELXlNG4ROdevss75JrrZ5WgufDkQ== 571 | dependencies: 572 | ajv "~8.13.0" 573 | ajv-draft-04 "~1.0.0" 574 | ajv-formats "~3.0.1" 575 | fs-extra "~7.0.1" 576 | import-lazy "~4.0.0" 577 | jju "~1.4.0" 578 | resolve "~1.22.1" 579 | semver "~7.5.4" 580 | 581 | "@rushstack/rig-package@0.5.3": 582 | version "0.5.3" 583 | resolved "https://registry.yarnpkg.com/@rushstack/rig-package/-/rig-package-0.5.3.tgz#ea4d8a3458540b1295500149c04e645f23134e5d" 584 | integrity sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow== 585 | dependencies: 586 | resolve "~1.22.1" 587 | strip-json-comments "~3.1.1" 588 | 589 | "@rushstack/terminal@0.14.0": 590 | version "0.14.0" 591 | resolved "https://registry.yarnpkg.com/@rushstack/terminal/-/terminal-0.14.0.tgz#967ecc586d7172204353059f8fdb1760666e9381" 592 | integrity sha512-juTKMAMpTIJKudeFkG5slD8Z/LHwNwGZLtU441l/u82XdTBfsP+LbGKJLCNwP5se+DMCT55GB8x9p6+C4UL7jw== 593 | dependencies: 594 | "@rushstack/node-core-library" "5.7.0" 595 | supports-color "~8.1.1" 596 | 597 | "@rushstack/ts-command-line@4.22.6": 598 | version "4.22.6" 599 | resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-4.22.6.tgz#2aee4fc98c6043c026ce278880fbffb5227de5ca" 600 | integrity sha512-QSRqHT/IfoC5nk9zn6+fgyqOPXHME0BfchII9EUPR19pocsNp/xSbeBCbD3PIR2Lg+Q5qk7OFqk1VhWPMdKHJg== 601 | dependencies: 602 | "@rushstack/terminal" "0.14.0" 603 | "@types/argparse" "1.0.38" 604 | argparse "~1.0.9" 605 | string-argv "~0.3.1" 606 | 607 | "@types/argparse@1.0.38": 608 | version "1.0.38" 609 | resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-1.0.38.tgz#a81fd8606d481f873a3800c6ebae4f1d768a56a9" 610 | integrity sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA== 611 | 612 | "@types/eslint@*": 613 | version "9.6.1" 614 | resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584" 615 | integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== 616 | dependencies: 617 | "@types/estree" "*" 618 | "@types/json-schema" "*" 619 | 620 | "@types/eslint__js@^8.42.3": 621 | version "8.42.3" 622 | resolved "https://registry.yarnpkg.com/@types/eslint__js/-/eslint__js-8.42.3.tgz#d1fa13e5c1be63a10b4e3afe992779f81c1179a0" 623 | integrity sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw== 624 | dependencies: 625 | "@types/eslint" "*" 626 | 627 | "@types/estree@*", "@types/estree@1.0.6", "@types/estree@^1.0.0", "@types/estree@^1.0.6": 628 | version "1.0.6" 629 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" 630 | integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== 631 | 632 | "@types/json-schema@*", "@types/json-schema@^7.0.15": 633 | version "7.0.15" 634 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" 635 | integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== 636 | 637 | "@typescript-eslint/eslint-plugin@8.8.1": 638 | version "8.8.1" 639 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.8.1.tgz#9364b756d4d78bcbdf6fd3e9345e6924c68ad371" 640 | integrity sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ== 641 | dependencies: 642 | "@eslint-community/regexpp" "^4.10.0" 643 | "@typescript-eslint/scope-manager" "8.8.1" 644 | "@typescript-eslint/type-utils" "8.8.1" 645 | "@typescript-eslint/utils" "8.8.1" 646 | "@typescript-eslint/visitor-keys" "8.8.1" 647 | graphemer "^1.4.0" 648 | ignore "^5.3.1" 649 | natural-compare "^1.4.0" 650 | ts-api-utils "^1.3.0" 651 | 652 | "@typescript-eslint/parser@8.8.1": 653 | version "8.8.1" 654 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.8.1.tgz#5952ba2a83bd52024b872f3fdc8ed2d3636073b8" 655 | integrity sha512-hQUVn2Lij2NAxVFEdvIGxT9gP1tq2yM83m+by3whWFsWC+1y8pxxxHUFE1UqDu2VsGi2i6RLcv4QvouM84U+ow== 656 | dependencies: 657 | "@typescript-eslint/scope-manager" "8.8.1" 658 | "@typescript-eslint/types" "8.8.1" 659 | "@typescript-eslint/typescript-estree" "8.8.1" 660 | "@typescript-eslint/visitor-keys" "8.8.1" 661 | debug "^4.3.4" 662 | 663 | "@typescript-eslint/scope-manager@8.8.1": 664 | version "8.8.1" 665 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.8.1.tgz#b4bea1c0785aaebfe3c4ab059edaea1c4977e7ff" 666 | integrity sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA== 667 | dependencies: 668 | "@typescript-eslint/types" "8.8.1" 669 | "@typescript-eslint/visitor-keys" "8.8.1" 670 | 671 | "@typescript-eslint/type-utils@8.8.1": 672 | version "8.8.1" 673 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.8.1.tgz#31f59ec46e93a02b409fb4d406a368a59fad306e" 674 | integrity sha512-qSVnpcbLP8CALORf0za+vjLYj1Wp8HSoiI8zYU5tHxRVj30702Z1Yw4cLwfNKhTPWp5+P+k1pjmD5Zd1nhxiZA== 675 | dependencies: 676 | "@typescript-eslint/typescript-estree" "8.8.1" 677 | "@typescript-eslint/utils" "8.8.1" 678 | debug "^4.3.4" 679 | ts-api-utils "^1.3.0" 680 | 681 | "@typescript-eslint/types@8.8.1": 682 | version "8.8.1" 683 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.8.1.tgz#ebe85e0fa4a8e32a24a56adadf060103bef13bd1" 684 | integrity sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q== 685 | 686 | "@typescript-eslint/typescript-estree@8.8.1": 687 | version "8.8.1" 688 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.1.tgz#34649f4e28d32ee49152193bc7dedc0e78e5d1ec" 689 | integrity sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg== 690 | dependencies: 691 | "@typescript-eslint/types" "8.8.1" 692 | "@typescript-eslint/visitor-keys" "8.8.1" 693 | debug "^4.3.4" 694 | fast-glob "^3.3.2" 695 | is-glob "^4.0.3" 696 | minimatch "^9.0.4" 697 | semver "^7.6.0" 698 | ts-api-utils "^1.3.0" 699 | 700 | "@typescript-eslint/utils@8.8.1": 701 | version "8.8.1" 702 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.8.1.tgz#9e29480fbfa264c26946253daa72181f9f053c9d" 703 | integrity sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w== 704 | dependencies: 705 | "@eslint-community/eslint-utils" "^4.4.0" 706 | "@typescript-eslint/scope-manager" "8.8.1" 707 | "@typescript-eslint/types" "8.8.1" 708 | "@typescript-eslint/typescript-estree" "8.8.1" 709 | 710 | "@typescript-eslint/visitor-keys@8.8.1": 711 | version "8.8.1" 712 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.1.tgz#0fb1280f381149fc345dfde29f7542ff4e587fc5" 713 | integrity sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag== 714 | dependencies: 715 | "@typescript-eslint/types" "8.8.1" 716 | eslint-visitor-keys "^3.4.3" 717 | 718 | "@vitest/coverage-v8@2.1.2": 719 | version "2.1.2" 720 | resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-2.1.2.tgz#0fd098a80c6bda8fb6b8eb65b41be98286331a0a" 721 | integrity sha512-b7kHrFrs2urS0cOk5N10lttI8UdJ/yP3nB4JYTREvR5o18cR99yPpK4gK8oQgI42BVv0ILWYUSYB7AXkAUDc0g== 722 | dependencies: 723 | "@ampproject/remapping" "^2.3.0" 724 | "@bcoe/v8-coverage" "^0.2.3" 725 | debug "^4.3.6" 726 | istanbul-lib-coverage "^3.2.2" 727 | istanbul-lib-report "^3.0.1" 728 | istanbul-lib-source-maps "^5.0.6" 729 | istanbul-reports "^3.1.7" 730 | magic-string "^0.30.11" 731 | magicast "^0.3.4" 732 | std-env "^3.7.0" 733 | test-exclude "^7.0.1" 734 | tinyrainbow "^1.2.0" 735 | 736 | "@vitest/expect@2.1.2": 737 | version "2.1.2" 738 | resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-2.1.2.tgz#e92fa284b8472548f72cacfe896020c64af6bf78" 739 | integrity sha512-FEgtlN8mIUSEAAnlvn7mP8vzaWhEaAEvhSXCqrsijM7K6QqjB11qoRZYEd4AKSCDz8p0/+yH5LzhZ47qt+EyPg== 740 | dependencies: 741 | "@vitest/spy" "2.1.2" 742 | "@vitest/utils" "2.1.2" 743 | chai "^5.1.1" 744 | tinyrainbow "^1.2.0" 745 | 746 | "@vitest/mocker@2.1.2": 747 | version "2.1.2" 748 | resolved "https://registry.yarnpkg.com/@vitest/mocker/-/mocker-2.1.2.tgz#08853a9d8d12afba284aebdf9b5ea26ddae5f20a" 749 | integrity sha512-ExElkCGMS13JAJy+812fw1aCv2QO/LBK6CyO4WOPAzLTmve50gydOlWhgdBJPx2ztbADUq3JVI0C5U+bShaeEA== 750 | dependencies: 751 | "@vitest/spy" "^2.1.0-beta.1" 752 | estree-walker "^3.0.3" 753 | magic-string "^0.30.11" 754 | 755 | "@vitest/pretty-format@2.1.2", "@vitest/pretty-format@^2.1.2": 756 | version "2.1.2" 757 | resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-2.1.2.tgz#42882ea18c4cd40428e34f74bbac706a82465193" 758 | integrity sha512-FIoglbHrSUlOJPDGIrh2bjX1sNars5HbxlcsFKCtKzu4+5lpsRhOCVcuzp0fEhAGHkPZRIXVNzPcpSlkoZ3LuA== 759 | dependencies: 760 | tinyrainbow "^1.2.0" 761 | 762 | "@vitest/runner@2.1.2": 763 | version "2.1.2" 764 | resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-2.1.2.tgz#14da1f5eac43fbd9a37d7cd72de102e8f785d727" 765 | integrity sha512-UCsPtvluHO3u7jdoONGjOSil+uON5SSvU9buQh3lP7GgUXHp78guN1wRmZDX4wGK6J10f9NUtP6pO+SFquoMlw== 766 | dependencies: 767 | "@vitest/utils" "2.1.2" 768 | pathe "^1.1.2" 769 | 770 | "@vitest/snapshot@2.1.2": 771 | version "2.1.2" 772 | resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-2.1.2.tgz#e20bd794b33fdcd4bfe69138baac7bb890c4d51f" 773 | integrity sha512-xtAeNsZ++aRIYIUsek7VHzry/9AcxeULlegBvsdLncLmNCR6tR8SRjn8BbDP4naxtccvzTqZ+L1ltZlRCfBZFA== 774 | dependencies: 775 | "@vitest/pretty-format" "2.1.2" 776 | magic-string "^0.30.11" 777 | pathe "^1.1.2" 778 | 779 | "@vitest/spy@2.1.2", "@vitest/spy@^2.1.0-beta.1": 780 | version "2.1.2" 781 | resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-2.1.2.tgz#bccdeca597c8fc3777302889e8c98cec9264df44" 782 | integrity sha512-GSUi5zoy+abNRJwmFhBDC0yRuVUn8WMlQscvnbbXdKLXX9dE59YbfwXxuJ/mth6eeqIzofU8BB5XDo/Ns/qK2A== 783 | dependencies: 784 | tinyspy "^3.0.0" 785 | 786 | "@vitest/utils@2.1.2": 787 | version "2.1.2" 788 | resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-2.1.2.tgz#222ac35ba02493173e40581256eb7a62520fcdba" 789 | integrity sha512-zMO2KdYy6mx56btx9JvAqAZ6EyS3g49krMPPrgOp1yxGZiA93HumGk+bZ5jIZtOg5/VBYl5eBmGRQHqq4FG6uQ== 790 | dependencies: 791 | "@vitest/pretty-format" "2.1.2" 792 | loupe "^3.1.1" 793 | tinyrainbow "^1.2.0" 794 | 795 | "@volar/language-core@2.4.6", "@volar/language-core@~2.4.1": 796 | version "2.4.6" 797 | resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-2.4.6.tgz#159625a6e1263fe68d1afad524ae2bd40c4ee0dd" 798 | integrity sha512-FxUfxaB8sCqvY46YjyAAV6c3mMIq/NWQMVvJ+uS4yxr1KzOvyg61gAuOnNvgCvO4TZ7HcLExBEsWcDu4+K4E8A== 799 | dependencies: 800 | "@volar/source-map" "2.4.6" 801 | 802 | "@volar/source-map@2.4.6": 803 | version "2.4.6" 804 | resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-2.4.6.tgz#b71ad241216f646812639f359262e6a84b46b6ed" 805 | integrity sha512-Nsh7UW2ruK+uURIPzjJgF0YRGP5CX9nQHypA2OMqdM2FKy7rh+uv3XgPnWPw30JADbKvZ5HuBzG4gSbVDYVtiw== 806 | 807 | "@volar/typescript@^2.4.4": 808 | version "2.4.6" 809 | resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-2.4.6.tgz#6a4611b9fae793ad0d4c66d11d765f2731d93a12" 810 | integrity sha512-NMIrA7y5OOqddL9VtngPWYmdQU03htNKFtAYidbYfWA0TOhyGVd9tfcP4TsLWQ+RBWDZCbBqsr8xzU0ZOxYTCQ== 811 | dependencies: 812 | "@volar/language-core" "2.4.6" 813 | path-browserify "^1.0.1" 814 | vscode-uri "^3.0.8" 815 | 816 | "@vue/compiler-core@3.5.12": 817 | version "3.5.12" 818 | resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.12.tgz#bd70b7dabd12b0b6f31bc53418ba3da77994c437" 819 | integrity sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw== 820 | dependencies: 821 | "@babel/parser" "^7.25.3" 822 | "@vue/shared" "3.5.12" 823 | entities "^4.5.0" 824 | estree-walker "^2.0.2" 825 | source-map-js "^1.2.0" 826 | 827 | "@vue/compiler-dom@^3.4.0": 828 | version "3.5.12" 829 | resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.12.tgz#456d631d11102535b7ee6fd954cf2c93158d0354" 830 | integrity sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg== 831 | dependencies: 832 | "@vue/compiler-core" "3.5.12" 833 | "@vue/shared" "3.5.12" 834 | 835 | "@vue/compiler-vue2@^2.7.16": 836 | version "2.7.16" 837 | resolved "https://registry.yarnpkg.com/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz#2ba837cbd3f1b33c2bc865fbe1a3b53fb611e249" 838 | integrity sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A== 839 | dependencies: 840 | de-indent "^1.0.2" 841 | he "^1.2.0" 842 | 843 | "@vue/language-core@2.1.6": 844 | version "2.1.6" 845 | resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-2.1.6.tgz#b48186bdb9b3ef2b83e1f76d5b1ac357b3a7ed94" 846 | integrity sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg== 847 | dependencies: 848 | "@volar/language-core" "~2.4.1" 849 | "@vue/compiler-dom" "^3.4.0" 850 | "@vue/compiler-vue2" "^2.7.16" 851 | "@vue/shared" "^3.4.0" 852 | computeds "^0.0.1" 853 | minimatch "^9.0.3" 854 | muggle-string "^0.4.1" 855 | path-browserify "^1.0.1" 856 | 857 | "@vue/shared@3.5.12", "@vue/shared@^3.4.0": 858 | version "3.5.12" 859 | resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.12.tgz#f9e45b7f63f2c3f40d84237b1194b7f67de192e3" 860 | integrity sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg== 861 | 862 | acorn-jsx@^5.3.2: 863 | version "5.3.2" 864 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 865 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 866 | 867 | acorn@^8.12.0, acorn@^8.12.1: 868 | version "8.12.1" 869 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" 870 | integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== 871 | 872 | ajv-draft-04@~1.0.0: 873 | version "1.0.0" 874 | resolved "https://registry.yarnpkg.com/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz#3b64761b268ba0b9e668f0b41ba53fce0ad77fc8" 875 | integrity sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw== 876 | 877 | ajv-formats@~3.0.1: 878 | version "3.0.1" 879 | resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" 880 | integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== 881 | dependencies: 882 | ajv "^8.0.0" 883 | 884 | ajv@^6.12.4: 885 | version "6.12.6" 886 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 887 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 888 | dependencies: 889 | fast-deep-equal "^3.1.1" 890 | fast-json-stable-stringify "^2.0.0" 891 | json-schema-traverse "^0.4.1" 892 | uri-js "^4.2.2" 893 | 894 | ajv@^8.0.0: 895 | version "8.17.1" 896 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" 897 | integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== 898 | dependencies: 899 | fast-deep-equal "^3.1.3" 900 | fast-uri "^3.0.1" 901 | json-schema-traverse "^1.0.0" 902 | require-from-string "^2.0.2" 903 | 904 | ajv@~8.12.0: 905 | version "8.12.0" 906 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" 907 | integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== 908 | dependencies: 909 | fast-deep-equal "^3.1.1" 910 | json-schema-traverse "^1.0.0" 911 | require-from-string "^2.0.2" 912 | uri-js "^4.2.2" 913 | 914 | ajv@~8.13.0: 915 | version "8.13.0" 916 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.13.0.tgz#a3939eaec9fb80d217ddf0c3376948c023f28c91" 917 | integrity sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA== 918 | dependencies: 919 | fast-deep-equal "^3.1.3" 920 | json-schema-traverse "^1.0.0" 921 | require-from-string "^2.0.2" 922 | uri-js "^4.4.1" 923 | 924 | ansi-regex@^5.0.1: 925 | version "5.0.1" 926 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 927 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 928 | 929 | ansi-regex@^6.0.1: 930 | version "6.1.0" 931 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" 932 | integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== 933 | 934 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 935 | version "4.3.0" 936 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 937 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 938 | dependencies: 939 | color-convert "^2.0.1" 940 | 941 | ansi-styles@^6.1.0: 942 | version "6.2.1" 943 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" 944 | integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== 945 | 946 | argparse@^2.0.1: 947 | version "2.0.1" 948 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 949 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 950 | 951 | argparse@~1.0.9: 952 | version "1.0.10" 953 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 954 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 955 | dependencies: 956 | sprintf-js "~1.0.2" 957 | 958 | assertion-error@^2.0.1: 959 | version "2.0.1" 960 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" 961 | integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== 962 | 963 | balanced-match@^1.0.0: 964 | version "1.0.2" 965 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 966 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 967 | 968 | boolbase@^1.0.0: 969 | version "1.0.0" 970 | resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" 971 | integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== 972 | 973 | brace-expansion@^1.1.7: 974 | version "1.1.11" 975 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 976 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 977 | dependencies: 978 | balanced-match "^1.0.0" 979 | concat-map "0.0.1" 980 | 981 | brace-expansion@^2.0.1: 982 | version "2.0.1" 983 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 984 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 985 | dependencies: 986 | balanced-match "^1.0.0" 987 | 988 | braces@^3.0.2: 989 | version "3.0.2" 990 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 991 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 992 | dependencies: 993 | fill-range "^7.0.1" 994 | 995 | cac@^6.7.14: 996 | version "6.7.14" 997 | resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" 998 | integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== 999 | 1000 | callsites@^3.0.0: 1001 | version "3.1.0" 1002 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 1003 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 1004 | 1005 | chai@^5.1.1: 1006 | version "5.1.1" 1007 | resolved "https://registry.yarnpkg.com/chai/-/chai-5.1.1.tgz#f035d9792a22b481ead1c65908d14bb62ec1c82c" 1008 | integrity sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA== 1009 | dependencies: 1010 | assertion-error "^2.0.1" 1011 | check-error "^2.1.1" 1012 | deep-eql "^5.0.1" 1013 | loupe "^3.1.0" 1014 | pathval "^2.0.0" 1015 | 1016 | chalk@^4.0.0: 1017 | version "4.1.2" 1018 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 1019 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 1020 | dependencies: 1021 | ansi-styles "^4.1.0" 1022 | supports-color "^7.1.0" 1023 | 1024 | check-error@^2.1.1: 1025 | version "2.1.1" 1026 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" 1027 | integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== 1028 | 1029 | cheerio-select@^2.1.0: 1030 | version "2.1.0" 1031 | resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" 1032 | integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== 1033 | dependencies: 1034 | boolbase "^1.0.0" 1035 | css-select "^5.1.0" 1036 | css-what "^6.1.0" 1037 | domelementtype "^2.3.0" 1038 | domhandler "^5.0.3" 1039 | domutils "^3.0.1" 1040 | 1041 | cheerio@1.0.0-rc.12: 1042 | version "1.0.0-rc.12" 1043 | resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" 1044 | integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== 1045 | dependencies: 1046 | cheerio-select "^2.1.0" 1047 | dom-serializer "^2.0.0" 1048 | domhandler "^5.0.3" 1049 | domutils "^3.0.1" 1050 | htmlparser2 "^8.0.1" 1051 | parse5 "^7.0.0" 1052 | parse5-htmlparser2-tree-adapter "^7.0.0" 1053 | 1054 | color-convert@^2.0.1: 1055 | version "2.0.1" 1056 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 1057 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 1058 | dependencies: 1059 | color-name "~1.1.4" 1060 | 1061 | color-name@~1.1.4: 1062 | version "1.1.4" 1063 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 1064 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 1065 | 1066 | compare-versions@^6.1.1: 1067 | version "6.1.1" 1068 | resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9" 1069 | integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== 1070 | 1071 | computeds@^0.0.1: 1072 | version "0.0.1" 1073 | resolved "https://registry.yarnpkg.com/computeds/-/computeds-0.0.1.tgz#215b08a4ba3e08a11ff6eee5d6d8d7166a97ce2e" 1074 | integrity sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q== 1075 | 1076 | concat-map@0.0.1: 1077 | version "0.0.1" 1078 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 1079 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 1080 | 1081 | confbox@^0.1.8: 1082 | version "0.1.8" 1083 | resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06" 1084 | integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== 1085 | 1086 | cross-spawn@^7.0.0, cross-spawn@^7.0.2: 1087 | version "7.0.3" 1088 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 1089 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 1090 | dependencies: 1091 | path-key "^3.1.0" 1092 | shebang-command "^2.0.0" 1093 | which "^2.0.1" 1094 | 1095 | css-select@^5.1.0: 1096 | version "5.1.0" 1097 | resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" 1098 | integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== 1099 | dependencies: 1100 | boolbase "^1.0.0" 1101 | css-what "^6.1.0" 1102 | domhandler "^5.0.2" 1103 | domutils "^3.0.1" 1104 | nth-check "^2.0.1" 1105 | 1106 | css-what@^6.1.0: 1107 | version "6.1.0" 1108 | resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" 1109 | integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== 1110 | 1111 | de-indent@^1.0.2: 1112 | version "1.0.2" 1113 | resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" 1114 | integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== 1115 | 1116 | debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: 1117 | version "4.3.4" 1118 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 1119 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 1120 | dependencies: 1121 | ms "2.1.2" 1122 | 1123 | debug@^4.3.1, debug@^4.3.6: 1124 | version "4.3.7" 1125 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" 1126 | integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== 1127 | dependencies: 1128 | ms "^2.1.3" 1129 | 1130 | deep-eql@^5.0.1: 1131 | version "5.0.2" 1132 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" 1133 | integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== 1134 | 1135 | deep-is@^0.1.3: 1136 | version "0.1.4" 1137 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 1138 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 1139 | 1140 | dom-serializer@^2.0.0: 1141 | version "2.0.0" 1142 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" 1143 | integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== 1144 | dependencies: 1145 | domelementtype "^2.3.0" 1146 | domhandler "^5.0.2" 1147 | entities "^4.2.0" 1148 | 1149 | domelementtype@^2.3.0: 1150 | version "2.3.0" 1151 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" 1152 | integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== 1153 | 1154 | domhandler@^5.0.2, domhandler@^5.0.3: 1155 | version "5.0.3" 1156 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" 1157 | integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== 1158 | dependencies: 1159 | domelementtype "^2.3.0" 1160 | 1161 | domutils@^3.0.1: 1162 | version "3.1.0" 1163 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" 1164 | integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== 1165 | dependencies: 1166 | dom-serializer "^2.0.0" 1167 | domelementtype "^2.3.0" 1168 | domhandler "^5.0.3" 1169 | 1170 | eastasianwidth@^0.2.0: 1171 | version "0.2.0" 1172 | resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" 1173 | integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== 1174 | 1175 | emoji-regex@^8.0.0: 1176 | version "8.0.0" 1177 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 1178 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 1179 | 1180 | emoji-regex@^9.2.2: 1181 | version "9.2.2" 1182 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" 1183 | integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== 1184 | 1185 | entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: 1186 | version "4.5.0" 1187 | resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" 1188 | integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== 1189 | 1190 | esbuild@^0.21.3: 1191 | version "0.21.5" 1192 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" 1193 | integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== 1194 | optionalDependencies: 1195 | "@esbuild/aix-ppc64" "0.21.5" 1196 | "@esbuild/android-arm" "0.21.5" 1197 | "@esbuild/android-arm64" "0.21.5" 1198 | "@esbuild/android-x64" "0.21.5" 1199 | "@esbuild/darwin-arm64" "0.21.5" 1200 | "@esbuild/darwin-x64" "0.21.5" 1201 | "@esbuild/freebsd-arm64" "0.21.5" 1202 | "@esbuild/freebsd-x64" "0.21.5" 1203 | "@esbuild/linux-arm" "0.21.5" 1204 | "@esbuild/linux-arm64" "0.21.5" 1205 | "@esbuild/linux-ia32" "0.21.5" 1206 | "@esbuild/linux-loong64" "0.21.5" 1207 | "@esbuild/linux-mips64el" "0.21.5" 1208 | "@esbuild/linux-ppc64" "0.21.5" 1209 | "@esbuild/linux-riscv64" "0.21.5" 1210 | "@esbuild/linux-s390x" "0.21.5" 1211 | "@esbuild/linux-x64" "0.21.5" 1212 | "@esbuild/netbsd-x64" "0.21.5" 1213 | "@esbuild/openbsd-x64" "0.21.5" 1214 | "@esbuild/sunos-x64" "0.21.5" 1215 | "@esbuild/win32-arm64" "0.21.5" 1216 | "@esbuild/win32-ia32" "0.21.5" 1217 | "@esbuild/win32-x64" "0.21.5" 1218 | 1219 | esbuild@~0.23.0: 1220 | version "0.23.1" 1221 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.1.tgz#40fdc3f9265ec0beae6f59824ade1bd3d3d2dab8" 1222 | integrity sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg== 1223 | optionalDependencies: 1224 | "@esbuild/aix-ppc64" "0.23.1" 1225 | "@esbuild/android-arm" "0.23.1" 1226 | "@esbuild/android-arm64" "0.23.1" 1227 | "@esbuild/android-x64" "0.23.1" 1228 | "@esbuild/darwin-arm64" "0.23.1" 1229 | "@esbuild/darwin-x64" "0.23.1" 1230 | "@esbuild/freebsd-arm64" "0.23.1" 1231 | "@esbuild/freebsd-x64" "0.23.1" 1232 | "@esbuild/linux-arm" "0.23.1" 1233 | "@esbuild/linux-arm64" "0.23.1" 1234 | "@esbuild/linux-ia32" "0.23.1" 1235 | "@esbuild/linux-loong64" "0.23.1" 1236 | "@esbuild/linux-mips64el" "0.23.1" 1237 | "@esbuild/linux-ppc64" "0.23.1" 1238 | "@esbuild/linux-riscv64" "0.23.1" 1239 | "@esbuild/linux-s390x" "0.23.1" 1240 | "@esbuild/linux-x64" "0.23.1" 1241 | "@esbuild/netbsd-x64" "0.23.1" 1242 | "@esbuild/openbsd-arm64" "0.23.1" 1243 | "@esbuild/openbsd-x64" "0.23.1" 1244 | "@esbuild/sunos-x64" "0.23.1" 1245 | "@esbuild/win32-arm64" "0.23.1" 1246 | "@esbuild/win32-ia32" "0.23.1" 1247 | "@esbuild/win32-x64" "0.23.1" 1248 | 1249 | escape-string-regexp@^4.0.0: 1250 | version "4.0.0" 1251 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 1252 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 1253 | 1254 | eslint-scope@^8.1.0: 1255 | version "8.1.0" 1256 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.1.0.tgz#70214a174d4cbffbc3e8a26911d8bf51b9ae9d30" 1257 | integrity sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw== 1258 | dependencies: 1259 | esrecurse "^4.3.0" 1260 | estraverse "^5.2.0" 1261 | 1262 | eslint-visitor-keys@^3.3.0: 1263 | version "3.4.1" 1264 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" 1265 | integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== 1266 | 1267 | eslint-visitor-keys@^3.4.3: 1268 | version "3.4.3" 1269 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" 1270 | integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== 1271 | 1272 | eslint-visitor-keys@^4.1.0: 1273 | version "4.1.0" 1274 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz#1f785cc5e81eb7534523d85922248232077d2f8c" 1275 | integrity sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg== 1276 | 1277 | eslint@^9.12.0: 1278 | version "9.12.0" 1279 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.12.0.tgz#54fcba2876c90528396da0fa44b6446329031e86" 1280 | integrity sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw== 1281 | dependencies: 1282 | "@eslint-community/eslint-utils" "^4.2.0" 1283 | "@eslint-community/regexpp" "^4.11.0" 1284 | "@eslint/config-array" "^0.18.0" 1285 | "@eslint/core" "^0.6.0" 1286 | "@eslint/eslintrc" "^3.1.0" 1287 | "@eslint/js" "9.12.0" 1288 | "@eslint/plugin-kit" "^0.2.0" 1289 | "@humanfs/node" "^0.16.5" 1290 | "@humanwhocodes/module-importer" "^1.0.1" 1291 | "@humanwhocodes/retry" "^0.3.1" 1292 | "@types/estree" "^1.0.6" 1293 | "@types/json-schema" "^7.0.15" 1294 | ajv "^6.12.4" 1295 | chalk "^4.0.0" 1296 | cross-spawn "^7.0.2" 1297 | debug "^4.3.2" 1298 | escape-string-regexp "^4.0.0" 1299 | eslint-scope "^8.1.0" 1300 | eslint-visitor-keys "^4.1.0" 1301 | espree "^10.2.0" 1302 | esquery "^1.5.0" 1303 | esutils "^2.0.2" 1304 | fast-deep-equal "^3.1.3" 1305 | file-entry-cache "^8.0.0" 1306 | find-up "^5.0.0" 1307 | glob-parent "^6.0.2" 1308 | ignore "^5.2.0" 1309 | imurmurhash "^0.1.4" 1310 | is-glob "^4.0.0" 1311 | json-stable-stringify-without-jsonify "^1.0.1" 1312 | lodash.merge "^4.6.2" 1313 | minimatch "^3.1.2" 1314 | natural-compare "^1.4.0" 1315 | optionator "^0.9.3" 1316 | text-table "^0.2.0" 1317 | 1318 | espree@^10.0.1, espree@^10.2.0: 1319 | version "10.2.0" 1320 | resolved "https://registry.yarnpkg.com/espree/-/espree-10.2.0.tgz#f4bcead9e05b0615c968e85f83816bc386a45df6" 1321 | integrity sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g== 1322 | dependencies: 1323 | acorn "^8.12.0" 1324 | acorn-jsx "^5.3.2" 1325 | eslint-visitor-keys "^4.1.0" 1326 | 1327 | esquery@^1.5.0: 1328 | version "1.6.0" 1329 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" 1330 | integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== 1331 | dependencies: 1332 | estraverse "^5.1.0" 1333 | 1334 | esrecurse@^4.3.0: 1335 | version "4.3.0" 1336 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 1337 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 1338 | dependencies: 1339 | estraverse "^5.2.0" 1340 | 1341 | estraverse@^5.1.0, estraverse@^5.2.0: 1342 | version "5.3.0" 1343 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 1344 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 1345 | 1346 | estree-walker@^2.0.2: 1347 | version "2.0.2" 1348 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" 1349 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== 1350 | 1351 | estree-walker@^3.0.3: 1352 | version "3.0.3" 1353 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" 1354 | integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== 1355 | dependencies: 1356 | "@types/estree" "^1.0.0" 1357 | 1358 | esutils@^2.0.2: 1359 | version "2.0.3" 1360 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 1361 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1362 | 1363 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 1364 | version "3.1.3" 1365 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 1366 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 1367 | 1368 | fast-glob@^3.3.2: 1369 | version "3.3.2" 1370 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" 1371 | integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== 1372 | dependencies: 1373 | "@nodelib/fs.stat" "^2.0.2" 1374 | "@nodelib/fs.walk" "^1.2.3" 1375 | glob-parent "^5.1.2" 1376 | merge2 "^1.3.0" 1377 | micromatch "^4.0.4" 1378 | 1379 | fast-json-stable-stringify@^2.0.0: 1380 | version "2.1.0" 1381 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1382 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1383 | 1384 | fast-levenshtein@^2.0.6: 1385 | version "2.0.6" 1386 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 1387 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 1388 | 1389 | fast-uri@^3.0.1: 1390 | version "3.0.2" 1391 | resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.2.tgz#d78b298cf70fd3b752fd951175a3da6a7b48f024" 1392 | integrity sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row== 1393 | 1394 | fastq@^1.6.0: 1395 | version "1.15.0" 1396 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" 1397 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== 1398 | dependencies: 1399 | reusify "^1.0.4" 1400 | 1401 | file-entry-cache@^8.0.0: 1402 | version "8.0.0" 1403 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" 1404 | integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== 1405 | dependencies: 1406 | flat-cache "^4.0.0" 1407 | 1408 | fill-range@^7.0.1: 1409 | version "7.0.1" 1410 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1411 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1412 | dependencies: 1413 | to-regex-range "^5.0.1" 1414 | 1415 | find-up@^5.0.0: 1416 | version "5.0.0" 1417 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 1418 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 1419 | dependencies: 1420 | locate-path "^6.0.0" 1421 | path-exists "^4.0.0" 1422 | 1423 | flat-cache@^4.0.0: 1424 | version "4.0.1" 1425 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" 1426 | integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== 1427 | dependencies: 1428 | flatted "^3.2.9" 1429 | keyv "^4.5.4" 1430 | 1431 | flatted@^3.2.9: 1432 | version "3.3.1" 1433 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" 1434 | integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== 1435 | 1436 | foreground-child@^3.1.0: 1437 | version "3.3.0" 1438 | resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" 1439 | integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== 1440 | dependencies: 1441 | cross-spawn "^7.0.0" 1442 | signal-exit "^4.0.1" 1443 | 1444 | fs-extra@~7.0.1: 1445 | version "7.0.1" 1446 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" 1447 | integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== 1448 | dependencies: 1449 | graceful-fs "^4.1.2" 1450 | jsonfile "^4.0.0" 1451 | universalify "^0.1.0" 1452 | 1453 | fsevents@~2.3.2, fsevents@~2.3.3: 1454 | version "2.3.3" 1455 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" 1456 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== 1457 | 1458 | function-bind@^1.1.2: 1459 | version "1.1.2" 1460 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" 1461 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== 1462 | 1463 | get-tsconfig@^4.7.5: 1464 | version "4.8.1" 1465 | resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.8.1.tgz#8995eb391ae6e1638d251118c7b56de7eb425471" 1466 | integrity sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg== 1467 | dependencies: 1468 | resolve-pkg-maps "^1.0.0" 1469 | 1470 | glob-parent@^5.1.2: 1471 | version "5.1.2" 1472 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 1473 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1474 | dependencies: 1475 | is-glob "^4.0.1" 1476 | 1477 | glob-parent@^6.0.2: 1478 | version "6.0.2" 1479 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 1480 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 1481 | dependencies: 1482 | is-glob "^4.0.3" 1483 | 1484 | glob@^10.4.1: 1485 | version "10.4.5" 1486 | resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" 1487 | integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== 1488 | dependencies: 1489 | foreground-child "^3.1.0" 1490 | jackspeak "^3.1.2" 1491 | minimatch "^9.0.4" 1492 | minipass "^7.1.2" 1493 | package-json-from-dist "^1.0.0" 1494 | path-scurry "^1.11.1" 1495 | 1496 | globals@^14.0.0: 1497 | version "14.0.0" 1498 | resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" 1499 | integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== 1500 | 1501 | graceful-fs@^4.1.2, graceful-fs@^4.1.6: 1502 | version "4.2.11" 1503 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" 1504 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 1505 | 1506 | graphemer@^1.4.0: 1507 | version "1.4.0" 1508 | resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" 1509 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 1510 | 1511 | has-flag@^4.0.0: 1512 | version "4.0.0" 1513 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1514 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1515 | 1516 | hasown@^2.0.2: 1517 | version "2.0.2" 1518 | resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" 1519 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== 1520 | dependencies: 1521 | function-bind "^1.1.2" 1522 | 1523 | he@^1.2.0: 1524 | version "1.2.0" 1525 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 1526 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 1527 | 1528 | html-escaper@^2.0.0: 1529 | version "2.0.2" 1530 | resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" 1531 | integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== 1532 | 1533 | htmlparser2@^8.0.1: 1534 | version "8.0.2" 1535 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" 1536 | integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== 1537 | dependencies: 1538 | domelementtype "^2.3.0" 1539 | domhandler "^5.0.3" 1540 | domutils "^3.0.1" 1541 | entities "^4.4.0" 1542 | 1543 | ignore@^5.2.0: 1544 | version "5.2.4" 1545 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" 1546 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 1547 | 1548 | ignore@^5.3.1: 1549 | version "5.3.2" 1550 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" 1551 | integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== 1552 | 1553 | import-fresh@^3.2.1: 1554 | version "3.3.0" 1555 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1556 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1557 | dependencies: 1558 | parent-module "^1.0.0" 1559 | resolve-from "^4.0.0" 1560 | 1561 | import-lazy@~4.0.0: 1562 | version "4.0.0" 1563 | resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" 1564 | integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== 1565 | 1566 | imurmurhash@^0.1.4: 1567 | version "0.1.4" 1568 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1569 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1570 | 1571 | is-core-module@^2.13.0: 1572 | version "2.15.1" 1573 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" 1574 | integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== 1575 | dependencies: 1576 | hasown "^2.0.2" 1577 | 1578 | is-extglob@^2.1.1: 1579 | version "2.1.1" 1580 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1581 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1582 | 1583 | is-fullwidth-code-point@^3.0.0: 1584 | version "3.0.0" 1585 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1586 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1587 | 1588 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: 1589 | version "4.0.3" 1590 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1591 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1592 | dependencies: 1593 | is-extglob "^2.1.1" 1594 | 1595 | is-number@^7.0.0: 1596 | version "7.0.0" 1597 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1598 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1599 | 1600 | isexe@^2.0.0: 1601 | version "2.0.0" 1602 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1603 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1604 | 1605 | istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.2: 1606 | version "3.2.2" 1607 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" 1608 | integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== 1609 | 1610 | istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1: 1611 | version "3.0.1" 1612 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" 1613 | integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== 1614 | dependencies: 1615 | istanbul-lib-coverage "^3.0.0" 1616 | make-dir "^4.0.0" 1617 | supports-color "^7.1.0" 1618 | 1619 | istanbul-lib-source-maps@^5.0.6: 1620 | version "5.0.6" 1621 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz#acaef948df7747c8eb5fbf1265cb980f6353a441" 1622 | integrity sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A== 1623 | dependencies: 1624 | "@jridgewell/trace-mapping" "^0.3.23" 1625 | debug "^4.1.1" 1626 | istanbul-lib-coverage "^3.0.0" 1627 | 1628 | istanbul-reports@^3.1.7: 1629 | version "3.1.7" 1630 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" 1631 | integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== 1632 | dependencies: 1633 | html-escaper "^2.0.0" 1634 | istanbul-lib-report "^3.0.0" 1635 | 1636 | jackspeak@^3.1.2: 1637 | version "3.4.3" 1638 | resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" 1639 | integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== 1640 | dependencies: 1641 | "@isaacs/cliui" "^8.0.2" 1642 | optionalDependencies: 1643 | "@pkgjs/parseargs" "^0.11.0" 1644 | 1645 | jju@~1.4.0: 1646 | version "1.4.0" 1647 | resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" 1648 | integrity sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== 1649 | 1650 | js-yaml@^4.1.0: 1651 | version "4.1.0" 1652 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1653 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1654 | dependencies: 1655 | argparse "^2.0.1" 1656 | 1657 | json-buffer@3.0.1: 1658 | version "3.0.1" 1659 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" 1660 | integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== 1661 | 1662 | json-schema-traverse@^0.4.1: 1663 | version "0.4.1" 1664 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1665 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1666 | 1667 | json-schema-traverse@^1.0.0: 1668 | version "1.0.0" 1669 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" 1670 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== 1671 | 1672 | json-stable-stringify-without-jsonify@^1.0.1: 1673 | version "1.0.1" 1674 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1675 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 1676 | 1677 | jsonfile@^4.0.0: 1678 | version "4.0.0" 1679 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" 1680 | integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== 1681 | optionalDependencies: 1682 | graceful-fs "^4.1.6" 1683 | 1684 | keyv@^4.5.4: 1685 | version "4.5.4" 1686 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" 1687 | integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== 1688 | dependencies: 1689 | json-buffer "3.0.1" 1690 | 1691 | kolorist@^1.8.0: 1692 | version "1.8.0" 1693 | resolved "https://registry.yarnpkg.com/kolorist/-/kolorist-1.8.0.tgz#edddbbbc7894bc13302cdf740af6374d4a04743c" 1694 | integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ== 1695 | 1696 | levn@^0.4.1: 1697 | version "0.4.1" 1698 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1699 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1700 | dependencies: 1701 | prelude-ls "^1.2.1" 1702 | type-check "~0.4.0" 1703 | 1704 | local-pkg@^0.5.0: 1705 | version "0.5.0" 1706 | resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.5.0.tgz#093d25a346bae59a99f80e75f6e9d36d7e8c925c" 1707 | integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg== 1708 | dependencies: 1709 | mlly "^1.4.2" 1710 | pkg-types "^1.0.3" 1711 | 1712 | locate-path@^6.0.0: 1713 | version "6.0.0" 1714 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1715 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1716 | dependencies: 1717 | p-locate "^5.0.0" 1718 | 1719 | lodash.merge@^4.6.2: 1720 | version "4.6.2" 1721 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1722 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1723 | 1724 | lodash@~4.17.15: 1725 | version "4.17.21" 1726 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1727 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1728 | 1729 | loupe@^3.1.0, loupe@^3.1.1: 1730 | version "3.1.2" 1731 | resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.2.tgz#c86e0696804a02218f2206124c45d8b15291a240" 1732 | integrity sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg== 1733 | 1734 | lru-cache@^10.2.0: 1735 | version "10.4.3" 1736 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" 1737 | integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== 1738 | 1739 | lru-cache@^6.0.0: 1740 | version "6.0.0" 1741 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1742 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1743 | dependencies: 1744 | yallist "^4.0.0" 1745 | 1746 | magic-string@^0.30.11: 1747 | version "0.30.12" 1748 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.12.tgz#9eb11c9d072b9bcb4940a5b2c2e1a217e4ee1a60" 1749 | integrity sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw== 1750 | dependencies: 1751 | "@jridgewell/sourcemap-codec" "^1.5.0" 1752 | 1753 | magicast@^0.3.4: 1754 | version "0.3.5" 1755 | resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.3.5.tgz#8301c3c7d66704a0771eb1bad74274f0ec036739" 1756 | integrity sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ== 1757 | dependencies: 1758 | "@babel/parser" "^7.25.4" 1759 | "@babel/types" "^7.25.4" 1760 | source-map-js "^1.2.0" 1761 | 1762 | make-dir@^4.0.0: 1763 | version "4.0.0" 1764 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" 1765 | integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== 1766 | dependencies: 1767 | semver "^7.5.3" 1768 | 1769 | merge2@^1.3.0: 1770 | version "1.4.1" 1771 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1772 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1773 | 1774 | micromatch@^4.0.4: 1775 | version "4.0.5" 1776 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 1777 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1778 | dependencies: 1779 | braces "^3.0.2" 1780 | picomatch "^2.3.1" 1781 | 1782 | minimatch@^3.1.2: 1783 | version "3.1.2" 1784 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1785 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1786 | dependencies: 1787 | brace-expansion "^1.1.7" 1788 | 1789 | minimatch@^9.0.3, minimatch@^9.0.4: 1790 | version "9.0.5" 1791 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" 1792 | integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== 1793 | dependencies: 1794 | brace-expansion "^2.0.1" 1795 | 1796 | minimatch@~3.0.3: 1797 | version "3.0.8" 1798 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" 1799 | integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== 1800 | dependencies: 1801 | brace-expansion "^1.1.7" 1802 | 1803 | "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: 1804 | version "7.1.2" 1805 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" 1806 | integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== 1807 | 1808 | mlly@^1.4.2, mlly@^1.7.2: 1809 | version "1.7.2" 1810 | resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.2.tgz#21c0d04543207495b8d867eff0ac29fac9a023c0" 1811 | integrity sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA== 1812 | dependencies: 1813 | acorn "^8.12.1" 1814 | pathe "^1.1.2" 1815 | pkg-types "^1.2.0" 1816 | ufo "^1.5.4" 1817 | 1818 | ms@2.1.2: 1819 | version "2.1.2" 1820 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1821 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1822 | 1823 | ms@^2.1.3: 1824 | version "2.1.3" 1825 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1826 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1827 | 1828 | muggle-string@^0.4.1: 1829 | version "0.4.1" 1830 | resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.4.1.tgz#3b366bd43b32f809dc20659534dd30e7c8a0d328" 1831 | integrity sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ== 1832 | 1833 | nanoid@^3.3.7: 1834 | version "3.3.7" 1835 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" 1836 | integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== 1837 | 1838 | natural-compare@^1.4.0: 1839 | version "1.4.0" 1840 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1841 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1842 | 1843 | nth-check@^2.0.1: 1844 | version "2.1.1" 1845 | resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" 1846 | integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== 1847 | dependencies: 1848 | boolbase "^1.0.0" 1849 | 1850 | optionator@^0.9.3: 1851 | version "0.9.4" 1852 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" 1853 | integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== 1854 | dependencies: 1855 | deep-is "^0.1.3" 1856 | fast-levenshtein "^2.0.6" 1857 | levn "^0.4.1" 1858 | prelude-ls "^1.2.1" 1859 | type-check "^0.4.0" 1860 | word-wrap "^1.2.5" 1861 | 1862 | p-limit@^3.0.2: 1863 | version "3.1.0" 1864 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1865 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1866 | dependencies: 1867 | yocto-queue "^0.1.0" 1868 | 1869 | p-locate@^5.0.0: 1870 | version "5.0.0" 1871 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1872 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1873 | dependencies: 1874 | p-limit "^3.0.2" 1875 | 1876 | package-json-from-dist@^1.0.0: 1877 | version "1.0.1" 1878 | resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" 1879 | integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== 1880 | 1881 | parent-module@^1.0.0: 1882 | version "1.0.1" 1883 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1884 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1885 | dependencies: 1886 | callsites "^3.0.0" 1887 | 1888 | parse5-htmlparser2-tree-adapter@^7.0.0: 1889 | version "7.0.0" 1890 | resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" 1891 | integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== 1892 | dependencies: 1893 | domhandler "^5.0.2" 1894 | parse5 "^7.0.0" 1895 | 1896 | parse5@^7.0.0: 1897 | version "7.1.2" 1898 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" 1899 | integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== 1900 | dependencies: 1901 | entities "^4.4.0" 1902 | 1903 | path-browserify@^1.0.1: 1904 | version "1.0.1" 1905 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" 1906 | integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== 1907 | 1908 | path-exists@^4.0.0: 1909 | version "4.0.0" 1910 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1911 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1912 | 1913 | path-key@^3.1.0: 1914 | version "3.1.1" 1915 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1916 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1917 | 1918 | path-parse@^1.0.7: 1919 | version "1.0.7" 1920 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1921 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1922 | 1923 | path-scurry@^1.11.1: 1924 | version "1.11.1" 1925 | resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" 1926 | integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== 1927 | dependencies: 1928 | lru-cache "^10.2.0" 1929 | minipass "^5.0.0 || ^6.0.2 || ^7.0.0" 1930 | 1931 | pathe@^1.1.2: 1932 | version "1.1.2" 1933 | resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" 1934 | integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== 1935 | 1936 | pathval@^2.0.0: 1937 | version "2.0.0" 1938 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25" 1939 | integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== 1940 | 1941 | picocolors@^1.1.0: 1942 | version "1.1.0" 1943 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" 1944 | integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== 1945 | 1946 | picomatch@^2.3.1: 1947 | version "2.3.1" 1948 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1949 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1950 | 1951 | pkg-types@^1.0.3, pkg-types@^1.2.0: 1952 | version "1.2.1" 1953 | resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.2.1.tgz#6ac4e455a5bb4b9a6185c1c79abd544c901db2e5" 1954 | integrity sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw== 1955 | dependencies: 1956 | confbox "^0.1.8" 1957 | mlly "^1.7.2" 1958 | pathe "^1.1.2" 1959 | 1960 | postcss@^8.4.43: 1961 | version "8.4.47" 1962 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.47.tgz#5bf6c9a010f3e724c503bf03ef7947dcb0fea365" 1963 | integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ== 1964 | dependencies: 1965 | nanoid "^3.3.7" 1966 | picocolors "^1.1.0" 1967 | source-map-js "^1.2.1" 1968 | 1969 | prelude-ls@^1.2.1: 1970 | version "1.2.1" 1971 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1972 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1973 | 1974 | punycode@^2.1.0: 1975 | version "2.3.0" 1976 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" 1977 | integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== 1978 | 1979 | queue-microtask@^1.2.2: 1980 | version "1.2.3" 1981 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1982 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1983 | 1984 | require-from-string@^2.0.2: 1985 | version "2.0.2" 1986 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 1987 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 1988 | 1989 | resolve-from@^4.0.0: 1990 | version "4.0.0" 1991 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1992 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1993 | 1994 | resolve-pkg-maps@^1.0.0: 1995 | version "1.0.0" 1996 | resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" 1997 | integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== 1998 | 1999 | resolve@~1.22.1, resolve@~1.22.2: 2000 | version "1.22.8" 2001 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" 2002 | integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== 2003 | dependencies: 2004 | is-core-module "^2.13.0" 2005 | path-parse "^1.0.7" 2006 | supports-preserve-symlinks-flag "^1.0.0" 2007 | 2008 | reusify@^1.0.4: 2009 | version "1.0.4" 2010 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 2011 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 2012 | 2013 | rollup@^4.20.0: 2014 | version "4.24.0" 2015 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.24.0.tgz#c14a3576f20622ea6a5c9cad7caca5e6e9555d05" 2016 | integrity sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg== 2017 | dependencies: 2018 | "@types/estree" "1.0.6" 2019 | optionalDependencies: 2020 | "@rollup/rollup-android-arm-eabi" "4.24.0" 2021 | "@rollup/rollup-android-arm64" "4.24.0" 2022 | "@rollup/rollup-darwin-arm64" "4.24.0" 2023 | "@rollup/rollup-darwin-x64" "4.24.0" 2024 | "@rollup/rollup-linux-arm-gnueabihf" "4.24.0" 2025 | "@rollup/rollup-linux-arm-musleabihf" "4.24.0" 2026 | "@rollup/rollup-linux-arm64-gnu" "4.24.0" 2027 | "@rollup/rollup-linux-arm64-musl" "4.24.0" 2028 | "@rollup/rollup-linux-powerpc64le-gnu" "4.24.0" 2029 | "@rollup/rollup-linux-riscv64-gnu" "4.24.0" 2030 | "@rollup/rollup-linux-s390x-gnu" "4.24.0" 2031 | "@rollup/rollup-linux-x64-gnu" "4.24.0" 2032 | "@rollup/rollup-linux-x64-musl" "4.24.0" 2033 | "@rollup/rollup-win32-arm64-msvc" "4.24.0" 2034 | "@rollup/rollup-win32-ia32-msvc" "4.24.0" 2035 | "@rollup/rollup-win32-x64-msvc" "4.24.0" 2036 | fsevents "~2.3.2" 2037 | 2038 | run-parallel@^1.1.9: 2039 | version "1.2.0" 2040 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 2041 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 2042 | dependencies: 2043 | queue-microtask "^1.2.2" 2044 | 2045 | semver@^7.5.3, semver@^7.6.0: 2046 | version "7.6.3" 2047 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" 2048 | integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== 2049 | 2050 | semver@~7.5.4: 2051 | version "7.5.4" 2052 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" 2053 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== 2054 | dependencies: 2055 | lru-cache "^6.0.0" 2056 | 2057 | shebang-command@^2.0.0: 2058 | version "2.0.0" 2059 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 2060 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2061 | dependencies: 2062 | shebang-regex "^3.0.0" 2063 | 2064 | shebang-regex@^3.0.0: 2065 | version "3.0.0" 2066 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 2067 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2068 | 2069 | siginfo@^2.0.0: 2070 | version "2.0.0" 2071 | resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" 2072 | integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== 2073 | 2074 | signal-exit@^4.0.1: 2075 | version "4.1.0" 2076 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" 2077 | integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== 2078 | 2079 | source-map-js@^1.2.0, source-map-js@^1.2.1: 2080 | version "1.2.1" 2081 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" 2082 | integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== 2083 | 2084 | source-map@~0.6.1: 2085 | version "0.6.1" 2086 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2087 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2088 | 2089 | sprintf-js@~1.0.2: 2090 | version "1.0.3" 2091 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2092 | integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== 2093 | 2094 | stackback@0.0.2: 2095 | version "0.0.2" 2096 | resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" 2097 | integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== 2098 | 2099 | std-env@^3.7.0: 2100 | version "3.7.0" 2101 | resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" 2102 | integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== 2103 | 2104 | string-argv@~0.3.1: 2105 | version "0.3.2" 2106 | resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" 2107 | integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== 2108 | 2109 | "string-width-cjs@npm:string-width@^4.2.0": 2110 | version "4.2.3" 2111 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 2112 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 2113 | dependencies: 2114 | emoji-regex "^8.0.0" 2115 | is-fullwidth-code-point "^3.0.0" 2116 | strip-ansi "^6.0.1" 2117 | 2118 | string-width@^4.1.0: 2119 | version "4.2.3" 2120 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 2121 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 2122 | dependencies: 2123 | emoji-regex "^8.0.0" 2124 | is-fullwidth-code-point "^3.0.0" 2125 | strip-ansi "^6.0.1" 2126 | 2127 | string-width@^5.0.1, string-width@^5.1.2: 2128 | version "5.1.2" 2129 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" 2130 | integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== 2131 | dependencies: 2132 | eastasianwidth "^0.2.0" 2133 | emoji-regex "^9.2.2" 2134 | strip-ansi "^7.0.1" 2135 | 2136 | "strip-ansi-cjs@npm:strip-ansi@^6.0.1": 2137 | version "6.0.1" 2138 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 2139 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 2140 | dependencies: 2141 | ansi-regex "^5.0.1" 2142 | 2143 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 2144 | version "6.0.1" 2145 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 2146 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 2147 | dependencies: 2148 | ansi-regex "^5.0.1" 2149 | 2150 | strip-ansi@^7.0.1: 2151 | version "7.1.0" 2152 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" 2153 | integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== 2154 | dependencies: 2155 | ansi-regex "^6.0.1" 2156 | 2157 | strip-json-comments@^3.1.1, strip-json-comments@~3.1.1: 2158 | version "3.1.1" 2159 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 2160 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2161 | 2162 | supports-color@^7.1.0: 2163 | version "7.2.0" 2164 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2165 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2166 | dependencies: 2167 | has-flag "^4.0.0" 2168 | 2169 | supports-color@~8.1.1: 2170 | version "8.1.1" 2171 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 2172 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 2173 | dependencies: 2174 | has-flag "^4.0.0" 2175 | 2176 | supports-preserve-symlinks-flag@^1.0.0: 2177 | version "1.0.0" 2178 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 2179 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 2180 | 2181 | test-exclude@^7.0.1: 2182 | version "7.0.1" 2183 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-7.0.1.tgz#20b3ba4906ac20994e275bbcafd68d510264c2a2" 2184 | integrity sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg== 2185 | dependencies: 2186 | "@istanbuljs/schema" "^0.1.2" 2187 | glob "^10.4.1" 2188 | minimatch "^9.0.4" 2189 | 2190 | text-table@^0.2.0: 2191 | version "0.2.0" 2192 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 2193 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 2194 | 2195 | tinybench@^2.9.0: 2196 | version "2.9.0" 2197 | resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" 2198 | integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== 2199 | 2200 | tinyexec@^0.3.0: 2201 | version "0.3.0" 2202 | resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.0.tgz#ed60cfce19c17799d4a241e06b31b0ec2bee69e6" 2203 | integrity sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg== 2204 | 2205 | tinypool@^1.0.0: 2206 | version "1.0.1" 2207 | resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.0.1.tgz#c64233c4fac4304e109a64340178760116dbe1fe" 2208 | integrity sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA== 2209 | 2210 | tinyrainbow@^1.2.0: 2211 | version "1.2.0" 2212 | resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-1.2.0.tgz#5c57d2fc0fb3d1afd78465c33ca885d04f02abb5" 2213 | integrity sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ== 2214 | 2215 | tinyspy@^3.0.0: 2216 | version "3.0.2" 2217 | resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-3.0.2.tgz#86dd3cf3d737b15adcf17d7887c84a75201df20a" 2218 | integrity sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q== 2219 | 2220 | to-fast-properties@^2.0.0: 2221 | version "2.0.0" 2222 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 2223 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 2224 | 2225 | to-regex-range@^5.0.1: 2226 | version "5.0.1" 2227 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2228 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2229 | dependencies: 2230 | is-number "^7.0.0" 2231 | 2232 | ts-api-utils@^1.3.0: 2233 | version "1.3.0" 2234 | resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" 2235 | integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== 2236 | 2237 | tsx@^4.19.1: 2238 | version "4.19.1" 2239 | resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.19.1.tgz#b7bffdf4b565813e4dea14b90872af279cd0090b" 2240 | integrity sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA== 2241 | dependencies: 2242 | esbuild "~0.23.0" 2243 | get-tsconfig "^4.7.5" 2244 | optionalDependencies: 2245 | fsevents "~2.3.3" 2246 | 2247 | type-check@^0.4.0, type-check@~0.4.0: 2248 | version "0.4.0" 2249 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 2250 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 2251 | dependencies: 2252 | prelude-ls "^1.2.1" 2253 | 2254 | typescript-eslint@^8.8.1: 2255 | version "8.8.1" 2256 | resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.8.1.tgz#b375c877b2184d883b6228170bc66f0fca847c9a" 2257 | integrity sha512-R0dsXFt6t4SAFjUSKFjMh4pXDtq04SsFKCVGDP3ZOzNP7itF0jBcZYU4fMsZr4y7O7V7Nc751dDeESbe4PbQMQ== 2258 | dependencies: 2259 | "@typescript-eslint/eslint-plugin" "8.8.1" 2260 | "@typescript-eslint/parser" "8.8.1" 2261 | "@typescript-eslint/utils" "8.8.1" 2262 | 2263 | typescript@5.4.2: 2264 | version "5.4.2" 2265 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372" 2266 | integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ== 2267 | 2268 | typescript@^5.6.3: 2269 | version "5.6.3" 2270 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" 2271 | integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== 2272 | 2273 | ufo@^1.5.4: 2274 | version "1.5.4" 2275 | resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.4.tgz#16d6949674ca0c9e0fbbae1fa20a71d7b1ded754" 2276 | integrity sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ== 2277 | 2278 | universalify@^0.1.0: 2279 | version "0.1.2" 2280 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" 2281 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== 2282 | 2283 | uri-js@^4.2.2, uri-js@^4.4.1: 2284 | version "4.4.1" 2285 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 2286 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 2287 | dependencies: 2288 | punycode "^2.1.0" 2289 | 2290 | vite-node@2.1.2: 2291 | version "2.1.2" 2292 | resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-2.1.2.tgz#f5491a2b399959c9e2f3c4b70cb0cbaecf9be6d2" 2293 | integrity sha512-HPcGNN5g/7I2OtPjLqgOtCRu/qhVvBxTUD3qzitmL0SrG1cWFzxzhMDWussxSbrRYWqnKf8P2jiNhPMSN+ymsQ== 2294 | dependencies: 2295 | cac "^6.7.14" 2296 | debug "^4.3.6" 2297 | pathe "^1.1.2" 2298 | vite "^5.0.0" 2299 | 2300 | vite-plugin-dts@^4.2.4: 2301 | version "4.2.4" 2302 | resolved "https://registry.yarnpkg.com/vite-plugin-dts/-/vite-plugin-dts-4.2.4.tgz#5b8697e6abe9004e6d134a59a9bc08f2eacb9288" 2303 | integrity sha512-REcYoxO90Pi8c0P1J7XAa/nVwNVGkX2eYkBEIfFSfcKE4g1W8sB0R23a7SU3aLEMfdOdb0SVHq3JlJ+Qb6gjgA== 2304 | dependencies: 2305 | "@microsoft/api-extractor" "7.47.7" 2306 | "@rollup/pluginutils" "^5.1.0" 2307 | "@volar/typescript" "^2.4.4" 2308 | "@vue/language-core" "2.1.6" 2309 | compare-versions "^6.1.1" 2310 | debug "^4.3.6" 2311 | kolorist "^1.8.0" 2312 | local-pkg "^0.5.0" 2313 | magic-string "^0.30.11" 2314 | 2315 | vite@^5.0.0, vite@^5.4.8: 2316 | version "5.4.8" 2317 | resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.8.tgz#af548ce1c211b2785478d3ba3e8da51e39a287e8" 2318 | integrity sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ== 2319 | dependencies: 2320 | esbuild "^0.21.3" 2321 | postcss "^8.4.43" 2322 | rollup "^4.20.0" 2323 | optionalDependencies: 2324 | fsevents "~2.3.3" 2325 | 2326 | vitest@^2.1.2: 2327 | version "2.1.2" 2328 | resolved "https://registry.yarnpkg.com/vitest/-/vitest-2.1.2.tgz#f285fdde876749fddc0cb4d9748ae224443c1694" 2329 | integrity sha512-veNjLizOMkRrJ6xxb+pvxN6/QAWg95mzcRjtmkepXdN87FNfxAss9RKe2far/G9cQpipfgP2taqg0KiWsquj8A== 2330 | dependencies: 2331 | "@vitest/expect" "2.1.2" 2332 | "@vitest/mocker" "2.1.2" 2333 | "@vitest/pretty-format" "^2.1.2" 2334 | "@vitest/runner" "2.1.2" 2335 | "@vitest/snapshot" "2.1.2" 2336 | "@vitest/spy" "2.1.2" 2337 | "@vitest/utils" "2.1.2" 2338 | chai "^5.1.1" 2339 | debug "^4.3.6" 2340 | magic-string "^0.30.11" 2341 | pathe "^1.1.2" 2342 | std-env "^3.7.0" 2343 | tinybench "^2.9.0" 2344 | tinyexec "^0.3.0" 2345 | tinypool "^1.0.0" 2346 | tinyrainbow "^1.2.0" 2347 | vite "^5.0.0" 2348 | vite-node "2.1.2" 2349 | why-is-node-running "^2.3.0" 2350 | 2351 | vscode-uri@^3.0.8: 2352 | version "3.0.8" 2353 | resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.8.tgz#1770938d3e72588659a172d0fd4642780083ff9f" 2354 | integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw== 2355 | 2356 | which@^2.0.1: 2357 | version "2.0.2" 2358 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2359 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2360 | dependencies: 2361 | isexe "^2.0.0" 2362 | 2363 | why-is-node-running@^2.3.0: 2364 | version "2.3.0" 2365 | resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04" 2366 | integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== 2367 | dependencies: 2368 | siginfo "^2.0.0" 2369 | stackback "0.0.2" 2370 | 2371 | word-wrap@^1.2.5: 2372 | version "1.2.5" 2373 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" 2374 | integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== 2375 | 2376 | "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": 2377 | version "7.0.0" 2378 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 2379 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 2380 | dependencies: 2381 | ansi-styles "^4.0.0" 2382 | string-width "^4.1.0" 2383 | strip-ansi "^6.0.0" 2384 | 2385 | wrap-ansi@^8.1.0: 2386 | version "8.1.0" 2387 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" 2388 | integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== 2389 | dependencies: 2390 | ansi-styles "^6.1.0" 2391 | string-width "^5.0.1" 2392 | strip-ansi "^7.0.1" 2393 | 2394 | yallist@^4.0.0: 2395 | version "4.0.0" 2396 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2397 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2398 | 2399 | yocto-queue@^0.1.0: 2400 | version "0.1.0" 2401 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2402 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2403 | --------------------------------------------------------------------------------