├── .github └── workflows │ └── test.yml ├── .gitignore ├── .npmrc ├── .prettierignore ├── .prettierrc ├── README.md ├── eslint.config.js ├── package.json ├── pnpm-lock.yaml ├── src ├── app.d.ts ├── app.html ├── lib │ ├── index.ts │ └── svelte-tiny-query │ │ └── query.svelte.ts └── routes │ ├── +page.svelte │ ├── MemeIdea.svelte │ └── QueryContainer.svelte ├── static └── favicon.png ├── svelte.config.js ├── tests ├── BaseExample.svelte ├── ControlsExample.svelte ├── createQuery.svelte.test.ts └── setupTests.ts ├── tsconfig.json ├── vite.config.ts └── vitest-setup-client.ts /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Build and Test 2 | 3 | on: 4 | push: 5 | branches: ['main'] 6 | pull_request: 7 | branches: ['main'] 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | 13 | strategy: 14 | matrix: 15 | node-version: [22.x] 16 | 17 | steps: 18 | - uses: actions/checkout@v4 19 | - name: Install pnpm 20 | uses: pnpm/action-setup@v4 21 | - name: Use Node.js ${{ matrix.node-version }} 22 | uses: actions/setup-node@v4 23 | with: 24 | node-version: ${{ matrix.node-version }} 25 | cache: 'pnpm' 26 | - run: pnpm install 27 | - run: pnpm run lint 28 | - run: pnpm run check 29 | - run: pnpm run build 30 | - run: pnpm run test 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | # Output 4 | .output 5 | .vercel 6 | .netlify 7 | .wrangler 8 | /.svelte-kit 9 | /build 10 | /dist 11 | 12 | # OS 13 | .DS_Store 14 | Thumbs.db 15 | 16 | # Env 17 | .env 18 | .env.* 19 | !.env.example 20 | !.env.test 21 | 22 | # Vite 23 | vite.config.js.timestamp-* 24 | vite.config.ts.timestamp-* 25 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Package Managers 2 | package-lock.json 3 | pnpm-lock.yaml 4 | yarn.lock 5 | bun.lock 6 | bun.lockb 7 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": true, 3 | "singleQuote": true, 4 | "trailingComma": "none", 5 | "plugins": ["prettier-plugin-svelte"], 6 | "overrides": [ 7 | { 8 | "files": "*.svelte", 9 | "options": { 10 | "parser": "svelte" 11 | } 12 | }, 13 | { 14 | "files": "*.md", 15 | "options": { 16 | "useTabs": false, 17 | "tabWidth": 2 18 | } 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Svelte Tiny Query 🦄 2 | 3 | Define declarative queries that handle caching, deduping, reloading and help you simplify your codebase. Built on **Svelte 5's reactivity**, it’s _tiny_ (<1kB gzipped) and fully type-safe. 4 | 5 | **Features** 6 | 7 | - 🚀 Declarative and reactive queries 8 | - 💾 Caching and stale-time support 9 | - 👬 Deduplication of identical loads 10 | - 🚧 Query invalidation from anywhere 11 | - 🐍 Written in typescript 12 | 13 | ## Usage 14 | 15 | In your **Svelte 5** project, install the library. 16 | 17 | npm install svelte-tiny-query --save 18 | 19 | And use it l. 20 | 21 | ```svelte 22 | 38 | 39 | {#if query.loading}Query is loading{/if} 40 | {#if query.error}Error: {query.error}{/if} 41 | {#if query.data}Data: {query.data}{/if} 42 | 43 | 44 | ``` 45 | 46 | ## Basics 47 | 48 | ### The Query 49 | 50 | A **query** is an abstraction for loading and caching data. It consists of a **loading function** which produces some data, and a **unique key** which identifies that data. Queries expose their reactive `data`, `error`, and `loading` state, along with a `reload` function. 51 | 52 | Svelte Tiny Query uses Svelte 5's `$state` to **cache _all_ states of _all_ queries**, indexed by their keys. When you use a query, you are essentially getting reactive access to a small part of the global cache based on the current key. 53 | 54 | ### Keys and Parameters 55 | 56 | Queries can have one or zero parameters, and the parameter can be reactive. If it is reactive and the value changes, the query now points to the new bit of global cache and triggers the loading function if appropriate. 57 | 58 | The key of a query has to uniquely identify the data that the query produces, and thus depends also on the parameters of the query. In Svelte Tiny Query, the parameter is automatically included in the final key, but you can also use a function to 59 | 60 | ### When is a query reloaded? 61 | 62 | Each query is loaded when it is first used (unless there exists not yet stale cache data for it) and when its `reload` function is used. 63 | 64 | ## API Reference 65 | 66 | Svelte Tiny Query only exports 2 functions (`createQuery` and `invalidateQueries`), 2 tiny helpers (`fail` and `succeed`) and one readonly state (`globalLoading`). 67 | 68 | ### `createQuery` 69 | 70 | ```typescript 71 | ( 72 | key: string[] | (param: P) => string[], 73 | loadFn: (param: P) => LoadResult, 74 | options?: { initialData?: T, staleTime?: number } 75 | ) => 76 | (param: P) => { 77 | query: { 78 | data: T | undefined, 79 | error: E | undefined, 80 | loading: boolean 81 | }, 82 | reload: () => void 83 | } 84 | ``` 85 | 86 | Creates a query function which can be invoked to get reactive access to the query state. 87 | 88 | - `T` is the data that is returned by the loading function 89 | - `P` is the parameter which is passed into the query function 90 | - `E` is the error which might be returned by the loading function 91 | 92 | #### Param 1: Key 93 | 94 | ```typescript 95 | key: string[] | (P) => string[] 96 | ``` 97 | 98 | The **key** of a query is crucial for caching and invalidating the query. It must be unique — otherwise, different queries will overwrite each other’s state. 99 | 100 | - If the key is a _function_, it receives the query's parameter and returns an array of strings. This allows for nested keys like `["meme-ideas", "1", "comments"]`. 101 | 102 | - If the key is not a function but the query takes a parameter, the **parameter is serialized and appended to the key**. In the example above, the key intially is `["meme-ideas", "id:1"]`. 103 | 104 | #### Param 2: Loading Function 105 | 106 | ```typescript 107 | loadFn: (param: P) => Promise>; 108 | ``` 109 | 110 | An asychronous function that returns the new data or error. It accepts a parameter `P`, which is the value passed to the query. This parameter can be reactive, and if its value changes, the query will automatically re-initialize. 111 | 112 | The function returns a `LoadResult`, which can either be: 113 | 114 | - `{ success: true, data: T }` 115 | - `{ success: false, error: E }` 116 | 117 | You can use the helper functions `succeed(data: T)` and `fail(error: E)` to easily construct these values. 118 | 119 | #### Param 3: Options (optional) 120 | 121 | ```typescript 122 | options?: { 123 | staleTime: 0 as number 124 | initialData: undefined as T | undefined, 125 | } 126 | ``` 127 | 128 | - **staleTime**: Defines how long (in milliseconds) before the query is considered stale. Before this time is reached, the query is not automatically reloaded. Defaults to 0 (query always reloads) and can also be set to infinity, to prevent reloads completely. 129 | 130 | - **initialData**: This is used as the initial value of `data` before the query has finished loading (instead of undefined). Can be used to implement persisted queries. 131 | 132 | #### Return: The Query Function 133 | 134 | ```typescript 135 | (param: P) => { 136 | query: { 137 | data: T | undefined, 138 | error: E | undefined, 139 | loading: boolean 140 | }, 141 | reload: () => void 142 | } 143 | ``` 144 | 145 | The `createQuery` function returns a query function that gives you access to the reactive state of the query (`data`, `error`, `loading`), and a `reload` function. 146 | 147 | - The query function checks the cache for existing data. If the data is found and not stale, it’s returned immediately. 148 | 149 | - If the data isn’t in the cache or is stale, the loading function is triggered. While it’s loading, the `loading` state is set to `true`. 150 | 151 | - Once the loading function completes, the query state updates with the new data or error, and the data is cached for future use. 152 | 153 | - The `reload` function can be used to manually reload the data, which will update the cache and reset the state as needed. 154 | 155 | - If the query has reactive parameters, a change will trigger a re-initialization, causing a reload based on the new cache key. 156 | 157 | ### `invalidateQueries` 158 | 159 | ```typescript 160 | (key: string[]) => void 161 | ``` 162 | 163 | Invalidates a query and its children by key. If a query is invalidated, and it is active (on a mounted component), its loading function is triggered. This happens, whether the query is stale or not. 164 | 165 | If multiple identical queries are invalidated, the loading function is only run once. 166 | 167 | ### `globalLoading` 168 | 169 | ```typescript 170 | { 171 | count: number; 172 | } 173 | ``` 174 | 175 | Reactive value that holds the number of currently active loadings. 176 | 177 | ## What is Omited 178 | 179 | Svelte Tiny Query deliberately omits some features that other query libraries offer. Here are some of those: 180 | 181 | **Query Provider**
182 | There is no need to set up a query provider. Queries and their caches are global in your app. 183 | 184 | **Timed and Window Focus Reloading**
185 | Use `$effect`, `setInterval` (or `addEventListener`) and `reload` to achieve this yourself. 186 | 187 | **Dependent Queries**
188 | Use `$derived` to conditionally invoke the query function. 189 | 190 | **Persisted Queries**
191 | Use `initialData` to inject perstisted data into the query. 192 | 193 | **Mutations**
194 | Use `invalidateQueries` anywhere in your app to invalidate queries. This means mutations can just be normal functions. 195 | 196 | ## Roadmap 197 | 198 | While we want to keep the library _tiny_, there are a few things on our plate. 199 | 200 | - Optimistic updates (`upateQuery`) 201 | - Retries on error 202 | - Paginated and/or load-more queries 203 | - Query cancellation 204 | - Unused cache clearing (maybe?) 205 | - Tests (d'uh!) 206 | 207 | ## Thanks 208 | 209 | This library exists, because **Svelte 5 is awesome**! It solves the problem of caching almost by itself and allows this library to be so _tiny_ and simple. 210 | 211 | Svelte Tiny Query is also very much inspired by [**TanStack Query**](https://tanstack.com/query) (for which there exists a [svelte variant](https://tanstack.com/query/latest/docs/framework/svelte/overview)). 212 | 213 | And last but not least, if you are still reading this, thank you! We hope you give it a try and consider contributing. 214 | -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | import prettier from 'eslint-config-prettier'; 2 | import js from '@eslint/js'; 3 | import { includeIgnoreFile } from '@eslint/compat'; 4 | import svelte from 'eslint-plugin-svelte'; 5 | import globals from 'globals'; 6 | import { fileURLToPath } from 'node:url'; 7 | import ts from 'typescript-eslint'; 8 | import svelteConfig from './svelte.config.js'; 9 | const gitignorePath = fileURLToPath(new URL('./.gitignore', import.meta.url)); 10 | 11 | export default ts.config( 12 | includeIgnoreFile(gitignorePath), 13 | js.configs.recommended, 14 | ...ts.configs.recommended, 15 | ...svelte.configs.recommended, 16 | prettier, 17 | ...svelte.configs.prettier, 18 | { 19 | languageOptions: { 20 | globals: { 21 | ...globals.browser, 22 | ...globals.node 23 | } 24 | } 25 | }, 26 | { 27 | files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'], 28 | ignores: ['eslint.config.js', 'svelte.config.js'], 29 | 30 | languageOptions: { 31 | parserOptions: { 32 | projectService: true, 33 | extraFileExtensions: ['.svelte'], 34 | parser: ts.parser, 35 | svelteConfig 36 | } 37 | } 38 | } 39 | ); 40 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-tiny-query", 3 | "version": "0.1.7", 4 | "repository": { 5 | "type": "git", 6 | "url": "git+https://github.com/Kidesia/svelte-tiny-query.git" 7 | }, 8 | "homepage": "https://github.com/Kidesia/svelte-tiny-query#readme", 9 | "bugs": { 10 | "url": "https://github.com/Kidesia/svelte-tiny-query/issues" 11 | }, 12 | "scripts": { 13 | "dev": "vite dev", 14 | "build": "vite build && npm run prepack", 15 | "preview": "vite preview", 16 | "prepare": "svelte-kit sync || echo ''", 17 | "prepack": "svelte-kit sync && svelte-package && publint", 18 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 19 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", 20 | "format": "prettier --write .", 21 | "lint": "prettier --check . && eslint .", 22 | "test:unit": "vitest", 23 | "test": "npm run test:unit -- --run" 24 | }, 25 | "files": [ 26 | "dist", 27 | "!dist/**/*.test.*", 28 | "!dist/**/*.spec.*" 29 | ], 30 | "svelte": "./dist/index.js", 31 | "types": "./dist/index.d.ts", 32 | "type": "module", 33 | "module": "./dist/index.js", 34 | "exports": { 35 | ".": { 36 | "types": "./dist/index.d.ts", 37 | "svelte": "./dist/index.js", 38 | "default": "./dist/index.js" 39 | } 40 | }, 41 | "peerDependencies": { 42 | "svelte": "^5.0.0" 43 | }, 44 | "devDependencies": { 45 | "@eslint/compat": "^1.2.9", 46 | "@eslint/js": "^9.26.0", 47 | "@sveltejs/adapter-auto": "^4.0.0", 48 | "@sveltejs/kit": "^2.20.8", 49 | "@sveltejs/package": "^2.3.11", 50 | "@sveltejs/vite-plugin-svelte": "^5.0.3", 51 | "@testing-library/jest-dom": "^6.6.3", 52 | "@testing-library/svelte": "^5.2.4", 53 | "eslint": "^9.26.0", 54 | "eslint-config-prettier": "^10.1.2", 55 | "eslint-plugin-svelte": "^3.5.1", 56 | "globals": "^16.0.0", 57 | "jsdom": "^26.0.0", 58 | "mdsvex": "^0.12.5", 59 | "prettier": "^3.5.3", 60 | "prettier-plugin-svelte": "^3.3.3", 61 | "publint": "^0.3.12", 62 | "svelte": "^5.28.2", 63 | "svelte-check": "^4.1.7", 64 | "typescript": "^5.8.3", 65 | "typescript-eslint": "^8.31.1", 66 | "vite": "^6.3.4", 67 | "vitest": "^3.0.0" 68 | }, 69 | "keywords": [ 70 | "svelte", 71 | "query", 72 | "cache" 73 | ], 74 | "pnpm": { 75 | "onlyBuiltDependencies": [ 76 | "esbuild" 77 | ] 78 | }, 79 | "packageManager": "pnpm@10.8.0+sha512.0e82714d1b5b43c74610193cb20734897c1d00de89d0e18420aebc5977fa13d780a9cb05734624e81ebd81cc876cd464794850641c48b9544326b5622ca29971" 80 | } 81 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@eslint/compat': 12 | specifier: ^1.2.9 13 | version: 1.2.9(eslint@9.26.0) 14 | '@eslint/js': 15 | specifier: ^9.26.0 16 | version: 9.26.0 17 | '@sveltejs/adapter-auto': 18 | specifier: ^4.0.0 19 | version: 4.0.0(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4)) 20 | '@sveltejs/kit': 21 | specifier: ^2.20.8 22 | version: 2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4) 23 | '@sveltejs/package': 24 | specifier: ^2.3.11 25 | version: 2.3.11(svelte@5.28.2)(typescript@5.8.3) 26 | '@sveltejs/vite-plugin-svelte': 27 | specifier: ^5.0.3 28 | version: 5.0.3(svelte@5.28.2)(vite@6.3.4) 29 | '@testing-library/jest-dom': 30 | specifier: ^6.6.3 31 | version: 6.6.3 32 | '@testing-library/svelte': 33 | specifier: ^5.2.4 34 | version: 5.2.7(svelte@5.28.2)(vite@6.3.4)(vitest@3.1.2(jsdom@26.1.0)) 35 | eslint: 36 | specifier: ^9.26.0 37 | version: 9.26.0 38 | eslint-config-prettier: 39 | specifier: ^10.1.2 40 | version: 10.1.2(eslint@9.26.0) 41 | eslint-plugin-svelte: 42 | specifier: ^3.5.1 43 | version: 3.5.1(eslint@9.26.0)(svelte@5.28.2) 44 | globals: 45 | specifier: ^16.0.0 46 | version: 16.0.0 47 | jsdom: 48 | specifier: ^26.0.0 49 | version: 26.1.0 50 | mdsvex: 51 | specifier: ^0.12.5 52 | version: 0.12.5(svelte@5.28.2) 53 | prettier: 54 | specifier: ^3.5.3 55 | version: 3.5.3 56 | prettier-plugin-svelte: 57 | specifier: ^3.3.3 58 | version: 3.3.3(prettier@3.5.3)(svelte@5.28.2) 59 | publint: 60 | specifier: ^0.3.12 61 | version: 0.3.12 62 | svelte: 63 | specifier: ^5.28.2 64 | version: 5.28.2 65 | svelte-check: 66 | specifier: ^4.1.7 67 | version: 4.1.7(picomatch@4.0.2)(svelte@5.28.2)(typescript@5.8.3) 68 | typescript: 69 | specifier: ^5.8.3 70 | version: 5.8.3 71 | typescript-eslint: 72 | specifier: ^8.31.1 73 | version: 8.31.1(eslint@9.26.0)(typescript@5.8.3) 74 | vite: 75 | specifier: ^6.3.4 76 | version: 6.3.4 77 | vitest: 78 | specifier: ^3.0.0 79 | version: 3.1.2(jsdom@26.1.0) 80 | 81 | packages: 82 | 83 | '@adobe/css-tools@4.4.2': 84 | resolution: {integrity: sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A==} 85 | 86 | '@ampproject/remapping@2.3.0': 87 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 88 | engines: {node: '>=6.0.0'} 89 | 90 | '@asamuzakjp/css-color@3.1.7': 91 | resolution: {integrity: sha512-Ok5fYhtwdyJQmU1PpEv6Si7Y+A4cYb8yNM9oiIJC9TzXPMuN9fvdonKJqcnz9TbFqV6bQ8z0giRq0iaOpGZV2g==} 92 | 93 | '@babel/code-frame@7.27.1': 94 | resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 95 | engines: {node: '>=6.9.0'} 96 | 97 | '@babel/helper-validator-identifier@7.27.1': 98 | resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} 99 | engines: {node: '>=6.9.0'} 100 | 101 | '@babel/runtime@7.27.1': 102 | resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==} 103 | engines: {node: '>=6.9.0'} 104 | 105 | '@csstools/color-helpers@5.0.2': 106 | resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==} 107 | engines: {node: '>=18'} 108 | 109 | '@csstools/css-calc@2.1.3': 110 | resolution: {integrity: sha512-XBG3talrhid44BY1x3MHzUx/aTG8+x/Zi57M4aTKK9RFB4aLlF3TTSzfzn8nWVHWL3FgAXAxmupmDd6VWww+pw==} 111 | engines: {node: '>=18'} 112 | peerDependencies: 113 | '@csstools/css-parser-algorithms': ^3.0.4 114 | '@csstools/css-tokenizer': ^3.0.3 115 | 116 | '@csstools/css-color-parser@3.0.9': 117 | resolution: {integrity: sha512-wILs5Zk7BU86UArYBJTPy/FMPPKVKHMj1ycCEyf3VUptol0JNRLFU/BZsJ4aiIHJEbSLiizzRrw8Pc1uAEDrXw==} 118 | engines: {node: '>=18'} 119 | peerDependencies: 120 | '@csstools/css-parser-algorithms': ^3.0.4 121 | '@csstools/css-tokenizer': ^3.0.3 122 | 123 | '@csstools/css-parser-algorithms@3.0.4': 124 | resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==} 125 | engines: {node: '>=18'} 126 | peerDependencies: 127 | '@csstools/css-tokenizer': ^3.0.3 128 | 129 | '@csstools/css-tokenizer@3.0.3': 130 | resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==} 131 | engines: {node: '>=18'} 132 | 133 | '@esbuild/aix-ppc64@0.25.3': 134 | resolution: {integrity: sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==} 135 | engines: {node: '>=18'} 136 | cpu: [ppc64] 137 | os: [aix] 138 | 139 | '@esbuild/android-arm64@0.25.3': 140 | resolution: {integrity: sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==} 141 | engines: {node: '>=18'} 142 | cpu: [arm64] 143 | os: [android] 144 | 145 | '@esbuild/android-arm@0.25.3': 146 | resolution: {integrity: sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==} 147 | engines: {node: '>=18'} 148 | cpu: [arm] 149 | os: [android] 150 | 151 | '@esbuild/android-x64@0.25.3': 152 | resolution: {integrity: sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==} 153 | engines: {node: '>=18'} 154 | cpu: [x64] 155 | os: [android] 156 | 157 | '@esbuild/darwin-arm64@0.25.3': 158 | resolution: {integrity: sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==} 159 | engines: {node: '>=18'} 160 | cpu: [arm64] 161 | os: [darwin] 162 | 163 | '@esbuild/darwin-x64@0.25.3': 164 | resolution: {integrity: sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==} 165 | engines: {node: '>=18'} 166 | cpu: [x64] 167 | os: [darwin] 168 | 169 | '@esbuild/freebsd-arm64@0.25.3': 170 | resolution: {integrity: sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==} 171 | engines: {node: '>=18'} 172 | cpu: [arm64] 173 | os: [freebsd] 174 | 175 | '@esbuild/freebsd-x64@0.25.3': 176 | resolution: {integrity: sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==} 177 | engines: {node: '>=18'} 178 | cpu: [x64] 179 | os: [freebsd] 180 | 181 | '@esbuild/linux-arm64@0.25.3': 182 | resolution: {integrity: sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==} 183 | engines: {node: '>=18'} 184 | cpu: [arm64] 185 | os: [linux] 186 | 187 | '@esbuild/linux-arm@0.25.3': 188 | resolution: {integrity: sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==} 189 | engines: {node: '>=18'} 190 | cpu: [arm] 191 | os: [linux] 192 | 193 | '@esbuild/linux-ia32@0.25.3': 194 | resolution: {integrity: sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==} 195 | engines: {node: '>=18'} 196 | cpu: [ia32] 197 | os: [linux] 198 | 199 | '@esbuild/linux-loong64@0.25.3': 200 | resolution: {integrity: sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==} 201 | engines: {node: '>=18'} 202 | cpu: [loong64] 203 | os: [linux] 204 | 205 | '@esbuild/linux-mips64el@0.25.3': 206 | resolution: {integrity: sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==} 207 | engines: {node: '>=18'} 208 | cpu: [mips64el] 209 | os: [linux] 210 | 211 | '@esbuild/linux-ppc64@0.25.3': 212 | resolution: {integrity: sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==} 213 | engines: {node: '>=18'} 214 | cpu: [ppc64] 215 | os: [linux] 216 | 217 | '@esbuild/linux-riscv64@0.25.3': 218 | resolution: {integrity: sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==} 219 | engines: {node: '>=18'} 220 | cpu: [riscv64] 221 | os: [linux] 222 | 223 | '@esbuild/linux-s390x@0.25.3': 224 | resolution: {integrity: sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==} 225 | engines: {node: '>=18'} 226 | cpu: [s390x] 227 | os: [linux] 228 | 229 | '@esbuild/linux-x64@0.25.3': 230 | resolution: {integrity: sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==} 231 | engines: {node: '>=18'} 232 | cpu: [x64] 233 | os: [linux] 234 | 235 | '@esbuild/netbsd-arm64@0.25.3': 236 | resolution: {integrity: sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==} 237 | engines: {node: '>=18'} 238 | cpu: [arm64] 239 | os: [netbsd] 240 | 241 | '@esbuild/netbsd-x64@0.25.3': 242 | resolution: {integrity: sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==} 243 | engines: {node: '>=18'} 244 | cpu: [x64] 245 | os: [netbsd] 246 | 247 | '@esbuild/openbsd-arm64@0.25.3': 248 | resolution: {integrity: sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==} 249 | engines: {node: '>=18'} 250 | cpu: [arm64] 251 | os: [openbsd] 252 | 253 | '@esbuild/openbsd-x64@0.25.3': 254 | resolution: {integrity: sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==} 255 | engines: {node: '>=18'} 256 | cpu: [x64] 257 | os: [openbsd] 258 | 259 | '@esbuild/sunos-x64@0.25.3': 260 | resolution: {integrity: sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==} 261 | engines: {node: '>=18'} 262 | cpu: [x64] 263 | os: [sunos] 264 | 265 | '@esbuild/win32-arm64@0.25.3': 266 | resolution: {integrity: sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==} 267 | engines: {node: '>=18'} 268 | cpu: [arm64] 269 | os: [win32] 270 | 271 | '@esbuild/win32-ia32@0.25.3': 272 | resolution: {integrity: sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==} 273 | engines: {node: '>=18'} 274 | cpu: [ia32] 275 | os: [win32] 276 | 277 | '@esbuild/win32-x64@0.25.3': 278 | resolution: {integrity: sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==} 279 | engines: {node: '>=18'} 280 | cpu: [x64] 281 | os: [win32] 282 | 283 | '@eslint-community/eslint-utils@4.7.0': 284 | resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} 285 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 286 | peerDependencies: 287 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 288 | 289 | '@eslint-community/regexpp@4.12.1': 290 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 291 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 292 | 293 | '@eslint/compat@1.2.9': 294 | resolution: {integrity: sha512-gCdSY54n7k+driCadyMNv8JSPzYLeDVM/ikZRtvtROBpRdFSkS8W9A82MqsaY7lZuwL0wiapgD0NT1xT0hyJsA==} 295 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 296 | peerDependencies: 297 | eslint: ^9.10.0 298 | peerDependenciesMeta: 299 | eslint: 300 | optional: true 301 | 302 | '@eslint/config-array@0.20.0': 303 | resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} 304 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 305 | 306 | '@eslint/config-helpers@0.2.2': 307 | resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==} 308 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 309 | 310 | '@eslint/core@0.13.0': 311 | resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} 312 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 313 | 314 | '@eslint/eslintrc@3.3.1': 315 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 316 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 317 | 318 | '@eslint/js@9.26.0': 319 | resolution: {integrity: sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==} 320 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 321 | 322 | '@eslint/object-schema@2.1.6': 323 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 324 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 325 | 326 | '@eslint/plugin-kit@0.2.8': 327 | resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} 328 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 329 | 330 | '@humanfs/core@0.19.1': 331 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 332 | engines: {node: '>=18.18.0'} 333 | 334 | '@humanfs/node@0.16.6': 335 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 336 | engines: {node: '>=18.18.0'} 337 | 338 | '@humanwhocodes/module-importer@1.0.1': 339 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 340 | engines: {node: '>=12.22'} 341 | 342 | '@humanwhocodes/retry@0.3.1': 343 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 344 | engines: {node: '>=18.18'} 345 | 346 | '@humanwhocodes/retry@0.4.2': 347 | resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} 348 | engines: {node: '>=18.18'} 349 | 350 | '@jridgewell/gen-mapping@0.3.8': 351 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 352 | engines: {node: '>=6.0.0'} 353 | 354 | '@jridgewell/resolve-uri@3.1.2': 355 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 356 | engines: {node: '>=6.0.0'} 357 | 358 | '@jridgewell/set-array@1.2.1': 359 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 360 | engines: {node: '>=6.0.0'} 361 | 362 | '@jridgewell/sourcemap-codec@1.5.0': 363 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 364 | 365 | '@jridgewell/trace-mapping@0.3.25': 366 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 367 | 368 | '@modelcontextprotocol/sdk@1.11.0': 369 | resolution: {integrity: sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ==} 370 | engines: {node: '>=18'} 371 | 372 | '@nodelib/fs.scandir@2.1.5': 373 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 374 | engines: {node: '>= 8'} 375 | 376 | '@nodelib/fs.stat@2.0.5': 377 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 378 | engines: {node: '>= 8'} 379 | 380 | '@nodelib/fs.walk@1.2.8': 381 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 382 | engines: {node: '>= 8'} 383 | 384 | '@polka/url@1.0.0-next.29': 385 | resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} 386 | 387 | '@publint/pack@0.1.2': 388 | resolution: {integrity: sha512-S+9ANAvUmjutrshV4jZjaiG8XQyuJIZ8a4utWmN/vW1sgQ9IfBnPndwkmQYw53QmouOIytT874u65HEmu6H5jw==} 389 | engines: {node: '>=18'} 390 | 391 | '@rollup/rollup-android-arm-eabi@4.40.1': 392 | resolution: {integrity: sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==} 393 | cpu: [arm] 394 | os: [android] 395 | 396 | '@rollup/rollup-android-arm64@4.40.1': 397 | resolution: {integrity: sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==} 398 | cpu: [arm64] 399 | os: [android] 400 | 401 | '@rollup/rollup-darwin-arm64@4.40.1': 402 | resolution: {integrity: sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==} 403 | cpu: [arm64] 404 | os: [darwin] 405 | 406 | '@rollup/rollup-darwin-x64@4.40.1': 407 | resolution: {integrity: sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==} 408 | cpu: [x64] 409 | os: [darwin] 410 | 411 | '@rollup/rollup-freebsd-arm64@4.40.1': 412 | resolution: {integrity: sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==} 413 | cpu: [arm64] 414 | os: [freebsd] 415 | 416 | '@rollup/rollup-freebsd-x64@4.40.1': 417 | resolution: {integrity: sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==} 418 | cpu: [x64] 419 | os: [freebsd] 420 | 421 | '@rollup/rollup-linux-arm-gnueabihf@4.40.1': 422 | resolution: {integrity: sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==} 423 | cpu: [arm] 424 | os: [linux] 425 | 426 | '@rollup/rollup-linux-arm-musleabihf@4.40.1': 427 | resolution: {integrity: sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==} 428 | cpu: [arm] 429 | os: [linux] 430 | 431 | '@rollup/rollup-linux-arm64-gnu@4.40.1': 432 | resolution: {integrity: sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==} 433 | cpu: [arm64] 434 | os: [linux] 435 | 436 | '@rollup/rollup-linux-arm64-musl@4.40.1': 437 | resolution: {integrity: sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==} 438 | cpu: [arm64] 439 | os: [linux] 440 | 441 | '@rollup/rollup-linux-loongarch64-gnu@4.40.1': 442 | resolution: {integrity: sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==} 443 | cpu: [loong64] 444 | os: [linux] 445 | 446 | '@rollup/rollup-linux-powerpc64le-gnu@4.40.1': 447 | resolution: {integrity: sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==} 448 | cpu: [ppc64] 449 | os: [linux] 450 | 451 | '@rollup/rollup-linux-riscv64-gnu@4.40.1': 452 | resolution: {integrity: sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==} 453 | cpu: [riscv64] 454 | os: [linux] 455 | 456 | '@rollup/rollup-linux-riscv64-musl@4.40.1': 457 | resolution: {integrity: sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==} 458 | cpu: [riscv64] 459 | os: [linux] 460 | 461 | '@rollup/rollup-linux-s390x-gnu@4.40.1': 462 | resolution: {integrity: sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==} 463 | cpu: [s390x] 464 | os: [linux] 465 | 466 | '@rollup/rollup-linux-x64-gnu@4.40.1': 467 | resolution: {integrity: sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==} 468 | cpu: [x64] 469 | os: [linux] 470 | 471 | '@rollup/rollup-linux-x64-musl@4.40.1': 472 | resolution: {integrity: sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==} 473 | cpu: [x64] 474 | os: [linux] 475 | 476 | '@rollup/rollup-win32-arm64-msvc@4.40.1': 477 | resolution: {integrity: sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==} 478 | cpu: [arm64] 479 | os: [win32] 480 | 481 | '@rollup/rollup-win32-ia32-msvc@4.40.1': 482 | resolution: {integrity: sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==} 483 | cpu: [ia32] 484 | os: [win32] 485 | 486 | '@rollup/rollup-win32-x64-msvc@4.40.1': 487 | resolution: {integrity: sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==} 488 | cpu: [x64] 489 | os: [win32] 490 | 491 | '@sveltejs/acorn-typescript@1.0.5': 492 | resolution: {integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==} 493 | peerDependencies: 494 | acorn: ^8.9.0 495 | 496 | '@sveltejs/adapter-auto@4.0.0': 497 | resolution: {integrity: sha512-kmuYSQdD2AwThymQF0haQhM8rE5rhutQXG4LNbnbShwhMO4qQGnKaaTy+88DuNSuoQDi58+thpq8XpHc1+oEKQ==} 498 | peerDependencies: 499 | '@sveltejs/kit': ^2.0.0 500 | 501 | '@sveltejs/kit@2.20.8': 502 | resolution: {integrity: sha512-ep9qTxL7WALhfm0kFecL3VHeuNew8IccbYGqv5TqL/KSqWRKzEgDG8blNlIu1CkLTTua/kHjI+f5T8eCmWIxKw==} 503 | engines: {node: '>=18.13'} 504 | hasBin: true 505 | peerDependencies: 506 | '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 507 | svelte: ^4.0.0 || ^5.0.0-next.0 508 | vite: ^5.0.3 || ^6.0.0 509 | 510 | '@sveltejs/package@2.3.11': 511 | resolution: {integrity: sha512-DSMt2U0XNAdoQBYksrmgQi5dKy7jUTVDJLiagS/iXF7AShjAmTbGJQKruBuT/FfYAWvNxfQTSjkXU8eAIjVeNg==} 512 | engines: {node: ^16.14 || >=18} 513 | hasBin: true 514 | peerDependencies: 515 | svelte: ^3.44.0 || ^4.0.0 || ^5.0.0-next.1 516 | 517 | '@sveltejs/vite-plugin-svelte-inspector@4.0.1': 518 | resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==} 519 | engines: {node: ^18.0.0 || ^20.0.0 || >=22} 520 | peerDependencies: 521 | '@sveltejs/vite-plugin-svelte': ^5.0.0 522 | svelte: ^5.0.0 523 | vite: ^6.0.0 524 | 525 | '@sveltejs/vite-plugin-svelte@5.0.3': 526 | resolution: {integrity: sha512-MCFS6CrQDu1yGwspm4qtli0e63vaPCehf6V7pIMP15AsWgMKrqDGCPFF/0kn4SP0ii4aySu4Pa62+fIRGFMjgw==} 527 | engines: {node: ^18.0.0 || ^20.0.0 || >=22} 528 | peerDependencies: 529 | svelte: ^5.0.0 530 | vite: ^6.0.0 531 | 532 | '@testing-library/dom@10.4.0': 533 | resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} 534 | engines: {node: '>=18'} 535 | 536 | '@testing-library/jest-dom@6.6.3': 537 | resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==} 538 | engines: {node: '>=14', npm: '>=6', yarn: '>=1'} 539 | 540 | '@testing-library/svelte@5.2.7': 541 | resolution: {integrity: sha512-aGhUaFmEXEVost4QOsbHUUbHLwi7ZZRRxAHFDO2Cmr0BZD3/3+XvaYEPq70Rdw0NRNjdqZHdARBEcrCOkPuAqw==} 542 | engines: {node: '>= 10'} 543 | peerDependencies: 544 | svelte: ^3 || ^4 || ^5 || ^5.0.0-next.0 545 | vite: '*' 546 | vitest: '*' 547 | peerDependenciesMeta: 548 | vite: 549 | optional: true 550 | vitest: 551 | optional: true 552 | 553 | '@types/aria-query@5.0.4': 554 | resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} 555 | 556 | '@types/cookie@0.6.0': 557 | resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} 558 | 559 | '@types/estree@1.0.7': 560 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} 561 | 562 | '@types/json-schema@7.0.15': 563 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 564 | 565 | '@types/mdast@4.0.4': 566 | resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} 567 | 568 | '@types/unist@2.0.11': 569 | resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} 570 | 571 | '@typescript-eslint/eslint-plugin@8.31.1': 572 | resolution: {integrity: sha512-oUlH4h1ABavI4F0Xnl8/fOtML/eu8nI2A1nYd+f+55XI0BLu+RIqKoCiZKNo6DtqZBEQm5aNKA20G3Z5w3R6GQ==} 573 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 574 | peerDependencies: 575 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 576 | eslint: ^8.57.0 || ^9.0.0 577 | typescript: '>=4.8.4 <5.9.0' 578 | 579 | '@typescript-eslint/parser@8.31.1': 580 | resolution: {integrity: sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q==} 581 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 582 | peerDependencies: 583 | eslint: ^8.57.0 || ^9.0.0 584 | typescript: '>=4.8.4 <5.9.0' 585 | 586 | '@typescript-eslint/scope-manager@8.31.1': 587 | resolution: {integrity: sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw==} 588 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 589 | 590 | '@typescript-eslint/type-utils@8.31.1': 591 | resolution: {integrity: sha512-fNaT/m9n0+dpSp8G/iOQ05GoHYXbxw81x+yvr7TArTuZuCA6VVKbqWYVZrV5dVagpDTtj/O8k5HBEE/p/HM5LA==} 592 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 593 | peerDependencies: 594 | eslint: ^8.57.0 || ^9.0.0 595 | typescript: '>=4.8.4 <5.9.0' 596 | 597 | '@typescript-eslint/types@8.31.1': 598 | resolution: {integrity: sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ==} 599 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 600 | 601 | '@typescript-eslint/typescript-estree@8.31.1': 602 | resolution: {integrity: sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag==} 603 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 604 | peerDependencies: 605 | typescript: '>=4.8.4 <5.9.0' 606 | 607 | '@typescript-eslint/utils@8.31.1': 608 | resolution: {integrity: sha512-2DSI4SNfF5T4oRveQ4nUrSjUqjMND0nLq9rEkz0gfGr3tg0S5KB6DhwR+WZPCjzkZl3cH+4x2ce3EsL50FubjQ==} 609 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 610 | peerDependencies: 611 | eslint: ^8.57.0 || ^9.0.0 612 | typescript: '>=4.8.4 <5.9.0' 613 | 614 | '@typescript-eslint/visitor-keys@8.31.1': 615 | resolution: {integrity: sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw==} 616 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 617 | 618 | '@vitest/expect@3.1.2': 619 | resolution: {integrity: sha512-O8hJgr+zREopCAqWl3uCVaOdqJwZ9qaDwUP7vy3Xigad0phZe9APxKhPcDNqYYi0rX5oMvwJMSCAXY2afqeTSA==} 620 | 621 | '@vitest/mocker@3.1.2': 622 | resolution: {integrity: sha512-kOtd6K2lc7SQ0mBqYv/wdGedlqPdM/B38paPY+OwJ1XiNi44w3Fpog82UfOibmHaV9Wod18A09I9SCKLyDMqgw==} 623 | peerDependencies: 624 | msw: ^2.4.9 625 | vite: ^5.0.0 || ^6.0.0 626 | peerDependenciesMeta: 627 | msw: 628 | optional: true 629 | vite: 630 | optional: true 631 | 632 | '@vitest/pretty-format@3.1.2': 633 | resolution: {integrity: sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w==} 634 | 635 | '@vitest/runner@3.1.2': 636 | resolution: {integrity: sha512-bhLib9l4xb4sUMPXnThbnhX2Yi8OutBMA8Yahxa7yavQsFDtwY/jrUZwpKp2XH9DhRFJIeytlyGpXCqZ65nR+g==} 637 | 638 | '@vitest/snapshot@3.1.2': 639 | resolution: {integrity: sha512-Q1qkpazSF/p4ApZg1vfZSQ5Yw6OCQxVMVrLjslbLFA1hMDrT2uxtqMaw8Tc/jy5DLka1sNs1Y7rBcftMiaSH/Q==} 640 | 641 | '@vitest/spy@3.1.2': 642 | resolution: {integrity: sha512-OEc5fSXMws6sHVe4kOFyDSj/+4MSwst0ib4un0DlcYgQvRuYQ0+M2HyqGaauUMnjq87tmUaMNDxKQx7wNfVqPA==} 643 | 644 | '@vitest/utils@3.1.2': 645 | resolution: {integrity: sha512-5GGd0ytZ7BH3H6JTj9Kw7Prn1Nbg0wZVrIvou+UWxm54d+WoXXgAgjFJ8wn3LdagWLFSEfpPeyYrByZaGEZHLg==} 646 | 647 | accepts@2.0.0: 648 | resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} 649 | engines: {node: '>= 0.6'} 650 | 651 | acorn-jsx@5.3.2: 652 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 653 | peerDependencies: 654 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 655 | 656 | acorn@8.14.1: 657 | resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} 658 | engines: {node: '>=0.4.0'} 659 | hasBin: true 660 | 661 | agent-base@7.1.3: 662 | resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} 663 | engines: {node: '>= 14'} 664 | 665 | ajv@6.12.6: 666 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 667 | 668 | ansi-regex@5.0.1: 669 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 670 | engines: {node: '>=8'} 671 | 672 | ansi-styles@4.3.0: 673 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 674 | engines: {node: '>=8'} 675 | 676 | ansi-styles@5.2.0: 677 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 678 | engines: {node: '>=10'} 679 | 680 | argparse@2.0.1: 681 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 682 | 683 | aria-query@5.3.0: 684 | resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} 685 | 686 | aria-query@5.3.2: 687 | resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} 688 | engines: {node: '>= 0.4'} 689 | 690 | assertion-error@2.0.1: 691 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 692 | engines: {node: '>=12'} 693 | 694 | axobject-query@4.1.0: 695 | resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} 696 | engines: {node: '>= 0.4'} 697 | 698 | balanced-match@1.0.2: 699 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 700 | 701 | body-parser@2.2.0: 702 | resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} 703 | engines: {node: '>=18'} 704 | 705 | brace-expansion@1.1.11: 706 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 707 | 708 | brace-expansion@2.0.1: 709 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 710 | 711 | braces@3.0.3: 712 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 713 | engines: {node: '>=8'} 714 | 715 | bytes@3.1.2: 716 | resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} 717 | engines: {node: '>= 0.8'} 718 | 719 | cac@6.7.14: 720 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 721 | engines: {node: '>=8'} 722 | 723 | call-bind-apply-helpers@1.0.2: 724 | resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} 725 | engines: {node: '>= 0.4'} 726 | 727 | call-bound@1.0.4: 728 | resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} 729 | engines: {node: '>= 0.4'} 730 | 731 | callsites@3.1.0: 732 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 733 | engines: {node: '>=6'} 734 | 735 | chai@5.2.0: 736 | resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} 737 | engines: {node: '>=12'} 738 | 739 | chalk@3.0.0: 740 | resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} 741 | engines: {node: '>=8'} 742 | 743 | chalk@4.1.2: 744 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 745 | engines: {node: '>=10'} 746 | 747 | check-error@2.1.1: 748 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 749 | engines: {node: '>= 16'} 750 | 751 | chokidar@4.0.3: 752 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 753 | engines: {node: '>= 14.16.0'} 754 | 755 | clsx@2.1.1: 756 | resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} 757 | engines: {node: '>=6'} 758 | 759 | color-convert@2.0.1: 760 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 761 | engines: {node: '>=7.0.0'} 762 | 763 | color-name@1.1.4: 764 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 765 | 766 | concat-map@0.0.1: 767 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 768 | 769 | content-disposition@1.0.0: 770 | resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} 771 | engines: {node: '>= 0.6'} 772 | 773 | content-type@1.0.5: 774 | resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} 775 | engines: {node: '>= 0.6'} 776 | 777 | cookie-signature@1.2.2: 778 | resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} 779 | engines: {node: '>=6.6.0'} 780 | 781 | cookie@0.6.0: 782 | resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} 783 | engines: {node: '>= 0.6'} 784 | 785 | cookie@0.7.2: 786 | resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} 787 | engines: {node: '>= 0.6'} 788 | 789 | cors@2.8.5: 790 | resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} 791 | engines: {node: '>= 0.10'} 792 | 793 | cross-spawn@7.0.6: 794 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 795 | engines: {node: '>= 8'} 796 | 797 | css.escape@1.5.1: 798 | resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} 799 | 800 | cssesc@3.0.0: 801 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 802 | engines: {node: '>=4'} 803 | hasBin: true 804 | 805 | cssstyle@4.3.1: 806 | resolution: {integrity: sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==} 807 | engines: {node: '>=18'} 808 | 809 | data-urls@5.0.0: 810 | resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} 811 | engines: {node: '>=18'} 812 | 813 | debug@4.4.0: 814 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 815 | engines: {node: '>=6.0'} 816 | peerDependencies: 817 | supports-color: '*' 818 | peerDependenciesMeta: 819 | supports-color: 820 | optional: true 821 | 822 | decimal.js@10.5.0: 823 | resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} 824 | 825 | dedent-js@1.0.1: 826 | resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} 827 | 828 | deep-eql@5.0.2: 829 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 830 | engines: {node: '>=6'} 831 | 832 | deep-is@0.1.4: 833 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 834 | 835 | deepmerge@4.3.1: 836 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 837 | engines: {node: '>=0.10.0'} 838 | 839 | depd@2.0.0: 840 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} 841 | engines: {node: '>= 0.8'} 842 | 843 | dequal@2.0.3: 844 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 845 | engines: {node: '>=6'} 846 | 847 | devalue@5.1.1: 848 | resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} 849 | 850 | dom-accessibility-api@0.5.16: 851 | resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} 852 | 853 | dom-accessibility-api@0.6.3: 854 | resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} 855 | 856 | dunder-proto@1.0.1: 857 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 858 | engines: {node: '>= 0.4'} 859 | 860 | ee-first@1.1.1: 861 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} 862 | 863 | encodeurl@2.0.0: 864 | resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} 865 | engines: {node: '>= 0.8'} 866 | 867 | entities@6.0.0: 868 | resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} 869 | engines: {node: '>=0.12'} 870 | 871 | es-define-property@1.0.1: 872 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 873 | engines: {node: '>= 0.4'} 874 | 875 | es-errors@1.3.0: 876 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 877 | engines: {node: '>= 0.4'} 878 | 879 | es-module-lexer@1.7.0: 880 | resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} 881 | 882 | es-object-atoms@1.1.1: 883 | resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 884 | engines: {node: '>= 0.4'} 885 | 886 | esbuild@0.25.3: 887 | resolution: {integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==} 888 | engines: {node: '>=18'} 889 | hasBin: true 890 | 891 | escape-html@1.0.3: 892 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} 893 | 894 | escape-string-regexp@4.0.0: 895 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 896 | engines: {node: '>=10'} 897 | 898 | eslint-config-prettier@10.1.2: 899 | resolution: {integrity: sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA==} 900 | hasBin: true 901 | peerDependencies: 902 | eslint: '>=7.0.0' 903 | 904 | eslint-plugin-svelte@3.5.1: 905 | resolution: {integrity: sha512-Qn1slddZHfqYiDO6IN8/iN3YL+VuHlgYjm30FT+hh0Jf/TX0jeZMTJXQMajFm5f6f6hURi+XO8P+NPYD+T4jkg==} 906 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 907 | peerDependencies: 908 | eslint: ^8.57.1 || ^9.0.0 909 | svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 910 | peerDependenciesMeta: 911 | svelte: 912 | optional: true 913 | 914 | eslint-scope@8.3.0: 915 | resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} 916 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 917 | 918 | eslint-visitor-keys@3.4.3: 919 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 920 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 921 | 922 | eslint-visitor-keys@4.2.0: 923 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 924 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 925 | 926 | eslint@9.26.0: 927 | resolution: {integrity: sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==} 928 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 929 | hasBin: true 930 | peerDependencies: 931 | jiti: '*' 932 | peerDependenciesMeta: 933 | jiti: 934 | optional: true 935 | 936 | esm-env@1.2.2: 937 | resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} 938 | 939 | espree@10.3.0: 940 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 941 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 942 | 943 | esquery@1.6.0: 944 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 945 | engines: {node: '>=0.10'} 946 | 947 | esrap@1.4.6: 948 | resolution: {integrity: sha512-F/D2mADJ9SHY3IwksD4DAXjTt7qt7GWUf3/8RhCNWmC/67tyb55dpimHmy7EplakFaflV0R/PC+fdSPqrRHAQw==} 949 | 950 | esrecurse@4.3.0: 951 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 952 | engines: {node: '>=4.0'} 953 | 954 | estraverse@5.3.0: 955 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 956 | engines: {node: '>=4.0'} 957 | 958 | estree-walker@3.0.3: 959 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 960 | 961 | esutils@2.0.3: 962 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 963 | engines: {node: '>=0.10.0'} 964 | 965 | etag@1.8.1: 966 | resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} 967 | engines: {node: '>= 0.6'} 968 | 969 | eventsource-parser@3.0.1: 970 | resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==} 971 | engines: {node: '>=18.0.0'} 972 | 973 | eventsource@3.0.6: 974 | resolution: {integrity: sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==} 975 | engines: {node: '>=18.0.0'} 976 | 977 | expect-type@1.2.1: 978 | resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} 979 | engines: {node: '>=12.0.0'} 980 | 981 | express-rate-limit@7.5.0: 982 | resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==} 983 | engines: {node: '>= 16'} 984 | peerDependencies: 985 | express: ^4.11 || 5 || ^5.0.0-beta.1 986 | 987 | express@5.1.0: 988 | resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} 989 | engines: {node: '>= 18'} 990 | 991 | fast-deep-equal@3.1.3: 992 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 993 | 994 | fast-glob@3.3.3: 995 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 996 | engines: {node: '>=8.6.0'} 997 | 998 | fast-json-stable-stringify@2.1.0: 999 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1000 | 1001 | fast-levenshtein@2.0.6: 1002 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1003 | 1004 | fastq@1.19.1: 1005 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 1006 | 1007 | fdir@6.4.4: 1008 | resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} 1009 | peerDependencies: 1010 | picomatch: ^3 || ^4 1011 | peerDependenciesMeta: 1012 | picomatch: 1013 | optional: true 1014 | 1015 | file-entry-cache@8.0.0: 1016 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 1017 | engines: {node: '>=16.0.0'} 1018 | 1019 | fill-range@7.1.1: 1020 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 1021 | engines: {node: '>=8'} 1022 | 1023 | finalhandler@2.1.0: 1024 | resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} 1025 | engines: {node: '>= 0.8'} 1026 | 1027 | find-up@5.0.0: 1028 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1029 | engines: {node: '>=10'} 1030 | 1031 | flat-cache@4.0.1: 1032 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 1033 | engines: {node: '>=16'} 1034 | 1035 | flatted@3.3.3: 1036 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 1037 | 1038 | forwarded@0.2.0: 1039 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} 1040 | engines: {node: '>= 0.6'} 1041 | 1042 | fresh@2.0.0: 1043 | resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} 1044 | engines: {node: '>= 0.8'} 1045 | 1046 | fsevents@2.3.3: 1047 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1048 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1049 | os: [darwin] 1050 | 1051 | function-bind@1.1.2: 1052 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1053 | 1054 | get-intrinsic@1.3.0: 1055 | resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} 1056 | engines: {node: '>= 0.4'} 1057 | 1058 | get-proto@1.0.1: 1059 | resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 1060 | engines: {node: '>= 0.4'} 1061 | 1062 | glob-parent@5.1.2: 1063 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1064 | engines: {node: '>= 6'} 1065 | 1066 | glob-parent@6.0.2: 1067 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1068 | engines: {node: '>=10.13.0'} 1069 | 1070 | globals@14.0.0: 1071 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 1072 | engines: {node: '>=18'} 1073 | 1074 | globals@16.0.0: 1075 | resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==} 1076 | engines: {node: '>=18'} 1077 | 1078 | gopd@1.2.0: 1079 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 1080 | engines: {node: '>= 0.4'} 1081 | 1082 | graphemer@1.4.0: 1083 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1084 | 1085 | has-flag@4.0.0: 1086 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1087 | engines: {node: '>=8'} 1088 | 1089 | has-symbols@1.1.0: 1090 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 1091 | engines: {node: '>= 0.4'} 1092 | 1093 | hasown@2.0.2: 1094 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 1095 | engines: {node: '>= 0.4'} 1096 | 1097 | html-encoding-sniffer@4.0.0: 1098 | resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} 1099 | engines: {node: '>=18'} 1100 | 1101 | http-errors@2.0.0: 1102 | resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} 1103 | engines: {node: '>= 0.8'} 1104 | 1105 | http-proxy-agent@7.0.2: 1106 | resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} 1107 | engines: {node: '>= 14'} 1108 | 1109 | https-proxy-agent@7.0.6: 1110 | resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} 1111 | engines: {node: '>= 14'} 1112 | 1113 | iconv-lite@0.6.3: 1114 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 1115 | engines: {node: '>=0.10.0'} 1116 | 1117 | ignore@5.3.2: 1118 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1119 | engines: {node: '>= 4'} 1120 | 1121 | import-fresh@3.3.1: 1122 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 1123 | engines: {node: '>=6'} 1124 | 1125 | import-meta-resolve@4.1.0: 1126 | resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} 1127 | 1128 | imurmurhash@0.1.4: 1129 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1130 | engines: {node: '>=0.8.19'} 1131 | 1132 | indent-string@4.0.0: 1133 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 1134 | engines: {node: '>=8'} 1135 | 1136 | inherits@2.0.4: 1137 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1138 | 1139 | ipaddr.js@1.9.1: 1140 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 1141 | engines: {node: '>= 0.10'} 1142 | 1143 | is-extglob@2.1.1: 1144 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1145 | engines: {node: '>=0.10.0'} 1146 | 1147 | is-glob@4.0.3: 1148 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1149 | engines: {node: '>=0.10.0'} 1150 | 1151 | is-number@7.0.0: 1152 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1153 | engines: {node: '>=0.12.0'} 1154 | 1155 | is-potential-custom-element-name@1.0.1: 1156 | resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} 1157 | 1158 | is-promise@4.0.0: 1159 | resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} 1160 | 1161 | is-reference@3.0.3: 1162 | resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} 1163 | 1164 | isexe@2.0.0: 1165 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1166 | 1167 | js-tokens@4.0.0: 1168 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1169 | 1170 | js-yaml@4.1.0: 1171 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1172 | hasBin: true 1173 | 1174 | jsdom@26.1.0: 1175 | resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} 1176 | engines: {node: '>=18'} 1177 | peerDependencies: 1178 | canvas: ^3.0.0 1179 | peerDependenciesMeta: 1180 | canvas: 1181 | optional: true 1182 | 1183 | json-buffer@3.0.1: 1184 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1185 | 1186 | json-schema-traverse@0.4.1: 1187 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1188 | 1189 | json-stable-stringify-without-jsonify@1.0.1: 1190 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1191 | 1192 | keyv@4.5.4: 1193 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1194 | 1195 | kleur@4.1.5: 1196 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 1197 | engines: {node: '>=6'} 1198 | 1199 | known-css-properties@0.35.0: 1200 | resolution: {integrity: sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==} 1201 | 1202 | levn@0.4.1: 1203 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1204 | engines: {node: '>= 0.8.0'} 1205 | 1206 | lilconfig@2.1.0: 1207 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 1208 | engines: {node: '>=10'} 1209 | 1210 | locate-character@3.0.0: 1211 | resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} 1212 | 1213 | locate-path@6.0.0: 1214 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1215 | engines: {node: '>=10'} 1216 | 1217 | lodash.merge@4.6.2: 1218 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1219 | 1220 | lodash@4.17.21: 1221 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1222 | 1223 | loupe@3.1.3: 1224 | resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} 1225 | 1226 | lower-case@2.0.2: 1227 | resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} 1228 | 1229 | lru-cache@10.4.3: 1230 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1231 | 1232 | lz-string@1.5.0: 1233 | resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} 1234 | hasBin: true 1235 | 1236 | magic-string@0.30.17: 1237 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 1238 | 1239 | math-intrinsics@1.1.0: 1240 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 1241 | engines: {node: '>= 0.4'} 1242 | 1243 | mdsvex@0.12.5: 1244 | resolution: {integrity: sha512-JQy8CBbGF1IvpxZTmGJigRiD1s2BKfLKS9xCLPKngjHToY8WMYLZ8WFGRpuR6x4C4bxipSuLm2LctwL2fVXaEQ==} 1245 | peerDependencies: 1246 | svelte: ^3.56.0 || ^4.0.0 || ^5.0.0-next.120 1247 | 1248 | media-typer@1.1.0: 1249 | resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} 1250 | engines: {node: '>= 0.8'} 1251 | 1252 | merge-descriptors@2.0.0: 1253 | resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} 1254 | engines: {node: '>=18'} 1255 | 1256 | merge2@1.4.1: 1257 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1258 | engines: {node: '>= 8'} 1259 | 1260 | micromatch@4.0.8: 1261 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1262 | engines: {node: '>=8.6'} 1263 | 1264 | mime-db@1.54.0: 1265 | resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} 1266 | engines: {node: '>= 0.6'} 1267 | 1268 | mime-types@3.0.1: 1269 | resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} 1270 | engines: {node: '>= 0.6'} 1271 | 1272 | min-indent@1.0.1: 1273 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 1274 | engines: {node: '>=4'} 1275 | 1276 | minimatch@3.1.2: 1277 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1278 | 1279 | minimatch@9.0.5: 1280 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1281 | engines: {node: '>=16 || 14 >=14.17'} 1282 | 1283 | mri@1.2.0: 1284 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 1285 | engines: {node: '>=4'} 1286 | 1287 | mrmime@2.0.1: 1288 | resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} 1289 | engines: {node: '>=10'} 1290 | 1291 | ms@2.1.3: 1292 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1293 | 1294 | nanoid@3.3.11: 1295 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 1296 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1297 | hasBin: true 1298 | 1299 | natural-compare@1.4.0: 1300 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1301 | 1302 | negotiator@1.0.0: 1303 | resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} 1304 | engines: {node: '>= 0.6'} 1305 | 1306 | no-case@3.0.4: 1307 | resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} 1308 | 1309 | nwsapi@2.2.20: 1310 | resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==} 1311 | 1312 | object-assign@4.1.1: 1313 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1314 | engines: {node: '>=0.10.0'} 1315 | 1316 | object-inspect@1.13.4: 1317 | resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} 1318 | engines: {node: '>= 0.4'} 1319 | 1320 | on-finished@2.4.1: 1321 | resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} 1322 | engines: {node: '>= 0.8'} 1323 | 1324 | once@1.4.0: 1325 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1326 | 1327 | optionator@0.9.4: 1328 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1329 | engines: {node: '>= 0.8.0'} 1330 | 1331 | p-limit@3.1.0: 1332 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1333 | engines: {node: '>=10'} 1334 | 1335 | p-locate@5.0.0: 1336 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1337 | engines: {node: '>=10'} 1338 | 1339 | package-manager-detector@1.2.0: 1340 | resolution: {integrity: sha512-PutJepsOtsqVfUsxCzgTTpyXmiAgvKptIgY4th5eq5UXXFhj5PxfQ9hnGkypMeovpAvVshFRItoFHYO18TCOqA==} 1341 | 1342 | parent-module@1.0.1: 1343 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1344 | engines: {node: '>=6'} 1345 | 1346 | parse5@7.3.0: 1347 | resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} 1348 | 1349 | parseurl@1.3.3: 1350 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} 1351 | engines: {node: '>= 0.8'} 1352 | 1353 | pascal-case@3.1.2: 1354 | resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} 1355 | 1356 | path-exists@4.0.0: 1357 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1358 | engines: {node: '>=8'} 1359 | 1360 | path-key@3.1.1: 1361 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1362 | engines: {node: '>=8'} 1363 | 1364 | path-to-regexp@8.2.0: 1365 | resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} 1366 | engines: {node: '>=16'} 1367 | 1368 | pathe@2.0.3: 1369 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 1370 | 1371 | pathval@2.0.0: 1372 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} 1373 | engines: {node: '>= 14.16'} 1374 | 1375 | picocolors@1.1.1: 1376 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1377 | 1378 | picomatch@2.3.1: 1379 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1380 | engines: {node: '>=8.6'} 1381 | 1382 | picomatch@4.0.2: 1383 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 1384 | engines: {node: '>=12'} 1385 | 1386 | pkce-challenge@5.0.0: 1387 | resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} 1388 | engines: {node: '>=16.20.0'} 1389 | 1390 | postcss-load-config@3.1.4: 1391 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} 1392 | engines: {node: '>= 10'} 1393 | peerDependencies: 1394 | postcss: '>=8.0.9' 1395 | ts-node: '>=9.0.0' 1396 | peerDependenciesMeta: 1397 | postcss: 1398 | optional: true 1399 | ts-node: 1400 | optional: true 1401 | 1402 | postcss-safe-parser@7.0.1: 1403 | resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==} 1404 | engines: {node: '>=18.0'} 1405 | peerDependencies: 1406 | postcss: ^8.4.31 1407 | 1408 | postcss-scss@4.0.9: 1409 | resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} 1410 | engines: {node: '>=12.0'} 1411 | peerDependencies: 1412 | postcss: ^8.4.29 1413 | 1414 | postcss-selector-parser@7.1.0: 1415 | resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} 1416 | engines: {node: '>=4'} 1417 | 1418 | postcss@8.5.3: 1419 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} 1420 | engines: {node: ^10 || ^12 || >=14} 1421 | 1422 | prelude-ls@1.2.1: 1423 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1424 | engines: {node: '>= 0.8.0'} 1425 | 1426 | prettier-plugin-svelte@3.3.3: 1427 | resolution: {integrity: sha512-yViK9zqQ+H2qZD1w/bH7W8i+bVfKrD8GIFjkFe4Thl6kCT9SlAsXVNmt3jCvQOCsnOhcvYgsoVlRV/Eu6x5nNw==} 1428 | peerDependencies: 1429 | prettier: ^3.0.0 1430 | svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 1431 | 1432 | prettier@3.5.3: 1433 | resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} 1434 | engines: {node: '>=14'} 1435 | hasBin: true 1436 | 1437 | pretty-format@27.5.1: 1438 | resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} 1439 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1440 | 1441 | prism-svelte@0.4.7: 1442 | resolution: {integrity: sha512-yABh19CYbM24V7aS7TuPYRNMqthxwbvx6FF/Rw920YbyBWO3tnyPIqRMgHuSVsLmuHkkBS1Akyof463FVdkeDQ==} 1443 | 1444 | prismjs@1.30.0: 1445 | resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} 1446 | engines: {node: '>=6'} 1447 | 1448 | proxy-addr@2.0.7: 1449 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} 1450 | engines: {node: '>= 0.10'} 1451 | 1452 | publint@0.3.12: 1453 | resolution: {integrity: sha512-1w3MMtL9iotBjm1mmXtG3Nk06wnq9UhGNRpQ2j6n1Zq7YAD6gnxMMZMIxlRPAydVjVbjSm+n0lhwqsD1m4LD5w==} 1454 | engines: {node: '>=18'} 1455 | hasBin: true 1456 | 1457 | punycode@2.3.1: 1458 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1459 | engines: {node: '>=6'} 1460 | 1461 | qs@6.14.0: 1462 | resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} 1463 | engines: {node: '>=0.6'} 1464 | 1465 | queue-microtask@1.2.3: 1466 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1467 | 1468 | range-parser@1.2.1: 1469 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} 1470 | engines: {node: '>= 0.6'} 1471 | 1472 | raw-body@3.0.0: 1473 | resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} 1474 | engines: {node: '>= 0.8'} 1475 | 1476 | react-is@17.0.2: 1477 | resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} 1478 | 1479 | readdirp@4.1.2: 1480 | resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} 1481 | engines: {node: '>= 14.18.0'} 1482 | 1483 | redent@3.0.0: 1484 | resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} 1485 | engines: {node: '>=8'} 1486 | 1487 | resolve-from@4.0.0: 1488 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1489 | engines: {node: '>=4'} 1490 | 1491 | reusify@1.1.0: 1492 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1493 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1494 | 1495 | rollup@4.40.1: 1496 | resolution: {integrity: sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==} 1497 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1498 | hasBin: true 1499 | 1500 | router@2.2.0: 1501 | resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} 1502 | engines: {node: '>= 18'} 1503 | 1504 | rrweb-cssom@0.8.0: 1505 | resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} 1506 | 1507 | run-parallel@1.2.0: 1508 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1509 | 1510 | sade@1.8.1: 1511 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 1512 | engines: {node: '>=6'} 1513 | 1514 | safe-buffer@5.2.1: 1515 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1516 | 1517 | safer-buffer@2.1.2: 1518 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1519 | 1520 | saxes@6.0.0: 1521 | resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} 1522 | engines: {node: '>=v12.22.7'} 1523 | 1524 | semver@7.7.1: 1525 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 1526 | engines: {node: '>=10'} 1527 | hasBin: true 1528 | 1529 | send@1.2.0: 1530 | resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} 1531 | engines: {node: '>= 18'} 1532 | 1533 | serve-static@2.2.0: 1534 | resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} 1535 | engines: {node: '>= 18'} 1536 | 1537 | set-cookie-parser@2.7.1: 1538 | resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} 1539 | 1540 | setprototypeof@1.2.0: 1541 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} 1542 | 1543 | shebang-command@2.0.0: 1544 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1545 | engines: {node: '>=8'} 1546 | 1547 | shebang-regex@3.0.0: 1548 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1549 | engines: {node: '>=8'} 1550 | 1551 | side-channel-list@1.0.0: 1552 | resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 1553 | engines: {node: '>= 0.4'} 1554 | 1555 | side-channel-map@1.0.1: 1556 | resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} 1557 | engines: {node: '>= 0.4'} 1558 | 1559 | side-channel-weakmap@1.0.2: 1560 | resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} 1561 | engines: {node: '>= 0.4'} 1562 | 1563 | side-channel@1.1.0: 1564 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 1565 | engines: {node: '>= 0.4'} 1566 | 1567 | siginfo@2.0.0: 1568 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1569 | 1570 | sirv@3.0.1: 1571 | resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} 1572 | engines: {node: '>=18'} 1573 | 1574 | source-map-js@1.2.1: 1575 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1576 | engines: {node: '>=0.10.0'} 1577 | 1578 | stackback@0.0.2: 1579 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1580 | 1581 | statuses@2.0.1: 1582 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} 1583 | engines: {node: '>= 0.8'} 1584 | 1585 | std-env@3.9.0: 1586 | resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} 1587 | 1588 | strip-indent@3.0.0: 1589 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 1590 | engines: {node: '>=8'} 1591 | 1592 | strip-json-comments@3.1.1: 1593 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1594 | engines: {node: '>=8'} 1595 | 1596 | supports-color@7.2.0: 1597 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1598 | engines: {node: '>=8'} 1599 | 1600 | svelte-check@4.1.7: 1601 | resolution: {integrity: sha512-1jX4BzXrQJhC/Jt3SqYf6Ntu//vmfc6VWp07JkRfK2nn+22yIblspVUo96gzMkg0Zov8lQicxhxsMzOctwcMQQ==} 1602 | engines: {node: '>= 18.0.0'} 1603 | hasBin: true 1604 | peerDependencies: 1605 | svelte: ^4.0.0 || ^5.0.0-next.0 1606 | typescript: '>=5.0.0' 1607 | 1608 | svelte-eslint-parser@1.1.3: 1609 | resolution: {integrity: sha512-DUc/z/vk+AFVoxGv54+BOBFqUrmUgNg2gSO2YqrE3OL6ro19/0azPmQj/4wN3s9RxuF5l7G0162q/Ddk4LJhZA==} 1610 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1611 | peerDependencies: 1612 | svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 1613 | peerDependenciesMeta: 1614 | svelte: 1615 | optional: true 1616 | 1617 | svelte2tsx@0.7.37: 1618 | resolution: {integrity: sha512-uQCWibXwUNPGQBGTZP1axIpFGFHTXXN30/ppodLVXCnX23U1nzEhqiVtFSEQjtUK3pFVxPhdnfyxD6ikxMCzPQ==} 1619 | peerDependencies: 1620 | svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 1621 | typescript: ^4.9.4 || ^5.0.0 1622 | 1623 | svelte@5.28.2: 1624 | resolution: {integrity: sha512-FbWBxgWOpQfhKvoGJv/TFwzqb4EhJbwCD17dB0tEpQiw1XyUEKZJtgm4nA4xq3LLsMo7hu5UY/BOFmroAxKTMg==} 1625 | engines: {node: '>=18'} 1626 | 1627 | symbol-tree@3.2.4: 1628 | resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} 1629 | 1630 | tinybench@2.9.0: 1631 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 1632 | 1633 | tinyexec@0.3.2: 1634 | resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 1635 | 1636 | tinyglobby@0.2.13: 1637 | resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} 1638 | engines: {node: '>=12.0.0'} 1639 | 1640 | tinypool@1.0.2: 1641 | resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} 1642 | engines: {node: ^18.0.0 || >=20.0.0} 1643 | 1644 | tinyrainbow@2.0.0: 1645 | resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} 1646 | engines: {node: '>=14.0.0'} 1647 | 1648 | tinyspy@3.0.2: 1649 | resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} 1650 | engines: {node: '>=14.0.0'} 1651 | 1652 | tldts-core@6.1.86: 1653 | resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} 1654 | 1655 | tldts@6.1.86: 1656 | resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} 1657 | hasBin: true 1658 | 1659 | to-regex-range@5.0.1: 1660 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1661 | engines: {node: '>=8.0'} 1662 | 1663 | toidentifier@1.0.1: 1664 | resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} 1665 | engines: {node: '>=0.6'} 1666 | 1667 | totalist@3.0.1: 1668 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 1669 | engines: {node: '>=6'} 1670 | 1671 | tough-cookie@5.1.2: 1672 | resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} 1673 | engines: {node: '>=16'} 1674 | 1675 | tr46@5.1.1: 1676 | resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} 1677 | engines: {node: '>=18'} 1678 | 1679 | ts-api-utils@2.1.0: 1680 | resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} 1681 | engines: {node: '>=18.12'} 1682 | peerDependencies: 1683 | typescript: '>=4.8.4' 1684 | 1685 | tslib@2.8.1: 1686 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1687 | 1688 | type-check@0.4.0: 1689 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1690 | engines: {node: '>= 0.8.0'} 1691 | 1692 | type-is@2.0.1: 1693 | resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} 1694 | engines: {node: '>= 0.6'} 1695 | 1696 | typescript-eslint@8.31.1: 1697 | resolution: {integrity: sha512-j6DsEotD/fH39qKzXTQRwYYWlt7D+0HmfpOK+DVhwJOFLcdmn92hq3mBb7HlKJHbjjI/gTOqEcc9d6JfpFf/VA==} 1698 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1699 | peerDependencies: 1700 | eslint: ^8.57.0 || ^9.0.0 1701 | typescript: '>=4.8.4 <5.9.0' 1702 | 1703 | typescript@5.8.3: 1704 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 1705 | engines: {node: '>=14.17'} 1706 | hasBin: true 1707 | 1708 | unist-util-is@4.1.0: 1709 | resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} 1710 | 1711 | unist-util-stringify-position@2.0.3: 1712 | resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} 1713 | 1714 | unist-util-visit-parents@3.1.1: 1715 | resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} 1716 | 1717 | unist-util-visit@2.0.3: 1718 | resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} 1719 | 1720 | unpipe@1.0.0: 1721 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} 1722 | engines: {node: '>= 0.8'} 1723 | 1724 | uri-js@4.4.1: 1725 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1726 | 1727 | util-deprecate@1.0.2: 1728 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1729 | 1730 | vary@1.1.2: 1731 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} 1732 | engines: {node: '>= 0.8'} 1733 | 1734 | vfile-message@2.0.4: 1735 | resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} 1736 | 1737 | vite-node@3.1.2: 1738 | resolution: {integrity: sha512-/8iMryv46J3aK13iUXsei5G/A3CUlW4665THCPS+K8xAaqrVWiGB4RfXMQXCLjpK9P2eK//BczrVkn5JLAk6DA==} 1739 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1740 | hasBin: true 1741 | 1742 | vite@6.3.4: 1743 | resolution: {integrity: sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==} 1744 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1745 | hasBin: true 1746 | peerDependencies: 1747 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1748 | jiti: '>=1.21.0' 1749 | less: '*' 1750 | lightningcss: ^1.21.0 1751 | sass: '*' 1752 | sass-embedded: '*' 1753 | stylus: '*' 1754 | sugarss: '*' 1755 | terser: ^5.16.0 1756 | tsx: ^4.8.1 1757 | yaml: ^2.4.2 1758 | peerDependenciesMeta: 1759 | '@types/node': 1760 | optional: true 1761 | jiti: 1762 | optional: true 1763 | less: 1764 | optional: true 1765 | lightningcss: 1766 | optional: true 1767 | sass: 1768 | optional: true 1769 | sass-embedded: 1770 | optional: true 1771 | stylus: 1772 | optional: true 1773 | sugarss: 1774 | optional: true 1775 | terser: 1776 | optional: true 1777 | tsx: 1778 | optional: true 1779 | yaml: 1780 | optional: true 1781 | 1782 | vitefu@1.0.6: 1783 | resolution: {integrity: sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==} 1784 | peerDependencies: 1785 | vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 1786 | peerDependenciesMeta: 1787 | vite: 1788 | optional: true 1789 | 1790 | vitest@3.1.2: 1791 | resolution: {integrity: sha512-WaxpJe092ID1C0mr+LH9MmNrhfzi8I65EX/NRU/Ld016KqQNRgxSOlGNP1hHN+a/F8L15Mh8klwaF77zR3GeDQ==} 1792 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1793 | hasBin: true 1794 | peerDependencies: 1795 | '@edge-runtime/vm': '*' 1796 | '@types/debug': ^4.1.12 1797 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1798 | '@vitest/browser': 3.1.2 1799 | '@vitest/ui': 3.1.2 1800 | happy-dom: '*' 1801 | jsdom: '*' 1802 | peerDependenciesMeta: 1803 | '@edge-runtime/vm': 1804 | optional: true 1805 | '@types/debug': 1806 | optional: true 1807 | '@types/node': 1808 | optional: true 1809 | '@vitest/browser': 1810 | optional: true 1811 | '@vitest/ui': 1812 | optional: true 1813 | happy-dom: 1814 | optional: true 1815 | jsdom: 1816 | optional: true 1817 | 1818 | w3c-xmlserializer@5.0.0: 1819 | resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} 1820 | engines: {node: '>=18'} 1821 | 1822 | webidl-conversions@7.0.0: 1823 | resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} 1824 | engines: {node: '>=12'} 1825 | 1826 | whatwg-encoding@3.1.1: 1827 | resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} 1828 | engines: {node: '>=18'} 1829 | 1830 | whatwg-mimetype@4.0.0: 1831 | resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} 1832 | engines: {node: '>=18'} 1833 | 1834 | whatwg-url@14.2.0: 1835 | resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} 1836 | engines: {node: '>=18'} 1837 | 1838 | which@2.0.2: 1839 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1840 | engines: {node: '>= 8'} 1841 | hasBin: true 1842 | 1843 | why-is-node-running@2.3.0: 1844 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 1845 | engines: {node: '>=8'} 1846 | hasBin: true 1847 | 1848 | word-wrap@1.2.5: 1849 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1850 | engines: {node: '>=0.10.0'} 1851 | 1852 | wrappy@1.0.2: 1853 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1854 | 1855 | ws@8.18.2: 1856 | resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} 1857 | engines: {node: '>=10.0.0'} 1858 | peerDependencies: 1859 | bufferutil: ^4.0.1 1860 | utf-8-validate: '>=5.0.2' 1861 | peerDependenciesMeta: 1862 | bufferutil: 1863 | optional: true 1864 | utf-8-validate: 1865 | optional: true 1866 | 1867 | xml-name-validator@5.0.0: 1868 | resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} 1869 | engines: {node: '>=18'} 1870 | 1871 | xmlchars@2.2.0: 1872 | resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} 1873 | 1874 | yaml@1.10.2: 1875 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 1876 | engines: {node: '>= 6'} 1877 | 1878 | yocto-queue@0.1.0: 1879 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1880 | engines: {node: '>=10'} 1881 | 1882 | zimmerframe@1.1.2: 1883 | resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} 1884 | 1885 | zod-to-json-schema@3.24.5: 1886 | resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} 1887 | peerDependencies: 1888 | zod: ^3.24.1 1889 | 1890 | zod@3.24.3: 1891 | resolution: {integrity: sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==} 1892 | 1893 | snapshots: 1894 | 1895 | '@adobe/css-tools@4.4.2': {} 1896 | 1897 | '@ampproject/remapping@2.3.0': 1898 | dependencies: 1899 | '@jridgewell/gen-mapping': 0.3.8 1900 | '@jridgewell/trace-mapping': 0.3.25 1901 | 1902 | '@asamuzakjp/css-color@3.1.7': 1903 | dependencies: 1904 | '@csstools/css-calc': 2.1.3(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 1905 | '@csstools/css-color-parser': 3.0.9(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 1906 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 1907 | '@csstools/css-tokenizer': 3.0.3 1908 | lru-cache: 10.4.3 1909 | 1910 | '@babel/code-frame@7.27.1': 1911 | dependencies: 1912 | '@babel/helper-validator-identifier': 7.27.1 1913 | js-tokens: 4.0.0 1914 | picocolors: 1.1.1 1915 | 1916 | '@babel/helper-validator-identifier@7.27.1': {} 1917 | 1918 | '@babel/runtime@7.27.1': {} 1919 | 1920 | '@csstools/color-helpers@5.0.2': {} 1921 | 1922 | '@csstools/css-calc@2.1.3(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': 1923 | dependencies: 1924 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 1925 | '@csstools/css-tokenizer': 3.0.3 1926 | 1927 | '@csstools/css-color-parser@3.0.9(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': 1928 | dependencies: 1929 | '@csstools/color-helpers': 5.0.2 1930 | '@csstools/css-calc': 2.1.3(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 1931 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 1932 | '@csstools/css-tokenizer': 3.0.3 1933 | 1934 | '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)': 1935 | dependencies: 1936 | '@csstools/css-tokenizer': 3.0.3 1937 | 1938 | '@csstools/css-tokenizer@3.0.3': {} 1939 | 1940 | '@esbuild/aix-ppc64@0.25.3': 1941 | optional: true 1942 | 1943 | '@esbuild/android-arm64@0.25.3': 1944 | optional: true 1945 | 1946 | '@esbuild/android-arm@0.25.3': 1947 | optional: true 1948 | 1949 | '@esbuild/android-x64@0.25.3': 1950 | optional: true 1951 | 1952 | '@esbuild/darwin-arm64@0.25.3': 1953 | optional: true 1954 | 1955 | '@esbuild/darwin-x64@0.25.3': 1956 | optional: true 1957 | 1958 | '@esbuild/freebsd-arm64@0.25.3': 1959 | optional: true 1960 | 1961 | '@esbuild/freebsd-x64@0.25.3': 1962 | optional: true 1963 | 1964 | '@esbuild/linux-arm64@0.25.3': 1965 | optional: true 1966 | 1967 | '@esbuild/linux-arm@0.25.3': 1968 | optional: true 1969 | 1970 | '@esbuild/linux-ia32@0.25.3': 1971 | optional: true 1972 | 1973 | '@esbuild/linux-loong64@0.25.3': 1974 | optional: true 1975 | 1976 | '@esbuild/linux-mips64el@0.25.3': 1977 | optional: true 1978 | 1979 | '@esbuild/linux-ppc64@0.25.3': 1980 | optional: true 1981 | 1982 | '@esbuild/linux-riscv64@0.25.3': 1983 | optional: true 1984 | 1985 | '@esbuild/linux-s390x@0.25.3': 1986 | optional: true 1987 | 1988 | '@esbuild/linux-x64@0.25.3': 1989 | optional: true 1990 | 1991 | '@esbuild/netbsd-arm64@0.25.3': 1992 | optional: true 1993 | 1994 | '@esbuild/netbsd-x64@0.25.3': 1995 | optional: true 1996 | 1997 | '@esbuild/openbsd-arm64@0.25.3': 1998 | optional: true 1999 | 2000 | '@esbuild/openbsd-x64@0.25.3': 2001 | optional: true 2002 | 2003 | '@esbuild/sunos-x64@0.25.3': 2004 | optional: true 2005 | 2006 | '@esbuild/win32-arm64@0.25.3': 2007 | optional: true 2008 | 2009 | '@esbuild/win32-ia32@0.25.3': 2010 | optional: true 2011 | 2012 | '@esbuild/win32-x64@0.25.3': 2013 | optional: true 2014 | 2015 | '@eslint-community/eslint-utils@4.7.0(eslint@9.26.0)': 2016 | dependencies: 2017 | eslint: 9.26.0 2018 | eslint-visitor-keys: 3.4.3 2019 | 2020 | '@eslint-community/regexpp@4.12.1': {} 2021 | 2022 | '@eslint/compat@1.2.9(eslint@9.26.0)': 2023 | optionalDependencies: 2024 | eslint: 9.26.0 2025 | 2026 | '@eslint/config-array@0.20.0': 2027 | dependencies: 2028 | '@eslint/object-schema': 2.1.6 2029 | debug: 4.4.0 2030 | minimatch: 3.1.2 2031 | transitivePeerDependencies: 2032 | - supports-color 2033 | 2034 | '@eslint/config-helpers@0.2.2': {} 2035 | 2036 | '@eslint/core@0.13.0': 2037 | dependencies: 2038 | '@types/json-schema': 7.0.15 2039 | 2040 | '@eslint/eslintrc@3.3.1': 2041 | dependencies: 2042 | ajv: 6.12.6 2043 | debug: 4.4.0 2044 | espree: 10.3.0 2045 | globals: 14.0.0 2046 | ignore: 5.3.2 2047 | import-fresh: 3.3.1 2048 | js-yaml: 4.1.0 2049 | minimatch: 3.1.2 2050 | strip-json-comments: 3.1.1 2051 | transitivePeerDependencies: 2052 | - supports-color 2053 | 2054 | '@eslint/js@9.26.0': {} 2055 | 2056 | '@eslint/object-schema@2.1.6': {} 2057 | 2058 | '@eslint/plugin-kit@0.2.8': 2059 | dependencies: 2060 | '@eslint/core': 0.13.0 2061 | levn: 0.4.1 2062 | 2063 | '@humanfs/core@0.19.1': {} 2064 | 2065 | '@humanfs/node@0.16.6': 2066 | dependencies: 2067 | '@humanfs/core': 0.19.1 2068 | '@humanwhocodes/retry': 0.3.1 2069 | 2070 | '@humanwhocodes/module-importer@1.0.1': {} 2071 | 2072 | '@humanwhocodes/retry@0.3.1': {} 2073 | 2074 | '@humanwhocodes/retry@0.4.2': {} 2075 | 2076 | '@jridgewell/gen-mapping@0.3.8': 2077 | dependencies: 2078 | '@jridgewell/set-array': 1.2.1 2079 | '@jridgewell/sourcemap-codec': 1.5.0 2080 | '@jridgewell/trace-mapping': 0.3.25 2081 | 2082 | '@jridgewell/resolve-uri@3.1.2': {} 2083 | 2084 | '@jridgewell/set-array@1.2.1': {} 2085 | 2086 | '@jridgewell/sourcemap-codec@1.5.0': {} 2087 | 2088 | '@jridgewell/trace-mapping@0.3.25': 2089 | dependencies: 2090 | '@jridgewell/resolve-uri': 3.1.2 2091 | '@jridgewell/sourcemap-codec': 1.5.0 2092 | 2093 | '@modelcontextprotocol/sdk@1.11.0': 2094 | dependencies: 2095 | content-type: 1.0.5 2096 | cors: 2.8.5 2097 | cross-spawn: 7.0.6 2098 | eventsource: 3.0.6 2099 | express: 5.1.0 2100 | express-rate-limit: 7.5.0(express@5.1.0) 2101 | pkce-challenge: 5.0.0 2102 | raw-body: 3.0.0 2103 | zod: 3.24.3 2104 | zod-to-json-schema: 3.24.5(zod@3.24.3) 2105 | transitivePeerDependencies: 2106 | - supports-color 2107 | 2108 | '@nodelib/fs.scandir@2.1.5': 2109 | dependencies: 2110 | '@nodelib/fs.stat': 2.0.5 2111 | run-parallel: 1.2.0 2112 | 2113 | '@nodelib/fs.stat@2.0.5': {} 2114 | 2115 | '@nodelib/fs.walk@1.2.8': 2116 | dependencies: 2117 | '@nodelib/fs.scandir': 2.1.5 2118 | fastq: 1.19.1 2119 | 2120 | '@polka/url@1.0.0-next.29': {} 2121 | 2122 | '@publint/pack@0.1.2': {} 2123 | 2124 | '@rollup/rollup-android-arm-eabi@4.40.1': 2125 | optional: true 2126 | 2127 | '@rollup/rollup-android-arm64@4.40.1': 2128 | optional: true 2129 | 2130 | '@rollup/rollup-darwin-arm64@4.40.1': 2131 | optional: true 2132 | 2133 | '@rollup/rollup-darwin-x64@4.40.1': 2134 | optional: true 2135 | 2136 | '@rollup/rollup-freebsd-arm64@4.40.1': 2137 | optional: true 2138 | 2139 | '@rollup/rollup-freebsd-x64@4.40.1': 2140 | optional: true 2141 | 2142 | '@rollup/rollup-linux-arm-gnueabihf@4.40.1': 2143 | optional: true 2144 | 2145 | '@rollup/rollup-linux-arm-musleabihf@4.40.1': 2146 | optional: true 2147 | 2148 | '@rollup/rollup-linux-arm64-gnu@4.40.1': 2149 | optional: true 2150 | 2151 | '@rollup/rollup-linux-arm64-musl@4.40.1': 2152 | optional: true 2153 | 2154 | '@rollup/rollup-linux-loongarch64-gnu@4.40.1': 2155 | optional: true 2156 | 2157 | '@rollup/rollup-linux-powerpc64le-gnu@4.40.1': 2158 | optional: true 2159 | 2160 | '@rollup/rollup-linux-riscv64-gnu@4.40.1': 2161 | optional: true 2162 | 2163 | '@rollup/rollup-linux-riscv64-musl@4.40.1': 2164 | optional: true 2165 | 2166 | '@rollup/rollup-linux-s390x-gnu@4.40.1': 2167 | optional: true 2168 | 2169 | '@rollup/rollup-linux-x64-gnu@4.40.1': 2170 | optional: true 2171 | 2172 | '@rollup/rollup-linux-x64-musl@4.40.1': 2173 | optional: true 2174 | 2175 | '@rollup/rollup-win32-arm64-msvc@4.40.1': 2176 | optional: true 2177 | 2178 | '@rollup/rollup-win32-ia32-msvc@4.40.1': 2179 | optional: true 2180 | 2181 | '@rollup/rollup-win32-x64-msvc@4.40.1': 2182 | optional: true 2183 | 2184 | '@sveltejs/acorn-typescript@1.0.5(acorn@8.14.1)': 2185 | dependencies: 2186 | acorn: 8.14.1 2187 | 2188 | '@sveltejs/adapter-auto@4.0.0(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4))': 2189 | dependencies: 2190 | '@sveltejs/kit': 2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4) 2191 | import-meta-resolve: 4.1.0 2192 | 2193 | '@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4)': 2194 | dependencies: 2195 | '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.28.2)(vite@6.3.4) 2196 | '@types/cookie': 0.6.0 2197 | cookie: 0.6.0 2198 | devalue: 5.1.1 2199 | esm-env: 1.2.2 2200 | import-meta-resolve: 4.1.0 2201 | kleur: 4.1.5 2202 | magic-string: 0.30.17 2203 | mrmime: 2.0.1 2204 | sade: 1.8.1 2205 | set-cookie-parser: 2.7.1 2206 | sirv: 3.0.1 2207 | svelte: 5.28.2 2208 | vite: 6.3.4 2209 | 2210 | '@sveltejs/package@2.3.11(svelte@5.28.2)(typescript@5.8.3)': 2211 | dependencies: 2212 | chokidar: 4.0.3 2213 | kleur: 4.1.5 2214 | sade: 1.8.1 2215 | semver: 7.7.1 2216 | svelte: 5.28.2 2217 | svelte2tsx: 0.7.37(svelte@5.28.2)(typescript@5.8.3) 2218 | transitivePeerDependencies: 2219 | - typescript 2220 | 2221 | '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4)': 2222 | dependencies: 2223 | '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.28.2)(vite@6.3.4) 2224 | debug: 4.4.0 2225 | svelte: 5.28.2 2226 | vite: 6.3.4 2227 | transitivePeerDependencies: 2228 | - supports-color 2229 | 2230 | '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4)': 2231 | dependencies: 2232 | '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4) 2233 | debug: 4.4.0 2234 | deepmerge: 4.3.1 2235 | kleur: 4.1.5 2236 | magic-string: 0.30.17 2237 | svelte: 5.28.2 2238 | vite: 6.3.4 2239 | vitefu: 1.0.6(vite@6.3.4) 2240 | transitivePeerDependencies: 2241 | - supports-color 2242 | 2243 | '@testing-library/dom@10.4.0': 2244 | dependencies: 2245 | '@babel/code-frame': 7.27.1 2246 | '@babel/runtime': 7.27.1 2247 | '@types/aria-query': 5.0.4 2248 | aria-query: 5.3.0 2249 | chalk: 4.1.2 2250 | dom-accessibility-api: 0.5.16 2251 | lz-string: 1.5.0 2252 | pretty-format: 27.5.1 2253 | 2254 | '@testing-library/jest-dom@6.6.3': 2255 | dependencies: 2256 | '@adobe/css-tools': 4.4.2 2257 | aria-query: 5.3.2 2258 | chalk: 3.0.0 2259 | css.escape: 1.5.1 2260 | dom-accessibility-api: 0.6.3 2261 | lodash: 4.17.21 2262 | redent: 3.0.0 2263 | 2264 | '@testing-library/svelte@5.2.7(svelte@5.28.2)(vite@6.3.4)(vitest@3.1.2(jsdom@26.1.0))': 2265 | dependencies: 2266 | '@testing-library/dom': 10.4.0 2267 | svelte: 5.28.2 2268 | optionalDependencies: 2269 | vite: 6.3.4 2270 | vitest: 3.1.2(jsdom@26.1.0) 2271 | 2272 | '@types/aria-query@5.0.4': {} 2273 | 2274 | '@types/cookie@0.6.0': {} 2275 | 2276 | '@types/estree@1.0.7': {} 2277 | 2278 | '@types/json-schema@7.0.15': {} 2279 | 2280 | '@types/mdast@4.0.4': 2281 | dependencies: 2282 | '@types/unist': 2.0.11 2283 | 2284 | '@types/unist@2.0.11': {} 2285 | 2286 | '@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3)': 2287 | dependencies: 2288 | '@eslint-community/regexpp': 4.12.1 2289 | '@typescript-eslint/parser': 8.31.1(eslint@9.26.0)(typescript@5.8.3) 2290 | '@typescript-eslint/scope-manager': 8.31.1 2291 | '@typescript-eslint/type-utils': 8.31.1(eslint@9.26.0)(typescript@5.8.3) 2292 | '@typescript-eslint/utils': 8.31.1(eslint@9.26.0)(typescript@5.8.3) 2293 | '@typescript-eslint/visitor-keys': 8.31.1 2294 | eslint: 9.26.0 2295 | graphemer: 1.4.0 2296 | ignore: 5.3.2 2297 | natural-compare: 1.4.0 2298 | ts-api-utils: 2.1.0(typescript@5.8.3) 2299 | typescript: 5.8.3 2300 | transitivePeerDependencies: 2301 | - supports-color 2302 | 2303 | '@typescript-eslint/parser@8.31.1(eslint@9.26.0)(typescript@5.8.3)': 2304 | dependencies: 2305 | '@typescript-eslint/scope-manager': 8.31.1 2306 | '@typescript-eslint/types': 8.31.1 2307 | '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3) 2308 | '@typescript-eslint/visitor-keys': 8.31.1 2309 | debug: 4.4.0 2310 | eslint: 9.26.0 2311 | typescript: 5.8.3 2312 | transitivePeerDependencies: 2313 | - supports-color 2314 | 2315 | '@typescript-eslint/scope-manager@8.31.1': 2316 | dependencies: 2317 | '@typescript-eslint/types': 8.31.1 2318 | '@typescript-eslint/visitor-keys': 8.31.1 2319 | 2320 | '@typescript-eslint/type-utils@8.31.1(eslint@9.26.0)(typescript@5.8.3)': 2321 | dependencies: 2322 | '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3) 2323 | '@typescript-eslint/utils': 8.31.1(eslint@9.26.0)(typescript@5.8.3) 2324 | debug: 4.4.0 2325 | eslint: 9.26.0 2326 | ts-api-utils: 2.1.0(typescript@5.8.3) 2327 | typescript: 5.8.3 2328 | transitivePeerDependencies: 2329 | - supports-color 2330 | 2331 | '@typescript-eslint/types@8.31.1': {} 2332 | 2333 | '@typescript-eslint/typescript-estree@8.31.1(typescript@5.8.3)': 2334 | dependencies: 2335 | '@typescript-eslint/types': 8.31.1 2336 | '@typescript-eslint/visitor-keys': 8.31.1 2337 | debug: 4.4.0 2338 | fast-glob: 3.3.3 2339 | is-glob: 4.0.3 2340 | minimatch: 9.0.5 2341 | semver: 7.7.1 2342 | ts-api-utils: 2.1.0(typescript@5.8.3) 2343 | typescript: 5.8.3 2344 | transitivePeerDependencies: 2345 | - supports-color 2346 | 2347 | '@typescript-eslint/utils@8.31.1(eslint@9.26.0)(typescript@5.8.3)': 2348 | dependencies: 2349 | '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0) 2350 | '@typescript-eslint/scope-manager': 8.31.1 2351 | '@typescript-eslint/types': 8.31.1 2352 | '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3) 2353 | eslint: 9.26.0 2354 | typescript: 5.8.3 2355 | transitivePeerDependencies: 2356 | - supports-color 2357 | 2358 | '@typescript-eslint/visitor-keys@8.31.1': 2359 | dependencies: 2360 | '@typescript-eslint/types': 8.31.1 2361 | eslint-visitor-keys: 4.2.0 2362 | 2363 | '@vitest/expect@3.1.2': 2364 | dependencies: 2365 | '@vitest/spy': 3.1.2 2366 | '@vitest/utils': 3.1.2 2367 | chai: 5.2.0 2368 | tinyrainbow: 2.0.0 2369 | 2370 | '@vitest/mocker@3.1.2(vite@6.3.4)': 2371 | dependencies: 2372 | '@vitest/spy': 3.1.2 2373 | estree-walker: 3.0.3 2374 | magic-string: 0.30.17 2375 | optionalDependencies: 2376 | vite: 6.3.4 2377 | 2378 | '@vitest/pretty-format@3.1.2': 2379 | dependencies: 2380 | tinyrainbow: 2.0.0 2381 | 2382 | '@vitest/runner@3.1.2': 2383 | dependencies: 2384 | '@vitest/utils': 3.1.2 2385 | pathe: 2.0.3 2386 | 2387 | '@vitest/snapshot@3.1.2': 2388 | dependencies: 2389 | '@vitest/pretty-format': 3.1.2 2390 | magic-string: 0.30.17 2391 | pathe: 2.0.3 2392 | 2393 | '@vitest/spy@3.1.2': 2394 | dependencies: 2395 | tinyspy: 3.0.2 2396 | 2397 | '@vitest/utils@3.1.2': 2398 | dependencies: 2399 | '@vitest/pretty-format': 3.1.2 2400 | loupe: 3.1.3 2401 | tinyrainbow: 2.0.0 2402 | 2403 | accepts@2.0.0: 2404 | dependencies: 2405 | mime-types: 3.0.1 2406 | negotiator: 1.0.0 2407 | 2408 | acorn-jsx@5.3.2(acorn@8.14.1): 2409 | dependencies: 2410 | acorn: 8.14.1 2411 | 2412 | acorn@8.14.1: {} 2413 | 2414 | agent-base@7.1.3: {} 2415 | 2416 | ajv@6.12.6: 2417 | dependencies: 2418 | fast-deep-equal: 3.1.3 2419 | fast-json-stable-stringify: 2.1.0 2420 | json-schema-traverse: 0.4.1 2421 | uri-js: 4.4.1 2422 | 2423 | ansi-regex@5.0.1: {} 2424 | 2425 | ansi-styles@4.3.0: 2426 | dependencies: 2427 | color-convert: 2.0.1 2428 | 2429 | ansi-styles@5.2.0: {} 2430 | 2431 | argparse@2.0.1: {} 2432 | 2433 | aria-query@5.3.0: 2434 | dependencies: 2435 | dequal: 2.0.3 2436 | 2437 | aria-query@5.3.2: {} 2438 | 2439 | assertion-error@2.0.1: {} 2440 | 2441 | axobject-query@4.1.0: {} 2442 | 2443 | balanced-match@1.0.2: {} 2444 | 2445 | body-parser@2.2.0: 2446 | dependencies: 2447 | bytes: 3.1.2 2448 | content-type: 1.0.5 2449 | debug: 4.4.0 2450 | http-errors: 2.0.0 2451 | iconv-lite: 0.6.3 2452 | on-finished: 2.4.1 2453 | qs: 6.14.0 2454 | raw-body: 3.0.0 2455 | type-is: 2.0.1 2456 | transitivePeerDependencies: 2457 | - supports-color 2458 | 2459 | brace-expansion@1.1.11: 2460 | dependencies: 2461 | balanced-match: 1.0.2 2462 | concat-map: 0.0.1 2463 | 2464 | brace-expansion@2.0.1: 2465 | dependencies: 2466 | balanced-match: 1.0.2 2467 | 2468 | braces@3.0.3: 2469 | dependencies: 2470 | fill-range: 7.1.1 2471 | 2472 | bytes@3.1.2: {} 2473 | 2474 | cac@6.7.14: {} 2475 | 2476 | call-bind-apply-helpers@1.0.2: 2477 | dependencies: 2478 | es-errors: 1.3.0 2479 | function-bind: 1.1.2 2480 | 2481 | call-bound@1.0.4: 2482 | dependencies: 2483 | call-bind-apply-helpers: 1.0.2 2484 | get-intrinsic: 1.3.0 2485 | 2486 | callsites@3.1.0: {} 2487 | 2488 | chai@5.2.0: 2489 | dependencies: 2490 | assertion-error: 2.0.1 2491 | check-error: 2.1.1 2492 | deep-eql: 5.0.2 2493 | loupe: 3.1.3 2494 | pathval: 2.0.0 2495 | 2496 | chalk@3.0.0: 2497 | dependencies: 2498 | ansi-styles: 4.3.0 2499 | supports-color: 7.2.0 2500 | 2501 | chalk@4.1.2: 2502 | dependencies: 2503 | ansi-styles: 4.3.0 2504 | supports-color: 7.2.0 2505 | 2506 | check-error@2.1.1: {} 2507 | 2508 | chokidar@4.0.3: 2509 | dependencies: 2510 | readdirp: 4.1.2 2511 | 2512 | clsx@2.1.1: {} 2513 | 2514 | color-convert@2.0.1: 2515 | dependencies: 2516 | color-name: 1.1.4 2517 | 2518 | color-name@1.1.4: {} 2519 | 2520 | concat-map@0.0.1: {} 2521 | 2522 | content-disposition@1.0.0: 2523 | dependencies: 2524 | safe-buffer: 5.2.1 2525 | 2526 | content-type@1.0.5: {} 2527 | 2528 | cookie-signature@1.2.2: {} 2529 | 2530 | cookie@0.6.0: {} 2531 | 2532 | cookie@0.7.2: {} 2533 | 2534 | cors@2.8.5: 2535 | dependencies: 2536 | object-assign: 4.1.1 2537 | vary: 1.1.2 2538 | 2539 | cross-spawn@7.0.6: 2540 | dependencies: 2541 | path-key: 3.1.1 2542 | shebang-command: 2.0.0 2543 | which: 2.0.2 2544 | 2545 | css.escape@1.5.1: {} 2546 | 2547 | cssesc@3.0.0: {} 2548 | 2549 | cssstyle@4.3.1: 2550 | dependencies: 2551 | '@asamuzakjp/css-color': 3.1.7 2552 | rrweb-cssom: 0.8.0 2553 | 2554 | data-urls@5.0.0: 2555 | dependencies: 2556 | whatwg-mimetype: 4.0.0 2557 | whatwg-url: 14.2.0 2558 | 2559 | debug@4.4.0: 2560 | dependencies: 2561 | ms: 2.1.3 2562 | 2563 | decimal.js@10.5.0: {} 2564 | 2565 | dedent-js@1.0.1: {} 2566 | 2567 | deep-eql@5.0.2: {} 2568 | 2569 | deep-is@0.1.4: {} 2570 | 2571 | deepmerge@4.3.1: {} 2572 | 2573 | depd@2.0.0: {} 2574 | 2575 | dequal@2.0.3: {} 2576 | 2577 | devalue@5.1.1: {} 2578 | 2579 | dom-accessibility-api@0.5.16: {} 2580 | 2581 | dom-accessibility-api@0.6.3: {} 2582 | 2583 | dunder-proto@1.0.1: 2584 | dependencies: 2585 | call-bind-apply-helpers: 1.0.2 2586 | es-errors: 1.3.0 2587 | gopd: 1.2.0 2588 | 2589 | ee-first@1.1.1: {} 2590 | 2591 | encodeurl@2.0.0: {} 2592 | 2593 | entities@6.0.0: {} 2594 | 2595 | es-define-property@1.0.1: {} 2596 | 2597 | es-errors@1.3.0: {} 2598 | 2599 | es-module-lexer@1.7.0: {} 2600 | 2601 | es-object-atoms@1.1.1: 2602 | dependencies: 2603 | es-errors: 1.3.0 2604 | 2605 | esbuild@0.25.3: 2606 | optionalDependencies: 2607 | '@esbuild/aix-ppc64': 0.25.3 2608 | '@esbuild/android-arm': 0.25.3 2609 | '@esbuild/android-arm64': 0.25.3 2610 | '@esbuild/android-x64': 0.25.3 2611 | '@esbuild/darwin-arm64': 0.25.3 2612 | '@esbuild/darwin-x64': 0.25.3 2613 | '@esbuild/freebsd-arm64': 0.25.3 2614 | '@esbuild/freebsd-x64': 0.25.3 2615 | '@esbuild/linux-arm': 0.25.3 2616 | '@esbuild/linux-arm64': 0.25.3 2617 | '@esbuild/linux-ia32': 0.25.3 2618 | '@esbuild/linux-loong64': 0.25.3 2619 | '@esbuild/linux-mips64el': 0.25.3 2620 | '@esbuild/linux-ppc64': 0.25.3 2621 | '@esbuild/linux-riscv64': 0.25.3 2622 | '@esbuild/linux-s390x': 0.25.3 2623 | '@esbuild/linux-x64': 0.25.3 2624 | '@esbuild/netbsd-arm64': 0.25.3 2625 | '@esbuild/netbsd-x64': 0.25.3 2626 | '@esbuild/openbsd-arm64': 0.25.3 2627 | '@esbuild/openbsd-x64': 0.25.3 2628 | '@esbuild/sunos-x64': 0.25.3 2629 | '@esbuild/win32-arm64': 0.25.3 2630 | '@esbuild/win32-ia32': 0.25.3 2631 | '@esbuild/win32-x64': 0.25.3 2632 | 2633 | escape-html@1.0.3: {} 2634 | 2635 | escape-string-regexp@4.0.0: {} 2636 | 2637 | eslint-config-prettier@10.1.2(eslint@9.26.0): 2638 | dependencies: 2639 | eslint: 9.26.0 2640 | 2641 | eslint-plugin-svelte@3.5.1(eslint@9.26.0)(svelte@5.28.2): 2642 | dependencies: 2643 | '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0) 2644 | '@jridgewell/sourcemap-codec': 1.5.0 2645 | eslint: 9.26.0 2646 | esutils: 2.0.3 2647 | known-css-properties: 0.35.0 2648 | postcss: 8.5.3 2649 | postcss-load-config: 3.1.4(postcss@8.5.3) 2650 | postcss-safe-parser: 7.0.1(postcss@8.5.3) 2651 | semver: 7.7.1 2652 | svelte-eslint-parser: 1.1.3(svelte@5.28.2) 2653 | optionalDependencies: 2654 | svelte: 5.28.2 2655 | transitivePeerDependencies: 2656 | - ts-node 2657 | 2658 | eslint-scope@8.3.0: 2659 | dependencies: 2660 | esrecurse: 4.3.0 2661 | estraverse: 5.3.0 2662 | 2663 | eslint-visitor-keys@3.4.3: {} 2664 | 2665 | eslint-visitor-keys@4.2.0: {} 2666 | 2667 | eslint@9.26.0: 2668 | dependencies: 2669 | '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0) 2670 | '@eslint-community/regexpp': 4.12.1 2671 | '@eslint/config-array': 0.20.0 2672 | '@eslint/config-helpers': 0.2.2 2673 | '@eslint/core': 0.13.0 2674 | '@eslint/eslintrc': 3.3.1 2675 | '@eslint/js': 9.26.0 2676 | '@eslint/plugin-kit': 0.2.8 2677 | '@humanfs/node': 0.16.6 2678 | '@humanwhocodes/module-importer': 1.0.1 2679 | '@humanwhocodes/retry': 0.4.2 2680 | '@modelcontextprotocol/sdk': 1.11.0 2681 | '@types/estree': 1.0.7 2682 | '@types/json-schema': 7.0.15 2683 | ajv: 6.12.6 2684 | chalk: 4.1.2 2685 | cross-spawn: 7.0.6 2686 | debug: 4.4.0 2687 | escape-string-regexp: 4.0.0 2688 | eslint-scope: 8.3.0 2689 | eslint-visitor-keys: 4.2.0 2690 | espree: 10.3.0 2691 | esquery: 1.6.0 2692 | esutils: 2.0.3 2693 | fast-deep-equal: 3.1.3 2694 | file-entry-cache: 8.0.0 2695 | find-up: 5.0.0 2696 | glob-parent: 6.0.2 2697 | ignore: 5.3.2 2698 | imurmurhash: 0.1.4 2699 | is-glob: 4.0.3 2700 | json-stable-stringify-without-jsonify: 1.0.1 2701 | lodash.merge: 4.6.2 2702 | minimatch: 3.1.2 2703 | natural-compare: 1.4.0 2704 | optionator: 0.9.4 2705 | zod: 3.24.3 2706 | transitivePeerDependencies: 2707 | - supports-color 2708 | 2709 | esm-env@1.2.2: {} 2710 | 2711 | espree@10.3.0: 2712 | dependencies: 2713 | acorn: 8.14.1 2714 | acorn-jsx: 5.3.2(acorn@8.14.1) 2715 | eslint-visitor-keys: 4.2.0 2716 | 2717 | esquery@1.6.0: 2718 | dependencies: 2719 | estraverse: 5.3.0 2720 | 2721 | esrap@1.4.6: 2722 | dependencies: 2723 | '@jridgewell/sourcemap-codec': 1.5.0 2724 | 2725 | esrecurse@4.3.0: 2726 | dependencies: 2727 | estraverse: 5.3.0 2728 | 2729 | estraverse@5.3.0: {} 2730 | 2731 | estree-walker@3.0.3: 2732 | dependencies: 2733 | '@types/estree': 1.0.7 2734 | 2735 | esutils@2.0.3: {} 2736 | 2737 | etag@1.8.1: {} 2738 | 2739 | eventsource-parser@3.0.1: {} 2740 | 2741 | eventsource@3.0.6: 2742 | dependencies: 2743 | eventsource-parser: 3.0.1 2744 | 2745 | expect-type@1.2.1: {} 2746 | 2747 | express-rate-limit@7.5.0(express@5.1.0): 2748 | dependencies: 2749 | express: 5.1.0 2750 | 2751 | express@5.1.0: 2752 | dependencies: 2753 | accepts: 2.0.0 2754 | body-parser: 2.2.0 2755 | content-disposition: 1.0.0 2756 | content-type: 1.0.5 2757 | cookie: 0.7.2 2758 | cookie-signature: 1.2.2 2759 | debug: 4.4.0 2760 | encodeurl: 2.0.0 2761 | escape-html: 1.0.3 2762 | etag: 1.8.1 2763 | finalhandler: 2.1.0 2764 | fresh: 2.0.0 2765 | http-errors: 2.0.0 2766 | merge-descriptors: 2.0.0 2767 | mime-types: 3.0.1 2768 | on-finished: 2.4.1 2769 | once: 1.4.0 2770 | parseurl: 1.3.3 2771 | proxy-addr: 2.0.7 2772 | qs: 6.14.0 2773 | range-parser: 1.2.1 2774 | router: 2.2.0 2775 | send: 1.2.0 2776 | serve-static: 2.2.0 2777 | statuses: 2.0.1 2778 | type-is: 2.0.1 2779 | vary: 1.1.2 2780 | transitivePeerDependencies: 2781 | - supports-color 2782 | 2783 | fast-deep-equal@3.1.3: {} 2784 | 2785 | fast-glob@3.3.3: 2786 | dependencies: 2787 | '@nodelib/fs.stat': 2.0.5 2788 | '@nodelib/fs.walk': 1.2.8 2789 | glob-parent: 5.1.2 2790 | merge2: 1.4.1 2791 | micromatch: 4.0.8 2792 | 2793 | fast-json-stable-stringify@2.1.0: {} 2794 | 2795 | fast-levenshtein@2.0.6: {} 2796 | 2797 | fastq@1.19.1: 2798 | dependencies: 2799 | reusify: 1.1.0 2800 | 2801 | fdir@6.4.4(picomatch@4.0.2): 2802 | optionalDependencies: 2803 | picomatch: 4.0.2 2804 | 2805 | file-entry-cache@8.0.0: 2806 | dependencies: 2807 | flat-cache: 4.0.1 2808 | 2809 | fill-range@7.1.1: 2810 | dependencies: 2811 | to-regex-range: 5.0.1 2812 | 2813 | finalhandler@2.1.0: 2814 | dependencies: 2815 | debug: 4.4.0 2816 | encodeurl: 2.0.0 2817 | escape-html: 1.0.3 2818 | on-finished: 2.4.1 2819 | parseurl: 1.3.3 2820 | statuses: 2.0.1 2821 | transitivePeerDependencies: 2822 | - supports-color 2823 | 2824 | find-up@5.0.0: 2825 | dependencies: 2826 | locate-path: 6.0.0 2827 | path-exists: 4.0.0 2828 | 2829 | flat-cache@4.0.1: 2830 | dependencies: 2831 | flatted: 3.3.3 2832 | keyv: 4.5.4 2833 | 2834 | flatted@3.3.3: {} 2835 | 2836 | forwarded@0.2.0: {} 2837 | 2838 | fresh@2.0.0: {} 2839 | 2840 | fsevents@2.3.3: 2841 | optional: true 2842 | 2843 | function-bind@1.1.2: {} 2844 | 2845 | get-intrinsic@1.3.0: 2846 | dependencies: 2847 | call-bind-apply-helpers: 1.0.2 2848 | es-define-property: 1.0.1 2849 | es-errors: 1.3.0 2850 | es-object-atoms: 1.1.1 2851 | function-bind: 1.1.2 2852 | get-proto: 1.0.1 2853 | gopd: 1.2.0 2854 | has-symbols: 1.1.0 2855 | hasown: 2.0.2 2856 | math-intrinsics: 1.1.0 2857 | 2858 | get-proto@1.0.1: 2859 | dependencies: 2860 | dunder-proto: 1.0.1 2861 | es-object-atoms: 1.1.1 2862 | 2863 | glob-parent@5.1.2: 2864 | dependencies: 2865 | is-glob: 4.0.3 2866 | 2867 | glob-parent@6.0.2: 2868 | dependencies: 2869 | is-glob: 4.0.3 2870 | 2871 | globals@14.0.0: {} 2872 | 2873 | globals@16.0.0: {} 2874 | 2875 | gopd@1.2.0: {} 2876 | 2877 | graphemer@1.4.0: {} 2878 | 2879 | has-flag@4.0.0: {} 2880 | 2881 | has-symbols@1.1.0: {} 2882 | 2883 | hasown@2.0.2: 2884 | dependencies: 2885 | function-bind: 1.1.2 2886 | 2887 | html-encoding-sniffer@4.0.0: 2888 | dependencies: 2889 | whatwg-encoding: 3.1.1 2890 | 2891 | http-errors@2.0.0: 2892 | dependencies: 2893 | depd: 2.0.0 2894 | inherits: 2.0.4 2895 | setprototypeof: 1.2.0 2896 | statuses: 2.0.1 2897 | toidentifier: 1.0.1 2898 | 2899 | http-proxy-agent@7.0.2: 2900 | dependencies: 2901 | agent-base: 7.1.3 2902 | debug: 4.4.0 2903 | transitivePeerDependencies: 2904 | - supports-color 2905 | 2906 | https-proxy-agent@7.0.6: 2907 | dependencies: 2908 | agent-base: 7.1.3 2909 | debug: 4.4.0 2910 | transitivePeerDependencies: 2911 | - supports-color 2912 | 2913 | iconv-lite@0.6.3: 2914 | dependencies: 2915 | safer-buffer: 2.1.2 2916 | 2917 | ignore@5.3.2: {} 2918 | 2919 | import-fresh@3.3.1: 2920 | dependencies: 2921 | parent-module: 1.0.1 2922 | resolve-from: 4.0.0 2923 | 2924 | import-meta-resolve@4.1.0: {} 2925 | 2926 | imurmurhash@0.1.4: {} 2927 | 2928 | indent-string@4.0.0: {} 2929 | 2930 | inherits@2.0.4: {} 2931 | 2932 | ipaddr.js@1.9.1: {} 2933 | 2934 | is-extglob@2.1.1: {} 2935 | 2936 | is-glob@4.0.3: 2937 | dependencies: 2938 | is-extglob: 2.1.1 2939 | 2940 | is-number@7.0.0: {} 2941 | 2942 | is-potential-custom-element-name@1.0.1: {} 2943 | 2944 | is-promise@4.0.0: {} 2945 | 2946 | is-reference@3.0.3: 2947 | dependencies: 2948 | '@types/estree': 1.0.7 2949 | 2950 | isexe@2.0.0: {} 2951 | 2952 | js-tokens@4.0.0: {} 2953 | 2954 | js-yaml@4.1.0: 2955 | dependencies: 2956 | argparse: 2.0.1 2957 | 2958 | jsdom@26.1.0: 2959 | dependencies: 2960 | cssstyle: 4.3.1 2961 | data-urls: 5.0.0 2962 | decimal.js: 10.5.0 2963 | html-encoding-sniffer: 4.0.0 2964 | http-proxy-agent: 7.0.2 2965 | https-proxy-agent: 7.0.6 2966 | is-potential-custom-element-name: 1.0.1 2967 | nwsapi: 2.2.20 2968 | parse5: 7.3.0 2969 | rrweb-cssom: 0.8.0 2970 | saxes: 6.0.0 2971 | symbol-tree: 3.2.4 2972 | tough-cookie: 5.1.2 2973 | w3c-xmlserializer: 5.0.0 2974 | webidl-conversions: 7.0.0 2975 | whatwg-encoding: 3.1.1 2976 | whatwg-mimetype: 4.0.0 2977 | whatwg-url: 14.2.0 2978 | ws: 8.18.2 2979 | xml-name-validator: 5.0.0 2980 | transitivePeerDependencies: 2981 | - bufferutil 2982 | - supports-color 2983 | - utf-8-validate 2984 | 2985 | json-buffer@3.0.1: {} 2986 | 2987 | json-schema-traverse@0.4.1: {} 2988 | 2989 | json-stable-stringify-without-jsonify@1.0.1: {} 2990 | 2991 | keyv@4.5.4: 2992 | dependencies: 2993 | json-buffer: 3.0.1 2994 | 2995 | kleur@4.1.5: {} 2996 | 2997 | known-css-properties@0.35.0: {} 2998 | 2999 | levn@0.4.1: 3000 | dependencies: 3001 | prelude-ls: 1.2.1 3002 | type-check: 0.4.0 3003 | 3004 | lilconfig@2.1.0: {} 3005 | 3006 | locate-character@3.0.0: {} 3007 | 3008 | locate-path@6.0.0: 3009 | dependencies: 3010 | p-locate: 5.0.0 3011 | 3012 | lodash.merge@4.6.2: {} 3013 | 3014 | lodash@4.17.21: {} 3015 | 3016 | loupe@3.1.3: {} 3017 | 3018 | lower-case@2.0.2: 3019 | dependencies: 3020 | tslib: 2.8.1 3021 | 3022 | lru-cache@10.4.3: {} 3023 | 3024 | lz-string@1.5.0: {} 3025 | 3026 | magic-string@0.30.17: 3027 | dependencies: 3028 | '@jridgewell/sourcemap-codec': 1.5.0 3029 | 3030 | math-intrinsics@1.1.0: {} 3031 | 3032 | mdsvex@0.12.5(svelte@5.28.2): 3033 | dependencies: 3034 | '@types/mdast': 4.0.4 3035 | '@types/unist': 2.0.11 3036 | prism-svelte: 0.4.7 3037 | prismjs: 1.30.0 3038 | svelte: 5.28.2 3039 | unist-util-visit: 2.0.3 3040 | vfile-message: 2.0.4 3041 | 3042 | media-typer@1.1.0: {} 3043 | 3044 | merge-descriptors@2.0.0: {} 3045 | 3046 | merge2@1.4.1: {} 3047 | 3048 | micromatch@4.0.8: 3049 | dependencies: 3050 | braces: 3.0.3 3051 | picomatch: 2.3.1 3052 | 3053 | mime-db@1.54.0: {} 3054 | 3055 | mime-types@3.0.1: 3056 | dependencies: 3057 | mime-db: 1.54.0 3058 | 3059 | min-indent@1.0.1: {} 3060 | 3061 | minimatch@3.1.2: 3062 | dependencies: 3063 | brace-expansion: 1.1.11 3064 | 3065 | minimatch@9.0.5: 3066 | dependencies: 3067 | brace-expansion: 2.0.1 3068 | 3069 | mri@1.2.0: {} 3070 | 3071 | mrmime@2.0.1: {} 3072 | 3073 | ms@2.1.3: {} 3074 | 3075 | nanoid@3.3.11: {} 3076 | 3077 | natural-compare@1.4.0: {} 3078 | 3079 | negotiator@1.0.0: {} 3080 | 3081 | no-case@3.0.4: 3082 | dependencies: 3083 | lower-case: 2.0.2 3084 | tslib: 2.8.1 3085 | 3086 | nwsapi@2.2.20: {} 3087 | 3088 | object-assign@4.1.1: {} 3089 | 3090 | object-inspect@1.13.4: {} 3091 | 3092 | on-finished@2.4.1: 3093 | dependencies: 3094 | ee-first: 1.1.1 3095 | 3096 | once@1.4.0: 3097 | dependencies: 3098 | wrappy: 1.0.2 3099 | 3100 | optionator@0.9.4: 3101 | dependencies: 3102 | deep-is: 0.1.4 3103 | fast-levenshtein: 2.0.6 3104 | levn: 0.4.1 3105 | prelude-ls: 1.2.1 3106 | type-check: 0.4.0 3107 | word-wrap: 1.2.5 3108 | 3109 | p-limit@3.1.0: 3110 | dependencies: 3111 | yocto-queue: 0.1.0 3112 | 3113 | p-locate@5.0.0: 3114 | dependencies: 3115 | p-limit: 3.1.0 3116 | 3117 | package-manager-detector@1.2.0: {} 3118 | 3119 | parent-module@1.0.1: 3120 | dependencies: 3121 | callsites: 3.1.0 3122 | 3123 | parse5@7.3.0: 3124 | dependencies: 3125 | entities: 6.0.0 3126 | 3127 | parseurl@1.3.3: {} 3128 | 3129 | pascal-case@3.1.2: 3130 | dependencies: 3131 | no-case: 3.0.4 3132 | tslib: 2.8.1 3133 | 3134 | path-exists@4.0.0: {} 3135 | 3136 | path-key@3.1.1: {} 3137 | 3138 | path-to-regexp@8.2.0: {} 3139 | 3140 | pathe@2.0.3: {} 3141 | 3142 | pathval@2.0.0: {} 3143 | 3144 | picocolors@1.1.1: {} 3145 | 3146 | picomatch@2.3.1: {} 3147 | 3148 | picomatch@4.0.2: {} 3149 | 3150 | pkce-challenge@5.0.0: {} 3151 | 3152 | postcss-load-config@3.1.4(postcss@8.5.3): 3153 | dependencies: 3154 | lilconfig: 2.1.0 3155 | yaml: 1.10.2 3156 | optionalDependencies: 3157 | postcss: 8.5.3 3158 | 3159 | postcss-safe-parser@7.0.1(postcss@8.5.3): 3160 | dependencies: 3161 | postcss: 8.5.3 3162 | 3163 | postcss-scss@4.0.9(postcss@8.5.3): 3164 | dependencies: 3165 | postcss: 8.5.3 3166 | 3167 | postcss-selector-parser@7.1.0: 3168 | dependencies: 3169 | cssesc: 3.0.0 3170 | util-deprecate: 1.0.2 3171 | 3172 | postcss@8.5.3: 3173 | dependencies: 3174 | nanoid: 3.3.11 3175 | picocolors: 1.1.1 3176 | source-map-js: 1.2.1 3177 | 3178 | prelude-ls@1.2.1: {} 3179 | 3180 | prettier-plugin-svelte@3.3.3(prettier@3.5.3)(svelte@5.28.2): 3181 | dependencies: 3182 | prettier: 3.5.3 3183 | svelte: 5.28.2 3184 | 3185 | prettier@3.5.3: {} 3186 | 3187 | pretty-format@27.5.1: 3188 | dependencies: 3189 | ansi-regex: 5.0.1 3190 | ansi-styles: 5.2.0 3191 | react-is: 17.0.2 3192 | 3193 | prism-svelte@0.4.7: {} 3194 | 3195 | prismjs@1.30.0: {} 3196 | 3197 | proxy-addr@2.0.7: 3198 | dependencies: 3199 | forwarded: 0.2.0 3200 | ipaddr.js: 1.9.1 3201 | 3202 | publint@0.3.12: 3203 | dependencies: 3204 | '@publint/pack': 0.1.2 3205 | package-manager-detector: 1.2.0 3206 | picocolors: 1.1.1 3207 | sade: 1.8.1 3208 | 3209 | punycode@2.3.1: {} 3210 | 3211 | qs@6.14.0: 3212 | dependencies: 3213 | side-channel: 1.1.0 3214 | 3215 | queue-microtask@1.2.3: {} 3216 | 3217 | range-parser@1.2.1: {} 3218 | 3219 | raw-body@3.0.0: 3220 | dependencies: 3221 | bytes: 3.1.2 3222 | http-errors: 2.0.0 3223 | iconv-lite: 0.6.3 3224 | unpipe: 1.0.0 3225 | 3226 | react-is@17.0.2: {} 3227 | 3228 | readdirp@4.1.2: {} 3229 | 3230 | redent@3.0.0: 3231 | dependencies: 3232 | indent-string: 4.0.0 3233 | strip-indent: 3.0.0 3234 | 3235 | resolve-from@4.0.0: {} 3236 | 3237 | reusify@1.1.0: {} 3238 | 3239 | rollup@4.40.1: 3240 | dependencies: 3241 | '@types/estree': 1.0.7 3242 | optionalDependencies: 3243 | '@rollup/rollup-android-arm-eabi': 4.40.1 3244 | '@rollup/rollup-android-arm64': 4.40.1 3245 | '@rollup/rollup-darwin-arm64': 4.40.1 3246 | '@rollup/rollup-darwin-x64': 4.40.1 3247 | '@rollup/rollup-freebsd-arm64': 4.40.1 3248 | '@rollup/rollup-freebsd-x64': 4.40.1 3249 | '@rollup/rollup-linux-arm-gnueabihf': 4.40.1 3250 | '@rollup/rollup-linux-arm-musleabihf': 4.40.1 3251 | '@rollup/rollup-linux-arm64-gnu': 4.40.1 3252 | '@rollup/rollup-linux-arm64-musl': 4.40.1 3253 | '@rollup/rollup-linux-loongarch64-gnu': 4.40.1 3254 | '@rollup/rollup-linux-powerpc64le-gnu': 4.40.1 3255 | '@rollup/rollup-linux-riscv64-gnu': 4.40.1 3256 | '@rollup/rollup-linux-riscv64-musl': 4.40.1 3257 | '@rollup/rollup-linux-s390x-gnu': 4.40.1 3258 | '@rollup/rollup-linux-x64-gnu': 4.40.1 3259 | '@rollup/rollup-linux-x64-musl': 4.40.1 3260 | '@rollup/rollup-win32-arm64-msvc': 4.40.1 3261 | '@rollup/rollup-win32-ia32-msvc': 4.40.1 3262 | '@rollup/rollup-win32-x64-msvc': 4.40.1 3263 | fsevents: 2.3.3 3264 | 3265 | router@2.2.0: 3266 | dependencies: 3267 | debug: 4.4.0 3268 | depd: 2.0.0 3269 | is-promise: 4.0.0 3270 | parseurl: 1.3.3 3271 | path-to-regexp: 8.2.0 3272 | transitivePeerDependencies: 3273 | - supports-color 3274 | 3275 | rrweb-cssom@0.8.0: {} 3276 | 3277 | run-parallel@1.2.0: 3278 | dependencies: 3279 | queue-microtask: 1.2.3 3280 | 3281 | sade@1.8.1: 3282 | dependencies: 3283 | mri: 1.2.0 3284 | 3285 | safe-buffer@5.2.1: {} 3286 | 3287 | safer-buffer@2.1.2: {} 3288 | 3289 | saxes@6.0.0: 3290 | dependencies: 3291 | xmlchars: 2.2.0 3292 | 3293 | semver@7.7.1: {} 3294 | 3295 | send@1.2.0: 3296 | dependencies: 3297 | debug: 4.4.0 3298 | encodeurl: 2.0.0 3299 | escape-html: 1.0.3 3300 | etag: 1.8.1 3301 | fresh: 2.0.0 3302 | http-errors: 2.0.0 3303 | mime-types: 3.0.1 3304 | ms: 2.1.3 3305 | on-finished: 2.4.1 3306 | range-parser: 1.2.1 3307 | statuses: 2.0.1 3308 | transitivePeerDependencies: 3309 | - supports-color 3310 | 3311 | serve-static@2.2.0: 3312 | dependencies: 3313 | encodeurl: 2.0.0 3314 | escape-html: 1.0.3 3315 | parseurl: 1.3.3 3316 | send: 1.2.0 3317 | transitivePeerDependencies: 3318 | - supports-color 3319 | 3320 | set-cookie-parser@2.7.1: {} 3321 | 3322 | setprototypeof@1.2.0: {} 3323 | 3324 | shebang-command@2.0.0: 3325 | dependencies: 3326 | shebang-regex: 3.0.0 3327 | 3328 | shebang-regex@3.0.0: {} 3329 | 3330 | side-channel-list@1.0.0: 3331 | dependencies: 3332 | es-errors: 1.3.0 3333 | object-inspect: 1.13.4 3334 | 3335 | side-channel-map@1.0.1: 3336 | dependencies: 3337 | call-bound: 1.0.4 3338 | es-errors: 1.3.0 3339 | get-intrinsic: 1.3.0 3340 | object-inspect: 1.13.4 3341 | 3342 | side-channel-weakmap@1.0.2: 3343 | dependencies: 3344 | call-bound: 1.0.4 3345 | es-errors: 1.3.0 3346 | get-intrinsic: 1.3.0 3347 | object-inspect: 1.13.4 3348 | side-channel-map: 1.0.1 3349 | 3350 | side-channel@1.1.0: 3351 | dependencies: 3352 | es-errors: 1.3.0 3353 | object-inspect: 1.13.4 3354 | side-channel-list: 1.0.0 3355 | side-channel-map: 1.0.1 3356 | side-channel-weakmap: 1.0.2 3357 | 3358 | siginfo@2.0.0: {} 3359 | 3360 | sirv@3.0.1: 3361 | dependencies: 3362 | '@polka/url': 1.0.0-next.29 3363 | mrmime: 2.0.1 3364 | totalist: 3.0.1 3365 | 3366 | source-map-js@1.2.1: {} 3367 | 3368 | stackback@0.0.2: {} 3369 | 3370 | statuses@2.0.1: {} 3371 | 3372 | std-env@3.9.0: {} 3373 | 3374 | strip-indent@3.0.0: 3375 | dependencies: 3376 | min-indent: 1.0.1 3377 | 3378 | strip-json-comments@3.1.1: {} 3379 | 3380 | supports-color@7.2.0: 3381 | dependencies: 3382 | has-flag: 4.0.0 3383 | 3384 | svelte-check@4.1.7(picomatch@4.0.2)(svelte@5.28.2)(typescript@5.8.3): 3385 | dependencies: 3386 | '@jridgewell/trace-mapping': 0.3.25 3387 | chokidar: 4.0.3 3388 | fdir: 6.4.4(picomatch@4.0.2) 3389 | picocolors: 1.1.1 3390 | sade: 1.8.1 3391 | svelte: 5.28.2 3392 | typescript: 5.8.3 3393 | transitivePeerDependencies: 3394 | - picomatch 3395 | 3396 | svelte-eslint-parser@1.1.3(svelte@5.28.2): 3397 | dependencies: 3398 | eslint-scope: 8.3.0 3399 | eslint-visitor-keys: 4.2.0 3400 | espree: 10.3.0 3401 | postcss: 8.5.3 3402 | postcss-scss: 4.0.9(postcss@8.5.3) 3403 | postcss-selector-parser: 7.1.0 3404 | optionalDependencies: 3405 | svelte: 5.28.2 3406 | 3407 | svelte2tsx@0.7.37(svelte@5.28.2)(typescript@5.8.3): 3408 | dependencies: 3409 | dedent-js: 1.0.1 3410 | pascal-case: 3.1.2 3411 | svelte: 5.28.2 3412 | typescript: 5.8.3 3413 | 3414 | svelte@5.28.2: 3415 | dependencies: 3416 | '@ampproject/remapping': 2.3.0 3417 | '@jridgewell/sourcemap-codec': 1.5.0 3418 | '@sveltejs/acorn-typescript': 1.0.5(acorn@8.14.1) 3419 | '@types/estree': 1.0.7 3420 | acorn: 8.14.1 3421 | aria-query: 5.3.2 3422 | axobject-query: 4.1.0 3423 | clsx: 2.1.1 3424 | esm-env: 1.2.2 3425 | esrap: 1.4.6 3426 | is-reference: 3.0.3 3427 | locate-character: 3.0.0 3428 | magic-string: 0.30.17 3429 | zimmerframe: 1.1.2 3430 | 3431 | symbol-tree@3.2.4: {} 3432 | 3433 | tinybench@2.9.0: {} 3434 | 3435 | tinyexec@0.3.2: {} 3436 | 3437 | tinyglobby@0.2.13: 3438 | dependencies: 3439 | fdir: 6.4.4(picomatch@4.0.2) 3440 | picomatch: 4.0.2 3441 | 3442 | tinypool@1.0.2: {} 3443 | 3444 | tinyrainbow@2.0.0: {} 3445 | 3446 | tinyspy@3.0.2: {} 3447 | 3448 | tldts-core@6.1.86: {} 3449 | 3450 | tldts@6.1.86: 3451 | dependencies: 3452 | tldts-core: 6.1.86 3453 | 3454 | to-regex-range@5.0.1: 3455 | dependencies: 3456 | is-number: 7.0.0 3457 | 3458 | toidentifier@1.0.1: {} 3459 | 3460 | totalist@3.0.1: {} 3461 | 3462 | tough-cookie@5.1.2: 3463 | dependencies: 3464 | tldts: 6.1.86 3465 | 3466 | tr46@5.1.1: 3467 | dependencies: 3468 | punycode: 2.3.1 3469 | 3470 | ts-api-utils@2.1.0(typescript@5.8.3): 3471 | dependencies: 3472 | typescript: 5.8.3 3473 | 3474 | tslib@2.8.1: {} 3475 | 3476 | type-check@0.4.0: 3477 | dependencies: 3478 | prelude-ls: 1.2.1 3479 | 3480 | type-is@2.0.1: 3481 | dependencies: 3482 | content-type: 1.0.5 3483 | media-typer: 1.1.0 3484 | mime-types: 3.0.1 3485 | 3486 | typescript-eslint@8.31.1(eslint@9.26.0)(typescript@5.8.3): 3487 | dependencies: 3488 | '@typescript-eslint/eslint-plugin': 8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3) 3489 | '@typescript-eslint/parser': 8.31.1(eslint@9.26.0)(typescript@5.8.3) 3490 | '@typescript-eslint/utils': 8.31.1(eslint@9.26.0)(typescript@5.8.3) 3491 | eslint: 9.26.0 3492 | typescript: 5.8.3 3493 | transitivePeerDependencies: 3494 | - supports-color 3495 | 3496 | typescript@5.8.3: {} 3497 | 3498 | unist-util-is@4.1.0: {} 3499 | 3500 | unist-util-stringify-position@2.0.3: 3501 | dependencies: 3502 | '@types/unist': 2.0.11 3503 | 3504 | unist-util-visit-parents@3.1.1: 3505 | dependencies: 3506 | '@types/unist': 2.0.11 3507 | unist-util-is: 4.1.0 3508 | 3509 | unist-util-visit@2.0.3: 3510 | dependencies: 3511 | '@types/unist': 2.0.11 3512 | unist-util-is: 4.1.0 3513 | unist-util-visit-parents: 3.1.1 3514 | 3515 | unpipe@1.0.0: {} 3516 | 3517 | uri-js@4.4.1: 3518 | dependencies: 3519 | punycode: 2.3.1 3520 | 3521 | util-deprecate@1.0.2: {} 3522 | 3523 | vary@1.1.2: {} 3524 | 3525 | vfile-message@2.0.4: 3526 | dependencies: 3527 | '@types/unist': 2.0.11 3528 | unist-util-stringify-position: 2.0.3 3529 | 3530 | vite-node@3.1.2: 3531 | dependencies: 3532 | cac: 6.7.14 3533 | debug: 4.4.0 3534 | es-module-lexer: 1.7.0 3535 | pathe: 2.0.3 3536 | vite: 6.3.4 3537 | transitivePeerDependencies: 3538 | - '@types/node' 3539 | - jiti 3540 | - less 3541 | - lightningcss 3542 | - sass 3543 | - sass-embedded 3544 | - stylus 3545 | - sugarss 3546 | - supports-color 3547 | - terser 3548 | - tsx 3549 | - yaml 3550 | 3551 | vite@6.3.4: 3552 | dependencies: 3553 | esbuild: 0.25.3 3554 | fdir: 6.4.4(picomatch@4.0.2) 3555 | picomatch: 4.0.2 3556 | postcss: 8.5.3 3557 | rollup: 4.40.1 3558 | tinyglobby: 0.2.13 3559 | optionalDependencies: 3560 | fsevents: 2.3.3 3561 | 3562 | vitefu@1.0.6(vite@6.3.4): 3563 | optionalDependencies: 3564 | vite: 6.3.4 3565 | 3566 | vitest@3.1.2(jsdom@26.1.0): 3567 | dependencies: 3568 | '@vitest/expect': 3.1.2 3569 | '@vitest/mocker': 3.1.2(vite@6.3.4) 3570 | '@vitest/pretty-format': 3.1.2 3571 | '@vitest/runner': 3.1.2 3572 | '@vitest/snapshot': 3.1.2 3573 | '@vitest/spy': 3.1.2 3574 | '@vitest/utils': 3.1.2 3575 | chai: 5.2.0 3576 | debug: 4.4.0 3577 | expect-type: 1.2.1 3578 | magic-string: 0.30.17 3579 | pathe: 2.0.3 3580 | std-env: 3.9.0 3581 | tinybench: 2.9.0 3582 | tinyexec: 0.3.2 3583 | tinyglobby: 0.2.13 3584 | tinypool: 1.0.2 3585 | tinyrainbow: 2.0.0 3586 | vite: 6.3.4 3587 | vite-node: 3.1.2 3588 | why-is-node-running: 2.3.0 3589 | optionalDependencies: 3590 | jsdom: 26.1.0 3591 | transitivePeerDependencies: 3592 | - jiti 3593 | - less 3594 | - lightningcss 3595 | - msw 3596 | - sass 3597 | - sass-embedded 3598 | - stylus 3599 | - sugarss 3600 | - supports-color 3601 | - terser 3602 | - tsx 3603 | - yaml 3604 | 3605 | w3c-xmlserializer@5.0.0: 3606 | dependencies: 3607 | xml-name-validator: 5.0.0 3608 | 3609 | webidl-conversions@7.0.0: {} 3610 | 3611 | whatwg-encoding@3.1.1: 3612 | dependencies: 3613 | iconv-lite: 0.6.3 3614 | 3615 | whatwg-mimetype@4.0.0: {} 3616 | 3617 | whatwg-url@14.2.0: 3618 | dependencies: 3619 | tr46: 5.1.1 3620 | webidl-conversions: 7.0.0 3621 | 3622 | which@2.0.2: 3623 | dependencies: 3624 | isexe: 2.0.0 3625 | 3626 | why-is-node-running@2.3.0: 3627 | dependencies: 3628 | siginfo: 2.0.0 3629 | stackback: 0.0.2 3630 | 3631 | word-wrap@1.2.5: {} 3632 | 3633 | wrappy@1.0.2: {} 3634 | 3635 | ws@8.18.2: {} 3636 | 3637 | xml-name-validator@5.0.0: {} 3638 | 3639 | xmlchars@2.2.0: {} 3640 | 3641 | yaml@1.10.2: {} 3642 | 3643 | yocto-queue@0.1.0: {} 3644 | 3645 | zimmerframe@1.1.2: {} 3646 | 3647 | zod-to-json-schema@3.24.5(zod@3.24.3): 3648 | dependencies: 3649 | zod: 3.24.3 3650 | 3651 | zod@3.24.3: {} 3652 | -------------------------------------------------------------------------------- /src/app.d.ts: -------------------------------------------------------------------------------- 1 | // See https://svelte.dev/docs/kit/types#app.d.ts 2 | // for information about these interfaces 3 | declare global { 4 | namespace App { 5 | // interface Error {} 6 | // interface Locals {} 7 | // interface PageData {} 8 | // interface PageState {} 9 | // interface Platform {} 10 | } 11 | } 12 | 13 | export {}; 14 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %sveltekit.head% 8 | 9 | 10 |
%sveltekit.body%
11 | 12 | 13 | -------------------------------------------------------------------------------- /src/lib/index.ts: -------------------------------------------------------------------------------- 1 | export * from './svelte-tiny-query/query.svelte'; 2 | -------------------------------------------------------------------------------- /src/lib/svelte-tiny-query/query.svelte.ts: -------------------------------------------------------------------------------- 1 | import { untrack } from 'svelte'; 2 | 3 | // Types 4 | 5 | type LoadSuccess = { success: true; data: T }; 6 | type LoadFailure = { success: false; error: E }; 7 | 8 | export type LoadResult = LoadSuccess | LoadFailure; 9 | 10 | // Helpers 11 | 12 | function generateKeyFragment(param: Record) { 13 | return Object.entries(param) 14 | .map(([key, value]) => `${key}:${String(value)}`) 15 | .sort() 16 | .join('|'); 17 | } 18 | 19 | function generateKey( 20 | baseKey: string[] | ((params: T) => string[]), 21 | queryParam: T 22 | ) { 23 | return typeof baseKey === 'function' 24 | ? baseKey(queryParam) 25 | : queryParam 26 | ? [...baseKey, generateKeyFragment(queryParam)] 27 | : baseKey; 28 | } 29 | 30 | /** 31 | * Constructs a LoadSuccess object. 32 | * @param data The data to be represented. 33 | * @returns A LoadSuccess object containing the data. 34 | */ 35 | export function succeed(data: T): LoadSuccess { 36 | return { success: true, data }; 37 | } 38 | 39 | /** 40 | * Constructs a LoadFailure object. 41 | * @param error The error to be represented. 42 | * @returns A LoadFailure object containing the error. 43 | */ 44 | export function fail(error: E): LoadFailure { 45 | return { success: false, error }; 46 | } 47 | 48 | // State 49 | 50 | const queriesByKey = $state({} as Record void>); 51 | const loadingByKey = $state({} as Record); 52 | const dataByKey = $state({} as Record); 53 | const errorByKey = $state({} as Record); 54 | const staleTimeStampByKey = $state({} as Record); 55 | export const activeQueries = $state({ keys: [] as string[][] }); 56 | 57 | /** 58 | * Global loading state to track the number of active queries. 59 | */ 60 | export const globalLoading = $state({ count: 0 }); 61 | 62 | // Actions 63 | 64 | /** 65 | * Creates a query function that can be used to load data. 66 | * @param key Path of the query 67 | * @param loadFn Function to load the data 68 | * @param options Options for the query 69 | * @param options.initialData Initial data to be used before the query is loaded 70 | * @param options.staleTime Time in milliseconds after which the query is considered stale 71 | * @returns Query function to use in Svelte components 72 | */ 73 | export function createQuery( 74 | key: string[] | ((queryParam: P) => string[]), 75 | loadFn: (queryParam: P) => Promise>, 76 | options?: { 77 | /** 78 | * Initial data to be used before the query is loaded. 79 | */ 80 | initialData?: T; // TODO: should also take a function (param: P) => T 81 | /** 82 | * Time in milliseconds after which the query is considered stale. 83 | */ 84 | staleTime?: number; 85 | } 86 | ) { 87 | const initializeState = (currentKey: string) => { 88 | const internal = $state({ currentKey }); 89 | const query = $state({ 90 | loading: false, 91 | error: undefined as E | undefined, 92 | data: options?.initialData, 93 | staleTimeStamp: undefined as number | undefined 94 | }); 95 | 96 | $effect(() => { 97 | query.loading = !!loadingByKey[internal.currentKey]; 98 | }); 99 | 100 | $effect(() => { 101 | query.data = dataByKey[internal.currentKey] as T; 102 | }); 103 | 104 | $effect(() => { 105 | query.error = errorByKey[internal.currentKey] as E | undefined; 106 | }); 107 | 108 | $effect(() => { 109 | query.staleTimeStamp = staleTimeStampByKey[internal.currentKey]; 110 | }); 111 | 112 | return { 113 | internal, 114 | query 115 | }; 116 | }; 117 | 118 | const loadData = async (queryParam: P) => { 119 | const cacheKey = generateKey(key, queryParam).join('__'); 120 | 121 | untrack(() => { 122 | errorByKey[cacheKey] = undefined; 123 | loadingByKey[cacheKey] = true; 124 | globalLoading.count++; 125 | }); 126 | 127 | const loadResult = await loadFn(queryParam); 128 | if (loadResult.success) { 129 | dataByKey[cacheKey] = loadResult.data; 130 | untrack(() => { 131 | staleTimeStampByKey[cacheKey] = +new Date() + (options?.staleTime ?? 0); 132 | }); 133 | } else { 134 | errorByKey[cacheKey] = loadResult.error; 135 | } 136 | 137 | untrack(() => { 138 | loadingByKey[cacheKey] = false; 139 | globalLoading.count--; 140 | }); 141 | }; 142 | 143 | return (queryParam: P) => { 144 | const cacheKey = generateKey(key, queryParam).join('__'); 145 | const { internal, query } = initializeState(cacheKey); 146 | 147 | $effect(() => { 148 | const currentKey = generateKey(key, queryParam); 149 | const cacheKey = currentKey.join('__'); 150 | internal.currentKey = cacheKey; 151 | 152 | untrack(() => { 153 | activeQueries.keys = [...activeQueries.keys, currentKey]; 154 | }); 155 | 156 | const frozenQueryParam = $state.snapshot(queryParam) as P; 157 | const queryLoaderInstance = () => { 158 | loadData(frozenQueryParam); 159 | }; 160 | 161 | untrack(() => { 162 | queriesByKey[cacheKey] = queryLoaderInstance; 163 | }); 164 | 165 | const alreadyLoading = untrack(() => loadingByKey[cacheKey]); 166 | const staleOrNew = untrack(() => { 167 | const staleTime = staleTimeStampByKey[cacheKey]; 168 | return staleTime ? staleTime < +new Date() : true; 169 | }); 170 | 171 | if (staleOrNew && !alreadyLoading) { 172 | queryLoaderInstance(); 173 | } 174 | 175 | return () => { 176 | untrack(() => { 177 | const activeQueryIndex = activeQueries.keys.findIndex( 178 | (key) => key?.join('__') === cacheKey 179 | ); 180 | 181 | if (activeQueryIndex >= 0) { 182 | activeQueries.keys = activeQueries.keys.filter( 183 | (_, index) => index !== activeQueryIndex 184 | ); 185 | } 186 | }); 187 | }; 188 | }); 189 | 190 | const reload = () => { 191 | queriesByKey[internal.currentKey]?.(); 192 | }; 193 | 194 | return { 195 | query, 196 | /** 197 | * reloades the query. 198 | */ 199 | reload 200 | }; 201 | }; 202 | } 203 | 204 | /** 205 | * Invalidates queries based on the provided key. 206 | * This will cause the matching queries to be reloaded if they are currently active. 207 | * @param key The key of the query to invalidate. 208 | * @param options Options for invalidation 209 | * @param options.force If true, forces the query to be invalidated even if it is not currently loading. 210 | * @param options.exact If true, only invalidates queries that match the exact key. Otherwise, it will invalidate all queries that start with the provided key. 211 | * @returns void 212 | */ 213 | export function invalidateQueries( 214 | key: string[], 215 | options?: { force?: boolean; exact?: boolean } 216 | ) { 217 | const cacheKey = key.join('__'); 218 | 219 | // marks all relevant queries as stale 220 | Object.keys(staleTimeStampByKey).forEach((key) => { 221 | if (options?.exact ? key === cacheKey : key.startsWith(cacheKey)) { 222 | staleTimeStampByKey[key] = +new Date() - 1; 223 | } 224 | }); 225 | 226 | // reloads the currently active queries right away 227 | const queriesToInvalidate = activeQueries.keys.filter((query) => 228 | options?.exact 229 | ? query.join('__') === cacheKey 230 | : query.join('__').startsWith(cacheKey) 231 | ); 232 | 233 | queriesToInvalidate.forEach((query) => { 234 | const cacheKey = query.join('__'); 235 | 236 | if (options?.force) { 237 | loadingByKey[cacheKey] = false; 238 | dataByKey[cacheKey] = undefined; 239 | errorByKey[cacheKey] = undefined; 240 | } 241 | 242 | queriesByKey[cacheKey]?.(); 243 | }); 244 | } 245 | -------------------------------------------------------------------------------- /src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 |
7 |
8 | 9 |
10 | 11 | 12 | 13 |
14 |
15 |
16 |
17 | 18 | 39 | -------------------------------------------------------------------------------- /src/routes/MemeIdea.svelte: -------------------------------------------------------------------------------- 1 | 35 | 36 |
37 |

38 | Emoji #{param.id} 39 |

40 | 41 |
42 | 43 | 44 | 45 |
46 | 47 |
48 | {#if query.error} 49 |

Error: {query.error}

50 | {/if} 51 | 52 | {#if query.data} 53 |
{query.data.emoji}
54 |
55 |
id: {query.data.id}
56 |
time: {formatHHMMSS(query.data.fetchedAt)}
57 |
58 |
59 | staleTime: 60 | {#if query.staleTimeStamp} 61 | {formatHHMMSS(new Date(query.staleTimeStamp))} 62 | {:else} 63 | not 64 | {/if} 65 |
66 | {/if} 67 | 68 | {#if query.loading} 69 |
Loading
70 | {/if} 71 |
72 |
73 | 74 | 130 | -------------------------------------------------------------------------------- /src/routes/QueryContainer.svelte: -------------------------------------------------------------------------------- 1 | 17 | 18 |
19 | {@render children()} 20 | 21 |
22 |
23 | 24 | 25 |
26 | 27 |
28 | {globalLoading.count} loading 29 |
30 |
31 |
32 | 33 | 52 | -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kidesia/svelte-tiny-query/bec09371e1c3c878d741b20fddc86666cfd9ea7c/static/favicon.png -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import { mdsvex } from 'mdsvex'; 2 | import adapter from '@sveltejs/adapter-auto'; 3 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; 4 | 5 | /** @type {import('@sveltejs/kit').Config} */ 6 | const config = { 7 | // Consult https://svelte.dev/docs/kit/integrations 8 | // for more information about preprocessors 9 | preprocess: [vitePreprocess(), mdsvex({ extensions: ['.svx', '.md'] })], 10 | 11 | kit: { 12 | // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list. 13 | // If your environment is not supported, or you settled on a specific environment, switch out the adapter. 14 | // See https://svelte.dev/docs/kit/adapters for more information about adapters. 15 | adapter: adapter() 16 | }, 17 | 18 | extensions: ['.svelte', '.svx', '.md'] 19 | }; 20 | 21 | export default config; 22 | -------------------------------------------------------------------------------- /tests/BaseExample.svelte: -------------------------------------------------------------------------------- 1 | 23 | 24 |
Loading: {query.loading}
25 |
Error: {query.error}
26 |
Data: {query.data ?? ''}
27 | -------------------------------------------------------------------------------- /tests/ControlsExample.svelte: -------------------------------------------------------------------------------- 1 | 25 | 26 | 27 | 28 | 29 |
Loading: {query.loading}
30 |
Error: {query.error}
31 |
Data: {query.data ?? ''}
32 | -------------------------------------------------------------------------------- /tests/createQuery.svelte.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, test } from 'vitest'; 2 | import { render, waitFor } from '@testing-library/svelte/svelte5'; 3 | 4 | import BaseExample from './BaseExample.svelte'; 5 | import ControlsExample from './ControlsExample.svelte'; 6 | 7 | describe('createQuery', () => { 8 | test('Return the correct states for a successful query', async () => { 9 | const states = $state({ 10 | value: [] 11 | }); 12 | 13 | const rendered = render(BaseExample, { 14 | props: { 15 | states, 16 | key: ['successful-test'], 17 | loadingFn: async () => ({ success: true, data: 'payload' }) 18 | } 19 | }); 20 | 21 | await waitFor(() => { 22 | expect(rendered.queryByText('Data: payload')).toBeInTheDocument(); 23 | }); 24 | 25 | expect(states.value).toHaveLength(3); 26 | 27 | expect(states.value[0]).toMatchObject({ 28 | data: undefined, 29 | error: undefined, 30 | loading: false 31 | }); 32 | 33 | expect(states.value[1]).toMatchObject({ 34 | data: undefined, 35 | error: undefined, 36 | loading: true 37 | }); 38 | 39 | expect(states.value[2]).toMatchObject({ 40 | data: 'payload', 41 | error: undefined, 42 | loading: false 43 | }); 44 | }); 45 | 46 | test('Return the correct states for a failed query', async () => { 47 | const states = $state({ 48 | value: [] 49 | }); 50 | 51 | const rendered = render(BaseExample, { 52 | props: { 53 | states, 54 | key: ['failed-test'], 55 | loadingFn: async () => ({ success: false, error: 'oopsie' }) 56 | } 57 | }); 58 | 59 | await waitFor(() => { 60 | expect(rendered.queryByText('Error: oopsie')).toBeInTheDocument(); 61 | }); 62 | 63 | expect(states.value).toHaveLength(3); 64 | 65 | expect(states.value[0]).toMatchObject({ 66 | data: undefined, 67 | error: undefined, 68 | loading: false 69 | }); 70 | 71 | expect(states.value[1]).toMatchObject({ 72 | data: undefined, 73 | error: undefined, 74 | loading: true 75 | }); 76 | 77 | expect(states.value[2]).toMatchObject({ 78 | data: undefined, 79 | error: 'oopsie', 80 | loading: false 81 | }); 82 | }); 83 | 84 | test('Reloads data when param changes', async () => { 85 | const states = $state({ 86 | value: [] 87 | }); 88 | 89 | const rendered = render(ControlsExample, { 90 | props: { 91 | states, 92 | key: ['param-example'], 93 | loadingFn: async (param: { id: number }) => ({ 94 | success: true, 95 | data: `id is ${param.id}` 96 | }) 97 | } 98 | }); 99 | 100 | await waitFor(() => { 101 | expect(rendered.queryByText('Data: id is 1')).toBeInTheDocument(); 102 | }); 103 | 104 | rendered.queryByText('Increment')?.click(); 105 | 106 | await waitFor(() => { 107 | expect(rendered.queryByText('Data: id is 2')).toBeInTheDocument(); 108 | }); 109 | 110 | expect(states.value).toHaveLength(5); 111 | 112 | expect(states.value[0]).toMatchObject({ 113 | data: undefined, 114 | error: undefined, 115 | loading: false 116 | }); 117 | 118 | expect(states.value[1]).toMatchObject({ 119 | data: undefined, 120 | error: undefined, 121 | loading: true 122 | }); 123 | 124 | expect(states.value[2]).toMatchObject({ 125 | data: 'id is 1', 126 | error: undefined, 127 | loading: false 128 | }); 129 | 130 | expect(states.value[3]).toMatchObject({ 131 | data: undefined, 132 | error: undefined, 133 | loading: true 134 | }); 135 | 136 | expect(states.value[4]).toMatchObject({ 137 | data: 'id is 2', 138 | error: undefined, 139 | loading: false 140 | }); 141 | }); 142 | 143 | test('Shows data from cache when it already has it', async () => { 144 | const states = $state({ 145 | value: [] 146 | }); 147 | 148 | const rendered = render(ControlsExample, { 149 | props: { 150 | states, 151 | key: ['basic-cache-example'], 152 | loadingFn: async (param: { id: number }) => ({ 153 | success: true, 154 | data: `id is ${param.id}` 155 | }) 156 | } 157 | }); 158 | 159 | await waitFor(() => { 160 | expect(rendered.queryByText('Data: id is 1')).toBeInTheDocument(); 161 | }); 162 | 163 | rendered.queryByText('Increment')?.click(); 164 | 165 | await waitFor(() => { 166 | expect(rendered.queryByText('Data: id is 2')).toBeInTheDocument(); 167 | }); 168 | 169 | rendered.queryByText('Decrement')?.click(); 170 | 171 | await waitFor(() => { 172 | expect(rendered.queryByText('Data: id is 1')).toBeInTheDocument(); 173 | }); 174 | 175 | expect(states.value).toHaveLength(7); 176 | 177 | expect(states.value[0]).toMatchObject({ 178 | data: undefined, 179 | error: undefined, 180 | loading: false 181 | }); 182 | 183 | expect(states.value[1]).toMatchObject({ 184 | data: undefined, 185 | error: undefined, 186 | loading: true 187 | }); 188 | 189 | expect(states.value[2]).toMatchObject({ 190 | data: 'id is 1', 191 | error: undefined, 192 | loading: false 193 | }); 194 | 195 | expect(states.value[3]).toMatchObject({ 196 | data: undefined, 197 | error: undefined, 198 | loading: true 199 | }); 200 | 201 | expect(states.value[4]).toMatchObject({ 202 | data: 'id is 2', 203 | error: undefined, 204 | loading: false 205 | }); 206 | 207 | expect(states.value[5]).toMatchObject({ 208 | data: 'id is 1', 209 | error: undefined, 210 | loading: true 211 | }); 212 | 213 | expect(states.value[6]).toMatchObject({ 214 | data: 'id is 1', 215 | error: undefined, 216 | loading: false 217 | }); 218 | }); 219 | }); 220 | -------------------------------------------------------------------------------- /tests/setupTests.ts: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom/vitest'; 2 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "resolveJsonModule": true, 9 | "skipLibCheck": true, 10 | "sourceMap": true, 11 | "module": "NodeNext", 12 | "moduleResolution": "NodeNext", 13 | "strict": true, 14 | // "noUncheckedIndexedAccess": true, 15 | "noImplicitOverride": true, 16 | "allowImportingTsExtensions": true 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { svelteTesting } from '@testing-library/svelte/vite'; 2 | import { sveltekit } from '@sveltejs/kit/vite'; 3 | import { defineConfig } from 'vite'; 4 | 5 | export default defineConfig({ 6 | plugins: [sveltekit()], 7 | test: { 8 | workspace: [ 9 | { 10 | extends: './vite.config.ts', 11 | plugins: [svelteTesting()], 12 | test: { 13 | name: 'client', 14 | environment: 'jsdom', 15 | clearMocks: true, 16 | include: ['tests/**/*.svelte.{test,spec}.{js,ts}'], 17 | setupFiles: ['./vitest-setup-client.ts'] 18 | } 19 | } 20 | ] 21 | } 22 | }); 23 | -------------------------------------------------------------------------------- /vitest-setup-client.ts: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom/vitest'; 2 | import { vi } from 'vitest'; 3 | 4 | // required for svelte5 + jsdom as jsdom does not support matchMedia 5 | Object.defineProperty(window, 'matchMedia', { 6 | writable: true, 7 | enumerable: true, 8 | value: vi.fn().mockImplementation((query) => ({ 9 | matches: false, 10 | media: query, 11 | onchange: null, 12 | addEventListener: vi.fn(), 13 | removeEventListener: vi.fn(), 14 | dispatchEvent: vi.fn() 15 | })) 16 | }); 17 | 18 | // add more mocks here if you need them 19 | --------------------------------------------------------------------------------