├── .github ├── FUNDING.yml └── workflows │ └── release.yml ├── .gitignore ├── .npmrc ├── .prettierrc ├── .vscode ├── extensions.json └── settings.json ├── LICENSE ├── README.md ├── package.json ├── pnpm-lock.yaml ├── src ├── app.d.ts ├── app.html ├── lib │ ├── Turnstile.svelte │ ├── index.ts │ └── types.d.ts └── routes │ ├── +layout.svelte │ ├── +page.server.ts │ ├── +page.svelte │ ├── superforms │ ├── +page.server.ts │ ├── +page.svelte │ └── schema.ts │ └── utils.ts ├── static ├── favicon.png └── robots.txt ├── svelte.config.js ├── tsconfig.json └── vite.config.ts /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | patreon: onlyspaceghost 2 | custom: https://ghostdev.xyz/donate 3 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release Package 2 | 3 | on: 4 | release: 5 | types: [created] 6 | 7 | jobs: 8 | publish-npm: 9 | runs-on: ubuntu-latest 10 | permissions: 11 | id-token: write 12 | steps: 13 | - name: Checkout 14 | uses: actions/checkout@v4 15 | 16 | - name: Setup Node 22 17 | uses: actions/setup-node@v4 18 | with: 19 | node-version: 22 20 | registry-url: https://registry.npmjs.org/ 21 | 22 | - name: Setup PNPM 23 | uses: pnpm/action-setup@v4.0.0 24 | with: 25 | version: 9.12.2 26 | 27 | - name: Install 28 | run: pnpm install --frozen-lockfile 29 | 30 | - name: Build 31 | run: pnpm package 32 | 33 | - name: Publish 34 | run: | 35 | pnpm config set "//registry.npmjs.org/:_authToken" "${NPM_TOKEN}" 36 | pnpm publish --no-git-checks 37 | env: 38 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 39 | NPM_CONFIG_PROVENANCE: true 40 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | dist -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "quoteProps": "as-needed", 4 | "trailingComma": "all", 5 | "bracketSpacing": true, 6 | "arrowParens": "always", 7 | "semi": true, 8 | "useTabs": true, 9 | "tabWidth": 4, 10 | 11 | "svelteAllowShorthand": true, 12 | "svelteBracketNewLine": false, 13 | "svelteIndentScriptAndStyle": true, 14 | 15 | "plugins": ["prettier-plugin-svelte"], 16 | "overrides": [ 17 | { 18 | "files": "*.svelte", 19 | "options": { 20 | "parser": "svelte" 21 | } 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["esbenp.prettier-vscode"] 3 | } 4 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "[javascript]": { 3 | "editor.defaultFormatter": "esbenp.prettier-vscode", 4 | "editor.formatOnSave": true 5 | }, 6 | "[typescript]": { 7 | "editor.defaultFormatter": "esbenp.prettier-vscode", 8 | "editor.formatOnSave": true 9 | }, 10 | "[svelte]": { 11 | "editor.defaultFormatter": "svelte.svelte-vscode", 12 | "editor.formatOnSave": true 13 | }, 14 | "[markdown]": { 15 | "editor.defaultFormatter": "esbenp.prettier-vscode", 16 | "editor.formatOnSave": true 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright © 2022 Willow Smith 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Svelte Turnstile 2 | 3 | Works with Svelte 3, 4, and 5 (compatibility mode)! 4 | 5 | [Cloudflare's Turnstile](https://developers.cloudflare.com/turnstile/) is a new CAPTCHA alternative, this library allows you to easily integrate it into your svelte projects. 6 | 7 | # Installing 8 | 9 | ```sh 10 | npm install svelte-turnstile -D 11 | ``` 12 | 13 | # Demo 14 | 15 | https://svelte-turnstile.willow.codes 16 | 17 | # Using 18 | 19 | The only required prop is the `siteKey` which you can get from [adding a site here](https://dash.cloudflare.com/?to=/:account/turnstile). 20 | 21 | ```svelte 22 | 25 | 26 | 27 | ``` 28 | 29 | ## Props 30 | 31 | | Prop | Type | Description | Required | 32 | | ------------------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------- | -------- | 33 | | `siteKey` | `string` | sitekey for your website | ✅ | 34 | | `theme` | `'light' \| 'dark' \| 'auto'` | colour theme of the widget (defaults to `auto`) | | 35 | | `size` | `'normal' \| 'flexible' \| 'invisible' \| 'compact'` | size of the widget (defaults to `normal`) | | 36 | | `action` | `string` | A string that can be used to differentiate widgets, returned on validation | | 37 | | `cData` | `string` | A string that can attach customer data to a challange, returned on validation | | 38 | | `tabIndex` | `number` | Used for accessibility (defaults to `0`) | | 39 | | `responseField` | `boolean` | if true the response token will be a property on the form data (default `true`) | | 40 | | `responseFieldName` | `string` | the `name` of the input which will appear on the form data (default `cf-turnstile-response`) | | 41 | | `retry` | `'auto' \| 'never'` | should the widget automatically retry to obtain a token if it did not succeed (default `auto`) | | 42 | | `retryInterval` | `number` | if `retry` is true, this controls the time between attempts in milliseconds (default `8000`) | | 43 | | `language` | `SupportedLanguage \| 'auto'` | the language turnstile should use (default `auto`) | | 44 | | `execution` | `'render' \| 'execute'` | controls when to obtain the token of the widget (default `render`) | | 45 | | `appearance` | `'always' \| 'execute' \| 'interaction-only'` | controls when the widget is visible. (default `always`) | | 46 | 47 | For more information about some of the props and a list of `SupportedLanguage`'s [checkout the Cloudflare Documentation](https://developers.cloudflare.com/turnstile/get-started/client-side-rendering/#configurations). 48 | 49 | ### Deprecated Props 50 | 51 | - `forms` renamed to `responseField` 52 | - `formsField` renamed to `responseFieldName` 53 | 54 | ## Events 55 | 56 | | Event | Data | Description | 57 | | -------------------- | --------------------------------------------------- | -------------------------------------------------------------- | 58 | | `callback` | `{ token: string; preClearanceObtained: boolean; }` | Emitted when a user passes a challenge | 59 | | `error` | `{ code: string }` | Emitted when a user fails verification | 60 | | `expired` | `{}` | Emitted when a challenge expires and does not reset the widget | 61 | | `timeout` | `{}` | Emitted when a challenge expires and does reset the widget | 62 | | `before-interactive` | `{}` | Emitted before the challenge enters interactive mode | 63 | | `after-interactive` | `{}` | Emitted when the challenge has left interactive mode | 64 | | `unsupported` | `{}` | Emitted when a given client/browser is not supported | 65 | 66 | # Validate CAPTCHA 67 | 68 | We need to validate the captcha token server side before we do any action on the server, this is to ensure no forgery occured. We can create a simple validate function: 69 | 70 | If you are using a HTML Form and POSTing to a server you can get the `cf-turnstile-response` (or what you configured it to using the `responseFieldName` option) property to get the `token`, otherwise you can use the `on:callback` event in svelte to keep track of the token and send it to your backend. 71 | 72 | ```ts 73 | interface TokenValidateResponse { 74 | 'error-codes': string[]; 75 | success: boolean; 76 | action: string; 77 | cdata: string; 78 | } 79 | 80 | async function validateToken(token: string, secret: string) { 81 | const response = await fetch( 82 | 'https://challenges.cloudflare.com/turnstile/v0/siteverify', 83 | { 84 | method: 'POST', 85 | headers: { 86 | 'content-type': 'application/json', 87 | }, 88 | body: JSON.stringify({ 89 | response: token, 90 | secret: secret, 91 | }), 92 | }, 93 | ); 94 | 95 | const data: TokenValidateResponse = await response.json(); 96 | 97 | return { 98 | // Return the status 99 | success: data.success, 100 | 101 | // Return the first error if it exists 102 | error: data['error-codes']?.length ? data['error-codes'][0] : null, 103 | }; 104 | } 105 | ``` 106 | 107 | ## SvelteKit Example (Svelte 5) 108 | 109 | In SvelteKit we can use form actions to easily setup a form with a captcha: 110 | 111 | `routes/login/+page.svelte` 112 | 113 | ```svelte 114 | 119 | 120 | {#if form?.error} 121 |

{form?.error}

122 | {/if} 123 | 124 |
125 | 126 | 127 | ``` 128 | 129 | `routes/login/+page.server.js` 130 | 131 | ```js 132 | // Copy and paste the validateToken function from above here 133 | 134 | export const actions = { 135 | default: async ({ request }) => { 136 | const data = await request.formData(); 137 | 138 | const token = data.get('cf-turnstile-response'); // if you edited the formsField option change this 139 | const SECRET_KEY = '...'; // you should use $env module for secrets 140 | 141 | const { success, error } = await validateToken(token, SECRET_KEY); 142 | 143 | if (!success) 144 | return { 145 | error: error || 'Invalid CAPTCHA', 146 | }; 147 | 148 | // do something, the captcha is valid! 149 | }, 150 | }; 151 | ``` 152 | 153 | ## Superforms Example (Svelte 5) 154 | 155 | `routes/login/schema.ts` 156 | 157 | ```ts 158 | import { z } from "zod"; 159 | 160 | export const schema = z.object({ 161 | ..., // other fields 162 | 'cf-turnstile-response': z.string().nonempty('Please complete turnstile') 163 | }); 164 | ``` 165 | 166 | `routes/login/+page.svelte` 167 | 168 | ```svelte 169 | 188 | 189 |
190 | 191 | 192 | ``` 193 | 194 | `routes/login/+page.server.js` 195 | 196 | ```js 197 | import { fail, message, setError, superValidate } from 'sveltekit-superforms'; 198 | import { zod } from 'sveltekit-superforms/adapters'; 199 | import { schema } from './schema.ts'; 200 | 201 | export const load = async () => { 202 | const form = await superValidate(zod(schema)); 203 | return { form }; 204 | }; 205 | 206 | export const actions = { 207 | default: async ({ request }) => { 208 | const form = await superValidate(request, zod(schema)); 209 | if (!form.valid) return fail(400, { form }); 210 | 211 | const { success } = await validateToken( 212 | form.data['cf-turnstile-response'], 213 | SECRET_KEY, 214 | ); 215 | 216 | if (!success) { 217 | return setError( 218 | form, 219 | 'cf-turnstile-response', 220 | 'Invalid turnstile, please try again', 221 | ); 222 | } 223 | 224 | return message(form, 'Success!'); 225 | }, 226 | }; 227 | ``` 228 | 229 | This example uses the [Superforms onUpdated event](https://superforms.rocks/concepts/events) to reset the Turnstile widget. Additionally, it automatically adds the Turnstile response token to the form data. 230 | 231 | # Resetting 232 | 233 | If you need to manually reset the widget, you can do so by binding to the `reset` prop. For example: 234 | 235 | ```svelte 236 | 239 | 240 | 241 | 242 | 243 | ``` 244 | 245 | # Support 246 | 247 | - Join the [discord](https://discord.gg/2Vd4wAjJnm)
248 | - Create a issue on the [github](https://github.com/ghostdevv/svelte-turnstile) 249 | 250 | # Notable Changes 251 | 252 | Full Changelog: https://github.com/ghostdevv/svelte-turnstile/releases 253 | 254 | - Deprecate `forms` prop in favour of `responseField` 255 | - Deprecate `formsField` prop in favour of `responseFieldName` 256 | - Deprecate the `on:turnstile-callback` event in favour of `on:callback` 257 | - Deprecate the `on:turnstile-error` event in favour of `on:error` 258 | - Deprecate the `on:turnstile-timeout` event in favour of `on:timeout` 259 | - Deprecate the `on:turnstile-expired` event in favour of `on:expired` 260 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-turnstile", 3 | "version": "0.11.0", 4 | "scripts": { 5 | "dev": "vite dev", 6 | "package": "svelte-kit sync && svelte-package && publint", 7 | "build": "vite build", 8 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json && publint", 9 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" 10 | }, 11 | "devDependencies": { 12 | "@sveltejs/adapter-auto": "3.3.1", 13 | "@sveltejs/kit": "2.7.3", 14 | "@sveltejs/package": "^2.3.7", 15 | "@sveltejs/vite-plugin-svelte": "^3.1.2", 16 | "ghostsui": "^1.6.0", 17 | "prettier": "^3.4.2", 18 | "prettier-plugin-svelte": "^3.3.2", 19 | "publint": "^0.2.12", 20 | "sass": "^1.83.1", 21 | "svelte": "^4.2.19", 22 | "svelte-check": "^4.1.1", 23 | "sveltekit-superforms": "^2.22.1", 24 | "tslib": "^2.8.1", 25 | "typescript": "^5.7.2", 26 | "vite": "^5.4.11", 27 | "zod": "^3.24.1" 28 | }, 29 | "peerDependencies": { 30 | "svelte": "^3.58.0 || ^4.0.0 || ^5.0.0" 31 | }, 32 | "dependencies": { 33 | "turnstile-types": "^1.2.3" 34 | }, 35 | "repository": { 36 | "type": "git", 37 | "url": "git+https://github.com/ghostdevv/svelte-turnstile.git" 38 | }, 39 | "license": "MIT", 40 | "bugs": { 41 | "url": "https://github.com/ghostdevv/svelte-turnstile/issues" 42 | }, 43 | "author": "Willow GHOST (https://ghostdev.xyz)", 44 | "contributors": [ 45 | "Braden Wiggins (https://fractal-hq.com/)", 46 | "Willow GHOST (https://ghostdev.xyz)" 47 | ], 48 | "type": "module", 49 | "sideEffects": false, 50 | "types": "./dist/index.d.ts", 51 | "svelte": "./dist/index.js", 52 | "exports": { 53 | "./package.json": "./package.json", 54 | ".": { 55 | "types": "./dist/index.d.ts", 56 | "svelte": "./dist/index.js", 57 | "default": "./dist/index.js" 58 | } 59 | }, 60 | "files": [ 61 | "dist" 62 | ], 63 | "volta": { 64 | "node": "22.10.0", 65 | "pnpm": "9.12.2" 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | turnstile-types: 12 | specifier: ^1.2.3 13 | version: 1.2.3 14 | devDependencies: 15 | '@sveltejs/adapter-auto': 16 | specifier: 3.3.1 17 | version: 3.3.1(@sveltejs/kit@2.7.3(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)))(svelte@4.2.19)(vite@5.4.11(sass@1.83.1))) 18 | '@sveltejs/kit': 19 | specifier: 2.7.3 20 | version: 2.7.3(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)))(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)) 21 | '@sveltejs/package': 22 | specifier: ^2.3.7 23 | version: 2.3.7(svelte@4.2.19)(typescript@5.7.2) 24 | '@sveltejs/vite-plugin-svelte': 25 | specifier: ^3.1.2 26 | version: 3.1.2(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)) 27 | ghostsui: 28 | specifier: ^1.6.0 29 | version: 1.6.0 30 | prettier: 31 | specifier: ^3.4.2 32 | version: 3.4.2 33 | prettier-plugin-svelte: 34 | specifier: ^3.3.2 35 | version: 3.3.2(prettier@3.4.2)(svelte@4.2.19) 36 | publint: 37 | specifier: ^0.2.12 38 | version: 0.2.12 39 | sass: 40 | specifier: ^1.83.1 41 | version: 1.83.1 42 | svelte: 43 | specifier: ^4.2.19 44 | version: 4.2.19 45 | svelte-check: 46 | specifier: ^4.1.1 47 | version: 4.1.1(svelte@4.2.19)(typescript@5.7.2) 48 | sveltekit-superforms: 49 | specifier: ^2.22.1 50 | version: 2.22.1(@sveltejs/kit@2.7.3(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)))(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)))(@types/json-schema@7.0.15)(svelte@4.2.19)(typescript@5.7.2) 51 | tslib: 52 | specifier: ^2.8.1 53 | version: 2.8.1 54 | typescript: 55 | specifier: ^5.7.2 56 | version: 5.7.2 57 | vite: 58 | specifier: ^5.4.11 59 | version: 5.4.11(sass@1.83.1) 60 | zod: 61 | specifier: ^3.24.1 62 | version: 3.24.1 63 | 64 | packages: 65 | 66 | '@ampproject/remapping@2.3.0': 67 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 68 | engines: {node: '>=6.0.0'} 69 | 70 | '@ark/schema@0.26.0': 71 | resolution: {integrity: sha512-b6hk1+M0U4jgZK7ZOGsWKSXgjhfPAqqSCczViM/gQ0Hu0awKLx9SpZYsFhl0j67j3hwlY2+mVZQPKy6GlYDCbQ==} 72 | 73 | '@ark/util@0.26.0': 74 | resolution: {integrity: sha512-6FSqj6xl3jQ9bD9EU25ThMVcsvaeq6c3gecONgPQ+wDYOUEqBBIAkpjA+LEZMiY0AxVhSF3UF6BlVFspXmef2Q==} 75 | 76 | '@babel/runtime@7.26.0': 77 | resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} 78 | engines: {node: '>=6.9.0'} 79 | 80 | '@esbuild/aix-ppc64@0.21.5': 81 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 82 | engines: {node: '>=12'} 83 | cpu: [ppc64] 84 | os: [aix] 85 | 86 | '@esbuild/android-arm64@0.21.5': 87 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 88 | engines: {node: '>=12'} 89 | cpu: [arm64] 90 | os: [android] 91 | 92 | '@esbuild/android-arm@0.21.5': 93 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 94 | engines: {node: '>=12'} 95 | cpu: [arm] 96 | os: [android] 97 | 98 | '@esbuild/android-x64@0.21.5': 99 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 100 | engines: {node: '>=12'} 101 | cpu: [x64] 102 | os: [android] 103 | 104 | '@esbuild/darwin-arm64@0.21.5': 105 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 106 | engines: {node: '>=12'} 107 | cpu: [arm64] 108 | os: [darwin] 109 | 110 | '@esbuild/darwin-x64@0.21.5': 111 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 112 | engines: {node: '>=12'} 113 | cpu: [x64] 114 | os: [darwin] 115 | 116 | '@esbuild/freebsd-arm64@0.21.5': 117 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 118 | engines: {node: '>=12'} 119 | cpu: [arm64] 120 | os: [freebsd] 121 | 122 | '@esbuild/freebsd-x64@0.21.5': 123 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 124 | engines: {node: '>=12'} 125 | cpu: [x64] 126 | os: [freebsd] 127 | 128 | '@esbuild/linux-arm64@0.21.5': 129 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 130 | engines: {node: '>=12'} 131 | cpu: [arm64] 132 | os: [linux] 133 | 134 | '@esbuild/linux-arm@0.21.5': 135 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 136 | engines: {node: '>=12'} 137 | cpu: [arm] 138 | os: [linux] 139 | 140 | '@esbuild/linux-ia32@0.21.5': 141 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 142 | engines: {node: '>=12'} 143 | cpu: [ia32] 144 | os: [linux] 145 | 146 | '@esbuild/linux-loong64@0.21.5': 147 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 148 | engines: {node: '>=12'} 149 | cpu: [loong64] 150 | os: [linux] 151 | 152 | '@esbuild/linux-mips64el@0.21.5': 153 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 154 | engines: {node: '>=12'} 155 | cpu: [mips64el] 156 | os: [linux] 157 | 158 | '@esbuild/linux-ppc64@0.21.5': 159 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 160 | engines: {node: '>=12'} 161 | cpu: [ppc64] 162 | os: [linux] 163 | 164 | '@esbuild/linux-riscv64@0.21.5': 165 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 166 | engines: {node: '>=12'} 167 | cpu: [riscv64] 168 | os: [linux] 169 | 170 | '@esbuild/linux-s390x@0.21.5': 171 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 172 | engines: {node: '>=12'} 173 | cpu: [s390x] 174 | os: [linux] 175 | 176 | '@esbuild/linux-x64@0.21.5': 177 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 178 | engines: {node: '>=12'} 179 | cpu: [x64] 180 | os: [linux] 181 | 182 | '@esbuild/netbsd-x64@0.21.5': 183 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 184 | engines: {node: '>=12'} 185 | cpu: [x64] 186 | os: [netbsd] 187 | 188 | '@esbuild/openbsd-x64@0.21.5': 189 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 190 | engines: {node: '>=12'} 191 | cpu: [x64] 192 | os: [openbsd] 193 | 194 | '@esbuild/sunos-x64@0.21.5': 195 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 196 | engines: {node: '>=12'} 197 | cpu: [x64] 198 | os: [sunos] 199 | 200 | '@esbuild/win32-arm64@0.21.5': 201 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 202 | engines: {node: '>=12'} 203 | cpu: [arm64] 204 | os: [win32] 205 | 206 | '@esbuild/win32-ia32@0.21.5': 207 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 208 | engines: {node: '>=12'} 209 | cpu: [ia32] 210 | os: [win32] 211 | 212 | '@esbuild/win32-x64@0.21.5': 213 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 214 | engines: {node: '>=12'} 215 | cpu: [x64] 216 | os: [win32] 217 | 218 | '@exodus/schemasafe@1.3.0': 219 | resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==} 220 | 221 | '@gcornut/valibot-json-schema@0.31.0': 222 | resolution: {integrity: sha512-3xGptCurm23e7nuPQkdrE5rEs1FeTPHhAUsBuwwqG4/YeZLwJOoYZv+fmsppUEfo5y9lzUwNQrNqLS/q7HMc7g==} 223 | hasBin: true 224 | 225 | '@hapi/hoek@9.3.0': 226 | resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} 227 | 228 | '@hapi/topo@5.1.0': 229 | resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} 230 | 231 | '@jridgewell/gen-mapping@0.3.8': 232 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 233 | engines: {node: '>=6.0.0'} 234 | 235 | '@jridgewell/resolve-uri@3.1.2': 236 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 237 | engines: {node: '>=6.0.0'} 238 | 239 | '@jridgewell/set-array@1.2.1': 240 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 241 | engines: {node: '>=6.0.0'} 242 | 243 | '@jridgewell/sourcemap-codec@1.5.0': 244 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 245 | 246 | '@jridgewell/trace-mapping@0.3.25': 247 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 248 | 249 | '@parcel/watcher-android-arm64@2.5.0': 250 | resolution: {integrity: sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==} 251 | engines: {node: '>= 10.0.0'} 252 | cpu: [arm64] 253 | os: [android] 254 | 255 | '@parcel/watcher-darwin-arm64@2.5.0': 256 | resolution: {integrity: sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==} 257 | engines: {node: '>= 10.0.0'} 258 | cpu: [arm64] 259 | os: [darwin] 260 | 261 | '@parcel/watcher-darwin-x64@2.5.0': 262 | resolution: {integrity: sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==} 263 | engines: {node: '>= 10.0.0'} 264 | cpu: [x64] 265 | os: [darwin] 266 | 267 | '@parcel/watcher-freebsd-x64@2.5.0': 268 | resolution: {integrity: sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==} 269 | engines: {node: '>= 10.0.0'} 270 | cpu: [x64] 271 | os: [freebsd] 272 | 273 | '@parcel/watcher-linux-arm-glibc@2.5.0': 274 | resolution: {integrity: sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==} 275 | engines: {node: '>= 10.0.0'} 276 | cpu: [arm] 277 | os: [linux] 278 | 279 | '@parcel/watcher-linux-arm-musl@2.5.0': 280 | resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==} 281 | engines: {node: '>= 10.0.0'} 282 | cpu: [arm] 283 | os: [linux] 284 | 285 | '@parcel/watcher-linux-arm64-glibc@2.5.0': 286 | resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==} 287 | engines: {node: '>= 10.0.0'} 288 | cpu: [arm64] 289 | os: [linux] 290 | 291 | '@parcel/watcher-linux-arm64-musl@2.5.0': 292 | resolution: {integrity: sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==} 293 | engines: {node: '>= 10.0.0'} 294 | cpu: [arm64] 295 | os: [linux] 296 | 297 | '@parcel/watcher-linux-x64-glibc@2.5.0': 298 | resolution: {integrity: sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==} 299 | engines: {node: '>= 10.0.0'} 300 | cpu: [x64] 301 | os: [linux] 302 | 303 | '@parcel/watcher-linux-x64-musl@2.5.0': 304 | resolution: {integrity: sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==} 305 | engines: {node: '>= 10.0.0'} 306 | cpu: [x64] 307 | os: [linux] 308 | 309 | '@parcel/watcher-win32-arm64@2.5.0': 310 | resolution: {integrity: sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==} 311 | engines: {node: '>= 10.0.0'} 312 | cpu: [arm64] 313 | os: [win32] 314 | 315 | '@parcel/watcher-win32-ia32@2.5.0': 316 | resolution: {integrity: sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==} 317 | engines: {node: '>= 10.0.0'} 318 | cpu: [ia32] 319 | os: [win32] 320 | 321 | '@parcel/watcher-win32-x64@2.5.0': 322 | resolution: {integrity: sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==} 323 | engines: {node: '>= 10.0.0'} 324 | cpu: [x64] 325 | os: [win32] 326 | 327 | '@parcel/watcher@2.5.0': 328 | resolution: {integrity: sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==} 329 | engines: {node: '>= 10.0.0'} 330 | 331 | '@polka/url@1.0.0-next.28': 332 | resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} 333 | 334 | '@poppinss/macroable@1.0.4': 335 | resolution: {integrity: sha512-ct43jurbe7lsUX5eIrj4ijO3j/6zIPp7CDnFWXDs7UPAbw1Pu1iH3oAmFdP4jcskKJBURH5M9oTtyeiUXyHX8Q==} 336 | engines: {node: '>=18.16.0'} 337 | 338 | '@rollup/rollup-android-arm-eabi@4.29.2': 339 | resolution: {integrity: sha512-s/8RiF4bdmGnc/J0N7lHAr5ZFJj+NdJqJ/Hj29K+c4lEdoVlukzvWXB9XpWZCdakVT0YAw8iyIqUP2iFRz5/jA==} 340 | cpu: [arm] 341 | os: [android] 342 | 343 | '@rollup/rollup-android-arm64@4.29.2': 344 | resolution: {integrity: sha512-mKRlVj1KsKWyEOwR6nwpmzakq6SgZXW4NUHNWlYSiyncJpuXk7wdLzuKdWsRoR1WLbWsZBKvsUCdCTIAqRn9cA==} 345 | cpu: [arm64] 346 | os: [android] 347 | 348 | '@rollup/rollup-darwin-arm64@4.29.2': 349 | resolution: {integrity: sha512-vJX+vennGwygmutk7N333lvQ/yKVAHnGoBS2xMRQgXWW8tvn46YWuTDOpKroSPR9BEW0Gqdga2DHqz8Pwk6X5w==} 350 | cpu: [arm64] 351 | os: [darwin] 352 | 353 | '@rollup/rollup-darwin-x64@4.29.2': 354 | resolution: {integrity: sha512-e2rW9ng5O6+Mt3ht8fH0ljfjgSCC6ffmOipiLUgAnlK86CHIaiCdHCzHzmTkMj6vEkqAiRJ7ss6Ibn56B+RE5w==} 355 | cpu: [x64] 356 | os: [darwin] 357 | 358 | '@rollup/rollup-freebsd-arm64@4.29.2': 359 | resolution: {integrity: sha512-/xdNwZe+KesG6XJCK043EjEDZTacCtL4yurMZRLESIgHQdvtNyul3iz2Ab03ZJG0pQKbFTu681i+4ETMF9uE/Q==} 360 | cpu: [arm64] 361 | os: [freebsd] 362 | 363 | '@rollup/rollup-freebsd-x64@4.29.2': 364 | resolution: {integrity: sha512-eXKvpThGzREuAbc6qxnArHh8l8W4AyTcL8IfEnmx+bcnmaSGgjyAHbzZvHZI2csJ+e0MYddl7DX0X7g3sAuXDQ==} 365 | cpu: [x64] 366 | os: [freebsd] 367 | 368 | '@rollup/rollup-linux-arm-gnueabihf@4.29.2': 369 | resolution: {integrity: sha512-h4VgxxmzmtXLLYNDaUcQevCmPYX6zSj4SwKuzY7SR5YlnCBYsmvfYORXgiU8axhkFCDtQF3RW5LIXT8B14Qykg==} 370 | cpu: [arm] 371 | os: [linux] 372 | 373 | '@rollup/rollup-linux-arm-musleabihf@4.29.2': 374 | resolution: {integrity: sha512-EObwZ45eMmWZQ1w4N7qy4+G1lKHm6mcOwDa+P2+61qxWu1PtQJ/lz2CNJ7W3CkfgN0FQ7cBUy2tk6D5yR4KeXw==} 375 | cpu: [arm] 376 | os: [linux] 377 | 378 | '@rollup/rollup-linux-arm64-gnu@4.29.2': 379 | resolution: {integrity: sha512-Z7zXVHEXg1elbbYiP/29pPwlJtLeXzjrj4241/kCcECds8Zg9fDfURWbZHRIKrEriAPS8wnVtdl4ZJBvZr325w==} 380 | cpu: [arm64] 381 | os: [linux] 382 | 383 | '@rollup/rollup-linux-arm64-musl@4.29.2': 384 | resolution: {integrity: sha512-TF4kxkPq+SudS/r4zGPf0G08Bl7+NZcFrUSR3484WwsHgGgJyPQRLCNrQ/R5J6VzxfEeQR9XRpc8m2t7lD6SEQ==} 385 | cpu: [arm64] 386 | os: [linux] 387 | 388 | '@rollup/rollup-linux-loongarch64-gnu@4.29.2': 389 | resolution: {integrity: sha512-kO9Fv5zZuyj2zB2af4KA29QF6t7YSxKrY7sxZXfw8koDQj9bx5Tk5RjH+kWKFKok0wLGTi4bG117h31N+TIBEg==} 390 | cpu: [loong64] 391 | os: [linux] 392 | 393 | '@rollup/rollup-linux-powerpc64le-gnu@4.29.2': 394 | resolution: {integrity: sha512-gIh776X7UCBaetVJGdjXPFurGsdWwHHinwRnC5JlLADU8Yk0EdS/Y+dMO264OjJFo7MXQ5PX4xVFbxrwK8zLqA==} 395 | cpu: [ppc64] 396 | os: [linux] 397 | 398 | '@rollup/rollup-linux-riscv64-gnu@4.29.2': 399 | resolution: {integrity: sha512-YgikssQ5UNq1GoFKZydMEkhKbjlUq7G3h8j6yWXLBF24KyoA5BcMtaOUAXq5sydPmOPEqB6kCyJpyifSpCfQ0w==} 400 | cpu: [riscv64] 401 | os: [linux] 402 | 403 | '@rollup/rollup-linux-s390x-gnu@4.29.2': 404 | resolution: {integrity: sha512-9ouIR2vFWCyL0Z50dfnon5nOrpDdkTG9lNDs7MRaienQKlTyHcDxplmk3IbhFlutpifBSBr2H4rVILwmMLcaMA==} 405 | cpu: [s390x] 406 | os: [linux] 407 | 408 | '@rollup/rollup-linux-x64-gnu@4.29.2': 409 | resolution: {integrity: sha512-ckBBNRN/F+NoSUDENDIJ2U9UWmIODgwDB/vEXCPOMcsco1niTkxTXa6D2Y/pvCnpzaidvY2qVxGzLilNs9BSzw==} 410 | cpu: [x64] 411 | os: [linux] 412 | 413 | '@rollup/rollup-linux-x64-musl@4.29.2': 414 | resolution: {integrity: sha512-jycl1wL4AgM2aBFJFlpll/kGvAjhK8GSbEmFT5v3KC3rP/b5xZ1KQmv0vQQ8Bzb2ieFQ0kZFPRMbre/l3Bu9JA==} 415 | cpu: [x64] 416 | os: [linux] 417 | 418 | '@rollup/rollup-win32-arm64-msvc@4.29.2': 419 | resolution: {integrity: sha512-S2V0LlcOiYkNGlRAWZwwUdNgdZBfvsDHW0wYosYFV3c7aKgEVcbonetZXsHv7jRTTX+oY5nDYT4W6B1oUpMNOg==} 420 | cpu: [arm64] 421 | os: [win32] 422 | 423 | '@rollup/rollup-win32-ia32-msvc@4.29.2': 424 | resolution: {integrity: sha512-pW8kioj9H5f/UujdoX2atFlXNQ9aCfAxFRaa+mhczwcsusm6gGrSo4z0SLvqLF5LwFqFTjiLCCzGkNK/LE0utQ==} 425 | cpu: [ia32] 426 | os: [win32] 427 | 428 | '@rollup/rollup-win32-x64-msvc@4.29.2': 429 | resolution: {integrity: sha512-p6fTArexECPf6KnOHvJXRpAEq0ON1CBtzG/EY4zw08kCHk/kivBc5vUEtnCFNCHOpJZ2ne77fxwRLIKD4wuW2Q==} 430 | cpu: [x64] 431 | os: [win32] 432 | 433 | '@sideway/address@4.1.5': 434 | resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} 435 | 436 | '@sideway/formula@3.0.1': 437 | resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} 438 | 439 | '@sideway/pinpoint@2.0.0': 440 | resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} 441 | 442 | '@sinclair/typebox@0.34.14': 443 | resolution: {integrity: sha512-TJ7Al17j3+by5y2QkTLcF/oBVMbgXBhILVgi9PuwpxQVZZvGh5BFRzWbJPmZVNKpbRLjuMzFuRwR+tdFPqCkvA==} 444 | 445 | '@sveltejs/adapter-auto@3.3.1': 446 | resolution: {integrity: sha512-5Sc7WAxYdL6q9j/+D0jJKjGREGlfIevDyHSQ2eNETHcB1TKlQWHcAo8AS8H1QdjNvSXpvOwNjykDUHPEAyGgdQ==} 447 | peerDependencies: 448 | '@sveltejs/kit': ^2.0.0 449 | 450 | '@sveltejs/kit@2.7.3': 451 | resolution: {integrity: sha512-Vx7nq5MJ86I8qXYsVidC5PX6xm+uxt8DydvOdmJoyOK7LvGP18OFEG359yY+aa51t6pENvqZAMqAREQQx1OI2Q==} 452 | engines: {node: '>=18.13'} 453 | hasBin: true 454 | peerDependencies: 455 | '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 456 | svelte: ^4.0.0 || ^5.0.0-next.0 457 | vite: ^5.0.3 458 | 459 | '@sveltejs/package@2.3.7': 460 | resolution: {integrity: sha512-LYgUkde5GUYqOpXbcoCGUpEH4Ctl3Wj4u4CVZBl56dEeLW5fGHE037ZL1qlK0Ky+QD5uUfwONSeGwIOIighFMQ==} 461 | engines: {node: ^16.14 || >=18} 462 | hasBin: true 463 | peerDependencies: 464 | svelte: ^3.44.0 || ^4.0.0 || ^5.0.0-next.1 465 | 466 | '@sveltejs/vite-plugin-svelte-inspector@2.1.0': 467 | resolution: {integrity: sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==} 468 | engines: {node: ^18.0.0 || >=20} 469 | peerDependencies: 470 | '@sveltejs/vite-plugin-svelte': ^3.0.0 471 | svelte: ^4.0.0 || ^5.0.0-next.0 472 | vite: ^5.0.0 473 | 474 | '@sveltejs/vite-plugin-svelte@3.1.2': 475 | resolution: {integrity: sha512-Txsm1tJvtiYeLUVRNqxZGKR/mI+CzuIQuc2gn+YCs9rMTowpNZ2Nqt53JdL8KF9bLhAf2ruR/dr9eZCwdTriRA==} 476 | engines: {node: ^18.0.0 || >=20} 477 | peerDependencies: 478 | svelte: ^4.0.0 || ^5.0.0-next.0 479 | vite: ^5.0.0 480 | 481 | '@types/cookie@0.6.0': 482 | resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} 483 | 484 | '@types/estree@1.0.6': 485 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 486 | 487 | '@types/json-schema@7.0.15': 488 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 489 | 490 | '@types/validator@13.12.2': 491 | resolution: {integrity: sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA==} 492 | 493 | '@typeschema/class-validator@0.3.0': 494 | resolution: {integrity: sha512-OJSFeZDIQ8EK1HTljKLT5CItM2wsbgczLN8tMEfz3I1Lmhc5TBfkZ0eikFzUC16tI3d1Nag7um6TfCgp2I2Bww==} 495 | peerDependencies: 496 | class-validator: ^0.14.1 497 | peerDependenciesMeta: 498 | class-validator: 499 | optional: true 500 | 501 | '@typeschema/core@0.14.0': 502 | resolution: {integrity: sha512-Ia6PtZHcL3KqsAWXjMi5xIyZ7XMH4aSnOQes8mfMLx+wGFGtGRNlwe6Y7cYvX+WfNK67OL0/HSe9t8QDygV0/w==} 503 | peerDependencies: 504 | '@types/json-schema': ^7.0.15 505 | peerDependenciesMeta: 506 | '@types/json-schema': 507 | optional: true 508 | 509 | '@vinejs/compiler@2.5.1': 510 | resolution: {integrity: sha512-efiO/SCQSMCqz6LDZTI4R3Ceq1ik3K2IqefEbbch+ko4dZncaYmQWJpX/fXVwgmO78jTZuerzD4I2WphPJUCwg==} 511 | engines: {node: '>=18.0.0'} 512 | 513 | '@vinejs/vine@2.1.0': 514 | resolution: {integrity: sha512-09aJ2OauxpblqiNqd8qC9RAzzm5SV6fTqZhE4e25j4cM7fmNoXRTjM7Oo8llFADMO4eSA44HqYEO3mkRRYdbYw==} 515 | engines: {node: '>=18.16.0'} 516 | 517 | acorn@8.14.0: 518 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 519 | engines: {node: '>=0.4.0'} 520 | hasBin: true 521 | 522 | aria-query@5.3.2: 523 | resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} 524 | engines: {node: '>= 0.4'} 525 | 526 | arktype@2.0.0-rc.26: 527 | resolution: {integrity: sha512-OdV40SQNY0CFJH+anT0N7Go9Tl+av+hxzMGPccv47sPHdekZuEPd61MfNmwn1J5H2SIrycdwGPD8jYBZSkhKjQ==} 528 | 529 | axobject-query@4.1.0: 530 | resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} 531 | engines: {node: '>= 0.4'} 532 | 533 | balanced-match@1.0.2: 534 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 535 | 536 | brace-expansion@2.0.1: 537 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 538 | 539 | braces@3.0.3: 540 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 541 | engines: {node: '>=8'} 542 | 543 | buffer-from@1.1.2: 544 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 545 | 546 | camelcase@8.0.0: 547 | resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} 548 | engines: {node: '>=16'} 549 | 550 | chokidar@4.0.3: 551 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 552 | engines: {node: '>= 14.16.0'} 553 | 554 | class-validator@0.14.1: 555 | resolution: {integrity: sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==} 556 | 557 | code-red@1.0.4: 558 | resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} 559 | 560 | cookie@0.6.0: 561 | resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} 562 | engines: {node: '>= 0.6'} 563 | 564 | css-tree@2.3.1: 565 | resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} 566 | engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} 567 | 568 | dayjs@1.11.13: 569 | resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} 570 | 571 | debug@4.4.0: 572 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 573 | engines: {node: '>=6.0'} 574 | peerDependencies: 575 | supports-color: '*' 576 | peerDependenciesMeta: 577 | supports-color: 578 | optional: true 579 | 580 | dedent-js@1.0.1: 581 | resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} 582 | 583 | deepmerge@4.3.1: 584 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 585 | engines: {node: '>=0.10.0'} 586 | 587 | detect-libc@1.0.3: 588 | resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} 589 | engines: {node: '>=0.10'} 590 | hasBin: true 591 | 592 | devalue@5.1.1: 593 | resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} 594 | 595 | dlv@1.1.3: 596 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 597 | 598 | effect@3.12.5: 599 | resolution: {integrity: sha512-hP+ev9NTjYcvySbPOOgrYiwCYxiIcjuvtR8WXMoSZEZEshOyQlDwgo1Z56kVezv1rTxz20PEGVqZGlXwxe6Ofw==} 600 | 601 | esbuild-runner@2.2.2: 602 | resolution: {integrity: sha512-fRFVXcmYVmSmtYm2mL8RlUASt2TDkGh3uRcvHFOKNr/T58VrfVeKD9uT9nlgxk96u0LS0ehS/GY7Da/bXWKkhw==} 603 | hasBin: true 604 | peerDependencies: 605 | esbuild: '*' 606 | 607 | esbuild@0.21.5: 608 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 609 | engines: {node: '>=12'} 610 | hasBin: true 611 | 612 | esm-env@1.2.1: 613 | resolution: {integrity: sha512-U9JedYYjCnadUlXk7e1Kr+aENQhtUaoaV9+gZm1T8LC/YBAPJx3NSPIAurFOC0U5vrdSevnUJS2/wUVxGwPhng==} 614 | 615 | estree-walker@3.0.3: 616 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 617 | 618 | fast-check@3.23.2: 619 | resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} 620 | engines: {node: '>=8.0.0'} 621 | 622 | fdir@6.4.2: 623 | resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} 624 | peerDependencies: 625 | picomatch: ^3 || ^4 626 | peerDependenciesMeta: 627 | picomatch: 628 | optional: true 629 | 630 | fill-range@7.1.1: 631 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 632 | engines: {node: '>=8'} 633 | 634 | fs.realpath@1.0.0: 635 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 636 | 637 | fsevents@2.3.3: 638 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 639 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 640 | os: [darwin] 641 | 642 | ghostsui@1.6.0: 643 | resolution: {integrity: sha512-gXg1akgRnWEmbDCbEN+5q8laXJOJdP8RqqKhpPaxk3ql0U2LEF5bfBr3wQ59LbdwdwpSK9WspOJ5Crgq2Ploow==} 644 | 645 | glob@8.1.0: 646 | resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} 647 | engines: {node: '>=12'} 648 | deprecated: Glob versions prior to v9 are no longer supported 649 | 650 | globalyzer@0.1.0: 651 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} 652 | 653 | globrex@0.1.2: 654 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 655 | 656 | greset@2.0.0: 657 | resolution: {integrity: sha512-oC3JpE4RUT3iMkkmu5uzWc0H8prJAN3Nv7kcxPlJUtWBQi16UpPm6dxseIeC+KKlevxoSBzuTQeFi71qAjWHxA==} 658 | 659 | ignore-walk@5.0.1: 660 | resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==} 661 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 662 | 663 | immutable@5.0.3: 664 | resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} 665 | 666 | import-meta-resolve@4.1.0: 667 | resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} 668 | 669 | inflight@1.0.6: 670 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 671 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 672 | 673 | inherits@2.0.4: 674 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 675 | 676 | is-extglob@2.1.1: 677 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 678 | engines: {node: '>=0.10.0'} 679 | 680 | is-glob@4.0.3: 681 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 682 | engines: {node: '>=0.10.0'} 683 | 684 | is-number@7.0.0: 685 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 686 | engines: {node: '>=0.12.0'} 687 | 688 | is-reference@3.0.3: 689 | resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} 690 | 691 | joi@17.13.3: 692 | resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} 693 | 694 | json-schema-to-ts@3.1.1: 695 | resolution: {integrity: sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==} 696 | engines: {node: '>=16'} 697 | 698 | kleur@4.1.5: 699 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 700 | engines: {node: '>=6'} 701 | 702 | libphonenumber-js@1.11.18: 703 | resolution: {integrity: sha512-okMm/MCoFrm1vByeVFLBdkFIXLSHy/AIK2AEGgY3eoicfWZeOZqv3GfhtQgICkzs/tqorAMm3a4GBg5qNCrqzg==} 704 | 705 | locate-character@3.0.0: 706 | resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} 707 | 708 | lower-case@2.0.2: 709 | resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} 710 | 711 | magic-string@0.30.17: 712 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 713 | 714 | mdn-data@2.0.30: 715 | resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} 716 | 717 | memoize-weak@1.0.2: 718 | resolution: {integrity: sha512-gj39xkrjEw7nCn4nJ1M5ms6+MyMlyiGmttzsqAUsAKn6bYKwuTHh/AO3cKPF8IBrTIYTxb0wWXFs3E//Y8VoWQ==} 719 | 720 | micromatch@4.0.8: 721 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 722 | engines: {node: '>=8.6'} 723 | 724 | minimatch@5.1.6: 725 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} 726 | engines: {node: '>=10'} 727 | 728 | mri@1.2.0: 729 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 730 | engines: {node: '>=4'} 731 | 732 | mrmime@2.0.0: 733 | resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} 734 | engines: {node: '>=10'} 735 | 736 | ms@2.1.3: 737 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 738 | 739 | nanoid@3.3.8: 740 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 741 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 742 | hasBin: true 743 | 744 | no-case@3.0.4: 745 | resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} 746 | 747 | node-addon-api@7.1.1: 748 | resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} 749 | 750 | normalize-url@8.0.1: 751 | resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} 752 | engines: {node: '>=14.16'} 753 | 754 | npm-bundled@2.0.1: 755 | resolution: {integrity: sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==} 756 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 757 | 758 | npm-normalize-package-bin@2.0.0: 759 | resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==} 760 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 761 | 762 | npm-packlist@5.1.3: 763 | resolution: {integrity: sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==} 764 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 765 | hasBin: true 766 | 767 | once@1.4.0: 768 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 769 | 770 | pascal-case@3.1.2: 771 | resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} 772 | 773 | periscopic@3.1.0: 774 | resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} 775 | 776 | picocolors@1.1.1: 777 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 778 | 779 | picomatch@2.3.1: 780 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 781 | engines: {node: '>=8.6'} 782 | 783 | postcss-value-parser@4.2.0: 784 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 785 | 786 | postcss@8.4.49: 787 | resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} 788 | engines: {node: ^10 || ^12 || >=14} 789 | 790 | prettier-plugin-svelte@3.3.2: 791 | resolution: {integrity: sha512-kRPjH8wSj2iu+dO+XaUv4vD8qr5mdDmlak3IT/7AOgGIMRG86z/EHOLauFcClKEnOUf4A4nOA7sre5KrJD4Raw==} 792 | peerDependencies: 793 | prettier: ^3.0.0 794 | svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 795 | 796 | prettier@3.4.2: 797 | resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} 798 | engines: {node: '>=14'} 799 | hasBin: true 800 | 801 | property-expr@2.0.6: 802 | resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} 803 | 804 | publint@0.2.12: 805 | resolution: {integrity: sha512-YNeUtCVeM4j9nDiTT2OPczmlyzOkIXNtdDZnSuajAxS/nZ6j3t7Vs9SUB4euQNddiltIwu7Tdd3s+hr08fAsMw==} 806 | engines: {node: '>=16'} 807 | hasBin: true 808 | 809 | pure-rand@6.1.0: 810 | resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} 811 | 812 | readdirp@4.0.2: 813 | resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} 814 | engines: {node: '>= 14.16.0'} 815 | 816 | regenerator-runtime@0.14.1: 817 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 818 | 819 | rfs@9.0.6: 820 | resolution: {integrity: sha512-KQ0EGVP4l3B3ynUZ1UNX3UoRAeswiX+ljGRcT+MoJKXRwXSUFpVZIPsqurH9pmY/AOGBFq7KKBq9fhRCkkg+SQ==} 821 | engines: {node: '>=8'} 822 | 823 | rollup@4.29.2: 824 | resolution: {integrity: sha512-tJXpsEkzsEzyAKIaB3qv3IuvTVcTN7qBw1jL4SPPXM3vzDrJgiLGFY6+HodgFaUHAJ2RYJ94zV5MKRJCoQzQeA==} 825 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 826 | hasBin: true 827 | 828 | sade@1.8.1: 829 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 830 | engines: {node: '>=6'} 831 | 832 | sass-hex-rgb@1.0.1: 833 | resolution: {integrity: sha512-yxHIGddIE+HPvS86Y2imuu/J4LZmss0K9/Dpos38gAC21ThbZLwE4PeA/2mN3ZLH3gXhHxBtjxf6Oi1GAIrMag==} 834 | 835 | sass@1.83.1: 836 | resolution: {integrity: sha512-EVJbDaEs4Rr3F0glJzFSOvtg2/oy2V/YrGFPqPY24UqcLDWcI9ZY5sN+qyO3c/QCZwzgfirvhXvINiJCE/OLcA==} 837 | engines: {node: '>=14.0.0'} 838 | hasBin: true 839 | 840 | semver@7.6.3: 841 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 842 | engines: {node: '>=10'} 843 | hasBin: true 844 | 845 | set-cookie-parser@2.7.1: 846 | resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} 847 | 848 | sirv@3.0.0: 849 | resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} 850 | engines: {node: '>=18'} 851 | 852 | source-map-js@1.2.1: 853 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 854 | engines: {node: '>=0.10.0'} 855 | 856 | source-map-support@0.5.21: 857 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 858 | 859 | source-map@0.6.1: 860 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 861 | engines: {node: '>=0.10.0'} 862 | 863 | superstruct@2.0.2: 864 | resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} 865 | engines: {node: '>=14.0.0'} 866 | 867 | svelte-check@4.1.1: 868 | resolution: {integrity: sha512-NfaX+6Qtc8W/CyVGS/F7/XdiSSyXz+WGYA9ZWV3z8tso14V2vzjfXviKaTFEzB7g8TqfgO2FOzP6XT4ApSTUTw==} 869 | engines: {node: '>= 18.0.0'} 870 | hasBin: true 871 | peerDependencies: 872 | svelte: ^4.0.0 || ^5.0.0-next.0 873 | typescript: '>=5.0.0' 874 | 875 | svelte-hmr@0.16.0: 876 | resolution: {integrity: sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==} 877 | engines: {node: ^12.20 || ^14.13.1 || >= 16} 878 | peerDependencies: 879 | svelte: ^3.19.0 || ^4.0.0 880 | 881 | svelte2tsx@0.7.31: 882 | resolution: {integrity: sha512-exrN1o9mdCLAA7hTCudz731FIxomH/0SN9ZIX+WrY/XnlLuno/NNC1PF6JXPZVqp/4sMMDKteqyKoG44hliljQ==} 883 | peerDependencies: 884 | svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 885 | typescript: ^4.9.4 || ^5.0.0 886 | 887 | svelte@4.2.19: 888 | resolution: {integrity: sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==} 889 | engines: {node: '>=16'} 890 | 891 | sveltekit-superforms@2.22.1: 892 | resolution: {integrity: sha512-SSePlvvEAo0eChLw1V9R1XdwwbE/XAOWTfzQOM01bFNT2IQGH5gy0wQkBffPKbDLZ7HYoRVao7spblTPBwyylA==} 893 | peerDependencies: 894 | '@sveltejs/kit': 1.x || 2.x 895 | svelte: 3.x || 4.x || >=5.0.0-next.51 896 | 897 | tiny-case@1.0.3: 898 | resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==} 899 | 900 | tiny-glob@0.2.9: 901 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} 902 | 903 | to-regex-range@5.0.1: 904 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 905 | engines: {node: '>=8.0'} 906 | 907 | toposort@2.0.2: 908 | resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} 909 | 910 | totalist@3.0.1: 911 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 912 | engines: {node: '>=6'} 913 | 914 | ts-algebra@2.0.0: 915 | resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==} 916 | 917 | ts-deepmerge@7.0.2: 918 | resolution: {integrity: sha512-akcpDTPuez4xzULo5NwuoKwYRtjQJ9eoNfBACiBMaXwNAx7B1PKfe5wqUFJuW5uKzQ68YjDFwPaWHDG1KnFGsA==} 919 | engines: {node: '>=14.13.1'} 920 | 921 | tslib@2.4.0: 922 | resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} 923 | 924 | tslib@2.8.1: 925 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 926 | 927 | turnstile-types@1.2.3: 928 | resolution: {integrity: sha512-EDjhDB9TDwda2JRbhzO/kButPio3JgrC3gXMVAMotxldybTCJQVMvPNJ89rcAiN9vIrCb2i1E+VNBCqB8wue0A==} 929 | 930 | type-fest@2.19.0: 931 | resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} 932 | engines: {node: '>=12.20'} 933 | 934 | typescript@5.7.2: 935 | resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} 936 | engines: {node: '>=14.17'} 937 | hasBin: true 938 | 939 | valibot@0.31.1: 940 | resolution: {integrity: sha512-2YYIhPrnVSz/gfT2/iXVTrSj92HwchCt9Cga/6hX4B26iCz9zkIsGTS0HjDYTZfTi1Un0X6aRvhBi1cfqs/i0Q==} 941 | 942 | valibot@1.0.0-beta.12: 943 | resolution: {integrity: sha512-j3WIxJ0pmUFMfdfUECn3YnZPYOiG0yHYcFEa/+RVgo0I+MXE3ToLt7gNRLtY5pwGfgNmsmhenGZfU5suu9ijUA==} 944 | peerDependencies: 945 | typescript: '>=5' 946 | peerDependenciesMeta: 947 | typescript: 948 | optional: true 949 | 950 | validator@13.12.0: 951 | resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} 952 | engines: {node: '>= 0.10'} 953 | 954 | vite@5.4.11: 955 | resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} 956 | engines: {node: ^18.0.0 || >=20.0.0} 957 | hasBin: true 958 | peerDependencies: 959 | '@types/node': ^18.0.0 || >=20.0.0 960 | less: '*' 961 | lightningcss: ^1.21.0 962 | sass: '*' 963 | sass-embedded: '*' 964 | stylus: '*' 965 | sugarss: '*' 966 | terser: ^5.4.0 967 | peerDependenciesMeta: 968 | '@types/node': 969 | optional: true 970 | less: 971 | optional: true 972 | lightningcss: 973 | optional: true 974 | sass: 975 | optional: true 976 | sass-embedded: 977 | optional: true 978 | stylus: 979 | optional: true 980 | sugarss: 981 | optional: true 982 | terser: 983 | optional: true 984 | 985 | vitefu@0.2.5: 986 | resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} 987 | peerDependencies: 988 | vite: ^3.0.0 || ^4.0.0 || ^5.0.0 989 | peerDependenciesMeta: 990 | vite: 991 | optional: true 992 | 993 | wrappy@1.0.2: 994 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 995 | 996 | yup@1.6.1: 997 | resolution: {integrity: sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA==} 998 | 999 | zod-to-json-schema@3.24.1: 1000 | resolution: {integrity: sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==} 1001 | peerDependencies: 1002 | zod: ^3.24.1 1003 | 1004 | zod@3.24.1: 1005 | resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} 1006 | 1007 | snapshots: 1008 | 1009 | '@ampproject/remapping@2.3.0': 1010 | dependencies: 1011 | '@jridgewell/gen-mapping': 0.3.8 1012 | '@jridgewell/trace-mapping': 0.3.25 1013 | 1014 | '@ark/schema@0.26.0': 1015 | dependencies: 1016 | '@ark/util': 0.26.0 1017 | optional: true 1018 | 1019 | '@ark/util@0.26.0': 1020 | optional: true 1021 | 1022 | '@babel/runtime@7.26.0': 1023 | dependencies: 1024 | regenerator-runtime: 0.14.1 1025 | optional: true 1026 | 1027 | '@esbuild/aix-ppc64@0.21.5': 1028 | optional: true 1029 | 1030 | '@esbuild/android-arm64@0.21.5': 1031 | optional: true 1032 | 1033 | '@esbuild/android-arm@0.21.5': 1034 | optional: true 1035 | 1036 | '@esbuild/android-x64@0.21.5': 1037 | optional: true 1038 | 1039 | '@esbuild/darwin-arm64@0.21.5': 1040 | optional: true 1041 | 1042 | '@esbuild/darwin-x64@0.21.5': 1043 | optional: true 1044 | 1045 | '@esbuild/freebsd-arm64@0.21.5': 1046 | optional: true 1047 | 1048 | '@esbuild/freebsd-x64@0.21.5': 1049 | optional: true 1050 | 1051 | '@esbuild/linux-arm64@0.21.5': 1052 | optional: true 1053 | 1054 | '@esbuild/linux-arm@0.21.5': 1055 | optional: true 1056 | 1057 | '@esbuild/linux-ia32@0.21.5': 1058 | optional: true 1059 | 1060 | '@esbuild/linux-loong64@0.21.5': 1061 | optional: true 1062 | 1063 | '@esbuild/linux-mips64el@0.21.5': 1064 | optional: true 1065 | 1066 | '@esbuild/linux-ppc64@0.21.5': 1067 | optional: true 1068 | 1069 | '@esbuild/linux-riscv64@0.21.5': 1070 | optional: true 1071 | 1072 | '@esbuild/linux-s390x@0.21.5': 1073 | optional: true 1074 | 1075 | '@esbuild/linux-x64@0.21.5': 1076 | optional: true 1077 | 1078 | '@esbuild/netbsd-x64@0.21.5': 1079 | optional: true 1080 | 1081 | '@esbuild/openbsd-x64@0.21.5': 1082 | optional: true 1083 | 1084 | '@esbuild/sunos-x64@0.21.5': 1085 | optional: true 1086 | 1087 | '@esbuild/win32-arm64@0.21.5': 1088 | optional: true 1089 | 1090 | '@esbuild/win32-ia32@0.21.5': 1091 | optional: true 1092 | 1093 | '@esbuild/win32-x64@0.21.5': 1094 | optional: true 1095 | 1096 | '@exodus/schemasafe@1.3.0': 1097 | optional: true 1098 | 1099 | '@gcornut/valibot-json-schema@0.31.0': 1100 | dependencies: 1101 | valibot: 0.31.1 1102 | optionalDependencies: 1103 | '@types/json-schema': 7.0.15 1104 | esbuild: 0.21.5 1105 | esbuild-runner: 2.2.2(esbuild@0.21.5) 1106 | optional: true 1107 | 1108 | '@hapi/hoek@9.3.0': 1109 | optional: true 1110 | 1111 | '@hapi/topo@5.1.0': 1112 | dependencies: 1113 | '@hapi/hoek': 9.3.0 1114 | optional: true 1115 | 1116 | '@jridgewell/gen-mapping@0.3.8': 1117 | dependencies: 1118 | '@jridgewell/set-array': 1.2.1 1119 | '@jridgewell/sourcemap-codec': 1.5.0 1120 | '@jridgewell/trace-mapping': 0.3.25 1121 | 1122 | '@jridgewell/resolve-uri@3.1.2': {} 1123 | 1124 | '@jridgewell/set-array@1.2.1': {} 1125 | 1126 | '@jridgewell/sourcemap-codec@1.5.0': {} 1127 | 1128 | '@jridgewell/trace-mapping@0.3.25': 1129 | dependencies: 1130 | '@jridgewell/resolve-uri': 3.1.2 1131 | '@jridgewell/sourcemap-codec': 1.5.0 1132 | 1133 | '@parcel/watcher-android-arm64@2.5.0': 1134 | optional: true 1135 | 1136 | '@parcel/watcher-darwin-arm64@2.5.0': 1137 | optional: true 1138 | 1139 | '@parcel/watcher-darwin-x64@2.5.0': 1140 | optional: true 1141 | 1142 | '@parcel/watcher-freebsd-x64@2.5.0': 1143 | optional: true 1144 | 1145 | '@parcel/watcher-linux-arm-glibc@2.5.0': 1146 | optional: true 1147 | 1148 | '@parcel/watcher-linux-arm-musl@2.5.0': 1149 | optional: true 1150 | 1151 | '@parcel/watcher-linux-arm64-glibc@2.5.0': 1152 | optional: true 1153 | 1154 | '@parcel/watcher-linux-arm64-musl@2.5.0': 1155 | optional: true 1156 | 1157 | '@parcel/watcher-linux-x64-glibc@2.5.0': 1158 | optional: true 1159 | 1160 | '@parcel/watcher-linux-x64-musl@2.5.0': 1161 | optional: true 1162 | 1163 | '@parcel/watcher-win32-arm64@2.5.0': 1164 | optional: true 1165 | 1166 | '@parcel/watcher-win32-ia32@2.5.0': 1167 | optional: true 1168 | 1169 | '@parcel/watcher-win32-x64@2.5.0': 1170 | optional: true 1171 | 1172 | '@parcel/watcher@2.5.0': 1173 | dependencies: 1174 | detect-libc: 1.0.3 1175 | is-glob: 4.0.3 1176 | micromatch: 4.0.8 1177 | node-addon-api: 7.1.1 1178 | optionalDependencies: 1179 | '@parcel/watcher-android-arm64': 2.5.0 1180 | '@parcel/watcher-darwin-arm64': 2.5.0 1181 | '@parcel/watcher-darwin-x64': 2.5.0 1182 | '@parcel/watcher-freebsd-x64': 2.5.0 1183 | '@parcel/watcher-linux-arm-glibc': 2.5.0 1184 | '@parcel/watcher-linux-arm-musl': 2.5.0 1185 | '@parcel/watcher-linux-arm64-glibc': 2.5.0 1186 | '@parcel/watcher-linux-arm64-musl': 2.5.0 1187 | '@parcel/watcher-linux-x64-glibc': 2.5.0 1188 | '@parcel/watcher-linux-x64-musl': 2.5.0 1189 | '@parcel/watcher-win32-arm64': 2.5.0 1190 | '@parcel/watcher-win32-ia32': 2.5.0 1191 | '@parcel/watcher-win32-x64': 2.5.0 1192 | optional: true 1193 | 1194 | '@polka/url@1.0.0-next.28': {} 1195 | 1196 | '@poppinss/macroable@1.0.4': 1197 | optional: true 1198 | 1199 | '@rollup/rollup-android-arm-eabi@4.29.2': 1200 | optional: true 1201 | 1202 | '@rollup/rollup-android-arm64@4.29.2': 1203 | optional: true 1204 | 1205 | '@rollup/rollup-darwin-arm64@4.29.2': 1206 | optional: true 1207 | 1208 | '@rollup/rollup-darwin-x64@4.29.2': 1209 | optional: true 1210 | 1211 | '@rollup/rollup-freebsd-arm64@4.29.2': 1212 | optional: true 1213 | 1214 | '@rollup/rollup-freebsd-x64@4.29.2': 1215 | optional: true 1216 | 1217 | '@rollup/rollup-linux-arm-gnueabihf@4.29.2': 1218 | optional: true 1219 | 1220 | '@rollup/rollup-linux-arm-musleabihf@4.29.2': 1221 | optional: true 1222 | 1223 | '@rollup/rollup-linux-arm64-gnu@4.29.2': 1224 | optional: true 1225 | 1226 | '@rollup/rollup-linux-arm64-musl@4.29.2': 1227 | optional: true 1228 | 1229 | '@rollup/rollup-linux-loongarch64-gnu@4.29.2': 1230 | optional: true 1231 | 1232 | '@rollup/rollup-linux-powerpc64le-gnu@4.29.2': 1233 | optional: true 1234 | 1235 | '@rollup/rollup-linux-riscv64-gnu@4.29.2': 1236 | optional: true 1237 | 1238 | '@rollup/rollup-linux-s390x-gnu@4.29.2': 1239 | optional: true 1240 | 1241 | '@rollup/rollup-linux-x64-gnu@4.29.2': 1242 | optional: true 1243 | 1244 | '@rollup/rollup-linux-x64-musl@4.29.2': 1245 | optional: true 1246 | 1247 | '@rollup/rollup-win32-arm64-msvc@4.29.2': 1248 | optional: true 1249 | 1250 | '@rollup/rollup-win32-ia32-msvc@4.29.2': 1251 | optional: true 1252 | 1253 | '@rollup/rollup-win32-x64-msvc@4.29.2': 1254 | optional: true 1255 | 1256 | '@sideway/address@4.1.5': 1257 | dependencies: 1258 | '@hapi/hoek': 9.3.0 1259 | optional: true 1260 | 1261 | '@sideway/formula@3.0.1': 1262 | optional: true 1263 | 1264 | '@sideway/pinpoint@2.0.0': 1265 | optional: true 1266 | 1267 | '@sinclair/typebox@0.34.14': 1268 | optional: true 1269 | 1270 | '@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.7.3(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)))(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)))': 1271 | dependencies: 1272 | '@sveltejs/kit': 2.7.3(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)))(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)) 1273 | import-meta-resolve: 4.1.0 1274 | 1275 | '@sveltejs/kit@2.7.3(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)))(svelte@4.2.19)(vite@5.4.11(sass@1.83.1))': 1276 | dependencies: 1277 | '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)) 1278 | '@types/cookie': 0.6.0 1279 | cookie: 0.6.0 1280 | devalue: 5.1.1 1281 | esm-env: 1.2.1 1282 | import-meta-resolve: 4.1.0 1283 | kleur: 4.1.5 1284 | magic-string: 0.30.17 1285 | mrmime: 2.0.0 1286 | sade: 1.8.1 1287 | set-cookie-parser: 2.7.1 1288 | sirv: 3.0.0 1289 | svelte: 4.2.19 1290 | tiny-glob: 0.2.9 1291 | vite: 5.4.11(sass@1.83.1) 1292 | 1293 | '@sveltejs/package@2.3.7(svelte@4.2.19)(typescript@5.7.2)': 1294 | dependencies: 1295 | chokidar: 4.0.3 1296 | kleur: 4.1.5 1297 | sade: 1.8.1 1298 | semver: 7.6.3 1299 | svelte: 4.2.19 1300 | svelte2tsx: 0.7.31(svelte@4.2.19)(typescript@5.7.2) 1301 | transitivePeerDependencies: 1302 | - typescript 1303 | 1304 | '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)))(svelte@4.2.19)(vite@5.4.11(sass@1.83.1))': 1305 | dependencies: 1306 | '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)) 1307 | debug: 4.4.0 1308 | svelte: 4.2.19 1309 | vite: 5.4.11(sass@1.83.1) 1310 | transitivePeerDependencies: 1311 | - supports-color 1312 | 1313 | '@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.11(sass@1.83.1))': 1314 | dependencies: 1315 | '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)))(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)) 1316 | debug: 4.4.0 1317 | deepmerge: 4.3.1 1318 | kleur: 4.1.5 1319 | magic-string: 0.30.17 1320 | svelte: 4.2.19 1321 | svelte-hmr: 0.16.0(svelte@4.2.19) 1322 | vite: 5.4.11(sass@1.83.1) 1323 | vitefu: 0.2.5(vite@5.4.11(sass@1.83.1)) 1324 | transitivePeerDependencies: 1325 | - supports-color 1326 | 1327 | '@types/cookie@0.6.0': {} 1328 | 1329 | '@types/estree@1.0.6': {} 1330 | 1331 | '@types/json-schema@7.0.15': 1332 | optional: true 1333 | 1334 | '@types/validator@13.12.2': 1335 | optional: true 1336 | 1337 | '@typeschema/class-validator@0.3.0(@types/json-schema@7.0.15)(class-validator@0.14.1)': 1338 | dependencies: 1339 | '@typeschema/core': 0.14.0(@types/json-schema@7.0.15) 1340 | optionalDependencies: 1341 | class-validator: 0.14.1 1342 | transitivePeerDependencies: 1343 | - '@types/json-schema' 1344 | optional: true 1345 | 1346 | '@typeschema/core@0.14.0(@types/json-schema@7.0.15)': 1347 | optionalDependencies: 1348 | '@types/json-schema': 7.0.15 1349 | optional: true 1350 | 1351 | '@vinejs/compiler@2.5.1': 1352 | optional: true 1353 | 1354 | '@vinejs/vine@2.1.0': 1355 | dependencies: 1356 | '@poppinss/macroable': 1.0.4 1357 | '@types/validator': 13.12.2 1358 | '@vinejs/compiler': 2.5.1 1359 | camelcase: 8.0.0 1360 | dayjs: 1.11.13 1361 | dlv: 1.1.3 1362 | normalize-url: 8.0.1 1363 | validator: 13.12.0 1364 | optional: true 1365 | 1366 | acorn@8.14.0: {} 1367 | 1368 | aria-query@5.3.2: {} 1369 | 1370 | arktype@2.0.0-rc.26: 1371 | dependencies: 1372 | '@ark/schema': 0.26.0 1373 | '@ark/util': 0.26.0 1374 | optional: true 1375 | 1376 | axobject-query@4.1.0: {} 1377 | 1378 | balanced-match@1.0.2: {} 1379 | 1380 | brace-expansion@2.0.1: 1381 | dependencies: 1382 | balanced-match: 1.0.2 1383 | 1384 | braces@3.0.3: 1385 | dependencies: 1386 | fill-range: 7.1.1 1387 | optional: true 1388 | 1389 | buffer-from@1.1.2: 1390 | optional: true 1391 | 1392 | camelcase@8.0.0: 1393 | optional: true 1394 | 1395 | chokidar@4.0.3: 1396 | dependencies: 1397 | readdirp: 4.0.2 1398 | 1399 | class-validator@0.14.1: 1400 | dependencies: 1401 | '@types/validator': 13.12.2 1402 | libphonenumber-js: 1.11.18 1403 | validator: 13.12.0 1404 | optional: true 1405 | 1406 | code-red@1.0.4: 1407 | dependencies: 1408 | '@jridgewell/sourcemap-codec': 1.5.0 1409 | '@types/estree': 1.0.6 1410 | acorn: 8.14.0 1411 | estree-walker: 3.0.3 1412 | periscopic: 3.1.0 1413 | 1414 | cookie@0.6.0: {} 1415 | 1416 | css-tree@2.3.1: 1417 | dependencies: 1418 | mdn-data: 2.0.30 1419 | source-map-js: 1.2.1 1420 | 1421 | dayjs@1.11.13: 1422 | optional: true 1423 | 1424 | debug@4.4.0: 1425 | dependencies: 1426 | ms: 2.1.3 1427 | 1428 | dedent-js@1.0.1: {} 1429 | 1430 | deepmerge@4.3.1: {} 1431 | 1432 | detect-libc@1.0.3: 1433 | optional: true 1434 | 1435 | devalue@5.1.1: {} 1436 | 1437 | dlv@1.1.3: 1438 | optional: true 1439 | 1440 | effect@3.12.5: 1441 | dependencies: 1442 | fast-check: 3.23.2 1443 | optional: true 1444 | 1445 | esbuild-runner@2.2.2(esbuild@0.21.5): 1446 | dependencies: 1447 | esbuild: 0.21.5 1448 | source-map-support: 0.5.21 1449 | tslib: 2.4.0 1450 | optional: true 1451 | 1452 | esbuild@0.21.5: 1453 | optionalDependencies: 1454 | '@esbuild/aix-ppc64': 0.21.5 1455 | '@esbuild/android-arm': 0.21.5 1456 | '@esbuild/android-arm64': 0.21.5 1457 | '@esbuild/android-x64': 0.21.5 1458 | '@esbuild/darwin-arm64': 0.21.5 1459 | '@esbuild/darwin-x64': 0.21.5 1460 | '@esbuild/freebsd-arm64': 0.21.5 1461 | '@esbuild/freebsd-x64': 0.21.5 1462 | '@esbuild/linux-arm': 0.21.5 1463 | '@esbuild/linux-arm64': 0.21.5 1464 | '@esbuild/linux-ia32': 0.21.5 1465 | '@esbuild/linux-loong64': 0.21.5 1466 | '@esbuild/linux-mips64el': 0.21.5 1467 | '@esbuild/linux-ppc64': 0.21.5 1468 | '@esbuild/linux-riscv64': 0.21.5 1469 | '@esbuild/linux-s390x': 0.21.5 1470 | '@esbuild/linux-x64': 0.21.5 1471 | '@esbuild/netbsd-x64': 0.21.5 1472 | '@esbuild/openbsd-x64': 0.21.5 1473 | '@esbuild/sunos-x64': 0.21.5 1474 | '@esbuild/win32-arm64': 0.21.5 1475 | '@esbuild/win32-ia32': 0.21.5 1476 | '@esbuild/win32-x64': 0.21.5 1477 | 1478 | esm-env@1.2.1: {} 1479 | 1480 | estree-walker@3.0.3: 1481 | dependencies: 1482 | '@types/estree': 1.0.6 1483 | 1484 | fast-check@3.23.2: 1485 | dependencies: 1486 | pure-rand: 6.1.0 1487 | optional: true 1488 | 1489 | fdir@6.4.2: {} 1490 | 1491 | fill-range@7.1.1: 1492 | dependencies: 1493 | to-regex-range: 5.0.1 1494 | optional: true 1495 | 1496 | fs.realpath@1.0.0: {} 1497 | 1498 | fsevents@2.3.3: 1499 | optional: true 1500 | 1501 | ghostsui@1.6.0: 1502 | dependencies: 1503 | greset: 2.0.0 1504 | sass-hex-rgb: 1.0.1 1505 | 1506 | glob@8.1.0: 1507 | dependencies: 1508 | fs.realpath: 1.0.0 1509 | inflight: 1.0.6 1510 | inherits: 2.0.4 1511 | minimatch: 5.1.6 1512 | once: 1.4.0 1513 | 1514 | globalyzer@0.1.0: {} 1515 | 1516 | globrex@0.1.2: {} 1517 | 1518 | greset@2.0.0: 1519 | dependencies: 1520 | rfs: 9.0.6 1521 | 1522 | ignore-walk@5.0.1: 1523 | dependencies: 1524 | minimatch: 5.1.6 1525 | 1526 | immutable@5.0.3: {} 1527 | 1528 | import-meta-resolve@4.1.0: {} 1529 | 1530 | inflight@1.0.6: 1531 | dependencies: 1532 | once: 1.4.0 1533 | wrappy: 1.0.2 1534 | 1535 | inherits@2.0.4: {} 1536 | 1537 | is-extglob@2.1.1: 1538 | optional: true 1539 | 1540 | is-glob@4.0.3: 1541 | dependencies: 1542 | is-extglob: 2.1.1 1543 | optional: true 1544 | 1545 | is-number@7.0.0: 1546 | optional: true 1547 | 1548 | is-reference@3.0.3: 1549 | dependencies: 1550 | '@types/estree': 1.0.6 1551 | 1552 | joi@17.13.3: 1553 | dependencies: 1554 | '@hapi/hoek': 9.3.0 1555 | '@hapi/topo': 5.1.0 1556 | '@sideway/address': 4.1.5 1557 | '@sideway/formula': 3.0.1 1558 | '@sideway/pinpoint': 2.0.0 1559 | optional: true 1560 | 1561 | json-schema-to-ts@3.1.1: 1562 | dependencies: 1563 | '@babel/runtime': 7.26.0 1564 | ts-algebra: 2.0.0 1565 | optional: true 1566 | 1567 | kleur@4.1.5: {} 1568 | 1569 | libphonenumber-js@1.11.18: 1570 | optional: true 1571 | 1572 | locate-character@3.0.0: {} 1573 | 1574 | lower-case@2.0.2: 1575 | dependencies: 1576 | tslib: 2.8.1 1577 | 1578 | magic-string@0.30.17: 1579 | dependencies: 1580 | '@jridgewell/sourcemap-codec': 1.5.0 1581 | 1582 | mdn-data@2.0.30: {} 1583 | 1584 | memoize-weak@1.0.2: {} 1585 | 1586 | micromatch@4.0.8: 1587 | dependencies: 1588 | braces: 3.0.3 1589 | picomatch: 2.3.1 1590 | optional: true 1591 | 1592 | minimatch@5.1.6: 1593 | dependencies: 1594 | brace-expansion: 2.0.1 1595 | 1596 | mri@1.2.0: {} 1597 | 1598 | mrmime@2.0.0: {} 1599 | 1600 | ms@2.1.3: {} 1601 | 1602 | nanoid@3.3.8: {} 1603 | 1604 | no-case@3.0.4: 1605 | dependencies: 1606 | lower-case: 2.0.2 1607 | tslib: 2.8.1 1608 | 1609 | node-addon-api@7.1.1: 1610 | optional: true 1611 | 1612 | normalize-url@8.0.1: 1613 | optional: true 1614 | 1615 | npm-bundled@2.0.1: 1616 | dependencies: 1617 | npm-normalize-package-bin: 2.0.0 1618 | 1619 | npm-normalize-package-bin@2.0.0: {} 1620 | 1621 | npm-packlist@5.1.3: 1622 | dependencies: 1623 | glob: 8.1.0 1624 | ignore-walk: 5.0.1 1625 | npm-bundled: 2.0.1 1626 | npm-normalize-package-bin: 2.0.0 1627 | 1628 | once@1.4.0: 1629 | dependencies: 1630 | wrappy: 1.0.2 1631 | 1632 | pascal-case@3.1.2: 1633 | dependencies: 1634 | no-case: 3.0.4 1635 | tslib: 2.8.1 1636 | 1637 | periscopic@3.1.0: 1638 | dependencies: 1639 | '@types/estree': 1.0.6 1640 | estree-walker: 3.0.3 1641 | is-reference: 3.0.3 1642 | 1643 | picocolors@1.1.1: {} 1644 | 1645 | picomatch@2.3.1: 1646 | optional: true 1647 | 1648 | postcss-value-parser@4.2.0: {} 1649 | 1650 | postcss@8.4.49: 1651 | dependencies: 1652 | nanoid: 3.3.8 1653 | picocolors: 1.1.1 1654 | source-map-js: 1.2.1 1655 | 1656 | prettier-plugin-svelte@3.3.2(prettier@3.4.2)(svelte@4.2.19): 1657 | dependencies: 1658 | prettier: 3.4.2 1659 | svelte: 4.2.19 1660 | 1661 | prettier@3.4.2: {} 1662 | 1663 | property-expr@2.0.6: 1664 | optional: true 1665 | 1666 | publint@0.2.12: 1667 | dependencies: 1668 | npm-packlist: 5.1.3 1669 | picocolors: 1.1.1 1670 | sade: 1.8.1 1671 | 1672 | pure-rand@6.1.0: 1673 | optional: true 1674 | 1675 | readdirp@4.0.2: {} 1676 | 1677 | regenerator-runtime@0.14.1: 1678 | optional: true 1679 | 1680 | rfs@9.0.6: 1681 | dependencies: 1682 | postcss-value-parser: 4.2.0 1683 | 1684 | rollup@4.29.2: 1685 | dependencies: 1686 | '@types/estree': 1.0.6 1687 | optionalDependencies: 1688 | '@rollup/rollup-android-arm-eabi': 4.29.2 1689 | '@rollup/rollup-android-arm64': 4.29.2 1690 | '@rollup/rollup-darwin-arm64': 4.29.2 1691 | '@rollup/rollup-darwin-x64': 4.29.2 1692 | '@rollup/rollup-freebsd-arm64': 4.29.2 1693 | '@rollup/rollup-freebsd-x64': 4.29.2 1694 | '@rollup/rollup-linux-arm-gnueabihf': 4.29.2 1695 | '@rollup/rollup-linux-arm-musleabihf': 4.29.2 1696 | '@rollup/rollup-linux-arm64-gnu': 4.29.2 1697 | '@rollup/rollup-linux-arm64-musl': 4.29.2 1698 | '@rollup/rollup-linux-loongarch64-gnu': 4.29.2 1699 | '@rollup/rollup-linux-powerpc64le-gnu': 4.29.2 1700 | '@rollup/rollup-linux-riscv64-gnu': 4.29.2 1701 | '@rollup/rollup-linux-s390x-gnu': 4.29.2 1702 | '@rollup/rollup-linux-x64-gnu': 4.29.2 1703 | '@rollup/rollup-linux-x64-musl': 4.29.2 1704 | '@rollup/rollup-win32-arm64-msvc': 4.29.2 1705 | '@rollup/rollup-win32-ia32-msvc': 4.29.2 1706 | '@rollup/rollup-win32-x64-msvc': 4.29.2 1707 | fsevents: 2.3.3 1708 | 1709 | sade@1.8.1: 1710 | dependencies: 1711 | mri: 1.2.0 1712 | 1713 | sass-hex-rgb@1.0.1: {} 1714 | 1715 | sass@1.83.1: 1716 | dependencies: 1717 | chokidar: 4.0.3 1718 | immutable: 5.0.3 1719 | source-map-js: 1.2.1 1720 | optionalDependencies: 1721 | '@parcel/watcher': 2.5.0 1722 | 1723 | semver@7.6.3: {} 1724 | 1725 | set-cookie-parser@2.7.1: {} 1726 | 1727 | sirv@3.0.0: 1728 | dependencies: 1729 | '@polka/url': 1.0.0-next.28 1730 | mrmime: 2.0.0 1731 | totalist: 3.0.1 1732 | 1733 | source-map-js@1.2.1: {} 1734 | 1735 | source-map-support@0.5.21: 1736 | dependencies: 1737 | buffer-from: 1.1.2 1738 | source-map: 0.6.1 1739 | optional: true 1740 | 1741 | source-map@0.6.1: 1742 | optional: true 1743 | 1744 | superstruct@2.0.2: 1745 | optional: true 1746 | 1747 | svelte-check@4.1.1(svelte@4.2.19)(typescript@5.7.2): 1748 | dependencies: 1749 | '@jridgewell/trace-mapping': 0.3.25 1750 | chokidar: 4.0.3 1751 | fdir: 6.4.2 1752 | picocolors: 1.1.1 1753 | sade: 1.8.1 1754 | svelte: 4.2.19 1755 | typescript: 5.7.2 1756 | transitivePeerDependencies: 1757 | - picomatch 1758 | 1759 | svelte-hmr@0.16.0(svelte@4.2.19): 1760 | dependencies: 1761 | svelte: 4.2.19 1762 | 1763 | svelte2tsx@0.7.31(svelte@4.2.19)(typescript@5.7.2): 1764 | dependencies: 1765 | dedent-js: 1.0.1 1766 | pascal-case: 3.1.2 1767 | svelte: 4.2.19 1768 | typescript: 5.7.2 1769 | 1770 | svelte@4.2.19: 1771 | dependencies: 1772 | '@ampproject/remapping': 2.3.0 1773 | '@jridgewell/sourcemap-codec': 1.5.0 1774 | '@jridgewell/trace-mapping': 0.3.25 1775 | '@types/estree': 1.0.6 1776 | acorn: 8.14.0 1777 | aria-query: 5.3.2 1778 | axobject-query: 4.1.0 1779 | code-red: 1.0.4 1780 | css-tree: 2.3.1 1781 | estree-walker: 3.0.3 1782 | is-reference: 3.0.3 1783 | locate-character: 3.0.0 1784 | magic-string: 0.30.17 1785 | periscopic: 3.1.0 1786 | 1787 | sveltekit-superforms@2.22.1(@sveltejs/kit@2.7.3(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)))(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)))(@types/json-schema@7.0.15)(svelte@4.2.19)(typescript@5.7.2): 1788 | dependencies: 1789 | '@sveltejs/kit': 2.7.3(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)))(svelte@4.2.19)(vite@5.4.11(sass@1.83.1)) 1790 | devalue: 5.1.1 1791 | memoize-weak: 1.0.2 1792 | svelte: 4.2.19 1793 | ts-deepmerge: 7.0.2 1794 | optionalDependencies: 1795 | '@exodus/schemasafe': 1.3.0 1796 | '@gcornut/valibot-json-schema': 0.31.0 1797 | '@sinclair/typebox': 0.34.14 1798 | '@typeschema/class-validator': 0.3.0(@types/json-schema@7.0.15)(class-validator@0.14.1) 1799 | '@vinejs/vine': 2.1.0 1800 | arktype: 2.0.0-rc.26 1801 | class-validator: 0.14.1 1802 | effect: 3.12.5 1803 | joi: 17.13.3 1804 | json-schema-to-ts: 3.1.1 1805 | superstruct: 2.0.2 1806 | valibot: 1.0.0-beta.12(typescript@5.7.2) 1807 | yup: 1.6.1 1808 | zod: 3.24.1 1809 | zod-to-json-schema: 3.24.1(zod@3.24.1) 1810 | transitivePeerDependencies: 1811 | - '@types/json-schema' 1812 | - typescript 1813 | 1814 | tiny-case@1.0.3: 1815 | optional: true 1816 | 1817 | tiny-glob@0.2.9: 1818 | dependencies: 1819 | globalyzer: 0.1.0 1820 | globrex: 0.1.2 1821 | 1822 | to-regex-range@5.0.1: 1823 | dependencies: 1824 | is-number: 7.0.0 1825 | optional: true 1826 | 1827 | toposort@2.0.2: 1828 | optional: true 1829 | 1830 | totalist@3.0.1: {} 1831 | 1832 | ts-algebra@2.0.0: 1833 | optional: true 1834 | 1835 | ts-deepmerge@7.0.2: {} 1836 | 1837 | tslib@2.4.0: 1838 | optional: true 1839 | 1840 | tslib@2.8.1: {} 1841 | 1842 | turnstile-types@1.2.3: {} 1843 | 1844 | type-fest@2.19.0: 1845 | optional: true 1846 | 1847 | typescript@5.7.2: {} 1848 | 1849 | valibot@0.31.1: 1850 | optional: true 1851 | 1852 | valibot@1.0.0-beta.12(typescript@5.7.2): 1853 | optionalDependencies: 1854 | typescript: 5.7.2 1855 | optional: true 1856 | 1857 | validator@13.12.0: 1858 | optional: true 1859 | 1860 | vite@5.4.11(sass@1.83.1): 1861 | dependencies: 1862 | esbuild: 0.21.5 1863 | postcss: 8.4.49 1864 | rollup: 4.29.2 1865 | optionalDependencies: 1866 | fsevents: 2.3.3 1867 | sass: 1.83.1 1868 | 1869 | vitefu@0.2.5(vite@5.4.11(sass@1.83.1)): 1870 | optionalDependencies: 1871 | vite: 5.4.11(sass@1.83.1) 1872 | 1873 | wrappy@1.0.2: {} 1874 | 1875 | yup@1.6.1: 1876 | dependencies: 1877 | property-expr: 2.0.6 1878 | tiny-case: 1.0.3 1879 | toposort: 2.0.2 1880 | type-fest: 2.19.0 1881 | optional: true 1882 | 1883 | zod-to-json-schema@3.24.1(zod@3.24.1): 1884 | dependencies: 1885 | zod: 3.24.1 1886 | optional: true 1887 | 1888 | zod@3.24.1: {} 1889 | -------------------------------------------------------------------------------- /src/app.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | // See https://kit.svelte.dev/docs/types#app 4 | // for information about these interfaces 5 | // and what to do when importing types 6 | declare namespace App { 7 | // interface Locals {} 8 | // interface PageData {} 9 | // interface Error {} 10 | // interface Platform {} 11 | } 12 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %sveltekit.head% 8 | 9 | 10 |
%sveltekit.body%
11 | 12 | 13 | -------------------------------------------------------------------------------- /src/lib/Turnstile.svelte: -------------------------------------------------------------------------------- 1 | 230 | 231 | {#if loaded && mounted} 232 |
236 |
237 | {/if} 238 | 239 | 244 | -------------------------------------------------------------------------------- /src/lib/index.ts: -------------------------------------------------------------------------------- 1 | export type * from './types.d'; 2 | 3 | // Export Turnstile component 4 | export { default as Turnstile } from './Turnstile.svelte'; 5 | 6 | import type { TurnstileOptions } from 'turnstile-types'; 7 | 8 | // Backwards compatibility (semver) for when we switched to turnstile-types 9 | export type TurnstileTheme = TurnstileOptions['theme']; 10 | export type TurnstileLanguage = TurnstileOptions['language']; 11 | export type TurnstileSize = TurnstileOptions['size']; 12 | -------------------------------------------------------------------------------- /src/lib/types.d.ts: -------------------------------------------------------------------------------- 1 | export interface Events { 2 | /** 3 | * Deprecated - use `callback` instead. 4 | * @deprecated 5 | */ 6 | 'turnstile-callback': { token: string; preClearanceObtained: boolean }; 7 | 8 | /** 9 | * Callback function invoked upon successful challenge completion. 10 | * @param detail - An object containing details about the event. 11 | * @param detail.token - The token received upon successful challenge completion. 12 | * @param detail.preClearanceObtained - Boolean indicating if the clearance was obtained. 13 | */ 14 | callback: { token: string; preClearanceObtained: boolean }; 15 | 16 | /** 17 | * Deprecated - use `error-callback` instead. 18 | * @deprecated 19 | */ 20 | 'turnstile-error': { code: string }; 21 | 22 | /** 23 | * Callback invoked when there is an error (e.g., network error, challenge failed). 24 | * @see [Client-side errors](https://developers.cloudflare.com/turnstile/reference/client-side-errors) 25 | * @param { code: string } - The error code passed upon an error. 26 | */ 27 | error: { code: string }; 28 | 29 | /** 30 | * Deprecated - use `expired` instead. 31 | * @deprecated 32 | */ 33 | 'turnstile-expired': {}; 34 | 35 | /** 36 | * Callback invoked when the token expires and does not reset the widget. 37 | */ 38 | expired: {}; 39 | 40 | /** 41 | * Deprecated - use `timeout` instead. 42 | * @deprecated 43 | */ 44 | 'turnstile-timeout': {}; 45 | 46 | /** 47 | * Callback invoked when the challenge expires. 48 | */ 49 | timeout: {}; 50 | 51 | /** 52 | * Callback invoked before the challenge enters interactive mode. 53 | */ 54 | 'before-interactive': {}; 55 | 56 | /** 57 | * Callback invoked when the challenge has left interactive mode. 58 | */ 59 | 'after-interactive': {}; 60 | 61 | /** 62 | * Callback invoked when a given client/browser is not supported. 63 | */ 64 | unsupported: {}; 65 | } 66 | -------------------------------------------------------------------------------- /src/routes/+layout.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 |
6 | 7 |
8 | 9 | 14 | -------------------------------------------------------------------------------- /src/routes/+page.server.ts: -------------------------------------------------------------------------------- 1 | import type { Actions } from './$types'; 2 | import { validateToken } from './utils'; 3 | 4 | export const actions: Actions = { 5 | default: async ({ request }) => { 6 | const data = await request.formData(); 7 | 8 | const token = data.get('cf-turnstile-response') as string; 9 | const secret = data.get('secret') as string; 10 | 11 | const { success, error } = await validateToken(token, secret); 12 | 13 | if (!success) { 14 | return { 15 | error: error || 'Invalid CAPTCHA', 16 | }; 17 | } 18 | 19 | return { 20 | valid: true, 21 | }; 22 | }, 23 | }; 24 | -------------------------------------------------------------------------------- /src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 15 | 16 |
17 | 28 | 29 | 46 | 47 | 56 | 57 | 66 |
67 | 68 |
69 |
70 | 71 | 72 | 73 |
74 | 75 | 76 |
77 | 78 | 79 |

80 | {#if form} 81 | {form.error ? `Error: ${form.error}` : 'Success'} 82 | {/if} 83 |

84 |
85 | 86 | 98 | -------------------------------------------------------------------------------- /src/routes/superforms/+page.server.ts: -------------------------------------------------------------------------------- 1 | import { fail, message, setError, superValidate } from 'sveltekit-superforms'; 2 | import { zod } from 'sveltekit-superforms/adapters'; 3 | import { validateToken } from '../utils'; 4 | import { schema } from './schema'; 5 | 6 | export const load = async () => { 7 | const form = await superValidate(zod(schema)); 8 | return { form }; 9 | }; 10 | 11 | export const actions = { 12 | pass: async ({ request }) => { 13 | const form = await superValidate(request, zod(schema)); 14 | if (!form.valid) return fail(400, { form }); 15 | 16 | const { success } = await validateToken( 17 | form.data['cf-turnstile-response'], 18 | // Use the always pass testing secret 19 | '1x0000000000000000000000000000000AA', 20 | ); 21 | 22 | if (!success) { 23 | return setError( 24 | form, 25 | 'cf-turnstile-response', 26 | 'Invalid turnstile, please try again', 27 | ); 28 | } 29 | 30 | return message(form, 'Success!'); 31 | }, 32 | fail: async ({ request }) => { 33 | const form = await superValidate(request, zod(schema)); 34 | if (!form.valid) return fail(400, { form }); 35 | 36 | const { success } = await validateToken( 37 | form.data['cf-turnstile-response'], 38 | // Use the always fail testing secret 39 | '2x0000000000000000000000000000000AA', 40 | ); 41 | 42 | if (!success) { 43 | return setError( 44 | form, 45 | 'cf-turnstile-response', 46 | 'Invalid turnstile, please try again', 47 | ); 48 | } 49 | 50 | return message(form, 'Success!'); 51 | }, 52 | }; 53 | -------------------------------------------------------------------------------- /src/routes/superforms/+page.svelte: -------------------------------------------------------------------------------- 1 | 21 | 22 |
23 |
24 | 25 | 31 | 32 | {#if $errors.name} 33 | {$errors.name} 34 | {/if} 35 | 36 | 37 | 38 | {#if $errors['cf-turnstile-response']} 39 | {$errors['cf-turnstile-response']} 40 | {/if} 41 | 42 |
43 | 44 | 45 |
46 | 47 |
48 | 49 |
50 | {#if $message} 51 |

{$message}

52 | {/if} 53 |
54 | -------------------------------------------------------------------------------- /src/routes/superforms/schema.ts: -------------------------------------------------------------------------------- 1 | import { z } from 'zod'; 2 | 3 | export const schema = z.object({ 4 | name: z.string().default('Hello world!'), 5 | 'cf-turnstile-response': z.string().nonempty('Please complete turnstile'), 6 | }); 7 | -------------------------------------------------------------------------------- /src/routes/utils.ts: -------------------------------------------------------------------------------- 1 | interface TokenValidateResponse { 2 | 'error-codes': string[]; 3 | success: boolean; 4 | action: string; 5 | cdata: string; 6 | } 7 | 8 | export async function validateToken(token: string, secret: string) { 9 | const response = await fetch( 10 | 'https://challenges.cloudflare.com/turnstile/v0/siteverify', 11 | { 12 | method: 'POST', 13 | headers: { 14 | 'content-type': 'application/json', 15 | }, 16 | body: JSON.stringify({ 17 | response: token, 18 | secret: secret, 19 | }), 20 | }, 21 | ); 22 | 23 | const data: TokenValidateResponse = await response.json(); 24 | 25 | return { 26 | success: data.success, 27 | error: data['error-codes']?.length ? data['error-codes'][0] : null, 28 | }; 29 | } 30 | -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghostdevv/svelte-turnstile/a0f97eb3a51d059a3ecd773e15bdb752f4f15aa5/static/favicon.png -------------------------------------------------------------------------------- /static/robots.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghostdevv/svelte-turnstile/a0f97eb3a51d059a3ecd773e15bdb752f4f15aa5/static/robots.txt -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; 2 | import adapter from '@sveltejs/adapter-auto'; 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | // Consult https://github.com/sveltejs/svelte-preprocess 7 | // for more information about preprocessors 8 | preprocess: vitePreprocess(), 9 | 10 | kit: { 11 | adapter: adapter(), 12 | }, 13 | }; 14 | 15 | export default config; 16 | -------------------------------------------------------------------------------- /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 | "strict": true, 12 | "verbatimModuleSyntax": true, 13 | "isolatedModules": true 14 | } 15 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias 16 | // 17 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes 18 | // from the referenced tsconfig.json - TypeScript does not merge them in 19 | } 20 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { sveltekit } from '@sveltejs/kit/vite'; 2 | import type { UserConfig } from 'vite'; 3 | 4 | const config: UserConfig = { 5 | plugins: [sveltekit()], 6 | }; 7 | 8 | export default config; 9 | --------------------------------------------------------------------------------