├── .gitignore ├── README.md ├── eslint.config.js ├── package.json ├── pnpm-lock.yaml ├── src ├── index.ts ├── lib │ └── index.ts ├── rules │ ├── exportObject │ │ ├── index.ts │ │ ├── properties.ts │ │ ├── rule.spec.ts │ │ ├── rule.ts │ │ └── ruleTester.ts │ ├── importObject │ │ ├── index.ts │ │ ├── properties.ts │ │ ├── rule.spec.ts │ │ ├── rule.ts │ │ └── ruleTester.ts │ ├── objectKeys │ │ ├── index.ts │ │ ├── properties.ts │ │ ├── rule.spec.ts │ │ ├── rule.ts │ │ └── ruleTester.ts │ └── typeKeys │ │ ├── index.ts │ │ ├── properties.ts │ │ ├── rule.spec.ts │ │ ├── rule.ts │ │ └── ruleTester.ts └── utils.ts ├── tsconfig.json └── vite.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .idea 3 | dist 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # eslint-plugin-sort-keys-custom-order 2 | 3 | This plugin enforces alphabetically sorting keys in objects and typescript types with auto-fix. You can add a list of priority sorted keys for custom sorting (ex: if you want "id" to be the first property). 4 | 5 | ## Installation 6 | 7 | You'll first need to install [ESLint](http://eslint.org): 8 | 9 | ``` 10 | $ npm install -D eslint 11 | ``` 12 | 13 | Next, install `eslint-plugin-sort-keys-custom-order`: 14 | 15 | ``` 16 | $ npm install -D eslint-plugin-sort-keys-custom-order 17 | ``` 18 | 19 | 20 | ## Usage 21 | 22 | Add `sort-keys-custom-order` to the plugins section of your `.eslintrc` configuration file. You can omit the `eslint-plugin-` prefix: 23 | 24 | ```js 25 | // eslint.config.js 26 | import sortKeysCustomOrder from "eslint-plugin-sort-keys-custom-order"; 27 | 28 | export default [{ 29 | /* ... */ 30 | plugins: { 31 | "sort-keys-custom-order": sortKeysCustomOrder 32 | } 33 | /* ... */ 34 | }] 35 | ``` 36 | 37 | 38 | Then configure the rules you want to use under the rules section. 39 | 40 | ```js 41 | // .eslintrc.js 42 | export default [{ 43 | /* ... */ 44 | "rules": { 45 | // For JS objects sorting 46 | "sort-keys-custom-order/object-keys": [ 47 | "error", { "orderedKeys": ["id", "name", "title"] } 48 | ], 49 | // For TS types sorting 50 | "sort-keys-custom-order/type-keys": [ 51 | "error", { "orderedKeys": ["id", "name", "title"] } 52 | ] 53 | } 54 | /* ... */ 55 | }] 56 | ``` 57 | 58 | Or you can use the recommended configuration: 59 | 60 | ```js 61 | // eslint.config.js 62 | import sortKeysCustomOrder from "eslint-plugin-sort-keys-custom-order"; 63 | 64 | export default [ 65 | /* ... */ 66 | sortKeysCustomOrder.configs["flat/recommended"], 67 | /* ... */ 68 | ] 69 | ``` 70 | 71 | ## Configuration 72 | 73 | `orderedKeys: Array` : You can pass an array of ordered keys to the rule configuration. The rule will sort the keys in the order you provided. 74 | 75 | `sorting: "asc" | "desc" | "none"` : You can pass the sorting order for the keys not in orderedKeys. Default is "asc". 76 | 77 | Example: 78 | 79 | ```json 80 | { 81 | "sort-keys-custom-order/object-keys": [ 82 | "error", 83 | { 84 | "orderedKeys": ["id","name","title"], 85 | "sorting": "asc" 86 | } 87 | ] 88 | } 89 | ``` 90 | 91 | 92 | ## Supported Rules 93 | 94 | ### sort-keys-custom-order/object-keys 95 | 96 | Allow you to sort properties inside JS objects 97 | 98 | ### sort-keys-custom-order/type-keys 99 | 100 | Allow you to sort properties inside TS types 101 | 102 | ### sort-keys-custom-order/import-object-keys 103 | 104 | Allow you to sort properties inside JS import objects 105 | 106 | ### sort-keys-custom-order/export-object-keys 107 | 108 | Allow you to sort properties inside JS export objects 109 | 110 | 111 | ## Example 112 | 113 | ```js 114 | // Bad 115 | const module = { 116 | isValid: true, 117 | id: 1234, 118 | create: () => { doThing() }, 119 | isRunning: false, 120 | name: "test", 121 | url: "https://google.com", 122 | isAvailable: true 123 | } 124 | ``` 125 | 126 | ```js 127 | // Good 128 | const module = { 129 | id: 1234, 130 | name: "test", 131 | create: () => { doThing() }, 132 | isAvailable: true, 133 | isRunning: false, 134 | isValid: true, 135 | url: "https://google.com" 136 | } 137 | ``` 138 | 139 | 140 | -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | import sortKeysCustomOrder from "eslint-plugin-sort-keys-custom-order"; 2 | import tsEslint from "typescript-eslint"; 3 | import importX from "eslint-plugin-import-x"; 4 | 5 | export default tsEslint.config( 6 | { 7 | extends: [tsEslint.configs.base], 8 | files: ["**/*.js", "**/*.ts", "**/*.tsx"], 9 | plugins: { 10 | "import-x": importX, 11 | "sort-keys-custom-order": sortKeysCustomOrder 12 | }, 13 | rules: { 14 | "array-bracket-spacing": ["error", "never"], 15 | "arrow-spacing": ["error"], 16 | "brace-style": ["error", "stroustrup"], 17 | "comma-dangle": ["error", "never"], 18 | "eol-last": ["error", "always"], 19 | "eqeqeq": ["error", "always"], 20 | "import-x/order": ["error"], 21 | "indent": ["error", 4], 22 | "key-spacing": ["error"], 23 | "keyword-spacing": ["error"], 24 | "no-multi-spaces": ["error"], 25 | "object-curly-spacing": ["error", "always"], 26 | "prefer-template": "error", 27 | "quotes": ["error", "double", { "allowTemplateLiterals": true }], 28 | "semi": ["error", "always"], 29 | "sort-keys-custom-order/object-keys": ["error"], 30 | "sort-keys-custom-order/type-keys": ["error"], 31 | "space-in-parens": ["error", "never"], 32 | "space-infix-ops": ["error"], 33 | "template-curly-spacing": ["error", "always"] 34 | } 35 | } 36 | ); 37 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eslint-plugin-sort-keys-custom-order", 3 | "version": "2.2.1", 4 | "description": "Enforce keys sorting on objects and TS types in a custom order with autofix", 5 | "type": "module", 6 | "author": { 7 | "name": "Hugo Attal", 8 | "url": "https://twitter.com/HugoAttal" 9 | }, 10 | "keywords": [ 11 | "eslint", 12 | "eslintplugin", 13 | "eslint-plugin", 14 | "typescript" 15 | ], 16 | "main": "./dist/index.umd.cjs", 17 | "module": "./dist/index.js", 18 | "types": "./dist/index.d.ts", 19 | "scripts": { 20 | "build": "vite build", 21 | "test": "vitest", 22 | "dev:test": "vitest --ui" 23 | }, 24 | "exports": { 25 | ".": { 26 | "require": "./dist/index.umd.cjs", 27 | "import": "./dist/index.js", 28 | "types": "./dist/index.d.ts" 29 | }, 30 | "./*": "./*" 31 | }, 32 | "devDependencies": { 33 | "@types/node": "^22.9.0", 34 | "@typescript-eslint/rule-tester": "^8.15.0", 35 | "@typescript-eslint/utils": "^8.15.0", 36 | "@vitest/ui": "^2.1.5", 37 | "eslint": "9.15.0", 38 | "eslint-import-resolver-alias": "^1.1.2", 39 | "eslint-import-resolver-typescript": "^3.6.3", 40 | "eslint-plugin-import-x": "^4.4.2", 41 | "eslint-plugin-sort-keys-custom-order": "file:", 42 | "ts-node": "^10.9.2", 43 | "typescript": "^5.6.3", 44 | "typescript-eslint": "^8.15.0", 45 | "vite": "^5.4.11", 46 | "vite-plugin-dts": "^4.3.0", 47 | "vitest": "^2.1.5" 48 | }, 49 | "peerDependencies": { 50 | "@typescript-eslint/utils": "^8.0.0", 51 | "eslint": "^9.0.0" 52 | }, 53 | "files": [ 54 | "dist/**" 55 | ], 56 | "license": "ISC", 57 | "repository": { 58 | "type": "git", 59 | "url": "https://github.com/hugoattal/eslint-plugin-sort-keys-custom-order.git" 60 | }, 61 | "homepage": "https://github.com/hugoattal/eslint-plugin-sort-keys-custom-order#readme", 62 | "url": "https://github.com/hugoattal/eslint-plugin-sort-keys-custom-order", 63 | "bugs": { 64 | "url": "https://github.com/hugoattal/eslint-plugin-sort-keys-custom-order/issues" 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@types/node': 12 | specifier: ^22.9.0 13 | version: 22.9.0 14 | '@typescript-eslint/rule-tester': 15 | specifier: ^8.15.0 16 | version: 8.15.0(eslint@9.15.0)(typescript@5.6.3) 17 | '@typescript-eslint/utils': 18 | specifier: ^8.15.0 19 | version: 8.15.0(eslint@9.15.0)(typescript@5.6.3) 20 | '@vitest/ui': 21 | specifier: ^2.1.5 22 | version: 2.1.5(vitest@2.1.5) 23 | eslint: 24 | specifier: 9.15.0 25 | version: 9.15.0 26 | eslint-import-resolver-alias: 27 | specifier: ^1.1.2 28 | version: 1.1.2(eslint-plugin-import@2.29.1) 29 | eslint-import-resolver-typescript: 30 | specifier: ^3.6.3 31 | version: 3.6.3(@typescript-eslint/parser@8.15.0(eslint@9.15.0)(typescript@5.6.3))(eslint-plugin-import-x@4.4.2(eslint@9.15.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@9.15.0) 32 | eslint-plugin-import-x: 33 | specifier: ^4.4.2 34 | version: 4.4.2(eslint@9.15.0)(typescript@5.6.3) 35 | eslint-plugin-sort-keys-custom-order: 36 | specifier: 'file:' 37 | version: file:(@typescript-eslint/utils@8.15.0(eslint@9.15.0)(typescript@5.6.3))(eslint@9.15.0) 38 | ts-node: 39 | specifier: ^10.9.2 40 | version: 10.9.2(@types/node@22.9.0)(typescript@5.6.3) 41 | typescript: 42 | specifier: ^5.6.3 43 | version: 5.6.3 44 | typescript-eslint: 45 | specifier: ^8.15.0 46 | version: 8.15.0(eslint@9.15.0)(typescript@5.6.3) 47 | vite: 48 | specifier: ^5.4.11 49 | version: 5.4.11(@types/node@22.9.0) 50 | vite-plugin-dts: 51 | specifier: ^4.3.0 52 | version: 4.3.0(@types/node@22.9.0)(rollup@4.27.3)(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)) 53 | vitest: 54 | specifier: ^2.1.5 55 | version: 2.1.5(@types/node@22.9.0)(@vitest/ui@2.1.5) 56 | 57 | packages: 58 | 59 | '@babel/helper-string-parser@7.25.9': 60 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 61 | engines: {node: '>=6.9.0'} 62 | 63 | '@babel/helper-validator-identifier@7.25.9': 64 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 65 | engines: {node: '>=6.9.0'} 66 | 67 | '@babel/parser@7.26.2': 68 | resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} 69 | engines: {node: '>=6.0.0'} 70 | hasBin: true 71 | 72 | '@babel/types@7.26.0': 73 | resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} 74 | engines: {node: '>=6.9.0'} 75 | 76 | '@cspotcode/source-map-support@0.8.1': 77 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 78 | engines: {node: '>=12'} 79 | 80 | '@esbuild/aix-ppc64@0.21.5': 81 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 82 | engines: {node: '>=12'} 83 | cpu: [ppc64] 84 | os: [aix] 85 | 86 | '@esbuild/android-arm64@0.21.5': 87 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 88 | engines: {node: '>=12'} 89 | cpu: [arm64] 90 | os: [android] 91 | 92 | '@esbuild/android-arm@0.21.5': 93 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 94 | engines: {node: '>=12'} 95 | cpu: [arm] 96 | os: [android] 97 | 98 | '@esbuild/android-x64@0.21.5': 99 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 100 | engines: {node: '>=12'} 101 | cpu: [x64] 102 | os: [android] 103 | 104 | '@esbuild/darwin-arm64@0.21.5': 105 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 106 | engines: {node: '>=12'} 107 | cpu: [arm64] 108 | os: [darwin] 109 | 110 | '@esbuild/darwin-x64@0.21.5': 111 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 112 | engines: {node: '>=12'} 113 | cpu: [x64] 114 | os: [darwin] 115 | 116 | '@esbuild/freebsd-arm64@0.21.5': 117 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 118 | engines: {node: '>=12'} 119 | cpu: [arm64] 120 | os: [freebsd] 121 | 122 | '@esbuild/freebsd-x64@0.21.5': 123 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 124 | engines: {node: '>=12'} 125 | cpu: [x64] 126 | os: [freebsd] 127 | 128 | '@esbuild/linux-arm64@0.21.5': 129 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 130 | engines: {node: '>=12'} 131 | cpu: [arm64] 132 | os: [linux] 133 | 134 | '@esbuild/linux-arm@0.21.5': 135 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 136 | engines: {node: '>=12'} 137 | cpu: [arm] 138 | os: [linux] 139 | 140 | '@esbuild/linux-ia32@0.21.5': 141 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 142 | engines: {node: '>=12'} 143 | cpu: [ia32] 144 | os: [linux] 145 | 146 | '@esbuild/linux-loong64@0.21.5': 147 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 148 | engines: {node: '>=12'} 149 | cpu: [loong64] 150 | os: [linux] 151 | 152 | '@esbuild/linux-mips64el@0.21.5': 153 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 154 | engines: {node: '>=12'} 155 | cpu: [mips64el] 156 | os: [linux] 157 | 158 | '@esbuild/linux-ppc64@0.21.5': 159 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 160 | engines: {node: '>=12'} 161 | cpu: [ppc64] 162 | os: [linux] 163 | 164 | '@esbuild/linux-riscv64@0.21.5': 165 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 166 | engines: {node: '>=12'} 167 | cpu: [riscv64] 168 | os: [linux] 169 | 170 | '@esbuild/linux-s390x@0.21.5': 171 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 172 | engines: {node: '>=12'} 173 | cpu: [s390x] 174 | os: [linux] 175 | 176 | '@esbuild/linux-x64@0.21.5': 177 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 178 | engines: {node: '>=12'} 179 | cpu: [x64] 180 | os: [linux] 181 | 182 | '@esbuild/netbsd-x64@0.21.5': 183 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 184 | engines: {node: '>=12'} 185 | cpu: [x64] 186 | os: [netbsd] 187 | 188 | '@esbuild/openbsd-x64@0.21.5': 189 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 190 | engines: {node: '>=12'} 191 | cpu: [x64] 192 | os: [openbsd] 193 | 194 | '@esbuild/sunos-x64@0.21.5': 195 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 196 | engines: {node: '>=12'} 197 | cpu: [x64] 198 | os: [sunos] 199 | 200 | '@esbuild/win32-arm64@0.21.5': 201 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 202 | engines: {node: '>=12'} 203 | cpu: [arm64] 204 | os: [win32] 205 | 206 | '@esbuild/win32-ia32@0.21.5': 207 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 208 | engines: {node: '>=12'} 209 | cpu: [ia32] 210 | os: [win32] 211 | 212 | '@esbuild/win32-x64@0.21.5': 213 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 214 | engines: {node: '>=12'} 215 | cpu: [x64] 216 | os: [win32] 217 | 218 | '@eslint-community/eslint-utils@4.4.1': 219 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} 220 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 221 | peerDependencies: 222 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 223 | 224 | '@eslint-community/regexpp@4.12.1': 225 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 226 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 227 | 228 | '@eslint/config-array@0.19.0': 229 | resolution: {integrity: sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==} 230 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 231 | 232 | '@eslint/core@0.9.0': 233 | resolution: {integrity: sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==} 234 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 235 | 236 | '@eslint/eslintrc@3.2.0': 237 | resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} 238 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 239 | 240 | '@eslint/js@9.15.0': 241 | resolution: {integrity: sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==} 242 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 243 | 244 | '@eslint/object-schema@2.1.4': 245 | resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} 246 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 247 | 248 | '@eslint/plugin-kit@0.2.3': 249 | resolution: {integrity: sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==} 250 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 251 | 252 | '@humanfs/core@0.19.1': 253 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 254 | engines: {node: '>=18.18.0'} 255 | 256 | '@humanfs/node@0.16.6': 257 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 258 | engines: {node: '>=18.18.0'} 259 | 260 | '@humanwhocodes/module-importer@1.0.1': 261 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 262 | engines: {node: '>=12.22'} 263 | 264 | '@humanwhocodes/retry@0.3.1': 265 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 266 | engines: {node: '>=18.18'} 267 | 268 | '@humanwhocodes/retry@0.4.1': 269 | resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} 270 | engines: {node: '>=18.18'} 271 | 272 | '@jridgewell/resolve-uri@3.1.2': 273 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 274 | engines: {node: '>=6.0.0'} 275 | 276 | '@jridgewell/sourcemap-codec@1.5.0': 277 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 278 | 279 | '@jridgewell/trace-mapping@0.3.9': 280 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 281 | 282 | '@microsoft/api-extractor-model@7.29.8': 283 | resolution: {integrity: sha512-t3Z/xcO6TRbMcnKGVMs4uMzv/gd5j0NhMiJIGjD4cJMeFJ1Hf8wnLSx37vxlRlL0GWlGJhnFgxvnaL6JlS+73g==} 284 | 285 | '@microsoft/api-extractor@7.47.11': 286 | resolution: {integrity: sha512-lrudfbPub5wzBhymfFtgZKuBvXxoSIAdrvS2UbHjoMT2TjIEddq6Z13pcve7A03BAouw0x8sW8G4txdgfiSwpQ==} 287 | hasBin: true 288 | 289 | '@microsoft/tsdoc-config@0.17.0': 290 | resolution: {integrity: sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==} 291 | 292 | '@microsoft/tsdoc@0.15.0': 293 | resolution: {integrity: sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==} 294 | 295 | '@nodelib/fs.scandir@2.1.5': 296 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 297 | engines: {node: '>= 8'} 298 | 299 | '@nodelib/fs.stat@2.0.5': 300 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 301 | engines: {node: '>= 8'} 302 | 303 | '@nodelib/fs.walk@1.2.8': 304 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 305 | engines: {node: '>= 8'} 306 | 307 | '@nolyfill/is-core-module@1.0.39': 308 | resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} 309 | engines: {node: '>=12.4.0'} 310 | 311 | '@polka/url@1.0.0-next.28': 312 | resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} 313 | 314 | '@rollup/pluginutils@5.1.3': 315 | resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} 316 | engines: {node: '>=14.0.0'} 317 | peerDependencies: 318 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 319 | peerDependenciesMeta: 320 | rollup: 321 | optional: true 322 | 323 | '@rollup/rollup-android-arm-eabi@4.27.3': 324 | resolution: {integrity: sha512-EzxVSkIvCFxUd4Mgm4xR9YXrcp976qVaHnqom/Tgm+vU79k4vV4eYTjmRvGfeoW8m9LVcsAy/lGjcgVegKEhLQ==} 325 | cpu: [arm] 326 | os: [android] 327 | 328 | '@rollup/rollup-android-arm64@4.27.3': 329 | resolution: {integrity: sha512-LJc5pDf1wjlt9o/Giaw9Ofl+k/vLUaYsE2zeQGH85giX2F+wn/Cg8b3c5CDP3qmVmeO5NzwVUzQQxwZvC2eQKw==} 330 | cpu: [arm64] 331 | os: [android] 332 | 333 | '@rollup/rollup-darwin-arm64@4.27.3': 334 | resolution: {integrity: sha512-OuRysZ1Mt7wpWJ+aYKblVbJWtVn3Cy52h8nLuNSzTqSesYw1EuN6wKp5NW/4eSre3mp12gqFRXOKTcN3AI3LqA==} 335 | cpu: [arm64] 336 | os: [darwin] 337 | 338 | '@rollup/rollup-darwin-x64@4.27.3': 339 | resolution: {integrity: sha512-xW//zjJMlJs2sOrCmXdB4d0uiilZsOdlGQIC/jjmMWT47lkLLoB1nsNhPUcnoqyi5YR6I4h+FjBpILxbEy8JRg==} 340 | cpu: [x64] 341 | os: [darwin] 342 | 343 | '@rollup/rollup-freebsd-arm64@4.27.3': 344 | resolution: {integrity: sha512-58E0tIcwZ+12nK1WiLzHOD8I0d0kdrY/+o7yFVPRHuVGY3twBwzwDdTIBGRxLmyjciMYl1B/U515GJy+yn46qw==} 345 | cpu: [arm64] 346 | os: [freebsd] 347 | 348 | '@rollup/rollup-freebsd-x64@4.27.3': 349 | resolution: {integrity: sha512-78fohrpcVwTLxg1ZzBMlwEimoAJmY6B+5TsyAZ3Vok7YabRBUvjYTsRXPTjGEvv/mfgVBepbW28OlMEz4w8wGA==} 350 | cpu: [x64] 351 | os: [freebsd] 352 | 353 | '@rollup/rollup-linux-arm-gnueabihf@4.27.3': 354 | resolution: {integrity: sha512-h2Ay79YFXyQi+QZKo3ISZDyKaVD7uUvukEHTOft7kh00WF9mxAaxZsNs3o/eukbeKuH35jBvQqrT61fzKfAB/Q==} 355 | cpu: [arm] 356 | os: [linux] 357 | 358 | '@rollup/rollup-linux-arm-musleabihf@4.27.3': 359 | resolution: {integrity: sha512-Sv2GWmrJfRY57urktVLQ0VKZjNZGogVtASAgosDZ1aUB+ykPxSi3X1nWORL5Jk0sTIIwQiPH7iE3BMi9zGWfkg==} 360 | cpu: [arm] 361 | os: [linux] 362 | 363 | '@rollup/rollup-linux-arm64-gnu@4.27.3': 364 | resolution: {integrity: sha512-FPoJBLsPW2bDNWjSrwNuTPUt30VnfM8GPGRoLCYKZpPx0xiIEdFip3dH6CqgoT0RnoGXptaNziM0WlKgBc+OWQ==} 365 | cpu: [arm64] 366 | os: [linux] 367 | 368 | '@rollup/rollup-linux-arm64-musl@4.27.3': 369 | resolution: {integrity: sha512-TKxiOvBorYq4sUpA0JT+Fkh+l+G9DScnG5Dqx7wiiqVMiRSkzTclP35pE6eQQYjP4Gc8yEkJGea6rz4qyWhp3g==} 370 | cpu: [arm64] 371 | os: [linux] 372 | 373 | '@rollup/rollup-linux-powerpc64le-gnu@4.27.3': 374 | resolution: {integrity: sha512-v2M/mPvVUKVOKITa0oCFksnQQ/TqGrT+yD0184/cWHIu0LoIuYHwox0Pm3ccXEz8cEQDLk6FPKd1CCm+PlsISw==} 375 | cpu: [ppc64] 376 | os: [linux] 377 | 378 | '@rollup/rollup-linux-riscv64-gnu@4.27.3': 379 | resolution: {integrity: sha512-LdrI4Yocb1a/tFVkzmOE5WyYRgEBOyEhWYJe4gsDWDiwnjYKjNs7PS6SGlTDB7maOHF4kxevsuNBl2iOcj3b4A==} 380 | cpu: [riscv64] 381 | os: [linux] 382 | 383 | '@rollup/rollup-linux-s390x-gnu@4.27.3': 384 | resolution: {integrity: sha512-d4wVu6SXij/jyiwPvI6C4KxdGzuZOvJ6y9VfrcleHTwo68fl8vZC5ZYHsCVPUi4tndCfMlFniWgwonQ5CUpQcA==} 385 | cpu: [s390x] 386 | os: [linux] 387 | 388 | '@rollup/rollup-linux-x64-gnu@4.27.3': 389 | resolution: {integrity: sha512-/6bn6pp1fsCGEY5n3yajmzZQAh+mW4QPItbiWxs69zskBzJuheb3tNynEjL+mKOsUSFK11X4LYF2BwwXnzWleA==} 390 | cpu: [x64] 391 | os: [linux] 392 | 393 | '@rollup/rollup-linux-x64-musl@4.27.3': 394 | resolution: {integrity: sha512-nBXOfJds8OzUT1qUreT/en3eyOXd2EH5b0wr2bVB5999qHdGKkzGzIyKYaKj02lXk6wpN71ltLIaQpu58YFBoQ==} 395 | cpu: [x64] 396 | os: [linux] 397 | 398 | '@rollup/rollup-win32-arm64-msvc@4.27.3': 399 | resolution: {integrity: sha512-ogfbEVQgIZOz5WPWXF2HVb6En+kWzScuxJo/WdQTqEgeyGkaa2ui5sQav9Zkr7bnNCLK48uxmmK0TySm22eiuw==} 400 | cpu: [arm64] 401 | os: [win32] 402 | 403 | '@rollup/rollup-win32-ia32-msvc@4.27.3': 404 | resolution: {integrity: sha512-ecE36ZBMLINqiTtSNQ1vzWc5pXLQHlf/oqGp/bSbi7iedcjcNb6QbCBNG73Euyy2C+l/fn8qKWEwxr+0SSfs3w==} 405 | cpu: [ia32] 406 | os: [win32] 407 | 408 | '@rollup/rollup-win32-x64-msvc@4.27.3': 409 | resolution: {integrity: sha512-vliZLrDmYKyaUoMzEbMTg2JkerfBjn03KmAw9CykO0Zzkzoyd7o3iZNam/TpyWNjNT+Cz2iO3P9Smv2wgrR+Eg==} 410 | cpu: [x64] 411 | os: [win32] 412 | 413 | '@rushstack/node-core-library@5.9.0': 414 | resolution: {integrity: sha512-MMsshEWkTbXqxqFxD4gcIUWQOCeBChlGczdZbHfqmNZQFLHB3yWxDFSMHFUdu2/OB9NUk7Awn5qRL+rws4HQNg==} 415 | peerDependencies: 416 | '@types/node': '*' 417 | peerDependenciesMeta: 418 | '@types/node': 419 | optional: true 420 | 421 | '@rushstack/rig-package@0.5.3': 422 | resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==} 423 | 424 | '@rushstack/terminal@0.14.2': 425 | resolution: {integrity: sha512-2fC1wqu1VCExKC0/L+0noVcFQEXEnoBOtCIex1TOjBzEDWcw8KzJjjj7aTP6mLxepG0XIyn9OufeFb6SFsa+sg==} 426 | peerDependencies: 427 | '@types/node': '*' 428 | peerDependenciesMeta: 429 | '@types/node': 430 | optional: true 431 | 432 | '@rushstack/ts-command-line@4.23.0': 433 | resolution: {integrity: sha512-jYREBtsxduPV6ptNq8jOKp9+yx0ld1Tb/Tkdnlj8gTjazl1sF3DwX2VbluyYrNd0meWIL0bNeer7WDf5tKFjaQ==} 434 | 435 | '@tsconfig/node10@1.0.11': 436 | resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} 437 | 438 | '@tsconfig/node12@1.0.11': 439 | resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} 440 | 441 | '@tsconfig/node14@1.0.3': 442 | resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} 443 | 444 | '@tsconfig/node16@1.0.4': 445 | resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} 446 | 447 | '@types/argparse@1.0.38': 448 | resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} 449 | 450 | '@types/estree@1.0.6': 451 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 452 | 453 | '@types/json-schema@7.0.15': 454 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 455 | 456 | '@types/json5@0.0.29': 457 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 458 | 459 | '@types/node@22.9.0': 460 | resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} 461 | 462 | '@typescript-eslint/eslint-plugin@8.15.0': 463 | resolution: {integrity: sha512-+zkm9AR1Ds9uLWN3fkoeXgFppaQ+uEVtfOV62dDmsy9QCNqlRHWNEck4yarvRNrvRcHQLGfqBNui3cimoz8XAg==} 464 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 465 | peerDependencies: 466 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 467 | eslint: ^8.57.0 || ^9.0.0 468 | typescript: '*' 469 | peerDependenciesMeta: 470 | typescript: 471 | optional: true 472 | 473 | '@typescript-eslint/parser@8.15.0': 474 | resolution: {integrity: sha512-7n59qFpghG4uazrF9qtGKBZXn7Oz4sOMm8dwNWDQY96Xlm2oX67eipqcblDj+oY1lLCbf1oltMZFpUso66Kl1A==} 475 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 476 | peerDependencies: 477 | eslint: ^8.57.0 || ^9.0.0 478 | typescript: '*' 479 | peerDependenciesMeta: 480 | typescript: 481 | optional: true 482 | 483 | '@typescript-eslint/rule-tester@8.15.0': 484 | resolution: {integrity: sha512-G9lQX5jX64wrP5nI1nAEBj48dgyYFH8f0pjruQD9byK0Ln2cOyZPMt51rnzsm5ru8Nc7exV5SYyRppEhzaqSfg==} 485 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 486 | peerDependencies: 487 | eslint: ^8.57.0 || ^9.0.0 488 | 489 | '@typescript-eslint/scope-manager@8.15.0': 490 | resolution: {integrity: sha512-QRGy8ADi4J7ii95xz4UoiymmmMd/zuy9azCaamnZ3FM8T5fZcex8UfJcjkiEZjJSztKfEBe3dZ5T/5RHAmw2mA==} 491 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 492 | 493 | '@typescript-eslint/type-utils@8.15.0': 494 | resolution: {integrity: sha512-UU6uwXDoI3JGSXmcdnP5d8Fffa2KayOhUUqr/AiBnG1Gl7+7ut/oyagVeSkh7bxQ0zSXV9ptRh/4N15nkCqnpw==} 495 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 496 | peerDependencies: 497 | eslint: ^8.57.0 || ^9.0.0 498 | typescript: '*' 499 | peerDependenciesMeta: 500 | typescript: 501 | optional: true 502 | 503 | '@typescript-eslint/types@8.15.0': 504 | resolution: {integrity: sha512-n3Gt8Y/KyJNe0S3yDCD2RVKrHBC4gTUcLTebVBXacPy091E6tNspFLKRXlk3hwT4G55nfr1n2AdFqi/XMxzmPQ==} 505 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 506 | 507 | '@typescript-eslint/typescript-estree@8.15.0': 508 | resolution: {integrity: sha512-1eMp2JgNec/niZsR7ioFBlsh/Fk0oJbhaqO0jRyQBMgkz7RrFfkqF9lYYmBoGBaSiLnu8TAPQTwoTUiSTUW9dg==} 509 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 510 | peerDependencies: 511 | typescript: '*' 512 | peerDependenciesMeta: 513 | typescript: 514 | optional: true 515 | 516 | '@typescript-eslint/utils@8.15.0': 517 | resolution: {integrity: sha512-k82RI9yGhr0QM3Dnq+egEpz9qB6Un+WLYhmoNcvl8ltMEededhh7otBVVIDDsEEttauwdY/hQoSsOv13lxrFzQ==} 518 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 519 | peerDependencies: 520 | eslint: ^8.57.0 || ^9.0.0 521 | typescript: '*' 522 | peerDependenciesMeta: 523 | typescript: 524 | optional: true 525 | 526 | '@typescript-eslint/visitor-keys@8.15.0': 527 | resolution: {integrity: sha512-h8vYOulWec9LhpwfAdZf2bjr8xIp0KNKnpgqSz0qqYYKAW/QZKw3ktRndbiAtUz4acH4QLQavwZBYCc0wulA/Q==} 528 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 529 | 530 | '@vitest/expect@2.1.5': 531 | resolution: {integrity: sha512-nZSBTW1XIdpZvEJyoP/Sy8fUg0b8od7ZpGDkTUcfJ7wz/VoZAFzFfLyxVxGFhUjJzhYqSbIpfMtl/+k/dpWa3Q==} 532 | 533 | '@vitest/mocker@2.1.5': 534 | resolution: {integrity: sha512-XYW6l3UuBmitWqSUXTNXcVBUCRytDogBsWuNXQijc00dtnU/9OqpXWp4OJroVrad/gLIomAq9aW8yWDBtMthhQ==} 535 | peerDependencies: 536 | msw: ^2.4.9 537 | vite: ^5.0.0 538 | peerDependenciesMeta: 539 | msw: 540 | optional: true 541 | vite: 542 | optional: true 543 | 544 | '@vitest/pretty-format@2.1.5': 545 | resolution: {integrity: sha512-4ZOwtk2bqG5Y6xRGHcveZVr+6txkH7M2e+nPFd6guSoN638v/1XQ0K06eOpi0ptVU/2tW/pIU4IoPotY/GZ9fw==} 546 | 547 | '@vitest/runner@2.1.5': 548 | resolution: {integrity: sha512-pKHKy3uaUdh7X6p1pxOkgkVAFW7r2I818vHDthYLvUyjRfkKOU6P45PztOch4DZarWQne+VOaIMwA/erSSpB9g==} 549 | 550 | '@vitest/snapshot@2.1.5': 551 | resolution: {integrity: sha512-zmYw47mhfdfnYbuhkQvkkzYroXUumrwWDGlMjpdUr4jBd3HZiV2w7CQHj+z7AAS4VOtWxI4Zt4bWt4/sKcoIjg==} 552 | 553 | '@vitest/spy@2.1.5': 554 | resolution: {integrity: sha512-aWZF3P0r3w6DiYTVskOYuhBc7EMc3jvn1TkBg8ttylFFRqNN2XGD7V5a4aQdk6QiUzZQ4klNBSpCLJgWNdIiNw==} 555 | 556 | '@vitest/ui@2.1.5': 557 | resolution: {integrity: sha512-ERgKkDMTfngrZip6VG5h8L9B5D0AH/4+bga4yR1UzGH7c2cxv3LWogw2Dvuwr9cP3/iKDHYys7kIFLDKpxORTg==} 558 | peerDependencies: 559 | vitest: 2.1.5 560 | 561 | '@vitest/utils@2.1.5': 562 | resolution: {integrity: sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==} 563 | 564 | '@volar/language-core@2.4.10': 565 | resolution: {integrity: sha512-hG3Z13+nJmGaT+fnQzAkS0hjJRa2FCeqZt6Bd+oGNhUkQ+mTFsDETg5rqUTxyzIh5pSOGY7FHCWUS8G82AzLCA==} 566 | 567 | '@volar/source-map@2.4.10': 568 | resolution: {integrity: sha512-OCV+b5ihV0RF3A7vEvNyHPi4G4kFa6ukPmyVocmqm5QzOd8r5yAtiNvaPEjl8dNvgC/lj4JPryeeHLdXd62rWA==} 569 | 570 | '@volar/typescript@2.4.10': 571 | resolution: {integrity: sha512-F8ZtBMhSXyYKuBfGpYwqA5rsONnOwAVvjyE7KPYJ7wgZqo2roASqNWUnianOomJX5u1cxeRooHV59N0PhvEOgw==} 572 | 573 | '@vue/compiler-core@3.5.13': 574 | resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} 575 | 576 | '@vue/compiler-dom@3.5.13': 577 | resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} 578 | 579 | '@vue/compiler-vue2@2.7.16': 580 | resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} 581 | 582 | '@vue/language-core@2.1.6': 583 | resolution: {integrity: sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==} 584 | peerDependencies: 585 | typescript: '*' 586 | peerDependenciesMeta: 587 | typescript: 588 | optional: true 589 | 590 | '@vue/shared@3.5.13': 591 | resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} 592 | 593 | acorn-jsx@5.3.2: 594 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 595 | peerDependencies: 596 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 597 | 598 | acorn-walk@8.3.4: 599 | resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} 600 | engines: {node: '>=0.4.0'} 601 | 602 | acorn@8.14.0: 603 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 604 | engines: {node: '>=0.4.0'} 605 | hasBin: true 606 | 607 | ajv-draft-04@1.0.0: 608 | resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} 609 | peerDependencies: 610 | ajv: ^8.5.0 611 | peerDependenciesMeta: 612 | ajv: 613 | optional: true 614 | 615 | ajv-formats@3.0.1: 616 | resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} 617 | peerDependencies: 618 | ajv: ^8.0.0 619 | peerDependenciesMeta: 620 | ajv: 621 | optional: true 622 | 623 | ajv@6.12.6: 624 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 625 | 626 | ajv@8.12.0: 627 | resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} 628 | 629 | ajv@8.13.0: 630 | resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} 631 | 632 | ansi-styles@4.3.0: 633 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 634 | engines: {node: '>=8'} 635 | 636 | arg@4.1.3: 637 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} 638 | 639 | argparse@1.0.10: 640 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 641 | 642 | argparse@2.0.1: 643 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 644 | 645 | array-buffer-byte-length@1.0.1: 646 | resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} 647 | engines: {node: '>= 0.4'} 648 | 649 | array-includes@3.1.8: 650 | resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} 651 | engines: {node: '>= 0.4'} 652 | 653 | array.prototype.findlastindex@1.2.5: 654 | resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} 655 | engines: {node: '>= 0.4'} 656 | 657 | array.prototype.flat@1.3.2: 658 | resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} 659 | engines: {node: '>= 0.4'} 660 | 661 | array.prototype.flatmap@1.3.2: 662 | resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} 663 | engines: {node: '>= 0.4'} 664 | 665 | arraybuffer.prototype.slice@1.0.3: 666 | resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} 667 | engines: {node: '>= 0.4'} 668 | 669 | assertion-error@2.0.1: 670 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 671 | engines: {node: '>=12'} 672 | 673 | available-typed-arrays@1.0.7: 674 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 675 | engines: {node: '>= 0.4'} 676 | 677 | balanced-match@1.0.2: 678 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 679 | 680 | brace-expansion@1.1.11: 681 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 682 | 683 | brace-expansion@2.0.1: 684 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 685 | 686 | braces@3.0.3: 687 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 688 | engines: {node: '>=8'} 689 | 690 | cac@6.7.14: 691 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 692 | engines: {node: '>=8'} 693 | 694 | call-bind@1.0.7: 695 | resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} 696 | engines: {node: '>= 0.4'} 697 | 698 | callsites@3.1.0: 699 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 700 | engines: {node: '>=6'} 701 | 702 | chai@5.1.2: 703 | resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} 704 | engines: {node: '>=12'} 705 | 706 | chalk@4.1.2: 707 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 708 | engines: {node: '>=10'} 709 | 710 | check-error@2.1.1: 711 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 712 | engines: {node: '>= 16'} 713 | 714 | color-convert@2.0.1: 715 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 716 | engines: {node: '>=7.0.0'} 717 | 718 | color-name@1.1.4: 719 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 720 | 721 | compare-versions@6.1.1: 722 | resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} 723 | 724 | computeds@0.0.1: 725 | resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} 726 | 727 | concat-map@0.0.1: 728 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 729 | 730 | confbox@0.1.8: 731 | resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} 732 | 733 | create-require@1.1.1: 734 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} 735 | 736 | cross-spawn@7.0.6: 737 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 738 | engines: {node: '>= 8'} 739 | 740 | data-view-buffer@1.0.1: 741 | resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} 742 | engines: {node: '>= 0.4'} 743 | 744 | data-view-byte-length@1.0.1: 745 | resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} 746 | engines: {node: '>= 0.4'} 747 | 748 | data-view-byte-offset@1.0.0: 749 | resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} 750 | engines: {node: '>= 0.4'} 751 | 752 | de-indent@1.0.2: 753 | resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} 754 | 755 | debug@3.2.7: 756 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 757 | peerDependencies: 758 | supports-color: '*' 759 | peerDependenciesMeta: 760 | supports-color: 761 | optional: true 762 | 763 | debug@4.3.7: 764 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 765 | engines: {node: '>=6.0'} 766 | peerDependencies: 767 | supports-color: '*' 768 | peerDependenciesMeta: 769 | supports-color: 770 | optional: true 771 | 772 | deep-eql@5.0.2: 773 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 774 | engines: {node: '>=6'} 775 | 776 | deep-is@0.1.4: 777 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 778 | 779 | define-data-property@1.1.4: 780 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 781 | engines: {node: '>= 0.4'} 782 | 783 | define-properties@1.2.1: 784 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 785 | engines: {node: '>= 0.4'} 786 | 787 | diff@4.0.2: 788 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 789 | engines: {node: '>=0.3.1'} 790 | 791 | doctrine@2.1.0: 792 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 793 | engines: {node: '>=0.10.0'} 794 | 795 | doctrine@3.0.0: 796 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 797 | engines: {node: '>=6.0.0'} 798 | 799 | enhanced-resolve@5.17.1: 800 | resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} 801 | engines: {node: '>=10.13.0'} 802 | 803 | entities@4.5.0: 804 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 805 | engines: {node: '>=0.12'} 806 | 807 | es-abstract@1.23.5: 808 | resolution: {integrity: sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==} 809 | engines: {node: '>= 0.4'} 810 | 811 | es-define-property@1.0.0: 812 | resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} 813 | engines: {node: '>= 0.4'} 814 | 815 | es-errors@1.3.0: 816 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 817 | engines: {node: '>= 0.4'} 818 | 819 | es-module-lexer@1.5.4: 820 | resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} 821 | 822 | es-object-atoms@1.0.0: 823 | resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} 824 | engines: {node: '>= 0.4'} 825 | 826 | es-set-tostringtag@2.0.3: 827 | resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} 828 | engines: {node: '>= 0.4'} 829 | 830 | es-shim-unscopables@1.0.2: 831 | resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} 832 | 833 | es-to-primitive@1.2.1: 834 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 835 | engines: {node: '>= 0.4'} 836 | 837 | esbuild@0.21.5: 838 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 839 | engines: {node: '>=12'} 840 | hasBin: true 841 | 842 | escape-string-regexp@4.0.0: 843 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 844 | engines: {node: '>=10'} 845 | 846 | eslint-import-resolver-alias@1.1.2: 847 | resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} 848 | engines: {node: '>= 4'} 849 | peerDependencies: 850 | eslint-plugin-import: '>=1.4.0' 851 | 852 | eslint-import-resolver-node@0.3.9: 853 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 854 | 855 | eslint-import-resolver-typescript@3.6.3: 856 | resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} 857 | engines: {node: ^14.18.0 || >=16.0.0} 858 | peerDependencies: 859 | eslint: '*' 860 | eslint-plugin-import: '*' 861 | eslint-plugin-import-x: '*' 862 | peerDependenciesMeta: 863 | eslint-plugin-import: 864 | optional: true 865 | eslint-plugin-import-x: 866 | optional: true 867 | 868 | eslint-module-utils@2.12.0: 869 | resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} 870 | engines: {node: '>=4'} 871 | peerDependencies: 872 | '@typescript-eslint/parser': '*' 873 | eslint: '*' 874 | eslint-import-resolver-node: '*' 875 | eslint-import-resolver-typescript: '*' 876 | eslint-import-resolver-webpack: '*' 877 | peerDependenciesMeta: 878 | '@typescript-eslint/parser': 879 | optional: true 880 | eslint: 881 | optional: true 882 | eslint-import-resolver-node: 883 | optional: true 884 | eslint-import-resolver-typescript: 885 | optional: true 886 | eslint-import-resolver-webpack: 887 | optional: true 888 | 889 | eslint-plugin-import-x@4.4.2: 890 | resolution: {integrity: sha512-mDRXPSLQ0UQZQw91QdG4/qZT6hgeW2MJTczAbgPseUZuPEtIjjdPOolXroRkulnOn3fzj6gNgvk+wchMJiHElg==} 891 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 892 | peerDependencies: 893 | eslint: ^8.57.0 || ^9.0.0 894 | 895 | eslint-plugin-import@2.29.1: 896 | resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} 897 | engines: {node: '>=4'} 898 | peerDependencies: 899 | '@typescript-eslint/parser': '*' 900 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 901 | peerDependenciesMeta: 902 | '@typescript-eslint/parser': 903 | optional: true 904 | 905 | 'eslint-plugin-sort-keys-custom-order@file:': 906 | resolution: {directory: '', type: directory} 907 | peerDependencies: 908 | '@typescript-eslint/utils': ^8.0.0 909 | eslint: ^9.0.0 910 | 911 | eslint-scope@8.2.0: 912 | resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} 913 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 914 | 915 | eslint-visitor-keys@3.4.3: 916 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 917 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 918 | 919 | eslint-visitor-keys@4.2.0: 920 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 921 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 922 | 923 | eslint@9.15.0: 924 | resolution: {integrity: sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==} 925 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 926 | hasBin: true 927 | peerDependencies: 928 | jiti: '*' 929 | peerDependenciesMeta: 930 | jiti: 931 | optional: true 932 | 933 | espree@10.3.0: 934 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 935 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 936 | 937 | esquery@1.6.0: 938 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 939 | engines: {node: '>=0.10'} 940 | 941 | esrecurse@4.3.0: 942 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 943 | engines: {node: '>=4.0'} 944 | 945 | estraverse@5.3.0: 946 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 947 | engines: {node: '>=4.0'} 948 | 949 | estree-walker@2.0.2: 950 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 951 | 952 | estree-walker@3.0.3: 953 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 954 | 955 | esutils@2.0.3: 956 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 957 | engines: {node: '>=0.10.0'} 958 | 959 | expect-type@1.1.0: 960 | resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} 961 | engines: {node: '>=12.0.0'} 962 | 963 | fast-deep-equal@3.1.3: 964 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 965 | 966 | fast-glob@3.3.2: 967 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 968 | engines: {node: '>=8.6.0'} 969 | 970 | fast-json-stable-stringify@2.1.0: 971 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 972 | 973 | fast-levenshtein@2.0.6: 974 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 975 | 976 | fastq@1.17.1: 977 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 978 | 979 | fdir@6.4.2: 980 | resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} 981 | peerDependencies: 982 | picomatch: ^3 || ^4 983 | peerDependenciesMeta: 984 | picomatch: 985 | optional: true 986 | 987 | fflate@0.8.2: 988 | resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} 989 | 990 | file-entry-cache@8.0.0: 991 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 992 | engines: {node: '>=16.0.0'} 993 | 994 | fill-range@7.1.1: 995 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 996 | engines: {node: '>=8'} 997 | 998 | find-up@5.0.0: 999 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1000 | engines: {node: '>=10'} 1001 | 1002 | flat-cache@4.0.1: 1003 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 1004 | engines: {node: '>=16'} 1005 | 1006 | flatted@3.3.2: 1007 | resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} 1008 | 1009 | for-each@0.3.3: 1010 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1011 | 1012 | fs-extra@7.0.1: 1013 | resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} 1014 | engines: {node: '>=6 <7 || >=8'} 1015 | 1016 | fsevents@2.3.3: 1017 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1018 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1019 | os: [darwin] 1020 | 1021 | function-bind@1.1.2: 1022 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1023 | 1024 | function.prototype.name@1.1.6: 1025 | resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} 1026 | engines: {node: '>= 0.4'} 1027 | 1028 | functions-have-names@1.2.3: 1029 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1030 | 1031 | get-intrinsic@1.2.4: 1032 | resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} 1033 | engines: {node: '>= 0.4'} 1034 | 1035 | get-symbol-description@1.0.2: 1036 | resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} 1037 | engines: {node: '>= 0.4'} 1038 | 1039 | get-tsconfig@4.8.1: 1040 | resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} 1041 | 1042 | glob-parent@5.1.2: 1043 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1044 | engines: {node: '>= 6'} 1045 | 1046 | glob-parent@6.0.2: 1047 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1048 | engines: {node: '>=10.13.0'} 1049 | 1050 | globals@14.0.0: 1051 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 1052 | engines: {node: '>=18'} 1053 | 1054 | globalthis@1.0.4: 1055 | resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 1056 | engines: {node: '>= 0.4'} 1057 | 1058 | gopd@1.0.1: 1059 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1060 | 1061 | graceful-fs@4.2.11: 1062 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1063 | 1064 | graphemer@1.4.0: 1065 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1066 | 1067 | has-bigints@1.0.2: 1068 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1069 | 1070 | has-flag@4.0.0: 1071 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1072 | engines: {node: '>=8'} 1073 | 1074 | has-property-descriptors@1.0.2: 1075 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 1076 | 1077 | has-proto@1.0.3: 1078 | resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} 1079 | engines: {node: '>= 0.4'} 1080 | 1081 | has-symbols@1.0.3: 1082 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1083 | engines: {node: '>= 0.4'} 1084 | 1085 | has-tostringtag@1.0.2: 1086 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 1087 | engines: {node: '>= 0.4'} 1088 | 1089 | hasown@2.0.2: 1090 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 1091 | engines: {node: '>= 0.4'} 1092 | 1093 | he@1.2.0: 1094 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} 1095 | hasBin: true 1096 | 1097 | ignore@5.3.2: 1098 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1099 | engines: {node: '>= 4'} 1100 | 1101 | import-fresh@3.3.0: 1102 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1103 | engines: {node: '>=6'} 1104 | 1105 | import-lazy@4.0.0: 1106 | resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} 1107 | engines: {node: '>=8'} 1108 | 1109 | imurmurhash@0.1.4: 1110 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1111 | engines: {node: '>=0.8.19'} 1112 | 1113 | internal-slot@1.0.7: 1114 | resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} 1115 | engines: {node: '>= 0.4'} 1116 | 1117 | is-array-buffer@3.0.4: 1118 | resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} 1119 | engines: {node: '>= 0.4'} 1120 | 1121 | is-bigint@1.0.4: 1122 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1123 | 1124 | is-boolean-object@1.1.2: 1125 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1126 | engines: {node: '>= 0.4'} 1127 | 1128 | is-bun-module@1.2.1: 1129 | resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==} 1130 | 1131 | is-callable@1.2.7: 1132 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1133 | engines: {node: '>= 0.4'} 1134 | 1135 | is-core-module@2.15.1: 1136 | resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} 1137 | engines: {node: '>= 0.4'} 1138 | 1139 | is-data-view@1.0.1: 1140 | resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} 1141 | engines: {node: '>= 0.4'} 1142 | 1143 | is-date-object@1.0.5: 1144 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1145 | engines: {node: '>= 0.4'} 1146 | 1147 | is-extglob@2.1.1: 1148 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1149 | engines: {node: '>=0.10.0'} 1150 | 1151 | is-glob@4.0.3: 1152 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1153 | engines: {node: '>=0.10.0'} 1154 | 1155 | is-negative-zero@2.0.3: 1156 | resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} 1157 | engines: {node: '>= 0.4'} 1158 | 1159 | is-number-object@1.0.7: 1160 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1161 | engines: {node: '>= 0.4'} 1162 | 1163 | is-number@7.0.0: 1164 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1165 | engines: {node: '>=0.12.0'} 1166 | 1167 | is-regex@1.1.4: 1168 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1169 | engines: {node: '>= 0.4'} 1170 | 1171 | is-shared-array-buffer@1.0.3: 1172 | resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} 1173 | engines: {node: '>= 0.4'} 1174 | 1175 | is-string@1.0.7: 1176 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1177 | engines: {node: '>= 0.4'} 1178 | 1179 | is-symbol@1.0.4: 1180 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1181 | engines: {node: '>= 0.4'} 1182 | 1183 | is-typed-array@1.1.13: 1184 | resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} 1185 | engines: {node: '>= 0.4'} 1186 | 1187 | is-weakref@1.0.2: 1188 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1189 | 1190 | isarray@2.0.5: 1191 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1192 | 1193 | isexe@2.0.0: 1194 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1195 | 1196 | jju@1.4.0: 1197 | resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} 1198 | 1199 | js-yaml@4.1.0: 1200 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1201 | hasBin: true 1202 | 1203 | json-buffer@3.0.1: 1204 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1205 | 1206 | json-schema-traverse@0.4.1: 1207 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1208 | 1209 | json-schema-traverse@1.0.0: 1210 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} 1211 | 1212 | json-stable-stringify-without-jsonify@1.0.1: 1213 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1214 | 1215 | json5@1.0.2: 1216 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 1217 | hasBin: true 1218 | 1219 | jsonfile@4.0.0: 1220 | resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} 1221 | 1222 | keyv@4.5.4: 1223 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1224 | 1225 | kolorist@1.8.0: 1226 | resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} 1227 | 1228 | levn@0.4.1: 1229 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1230 | engines: {node: '>= 0.8.0'} 1231 | 1232 | local-pkg@0.5.1: 1233 | resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} 1234 | engines: {node: '>=14'} 1235 | 1236 | locate-path@6.0.0: 1237 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1238 | engines: {node: '>=10'} 1239 | 1240 | lodash.merge@4.6.2: 1241 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1242 | 1243 | lodash@4.17.21: 1244 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1245 | 1246 | loupe@3.1.2: 1247 | resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} 1248 | 1249 | lru-cache@6.0.0: 1250 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1251 | engines: {node: '>=10'} 1252 | 1253 | magic-string@0.30.13: 1254 | resolution: {integrity: sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==} 1255 | 1256 | make-error@1.3.6: 1257 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 1258 | 1259 | merge2@1.4.1: 1260 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1261 | engines: {node: '>= 8'} 1262 | 1263 | micromatch@4.0.8: 1264 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1265 | engines: {node: '>=8.6'} 1266 | 1267 | minimatch@3.0.8: 1268 | resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} 1269 | 1270 | minimatch@3.1.2: 1271 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1272 | 1273 | minimatch@9.0.5: 1274 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1275 | engines: {node: '>=16 || 14 >=14.17'} 1276 | 1277 | minimist@1.2.8: 1278 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1279 | 1280 | mlly@1.7.3: 1281 | resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==} 1282 | 1283 | mrmime@2.0.0: 1284 | resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} 1285 | engines: {node: '>=10'} 1286 | 1287 | ms@2.1.3: 1288 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1289 | 1290 | muggle-string@0.4.1: 1291 | resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} 1292 | 1293 | nanoid@3.3.7: 1294 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1295 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1296 | hasBin: true 1297 | 1298 | natural-compare@1.4.0: 1299 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1300 | 1301 | object-inspect@1.13.3: 1302 | resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} 1303 | engines: {node: '>= 0.4'} 1304 | 1305 | object-keys@1.1.1: 1306 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1307 | engines: {node: '>= 0.4'} 1308 | 1309 | object.assign@4.1.5: 1310 | resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} 1311 | engines: {node: '>= 0.4'} 1312 | 1313 | object.fromentries@2.0.8: 1314 | resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} 1315 | engines: {node: '>= 0.4'} 1316 | 1317 | object.groupby@1.0.3: 1318 | resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} 1319 | engines: {node: '>= 0.4'} 1320 | 1321 | object.values@1.2.0: 1322 | resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} 1323 | engines: {node: '>= 0.4'} 1324 | 1325 | optionator@0.9.4: 1326 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1327 | engines: {node: '>= 0.8.0'} 1328 | 1329 | p-limit@3.1.0: 1330 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1331 | engines: {node: '>=10'} 1332 | 1333 | p-locate@5.0.0: 1334 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1335 | engines: {node: '>=10'} 1336 | 1337 | parent-module@1.0.1: 1338 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1339 | engines: {node: '>=6'} 1340 | 1341 | path-browserify@1.0.1: 1342 | resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} 1343 | 1344 | path-exists@4.0.0: 1345 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1346 | engines: {node: '>=8'} 1347 | 1348 | path-key@3.1.1: 1349 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1350 | engines: {node: '>=8'} 1351 | 1352 | path-parse@1.0.7: 1353 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1354 | 1355 | pathe@1.1.2: 1356 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} 1357 | 1358 | pathval@2.0.0: 1359 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} 1360 | engines: {node: '>= 14.16'} 1361 | 1362 | picocolors@1.1.1: 1363 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1364 | 1365 | picomatch@2.3.1: 1366 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1367 | engines: {node: '>=8.6'} 1368 | 1369 | picomatch@4.0.2: 1370 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 1371 | engines: {node: '>=12'} 1372 | 1373 | pkg-types@1.2.1: 1374 | resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} 1375 | 1376 | possible-typed-array-names@1.0.0: 1377 | resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} 1378 | engines: {node: '>= 0.4'} 1379 | 1380 | postcss@8.4.49: 1381 | resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} 1382 | engines: {node: ^10 || ^12 || >=14} 1383 | 1384 | prelude-ls@1.2.1: 1385 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1386 | engines: {node: '>= 0.8.0'} 1387 | 1388 | punycode@2.3.1: 1389 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1390 | engines: {node: '>=6'} 1391 | 1392 | queue-microtask@1.2.3: 1393 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1394 | 1395 | regexp.prototype.flags@1.5.3: 1396 | resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} 1397 | engines: {node: '>= 0.4'} 1398 | 1399 | require-from-string@2.0.2: 1400 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} 1401 | engines: {node: '>=0.10.0'} 1402 | 1403 | resolve-from@4.0.0: 1404 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1405 | engines: {node: '>=4'} 1406 | 1407 | resolve-pkg-maps@1.0.0: 1408 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1409 | 1410 | resolve@1.22.8: 1411 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1412 | hasBin: true 1413 | 1414 | reusify@1.0.4: 1415 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1416 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1417 | 1418 | rollup@4.27.3: 1419 | resolution: {integrity: sha512-SLsCOnlmGt9VoZ9Ek8yBK8tAdmPHeppkw+Xa7yDlCEhDTvwYei03JlWo1fdc7YTfLZ4tD8riJCUyAgTbszk1fQ==} 1420 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1421 | hasBin: true 1422 | 1423 | run-parallel@1.2.0: 1424 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1425 | 1426 | safe-array-concat@1.1.2: 1427 | resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} 1428 | engines: {node: '>=0.4'} 1429 | 1430 | safe-regex-test@1.0.3: 1431 | resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} 1432 | engines: {node: '>= 0.4'} 1433 | 1434 | semver@6.3.1: 1435 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1436 | hasBin: true 1437 | 1438 | semver@7.5.4: 1439 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 1440 | engines: {node: '>=10'} 1441 | hasBin: true 1442 | 1443 | semver@7.6.3: 1444 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1445 | engines: {node: '>=10'} 1446 | hasBin: true 1447 | 1448 | set-function-length@1.2.2: 1449 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 1450 | engines: {node: '>= 0.4'} 1451 | 1452 | set-function-name@2.0.2: 1453 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 1454 | engines: {node: '>= 0.4'} 1455 | 1456 | shebang-command@2.0.0: 1457 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1458 | engines: {node: '>=8'} 1459 | 1460 | shebang-regex@3.0.0: 1461 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1462 | engines: {node: '>=8'} 1463 | 1464 | side-channel@1.0.6: 1465 | resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} 1466 | engines: {node: '>= 0.4'} 1467 | 1468 | siginfo@2.0.0: 1469 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1470 | 1471 | sirv@3.0.0: 1472 | resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} 1473 | engines: {node: '>=18'} 1474 | 1475 | source-map-js@1.2.1: 1476 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1477 | engines: {node: '>=0.10.0'} 1478 | 1479 | source-map@0.6.1: 1480 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1481 | engines: {node: '>=0.10.0'} 1482 | 1483 | sprintf-js@1.0.3: 1484 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 1485 | 1486 | stable-hash@0.0.4: 1487 | resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} 1488 | 1489 | stackback@0.0.2: 1490 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1491 | 1492 | std-env@3.8.0: 1493 | resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} 1494 | 1495 | string-argv@0.3.2: 1496 | resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} 1497 | engines: {node: '>=0.6.19'} 1498 | 1499 | string.prototype.trim@1.2.9: 1500 | resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} 1501 | engines: {node: '>= 0.4'} 1502 | 1503 | string.prototype.trimend@1.0.8: 1504 | resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} 1505 | 1506 | string.prototype.trimstart@1.0.8: 1507 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} 1508 | engines: {node: '>= 0.4'} 1509 | 1510 | strip-bom@3.0.0: 1511 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1512 | engines: {node: '>=4'} 1513 | 1514 | strip-json-comments@3.1.1: 1515 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1516 | engines: {node: '>=8'} 1517 | 1518 | supports-color@7.2.0: 1519 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1520 | engines: {node: '>=8'} 1521 | 1522 | supports-color@8.1.1: 1523 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 1524 | engines: {node: '>=10'} 1525 | 1526 | supports-preserve-symlinks-flag@1.0.0: 1527 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1528 | engines: {node: '>= 0.4'} 1529 | 1530 | tapable@2.2.1: 1531 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 1532 | engines: {node: '>=6'} 1533 | 1534 | tinybench@2.9.0: 1535 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 1536 | 1537 | tinyexec@0.3.1: 1538 | resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} 1539 | 1540 | tinyglobby@0.2.10: 1541 | resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} 1542 | engines: {node: '>=12.0.0'} 1543 | 1544 | tinypool@1.0.2: 1545 | resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} 1546 | engines: {node: ^18.0.0 || >=20.0.0} 1547 | 1548 | tinyrainbow@1.2.0: 1549 | resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} 1550 | engines: {node: '>=14.0.0'} 1551 | 1552 | tinyspy@3.0.2: 1553 | resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} 1554 | engines: {node: '>=14.0.0'} 1555 | 1556 | to-regex-range@5.0.1: 1557 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1558 | engines: {node: '>=8.0'} 1559 | 1560 | totalist@3.0.1: 1561 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 1562 | engines: {node: '>=6'} 1563 | 1564 | ts-api-utils@1.4.0: 1565 | resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} 1566 | engines: {node: '>=16'} 1567 | peerDependencies: 1568 | typescript: '>=4.2.0' 1569 | 1570 | ts-node@10.9.2: 1571 | resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} 1572 | hasBin: true 1573 | peerDependencies: 1574 | '@swc/core': '>=1.2.50' 1575 | '@swc/wasm': '>=1.2.50' 1576 | '@types/node': '*' 1577 | typescript: '>=2.7' 1578 | peerDependenciesMeta: 1579 | '@swc/core': 1580 | optional: true 1581 | '@swc/wasm': 1582 | optional: true 1583 | 1584 | tsconfig-paths@3.15.0: 1585 | resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} 1586 | 1587 | tslib@2.8.1: 1588 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1589 | 1590 | type-check@0.4.0: 1591 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1592 | engines: {node: '>= 0.8.0'} 1593 | 1594 | typed-array-buffer@1.0.2: 1595 | resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} 1596 | engines: {node: '>= 0.4'} 1597 | 1598 | typed-array-byte-length@1.0.1: 1599 | resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} 1600 | engines: {node: '>= 0.4'} 1601 | 1602 | typed-array-byte-offset@1.0.2: 1603 | resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} 1604 | engines: {node: '>= 0.4'} 1605 | 1606 | typed-array-length@1.0.6: 1607 | resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} 1608 | engines: {node: '>= 0.4'} 1609 | 1610 | typescript-eslint@8.15.0: 1611 | resolution: {integrity: sha512-wY4FRGl0ZI+ZU4Jo/yjdBu0lVTSML58pu6PgGtJmCufvzfV565pUF6iACQt092uFOd49iLOTX/sEVmHtbSrS+w==} 1612 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1613 | peerDependencies: 1614 | eslint: ^8.57.0 || ^9.0.0 1615 | typescript: '*' 1616 | peerDependenciesMeta: 1617 | typescript: 1618 | optional: true 1619 | 1620 | typescript@5.4.2: 1621 | resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} 1622 | engines: {node: '>=14.17'} 1623 | hasBin: true 1624 | 1625 | typescript@5.6.3: 1626 | resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} 1627 | engines: {node: '>=14.17'} 1628 | hasBin: true 1629 | 1630 | ufo@1.5.4: 1631 | resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} 1632 | 1633 | unbox-primitive@1.0.2: 1634 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 1635 | 1636 | undici-types@6.19.8: 1637 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} 1638 | 1639 | universalify@0.1.2: 1640 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} 1641 | engines: {node: '>= 4.0.0'} 1642 | 1643 | uri-js@4.4.1: 1644 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1645 | 1646 | v8-compile-cache-lib@3.0.1: 1647 | resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} 1648 | 1649 | vite-node@2.1.5: 1650 | resolution: {integrity: sha512-rd0QIgx74q4S1Rd56XIiL2cYEdyWn13cunYBIuqh9mpmQr7gGS0IxXoP8R6OaZtNQQLyXSWbd4rXKYUbhFpK5w==} 1651 | engines: {node: ^18.0.0 || >=20.0.0} 1652 | hasBin: true 1653 | 1654 | vite-plugin-dts@4.3.0: 1655 | resolution: {integrity: sha512-LkBJh9IbLwL6/rxh0C1/bOurDrIEmRE7joC+jFdOEEciAFPbpEKOLSAr5nNh5R7CJ45cMbksTrFfy52szzC5eA==} 1656 | engines: {node: ^14.18.0 || >=16.0.0} 1657 | peerDependencies: 1658 | typescript: '*' 1659 | vite: '*' 1660 | peerDependenciesMeta: 1661 | vite: 1662 | optional: true 1663 | 1664 | vite@5.4.11: 1665 | resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} 1666 | engines: {node: ^18.0.0 || >=20.0.0} 1667 | hasBin: true 1668 | peerDependencies: 1669 | '@types/node': ^18.0.0 || >=20.0.0 1670 | less: '*' 1671 | lightningcss: ^1.21.0 1672 | sass: '*' 1673 | sass-embedded: '*' 1674 | stylus: '*' 1675 | sugarss: '*' 1676 | terser: ^5.4.0 1677 | peerDependenciesMeta: 1678 | '@types/node': 1679 | optional: true 1680 | less: 1681 | optional: true 1682 | lightningcss: 1683 | optional: true 1684 | sass: 1685 | optional: true 1686 | sass-embedded: 1687 | optional: true 1688 | stylus: 1689 | optional: true 1690 | sugarss: 1691 | optional: true 1692 | terser: 1693 | optional: true 1694 | 1695 | vitest@2.1.5: 1696 | resolution: {integrity: sha512-P4ljsdpuzRTPI/kbND2sDZ4VmieerR2c9szEZpjc+98Z9ebvnXmM5+0tHEKqYZumXqlvnmfWsjeFOjXVriDG7A==} 1697 | engines: {node: ^18.0.0 || >=20.0.0} 1698 | hasBin: true 1699 | peerDependencies: 1700 | '@edge-runtime/vm': '*' 1701 | '@types/node': ^18.0.0 || >=20.0.0 1702 | '@vitest/browser': 2.1.5 1703 | '@vitest/ui': 2.1.5 1704 | happy-dom: '*' 1705 | jsdom: '*' 1706 | peerDependenciesMeta: 1707 | '@edge-runtime/vm': 1708 | optional: true 1709 | '@types/node': 1710 | optional: true 1711 | '@vitest/browser': 1712 | optional: true 1713 | '@vitest/ui': 1714 | optional: true 1715 | happy-dom: 1716 | optional: true 1717 | jsdom: 1718 | optional: true 1719 | 1720 | vscode-uri@3.0.8: 1721 | resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} 1722 | 1723 | which-boxed-primitive@1.0.2: 1724 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 1725 | 1726 | which-typed-array@1.1.15: 1727 | resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} 1728 | engines: {node: '>= 0.4'} 1729 | 1730 | which@2.0.2: 1731 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1732 | engines: {node: '>= 8'} 1733 | hasBin: true 1734 | 1735 | why-is-node-running@2.3.0: 1736 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 1737 | engines: {node: '>=8'} 1738 | hasBin: true 1739 | 1740 | word-wrap@1.2.5: 1741 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1742 | engines: {node: '>=0.10.0'} 1743 | 1744 | yallist@4.0.0: 1745 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1746 | 1747 | yn@3.1.1: 1748 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} 1749 | engines: {node: '>=6'} 1750 | 1751 | yocto-queue@0.1.0: 1752 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1753 | engines: {node: '>=10'} 1754 | 1755 | snapshots: 1756 | 1757 | '@babel/helper-string-parser@7.25.9': {} 1758 | 1759 | '@babel/helper-validator-identifier@7.25.9': {} 1760 | 1761 | '@babel/parser@7.26.2': 1762 | dependencies: 1763 | '@babel/types': 7.26.0 1764 | 1765 | '@babel/types@7.26.0': 1766 | dependencies: 1767 | '@babel/helper-string-parser': 7.25.9 1768 | '@babel/helper-validator-identifier': 7.25.9 1769 | 1770 | '@cspotcode/source-map-support@0.8.1': 1771 | dependencies: 1772 | '@jridgewell/trace-mapping': 0.3.9 1773 | 1774 | '@esbuild/aix-ppc64@0.21.5': 1775 | optional: true 1776 | 1777 | '@esbuild/android-arm64@0.21.5': 1778 | optional: true 1779 | 1780 | '@esbuild/android-arm@0.21.5': 1781 | optional: true 1782 | 1783 | '@esbuild/android-x64@0.21.5': 1784 | optional: true 1785 | 1786 | '@esbuild/darwin-arm64@0.21.5': 1787 | optional: true 1788 | 1789 | '@esbuild/darwin-x64@0.21.5': 1790 | optional: true 1791 | 1792 | '@esbuild/freebsd-arm64@0.21.5': 1793 | optional: true 1794 | 1795 | '@esbuild/freebsd-x64@0.21.5': 1796 | optional: true 1797 | 1798 | '@esbuild/linux-arm64@0.21.5': 1799 | optional: true 1800 | 1801 | '@esbuild/linux-arm@0.21.5': 1802 | optional: true 1803 | 1804 | '@esbuild/linux-ia32@0.21.5': 1805 | optional: true 1806 | 1807 | '@esbuild/linux-loong64@0.21.5': 1808 | optional: true 1809 | 1810 | '@esbuild/linux-mips64el@0.21.5': 1811 | optional: true 1812 | 1813 | '@esbuild/linux-ppc64@0.21.5': 1814 | optional: true 1815 | 1816 | '@esbuild/linux-riscv64@0.21.5': 1817 | optional: true 1818 | 1819 | '@esbuild/linux-s390x@0.21.5': 1820 | optional: true 1821 | 1822 | '@esbuild/linux-x64@0.21.5': 1823 | optional: true 1824 | 1825 | '@esbuild/netbsd-x64@0.21.5': 1826 | optional: true 1827 | 1828 | '@esbuild/openbsd-x64@0.21.5': 1829 | optional: true 1830 | 1831 | '@esbuild/sunos-x64@0.21.5': 1832 | optional: true 1833 | 1834 | '@esbuild/win32-arm64@0.21.5': 1835 | optional: true 1836 | 1837 | '@esbuild/win32-ia32@0.21.5': 1838 | optional: true 1839 | 1840 | '@esbuild/win32-x64@0.21.5': 1841 | optional: true 1842 | 1843 | '@eslint-community/eslint-utils@4.4.1(eslint@9.15.0)': 1844 | dependencies: 1845 | eslint: 9.15.0 1846 | eslint-visitor-keys: 3.4.3 1847 | 1848 | '@eslint-community/regexpp@4.12.1': {} 1849 | 1850 | '@eslint/config-array@0.19.0': 1851 | dependencies: 1852 | '@eslint/object-schema': 2.1.4 1853 | debug: 4.3.7 1854 | minimatch: 3.1.2 1855 | transitivePeerDependencies: 1856 | - supports-color 1857 | 1858 | '@eslint/core@0.9.0': {} 1859 | 1860 | '@eslint/eslintrc@3.2.0': 1861 | dependencies: 1862 | ajv: 6.12.6 1863 | debug: 4.3.7 1864 | espree: 10.3.0 1865 | globals: 14.0.0 1866 | ignore: 5.3.2 1867 | import-fresh: 3.3.0 1868 | js-yaml: 4.1.0 1869 | minimatch: 3.1.2 1870 | strip-json-comments: 3.1.1 1871 | transitivePeerDependencies: 1872 | - supports-color 1873 | 1874 | '@eslint/js@9.15.0': {} 1875 | 1876 | '@eslint/object-schema@2.1.4': {} 1877 | 1878 | '@eslint/plugin-kit@0.2.3': 1879 | dependencies: 1880 | levn: 0.4.1 1881 | 1882 | '@humanfs/core@0.19.1': {} 1883 | 1884 | '@humanfs/node@0.16.6': 1885 | dependencies: 1886 | '@humanfs/core': 0.19.1 1887 | '@humanwhocodes/retry': 0.3.1 1888 | 1889 | '@humanwhocodes/module-importer@1.0.1': {} 1890 | 1891 | '@humanwhocodes/retry@0.3.1': {} 1892 | 1893 | '@humanwhocodes/retry@0.4.1': {} 1894 | 1895 | '@jridgewell/resolve-uri@3.1.2': {} 1896 | 1897 | '@jridgewell/sourcemap-codec@1.5.0': {} 1898 | 1899 | '@jridgewell/trace-mapping@0.3.9': 1900 | dependencies: 1901 | '@jridgewell/resolve-uri': 3.1.2 1902 | '@jridgewell/sourcemap-codec': 1.5.0 1903 | 1904 | '@microsoft/api-extractor-model@7.29.8(@types/node@22.9.0)': 1905 | dependencies: 1906 | '@microsoft/tsdoc': 0.15.0 1907 | '@microsoft/tsdoc-config': 0.17.0 1908 | '@rushstack/node-core-library': 5.9.0(@types/node@22.9.0) 1909 | transitivePeerDependencies: 1910 | - '@types/node' 1911 | 1912 | '@microsoft/api-extractor@7.47.11(@types/node@22.9.0)': 1913 | dependencies: 1914 | '@microsoft/api-extractor-model': 7.29.8(@types/node@22.9.0) 1915 | '@microsoft/tsdoc': 0.15.0 1916 | '@microsoft/tsdoc-config': 0.17.0 1917 | '@rushstack/node-core-library': 5.9.0(@types/node@22.9.0) 1918 | '@rushstack/rig-package': 0.5.3 1919 | '@rushstack/terminal': 0.14.2(@types/node@22.9.0) 1920 | '@rushstack/ts-command-line': 4.23.0(@types/node@22.9.0) 1921 | lodash: 4.17.21 1922 | minimatch: 3.0.8 1923 | resolve: 1.22.8 1924 | semver: 7.5.4 1925 | source-map: 0.6.1 1926 | typescript: 5.4.2 1927 | transitivePeerDependencies: 1928 | - '@types/node' 1929 | 1930 | '@microsoft/tsdoc-config@0.17.0': 1931 | dependencies: 1932 | '@microsoft/tsdoc': 0.15.0 1933 | ajv: 8.12.0 1934 | jju: 1.4.0 1935 | resolve: 1.22.8 1936 | 1937 | '@microsoft/tsdoc@0.15.0': {} 1938 | 1939 | '@nodelib/fs.scandir@2.1.5': 1940 | dependencies: 1941 | '@nodelib/fs.stat': 2.0.5 1942 | run-parallel: 1.2.0 1943 | 1944 | '@nodelib/fs.stat@2.0.5': {} 1945 | 1946 | '@nodelib/fs.walk@1.2.8': 1947 | dependencies: 1948 | '@nodelib/fs.scandir': 2.1.5 1949 | fastq: 1.17.1 1950 | 1951 | '@nolyfill/is-core-module@1.0.39': {} 1952 | 1953 | '@polka/url@1.0.0-next.28': {} 1954 | 1955 | '@rollup/pluginutils@5.1.3(rollup@4.27.3)': 1956 | dependencies: 1957 | '@types/estree': 1.0.6 1958 | estree-walker: 2.0.2 1959 | picomatch: 4.0.2 1960 | optionalDependencies: 1961 | rollup: 4.27.3 1962 | 1963 | '@rollup/rollup-android-arm-eabi@4.27.3': 1964 | optional: true 1965 | 1966 | '@rollup/rollup-android-arm64@4.27.3': 1967 | optional: true 1968 | 1969 | '@rollup/rollup-darwin-arm64@4.27.3': 1970 | optional: true 1971 | 1972 | '@rollup/rollup-darwin-x64@4.27.3': 1973 | optional: true 1974 | 1975 | '@rollup/rollup-freebsd-arm64@4.27.3': 1976 | optional: true 1977 | 1978 | '@rollup/rollup-freebsd-x64@4.27.3': 1979 | optional: true 1980 | 1981 | '@rollup/rollup-linux-arm-gnueabihf@4.27.3': 1982 | optional: true 1983 | 1984 | '@rollup/rollup-linux-arm-musleabihf@4.27.3': 1985 | optional: true 1986 | 1987 | '@rollup/rollup-linux-arm64-gnu@4.27.3': 1988 | optional: true 1989 | 1990 | '@rollup/rollup-linux-arm64-musl@4.27.3': 1991 | optional: true 1992 | 1993 | '@rollup/rollup-linux-powerpc64le-gnu@4.27.3': 1994 | optional: true 1995 | 1996 | '@rollup/rollup-linux-riscv64-gnu@4.27.3': 1997 | optional: true 1998 | 1999 | '@rollup/rollup-linux-s390x-gnu@4.27.3': 2000 | optional: true 2001 | 2002 | '@rollup/rollup-linux-x64-gnu@4.27.3': 2003 | optional: true 2004 | 2005 | '@rollup/rollup-linux-x64-musl@4.27.3': 2006 | optional: true 2007 | 2008 | '@rollup/rollup-win32-arm64-msvc@4.27.3': 2009 | optional: true 2010 | 2011 | '@rollup/rollup-win32-ia32-msvc@4.27.3': 2012 | optional: true 2013 | 2014 | '@rollup/rollup-win32-x64-msvc@4.27.3': 2015 | optional: true 2016 | 2017 | '@rushstack/node-core-library@5.9.0(@types/node@22.9.0)': 2018 | dependencies: 2019 | ajv: 8.13.0 2020 | ajv-draft-04: 1.0.0(ajv@8.13.0) 2021 | ajv-formats: 3.0.1(ajv@8.13.0) 2022 | fs-extra: 7.0.1 2023 | import-lazy: 4.0.0 2024 | jju: 1.4.0 2025 | resolve: 1.22.8 2026 | semver: 7.5.4 2027 | optionalDependencies: 2028 | '@types/node': 22.9.0 2029 | 2030 | '@rushstack/rig-package@0.5.3': 2031 | dependencies: 2032 | resolve: 1.22.8 2033 | strip-json-comments: 3.1.1 2034 | 2035 | '@rushstack/terminal@0.14.2(@types/node@22.9.0)': 2036 | dependencies: 2037 | '@rushstack/node-core-library': 5.9.0(@types/node@22.9.0) 2038 | supports-color: 8.1.1 2039 | optionalDependencies: 2040 | '@types/node': 22.9.0 2041 | 2042 | '@rushstack/ts-command-line@4.23.0(@types/node@22.9.0)': 2043 | dependencies: 2044 | '@rushstack/terminal': 0.14.2(@types/node@22.9.0) 2045 | '@types/argparse': 1.0.38 2046 | argparse: 1.0.10 2047 | string-argv: 0.3.2 2048 | transitivePeerDependencies: 2049 | - '@types/node' 2050 | 2051 | '@tsconfig/node10@1.0.11': {} 2052 | 2053 | '@tsconfig/node12@1.0.11': {} 2054 | 2055 | '@tsconfig/node14@1.0.3': {} 2056 | 2057 | '@tsconfig/node16@1.0.4': {} 2058 | 2059 | '@types/argparse@1.0.38': {} 2060 | 2061 | '@types/estree@1.0.6': {} 2062 | 2063 | '@types/json-schema@7.0.15': {} 2064 | 2065 | '@types/json5@0.0.29': {} 2066 | 2067 | '@types/node@22.9.0': 2068 | dependencies: 2069 | undici-types: 6.19.8 2070 | 2071 | '@typescript-eslint/eslint-plugin@8.15.0(@typescript-eslint/parser@8.15.0(eslint@9.15.0)(typescript@5.6.3))(eslint@9.15.0)(typescript@5.6.3)': 2072 | dependencies: 2073 | '@eslint-community/regexpp': 4.12.1 2074 | '@typescript-eslint/parser': 8.15.0(eslint@9.15.0)(typescript@5.6.3) 2075 | '@typescript-eslint/scope-manager': 8.15.0 2076 | '@typescript-eslint/type-utils': 8.15.0(eslint@9.15.0)(typescript@5.6.3) 2077 | '@typescript-eslint/utils': 8.15.0(eslint@9.15.0)(typescript@5.6.3) 2078 | '@typescript-eslint/visitor-keys': 8.15.0 2079 | eslint: 9.15.0 2080 | graphemer: 1.4.0 2081 | ignore: 5.3.2 2082 | natural-compare: 1.4.0 2083 | ts-api-utils: 1.4.0(typescript@5.6.3) 2084 | optionalDependencies: 2085 | typescript: 5.6.3 2086 | transitivePeerDependencies: 2087 | - supports-color 2088 | 2089 | '@typescript-eslint/parser@8.15.0(eslint@9.15.0)(typescript@5.6.3)': 2090 | dependencies: 2091 | '@typescript-eslint/scope-manager': 8.15.0 2092 | '@typescript-eslint/types': 8.15.0 2093 | '@typescript-eslint/typescript-estree': 8.15.0(typescript@5.6.3) 2094 | '@typescript-eslint/visitor-keys': 8.15.0 2095 | debug: 4.3.7 2096 | eslint: 9.15.0 2097 | optionalDependencies: 2098 | typescript: 5.6.3 2099 | transitivePeerDependencies: 2100 | - supports-color 2101 | 2102 | '@typescript-eslint/rule-tester@8.15.0(eslint@9.15.0)(typescript@5.6.3)': 2103 | dependencies: 2104 | '@typescript-eslint/typescript-estree': 8.15.0(typescript@5.6.3) 2105 | '@typescript-eslint/utils': 8.15.0(eslint@9.15.0)(typescript@5.6.3) 2106 | ajv: 6.12.6 2107 | eslint: 9.15.0 2108 | json-stable-stringify-without-jsonify: 1.0.1 2109 | lodash.merge: 4.6.2 2110 | semver: 7.6.3 2111 | transitivePeerDependencies: 2112 | - supports-color 2113 | - typescript 2114 | 2115 | '@typescript-eslint/scope-manager@8.15.0': 2116 | dependencies: 2117 | '@typescript-eslint/types': 8.15.0 2118 | '@typescript-eslint/visitor-keys': 8.15.0 2119 | 2120 | '@typescript-eslint/type-utils@8.15.0(eslint@9.15.0)(typescript@5.6.3)': 2121 | dependencies: 2122 | '@typescript-eslint/typescript-estree': 8.15.0(typescript@5.6.3) 2123 | '@typescript-eslint/utils': 8.15.0(eslint@9.15.0)(typescript@5.6.3) 2124 | debug: 4.3.7 2125 | eslint: 9.15.0 2126 | ts-api-utils: 1.4.0(typescript@5.6.3) 2127 | optionalDependencies: 2128 | typescript: 5.6.3 2129 | transitivePeerDependencies: 2130 | - supports-color 2131 | 2132 | '@typescript-eslint/types@8.15.0': {} 2133 | 2134 | '@typescript-eslint/typescript-estree@8.15.0(typescript@5.6.3)': 2135 | dependencies: 2136 | '@typescript-eslint/types': 8.15.0 2137 | '@typescript-eslint/visitor-keys': 8.15.0 2138 | debug: 4.3.7 2139 | fast-glob: 3.3.2 2140 | is-glob: 4.0.3 2141 | minimatch: 9.0.5 2142 | semver: 7.6.3 2143 | ts-api-utils: 1.4.0(typescript@5.6.3) 2144 | optionalDependencies: 2145 | typescript: 5.6.3 2146 | transitivePeerDependencies: 2147 | - supports-color 2148 | 2149 | '@typescript-eslint/utils@8.15.0(eslint@9.15.0)(typescript@5.6.3)': 2150 | dependencies: 2151 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0) 2152 | '@typescript-eslint/scope-manager': 8.15.0 2153 | '@typescript-eslint/types': 8.15.0 2154 | '@typescript-eslint/typescript-estree': 8.15.0(typescript@5.6.3) 2155 | eslint: 9.15.0 2156 | optionalDependencies: 2157 | typescript: 5.6.3 2158 | transitivePeerDependencies: 2159 | - supports-color 2160 | 2161 | '@typescript-eslint/visitor-keys@8.15.0': 2162 | dependencies: 2163 | '@typescript-eslint/types': 8.15.0 2164 | eslint-visitor-keys: 4.2.0 2165 | 2166 | '@vitest/expect@2.1.5': 2167 | dependencies: 2168 | '@vitest/spy': 2.1.5 2169 | '@vitest/utils': 2.1.5 2170 | chai: 5.1.2 2171 | tinyrainbow: 1.2.0 2172 | 2173 | '@vitest/mocker@2.1.5(vite@5.4.11(@types/node@22.9.0))': 2174 | dependencies: 2175 | '@vitest/spy': 2.1.5 2176 | estree-walker: 3.0.3 2177 | magic-string: 0.30.13 2178 | optionalDependencies: 2179 | vite: 5.4.11(@types/node@22.9.0) 2180 | 2181 | '@vitest/pretty-format@2.1.5': 2182 | dependencies: 2183 | tinyrainbow: 1.2.0 2184 | 2185 | '@vitest/runner@2.1.5': 2186 | dependencies: 2187 | '@vitest/utils': 2.1.5 2188 | pathe: 1.1.2 2189 | 2190 | '@vitest/snapshot@2.1.5': 2191 | dependencies: 2192 | '@vitest/pretty-format': 2.1.5 2193 | magic-string: 0.30.13 2194 | pathe: 1.1.2 2195 | 2196 | '@vitest/spy@2.1.5': 2197 | dependencies: 2198 | tinyspy: 3.0.2 2199 | 2200 | '@vitest/ui@2.1.5(vitest@2.1.5)': 2201 | dependencies: 2202 | '@vitest/utils': 2.1.5 2203 | fflate: 0.8.2 2204 | flatted: 3.3.2 2205 | pathe: 1.1.2 2206 | sirv: 3.0.0 2207 | tinyglobby: 0.2.10 2208 | tinyrainbow: 1.2.0 2209 | vitest: 2.1.5(@types/node@22.9.0)(@vitest/ui@2.1.5) 2210 | 2211 | '@vitest/utils@2.1.5': 2212 | dependencies: 2213 | '@vitest/pretty-format': 2.1.5 2214 | loupe: 3.1.2 2215 | tinyrainbow: 1.2.0 2216 | 2217 | '@volar/language-core@2.4.10': 2218 | dependencies: 2219 | '@volar/source-map': 2.4.10 2220 | 2221 | '@volar/source-map@2.4.10': {} 2222 | 2223 | '@volar/typescript@2.4.10': 2224 | dependencies: 2225 | '@volar/language-core': 2.4.10 2226 | path-browserify: 1.0.1 2227 | vscode-uri: 3.0.8 2228 | 2229 | '@vue/compiler-core@3.5.13': 2230 | dependencies: 2231 | '@babel/parser': 7.26.2 2232 | '@vue/shared': 3.5.13 2233 | entities: 4.5.0 2234 | estree-walker: 2.0.2 2235 | source-map-js: 1.2.1 2236 | 2237 | '@vue/compiler-dom@3.5.13': 2238 | dependencies: 2239 | '@vue/compiler-core': 3.5.13 2240 | '@vue/shared': 3.5.13 2241 | 2242 | '@vue/compiler-vue2@2.7.16': 2243 | dependencies: 2244 | de-indent: 1.0.2 2245 | he: 1.2.0 2246 | 2247 | '@vue/language-core@2.1.6(typescript@5.6.3)': 2248 | dependencies: 2249 | '@volar/language-core': 2.4.10 2250 | '@vue/compiler-dom': 3.5.13 2251 | '@vue/compiler-vue2': 2.7.16 2252 | '@vue/shared': 3.5.13 2253 | computeds: 0.0.1 2254 | minimatch: 9.0.5 2255 | muggle-string: 0.4.1 2256 | path-browserify: 1.0.1 2257 | optionalDependencies: 2258 | typescript: 5.6.3 2259 | 2260 | '@vue/shared@3.5.13': {} 2261 | 2262 | acorn-jsx@5.3.2(acorn@8.14.0): 2263 | dependencies: 2264 | acorn: 8.14.0 2265 | 2266 | acorn-walk@8.3.4: 2267 | dependencies: 2268 | acorn: 8.14.0 2269 | 2270 | acorn@8.14.0: {} 2271 | 2272 | ajv-draft-04@1.0.0(ajv@8.13.0): 2273 | optionalDependencies: 2274 | ajv: 8.13.0 2275 | 2276 | ajv-formats@3.0.1(ajv@8.13.0): 2277 | optionalDependencies: 2278 | ajv: 8.13.0 2279 | 2280 | ajv@6.12.6: 2281 | dependencies: 2282 | fast-deep-equal: 3.1.3 2283 | fast-json-stable-stringify: 2.1.0 2284 | json-schema-traverse: 0.4.1 2285 | uri-js: 4.4.1 2286 | 2287 | ajv@8.12.0: 2288 | dependencies: 2289 | fast-deep-equal: 3.1.3 2290 | json-schema-traverse: 1.0.0 2291 | require-from-string: 2.0.2 2292 | uri-js: 4.4.1 2293 | 2294 | ajv@8.13.0: 2295 | dependencies: 2296 | fast-deep-equal: 3.1.3 2297 | json-schema-traverse: 1.0.0 2298 | require-from-string: 2.0.2 2299 | uri-js: 4.4.1 2300 | 2301 | ansi-styles@4.3.0: 2302 | dependencies: 2303 | color-convert: 2.0.1 2304 | 2305 | arg@4.1.3: {} 2306 | 2307 | argparse@1.0.10: 2308 | dependencies: 2309 | sprintf-js: 1.0.3 2310 | 2311 | argparse@2.0.1: {} 2312 | 2313 | array-buffer-byte-length@1.0.1: 2314 | dependencies: 2315 | call-bind: 1.0.7 2316 | is-array-buffer: 3.0.4 2317 | 2318 | array-includes@3.1.8: 2319 | dependencies: 2320 | call-bind: 1.0.7 2321 | define-properties: 1.2.1 2322 | es-abstract: 1.23.5 2323 | es-object-atoms: 1.0.0 2324 | get-intrinsic: 1.2.4 2325 | is-string: 1.0.7 2326 | 2327 | array.prototype.findlastindex@1.2.5: 2328 | dependencies: 2329 | call-bind: 1.0.7 2330 | define-properties: 1.2.1 2331 | es-abstract: 1.23.5 2332 | es-errors: 1.3.0 2333 | es-object-atoms: 1.0.0 2334 | es-shim-unscopables: 1.0.2 2335 | 2336 | array.prototype.flat@1.3.2: 2337 | dependencies: 2338 | call-bind: 1.0.7 2339 | define-properties: 1.2.1 2340 | es-abstract: 1.23.5 2341 | es-shim-unscopables: 1.0.2 2342 | 2343 | array.prototype.flatmap@1.3.2: 2344 | dependencies: 2345 | call-bind: 1.0.7 2346 | define-properties: 1.2.1 2347 | es-abstract: 1.23.5 2348 | es-shim-unscopables: 1.0.2 2349 | 2350 | arraybuffer.prototype.slice@1.0.3: 2351 | dependencies: 2352 | array-buffer-byte-length: 1.0.1 2353 | call-bind: 1.0.7 2354 | define-properties: 1.2.1 2355 | es-abstract: 1.23.5 2356 | es-errors: 1.3.0 2357 | get-intrinsic: 1.2.4 2358 | is-array-buffer: 3.0.4 2359 | is-shared-array-buffer: 1.0.3 2360 | 2361 | assertion-error@2.0.1: {} 2362 | 2363 | available-typed-arrays@1.0.7: 2364 | dependencies: 2365 | possible-typed-array-names: 1.0.0 2366 | 2367 | balanced-match@1.0.2: {} 2368 | 2369 | brace-expansion@1.1.11: 2370 | dependencies: 2371 | balanced-match: 1.0.2 2372 | concat-map: 0.0.1 2373 | 2374 | brace-expansion@2.0.1: 2375 | dependencies: 2376 | balanced-match: 1.0.2 2377 | 2378 | braces@3.0.3: 2379 | dependencies: 2380 | fill-range: 7.1.1 2381 | 2382 | cac@6.7.14: {} 2383 | 2384 | call-bind@1.0.7: 2385 | dependencies: 2386 | es-define-property: 1.0.0 2387 | es-errors: 1.3.0 2388 | function-bind: 1.1.2 2389 | get-intrinsic: 1.2.4 2390 | set-function-length: 1.2.2 2391 | 2392 | callsites@3.1.0: {} 2393 | 2394 | chai@5.1.2: 2395 | dependencies: 2396 | assertion-error: 2.0.1 2397 | check-error: 2.1.1 2398 | deep-eql: 5.0.2 2399 | loupe: 3.1.2 2400 | pathval: 2.0.0 2401 | 2402 | chalk@4.1.2: 2403 | dependencies: 2404 | ansi-styles: 4.3.0 2405 | supports-color: 7.2.0 2406 | 2407 | check-error@2.1.1: {} 2408 | 2409 | color-convert@2.0.1: 2410 | dependencies: 2411 | color-name: 1.1.4 2412 | 2413 | color-name@1.1.4: {} 2414 | 2415 | compare-versions@6.1.1: {} 2416 | 2417 | computeds@0.0.1: {} 2418 | 2419 | concat-map@0.0.1: {} 2420 | 2421 | confbox@0.1.8: {} 2422 | 2423 | create-require@1.1.1: {} 2424 | 2425 | cross-spawn@7.0.6: 2426 | dependencies: 2427 | path-key: 3.1.1 2428 | shebang-command: 2.0.0 2429 | which: 2.0.2 2430 | 2431 | data-view-buffer@1.0.1: 2432 | dependencies: 2433 | call-bind: 1.0.7 2434 | es-errors: 1.3.0 2435 | is-data-view: 1.0.1 2436 | 2437 | data-view-byte-length@1.0.1: 2438 | dependencies: 2439 | call-bind: 1.0.7 2440 | es-errors: 1.3.0 2441 | is-data-view: 1.0.1 2442 | 2443 | data-view-byte-offset@1.0.0: 2444 | dependencies: 2445 | call-bind: 1.0.7 2446 | es-errors: 1.3.0 2447 | is-data-view: 1.0.1 2448 | 2449 | de-indent@1.0.2: {} 2450 | 2451 | debug@3.2.7: 2452 | dependencies: 2453 | ms: 2.1.3 2454 | 2455 | debug@4.3.7: 2456 | dependencies: 2457 | ms: 2.1.3 2458 | 2459 | deep-eql@5.0.2: {} 2460 | 2461 | deep-is@0.1.4: {} 2462 | 2463 | define-data-property@1.1.4: 2464 | dependencies: 2465 | es-define-property: 1.0.0 2466 | es-errors: 1.3.0 2467 | gopd: 1.0.1 2468 | 2469 | define-properties@1.2.1: 2470 | dependencies: 2471 | define-data-property: 1.1.4 2472 | has-property-descriptors: 1.0.2 2473 | object-keys: 1.1.1 2474 | 2475 | diff@4.0.2: {} 2476 | 2477 | doctrine@2.1.0: 2478 | dependencies: 2479 | esutils: 2.0.3 2480 | 2481 | doctrine@3.0.0: 2482 | dependencies: 2483 | esutils: 2.0.3 2484 | 2485 | enhanced-resolve@5.17.1: 2486 | dependencies: 2487 | graceful-fs: 4.2.11 2488 | tapable: 2.2.1 2489 | 2490 | entities@4.5.0: {} 2491 | 2492 | es-abstract@1.23.5: 2493 | dependencies: 2494 | array-buffer-byte-length: 1.0.1 2495 | arraybuffer.prototype.slice: 1.0.3 2496 | available-typed-arrays: 1.0.7 2497 | call-bind: 1.0.7 2498 | data-view-buffer: 1.0.1 2499 | data-view-byte-length: 1.0.1 2500 | data-view-byte-offset: 1.0.0 2501 | es-define-property: 1.0.0 2502 | es-errors: 1.3.0 2503 | es-object-atoms: 1.0.0 2504 | es-set-tostringtag: 2.0.3 2505 | es-to-primitive: 1.2.1 2506 | function.prototype.name: 1.1.6 2507 | get-intrinsic: 1.2.4 2508 | get-symbol-description: 1.0.2 2509 | globalthis: 1.0.4 2510 | gopd: 1.0.1 2511 | has-property-descriptors: 1.0.2 2512 | has-proto: 1.0.3 2513 | has-symbols: 1.0.3 2514 | hasown: 2.0.2 2515 | internal-slot: 1.0.7 2516 | is-array-buffer: 3.0.4 2517 | is-callable: 1.2.7 2518 | is-data-view: 1.0.1 2519 | is-negative-zero: 2.0.3 2520 | is-regex: 1.1.4 2521 | is-shared-array-buffer: 1.0.3 2522 | is-string: 1.0.7 2523 | is-typed-array: 1.1.13 2524 | is-weakref: 1.0.2 2525 | object-inspect: 1.13.3 2526 | object-keys: 1.1.1 2527 | object.assign: 4.1.5 2528 | regexp.prototype.flags: 1.5.3 2529 | safe-array-concat: 1.1.2 2530 | safe-regex-test: 1.0.3 2531 | string.prototype.trim: 1.2.9 2532 | string.prototype.trimend: 1.0.8 2533 | string.prototype.trimstart: 1.0.8 2534 | typed-array-buffer: 1.0.2 2535 | typed-array-byte-length: 1.0.1 2536 | typed-array-byte-offset: 1.0.2 2537 | typed-array-length: 1.0.6 2538 | unbox-primitive: 1.0.2 2539 | which-typed-array: 1.1.15 2540 | 2541 | es-define-property@1.0.0: 2542 | dependencies: 2543 | get-intrinsic: 1.2.4 2544 | 2545 | es-errors@1.3.0: {} 2546 | 2547 | es-module-lexer@1.5.4: {} 2548 | 2549 | es-object-atoms@1.0.0: 2550 | dependencies: 2551 | es-errors: 1.3.0 2552 | 2553 | es-set-tostringtag@2.0.3: 2554 | dependencies: 2555 | get-intrinsic: 1.2.4 2556 | has-tostringtag: 1.0.2 2557 | hasown: 2.0.2 2558 | 2559 | es-shim-unscopables@1.0.2: 2560 | dependencies: 2561 | hasown: 2.0.2 2562 | 2563 | es-to-primitive@1.2.1: 2564 | dependencies: 2565 | is-callable: 1.2.7 2566 | is-date-object: 1.0.5 2567 | is-symbol: 1.0.4 2568 | 2569 | esbuild@0.21.5: 2570 | optionalDependencies: 2571 | '@esbuild/aix-ppc64': 0.21.5 2572 | '@esbuild/android-arm': 0.21.5 2573 | '@esbuild/android-arm64': 0.21.5 2574 | '@esbuild/android-x64': 0.21.5 2575 | '@esbuild/darwin-arm64': 0.21.5 2576 | '@esbuild/darwin-x64': 0.21.5 2577 | '@esbuild/freebsd-arm64': 0.21.5 2578 | '@esbuild/freebsd-x64': 0.21.5 2579 | '@esbuild/linux-arm': 0.21.5 2580 | '@esbuild/linux-arm64': 0.21.5 2581 | '@esbuild/linux-ia32': 0.21.5 2582 | '@esbuild/linux-loong64': 0.21.5 2583 | '@esbuild/linux-mips64el': 0.21.5 2584 | '@esbuild/linux-ppc64': 0.21.5 2585 | '@esbuild/linux-riscv64': 0.21.5 2586 | '@esbuild/linux-s390x': 0.21.5 2587 | '@esbuild/linux-x64': 0.21.5 2588 | '@esbuild/netbsd-x64': 0.21.5 2589 | '@esbuild/openbsd-x64': 0.21.5 2590 | '@esbuild/sunos-x64': 0.21.5 2591 | '@esbuild/win32-arm64': 0.21.5 2592 | '@esbuild/win32-ia32': 0.21.5 2593 | '@esbuild/win32-x64': 0.21.5 2594 | 2595 | escape-string-regexp@4.0.0: {} 2596 | 2597 | eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): 2598 | dependencies: 2599 | eslint-plugin-import: 2.29.1(@typescript-eslint/parser@8.15.0(eslint@9.15.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.15.0) 2600 | 2601 | eslint-import-resolver-node@0.3.9: 2602 | dependencies: 2603 | debug: 3.2.7 2604 | is-core-module: 2.15.1 2605 | resolve: 1.22.8 2606 | transitivePeerDependencies: 2607 | - supports-color 2608 | 2609 | eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@9.15.0)(typescript@5.6.3))(eslint-plugin-import-x@4.4.2(eslint@9.15.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@9.15.0): 2610 | dependencies: 2611 | '@nolyfill/is-core-module': 1.0.39 2612 | debug: 4.3.7 2613 | enhanced-resolve: 5.17.1 2614 | eslint: 9.15.0 2615 | eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.15.0(eslint@9.15.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.15.0) 2616 | fast-glob: 3.3.2 2617 | get-tsconfig: 4.8.1 2618 | is-bun-module: 1.2.1 2619 | is-glob: 4.0.3 2620 | optionalDependencies: 2621 | eslint-plugin-import: 2.29.1(@typescript-eslint/parser@8.15.0(eslint@9.15.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.15.0) 2622 | eslint-plugin-import-x: 4.4.2(eslint@9.15.0)(typescript@5.6.3) 2623 | transitivePeerDependencies: 2624 | - '@typescript-eslint/parser' 2625 | - eslint-import-resolver-node 2626 | - eslint-import-resolver-webpack 2627 | - supports-color 2628 | 2629 | eslint-module-utils@2.12.0(@typescript-eslint/parser@8.15.0(eslint@9.15.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.15.0): 2630 | dependencies: 2631 | debug: 3.2.7 2632 | optionalDependencies: 2633 | '@typescript-eslint/parser': 8.15.0(eslint@9.15.0)(typescript@5.6.3) 2634 | eslint: 9.15.0 2635 | eslint-import-resolver-node: 0.3.9 2636 | eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.15.0(eslint@9.15.0)(typescript@5.6.3))(eslint-plugin-import-x@4.4.2(eslint@9.15.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@9.15.0) 2637 | transitivePeerDependencies: 2638 | - supports-color 2639 | 2640 | eslint-plugin-import-x@4.4.2(eslint@9.15.0)(typescript@5.6.3): 2641 | dependencies: 2642 | '@typescript-eslint/utils': 8.15.0(eslint@9.15.0)(typescript@5.6.3) 2643 | debug: 4.3.7 2644 | doctrine: 3.0.0 2645 | eslint: 9.15.0 2646 | eslint-import-resolver-node: 0.3.9 2647 | get-tsconfig: 4.8.1 2648 | is-glob: 4.0.3 2649 | minimatch: 9.0.5 2650 | semver: 7.6.3 2651 | stable-hash: 0.0.4 2652 | tslib: 2.8.1 2653 | transitivePeerDependencies: 2654 | - supports-color 2655 | - typescript 2656 | 2657 | eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.15.0(eslint@9.15.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.15.0): 2658 | dependencies: 2659 | array-includes: 3.1.8 2660 | array.prototype.findlastindex: 1.2.5 2661 | array.prototype.flat: 1.3.2 2662 | array.prototype.flatmap: 1.3.2 2663 | debug: 3.2.7 2664 | doctrine: 2.1.0 2665 | eslint: 9.15.0 2666 | eslint-import-resolver-node: 0.3.9 2667 | eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.15.0(eslint@9.15.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.15.0) 2668 | hasown: 2.0.2 2669 | is-core-module: 2.15.1 2670 | is-glob: 4.0.3 2671 | minimatch: 3.1.2 2672 | object.fromentries: 2.0.8 2673 | object.groupby: 1.0.3 2674 | object.values: 1.2.0 2675 | semver: 6.3.1 2676 | tsconfig-paths: 3.15.0 2677 | optionalDependencies: 2678 | '@typescript-eslint/parser': 8.15.0(eslint@9.15.0)(typescript@5.6.3) 2679 | transitivePeerDependencies: 2680 | - eslint-import-resolver-typescript 2681 | - eslint-import-resolver-webpack 2682 | - supports-color 2683 | 2684 | eslint-plugin-sort-keys-custom-order@file:(@typescript-eslint/utils@8.15.0(eslint@9.15.0)(typescript@5.6.3))(eslint@9.15.0): 2685 | dependencies: 2686 | '@typescript-eslint/utils': 8.15.0(eslint@9.15.0)(typescript@5.6.3) 2687 | eslint: 9.15.0 2688 | 2689 | eslint-scope@8.2.0: 2690 | dependencies: 2691 | esrecurse: 4.3.0 2692 | estraverse: 5.3.0 2693 | 2694 | eslint-visitor-keys@3.4.3: {} 2695 | 2696 | eslint-visitor-keys@4.2.0: {} 2697 | 2698 | eslint@9.15.0: 2699 | dependencies: 2700 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0) 2701 | '@eslint-community/regexpp': 4.12.1 2702 | '@eslint/config-array': 0.19.0 2703 | '@eslint/core': 0.9.0 2704 | '@eslint/eslintrc': 3.2.0 2705 | '@eslint/js': 9.15.0 2706 | '@eslint/plugin-kit': 0.2.3 2707 | '@humanfs/node': 0.16.6 2708 | '@humanwhocodes/module-importer': 1.0.1 2709 | '@humanwhocodes/retry': 0.4.1 2710 | '@types/estree': 1.0.6 2711 | '@types/json-schema': 7.0.15 2712 | ajv: 6.12.6 2713 | chalk: 4.1.2 2714 | cross-spawn: 7.0.6 2715 | debug: 4.3.7 2716 | escape-string-regexp: 4.0.0 2717 | eslint-scope: 8.2.0 2718 | eslint-visitor-keys: 4.2.0 2719 | espree: 10.3.0 2720 | esquery: 1.6.0 2721 | esutils: 2.0.3 2722 | fast-deep-equal: 3.1.3 2723 | file-entry-cache: 8.0.0 2724 | find-up: 5.0.0 2725 | glob-parent: 6.0.2 2726 | ignore: 5.3.2 2727 | imurmurhash: 0.1.4 2728 | is-glob: 4.0.3 2729 | json-stable-stringify-without-jsonify: 1.0.1 2730 | lodash.merge: 4.6.2 2731 | minimatch: 3.1.2 2732 | natural-compare: 1.4.0 2733 | optionator: 0.9.4 2734 | transitivePeerDependencies: 2735 | - supports-color 2736 | 2737 | espree@10.3.0: 2738 | dependencies: 2739 | acorn: 8.14.0 2740 | acorn-jsx: 5.3.2(acorn@8.14.0) 2741 | eslint-visitor-keys: 4.2.0 2742 | 2743 | esquery@1.6.0: 2744 | dependencies: 2745 | estraverse: 5.3.0 2746 | 2747 | esrecurse@4.3.0: 2748 | dependencies: 2749 | estraverse: 5.3.0 2750 | 2751 | estraverse@5.3.0: {} 2752 | 2753 | estree-walker@2.0.2: {} 2754 | 2755 | estree-walker@3.0.3: 2756 | dependencies: 2757 | '@types/estree': 1.0.6 2758 | 2759 | esutils@2.0.3: {} 2760 | 2761 | expect-type@1.1.0: {} 2762 | 2763 | fast-deep-equal@3.1.3: {} 2764 | 2765 | fast-glob@3.3.2: 2766 | dependencies: 2767 | '@nodelib/fs.stat': 2.0.5 2768 | '@nodelib/fs.walk': 1.2.8 2769 | glob-parent: 5.1.2 2770 | merge2: 1.4.1 2771 | micromatch: 4.0.8 2772 | 2773 | fast-json-stable-stringify@2.1.0: {} 2774 | 2775 | fast-levenshtein@2.0.6: {} 2776 | 2777 | fastq@1.17.1: 2778 | dependencies: 2779 | reusify: 1.0.4 2780 | 2781 | fdir@6.4.2(picomatch@4.0.2): 2782 | optionalDependencies: 2783 | picomatch: 4.0.2 2784 | 2785 | fflate@0.8.2: {} 2786 | 2787 | file-entry-cache@8.0.0: 2788 | dependencies: 2789 | flat-cache: 4.0.1 2790 | 2791 | fill-range@7.1.1: 2792 | dependencies: 2793 | to-regex-range: 5.0.1 2794 | 2795 | find-up@5.0.0: 2796 | dependencies: 2797 | locate-path: 6.0.0 2798 | path-exists: 4.0.0 2799 | 2800 | flat-cache@4.0.1: 2801 | dependencies: 2802 | flatted: 3.3.2 2803 | keyv: 4.5.4 2804 | 2805 | flatted@3.3.2: {} 2806 | 2807 | for-each@0.3.3: 2808 | dependencies: 2809 | is-callable: 1.2.7 2810 | 2811 | fs-extra@7.0.1: 2812 | dependencies: 2813 | graceful-fs: 4.2.11 2814 | jsonfile: 4.0.0 2815 | universalify: 0.1.2 2816 | 2817 | fsevents@2.3.3: 2818 | optional: true 2819 | 2820 | function-bind@1.1.2: {} 2821 | 2822 | function.prototype.name@1.1.6: 2823 | dependencies: 2824 | call-bind: 1.0.7 2825 | define-properties: 1.2.1 2826 | es-abstract: 1.23.5 2827 | functions-have-names: 1.2.3 2828 | 2829 | functions-have-names@1.2.3: {} 2830 | 2831 | get-intrinsic@1.2.4: 2832 | dependencies: 2833 | es-errors: 1.3.0 2834 | function-bind: 1.1.2 2835 | has-proto: 1.0.3 2836 | has-symbols: 1.0.3 2837 | hasown: 2.0.2 2838 | 2839 | get-symbol-description@1.0.2: 2840 | dependencies: 2841 | call-bind: 1.0.7 2842 | es-errors: 1.3.0 2843 | get-intrinsic: 1.2.4 2844 | 2845 | get-tsconfig@4.8.1: 2846 | dependencies: 2847 | resolve-pkg-maps: 1.0.0 2848 | 2849 | glob-parent@5.1.2: 2850 | dependencies: 2851 | is-glob: 4.0.3 2852 | 2853 | glob-parent@6.0.2: 2854 | dependencies: 2855 | is-glob: 4.0.3 2856 | 2857 | globals@14.0.0: {} 2858 | 2859 | globalthis@1.0.4: 2860 | dependencies: 2861 | define-properties: 1.2.1 2862 | gopd: 1.0.1 2863 | 2864 | gopd@1.0.1: 2865 | dependencies: 2866 | get-intrinsic: 1.2.4 2867 | 2868 | graceful-fs@4.2.11: {} 2869 | 2870 | graphemer@1.4.0: {} 2871 | 2872 | has-bigints@1.0.2: {} 2873 | 2874 | has-flag@4.0.0: {} 2875 | 2876 | has-property-descriptors@1.0.2: 2877 | dependencies: 2878 | es-define-property: 1.0.0 2879 | 2880 | has-proto@1.0.3: {} 2881 | 2882 | has-symbols@1.0.3: {} 2883 | 2884 | has-tostringtag@1.0.2: 2885 | dependencies: 2886 | has-symbols: 1.0.3 2887 | 2888 | hasown@2.0.2: 2889 | dependencies: 2890 | function-bind: 1.1.2 2891 | 2892 | he@1.2.0: {} 2893 | 2894 | ignore@5.3.2: {} 2895 | 2896 | import-fresh@3.3.0: 2897 | dependencies: 2898 | parent-module: 1.0.1 2899 | resolve-from: 4.0.0 2900 | 2901 | import-lazy@4.0.0: {} 2902 | 2903 | imurmurhash@0.1.4: {} 2904 | 2905 | internal-slot@1.0.7: 2906 | dependencies: 2907 | es-errors: 1.3.0 2908 | hasown: 2.0.2 2909 | side-channel: 1.0.6 2910 | 2911 | is-array-buffer@3.0.4: 2912 | dependencies: 2913 | call-bind: 1.0.7 2914 | get-intrinsic: 1.2.4 2915 | 2916 | is-bigint@1.0.4: 2917 | dependencies: 2918 | has-bigints: 1.0.2 2919 | 2920 | is-boolean-object@1.1.2: 2921 | dependencies: 2922 | call-bind: 1.0.7 2923 | has-tostringtag: 1.0.2 2924 | 2925 | is-bun-module@1.2.1: 2926 | dependencies: 2927 | semver: 7.6.3 2928 | 2929 | is-callable@1.2.7: {} 2930 | 2931 | is-core-module@2.15.1: 2932 | dependencies: 2933 | hasown: 2.0.2 2934 | 2935 | is-data-view@1.0.1: 2936 | dependencies: 2937 | is-typed-array: 1.1.13 2938 | 2939 | is-date-object@1.0.5: 2940 | dependencies: 2941 | has-tostringtag: 1.0.2 2942 | 2943 | is-extglob@2.1.1: {} 2944 | 2945 | is-glob@4.0.3: 2946 | dependencies: 2947 | is-extglob: 2.1.1 2948 | 2949 | is-negative-zero@2.0.3: {} 2950 | 2951 | is-number-object@1.0.7: 2952 | dependencies: 2953 | has-tostringtag: 1.0.2 2954 | 2955 | is-number@7.0.0: {} 2956 | 2957 | is-regex@1.1.4: 2958 | dependencies: 2959 | call-bind: 1.0.7 2960 | has-tostringtag: 1.0.2 2961 | 2962 | is-shared-array-buffer@1.0.3: 2963 | dependencies: 2964 | call-bind: 1.0.7 2965 | 2966 | is-string@1.0.7: 2967 | dependencies: 2968 | has-tostringtag: 1.0.2 2969 | 2970 | is-symbol@1.0.4: 2971 | dependencies: 2972 | has-symbols: 1.0.3 2973 | 2974 | is-typed-array@1.1.13: 2975 | dependencies: 2976 | which-typed-array: 1.1.15 2977 | 2978 | is-weakref@1.0.2: 2979 | dependencies: 2980 | call-bind: 1.0.7 2981 | 2982 | isarray@2.0.5: {} 2983 | 2984 | isexe@2.0.0: {} 2985 | 2986 | jju@1.4.0: {} 2987 | 2988 | js-yaml@4.1.0: 2989 | dependencies: 2990 | argparse: 2.0.1 2991 | 2992 | json-buffer@3.0.1: {} 2993 | 2994 | json-schema-traverse@0.4.1: {} 2995 | 2996 | json-schema-traverse@1.0.0: {} 2997 | 2998 | json-stable-stringify-without-jsonify@1.0.1: {} 2999 | 3000 | json5@1.0.2: 3001 | dependencies: 3002 | minimist: 1.2.8 3003 | 3004 | jsonfile@4.0.0: 3005 | optionalDependencies: 3006 | graceful-fs: 4.2.11 3007 | 3008 | keyv@4.5.4: 3009 | dependencies: 3010 | json-buffer: 3.0.1 3011 | 3012 | kolorist@1.8.0: {} 3013 | 3014 | levn@0.4.1: 3015 | dependencies: 3016 | prelude-ls: 1.2.1 3017 | type-check: 0.4.0 3018 | 3019 | local-pkg@0.5.1: 3020 | dependencies: 3021 | mlly: 1.7.3 3022 | pkg-types: 1.2.1 3023 | 3024 | locate-path@6.0.0: 3025 | dependencies: 3026 | p-locate: 5.0.0 3027 | 3028 | lodash.merge@4.6.2: {} 3029 | 3030 | lodash@4.17.21: {} 3031 | 3032 | loupe@3.1.2: {} 3033 | 3034 | lru-cache@6.0.0: 3035 | dependencies: 3036 | yallist: 4.0.0 3037 | 3038 | magic-string@0.30.13: 3039 | dependencies: 3040 | '@jridgewell/sourcemap-codec': 1.5.0 3041 | 3042 | make-error@1.3.6: {} 3043 | 3044 | merge2@1.4.1: {} 3045 | 3046 | micromatch@4.0.8: 3047 | dependencies: 3048 | braces: 3.0.3 3049 | picomatch: 2.3.1 3050 | 3051 | minimatch@3.0.8: 3052 | dependencies: 3053 | brace-expansion: 1.1.11 3054 | 3055 | minimatch@3.1.2: 3056 | dependencies: 3057 | brace-expansion: 1.1.11 3058 | 3059 | minimatch@9.0.5: 3060 | dependencies: 3061 | brace-expansion: 2.0.1 3062 | 3063 | minimist@1.2.8: {} 3064 | 3065 | mlly@1.7.3: 3066 | dependencies: 3067 | acorn: 8.14.0 3068 | pathe: 1.1.2 3069 | pkg-types: 1.2.1 3070 | ufo: 1.5.4 3071 | 3072 | mrmime@2.0.0: {} 3073 | 3074 | ms@2.1.3: {} 3075 | 3076 | muggle-string@0.4.1: {} 3077 | 3078 | nanoid@3.3.7: {} 3079 | 3080 | natural-compare@1.4.0: {} 3081 | 3082 | object-inspect@1.13.3: {} 3083 | 3084 | object-keys@1.1.1: {} 3085 | 3086 | object.assign@4.1.5: 3087 | dependencies: 3088 | call-bind: 1.0.7 3089 | define-properties: 1.2.1 3090 | has-symbols: 1.0.3 3091 | object-keys: 1.1.1 3092 | 3093 | object.fromentries@2.0.8: 3094 | dependencies: 3095 | call-bind: 1.0.7 3096 | define-properties: 1.2.1 3097 | es-abstract: 1.23.5 3098 | es-object-atoms: 1.0.0 3099 | 3100 | object.groupby@1.0.3: 3101 | dependencies: 3102 | call-bind: 1.0.7 3103 | define-properties: 1.2.1 3104 | es-abstract: 1.23.5 3105 | 3106 | object.values@1.2.0: 3107 | dependencies: 3108 | call-bind: 1.0.7 3109 | define-properties: 1.2.1 3110 | es-object-atoms: 1.0.0 3111 | 3112 | optionator@0.9.4: 3113 | dependencies: 3114 | deep-is: 0.1.4 3115 | fast-levenshtein: 2.0.6 3116 | levn: 0.4.1 3117 | prelude-ls: 1.2.1 3118 | type-check: 0.4.0 3119 | word-wrap: 1.2.5 3120 | 3121 | p-limit@3.1.0: 3122 | dependencies: 3123 | yocto-queue: 0.1.0 3124 | 3125 | p-locate@5.0.0: 3126 | dependencies: 3127 | p-limit: 3.1.0 3128 | 3129 | parent-module@1.0.1: 3130 | dependencies: 3131 | callsites: 3.1.0 3132 | 3133 | path-browserify@1.0.1: {} 3134 | 3135 | path-exists@4.0.0: {} 3136 | 3137 | path-key@3.1.1: {} 3138 | 3139 | path-parse@1.0.7: {} 3140 | 3141 | pathe@1.1.2: {} 3142 | 3143 | pathval@2.0.0: {} 3144 | 3145 | picocolors@1.1.1: {} 3146 | 3147 | picomatch@2.3.1: {} 3148 | 3149 | picomatch@4.0.2: {} 3150 | 3151 | pkg-types@1.2.1: 3152 | dependencies: 3153 | confbox: 0.1.8 3154 | mlly: 1.7.3 3155 | pathe: 1.1.2 3156 | 3157 | possible-typed-array-names@1.0.0: {} 3158 | 3159 | postcss@8.4.49: 3160 | dependencies: 3161 | nanoid: 3.3.7 3162 | picocolors: 1.1.1 3163 | source-map-js: 1.2.1 3164 | 3165 | prelude-ls@1.2.1: {} 3166 | 3167 | punycode@2.3.1: {} 3168 | 3169 | queue-microtask@1.2.3: {} 3170 | 3171 | regexp.prototype.flags@1.5.3: 3172 | dependencies: 3173 | call-bind: 1.0.7 3174 | define-properties: 1.2.1 3175 | es-errors: 1.3.0 3176 | set-function-name: 2.0.2 3177 | 3178 | require-from-string@2.0.2: {} 3179 | 3180 | resolve-from@4.0.0: {} 3181 | 3182 | resolve-pkg-maps@1.0.0: {} 3183 | 3184 | resolve@1.22.8: 3185 | dependencies: 3186 | is-core-module: 2.15.1 3187 | path-parse: 1.0.7 3188 | supports-preserve-symlinks-flag: 1.0.0 3189 | 3190 | reusify@1.0.4: {} 3191 | 3192 | rollup@4.27.3: 3193 | dependencies: 3194 | '@types/estree': 1.0.6 3195 | optionalDependencies: 3196 | '@rollup/rollup-android-arm-eabi': 4.27.3 3197 | '@rollup/rollup-android-arm64': 4.27.3 3198 | '@rollup/rollup-darwin-arm64': 4.27.3 3199 | '@rollup/rollup-darwin-x64': 4.27.3 3200 | '@rollup/rollup-freebsd-arm64': 4.27.3 3201 | '@rollup/rollup-freebsd-x64': 4.27.3 3202 | '@rollup/rollup-linux-arm-gnueabihf': 4.27.3 3203 | '@rollup/rollup-linux-arm-musleabihf': 4.27.3 3204 | '@rollup/rollup-linux-arm64-gnu': 4.27.3 3205 | '@rollup/rollup-linux-arm64-musl': 4.27.3 3206 | '@rollup/rollup-linux-powerpc64le-gnu': 4.27.3 3207 | '@rollup/rollup-linux-riscv64-gnu': 4.27.3 3208 | '@rollup/rollup-linux-s390x-gnu': 4.27.3 3209 | '@rollup/rollup-linux-x64-gnu': 4.27.3 3210 | '@rollup/rollup-linux-x64-musl': 4.27.3 3211 | '@rollup/rollup-win32-arm64-msvc': 4.27.3 3212 | '@rollup/rollup-win32-ia32-msvc': 4.27.3 3213 | '@rollup/rollup-win32-x64-msvc': 4.27.3 3214 | fsevents: 2.3.3 3215 | 3216 | run-parallel@1.2.0: 3217 | dependencies: 3218 | queue-microtask: 1.2.3 3219 | 3220 | safe-array-concat@1.1.2: 3221 | dependencies: 3222 | call-bind: 1.0.7 3223 | get-intrinsic: 1.2.4 3224 | has-symbols: 1.0.3 3225 | isarray: 2.0.5 3226 | 3227 | safe-regex-test@1.0.3: 3228 | dependencies: 3229 | call-bind: 1.0.7 3230 | es-errors: 1.3.0 3231 | is-regex: 1.1.4 3232 | 3233 | semver@6.3.1: {} 3234 | 3235 | semver@7.5.4: 3236 | dependencies: 3237 | lru-cache: 6.0.0 3238 | 3239 | semver@7.6.3: {} 3240 | 3241 | set-function-length@1.2.2: 3242 | dependencies: 3243 | define-data-property: 1.1.4 3244 | es-errors: 1.3.0 3245 | function-bind: 1.1.2 3246 | get-intrinsic: 1.2.4 3247 | gopd: 1.0.1 3248 | has-property-descriptors: 1.0.2 3249 | 3250 | set-function-name@2.0.2: 3251 | dependencies: 3252 | define-data-property: 1.1.4 3253 | es-errors: 1.3.0 3254 | functions-have-names: 1.2.3 3255 | has-property-descriptors: 1.0.2 3256 | 3257 | shebang-command@2.0.0: 3258 | dependencies: 3259 | shebang-regex: 3.0.0 3260 | 3261 | shebang-regex@3.0.0: {} 3262 | 3263 | side-channel@1.0.6: 3264 | dependencies: 3265 | call-bind: 1.0.7 3266 | es-errors: 1.3.0 3267 | get-intrinsic: 1.2.4 3268 | object-inspect: 1.13.3 3269 | 3270 | siginfo@2.0.0: {} 3271 | 3272 | sirv@3.0.0: 3273 | dependencies: 3274 | '@polka/url': 1.0.0-next.28 3275 | mrmime: 2.0.0 3276 | totalist: 3.0.1 3277 | 3278 | source-map-js@1.2.1: {} 3279 | 3280 | source-map@0.6.1: {} 3281 | 3282 | sprintf-js@1.0.3: {} 3283 | 3284 | stable-hash@0.0.4: {} 3285 | 3286 | stackback@0.0.2: {} 3287 | 3288 | std-env@3.8.0: {} 3289 | 3290 | string-argv@0.3.2: {} 3291 | 3292 | string.prototype.trim@1.2.9: 3293 | dependencies: 3294 | call-bind: 1.0.7 3295 | define-properties: 1.2.1 3296 | es-abstract: 1.23.5 3297 | es-object-atoms: 1.0.0 3298 | 3299 | string.prototype.trimend@1.0.8: 3300 | dependencies: 3301 | call-bind: 1.0.7 3302 | define-properties: 1.2.1 3303 | es-object-atoms: 1.0.0 3304 | 3305 | string.prototype.trimstart@1.0.8: 3306 | dependencies: 3307 | call-bind: 1.0.7 3308 | define-properties: 1.2.1 3309 | es-object-atoms: 1.0.0 3310 | 3311 | strip-bom@3.0.0: {} 3312 | 3313 | strip-json-comments@3.1.1: {} 3314 | 3315 | supports-color@7.2.0: 3316 | dependencies: 3317 | has-flag: 4.0.0 3318 | 3319 | supports-color@8.1.1: 3320 | dependencies: 3321 | has-flag: 4.0.0 3322 | 3323 | supports-preserve-symlinks-flag@1.0.0: {} 3324 | 3325 | tapable@2.2.1: {} 3326 | 3327 | tinybench@2.9.0: {} 3328 | 3329 | tinyexec@0.3.1: {} 3330 | 3331 | tinyglobby@0.2.10: 3332 | dependencies: 3333 | fdir: 6.4.2(picomatch@4.0.2) 3334 | picomatch: 4.0.2 3335 | 3336 | tinypool@1.0.2: {} 3337 | 3338 | tinyrainbow@1.2.0: {} 3339 | 3340 | tinyspy@3.0.2: {} 3341 | 3342 | to-regex-range@5.0.1: 3343 | dependencies: 3344 | is-number: 7.0.0 3345 | 3346 | totalist@3.0.1: {} 3347 | 3348 | ts-api-utils@1.4.0(typescript@5.6.3): 3349 | dependencies: 3350 | typescript: 5.6.3 3351 | 3352 | ts-node@10.9.2(@types/node@22.9.0)(typescript@5.6.3): 3353 | dependencies: 3354 | '@cspotcode/source-map-support': 0.8.1 3355 | '@tsconfig/node10': 1.0.11 3356 | '@tsconfig/node12': 1.0.11 3357 | '@tsconfig/node14': 1.0.3 3358 | '@tsconfig/node16': 1.0.4 3359 | '@types/node': 22.9.0 3360 | acorn: 8.14.0 3361 | acorn-walk: 8.3.4 3362 | arg: 4.1.3 3363 | create-require: 1.1.1 3364 | diff: 4.0.2 3365 | make-error: 1.3.6 3366 | typescript: 5.6.3 3367 | v8-compile-cache-lib: 3.0.1 3368 | yn: 3.1.1 3369 | 3370 | tsconfig-paths@3.15.0: 3371 | dependencies: 3372 | '@types/json5': 0.0.29 3373 | json5: 1.0.2 3374 | minimist: 1.2.8 3375 | strip-bom: 3.0.0 3376 | 3377 | tslib@2.8.1: {} 3378 | 3379 | type-check@0.4.0: 3380 | dependencies: 3381 | prelude-ls: 1.2.1 3382 | 3383 | typed-array-buffer@1.0.2: 3384 | dependencies: 3385 | call-bind: 1.0.7 3386 | es-errors: 1.3.0 3387 | is-typed-array: 1.1.13 3388 | 3389 | typed-array-byte-length@1.0.1: 3390 | dependencies: 3391 | call-bind: 1.0.7 3392 | for-each: 0.3.3 3393 | gopd: 1.0.1 3394 | has-proto: 1.0.3 3395 | is-typed-array: 1.1.13 3396 | 3397 | typed-array-byte-offset@1.0.2: 3398 | dependencies: 3399 | available-typed-arrays: 1.0.7 3400 | call-bind: 1.0.7 3401 | for-each: 0.3.3 3402 | gopd: 1.0.1 3403 | has-proto: 1.0.3 3404 | is-typed-array: 1.1.13 3405 | 3406 | typed-array-length@1.0.6: 3407 | dependencies: 3408 | call-bind: 1.0.7 3409 | for-each: 0.3.3 3410 | gopd: 1.0.1 3411 | has-proto: 1.0.3 3412 | is-typed-array: 1.1.13 3413 | possible-typed-array-names: 1.0.0 3414 | 3415 | typescript-eslint@8.15.0(eslint@9.15.0)(typescript@5.6.3): 3416 | dependencies: 3417 | '@typescript-eslint/eslint-plugin': 8.15.0(@typescript-eslint/parser@8.15.0(eslint@9.15.0)(typescript@5.6.3))(eslint@9.15.0)(typescript@5.6.3) 3418 | '@typescript-eslint/parser': 8.15.0(eslint@9.15.0)(typescript@5.6.3) 3419 | '@typescript-eslint/utils': 8.15.0(eslint@9.15.0)(typescript@5.6.3) 3420 | eslint: 9.15.0 3421 | optionalDependencies: 3422 | typescript: 5.6.3 3423 | transitivePeerDependencies: 3424 | - supports-color 3425 | 3426 | typescript@5.4.2: {} 3427 | 3428 | typescript@5.6.3: {} 3429 | 3430 | ufo@1.5.4: {} 3431 | 3432 | unbox-primitive@1.0.2: 3433 | dependencies: 3434 | call-bind: 1.0.7 3435 | has-bigints: 1.0.2 3436 | has-symbols: 1.0.3 3437 | which-boxed-primitive: 1.0.2 3438 | 3439 | undici-types@6.19.8: {} 3440 | 3441 | universalify@0.1.2: {} 3442 | 3443 | uri-js@4.4.1: 3444 | dependencies: 3445 | punycode: 2.3.1 3446 | 3447 | v8-compile-cache-lib@3.0.1: {} 3448 | 3449 | vite-node@2.1.5(@types/node@22.9.0): 3450 | dependencies: 3451 | cac: 6.7.14 3452 | debug: 4.3.7 3453 | es-module-lexer: 1.5.4 3454 | pathe: 1.1.2 3455 | vite: 5.4.11(@types/node@22.9.0) 3456 | transitivePeerDependencies: 3457 | - '@types/node' 3458 | - less 3459 | - lightningcss 3460 | - sass 3461 | - sass-embedded 3462 | - stylus 3463 | - sugarss 3464 | - supports-color 3465 | - terser 3466 | 3467 | vite-plugin-dts@4.3.0(@types/node@22.9.0)(rollup@4.27.3)(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)): 3468 | dependencies: 3469 | '@microsoft/api-extractor': 7.47.11(@types/node@22.9.0) 3470 | '@rollup/pluginutils': 5.1.3(rollup@4.27.3) 3471 | '@volar/typescript': 2.4.10 3472 | '@vue/language-core': 2.1.6(typescript@5.6.3) 3473 | compare-versions: 6.1.1 3474 | debug: 4.3.7 3475 | kolorist: 1.8.0 3476 | local-pkg: 0.5.1 3477 | magic-string: 0.30.13 3478 | typescript: 5.6.3 3479 | optionalDependencies: 3480 | vite: 5.4.11(@types/node@22.9.0) 3481 | transitivePeerDependencies: 3482 | - '@types/node' 3483 | - rollup 3484 | - supports-color 3485 | 3486 | vite@5.4.11(@types/node@22.9.0): 3487 | dependencies: 3488 | esbuild: 0.21.5 3489 | postcss: 8.4.49 3490 | rollup: 4.27.3 3491 | optionalDependencies: 3492 | '@types/node': 22.9.0 3493 | fsevents: 2.3.3 3494 | 3495 | vitest@2.1.5(@types/node@22.9.0)(@vitest/ui@2.1.5): 3496 | dependencies: 3497 | '@vitest/expect': 2.1.5 3498 | '@vitest/mocker': 2.1.5(vite@5.4.11(@types/node@22.9.0)) 3499 | '@vitest/pretty-format': 2.1.5 3500 | '@vitest/runner': 2.1.5 3501 | '@vitest/snapshot': 2.1.5 3502 | '@vitest/spy': 2.1.5 3503 | '@vitest/utils': 2.1.5 3504 | chai: 5.1.2 3505 | debug: 4.3.7 3506 | expect-type: 1.1.0 3507 | magic-string: 0.30.13 3508 | pathe: 1.1.2 3509 | std-env: 3.8.0 3510 | tinybench: 2.9.0 3511 | tinyexec: 0.3.1 3512 | tinypool: 1.0.2 3513 | tinyrainbow: 1.2.0 3514 | vite: 5.4.11(@types/node@22.9.0) 3515 | vite-node: 2.1.5(@types/node@22.9.0) 3516 | why-is-node-running: 2.3.0 3517 | optionalDependencies: 3518 | '@types/node': 22.9.0 3519 | '@vitest/ui': 2.1.5(vitest@2.1.5) 3520 | transitivePeerDependencies: 3521 | - less 3522 | - lightningcss 3523 | - msw 3524 | - sass 3525 | - sass-embedded 3526 | - stylus 3527 | - sugarss 3528 | - supports-color 3529 | - terser 3530 | 3531 | vscode-uri@3.0.8: {} 3532 | 3533 | which-boxed-primitive@1.0.2: 3534 | dependencies: 3535 | is-bigint: 1.0.4 3536 | is-boolean-object: 1.1.2 3537 | is-number-object: 1.0.7 3538 | is-string: 1.0.7 3539 | is-symbol: 1.0.4 3540 | 3541 | which-typed-array@1.1.15: 3542 | dependencies: 3543 | available-typed-arrays: 1.0.7 3544 | call-bind: 1.0.7 3545 | for-each: 0.3.3 3546 | gopd: 1.0.1 3547 | has-tostringtag: 1.0.2 3548 | 3549 | which@2.0.2: 3550 | dependencies: 3551 | isexe: 2.0.0 3552 | 3553 | why-is-node-running@2.3.0: 3554 | dependencies: 3555 | siginfo: 2.0.0 3556 | stackback: 0.0.2 3557 | 3558 | word-wrap@1.2.5: {} 3559 | 3560 | yallist@4.0.0: {} 3561 | 3562 | yn@3.1.1: {} 3563 | 3564 | yocto-queue@0.1.0: {} 3565 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { ConfigWithExtends } from "typescript-eslint"; 2 | import { rule as objectKeysRule } from "./rules/objectKeys"; 3 | import { rule as typeKeysRule } from "./rules/typeKeys"; 4 | import { rule as importObjectKeysRule } from "./rules/importObject"; 5 | import { rule as exportObjectKeysRule } from "./rules/exportObject"; 6 | 7 | const recommendedRules = { 8 | "sort-keys-custom-order/export-object-keys": "error", 9 | "sort-keys-custom-order/import-object-keys": "error", 10 | "sort-keys-custom-order/object-keys": "error", 11 | "sort-keys-custom-order/type-keys": "error" 12 | } as const; 13 | 14 | const rules = { 15 | "export-object-keys": exportObjectKeysRule, 16 | "import-object-keys": importObjectKeysRule, 17 | "object-keys": objectKeysRule, 18 | "type-keys": typeKeysRule 19 | }; 20 | 21 | const base = { 22 | meta: { 23 | name: "eslint-plugin-sort-keys-custom-order", 24 | version: "2.0.2" 25 | }, 26 | processors: {}, 27 | rules 28 | }; 29 | 30 | export default { 31 | ...base, 32 | configs: { 33 | "flat/recommended": { 34 | plugins: { "sort-keys-custom-order": base }, 35 | rules: recommendedRules 36 | }, 37 | recommended: { 38 | plugins: ["sort-keys-custom-order"], 39 | rules: recommendedRules 40 | } 41 | } 42 | }; 43 | -------------------------------------------------------------------------------- /src/lib/index.ts: -------------------------------------------------------------------------------- 1 | import { TSESLint, TSESTree } from "@typescript-eslint/utils"; 2 | 3 | export function getOrderFunction(orderedKeys: Array | undefined, sorting: "asc" | "desc" | "none" | undefined): (a: string, b: string) => boolean { 4 | return (a: string, b: string) => { 5 | if (orderedKeys) { 6 | const isAOrderedKeys = orderedKeys.includes(a); 7 | const isBOrderedKeys = orderedKeys.includes(b); 8 | 9 | if (isAOrderedKeys && !isBOrderedKeys) { 10 | return true; 11 | } 12 | 13 | if (!isAOrderedKeys && isBOrderedKeys) { 14 | return false; 15 | } 16 | 17 | if (isAOrderedKeys && isBOrderedKeys) { 18 | return orderedKeys.indexOf(a) <= orderedKeys.indexOf(b); 19 | } 20 | } 21 | 22 | switch (sorting) { 23 | case "desc": 24 | return a.toLowerCase() >= b.toLowerCase(); 25 | case "none": 26 | return true; 27 | case "asc": 28 | default: 29 | return a.toLowerCase() <= b.toLowerCase(); 30 | } 31 | }; 32 | } 33 | 34 | export type TNodeStack = { 35 | name?: string, 36 | node?: TType, 37 | upper?: TNodeStack, 38 | } | undefined; 39 | 40 | export function getFixer 41 | (node: TProperty, nodeStack: TNodeStack, context: TSESLint.RuleContext) { 42 | return (fixer: TSESLint.RuleFixer) => { 43 | const fixes: Array = []; 44 | 45 | if (!nodeStack?.node) { 46 | return fixes; 47 | } 48 | 49 | const sourceCode = context.getSourceCode(); 50 | swapProperty(sourceCode, fixes, fixer, node, nodeStack.node); 51 | 52 | return fixes; 53 | }; 54 | } 55 | 56 | function swapProperty 57 | (sourceCode: Readonly, fixes: Array, fixer: TSESLint.RuleFixer, fromNode: TProperty, toNode: TProperty): void { 58 | 59 | const fromNodeRange = getNodeRange(fromNode); 60 | const fromNodeComma = getComma(fromNode); 61 | 62 | const toNodeRange = getNodeRange(toNode); 63 | const toNodeComma = getComma(toNode); 64 | 65 | if (!!fromNodeComma !== !!toNodeComma) { 66 | if (fromNodeComma) { 67 | const commaRange = { 68 | end: sourceCode.getIndexFromLoc(fromNodeComma.loc.end), 69 | start: sourceCode.getIndexFromLoc(fromNodeComma.loc.start) 70 | }; 71 | 72 | fromNodeRange.end = Math.max(fromNodeRange.end, commaRange.end); 73 | 74 | const toNodeLastToken = sourceCode.getLastToken(toNode); 75 | if (!toNodeLastToken) { 76 | return; 77 | } 78 | const commaPosition = sourceCode.getIndexFromLoc(toNodeLastToken.loc.end); 79 | 80 | const fromNodeCodeBeforeComma = sourceCode.text.slice(fromNodeRange.start, commaRange.start); 81 | const fromNodeCodeAfterComma = sourceCode.text.slice(commaRange.end, fromNodeRange.end); 82 | 83 | const toNodeCodeBeforeComma = sourceCode.text.slice(toNodeRange.start, commaPosition); 84 | const toNodeCodeAfterComma = sourceCode.text.slice(commaPosition, toNodeRange.end); 85 | 86 | fixes.push(fixer.replaceTextRange([commaRange.end, fromNodeRange.end], toNodeCodeAfterComma)); 87 | fixes.push(fixer.replaceTextRange([fromNodeRange.start, commaRange.start], toNodeCodeBeforeComma)); 88 | fixes.push(fixer.replaceTextRange([commaPosition, toNodeRange.end], fromNodeCodeAfterComma)); 89 | fixes.push(fixer.replaceTextRange([toNodeRange.start, commaPosition], fromNodeCodeBeforeComma)); 90 | } 91 | else if (toNodeComma) { 92 | const commaRange = { 93 | end: sourceCode.getIndexFromLoc(toNodeComma.loc.end), 94 | start: sourceCode.getIndexFromLoc(toNodeComma.loc.start) 95 | }; 96 | 97 | toNodeRange.end = Math.max(toNodeRange.end, commaRange.end); 98 | 99 | const fromNodeLastToken = sourceCode.getLastToken(fromNode); 100 | if (!fromNodeLastToken) { 101 | return; 102 | } 103 | const commaPosition = sourceCode.getIndexFromLoc(fromNodeLastToken.loc.end); 104 | 105 | const fromNodeCodeBeforeComma = sourceCode.text.slice(fromNodeRange.start, commaPosition); 106 | const fromNodeCodeAfterComma = sourceCode.text.slice(commaPosition, fromNodeRange.end); 107 | 108 | const toNodeCodeBeforeComma = sourceCode.text.slice(toNodeRange.start, commaRange.start); 109 | const toNodeCodeAfterComma = sourceCode.text.slice(commaRange.end, toNodeRange.end); 110 | 111 | fixes.push(fixer.replaceTextRange([commaPosition, fromNodeRange.end], toNodeCodeAfterComma)); 112 | fixes.push(fixer.replaceTextRange([fromNodeRange.start, commaPosition], toNodeCodeBeforeComma)); 113 | fixes.push(fixer.replaceTextRange([commaRange.end, toNodeRange.end], fromNodeCodeAfterComma)); 114 | fixes.push(fixer.replaceTextRange([toNodeRange.start, commaRange.start], fromNodeCodeBeforeComma)); 115 | } 116 | } 117 | else { 118 | const fromNodeCode = sourceCode.text.slice(fromNodeRange.start, fromNodeRange.end); 119 | const toNodeCode = sourceCode.text.slice(toNodeRange.start, toNodeRange.end); 120 | 121 | fixes.push(fixer.replaceTextRange([fromNodeRange.start, fromNodeRange.end], toNodeCode)); 122 | fixes.push(fixer.replaceTextRange([toNodeRange.start, toNodeRange.end], fromNodeCode)); 123 | } 124 | 125 | function getNodeRange(node: TProperty) { 126 | let nextToken = sourceCode.getTokenAfter(node); 127 | 128 | if (nextToken && nextToken.type === "Punctuator" && nextToken.value === ",") { 129 | nextToken = sourceCode.getTokenAfter(nextToken); 130 | } 131 | 132 | const prevToken = sourceCode.getTokenBefore(node); 133 | 134 | if (!prevToken || !nextToken) { 135 | throw Error("eslint-plugin-sort-keys-custom-order: Error while swapping properties"); 136 | } 137 | 138 | const nodeLoc = { 139 | end: sourceCode.getLastToken(node)?.loc.end, 140 | start: sourceCode.getFirstToken(node)?.loc.start 141 | }; 142 | 143 | if (!nodeLoc.start || !nodeLoc.end) { 144 | throw Error("eslint-plugin-sort-keys-custom-order: Error while swapping properties"); 145 | } 146 | 147 | let start; 148 | 149 | if (prevToken.loc.end.line === nodeLoc.start.line) { 150 | start = sourceCode.getIndexFromLoc(nodeLoc.start); 151 | } 152 | else { 153 | start = sourceCode.lineStartIndices[prevToken.loc.end.line]; 154 | } 155 | 156 | let end; 157 | if (nextToken.loc.start.line === nodeLoc.end.line) { 158 | end = sourceCode.getIndexFromLoc(nodeLoc.end); 159 | } 160 | else { 161 | end = sourceCode.lineStartIndices[node.loc.end.line]; 162 | } 163 | 164 | if (node.type === TSESTree.AST_NODE_TYPES.TSPropertySignature) { 165 | start = node.key.range[0]; 166 | end = node.typeAnnotation?.range[1] || node.key.range[1]; 167 | } 168 | 169 | return { end, start }; 170 | } 171 | 172 | function getComma(node: TProperty) { 173 | const nextToken = sourceCode.getTokenAfter(node); 174 | if (nextToken && nextToken.type === "Punctuator" && nextToken.value === ",") { 175 | return nextToken; 176 | } 177 | } 178 | } 179 | 180 | export function getPropertyName(node: TProperty): string | undefined { 181 | switch (node.key.type) { 182 | case "Literal": 183 | return String(node.key.value); 184 | case "TemplateLiteral": 185 | if (node.key.expressions.length === 0 && node.key.quasis.length === 1) { 186 | return node.key.quasis[0].value.cooked || undefined; 187 | } 188 | break; 189 | case "Identifier": 190 | if (!node.computed) { 191 | return node.key.name; 192 | } 193 | break; 194 | } 195 | } 196 | -------------------------------------------------------------------------------- /src/rules/exportObject/index.ts: -------------------------------------------------------------------------------- 1 | import { ESLintUtils } from "@typescript-eslint/utils"; 2 | import { TMessageIds, properties } from "./properties"; 3 | import { create } from "./rule"; 4 | import { createRule } from "@/utils"; 5 | 6 | const meta: ESLintUtils.NamedCreateRuleMeta = { 7 | docs: { 8 | description: "Require export object keys to be sorted with custom order", 9 | url: "https://github.com/hugoattal/eslint-plugin-sort-keys-custom-order" 10 | }, 11 | fixable: "code", 12 | messages: { 13 | "export-object-keys-error": "Expected export object keys to be in correct order. '{{thisName}}' should be before '{{prevName}}'." 14 | }, 15 | schema: [properties], 16 | type: "suggestion" 17 | }; 18 | 19 | export const rule = createRule({ 20 | create, 21 | defaultOptions: [], 22 | meta, 23 | name: "export-object-keys" 24 | }); 25 | -------------------------------------------------------------------------------- /src/rules/exportObject/properties.ts: -------------------------------------------------------------------------------- 1 | import type { JSONSchema } from "@typescript-eslint/utils"; 2 | 3 | export const properties: JSONSchema.JSONSchema4 = { 4 | additionalProperties: false, 5 | properties: { 6 | orderedKeys: { 7 | type: "array" 8 | }, 9 | sorting: { 10 | enum: ["asc", "desc", "none"], 11 | type: "string" 12 | } 13 | }, 14 | type: "object" 15 | }; 16 | 17 | export type TOptions = Array<{ 18 | orderedKeys?: Array; 19 | sorting?: "asc" | "desc" | "none"; 20 | }> 21 | 22 | export type TMessageIds = "export-object-keys-error" 23 | 24 | -------------------------------------------------------------------------------- /src/rules/exportObject/rule.spec.ts: -------------------------------------------------------------------------------- 1 | import { RuleTester } from "@typescript-eslint/rule-tester"; 2 | import { invalid, valid } from "./ruleTester"; 3 | import { rule } from "./index"; 4 | 5 | describe("export-object-keys", () => { 6 | const ruleTester = new RuleTester(); 7 | 8 | ruleTester.run( 9 | "export-object-keys", 10 | rule, 11 | { 12 | invalid, 13 | valid 14 | } 15 | ); 16 | }); 17 | -------------------------------------------------------------------------------- /src/rules/exportObject/rule.ts: -------------------------------------------------------------------------------- 1 | import { TSESLint, TSESTree } from "@typescript-eslint/utils"; 2 | import { TMessageIds, TOptions } from "./properties"; 3 | import { getFixer, getOrderFunction, TNodeStack } from "@/lib"; 4 | 5 | export function create(context: TSESLint.RuleContext): TSESLint.RuleListener { 6 | let nodeStack: TNodeStack; 7 | 8 | const isInOrder = getOrderFunction(context.options[0]?.orderedKeys, context.options[0]?.sorting); 9 | 10 | return { 11 | ExportNamedDeclaration() { 12 | nodeStack = { 13 | upper: nodeStack 14 | }; 15 | }, 16 | "ExportNamedDeclaration:exit"() { 17 | if (!nodeStack) { 18 | return; 19 | } 20 | 21 | nodeStack = nodeStack.upper; 22 | }, 23 | ExportSpecifier(node) { 24 | if (!nodeStack) { 25 | return; 26 | } 27 | 28 | const prevNodeStack: TNodeStack = { 29 | name: nodeStack.name, 30 | node: nodeStack.node, 31 | upper: nodeStack 32 | }; 33 | 34 | const thisName = node.exported.name; 35 | 36 | if (thisName) { 37 | nodeStack.name = thisName; 38 | nodeStack.node = node || prevNodeStack.node; 39 | } 40 | 41 | if (!prevNodeStack.name || !thisName) { 42 | return; 43 | } 44 | 45 | if (!isInOrder(prevNodeStack.name, thisName)) { 46 | if (!node.loc) { 47 | return; 48 | } 49 | 50 | context.report({ 51 | data: { 52 | prevName: prevNodeStack.name, 53 | thisName 54 | }, 55 | fix: getFixer(node, prevNodeStack, context), 56 | loc: node.loc, 57 | messageId: "export-object-keys-error", 58 | node 59 | }); 60 | } 61 | } 62 | }; 63 | } 64 | 65 | 66 | -------------------------------------------------------------------------------- /src/rules/exportObject/ruleTester.ts: -------------------------------------------------------------------------------- 1 | import { ValidTestCase, InvalidTestCase } from "@typescript-eslint/rule-tester"; 2 | import { TMessageIds, TOptions } from "./properties"; 3 | 4 | export const valid: Array> = [ 5 | { 6 | code: "export {a,b,c}" 7 | } 8 | ]; 9 | 10 | export const invalid: Array> = [ 11 | { 12 | code: "export {b,a,c}", 13 | errors: [{ messageId: "export-object-keys-error" }], 14 | output: "export {a,b,c}" 15 | } 16 | ]; 17 | -------------------------------------------------------------------------------- /src/rules/importObject/index.ts: -------------------------------------------------------------------------------- 1 | import { ESLintUtils } from "@typescript-eslint/utils"; 2 | import { TMessageIds, properties } from "./properties"; 3 | import { create } from "./rule"; 4 | import { createRule } from "@/utils"; 5 | 6 | const meta: ESLintUtils.NamedCreateRuleMeta = { 7 | docs: { 8 | description: "Require import object keys to be sorted with custom order", 9 | url: "https://github.com/hugoattal/eslint-plugin-sort-keys-custom-order" 10 | }, 11 | fixable: "code", 12 | messages: { 13 | "import-object-keys-error": "Expected import object keys to be in correct order. '{{thisName}}' should be before '{{prevName}}'." 14 | }, 15 | schema: [properties], 16 | type: "suggestion" 17 | }; 18 | 19 | export const rule = createRule({ 20 | create, 21 | defaultOptions: [], 22 | meta, 23 | name: "import-object-keys" 24 | }); 25 | 26 | -------------------------------------------------------------------------------- /src/rules/importObject/properties.ts: -------------------------------------------------------------------------------- 1 | import type { JSONSchema } from "@typescript-eslint/utils"; 2 | 3 | export const properties: JSONSchema.JSONSchema4 = { 4 | additionalProperties: false, 5 | properties: { 6 | orderedKeys: { 7 | type: "array" 8 | }, 9 | sorting: { 10 | enum: ["asc", "desc", "none"], 11 | type: "string" 12 | } 13 | }, 14 | type: "object" 15 | }; 16 | 17 | export type TOptions = Array<{ 18 | orderedKeys?: Array, 19 | sorting?: "asc" | "desc" | "none" 20 | }> 21 | 22 | export type TMessageIds = "import-object-keys-error" 23 | 24 | -------------------------------------------------------------------------------- /src/rules/importObject/rule.spec.ts: -------------------------------------------------------------------------------- 1 | import { RuleTester } from "@typescript-eslint/rule-tester"; 2 | import { invalid, valid } from "./ruleTester"; 3 | import { rule } from "./index"; 4 | 5 | describe("import-object-keys", () => { 6 | const ruleTester = new RuleTester(); 7 | 8 | ruleTester.run( 9 | "import-object-keys", 10 | rule, 11 | { 12 | invalid, 13 | valid 14 | } 15 | ); 16 | }); 17 | -------------------------------------------------------------------------------- /src/rules/importObject/rule.ts: -------------------------------------------------------------------------------- 1 | import { TSESLint, TSESTree } from "@typescript-eslint/utils"; 2 | import { TMessageIds, TOptions } from "./properties"; 3 | import { getFixer, getOrderFunction, TNodeStack } from "@/lib"; 4 | 5 | export function create(context: TSESLint.RuleContext): TSESLint.RuleListener { 6 | let nodeStack: TNodeStack; 7 | 8 | const isInOrder = getOrderFunction(context.options[0]?.orderedKeys, context.options[0]?.sorting); 9 | 10 | return { 11 | ImportDeclaration() { 12 | nodeStack = { 13 | upper: nodeStack 14 | }; 15 | }, 16 | "ImportDeclaration:exit"() { 17 | if (!nodeStack) { 18 | return; 19 | } 20 | 21 | nodeStack = nodeStack.upper; 22 | }, 23 | ImportSpecifier(node) { 24 | if (!nodeStack) { 25 | return; 26 | } 27 | 28 | const prevNodeStack: TNodeStack = { 29 | name: nodeStack.name, 30 | node: nodeStack.node, 31 | upper: nodeStack 32 | }; 33 | 34 | const thisName = node.imported.name; 35 | 36 | if (thisName) { 37 | nodeStack.name = thisName; 38 | nodeStack.node = node || prevNodeStack.node; 39 | } 40 | 41 | if (!prevNodeStack.name || !thisName) { 42 | return; 43 | } 44 | 45 | if (!isInOrder(prevNodeStack.name, thisName)) { 46 | if (!node.loc) { 47 | return; 48 | } 49 | 50 | context.report({ 51 | data: { 52 | prevName: prevNodeStack.name, 53 | thisName 54 | }, 55 | fix: getFixer(node, prevNodeStack, context), 56 | loc: node.loc, 57 | messageId: "import-object-keys-error", 58 | node 59 | }); 60 | } 61 | } 62 | }; 63 | } 64 | 65 | 66 | -------------------------------------------------------------------------------- /src/rules/importObject/ruleTester.ts: -------------------------------------------------------------------------------- 1 | import { ValidTestCase, InvalidTestCase } from "@typescript-eslint/rule-tester"; 2 | import { TMessageIds, TOptions } from "./properties"; 3 | 4 | export const valid: Array> = [ 5 | { 6 | code: "import {a,b,c} from 'test'" 7 | } 8 | ]; 9 | 10 | export const invalid: Array> = [ 11 | { 12 | code: "import {b,a,c} from 'test'", 13 | errors: [{ messageId: "import-object-keys-error" }], 14 | output: "import {a,b,c} from 'test'" 15 | } 16 | ]; 17 | -------------------------------------------------------------------------------- /src/rules/objectKeys/index.ts: -------------------------------------------------------------------------------- 1 | import { ESLintUtils } from "@typescript-eslint/utils"; 2 | import { TMessageIds, properties } from "./properties"; 3 | import { create } from "./rule"; 4 | import { createRule } from "@/utils"; 5 | 6 | const meta: ESLintUtils.NamedCreateRuleMeta = { 7 | docs: { 8 | description: "Require object keys to be sorted with custom order", 9 | url: "https://github.com/hugoattal/eslint-plugin-sort-keys-custom-order" 10 | }, 11 | fixable: "code", 12 | messages: { 13 | "object-keys-error": "Expected object keys to be in correct order. '{{thisName}}' should be before '{{prevName}}'." 14 | }, 15 | schema: [properties], 16 | type: "suggestion" 17 | }; 18 | 19 | export const rule = createRule({ 20 | create, 21 | defaultOptions: [], 22 | meta, 23 | name: "object-keys" 24 | }); 25 | 26 | -------------------------------------------------------------------------------- /src/rules/objectKeys/properties.ts: -------------------------------------------------------------------------------- 1 | import type { JSONSchema } from "@typescript-eslint/utils"; 2 | 3 | export const properties: JSONSchema.JSONSchema4 = { 4 | additionalProperties: false, 5 | properties: { 6 | orderedKeys: { 7 | type: "array" 8 | }, 9 | sorting: { 10 | enum: ["asc", "desc", "none"], 11 | type: "string" 12 | } 13 | }, 14 | type: "object" 15 | }; 16 | 17 | export type TOptions = Array<{ 18 | orderedKeys?: Array, 19 | sorting?: "asc" | "desc" | "none" 20 | }> 21 | 22 | export type TMessageIds = "object-keys-error" 23 | 24 | -------------------------------------------------------------------------------- /src/rules/objectKeys/rule.spec.ts: -------------------------------------------------------------------------------- 1 | import { RuleTester } from "@typescript-eslint/rule-tester"; 2 | import { invalid, valid } from "./ruleTester"; 3 | import { rule } from "./index"; 4 | 5 | describe("object-keys", () => { 6 | const ruleTester = new RuleTester(); 7 | 8 | ruleTester.run( 9 | "object-keys", 10 | rule, 11 | { 12 | invalid, 13 | valid 14 | } 15 | ); 16 | }); 17 | -------------------------------------------------------------------------------- /src/rules/objectKeys/rule.ts: -------------------------------------------------------------------------------- 1 | import { TSESLint, TSESTree } from "@typescript-eslint/utils"; 2 | import { TMessageIds, TOptions } from "./properties"; 3 | import { getFixer, getOrderFunction, getPropertyName, TNodeStack } from "@/lib"; 4 | 5 | export function create(context: TSESLint.RuleContext): TSESLint.RuleListener { 6 | let nodeStack: TNodeStack; 7 | 8 | const isInOrder = getOrderFunction(context.options[0]?.orderedKeys, context.options[0]?.sorting); 9 | 10 | return { 11 | ObjectExpression() { 12 | nodeStack = { 13 | name: undefined, 14 | node: undefined, 15 | upper: nodeStack 16 | }; 17 | }, 18 | "ObjectExpression:exit"() { 19 | if (!nodeStack) { 20 | return; 21 | } 22 | 23 | nodeStack = nodeStack.upper; 24 | }, 25 | ObjectPattern() { 26 | nodeStack = { 27 | name: undefined, 28 | node: undefined, 29 | upper: nodeStack 30 | }; 31 | }, 32 | "ObjectPattern:exit"() { 33 | if (!nodeStack) { 34 | return; 35 | } 36 | 37 | nodeStack = nodeStack.upper; 38 | }, 39 | Property(node) { 40 | if (!nodeStack) { 41 | return; 42 | } 43 | 44 | const prevNodeStack: TNodeStack = { 45 | name: nodeStack.name, 46 | node: nodeStack.node, 47 | upper: nodeStack 48 | }; 49 | 50 | const thisName = getPropertyName(node); 51 | 52 | if (thisName) { 53 | nodeStack.name = thisName; 54 | nodeStack.node = node || prevNodeStack.node; 55 | } 56 | 57 | if (!prevNodeStack.name || !thisName) { 58 | return; 59 | } 60 | 61 | if (!isInOrder(prevNodeStack.name, thisName)) { 62 | if (!node.key.loc) { 63 | return; 64 | } 65 | 66 | context.report({ 67 | data: { 68 | prevName: prevNodeStack.name, 69 | thisName 70 | }, 71 | fix: getFixer(node, prevNodeStack, context), 72 | loc: node.key.loc, 73 | messageId: "object-keys-error", 74 | node 75 | }); 76 | } 77 | } 78 | }; 79 | } 80 | 81 | 82 | -------------------------------------------------------------------------------- /src/rules/objectKeys/ruleTester.ts: -------------------------------------------------------------------------------- 1 | import { ValidTestCase, InvalidTestCase } from "@typescript-eslint/rule-tester"; 2 | import { TMessageIds, TOptions } from "./properties"; 3 | 4 | export const valid: Array> = [ 5 | { 6 | code: "const a = {a:1,b:2,c:3}" 7 | }, 8 | { 9 | code: "const a = {b:1,a:2,c:3}", 10 | options: [{ orderedKeys: ["b"] }] 11 | }, 12 | { 13 | code: "const a = {b:1,a:2,c:3}", 14 | options: [{ orderedKeys: ["b", "a"] }] 15 | }, 16 | { 17 | code: "const a = {b:1,c:2,a:3}", 18 | options: [{ orderedKeys: ["b"], sorting: "none" }] 19 | }, 20 | { 21 | code: `const test ={ 22 | async update({ name, password, username }: { name: string; password: { new: string; old: string }; username: string }) { 23 | } 24 | };` 25 | } 26 | ]; 27 | 28 | export const invalid: Array> = [ 29 | { 30 | code: "const a = {b:2,a:1,c:3}", 31 | errors: [{ messageId: "object-keys-error" }], 32 | output: "const a = {a:1,b:2,c:3}" 33 | }, 34 | { 35 | code: "const a = {a:1,c:3,b:2}", 36 | errors: [{ messageId: "object-keys-error" }], 37 | output: "const a = {a:1,b:2,c:3}" 38 | }, 39 | { 40 | code: "const a = {a:1,b:2,c:3}", 41 | errors: [{ messageId: "object-keys-error" }], 42 | options: [{ orderedKeys: ["b"] }], 43 | output: "const a = {b:2,a:1,c:3}" 44 | }, 45 | { 46 | code: "const a = {a:1,b:2,c:3}", 47 | errors: [{ messageId: "object-keys-error" }], 48 | options: [{ orderedKeys: ["b", "a"] }], 49 | output: "const a = {b:2,a:1,c:3}" 50 | }, 51 | { 52 | code: "const a = {c:1,b:2,a:3}", 53 | errors: [{ messageId: "object-keys-error" }], 54 | options: [{ orderedKeys: ["b"], sorting: "none" }], 55 | output: "const a = {b:2,c:1,a:3}" 56 | }, 57 | { 58 | code: `const a = { 59 | a:1, 60 | c:3, 61 | b:2 62 | }`, 63 | errors: [{ messageId: "object-keys-error" }], 64 | output: `const a = { 65 | a:1, 66 | b:2, 67 | c:3 68 | }` 69 | }, 70 | { 71 | code: `const a = { 72 | // b1 73 | // b2 74 | b:2, 75 | // a1 76 | // a2 77 | a:1, 78 | c:3 79 | }`, 80 | errors: [{ messageId: "object-keys-error" }], 81 | output: `const a = { 82 | // a1 83 | // a2 84 | a:1, 85 | // b1 86 | // b2 87 | b:2, 88 | c:3 89 | }` 90 | }, 91 | { 92 | code: `const a = { 93 | b:2, // b 94 | a:1, // a 95 | c:3 96 | }`, 97 | errors: [{ messageId: "object-keys-error" }], 98 | output: `const a = { 99 | a:1, // a 100 | b:2, // b 101 | c:3 102 | }` 103 | } 104 | ]; 105 | -------------------------------------------------------------------------------- /src/rules/typeKeys/index.ts: -------------------------------------------------------------------------------- 1 | import { ESLintUtils } from "@typescript-eslint/utils"; 2 | import { TMessageIds, properties } from "./properties"; 3 | import { create } from "./rule"; 4 | import { createRule } from "@/utils"; 5 | 6 | const meta: ESLintUtils.NamedCreateRuleMeta = { 7 | docs: { 8 | description: "Require type keys to be sorted with custom order", 9 | url: "https://github.com/hugoattal/eslint-plugin-sort-keys-custom-order" 10 | }, 11 | fixable: "code", 12 | messages: { 13 | "type-keys-error": "Expected type keys to be in correct order. '{{thisName}}' should be before '{{prevName}}'." 14 | }, 15 | schema: [properties], 16 | type: "suggestion" 17 | }; 18 | 19 | export const rule = createRule({ 20 | create, 21 | defaultOptions: [], 22 | meta, 23 | name: "type-keys" 24 | }); 25 | -------------------------------------------------------------------------------- /src/rules/typeKeys/properties.ts: -------------------------------------------------------------------------------- 1 | import type { JSONSchema } from "@typescript-eslint/utils"; 2 | 3 | export const properties: JSONSchema.JSONSchema4 = { 4 | additionalProperties: false, 5 | properties: { 6 | orderedKeys: { 7 | type: "array" 8 | }, 9 | sorting: { 10 | enum: ["asc", "desc", "none"], 11 | type: "string" 12 | } 13 | }, 14 | type: "object" 15 | }; 16 | 17 | export type TOptions = Array<{ 18 | orderedKeys?: Array 19 | sorting?: "asc" | "desc" | "none" 20 | }> 21 | 22 | export type TMessageIds = "type-keys-error" 23 | -------------------------------------------------------------------------------- /src/rules/typeKeys/rule.spec.ts: -------------------------------------------------------------------------------- 1 | import { RuleTester } from "@typescript-eslint/rule-tester"; 2 | import { invalid, valid } from "./ruleTester"; 3 | import { rule } from "./index"; 4 | 5 | describe("type-keys", () => { 6 | const ruleTester = new RuleTester(); 7 | 8 | ruleTester.run( 9 | "type-keys", 10 | rule, 11 | { 12 | invalid, 13 | valid 14 | } 15 | ); 16 | }); 17 | -------------------------------------------------------------------------------- /src/rules/typeKeys/rule.ts: -------------------------------------------------------------------------------- 1 | import { TSESLint, TSESTree } from "@typescript-eslint/utils"; 2 | import { TMessageIds, TOptions } from "./properties"; 3 | import { getFixer, getOrderFunction, getPropertyName, TNodeStack } from "@/lib"; 4 | 5 | export function create(context: TSESLint.RuleContext): TSESLint.RuleListener { 6 | let nodeStack: TNodeStack; 7 | 8 | const isInOrder = getOrderFunction(context.options[0]?.orderedKeys, context.options[0]?.sorting); 9 | 10 | return { 11 | TSInterfaceDeclaration() { 12 | nodeStack = { 13 | name: undefined, 14 | node: undefined, 15 | upper: nodeStack 16 | }; 17 | }, 18 | "TSInterfaceDeclaration:exit"() { 19 | if (!nodeStack) { 20 | return; 21 | } 22 | 23 | nodeStack = nodeStack.upper; 24 | }, 25 | TSPropertySignature(node) { 26 | if (!nodeStack) { 27 | return; 28 | } 29 | 30 | const prevNodeStack: TNodeStack = { 31 | name: nodeStack.name, 32 | node: nodeStack.node, 33 | upper: nodeStack 34 | }; 35 | 36 | const thisName = getPropertyName(node); 37 | 38 | if (thisName) { 39 | nodeStack.name = thisName; 40 | nodeStack.node = node || prevNodeStack.node; 41 | } 42 | 43 | if (!prevNodeStack.name || !thisName) { 44 | return; 45 | } 46 | 47 | if (!isInOrder(prevNodeStack.name, thisName)) { 48 | if (!node.key.loc) { 49 | return; 50 | } 51 | 52 | context.report({ 53 | data: { 54 | prevName: prevNodeStack.name, 55 | thisName 56 | }, 57 | fix: getFixer(node, prevNodeStack, context), 58 | loc: node.key.loc, 59 | messageId: "type-keys-error", 60 | node 61 | }); 62 | } 63 | }, 64 | TSTypeLiteral() { 65 | nodeStack = { 66 | name: undefined, 67 | node: undefined, 68 | upper: nodeStack 69 | }; 70 | }, 71 | "TSTypeLiteral:exit"() { 72 | if (!nodeStack) { 73 | return; 74 | } 75 | 76 | nodeStack = nodeStack.upper; 77 | } 78 | }; 79 | } 80 | -------------------------------------------------------------------------------- /src/rules/typeKeys/ruleTester.ts: -------------------------------------------------------------------------------- 1 | import { ValidTestCase, InvalidTestCase } from "@typescript-eslint/rule-tester"; 2 | import { TMessageIds, TOptions } from "./properties"; 3 | 4 | export const valid: Array> = [ 5 | { 6 | code: "type a = {a:1, b:2, c:3}" 7 | }, 8 | { 9 | code: "type a = {b:1, a:2, c:3}", 10 | options: [{ orderedKeys: ["b"] }] 11 | }, 12 | { 13 | code: "type a = {b:1, a:2, c:3}", 14 | options: [{ orderedKeys: ["b", "a"] }] 15 | }, 16 | { 17 | code: "function a(): Promise<{a: string, b: string}> {}" 18 | } 19 | ]; 20 | 21 | export const invalid: Array> = [ 22 | { 23 | code: "type a = {b:1, a:2, c:3}", 24 | errors: [{ messageId: "type-keys-error" }], 25 | output: "type a = {a:2, b:1, c:3}" 26 | }, 27 | { 28 | code: `type a = { 29 | b:1, 30 | a:2, 31 | c:3 32 | }`, 33 | errors: [{ messageId: "type-keys-error" }], 34 | output: `type a = { 35 | a:2, 36 | b:1, 37 | c:3 38 | }` 39 | }, 40 | { 41 | code: "type a = {a:1, b:2, c:3}", 42 | errors: [{ messageId: "type-keys-error" }], 43 | options: [{ orderedKeys: ["b"] }], 44 | output: "type a = {b:2, a:1, c:3}" 45 | }, 46 | { 47 | code: "type a = {a:1, b:2, c:3}", 48 | errors: [{ messageId: "type-keys-error" }], 49 | options: [{ orderedKeys: ["b", "a"] }], 50 | output: "type a = {b:2, a:1, c:3}" 51 | }, 52 | { 53 | code: "interface a {b:1, a:2, c:3}", 54 | errors: [{ messageId: "type-keys-error" }], 55 | output: "interface a {a:2, b:1, c:3}" 56 | }, 57 | { 58 | code: "function a(): Promise<{b: string, a: string}> {}", 59 | errors: [{ messageId: "type-keys-error" }], 60 | output: "function a(): Promise<{a: string, b: string}> {}" 61 | }, 62 | { 63 | code: "const a: {b: string, a: string} = {}", 64 | errors: [{ messageId: "type-keys-error" }], 65 | output: "const a: {a: string, b: string} = {}" 66 | } 67 | ]; 68 | 69 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | import { ESLintUtils } from "@typescript-eslint/utils"; 2 | 3 | 4 | export const createRule = ESLintUtils.RuleCreator( 5 | name => `https://github.com/hugoattal/eslint-plugin-sort-keys-custom-order#${ name }` 6 | ); 7 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "paths": { 5 | "@/*": [ 6 | "./src/*" 7 | ] 8 | }, 9 | "types": [ 10 | "vitest/globals", 11 | "vite/client" 12 | ], 13 | "outDir": "dist", 14 | "declaration": true, 15 | "target": "esnext", 16 | "module": "esnext", 17 | "moduleResolution": "bundler", 18 | "esModuleInterop": true 19 | }, 20 | "include": [ 21 | "src" 22 | ], 23 | "exclude": [ 24 | "dist" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | /// 2 | import * as path from "path"; 3 | import { defineConfig, UserConfig } from "vite"; 4 | import dts from "vite-plugin-dts"; 5 | import packageDefinition from "./package.json"; 6 | 7 | const alias = { 8 | "@": path.resolve(__dirname, "src") 9 | }; 10 | 11 | export default defineConfig(() => { 12 | const config: UserConfig = { 13 | build: { 14 | lib: { 15 | entry: "src/index.ts", 16 | fileName: "index", 17 | name: "eslint-plugin-sort-keys-custom-order" 18 | }, 19 | rollupOptions: { 20 | external: [ 21 | ...Object.keys(packageDefinition.peerDependencies || {}) 22 | ], 23 | output: { 24 | globals: { 25 | eslint: "eslint", 26 | typescript: "typescript" 27 | } 28 | } 29 | }, 30 | target: "esnext" 31 | }, 32 | plugins: [ 33 | dts() 34 | ], 35 | resolve: { 36 | alias 37 | } 38 | }; 39 | 40 | config.test = { 41 | globals: true 42 | }; 43 | 44 | return config; 45 | }); 46 | --------------------------------------------------------------------------------