├── .gitignore ├── src ├── index.ts ├── test-utils │ └── setup.ts ├── rules │ └── no-plain-query-keys.ts └── __tests__ │ └── no-plain-query-keys.test.ts ├── vitest.config.ts ├── tsconfig.json ├── package.json ├── README.md ├── docs └── rules │ └── no-plain-query-keys.md └── pnpm-lock.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { noPlainQueryKeys } from "./rules/no-plain-query-keys"; 2 | 3 | export = { 4 | rules: { 5 | "no-plain-query-keys": noPlainQueryKeys, 6 | }, 7 | }; 8 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vitest/config"; 2 | 3 | export default defineConfig({ 4 | test: { 5 | environment: "node", 6 | setupFiles: ["./src/test-utils/setup.ts"], 7 | }, 8 | }); 9 | -------------------------------------------------------------------------------- /src/test-utils/setup.ts: -------------------------------------------------------------------------------- 1 | import { RuleTester } from "@typescript-eslint/rule-tester"; 2 | import * as vitest from "vitest"; 3 | 4 | RuleTester.afterAll = vitest.afterAll; 5 | 6 | // Since we're not using vitest with globals: true 7 | RuleTester.it = vitest.it; 8 | RuleTester.itOnly = vitest.it.only; 9 | RuleTester.describe = vitest.describe; 10 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2022", 4 | "module": "NodeNext", 5 | "moduleResolution": "NodeNext", 6 | "strict": true, 7 | "outDir": "dist", 8 | "esModuleInterop": true, 9 | "skipLibCheck": true, 10 | "forceConsistentCasingInFileNames": true 11 | }, 12 | "include": ["src"], 13 | "exclude": [ 14 | "node_modules", 15 | "dist", 16 | "src/tests", 17 | "**/*.test.ts", 18 | "**/test-utils/**" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eslint-plugin-react-query-keys", 3 | "version": "0.1.0", 4 | "description": "ESLint plugin for React query keys, sticking to the query key factory pattern.", 5 | "main": "dist/index.js", 6 | "files": [ 7 | "dist" 8 | ], 9 | "scripts": { 10 | "build": "tsc", 11 | "test": "vitest", 12 | "test:coverage": "vitest run --coverage", 13 | "prepublishOnly": "pnpm run build" 14 | }, 15 | "keywords": [ 16 | "eslint", 17 | "eslintplugin", 18 | "eslint-plugin", 19 | "react-query", 20 | "query-keys" 21 | ], 22 | "peerDependencies": { 23 | "eslint": ">=9.0.0" 24 | }, 25 | "engines": { 26 | "node": ">=18" 27 | }, 28 | "devDependencies": { 29 | "@types/eslint": "^9.6.1", 30 | "@types/node": "^22.13.5", 31 | "@typescript-eslint/parser": "^8.24.1", 32 | "@typescript-eslint/rule-tester": "^8.24.1", 33 | "@typescript-eslint/utils": "^8.24.1", 34 | "@vitest/coverage-v8": "^3.0.6", 35 | "eslint": "^9.21.0", 36 | "typescript": "^5.7.3", 37 | "vitest": "^3.0.6" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # eslint-plugin-react-query-keys 2 | 3 | ESLint plugin to enforce best practices when working with React Query. 4 | 5 | ## Installation 6 | 7 | ```bash 8 | npm install eslint-plugin-react-query-keys --save-dev 9 | # or 10 | yarn add eslint-plugin-react-query-keys --dev 11 | # or 12 | pnpm add eslint-plugin-react-query-keys --save-dev 13 | ``` 14 | 15 | ## Usage 16 | 17 | Add to your ESLint configuration: 18 | 19 | ```js 20 | // .eslintrc.js 21 | module.exports = { 22 | plugins: ["react-query-keys"], 23 | rules: { 24 | "react-query-keys/no-plain-query-keys": "warn", 25 | }, 26 | }; 27 | ``` 28 | 29 | ## Available Rules 30 | 31 | ### no-plain-query-keys 32 | 33 | Enforces the use of query key factories instead of raw arrays or strings for React Query operations. 34 | 35 | When working with React Query, it's best practice to use query key factories to manage your query keys rather than hardcoding string or array literals. This approach improves maintainability, prevents duplication, enhances type safety, and provides better IntelliSense support. 36 | 37 | This rule checks for: 38 | 39 | 1. Raw arrays or strings passed to React Query methods like `invalidateQueries`, `setQueryData`, etc. 40 | 2. Raw arrays assigned to `queryKey` or `mutationKey` properties in hooks like `useQuery` and `useMutation` 41 | 42 | #### Examples 43 | 44 | ```jsx 45 | // ❌ Bad (direct use of array literals) 46 | useQuery({ 47 | queryKey: ["users"], 48 | queryFn: fetchUsers, 49 | }); 50 | 51 | queryClient.invalidateQueries(["users"]); 52 | 53 | // ❌ Bad (empty array or single empty string arrays) 54 | useQuery({ 55 | queryKey: [], 56 | queryFn: fetchData, 57 | }); 58 | 59 | useQuery({ 60 | queryKey: [""], 61 | queryFn: fetchData, 62 | }); 63 | 64 | // ✅ Good (using query key factories) 65 | useQuery({ 66 | queryKey: userKeys.list(), 67 | queryFn: fetchUsers, 68 | }); 69 | 70 | useQuery({ 71 | queryKey: userKeys.detail(1), 72 | queryFn: fetchUser, 73 | }); 74 | 75 | queryClient.invalidateQueries(userKeys.list()); 76 | ``` 77 | 78 | See the [rule documentation](docs/rules/no-plain-query-keys.md) for more detailed examples and explanation. 79 | 80 | ## License 81 | 82 | MIT 83 | -------------------------------------------------------------------------------- /docs/rules/no-plain-query-keys.md: -------------------------------------------------------------------------------- 1 | # Enforce using query key factories (`no-plain-query-keys`) 2 | 3 | This rule enforces the use of query key factories instead of raw arrays or strings for React Query/TanStack Query operations. 4 | 5 | ## Rule Details 6 | 7 | When working with TanStack Query, it's best practice to use query key factories (often combined with `queryOptions`) to manage your query keys rather than hardcoding string or array literals. This approach: 8 | 9 | - Improves maintainability by centralizing query key definitions 10 | - Prevents duplication and reduces errors from typos 11 | - Makes refactoring easier and safer 12 | - Enhances type safety with TypeScript 13 | - Provides better IntelliSense support 14 | 15 | This rule checks for: 16 | 17 | 1. Raw arrays or strings passed directly as query keys to TanStack Query methods like `getQueryData`, `setQueryData` (where applicable). 18 | 2. Raw arrays or strings used as the value for the `queryKey` property within the options object passed to methods like `invalidateQueries`, `refetchQueries`, etc. 19 | 3. Raw arrays assigned to `queryKey` or `mutationKey` properties in hooks like `useQuery` and `useMutation` (unless inside a `queryOptions` helper call). 20 | 21 | ### ❌ Examples of incorrect code 22 | 23 | ```js 24 | // Raw array as direct query key argument 25 | queryClient.setQueryData(["users"], data); 26 | queryClient.getQueryData(["users", 1, { sort: "asc" }]); 27 | 28 | // Raw string as direct query key argument 29 | queryClient.invalidateQueries("users"); // Note: v5 often prefers the object syntax 30 | 31 | // Raw array as queryKey value in object syntax 32 | queryClient.invalidateQueries({ queryKey: ["users"] }); 33 | queryClient.refetchQueries({ queryKey: ["todos", 1] }); 34 | 35 | // Raw array as queryKey property in useQuery 36 | useQuery({ 37 | queryKey: ["users"], 38 | queryFn: fetchUsers, 39 | }); 40 | 41 | // Empty array as queryKey - invalid 42 | useQuery({ 43 | queryKey: [], 44 | queryFn: fetchData, 45 | }); 46 | 47 | // Empty string in array as queryKey - invalid 48 | useQuery({ 49 | queryKey: [""], 50 | queryFn: fetchData, 51 | }); 52 | 53 | // Raw array in useMutation 54 | useMutation({ 55 | mutationKey: ["updateUser"], 56 | mutationFn: updateUser, 57 | }); 58 | 59 | // Raw array as mutationKey value in object syntax (if applicable) 60 | // queryClient.someMutationMethod({ mutationKey: ['updateUser'] }); 61 | ``` 62 | 63 | ### ✅ Examples of correct code 64 | 65 | ```js 66 | // Using query key factory (direct argument where applicable) 67 | queryClient.setQueryData(userKeys.detail(1), data); 68 | queryClient.getQueryData(userKeys.all); 69 | 70 | // Using query key factory (v5 object syntax) 71 | queryClient.invalidateQueries({ queryKey: userKeys.all }); 72 | queryClient.refetchQueries({ queryKey: todoKeys.list(userId) }); 73 | queryClient.cancelQueries({ queryKey: userKeys.detail(5) }); 74 | 75 | // Using factory function call that returns an array (object syntax) 76 | queryClient.invalidateQueries({ queryKey: createQueryKey("users", userId) }); 77 | 78 | // Using factory function call directly (where applicable) 79 | queryClient.getQueryData(createQueryKey("users", userId)); 80 | 81 | // Using query key factory in useQuery 82 | useQuery({ 83 | queryKey: userKeys.detail(1), 84 | queryFn: fetchUser, 85 | }); 86 | 87 | // Using queryOptions result in useQuery 88 | const userDetailOptions = queryOptions({ 89 | queryKey: userKeys.detail(1), 90 | queryFn: fetchUser, 91 | }); 92 | useQuery(userDetailOptions); 93 | 94 | // Using queryOptions result in queryClient methods 95 | const userListOptions = queryOptions({ 96 | queryKey: userKeys.list(), 97 | queryFn: fetchUsers, 98 | }); 99 | queryClient.prefetchQuery(userListOptions); 100 | 101 | // Accessing .queryKey from queryOptions result 102 | const options = queryOptions({ queryKey: ["a"], queryFn }); // Rule ignores ['a'] inside queryOptions 103 | queryClient.getQueryData(options.queryKey); 104 | 105 | // Using query key factory in useInfiniteQuery 106 | useInfiniteQuery({ 107 | queryKey: todoKeys.list(userId), 108 | queryFn: fetchTodos, 109 | }); 110 | 111 | // Using query key factory in useMutation 112 | useMutation({ 113 | mutationKey: userKeys.mutations.update(), 114 | mutationFn: updateUser, 115 | }); 116 | 117 | // Using shorthand property with a valid variable 118 | const key = userKeys.all; 119 | queryClient.invalidateQueries({ queryKey: key }); 120 | 121 | const computedKey = computeSomeKey(); 122 | queryClient.refetchQueries({ queryKey: computedKey }); 123 | ``` 124 | 125 | ## When Not To Use It 126 | 127 | If you're not concerned about query key consistency or if your project is small enough that managing query keys manually isn't a burden, you might not need this rule. 128 | 129 | ## Further Reading 130 | 131 | - [React Query Keys - TanStack Query docs](https://tanstack.com/query/latest/docs/react/guides/query-keys) 132 | - [Effective React Query Keys - TkDodo's blog](https://tkdodo.eu/blog/effective-react-query-keys) 133 | -------------------------------------------------------------------------------- /src/rules/no-plain-query-keys.ts: -------------------------------------------------------------------------------- 1 | import { 2 | AST_NODE_TYPES, 3 | ESLintUtils, 4 | TSESTree, 5 | } from "@typescript-eslint/utils"; 6 | 7 | const QUERY_CLIENT_OBJ_NAME = "queryClient"; 8 | 9 | const QUERY_KEY_PROPERTY_NAME = "queryKey"; 10 | 11 | const MUTATION_KEY_PROPERTY_NAME = "mutationKey"; 12 | 13 | const QUERY_OPTIONS_CALLEE_NAME = "queryOptions"; 14 | 15 | // Helper function to check if a node is a disallowed raw key 16 | function isRawKeyDisallowed( 17 | node: TSESTree.Node | null | undefined 18 | ): node is TSESTree.ArrayExpression | TSESTree.StringLiteral { 19 | if (!node) return false; 20 | // Disallow ArrayExpression, unless it's empty? TanStack Query allows empty arrays, but maybe we shouldn't? 21 | // Let's disallow empty arrays for now as per original tests. 22 | if (node.type === AST_NODE_TYPES.ArrayExpression) { 23 | return true; 24 | } 25 | // Disallow string literals (can be revisited based on TanStack Query v5 allowing string keys) 26 | if (node.type === AST_NODE_TYPES.Literal && typeof node.value === "string") { 27 | return true; 28 | } 29 | return false; 30 | } 31 | 32 | // Helper function to check if a node is a valid factory/variable/call 33 | function isValidKeyFactoryUsage( 34 | node: TSESTree.Node | null | undefined 35 | ): boolean { 36 | if (!node) return false; 37 | // Allow MemberExpression (e.g., userKeys.all, options.queryKey) 38 | if (node.type === AST_NODE_TYPES.MemberExpression) { 39 | return true; 40 | } 41 | // Allow CallExpression (e.g., userKeys.detail(1), createQueryKey(), jobsQueries.all()) 42 | if (node.type === AST_NODE_TYPES.CallExpression) { 43 | return true; 44 | } 45 | // Allow Identifier (e.g., options passed to useQuery, variable holding a key) 46 | if (node.type === AST_NODE_TYPES.Identifier) { 47 | return true; 48 | } 49 | return false; 50 | } 51 | 52 | export const noPlainQueryKeys = ESLintUtils.RuleCreator( 53 | (name) => 54 | `https://github.com/yourusername/eslint-plugin-react-query-keys/blob/main/docs/rules/${name}.md` 55 | )({ 56 | name: "no-plain-query-keys", 57 | meta: { 58 | type: "suggestion", 59 | docs: { 60 | description: 61 | "Enforce using query key factories instead of raw arrays or strings", 62 | }, 63 | messages: { 64 | noRawQueryKeys: 65 | "Avoid using raw arrays or strings for query keys. Use query key factories instead.", 66 | }, 67 | schema: [], 68 | }, 69 | defaultOptions: [], 70 | create(context) { 71 | // Set of React Query methods that take query keys OR options objects 72 | const queryKeyMethods = new Set([ 73 | "setQueryData", 74 | "getQueryData", 75 | "invalidateQueries", 76 | "refetchQueries", 77 | "removeQueries", 78 | "resetQueries", 79 | "cancelQueries", 80 | "isFetching", 81 | "prefetchQuery", 82 | "fetchQuery", 83 | "fetchInfiniteQuery", 84 | // Hooks that use queryKey 85 | "useQuery", 86 | "useInfiniteQuery", 87 | "useMutation", // Technically mutationKey, but handled similarly 88 | ]); 89 | 90 | // Track if we are inside a queryOptions call 91 | let inQueryOptionsCall = false; 92 | 93 | return { 94 | // Track entering/exiting queryOptions calls 95 | CallExpression(node) { 96 | if ( 97 | node.callee.type === AST_NODE_TYPES.Identifier && 98 | node.callee.name === QUERY_OPTIONS_CALLEE_NAME 99 | ) { 100 | inQueryOptionsCall = true; 101 | } 102 | 103 | // Check for queryClient.method() or useQuery() calls 104 | let methodOrHookName: string | null = null; 105 | let isQueryClientCall = false; 106 | 107 | if (node.callee.type === AST_NODE_TYPES.MemberExpression) { 108 | // e.g., queryClient.invalidateQueries() 109 | if ( 110 | node.callee.object.type === AST_NODE_TYPES.Identifier && 111 | node.callee.object.name === QUERY_CLIENT_OBJ_NAME && 112 | node.callee.property.type === AST_NODE_TYPES.Identifier && 113 | queryKeyMethods.has(node.callee.property.name) 114 | ) { 115 | methodOrHookName = node.callee.property.name; 116 | isQueryClientCall = true; 117 | } 118 | } else if (node.callee.type === AST_NODE_TYPES.Identifier) { 119 | // e.g., useQuery() 120 | if (queryKeyMethods.has(node.callee.name)) { 121 | methodOrHookName = node.callee.name; 122 | } 123 | } 124 | 125 | if (!methodOrHookName || node.arguments.length === 0) { 126 | return; // Not a relevant call 127 | } 128 | 129 | const firstArg = node.arguments[0]; 130 | 131 | // --- Handle V5 Object Syntax --- e.g., invalidateQueries({ queryKey: ... }) 132 | // Let the Property visitor handle checks for `queryKey: [...]` within objects. 133 | // This visitor only checks for *direct* raw arguments to methods/hooks. 134 | 135 | // --- Handle Direct Key Argument or Hook Options Object --- 136 | // e.g., getQueryData(key), useQuery({ queryKey: key }) 137 | 138 | // If the argument is an Identifier (like `options` from `queryOptions`), 139 | // assume it's valid unless it's directly a raw key. 140 | if (firstArg.type === AST_NODE_TYPES.Identifier) { 141 | // We could try resolving the identifier here, but for simplicity, 142 | // we assume identifiers are valid placeholders for factories/options. 143 | // If the identifier *itself* was assigned a raw array/string, 144 | // the assignment location would be flagged by the Property rule (if applicable). 145 | return; 146 | } 147 | 148 | // If argument is a direct CallExpression (like createKey() or factory.detail()), it's valid 149 | if (firstArg.type === AST_NODE_TYPES.CallExpression) { 150 | return; 151 | } 152 | 153 | // If argument is a MemberExpression (like factory.all or options.queryKey), it's valid 154 | if (firstArg.type === AST_NODE_TYPES.MemberExpression) { 155 | return; 156 | } 157 | 158 | // Now check if the direct argument (for methods like getQueryData) is raw 159 | if (isRawKeyDisallowed(firstArg)) { 160 | // Don't report if it's inside queryOptions({...}) 161 | const parent = context.sourceCode.getNodeByRangeIndex( 162 | node.range[0] - 1 163 | ); 164 | if (parent?.type === AST_NODE_TYPES.ObjectExpression) { 165 | const grandParent = context.sourceCode.getNodeByRangeIndex( 166 | parent.range[0] - 1 167 | ); 168 | if ( 169 | grandParent?.type === AST_NODE_TYPES.CallExpression && 170 | grandParent.callee.type === AST_NODE_TYPES.Identifier && 171 | grandParent.callee.name === QUERY_OPTIONS_CALLEE_NAME 172 | ) { 173 | return; // Inside queryOptions, allow raw key 174 | } 175 | } 176 | // Or if it's an argument to queryOptions itself 177 | if ( 178 | node.callee.type === AST_NODE_TYPES.Identifier && 179 | node.callee.name === QUERY_OPTIONS_CALLEE_NAME 180 | ) { 181 | return; 182 | } 183 | 184 | context.report({ 185 | node: firstArg, 186 | messageId: "noRawQueryKeys", 187 | }); 188 | } 189 | }, 190 | "CallExpression:exit"(node) { 191 | if ( 192 | node.callee.type === AST_NODE_TYPES.Identifier && 193 | node.callee.name === QUERY_OPTIONS_CALLEE_NAME 194 | ) { 195 | inQueryOptionsCall = false; 196 | } 197 | }, 198 | Property(node) { 199 | // Check for queryKey: [...] or mutationKey: [...] property assignments 200 | if ( 201 | node.key.type === AST_NODE_TYPES.Identifier && 202 | (node.key.name === QUERY_KEY_PROPERTY_NAME || 203 | node.key.name === MUTATION_KEY_PROPERTY_NAME) 204 | ) { 205 | // If we are inside a queryOptions({...}) call, allow raw keys 206 | if (inQueryOptionsCall) { 207 | return; 208 | } 209 | 210 | // If the value is NOT a valid factory/variable/call, report error 211 | // We specifically check for disallowed raw keys here, rather than !isValidKeyFactoryUsage 212 | // to avoid flagging potentially valid complex structures we don't explicitly allow yet. 213 | if (isRawKeyDisallowed(node.value)) { 214 | context.report({ 215 | node: node.value, 216 | messageId: "noRawQueryKeys", 217 | }); 218 | } 219 | } 220 | }, 221 | }; 222 | }, 223 | }); 224 | -------------------------------------------------------------------------------- /src/__tests__/no-plain-query-keys.test.ts: -------------------------------------------------------------------------------- 1 | import { RuleTester } from "@typescript-eslint/rule-tester"; 2 | import { noPlainQueryKeys } from "../rules/no-plain-query-keys"; 3 | 4 | const ruleTester = new RuleTester({ 5 | languageOptions: { 6 | parserOptions: { 7 | ecmaVersion: 2022, 8 | sourceType: "module", 9 | }, 10 | }, 11 | }); 12 | 13 | ruleTester.run("no-plain-query-keys", noPlainQueryKeys, { 14 | valid: [ 15 | { 16 | code: ` 17 | // Using query key factory is good 18 | queryClient.setQueryData(userKeys.detail(1), data); 19 | `, 20 | }, 21 | { 22 | code: ` 23 | // Using query key factory with multiple methods is good 24 | queryClient.getQueryData(userKeys.all); 25 | queryClient.invalidateQueries(userKeys.detail(5)); 26 | queryClient.refetchQueries(todoKeys.list(userId)); 27 | `, 28 | }, 29 | { 30 | code: ` 31 | // Not a queryClient method call 32 | someOtherObject.setQueryData(['users'], data); 33 | `, 34 | }, 35 | { 36 | code: ` 37 | // Different method that's not in our list 38 | queryClient.someOtherMethod(['users']); 39 | `, 40 | }, 41 | { 42 | code: ` 43 | // Factory function call that returns an array (acceptable) 44 | queryClient.invalidateQueries(createQueryKey('users', userId)); 45 | `, 46 | }, 47 | { 48 | code: ` 49 | // Using query key factory in useQuery is good 50 | useQuery({ 51 | queryKey: userKeys.detail(1), 52 | queryFn: fetchUser 53 | }); 54 | `, 55 | }, 56 | { 57 | code: ` 58 | // Using query key factory in useInfiniteQuery is good 59 | useInfiniteQuery({ 60 | queryKey: todoKeys.list(userId), 61 | queryFn: fetchTodos 62 | }); 63 | `, 64 | }, 65 | { 66 | code: ` 67 | // Using query key factory in useMutation is good 68 | useMutation({ 69 | mutationKey: userKeys.mutations.update(), 70 | mutationFn: updateUser 71 | }); 72 | `, 73 | }, 74 | { 75 | code: ` 76 | // Using a function call returning an array in useQuery queryKey 77 | useQuery({ 78 | queryKey: jobsQueries.all(), 79 | queryFn: fetchJobs 80 | }); 81 | `, 82 | }, 83 | { 84 | code: ` 85 | // Using a function call returning array directly in invalidateQueries (v5 object syntax) 86 | queryClient.invalidateQueries({ queryKey: jobsQueries.all() }); 87 | `, 88 | }, 89 | { 90 | code: ` 91 | // Using a member expression directly in invalidateQueries (v5 object syntax) 92 | queryClient.invalidateQueries({ queryKey: jobsQueries.all }); 93 | `, 94 | }, 95 | { 96 | code: ` 97 | // Using queryOptions result directly in useQuery 98 | const options = queryOptions({ queryKey: ['a'], queryFn }); 99 | useQuery(options); 100 | `, 101 | }, 102 | { 103 | code: ` 104 | // Using queryOptions result directly in queryClient method 105 | const options = queryOptions({ queryKey: ['a'], queryFn }); 106 | queryClient.prefetchQuery(options); 107 | `, 108 | }, 109 | { 110 | code: ` 111 | // Accessing .queryKey from queryOptions result 112 | const options = queryOptions({ queryKey: ['a'], queryFn }); 113 | queryClient.getQueryData(options.queryKey); 114 | `, 115 | }, 116 | { 117 | code: ` 118 | // Using shorthand property where variable holds a factory member 119 | const queryKey = jobsQueries.all; 120 | queryClient.cancelQueries({ queryKey }); 121 | `, 122 | }, 123 | { 124 | code: ` 125 | // Using shorthand property where variable holds a factory call result 126 | const queryKey = jobsQueries.all(); 127 | queryClient.cancelQueries({ queryKey }); 128 | `, 129 | }, 130 | { 131 | // Added to ensure simple CallExpressions (not MemberExpressions) are still allowed 132 | // e.g., a helper function `createKey()` that isn't part of a factory object 133 | code: ` 134 | queryClient.invalidateQueries(createKey('users')); 135 | `, 136 | }, 137 | { 138 | // Ensure CallExpression returning options object is allowed 139 | code: ` 140 | useQuery(createOptionsObject('users')); 141 | `, 142 | }, 143 | ], 144 | invalid: [ 145 | { 146 | code: ` 147 | // Using spread operator - not a direct array literal 148 | queryClient.setQueryData([...userKeys.detail(1), 'additional'], data); 149 | `, 150 | errors: [{ messageId: "noRawQueryKeys" }], 151 | }, 152 | { 153 | code: ` 154 | // Raw array as query key 155 | queryClient.setQueryData(['users'], data); 156 | `, 157 | errors: [{ messageId: "noRawQueryKeys" }], 158 | }, 159 | { 160 | code: ` 161 | // Raw array with multiple elements 162 | queryClient.getQueryData(['users', 1, { sort: 'asc' }]); 163 | `, 164 | errors: [{ messageId: "noRawQueryKeys" }], 165 | }, 166 | { 167 | code: ` 168 | // Raw string as query key 169 | queryClient.invalidateQueries('users'); 170 | `, 171 | errors: [{ messageId: "noRawQueryKeys" }], 172 | }, 173 | { 174 | code: ` 175 | // Multiple methods with raw query keys 176 | queryClient.refetchQueries(['todos']); 177 | queryClient.removeQueries(['users']); 178 | queryClient.resetQueries(['settings']); 179 | `, 180 | errors: [ 181 | { messageId: "noRawQueryKeys" }, 182 | { messageId: "noRawQueryKeys" }, 183 | { messageId: "noRawQueryKeys" }, 184 | ], 185 | }, 186 | { 187 | code: ` 188 | // Complex raw arrays 189 | queryClient.prefetchQuery(['users', { status: 'active' }, 5], fetchUsers); 190 | `, 191 | errors: [{ messageId: "noRawQueryKeys" }], 192 | }, 193 | { 194 | code: ` 195 | // Nested function calls with raw arrays 196 | queryClient.fetchQuery(['users'], () => { 197 | queryClient.invalidateQueries(['settings']); 198 | }); 199 | `, 200 | errors: [ 201 | { messageId: "noRawQueryKeys" }, 202 | { messageId: "noRawQueryKeys" }, 203 | ], 204 | }, 205 | { 206 | code: ` 207 | // Raw array as queryKey property in useQuery 208 | useQuery({ 209 | queryKey: ['users'], 210 | queryFn: fetchUsers 211 | }); 212 | `, 213 | errors: [{ messageId: "noRawQueryKeys" }], 214 | }, 215 | { 216 | code: ` 217 | // Empty string in array as queryKey (should be invalid) 218 | useQuery({ 219 | queryKey: [""], 220 | queryFn: fetchData 221 | }); 222 | `, 223 | errors: [{ messageId: "noRawQueryKeys" }], 224 | }, 225 | { 226 | code: ` 227 | // Empty array as queryKey (should be invalid) 228 | useQuery({ 229 | queryKey: [], 230 | queryFn: fetchData 231 | }); 232 | `, 233 | errors: [{ messageId: "noRawQueryKeys" }], 234 | }, 235 | { 236 | code: ` 237 | // Raw array in useInfiniteQuery 238 | useInfiniteQuery({ 239 | queryKey: ['todos', userId], 240 | queryFn: fetchTodos 241 | }); 242 | `, 243 | errors: [{ messageId: "noRawQueryKeys" }], 244 | }, 245 | { 246 | code: ` 247 | // Raw array in useMutation 248 | useMutation({ 249 | mutationKey: ['updateUser'], 250 | mutationFn: updateUser 251 | }); 252 | `, 253 | errors: [{ messageId: "noRawQueryKeys" }], 254 | }, 255 | { 256 | code: ` 257 | // Empty raw array in invalidateQueries (v5 object syntax) 258 | queryClient.invalidateQueries({ queryKey: [] }); 259 | `, 260 | errors: [{ messageId: "noRawQueryKeys" }], 261 | }, 262 | { 263 | code: ` 264 | // Raw array in prefetchQuery (v5 object syntax) 265 | queryClient.prefetchQuery({ queryKey: ['rawPrefetch'] }); 266 | `, 267 | errors: [{ messageId: "noRawQueryKeys" }], 268 | }, 269 | { 270 | code: ` 271 | // Raw array in setQueryData (v5 object syntax - assuming it might exist) 272 | queryClient.setQueryData({ queryKey: ['rawSet'], data: {} }); 273 | `, 274 | // Note: setQueryData doesn't use object syntax for the key itself. 275 | // Key is first arg, { data: ... } is second. Keep old tests. 276 | // This test case is actually testing the Property rule on `queryKey: ['rawSet']` 277 | errors: [{ messageId: "noRawQueryKeys" }], 278 | }, 279 | ], 280 | }); 281 | -------------------------------------------------------------------------------- /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/eslint': 12 | specifier: ^9.6.1 13 | version: 9.6.1 14 | '@types/node': 15 | specifier: ^22.13.5 16 | version: 22.13.11 17 | '@typescript-eslint/parser': 18 | specifier: ^8.24.1 19 | version: 8.27.0(eslint@9.23.0)(typescript@5.8.2) 20 | '@typescript-eslint/rule-tester': 21 | specifier: ^8.24.1 22 | version: 8.27.0(eslint@9.23.0)(typescript@5.8.2) 23 | '@typescript-eslint/utils': 24 | specifier: ^8.24.1 25 | version: 8.27.0(eslint@9.23.0)(typescript@5.8.2) 26 | '@vitest/coverage-v8': 27 | specifier: ^3.0.6 28 | version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)) 29 | eslint: 30 | specifier: ^9.21.0 31 | version: 9.23.0 32 | typescript: 33 | specifier: ^5.7.3 34 | version: 5.8.2 35 | vitest: 36 | specifier: ^3.0.6 37 | version: 3.0.9(@types/node@22.13.11) 38 | 39 | packages: 40 | 41 | '@ampproject/remapping@2.3.0': 42 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 43 | engines: {node: '>=6.0.0'} 44 | 45 | '@babel/helper-string-parser@7.25.9': 46 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 47 | engines: {node: '>=6.9.0'} 48 | 49 | '@babel/helper-validator-identifier@7.25.9': 50 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 51 | engines: {node: '>=6.9.0'} 52 | 53 | '@babel/parser@7.26.10': 54 | resolution: {integrity: sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==} 55 | engines: {node: '>=6.0.0'} 56 | hasBin: true 57 | 58 | '@babel/types@7.26.10': 59 | resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==} 60 | engines: {node: '>=6.9.0'} 61 | 62 | '@bcoe/v8-coverage@1.0.2': 63 | resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} 64 | engines: {node: '>=18'} 65 | 66 | '@esbuild/aix-ppc64@0.25.1': 67 | resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} 68 | engines: {node: '>=18'} 69 | cpu: [ppc64] 70 | os: [aix] 71 | 72 | '@esbuild/android-arm64@0.25.1': 73 | resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} 74 | engines: {node: '>=18'} 75 | cpu: [arm64] 76 | os: [android] 77 | 78 | '@esbuild/android-arm@0.25.1': 79 | resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} 80 | engines: {node: '>=18'} 81 | cpu: [arm] 82 | os: [android] 83 | 84 | '@esbuild/android-x64@0.25.1': 85 | resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} 86 | engines: {node: '>=18'} 87 | cpu: [x64] 88 | os: [android] 89 | 90 | '@esbuild/darwin-arm64@0.25.1': 91 | resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} 92 | engines: {node: '>=18'} 93 | cpu: [arm64] 94 | os: [darwin] 95 | 96 | '@esbuild/darwin-x64@0.25.1': 97 | resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} 98 | engines: {node: '>=18'} 99 | cpu: [x64] 100 | os: [darwin] 101 | 102 | '@esbuild/freebsd-arm64@0.25.1': 103 | resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} 104 | engines: {node: '>=18'} 105 | cpu: [arm64] 106 | os: [freebsd] 107 | 108 | '@esbuild/freebsd-x64@0.25.1': 109 | resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} 110 | engines: {node: '>=18'} 111 | cpu: [x64] 112 | os: [freebsd] 113 | 114 | '@esbuild/linux-arm64@0.25.1': 115 | resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} 116 | engines: {node: '>=18'} 117 | cpu: [arm64] 118 | os: [linux] 119 | 120 | '@esbuild/linux-arm@0.25.1': 121 | resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} 122 | engines: {node: '>=18'} 123 | cpu: [arm] 124 | os: [linux] 125 | 126 | '@esbuild/linux-ia32@0.25.1': 127 | resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} 128 | engines: {node: '>=18'} 129 | cpu: [ia32] 130 | os: [linux] 131 | 132 | '@esbuild/linux-loong64@0.25.1': 133 | resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} 134 | engines: {node: '>=18'} 135 | cpu: [loong64] 136 | os: [linux] 137 | 138 | '@esbuild/linux-mips64el@0.25.1': 139 | resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} 140 | engines: {node: '>=18'} 141 | cpu: [mips64el] 142 | os: [linux] 143 | 144 | '@esbuild/linux-ppc64@0.25.1': 145 | resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} 146 | engines: {node: '>=18'} 147 | cpu: [ppc64] 148 | os: [linux] 149 | 150 | '@esbuild/linux-riscv64@0.25.1': 151 | resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} 152 | engines: {node: '>=18'} 153 | cpu: [riscv64] 154 | os: [linux] 155 | 156 | '@esbuild/linux-s390x@0.25.1': 157 | resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} 158 | engines: {node: '>=18'} 159 | cpu: [s390x] 160 | os: [linux] 161 | 162 | '@esbuild/linux-x64@0.25.1': 163 | resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} 164 | engines: {node: '>=18'} 165 | cpu: [x64] 166 | os: [linux] 167 | 168 | '@esbuild/netbsd-arm64@0.25.1': 169 | resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} 170 | engines: {node: '>=18'} 171 | cpu: [arm64] 172 | os: [netbsd] 173 | 174 | '@esbuild/netbsd-x64@0.25.1': 175 | resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} 176 | engines: {node: '>=18'} 177 | cpu: [x64] 178 | os: [netbsd] 179 | 180 | '@esbuild/openbsd-arm64@0.25.1': 181 | resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} 182 | engines: {node: '>=18'} 183 | cpu: [arm64] 184 | os: [openbsd] 185 | 186 | '@esbuild/openbsd-x64@0.25.1': 187 | resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} 188 | engines: {node: '>=18'} 189 | cpu: [x64] 190 | os: [openbsd] 191 | 192 | '@esbuild/sunos-x64@0.25.1': 193 | resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} 194 | engines: {node: '>=18'} 195 | cpu: [x64] 196 | os: [sunos] 197 | 198 | '@esbuild/win32-arm64@0.25.1': 199 | resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} 200 | engines: {node: '>=18'} 201 | cpu: [arm64] 202 | os: [win32] 203 | 204 | '@esbuild/win32-ia32@0.25.1': 205 | resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} 206 | engines: {node: '>=18'} 207 | cpu: [ia32] 208 | os: [win32] 209 | 210 | '@esbuild/win32-x64@0.25.1': 211 | resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} 212 | engines: {node: '>=18'} 213 | cpu: [x64] 214 | os: [win32] 215 | 216 | '@eslint-community/eslint-utils@4.5.1': 217 | resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} 218 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 219 | peerDependencies: 220 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 221 | 222 | '@eslint-community/regexpp@4.12.1': 223 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 224 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 225 | 226 | '@eslint/config-array@0.19.2': 227 | resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} 228 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 229 | 230 | '@eslint/config-helpers@0.2.0': 231 | resolution: {integrity: sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==} 232 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 233 | 234 | '@eslint/core@0.12.0': 235 | resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} 236 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 237 | 238 | '@eslint/eslintrc@3.3.1': 239 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 240 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 241 | 242 | '@eslint/js@9.23.0': 243 | resolution: {integrity: sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==} 244 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 245 | 246 | '@eslint/object-schema@2.1.6': 247 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 248 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 249 | 250 | '@eslint/plugin-kit@0.2.7': 251 | resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} 252 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 253 | 254 | '@humanfs/core@0.19.1': 255 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 256 | engines: {node: '>=18.18.0'} 257 | 258 | '@humanfs/node@0.16.6': 259 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 260 | engines: {node: '>=18.18.0'} 261 | 262 | '@humanwhocodes/module-importer@1.0.1': 263 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 264 | engines: {node: '>=12.22'} 265 | 266 | '@humanwhocodes/retry@0.3.1': 267 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 268 | engines: {node: '>=18.18'} 269 | 270 | '@humanwhocodes/retry@0.4.2': 271 | resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} 272 | engines: {node: '>=18.18'} 273 | 274 | '@isaacs/cliui@8.0.2': 275 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 276 | engines: {node: '>=12'} 277 | 278 | '@istanbuljs/schema@0.1.3': 279 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 280 | engines: {node: '>=8'} 281 | 282 | '@jridgewell/gen-mapping@0.3.8': 283 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 284 | engines: {node: '>=6.0.0'} 285 | 286 | '@jridgewell/resolve-uri@3.1.2': 287 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 288 | engines: {node: '>=6.0.0'} 289 | 290 | '@jridgewell/set-array@1.2.1': 291 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 292 | engines: {node: '>=6.0.0'} 293 | 294 | '@jridgewell/sourcemap-codec@1.5.0': 295 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 296 | 297 | '@jridgewell/trace-mapping@0.3.25': 298 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 299 | 300 | '@nodelib/fs.scandir@2.1.5': 301 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 302 | engines: {node: '>= 8'} 303 | 304 | '@nodelib/fs.stat@2.0.5': 305 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 306 | engines: {node: '>= 8'} 307 | 308 | '@nodelib/fs.walk@1.2.8': 309 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 310 | engines: {node: '>= 8'} 311 | 312 | '@pkgjs/parseargs@0.11.0': 313 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 314 | engines: {node: '>=14'} 315 | 316 | '@rollup/rollup-android-arm-eabi@4.36.0': 317 | resolution: {integrity: sha512-jgrXjjcEwN6XpZXL0HUeOVGfjXhPyxAbbhD0BlXUB+abTOpbPiN5Wb3kOT7yb+uEtATNYF5x5gIfwutmuBA26w==} 318 | cpu: [arm] 319 | os: [android] 320 | 321 | '@rollup/rollup-android-arm64@4.36.0': 322 | resolution: {integrity: sha512-NyfuLvdPdNUfUNeYKUwPwKsE5SXa2J6bCt2LdB/N+AxShnkpiczi3tcLJrm5mA+eqpy0HmaIY9F6XCa32N5yzg==} 323 | cpu: [arm64] 324 | os: [android] 325 | 326 | '@rollup/rollup-darwin-arm64@4.36.0': 327 | resolution: {integrity: sha512-JQ1Jk5G4bGrD4pWJQzWsD8I1n1mgPXq33+/vP4sk8j/z/C2siRuxZtaUA7yMTf71TCZTZl/4e1bfzwUmFb3+rw==} 328 | cpu: [arm64] 329 | os: [darwin] 330 | 331 | '@rollup/rollup-darwin-x64@4.36.0': 332 | resolution: {integrity: sha512-6c6wMZa1lrtiRsbDziCmjE53YbTkxMYhhnWnSW8R/yqsM7a6mSJ3uAVT0t8Y/DGt7gxUWYuFM4bwWk9XCJrFKA==} 333 | cpu: [x64] 334 | os: [darwin] 335 | 336 | '@rollup/rollup-freebsd-arm64@4.36.0': 337 | resolution: {integrity: sha512-KXVsijKeJXOl8QzXTsA+sHVDsFOmMCdBRgFmBb+mfEb/7geR7+C8ypAml4fquUt14ZyVXaw2o1FWhqAfOvA4sg==} 338 | cpu: [arm64] 339 | os: [freebsd] 340 | 341 | '@rollup/rollup-freebsd-x64@4.36.0': 342 | resolution: {integrity: sha512-dVeWq1ebbvByI+ndz4IJcD4a09RJgRYmLccwlQ8bPd4olz3Y213uf1iwvc7ZaxNn2ab7bjc08PrtBgMu6nb4pQ==} 343 | cpu: [x64] 344 | os: [freebsd] 345 | 346 | '@rollup/rollup-linux-arm-gnueabihf@4.36.0': 347 | resolution: {integrity: sha512-bvXVU42mOVcF4le6XSjscdXjqx8okv4n5vmwgzcmtvFdifQ5U4dXFYaCB87namDRKlUL9ybVtLQ9ztnawaSzvg==} 348 | cpu: [arm] 349 | os: [linux] 350 | 351 | '@rollup/rollup-linux-arm-musleabihf@4.36.0': 352 | resolution: {integrity: sha512-JFIQrDJYrxOnyDQGYkqnNBtjDwTgbasdbUiQvcU8JmGDfValfH1lNpng+4FWlhaVIR4KPkeddYjsVVbmJYvDcg==} 353 | cpu: [arm] 354 | os: [linux] 355 | 356 | '@rollup/rollup-linux-arm64-gnu@4.36.0': 357 | resolution: {integrity: sha512-KqjYVh3oM1bj//5X7k79PSCZ6CvaVzb7Qs7VMWS+SlWB5M8p3FqufLP9VNp4CazJ0CsPDLwVD9r3vX7Ci4J56A==} 358 | cpu: [arm64] 359 | os: [linux] 360 | 361 | '@rollup/rollup-linux-arm64-musl@4.36.0': 362 | resolution: {integrity: sha512-QiGnhScND+mAAtfHqeT+cB1S9yFnNQ/EwCg5yE3MzoaZZnIV0RV9O5alJAoJKX/sBONVKeZdMfO8QSaWEygMhw==} 363 | cpu: [arm64] 364 | os: [linux] 365 | 366 | '@rollup/rollup-linux-loongarch64-gnu@4.36.0': 367 | resolution: {integrity: sha512-1ZPyEDWF8phd4FQtTzMh8FQwqzvIjLsl6/84gzUxnMNFBtExBtpL51H67mV9xipuxl1AEAerRBgBwFNpkw8+Lg==} 368 | cpu: [loong64] 369 | os: [linux] 370 | 371 | '@rollup/rollup-linux-powerpc64le-gnu@4.36.0': 372 | resolution: {integrity: sha512-VMPMEIUpPFKpPI9GZMhJrtu8rxnp6mJR3ZzQPykq4xc2GmdHj3Q4cA+7avMyegXy4n1v+Qynr9fR88BmyO74tg==} 373 | cpu: [ppc64] 374 | os: [linux] 375 | 376 | '@rollup/rollup-linux-riscv64-gnu@4.36.0': 377 | resolution: {integrity: sha512-ttE6ayb/kHwNRJGYLpuAvB7SMtOeQnVXEIpMtAvx3kepFQeowVED0n1K9nAdraHUPJ5hydEMxBpIR7o4nrm8uA==} 378 | cpu: [riscv64] 379 | os: [linux] 380 | 381 | '@rollup/rollup-linux-s390x-gnu@4.36.0': 382 | resolution: {integrity: sha512-4a5gf2jpS0AIe7uBjxDeUMNcFmaRTbNv7NxI5xOCs4lhzsVyGR/0qBXduPnoWf6dGC365saTiwag8hP1imTgag==} 383 | cpu: [s390x] 384 | os: [linux] 385 | 386 | '@rollup/rollup-linux-x64-gnu@4.36.0': 387 | resolution: {integrity: sha512-5KtoW8UWmwFKQ96aQL3LlRXX16IMwyzMq/jSSVIIyAANiE1doaQsx/KRyhAvpHlPjPiSU/AYX/8m+lQ9VToxFQ==} 388 | cpu: [x64] 389 | os: [linux] 390 | 391 | '@rollup/rollup-linux-x64-musl@4.36.0': 392 | resolution: {integrity: sha512-sycrYZPrv2ag4OCvaN5js+f01eoZ2U+RmT5as8vhxiFz+kxwlHrsxOwKPSA8WyS+Wc6Epid9QeI/IkQ9NkgYyQ==} 393 | cpu: [x64] 394 | os: [linux] 395 | 396 | '@rollup/rollup-win32-arm64-msvc@4.36.0': 397 | resolution: {integrity: sha512-qbqt4N7tokFwwSVlWDsjfoHgviS3n/vZ8LK0h1uLG9TYIRuUTJC88E1xb3LM2iqZ/WTqNQjYrtmtGmrmmawB6A==} 398 | cpu: [arm64] 399 | os: [win32] 400 | 401 | '@rollup/rollup-win32-ia32-msvc@4.36.0': 402 | resolution: {integrity: sha512-t+RY0JuRamIocMuQcfwYSOkmdX9dtkr1PbhKW42AMvaDQa+jOdpUYysroTF/nuPpAaQMWp7ye+ndlmmthieJrQ==} 403 | cpu: [ia32] 404 | os: [win32] 405 | 406 | '@rollup/rollup-win32-x64-msvc@4.36.0': 407 | resolution: {integrity: sha512-aRXd7tRZkWLqGbChgcMMDEHjOKudo1kChb1Jt1IfR8cY/KIpgNviLeJy5FUb9IpSuQj8dU2fAYNMPW/hLKOSTw==} 408 | cpu: [x64] 409 | os: [win32] 410 | 411 | '@types/eslint@9.6.1': 412 | resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} 413 | 414 | '@types/estree@1.0.6': 415 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 416 | 417 | '@types/json-schema@7.0.15': 418 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 419 | 420 | '@types/node@22.13.11': 421 | resolution: {integrity: sha512-iEUCUJoU0i3VnrCmgoWCXttklWcvoCIx4jzcP22fioIVSdTmjgoEvmAO/QPw6TcS9k5FrNgn4w7q5lGOd1CT5g==} 422 | 423 | '@typescript-eslint/parser@8.27.0': 424 | resolution: {integrity: sha512-XGwIabPallYipmcOk45DpsBSgLC64A0yvdAkrwEzwZ2viqGqRUJ8eEYoPz0CWnutgAFbNMPdsGGvzjSmcWVlEA==} 425 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 426 | peerDependencies: 427 | eslint: ^8.57.0 || ^9.0.0 428 | typescript: '>=4.8.4 <5.9.0' 429 | 430 | '@typescript-eslint/rule-tester@8.27.0': 431 | resolution: {integrity: sha512-38XMf0Y1G7iApnxutV+5iLwRTOKKSSMVFj9jPIhe7RHQsR4bF1VPUe+dvxrsas3jz5QyT6WtLwMBTLB5Gtghyg==} 432 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 433 | peerDependencies: 434 | eslint: ^8.57.0 || ^9.0.0 435 | 436 | '@typescript-eslint/scope-manager@8.27.0': 437 | resolution: {integrity: sha512-8oI9GwPMQmBryaaxG1tOZdxXVeMDte6NyJA4i7/TWa4fBwgnAXYlIQP+uYOeqAaLJ2JRxlG9CAyL+C+YE9Xknw==} 438 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 439 | 440 | '@typescript-eslint/types@8.27.0': 441 | resolution: {integrity: sha512-/6cp9yL72yUHAYq9g6DsAU+vVfvQmd1a8KyA81uvfDE21O2DwQ/qxlM4AR8TSdAu+kJLBDrEHKC5/W2/nxsY0A==} 442 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 443 | 444 | '@typescript-eslint/typescript-estree@8.27.0': 445 | resolution: {integrity: sha512-BnKq8cqPVoMw71O38a1tEb6iebEgGA80icSxW7g+kndx0o6ot6696HjG7NdgfuAVmVEtwXUr3L8R9ZuVjoQL6A==} 446 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 447 | peerDependencies: 448 | typescript: '>=4.8.4 <5.9.0' 449 | 450 | '@typescript-eslint/utils@8.27.0': 451 | resolution: {integrity: sha512-njkodcwH1yvmo31YWgRHNb/x1Xhhq4/m81PhtvmRngD8iHPehxffz1SNCO+kwaePhATC+kOa/ggmvPoPza5i0Q==} 452 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 453 | peerDependencies: 454 | eslint: ^8.57.0 || ^9.0.0 455 | typescript: '>=4.8.4 <5.9.0' 456 | 457 | '@typescript-eslint/visitor-keys@8.27.0': 458 | resolution: {integrity: sha512-WsXQwMkILJvffP6z4U3FYJPlbf/j07HIxmDjZpbNvBJkMfvwXj5ACRkkHwBDvLBbDbtX5TdU64/rcvKJ/vuInQ==} 459 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 460 | 461 | '@vitest/coverage-v8@3.0.9': 462 | resolution: {integrity: sha512-15OACZcBtQ34keIEn19JYTVuMFTlFrClclwWjHo/IRPg/8ELpkgNTl0o7WLP9WO9XGH6+tip9CPYtEOrIDJvBA==} 463 | peerDependencies: 464 | '@vitest/browser': 3.0.9 465 | vitest: 3.0.9 466 | peerDependenciesMeta: 467 | '@vitest/browser': 468 | optional: true 469 | 470 | '@vitest/expect@3.0.9': 471 | resolution: {integrity: sha512-5eCqRItYgIML7NNVgJj6TVCmdzE7ZVgJhruW0ziSQV4V7PvLkDL1bBkBdcTs/VuIz0IxPb5da1IDSqc1TR9eig==} 472 | 473 | '@vitest/mocker@3.0.9': 474 | resolution: {integrity: sha512-ryERPIBOnvevAkTq+L1lD+DTFBRcjueL9lOUfXsLfwP92h4e+Heb+PjiqS3/OURWPtywfafK0kj++yDFjWUmrA==} 475 | peerDependencies: 476 | msw: ^2.4.9 477 | vite: ^5.0.0 || ^6.0.0 478 | peerDependenciesMeta: 479 | msw: 480 | optional: true 481 | vite: 482 | optional: true 483 | 484 | '@vitest/pretty-format@3.0.9': 485 | resolution: {integrity: sha512-OW9F8t2J3AwFEwENg3yMyKWweF7oRJlMyHOMIhO5F3n0+cgQAJZBjNgrF8dLwFTEXl5jUqBLXd9QyyKv8zEcmA==} 486 | 487 | '@vitest/runner@3.0.9': 488 | resolution: {integrity: sha512-NX9oUXgF9HPfJSwl8tUZCMP1oGx2+Sf+ru6d05QjzQz4OwWg0psEzwY6VexP2tTHWdOkhKHUIZH+fS6nA7jfOw==} 489 | 490 | '@vitest/snapshot@3.0.9': 491 | resolution: {integrity: sha512-AiLUiuZ0FuA+/8i19mTYd+re5jqjEc2jZbgJ2up0VY0Ddyyxg/uUtBDpIFAy4uzKaQxOW8gMgBdAJJ2ydhu39A==} 492 | 493 | '@vitest/spy@3.0.9': 494 | resolution: {integrity: sha512-/CcK2UDl0aQ2wtkp3YVWldrpLRNCfVcIOFGlVGKO4R5eajsH393Z1yiXLVQ7vWsj26JOEjeZI0x5sm5P4OGUNQ==} 495 | 496 | '@vitest/utils@3.0.9': 497 | resolution: {integrity: sha512-ilHM5fHhZ89MCp5aAaM9uhfl1c2JdxVxl3McqsdVyVNN6JffnEen8UMCdRTzOhGXNQGo5GNL9QugHrz727Wnng==} 498 | 499 | acorn-jsx@5.3.2: 500 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 501 | peerDependencies: 502 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 503 | 504 | acorn@8.14.1: 505 | resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} 506 | engines: {node: '>=0.4.0'} 507 | hasBin: true 508 | 509 | ajv@6.12.6: 510 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 511 | 512 | ansi-regex@5.0.1: 513 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 514 | engines: {node: '>=8'} 515 | 516 | ansi-regex@6.1.0: 517 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 518 | engines: {node: '>=12'} 519 | 520 | ansi-styles@4.3.0: 521 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 522 | engines: {node: '>=8'} 523 | 524 | ansi-styles@6.2.1: 525 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 526 | engines: {node: '>=12'} 527 | 528 | argparse@2.0.1: 529 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 530 | 531 | assertion-error@2.0.1: 532 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 533 | engines: {node: '>=12'} 534 | 535 | balanced-match@1.0.2: 536 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 537 | 538 | brace-expansion@1.1.11: 539 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 540 | 541 | brace-expansion@2.0.1: 542 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 543 | 544 | braces@3.0.3: 545 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 546 | engines: {node: '>=8'} 547 | 548 | cac@6.7.14: 549 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 550 | engines: {node: '>=8'} 551 | 552 | callsites@3.1.0: 553 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 554 | engines: {node: '>=6'} 555 | 556 | chai@5.2.0: 557 | resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} 558 | engines: {node: '>=12'} 559 | 560 | chalk@4.1.2: 561 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 562 | engines: {node: '>=10'} 563 | 564 | check-error@2.1.1: 565 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 566 | engines: {node: '>= 16'} 567 | 568 | color-convert@2.0.1: 569 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 570 | engines: {node: '>=7.0.0'} 571 | 572 | color-name@1.1.4: 573 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 574 | 575 | concat-map@0.0.1: 576 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 577 | 578 | cross-spawn@7.0.6: 579 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 580 | engines: {node: '>= 8'} 581 | 582 | debug@4.4.0: 583 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 584 | engines: {node: '>=6.0'} 585 | peerDependencies: 586 | supports-color: '*' 587 | peerDependenciesMeta: 588 | supports-color: 589 | optional: true 590 | 591 | deep-eql@5.0.2: 592 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 593 | engines: {node: '>=6'} 594 | 595 | deep-is@0.1.4: 596 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 597 | 598 | eastasianwidth@0.2.0: 599 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 600 | 601 | emoji-regex@8.0.0: 602 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 603 | 604 | emoji-regex@9.2.2: 605 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 606 | 607 | es-module-lexer@1.6.0: 608 | resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} 609 | 610 | esbuild@0.25.1: 611 | resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} 612 | engines: {node: '>=18'} 613 | hasBin: true 614 | 615 | escape-string-regexp@4.0.0: 616 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 617 | engines: {node: '>=10'} 618 | 619 | eslint-scope@8.3.0: 620 | resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} 621 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 622 | 623 | eslint-visitor-keys@3.4.3: 624 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 625 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 626 | 627 | eslint-visitor-keys@4.2.0: 628 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 629 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 630 | 631 | eslint@9.23.0: 632 | resolution: {integrity: sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==} 633 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 634 | hasBin: true 635 | peerDependencies: 636 | jiti: '*' 637 | peerDependenciesMeta: 638 | jiti: 639 | optional: true 640 | 641 | espree@10.3.0: 642 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 643 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 644 | 645 | esquery@1.6.0: 646 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 647 | engines: {node: '>=0.10'} 648 | 649 | esrecurse@4.3.0: 650 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 651 | engines: {node: '>=4.0'} 652 | 653 | estraverse@5.3.0: 654 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 655 | engines: {node: '>=4.0'} 656 | 657 | estree-walker@3.0.3: 658 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 659 | 660 | esutils@2.0.3: 661 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 662 | engines: {node: '>=0.10.0'} 663 | 664 | expect-type@1.2.0: 665 | resolution: {integrity: sha512-80F22aiJ3GLyVnS/B3HzgR6RelZVumzj9jkL0Rhz4h0xYbNW9PjlQz5h3J/SShErbXBc295vseR4/MIbVmUbeA==} 666 | engines: {node: '>=12.0.0'} 667 | 668 | fast-deep-equal@3.1.3: 669 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 670 | 671 | fast-glob@3.3.3: 672 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 673 | engines: {node: '>=8.6.0'} 674 | 675 | fast-json-stable-stringify@2.1.0: 676 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 677 | 678 | fast-levenshtein@2.0.6: 679 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 680 | 681 | fastq@1.19.1: 682 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 683 | 684 | file-entry-cache@8.0.0: 685 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 686 | engines: {node: '>=16.0.0'} 687 | 688 | fill-range@7.1.1: 689 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 690 | engines: {node: '>=8'} 691 | 692 | find-up@5.0.0: 693 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 694 | engines: {node: '>=10'} 695 | 696 | flat-cache@4.0.1: 697 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 698 | engines: {node: '>=16'} 699 | 700 | flatted@3.3.3: 701 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 702 | 703 | foreground-child@3.3.1: 704 | resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} 705 | engines: {node: '>=14'} 706 | 707 | fsevents@2.3.3: 708 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 709 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 710 | os: [darwin] 711 | 712 | glob-parent@5.1.2: 713 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 714 | engines: {node: '>= 6'} 715 | 716 | glob-parent@6.0.2: 717 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 718 | engines: {node: '>=10.13.0'} 719 | 720 | glob@10.4.5: 721 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 722 | hasBin: true 723 | 724 | globals@14.0.0: 725 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 726 | engines: {node: '>=18'} 727 | 728 | has-flag@4.0.0: 729 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 730 | engines: {node: '>=8'} 731 | 732 | html-escaper@2.0.2: 733 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 734 | 735 | ignore@5.3.2: 736 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 737 | engines: {node: '>= 4'} 738 | 739 | import-fresh@3.3.1: 740 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 741 | engines: {node: '>=6'} 742 | 743 | imurmurhash@0.1.4: 744 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 745 | engines: {node: '>=0.8.19'} 746 | 747 | is-extglob@2.1.1: 748 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 749 | engines: {node: '>=0.10.0'} 750 | 751 | is-fullwidth-code-point@3.0.0: 752 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 753 | engines: {node: '>=8'} 754 | 755 | is-glob@4.0.3: 756 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 757 | engines: {node: '>=0.10.0'} 758 | 759 | is-number@7.0.0: 760 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 761 | engines: {node: '>=0.12.0'} 762 | 763 | isexe@2.0.0: 764 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 765 | 766 | istanbul-lib-coverage@3.2.2: 767 | resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} 768 | engines: {node: '>=8'} 769 | 770 | istanbul-lib-report@3.0.1: 771 | resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} 772 | engines: {node: '>=10'} 773 | 774 | istanbul-lib-source-maps@5.0.6: 775 | resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} 776 | engines: {node: '>=10'} 777 | 778 | istanbul-reports@3.1.7: 779 | resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} 780 | engines: {node: '>=8'} 781 | 782 | jackspeak@3.4.3: 783 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 784 | 785 | js-yaml@4.1.0: 786 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 787 | hasBin: true 788 | 789 | json-buffer@3.0.1: 790 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 791 | 792 | json-schema-traverse@0.4.1: 793 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 794 | 795 | json-stable-stringify-without-jsonify@1.0.1: 796 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 797 | 798 | keyv@4.5.4: 799 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 800 | 801 | levn@0.4.1: 802 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 803 | engines: {node: '>= 0.8.0'} 804 | 805 | locate-path@6.0.0: 806 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 807 | engines: {node: '>=10'} 808 | 809 | lodash.merge@4.6.2: 810 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 811 | 812 | loupe@3.1.3: 813 | resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} 814 | 815 | lru-cache@10.4.3: 816 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 817 | 818 | magic-string@0.30.17: 819 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 820 | 821 | magicast@0.3.5: 822 | resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} 823 | 824 | make-dir@4.0.0: 825 | resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} 826 | engines: {node: '>=10'} 827 | 828 | merge2@1.4.1: 829 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 830 | engines: {node: '>= 8'} 831 | 832 | micromatch@4.0.8: 833 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 834 | engines: {node: '>=8.6'} 835 | 836 | minimatch@3.1.2: 837 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 838 | 839 | minimatch@9.0.5: 840 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 841 | engines: {node: '>=16 || 14 >=14.17'} 842 | 843 | minipass@7.1.2: 844 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 845 | engines: {node: '>=16 || 14 >=14.17'} 846 | 847 | ms@2.1.3: 848 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 849 | 850 | nanoid@3.3.11: 851 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 852 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 853 | hasBin: true 854 | 855 | natural-compare@1.4.0: 856 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 857 | 858 | optionator@0.9.4: 859 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 860 | engines: {node: '>= 0.8.0'} 861 | 862 | p-limit@3.1.0: 863 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 864 | engines: {node: '>=10'} 865 | 866 | p-locate@5.0.0: 867 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 868 | engines: {node: '>=10'} 869 | 870 | package-json-from-dist@1.0.1: 871 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 872 | 873 | parent-module@1.0.1: 874 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 875 | engines: {node: '>=6'} 876 | 877 | path-exists@4.0.0: 878 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 879 | engines: {node: '>=8'} 880 | 881 | path-key@3.1.1: 882 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 883 | engines: {node: '>=8'} 884 | 885 | path-scurry@1.11.1: 886 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 887 | engines: {node: '>=16 || 14 >=14.18'} 888 | 889 | pathe@2.0.3: 890 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 891 | 892 | pathval@2.0.0: 893 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} 894 | engines: {node: '>= 14.16'} 895 | 896 | picocolors@1.1.1: 897 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 898 | 899 | picomatch@2.3.1: 900 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 901 | engines: {node: '>=8.6'} 902 | 903 | postcss@8.5.3: 904 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} 905 | engines: {node: ^10 || ^12 || >=14} 906 | 907 | prelude-ls@1.2.1: 908 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 909 | engines: {node: '>= 0.8.0'} 910 | 911 | punycode@2.3.1: 912 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 913 | engines: {node: '>=6'} 914 | 915 | queue-microtask@1.2.3: 916 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 917 | 918 | resolve-from@4.0.0: 919 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 920 | engines: {node: '>=4'} 921 | 922 | reusify@1.1.0: 923 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 924 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 925 | 926 | rollup@4.36.0: 927 | resolution: {integrity: sha512-zwATAXNQxUcd40zgtQG0ZafcRK4g004WtEl7kbuhTWPvf07PsfohXl39jVUvPF7jvNAIkKPQ2XrsDlWuxBd++Q==} 928 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 929 | hasBin: true 930 | 931 | run-parallel@1.2.0: 932 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 933 | 934 | semver@7.7.1: 935 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 936 | engines: {node: '>=10'} 937 | hasBin: true 938 | 939 | shebang-command@2.0.0: 940 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 941 | engines: {node: '>=8'} 942 | 943 | shebang-regex@3.0.0: 944 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 945 | engines: {node: '>=8'} 946 | 947 | siginfo@2.0.0: 948 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 949 | 950 | signal-exit@4.1.0: 951 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 952 | engines: {node: '>=14'} 953 | 954 | source-map-js@1.2.1: 955 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 956 | engines: {node: '>=0.10.0'} 957 | 958 | stackback@0.0.2: 959 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 960 | 961 | std-env@3.8.1: 962 | resolution: {integrity: sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==} 963 | 964 | string-width@4.2.3: 965 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 966 | engines: {node: '>=8'} 967 | 968 | string-width@5.1.2: 969 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 970 | engines: {node: '>=12'} 971 | 972 | strip-ansi@6.0.1: 973 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 974 | engines: {node: '>=8'} 975 | 976 | strip-ansi@7.1.0: 977 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 978 | engines: {node: '>=12'} 979 | 980 | strip-json-comments@3.1.1: 981 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 982 | engines: {node: '>=8'} 983 | 984 | supports-color@7.2.0: 985 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 986 | engines: {node: '>=8'} 987 | 988 | test-exclude@7.0.1: 989 | resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} 990 | engines: {node: '>=18'} 991 | 992 | tinybench@2.9.0: 993 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 994 | 995 | tinyexec@0.3.2: 996 | resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 997 | 998 | tinypool@1.0.2: 999 | resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} 1000 | engines: {node: ^18.0.0 || >=20.0.0} 1001 | 1002 | tinyrainbow@2.0.0: 1003 | resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} 1004 | engines: {node: '>=14.0.0'} 1005 | 1006 | tinyspy@3.0.2: 1007 | resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} 1008 | engines: {node: '>=14.0.0'} 1009 | 1010 | to-regex-range@5.0.1: 1011 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1012 | engines: {node: '>=8.0'} 1013 | 1014 | ts-api-utils@2.1.0: 1015 | resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} 1016 | engines: {node: '>=18.12'} 1017 | peerDependencies: 1018 | typescript: '>=4.8.4' 1019 | 1020 | type-check@0.4.0: 1021 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1022 | engines: {node: '>= 0.8.0'} 1023 | 1024 | typescript@5.8.2: 1025 | resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} 1026 | engines: {node: '>=14.17'} 1027 | hasBin: true 1028 | 1029 | undici-types@6.20.0: 1030 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 1031 | 1032 | uri-js@4.4.1: 1033 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1034 | 1035 | vite-node@3.0.9: 1036 | resolution: {integrity: sha512-w3Gdx7jDcuT9cNn9jExXgOyKmf5UOTb6WMHz8LGAm54eS1Elf5OuBhCxl6zJxGhEeIkgsE1WbHuoL0mj/UXqXg==} 1037 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1038 | hasBin: true 1039 | 1040 | vite@6.2.2: 1041 | resolution: {integrity: sha512-yW7PeMM+LkDzc7CgJuRLMW2Jz0FxMOsVJ8Lv3gpgW9WLcb9cTW+121UEr1hvmfR7w3SegR5ItvYyzVz1vxNJgQ==} 1042 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1043 | hasBin: true 1044 | peerDependencies: 1045 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1046 | jiti: '>=1.21.0' 1047 | less: '*' 1048 | lightningcss: ^1.21.0 1049 | sass: '*' 1050 | sass-embedded: '*' 1051 | stylus: '*' 1052 | sugarss: '*' 1053 | terser: ^5.16.0 1054 | tsx: ^4.8.1 1055 | yaml: ^2.4.2 1056 | peerDependenciesMeta: 1057 | '@types/node': 1058 | optional: true 1059 | jiti: 1060 | optional: true 1061 | less: 1062 | optional: true 1063 | lightningcss: 1064 | optional: true 1065 | sass: 1066 | optional: true 1067 | sass-embedded: 1068 | optional: true 1069 | stylus: 1070 | optional: true 1071 | sugarss: 1072 | optional: true 1073 | terser: 1074 | optional: true 1075 | tsx: 1076 | optional: true 1077 | yaml: 1078 | optional: true 1079 | 1080 | vitest@3.0.9: 1081 | resolution: {integrity: sha512-BbcFDqNyBlfSpATmTtXOAOj71RNKDDvjBM/uPfnxxVGrG+FSH2RQIwgeEngTaTkuU/h0ScFvf+tRcKfYXzBybQ==} 1082 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1083 | hasBin: true 1084 | peerDependencies: 1085 | '@edge-runtime/vm': '*' 1086 | '@types/debug': ^4.1.12 1087 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1088 | '@vitest/browser': 3.0.9 1089 | '@vitest/ui': 3.0.9 1090 | happy-dom: '*' 1091 | jsdom: '*' 1092 | peerDependenciesMeta: 1093 | '@edge-runtime/vm': 1094 | optional: true 1095 | '@types/debug': 1096 | optional: true 1097 | '@types/node': 1098 | optional: true 1099 | '@vitest/browser': 1100 | optional: true 1101 | '@vitest/ui': 1102 | optional: true 1103 | happy-dom: 1104 | optional: true 1105 | jsdom: 1106 | optional: true 1107 | 1108 | which@2.0.2: 1109 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1110 | engines: {node: '>= 8'} 1111 | hasBin: true 1112 | 1113 | why-is-node-running@2.3.0: 1114 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 1115 | engines: {node: '>=8'} 1116 | hasBin: true 1117 | 1118 | word-wrap@1.2.5: 1119 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1120 | engines: {node: '>=0.10.0'} 1121 | 1122 | wrap-ansi@7.0.0: 1123 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1124 | engines: {node: '>=10'} 1125 | 1126 | wrap-ansi@8.1.0: 1127 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1128 | engines: {node: '>=12'} 1129 | 1130 | yocto-queue@0.1.0: 1131 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1132 | engines: {node: '>=10'} 1133 | 1134 | snapshots: 1135 | 1136 | '@ampproject/remapping@2.3.0': 1137 | dependencies: 1138 | '@jridgewell/gen-mapping': 0.3.8 1139 | '@jridgewell/trace-mapping': 0.3.25 1140 | 1141 | '@babel/helper-string-parser@7.25.9': {} 1142 | 1143 | '@babel/helper-validator-identifier@7.25.9': {} 1144 | 1145 | '@babel/parser@7.26.10': 1146 | dependencies: 1147 | '@babel/types': 7.26.10 1148 | 1149 | '@babel/types@7.26.10': 1150 | dependencies: 1151 | '@babel/helper-string-parser': 7.25.9 1152 | '@babel/helper-validator-identifier': 7.25.9 1153 | 1154 | '@bcoe/v8-coverage@1.0.2': {} 1155 | 1156 | '@esbuild/aix-ppc64@0.25.1': 1157 | optional: true 1158 | 1159 | '@esbuild/android-arm64@0.25.1': 1160 | optional: true 1161 | 1162 | '@esbuild/android-arm@0.25.1': 1163 | optional: true 1164 | 1165 | '@esbuild/android-x64@0.25.1': 1166 | optional: true 1167 | 1168 | '@esbuild/darwin-arm64@0.25.1': 1169 | optional: true 1170 | 1171 | '@esbuild/darwin-x64@0.25.1': 1172 | optional: true 1173 | 1174 | '@esbuild/freebsd-arm64@0.25.1': 1175 | optional: true 1176 | 1177 | '@esbuild/freebsd-x64@0.25.1': 1178 | optional: true 1179 | 1180 | '@esbuild/linux-arm64@0.25.1': 1181 | optional: true 1182 | 1183 | '@esbuild/linux-arm@0.25.1': 1184 | optional: true 1185 | 1186 | '@esbuild/linux-ia32@0.25.1': 1187 | optional: true 1188 | 1189 | '@esbuild/linux-loong64@0.25.1': 1190 | optional: true 1191 | 1192 | '@esbuild/linux-mips64el@0.25.1': 1193 | optional: true 1194 | 1195 | '@esbuild/linux-ppc64@0.25.1': 1196 | optional: true 1197 | 1198 | '@esbuild/linux-riscv64@0.25.1': 1199 | optional: true 1200 | 1201 | '@esbuild/linux-s390x@0.25.1': 1202 | optional: true 1203 | 1204 | '@esbuild/linux-x64@0.25.1': 1205 | optional: true 1206 | 1207 | '@esbuild/netbsd-arm64@0.25.1': 1208 | optional: true 1209 | 1210 | '@esbuild/netbsd-x64@0.25.1': 1211 | optional: true 1212 | 1213 | '@esbuild/openbsd-arm64@0.25.1': 1214 | optional: true 1215 | 1216 | '@esbuild/openbsd-x64@0.25.1': 1217 | optional: true 1218 | 1219 | '@esbuild/sunos-x64@0.25.1': 1220 | optional: true 1221 | 1222 | '@esbuild/win32-arm64@0.25.1': 1223 | optional: true 1224 | 1225 | '@esbuild/win32-ia32@0.25.1': 1226 | optional: true 1227 | 1228 | '@esbuild/win32-x64@0.25.1': 1229 | optional: true 1230 | 1231 | '@eslint-community/eslint-utils@4.5.1(eslint@9.23.0)': 1232 | dependencies: 1233 | eslint: 9.23.0 1234 | eslint-visitor-keys: 3.4.3 1235 | 1236 | '@eslint-community/regexpp@4.12.1': {} 1237 | 1238 | '@eslint/config-array@0.19.2': 1239 | dependencies: 1240 | '@eslint/object-schema': 2.1.6 1241 | debug: 4.4.0 1242 | minimatch: 3.1.2 1243 | transitivePeerDependencies: 1244 | - supports-color 1245 | 1246 | '@eslint/config-helpers@0.2.0': {} 1247 | 1248 | '@eslint/core@0.12.0': 1249 | dependencies: 1250 | '@types/json-schema': 7.0.15 1251 | 1252 | '@eslint/eslintrc@3.3.1': 1253 | dependencies: 1254 | ajv: 6.12.6 1255 | debug: 4.4.0 1256 | espree: 10.3.0 1257 | globals: 14.0.0 1258 | ignore: 5.3.2 1259 | import-fresh: 3.3.1 1260 | js-yaml: 4.1.0 1261 | minimatch: 3.1.2 1262 | strip-json-comments: 3.1.1 1263 | transitivePeerDependencies: 1264 | - supports-color 1265 | 1266 | '@eslint/js@9.23.0': {} 1267 | 1268 | '@eslint/object-schema@2.1.6': {} 1269 | 1270 | '@eslint/plugin-kit@0.2.7': 1271 | dependencies: 1272 | '@eslint/core': 0.12.0 1273 | levn: 0.4.1 1274 | 1275 | '@humanfs/core@0.19.1': {} 1276 | 1277 | '@humanfs/node@0.16.6': 1278 | dependencies: 1279 | '@humanfs/core': 0.19.1 1280 | '@humanwhocodes/retry': 0.3.1 1281 | 1282 | '@humanwhocodes/module-importer@1.0.1': {} 1283 | 1284 | '@humanwhocodes/retry@0.3.1': {} 1285 | 1286 | '@humanwhocodes/retry@0.4.2': {} 1287 | 1288 | '@isaacs/cliui@8.0.2': 1289 | dependencies: 1290 | string-width: 5.1.2 1291 | string-width-cjs: string-width@4.2.3 1292 | strip-ansi: 7.1.0 1293 | strip-ansi-cjs: strip-ansi@6.0.1 1294 | wrap-ansi: 8.1.0 1295 | wrap-ansi-cjs: wrap-ansi@7.0.0 1296 | 1297 | '@istanbuljs/schema@0.1.3': {} 1298 | 1299 | '@jridgewell/gen-mapping@0.3.8': 1300 | dependencies: 1301 | '@jridgewell/set-array': 1.2.1 1302 | '@jridgewell/sourcemap-codec': 1.5.0 1303 | '@jridgewell/trace-mapping': 0.3.25 1304 | 1305 | '@jridgewell/resolve-uri@3.1.2': {} 1306 | 1307 | '@jridgewell/set-array@1.2.1': {} 1308 | 1309 | '@jridgewell/sourcemap-codec@1.5.0': {} 1310 | 1311 | '@jridgewell/trace-mapping@0.3.25': 1312 | dependencies: 1313 | '@jridgewell/resolve-uri': 3.1.2 1314 | '@jridgewell/sourcemap-codec': 1.5.0 1315 | 1316 | '@nodelib/fs.scandir@2.1.5': 1317 | dependencies: 1318 | '@nodelib/fs.stat': 2.0.5 1319 | run-parallel: 1.2.0 1320 | 1321 | '@nodelib/fs.stat@2.0.5': {} 1322 | 1323 | '@nodelib/fs.walk@1.2.8': 1324 | dependencies: 1325 | '@nodelib/fs.scandir': 2.1.5 1326 | fastq: 1.19.1 1327 | 1328 | '@pkgjs/parseargs@0.11.0': 1329 | optional: true 1330 | 1331 | '@rollup/rollup-android-arm-eabi@4.36.0': 1332 | optional: true 1333 | 1334 | '@rollup/rollup-android-arm64@4.36.0': 1335 | optional: true 1336 | 1337 | '@rollup/rollup-darwin-arm64@4.36.0': 1338 | optional: true 1339 | 1340 | '@rollup/rollup-darwin-x64@4.36.0': 1341 | optional: true 1342 | 1343 | '@rollup/rollup-freebsd-arm64@4.36.0': 1344 | optional: true 1345 | 1346 | '@rollup/rollup-freebsd-x64@4.36.0': 1347 | optional: true 1348 | 1349 | '@rollup/rollup-linux-arm-gnueabihf@4.36.0': 1350 | optional: true 1351 | 1352 | '@rollup/rollup-linux-arm-musleabihf@4.36.0': 1353 | optional: true 1354 | 1355 | '@rollup/rollup-linux-arm64-gnu@4.36.0': 1356 | optional: true 1357 | 1358 | '@rollup/rollup-linux-arm64-musl@4.36.0': 1359 | optional: true 1360 | 1361 | '@rollup/rollup-linux-loongarch64-gnu@4.36.0': 1362 | optional: true 1363 | 1364 | '@rollup/rollup-linux-powerpc64le-gnu@4.36.0': 1365 | optional: true 1366 | 1367 | '@rollup/rollup-linux-riscv64-gnu@4.36.0': 1368 | optional: true 1369 | 1370 | '@rollup/rollup-linux-s390x-gnu@4.36.0': 1371 | optional: true 1372 | 1373 | '@rollup/rollup-linux-x64-gnu@4.36.0': 1374 | optional: true 1375 | 1376 | '@rollup/rollup-linux-x64-musl@4.36.0': 1377 | optional: true 1378 | 1379 | '@rollup/rollup-win32-arm64-msvc@4.36.0': 1380 | optional: true 1381 | 1382 | '@rollup/rollup-win32-ia32-msvc@4.36.0': 1383 | optional: true 1384 | 1385 | '@rollup/rollup-win32-x64-msvc@4.36.0': 1386 | optional: true 1387 | 1388 | '@types/eslint@9.6.1': 1389 | dependencies: 1390 | '@types/estree': 1.0.6 1391 | '@types/json-schema': 7.0.15 1392 | 1393 | '@types/estree@1.0.6': {} 1394 | 1395 | '@types/json-schema@7.0.15': {} 1396 | 1397 | '@types/node@22.13.11': 1398 | dependencies: 1399 | undici-types: 6.20.0 1400 | 1401 | '@typescript-eslint/parser@8.27.0(eslint@9.23.0)(typescript@5.8.2)': 1402 | dependencies: 1403 | '@typescript-eslint/scope-manager': 8.27.0 1404 | '@typescript-eslint/types': 8.27.0 1405 | '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.8.2) 1406 | '@typescript-eslint/visitor-keys': 8.27.0 1407 | debug: 4.4.0 1408 | eslint: 9.23.0 1409 | typescript: 5.8.2 1410 | transitivePeerDependencies: 1411 | - supports-color 1412 | 1413 | '@typescript-eslint/rule-tester@8.27.0(eslint@9.23.0)(typescript@5.8.2)': 1414 | dependencies: 1415 | '@typescript-eslint/parser': 8.27.0(eslint@9.23.0)(typescript@5.8.2) 1416 | '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.8.2) 1417 | '@typescript-eslint/utils': 8.27.0(eslint@9.23.0)(typescript@5.8.2) 1418 | ajv: 6.12.6 1419 | eslint: 9.23.0 1420 | json-stable-stringify-without-jsonify: 1.0.1 1421 | lodash.merge: 4.6.2 1422 | semver: 7.7.1 1423 | transitivePeerDependencies: 1424 | - supports-color 1425 | - typescript 1426 | 1427 | '@typescript-eslint/scope-manager@8.27.0': 1428 | dependencies: 1429 | '@typescript-eslint/types': 8.27.0 1430 | '@typescript-eslint/visitor-keys': 8.27.0 1431 | 1432 | '@typescript-eslint/types@8.27.0': {} 1433 | 1434 | '@typescript-eslint/typescript-estree@8.27.0(typescript@5.8.2)': 1435 | dependencies: 1436 | '@typescript-eslint/types': 8.27.0 1437 | '@typescript-eslint/visitor-keys': 8.27.0 1438 | debug: 4.4.0 1439 | fast-glob: 3.3.3 1440 | is-glob: 4.0.3 1441 | minimatch: 9.0.5 1442 | semver: 7.7.1 1443 | ts-api-utils: 2.1.0(typescript@5.8.2) 1444 | typescript: 5.8.2 1445 | transitivePeerDependencies: 1446 | - supports-color 1447 | 1448 | '@typescript-eslint/utils@8.27.0(eslint@9.23.0)(typescript@5.8.2)': 1449 | dependencies: 1450 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0) 1451 | '@typescript-eslint/scope-manager': 8.27.0 1452 | '@typescript-eslint/types': 8.27.0 1453 | '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.8.2) 1454 | eslint: 9.23.0 1455 | typescript: 5.8.2 1456 | transitivePeerDependencies: 1457 | - supports-color 1458 | 1459 | '@typescript-eslint/visitor-keys@8.27.0': 1460 | dependencies: 1461 | '@typescript-eslint/types': 8.27.0 1462 | eslint-visitor-keys: 4.2.0 1463 | 1464 | '@vitest/coverage-v8@3.0.9(vitest@3.0.9(@types/node@22.13.11))': 1465 | dependencies: 1466 | '@ampproject/remapping': 2.3.0 1467 | '@bcoe/v8-coverage': 1.0.2 1468 | debug: 4.4.0 1469 | istanbul-lib-coverage: 3.2.2 1470 | istanbul-lib-report: 3.0.1 1471 | istanbul-lib-source-maps: 5.0.6 1472 | istanbul-reports: 3.1.7 1473 | magic-string: 0.30.17 1474 | magicast: 0.3.5 1475 | std-env: 3.8.1 1476 | test-exclude: 7.0.1 1477 | tinyrainbow: 2.0.0 1478 | vitest: 3.0.9(@types/node@22.13.11) 1479 | transitivePeerDependencies: 1480 | - supports-color 1481 | 1482 | '@vitest/expect@3.0.9': 1483 | dependencies: 1484 | '@vitest/spy': 3.0.9 1485 | '@vitest/utils': 3.0.9 1486 | chai: 5.2.0 1487 | tinyrainbow: 2.0.0 1488 | 1489 | '@vitest/mocker@3.0.9(vite@6.2.2(@types/node@22.13.11))': 1490 | dependencies: 1491 | '@vitest/spy': 3.0.9 1492 | estree-walker: 3.0.3 1493 | magic-string: 0.30.17 1494 | optionalDependencies: 1495 | vite: 6.2.2(@types/node@22.13.11) 1496 | 1497 | '@vitest/pretty-format@3.0.9': 1498 | dependencies: 1499 | tinyrainbow: 2.0.0 1500 | 1501 | '@vitest/runner@3.0.9': 1502 | dependencies: 1503 | '@vitest/utils': 3.0.9 1504 | pathe: 2.0.3 1505 | 1506 | '@vitest/snapshot@3.0.9': 1507 | dependencies: 1508 | '@vitest/pretty-format': 3.0.9 1509 | magic-string: 0.30.17 1510 | pathe: 2.0.3 1511 | 1512 | '@vitest/spy@3.0.9': 1513 | dependencies: 1514 | tinyspy: 3.0.2 1515 | 1516 | '@vitest/utils@3.0.9': 1517 | dependencies: 1518 | '@vitest/pretty-format': 3.0.9 1519 | loupe: 3.1.3 1520 | tinyrainbow: 2.0.0 1521 | 1522 | acorn-jsx@5.3.2(acorn@8.14.1): 1523 | dependencies: 1524 | acorn: 8.14.1 1525 | 1526 | acorn@8.14.1: {} 1527 | 1528 | ajv@6.12.6: 1529 | dependencies: 1530 | fast-deep-equal: 3.1.3 1531 | fast-json-stable-stringify: 2.1.0 1532 | json-schema-traverse: 0.4.1 1533 | uri-js: 4.4.1 1534 | 1535 | ansi-regex@5.0.1: {} 1536 | 1537 | ansi-regex@6.1.0: {} 1538 | 1539 | ansi-styles@4.3.0: 1540 | dependencies: 1541 | color-convert: 2.0.1 1542 | 1543 | ansi-styles@6.2.1: {} 1544 | 1545 | argparse@2.0.1: {} 1546 | 1547 | assertion-error@2.0.1: {} 1548 | 1549 | balanced-match@1.0.2: {} 1550 | 1551 | brace-expansion@1.1.11: 1552 | dependencies: 1553 | balanced-match: 1.0.2 1554 | concat-map: 0.0.1 1555 | 1556 | brace-expansion@2.0.1: 1557 | dependencies: 1558 | balanced-match: 1.0.2 1559 | 1560 | braces@3.0.3: 1561 | dependencies: 1562 | fill-range: 7.1.1 1563 | 1564 | cac@6.7.14: {} 1565 | 1566 | callsites@3.1.0: {} 1567 | 1568 | chai@5.2.0: 1569 | dependencies: 1570 | assertion-error: 2.0.1 1571 | check-error: 2.1.1 1572 | deep-eql: 5.0.2 1573 | loupe: 3.1.3 1574 | pathval: 2.0.0 1575 | 1576 | chalk@4.1.2: 1577 | dependencies: 1578 | ansi-styles: 4.3.0 1579 | supports-color: 7.2.0 1580 | 1581 | check-error@2.1.1: {} 1582 | 1583 | color-convert@2.0.1: 1584 | dependencies: 1585 | color-name: 1.1.4 1586 | 1587 | color-name@1.1.4: {} 1588 | 1589 | concat-map@0.0.1: {} 1590 | 1591 | cross-spawn@7.0.6: 1592 | dependencies: 1593 | path-key: 3.1.1 1594 | shebang-command: 2.0.0 1595 | which: 2.0.2 1596 | 1597 | debug@4.4.0: 1598 | dependencies: 1599 | ms: 2.1.3 1600 | 1601 | deep-eql@5.0.2: {} 1602 | 1603 | deep-is@0.1.4: {} 1604 | 1605 | eastasianwidth@0.2.0: {} 1606 | 1607 | emoji-regex@8.0.0: {} 1608 | 1609 | emoji-regex@9.2.2: {} 1610 | 1611 | es-module-lexer@1.6.0: {} 1612 | 1613 | esbuild@0.25.1: 1614 | optionalDependencies: 1615 | '@esbuild/aix-ppc64': 0.25.1 1616 | '@esbuild/android-arm': 0.25.1 1617 | '@esbuild/android-arm64': 0.25.1 1618 | '@esbuild/android-x64': 0.25.1 1619 | '@esbuild/darwin-arm64': 0.25.1 1620 | '@esbuild/darwin-x64': 0.25.1 1621 | '@esbuild/freebsd-arm64': 0.25.1 1622 | '@esbuild/freebsd-x64': 0.25.1 1623 | '@esbuild/linux-arm': 0.25.1 1624 | '@esbuild/linux-arm64': 0.25.1 1625 | '@esbuild/linux-ia32': 0.25.1 1626 | '@esbuild/linux-loong64': 0.25.1 1627 | '@esbuild/linux-mips64el': 0.25.1 1628 | '@esbuild/linux-ppc64': 0.25.1 1629 | '@esbuild/linux-riscv64': 0.25.1 1630 | '@esbuild/linux-s390x': 0.25.1 1631 | '@esbuild/linux-x64': 0.25.1 1632 | '@esbuild/netbsd-arm64': 0.25.1 1633 | '@esbuild/netbsd-x64': 0.25.1 1634 | '@esbuild/openbsd-arm64': 0.25.1 1635 | '@esbuild/openbsd-x64': 0.25.1 1636 | '@esbuild/sunos-x64': 0.25.1 1637 | '@esbuild/win32-arm64': 0.25.1 1638 | '@esbuild/win32-ia32': 0.25.1 1639 | '@esbuild/win32-x64': 0.25.1 1640 | 1641 | escape-string-regexp@4.0.0: {} 1642 | 1643 | eslint-scope@8.3.0: 1644 | dependencies: 1645 | esrecurse: 4.3.0 1646 | estraverse: 5.3.0 1647 | 1648 | eslint-visitor-keys@3.4.3: {} 1649 | 1650 | eslint-visitor-keys@4.2.0: {} 1651 | 1652 | eslint@9.23.0: 1653 | dependencies: 1654 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0) 1655 | '@eslint-community/regexpp': 4.12.1 1656 | '@eslint/config-array': 0.19.2 1657 | '@eslint/config-helpers': 0.2.0 1658 | '@eslint/core': 0.12.0 1659 | '@eslint/eslintrc': 3.3.1 1660 | '@eslint/js': 9.23.0 1661 | '@eslint/plugin-kit': 0.2.7 1662 | '@humanfs/node': 0.16.6 1663 | '@humanwhocodes/module-importer': 1.0.1 1664 | '@humanwhocodes/retry': 0.4.2 1665 | '@types/estree': 1.0.6 1666 | '@types/json-schema': 7.0.15 1667 | ajv: 6.12.6 1668 | chalk: 4.1.2 1669 | cross-spawn: 7.0.6 1670 | debug: 4.4.0 1671 | escape-string-regexp: 4.0.0 1672 | eslint-scope: 8.3.0 1673 | eslint-visitor-keys: 4.2.0 1674 | espree: 10.3.0 1675 | esquery: 1.6.0 1676 | esutils: 2.0.3 1677 | fast-deep-equal: 3.1.3 1678 | file-entry-cache: 8.0.0 1679 | find-up: 5.0.0 1680 | glob-parent: 6.0.2 1681 | ignore: 5.3.2 1682 | imurmurhash: 0.1.4 1683 | is-glob: 4.0.3 1684 | json-stable-stringify-without-jsonify: 1.0.1 1685 | lodash.merge: 4.6.2 1686 | minimatch: 3.1.2 1687 | natural-compare: 1.4.0 1688 | optionator: 0.9.4 1689 | transitivePeerDependencies: 1690 | - supports-color 1691 | 1692 | espree@10.3.0: 1693 | dependencies: 1694 | acorn: 8.14.1 1695 | acorn-jsx: 5.3.2(acorn@8.14.1) 1696 | eslint-visitor-keys: 4.2.0 1697 | 1698 | esquery@1.6.0: 1699 | dependencies: 1700 | estraverse: 5.3.0 1701 | 1702 | esrecurse@4.3.0: 1703 | dependencies: 1704 | estraverse: 5.3.0 1705 | 1706 | estraverse@5.3.0: {} 1707 | 1708 | estree-walker@3.0.3: 1709 | dependencies: 1710 | '@types/estree': 1.0.6 1711 | 1712 | esutils@2.0.3: {} 1713 | 1714 | expect-type@1.2.0: {} 1715 | 1716 | fast-deep-equal@3.1.3: {} 1717 | 1718 | fast-glob@3.3.3: 1719 | dependencies: 1720 | '@nodelib/fs.stat': 2.0.5 1721 | '@nodelib/fs.walk': 1.2.8 1722 | glob-parent: 5.1.2 1723 | merge2: 1.4.1 1724 | micromatch: 4.0.8 1725 | 1726 | fast-json-stable-stringify@2.1.0: {} 1727 | 1728 | fast-levenshtein@2.0.6: {} 1729 | 1730 | fastq@1.19.1: 1731 | dependencies: 1732 | reusify: 1.1.0 1733 | 1734 | file-entry-cache@8.0.0: 1735 | dependencies: 1736 | flat-cache: 4.0.1 1737 | 1738 | fill-range@7.1.1: 1739 | dependencies: 1740 | to-regex-range: 5.0.1 1741 | 1742 | find-up@5.0.0: 1743 | dependencies: 1744 | locate-path: 6.0.0 1745 | path-exists: 4.0.0 1746 | 1747 | flat-cache@4.0.1: 1748 | dependencies: 1749 | flatted: 3.3.3 1750 | keyv: 4.5.4 1751 | 1752 | flatted@3.3.3: {} 1753 | 1754 | foreground-child@3.3.1: 1755 | dependencies: 1756 | cross-spawn: 7.0.6 1757 | signal-exit: 4.1.0 1758 | 1759 | fsevents@2.3.3: 1760 | optional: true 1761 | 1762 | glob-parent@5.1.2: 1763 | dependencies: 1764 | is-glob: 4.0.3 1765 | 1766 | glob-parent@6.0.2: 1767 | dependencies: 1768 | is-glob: 4.0.3 1769 | 1770 | glob@10.4.5: 1771 | dependencies: 1772 | foreground-child: 3.3.1 1773 | jackspeak: 3.4.3 1774 | minimatch: 9.0.5 1775 | minipass: 7.1.2 1776 | package-json-from-dist: 1.0.1 1777 | path-scurry: 1.11.1 1778 | 1779 | globals@14.0.0: {} 1780 | 1781 | has-flag@4.0.0: {} 1782 | 1783 | html-escaper@2.0.2: {} 1784 | 1785 | ignore@5.3.2: {} 1786 | 1787 | import-fresh@3.3.1: 1788 | dependencies: 1789 | parent-module: 1.0.1 1790 | resolve-from: 4.0.0 1791 | 1792 | imurmurhash@0.1.4: {} 1793 | 1794 | is-extglob@2.1.1: {} 1795 | 1796 | is-fullwidth-code-point@3.0.0: {} 1797 | 1798 | is-glob@4.0.3: 1799 | dependencies: 1800 | is-extglob: 2.1.1 1801 | 1802 | is-number@7.0.0: {} 1803 | 1804 | isexe@2.0.0: {} 1805 | 1806 | istanbul-lib-coverage@3.2.2: {} 1807 | 1808 | istanbul-lib-report@3.0.1: 1809 | dependencies: 1810 | istanbul-lib-coverage: 3.2.2 1811 | make-dir: 4.0.0 1812 | supports-color: 7.2.0 1813 | 1814 | istanbul-lib-source-maps@5.0.6: 1815 | dependencies: 1816 | '@jridgewell/trace-mapping': 0.3.25 1817 | debug: 4.4.0 1818 | istanbul-lib-coverage: 3.2.2 1819 | transitivePeerDependencies: 1820 | - supports-color 1821 | 1822 | istanbul-reports@3.1.7: 1823 | dependencies: 1824 | html-escaper: 2.0.2 1825 | istanbul-lib-report: 3.0.1 1826 | 1827 | jackspeak@3.4.3: 1828 | dependencies: 1829 | '@isaacs/cliui': 8.0.2 1830 | optionalDependencies: 1831 | '@pkgjs/parseargs': 0.11.0 1832 | 1833 | js-yaml@4.1.0: 1834 | dependencies: 1835 | argparse: 2.0.1 1836 | 1837 | json-buffer@3.0.1: {} 1838 | 1839 | json-schema-traverse@0.4.1: {} 1840 | 1841 | json-stable-stringify-without-jsonify@1.0.1: {} 1842 | 1843 | keyv@4.5.4: 1844 | dependencies: 1845 | json-buffer: 3.0.1 1846 | 1847 | levn@0.4.1: 1848 | dependencies: 1849 | prelude-ls: 1.2.1 1850 | type-check: 0.4.0 1851 | 1852 | locate-path@6.0.0: 1853 | dependencies: 1854 | p-locate: 5.0.0 1855 | 1856 | lodash.merge@4.6.2: {} 1857 | 1858 | loupe@3.1.3: {} 1859 | 1860 | lru-cache@10.4.3: {} 1861 | 1862 | magic-string@0.30.17: 1863 | dependencies: 1864 | '@jridgewell/sourcemap-codec': 1.5.0 1865 | 1866 | magicast@0.3.5: 1867 | dependencies: 1868 | '@babel/parser': 7.26.10 1869 | '@babel/types': 7.26.10 1870 | source-map-js: 1.2.1 1871 | 1872 | make-dir@4.0.0: 1873 | dependencies: 1874 | semver: 7.7.1 1875 | 1876 | merge2@1.4.1: {} 1877 | 1878 | micromatch@4.0.8: 1879 | dependencies: 1880 | braces: 3.0.3 1881 | picomatch: 2.3.1 1882 | 1883 | minimatch@3.1.2: 1884 | dependencies: 1885 | brace-expansion: 1.1.11 1886 | 1887 | minimatch@9.0.5: 1888 | dependencies: 1889 | brace-expansion: 2.0.1 1890 | 1891 | minipass@7.1.2: {} 1892 | 1893 | ms@2.1.3: {} 1894 | 1895 | nanoid@3.3.11: {} 1896 | 1897 | natural-compare@1.4.0: {} 1898 | 1899 | optionator@0.9.4: 1900 | dependencies: 1901 | deep-is: 0.1.4 1902 | fast-levenshtein: 2.0.6 1903 | levn: 0.4.1 1904 | prelude-ls: 1.2.1 1905 | type-check: 0.4.0 1906 | word-wrap: 1.2.5 1907 | 1908 | p-limit@3.1.0: 1909 | dependencies: 1910 | yocto-queue: 0.1.0 1911 | 1912 | p-locate@5.0.0: 1913 | dependencies: 1914 | p-limit: 3.1.0 1915 | 1916 | package-json-from-dist@1.0.1: {} 1917 | 1918 | parent-module@1.0.1: 1919 | dependencies: 1920 | callsites: 3.1.0 1921 | 1922 | path-exists@4.0.0: {} 1923 | 1924 | path-key@3.1.1: {} 1925 | 1926 | path-scurry@1.11.1: 1927 | dependencies: 1928 | lru-cache: 10.4.3 1929 | minipass: 7.1.2 1930 | 1931 | pathe@2.0.3: {} 1932 | 1933 | pathval@2.0.0: {} 1934 | 1935 | picocolors@1.1.1: {} 1936 | 1937 | picomatch@2.3.1: {} 1938 | 1939 | postcss@8.5.3: 1940 | dependencies: 1941 | nanoid: 3.3.11 1942 | picocolors: 1.1.1 1943 | source-map-js: 1.2.1 1944 | 1945 | prelude-ls@1.2.1: {} 1946 | 1947 | punycode@2.3.1: {} 1948 | 1949 | queue-microtask@1.2.3: {} 1950 | 1951 | resolve-from@4.0.0: {} 1952 | 1953 | reusify@1.1.0: {} 1954 | 1955 | rollup@4.36.0: 1956 | dependencies: 1957 | '@types/estree': 1.0.6 1958 | optionalDependencies: 1959 | '@rollup/rollup-android-arm-eabi': 4.36.0 1960 | '@rollup/rollup-android-arm64': 4.36.0 1961 | '@rollup/rollup-darwin-arm64': 4.36.0 1962 | '@rollup/rollup-darwin-x64': 4.36.0 1963 | '@rollup/rollup-freebsd-arm64': 4.36.0 1964 | '@rollup/rollup-freebsd-x64': 4.36.0 1965 | '@rollup/rollup-linux-arm-gnueabihf': 4.36.0 1966 | '@rollup/rollup-linux-arm-musleabihf': 4.36.0 1967 | '@rollup/rollup-linux-arm64-gnu': 4.36.0 1968 | '@rollup/rollup-linux-arm64-musl': 4.36.0 1969 | '@rollup/rollup-linux-loongarch64-gnu': 4.36.0 1970 | '@rollup/rollup-linux-powerpc64le-gnu': 4.36.0 1971 | '@rollup/rollup-linux-riscv64-gnu': 4.36.0 1972 | '@rollup/rollup-linux-s390x-gnu': 4.36.0 1973 | '@rollup/rollup-linux-x64-gnu': 4.36.0 1974 | '@rollup/rollup-linux-x64-musl': 4.36.0 1975 | '@rollup/rollup-win32-arm64-msvc': 4.36.0 1976 | '@rollup/rollup-win32-ia32-msvc': 4.36.0 1977 | '@rollup/rollup-win32-x64-msvc': 4.36.0 1978 | fsevents: 2.3.3 1979 | 1980 | run-parallel@1.2.0: 1981 | dependencies: 1982 | queue-microtask: 1.2.3 1983 | 1984 | semver@7.7.1: {} 1985 | 1986 | shebang-command@2.0.0: 1987 | dependencies: 1988 | shebang-regex: 3.0.0 1989 | 1990 | shebang-regex@3.0.0: {} 1991 | 1992 | siginfo@2.0.0: {} 1993 | 1994 | signal-exit@4.1.0: {} 1995 | 1996 | source-map-js@1.2.1: {} 1997 | 1998 | stackback@0.0.2: {} 1999 | 2000 | std-env@3.8.1: {} 2001 | 2002 | string-width@4.2.3: 2003 | dependencies: 2004 | emoji-regex: 8.0.0 2005 | is-fullwidth-code-point: 3.0.0 2006 | strip-ansi: 6.0.1 2007 | 2008 | string-width@5.1.2: 2009 | dependencies: 2010 | eastasianwidth: 0.2.0 2011 | emoji-regex: 9.2.2 2012 | strip-ansi: 7.1.0 2013 | 2014 | strip-ansi@6.0.1: 2015 | dependencies: 2016 | ansi-regex: 5.0.1 2017 | 2018 | strip-ansi@7.1.0: 2019 | dependencies: 2020 | ansi-regex: 6.1.0 2021 | 2022 | strip-json-comments@3.1.1: {} 2023 | 2024 | supports-color@7.2.0: 2025 | dependencies: 2026 | has-flag: 4.0.0 2027 | 2028 | test-exclude@7.0.1: 2029 | dependencies: 2030 | '@istanbuljs/schema': 0.1.3 2031 | glob: 10.4.5 2032 | minimatch: 9.0.5 2033 | 2034 | tinybench@2.9.0: {} 2035 | 2036 | tinyexec@0.3.2: {} 2037 | 2038 | tinypool@1.0.2: {} 2039 | 2040 | tinyrainbow@2.0.0: {} 2041 | 2042 | tinyspy@3.0.2: {} 2043 | 2044 | to-regex-range@5.0.1: 2045 | dependencies: 2046 | is-number: 7.0.0 2047 | 2048 | ts-api-utils@2.1.0(typescript@5.8.2): 2049 | dependencies: 2050 | typescript: 5.8.2 2051 | 2052 | type-check@0.4.0: 2053 | dependencies: 2054 | prelude-ls: 1.2.1 2055 | 2056 | typescript@5.8.2: {} 2057 | 2058 | undici-types@6.20.0: {} 2059 | 2060 | uri-js@4.4.1: 2061 | dependencies: 2062 | punycode: 2.3.1 2063 | 2064 | vite-node@3.0.9(@types/node@22.13.11): 2065 | dependencies: 2066 | cac: 6.7.14 2067 | debug: 4.4.0 2068 | es-module-lexer: 1.6.0 2069 | pathe: 2.0.3 2070 | vite: 6.2.2(@types/node@22.13.11) 2071 | transitivePeerDependencies: 2072 | - '@types/node' 2073 | - jiti 2074 | - less 2075 | - lightningcss 2076 | - sass 2077 | - sass-embedded 2078 | - stylus 2079 | - sugarss 2080 | - supports-color 2081 | - terser 2082 | - tsx 2083 | - yaml 2084 | 2085 | vite@6.2.2(@types/node@22.13.11): 2086 | dependencies: 2087 | esbuild: 0.25.1 2088 | postcss: 8.5.3 2089 | rollup: 4.36.0 2090 | optionalDependencies: 2091 | '@types/node': 22.13.11 2092 | fsevents: 2.3.3 2093 | 2094 | vitest@3.0.9(@types/node@22.13.11): 2095 | dependencies: 2096 | '@vitest/expect': 3.0.9 2097 | '@vitest/mocker': 3.0.9(vite@6.2.2(@types/node@22.13.11)) 2098 | '@vitest/pretty-format': 3.0.9 2099 | '@vitest/runner': 3.0.9 2100 | '@vitest/snapshot': 3.0.9 2101 | '@vitest/spy': 3.0.9 2102 | '@vitest/utils': 3.0.9 2103 | chai: 5.2.0 2104 | debug: 4.4.0 2105 | expect-type: 1.2.0 2106 | magic-string: 0.30.17 2107 | pathe: 2.0.3 2108 | std-env: 3.8.1 2109 | tinybench: 2.9.0 2110 | tinyexec: 0.3.2 2111 | tinypool: 1.0.2 2112 | tinyrainbow: 2.0.0 2113 | vite: 6.2.2(@types/node@22.13.11) 2114 | vite-node: 3.0.9(@types/node@22.13.11) 2115 | why-is-node-running: 2.3.0 2116 | optionalDependencies: 2117 | '@types/node': 22.13.11 2118 | transitivePeerDependencies: 2119 | - jiti 2120 | - less 2121 | - lightningcss 2122 | - msw 2123 | - sass 2124 | - sass-embedded 2125 | - stylus 2126 | - sugarss 2127 | - supports-color 2128 | - terser 2129 | - tsx 2130 | - yaml 2131 | 2132 | which@2.0.2: 2133 | dependencies: 2134 | isexe: 2.0.0 2135 | 2136 | why-is-node-running@2.3.0: 2137 | dependencies: 2138 | siginfo: 2.0.0 2139 | stackback: 0.0.2 2140 | 2141 | word-wrap@1.2.5: {} 2142 | 2143 | wrap-ansi@7.0.0: 2144 | dependencies: 2145 | ansi-styles: 4.3.0 2146 | string-width: 4.2.3 2147 | strip-ansi: 6.0.1 2148 | 2149 | wrap-ansi@8.1.0: 2150 | dependencies: 2151 | ansi-styles: 6.2.1 2152 | string-width: 5.1.2 2153 | strip-ansi: 7.1.0 2154 | 2155 | yocto-queue@0.1.0: {} 2156 | --------------------------------------------------------------------------------