├── .editorconfig ├── .github ├── FUNDING.yml └── workflows │ ├── release.yml │ └── test.yml ├── .gitignore ├── .npmignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── eslint.config.js ├── index.d.ts ├── index.js ├── package.json ├── pnpm-lock.yaml ├── test ├── errors.ts ├── index.test.ts └── setup.js └── tsconfig.json /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: ai 2 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | on: 3 | push: 4 | tags: 5 | - '*' 6 | permissions: 7 | contents: write 8 | jobs: 9 | release: 10 | name: Release On Tag 11 | if: startsWith(github.ref, 'refs/tags/') 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Checkout the repository 15 | uses: actions/checkout@v4 16 | - name: Extract the changelog 17 | id: changelog 18 | run: | 19 | TAG_NAME=${GITHUB_REF/refs\/tags\//} 20 | READ_SECTION=false 21 | CHANGELOG="" 22 | while IFS= read -r line; do 23 | if [[ "$line" =~ ^#+\ +(.*) ]]; then 24 | if [[ "${BASH_REMATCH[1]}" == "$TAG_NAME" ]]; then 25 | READ_SECTION=true 26 | elif [[ "$READ_SECTION" == true ]]; then 27 | break 28 | fi 29 | elif [[ "$READ_SECTION" == true ]]; then 30 | CHANGELOG+="$line"$'\n' 31 | fi 32 | done < "CHANGELOG.md" 33 | CHANGELOG=$(echo "$CHANGELOG" | awk '/./ {$1=$1;print}') 34 | echo "changelog_content<> $GITHUB_OUTPUT 35 | echo "$CHANGELOG" >> $GITHUB_OUTPUT 36 | echo "EOF" >> $GITHUB_OUTPUT 37 | - name: Create the release 38 | if: steps.changelog.outputs.changelog_content != '' 39 | uses: softprops/action-gh-release@v2 40 | with: 41 | name: ${{ github.ref_name }} 42 | body: '${{ steps.changelog.outputs.changelog_content }}' 43 | draft: false 44 | prerelease: false 45 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | on: 3 | push: 4 | branches: 5 | - main 6 | - next 7 | pull_request: 8 | permissions: 9 | contents: read 10 | jobs: 11 | full: 12 | name: Node.js Latest Full 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Checkout the repository 16 | uses: actions/checkout@v4 17 | - name: Install pnpm 18 | uses: pnpm/action-setup@v4 19 | with: 20 | version: 10 21 | - name: Install Node.js 22 | uses: actions/setup-node@v4 23 | with: 24 | node-version: 23 25 | cache: pnpm 26 | - name: Install dependencies 27 | run: pnpm install --ignore-scripts 28 | - name: Run tests 29 | run: pnpm test 30 | short: 31 | runs-on: ubuntu-latest 32 | strategy: 33 | matrix: 34 | node-version: 35 | - 22 36 | - 20 37 | name: Node.js ${{ matrix.node-version }} Quick 38 | steps: 39 | - name: Checkout the repository 40 | uses: actions/checkout@v4 41 | - name: Install pnpm 42 | uses: pnpm/action-setup@v4 43 | with: 44 | version: 10 45 | - name: Install Node.js ${{ matrix.node-version }} 46 | uses: actions/setup-node@v4 47 | with: 48 | node-version: ${{ matrix.node-version }} 49 | cache: pnpm 50 | - name: Install dependencies 51 | run: pnpm install --ignore-scripts 52 | - name: Run unit tests 53 | run: pnpm bnt 54 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | 3 | coverage/ 4 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | coverage/ 2 | test/ 3 | tsconfig.json 4 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | This project adheres to [Semantic Versioning](http://semver.org/). 3 | 4 | ## 1.0.0 5 | * Added Nano Stores 1.0 support. 6 | * Removed Node.js 18 support. 7 | 8 | ## 0.8.4 9 | * Fixed React 19 support (by @Alqanar). 10 | 11 | ## 0.8.3 12 | * Clean `package.json`. 13 | 14 | ## 0.8.2 15 | * Fixed peer warning with React 19 RC (by @aminabromand). 16 | 17 | ## 0.8.1 18 | * Fixed peer warning with React 19 RC (by @aminabromand). 19 | 20 | ## 0.8.0 21 | * Fixed `getSnapshot` warning by adding `deps` options (by @yuyi919). 22 | 23 | ## 0.7.3 24 | * Added Nano Stores 0.11 support. 25 | 26 | ## 0.7.2 27 | * Added Nano Stores 0.10 support. 28 | * Removed Node.js 16 support. 29 | 30 | ## 0.7.1 31 | * Reverted `onStart`/`onStop` fix (by Dan Kozlov). 32 | 33 | ## 0.7 34 | * Moved to Nano Stores 0.9. 35 | * Fixed unnecessary `onStart`/`onStop` calls (by Sergey Kozlov). 36 | 37 | ## 0.6 38 | * Reduced size by using import from React 18 (by Sergey Kozlov). 39 | 40 | ## 0.5 41 | * Moved to Nano Stores 0.8. 42 | 43 | ## 0.4.1 44 | * Fixed peer dependencies (by Tim Su). 45 | 46 | ## 0.4 47 | * Moved to Nano Stores 0.7. 48 | 49 | ## 0.3 50 | * Moved to `useSyncExternalStore` (by @SukkaW). 51 | * Moved to Nano Stores 0.6. 52 | 53 | ## 0.2 54 | * Moved to React 18. 55 | * Removed `batch` export. 56 | 57 | ## 0.1.5 58 | * Reduced package size. 59 | 60 | ## 0.1.4 61 | * Fixed union types support in `useStore` (by Aleksandr Slepchenkov). 62 | 63 | ## 0.1.3 64 | * Fixed `useStore` types (by Aleksandr Slepchenkov). 65 | 66 | ## 0.1.2 67 | * Fixed `useStore` types. 68 | 69 | ## 0.1.1 70 | * Fixed types. 71 | 72 | ## 0.1 73 | * Initial release. 74 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright 2020 Andrey Sitnik 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nano Stores React 2 | 3 | 5 | 6 | React integration for **[Nano Stores]**, a tiny state manager 7 | with many atomic tree-shakable stores. 8 | 9 | - **Small.** Less than 1 KB. Zero dependencies. 10 | - **Fast.** With small atomic and derived stores, you do not need to call 11 | the selector function for all components on every store change. 12 | - **Tree Shakable.** The chunk contains only stores used by components 13 | in the chunk. 14 | - Was designed to move logic from components to stores. 15 | - It has good **TypeScript** support. 16 | 17 | ```tsx 18 | import { useStore } from '@nanostores/react' 19 | import { $profile } from '../stores/profile.js' 20 | 21 | export const Header = ({ postId }) => { 22 | const profile = useStore($profile) 23 | return
Hi, {profile.name}
24 | } 25 | ``` 26 | 27 | [Nano Stores]: https://github.com/nanostores/nanostores/ 28 | 29 | --- 30 | 31 | Made at Evil Martians, product consulting for developer tools. 32 | 33 | --- 34 | -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | import loguxTsConfig from '@logux/eslint-config/ts' 2 | 3 | /** @type {import('eslint').Linter.FlatConfig[]} */ 4 | export default [ 5 | { ignores: ['**/errors.ts'] }, 6 | ...loguxTsConfig, 7 | { 8 | rules: { 9 | '@typescript-eslint/no-explicit-any': 'off', 10 | '@typescript-eslint/unified-signatures': 'off', 11 | 'n/no-unsupported-features/node-builtins': 'off' 12 | } 13 | } 14 | ] 15 | -------------------------------------------------------------------------------- /index.d.ts: -------------------------------------------------------------------------------- 1 | import type { Store, StoreValue } from 'nanostores' 2 | import type { DependencyList } from 'react' 3 | 4 | type StoreKeys = T extends { setKey: (k: infer K, v: any) => unknown } 5 | ? K 6 | : never 7 | 8 | export interface UseStoreOptions { 9 | /** 10 | * @default 11 | * ```ts 12 | * [store, options.keys] 13 | * ``` 14 | */ 15 | deps?: DependencyList 16 | 17 | /** 18 | * Will re-render components only on specific key changes. 19 | */ 20 | keys?: StoreKeys[] 21 | } 22 | 23 | /** 24 | * Subscribe to store changes and get store’s value. 25 | * 26 | * Can be user with store builder too. 27 | * 28 | * ```js 29 | * import { useStore } from 'nanostores/react' 30 | * 31 | * import { router } from '../store/router' 32 | * 33 | * export const Layout = () => { 34 | * let page = useStore(router) 35 | * if (page.route === 'home') { 36 | * return 37 | * } else { 38 | * return 39 | * } 40 | * } 41 | * ``` 42 | * 43 | * @param store Store instance. 44 | * @returns Store value. 45 | */ 46 | export function useStore( 47 | store: SomeStore, 48 | options?: UseStoreOptions 49 | ): StoreValue 50 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | import { listenKeys } from 'nanostores' 2 | import { useCallback, useRef, useSyncExternalStore } from 'react' 3 | 4 | let emit = (snapshotRef, onChange) => value => { 5 | if (snapshotRef.current === value) return 6 | snapshotRef.current = value 7 | onChange() 8 | } 9 | 10 | export function useStore(store, { keys, deps = [store, keys] } = {}) { 11 | let snapshotRef = useRef() 12 | snapshotRef.current = store.get() 13 | 14 | let subscribe = useCallback(onChange => { 15 | emit(snapshotRef, onChange)(store.value) 16 | 17 | return keys?.length > 0 18 | ? listenKeys(store, keys, emit(snapshotRef, onChange)) 19 | : store.listen(emit(snapshotRef, onChange)) 20 | }, deps) 21 | let get = () => snapshotRef.current 22 | 23 | return useSyncExternalStore(subscribe, get, get) 24 | } 25 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nanostores/react", 3 | "version": "1.0.0", 4 | "description": "React integration for Nano Stores, a tiny state manager with many atomic tree-shakable stores", 5 | "keywords": [ 6 | "store", 7 | "state", 8 | "state manager", 9 | "react", 10 | "react native" 11 | ], 12 | "scripts": { 13 | "test:lint": "eslint .", 14 | "test:coverage": "c8 pnpm bnt", 15 | "test:types": "check-dts", 16 | "test:size": "size-limit", 17 | "test": "pnpm run /^test:/" 18 | }, 19 | "author": "Andrey Sitnik ", 20 | "license": "MIT", 21 | "repository": "nanostores/react", 22 | "sideEffects": false, 23 | "type": "module", 24 | "types": "./index.d.ts", 25 | "exports": { 26 | ".": "./index.js", 27 | "./package.json": "./package.json" 28 | }, 29 | "engines": { 30 | "node": "^20.0.0 || >=22.0.0" 31 | }, 32 | "funding": [ 33 | { 34 | "type": "github", 35 | "url": "https://github.com/sponsors/ai" 36 | } 37 | ], 38 | "peerDependencies": { 39 | "nanostores": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^1.0.0", 40 | "react": ">=18.0.0" 41 | }, 42 | "devDependencies": { 43 | "@logux/eslint-config": "^55.2.0", 44 | "@size-limit/preset-small-lib": "^11.2.0", 45 | "@testing-library/react": "^16.3.0", 46 | "@types/node": "^22.14.0", 47 | "@types/react": "^19.1.0", 48 | "@types/react-dom": "^19.1.2", 49 | "@types/ws": "^8.18.1", 50 | "@typescript-eslint/eslint-plugin": "^8.29.1", 51 | "@typescript-eslint/parser": "^8.29.1", 52 | "better-node-test": "^0.7.1", 53 | "c8": "^10.1.3", 54 | "check-dts": "^0.9.0", 55 | "clean-publish": "^5.1.0", 56 | "eslint": "^9.24.0", 57 | "happy-dom": "^17.4.4", 58 | "nanodelay": "^2.0.2", 59 | "nanostores": "^1.0.1", 60 | "react": "^19.1.0", 61 | "react-dom": "^19.1.0", 62 | "size-limit": "^11.2.0", 63 | "tsx": "^4.19.3", 64 | "typescript": "^5.8.3" 65 | }, 66 | "prettier": { 67 | "arrowParens": "avoid", 68 | "jsxSingleQuote": false, 69 | "quoteProps": "consistent", 70 | "semi": false, 71 | "singleQuote": true, 72 | "trailingComma": "none" 73 | }, 74 | "c8": { 75 | "exclude": [ 76 | "**/*.test.*", 77 | "test/*" 78 | ], 79 | "lines": 100, 80 | "check-coverage": true, 81 | "reporter": [ 82 | "text", 83 | "lcov" 84 | ], 85 | "skip-full": true, 86 | "clean": true 87 | }, 88 | "size-limit": [ 89 | { 90 | "import": { 91 | "index.js": "{ useStore }", 92 | "nanostores": "{ map, computed }" 93 | }, 94 | "limit": "916 B" 95 | } 96 | ] 97 | } 98 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@logux/eslint-config': 12 | specifier: ^55.2.0 13 | version: 55.2.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) 14 | '@size-limit/preset-small-lib': 15 | specifier: ^11.2.0 16 | version: 11.2.0(size-limit@11.2.0) 17 | '@testing-library/react': 18 | specifier: ^16.3.0 19 | version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.2(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) 20 | '@types/node': 21 | specifier: ^22.14.0 22 | version: 22.14.0 23 | '@types/react': 24 | specifier: ^19.1.0 25 | version: 19.1.0 26 | '@types/react-dom': 27 | specifier: ^19.1.2 28 | version: 19.1.2(@types/react@19.1.0) 29 | '@types/ws': 30 | specifier: ^8.18.1 31 | version: 8.18.1 32 | '@typescript-eslint/eslint-plugin': 33 | specifier: ^8.29.1 34 | version: 8.29.1(@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) 35 | '@typescript-eslint/parser': 36 | specifier: ^8.29.1 37 | version: 8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) 38 | better-node-test: 39 | specifier: ^0.7.1 40 | version: 0.7.1 41 | c8: 42 | specifier: ^10.1.3 43 | version: 10.1.3 44 | check-dts: 45 | specifier: ^0.9.0 46 | version: 0.9.0(typescript@5.8.3) 47 | clean-publish: 48 | specifier: ^5.1.0 49 | version: 5.1.0 50 | eslint: 51 | specifier: ^9.24.0 52 | version: 9.24.0(jiti@2.4.2) 53 | happy-dom: 54 | specifier: ^17.4.4 55 | version: 17.4.4 56 | nanodelay: 57 | specifier: ^2.0.2 58 | version: 2.0.2 59 | nanostores: 60 | specifier: ^1.0.1 61 | version: 1.0.1 62 | react: 63 | specifier: ^19.1.0 64 | version: 19.1.0 65 | react-dom: 66 | specifier: ^19.1.0 67 | version: 19.1.0(react@19.1.0) 68 | size-limit: 69 | specifier: ^11.2.0 70 | version: 11.2.0 71 | tsx: 72 | specifier: ^4.19.3 73 | version: 4.19.3 74 | typescript: 75 | specifier: ^5.8.3 76 | version: 5.8.3 77 | 78 | packages: 79 | 80 | '@babel/code-frame@7.26.2': 81 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 82 | engines: {node: '>=6.9.0'} 83 | 84 | '@babel/helper-validator-identifier@7.25.9': 85 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 86 | engines: {node: '>=6.9.0'} 87 | 88 | '@babel/runtime@7.27.0': 89 | resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} 90 | engines: {node: '>=6.9.0'} 91 | 92 | '@bcoe/v8-coverage@1.0.2': 93 | resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} 94 | engines: {node: '>=18'} 95 | 96 | '@emnapi/core@1.4.0': 97 | resolution: {integrity: sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==} 98 | 99 | '@emnapi/runtime@1.4.0': 100 | resolution: {integrity: sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==} 101 | 102 | '@emnapi/wasi-threads@1.0.1': 103 | resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} 104 | 105 | '@esbuild/aix-ppc64@0.25.2': 106 | resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==} 107 | engines: {node: '>=18'} 108 | cpu: [ppc64] 109 | os: [aix] 110 | 111 | '@esbuild/android-arm64@0.25.2': 112 | resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==} 113 | engines: {node: '>=18'} 114 | cpu: [arm64] 115 | os: [android] 116 | 117 | '@esbuild/android-arm@0.25.2': 118 | resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==} 119 | engines: {node: '>=18'} 120 | cpu: [arm] 121 | os: [android] 122 | 123 | '@esbuild/android-x64@0.25.2': 124 | resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==} 125 | engines: {node: '>=18'} 126 | cpu: [x64] 127 | os: [android] 128 | 129 | '@esbuild/darwin-arm64@0.25.2': 130 | resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==} 131 | engines: {node: '>=18'} 132 | cpu: [arm64] 133 | os: [darwin] 134 | 135 | '@esbuild/darwin-x64@0.25.2': 136 | resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==} 137 | engines: {node: '>=18'} 138 | cpu: [x64] 139 | os: [darwin] 140 | 141 | '@esbuild/freebsd-arm64@0.25.2': 142 | resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==} 143 | engines: {node: '>=18'} 144 | cpu: [arm64] 145 | os: [freebsd] 146 | 147 | '@esbuild/freebsd-x64@0.25.2': 148 | resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==} 149 | engines: {node: '>=18'} 150 | cpu: [x64] 151 | os: [freebsd] 152 | 153 | '@esbuild/linux-arm64@0.25.2': 154 | resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==} 155 | engines: {node: '>=18'} 156 | cpu: [arm64] 157 | os: [linux] 158 | 159 | '@esbuild/linux-arm@0.25.2': 160 | resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==} 161 | engines: {node: '>=18'} 162 | cpu: [arm] 163 | os: [linux] 164 | 165 | '@esbuild/linux-ia32@0.25.2': 166 | resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==} 167 | engines: {node: '>=18'} 168 | cpu: [ia32] 169 | os: [linux] 170 | 171 | '@esbuild/linux-loong64@0.25.2': 172 | resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==} 173 | engines: {node: '>=18'} 174 | cpu: [loong64] 175 | os: [linux] 176 | 177 | '@esbuild/linux-mips64el@0.25.2': 178 | resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==} 179 | engines: {node: '>=18'} 180 | cpu: [mips64el] 181 | os: [linux] 182 | 183 | '@esbuild/linux-ppc64@0.25.2': 184 | resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==} 185 | engines: {node: '>=18'} 186 | cpu: [ppc64] 187 | os: [linux] 188 | 189 | '@esbuild/linux-riscv64@0.25.2': 190 | resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==} 191 | engines: {node: '>=18'} 192 | cpu: [riscv64] 193 | os: [linux] 194 | 195 | '@esbuild/linux-s390x@0.25.2': 196 | resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==} 197 | engines: {node: '>=18'} 198 | cpu: [s390x] 199 | os: [linux] 200 | 201 | '@esbuild/linux-x64@0.25.2': 202 | resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==} 203 | engines: {node: '>=18'} 204 | cpu: [x64] 205 | os: [linux] 206 | 207 | '@esbuild/netbsd-arm64@0.25.2': 208 | resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==} 209 | engines: {node: '>=18'} 210 | cpu: [arm64] 211 | os: [netbsd] 212 | 213 | '@esbuild/netbsd-x64@0.25.2': 214 | resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==} 215 | engines: {node: '>=18'} 216 | cpu: [x64] 217 | os: [netbsd] 218 | 219 | '@esbuild/openbsd-arm64@0.25.2': 220 | resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==} 221 | engines: {node: '>=18'} 222 | cpu: [arm64] 223 | os: [openbsd] 224 | 225 | '@esbuild/openbsd-x64@0.25.2': 226 | resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==} 227 | engines: {node: '>=18'} 228 | cpu: [x64] 229 | os: [openbsd] 230 | 231 | '@esbuild/sunos-x64@0.25.2': 232 | resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==} 233 | engines: {node: '>=18'} 234 | cpu: [x64] 235 | os: [sunos] 236 | 237 | '@esbuild/win32-arm64@0.25.2': 238 | resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==} 239 | engines: {node: '>=18'} 240 | cpu: [arm64] 241 | os: [win32] 242 | 243 | '@esbuild/win32-ia32@0.25.2': 244 | resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==} 245 | engines: {node: '>=18'} 246 | cpu: [ia32] 247 | os: [win32] 248 | 249 | '@esbuild/win32-x64@0.25.2': 250 | resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==} 251 | engines: {node: '>=18'} 252 | cpu: [x64] 253 | os: [win32] 254 | 255 | '@eslint-community/eslint-utils@4.5.1': 256 | resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} 257 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 258 | peerDependencies: 259 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 260 | 261 | '@eslint-community/regexpp@4.12.1': 262 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 263 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 264 | 265 | '@eslint/config-array@0.20.0': 266 | resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} 267 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 268 | 269 | '@eslint/config-helpers@0.2.1': 270 | resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==} 271 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 272 | 273 | '@eslint/core@0.12.0': 274 | resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} 275 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 276 | 277 | '@eslint/core@0.13.0': 278 | resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} 279 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 280 | 281 | '@eslint/eslintrc@3.3.1': 282 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 283 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 284 | 285 | '@eslint/js@9.24.0': 286 | resolution: {integrity: sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==} 287 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 288 | 289 | '@eslint/object-schema@2.1.6': 290 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 291 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 292 | 293 | '@eslint/plugin-kit@0.2.8': 294 | resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} 295 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 296 | 297 | '@humanfs/core@0.19.1': 298 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 299 | engines: {node: '>=18.18.0'} 300 | 301 | '@humanfs/node@0.16.6': 302 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 303 | engines: {node: '>=18.18.0'} 304 | 305 | '@humanwhocodes/module-importer@1.0.1': 306 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 307 | engines: {node: '>=12.22'} 308 | 309 | '@humanwhocodes/retry@0.3.1': 310 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 311 | engines: {node: '>=18.18'} 312 | 313 | '@humanwhocodes/retry@0.4.2': 314 | resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} 315 | engines: {node: '>=18.18'} 316 | 317 | '@isaacs/cliui@8.0.2': 318 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 319 | engines: {node: '>=12'} 320 | 321 | '@istanbuljs/schema@0.1.3': 322 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 323 | engines: {node: '>=8'} 324 | 325 | '@jridgewell/resolve-uri@3.1.2': 326 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 327 | engines: {node: '>=6.0.0'} 328 | 329 | '@jridgewell/sourcemap-codec@1.5.0': 330 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 331 | 332 | '@jridgewell/trace-mapping@0.3.25': 333 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 334 | 335 | '@logux/eslint-config@55.2.0': 336 | resolution: {integrity: sha512-lB432ohq+Y7OFY3/2JDGEMFFP/l9UuzN+z+3TKQT/YLETZYWwqzmNqL9ek6Uuno7duQGwOABbaSHRXrup+dPYw==} 337 | engines: {node: '>=18.0.0'} 338 | peerDependencies: 339 | eslint: ^8.57.0 || ^9.0.0 340 | eslint-plugin-svelte: ^3.0.0 341 | svelte: ^4.2.12 || ^5.0.0 342 | svelte-eslint-parser: ^1.0.0 343 | peerDependenciesMeta: 344 | eslint-plugin-svelte: 345 | optional: true 346 | svelte: 347 | optional: true 348 | svelte-eslint-parser: 349 | optional: true 350 | 351 | '@napi-rs/wasm-runtime@0.2.8': 352 | resolution: {integrity: sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==} 353 | 354 | '@nodelib/fs.scandir@2.1.5': 355 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 356 | engines: {node: '>= 8'} 357 | 358 | '@nodelib/fs.stat@2.0.5': 359 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 360 | engines: {node: '>= 8'} 361 | 362 | '@nodelib/fs.walk@1.2.8': 363 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 364 | engines: {node: '>= 8'} 365 | 366 | '@pkgjs/parseargs@0.11.0': 367 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 368 | engines: {node: '>=14'} 369 | 370 | '@pkgr/core@0.2.2': 371 | resolution: {integrity: sha512-25L86MyPvnlQoX2MTIV2OiUcb6vJ6aRbFa9pbwByn95INKD5mFH2smgjDhq+fwJoqAgvgbdJLj6Tz7V9X5CFAQ==} 372 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 373 | 374 | '@size-limit/esbuild@11.2.0': 375 | resolution: {integrity: sha512-vSg9H0WxGQPRzDnBzeDyD9XT0Zdq0L+AI3+77/JhxznbSCMJMMr8ndaWVQRhOsixl97N0oD4pRFw2+R1Lcvi6A==} 376 | engines: {node: ^18.0.0 || >=20.0.0} 377 | peerDependencies: 378 | size-limit: 11.2.0 379 | 380 | '@size-limit/file@11.2.0': 381 | resolution: {integrity: sha512-OZHE3putEkQ/fgzz3Tp/0hSmfVo3wyTpOJSRNm6AmcwX4Nm9YtTfbQQ/hZRwbBFR23S7x2Sd9EbqYzngKwbRoA==} 382 | engines: {node: ^18.0.0 || >=20.0.0} 383 | peerDependencies: 384 | size-limit: 11.2.0 385 | 386 | '@size-limit/preset-small-lib@11.2.0': 387 | resolution: {integrity: sha512-RFbbIVfv8/QDgTPyXzjo5NKO6CYyK5Uq5xtNLHLbw5RgSKrgo8WpiB/fNivZuNd/5Wk0s91PtaJ9ThNcnFuI3g==} 388 | peerDependencies: 389 | size-limit: 11.2.0 390 | 391 | '@testing-library/dom@10.4.0': 392 | resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} 393 | engines: {node: '>=18'} 394 | 395 | '@testing-library/react@16.3.0': 396 | resolution: {integrity: sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==} 397 | engines: {node: '>=18'} 398 | peerDependencies: 399 | '@testing-library/dom': ^10.0.0 400 | '@types/react': ^18.0.0 || ^19.0.0 401 | '@types/react-dom': ^18.0.0 || ^19.0.0 402 | react: ^18.0.0 || ^19.0.0 403 | react-dom: ^18.0.0 || ^19.0.0 404 | peerDependenciesMeta: 405 | '@types/react': 406 | optional: true 407 | '@types/react-dom': 408 | optional: true 409 | 410 | '@tybys/wasm-util@0.9.0': 411 | resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} 412 | 413 | '@types/aria-query@5.0.4': 414 | resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} 415 | 416 | '@types/doctrine@0.0.9': 417 | resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} 418 | 419 | '@types/estree@1.0.7': 420 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} 421 | 422 | '@types/istanbul-lib-coverage@2.0.6': 423 | resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} 424 | 425 | '@types/json-schema@7.0.15': 426 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 427 | 428 | '@types/node@22.14.0': 429 | resolution: {integrity: sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==} 430 | 431 | '@types/react-dom@19.1.2': 432 | resolution: {integrity: sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw==} 433 | peerDependencies: 434 | '@types/react': ^19.0.0 435 | 436 | '@types/react@19.1.0': 437 | resolution: {integrity: sha512-UaicktuQI+9UKyA4njtDOGBD/67t8YEBt2xdfqu8+gP9hqPUPsiXlNPcpS2gVdjmis5GKPG3fCxbQLVgxsQZ8w==} 438 | 439 | '@types/unist@3.0.3': 440 | resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} 441 | 442 | '@types/ws@8.18.1': 443 | resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} 444 | 445 | '@typescript-eslint/eslint-plugin@8.29.1': 446 | resolution: {integrity: sha512-ba0rr4Wfvg23vERs3eB+P3lfj2E+2g3lhWcCVukUuhtcdUx5lSIFZlGFEBHKr+3zizDa/TvZTptdNHVZWAkSBg==} 447 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 448 | peerDependencies: 449 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 450 | eslint: ^8.57.0 || ^9.0.0 451 | typescript: '>=4.8.4 <5.9.0' 452 | 453 | '@typescript-eslint/parser@8.29.1': 454 | resolution: {integrity: sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg==} 455 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 456 | peerDependencies: 457 | eslint: ^8.57.0 || ^9.0.0 458 | typescript: '>=4.8.4 <5.9.0' 459 | 460 | '@typescript-eslint/scope-manager@8.29.1': 461 | resolution: {integrity: sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==} 462 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 463 | 464 | '@typescript-eslint/type-utils@8.29.1': 465 | resolution: {integrity: sha512-DkDUSDwZVCYN71xA4wzySqqcZsHKic53A4BLqmrWFFpOpNSoxX233lwGu/2135ymTCR04PoKiEEEvN1gFYg4Tw==} 466 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 467 | peerDependencies: 468 | eslint: ^8.57.0 || ^9.0.0 469 | typescript: '>=4.8.4 <5.9.0' 470 | 471 | '@typescript-eslint/types@8.29.1': 472 | resolution: {integrity: sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==} 473 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 474 | 475 | '@typescript-eslint/typescript-estree@8.29.1': 476 | resolution: {integrity: sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==} 477 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 478 | peerDependencies: 479 | typescript: '>=4.8.4 <5.9.0' 480 | 481 | '@typescript-eslint/utils@8.29.1': 482 | resolution: {integrity: sha512-QAkFEbytSaB8wnmB+DflhUPz6CLbFWE2SnSCrRMEa+KnXIzDYbpsn++1HGvnfAsUY44doDXmvRkO5shlM/3UfA==} 483 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 484 | peerDependencies: 485 | eslint: ^8.57.0 || ^9.0.0 486 | typescript: '>=4.8.4 <5.9.0' 487 | 488 | '@typescript-eslint/visitor-keys@8.29.1': 489 | resolution: {integrity: sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==} 490 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 491 | 492 | '@unrs/resolver-binding-darwin-arm64@1.4.1': 493 | resolution: {integrity: sha512-8Tv+Bsd0BjGwfEedIyor4inw8atppRxM5BdUnIt+3mAm/QXUm7Dw74CHnXpfZKXkp07EXJGiA8hStqCINAWhdw==} 494 | cpu: [arm64] 495 | os: [darwin] 496 | 497 | '@unrs/resolver-binding-darwin-x64@1.4.1': 498 | resolution: {integrity: sha512-X8c3PhWziEMKAzZz+YAYWfwawi5AEgzy/hmfizAB4C70gMHLKmInJcp1270yYAOs7z07YVFI220pp50z24Jk3A==} 499 | cpu: [x64] 500 | os: [darwin] 501 | 502 | '@unrs/resolver-binding-freebsd-x64@1.4.1': 503 | resolution: {integrity: sha512-UUr/nREy1UdtxXQnmLaaTXFGOcGxPwNIzeJdb3KXai3TKtC1UgNOB9s8KOA4TaxOUBR/qVgL5BvBwmUjD5yuVA==} 504 | cpu: [x64] 505 | os: [freebsd] 506 | 507 | '@unrs/resolver-binding-linux-arm-gnueabihf@1.4.1': 508 | resolution: {integrity: sha512-e3pII53dEeS8inkX6A1ad2UXE0nuoWCqik4kOxaDnls0uJUq0ntdj5d9IYd+bv5TDwf9DSge/xPOvCmRYH+Tsw==} 509 | cpu: [arm] 510 | os: [linux] 511 | 512 | '@unrs/resolver-binding-linux-arm-musleabihf@1.4.1': 513 | resolution: {integrity: sha512-e/AKKd9gR+HNmVyDEPI/PIz2t0DrA3cyonHNhHVjrkxe8pMCiYiqhtn1+h+yIpHUtUlM6Y1FNIdivFa+r7wrEQ==} 514 | cpu: [arm] 515 | os: [linux] 516 | 517 | '@unrs/resolver-binding-linux-arm64-gnu@1.4.1': 518 | resolution: {integrity: sha512-vtIu34luF1jRktlHtiwm2mjuE8oJCsFiFr8hT5+tFQdqFKjPhbJXn83LswKsOhy0GxAEevpXDI4xxEwkjuXIPA==} 519 | cpu: [arm64] 520 | os: [linux] 521 | 522 | '@unrs/resolver-binding-linux-arm64-musl@1.4.1': 523 | resolution: {integrity: sha512-H3PaOuGyhFXiyJd+09uPhGl4gocmhyi1BRzvsP8Lv5AQO3p3/ZY7WjV4t2NkBksm9tMjf3YbOVHyPWi2eWsNYw==} 524 | cpu: [arm64] 525 | os: [linux] 526 | 527 | '@unrs/resolver-binding-linux-ppc64-gnu@1.4.1': 528 | resolution: {integrity: sha512-4+GmJcaaFntCi1S01YByqp8wLMjV/FyQyHVGm0vedIhL1Vfx7uHkz/sZmKsidRwokBGuxi92GFmSzqT2O8KcNA==} 529 | cpu: [ppc64] 530 | os: [linux] 531 | 532 | '@unrs/resolver-binding-linux-s390x-gnu@1.4.1': 533 | resolution: {integrity: sha512-6RDQVCmtFYTlhy89D5ixTqo9bTQqFhvNN0Ey1wJs5r+01Dq15gPHRXv2jF2bQATtMrOfYwv+R2ZR9ew1N1N3YQ==} 534 | cpu: [s390x] 535 | os: [linux] 536 | 537 | '@unrs/resolver-binding-linux-x64-gnu@1.4.1': 538 | resolution: {integrity: sha512-XpU9uzIkD86+19NjCXxlVPISMUrVXsXo5htxtuG+uJ59p5JauSRZsIxQxzzfKzkxEjdvANPM/lS1HFoX6A6QeA==} 539 | cpu: [x64] 540 | os: [linux] 541 | 542 | '@unrs/resolver-binding-linux-x64-musl@1.4.1': 543 | resolution: {integrity: sha512-3CDjG/spbTKCSHl66QP2ekHSD+H34i7utuDIM5gzoNBcZ1gTO0Op09Wx5cikXnhORRf9+HyDWzm37vU1PLSM1A==} 544 | cpu: [x64] 545 | os: [linux] 546 | 547 | '@unrs/resolver-binding-wasm32-wasi@1.4.1': 548 | resolution: {integrity: sha512-50tYhvbCTnuzMn7vmP8IV2UKF7ITo1oihygEYq9wW2DUb/Y+QMqBHJUSCABRngATjZ4shOK6f2+s0gQX6ElENQ==} 549 | engines: {node: '>=14.0.0'} 550 | cpu: [wasm32] 551 | 552 | '@unrs/resolver-binding-win32-arm64-msvc@1.4.1': 553 | resolution: {integrity: sha512-KyJiIne/AqV4IW0wyQO34wSMuJwy3VxVQOfIXIPyQ/Up6y/zi2P/WwXb78gHsLiGRUqCA9LOoCX+6dQZde0g1g==} 554 | cpu: [arm64] 555 | os: [win32] 556 | 557 | '@unrs/resolver-binding-win32-ia32-msvc@1.4.1': 558 | resolution: {integrity: sha512-y2NUD7pygrBolN2NoXUrwVqBpKPhF8DiSNE5oB5/iFO49r2DpoYqdj5HPb3F42fPBH5qNqj6Zg63+xCEzAD2hw==} 559 | cpu: [ia32] 560 | os: [win32] 561 | 562 | '@unrs/resolver-binding-win32-x64-msvc@1.4.1': 563 | resolution: {integrity: sha512-hVXaObGI2lGFmrtT77KSbPQ3I+zk9IU500wobjk0+oX59vg/0VqAzABNtt3YSQYgXTC2a/LYxekLfND/wlt0yQ==} 564 | cpu: [x64] 565 | os: [win32] 566 | 567 | acorn-jsx@5.3.2: 568 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 569 | peerDependencies: 570 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 571 | 572 | acorn@8.14.1: 573 | resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} 574 | engines: {node: '>=0.4.0'} 575 | hasBin: true 576 | 577 | ajv@6.12.6: 578 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 579 | 580 | ansi-regex@5.0.1: 581 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 582 | engines: {node: '>=8'} 583 | 584 | ansi-regex@6.1.0: 585 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 586 | engines: {node: '>=12'} 587 | 588 | ansi-styles@4.3.0: 589 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 590 | engines: {node: '>=8'} 591 | 592 | ansi-styles@5.2.0: 593 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 594 | engines: {node: '>=10'} 595 | 596 | ansi-styles@6.2.1: 597 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 598 | engines: {node: '>=12'} 599 | 600 | argparse@2.0.1: 601 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 602 | 603 | aria-query@5.3.0: 604 | resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} 605 | 606 | balanced-match@1.0.2: 607 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 608 | 609 | better-node-test@0.7.1: 610 | resolution: {integrity: sha512-reijKcA8jO9qlmnYMu2EerjYgltEiatqa5V5+gxY71FHKZPZduJv4Mc0xMj1l9E4kiuCAM6SBS/IPdKksWtcrw==} 611 | engines: {node: ^18.19.0 || ^20.0.0 || >=22.0.0} 612 | hasBin: true 613 | 614 | brace-expansion@1.1.11: 615 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 616 | 617 | brace-expansion@2.0.1: 618 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 619 | 620 | braces@3.0.3: 621 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 622 | engines: {node: '>=8'} 623 | 624 | bytes-iec@3.1.1: 625 | resolution: {integrity: sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==} 626 | engines: {node: '>= 0.8'} 627 | 628 | c8@10.1.3: 629 | resolution: {integrity: sha512-LvcyrOAaOnrrlMpW22n690PUvxiq4Uf9WMhQwNJ9vgagkL/ph1+D4uvjvDA5XCbykrc0sx+ay6pVi9YZ1GnhyA==} 630 | engines: {node: '>=18'} 631 | hasBin: true 632 | peerDependencies: 633 | monocart-coverage-reports: ^2 634 | peerDependenciesMeta: 635 | monocart-coverage-reports: 636 | optional: true 637 | 638 | callsites@3.1.0: 639 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 640 | engines: {node: '>=6'} 641 | 642 | chalk@4.1.2: 643 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 644 | engines: {node: '>=10'} 645 | 646 | check-dts@0.9.0: 647 | resolution: {integrity: sha512-xAs/RKFiB1dHEFPK3+ACk0f2WdngQywmghiPsKJF2JmrsOHCQAfcqkD7C52V3FjwPtU5s8sdTJwX4pLP/66+Bw==} 648 | engines: {node: '>=18.0.0'} 649 | hasBin: true 650 | peerDependencies: 651 | typescript: '>=4.0.0' 652 | 653 | chokidar@4.0.3: 654 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 655 | engines: {node: '>= 14.16.0'} 656 | 657 | clean-publish@5.1.0: 658 | resolution: {integrity: sha512-Gbz8x7sL/sn0j+2B+yYEumD17WmPT6pHLN+A5nhcd0Sdh86EYblQleU+dUIICXVFalFMFBdW2aGynrVJ6k1u4Q==} 659 | engines: {node: '>= 18.0.0'} 660 | hasBin: true 661 | 662 | cliui@8.0.1: 663 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 664 | engines: {node: '>=12'} 665 | 666 | color-convert@2.0.1: 667 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 668 | engines: {node: '>=7.0.0'} 669 | 670 | color-name@1.1.4: 671 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 672 | 673 | concat-map@0.0.1: 674 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 675 | 676 | convert-source-map@2.0.0: 677 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 678 | 679 | cross-spawn@7.0.6: 680 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 681 | engines: {node: '>= 8'} 682 | 683 | csstype@3.1.3: 684 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 685 | 686 | debug@3.2.7: 687 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 688 | peerDependencies: 689 | supports-color: '*' 690 | peerDependenciesMeta: 691 | supports-color: 692 | optional: true 693 | 694 | debug@4.4.0: 695 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 696 | engines: {node: '>=6.0'} 697 | peerDependencies: 698 | supports-color: '*' 699 | peerDependenciesMeta: 700 | supports-color: 701 | optional: true 702 | 703 | deep-is@0.1.4: 704 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 705 | 706 | dequal@2.0.3: 707 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 708 | engines: {node: '>=6'} 709 | 710 | doctrine@3.0.0: 711 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 712 | engines: {node: '>=6.0.0'} 713 | 714 | dom-accessibility-api@0.5.16: 715 | resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} 716 | 717 | eastasianwidth@0.2.0: 718 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 719 | 720 | emoji-regex@8.0.0: 721 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 722 | 723 | emoji-regex@9.2.2: 724 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 725 | 726 | enhanced-resolve@5.18.1: 727 | resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} 728 | engines: {node: '>=10.13.0'} 729 | 730 | esbuild@0.25.2: 731 | resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==} 732 | engines: {node: '>=18'} 733 | hasBin: true 734 | 735 | escalade@3.2.0: 736 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 737 | engines: {node: '>=6'} 738 | 739 | escape-string-regexp@4.0.0: 740 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 741 | engines: {node: '>=10'} 742 | 743 | eslint-compat-utils@0.5.1: 744 | resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} 745 | engines: {node: '>=12'} 746 | peerDependencies: 747 | eslint: '>=6.0.0' 748 | 749 | eslint-import-resolver-node@0.3.9: 750 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 751 | 752 | eslint-plugin-es-x@7.8.0: 753 | resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} 754 | engines: {node: ^14.18.0 || >=16.0.0} 755 | peerDependencies: 756 | eslint: '>=8' 757 | 758 | eslint-plugin-import-x@4.10.2: 759 | resolution: {integrity: sha512-jO3Y6+zBUyTX5MVbbLSzoz6fe65t+WEBaXStRLM4EBhZWbuSwAH3cLwARtM0Yp4zRtZGp9sL2zzK7G9JkHR8LA==} 760 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 761 | peerDependencies: 762 | eslint: ^8.57.0 || ^9.0.0 763 | 764 | eslint-plugin-n@17.17.0: 765 | resolution: {integrity: sha512-2VvPK7Mo73z1rDFb6pTvkH6kFibAmnTubFq5l83vePxu0WiY1s0LOtj2WHb6Sa40R3w4mnh8GFYbHBQyMlotKw==} 766 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 767 | peerDependencies: 768 | eslint: '>=8.23.0' 769 | 770 | eslint-plugin-perfectionist@4.11.0: 771 | resolution: {integrity: sha512-5s+ehXydnLPQpLDj5mJ0CnYj2fQe6v6gKA3tS+FZVBLzwMOh8skH+l+1Gni08rG0SdEcNhJyjQp/mEkDYK8czw==} 772 | engines: {node: ^18.0.0 || >=20.0.0} 773 | peerDependencies: 774 | eslint: '>=8.45.0' 775 | 776 | eslint-plugin-prefer-let@4.0.0: 777 | resolution: {integrity: sha512-X4ep5PMO1320HKaNC9DM5+p6XvOhwv+RcqGjhv3aiw9iAtHhiFtdIUB5l0Zya0iM22ys2BGKzrNI9Xpw/ZHooQ==} 778 | engines: {node: '>=0.10.0'} 779 | 780 | eslint-plugin-promise@7.2.1: 781 | resolution: {integrity: sha512-SWKjd+EuvWkYaS+uN2csvj0KoP43YTu7+phKQ5v+xw6+A0gutVX2yqCeCkC3uLCJFiPfR2dD8Es5L7yUsmvEaA==} 782 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 783 | peerDependencies: 784 | eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 785 | 786 | eslint-scope@8.3.0: 787 | resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} 788 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 789 | 790 | eslint-visitor-keys@3.4.3: 791 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 792 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 793 | 794 | eslint-visitor-keys@4.2.0: 795 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 796 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 797 | 798 | eslint@9.24.0: 799 | resolution: {integrity: sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==} 800 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 801 | hasBin: true 802 | peerDependencies: 803 | jiti: '*' 804 | peerDependenciesMeta: 805 | jiti: 806 | optional: true 807 | 808 | espree@10.3.0: 809 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 810 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 811 | 812 | esquery@1.6.0: 813 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 814 | engines: {node: '>=0.10'} 815 | 816 | esrecurse@4.3.0: 817 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 818 | engines: {node: '>=4.0'} 819 | 820 | estraverse@5.3.0: 821 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 822 | engines: {node: '>=4.0'} 823 | 824 | esutils@2.0.3: 825 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 826 | engines: {node: '>=0.10.0'} 827 | 828 | fast-deep-equal@3.1.3: 829 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 830 | 831 | fast-glob@3.3.3: 832 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 833 | engines: {node: '>=8.6.0'} 834 | 835 | fast-json-stable-stringify@2.1.0: 836 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 837 | 838 | fast-levenshtein@2.0.6: 839 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 840 | 841 | fastq@1.19.1: 842 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 843 | 844 | fdir@6.4.3: 845 | resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} 846 | peerDependencies: 847 | picomatch: ^3 || ^4 848 | peerDependenciesMeta: 849 | picomatch: 850 | optional: true 851 | 852 | file-entry-cache@8.0.0: 853 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 854 | engines: {node: '>=16.0.0'} 855 | 856 | fill-range@7.1.1: 857 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 858 | engines: {node: '>=8'} 859 | 860 | find-up@5.0.0: 861 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 862 | engines: {node: '>=10'} 863 | 864 | flat-cache@4.0.1: 865 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 866 | engines: {node: '>=16'} 867 | 868 | flatted@3.3.3: 869 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 870 | 871 | foreground-child@3.3.1: 872 | resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} 873 | engines: {node: '>=14'} 874 | 875 | fsevents@2.3.3: 876 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 877 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 878 | os: [darwin] 879 | 880 | function-bind@1.1.2: 881 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 882 | 883 | get-caller-file@2.0.5: 884 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 885 | engines: {node: 6.* || 8.* || >= 10.*} 886 | 887 | get-tsconfig@4.10.0: 888 | resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} 889 | 890 | glob-parent@5.1.2: 891 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 892 | engines: {node: '>= 6'} 893 | 894 | glob-parent@6.0.2: 895 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 896 | engines: {node: '>=10.13.0'} 897 | 898 | glob@10.4.5: 899 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 900 | hasBin: true 901 | 902 | globals@14.0.0: 903 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 904 | engines: {node: '>=18'} 905 | 906 | globals@15.15.0: 907 | resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} 908 | engines: {node: '>=18'} 909 | 910 | globals@16.0.0: 911 | resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==} 912 | engines: {node: '>=18'} 913 | 914 | graceful-fs@4.2.11: 915 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 916 | 917 | graphemer@1.4.0: 918 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 919 | 920 | happy-dom@17.4.4: 921 | resolution: {integrity: sha512-/Pb0ctk3HTZ5xEL3BZ0hK1AqDSAUuRQitOmROPHhfUYEWpmTImwfD8vFDGADmMAX0JYgbcgxWoLFKtsWhcpuVA==} 922 | engines: {node: '>=18.0.0'} 923 | 924 | has-flag@4.0.0: 925 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 926 | engines: {node: '>=8'} 927 | 928 | hasown@2.0.2: 929 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 930 | engines: {node: '>= 0.4'} 931 | 932 | html-escaper@2.0.2: 933 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 934 | 935 | ignore@5.3.2: 936 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 937 | engines: {node: '>= 4'} 938 | 939 | import-fresh@3.3.1: 940 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 941 | engines: {node: '>=6'} 942 | 943 | imurmurhash@0.1.4: 944 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 945 | engines: {node: '>=0.8.19'} 946 | 947 | is-core-module@2.16.1: 948 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 949 | engines: {node: '>= 0.4'} 950 | 951 | is-extglob@2.1.1: 952 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 953 | engines: {node: '>=0.10.0'} 954 | 955 | is-fullwidth-code-point@3.0.0: 956 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 957 | engines: {node: '>=8'} 958 | 959 | is-glob@4.0.3: 960 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 961 | engines: {node: '>=0.10.0'} 962 | 963 | is-number@7.0.0: 964 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 965 | engines: {node: '>=0.12.0'} 966 | 967 | isexe@2.0.0: 968 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 969 | 970 | istanbul-lib-coverage@3.2.2: 971 | resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} 972 | engines: {node: '>=8'} 973 | 974 | istanbul-lib-report@3.0.1: 975 | resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} 976 | engines: {node: '>=10'} 977 | 978 | istanbul-reports@3.1.7: 979 | resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} 980 | engines: {node: '>=8'} 981 | 982 | jackspeak@3.4.3: 983 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 984 | 985 | jiti@2.4.2: 986 | resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} 987 | hasBin: true 988 | 989 | js-tokens@4.0.0: 990 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 991 | 992 | js-yaml@4.1.0: 993 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 994 | hasBin: true 995 | 996 | json-buffer@3.0.1: 997 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 998 | 999 | json-schema-traverse@0.4.1: 1000 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1001 | 1002 | json-stable-stringify-without-jsonify@1.0.1: 1003 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1004 | 1005 | keyv@4.5.4: 1006 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1007 | 1008 | levn@0.4.1: 1009 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1010 | engines: {node: '>= 0.8.0'} 1011 | 1012 | lilconfig@3.1.3: 1013 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 1014 | engines: {node: '>=14'} 1015 | 1016 | locate-path@6.0.0: 1017 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1018 | engines: {node: '>=10'} 1019 | 1020 | lodash.merge@4.6.2: 1021 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1022 | 1023 | lru-cache@10.4.3: 1024 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1025 | 1026 | lz-string@1.5.0: 1027 | resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} 1028 | hasBin: true 1029 | 1030 | make-dir@4.0.0: 1031 | resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} 1032 | engines: {node: '>=10'} 1033 | 1034 | merge2@1.4.1: 1035 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1036 | engines: {node: '>= 8'} 1037 | 1038 | micromatch@4.0.8: 1039 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1040 | engines: {node: '>=8.6'} 1041 | 1042 | minimatch@10.0.1: 1043 | resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} 1044 | engines: {node: 20 || >=22} 1045 | 1046 | minimatch@3.1.2: 1047 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1048 | 1049 | minimatch@9.0.5: 1050 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1051 | engines: {node: '>=16 || 14 >=14.17'} 1052 | 1053 | minipass@7.1.2: 1054 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1055 | engines: {node: '>=16 || 14 >=14.17'} 1056 | 1057 | ms@2.1.3: 1058 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1059 | 1060 | nanodelay@2.0.2: 1061 | resolution: {integrity: sha512-6AS5aCSXsjoxq2Jr9CdaAeT60yoYDOTp6po9ziqeOeY6vf6uTEHYSqWql6EFILrM3fEfXgkZ4KqE9L0rTm/wlA==} 1062 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 1063 | 1064 | nanoid@5.1.5: 1065 | resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==} 1066 | engines: {node: ^18 || >=20} 1067 | hasBin: true 1068 | 1069 | nanospinner@1.2.2: 1070 | resolution: {integrity: sha512-Zt/AmG6qRU3e+WnzGGLuMCEAO/dAu45stNbHY223tUxldaDAeE+FxSPsd9Q+j+paejmm0ZbrNVs5Sraqy3dRxA==} 1071 | 1072 | nanostores@1.0.1: 1073 | resolution: {integrity: sha512-kNZ9xnoJYKg/AfxjrVL4SS0fKX++4awQReGqWnwTRHxeHGZ1FJFVgTqr/eMrNQdp0Tz7M7tG/TDaX8QfHDwVCw==} 1074 | engines: {node: ^20.0.0 || >=22.0.0} 1075 | 1076 | natural-compare@1.4.0: 1077 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1078 | 1079 | natural-orderby@5.0.0: 1080 | resolution: {integrity: sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==} 1081 | engines: {node: '>=18'} 1082 | 1083 | optionator@0.9.4: 1084 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1085 | engines: {node: '>= 0.8.0'} 1086 | 1087 | p-limit@3.1.0: 1088 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1089 | engines: {node: '>=10'} 1090 | 1091 | p-locate@5.0.0: 1092 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1093 | engines: {node: '>=10'} 1094 | 1095 | package-json-from-dist@1.0.1: 1096 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1097 | 1098 | parent-module@1.0.1: 1099 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1100 | engines: {node: '>=6'} 1101 | 1102 | path-exists@4.0.0: 1103 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1104 | engines: {node: '>=8'} 1105 | 1106 | path-key@3.1.1: 1107 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1108 | engines: {node: '>=8'} 1109 | 1110 | path-parse@1.0.7: 1111 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1112 | 1113 | path-scurry@1.11.1: 1114 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1115 | engines: {node: '>=16 || 14 >=14.18'} 1116 | 1117 | picocolors@1.1.1: 1118 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1119 | 1120 | picomatch@2.3.1: 1121 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1122 | engines: {node: '>=8.6'} 1123 | 1124 | picomatch@4.0.2: 1125 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 1126 | engines: {node: '>=12'} 1127 | 1128 | prelude-ls@1.2.1: 1129 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1130 | engines: {node: '>= 0.8.0'} 1131 | 1132 | pretty-format@27.5.1: 1133 | resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} 1134 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1135 | 1136 | punycode@2.3.1: 1137 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1138 | engines: {node: '>=6'} 1139 | 1140 | queue-microtask@1.2.3: 1141 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1142 | 1143 | react-dom@19.1.0: 1144 | resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} 1145 | peerDependencies: 1146 | react: ^19.1.0 1147 | 1148 | react-is@17.0.2: 1149 | resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} 1150 | 1151 | react@19.1.0: 1152 | resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} 1153 | engines: {node: '>=0.10.0'} 1154 | 1155 | readdirp@4.1.2: 1156 | resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} 1157 | engines: {node: '>= 14.18.0'} 1158 | 1159 | regenerator-runtime@0.14.1: 1160 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 1161 | 1162 | require-directory@2.1.1: 1163 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1164 | engines: {node: '>=0.10.0'} 1165 | 1166 | requireindex@1.2.0: 1167 | resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} 1168 | engines: {node: '>=0.10.5'} 1169 | 1170 | resolve-from@4.0.0: 1171 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1172 | engines: {node: '>=4'} 1173 | 1174 | resolve-pkg-maps@1.0.0: 1175 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1176 | 1177 | resolve@1.22.10: 1178 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1179 | engines: {node: '>= 0.4'} 1180 | hasBin: true 1181 | 1182 | reusify@1.1.0: 1183 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1184 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1185 | 1186 | run-parallel@1.2.0: 1187 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1188 | 1189 | scheduler@0.26.0: 1190 | resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} 1191 | 1192 | semver@7.7.1: 1193 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 1194 | engines: {node: '>=10'} 1195 | hasBin: true 1196 | 1197 | shebang-command@2.0.0: 1198 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1199 | engines: {node: '>=8'} 1200 | 1201 | shebang-regex@3.0.0: 1202 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1203 | engines: {node: '>=8'} 1204 | 1205 | signal-exit@4.1.0: 1206 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1207 | engines: {node: '>=14'} 1208 | 1209 | size-limit@11.2.0: 1210 | resolution: {integrity: sha512-2kpQq2DD/pRpx3Tal/qRW1SYwcIeQ0iq8li5CJHQgOC+FtPn2BVmuDtzUCgNnpCrbgtfEHqh+iWzxK+Tq6C+RQ==} 1211 | engines: {node: ^18.0.0 || >=20.0.0} 1212 | hasBin: true 1213 | 1214 | stable-hash@0.0.5: 1215 | resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} 1216 | 1217 | string-width@4.2.3: 1218 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1219 | engines: {node: '>=8'} 1220 | 1221 | string-width@5.1.2: 1222 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1223 | engines: {node: '>=12'} 1224 | 1225 | strip-ansi@6.0.1: 1226 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1227 | engines: {node: '>=8'} 1228 | 1229 | strip-ansi@7.1.0: 1230 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1231 | engines: {node: '>=12'} 1232 | 1233 | strip-json-comments@3.1.1: 1234 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1235 | engines: {node: '>=8'} 1236 | 1237 | supports-color@7.2.0: 1238 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1239 | engines: {node: '>=8'} 1240 | 1241 | supports-preserve-symlinks-flag@1.0.0: 1242 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1243 | engines: {node: '>= 0.4'} 1244 | 1245 | tapable@2.2.1: 1246 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 1247 | engines: {node: '>=6'} 1248 | 1249 | test-exclude@7.0.1: 1250 | resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} 1251 | engines: {node: '>=18'} 1252 | 1253 | tinyglobby@0.2.12: 1254 | resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} 1255 | engines: {node: '>=12.0.0'} 1256 | 1257 | to-regex-range@5.0.1: 1258 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1259 | engines: {node: '>=8.0'} 1260 | 1261 | ts-api-utils@2.1.0: 1262 | resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} 1263 | engines: {node: '>=18.12'} 1264 | peerDependencies: 1265 | typescript: '>=4.8.4' 1266 | 1267 | tslib@2.8.1: 1268 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1269 | 1270 | tsx@4.19.3: 1271 | resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==} 1272 | engines: {node: '>=18.0.0'} 1273 | hasBin: true 1274 | 1275 | type-check@0.4.0: 1276 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1277 | engines: {node: '>= 0.8.0'} 1278 | 1279 | typescript-eslint@8.29.1: 1280 | resolution: {integrity: sha512-f8cDkvndhbQMPcysk6CUSGBWV+g1utqdn71P5YKwMumVMOG/5k7cHq0KyG4O52nB0oKS4aN2Tp5+wB4APJGC+w==} 1281 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1282 | peerDependencies: 1283 | eslint: ^8.57.0 || ^9.0.0 1284 | typescript: '>=4.8.4 <5.9.0' 1285 | 1286 | typescript@5.8.3: 1287 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 1288 | engines: {node: '>=14.17'} 1289 | hasBin: true 1290 | 1291 | undici-types@6.21.0: 1292 | resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} 1293 | 1294 | unist-util-stringify-position@4.0.0: 1295 | resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} 1296 | 1297 | unrs-resolver@1.4.1: 1298 | resolution: {integrity: sha512-MhPB3wBI5BR8TGieTb08XuYlE8oFVEXdSAgat3psdlRyejl8ojQ8iqPcjh094qCZ1r+TnkxzP6BeCd/umfHckQ==} 1299 | 1300 | uri-js@4.4.1: 1301 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1302 | 1303 | v8-to-istanbul@9.3.0: 1304 | resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} 1305 | engines: {node: '>=10.12.0'} 1306 | 1307 | vfile-location@5.0.3: 1308 | resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} 1309 | 1310 | vfile-message@4.0.2: 1311 | resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} 1312 | 1313 | vfile@6.0.3: 1314 | resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} 1315 | 1316 | webidl-conversions@7.0.0: 1317 | resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} 1318 | engines: {node: '>=12'} 1319 | 1320 | whatwg-mimetype@3.0.0: 1321 | resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} 1322 | engines: {node: '>=12'} 1323 | 1324 | which@2.0.2: 1325 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1326 | engines: {node: '>= 8'} 1327 | hasBin: true 1328 | 1329 | word-wrap@1.2.5: 1330 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1331 | engines: {node: '>=0.10.0'} 1332 | 1333 | wrap-ansi@7.0.0: 1334 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1335 | engines: {node: '>=10'} 1336 | 1337 | wrap-ansi@8.1.0: 1338 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1339 | engines: {node: '>=12'} 1340 | 1341 | y18n@5.0.8: 1342 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 1343 | engines: {node: '>=10'} 1344 | 1345 | yargs-parser@21.1.1: 1346 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 1347 | engines: {node: '>=12'} 1348 | 1349 | yargs@17.7.2: 1350 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 1351 | engines: {node: '>=12'} 1352 | 1353 | yocto-queue@0.1.0: 1354 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1355 | engines: {node: '>=10'} 1356 | 1357 | snapshots: 1358 | 1359 | '@babel/code-frame@7.26.2': 1360 | dependencies: 1361 | '@babel/helper-validator-identifier': 7.25.9 1362 | js-tokens: 4.0.0 1363 | picocolors: 1.1.1 1364 | 1365 | '@babel/helper-validator-identifier@7.25.9': {} 1366 | 1367 | '@babel/runtime@7.27.0': 1368 | dependencies: 1369 | regenerator-runtime: 0.14.1 1370 | 1371 | '@bcoe/v8-coverage@1.0.2': {} 1372 | 1373 | '@emnapi/core@1.4.0': 1374 | dependencies: 1375 | '@emnapi/wasi-threads': 1.0.1 1376 | tslib: 2.8.1 1377 | optional: true 1378 | 1379 | '@emnapi/runtime@1.4.0': 1380 | dependencies: 1381 | tslib: 2.8.1 1382 | optional: true 1383 | 1384 | '@emnapi/wasi-threads@1.0.1': 1385 | dependencies: 1386 | tslib: 2.8.1 1387 | optional: true 1388 | 1389 | '@esbuild/aix-ppc64@0.25.2': 1390 | optional: true 1391 | 1392 | '@esbuild/android-arm64@0.25.2': 1393 | optional: true 1394 | 1395 | '@esbuild/android-arm@0.25.2': 1396 | optional: true 1397 | 1398 | '@esbuild/android-x64@0.25.2': 1399 | optional: true 1400 | 1401 | '@esbuild/darwin-arm64@0.25.2': 1402 | optional: true 1403 | 1404 | '@esbuild/darwin-x64@0.25.2': 1405 | optional: true 1406 | 1407 | '@esbuild/freebsd-arm64@0.25.2': 1408 | optional: true 1409 | 1410 | '@esbuild/freebsd-x64@0.25.2': 1411 | optional: true 1412 | 1413 | '@esbuild/linux-arm64@0.25.2': 1414 | optional: true 1415 | 1416 | '@esbuild/linux-arm@0.25.2': 1417 | optional: true 1418 | 1419 | '@esbuild/linux-ia32@0.25.2': 1420 | optional: true 1421 | 1422 | '@esbuild/linux-loong64@0.25.2': 1423 | optional: true 1424 | 1425 | '@esbuild/linux-mips64el@0.25.2': 1426 | optional: true 1427 | 1428 | '@esbuild/linux-ppc64@0.25.2': 1429 | optional: true 1430 | 1431 | '@esbuild/linux-riscv64@0.25.2': 1432 | optional: true 1433 | 1434 | '@esbuild/linux-s390x@0.25.2': 1435 | optional: true 1436 | 1437 | '@esbuild/linux-x64@0.25.2': 1438 | optional: true 1439 | 1440 | '@esbuild/netbsd-arm64@0.25.2': 1441 | optional: true 1442 | 1443 | '@esbuild/netbsd-x64@0.25.2': 1444 | optional: true 1445 | 1446 | '@esbuild/openbsd-arm64@0.25.2': 1447 | optional: true 1448 | 1449 | '@esbuild/openbsd-x64@0.25.2': 1450 | optional: true 1451 | 1452 | '@esbuild/sunos-x64@0.25.2': 1453 | optional: true 1454 | 1455 | '@esbuild/win32-arm64@0.25.2': 1456 | optional: true 1457 | 1458 | '@esbuild/win32-ia32@0.25.2': 1459 | optional: true 1460 | 1461 | '@esbuild/win32-x64@0.25.2': 1462 | optional: true 1463 | 1464 | '@eslint-community/eslint-utils@4.5.1(eslint@9.24.0(jiti@2.4.2))': 1465 | dependencies: 1466 | eslint: 9.24.0(jiti@2.4.2) 1467 | eslint-visitor-keys: 3.4.3 1468 | 1469 | '@eslint-community/regexpp@4.12.1': {} 1470 | 1471 | '@eslint/config-array@0.20.0': 1472 | dependencies: 1473 | '@eslint/object-schema': 2.1.6 1474 | debug: 4.4.0 1475 | minimatch: 3.1.2 1476 | transitivePeerDependencies: 1477 | - supports-color 1478 | 1479 | '@eslint/config-helpers@0.2.1': {} 1480 | 1481 | '@eslint/core@0.12.0': 1482 | dependencies: 1483 | '@types/json-schema': 7.0.15 1484 | 1485 | '@eslint/core@0.13.0': 1486 | dependencies: 1487 | '@types/json-schema': 7.0.15 1488 | 1489 | '@eslint/eslintrc@3.3.1': 1490 | dependencies: 1491 | ajv: 6.12.6 1492 | debug: 4.4.0 1493 | espree: 10.3.0 1494 | globals: 14.0.0 1495 | ignore: 5.3.2 1496 | import-fresh: 3.3.1 1497 | js-yaml: 4.1.0 1498 | minimatch: 3.1.2 1499 | strip-json-comments: 3.1.1 1500 | transitivePeerDependencies: 1501 | - supports-color 1502 | 1503 | '@eslint/js@9.24.0': {} 1504 | 1505 | '@eslint/object-schema@2.1.6': {} 1506 | 1507 | '@eslint/plugin-kit@0.2.8': 1508 | dependencies: 1509 | '@eslint/core': 0.13.0 1510 | levn: 0.4.1 1511 | 1512 | '@humanfs/core@0.19.1': {} 1513 | 1514 | '@humanfs/node@0.16.6': 1515 | dependencies: 1516 | '@humanfs/core': 0.19.1 1517 | '@humanwhocodes/retry': 0.3.1 1518 | 1519 | '@humanwhocodes/module-importer@1.0.1': {} 1520 | 1521 | '@humanwhocodes/retry@0.3.1': {} 1522 | 1523 | '@humanwhocodes/retry@0.4.2': {} 1524 | 1525 | '@isaacs/cliui@8.0.2': 1526 | dependencies: 1527 | string-width: 5.1.2 1528 | string-width-cjs: string-width@4.2.3 1529 | strip-ansi: 7.1.0 1530 | strip-ansi-cjs: strip-ansi@6.0.1 1531 | wrap-ansi: 8.1.0 1532 | wrap-ansi-cjs: wrap-ansi@7.0.0 1533 | 1534 | '@istanbuljs/schema@0.1.3': {} 1535 | 1536 | '@jridgewell/resolve-uri@3.1.2': {} 1537 | 1538 | '@jridgewell/sourcemap-codec@1.5.0': {} 1539 | 1540 | '@jridgewell/trace-mapping@0.3.25': 1541 | dependencies: 1542 | '@jridgewell/resolve-uri': 3.1.2 1543 | '@jridgewell/sourcemap-codec': 1.5.0 1544 | 1545 | '@logux/eslint-config@55.2.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)': 1546 | dependencies: 1547 | '@eslint/eslintrc': 3.3.1 1548 | eslint: 9.24.0(jiti@2.4.2) 1549 | eslint-plugin-import-x: 4.10.2(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) 1550 | eslint-plugin-n: 17.17.0(eslint@9.24.0(jiti@2.4.2)) 1551 | eslint-plugin-perfectionist: 4.11.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) 1552 | eslint-plugin-prefer-let: 4.0.0 1553 | eslint-plugin-promise: 7.2.1(eslint@9.24.0(jiti@2.4.2)) 1554 | globals: 16.0.0 1555 | typescript-eslint: 8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) 1556 | transitivePeerDependencies: 1557 | - supports-color 1558 | - typescript 1559 | 1560 | '@napi-rs/wasm-runtime@0.2.8': 1561 | dependencies: 1562 | '@emnapi/core': 1.4.0 1563 | '@emnapi/runtime': 1.4.0 1564 | '@tybys/wasm-util': 0.9.0 1565 | optional: true 1566 | 1567 | '@nodelib/fs.scandir@2.1.5': 1568 | dependencies: 1569 | '@nodelib/fs.stat': 2.0.5 1570 | run-parallel: 1.2.0 1571 | 1572 | '@nodelib/fs.stat@2.0.5': {} 1573 | 1574 | '@nodelib/fs.walk@1.2.8': 1575 | dependencies: 1576 | '@nodelib/fs.scandir': 2.1.5 1577 | fastq: 1.19.1 1578 | 1579 | '@pkgjs/parseargs@0.11.0': 1580 | optional: true 1581 | 1582 | '@pkgr/core@0.2.2': {} 1583 | 1584 | '@size-limit/esbuild@11.2.0(size-limit@11.2.0)': 1585 | dependencies: 1586 | esbuild: 0.25.2 1587 | nanoid: 5.1.5 1588 | size-limit: 11.2.0 1589 | 1590 | '@size-limit/file@11.2.0(size-limit@11.2.0)': 1591 | dependencies: 1592 | size-limit: 11.2.0 1593 | 1594 | '@size-limit/preset-small-lib@11.2.0(size-limit@11.2.0)': 1595 | dependencies: 1596 | '@size-limit/esbuild': 11.2.0(size-limit@11.2.0) 1597 | '@size-limit/file': 11.2.0(size-limit@11.2.0) 1598 | size-limit: 11.2.0 1599 | 1600 | '@testing-library/dom@10.4.0': 1601 | dependencies: 1602 | '@babel/code-frame': 7.26.2 1603 | '@babel/runtime': 7.27.0 1604 | '@types/aria-query': 5.0.4 1605 | aria-query: 5.3.0 1606 | chalk: 4.1.2 1607 | dom-accessibility-api: 0.5.16 1608 | lz-string: 1.5.0 1609 | pretty-format: 27.5.1 1610 | 1611 | '@testing-library/react@16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.2(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': 1612 | dependencies: 1613 | '@babel/runtime': 7.27.0 1614 | '@testing-library/dom': 10.4.0 1615 | react: 19.1.0 1616 | react-dom: 19.1.0(react@19.1.0) 1617 | optionalDependencies: 1618 | '@types/react': 19.1.0 1619 | '@types/react-dom': 19.1.2(@types/react@19.1.0) 1620 | 1621 | '@tybys/wasm-util@0.9.0': 1622 | dependencies: 1623 | tslib: 2.8.1 1624 | optional: true 1625 | 1626 | '@types/aria-query@5.0.4': {} 1627 | 1628 | '@types/doctrine@0.0.9': {} 1629 | 1630 | '@types/estree@1.0.7': {} 1631 | 1632 | '@types/istanbul-lib-coverage@2.0.6': {} 1633 | 1634 | '@types/json-schema@7.0.15': {} 1635 | 1636 | '@types/node@22.14.0': 1637 | dependencies: 1638 | undici-types: 6.21.0 1639 | 1640 | '@types/react-dom@19.1.2(@types/react@19.1.0)': 1641 | dependencies: 1642 | '@types/react': 19.1.0 1643 | 1644 | '@types/react@19.1.0': 1645 | dependencies: 1646 | csstype: 3.1.3 1647 | 1648 | '@types/unist@3.0.3': {} 1649 | 1650 | '@types/ws@8.18.1': 1651 | dependencies: 1652 | '@types/node': 22.14.0 1653 | 1654 | '@typescript-eslint/eslint-plugin@8.29.1(@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)': 1655 | dependencies: 1656 | '@eslint-community/regexpp': 4.12.1 1657 | '@typescript-eslint/parser': 8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) 1658 | '@typescript-eslint/scope-manager': 8.29.1 1659 | '@typescript-eslint/type-utils': 8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) 1660 | '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) 1661 | '@typescript-eslint/visitor-keys': 8.29.1 1662 | eslint: 9.24.0(jiti@2.4.2) 1663 | graphemer: 1.4.0 1664 | ignore: 5.3.2 1665 | natural-compare: 1.4.0 1666 | ts-api-utils: 2.1.0(typescript@5.8.3) 1667 | typescript: 5.8.3 1668 | transitivePeerDependencies: 1669 | - supports-color 1670 | 1671 | '@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)': 1672 | dependencies: 1673 | '@typescript-eslint/scope-manager': 8.29.1 1674 | '@typescript-eslint/types': 8.29.1 1675 | '@typescript-eslint/typescript-estree': 8.29.1(typescript@5.8.3) 1676 | '@typescript-eslint/visitor-keys': 8.29.1 1677 | debug: 4.4.0 1678 | eslint: 9.24.0(jiti@2.4.2) 1679 | typescript: 5.8.3 1680 | transitivePeerDependencies: 1681 | - supports-color 1682 | 1683 | '@typescript-eslint/scope-manager@8.29.1': 1684 | dependencies: 1685 | '@typescript-eslint/types': 8.29.1 1686 | '@typescript-eslint/visitor-keys': 8.29.1 1687 | 1688 | '@typescript-eslint/type-utils@8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)': 1689 | dependencies: 1690 | '@typescript-eslint/typescript-estree': 8.29.1(typescript@5.8.3) 1691 | '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) 1692 | debug: 4.4.0 1693 | eslint: 9.24.0(jiti@2.4.2) 1694 | ts-api-utils: 2.1.0(typescript@5.8.3) 1695 | typescript: 5.8.3 1696 | transitivePeerDependencies: 1697 | - supports-color 1698 | 1699 | '@typescript-eslint/types@8.29.1': {} 1700 | 1701 | '@typescript-eslint/typescript-estree@8.29.1(typescript@5.8.3)': 1702 | dependencies: 1703 | '@typescript-eslint/types': 8.29.1 1704 | '@typescript-eslint/visitor-keys': 8.29.1 1705 | debug: 4.4.0 1706 | fast-glob: 3.3.3 1707 | is-glob: 4.0.3 1708 | minimatch: 9.0.5 1709 | semver: 7.7.1 1710 | ts-api-utils: 2.1.0(typescript@5.8.3) 1711 | typescript: 5.8.3 1712 | transitivePeerDependencies: 1713 | - supports-color 1714 | 1715 | '@typescript-eslint/utils@8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)': 1716 | dependencies: 1717 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0(jiti@2.4.2)) 1718 | '@typescript-eslint/scope-manager': 8.29.1 1719 | '@typescript-eslint/types': 8.29.1 1720 | '@typescript-eslint/typescript-estree': 8.29.1(typescript@5.8.3) 1721 | eslint: 9.24.0(jiti@2.4.2) 1722 | typescript: 5.8.3 1723 | transitivePeerDependencies: 1724 | - supports-color 1725 | 1726 | '@typescript-eslint/visitor-keys@8.29.1': 1727 | dependencies: 1728 | '@typescript-eslint/types': 8.29.1 1729 | eslint-visitor-keys: 4.2.0 1730 | 1731 | '@unrs/resolver-binding-darwin-arm64@1.4.1': 1732 | optional: true 1733 | 1734 | '@unrs/resolver-binding-darwin-x64@1.4.1': 1735 | optional: true 1736 | 1737 | '@unrs/resolver-binding-freebsd-x64@1.4.1': 1738 | optional: true 1739 | 1740 | '@unrs/resolver-binding-linux-arm-gnueabihf@1.4.1': 1741 | optional: true 1742 | 1743 | '@unrs/resolver-binding-linux-arm-musleabihf@1.4.1': 1744 | optional: true 1745 | 1746 | '@unrs/resolver-binding-linux-arm64-gnu@1.4.1': 1747 | optional: true 1748 | 1749 | '@unrs/resolver-binding-linux-arm64-musl@1.4.1': 1750 | optional: true 1751 | 1752 | '@unrs/resolver-binding-linux-ppc64-gnu@1.4.1': 1753 | optional: true 1754 | 1755 | '@unrs/resolver-binding-linux-s390x-gnu@1.4.1': 1756 | optional: true 1757 | 1758 | '@unrs/resolver-binding-linux-x64-gnu@1.4.1': 1759 | optional: true 1760 | 1761 | '@unrs/resolver-binding-linux-x64-musl@1.4.1': 1762 | optional: true 1763 | 1764 | '@unrs/resolver-binding-wasm32-wasi@1.4.1': 1765 | dependencies: 1766 | '@napi-rs/wasm-runtime': 0.2.8 1767 | optional: true 1768 | 1769 | '@unrs/resolver-binding-win32-arm64-msvc@1.4.1': 1770 | optional: true 1771 | 1772 | '@unrs/resolver-binding-win32-ia32-msvc@1.4.1': 1773 | optional: true 1774 | 1775 | '@unrs/resolver-binding-win32-x64-msvc@1.4.1': 1776 | optional: true 1777 | 1778 | acorn-jsx@5.3.2(acorn@8.14.1): 1779 | dependencies: 1780 | acorn: 8.14.1 1781 | 1782 | acorn@8.14.1: {} 1783 | 1784 | ajv@6.12.6: 1785 | dependencies: 1786 | fast-deep-equal: 3.1.3 1787 | fast-json-stable-stringify: 2.1.0 1788 | json-schema-traverse: 0.4.1 1789 | uri-js: 4.4.1 1790 | 1791 | ansi-regex@5.0.1: {} 1792 | 1793 | ansi-regex@6.1.0: {} 1794 | 1795 | ansi-styles@4.3.0: 1796 | dependencies: 1797 | color-convert: 2.0.1 1798 | 1799 | ansi-styles@5.2.0: {} 1800 | 1801 | ansi-styles@6.2.1: {} 1802 | 1803 | argparse@2.0.1: {} 1804 | 1805 | aria-query@5.3.0: 1806 | dependencies: 1807 | dequal: 2.0.3 1808 | 1809 | balanced-match@1.0.2: {} 1810 | 1811 | better-node-test@0.7.1: {} 1812 | 1813 | brace-expansion@1.1.11: 1814 | dependencies: 1815 | balanced-match: 1.0.2 1816 | concat-map: 0.0.1 1817 | 1818 | brace-expansion@2.0.1: 1819 | dependencies: 1820 | balanced-match: 1.0.2 1821 | 1822 | braces@3.0.3: 1823 | dependencies: 1824 | fill-range: 7.1.1 1825 | 1826 | bytes-iec@3.1.1: {} 1827 | 1828 | c8@10.1.3: 1829 | dependencies: 1830 | '@bcoe/v8-coverage': 1.0.2 1831 | '@istanbuljs/schema': 0.1.3 1832 | find-up: 5.0.0 1833 | foreground-child: 3.3.1 1834 | istanbul-lib-coverage: 3.2.2 1835 | istanbul-lib-report: 3.0.1 1836 | istanbul-reports: 3.1.7 1837 | test-exclude: 7.0.1 1838 | v8-to-istanbul: 9.3.0 1839 | yargs: 17.7.2 1840 | yargs-parser: 21.1.1 1841 | 1842 | callsites@3.1.0: {} 1843 | 1844 | chalk@4.1.2: 1845 | dependencies: 1846 | ansi-styles: 4.3.0 1847 | supports-color: 7.2.0 1848 | 1849 | check-dts@0.9.0(typescript@5.8.3): 1850 | dependencies: 1851 | fast-glob: 3.3.3 1852 | nanospinner: 1.2.2 1853 | picocolors: 1.1.1 1854 | typescript: 5.8.3 1855 | vfile-location: 5.0.3 1856 | 1857 | chokidar@4.0.3: 1858 | dependencies: 1859 | readdirp: 4.1.2 1860 | 1861 | clean-publish@5.1.0: 1862 | dependencies: 1863 | cross-spawn: 7.0.6 1864 | fast-glob: 3.3.3 1865 | lilconfig: 3.1.3 1866 | micromatch: 4.0.8 1867 | 1868 | cliui@8.0.1: 1869 | dependencies: 1870 | string-width: 4.2.3 1871 | strip-ansi: 6.0.1 1872 | wrap-ansi: 7.0.0 1873 | 1874 | color-convert@2.0.1: 1875 | dependencies: 1876 | color-name: 1.1.4 1877 | 1878 | color-name@1.1.4: {} 1879 | 1880 | concat-map@0.0.1: {} 1881 | 1882 | convert-source-map@2.0.0: {} 1883 | 1884 | cross-spawn@7.0.6: 1885 | dependencies: 1886 | path-key: 3.1.1 1887 | shebang-command: 2.0.0 1888 | which: 2.0.2 1889 | 1890 | csstype@3.1.3: {} 1891 | 1892 | debug@3.2.7: 1893 | dependencies: 1894 | ms: 2.1.3 1895 | 1896 | debug@4.4.0: 1897 | dependencies: 1898 | ms: 2.1.3 1899 | 1900 | deep-is@0.1.4: {} 1901 | 1902 | dequal@2.0.3: {} 1903 | 1904 | doctrine@3.0.0: 1905 | dependencies: 1906 | esutils: 2.0.3 1907 | 1908 | dom-accessibility-api@0.5.16: {} 1909 | 1910 | eastasianwidth@0.2.0: {} 1911 | 1912 | emoji-regex@8.0.0: {} 1913 | 1914 | emoji-regex@9.2.2: {} 1915 | 1916 | enhanced-resolve@5.18.1: 1917 | dependencies: 1918 | graceful-fs: 4.2.11 1919 | tapable: 2.2.1 1920 | 1921 | esbuild@0.25.2: 1922 | optionalDependencies: 1923 | '@esbuild/aix-ppc64': 0.25.2 1924 | '@esbuild/android-arm': 0.25.2 1925 | '@esbuild/android-arm64': 0.25.2 1926 | '@esbuild/android-x64': 0.25.2 1927 | '@esbuild/darwin-arm64': 0.25.2 1928 | '@esbuild/darwin-x64': 0.25.2 1929 | '@esbuild/freebsd-arm64': 0.25.2 1930 | '@esbuild/freebsd-x64': 0.25.2 1931 | '@esbuild/linux-arm': 0.25.2 1932 | '@esbuild/linux-arm64': 0.25.2 1933 | '@esbuild/linux-ia32': 0.25.2 1934 | '@esbuild/linux-loong64': 0.25.2 1935 | '@esbuild/linux-mips64el': 0.25.2 1936 | '@esbuild/linux-ppc64': 0.25.2 1937 | '@esbuild/linux-riscv64': 0.25.2 1938 | '@esbuild/linux-s390x': 0.25.2 1939 | '@esbuild/linux-x64': 0.25.2 1940 | '@esbuild/netbsd-arm64': 0.25.2 1941 | '@esbuild/netbsd-x64': 0.25.2 1942 | '@esbuild/openbsd-arm64': 0.25.2 1943 | '@esbuild/openbsd-x64': 0.25.2 1944 | '@esbuild/sunos-x64': 0.25.2 1945 | '@esbuild/win32-arm64': 0.25.2 1946 | '@esbuild/win32-ia32': 0.25.2 1947 | '@esbuild/win32-x64': 0.25.2 1948 | 1949 | escalade@3.2.0: {} 1950 | 1951 | escape-string-regexp@4.0.0: {} 1952 | 1953 | eslint-compat-utils@0.5.1(eslint@9.24.0(jiti@2.4.2)): 1954 | dependencies: 1955 | eslint: 9.24.0(jiti@2.4.2) 1956 | semver: 7.7.1 1957 | 1958 | eslint-import-resolver-node@0.3.9: 1959 | dependencies: 1960 | debug: 3.2.7 1961 | is-core-module: 2.16.1 1962 | resolve: 1.22.10 1963 | transitivePeerDependencies: 1964 | - supports-color 1965 | 1966 | eslint-plugin-es-x@7.8.0(eslint@9.24.0(jiti@2.4.2)): 1967 | dependencies: 1968 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0(jiti@2.4.2)) 1969 | '@eslint-community/regexpp': 4.12.1 1970 | eslint: 9.24.0(jiti@2.4.2) 1971 | eslint-compat-utils: 0.5.1(eslint@9.24.0(jiti@2.4.2)) 1972 | 1973 | eslint-plugin-import-x@4.10.2(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3): 1974 | dependencies: 1975 | '@pkgr/core': 0.2.2 1976 | '@types/doctrine': 0.0.9 1977 | '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) 1978 | debug: 4.4.0 1979 | doctrine: 3.0.0 1980 | eslint: 9.24.0(jiti@2.4.2) 1981 | eslint-import-resolver-node: 0.3.9 1982 | get-tsconfig: 4.10.0 1983 | is-glob: 4.0.3 1984 | minimatch: 10.0.1 1985 | semver: 7.7.1 1986 | stable-hash: 0.0.5 1987 | tslib: 2.8.1 1988 | unrs-resolver: 1.4.1 1989 | transitivePeerDependencies: 1990 | - supports-color 1991 | - typescript 1992 | 1993 | eslint-plugin-n@17.17.0(eslint@9.24.0(jiti@2.4.2)): 1994 | dependencies: 1995 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0(jiti@2.4.2)) 1996 | enhanced-resolve: 5.18.1 1997 | eslint: 9.24.0(jiti@2.4.2) 1998 | eslint-plugin-es-x: 7.8.0(eslint@9.24.0(jiti@2.4.2)) 1999 | get-tsconfig: 4.10.0 2000 | globals: 15.15.0 2001 | ignore: 5.3.2 2002 | minimatch: 9.0.5 2003 | semver: 7.7.1 2004 | 2005 | eslint-plugin-perfectionist@4.11.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3): 2006 | dependencies: 2007 | '@typescript-eslint/types': 8.29.1 2008 | '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) 2009 | eslint: 9.24.0(jiti@2.4.2) 2010 | natural-orderby: 5.0.0 2011 | transitivePeerDependencies: 2012 | - supports-color 2013 | - typescript 2014 | 2015 | eslint-plugin-prefer-let@4.0.0: 2016 | dependencies: 2017 | requireindex: 1.2.0 2018 | 2019 | eslint-plugin-promise@7.2.1(eslint@9.24.0(jiti@2.4.2)): 2020 | dependencies: 2021 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0(jiti@2.4.2)) 2022 | eslint: 9.24.0(jiti@2.4.2) 2023 | 2024 | eslint-scope@8.3.0: 2025 | dependencies: 2026 | esrecurse: 4.3.0 2027 | estraverse: 5.3.0 2028 | 2029 | eslint-visitor-keys@3.4.3: {} 2030 | 2031 | eslint-visitor-keys@4.2.0: {} 2032 | 2033 | eslint@9.24.0(jiti@2.4.2): 2034 | dependencies: 2035 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0(jiti@2.4.2)) 2036 | '@eslint-community/regexpp': 4.12.1 2037 | '@eslint/config-array': 0.20.0 2038 | '@eslint/config-helpers': 0.2.1 2039 | '@eslint/core': 0.12.0 2040 | '@eslint/eslintrc': 3.3.1 2041 | '@eslint/js': 9.24.0 2042 | '@eslint/plugin-kit': 0.2.8 2043 | '@humanfs/node': 0.16.6 2044 | '@humanwhocodes/module-importer': 1.0.1 2045 | '@humanwhocodes/retry': 0.4.2 2046 | '@types/estree': 1.0.7 2047 | '@types/json-schema': 7.0.15 2048 | ajv: 6.12.6 2049 | chalk: 4.1.2 2050 | cross-spawn: 7.0.6 2051 | debug: 4.4.0 2052 | escape-string-regexp: 4.0.0 2053 | eslint-scope: 8.3.0 2054 | eslint-visitor-keys: 4.2.0 2055 | espree: 10.3.0 2056 | esquery: 1.6.0 2057 | esutils: 2.0.3 2058 | fast-deep-equal: 3.1.3 2059 | file-entry-cache: 8.0.0 2060 | find-up: 5.0.0 2061 | glob-parent: 6.0.2 2062 | ignore: 5.3.2 2063 | imurmurhash: 0.1.4 2064 | is-glob: 4.0.3 2065 | json-stable-stringify-without-jsonify: 1.0.1 2066 | lodash.merge: 4.6.2 2067 | minimatch: 3.1.2 2068 | natural-compare: 1.4.0 2069 | optionator: 0.9.4 2070 | optionalDependencies: 2071 | jiti: 2.4.2 2072 | transitivePeerDependencies: 2073 | - supports-color 2074 | 2075 | espree@10.3.0: 2076 | dependencies: 2077 | acorn: 8.14.1 2078 | acorn-jsx: 5.3.2(acorn@8.14.1) 2079 | eslint-visitor-keys: 4.2.0 2080 | 2081 | esquery@1.6.0: 2082 | dependencies: 2083 | estraverse: 5.3.0 2084 | 2085 | esrecurse@4.3.0: 2086 | dependencies: 2087 | estraverse: 5.3.0 2088 | 2089 | estraverse@5.3.0: {} 2090 | 2091 | esutils@2.0.3: {} 2092 | 2093 | fast-deep-equal@3.1.3: {} 2094 | 2095 | fast-glob@3.3.3: 2096 | dependencies: 2097 | '@nodelib/fs.stat': 2.0.5 2098 | '@nodelib/fs.walk': 1.2.8 2099 | glob-parent: 5.1.2 2100 | merge2: 1.4.1 2101 | micromatch: 4.0.8 2102 | 2103 | fast-json-stable-stringify@2.1.0: {} 2104 | 2105 | fast-levenshtein@2.0.6: {} 2106 | 2107 | fastq@1.19.1: 2108 | dependencies: 2109 | reusify: 1.1.0 2110 | 2111 | fdir@6.4.3(picomatch@4.0.2): 2112 | optionalDependencies: 2113 | picomatch: 4.0.2 2114 | 2115 | file-entry-cache@8.0.0: 2116 | dependencies: 2117 | flat-cache: 4.0.1 2118 | 2119 | fill-range@7.1.1: 2120 | dependencies: 2121 | to-regex-range: 5.0.1 2122 | 2123 | find-up@5.0.0: 2124 | dependencies: 2125 | locate-path: 6.0.0 2126 | path-exists: 4.0.0 2127 | 2128 | flat-cache@4.0.1: 2129 | dependencies: 2130 | flatted: 3.3.3 2131 | keyv: 4.5.4 2132 | 2133 | flatted@3.3.3: {} 2134 | 2135 | foreground-child@3.3.1: 2136 | dependencies: 2137 | cross-spawn: 7.0.6 2138 | signal-exit: 4.1.0 2139 | 2140 | fsevents@2.3.3: 2141 | optional: true 2142 | 2143 | function-bind@1.1.2: {} 2144 | 2145 | get-caller-file@2.0.5: {} 2146 | 2147 | get-tsconfig@4.10.0: 2148 | dependencies: 2149 | resolve-pkg-maps: 1.0.0 2150 | 2151 | glob-parent@5.1.2: 2152 | dependencies: 2153 | is-glob: 4.0.3 2154 | 2155 | glob-parent@6.0.2: 2156 | dependencies: 2157 | is-glob: 4.0.3 2158 | 2159 | glob@10.4.5: 2160 | dependencies: 2161 | foreground-child: 3.3.1 2162 | jackspeak: 3.4.3 2163 | minimatch: 9.0.5 2164 | minipass: 7.1.2 2165 | package-json-from-dist: 1.0.1 2166 | path-scurry: 1.11.1 2167 | 2168 | globals@14.0.0: {} 2169 | 2170 | globals@15.15.0: {} 2171 | 2172 | globals@16.0.0: {} 2173 | 2174 | graceful-fs@4.2.11: {} 2175 | 2176 | graphemer@1.4.0: {} 2177 | 2178 | happy-dom@17.4.4: 2179 | dependencies: 2180 | webidl-conversions: 7.0.0 2181 | whatwg-mimetype: 3.0.0 2182 | 2183 | has-flag@4.0.0: {} 2184 | 2185 | hasown@2.0.2: 2186 | dependencies: 2187 | function-bind: 1.1.2 2188 | 2189 | html-escaper@2.0.2: {} 2190 | 2191 | ignore@5.3.2: {} 2192 | 2193 | import-fresh@3.3.1: 2194 | dependencies: 2195 | parent-module: 1.0.1 2196 | resolve-from: 4.0.0 2197 | 2198 | imurmurhash@0.1.4: {} 2199 | 2200 | is-core-module@2.16.1: 2201 | dependencies: 2202 | hasown: 2.0.2 2203 | 2204 | is-extglob@2.1.1: {} 2205 | 2206 | is-fullwidth-code-point@3.0.0: {} 2207 | 2208 | is-glob@4.0.3: 2209 | dependencies: 2210 | is-extglob: 2.1.1 2211 | 2212 | is-number@7.0.0: {} 2213 | 2214 | isexe@2.0.0: {} 2215 | 2216 | istanbul-lib-coverage@3.2.2: {} 2217 | 2218 | istanbul-lib-report@3.0.1: 2219 | dependencies: 2220 | istanbul-lib-coverage: 3.2.2 2221 | make-dir: 4.0.0 2222 | supports-color: 7.2.0 2223 | 2224 | istanbul-reports@3.1.7: 2225 | dependencies: 2226 | html-escaper: 2.0.2 2227 | istanbul-lib-report: 3.0.1 2228 | 2229 | jackspeak@3.4.3: 2230 | dependencies: 2231 | '@isaacs/cliui': 8.0.2 2232 | optionalDependencies: 2233 | '@pkgjs/parseargs': 0.11.0 2234 | 2235 | jiti@2.4.2: {} 2236 | 2237 | js-tokens@4.0.0: {} 2238 | 2239 | js-yaml@4.1.0: 2240 | dependencies: 2241 | argparse: 2.0.1 2242 | 2243 | json-buffer@3.0.1: {} 2244 | 2245 | json-schema-traverse@0.4.1: {} 2246 | 2247 | json-stable-stringify-without-jsonify@1.0.1: {} 2248 | 2249 | keyv@4.5.4: 2250 | dependencies: 2251 | json-buffer: 3.0.1 2252 | 2253 | levn@0.4.1: 2254 | dependencies: 2255 | prelude-ls: 1.2.1 2256 | type-check: 0.4.0 2257 | 2258 | lilconfig@3.1.3: {} 2259 | 2260 | locate-path@6.0.0: 2261 | dependencies: 2262 | p-locate: 5.0.0 2263 | 2264 | lodash.merge@4.6.2: {} 2265 | 2266 | lru-cache@10.4.3: {} 2267 | 2268 | lz-string@1.5.0: {} 2269 | 2270 | make-dir@4.0.0: 2271 | dependencies: 2272 | semver: 7.7.1 2273 | 2274 | merge2@1.4.1: {} 2275 | 2276 | micromatch@4.0.8: 2277 | dependencies: 2278 | braces: 3.0.3 2279 | picomatch: 2.3.1 2280 | 2281 | minimatch@10.0.1: 2282 | dependencies: 2283 | brace-expansion: 2.0.1 2284 | 2285 | minimatch@3.1.2: 2286 | dependencies: 2287 | brace-expansion: 1.1.11 2288 | 2289 | minimatch@9.0.5: 2290 | dependencies: 2291 | brace-expansion: 2.0.1 2292 | 2293 | minipass@7.1.2: {} 2294 | 2295 | ms@2.1.3: {} 2296 | 2297 | nanodelay@2.0.2: {} 2298 | 2299 | nanoid@5.1.5: {} 2300 | 2301 | nanospinner@1.2.2: 2302 | dependencies: 2303 | picocolors: 1.1.1 2304 | 2305 | nanostores@1.0.1: {} 2306 | 2307 | natural-compare@1.4.0: {} 2308 | 2309 | natural-orderby@5.0.0: {} 2310 | 2311 | optionator@0.9.4: 2312 | dependencies: 2313 | deep-is: 0.1.4 2314 | fast-levenshtein: 2.0.6 2315 | levn: 0.4.1 2316 | prelude-ls: 1.2.1 2317 | type-check: 0.4.0 2318 | word-wrap: 1.2.5 2319 | 2320 | p-limit@3.1.0: 2321 | dependencies: 2322 | yocto-queue: 0.1.0 2323 | 2324 | p-locate@5.0.0: 2325 | dependencies: 2326 | p-limit: 3.1.0 2327 | 2328 | package-json-from-dist@1.0.1: {} 2329 | 2330 | parent-module@1.0.1: 2331 | dependencies: 2332 | callsites: 3.1.0 2333 | 2334 | path-exists@4.0.0: {} 2335 | 2336 | path-key@3.1.1: {} 2337 | 2338 | path-parse@1.0.7: {} 2339 | 2340 | path-scurry@1.11.1: 2341 | dependencies: 2342 | lru-cache: 10.4.3 2343 | minipass: 7.1.2 2344 | 2345 | picocolors@1.1.1: {} 2346 | 2347 | picomatch@2.3.1: {} 2348 | 2349 | picomatch@4.0.2: {} 2350 | 2351 | prelude-ls@1.2.1: {} 2352 | 2353 | pretty-format@27.5.1: 2354 | dependencies: 2355 | ansi-regex: 5.0.1 2356 | ansi-styles: 5.2.0 2357 | react-is: 17.0.2 2358 | 2359 | punycode@2.3.1: {} 2360 | 2361 | queue-microtask@1.2.3: {} 2362 | 2363 | react-dom@19.1.0(react@19.1.0): 2364 | dependencies: 2365 | react: 19.1.0 2366 | scheduler: 0.26.0 2367 | 2368 | react-is@17.0.2: {} 2369 | 2370 | react@19.1.0: {} 2371 | 2372 | readdirp@4.1.2: {} 2373 | 2374 | regenerator-runtime@0.14.1: {} 2375 | 2376 | require-directory@2.1.1: {} 2377 | 2378 | requireindex@1.2.0: {} 2379 | 2380 | resolve-from@4.0.0: {} 2381 | 2382 | resolve-pkg-maps@1.0.0: {} 2383 | 2384 | resolve@1.22.10: 2385 | dependencies: 2386 | is-core-module: 2.16.1 2387 | path-parse: 1.0.7 2388 | supports-preserve-symlinks-flag: 1.0.0 2389 | 2390 | reusify@1.1.0: {} 2391 | 2392 | run-parallel@1.2.0: 2393 | dependencies: 2394 | queue-microtask: 1.2.3 2395 | 2396 | scheduler@0.26.0: {} 2397 | 2398 | semver@7.7.1: {} 2399 | 2400 | shebang-command@2.0.0: 2401 | dependencies: 2402 | shebang-regex: 3.0.0 2403 | 2404 | shebang-regex@3.0.0: {} 2405 | 2406 | signal-exit@4.1.0: {} 2407 | 2408 | size-limit@11.2.0: 2409 | dependencies: 2410 | bytes-iec: 3.1.1 2411 | chokidar: 4.0.3 2412 | jiti: 2.4.2 2413 | lilconfig: 3.1.3 2414 | nanospinner: 1.2.2 2415 | picocolors: 1.1.1 2416 | tinyglobby: 0.2.12 2417 | 2418 | stable-hash@0.0.5: {} 2419 | 2420 | string-width@4.2.3: 2421 | dependencies: 2422 | emoji-regex: 8.0.0 2423 | is-fullwidth-code-point: 3.0.0 2424 | strip-ansi: 6.0.1 2425 | 2426 | string-width@5.1.2: 2427 | dependencies: 2428 | eastasianwidth: 0.2.0 2429 | emoji-regex: 9.2.2 2430 | strip-ansi: 7.1.0 2431 | 2432 | strip-ansi@6.0.1: 2433 | dependencies: 2434 | ansi-regex: 5.0.1 2435 | 2436 | strip-ansi@7.1.0: 2437 | dependencies: 2438 | ansi-regex: 6.1.0 2439 | 2440 | strip-json-comments@3.1.1: {} 2441 | 2442 | supports-color@7.2.0: 2443 | dependencies: 2444 | has-flag: 4.0.0 2445 | 2446 | supports-preserve-symlinks-flag@1.0.0: {} 2447 | 2448 | tapable@2.2.1: {} 2449 | 2450 | test-exclude@7.0.1: 2451 | dependencies: 2452 | '@istanbuljs/schema': 0.1.3 2453 | glob: 10.4.5 2454 | minimatch: 9.0.5 2455 | 2456 | tinyglobby@0.2.12: 2457 | dependencies: 2458 | fdir: 6.4.3(picomatch@4.0.2) 2459 | picomatch: 4.0.2 2460 | 2461 | to-regex-range@5.0.1: 2462 | dependencies: 2463 | is-number: 7.0.0 2464 | 2465 | ts-api-utils@2.1.0(typescript@5.8.3): 2466 | dependencies: 2467 | typescript: 5.8.3 2468 | 2469 | tslib@2.8.1: {} 2470 | 2471 | tsx@4.19.3: 2472 | dependencies: 2473 | esbuild: 0.25.2 2474 | get-tsconfig: 4.10.0 2475 | optionalDependencies: 2476 | fsevents: 2.3.3 2477 | 2478 | type-check@0.4.0: 2479 | dependencies: 2480 | prelude-ls: 1.2.1 2481 | 2482 | typescript-eslint@8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3): 2483 | dependencies: 2484 | '@typescript-eslint/eslint-plugin': 8.29.1(@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) 2485 | '@typescript-eslint/parser': 8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) 2486 | '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) 2487 | eslint: 9.24.0(jiti@2.4.2) 2488 | typescript: 5.8.3 2489 | transitivePeerDependencies: 2490 | - supports-color 2491 | 2492 | typescript@5.8.3: {} 2493 | 2494 | undici-types@6.21.0: {} 2495 | 2496 | unist-util-stringify-position@4.0.0: 2497 | dependencies: 2498 | '@types/unist': 3.0.3 2499 | 2500 | unrs-resolver@1.4.1: 2501 | optionalDependencies: 2502 | '@unrs/resolver-binding-darwin-arm64': 1.4.1 2503 | '@unrs/resolver-binding-darwin-x64': 1.4.1 2504 | '@unrs/resolver-binding-freebsd-x64': 1.4.1 2505 | '@unrs/resolver-binding-linux-arm-gnueabihf': 1.4.1 2506 | '@unrs/resolver-binding-linux-arm-musleabihf': 1.4.1 2507 | '@unrs/resolver-binding-linux-arm64-gnu': 1.4.1 2508 | '@unrs/resolver-binding-linux-arm64-musl': 1.4.1 2509 | '@unrs/resolver-binding-linux-ppc64-gnu': 1.4.1 2510 | '@unrs/resolver-binding-linux-s390x-gnu': 1.4.1 2511 | '@unrs/resolver-binding-linux-x64-gnu': 1.4.1 2512 | '@unrs/resolver-binding-linux-x64-musl': 1.4.1 2513 | '@unrs/resolver-binding-wasm32-wasi': 1.4.1 2514 | '@unrs/resolver-binding-win32-arm64-msvc': 1.4.1 2515 | '@unrs/resolver-binding-win32-ia32-msvc': 1.4.1 2516 | '@unrs/resolver-binding-win32-x64-msvc': 1.4.1 2517 | 2518 | uri-js@4.4.1: 2519 | dependencies: 2520 | punycode: 2.3.1 2521 | 2522 | v8-to-istanbul@9.3.0: 2523 | dependencies: 2524 | '@jridgewell/trace-mapping': 0.3.25 2525 | '@types/istanbul-lib-coverage': 2.0.6 2526 | convert-source-map: 2.0.0 2527 | 2528 | vfile-location@5.0.3: 2529 | dependencies: 2530 | '@types/unist': 3.0.3 2531 | vfile: 6.0.3 2532 | 2533 | vfile-message@4.0.2: 2534 | dependencies: 2535 | '@types/unist': 3.0.3 2536 | unist-util-stringify-position: 4.0.0 2537 | 2538 | vfile@6.0.3: 2539 | dependencies: 2540 | '@types/unist': 3.0.3 2541 | vfile-message: 4.0.2 2542 | 2543 | webidl-conversions@7.0.0: {} 2544 | 2545 | whatwg-mimetype@3.0.0: {} 2546 | 2547 | which@2.0.2: 2548 | dependencies: 2549 | isexe: 2.0.0 2550 | 2551 | word-wrap@1.2.5: {} 2552 | 2553 | wrap-ansi@7.0.0: 2554 | dependencies: 2555 | ansi-styles: 4.3.0 2556 | string-width: 4.2.3 2557 | strip-ansi: 6.0.1 2558 | 2559 | wrap-ansi@8.1.0: 2560 | dependencies: 2561 | ansi-styles: 6.2.1 2562 | string-width: 5.1.2 2563 | strip-ansi: 7.1.0 2564 | 2565 | y18n@5.0.8: {} 2566 | 2567 | yargs-parser@21.1.1: {} 2568 | 2569 | yargs@17.7.2: 2570 | dependencies: 2571 | cliui: 8.0.1 2572 | escalade: 3.2.0 2573 | get-caller-file: 2.0.5 2574 | require-directory: 2.1.1 2575 | string-width: 4.2.3 2576 | y18n: 5.0.8 2577 | yargs-parser: 21.1.1 2578 | 2579 | yocto-queue@0.1.0: {} 2580 | -------------------------------------------------------------------------------- /test/errors.ts: -------------------------------------------------------------------------------- 1 | import { map, WritableAtom } from 'nanostores' 2 | import { useStore } from '..' 3 | 4 | type TestType = 5 | | { id: string; isLoading: true } 6 | | { isLoading: false; a: string; b: number; c?: number } 7 | 8 | let test = map() 9 | 10 | let testValue = useStore(test) 11 | if (!testValue.isLoading) { 12 | testValue.b 13 | } 14 | 15 | // THROWS Property 'a' does not exist on type 'TestType'. 16 | testValue.a 17 | 18 | let testValueSlice = useStore(test, { keys: ['isLoading', 'a'] }) 19 | if (!testValueSlice.isLoading) { 20 | testValueSlice.a 21 | testValueSlice.b 22 | } 23 | if (testValueSlice.isLoading) { 24 | testValueSlice.id 25 | // THROWS Property 'a' does not exist on type 26 | testValueSlice.a 27 | } 28 | 29 | // THROWS Property 'a' does not exist on type 'TestType'. 30 | testValueSlice.a 31 | 32 | declare const customStore: WritableAtom & { 33 | setKey: (key: 'hey' | 'there', value: unknown) => void 34 | } 35 | { 36 | // THROWS Type '"does-not-exist"' is not assignable 37 | useStore(customStore, { keys: ['does-not-exist'] }) 38 | 39 | let testValueSlice = useStore(customStore, { keys: ['hey', 'there'] }) 40 | } 41 | -------------------------------------------------------------------------------- /test/index.test.ts: -------------------------------------------------------------------------------- 1 | import './setup.js' 2 | 3 | import { act, render, screen } from '@testing-library/react' 4 | import { delay } from 'nanodelay' 5 | import { atom, computed, map, onMount, STORE_UNMOUNT_DELAY } from 'nanostores' 6 | import { equal, notEqual } from 'node:assert' 7 | import { afterEach, test } from 'node:test' 8 | import type { FC, ReactNode } from 'react' 9 | import React from 'react' 10 | 11 | import { useStore } from '../index.js' 12 | 13 | let { createElement: h, useState } = React 14 | 15 | afterEach(() => { 16 | window.document.head.innerHTML = '' 17 | window.document.body.innerHTML = '
' 18 | }) 19 | 20 | test('renders simple store', async () => { 21 | let renders = 0 22 | 23 | let letter = atom('a') 24 | 25 | let second = atom(0) 26 | 27 | let Test1: FC = () => { 28 | renders += 1 29 | let value = useStore(letter) 30 | let number = useStore(second) 31 | return h('div', { 'data-testid': 'test1' }, `${value}${number}`) 32 | } 33 | 34 | let Test2: FC = () => { 35 | let value = useStore(letter) 36 | return h('div', { 'data-testid': 'test2' }, value) 37 | } 38 | 39 | let Wrapper: FC = () => { 40 | let [show, setShow] = useState(true) 41 | return h( 42 | 'div', 43 | {}, 44 | h('button', { 45 | onClick: () => { 46 | setShow(false) 47 | } 48 | }), 49 | show && h(Test1), 50 | show && h(Test2) 51 | ) 52 | } 53 | 54 | render(h(Wrapper)) 55 | equal(screen.getByTestId('test1').textContent, 'a0') 56 | equal(screen.getByTestId('test2').textContent, 'a') 57 | equal(renders, 1) 58 | 59 | await act(async () => { 60 | letter.set('b') 61 | letter.set('c') 62 | second.set(1) 63 | await delay(1) 64 | }) 65 | 66 | equal(screen.getByTestId('test1').textContent, 'c1') 67 | equal(screen.getByTestId('test2').textContent, 'c') 68 | equal(renders, 2) 69 | 70 | notEqual(screen.queryByTestId('test1'), null) 71 | act(() => { 72 | screen.getByRole('button').click() 73 | }) 74 | equal(screen.queryByTestId('test1'), null) 75 | equal(renders, 2) 76 | }) 77 | 78 | test('does not reload store on component changes', async () => { 79 | let destroyed = '' 80 | let simple = atom('') 81 | 82 | onMount(simple, () => { 83 | simple.set('S') 84 | return () => { 85 | destroyed += 'S' 86 | } 87 | }) 88 | 89 | let TestA: FC = () => { 90 | let simpleValue = useStore(simple) 91 | return h('div', { 'data-testid': 'test' }, `1 ${simpleValue}`) 92 | } 93 | 94 | let TestB: FC = () => { 95 | let simpleValue = useStore(simple) 96 | return h('div', { 'data-testid': 'test' }, `2 ${simpleValue}`) 97 | } 98 | 99 | let Switcher: FC = () => { 100 | let [state, setState] = useState<'a' | 'b' | 'none'>('a') 101 | if (state === 'a') { 102 | return h( 103 | 'div', 104 | {}, 105 | h('button', { 106 | onClick: () => { 107 | setState('b') 108 | } 109 | }), 110 | h(TestA) 111 | ) 112 | } else if (state === 'b') { 113 | return h( 114 | 'div', 115 | {}, 116 | h('button', { 117 | onClick: () => { 118 | setState('none') 119 | } 120 | }), 121 | h(TestB) 122 | ) 123 | } else { 124 | return null 125 | } 126 | } 127 | 128 | render(h(Switcher)) 129 | equal(screen.getByTestId('test').textContent, '1 S') 130 | 131 | act(() => { 132 | screen.getByRole('button').click() 133 | }) 134 | equal(screen.getByTestId('test').textContent, '2 S') 135 | equal(destroyed, '') 136 | 137 | act(() => { 138 | screen.getByRole('button').click() 139 | }) 140 | equal(screen.queryByTestId('test'), null) 141 | equal(destroyed, '') 142 | 143 | await delay(STORE_UNMOUNT_DELAY) 144 | equal(destroyed, 'S') 145 | }) 146 | 147 | test('handles keys option', async () => { 148 | type MapStore = { 149 | a?: string 150 | b?: string 151 | } 152 | let Wrapper: FC<{ children?: ReactNode }> = ({ children }) => { 153 | return h('div', {}, children) 154 | } 155 | let mapStore = map() 156 | let renderCount = 0 157 | let MapTest = (): React.ReactElement => { 158 | renderCount++ 159 | let [keys, setKeys] = useState<(keyof MapStore)[]>(['a']) 160 | let { a, b } = useStore(mapStore, { keys }) 161 | return h( 162 | 'div', 163 | { 'data-testid': 'map-test' }, 164 | h('button', { 165 | onClick: () => { 166 | setKeys(['a', 'b']) 167 | } 168 | }), 169 | `map:${a}-${b}` 170 | ) 171 | } 172 | 173 | render(h(Wrapper, {}, h(MapTest))) 174 | 175 | equal(screen.getByTestId('map-test').textContent, 'map:undefined-undefined') 176 | equal(renderCount, 1) 177 | 178 | // updates on init 179 | await act(async () => { 180 | mapStore.set({ a: undefined, b: undefined }) 181 | await delay(1) 182 | }) 183 | 184 | equal(screen.getByTestId('map-test').textContent, 'map:undefined-undefined') 185 | equal(renderCount, 2) 186 | 187 | // updates when has key 188 | await act(async () => { 189 | mapStore.setKey('a', 'a') 190 | await delay(1) 191 | }) 192 | 193 | equal(screen.getByTestId('map-test').textContent, 'map:a-undefined') 194 | equal(renderCount, 3) 195 | 196 | // does not update when has no key 197 | await act(async () => { 198 | mapStore.setKey('b', 'b') 199 | await delay(1) 200 | }) 201 | 202 | equal(screen.getByTestId('map-test').textContent, 'map:a-undefined') 203 | equal(renderCount, 3) 204 | 205 | // reacts on parameter changes 206 | await act(async () => { 207 | screen.getByRole('button').click() 208 | await delay(1) 209 | }) 210 | 211 | equal(screen.getByTestId('map-test').textContent, 'map:a-b') 212 | equal(renderCount, 4) 213 | }) 214 | 215 | test('works with stores that set their values in lifecycle hooks', () => { 216 | let $1 = atom(1) 217 | let $2 = atom(1) 218 | 219 | let $c = computed([$1, $2], (a, b) => a + b) 220 | 221 | let Test: FC = () => { 222 | let value = useStore($c) 223 | if (value !== 2) throw new Error() 224 | return h('div', null, value) 225 | } 226 | 227 | render(h(Test)) 228 | }) 229 | 230 | test('useSyncExternalStore late subscription handling', () => { 231 | let $1 = atom('original content') 232 | 233 | let Test: FC = () => { 234 | let value = useStore($1) 235 | // state update before the useSyncExternalStore subscription happen 236 | $1.set('updated content') 237 | 238 | return h('div', { 'data-testid': 'subscription-test' }, value) 239 | } 240 | 241 | render(h(Test)) 242 | 243 | equal(screen.getByTestId('subscription-test').textContent, 'updated content') 244 | }) 245 | -------------------------------------------------------------------------------- /test/setup.js: -------------------------------------------------------------------------------- 1 | import { Window } from 'happy-dom' 2 | 3 | global.IS_REACT_ACT_ENVIRONMENT = true 4 | 5 | let window = new Window() 6 | 7 | global.window = window 8 | global.document = window.document 9 | if (!global.navigator) { 10 | global.navigator = window.navigator 11 | } 12 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2018", 4 | "module": "esnext", 5 | "moduleResolution": "node", 6 | "esModuleInterop": true, 7 | "skipLibCheck": true, 8 | "allowJs": true, 9 | "strict": true, 10 | "noEmit": true, 11 | "jsx": "react" 12 | }, 13 | "exclude": [ 14 | "**/errors.ts" 15 | ] 16 | } 17 | --------------------------------------------------------------------------------