├── src
├── global.d.ts
├── lib
│ ├── _suspense-list
│ │ ├── status.ts
│ │ ├── util.ts
│ │ ├── context.ts
│ │ └── suspense-list.svelte
│ ├── index.ts
│ ├── _debounce.ts
│ └── _suspense
│ │ ├── context.svelte.ts
│ │ └── suspense.svelte
├── routes
│ ├── suspense-list
│ │ ├── status.svelte
│ │ ├── list.svelte
│ │ └── +page.svelte
│ ├── load-events
│ │ ├── delayed.svelte
│ │ └── +page.svelte
│ ├── social
│ │ ├── comments-skeleton.svelte
│ │ ├── post-skeleton.svelte
│ │ ├── img.svelte
│ │ ├── global.css
│ │ ├── post.svelte
│ │ ├── content.svelte
│ │ ├── +page.svelte
│ │ ├── spinner.svelte
│ │ ├── header.svelte
│ │ ├── sidebar.svelte
│ │ ├── comments.svelte
│ │ ├── posts.svelte
│ │ ├── friends.svelte
│ │ ├── api.ts
│ │ └── friend-card.svelte
│ ├── apples
│ │ ├── apple.svelte
│ │ ├── grid.svelte
│ │ ├── +page.svelte
│ │ └── selector.svelte
│ ├── interval
│ │ ├── +page.svelte
│ │ └── timer.svelte
│ ├── albums
│ │ ├── album-skeleton.svelte
│ │ ├── +page.svelte
│ │ ├── page-layout.svelte
│ │ ├── loading.svelte
│ │ ├── album-list.svelte
│ │ └── album.svelte
│ └── +page.svelte
└── app.html
├── .husky
├── pre-commit
├── post-checkout
└── post-merge
├── .gitignore
├── vite.config.js
├── tsconfig.json
├── .prettierrc
├── scripts
├── _util.js
├── prune-branches.js
├── post-checkout.js
└── pre-commit.js
├── svelte.config.js
├── .eslintrc.cjs
├── .github
└── workflows
│ └── publish.yml
├── package.json
├── README.md
└── pnpm-lock.yaml
/src/global.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | node ./scripts/pre-commit.js
3 |
--------------------------------------------------------------------------------
/.husky/post-checkout:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | node ./scripts/post-checkout.js $1 $2
3 |
--------------------------------------------------------------------------------
/.husky/post-merge:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | node ./scripts/post-checkout.js ORIG_HEAD HEAD
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /build
4 | /dist
5 | /.svelte-kit
6 | /package
7 |
--------------------------------------------------------------------------------
/src/lib/_suspense-list/status.ts:
--------------------------------------------------------------------------------
1 | export const enum STATUS {
2 | READY = 0,
3 | LOADING,
4 | HIDDEN,
5 | }
6 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { sveltekit } from '@sveltejs/kit/vite'
2 |
3 | /** @type {import('vite').UserConfig} */
4 | export default {
5 | plugins: [sveltekit()],
6 | }
7 |
--------------------------------------------------------------------------------
/src/lib/index.ts:
--------------------------------------------------------------------------------
1 | export { suspend } from './_suspense/context.svelte.js'
2 | export { default as Suspense } from './_suspense/suspense.svelte'
3 | export { default as SuspenseList } from './_suspense-list/suspense-list.svelte'
4 |
--------------------------------------------------------------------------------
/src/routes/suspense-list/status.svelte:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 | {state ? '✔️' : '⌛'}
10 |
11 |
--------------------------------------------------------------------------------
/src/routes/load-events/delayed.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 | Delayed
12 | This waited one second.
13 |
--------------------------------------------------------------------------------
/src/routes/social/comments-skeleton.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 | Loading comments...
8 |
9 |
10 |
17 |
--------------------------------------------------------------------------------
/src/routes/apples/apple.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 | {#await suspend(timer())}
13 | 🍎
14 | {/await}
15 |
--------------------------------------------------------------------------------
/src/app.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | %sveltekit.head%
8 |
9 |
10 | %sveltekit.body%
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/routes/interval/+page.svelte:
--------------------------------------------------------------------------------
1 |
5 |
6 | Interval
7 |
8 |
9 |
10 | {#snippet failed()}
11 | ERROR
12 | {/snippet}
13 |
14 | {#snippet loading()}
15 | Fetching...
16 | {/snippet}
17 |
18 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./.svelte-kit/tsconfig.json",
3 | "compilerOptions": {
4 | "forceConsistentCasingInFileNames": true,
5 | "moduleResolution": "Bundler",
6 | "noUnusedLocals": true,
7 | "noUnusedParameters": true,
8 | "strictNullChecks": true,
9 | "resolveJsonModule": true,
10 | "skipLibCheck": true,
11 | "target": "es2022"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": [
3 | "prettier-plugin-svelte",
4 | "@trivago/prettier-plugin-sort-imports"
5 | ],
6 | "importOrder": [
7 | "",
8 | "^\\w(.*)$",
9 | "^@(.*)$",
10 | "^\\$(.*)$",
11 | "^\\.(.*)$"
12 | ],
13 | "semi": false,
14 | "singleQuote": true,
15 | "svelteIndentScriptAndStyle": false,
16 | "trailingComma": "es5"
17 | }
18 |
--------------------------------------------------------------------------------
/src/routes/social/post-skeleton.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
20 |
--------------------------------------------------------------------------------
/src/lib/_debounce.ts:
--------------------------------------------------------------------------------
1 | import { tick } from 'svelte'
2 |
3 | export default function debounce unknown>(
4 | fn: Fn
5 | ) {
6 | let guard: unknown
7 |
8 | return async function (...args: Parameters) {
9 | const inner = {}
10 | guard = inner
11 |
12 | await tick()
13 |
14 | if (inner === guard) {
15 | fn(...args)
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/routes/social/img.svelte:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/routes/albums/album-skeleton.svelte:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
25 |
--------------------------------------------------------------------------------
/src/routes/social/global.css:
--------------------------------------------------------------------------------
1 | body {
2 | background: rgb(250, 250, 250);
3 | font-family:
4 | system-ui,
5 | -apple-system,
6 | BlinkMacSystemFont,
7 | 'Segoe UI',
8 | Roboto,
9 | 'Helvetica Neue',
10 | Arial,
11 | 'Noto Sans',
12 | sans-serif,
13 | 'Apple Color Emoji',
14 | 'Segoe UI Emoji',
15 | 'Segoe UI Symbol',
16 | 'Noto Color Emoji';
17 | margin: 0;
18 | }
19 |
--------------------------------------------------------------------------------
/src/routes/social/post.svelte:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
{post.title}
8 |
{post.body}
9 |
10 |
11 |
25 |
--------------------------------------------------------------------------------
/scripts/_util.js:
--------------------------------------------------------------------------------
1 | import { spawn } from 'cross-spawn'
2 |
3 | export async function run(cmd, args, pipe = false) {
4 | let output = ''
5 |
6 | const proc = spawn(cmd, args, pipe ? { stdio: 'inherit' } : undefined)
7 |
8 | proc.stdout?.on('data', (data) => {
9 | output += data
10 | })
11 |
12 | return new Promise((resolve) => {
13 | proc.on('close', () => {
14 | resolve(output)
15 | })
16 | })
17 | }
18 |
--------------------------------------------------------------------------------
/svelte.config.js:
--------------------------------------------------------------------------------
1 | import adapter from '@sveltejs/adapter-auto'
2 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'
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 |
--------------------------------------------------------------------------------
/src/routes/+page.svelte:
--------------------------------------------------------------------------------
1 | Suspense Examples
2 |
3 |
23 |
--------------------------------------------------------------------------------
/src/routes/load-events/+page.svelte:
--------------------------------------------------------------------------------
1 |
5 |
6 | console.log('Loaded Empty', element)}>
7 | Empty
8 | Nothing here.
9 |
10 |
11 | console.log('Loaded Delayed', element)}>
12 |
13 |
14 | {#snippet loading()}
15 | Loading...
16 | {/snippet}
17 |
18 |
--------------------------------------------------------------------------------
/scripts/prune-branches.js:
--------------------------------------------------------------------------------
1 | import { run } from './_util.js'
2 |
3 | const merged = await run('git', ['branch', '--merged', 'dev'])
4 | for (const line of merged.split('\n')) {
5 | // Never delete the active branch
6 | if (line.startsWith('*')) continue
7 |
8 | const branch = line.trim()
9 | if (!branch) continue
10 | // Never delete main
11 | if (branch === 'main') continue
12 | // Never delete dev
13 | if (branch === 'dev') continue
14 |
15 | await run('git', ['branch', '-d', branch], true)
16 | }
17 |
--------------------------------------------------------------------------------
/scripts/post-checkout.js:
--------------------------------------------------------------------------------
1 | import { run } from './_util.js'
2 |
3 | const previous_branch = process.argv[2]
4 | const new_branch = process.argv[3]
5 |
6 | const changes = await run('git', [
7 | 'diff-tree',
8 | '-r',
9 | '--name-only',
10 | '--no-commit-id',
11 | previous_branch,
12 | new_branch,
13 | ])
14 | if (changes.includes('package.json')) {
15 | console.log(
16 | '📦 package-lock.json changed. Running pnpm install to bring your dependencies up to date.'
17 | )
18 | await run('pnpm', ['install'], true)
19 | }
20 |
--------------------------------------------------------------------------------
/src/lib/_suspense/context.svelte.ts:
--------------------------------------------------------------------------------
1 | import { getContext, setContext as set } from 'svelte'
2 |
3 | const key = Symbol()
4 |
5 | export type Suspend = (data: T) => T
6 |
7 | export function setContext(value: Suspend) {
8 | set(key, value)
9 | }
10 |
11 | export function suspend(data: T): T {
12 | const interal_suspend = getContext(key)
13 | if (!interal_suspend) {
14 | console.error('`suspend` called outside of a Suspense boundary')
15 | return data
16 | }
17 |
18 | return interal_suspend(data)
19 | }
20 |
--------------------------------------------------------------------------------
/src/lib/_suspense-list/util.ts:
--------------------------------------------------------------------------------
1 | export function sortOnDocumentOrder(a: HTMLElement, b: HTMLElement) {
2 | if (a === b) {
3 | return 0
4 | }
5 |
6 | const position = a.compareDocumentPosition(b)
7 |
8 | if (
9 | position & Node.DOCUMENT_POSITION_FOLLOWING ||
10 | position & Node.DOCUMENT_POSITION_CONTAINED_BY
11 | ) {
12 | return -1
13 | } else if (
14 | position & Node.DOCUMENT_POSITION_PRECEDING ||
15 | position & Node.DOCUMENT_POSITION_CONTAINS
16 | ) {
17 | return 1
18 | } else {
19 | return 0
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/routes/apples/grid.svelte:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 | {#each Array(2000) as _}
8 |
9 |
10 |
11 | {#snippet loading()}
12 | ⌛
13 | {/snippet}
14 |
15 |
16 | {/each}
17 |
18 |
19 |
28 |
--------------------------------------------------------------------------------
/src/routes/interval/timer.svelte:
--------------------------------------------------------------------------------
1 |
20 |
21 | {#await suspend(data) then time}
22 | {time}
23 | {/await}
24 |
--------------------------------------------------------------------------------
/src/routes/albums/+page.svelte:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
10 |
11 |
12 | {#snippet loading()}
13 |
14 | {/snippet}
15 |
16 | {#snippet failed()}
17 | Error!
18 | {/snippet}
19 |
20 |
21 |
22 |
29 |
--------------------------------------------------------------------------------
/src/lib/_suspense-list/context.ts:
--------------------------------------------------------------------------------
1 | import { getContext as get, setContext as set } from 'svelte'
2 | import { STATUS } from './status.js'
3 |
4 | const key = {}
5 |
6 | export type SuspenseListContext = {
7 | status: STATUS
8 | }
9 | export type RegisterFunction = (data: {
10 | loaded: boolean
11 | }) => SuspenseListContext
12 |
13 | const mock: RegisterFunction = () => ({ status: STATUS.READY })
14 | export function getSuspenseListContext() {
15 | const register = get(key)
16 | return register || mock
17 | }
18 |
19 | export function setSuspenseListContext(value?: RegisterFunction) {
20 | set(key, value)
21 | }
22 |
--------------------------------------------------------------------------------
/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | parser: '@typescript-eslint/parser',
4 | extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'],
5 | plugins: ['svelte3', '@typescript-eslint'],
6 | overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }],
7 | settings: {
8 | 'svelte3/typescript': () => require('typescript'),
9 | },
10 | rules: {
11 | '@typescript-eslint/explicit-module-boundary-types': 'off',
12 | },
13 | parserOptions: {
14 | sourceType: 'module',
15 | ecmaVersion: 2019,
16 | },
17 | env: {
18 | browser: true,
19 | es2017: true,
20 | node: true,
21 | },
22 | }
23 |
--------------------------------------------------------------------------------
/scripts/pre-commit.js:
--------------------------------------------------------------------------------
1 | import { extname } from 'path'
2 | import { run } from './_util.js'
3 |
4 | const EXTENSIONS = new Set([
5 | '.css',
6 | '.html',
7 | '.js',
8 | '.json',
9 | '.md',
10 | '.svelte',
11 | '.ts',
12 | '.yaml',
13 | ])
14 |
15 | console.log('🧱 Formatting files...')
16 | const changes = await run('git', [
17 | 'diff',
18 | '--cached',
19 | '--name-only',
20 | '--diff-filter=ACM',
21 | ])
22 | const files = changes
23 | .split('\n')
24 | .filter((filename) => EXTENSIONS.has(extname(filename)))
25 | if (files.length) {
26 | await run('pnpx', ['prettier', '--write', ...files], true)
27 | await run('git', ['add', ...files])
28 | }
29 |
--------------------------------------------------------------------------------
/.github/workflows/publish.yml:
--------------------------------------------------------------------------------
1 | name: Publish
2 |
3 | on:
4 | release:
5 | types: [published]
6 |
7 | jobs:
8 | build:
9 | runs-on: ubuntu-latest
10 | steps:
11 | - uses: actions/checkout@v4
12 |
13 | - name: Use Node.js 20
14 | uses: actions/setup-node@v4
15 | with:
16 | node-version: 20
17 | registry-url: https://registry.npmjs.org/
18 |
19 | - name: Install pnpm
20 | uses: pnpm/action-setup@v4
21 |
22 | - run: pnpm install --frozen-lockfile
23 | - run: pnpm run package
24 | - run: pnpm publish --access public --no-git-checks
25 | env:
26 | NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
27 |
--------------------------------------------------------------------------------
/src/routes/apples/+page.svelte:
--------------------------------------------------------------------------------
1 |
12 |
13 | {' Demo'}
14 |
15 |
16 |
17 | {#if mode === 'without'}
18 |
19 | {/if}
20 | {#if mode === 'with'}
21 |
22 |
23 |
24 | {/if}
25 | {#if mode === 'collapse'}
26 |
27 |
28 |
29 | {/if}
30 |
31 |
36 |
--------------------------------------------------------------------------------
/src/routes/social/content.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | {#snippet loading()}
17 |
18 |
19 | {#await friend}
20 | Loading Friend...
21 | {:then friend}
22 | Loading {friend.name}...
23 | {/await}
24 |
25 | {/snippet}
26 |
27 |
28 |
29 |
34 |
--------------------------------------------------------------------------------
/src/routes/apples/selector.svelte:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 | {#each [['without', 'Without SuspenseList'], ['with', 'SuspenseList'], ['collapse', 'w/ collapse']] as [mode_, label]}
10 |
11 | (mode = mode_)}>
12 | {label}
13 |
14 |
15 | {/each}
16 |
17 |
18 |
40 |
--------------------------------------------------------------------------------
/src/routes/albums/page-layout.svelte:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 | Top 50 Albums from iTunes
11 | refresh++}> Reload
12 |
13 |
14 | {#key refresh}
15 | {@render children()}
16 | {/key}
17 |
18 |
40 |
--------------------------------------------------------------------------------
/src/routes/social/+page.svelte:
--------------------------------------------------------------------------------
1 |
17 |
18 | {#key $friend_id}
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | {/key}
28 |
29 |
39 |
--------------------------------------------------------------------------------
/src/routes/suspense-list/list.svelte:
--------------------------------------------------------------------------------
1 |
13 |
14 |
15 |
16 | {#each models as model}
17 |
18 |
19 |
20 |
21 | {#snippet loading()}
22 | 📦
23 | {/snippet}
24 |
25 |
26 | {/each}
27 |
28 |
29 |
30 |
39 |
--------------------------------------------------------------------------------
/src/routes/social/spinner.svelte:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
9 |
10 |
45 |
--------------------------------------------------------------------------------
/src/routes/albums/loading.svelte:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
13 |
48 |
--------------------------------------------------------------------------------
/src/routes/social/header.svelte:
--------------------------------------------------------------------------------
1 |
7 |
8 |
26 |
27 |
47 |
--------------------------------------------------------------------------------
/src/routes/albums/album-list.svelte:
--------------------------------------------------------------------------------
1 |
12 |
13 | {#await suspend(request) then albums}
14 |
15 |
16 | {#each albums as album}
17 |
18 |
19 |
20 | {#snippet loading()}
21 |
22 | {/snippet}
23 |
24 |
25 | {/each}
26 |
27 |
28 | {/await}
29 |
30 |
41 |
--------------------------------------------------------------------------------
/src/routes/social/sidebar.svelte:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 | Navigation
9 |
10 |
11 | Main
12 |
13 | Home
14 | About
15 |
16 |
17 |
18 |
22 |
23 |
24 | Events
25 |
26 | Create new
27 | View current
28 |
29 |
30 |
31 |
32 |
33 |
58 |
--------------------------------------------------------------------------------
/src/routes/social/comments.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 | {#await suspend(comments) then comments}
13 | {comments.length} replies
14 | {#each comments as comment}
15 |
16 |
17 | {comment.email}
18 | {comment.name}.
19 |
20 | {/each}
21 | {/await}
22 |
23 |
52 |
--------------------------------------------------------------------------------
/src/routes/social/posts.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 | {#await posts}
14 |
15 |
16 | {:then posts}
17 |
18 | {#each posts as post}
19 |
20 |
21 |
22 |
23 |
24 |
25 | {#snippet loading()}
26 |
27 |
28 |
29 |
30 | {/snippet}
31 |
32 | {/each}
33 |
34 | {/await}
35 |
36 |
37 |
55 |
--------------------------------------------------------------------------------
/src/routes/social/friends.svelte:
--------------------------------------------------------------------------------
1 |
9 |
10 | {#await suspend(friends) then friends}
11 |
12 | {#each friends as friend}
13 |
14 | ($friend_id = friend.id)}
17 | >
18 |
19 | {friend.name}
20 |
21 |
22 | {/each}
23 |
24 | {/await}
25 |
26 |
63 |
--------------------------------------------------------------------------------
/src/routes/social/api.ts:
--------------------------------------------------------------------------------
1 | import { getContext, setContext } from 'svelte'
2 |
3 | const CONTEXT = {}
4 | const friends = get(`/users?_limit=${rand(6, 5)}`).then((friends) => {
5 | return friends.map(setAvatar)
6 | })
7 |
8 | export function getResource() {
9 | return getContext(CONTEXT)
10 | }
11 |
12 | export function setResource(friend_id: number, friend_id_store) {
13 | const posts = get(`/posts/${friend_id}/posts?_limit=${rand(4, 4)}`, 1000)
14 | const friend = get(`/users/${friend_id}`, 500).then(setAvatar)
15 |
16 | const resource = {
17 | comments(post_id: number) {
18 | return get(`/posts/${post_id}/comments?_limit=${rand(1, 5)}`, 1500)
19 | },
20 | friend: () => friend,
21 | friends: () => friends,
22 | posts: () => posts,
23 | friend_id: friend_id_store,
24 | }
25 | setContext(CONTEXT, resource)
26 | return resource
27 | }
28 |
29 | async function get(url: string, timeout = 0) {
30 | const response = await fetch(`https://jsonplaceholder.typicode.com` + url)
31 | const json = await response.json()
32 | await new Promise((resolve) => {
33 | setTimeout(resolve, rand(timeout, 1000))
34 | })
35 | return json
36 | }
37 |
38 | function rand(start: number, range: number) {
39 | return start + Math.floor(Math.random() * range)
40 | }
41 |
42 | function setAvatar(friend) {
43 | friend.avatar = `https://i.pravatar.cc/256?img=${friend.id + 4}`
44 | return friend
45 | }
46 |
--------------------------------------------------------------------------------
/src/routes/albums/album.svelte:
--------------------------------------------------------------------------------
1 |
17 |
18 |
35 |
36 |
37 |
38 |
39 |
40 | {title}
41 | {artist}
42 |
43 |
44 |
45 |
46 |
72 |
--------------------------------------------------------------------------------
/src/routes/suspense-list/+page.svelte:
--------------------------------------------------------------------------------
1 |
40 |
41 | Stores
42 |
43 | {#each models as model}
44 |
45 | {/each}
46 |
47 |
48 | Suspense List
49 |
50 |
51 | Suspense List w/ Collapse
52 |
53 |
54 | Suspense List w/ Final
55 |
56 |
57 | Suspense List w/ Collapse & Final
58 |
59 |
60 |
69 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@svelte-drama/suspense",
3 | "type": "module",
4 | "description": "Put Svelte in Suspense",
5 | "license": "0BSD",
6 | "packageManager": "pnpm@10.2.0",
7 | "version": "2.0.1",
8 | "sideEffects": false,
9 | "scripts": {
10 | "dev": "vite dev",
11 | "package": "svelte-kit sync && svelte-package && publint",
12 | "prepare": "husky",
13 | "prepublishOnly": "npm run package",
14 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
15 | "format": "prettier --plugin prettier-plugin-svelte --write ."
16 | },
17 | "exports": {
18 | ".": {
19 | "types": "./dist/index.d.ts",
20 | "svelte": "./dist/index.js",
21 | "default": "./dist/index.js"
22 | }
23 | },
24 | "files": [
25 | "dist",
26 | "!dist/**/*.test.*",
27 | "!dist/**/*.spec.*"
28 | ],
29 | "peerDependencies": {
30 | "svelte": "^5.3.0"
31 | },
32 | "devDependencies": {
33 | "@sveltejs/adapter-auto": "^6.0.0",
34 | "@sveltejs/kit": "^2.20.8",
35 | "@sveltejs/package": "^2.3.11",
36 | "@sveltejs/vite-plugin-svelte": "^5.0.3",
37 | "@trivago/prettier-plugin-sort-imports": "^5.2.2",
38 | "cross-spawn": "^7.0.6",
39 | "husky": "^9.1.7",
40 | "prettier": "^3.5.3",
41 | "prettier-plugin-svelte": "^3.3.3",
42 | "publint": "^0.3.12",
43 | "svelte": "^5.28.2",
44 | "svelte-check": "^4.1.7",
45 | "tslib": "^2.8.1",
46 | "typescript": "^5.8.3",
47 | "vite": "^6.3.4"
48 | },
49 | "repository": {
50 | "type": "git",
51 | "url": "https://github.com/svelte-drama/suspense"
52 | },
53 | "keywords": [
54 | "svelte",
55 | "suspense"
56 | ],
57 | "svelte": "./dist/index.js",
58 | "types": "./dist/index.d.ts"
59 | }
60 |
--------------------------------------------------------------------------------
/src/routes/social/friend-card.svelte:
--------------------------------------------------------------------------------
1 |
8 |
9 | {#await suspend(friend) then friend}
10 |
11 |
15 |
16 |
17 |
18 |
{friend.name}
19 |
{friend.email}
20 |
21 |
22 |
23 |
24 |
25 |
{friend.website}
26 |
{friend.company.catchPhrase}
27 |
28 | {#await posts then posts}
29 | Has written {posts.length} posts
30 | {/await}
31 |
32 |
33 |
34 | {/await}
35 |
36 |
97 |
--------------------------------------------------------------------------------
/src/lib/_suspense-list/suspense-list.svelte:
--------------------------------------------------------------------------------
1 |
81 |
82 |
83 | {@render children?.(!loaded)}
84 |
85 |
86 |
91 |
--------------------------------------------------------------------------------
/src/lib/_suspense/suspense.svelte:
--------------------------------------------------------------------------------
1 |
112 |
113 |
114 | {getAsyncError()}
115 |
116 | {#if isBrowser}
117 |
121 | {@render children?.()}
122 |
123 | {/if}
124 |
125 | {#if list.status === STATUS.HIDDEN}
126 |
127 | {:else if !loaded || list.status === STATUS.LOADING}
128 | {@render renderLoading?.()}
129 | {/if}
130 |
131 | {#snippet failed(error, reset)}
132 | {@render renderError?.(error as Error, () => {
133 | async_error = null
134 | reset()
135 | })}
136 | {/snippet}
137 |
138 |
139 |
144 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Suspense for Svelte
2 |
3 | This is a Svelte component that implements the core idea of React's ``.
4 |
5 | When requesting asynchronous data, a typical pattern is for a parent component to handle all fetching and then push data down to its children. This can become difficult as levels of nesting increase and add unnessecary amounts of complexity. `` instead lets its children, at an arbitrary nested depth, dictate when they are done loading.
6 |
7 | [See it in action](https://svelte.dev/repl/91183af6db654f2099806426ff3bbb4b)
8 |
9 | ## Installation
10 |
11 | ```
12 | npm install --save @svelte-drama/suspense
13 | ```
14 |
15 | ## `suspend`
16 |
17 | Child components need to register what data they depend on. `suspend` returns a function to to handle orchestration between this component and its nearest parent `` component.
18 |
19 | ```js
20 | suspend>(data: T) => T
21 | ```
22 |
23 | Wrap a promise. This returns a promise, allowing it to be used as part of a promise chain. The containing `` component will display its `loading` state until the promise is resolved. If the promise is rejected, it will instead show the `error` state.
24 |
25 | ```js
26 | suspend(data: T) => T
27 | ```
28 |
29 | Wrap a model using runes. `` will consider this resolved as long as `data` resolves to not `undefined`. This call should be contained within `$effect` or `$derived` in order to update as the underlying data updates.
30 |
31 | ## ``
32 |
33 | `` extends `` with a few additional properties:
34 |
35 | - _loading_: If there any pending requests, this slot will be displayed.
36 | - _onload_: Triggers when all components inside the `` block have finished loading.
37 |
38 | ```svelte
39 |
46 |
47 | console.error(e)}
49 | onload={() => console.log('loaded')}
50 | >
51 | {#snippet loading()}
52 | Loading...
53 | {/snippet}
54 | {#snippet failed(error, reset)}
55 | Error: {error?.message || error}
56 |
57 | Try Again
58 |
59 | {/snippet}
60 |
61 | {#snippet children(suspend)}
62 | My Component
63 | {#await suspend(MyComponent) then MyComponent}
64 |
65 | {/await}
66 | {/snippet}
67 |
68 | ```
69 |
70 | ## ``
71 |
72 | `` orchestrates the loading of all child `` containers. It guarantees they will load in display order. This is useful to avoid multiple, distracting pop-ins of content or reflow of elements while the user is reading.
73 |
74 | - _collapse_: Boolean. Defaults to `false`. If `true`, only one loading state will be shown among the children.
75 | - _final_: Boolean. Defaults to `false`. If `true`, children will not resuspend if they have been displayed, regardless of the state of previous siblings.
76 | - _onload_: Triggers when all components inside the `` have finished loading.
77 |
78 | ```svelte
79 |
86 |
87 |
88 | {#snippet children(loading)}
89 | {#if loading}
90 | Fetching posts...
91 | {/if}
92 |
93 | {#each posts as post}
94 |
95 |
96 |
97 | {#snippet loading()}
98 |
99 | {/snippet}
100 |
101 | {/each}
102 | {/snippet}
103 |
104 | ```
105 |
106 | ## Limitations
107 |
108 | - [Intro transitions](https://svelte.dev/docs/svelte-transition) will not work as expected on elements inside the default slot. Elements are rendered in a hidden container as soon as possible, which triggers these intro transitions prematurely.
109 | - SSR will only display the loading component. Implementing `` during SSR would require Svelte to support `async/await` during SSR.
110 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 | .:
9 | devDependencies:
10 | '@sveltejs/adapter-auto':
11 | specifier: ^6.0.0
12 | version: 6.0.0(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4))
13 | '@sveltejs/kit':
14 | specifier: ^2.20.8
15 | version: 2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4)
16 | '@sveltejs/package':
17 | specifier: ^2.3.11
18 | version: 2.3.11(svelte@5.28.2)(typescript@5.8.3)
19 | '@sveltejs/vite-plugin-svelte':
20 | specifier: ^5.0.3
21 | version: 5.0.3(svelte@5.28.2)(vite@6.3.4)
22 | '@trivago/prettier-plugin-sort-imports':
23 | specifier: ^5.2.2
24 | version: 5.2.2(prettier-plugin-svelte@3.3.3(prettier@3.5.3)(svelte@5.28.2))(prettier@3.5.3)(svelte@5.28.2)
25 | cross-spawn:
26 | specifier: ^7.0.6
27 | version: 7.0.6
28 | husky:
29 | specifier: ^9.1.7
30 | version: 9.1.7
31 | prettier:
32 | specifier: ^3.5.3
33 | version: 3.5.3
34 | prettier-plugin-svelte:
35 | specifier: ^3.3.3
36 | version: 3.3.3(prettier@3.5.3)(svelte@5.28.2)
37 | publint:
38 | specifier: ^0.3.12
39 | version: 0.3.12
40 | svelte:
41 | specifier: ^5.28.2
42 | version: 5.28.2
43 | svelte-check:
44 | specifier: ^4.1.7
45 | version: 4.1.7(picomatch@4.0.2)(svelte@5.28.2)(typescript@5.8.3)
46 | tslib:
47 | specifier: ^2.8.1
48 | version: 2.8.1
49 | typescript:
50 | specifier: ^5.8.3
51 | version: 5.8.3
52 | vite:
53 | specifier: ^6.3.4
54 | version: 6.3.4
55 |
56 | packages:
57 | '@ampproject/remapping@2.3.0':
58 | resolution:
59 | {
60 | integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==,
61 | }
62 | engines: { node: '>=6.0.0' }
63 |
64 | '@babel/code-frame@7.27.1':
65 | resolution:
66 | {
67 | integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==,
68 | }
69 | engines: { node: '>=6.9.0' }
70 |
71 | '@babel/generator@7.27.1':
72 | resolution:
73 | {
74 | integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==,
75 | }
76 | engines: { node: '>=6.9.0' }
77 |
78 | '@babel/helper-string-parser@7.27.1':
79 | resolution:
80 | {
81 | integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==,
82 | }
83 | engines: { node: '>=6.9.0' }
84 |
85 | '@babel/helper-validator-identifier@7.27.1':
86 | resolution:
87 | {
88 | integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==,
89 | }
90 | engines: { node: '>=6.9.0' }
91 |
92 | '@babel/parser@7.27.1':
93 | resolution:
94 | {
95 | integrity: sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==,
96 | }
97 | engines: { node: '>=6.0.0' }
98 | hasBin: true
99 |
100 | '@babel/template@7.27.1':
101 | resolution:
102 | {
103 | integrity: sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg==,
104 | }
105 | engines: { node: '>=6.9.0' }
106 |
107 | '@babel/traverse@7.27.1':
108 | resolution:
109 | {
110 | integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==,
111 | }
112 | engines: { node: '>=6.9.0' }
113 |
114 | '@babel/types@7.27.1':
115 | resolution:
116 | {
117 | integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==,
118 | }
119 | engines: { node: '>=6.9.0' }
120 |
121 | '@esbuild/aix-ppc64@0.25.3':
122 | resolution:
123 | {
124 | integrity: sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==,
125 | }
126 | engines: { node: '>=18' }
127 | cpu: [ppc64]
128 | os: [aix]
129 |
130 | '@esbuild/android-arm64@0.25.3':
131 | resolution:
132 | {
133 | integrity: sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==,
134 | }
135 | engines: { node: '>=18' }
136 | cpu: [arm64]
137 | os: [android]
138 |
139 | '@esbuild/android-arm@0.25.3':
140 | resolution:
141 | {
142 | integrity: sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==,
143 | }
144 | engines: { node: '>=18' }
145 | cpu: [arm]
146 | os: [android]
147 |
148 | '@esbuild/android-x64@0.25.3':
149 | resolution:
150 | {
151 | integrity: sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==,
152 | }
153 | engines: { node: '>=18' }
154 | cpu: [x64]
155 | os: [android]
156 |
157 | '@esbuild/darwin-arm64@0.25.3':
158 | resolution:
159 | {
160 | integrity: sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==,
161 | }
162 | engines: { node: '>=18' }
163 | cpu: [arm64]
164 | os: [darwin]
165 |
166 | '@esbuild/darwin-x64@0.25.3':
167 | resolution:
168 | {
169 | integrity: sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==,
170 | }
171 | engines: { node: '>=18' }
172 | cpu: [x64]
173 | os: [darwin]
174 |
175 | '@esbuild/freebsd-arm64@0.25.3':
176 | resolution:
177 | {
178 | integrity: sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==,
179 | }
180 | engines: { node: '>=18' }
181 | cpu: [arm64]
182 | os: [freebsd]
183 |
184 | '@esbuild/freebsd-x64@0.25.3':
185 | resolution:
186 | {
187 | integrity: sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==,
188 | }
189 | engines: { node: '>=18' }
190 | cpu: [x64]
191 | os: [freebsd]
192 |
193 | '@esbuild/linux-arm64@0.25.3':
194 | resolution:
195 | {
196 | integrity: sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==,
197 | }
198 | engines: { node: '>=18' }
199 | cpu: [arm64]
200 | os: [linux]
201 |
202 | '@esbuild/linux-arm@0.25.3':
203 | resolution:
204 | {
205 | integrity: sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==,
206 | }
207 | engines: { node: '>=18' }
208 | cpu: [arm]
209 | os: [linux]
210 |
211 | '@esbuild/linux-ia32@0.25.3':
212 | resolution:
213 | {
214 | integrity: sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==,
215 | }
216 | engines: { node: '>=18' }
217 | cpu: [ia32]
218 | os: [linux]
219 |
220 | '@esbuild/linux-loong64@0.25.3':
221 | resolution:
222 | {
223 | integrity: sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==,
224 | }
225 | engines: { node: '>=18' }
226 | cpu: [loong64]
227 | os: [linux]
228 |
229 | '@esbuild/linux-mips64el@0.25.3':
230 | resolution:
231 | {
232 | integrity: sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==,
233 | }
234 | engines: { node: '>=18' }
235 | cpu: [mips64el]
236 | os: [linux]
237 |
238 | '@esbuild/linux-ppc64@0.25.3':
239 | resolution:
240 | {
241 | integrity: sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==,
242 | }
243 | engines: { node: '>=18' }
244 | cpu: [ppc64]
245 | os: [linux]
246 |
247 | '@esbuild/linux-riscv64@0.25.3':
248 | resolution:
249 | {
250 | integrity: sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==,
251 | }
252 | engines: { node: '>=18' }
253 | cpu: [riscv64]
254 | os: [linux]
255 |
256 | '@esbuild/linux-s390x@0.25.3':
257 | resolution:
258 | {
259 | integrity: sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==,
260 | }
261 | engines: { node: '>=18' }
262 | cpu: [s390x]
263 | os: [linux]
264 |
265 | '@esbuild/linux-x64@0.25.3':
266 | resolution:
267 | {
268 | integrity: sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==,
269 | }
270 | engines: { node: '>=18' }
271 | cpu: [x64]
272 | os: [linux]
273 |
274 | '@esbuild/netbsd-arm64@0.25.3':
275 | resolution:
276 | {
277 | integrity: sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==,
278 | }
279 | engines: { node: '>=18' }
280 | cpu: [arm64]
281 | os: [netbsd]
282 |
283 | '@esbuild/netbsd-x64@0.25.3':
284 | resolution:
285 | {
286 | integrity: sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==,
287 | }
288 | engines: { node: '>=18' }
289 | cpu: [x64]
290 | os: [netbsd]
291 |
292 | '@esbuild/openbsd-arm64@0.25.3':
293 | resolution:
294 | {
295 | integrity: sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==,
296 | }
297 | engines: { node: '>=18' }
298 | cpu: [arm64]
299 | os: [openbsd]
300 |
301 | '@esbuild/openbsd-x64@0.25.3':
302 | resolution:
303 | {
304 | integrity: sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==,
305 | }
306 | engines: { node: '>=18' }
307 | cpu: [x64]
308 | os: [openbsd]
309 |
310 | '@esbuild/sunos-x64@0.25.3':
311 | resolution:
312 | {
313 | integrity: sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==,
314 | }
315 | engines: { node: '>=18' }
316 | cpu: [x64]
317 | os: [sunos]
318 |
319 | '@esbuild/win32-arm64@0.25.3':
320 | resolution:
321 | {
322 | integrity: sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==,
323 | }
324 | engines: { node: '>=18' }
325 | cpu: [arm64]
326 | os: [win32]
327 |
328 | '@esbuild/win32-ia32@0.25.3':
329 | resolution:
330 | {
331 | integrity: sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==,
332 | }
333 | engines: { node: '>=18' }
334 | cpu: [ia32]
335 | os: [win32]
336 |
337 | '@esbuild/win32-x64@0.25.3':
338 | resolution:
339 | {
340 | integrity: sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==,
341 | }
342 | engines: { node: '>=18' }
343 | cpu: [x64]
344 | os: [win32]
345 |
346 | '@jridgewell/gen-mapping@0.3.8':
347 | resolution:
348 | {
349 | integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==,
350 | }
351 | engines: { node: '>=6.0.0' }
352 |
353 | '@jridgewell/resolve-uri@3.1.2':
354 | resolution:
355 | {
356 | integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==,
357 | }
358 | engines: { node: '>=6.0.0' }
359 |
360 | '@jridgewell/set-array@1.2.1':
361 | resolution:
362 | {
363 | integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==,
364 | }
365 | engines: { node: '>=6.0.0' }
366 |
367 | '@jridgewell/sourcemap-codec@1.5.0':
368 | resolution:
369 | {
370 | integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==,
371 | }
372 |
373 | '@jridgewell/trace-mapping@0.3.25':
374 | resolution:
375 | {
376 | integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==,
377 | }
378 |
379 | '@polka/url@1.0.0-next.29':
380 | resolution:
381 | {
382 | integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==,
383 | }
384 |
385 | '@publint/pack@0.1.2':
386 | resolution:
387 | {
388 | integrity: sha512-S+9ANAvUmjutrshV4jZjaiG8XQyuJIZ8a4utWmN/vW1sgQ9IfBnPndwkmQYw53QmouOIytT874u65HEmu6H5jw==,
389 | }
390 | engines: { node: '>=18' }
391 |
392 | '@rollup/rollup-android-arm-eabi@4.40.1':
393 | resolution:
394 | {
395 | integrity: sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==,
396 | }
397 | cpu: [arm]
398 | os: [android]
399 |
400 | '@rollup/rollup-android-arm64@4.40.1':
401 | resolution:
402 | {
403 | integrity: sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==,
404 | }
405 | cpu: [arm64]
406 | os: [android]
407 |
408 | '@rollup/rollup-darwin-arm64@4.40.1':
409 | resolution:
410 | {
411 | integrity: sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==,
412 | }
413 | cpu: [arm64]
414 | os: [darwin]
415 |
416 | '@rollup/rollup-darwin-x64@4.40.1':
417 | resolution:
418 | {
419 | integrity: sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==,
420 | }
421 | cpu: [x64]
422 | os: [darwin]
423 |
424 | '@rollup/rollup-freebsd-arm64@4.40.1':
425 | resolution:
426 | {
427 | integrity: sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==,
428 | }
429 | cpu: [arm64]
430 | os: [freebsd]
431 |
432 | '@rollup/rollup-freebsd-x64@4.40.1':
433 | resolution:
434 | {
435 | integrity: sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==,
436 | }
437 | cpu: [x64]
438 | os: [freebsd]
439 |
440 | '@rollup/rollup-linux-arm-gnueabihf@4.40.1':
441 | resolution:
442 | {
443 | integrity: sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==,
444 | }
445 | cpu: [arm]
446 | os: [linux]
447 |
448 | '@rollup/rollup-linux-arm-musleabihf@4.40.1':
449 | resolution:
450 | {
451 | integrity: sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==,
452 | }
453 | cpu: [arm]
454 | os: [linux]
455 |
456 | '@rollup/rollup-linux-arm64-gnu@4.40.1':
457 | resolution:
458 | {
459 | integrity: sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==,
460 | }
461 | cpu: [arm64]
462 | os: [linux]
463 |
464 | '@rollup/rollup-linux-arm64-musl@4.40.1':
465 | resolution:
466 | {
467 | integrity: sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==,
468 | }
469 | cpu: [arm64]
470 | os: [linux]
471 |
472 | '@rollup/rollup-linux-loongarch64-gnu@4.40.1':
473 | resolution:
474 | {
475 | integrity: sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==,
476 | }
477 | cpu: [loong64]
478 | os: [linux]
479 |
480 | '@rollup/rollup-linux-powerpc64le-gnu@4.40.1':
481 | resolution:
482 | {
483 | integrity: sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==,
484 | }
485 | cpu: [ppc64]
486 | os: [linux]
487 |
488 | '@rollup/rollup-linux-riscv64-gnu@4.40.1':
489 | resolution:
490 | {
491 | integrity: sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==,
492 | }
493 | cpu: [riscv64]
494 | os: [linux]
495 |
496 | '@rollup/rollup-linux-riscv64-musl@4.40.1':
497 | resolution:
498 | {
499 | integrity: sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==,
500 | }
501 | cpu: [riscv64]
502 | os: [linux]
503 |
504 | '@rollup/rollup-linux-s390x-gnu@4.40.1':
505 | resolution:
506 | {
507 | integrity: sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==,
508 | }
509 | cpu: [s390x]
510 | os: [linux]
511 |
512 | '@rollup/rollup-linux-x64-gnu@4.40.1':
513 | resolution:
514 | {
515 | integrity: sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==,
516 | }
517 | cpu: [x64]
518 | os: [linux]
519 |
520 | '@rollup/rollup-linux-x64-musl@4.40.1':
521 | resolution:
522 | {
523 | integrity: sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==,
524 | }
525 | cpu: [x64]
526 | os: [linux]
527 |
528 | '@rollup/rollup-win32-arm64-msvc@4.40.1':
529 | resolution:
530 | {
531 | integrity: sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==,
532 | }
533 | cpu: [arm64]
534 | os: [win32]
535 |
536 | '@rollup/rollup-win32-ia32-msvc@4.40.1':
537 | resolution:
538 | {
539 | integrity: sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==,
540 | }
541 | cpu: [ia32]
542 | os: [win32]
543 |
544 | '@rollup/rollup-win32-x64-msvc@4.40.1':
545 | resolution:
546 | {
547 | integrity: sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==,
548 | }
549 | cpu: [x64]
550 | os: [win32]
551 |
552 | '@sveltejs/acorn-typescript@1.0.5':
553 | resolution:
554 | {
555 | integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==,
556 | }
557 | peerDependencies:
558 | acorn: ^8.9.0
559 |
560 | '@sveltejs/adapter-auto@6.0.0':
561 | resolution:
562 | {
563 | integrity: sha512-7mR2/G7vlXakaOj6QBSG9dwBfTgWjV+UnEMB5Z6Xu0ZbdXda6c0su1fNkg0ab0zlilSkloMA2NjCna02/DR7sA==,
564 | }
565 | peerDependencies:
566 | '@sveltejs/kit': ^2.0.0
567 |
568 | '@sveltejs/kit@2.20.8':
569 | resolution:
570 | {
571 | integrity: sha512-ep9qTxL7WALhfm0kFecL3VHeuNew8IccbYGqv5TqL/KSqWRKzEgDG8blNlIu1CkLTTua/kHjI+f5T8eCmWIxKw==,
572 | }
573 | engines: { node: '>=18.13' }
574 | hasBin: true
575 | peerDependencies:
576 | '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0
577 | svelte: ^4.0.0 || ^5.0.0-next.0
578 | vite: ^5.0.3 || ^6.0.0
579 |
580 | '@sveltejs/package@2.3.11':
581 | resolution:
582 | {
583 | integrity: sha512-DSMt2U0XNAdoQBYksrmgQi5dKy7jUTVDJLiagS/iXF7AShjAmTbGJQKruBuT/FfYAWvNxfQTSjkXU8eAIjVeNg==,
584 | }
585 | engines: { node: ^16.14 || >=18 }
586 | hasBin: true
587 | peerDependencies:
588 | svelte: ^3.44.0 || ^4.0.0 || ^5.0.0-next.1
589 |
590 | '@sveltejs/vite-plugin-svelte-inspector@4.0.1':
591 | resolution:
592 | {
593 | integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==,
594 | }
595 | engines: { node: ^18.0.0 || ^20.0.0 || >=22 }
596 | peerDependencies:
597 | '@sveltejs/vite-plugin-svelte': ^5.0.0
598 | svelte: ^5.0.0
599 | vite: ^6.0.0
600 |
601 | '@sveltejs/vite-plugin-svelte@5.0.3':
602 | resolution:
603 | {
604 | integrity: sha512-MCFS6CrQDu1yGwspm4qtli0e63vaPCehf6V7pIMP15AsWgMKrqDGCPFF/0kn4SP0ii4aySu4Pa62+fIRGFMjgw==,
605 | }
606 | engines: { node: ^18.0.0 || ^20.0.0 || >=22 }
607 | peerDependencies:
608 | svelte: ^5.0.0
609 | vite: ^6.0.0
610 |
611 | '@trivago/prettier-plugin-sort-imports@5.2.2':
612 | resolution:
613 | {
614 | integrity: sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==,
615 | }
616 | engines: { node: '>18.12' }
617 | peerDependencies:
618 | '@vue/compiler-sfc': 3.x
619 | prettier: 2.x - 3.x
620 | prettier-plugin-svelte: 3.x
621 | svelte: 4.x || 5.x
622 | peerDependenciesMeta:
623 | '@vue/compiler-sfc':
624 | optional: true
625 | prettier-plugin-svelte:
626 | optional: true
627 | svelte:
628 | optional: true
629 |
630 | '@types/cookie@0.6.0':
631 | resolution:
632 | {
633 | integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==,
634 | }
635 |
636 | '@types/estree@1.0.7':
637 | resolution:
638 | {
639 | integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==,
640 | }
641 |
642 | acorn@8.14.1:
643 | resolution:
644 | {
645 | integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==,
646 | }
647 | engines: { node: '>=0.4.0' }
648 | hasBin: true
649 |
650 | aria-query@5.3.2:
651 | resolution:
652 | {
653 | integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==,
654 | }
655 | engines: { node: '>= 0.4' }
656 |
657 | axobject-query@4.1.0:
658 | resolution:
659 | {
660 | integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==,
661 | }
662 | engines: { node: '>= 0.4' }
663 |
664 | chokidar@4.0.3:
665 | resolution:
666 | {
667 | integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==,
668 | }
669 | engines: { node: '>= 14.16.0' }
670 |
671 | clsx@2.1.1:
672 | resolution:
673 | {
674 | integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==,
675 | }
676 | engines: { node: '>=6' }
677 |
678 | cookie@0.6.0:
679 | resolution:
680 | {
681 | integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==,
682 | }
683 | engines: { node: '>= 0.6' }
684 |
685 | cross-spawn@7.0.6:
686 | resolution:
687 | {
688 | integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==,
689 | }
690 | engines: { node: '>= 8' }
691 |
692 | debug@4.4.0:
693 | resolution:
694 | {
695 | integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==,
696 | }
697 | engines: { node: '>=6.0' }
698 | peerDependencies:
699 | supports-color: '*'
700 | peerDependenciesMeta:
701 | supports-color:
702 | optional: true
703 |
704 | dedent-js@1.0.1:
705 | resolution:
706 | {
707 | integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==,
708 | }
709 |
710 | deepmerge@4.3.1:
711 | resolution:
712 | {
713 | integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==,
714 | }
715 | engines: { node: '>=0.10.0' }
716 |
717 | devalue@5.1.1:
718 | resolution:
719 | {
720 | integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==,
721 | }
722 |
723 | esbuild@0.25.3:
724 | resolution:
725 | {
726 | integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==,
727 | }
728 | engines: { node: '>=18' }
729 | hasBin: true
730 |
731 | esm-env@1.2.2:
732 | resolution:
733 | {
734 | integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==,
735 | }
736 |
737 | esrap@1.4.6:
738 | resolution:
739 | {
740 | integrity: sha512-F/D2mADJ9SHY3IwksD4DAXjTt7qt7GWUf3/8RhCNWmC/67tyb55dpimHmy7EplakFaflV0R/PC+fdSPqrRHAQw==,
741 | }
742 |
743 | fdir@6.4.4:
744 | resolution:
745 | {
746 | integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==,
747 | }
748 | peerDependencies:
749 | picomatch: ^3 || ^4
750 | peerDependenciesMeta:
751 | picomatch:
752 | optional: true
753 |
754 | fsevents@2.3.3:
755 | resolution:
756 | {
757 | integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==,
758 | }
759 | engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 }
760 | os: [darwin]
761 |
762 | globals@11.12.0:
763 | resolution:
764 | {
765 | integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==,
766 | }
767 | engines: { node: '>=4' }
768 |
769 | husky@9.1.7:
770 | resolution:
771 | {
772 | integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==,
773 | }
774 | engines: { node: '>=18' }
775 | hasBin: true
776 |
777 | import-meta-resolve@4.1.0:
778 | resolution:
779 | {
780 | integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==,
781 | }
782 |
783 | is-reference@3.0.3:
784 | resolution:
785 | {
786 | integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==,
787 | }
788 |
789 | isexe@2.0.0:
790 | resolution:
791 | {
792 | integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==,
793 | }
794 |
795 | javascript-natural-sort@0.7.1:
796 | resolution:
797 | {
798 | integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==,
799 | }
800 |
801 | js-tokens@4.0.0:
802 | resolution:
803 | {
804 | integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==,
805 | }
806 |
807 | jsesc@3.1.0:
808 | resolution:
809 | {
810 | integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==,
811 | }
812 | engines: { node: '>=6' }
813 | hasBin: true
814 |
815 | kleur@4.1.5:
816 | resolution:
817 | {
818 | integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==,
819 | }
820 | engines: { node: '>=6' }
821 |
822 | locate-character@3.0.0:
823 | resolution:
824 | {
825 | integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==,
826 | }
827 |
828 | lodash@4.17.21:
829 | resolution:
830 | {
831 | integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==,
832 | }
833 |
834 | lower-case@2.0.2:
835 | resolution:
836 | {
837 | integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==,
838 | }
839 |
840 | magic-string@0.30.17:
841 | resolution:
842 | {
843 | integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==,
844 | }
845 |
846 | mri@1.2.0:
847 | resolution:
848 | {
849 | integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==,
850 | }
851 | engines: { node: '>=4' }
852 |
853 | mrmime@2.0.1:
854 | resolution:
855 | {
856 | integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==,
857 | }
858 | engines: { node: '>=10' }
859 |
860 | ms@2.1.3:
861 | resolution:
862 | {
863 | integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==,
864 | }
865 |
866 | nanoid@3.3.11:
867 | resolution:
868 | {
869 | integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==,
870 | }
871 | engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 }
872 | hasBin: true
873 |
874 | no-case@3.0.4:
875 | resolution:
876 | {
877 | integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==,
878 | }
879 |
880 | package-manager-detector@1.2.0:
881 | resolution:
882 | {
883 | integrity: sha512-PutJepsOtsqVfUsxCzgTTpyXmiAgvKptIgY4th5eq5UXXFhj5PxfQ9hnGkypMeovpAvVshFRItoFHYO18TCOqA==,
884 | }
885 |
886 | pascal-case@3.1.2:
887 | resolution:
888 | {
889 | integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==,
890 | }
891 |
892 | path-key@3.1.1:
893 | resolution:
894 | {
895 | integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==,
896 | }
897 | engines: { node: '>=8' }
898 |
899 | picocolors@1.1.1:
900 | resolution:
901 | {
902 | integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==,
903 | }
904 |
905 | picomatch@4.0.2:
906 | resolution:
907 | {
908 | integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==,
909 | }
910 | engines: { node: '>=12' }
911 |
912 | postcss@8.5.3:
913 | resolution:
914 | {
915 | integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==,
916 | }
917 | engines: { node: ^10 || ^12 || >=14 }
918 |
919 | prettier-plugin-svelte@3.3.3:
920 | resolution:
921 | {
922 | integrity: sha512-yViK9zqQ+H2qZD1w/bH7W8i+bVfKrD8GIFjkFe4Thl6kCT9SlAsXVNmt3jCvQOCsnOhcvYgsoVlRV/Eu6x5nNw==,
923 | }
924 | peerDependencies:
925 | prettier: ^3.0.0
926 | svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0
927 |
928 | prettier@3.5.3:
929 | resolution:
930 | {
931 | integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==,
932 | }
933 | engines: { node: '>=14' }
934 | hasBin: true
935 |
936 | publint@0.3.12:
937 | resolution:
938 | {
939 | integrity: sha512-1w3MMtL9iotBjm1mmXtG3Nk06wnq9UhGNRpQ2j6n1Zq7YAD6gnxMMZMIxlRPAydVjVbjSm+n0lhwqsD1m4LD5w==,
940 | }
941 | engines: { node: '>=18' }
942 | hasBin: true
943 |
944 | readdirp@4.1.2:
945 | resolution:
946 | {
947 | integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==,
948 | }
949 | engines: { node: '>= 14.18.0' }
950 |
951 | rollup@4.40.1:
952 | resolution:
953 | {
954 | integrity: sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==,
955 | }
956 | engines: { node: '>=18.0.0', npm: '>=8.0.0' }
957 | hasBin: true
958 |
959 | sade@1.8.1:
960 | resolution:
961 | {
962 | integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==,
963 | }
964 | engines: { node: '>=6' }
965 |
966 | semver@7.7.1:
967 | resolution:
968 | {
969 | integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==,
970 | }
971 | engines: { node: '>=10' }
972 | hasBin: true
973 |
974 | set-cookie-parser@2.7.1:
975 | resolution:
976 | {
977 | integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==,
978 | }
979 |
980 | shebang-command@2.0.0:
981 | resolution:
982 | {
983 | integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==,
984 | }
985 | engines: { node: '>=8' }
986 |
987 | shebang-regex@3.0.0:
988 | resolution:
989 | {
990 | integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==,
991 | }
992 | engines: { node: '>=8' }
993 |
994 | sirv@3.0.1:
995 | resolution:
996 | {
997 | integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==,
998 | }
999 | engines: { node: '>=18' }
1000 |
1001 | source-map-js@1.2.1:
1002 | resolution:
1003 | {
1004 | integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==,
1005 | }
1006 | engines: { node: '>=0.10.0' }
1007 |
1008 | svelte-check@4.1.7:
1009 | resolution:
1010 | {
1011 | integrity: sha512-1jX4BzXrQJhC/Jt3SqYf6Ntu//vmfc6VWp07JkRfK2nn+22yIblspVUo96gzMkg0Zov8lQicxhxsMzOctwcMQQ==,
1012 | }
1013 | engines: { node: '>= 18.0.0' }
1014 | hasBin: true
1015 | peerDependencies:
1016 | svelte: ^4.0.0 || ^5.0.0-next.0
1017 | typescript: '>=5.0.0'
1018 |
1019 | svelte2tsx@0.7.37:
1020 | resolution:
1021 | {
1022 | integrity: sha512-uQCWibXwUNPGQBGTZP1axIpFGFHTXXN30/ppodLVXCnX23U1nzEhqiVtFSEQjtUK3pFVxPhdnfyxD6ikxMCzPQ==,
1023 | }
1024 | peerDependencies:
1025 | svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0
1026 | typescript: ^4.9.4 || ^5.0.0
1027 |
1028 | svelte@5.28.2:
1029 | resolution:
1030 | {
1031 | integrity: sha512-FbWBxgWOpQfhKvoGJv/TFwzqb4EhJbwCD17dB0tEpQiw1XyUEKZJtgm4nA4xq3LLsMo7hu5UY/BOFmroAxKTMg==,
1032 | }
1033 | engines: { node: '>=18' }
1034 |
1035 | tinyglobby@0.2.13:
1036 | resolution:
1037 | {
1038 | integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==,
1039 | }
1040 | engines: { node: '>=12.0.0' }
1041 |
1042 | totalist@3.0.1:
1043 | resolution:
1044 | {
1045 | integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==,
1046 | }
1047 | engines: { node: '>=6' }
1048 |
1049 | tslib@2.8.1:
1050 | resolution:
1051 | {
1052 | integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==,
1053 | }
1054 |
1055 | typescript@5.8.3:
1056 | resolution:
1057 | {
1058 | integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==,
1059 | }
1060 | engines: { node: '>=14.17' }
1061 | hasBin: true
1062 |
1063 | vite@6.3.4:
1064 | resolution:
1065 | {
1066 | integrity: sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==,
1067 | }
1068 | engines: { node: ^18.0.0 || ^20.0.0 || >=22.0.0 }
1069 | hasBin: true
1070 | peerDependencies:
1071 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
1072 | jiti: '>=1.21.0'
1073 | less: '*'
1074 | lightningcss: ^1.21.0
1075 | sass: '*'
1076 | sass-embedded: '*'
1077 | stylus: '*'
1078 | sugarss: '*'
1079 | terser: ^5.16.0
1080 | tsx: ^4.8.1
1081 | yaml: ^2.4.2
1082 | peerDependenciesMeta:
1083 | '@types/node':
1084 | optional: true
1085 | jiti:
1086 | optional: true
1087 | less:
1088 | optional: true
1089 | lightningcss:
1090 | optional: true
1091 | sass:
1092 | optional: true
1093 | sass-embedded:
1094 | optional: true
1095 | stylus:
1096 | optional: true
1097 | sugarss:
1098 | optional: true
1099 | terser:
1100 | optional: true
1101 | tsx:
1102 | optional: true
1103 | yaml:
1104 | optional: true
1105 |
1106 | vitefu@1.0.6:
1107 | resolution:
1108 | {
1109 | integrity: sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==,
1110 | }
1111 | peerDependencies:
1112 | vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0
1113 | peerDependenciesMeta:
1114 | vite:
1115 | optional: true
1116 |
1117 | which@2.0.2:
1118 | resolution:
1119 | {
1120 | integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==,
1121 | }
1122 | engines: { node: '>= 8' }
1123 | hasBin: true
1124 |
1125 | zimmerframe@1.1.2:
1126 | resolution:
1127 | {
1128 | integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==,
1129 | }
1130 |
1131 | snapshots:
1132 | '@ampproject/remapping@2.3.0':
1133 | dependencies:
1134 | '@jridgewell/gen-mapping': 0.3.8
1135 | '@jridgewell/trace-mapping': 0.3.25
1136 |
1137 | '@babel/code-frame@7.27.1':
1138 | dependencies:
1139 | '@babel/helper-validator-identifier': 7.27.1
1140 | js-tokens: 4.0.0
1141 | picocolors: 1.1.1
1142 |
1143 | '@babel/generator@7.27.1':
1144 | dependencies:
1145 | '@babel/parser': 7.27.1
1146 | '@babel/types': 7.27.1
1147 | '@jridgewell/gen-mapping': 0.3.8
1148 | '@jridgewell/trace-mapping': 0.3.25
1149 | jsesc: 3.1.0
1150 |
1151 | '@babel/helper-string-parser@7.27.1': {}
1152 |
1153 | '@babel/helper-validator-identifier@7.27.1': {}
1154 |
1155 | '@babel/parser@7.27.1':
1156 | dependencies:
1157 | '@babel/types': 7.27.1
1158 |
1159 | '@babel/template@7.27.1':
1160 | dependencies:
1161 | '@babel/code-frame': 7.27.1
1162 | '@babel/parser': 7.27.1
1163 | '@babel/types': 7.27.1
1164 |
1165 | '@babel/traverse@7.27.1':
1166 | dependencies:
1167 | '@babel/code-frame': 7.27.1
1168 | '@babel/generator': 7.27.1
1169 | '@babel/parser': 7.27.1
1170 | '@babel/template': 7.27.1
1171 | '@babel/types': 7.27.1
1172 | debug: 4.4.0
1173 | globals: 11.12.0
1174 | transitivePeerDependencies:
1175 | - supports-color
1176 |
1177 | '@babel/types@7.27.1':
1178 | dependencies:
1179 | '@babel/helper-string-parser': 7.27.1
1180 | '@babel/helper-validator-identifier': 7.27.1
1181 |
1182 | '@esbuild/aix-ppc64@0.25.3':
1183 | optional: true
1184 |
1185 | '@esbuild/android-arm64@0.25.3':
1186 | optional: true
1187 |
1188 | '@esbuild/android-arm@0.25.3':
1189 | optional: true
1190 |
1191 | '@esbuild/android-x64@0.25.3':
1192 | optional: true
1193 |
1194 | '@esbuild/darwin-arm64@0.25.3':
1195 | optional: true
1196 |
1197 | '@esbuild/darwin-x64@0.25.3':
1198 | optional: true
1199 |
1200 | '@esbuild/freebsd-arm64@0.25.3':
1201 | optional: true
1202 |
1203 | '@esbuild/freebsd-x64@0.25.3':
1204 | optional: true
1205 |
1206 | '@esbuild/linux-arm64@0.25.3':
1207 | optional: true
1208 |
1209 | '@esbuild/linux-arm@0.25.3':
1210 | optional: true
1211 |
1212 | '@esbuild/linux-ia32@0.25.3':
1213 | optional: true
1214 |
1215 | '@esbuild/linux-loong64@0.25.3':
1216 | optional: true
1217 |
1218 | '@esbuild/linux-mips64el@0.25.3':
1219 | optional: true
1220 |
1221 | '@esbuild/linux-ppc64@0.25.3':
1222 | optional: true
1223 |
1224 | '@esbuild/linux-riscv64@0.25.3':
1225 | optional: true
1226 |
1227 | '@esbuild/linux-s390x@0.25.3':
1228 | optional: true
1229 |
1230 | '@esbuild/linux-x64@0.25.3':
1231 | optional: true
1232 |
1233 | '@esbuild/netbsd-arm64@0.25.3':
1234 | optional: true
1235 |
1236 | '@esbuild/netbsd-x64@0.25.3':
1237 | optional: true
1238 |
1239 | '@esbuild/openbsd-arm64@0.25.3':
1240 | optional: true
1241 |
1242 | '@esbuild/openbsd-x64@0.25.3':
1243 | optional: true
1244 |
1245 | '@esbuild/sunos-x64@0.25.3':
1246 | optional: true
1247 |
1248 | '@esbuild/win32-arm64@0.25.3':
1249 | optional: true
1250 |
1251 | '@esbuild/win32-ia32@0.25.3':
1252 | optional: true
1253 |
1254 | '@esbuild/win32-x64@0.25.3':
1255 | optional: true
1256 |
1257 | '@jridgewell/gen-mapping@0.3.8':
1258 | dependencies:
1259 | '@jridgewell/set-array': 1.2.1
1260 | '@jridgewell/sourcemap-codec': 1.5.0
1261 | '@jridgewell/trace-mapping': 0.3.25
1262 |
1263 | '@jridgewell/resolve-uri@3.1.2': {}
1264 |
1265 | '@jridgewell/set-array@1.2.1': {}
1266 |
1267 | '@jridgewell/sourcemap-codec@1.5.0': {}
1268 |
1269 | '@jridgewell/trace-mapping@0.3.25':
1270 | dependencies:
1271 | '@jridgewell/resolve-uri': 3.1.2
1272 | '@jridgewell/sourcemap-codec': 1.5.0
1273 |
1274 | '@polka/url@1.0.0-next.29': {}
1275 |
1276 | '@publint/pack@0.1.2': {}
1277 |
1278 | '@rollup/rollup-android-arm-eabi@4.40.1':
1279 | optional: true
1280 |
1281 | '@rollup/rollup-android-arm64@4.40.1':
1282 | optional: true
1283 |
1284 | '@rollup/rollup-darwin-arm64@4.40.1':
1285 | optional: true
1286 |
1287 | '@rollup/rollup-darwin-x64@4.40.1':
1288 | optional: true
1289 |
1290 | '@rollup/rollup-freebsd-arm64@4.40.1':
1291 | optional: true
1292 |
1293 | '@rollup/rollup-freebsd-x64@4.40.1':
1294 | optional: true
1295 |
1296 | '@rollup/rollup-linux-arm-gnueabihf@4.40.1':
1297 | optional: true
1298 |
1299 | '@rollup/rollup-linux-arm-musleabihf@4.40.1':
1300 | optional: true
1301 |
1302 | '@rollup/rollup-linux-arm64-gnu@4.40.1':
1303 | optional: true
1304 |
1305 | '@rollup/rollup-linux-arm64-musl@4.40.1':
1306 | optional: true
1307 |
1308 | '@rollup/rollup-linux-loongarch64-gnu@4.40.1':
1309 | optional: true
1310 |
1311 | '@rollup/rollup-linux-powerpc64le-gnu@4.40.1':
1312 | optional: true
1313 |
1314 | '@rollup/rollup-linux-riscv64-gnu@4.40.1':
1315 | optional: true
1316 |
1317 | '@rollup/rollup-linux-riscv64-musl@4.40.1':
1318 | optional: true
1319 |
1320 | '@rollup/rollup-linux-s390x-gnu@4.40.1':
1321 | optional: true
1322 |
1323 | '@rollup/rollup-linux-x64-gnu@4.40.1':
1324 | optional: true
1325 |
1326 | '@rollup/rollup-linux-x64-musl@4.40.1':
1327 | optional: true
1328 |
1329 | '@rollup/rollup-win32-arm64-msvc@4.40.1':
1330 | optional: true
1331 |
1332 | '@rollup/rollup-win32-ia32-msvc@4.40.1':
1333 | optional: true
1334 |
1335 | '@rollup/rollup-win32-x64-msvc@4.40.1':
1336 | optional: true
1337 |
1338 | '@sveltejs/acorn-typescript@1.0.5(acorn@8.14.1)':
1339 | dependencies:
1340 | acorn: 8.14.1
1341 |
1342 | '@sveltejs/adapter-auto@6.0.0(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4))':
1343 | dependencies:
1344 | '@sveltejs/kit': 2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4)
1345 | import-meta-resolve: 4.1.0
1346 |
1347 | '@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4)':
1348 | dependencies:
1349 | '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.28.2)(vite@6.3.4)
1350 | '@types/cookie': 0.6.0
1351 | cookie: 0.6.0
1352 | devalue: 5.1.1
1353 | esm-env: 1.2.2
1354 | import-meta-resolve: 4.1.0
1355 | kleur: 4.1.5
1356 | magic-string: 0.30.17
1357 | mrmime: 2.0.1
1358 | sade: 1.8.1
1359 | set-cookie-parser: 2.7.1
1360 | sirv: 3.0.1
1361 | svelte: 5.28.2
1362 | vite: 6.3.4
1363 |
1364 | '@sveltejs/package@2.3.11(svelte@5.28.2)(typescript@5.8.3)':
1365 | dependencies:
1366 | chokidar: 4.0.3
1367 | kleur: 4.1.5
1368 | sade: 1.8.1
1369 | semver: 7.7.1
1370 | svelte: 5.28.2
1371 | svelte2tsx: 0.7.37(svelte@5.28.2)(typescript@5.8.3)
1372 | transitivePeerDependencies:
1373 | - typescript
1374 |
1375 | '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4)':
1376 | dependencies:
1377 | '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.28.2)(vite@6.3.4)
1378 | debug: 4.4.0
1379 | svelte: 5.28.2
1380 | vite: 6.3.4
1381 | transitivePeerDependencies:
1382 | - supports-color
1383 |
1384 | '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4)':
1385 | dependencies:
1386 | '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4)
1387 | debug: 4.4.0
1388 | deepmerge: 4.3.1
1389 | kleur: 4.1.5
1390 | magic-string: 0.30.17
1391 | svelte: 5.28.2
1392 | vite: 6.3.4
1393 | vitefu: 1.0.6(vite@6.3.4)
1394 | transitivePeerDependencies:
1395 | - supports-color
1396 |
1397 | '@trivago/prettier-plugin-sort-imports@5.2.2(prettier-plugin-svelte@3.3.3(prettier@3.5.3)(svelte@5.28.2))(prettier@3.5.3)(svelte@5.28.2)':
1398 | dependencies:
1399 | '@babel/generator': 7.27.1
1400 | '@babel/parser': 7.27.1
1401 | '@babel/traverse': 7.27.1
1402 | '@babel/types': 7.27.1
1403 | javascript-natural-sort: 0.7.1
1404 | lodash: 4.17.21
1405 | prettier: 3.5.3
1406 | optionalDependencies:
1407 | prettier-plugin-svelte: 3.3.3(prettier@3.5.3)(svelte@5.28.2)
1408 | svelte: 5.28.2
1409 | transitivePeerDependencies:
1410 | - supports-color
1411 |
1412 | '@types/cookie@0.6.0': {}
1413 |
1414 | '@types/estree@1.0.7': {}
1415 |
1416 | acorn@8.14.1: {}
1417 |
1418 | aria-query@5.3.2: {}
1419 |
1420 | axobject-query@4.1.0: {}
1421 |
1422 | chokidar@4.0.3:
1423 | dependencies:
1424 | readdirp: 4.1.2
1425 |
1426 | clsx@2.1.1: {}
1427 |
1428 | cookie@0.6.0: {}
1429 |
1430 | cross-spawn@7.0.6:
1431 | dependencies:
1432 | path-key: 3.1.1
1433 | shebang-command: 2.0.0
1434 | which: 2.0.2
1435 |
1436 | debug@4.4.0:
1437 | dependencies:
1438 | ms: 2.1.3
1439 |
1440 | dedent-js@1.0.1: {}
1441 |
1442 | deepmerge@4.3.1: {}
1443 |
1444 | devalue@5.1.1: {}
1445 |
1446 | esbuild@0.25.3:
1447 | optionalDependencies:
1448 | '@esbuild/aix-ppc64': 0.25.3
1449 | '@esbuild/android-arm': 0.25.3
1450 | '@esbuild/android-arm64': 0.25.3
1451 | '@esbuild/android-x64': 0.25.3
1452 | '@esbuild/darwin-arm64': 0.25.3
1453 | '@esbuild/darwin-x64': 0.25.3
1454 | '@esbuild/freebsd-arm64': 0.25.3
1455 | '@esbuild/freebsd-x64': 0.25.3
1456 | '@esbuild/linux-arm': 0.25.3
1457 | '@esbuild/linux-arm64': 0.25.3
1458 | '@esbuild/linux-ia32': 0.25.3
1459 | '@esbuild/linux-loong64': 0.25.3
1460 | '@esbuild/linux-mips64el': 0.25.3
1461 | '@esbuild/linux-ppc64': 0.25.3
1462 | '@esbuild/linux-riscv64': 0.25.3
1463 | '@esbuild/linux-s390x': 0.25.3
1464 | '@esbuild/linux-x64': 0.25.3
1465 | '@esbuild/netbsd-arm64': 0.25.3
1466 | '@esbuild/netbsd-x64': 0.25.3
1467 | '@esbuild/openbsd-arm64': 0.25.3
1468 | '@esbuild/openbsd-x64': 0.25.3
1469 | '@esbuild/sunos-x64': 0.25.3
1470 | '@esbuild/win32-arm64': 0.25.3
1471 | '@esbuild/win32-ia32': 0.25.3
1472 | '@esbuild/win32-x64': 0.25.3
1473 |
1474 | esm-env@1.2.2: {}
1475 |
1476 | esrap@1.4.6:
1477 | dependencies:
1478 | '@jridgewell/sourcemap-codec': 1.5.0
1479 |
1480 | fdir@6.4.4(picomatch@4.0.2):
1481 | optionalDependencies:
1482 | picomatch: 4.0.2
1483 |
1484 | fsevents@2.3.3:
1485 | optional: true
1486 |
1487 | globals@11.12.0: {}
1488 |
1489 | husky@9.1.7: {}
1490 |
1491 | import-meta-resolve@4.1.0: {}
1492 |
1493 | is-reference@3.0.3:
1494 | dependencies:
1495 | '@types/estree': 1.0.7
1496 |
1497 | isexe@2.0.0: {}
1498 |
1499 | javascript-natural-sort@0.7.1: {}
1500 |
1501 | js-tokens@4.0.0: {}
1502 |
1503 | jsesc@3.1.0: {}
1504 |
1505 | kleur@4.1.5: {}
1506 |
1507 | locate-character@3.0.0: {}
1508 |
1509 | lodash@4.17.21: {}
1510 |
1511 | lower-case@2.0.2:
1512 | dependencies:
1513 | tslib: 2.8.1
1514 |
1515 | magic-string@0.30.17:
1516 | dependencies:
1517 | '@jridgewell/sourcemap-codec': 1.5.0
1518 |
1519 | mri@1.2.0: {}
1520 |
1521 | mrmime@2.0.1: {}
1522 |
1523 | ms@2.1.3: {}
1524 |
1525 | nanoid@3.3.11: {}
1526 |
1527 | no-case@3.0.4:
1528 | dependencies:
1529 | lower-case: 2.0.2
1530 | tslib: 2.8.1
1531 |
1532 | package-manager-detector@1.2.0: {}
1533 |
1534 | pascal-case@3.1.2:
1535 | dependencies:
1536 | no-case: 3.0.4
1537 | tslib: 2.8.1
1538 |
1539 | path-key@3.1.1: {}
1540 |
1541 | picocolors@1.1.1: {}
1542 |
1543 | picomatch@4.0.2: {}
1544 |
1545 | postcss@8.5.3:
1546 | dependencies:
1547 | nanoid: 3.3.11
1548 | picocolors: 1.1.1
1549 | source-map-js: 1.2.1
1550 |
1551 | prettier-plugin-svelte@3.3.3(prettier@3.5.3)(svelte@5.28.2):
1552 | dependencies:
1553 | prettier: 3.5.3
1554 | svelte: 5.28.2
1555 |
1556 | prettier@3.5.3: {}
1557 |
1558 | publint@0.3.12:
1559 | dependencies:
1560 | '@publint/pack': 0.1.2
1561 | package-manager-detector: 1.2.0
1562 | picocolors: 1.1.1
1563 | sade: 1.8.1
1564 |
1565 | readdirp@4.1.2: {}
1566 |
1567 | rollup@4.40.1:
1568 | dependencies:
1569 | '@types/estree': 1.0.7
1570 | optionalDependencies:
1571 | '@rollup/rollup-android-arm-eabi': 4.40.1
1572 | '@rollup/rollup-android-arm64': 4.40.1
1573 | '@rollup/rollup-darwin-arm64': 4.40.1
1574 | '@rollup/rollup-darwin-x64': 4.40.1
1575 | '@rollup/rollup-freebsd-arm64': 4.40.1
1576 | '@rollup/rollup-freebsd-x64': 4.40.1
1577 | '@rollup/rollup-linux-arm-gnueabihf': 4.40.1
1578 | '@rollup/rollup-linux-arm-musleabihf': 4.40.1
1579 | '@rollup/rollup-linux-arm64-gnu': 4.40.1
1580 | '@rollup/rollup-linux-arm64-musl': 4.40.1
1581 | '@rollup/rollup-linux-loongarch64-gnu': 4.40.1
1582 | '@rollup/rollup-linux-powerpc64le-gnu': 4.40.1
1583 | '@rollup/rollup-linux-riscv64-gnu': 4.40.1
1584 | '@rollup/rollup-linux-riscv64-musl': 4.40.1
1585 | '@rollup/rollup-linux-s390x-gnu': 4.40.1
1586 | '@rollup/rollup-linux-x64-gnu': 4.40.1
1587 | '@rollup/rollup-linux-x64-musl': 4.40.1
1588 | '@rollup/rollup-win32-arm64-msvc': 4.40.1
1589 | '@rollup/rollup-win32-ia32-msvc': 4.40.1
1590 | '@rollup/rollup-win32-x64-msvc': 4.40.1
1591 | fsevents: 2.3.3
1592 |
1593 | sade@1.8.1:
1594 | dependencies:
1595 | mri: 1.2.0
1596 |
1597 | semver@7.7.1: {}
1598 |
1599 | set-cookie-parser@2.7.1: {}
1600 |
1601 | shebang-command@2.0.0:
1602 | dependencies:
1603 | shebang-regex: 3.0.0
1604 |
1605 | shebang-regex@3.0.0: {}
1606 |
1607 | sirv@3.0.1:
1608 | dependencies:
1609 | '@polka/url': 1.0.0-next.29
1610 | mrmime: 2.0.1
1611 | totalist: 3.0.1
1612 |
1613 | source-map-js@1.2.1: {}
1614 |
1615 | svelte-check@4.1.7(picomatch@4.0.2)(svelte@5.28.2)(typescript@5.8.3):
1616 | dependencies:
1617 | '@jridgewell/trace-mapping': 0.3.25
1618 | chokidar: 4.0.3
1619 | fdir: 6.4.4(picomatch@4.0.2)
1620 | picocolors: 1.1.1
1621 | sade: 1.8.1
1622 | svelte: 5.28.2
1623 | typescript: 5.8.3
1624 | transitivePeerDependencies:
1625 | - picomatch
1626 |
1627 | svelte2tsx@0.7.37(svelte@5.28.2)(typescript@5.8.3):
1628 | dependencies:
1629 | dedent-js: 1.0.1
1630 | pascal-case: 3.1.2
1631 | svelte: 5.28.2
1632 | typescript: 5.8.3
1633 |
1634 | svelte@5.28.2:
1635 | dependencies:
1636 | '@ampproject/remapping': 2.3.0
1637 | '@jridgewell/sourcemap-codec': 1.5.0
1638 | '@sveltejs/acorn-typescript': 1.0.5(acorn@8.14.1)
1639 | '@types/estree': 1.0.7
1640 | acorn: 8.14.1
1641 | aria-query: 5.3.2
1642 | axobject-query: 4.1.0
1643 | clsx: 2.1.1
1644 | esm-env: 1.2.2
1645 | esrap: 1.4.6
1646 | is-reference: 3.0.3
1647 | locate-character: 3.0.0
1648 | magic-string: 0.30.17
1649 | zimmerframe: 1.1.2
1650 |
1651 | tinyglobby@0.2.13:
1652 | dependencies:
1653 | fdir: 6.4.4(picomatch@4.0.2)
1654 | picomatch: 4.0.2
1655 |
1656 | totalist@3.0.1: {}
1657 |
1658 | tslib@2.8.1: {}
1659 |
1660 | typescript@5.8.3: {}
1661 |
1662 | vite@6.3.4:
1663 | dependencies:
1664 | esbuild: 0.25.3
1665 | fdir: 6.4.4(picomatch@4.0.2)
1666 | picomatch: 4.0.2
1667 | postcss: 8.5.3
1668 | rollup: 4.40.1
1669 | tinyglobby: 0.2.13
1670 | optionalDependencies:
1671 | fsevents: 2.3.3
1672 |
1673 | vitefu@1.0.6(vite@6.3.4):
1674 | optionalDependencies:
1675 | vite: 6.3.4
1676 |
1677 | which@2.0.2:
1678 | dependencies:
1679 | isexe: 2.0.0
1680 |
1681 | zimmerframe@1.1.2: {}
1682 |
--------------------------------------------------------------------------------