├── .editorconfig ├── .github ├── FUNDING.yml └── workflows │ ├── release.yml │ └── test.yml ├── .gitignore ├── .npmignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── eslint.config.mjs ├── lib ├── safe-parse.js └── safe-parser.js ├── package.json ├── pnpm-lock.yaml └── test ├── integration.js └── parse.test.js /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | open_collective: postcss 2 | tidelift: npm/postcss-safe-parser 3 | github: ai 4 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | on: 3 | push: 4 | tags: 5 | - '*' 6 | permissions: 7 | contents: write 8 | jobs: 9 | release: 10 | name: Release On Tag 11 | if: startsWith(github.ref, 'refs/tags/') 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Checkout the repository 15 | uses: actions/checkout@v4 16 | - name: Extract the changelog 17 | id: changelog 18 | run: | 19 | TAG_NAME=${GITHUB_REF/refs\/tags\//} 20 | READ_SECTION=false 21 | CHANGELOG="" 22 | while IFS= read -r line; do 23 | if [[ "$line" =~ ^#+\ +(.*) ]]; then 24 | if [[ "${BASH_REMATCH[1]}" == "$TAG_NAME" ]]; then 25 | READ_SECTION=true 26 | elif [[ "$READ_SECTION" == true ]]; then 27 | break 28 | fi 29 | elif [[ "$READ_SECTION" == true ]]; then 30 | CHANGELOG+="$line"$'\n' 31 | fi 32 | done < "CHANGELOG.md" 33 | CHANGELOG=$(echo "$CHANGELOG" | awk '/./ {$1=$1;print}') 34 | echo "changelog_content<> $GITHUB_OUTPUT 35 | echo "$CHANGELOG" >> $GITHUB_OUTPUT 36 | echo "EOF" >> $GITHUB_OUTPUT 37 | - name: Create the release 38 | if: steps.changelog.outputs.changelog_content != '' 39 | uses: softprops/action-gh-release@v2 40 | with: 41 | name: ${{ github.ref_name }} 42 | body: '${{ steps.changelog.outputs.changelog_content }}' 43 | draft: false 44 | prerelease: false 45 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | on: 3 | push: 4 | branches: 5 | - main 6 | pull_request: 7 | permissions: 8 | contents: read 9 | jobs: 10 | full: 11 | name: Node.js Latest Full 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Checkout the repository 15 | uses: actions/checkout@v4 16 | - name: Install pnpm 17 | uses: pnpm/action-setup@v4 18 | with: 19 | version: 9 20 | - name: Install Node.js 21 | uses: actions/setup-node@v4 22 | with: 23 | node-version: 22 24 | cache: pnpm 25 | - name: Install dependencies 26 | run: pnpm install --ignore-scripts 27 | - name: Run tests 28 | run: pnpm test 29 | short: 30 | runs-on: ubuntu-latest 31 | strategy: 32 | matrix: 33 | node-version: 34 | - 20 35 | - 18 36 | name: Node.js ${{ matrix.node-version }} Quick 37 | steps: 38 | - name: Checkout the repository 39 | uses: actions/checkout@v4 40 | - name: Install pnpm 41 | uses: pnpm/action-setup@v4 42 | with: 43 | version: 9 44 | - name: Install Node.js ${{ matrix.node-version }} 45 | uses: actions/setup-node@v4 46 | with: 47 | node-version: ${{ matrix.node-version }} 48 | cache: pnpm 49 | - name: Install dependencies 50 | run: pnpm install --ignore-scripts 51 | - name: Run unit tests 52 | run: pnpm unit 53 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | coverage/ 3 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | test/ 2 | coverage/ 3 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | This project adheres to [Semantic Versioning](http://semver.org/). 3 | 4 | ## 7.0.1 5 | * Fixed JSON inside CSS support (by @dengelke). 6 | 7 | ## 7.0 8 | * Removed Node.js 16, 14, and 12 support. 9 | * Added `Root#source.end`. 10 | 11 | ## 6.0 12 | * Removed Node.js 10 support. 13 | * Moved `postcss` to `peerDependencies`. 14 | 15 | ## 5.0.2 16 | * Added funding links. 17 | 18 | ## 5.0.1 19 | * Fixed parsing missed semicolon. 20 | 21 | ## 5.0 22 | * Removed support for Node.js 6.x, 8.x, 11.x, and 13.x versions. 23 | * Moved to PostCSS 8.0. 24 | 25 | ## 4.0.2 26 | * Fix parsing `:;`. 27 | 28 | ## 4.0.1 29 | * Remove development file from npm package. 30 | 31 | ## 4.0 32 | * Remove Node.js 9 and Node.js 4 support. 33 | * Remove IE and “dead” browsers from Babel. 34 | * Use PostCSS 7.0. 35 | 36 | ## 3.0.1 37 | * Fix parsing IE filter with missed semicolon. 38 | 39 | ## 3.0 40 | * Use PostCSS 6.0. 41 | * Use `babel-preset-env`. 42 | 43 | ## 2.0.1 44 | * Do not fall on colon instead of semicolon in the declaration end. 45 | 46 | ## 2.0 47 | * Use PostCSS 5.2 core tokenizer. 48 | 49 | ## 1.0.7 50 | * Parse new lines according W3C CSS syntax specification. 51 | 52 | ## 1.0.6 53 | * Fix package dependencies. 54 | 55 | ## 1.0.5 56 | * Fix CSS syntax error position on unclosed quotes. 57 | 58 | ## 1.0.4 59 | * Fix wrong `main` in `package.json`. 60 | 61 | ## 1.0.3 62 | * Remove Babel from dependencies (by Jonny Buchanan). 63 | 64 | ## 1.0.2 65 | * Clean code for PostCSS 5.0.13 internal changes. 66 | * Use Babel 6. 67 | 68 | ## 1.0.1 69 | * Fix `url()` parsing. 70 | 71 | ## 1.0 72 | * Initial release from PostCSS sources. 73 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright 2013 Andrey Sitnik 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | 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, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PostCSS Safe Parser 2 | 3 | 6 | 7 | A fault-tolerant CSS parser for [PostCSS], which will find & fix syntax errors, 8 | capable of parsing any input. It is useful for: 9 | 10 | * Parse legacy code with many hacks. For example, it can parse all examples 11 | from [Browserhacks]. 12 | * Works with demo tools with live input like [Autoprefixer demo]. 13 | 14 | [Autoprefixer demo]: http://simevidas.jsbin.com/gufoko/quiet 15 | [Browserhacks]: http://browserhacks.com/ 16 | [PostCSS]: https://github.com/postcss/postcss 17 | 18 | --- 19 | 20 |   Made at Evil Martians, product consulting for developer tools. 21 | 22 | --- 23 | 24 | 25 | ## Usage 26 | 27 | ```js 28 | const safe = require('postcss-safe-parser') 29 | 30 | const badCss = 'a {' 31 | 32 | postcss(plugins).process(badCss, { parser: safe }).then(result => { 33 | result.css //= 'a {}' 34 | }) 35 | ``` 36 | 37 | 38 | ## Security Contact 39 | 40 | To report a security vulnerability, please use the [Tidelift security contact]. 41 | Tidelift will coordinate the fix and disclosure. 42 | 43 | [Tidelift security contact]: https://tidelift.com/security 44 | 45 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import loguxConfig from '@logux/eslint-config' 2 | 3 | export default [...loguxConfig] 4 | -------------------------------------------------------------------------------- /lib/safe-parse.js: -------------------------------------------------------------------------------- 1 | let { Input } = require('postcss') 2 | 3 | let SafeParser = require('./safe-parser') 4 | 5 | module.exports = function safeParse(css, opts) { 6 | let input = new Input(css, opts) 7 | 8 | let parser = new SafeParser(input) 9 | parser.parse() 10 | 11 | return parser.root 12 | } 13 | -------------------------------------------------------------------------------- /lib/safe-parser.js: -------------------------------------------------------------------------------- 1 | let Comment = require('postcss/lib/comment') 2 | let Parser = require('postcss/lib/parser') 3 | let tokenizer = require('postcss/lib/tokenize') 4 | 5 | class SafeParser extends Parser { 6 | checkMissedSemicolon() {} 7 | 8 | comment(token) { 9 | let node = new Comment() 10 | this.init(node, token[2]) 11 | let pos = 12 | this.input.fromOffset(token[3]) || 13 | this.input.fromOffset(this.input.css.length - 1) 14 | node.source.end = { 15 | column: pos.col, 16 | line: pos.line, 17 | offset: token[3] + 1 18 | } 19 | 20 | let text = token[1].slice(2) 21 | if (text.slice(-2) === '*/') text = text.slice(0, -2) 22 | 23 | if (/^\s*$/.test(text)) { 24 | node.text = '' 25 | node.raws.left = text 26 | node.raws.right = '' 27 | } else { 28 | let match = text.match(/^(\s*)([^]*\S)(\s*)$/) 29 | node.text = match[2] 30 | node.raws.left = match[1] 31 | node.raws.right = match[3] 32 | } 33 | } 34 | 35 | createTokenizer() { 36 | this.tokenizer = tokenizer(this.input, { ignoreErrors: true }) 37 | } 38 | 39 | decl(tokens) { 40 | if (tokens.length > 1 && tokens.some(i => i[0] === 'word')) { 41 | super.decl(tokens) 42 | } 43 | } 44 | 45 | doubleColon() {} 46 | 47 | endFile() { 48 | if (this.current.nodes && this.current.nodes.length) { 49 | this.current.raws.semicolon = this.semicolon 50 | } 51 | this.current.raws.after = (this.current.raws.after || '') + this.spaces 52 | 53 | while (this.current.parent) { 54 | this.current = this.current.parent 55 | this.current.raws.after = '' 56 | } 57 | this.root.source.end = this.getPosition(this.tokenizer.position()) 58 | } 59 | 60 | precheckMissedSemicolon(tokens) { 61 | let colon = this.colon(tokens) 62 | if (colon === false) return 63 | 64 | let nextStart, prevEnd 65 | for (nextStart = colon - 1; nextStart >= 0; nextStart--) { 66 | if (tokens[nextStart][0] === 'word') break 67 | } 68 | if (nextStart === 0 || nextStart < 0) return 69 | 70 | for (prevEnd = nextStart - 1; prevEnd >= 0; prevEnd--) { 71 | if (tokens[prevEnd][0] !== 'space') { 72 | prevEnd += 1 73 | break 74 | } 75 | } 76 | 77 | let other = tokens.slice(nextStart) 78 | let spaces = tokens.slice(prevEnd, nextStart) 79 | tokens.splice(prevEnd, tokens.length - prevEnd) 80 | this.spaces = spaces.map(i => i[1]).join('') 81 | 82 | this.decl(other) 83 | } 84 | 85 | unclosedBracket() {} 86 | 87 | unexpectedClose() { 88 | this.current.raws.after += '}' 89 | } 90 | 91 | unknownWord(tokens) { 92 | this.spaces += tokens.map(i => i[1]).join('') 93 | } 94 | 95 | unnamedAtrule(node) { 96 | node.name = '' 97 | } 98 | } 99 | 100 | module.exports = SafeParser 101 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "postcss-safe-parser", 3 | "version": "7.0.1", 4 | "description": "Fault-tolerant CSS parser for PostCSS", 5 | "keywords": [ 6 | "css", 7 | "postcss", 8 | "postcss-syntax", 9 | "parser", 10 | "fault tolerant" 11 | ], 12 | "author": "Andrey Sitnik ", 13 | "license": "MIT", 14 | "repository": "postcss/postcss-safe-parser", 15 | "scripts": { 16 | "unit": "node --test test/parse.test.js", 17 | "test:unit": "pnpm unit", 18 | "test:lint": "eslint .", 19 | "test:integration": "node test/integration.js", 20 | "test": "pnpm run /^test:/" 21 | }, 22 | "engines": { 23 | "node": ">=18.0" 24 | }, 25 | "main": "lib/safe-parse", 26 | "funding": [ 27 | { 28 | "type": "opencollective", 29 | "url": "https://opencollective.com/postcss/" 30 | }, 31 | { 32 | "type": "tidelift", 33 | "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" 34 | }, 35 | { 36 | "type": "github", 37 | "url": "https://github.com/sponsors/ai" 38 | } 39 | ], 40 | "peerDependencies": { 41 | "postcss": "^8.4.31" 42 | }, 43 | "devDependencies": { 44 | "@logux/eslint-config": "^53.4.0", 45 | "clean-publish": "^5.0.0", 46 | "eslint": "^9.11.1", 47 | "postcss": "^8.4.47", 48 | "postcss-parser-tests": "^8.8.0" 49 | }, 50 | "prettier": { 51 | "arrowParens": "avoid", 52 | "jsxSingleQuote": false, 53 | "quoteProps": "consistent", 54 | "semi": false, 55 | "singleQuote": true, 56 | "trailingComma": "none" 57 | }, 58 | "clean-publish": { 59 | "cleanDocs": true 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@logux/eslint-config': 12 | specifier: ^53.4.0 13 | version: 53.4.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2) 14 | clean-publish: 15 | specifier: ^5.0.0 16 | version: 5.0.0 17 | eslint: 18 | specifier: ^9.11.1 19 | version: 9.11.1 20 | postcss: 21 | specifier: ^8.4.47 22 | version: 8.4.47 23 | postcss-parser-tests: 24 | specifier: ^8.8.0 25 | version: 8.8.0 26 | 27 | packages: 28 | 29 | '@eslint-community/eslint-utils@4.4.0': 30 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 31 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 32 | peerDependencies: 33 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 34 | 35 | '@eslint-community/regexpp@4.11.1': 36 | resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} 37 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 38 | 39 | '@eslint/config-array@0.18.0': 40 | resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} 41 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 42 | 43 | '@eslint/core@0.6.0': 44 | resolution: {integrity: sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==} 45 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 46 | 47 | '@eslint/eslintrc@3.1.0': 48 | resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} 49 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 50 | 51 | '@eslint/js@9.11.1': 52 | resolution: {integrity: sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==} 53 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 54 | 55 | '@eslint/object-schema@2.1.4': 56 | resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} 57 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 58 | 59 | '@eslint/plugin-kit@0.2.3': 60 | resolution: {integrity: sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==} 61 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 62 | 63 | '@humanwhocodes/module-importer@1.0.1': 64 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 65 | engines: {node: '>=12.22'} 66 | 67 | '@humanwhocodes/retry@0.3.0': 68 | resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} 69 | engines: {node: '>=18.18'} 70 | 71 | '@logux/eslint-config@53.4.0': 72 | resolution: {integrity: sha512-eu3uEhWSar51TM/1cZL4lm/WMiOMtefBVPZPZG3kIfE+TCReg2eCkkafLe7gj34IpUNh5Qt268tWCUNFV5DdYA==} 73 | engines: {node: '>=18.0.0'} 74 | peerDependencies: 75 | eslint: ^8.57.0 || ^9.0.0 76 | eslint-plugin-svelte: ^2.35.1 77 | svelte: ^4.2.12 78 | peerDependenciesMeta: 79 | eslint-plugin-svelte: 80 | optional: true 81 | svelte: 82 | optional: true 83 | 84 | '@nodelib/fs.scandir@2.1.5': 85 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 86 | engines: {node: '>= 8'} 87 | 88 | '@nodelib/fs.stat@2.0.5': 89 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 90 | engines: {node: '>= 8'} 91 | 92 | '@nodelib/fs.walk@1.2.8': 93 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 94 | engines: {node: '>= 8'} 95 | 96 | '@rtsao/scc@1.1.0': 97 | resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} 98 | 99 | '@types/estree@1.0.6': 100 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 101 | 102 | '@types/json-schema@7.0.15': 103 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 104 | 105 | '@types/json5@0.0.29': 106 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 107 | 108 | '@typescript-eslint/eslint-plugin@8.8.0': 109 | resolution: {integrity: sha512-wORFWjU30B2WJ/aXBfOm1LX9v9nyt9D3jsSOxC3cCaTQGCW5k4jNpmjFv3U7p/7s4yvdjHzwtv2Sd2dOyhjS0A==} 110 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 111 | peerDependencies: 112 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 113 | eslint: ^8.57.0 || ^9.0.0 114 | typescript: '*' 115 | peerDependenciesMeta: 116 | typescript: 117 | optional: true 118 | 119 | '@typescript-eslint/parser@8.8.0': 120 | resolution: {integrity: sha512-uEFUsgR+tl8GmzmLjRqz+VrDv4eoaMqMXW7ruXfgThaAShO9JTciKpEsB+TvnfFfbg5IpujgMXVV36gOJRLtZg==} 121 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 122 | peerDependencies: 123 | eslint: ^8.57.0 || ^9.0.0 124 | typescript: '*' 125 | peerDependenciesMeta: 126 | typescript: 127 | optional: true 128 | 129 | '@typescript-eslint/scope-manager@8.8.0': 130 | resolution: {integrity: sha512-EL8eaGC6gx3jDd8GwEFEV091210U97J0jeEHrAYvIYosmEGet4wJ+g0SYmLu+oRiAwbSA5AVrt6DxLHfdd+bUg==} 131 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 132 | 133 | '@typescript-eslint/type-utils@8.8.0': 134 | resolution: {integrity: sha512-IKwJSS7bCqyCeG4NVGxnOP6lLT9Okc3Zj8hLO96bpMkJab+10HIfJbMouLrlpyOr3yrQ1cA413YPFiGd1mW9/Q==} 135 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 136 | peerDependencies: 137 | typescript: '*' 138 | peerDependenciesMeta: 139 | typescript: 140 | optional: true 141 | 142 | '@typescript-eslint/types@8.8.0': 143 | resolution: {integrity: sha512-QJwc50hRCgBd/k12sTykOJbESe1RrzmX6COk8Y525C9l7oweZ+1lw9JiU56im7Amm8swlz00DRIlxMYLizr2Vw==} 144 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 145 | 146 | '@typescript-eslint/typescript-estree@8.8.0': 147 | resolution: {integrity: sha512-ZaMJwc/0ckLz5DaAZ+pNLmHv8AMVGtfWxZe/x2JVEkD5LnmhWiQMMcYT7IY7gkdJuzJ9P14fRy28lUrlDSWYdw==} 148 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 149 | peerDependencies: 150 | typescript: '*' 151 | peerDependenciesMeta: 152 | typescript: 153 | optional: true 154 | 155 | '@typescript-eslint/utils@8.8.0': 156 | resolution: {integrity: sha512-QE2MgfOTem00qrlPgyByaCHay9yb1+9BjnMFnSFkUKQfu7adBXDTnCAivURnuPPAG/qiB+kzKkZKmKfaMT0zVg==} 157 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 158 | peerDependencies: 159 | eslint: ^8.57.0 || ^9.0.0 160 | 161 | '@typescript-eslint/visitor-keys@8.8.0': 162 | resolution: {integrity: sha512-8mq51Lx6Hpmd7HnA2fcHQo3YgfX1qbccxQOgZcb4tvasu//zXRaA1j5ZRFeCw/VRAdFi4mRM9DnZw0Nu0Q2d1g==} 163 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 164 | 165 | acorn-jsx@5.3.2: 166 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 167 | peerDependencies: 168 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 169 | 170 | acorn@8.12.1: 171 | resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} 172 | engines: {node: '>=0.4.0'} 173 | hasBin: true 174 | 175 | ajv@6.12.6: 176 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 177 | 178 | ansi-regex@5.0.1: 179 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 180 | engines: {node: '>=8'} 181 | 182 | ansi-styles@4.3.0: 183 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 184 | engines: {node: '>=8'} 185 | 186 | argparse@2.0.1: 187 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 188 | 189 | array-buffer-byte-length@1.0.1: 190 | resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} 191 | engines: {node: '>= 0.4'} 192 | 193 | array-includes@3.1.8: 194 | resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} 195 | engines: {node: '>= 0.4'} 196 | 197 | array.prototype.findlastindex@1.2.5: 198 | resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} 199 | engines: {node: '>= 0.4'} 200 | 201 | array.prototype.flat@1.3.2: 202 | resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} 203 | engines: {node: '>= 0.4'} 204 | 205 | array.prototype.flatmap@1.3.2: 206 | resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} 207 | engines: {node: '>= 0.4'} 208 | 209 | arraybuffer.prototype.slice@1.0.3: 210 | resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} 211 | engines: {node: '>= 0.4'} 212 | 213 | available-typed-arrays@1.0.7: 214 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 215 | engines: {node: '>= 0.4'} 216 | 217 | balanced-match@1.0.2: 218 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 219 | 220 | brace-expansion@1.1.11: 221 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 222 | 223 | brace-expansion@2.0.1: 224 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 225 | 226 | braces@3.0.3: 227 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 228 | engines: {node: '>=8'} 229 | 230 | call-bind@1.0.7: 231 | resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} 232 | engines: {node: '>= 0.4'} 233 | 234 | callsites@3.1.0: 235 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 236 | engines: {node: '>=6'} 237 | 238 | chalk@4.1.2: 239 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 240 | engines: {node: '>=10'} 241 | 242 | clean-publish@5.0.0: 243 | resolution: {integrity: sha512-1qjtqP3piZL4t8SqGojOyA12bg8AtbFPIQstNvxmss1fhwfma3CqMJ/Y/kbRvAllLX2/c4ZKjcCCKDqEtpcymA==} 244 | engines: {node: '>= 18.0.0'} 245 | hasBin: true 246 | 247 | color-convert@2.0.1: 248 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 249 | engines: {node: '>=7.0.0'} 250 | 251 | color-name@1.1.4: 252 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 253 | 254 | concat-map@0.0.1: 255 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 256 | 257 | cross-spawn@7.0.6: 258 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 259 | engines: {node: '>= 8'} 260 | 261 | data-view-buffer@1.0.1: 262 | resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} 263 | engines: {node: '>= 0.4'} 264 | 265 | data-view-byte-length@1.0.1: 266 | resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} 267 | engines: {node: '>= 0.4'} 268 | 269 | data-view-byte-offset@1.0.0: 270 | resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} 271 | engines: {node: '>= 0.4'} 272 | 273 | debug@3.2.7: 274 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 275 | peerDependencies: 276 | supports-color: '*' 277 | peerDependenciesMeta: 278 | supports-color: 279 | optional: true 280 | 281 | debug@4.3.7: 282 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 283 | engines: {node: '>=6.0'} 284 | peerDependencies: 285 | supports-color: '*' 286 | peerDependenciesMeta: 287 | supports-color: 288 | optional: true 289 | 290 | deep-is@0.1.4: 291 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 292 | 293 | define-data-property@1.1.4: 294 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 295 | engines: {node: '>= 0.4'} 296 | 297 | define-properties@1.2.1: 298 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 299 | engines: {node: '>= 0.4'} 300 | 301 | doctrine@2.1.0: 302 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 303 | engines: {node: '>=0.10.0'} 304 | 305 | enhanced-resolve@5.17.1: 306 | resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} 307 | engines: {node: '>=10.13.0'} 308 | 309 | es-abstract@1.23.3: 310 | resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} 311 | engines: {node: '>= 0.4'} 312 | 313 | es-define-property@1.0.0: 314 | resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} 315 | engines: {node: '>= 0.4'} 316 | 317 | es-errors@1.3.0: 318 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 319 | engines: {node: '>= 0.4'} 320 | 321 | es-object-atoms@1.0.0: 322 | resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} 323 | engines: {node: '>= 0.4'} 324 | 325 | es-set-tostringtag@2.0.3: 326 | resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} 327 | engines: {node: '>= 0.4'} 328 | 329 | es-shim-unscopables@1.0.2: 330 | resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} 331 | 332 | es-to-primitive@1.2.1: 333 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 334 | engines: {node: '>= 0.4'} 335 | 336 | escape-string-regexp@4.0.0: 337 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 338 | engines: {node: '>=10'} 339 | 340 | eslint-compat-utils@0.5.1: 341 | resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} 342 | engines: {node: '>=12'} 343 | peerDependencies: 344 | eslint: '>=6.0.0' 345 | 346 | eslint-config-standard@17.1.0: 347 | resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} 348 | engines: {node: '>=12.0.0'} 349 | peerDependencies: 350 | eslint: ^8.0.1 351 | eslint-plugin-import: ^2.25.2 352 | eslint-plugin-n: '^15.0.0 || ^16.0.0 ' 353 | eslint-plugin-promise: ^6.0.0 354 | 355 | eslint-import-resolver-node@0.3.9: 356 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 357 | 358 | eslint-module-utils@2.12.0: 359 | resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} 360 | engines: {node: '>=4'} 361 | peerDependencies: 362 | '@typescript-eslint/parser': '*' 363 | eslint: '*' 364 | eslint-import-resolver-node: '*' 365 | eslint-import-resolver-typescript: '*' 366 | eslint-import-resolver-webpack: '*' 367 | peerDependenciesMeta: 368 | '@typescript-eslint/parser': 369 | optional: true 370 | eslint: 371 | optional: true 372 | eslint-import-resolver-node: 373 | optional: true 374 | eslint-import-resolver-typescript: 375 | optional: true 376 | eslint-import-resolver-webpack: 377 | optional: true 378 | 379 | eslint-plugin-es-x@7.8.0: 380 | resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} 381 | engines: {node: ^14.18.0 || >=16.0.0} 382 | peerDependencies: 383 | eslint: '>=8' 384 | 385 | eslint-plugin-import@2.31.0: 386 | resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} 387 | engines: {node: '>=4'} 388 | peerDependencies: 389 | '@typescript-eslint/parser': '*' 390 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 391 | peerDependenciesMeta: 392 | '@typescript-eslint/parser': 393 | optional: true 394 | 395 | eslint-plugin-n@17.10.3: 396 | resolution: {integrity: sha512-ySZBfKe49nQZWR1yFaA0v/GsH6Fgp8ah6XV0WDz6CN8WO0ek4McMzb7A2xnf4DCYV43frjCygvb9f/wx7UUxRw==} 397 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 398 | peerDependencies: 399 | eslint: '>=8.23.0' 400 | 401 | eslint-plugin-perfectionist@3.8.0: 402 | resolution: {integrity: sha512-BYJWbQVOjvIGK9V1xUfn790HuvkePjxti8epOi1H6sdzo0N4RehBmQ8coHPbgA/f12BUG1NIoDtQhI9mUm+o2A==} 403 | engines: {node: ^18.0.0 || >=20.0.0} 404 | peerDependencies: 405 | astro-eslint-parser: ^1.0.2 406 | eslint: '>=8.0.0' 407 | svelte: '>=3.0.0' 408 | svelte-eslint-parser: ^0.41.1 409 | vue-eslint-parser: '>=9.0.0' 410 | peerDependenciesMeta: 411 | astro-eslint-parser: 412 | optional: true 413 | svelte: 414 | optional: true 415 | svelte-eslint-parser: 416 | optional: true 417 | vue-eslint-parser: 418 | optional: true 419 | 420 | eslint-plugin-prefer-let@4.0.0: 421 | resolution: {integrity: sha512-X4ep5PMO1320HKaNC9DM5+p6XvOhwv+RcqGjhv3aiw9iAtHhiFtdIUB5l0Zya0iM22ys2BGKzrNI9Xpw/ZHooQ==} 422 | engines: {node: '>=0.10.0'} 423 | 424 | eslint-plugin-promise@7.1.0: 425 | resolution: {integrity: sha512-8trNmPxdAy3W620WKDpaS65NlM5yAumod6XeC4LOb+jxlkG4IVcp68c6dXY2ev+uT4U1PtG57YDV6EGAXN0GbQ==} 426 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 427 | peerDependencies: 428 | eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 429 | 430 | eslint-scope@8.1.0: 431 | resolution: {integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==} 432 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 433 | 434 | eslint-visitor-keys@3.4.3: 435 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 436 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 437 | 438 | eslint-visitor-keys@4.1.0: 439 | resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} 440 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 441 | 442 | eslint@9.11.1: 443 | resolution: {integrity: sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==} 444 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 445 | hasBin: true 446 | peerDependencies: 447 | jiti: '*' 448 | peerDependenciesMeta: 449 | jiti: 450 | optional: true 451 | 452 | espree@10.2.0: 453 | resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==} 454 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 455 | 456 | esquery@1.6.0: 457 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 458 | engines: {node: '>=0.10'} 459 | 460 | esrecurse@4.3.0: 461 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 462 | engines: {node: '>=4.0'} 463 | 464 | estraverse@5.3.0: 465 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 466 | engines: {node: '>=4.0'} 467 | 468 | esutils@2.0.3: 469 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 470 | engines: {node: '>=0.10.0'} 471 | 472 | fast-deep-equal@3.1.3: 473 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 474 | 475 | fast-glob@3.3.2: 476 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 477 | engines: {node: '>=8.6.0'} 478 | 479 | fast-json-stable-stringify@2.1.0: 480 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 481 | 482 | fast-levenshtein@2.0.6: 483 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 484 | 485 | fastq@1.17.1: 486 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 487 | 488 | file-entry-cache@8.0.0: 489 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 490 | engines: {node: '>=16.0.0'} 491 | 492 | fill-range@7.1.1: 493 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 494 | engines: {node: '>=8'} 495 | 496 | find-up@5.0.0: 497 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 498 | engines: {node: '>=10'} 499 | 500 | flat-cache@4.0.1: 501 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 502 | engines: {node: '>=16'} 503 | 504 | flatted@3.3.1: 505 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 506 | 507 | for-each@0.3.3: 508 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 509 | 510 | function-bind@1.1.2: 511 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 512 | 513 | function.prototype.name@1.1.6: 514 | resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} 515 | engines: {node: '>= 0.4'} 516 | 517 | functions-have-names@1.2.3: 518 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 519 | 520 | get-intrinsic@1.2.4: 521 | resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} 522 | engines: {node: '>= 0.4'} 523 | 524 | get-symbol-description@1.0.2: 525 | resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} 526 | engines: {node: '>= 0.4'} 527 | 528 | get-tsconfig@4.8.1: 529 | resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} 530 | 531 | glob-parent@5.1.2: 532 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 533 | engines: {node: '>= 6'} 534 | 535 | glob-parent@6.0.2: 536 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 537 | engines: {node: '>=10.13.0'} 538 | 539 | globals@14.0.0: 540 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 541 | engines: {node: '>=18'} 542 | 543 | globals@15.10.0: 544 | resolution: {integrity: sha512-tqFIbz83w4Y5TCbtgjZjApohbuh7K9BxGYFm7ifwDR240tvdb7P9x+/9VvUKlmkPoiknoJtanI8UOrqxS3a7lQ==} 545 | engines: {node: '>=18'} 546 | 547 | globalthis@1.0.4: 548 | resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 549 | engines: {node: '>= 0.4'} 550 | 551 | gopd@1.0.1: 552 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 553 | 554 | graceful-fs@4.2.11: 555 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 556 | 557 | graphemer@1.4.0: 558 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 559 | 560 | has-bigints@1.0.2: 561 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 562 | 563 | has-flag@4.0.0: 564 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 565 | engines: {node: '>=8'} 566 | 567 | has-property-descriptors@1.0.2: 568 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 569 | 570 | has-proto@1.0.3: 571 | resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} 572 | engines: {node: '>= 0.4'} 573 | 574 | has-symbols@1.0.3: 575 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 576 | engines: {node: '>= 0.4'} 577 | 578 | has-tostringtag@1.0.2: 579 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 580 | engines: {node: '>= 0.4'} 581 | 582 | hasown@2.0.2: 583 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 584 | engines: {node: '>= 0.4'} 585 | 586 | ignore@5.3.2: 587 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 588 | engines: {node: '>= 4'} 589 | 590 | import-fresh@3.3.0: 591 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 592 | engines: {node: '>=6'} 593 | 594 | imurmurhash@0.1.4: 595 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 596 | engines: {node: '>=0.8.19'} 597 | 598 | internal-slot@1.0.7: 599 | resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} 600 | engines: {node: '>= 0.4'} 601 | 602 | is-array-buffer@3.0.4: 603 | resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} 604 | engines: {node: '>= 0.4'} 605 | 606 | is-bigint@1.0.4: 607 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 608 | 609 | is-boolean-object@1.1.2: 610 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 611 | engines: {node: '>= 0.4'} 612 | 613 | is-callable@1.2.7: 614 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 615 | engines: {node: '>= 0.4'} 616 | 617 | is-core-module@2.15.1: 618 | resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} 619 | engines: {node: '>= 0.4'} 620 | 621 | is-data-view@1.0.1: 622 | resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} 623 | engines: {node: '>= 0.4'} 624 | 625 | is-date-object@1.0.5: 626 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 627 | engines: {node: '>= 0.4'} 628 | 629 | is-extglob@2.1.1: 630 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 631 | engines: {node: '>=0.10.0'} 632 | 633 | is-glob@4.0.3: 634 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 635 | engines: {node: '>=0.10.0'} 636 | 637 | is-negative-zero@2.0.3: 638 | resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} 639 | engines: {node: '>= 0.4'} 640 | 641 | is-number-object@1.0.7: 642 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 643 | engines: {node: '>= 0.4'} 644 | 645 | is-number@7.0.0: 646 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 647 | engines: {node: '>=0.12.0'} 648 | 649 | is-path-inside@3.0.3: 650 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 651 | engines: {node: '>=8'} 652 | 653 | is-regex@1.1.4: 654 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 655 | engines: {node: '>= 0.4'} 656 | 657 | is-shared-array-buffer@1.0.3: 658 | resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} 659 | engines: {node: '>= 0.4'} 660 | 661 | is-string@1.0.7: 662 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 663 | engines: {node: '>= 0.4'} 664 | 665 | is-symbol@1.0.4: 666 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 667 | engines: {node: '>= 0.4'} 668 | 669 | is-typed-array@1.1.13: 670 | resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} 671 | engines: {node: '>= 0.4'} 672 | 673 | is-weakref@1.0.2: 674 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 675 | 676 | isarray@2.0.5: 677 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 678 | 679 | isexe@2.0.0: 680 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 681 | 682 | js-yaml@4.1.0: 683 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 684 | hasBin: true 685 | 686 | json-buffer@3.0.1: 687 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 688 | 689 | json-schema-traverse@0.4.1: 690 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 691 | 692 | json-stable-stringify-without-jsonify@1.0.1: 693 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 694 | 695 | json5@1.0.2: 696 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 697 | hasBin: true 698 | 699 | keyv@4.5.4: 700 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 701 | 702 | levn@0.4.1: 703 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 704 | engines: {node: '>= 0.8.0'} 705 | 706 | lilconfig@3.1.2: 707 | resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} 708 | engines: {node: '>=14'} 709 | 710 | locate-path@6.0.0: 711 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 712 | engines: {node: '>=10'} 713 | 714 | lodash.merge@4.6.2: 715 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 716 | 717 | merge2@1.4.1: 718 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 719 | engines: {node: '>= 8'} 720 | 721 | micromatch@4.0.8: 722 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 723 | engines: {node: '>=8.6'} 724 | 725 | minimatch@3.1.2: 726 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 727 | 728 | minimatch@9.0.5: 729 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 730 | engines: {node: '>=16 || 14 >=14.17'} 731 | 732 | minimist@1.2.8: 733 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 734 | 735 | ms@2.1.3: 736 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 737 | 738 | nanoid@3.3.8: 739 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 740 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 741 | hasBin: true 742 | 743 | natural-compare-lite@1.4.0: 744 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 745 | 746 | natural-compare@1.4.0: 747 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 748 | 749 | object-inspect@1.13.2: 750 | resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} 751 | engines: {node: '>= 0.4'} 752 | 753 | object-keys@1.1.1: 754 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 755 | engines: {node: '>= 0.4'} 756 | 757 | object.assign@4.1.5: 758 | resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} 759 | engines: {node: '>= 0.4'} 760 | 761 | object.fromentries@2.0.8: 762 | resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} 763 | engines: {node: '>= 0.4'} 764 | 765 | object.groupby@1.0.3: 766 | resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} 767 | engines: {node: '>= 0.4'} 768 | 769 | object.values@1.2.0: 770 | resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} 771 | engines: {node: '>= 0.4'} 772 | 773 | optionator@0.9.4: 774 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 775 | engines: {node: '>= 0.8.0'} 776 | 777 | p-limit@3.1.0: 778 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 779 | engines: {node: '>=10'} 780 | 781 | p-locate@5.0.0: 782 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 783 | engines: {node: '>=10'} 784 | 785 | parent-module@1.0.1: 786 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 787 | engines: {node: '>=6'} 788 | 789 | path-exists@4.0.0: 790 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 791 | engines: {node: '>=8'} 792 | 793 | path-key@3.1.1: 794 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 795 | engines: {node: '>=8'} 796 | 797 | path-parse@1.0.7: 798 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 799 | 800 | picocolors@1.1.0: 801 | resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} 802 | 803 | picomatch@2.3.1: 804 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 805 | engines: {node: '>=8.6'} 806 | 807 | possible-typed-array-names@1.0.0: 808 | resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} 809 | engines: {node: '>= 0.4'} 810 | 811 | postcss-parser-tests@8.8.0: 812 | resolution: {integrity: sha512-vAyVrBzp7YmfpmjCG3RGhilE9+oydj6oTZYWMBwkp/3FVOdUURerTRD0w/NVegOreAj51tCPqgCwbb4AW5f5SA==} 813 | 814 | postcss@8.4.47: 815 | resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} 816 | engines: {node: ^10 || ^12 || >=14} 817 | 818 | prelude-ls@1.2.1: 819 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 820 | engines: {node: '>= 0.8.0'} 821 | 822 | punycode@2.3.1: 823 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 824 | engines: {node: '>=6'} 825 | 826 | queue-microtask@1.2.3: 827 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 828 | 829 | regexp.prototype.flags@1.5.3: 830 | resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} 831 | engines: {node: '>= 0.4'} 832 | 833 | requireindex@1.2.0: 834 | resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} 835 | engines: {node: '>=0.10.5'} 836 | 837 | resolve-from@4.0.0: 838 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 839 | engines: {node: '>=4'} 840 | 841 | resolve-pkg-maps@1.0.0: 842 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 843 | 844 | resolve@1.22.8: 845 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 846 | hasBin: true 847 | 848 | reusify@1.0.4: 849 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 850 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 851 | 852 | run-parallel@1.2.0: 853 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 854 | 855 | safe-array-concat@1.1.2: 856 | resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} 857 | engines: {node: '>=0.4'} 858 | 859 | safe-regex-test@1.0.3: 860 | resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} 861 | engines: {node: '>= 0.4'} 862 | 863 | semver@6.3.1: 864 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 865 | hasBin: true 866 | 867 | semver@7.6.3: 868 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 869 | engines: {node: '>=10'} 870 | hasBin: true 871 | 872 | set-function-length@1.2.2: 873 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 874 | engines: {node: '>= 0.4'} 875 | 876 | set-function-name@2.0.2: 877 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 878 | engines: {node: '>= 0.4'} 879 | 880 | shebang-command@2.0.0: 881 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 882 | engines: {node: '>=8'} 883 | 884 | shebang-regex@3.0.0: 885 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 886 | engines: {node: '>=8'} 887 | 888 | side-channel@1.0.6: 889 | resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} 890 | engines: {node: '>= 0.4'} 891 | 892 | source-map-js@1.2.1: 893 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 894 | engines: {node: '>=0.10.0'} 895 | 896 | string.prototype.trim@1.2.9: 897 | resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} 898 | engines: {node: '>= 0.4'} 899 | 900 | string.prototype.trimend@1.0.8: 901 | resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} 902 | 903 | string.prototype.trimstart@1.0.8: 904 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} 905 | engines: {node: '>= 0.4'} 906 | 907 | strip-ansi@6.0.1: 908 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 909 | engines: {node: '>=8'} 910 | 911 | strip-bom@3.0.0: 912 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 913 | engines: {node: '>=4'} 914 | 915 | strip-json-comments@3.1.1: 916 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 917 | engines: {node: '>=8'} 918 | 919 | supports-color@7.2.0: 920 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 921 | engines: {node: '>=8'} 922 | 923 | supports-preserve-symlinks-flag@1.0.0: 924 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 925 | engines: {node: '>= 0.4'} 926 | 927 | tapable@2.2.1: 928 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 929 | engines: {node: '>=6'} 930 | 931 | text-table@0.2.0: 932 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 933 | 934 | to-regex-range@5.0.1: 935 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 936 | engines: {node: '>=8.0'} 937 | 938 | ts-api-utils@1.3.0: 939 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} 940 | engines: {node: '>=16'} 941 | peerDependencies: 942 | typescript: '>=4.2.0' 943 | 944 | tsconfig-paths@3.15.0: 945 | resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} 946 | 947 | type-check@0.4.0: 948 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 949 | engines: {node: '>= 0.8.0'} 950 | 951 | typed-array-buffer@1.0.2: 952 | resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} 953 | engines: {node: '>= 0.4'} 954 | 955 | typed-array-byte-length@1.0.1: 956 | resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} 957 | engines: {node: '>= 0.4'} 958 | 959 | typed-array-byte-offset@1.0.2: 960 | resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} 961 | engines: {node: '>= 0.4'} 962 | 963 | typed-array-length@1.0.6: 964 | resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} 965 | engines: {node: '>= 0.4'} 966 | 967 | typescript-eslint@8.8.0: 968 | resolution: {integrity: sha512-BjIT/VwJ8+0rVO01ZQ2ZVnjE1svFBiRczcpr1t1Yxt7sT25VSbPfrJtDsQ8uQTy2pilX5nI9gwxhUyLULNentw==} 969 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 970 | peerDependencies: 971 | typescript: '*' 972 | peerDependenciesMeta: 973 | typescript: 974 | optional: true 975 | 976 | typescript@5.6.2: 977 | resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} 978 | engines: {node: '>=14.17'} 979 | hasBin: true 980 | 981 | unbox-primitive@1.0.2: 982 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 983 | 984 | uri-js@4.4.1: 985 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 986 | 987 | which-boxed-primitive@1.0.2: 988 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 989 | 990 | which-typed-array@1.1.15: 991 | resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} 992 | engines: {node: '>= 0.4'} 993 | 994 | which@2.0.2: 995 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 996 | engines: {node: '>= 8'} 997 | hasBin: true 998 | 999 | word-wrap@1.2.5: 1000 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1001 | engines: {node: '>=0.10.0'} 1002 | 1003 | yocto-queue@0.1.0: 1004 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1005 | engines: {node: '>=10'} 1006 | 1007 | snapshots: 1008 | 1009 | '@eslint-community/eslint-utils@4.4.0(eslint@9.11.1)': 1010 | dependencies: 1011 | eslint: 9.11.1 1012 | eslint-visitor-keys: 3.4.3 1013 | 1014 | '@eslint-community/regexpp@4.11.1': {} 1015 | 1016 | '@eslint/config-array@0.18.0': 1017 | dependencies: 1018 | '@eslint/object-schema': 2.1.4 1019 | debug: 4.3.7 1020 | minimatch: 3.1.2 1021 | transitivePeerDependencies: 1022 | - supports-color 1023 | 1024 | '@eslint/core@0.6.0': {} 1025 | 1026 | '@eslint/eslintrc@3.1.0': 1027 | dependencies: 1028 | ajv: 6.12.6 1029 | debug: 4.3.7 1030 | espree: 10.2.0 1031 | globals: 14.0.0 1032 | ignore: 5.3.2 1033 | import-fresh: 3.3.0 1034 | js-yaml: 4.1.0 1035 | minimatch: 3.1.2 1036 | strip-json-comments: 3.1.1 1037 | transitivePeerDependencies: 1038 | - supports-color 1039 | 1040 | '@eslint/js@9.11.1': {} 1041 | 1042 | '@eslint/object-schema@2.1.4': {} 1043 | 1044 | '@eslint/plugin-kit@0.2.3': 1045 | dependencies: 1046 | levn: 0.4.1 1047 | 1048 | '@humanwhocodes/module-importer@1.0.1': {} 1049 | 1050 | '@humanwhocodes/retry@0.3.0': {} 1051 | 1052 | '@logux/eslint-config@53.4.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2)': 1053 | dependencies: 1054 | '@eslint/eslintrc': 3.1.0 1055 | eslint: 9.11.1 1056 | eslint-config-standard: 17.1.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1))(eslint-plugin-n@17.10.3(eslint@9.11.1))(eslint-plugin-promise@7.1.0(eslint@9.11.1))(eslint@9.11.1) 1057 | eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1) 1058 | eslint-plugin-n: 17.10.3(eslint@9.11.1) 1059 | eslint-plugin-perfectionist: 3.8.0(eslint@9.11.1)(typescript@5.6.2) 1060 | eslint-plugin-prefer-let: 4.0.0 1061 | eslint-plugin-promise: 7.1.0(eslint@9.11.1) 1062 | typescript-eslint: 8.8.0(eslint@9.11.1)(typescript@5.6.2) 1063 | transitivePeerDependencies: 1064 | - '@typescript-eslint/parser' 1065 | - astro-eslint-parser 1066 | - eslint-import-resolver-typescript 1067 | - eslint-import-resolver-webpack 1068 | - supports-color 1069 | - svelte-eslint-parser 1070 | - typescript 1071 | - vue-eslint-parser 1072 | 1073 | '@nodelib/fs.scandir@2.1.5': 1074 | dependencies: 1075 | '@nodelib/fs.stat': 2.0.5 1076 | run-parallel: 1.2.0 1077 | 1078 | '@nodelib/fs.stat@2.0.5': {} 1079 | 1080 | '@nodelib/fs.walk@1.2.8': 1081 | dependencies: 1082 | '@nodelib/fs.scandir': 2.1.5 1083 | fastq: 1.17.1 1084 | 1085 | '@rtsao/scc@1.1.0': {} 1086 | 1087 | '@types/estree@1.0.6': {} 1088 | 1089 | '@types/json-schema@7.0.15': {} 1090 | 1091 | '@types/json5@0.0.29': {} 1092 | 1093 | '@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2)': 1094 | dependencies: 1095 | '@eslint-community/regexpp': 4.11.1 1096 | '@typescript-eslint/parser': 8.8.0(eslint@9.11.1)(typescript@5.6.2) 1097 | '@typescript-eslint/scope-manager': 8.8.0 1098 | '@typescript-eslint/type-utils': 8.8.0(eslint@9.11.1)(typescript@5.6.2) 1099 | '@typescript-eslint/utils': 8.8.0(eslint@9.11.1)(typescript@5.6.2) 1100 | '@typescript-eslint/visitor-keys': 8.8.0 1101 | eslint: 9.11.1 1102 | graphemer: 1.4.0 1103 | ignore: 5.3.2 1104 | natural-compare: 1.4.0 1105 | ts-api-utils: 1.3.0(typescript@5.6.2) 1106 | optionalDependencies: 1107 | typescript: 5.6.2 1108 | transitivePeerDependencies: 1109 | - supports-color 1110 | 1111 | '@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2)': 1112 | dependencies: 1113 | '@typescript-eslint/scope-manager': 8.8.0 1114 | '@typescript-eslint/types': 8.8.0 1115 | '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) 1116 | '@typescript-eslint/visitor-keys': 8.8.0 1117 | debug: 4.3.7 1118 | eslint: 9.11.1 1119 | optionalDependencies: 1120 | typescript: 5.6.2 1121 | transitivePeerDependencies: 1122 | - supports-color 1123 | 1124 | '@typescript-eslint/scope-manager@8.8.0': 1125 | dependencies: 1126 | '@typescript-eslint/types': 8.8.0 1127 | '@typescript-eslint/visitor-keys': 8.8.0 1128 | 1129 | '@typescript-eslint/type-utils@8.8.0(eslint@9.11.1)(typescript@5.6.2)': 1130 | dependencies: 1131 | '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) 1132 | '@typescript-eslint/utils': 8.8.0(eslint@9.11.1)(typescript@5.6.2) 1133 | debug: 4.3.7 1134 | ts-api-utils: 1.3.0(typescript@5.6.2) 1135 | optionalDependencies: 1136 | typescript: 5.6.2 1137 | transitivePeerDependencies: 1138 | - eslint 1139 | - supports-color 1140 | 1141 | '@typescript-eslint/types@8.8.0': {} 1142 | 1143 | '@typescript-eslint/typescript-estree@8.8.0(typescript@5.6.2)': 1144 | dependencies: 1145 | '@typescript-eslint/types': 8.8.0 1146 | '@typescript-eslint/visitor-keys': 8.8.0 1147 | debug: 4.3.7 1148 | fast-glob: 3.3.2 1149 | is-glob: 4.0.3 1150 | minimatch: 9.0.5 1151 | semver: 7.6.3 1152 | ts-api-utils: 1.3.0(typescript@5.6.2) 1153 | optionalDependencies: 1154 | typescript: 5.6.2 1155 | transitivePeerDependencies: 1156 | - supports-color 1157 | 1158 | '@typescript-eslint/utils@8.8.0(eslint@9.11.1)(typescript@5.6.2)': 1159 | dependencies: 1160 | '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1) 1161 | '@typescript-eslint/scope-manager': 8.8.0 1162 | '@typescript-eslint/types': 8.8.0 1163 | '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) 1164 | eslint: 9.11.1 1165 | transitivePeerDependencies: 1166 | - supports-color 1167 | - typescript 1168 | 1169 | '@typescript-eslint/visitor-keys@8.8.0': 1170 | dependencies: 1171 | '@typescript-eslint/types': 8.8.0 1172 | eslint-visitor-keys: 3.4.3 1173 | 1174 | acorn-jsx@5.3.2(acorn@8.12.1): 1175 | dependencies: 1176 | acorn: 8.12.1 1177 | 1178 | acorn@8.12.1: {} 1179 | 1180 | ajv@6.12.6: 1181 | dependencies: 1182 | fast-deep-equal: 3.1.3 1183 | fast-json-stable-stringify: 2.1.0 1184 | json-schema-traverse: 0.4.1 1185 | uri-js: 4.4.1 1186 | 1187 | ansi-regex@5.0.1: {} 1188 | 1189 | ansi-styles@4.3.0: 1190 | dependencies: 1191 | color-convert: 2.0.1 1192 | 1193 | argparse@2.0.1: {} 1194 | 1195 | array-buffer-byte-length@1.0.1: 1196 | dependencies: 1197 | call-bind: 1.0.7 1198 | is-array-buffer: 3.0.4 1199 | 1200 | array-includes@3.1.8: 1201 | dependencies: 1202 | call-bind: 1.0.7 1203 | define-properties: 1.2.1 1204 | es-abstract: 1.23.3 1205 | es-object-atoms: 1.0.0 1206 | get-intrinsic: 1.2.4 1207 | is-string: 1.0.7 1208 | 1209 | array.prototype.findlastindex@1.2.5: 1210 | dependencies: 1211 | call-bind: 1.0.7 1212 | define-properties: 1.2.1 1213 | es-abstract: 1.23.3 1214 | es-errors: 1.3.0 1215 | es-object-atoms: 1.0.0 1216 | es-shim-unscopables: 1.0.2 1217 | 1218 | array.prototype.flat@1.3.2: 1219 | dependencies: 1220 | call-bind: 1.0.7 1221 | define-properties: 1.2.1 1222 | es-abstract: 1.23.3 1223 | es-shim-unscopables: 1.0.2 1224 | 1225 | array.prototype.flatmap@1.3.2: 1226 | dependencies: 1227 | call-bind: 1.0.7 1228 | define-properties: 1.2.1 1229 | es-abstract: 1.23.3 1230 | es-shim-unscopables: 1.0.2 1231 | 1232 | arraybuffer.prototype.slice@1.0.3: 1233 | dependencies: 1234 | array-buffer-byte-length: 1.0.1 1235 | call-bind: 1.0.7 1236 | define-properties: 1.2.1 1237 | es-abstract: 1.23.3 1238 | es-errors: 1.3.0 1239 | get-intrinsic: 1.2.4 1240 | is-array-buffer: 3.0.4 1241 | is-shared-array-buffer: 1.0.3 1242 | 1243 | available-typed-arrays@1.0.7: 1244 | dependencies: 1245 | possible-typed-array-names: 1.0.0 1246 | 1247 | balanced-match@1.0.2: {} 1248 | 1249 | brace-expansion@1.1.11: 1250 | dependencies: 1251 | balanced-match: 1.0.2 1252 | concat-map: 0.0.1 1253 | 1254 | brace-expansion@2.0.1: 1255 | dependencies: 1256 | balanced-match: 1.0.2 1257 | 1258 | braces@3.0.3: 1259 | dependencies: 1260 | fill-range: 7.1.1 1261 | 1262 | call-bind@1.0.7: 1263 | dependencies: 1264 | es-define-property: 1.0.0 1265 | es-errors: 1.3.0 1266 | function-bind: 1.1.2 1267 | get-intrinsic: 1.2.4 1268 | set-function-length: 1.2.2 1269 | 1270 | callsites@3.1.0: {} 1271 | 1272 | chalk@4.1.2: 1273 | dependencies: 1274 | ansi-styles: 4.3.0 1275 | supports-color: 7.2.0 1276 | 1277 | clean-publish@5.0.0: 1278 | dependencies: 1279 | cross-spawn: 7.0.6 1280 | fast-glob: 3.3.2 1281 | lilconfig: 3.1.2 1282 | micromatch: 4.0.8 1283 | 1284 | color-convert@2.0.1: 1285 | dependencies: 1286 | color-name: 1.1.4 1287 | 1288 | color-name@1.1.4: {} 1289 | 1290 | concat-map@0.0.1: {} 1291 | 1292 | cross-spawn@7.0.6: 1293 | dependencies: 1294 | path-key: 3.1.1 1295 | shebang-command: 2.0.0 1296 | which: 2.0.2 1297 | 1298 | data-view-buffer@1.0.1: 1299 | dependencies: 1300 | call-bind: 1.0.7 1301 | es-errors: 1.3.0 1302 | is-data-view: 1.0.1 1303 | 1304 | data-view-byte-length@1.0.1: 1305 | dependencies: 1306 | call-bind: 1.0.7 1307 | es-errors: 1.3.0 1308 | is-data-view: 1.0.1 1309 | 1310 | data-view-byte-offset@1.0.0: 1311 | dependencies: 1312 | call-bind: 1.0.7 1313 | es-errors: 1.3.0 1314 | is-data-view: 1.0.1 1315 | 1316 | debug@3.2.7: 1317 | dependencies: 1318 | ms: 2.1.3 1319 | 1320 | debug@4.3.7: 1321 | dependencies: 1322 | ms: 2.1.3 1323 | 1324 | deep-is@0.1.4: {} 1325 | 1326 | define-data-property@1.1.4: 1327 | dependencies: 1328 | es-define-property: 1.0.0 1329 | es-errors: 1.3.0 1330 | gopd: 1.0.1 1331 | 1332 | define-properties@1.2.1: 1333 | dependencies: 1334 | define-data-property: 1.1.4 1335 | has-property-descriptors: 1.0.2 1336 | object-keys: 1.1.1 1337 | 1338 | doctrine@2.1.0: 1339 | dependencies: 1340 | esutils: 2.0.3 1341 | 1342 | enhanced-resolve@5.17.1: 1343 | dependencies: 1344 | graceful-fs: 4.2.11 1345 | tapable: 2.2.1 1346 | 1347 | es-abstract@1.23.3: 1348 | dependencies: 1349 | array-buffer-byte-length: 1.0.1 1350 | arraybuffer.prototype.slice: 1.0.3 1351 | available-typed-arrays: 1.0.7 1352 | call-bind: 1.0.7 1353 | data-view-buffer: 1.0.1 1354 | data-view-byte-length: 1.0.1 1355 | data-view-byte-offset: 1.0.0 1356 | es-define-property: 1.0.0 1357 | es-errors: 1.3.0 1358 | es-object-atoms: 1.0.0 1359 | es-set-tostringtag: 2.0.3 1360 | es-to-primitive: 1.2.1 1361 | function.prototype.name: 1.1.6 1362 | get-intrinsic: 1.2.4 1363 | get-symbol-description: 1.0.2 1364 | globalthis: 1.0.4 1365 | gopd: 1.0.1 1366 | has-property-descriptors: 1.0.2 1367 | has-proto: 1.0.3 1368 | has-symbols: 1.0.3 1369 | hasown: 2.0.2 1370 | internal-slot: 1.0.7 1371 | is-array-buffer: 3.0.4 1372 | is-callable: 1.2.7 1373 | is-data-view: 1.0.1 1374 | is-negative-zero: 2.0.3 1375 | is-regex: 1.1.4 1376 | is-shared-array-buffer: 1.0.3 1377 | is-string: 1.0.7 1378 | is-typed-array: 1.1.13 1379 | is-weakref: 1.0.2 1380 | object-inspect: 1.13.2 1381 | object-keys: 1.1.1 1382 | object.assign: 4.1.5 1383 | regexp.prototype.flags: 1.5.3 1384 | safe-array-concat: 1.1.2 1385 | safe-regex-test: 1.0.3 1386 | string.prototype.trim: 1.2.9 1387 | string.prototype.trimend: 1.0.8 1388 | string.prototype.trimstart: 1.0.8 1389 | typed-array-buffer: 1.0.2 1390 | typed-array-byte-length: 1.0.1 1391 | typed-array-byte-offset: 1.0.2 1392 | typed-array-length: 1.0.6 1393 | unbox-primitive: 1.0.2 1394 | which-typed-array: 1.1.15 1395 | 1396 | es-define-property@1.0.0: 1397 | dependencies: 1398 | get-intrinsic: 1.2.4 1399 | 1400 | es-errors@1.3.0: {} 1401 | 1402 | es-object-atoms@1.0.0: 1403 | dependencies: 1404 | es-errors: 1.3.0 1405 | 1406 | es-set-tostringtag@2.0.3: 1407 | dependencies: 1408 | get-intrinsic: 1.2.4 1409 | has-tostringtag: 1.0.2 1410 | hasown: 2.0.2 1411 | 1412 | es-shim-unscopables@1.0.2: 1413 | dependencies: 1414 | hasown: 2.0.2 1415 | 1416 | es-to-primitive@1.2.1: 1417 | dependencies: 1418 | is-callable: 1.2.7 1419 | is-date-object: 1.0.5 1420 | is-symbol: 1.0.4 1421 | 1422 | escape-string-regexp@4.0.0: {} 1423 | 1424 | eslint-compat-utils@0.5.1(eslint@9.11.1): 1425 | dependencies: 1426 | eslint: 9.11.1 1427 | semver: 7.6.3 1428 | 1429 | eslint-config-standard@17.1.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1))(eslint-plugin-n@17.10.3(eslint@9.11.1))(eslint-plugin-promise@7.1.0(eslint@9.11.1))(eslint@9.11.1): 1430 | dependencies: 1431 | eslint: 9.11.1 1432 | eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1) 1433 | eslint-plugin-n: 17.10.3(eslint@9.11.1) 1434 | eslint-plugin-promise: 7.1.0(eslint@9.11.1) 1435 | 1436 | eslint-import-resolver-node@0.3.9: 1437 | dependencies: 1438 | debug: 3.2.7 1439 | is-core-module: 2.15.1 1440 | resolve: 1.22.8 1441 | transitivePeerDependencies: 1442 | - supports-color 1443 | 1444 | eslint-module-utils@2.12.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.11.1): 1445 | dependencies: 1446 | debug: 3.2.7 1447 | optionalDependencies: 1448 | '@typescript-eslint/parser': 8.8.0(eslint@9.11.1)(typescript@5.6.2) 1449 | eslint: 9.11.1 1450 | eslint-import-resolver-node: 0.3.9 1451 | transitivePeerDependencies: 1452 | - supports-color 1453 | 1454 | eslint-plugin-es-x@7.8.0(eslint@9.11.1): 1455 | dependencies: 1456 | '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1) 1457 | '@eslint-community/regexpp': 4.11.1 1458 | eslint: 9.11.1 1459 | eslint-compat-utils: 0.5.1(eslint@9.11.1) 1460 | 1461 | eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1): 1462 | dependencies: 1463 | '@rtsao/scc': 1.1.0 1464 | array-includes: 3.1.8 1465 | array.prototype.findlastindex: 1.2.5 1466 | array.prototype.flat: 1.3.2 1467 | array.prototype.flatmap: 1.3.2 1468 | debug: 3.2.7 1469 | doctrine: 2.1.0 1470 | eslint: 9.11.1 1471 | eslint-import-resolver-node: 0.3.9 1472 | eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.11.1) 1473 | hasown: 2.0.2 1474 | is-core-module: 2.15.1 1475 | is-glob: 4.0.3 1476 | minimatch: 3.1.2 1477 | object.fromentries: 2.0.8 1478 | object.groupby: 1.0.3 1479 | object.values: 1.2.0 1480 | semver: 6.3.1 1481 | string.prototype.trimend: 1.0.8 1482 | tsconfig-paths: 3.15.0 1483 | optionalDependencies: 1484 | '@typescript-eslint/parser': 8.8.0(eslint@9.11.1)(typescript@5.6.2) 1485 | transitivePeerDependencies: 1486 | - eslint-import-resolver-typescript 1487 | - eslint-import-resolver-webpack 1488 | - supports-color 1489 | 1490 | eslint-plugin-n@17.10.3(eslint@9.11.1): 1491 | dependencies: 1492 | '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1) 1493 | enhanced-resolve: 5.17.1 1494 | eslint: 9.11.1 1495 | eslint-plugin-es-x: 7.8.0(eslint@9.11.1) 1496 | get-tsconfig: 4.8.1 1497 | globals: 15.10.0 1498 | ignore: 5.3.2 1499 | minimatch: 9.0.5 1500 | semver: 7.6.3 1501 | 1502 | eslint-plugin-perfectionist@3.8.0(eslint@9.11.1)(typescript@5.6.2): 1503 | dependencies: 1504 | '@typescript-eslint/types': 8.8.0 1505 | '@typescript-eslint/utils': 8.8.0(eslint@9.11.1)(typescript@5.6.2) 1506 | eslint: 9.11.1 1507 | minimatch: 9.0.5 1508 | natural-compare-lite: 1.4.0 1509 | transitivePeerDependencies: 1510 | - supports-color 1511 | - typescript 1512 | 1513 | eslint-plugin-prefer-let@4.0.0: 1514 | dependencies: 1515 | requireindex: 1.2.0 1516 | 1517 | eslint-plugin-promise@7.1.0(eslint@9.11.1): 1518 | dependencies: 1519 | eslint: 9.11.1 1520 | 1521 | eslint-scope@8.1.0: 1522 | dependencies: 1523 | esrecurse: 4.3.0 1524 | estraverse: 5.3.0 1525 | 1526 | eslint-visitor-keys@3.4.3: {} 1527 | 1528 | eslint-visitor-keys@4.1.0: {} 1529 | 1530 | eslint@9.11.1: 1531 | dependencies: 1532 | '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1) 1533 | '@eslint-community/regexpp': 4.11.1 1534 | '@eslint/config-array': 0.18.0 1535 | '@eslint/core': 0.6.0 1536 | '@eslint/eslintrc': 3.1.0 1537 | '@eslint/js': 9.11.1 1538 | '@eslint/plugin-kit': 0.2.3 1539 | '@humanwhocodes/module-importer': 1.0.1 1540 | '@humanwhocodes/retry': 0.3.0 1541 | '@nodelib/fs.walk': 1.2.8 1542 | '@types/estree': 1.0.6 1543 | '@types/json-schema': 7.0.15 1544 | ajv: 6.12.6 1545 | chalk: 4.1.2 1546 | cross-spawn: 7.0.6 1547 | debug: 4.3.7 1548 | escape-string-regexp: 4.0.0 1549 | eslint-scope: 8.1.0 1550 | eslint-visitor-keys: 4.1.0 1551 | espree: 10.2.0 1552 | esquery: 1.6.0 1553 | esutils: 2.0.3 1554 | fast-deep-equal: 3.1.3 1555 | file-entry-cache: 8.0.0 1556 | find-up: 5.0.0 1557 | glob-parent: 6.0.2 1558 | ignore: 5.3.2 1559 | imurmurhash: 0.1.4 1560 | is-glob: 4.0.3 1561 | is-path-inside: 3.0.3 1562 | json-stable-stringify-without-jsonify: 1.0.1 1563 | lodash.merge: 4.6.2 1564 | minimatch: 3.1.2 1565 | natural-compare: 1.4.0 1566 | optionator: 0.9.4 1567 | strip-ansi: 6.0.1 1568 | text-table: 0.2.0 1569 | transitivePeerDependencies: 1570 | - supports-color 1571 | 1572 | espree@10.2.0: 1573 | dependencies: 1574 | acorn: 8.12.1 1575 | acorn-jsx: 5.3.2(acorn@8.12.1) 1576 | eslint-visitor-keys: 4.1.0 1577 | 1578 | esquery@1.6.0: 1579 | dependencies: 1580 | estraverse: 5.3.0 1581 | 1582 | esrecurse@4.3.0: 1583 | dependencies: 1584 | estraverse: 5.3.0 1585 | 1586 | estraverse@5.3.0: {} 1587 | 1588 | esutils@2.0.3: {} 1589 | 1590 | fast-deep-equal@3.1.3: {} 1591 | 1592 | fast-glob@3.3.2: 1593 | dependencies: 1594 | '@nodelib/fs.stat': 2.0.5 1595 | '@nodelib/fs.walk': 1.2.8 1596 | glob-parent: 5.1.2 1597 | merge2: 1.4.1 1598 | micromatch: 4.0.8 1599 | 1600 | fast-json-stable-stringify@2.1.0: {} 1601 | 1602 | fast-levenshtein@2.0.6: {} 1603 | 1604 | fastq@1.17.1: 1605 | dependencies: 1606 | reusify: 1.0.4 1607 | 1608 | file-entry-cache@8.0.0: 1609 | dependencies: 1610 | flat-cache: 4.0.1 1611 | 1612 | fill-range@7.1.1: 1613 | dependencies: 1614 | to-regex-range: 5.0.1 1615 | 1616 | find-up@5.0.0: 1617 | dependencies: 1618 | locate-path: 6.0.0 1619 | path-exists: 4.0.0 1620 | 1621 | flat-cache@4.0.1: 1622 | dependencies: 1623 | flatted: 3.3.1 1624 | keyv: 4.5.4 1625 | 1626 | flatted@3.3.1: {} 1627 | 1628 | for-each@0.3.3: 1629 | dependencies: 1630 | is-callable: 1.2.7 1631 | 1632 | function-bind@1.1.2: {} 1633 | 1634 | function.prototype.name@1.1.6: 1635 | dependencies: 1636 | call-bind: 1.0.7 1637 | define-properties: 1.2.1 1638 | es-abstract: 1.23.3 1639 | functions-have-names: 1.2.3 1640 | 1641 | functions-have-names@1.2.3: {} 1642 | 1643 | get-intrinsic@1.2.4: 1644 | dependencies: 1645 | es-errors: 1.3.0 1646 | function-bind: 1.1.2 1647 | has-proto: 1.0.3 1648 | has-symbols: 1.0.3 1649 | hasown: 2.0.2 1650 | 1651 | get-symbol-description@1.0.2: 1652 | dependencies: 1653 | call-bind: 1.0.7 1654 | es-errors: 1.3.0 1655 | get-intrinsic: 1.2.4 1656 | 1657 | get-tsconfig@4.8.1: 1658 | dependencies: 1659 | resolve-pkg-maps: 1.0.0 1660 | 1661 | glob-parent@5.1.2: 1662 | dependencies: 1663 | is-glob: 4.0.3 1664 | 1665 | glob-parent@6.0.2: 1666 | dependencies: 1667 | is-glob: 4.0.3 1668 | 1669 | globals@14.0.0: {} 1670 | 1671 | globals@15.10.0: {} 1672 | 1673 | globalthis@1.0.4: 1674 | dependencies: 1675 | define-properties: 1.2.1 1676 | gopd: 1.0.1 1677 | 1678 | gopd@1.0.1: 1679 | dependencies: 1680 | get-intrinsic: 1.2.4 1681 | 1682 | graceful-fs@4.2.11: {} 1683 | 1684 | graphemer@1.4.0: {} 1685 | 1686 | has-bigints@1.0.2: {} 1687 | 1688 | has-flag@4.0.0: {} 1689 | 1690 | has-property-descriptors@1.0.2: 1691 | dependencies: 1692 | es-define-property: 1.0.0 1693 | 1694 | has-proto@1.0.3: {} 1695 | 1696 | has-symbols@1.0.3: {} 1697 | 1698 | has-tostringtag@1.0.2: 1699 | dependencies: 1700 | has-symbols: 1.0.3 1701 | 1702 | hasown@2.0.2: 1703 | dependencies: 1704 | function-bind: 1.1.2 1705 | 1706 | ignore@5.3.2: {} 1707 | 1708 | import-fresh@3.3.0: 1709 | dependencies: 1710 | parent-module: 1.0.1 1711 | resolve-from: 4.0.0 1712 | 1713 | imurmurhash@0.1.4: {} 1714 | 1715 | internal-slot@1.0.7: 1716 | dependencies: 1717 | es-errors: 1.3.0 1718 | hasown: 2.0.2 1719 | side-channel: 1.0.6 1720 | 1721 | is-array-buffer@3.0.4: 1722 | dependencies: 1723 | call-bind: 1.0.7 1724 | get-intrinsic: 1.2.4 1725 | 1726 | is-bigint@1.0.4: 1727 | dependencies: 1728 | has-bigints: 1.0.2 1729 | 1730 | is-boolean-object@1.1.2: 1731 | dependencies: 1732 | call-bind: 1.0.7 1733 | has-tostringtag: 1.0.2 1734 | 1735 | is-callable@1.2.7: {} 1736 | 1737 | is-core-module@2.15.1: 1738 | dependencies: 1739 | hasown: 2.0.2 1740 | 1741 | is-data-view@1.0.1: 1742 | dependencies: 1743 | is-typed-array: 1.1.13 1744 | 1745 | is-date-object@1.0.5: 1746 | dependencies: 1747 | has-tostringtag: 1.0.2 1748 | 1749 | is-extglob@2.1.1: {} 1750 | 1751 | is-glob@4.0.3: 1752 | dependencies: 1753 | is-extglob: 2.1.1 1754 | 1755 | is-negative-zero@2.0.3: {} 1756 | 1757 | is-number-object@1.0.7: 1758 | dependencies: 1759 | has-tostringtag: 1.0.2 1760 | 1761 | is-number@7.0.0: {} 1762 | 1763 | is-path-inside@3.0.3: {} 1764 | 1765 | is-regex@1.1.4: 1766 | dependencies: 1767 | call-bind: 1.0.7 1768 | has-tostringtag: 1.0.2 1769 | 1770 | is-shared-array-buffer@1.0.3: 1771 | dependencies: 1772 | call-bind: 1.0.7 1773 | 1774 | is-string@1.0.7: 1775 | dependencies: 1776 | has-tostringtag: 1.0.2 1777 | 1778 | is-symbol@1.0.4: 1779 | dependencies: 1780 | has-symbols: 1.0.3 1781 | 1782 | is-typed-array@1.1.13: 1783 | dependencies: 1784 | which-typed-array: 1.1.15 1785 | 1786 | is-weakref@1.0.2: 1787 | dependencies: 1788 | call-bind: 1.0.7 1789 | 1790 | isarray@2.0.5: {} 1791 | 1792 | isexe@2.0.0: {} 1793 | 1794 | js-yaml@4.1.0: 1795 | dependencies: 1796 | argparse: 2.0.1 1797 | 1798 | json-buffer@3.0.1: {} 1799 | 1800 | json-schema-traverse@0.4.1: {} 1801 | 1802 | json-stable-stringify-without-jsonify@1.0.1: {} 1803 | 1804 | json5@1.0.2: 1805 | dependencies: 1806 | minimist: 1.2.8 1807 | 1808 | keyv@4.5.4: 1809 | dependencies: 1810 | json-buffer: 3.0.1 1811 | 1812 | levn@0.4.1: 1813 | dependencies: 1814 | prelude-ls: 1.2.1 1815 | type-check: 0.4.0 1816 | 1817 | lilconfig@3.1.2: {} 1818 | 1819 | locate-path@6.0.0: 1820 | dependencies: 1821 | p-locate: 5.0.0 1822 | 1823 | lodash.merge@4.6.2: {} 1824 | 1825 | merge2@1.4.1: {} 1826 | 1827 | micromatch@4.0.8: 1828 | dependencies: 1829 | braces: 3.0.3 1830 | picomatch: 2.3.1 1831 | 1832 | minimatch@3.1.2: 1833 | dependencies: 1834 | brace-expansion: 1.1.11 1835 | 1836 | minimatch@9.0.5: 1837 | dependencies: 1838 | brace-expansion: 2.0.1 1839 | 1840 | minimist@1.2.8: {} 1841 | 1842 | ms@2.1.3: {} 1843 | 1844 | nanoid@3.3.8: {} 1845 | 1846 | natural-compare-lite@1.4.0: {} 1847 | 1848 | natural-compare@1.4.0: {} 1849 | 1850 | object-inspect@1.13.2: {} 1851 | 1852 | object-keys@1.1.1: {} 1853 | 1854 | object.assign@4.1.5: 1855 | dependencies: 1856 | call-bind: 1.0.7 1857 | define-properties: 1.2.1 1858 | has-symbols: 1.0.3 1859 | object-keys: 1.1.1 1860 | 1861 | object.fromentries@2.0.8: 1862 | dependencies: 1863 | call-bind: 1.0.7 1864 | define-properties: 1.2.1 1865 | es-abstract: 1.23.3 1866 | es-object-atoms: 1.0.0 1867 | 1868 | object.groupby@1.0.3: 1869 | dependencies: 1870 | call-bind: 1.0.7 1871 | define-properties: 1.2.1 1872 | es-abstract: 1.23.3 1873 | 1874 | object.values@1.2.0: 1875 | dependencies: 1876 | call-bind: 1.0.7 1877 | define-properties: 1.2.1 1878 | es-object-atoms: 1.0.0 1879 | 1880 | optionator@0.9.4: 1881 | dependencies: 1882 | deep-is: 0.1.4 1883 | fast-levenshtein: 2.0.6 1884 | levn: 0.4.1 1885 | prelude-ls: 1.2.1 1886 | type-check: 0.4.0 1887 | word-wrap: 1.2.5 1888 | 1889 | p-limit@3.1.0: 1890 | dependencies: 1891 | yocto-queue: 0.1.0 1892 | 1893 | p-locate@5.0.0: 1894 | dependencies: 1895 | p-limit: 3.1.0 1896 | 1897 | parent-module@1.0.1: 1898 | dependencies: 1899 | callsites: 3.1.0 1900 | 1901 | path-exists@4.0.0: {} 1902 | 1903 | path-key@3.1.1: {} 1904 | 1905 | path-parse@1.0.7: {} 1906 | 1907 | picocolors@1.1.0: {} 1908 | 1909 | picomatch@2.3.1: {} 1910 | 1911 | possible-typed-array-names@1.0.0: {} 1912 | 1913 | postcss-parser-tests@8.8.0: 1914 | dependencies: 1915 | picocolors: 1.1.0 1916 | 1917 | postcss@8.4.47: 1918 | dependencies: 1919 | nanoid: 3.3.8 1920 | picocolors: 1.1.0 1921 | source-map-js: 1.2.1 1922 | 1923 | prelude-ls@1.2.1: {} 1924 | 1925 | punycode@2.3.1: {} 1926 | 1927 | queue-microtask@1.2.3: {} 1928 | 1929 | regexp.prototype.flags@1.5.3: 1930 | dependencies: 1931 | call-bind: 1.0.7 1932 | define-properties: 1.2.1 1933 | es-errors: 1.3.0 1934 | set-function-name: 2.0.2 1935 | 1936 | requireindex@1.2.0: {} 1937 | 1938 | resolve-from@4.0.0: {} 1939 | 1940 | resolve-pkg-maps@1.0.0: {} 1941 | 1942 | resolve@1.22.8: 1943 | dependencies: 1944 | is-core-module: 2.15.1 1945 | path-parse: 1.0.7 1946 | supports-preserve-symlinks-flag: 1.0.0 1947 | 1948 | reusify@1.0.4: {} 1949 | 1950 | run-parallel@1.2.0: 1951 | dependencies: 1952 | queue-microtask: 1.2.3 1953 | 1954 | safe-array-concat@1.1.2: 1955 | dependencies: 1956 | call-bind: 1.0.7 1957 | get-intrinsic: 1.2.4 1958 | has-symbols: 1.0.3 1959 | isarray: 2.0.5 1960 | 1961 | safe-regex-test@1.0.3: 1962 | dependencies: 1963 | call-bind: 1.0.7 1964 | es-errors: 1.3.0 1965 | is-regex: 1.1.4 1966 | 1967 | semver@6.3.1: {} 1968 | 1969 | semver@7.6.3: {} 1970 | 1971 | set-function-length@1.2.2: 1972 | dependencies: 1973 | define-data-property: 1.1.4 1974 | es-errors: 1.3.0 1975 | function-bind: 1.1.2 1976 | get-intrinsic: 1.2.4 1977 | gopd: 1.0.1 1978 | has-property-descriptors: 1.0.2 1979 | 1980 | set-function-name@2.0.2: 1981 | dependencies: 1982 | define-data-property: 1.1.4 1983 | es-errors: 1.3.0 1984 | functions-have-names: 1.2.3 1985 | has-property-descriptors: 1.0.2 1986 | 1987 | shebang-command@2.0.0: 1988 | dependencies: 1989 | shebang-regex: 3.0.0 1990 | 1991 | shebang-regex@3.0.0: {} 1992 | 1993 | side-channel@1.0.6: 1994 | dependencies: 1995 | call-bind: 1.0.7 1996 | es-errors: 1.3.0 1997 | get-intrinsic: 1.2.4 1998 | object-inspect: 1.13.2 1999 | 2000 | source-map-js@1.2.1: {} 2001 | 2002 | string.prototype.trim@1.2.9: 2003 | dependencies: 2004 | call-bind: 1.0.7 2005 | define-properties: 1.2.1 2006 | es-abstract: 1.23.3 2007 | es-object-atoms: 1.0.0 2008 | 2009 | string.prototype.trimend@1.0.8: 2010 | dependencies: 2011 | call-bind: 1.0.7 2012 | define-properties: 1.2.1 2013 | es-object-atoms: 1.0.0 2014 | 2015 | string.prototype.trimstart@1.0.8: 2016 | dependencies: 2017 | call-bind: 1.0.7 2018 | define-properties: 1.2.1 2019 | es-object-atoms: 1.0.0 2020 | 2021 | strip-ansi@6.0.1: 2022 | dependencies: 2023 | ansi-regex: 5.0.1 2024 | 2025 | strip-bom@3.0.0: {} 2026 | 2027 | strip-json-comments@3.1.1: {} 2028 | 2029 | supports-color@7.2.0: 2030 | dependencies: 2031 | has-flag: 4.0.0 2032 | 2033 | supports-preserve-symlinks-flag@1.0.0: {} 2034 | 2035 | tapable@2.2.1: {} 2036 | 2037 | text-table@0.2.0: {} 2038 | 2039 | to-regex-range@5.0.1: 2040 | dependencies: 2041 | is-number: 7.0.0 2042 | 2043 | ts-api-utils@1.3.0(typescript@5.6.2): 2044 | dependencies: 2045 | typescript: 5.6.2 2046 | 2047 | tsconfig-paths@3.15.0: 2048 | dependencies: 2049 | '@types/json5': 0.0.29 2050 | json5: 1.0.2 2051 | minimist: 1.2.8 2052 | strip-bom: 3.0.0 2053 | 2054 | type-check@0.4.0: 2055 | dependencies: 2056 | prelude-ls: 1.2.1 2057 | 2058 | typed-array-buffer@1.0.2: 2059 | dependencies: 2060 | call-bind: 1.0.7 2061 | es-errors: 1.3.0 2062 | is-typed-array: 1.1.13 2063 | 2064 | typed-array-byte-length@1.0.1: 2065 | dependencies: 2066 | call-bind: 1.0.7 2067 | for-each: 0.3.3 2068 | gopd: 1.0.1 2069 | has-proto: 1.0.3 2070 | is-typed-array: 1.1.13 2071 | 2072 | typed-array-byte-offset@1.0.2: 2073 | dependencies: 2074 | available-typed-arrays: 1.0.7 2075 | call-bind: 1.0.7 2076 | for-each: 0.3.3 2077 | gopd: 1.0.1 2078 | has-proto: 1.0.3 2079 | is-typed-array: 1.1.13 2080 | 2081 | typed-array-length@1.0.6: 2082 | dependencies: 2083 | call-bind: 1.0.7 2084 | for-each: 0.3.3 2085 | gopd: 1.0.1 2086 | has-proto: 1.0.3 2087 | is-typed-array: 1.1.13 2088 | possible-typed-array-names: 1.0.0 2089 | 2090 | typescript-eslint@8.8.0(eslint@9.11.1)(typescript@5.6.2): 2091 | dependencies: 2092 | '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2) 2093 | '@typescript-eslint/parser': 8.8.0(eslint@9.11.1)(typescript@5.6.2) 2094 | '@typescript-eslint/utils': 8.8.0(eslint@9.11.1)(typescript@5.6.2) 2095 | optionalDependencies: 2096 | typescript: 5.6.2 2097 | transitivePeerDependencies: 2098 | - eslint 2099 | - supports-color 2100 | 2101 | typescript@5.6.2: {} 2102 | 2103 | unbox-primitive@1.0.2: 2104 | dependencies: 2105 | call-bind: 1.0.7 2106 | has-bigints: 1.0.2 2107 | has-symbols: 1.0.3 2108 | which-boxed-primitive: 1.0.2 2109 | 2110 | uri-js@4.4.1: 2111 | dependencies: 2112 | punycode: 2.3.1 2113 | 2114 | which-boxed-primitive@1.0.2: 2115 | dependencies: 2116 | is-bigint: 1.0.4 2117 | is-boolean-object: 1.1.2 2118 | is-number-object: 1.0.7 2119 | is-string: 1.0.7 2120 | is-symbol: 1.0.4 2121 | 2122 | which-typed-array@1.1.15: 2123 | dependencies: 2124 | available-typed-arrays: 1.0.7 2125 | call-bind: 1.0.7 2126 | for-each: 0.3.3 2127 | gopd: 1.0.1 2128 | has-tostringtag: 1.0.2 2129 | 2130 | which@2.0.2: 2131 | dependencies: 2132 | isexe: 2.0.0 2133 | 2134 | word-wrap@1.2.5: {} 2135 | 2136 | yocto-queue@0.1.0: {} 2137 | -------------------------------------------------------------------------------- /test/integration.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | let { testOnReal } = require('postcss-parser-tests') 4 | 5 | let safe = require('../lib/safe-parse') 6 | 7 | testOnReal( 8 | css => safe(css).toResult({ map: { annotation: false } }), 9 | [ 10 | 'https://raw.githubusercontent.com/' + 11 | '4ae9b8/browserhacks/gh-pages/assets/css/tests.css' 12 | ] 13 | ) 14 | -------------------------------------------------------------------------------- /test/parse.test.js: -------------------------------------------------------------------------------- 1 | let { deepStrictEqual, equal } = require('node:assert') 2 | let { test } = require('node:test') 3 | let { eachTest, jsonify } = require('postcss-parser-tests') 4 | 5 | let parse = require('../lib/safe-parse') 6 | 7 | eachTest((name, css, json) => { 8 | if (name !== 'apply.css' && name !== 'custom-properties.css') { 9 | test('parses ' + name, () => { 10 | let parsed = jsonify(parse(css, { from: name })) 11 | deepStrictEqual(parsed, json) 12 | }) 13 | } 14 | }) 15 | 16 | test('fixes unclosed blocks in safe mode', () => { 17 | equal( 18 | parse('@media (screen) { a {\n').toString(), 19 | '@media (screen) { a {\n}}' 20 | ) 21 | equal(parse('a { color').toString(), 'a { color}') 22 | equal(parse('a { color: black').first.first.prop, 'color') 23 | }) 24 | 25 | test('fixes unnecessary block close in safe mode', () => { 26 | let root = parse('a {\n} }') 27 | equal(root.first.toString(), 'a {\n}') 28 | equal(root.raws.after, ' }') 29 | }) 30 | 31 | test('fixes unclosed comment in safe mode', () => { 32 | let root = parse('a { /* b ') 33 | equal(root.toString(), 'a { /* b */}') 34 | equal(root.first.first.text, 'b') 35 | }) 36 | 37 | test('fixes column and semicolumn case', () => { 38 | equal(parse('a{:;}').toString(), 'a{}') 39 | }) 40 | 41 | test('fixes unclosed quote in safe mode', () => { 42 | equal(parse('a { content: "b').first.first.value, '"b') 43 | }) 44 | 45 | test('fixes unclosed bracket', () => { 46 | equal(parse(':not(one() { }').toString(), ':not(one() { }') 47 | }) 48 | 49 | test('fixes property without value in safe mode', () => { 50 | let root = parse('a { color: white; one }') 51 | equal(root.first.nodes.length, 1) 52 | equal(root.first.raws.semicolon, true) 53 | equal(root.first.raws.after, ' one ') 54 | }) 55 | 56 | test('fixes 2 properties in safe mode', () => { 57 | let root = parse('a { color one: white; one }') 58 | equal(root.first.nodes.length, 1) 59 | equal(root.first.first.prop, 'color') 60 | equal(root.first.first.raws.between, ' one: ') 61 | }) 62 | 63 | test('fixes nameless at-rule in safe mode', () => { 64 | let root = parse('@') 65 | equal(root.first.type, 'atrule') 66 | equal(root.first.name, '') 67 | }) 68 | 69 | test('fixes property without semicolon in safe mode', () => { 70 | let root = parse('a { one: 1 two: 2 }') 71 | equal(root.first.nodes.length, 2) 72 | equal(root.toString(), 'a { one: 1; two: 2 }') 73 | }) 74 | 75 | test('does not fall on missed semicolon in IE filter', () => { 76 | parse("a { one: two: progid:DX(a='1', b='2'); }") 77 | }) 78 | 79 | test('fixes double colon in safe mode', () => { 80 | let root = parse('a { one:: 1 }') 81 | equal(root.first.first.value, ': 1') 82 | }) 83 | 84 | test('fixes colon instead of semicolon', () => { 85 | let root = parse('a { one: 1: } b { one: 1 : }') 86 | equal(root.toString(), 'a { one: 1: } b { one: 1 : }') 87 | }) 88 | 89 | test('fixes {} error', () => { 90 | let root = parse( 91 | `:root { --example-var: { "Version": { "Build": "10.30.7.350828.20230224122352", "Source": "10.30.7.350828.1", "Required": "10.30.7.307232"; }}}; @font-face { font-family: 'Calibri'; }` 92 | ) 93 | equal( 94 | root.toString(), 95 | `:root { --example-var: { "Version": { "Build": "10.30.7.350828.20230224122352", "Source": "10.30.7.350828.1", "Required": "10.30.7.307232"; }}}; @font-face { font-family: 'Calibri'; }` 96 | ) 97 | }) 98 | 99 | test('Rule at the start of tokens', () => { 100 | let root = parse(`.start { font-size: 16px; }`) 101 | equal(root.toString(), `.start { font-size: 16px; }`) 102 | }) 103 | 104 | test('Complex nested structures with JSON-like properties', () => { 105 | let root = parse( 106 | `:root { --complex: {"nested": {"key": "value"}, "array": [1, {"sub": "value"}]}; } @font-face { font-family: 'Calibri'; }` 107 | ) 108 | equal( 109 | root.toString(), 110 | `:root { --complex: {"nested": {"key": "value"}, "array": [1, {"sub": "value"}]}; } @font-face { font-family: 'Calibri'; }` 111 | ) 112 | }) 113 | 114 | test('Multiple rules with one JSON-like custom property', () => { 115 | let root = parse(` 116 | .class1 { margin: 10px; } 117 | :root { --jsonProp: {"a": 1, "b": {"c": 3}}; } 118 | .class2 { padding: 20px; } 119 | `) 120 | equal( 121 | root.toString(), 122 | ` 123 | .class1 { margin: 10px; } 124 | :root { --jsonProp: {"a": 1, "b": {"c": 3}}; } 125 | .class2 { padding: 20px; } 126 | ` 127 | ) 128 | }) 129 | 130 | test('Custom property at start without modifications', () => { 131 | let root = parse(`--example: {"key": "value"}; .class { color: black; }`) 132 | equal( 133 | root.toString(), 134 | `--example: {"key": "value"}; .class { color: black; }` 135 | ) 136 | }) 137 | --------------------------------------------------------------------------------