diff --git a/.kilocode/rules/specify-rules.md b/.kilocode/rules/specify-rules.md index 0aeedac..91f7d5e 100644 --- a/.kilocode/rules/specify-rules.md +++ b/.kilocode/rules/specify-rules.md @@ -4,6 +4,8 @@ Auto-generated from all feature plans. Last updated: 2025-12-19 ## Active Technologies - Python 3.9+, Node.js 18+ + `uvicorn`, `npm`, `bash` (003-project-launch-script) +- Python 3.9+, Node.js 18+ + SvelteKit, FastAPI, Tailwind CSS (inferred from existing frontend) (004-integrate-svelte-kit) +- N/A (Frontend integration) (004-integrate-svelte-kit) - Python 3.9+ (Backend), Node.js 18+ (Frontend Build) (001-plugin-arch-svelte-ui) @@ -24,6 +26,7 @@ cd src; pytest; ruff check . Python 3.9+ (Backend), Node.js 18+ (Frontend Build): Follow standard conventions ## Recent Changes +- 004-integrate-svelte-kit: Added Python 3.9+, Node.js 18+ + SvelteKit, FastAPI, Tailwind CSS (inferred from existing frontend) - 003-project-launch-script: Added Python 3.9+, Node.js 18+ + `uvicorn`, `npm`, `bash` - 001-plugin-arch-svelte-ui: Added Python 3.9+ (Backend), Node.js 18+ (Frontend Build) diff --git a/backend/src/app.py b/backend/src/app.py index 267f522..9f54fc2 100755 --- a/backend/src/app.py +++ b/backend/src/app.py @@ -13,7 +13,10 @@ sys.path.append(str(project_root)) from fastapi import FastAPI, WebSocket, WebSocketDisconnect, Depends from fastapi.middleware.cors import CORSMiddleware +from fastapi.staticfiles import StaticFiles +from fastapi.responses import FileResponse import asyncio +import os from .dependencies import get_task_manager from .core.logger import logger @@ -69,10 +72,26 @@ async def websocket_endpoint(websocket: WebSocket, task_id: str, task_manager=De # [/DEF] -# [DEF:RootEndpoint:Endpoint] -# @SEMANTICS: root, healthcheck -# @PURPOSE: A simple root endpoint to confirm that the API is running. -@app.get("/") -async def read_root(): - return {"message": "Superset Tools API is running"} +# [DEF:StaticFiles:Mount] +# @SEMANTICS: static, frontend, spa +# @PURPOSE: Mounts the frontend build directory to serve static assets. +frontend_path = project_root / "frontend" / "build" +if frontend_path.exists(): + app.mount("/_app", StaticFiles(directory=str(frontend_path / "_app")), name="static") + + # Serve other static files from the root of build directory + @app.get("/{file_path:path}") + async def serve_spa(file_path: str): + full_path = frontend_path / file_path + if full_path.is_file(): + return FileResponse(str(full_path)) + # Fallback to index.html for SPA routing + return FileResponse(str(frontend_path / "index.html")) +else: + # [DEF:RootEndpoint:Endpoint] + # @SEMANTICS: root, healthcheck + # @PURPOSE: A simple root endpoint to confirm that the API is running. + @app.get("/") + async def read_root(): + return {"message": "Superset Tools API is running (Frontend build not found)"} # [/DEF] diff --git a/frontend/.svelte-kit/ambient.d.ts b/frontend/.svelte-kit/ambient.d.ts new file mode 100644 index 0000000..1396f51 --- /dev/null +++ b/frontend/.svelte-kit/ambient.d.ts @@ -0,0 +1,209 @@ + +// this file is generated — do not edit it + + +/// + +/** + * Environment variables [loaded by Vite](https://vitejs.dev/guide/env-and-mode.html#env-files) from `.env` files and `process.env`. Like [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private), this module cannot be imported into client-side code. This module only includes variables that _do not_ begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) _and do_ start with [`config.kit.env.privatePrefix`](https://svelte.dev/docs/kit/configuration#env) (if configured). + * + * _Unlike_ [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private), the values exported from this module are statically injected into your bundle at build time, enabling optimisations like dead code elimination. + * + * ```ts + * import { API_KEY } from '$env/static/private'; + * ``` + * + * Note that all environment variables referenced in your code should be declared (for example in an `.env` file), even if they don't have a value until the app is deployed: + * + * ``` + * MY_FEATURE_FLAG="" + * ``` + * + * You can override `.env` values from the command line like so: + * + * ```sh + * MY_FEATURE_FLAG="enabled" npm run dev + * ``` + */ +declare module '$env/static/private' { + export const LESSOPEN: string; + export const VSCODE_CWD: string; + export const VSCODE_ESM_ENTRYPOINT: string; + export const USER: string; + export const VSCODE_NLS_CONFIG: string; + export const npm_config_user_agent: string; + export const VSCODE_WSL_EXT_LOCATION: string; + export const VSCODE_HANDLES_UNCAUGHT_ERRORS: string; + export const npm_node_execpath: string; + export const SHLVL: string; + export const npm_config_noproxy: string; + export const HOME: string; + export const OLDPWD: string; + export const VSCODE_RECONNECTION_GRACE_TIME: string; + export const VSCODE_IPC_HOOK_CLI: string; + export const npm_package_json: string; + export const PS1: string; + export const npm_config_userconfig: string; + export const npm_config_local_prefix: string; + export const DBUS_SESSION_BUS_ADDRESS: string; + export const WSL_DISTRO_NAME: string; + export const COLOR: string; + export const WAYLAND_DISPLAY: string; + export const VSCODE_L10N_BUNDLE_LOCATION: string; + export const LOGNAME: string; + export const NAME: string; + export const WSL_INTEROP: string; + export const VSCODE_HANDLES_SIGPIPE: string; + export const PULSE_SERVER: string; + export const _: string; + export const npm_config_prefix: string; + export const npm_config_npm_version: string; + export const TERM: string; + export const npm_config_cache: string; + export const npm_config_node_gyp: string; + export const PATH: string; + export const NODE: string; + export const npm_package_name: string; + export const XDG_RUNTIME_DIR: string; + export const DISPLAY: string; + export const LANG: string; + export const VIRTUAL_ENV_PROMPT: string; + export const LS_COLORS: string; + export const npm_lifecycle_script: string; + export const SHELL: string; + export const npm_package_version: string; + export const npm_lifecycle_event: string; + export const ELECTRON_RUN_AS_NODE: string; + export const KILOCODE_POSTHOG_API_KEY: string; + export const GOOGLE_CLOUD_PROJECT: string; + export const LESSCLOSE: string; + export const VIRTUAL_ENV: string; + export const npm_config_globalconfig: string; + export const npm_config_init_module: string; + export const PWD: string; + export const LC_ALL: string; + export const npm_execpath: string; + export const XDG_DATA_DIRS: string; + export const npm_config_global_prefix: string; + export const npm_command: string; + export const WSL2_GUI_APPS_ENABLED: string; + export const HOSTTYPE: string; + export const WSLENV: string; + export const INIT_CWD: string; + export const EDITOR: string; + export const NODE_ENV: string; +} + +/** + * Similar to [`$env/static/private`](https://svelte.dev/docs/kit/$env-static-private), except that it only includes environment variables that begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) (which defaults to `PUBLIC_`), and can therefore safely be exposed to client-side code. + * + * Values are replaced statically at build time. + * + * ```ts + * import { PUBLIC_BASE_URL } from '$env/static/public'; + * ``` + */ +declare module '$env/static/public' { + +} + +/** + * This module provides access to runtime environment variables, as defined by the platform you're running on. For example if you're using [`adapter-node`](https://github.com/sveltejs/kit/tree/main/packages/adapter-node) (or running [`vite preview`](https://svelte.dev/docs/kit/cli)), this is equivalent to `process.env`. This module only includes variables that _do not_ begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) _and do_ start with [`config.kit.env.privatePrefix`](https://svelte.dev/docs/kit/configuration#env) (if configured). + * + * This module cannot be imported into client-side code. + * + * ```ts + * import { env } from '$env/dynamic/private'; + * console.log(env.DEPLOYMENT_SPECIFIC_VARIABLE); + * ``` + * + * > [!NOTE] In `dev`, `$env/dynamic` always includes environment variables from `.env`. In `prod`, this behavior will depend on your adapter. + */ +declare module '$env/dynamic/private' { + export const env: { + LESSOPEN: string; + VSCODE_CWD: string; + VSCODE_ESM_ENTRYPOINT: string; + USER: string; + VSCODE_NLS_CONFIG: string; + npm_config_user_agent: string; + VSCODE_WSL_EXT_LOCATION: string; + VSCODE_HANDLES_UNCAUGHT_ERRORS: string; + npm_node_execpath: string; + SHLVL: string; + npm_config_noproxy: string; + HOME: string; + OLDPWD: string; + VSCODE_RECONNECTION_GRACE_TIME: string; + VSCODE_IPC_HOOK_CLI: string; + npm_package_json: string; + PS1: string; + npm_config_userconfig: string; + npm_config_local_prefix: string; + DBUS_SESSION_BUS_ADDRESS: string; + WSL_DISTRO_NAME: string; + COLOR: string; + WAYLAND_DISPLAY: string; + VSCODE_L10N_BUNDLE_LOCATION: string; + LOGNAME: string; + NAME: string; + WSL_INTEROP: string; + VSCODE_HANDLES_SIGPIPE: string; + PULSE_SERVER: string; + _: string; + npm_config_prefix: string; + npm_config_npm_version: string; + TERM: string; + npm_config_cache: string; + npm_config_node_gyp: string; + PATH: string; + NODE: string; + npm_package_name: string; + XDG_RUNTIME_DIR: string; + DISPLAY: string; + LANG: string; + VIRTUAL_ENV_PROMPT: string; + LS_COLORS: string; + npm_lifecycle_script: string; + SHELL: string; + npm_package_version: string; + npm_lifecycle_event: string; + ELECTRON_RUN_AS_NODE: string; + KILOCODE_POSTHOG_API_KEY: string; + GOOGLE_CLOUD_PROJECT: string; + LESSCLOSE: string; + VIRTUAL_ENV: string; + npm_config_globalconfig: string; + npm_config_init_module: string; + PWD: string; + LC_ALL: string; + npm_execpath: string; + XDG_DATA_DIRS: string; + npm_config_global_prefix: string; + npm_command: string; + WSL2_GUI_APPS_ENABLED: string; + HOSTTYPE: string; + WSLENV: string; + INIT_CWD: string; + EDITOR: string; + NODE_ENV: string; + [key: `PUBLIC_${string}`]: undefined; + [key: `${string}`]: string | undefined; + } +} + +/** + * Similar to [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private), but only includes variables that begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) (which defaults to `PUBLIC_`), and can therefore safely be exposed to client-side code. + * + * Note that public dynamic environment variables must all be sent from the server to the client, causing larger network requests — when possible, use `$env/static/public` instead. + * + * ```ts + * import { env } from '$env/dynamic/public'; + * console.log(env.PUBLIC_DEPLOYMENT_SPECIFIC_VARIABLE); + * ``` + */ +declare module '$env/dynamic/public' { + export const env: { + [key: `PUBLIC_${string}`]: string | undefined; + } +} diff --git a/frontend/.svelte-kit/generated/client-optimized/app.js b/frontend/.svelte-kit/generated/client-optimized/app.js new file mode 100644 index 0000000..a3be32d --- /dev/null +++ b/frontend/.svelte-kit/generated/client-optimized/app.js @@ -0,0 +1,31 @@ +export { matchers } from './matchers.js'; + +export const nodes = [ + () => import('./nodes/0'), + () => import('./nodes/1'), + () => import('./nodes/2'), + () => import('./nodes/3') +]; + +export const server_loads = []; + +export const dictionary = { + "/": [2], + "/settings": [3] + }; + +export const hooks = { + handleError: (({ error }) => { console.error(error) }), + + reroute: (() => {}), + transport: {} +}; + +export const decoders = Object.fromEntries(Object.entries(hooks.transport).map(([k, v]) => [k, v.decode])); +export const encoders = Object.fromEntries(Object.entries(hooks.transport).map(([k, v]) => [k, v.encode])); + +export const hash = false; + +export const decode = (type, value) => decoders[type](value); + +export { default as root } from '../root.js'; \ No newline at end of file diff --git a/frontend/.svelte-kit/generated/client-optimized/matchers.js b/frontend/.svelte-kit/generated/client-optimized/matchers.js new file mode 100644 index 0000000..f6bd30a --- /dev/null +++ b/frontend/.svelte-kit/generated/client-optimized/matchers.js @@ -0,0 +1 @@ +export const matchers = {}; \ No newline at end of file diff --git a/frontend/.svelte-kit/generated/client-optimized/nodes/0.js b/frontend/.svelte-kit/generated/client-optimized/nodes/0.js new file mode 100644 index 0000000..b2e56b2 --- /dev/null +++ b/frontend/.svelte-kit/generated/client-optimized/nodes/0.js @@ -0,0 +1,3 @@ +import * as universal from "../../../../src/routes/+layout.ts"; +export { universal }; +export { default as component } from "../../../../src/routes/+layout.svelte"; \ No newline at end of file diff --git a/frontend/.svelte-kit/generated/client-optimized/nodes/1.js b/frontend/.svelte-kit/generated/client-optimized/nodes/1.js new file mode 100644 index 0000000..ac3c6a5 --- /dev/null +++ b/frontend/.svelte-kit/generated/client-optimized/nodes/1.js @@ -0,0 +1 @@ +export { default as component } from "../../../../src/routes/+error.svelte"; \ No newline at end of file diff --git a/frontend/.svelte-kit/generated/client-optimized/nodes/2.js b/frontend/.svelte-kit/generated/client-optimized/nodes/2.js new file mode 100644 index 0000000..740a1cf --- /dev/null +++ b/frontend/.svelte-kit/generated/client-optimized/nodes/2.js @@ -0,0 +1,3 @@ +import * as universal from "../../../../src/routes/+page.ts"; +export { universal }; +export { default as component } from "../../../../src/routes/+page.svelte"; \ No newline at end of file diff --git a/frontend/.svelte-kit/generated/client-optimized/nodes/3.js b/frontend/.svelte-kit/generated/client-optimized/nodes/3.js new file mode 100644 index 0000000..6c3cedd --- /dev/null +++ b/frontend/.svelte-kit/generated/client-optimized/nodes/3.js @@ -0,0 +1,3 @@ +import * as universal from "../../../../src/routes/settings/+page.ts"; +export { universal }; +export { default as component } from "../../../../src/routes/settings/+page.svelte"; \ No newline at end of file diff --git a/frontend/.svelte-kit/generated/client/app.js b/frontend/.svelte-kit/generated/client/app.js new file mode 100644 index 0000000..a3be32d --- /dev/null +++ b/frontend/.svelte-kit/generated/client/app.js @@ -0,0 +1,31 @@ +export { matchers } from './matchers.js'; + +export const nodes = [ + () => import('./nodes/0'), + () => import('./nodes/1'), + () => import('./nodes/2'), + () => import('./nodes/3') +]; + +export const server_loads = []; + +export const dictionary = { + "/": [2], + "/settings": [3] + }; + +export const hooks = { + handleError: (({ error }) => { console.error(error) }), + + reroute: (() => {}), + transport: {} +}; + +export const decoders = Object.fromEntries(Object.entries(hooks.transport).map(([k, v]) => [k, v.decode])); +export const encoders = Object.fromEntries(Object.entries(hooks.transport).map(([k, v]) => [k, v.encode])); + +export const hash = false; + +export const decode = (type, value) => decoders[type](value); + +export { default as root } from '../root.js'; \ No newline at end of file diff --git a/frontend/.svelte-kit/generated/client/matchers.js b/frontend/.svelte-kit/generated/client/matchers.js new file mode 100644 index 0000000..f6bd30a --- /dev/null +++ b/frontend/.svelte-kit/generated/client/matchers.js @@ -0,0 +1 @@ +export const matchers = {}; \ No newline at end of file diff --git a/frontend/.svelte-kit/generated/client/nodes/0.js b/frontend/.svelte-kit/generated/client/nodes/0.js new file mode 100644 index 0000000..b2e56b2 --- /dev/null +++ b/frontend/.svelte-kit/generated/client/nodes/0.js @@ -0,0 +1,3 @@ +import * as universal from "../../../../src/routes/+layout.ts"; +export { universal }; +export { default as component } from "../../../../src/routes/+layout.svelte"; \ No newline at end of file diff --git a/frontend/.svelte-kit/generated/client/nodes/1.js b/frontend/.svelte-kit/generated/client/nodes/1.js new file mode 100644 index 0000000..ac3c6a5 --- /dev/null +++ b/frontend/.svelte-kit/generated/client/nodes/1.js @@ -0,0 +1 @@ +export { default as component } from "../../../../src/routes/+error.svelte"; \ No newline at end of file diff --git a/frontend/.svelte-kit/generated/client/nodes/2.js b/frontend/.svelte-kit/generated/client/nodes/2.js new file mode 100644 index 0000000..740a1cf --- /dev/null +++ b/frontend/.svelte-kit/generated/client/nodes/2.js @@ -0,0 +1,3 @@ +import * as universal from "../../../../src/routes/+page.ts"; +export { universal }; +export { default as component } from "../../../../src/routes/+page.svelte"; \ No newline at end of file diff --git a/frontend/.svelte-kit/generated/client/nodes/3.js b/frontend/.svelte-kit/generated/client/nodes/3.js new file mode 100644 index 0000000..6c3cedd --- /dev/null +++ b/frontend/.svelte-kit/generated/client/nodes/3.js @@ -0,0 +1,3 @@ +import * as universal from "../../../../src/routes/settings/+page.ts"; +export { universal }; +export { default as component } from "../../../../src/routes/settings/+page.svelte"; \ No newline at end of file diff --git a/frontend/.svelte-kit/generated/root.js b/frontend/.svelte-kit/generated/root.js new file mode 100644 index 0000000..4d1e892 --- /dev/null +++ b/frontend/.svelte-kit/generated/root.js @@ -0,0 +1,3 @@ +import { asClassComponent } from 'svelte/legacy'; +import Root from './root.svelte'; +export default asClassComponent(Root); \ No newline at end of file diff --git a/frontend/.svelte-kit/generated/root.svelte b/frontend/.svelte-kit/generated/root.svelte new file mode 100644 index 0000000..0795183 --- /dev/null +++ b/frontend/.svelte-kit/generated/root.svelte @@ -0,0 +1,68 @@ + + + + +{#if constructors[1]} + {@const Pyramid_0 = constructors[0]} + + + + + + +{:else} + {@const Pyramid_0 = constructors[0]} + + + +{/if} + +{#if mounted} +
+ {#if navigated} + {title} + {/if} +
+{/if} \ No newline at end of file diff --git a/frontend/.svelte-kit/generated/server/internal.js b/frontend/.svelte-kit/generated/server/internal.js new file mode 100644 index 0000000..531bf75 --- /dev/null +++ b/frontend/.svelte-kit/generated/server/internal.js @@ -0,0 +1,53 @@ + +import root from '../root.js'; +import { set_building, set_prerendering } from '__sveltekit/environment'; +import { set_assets } from '$app/paths/internal/server'; +import { set_manifest, set_read_implementation } from '__sveltekit/server'; +import { set_private_env, set_public_env } from '../../../node_modules/@sveltejs/kit/src/runtime/shared-server.js'; + +export const options = { + app_template_contains_nonce: false, + async: false, + csp: {"mode":"auto","directives":{"upgrade-insecure-requests":false,"block-all-mixed-content":false},"reportOnly":{"upgrade-insecure-requests":false,"block-all-mixed-content":false}}, + csrf_check_origin: true, + csrf_trusted_origins: [], + embedded: false, + env_public_prefix: 'PUBLIC_', + env_private_prefix: '', + hash_routing: false, + hooks: null, // added lazily, via `get_hooks` + preload_strategy: "modulepreload", + root, + service_worker: false, + service_worker_options: undefined, + templates: { + app: ({ head, body, assets, nonce, env }) => "\n\n\t\n\t\t\n\t\t\n\t\t\n\t\t" + head + "\n\t\n\t\n\t\t
" + body + "
\n\t\n\n", + error: ({ status, message }) => "\n\n\t\n\t\t\n\t\t" + message + "\n\n\t\t\n\t\n\t\n\t\t
\n\t\t\t" + status + "\n\t\t\t
\n\t\t\t\t

" + message + "

\n\t\t\t
\n\t\t
\n\t\n\n" + }, + version_hash: "1ynwnul" +}; + +export async function get_hooks() { + let handle; + let handleFetch; + let handleError; + let handleValidationError; + let init; + + + let reroute; + let transport; + + + return { + handle, + handleFetch, + handleError, + handleValidationError, + init, + reroute, + transport + }; +} + +export { set_assets, set_building, set_manifest, set_prerendering, set_private_env, set_public_env, set_read_implementation }; diff --git a/frontend/.svelte-kit/non-ambient.d.ts b/frontend/.svelte-kit/non-ambient.d.ts new file mode 100644 index 0000000..5235a97 --- /dev/null +++ b/frontend/.svelte-kit/non-ambient.d.ts @@ -0,0 +1,42 @@ + +// this file is generated — do not edit it + + +declare module "svelte/elements" { + export interface HTMLAttributes { + 'data-sveltekit-keepfocus'?: true | '' | 'off' | undefined | null; + 'data-sveltekit-noscroll'?: true | '' | 'off' | undefined | null; + 'data-sveltekit-preload-code'?: + | true + | '' + | 'eager' + | 'viewport' + | 'hover' + | 'tap' + | 'off' + | undefined + | null; + 'data-sveltekit-preload-data'?: true | '' | 'hover' | 'tap' | 'off' | undefined | null; + 'data-sveltekit-reload'?: true | '' | 'off' | undefined | null; + 'data-sveltekit-replacestate'?: true | '' | 'off' | undefined | null; + } +} + +export {}; + + +declare module "$app/types" { + export interface AppTypes { + RouteId(): "/" | "/settings"; + RouteParams(): { + + }; + LayoutParams(): { + "/": Record; + "/settings": Record + }; + Pathname(): "/" | "/settings" | "/settings/"; + ResolvedPathname(): `${"" | `/${string}`}${ReturnType}`; + Asset(): string & {}; + } +} \ No newline at end of file diff --git a/frontend/.svelte-kit/output/client/.vite/manifest.json b/frontend/.svelte-kit/output/client/.vite/manifest.json new file mode 100644 index 0000000..3bad808 --- /dev/null +++ b/frontend/.svelte-kit/output/client/.vite/manifest.json @@ -0,0 +1,159 @@ +{ + ".svelte-kit/generated/client-optimized/app.js": { + "file": "_app/immutable/entry/app.B-xBk5-0.js", + "name": "entry/app", + "src": ".svelte-kit/generated/client-optimized/app.js", + "isEntry": true, + "imports": [ + "_CQO205-B.js", + "_CWb4Vnhz.js", + "_CqZim_6h.js", + "_C98uKxzC.js" + ], + "dynamicImports": [ + ".svelte-kit/generated/client-optimized/nodes/0.js", + ".svelte-kit/generated/client-optimized/nodes/1.js", + ".svelte-kit/generated/client-optimized/nodes/2.js", + ".svelte-kit/generated/client-optimized/nodes/3.js" + ] + }, + ".svelte-kit/generated/client-optimized/nodes/0.js": { + "file": "_app/immutable/nodes/0.Cd4CVt-Z.js", + "name": "nodes/0", + "src": ".svelte-kit/generated/client-optimized/nodes/0.js", + "isEntry": true, + "isDynamicEntry": true, + "imports": [ + "_CWb4Vnhz.js", + "_CCsGeFPC.js", + "_CQO205-B.js", + "_DKg_yD9X.js", + "_BEiADdeo.js", + "_CsANhQOh.js" + ] + }, + ".svelte-kit/generated/client-optimized/nodes/1.js": { + "file": "_app/immutable/nodes/1.CppBCq8O.js", + "name": "nodes/1", + "src": ".svelte-kit/generated/client-optimized/nodes/1.js", + "isEntry": true, + "isDynamicEntry": true, + "imports": [ + "_CWb4Vnhz.js", + "_CCsGeFPC.js", + "_CQO205-B.js", + "_BEiADdeo.js" + ] + }, + ".svelte-kit/generated/client-optimized/nodes/2.js": { + "file": "_app/immutable/nodes/2.DbjHrap6.js", + "name": "nodes/2", + "src": ".svelte-kit/generated/client-optimized/nodes/2.js", + "isEntry": true, + "isDynamicEntry": true, + "imports": [ + "_BGnnHgKo.js", + "_CWb4Vnhz.js", + "_CCsGeFPC.js", + "_CQO205-B.js", + "_C98uKxzC.js", + "_CsANhQOh.js", + "_CqZim_6h.js", + "_DKg_yD9X.js" + ] + }, + ".svelte-kit/generated/client-optimized/nodes/3.js": { + "file": "_app/immutable/nodes/3.BgpIj6zk.js", + "name": "nodes/3", + "src": ".svelte-kit/generated/client-optimized/nodes/3.js", + "isEntry": true, + "isDynamicEntry": true, + "imports": [ + "_BGnnHgKo.js", + "_CWb4Vnhz.js", + "_CCsGeFPC.js", + "_CQO205-B.js", + "_C98uKxzC.js", + "_CsANhQOh.js" + ] + }, + "_BEiADdeo.js": { + "file": "_app/immutable/chunks/BEiADdeo.js", + "name": "stores", + "imports": [ + "_CHnJS4Dz.js" + ] + }, + "_BGnnHgKo.js": { + "file": "_app/immutable/chunks/BGnnHgKo.js", + "name": "api", + "imports": [ + "_CQO205-B.js", + "_CsANhQOh.js" + ] + }, + "_C98uKxzC.js": { + "file": "_app/immutable/chunks/C98uKxzC.js", + "name": "props", + "imports": [ + "_CQO205-B.js", + "_CWb4Vnhz.js" + ] + }, + "_CCsGeFPC.js": { + "file": "_app/immutable/chunks/CCsGeFPC.js", + "name": "legacy", + "imports": [ + "_CQO205-B.js" + ] + }, + "_CHnJS4Dz.js": { + "file": "_app/immutable/chunks/CHnJS4Dz.js", + "name": "entry", + "imports": [ + "_CQO205-B.js", + "_CqZim_6h.js" + ] + }, + "_CQO205-B.js": { + "file": "_app/immutable/chunks/CQO205-B.js", + "name": "index" + }, + "_CWb4Vnhz.js": { + "file": "_app/immutable/chunks/CWb4Vnhz.js", + "name": "disclose-version", + "imports": [ + "_CQO205-B.js" + ] + }, + "_CqZim_6h.js": { + "file": "_app/immutable/chunks/CqZim_6h.js", + "name": "index-client", + "imports": [ + "_CQO205-B.js" + ] + }, + "_CsANhQOh.js": { + "file": "_app/immutable/chunks/CsANhQOh.js", + "name": "toasts", + "imports": [ + "_CQO205-B.js" + ] + }, + "_DKg_yD9X.js": { + "file": "_app/immutable/chunks/DKg_yD9X.js", + "name": "class", + "imports": [ + "_CQO205-B.js" + ] + }, + "node_modules/@sveltejs/kit/src/runtime/client/entry.js": { + "file": "_app/immutable/entry/start.CiUb2lZD.js", + "name": "entry/start", + "src": "node_modules/@sveltejs/kit/src/runtime/client/entry.js", + "isEntry": true, + "imports": [ + "_CHnJS4Dz.js" + ] + } +} \ No newline at end of file diff --git a/frontend/.svelte-kit/output/client/_app/immutable/chunks/BEiADdeo.js b/frontend/.svelte-kit/output/client/_app/immutable/chunks/BEiADdeo.js new file mode 100644 index 0000000..f2c067c --- /dev/null +++ b/frontend/.svelte-kit/output/client/_app/immutable/chunks/BEiADdeo.js @@ -0,0 +1 @@ +import{s as e}from"./CHnJS4Dz.js";const r=()=>{const s=e;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},b={subscribe(s){return r().page.subscribe(s)}};export{b as p}; diff --git a/frontend/.svelte-kit/output/client/_app/immutable/chunks/BGnnHgKo.js b/frontend/.svelte-kit/output/client/_app/immutable/chunks/BGnnHgKo.js new file mode 100644 index 0000000..f0e6762 --- /dev/null +++ b/frontend/.svelte-kit/output/client/_app/immutable/chunks/BGnnHgKo.js @@ -0,0 +1 @@ +import{h as v,Z as S,a5 as T,a6 as b,a7 as C,a8 as P,a9 as I,aa as w,ab as N,e as $,ac as p,J as i,ad as L}from"./CQO205-B.js";import{a as m}from"./CsANhQOh.js";const M=Symbol("is custom element"),q=Symbol("is html");function F(e){if(v){var t=!1,r=()=>{if(!t){if(t=!0,e.hasAttribute("value")){var s=e.value;k(e,"value",null),e.value=s}if(e.hasAttribute("checked")){var a=e.checked;k(e,"checked",null),e.checked=a}}};e.__on_r=r,S(r),T()}}function k(e,t,r,s){var a=j(e);v&&(a[t]=e.getAttribute(t),t==="src"||t==="srcset"||t==="href"&&e.nodeName==="LINK")||a[t]!==(a[t]=r)&&(t==="loading"&&(e[b]=r),r==null?e.removeAttribute(t):typeof r!="string"&&O(e).includes(t)?e[t]=r:e.setAttribute(t,r))}function j(e){return e.__attributes??={[M]:e.nodeName.includes("-"),[q]:e.namespaceURI===C}}var y=new Map;function O(e){var t=e.getAttribute("is")||e.nodeName,r=y.get(t);if(r)return r;y.set(t,r=[]);for(var s,a=e,o=Element.prototype;o!==a;){s=I(a);for(var n in s)s[n].set&&r.push(n);a=P(a)}return r}function U(e,t,r=t){var s=new WeakSet;w(e,"input",async a=>{var o=a?e.defaultValue:e.value;if(o=u(e)?h(o):o,r(o),i!==null&&s.add(i),await N(),o!==(o=t())){var n=e.selectionStart,f=e.selectionEnd,A=e.value.length;if(e.value=o??"",f!==null){var d=e.value.length;n===f&&f===A&&d>A?(e.selectionStart=d,e.selectionEnd=d):(e.selectionStart=n,e.selectionEnd=Math.min(f,d))}}}),(v&&e.defaultValue!==e.value||$(t)==null&&e.value)&&(r(u(e)?h(e.value):e.value),i!==null&&s.add(i)),p(()=>{var a=t();if(e===document.activeElement){var o=L??i;if(s.has(o))return}u(e)&&a===h(e.value)||e.type==="date"&&!a&&!e.value||a!==e.value&&(e.value=a??"")})}function B(e,t,r=t){w(e,"change",s=>{var a=s?e.defaultChecked:e.checked;r(a)}),(v&&e.defaultChecked!==e.checked||$(t)==null)&&r(e.checked),p(()=>{var s=t();e.checked=!!s})}function u(e){var t=e.type;return t==="number"||t==="range"}function h(e){return e===""?null:+e}const E="/api";async function c(e){try{console.log(`[api.fetchApi][Action] Fetching from context={{'endpoint': '${e}'}}`);const t=await fetch(`${E}${e}`);if(!t.ok)throw new Error(`API request failed with status ${t.status}`);return await t.json()}catch(t){throw console.error(`[api.fetchApi][Coherence:Failed] Error fetching from ${e}:`,t),m(t.message,"error"),t}}async function _(e,t){try{console.log(`[api.postApi][Action] Posting to context={{'endpoint': '${e}'}}`);const r=await fetch(`${E}${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!r.ok)throw new Error(`API request failed with status ${r.status}`);return await r.json()}catch(r){throw console.error(`[api.postApi][Coherence:Failed] Error posting to ${e}:`,r),m(r.message,"error"),r}}async function g(e,t="GET",r=null){try{console.log(`[api.requestApi][Action] ${t} to context={{'endpoint': '${e}'}}`);const s={method:t,headers:{"Content-Type":"application/json"}};r&&(s.body=JSON.stringify(r));const a=await fetch(`${E}${e}`,s);if(!a.ok){const o=await a.json().catch(()=>({}));throw new Error(o.detail||`API request failed with status ${a.status}`)}return await a.json()}catch(s){throw console.error(`[api.requestApi][Coherence:Failed] Error ${t} to ${e}:`,s),m(s.message,"error"),s}}const l={getPlugins:()=>c("/plugins/"),getTasks:()=>c("/tasks/"),getTask:e=>c(`/tasks/${e}`),createTask:(e,t)=>_("/tasks/",{plugin_id:e,params:t}),getSettings:()=>c("/settings/"),updateGlobalSettings:e=>g("/settings/global","PATCH",e),getEnvironments:()=>c("/settings/environments"),addEnvironment:e=>_("/settings/environments",e),updateEnvironment:(e,t)=>g(`/settings/environments/${e}`,"PUT",t),deleteEnvironment:e=>g(`/settings/environments/${e}`,"DELETE"),testEnvironmentConnection:e=>_(`/settings/environments/${e}/test`,{})},D=l.updateGlobalSettings,H=l.addEnvironment,J=l.updateEnvironment,R=l.deleteEnvironment,V=l.testEnvironmentConnection;export{l as a,U as b,B as c,J as d,H as e,R as f,F as r,k as s,V as t,D as u}; diff --git a/frontend/.svelte-kit/output/client/_app/immutable/chunks/C98uKxzC.js b/frontend/.svelte-kit/output/client/_app/immutable/chunks/C98uKxzC.js new file mode 100644 index 0000000..06fea01 --- /dev/null +++ b/frontend/.svelte-kit/output/client/_app/immutable/chunks/C98uKxzC.js @@ -0,0 +1 @@ +import{J as E,S as y,X as S,T as L,v as P,L as T,h as g,E as M,ae as k,M as w,w as B,z as N,af as x,B as Y,H as C,C as F,x as U,D as R,ag as j,ah as q,j as b,ai as z,o as H,aj as $,ak as G,A as J,d as X,al as Z,am as K,an as Q,ao as V,ap as W,a3 as ee,e as te,aq as ae,ar as se,as as re}from"./CQO205-B.js";import{d as ie}from"./CWb4Vnhz.js";class ne{anchor;#t=new Map;#a=new Map;#e=new Map;#s=new Set;#r=!0;constructor(e,a=!0){this.anchor=e,this.#r=a}#i=()=>{var e=E;if(this.#t.has(e)){var a=this.#t.get(e),t=this.#a.get(a);if(t)y(t),this.#s.delete(a);else{var n=this.#e.get(a);n&&(this.#a.set(a,n.effect),this.#e.delete(a),n.fragment.lastChild.remove(),this.anchor.before(n.fragment),t=n.effect)}for(const[s,i]of this.#t){if(this.#t.delete(s),s===e)break;const r=this.#e.get(i);r&&(S(r.effect),this.#e.delete(i))}for(const[s,i]of this.#a){if(s===a||this.#s.has(s))continue;const r=()=>{if(Array.from(this.#t.values()).includes(s)){var h=document.createDocumentFragment();k(i,h),h.append(P()),this.#e.set(s,{effect:i,fragment:h})}else S(i);this.#s.delete(s),this.#a.delete(s)};this.#r||!t?(this.#s.add(s),L(i,r,!1)):r()}}};#n=e=>{this.#t.delete(e);const a=Array.from(this.#t.values());for(const[t,n]of this.#e)a.includes(t)||(S(n.effect),this.#e.delete(t))};ensure(e,a){var t=E,n=w();if(a&&!this.#a.has(e)&&!this.#e.has(e))if(n){var s=document.createDocumentFragment(),i=P();s.append(i),this.#e.set(e,{effect:T(()=>a(i)),fragment:s})}else this.#a.set(e,T(()=>a(this.anchor)));if(this.#t.set(t,e),n){for(const[r,f]of this.#a)r===e?t.skipped_effects.delete(f):t.skipped_effects.add(f);for(const[r,f]of this.#e)r===e?t.skipped_effects.delete(f.effect):t.skipped_effects.add(f.effect);t.oncommit(this.#i),t.ondiscard(this.#n)}else g&&(this.anchor=M),this.#i()}}function de(d,e,a=!1){g&&N();var t=new ne(d),n=a?x:0;function s(i,r){if(g){const h=Y(d)===C;if(i===h){var f=F();U(f),t.anchor=f,R(!1),t.ensure(i,r),R(!0);return}}t.ensure(i,r)}B(()=>{var i=!1;e((r,f=!0)=>{i=!0,s(f,r)}),i||s(!1,null)},n)}function he(d,e,a,t){var n=!X||(a&Z)!==0,s=(a&K)!==0,i=(a&re)!==0,r=t,f=!0,h=()=>(f&&(f=!1,r=i?te(t):t),r),o;if(s){var I=V in d||W in d;o=j(d,e)?.set??(I&&e in d?c=>d[e]=c:void 0)}var _,p=!1;s?[_,p]=ie(()=>d[e]):_=d[e],_===void 0&&t!==void 0&&(_=h(),o&&(n&&ae(),o(_)));var u;if(n?u=()=>{var c=d[e];return c===void 0?h():(f=!0,c)}:u=()=>{var c=d[e];return c!==void 0&&(r=void 0),c===void 0?r:c},n&&(a&q)===0)return u;if(o){var D=d.$$legacy;return(function(c,v){return arguments.length>0?((!n||!v||D||p)&&o(v?u():c),c):u()})}var m=!1,l=((a&se)!==0?ee:J)(()=>(m=!1,u()));s&&b(l);var O=$;return(function(c,v){if(arguments.length>0){const A=v?b(l):n&&s?z(c):c;return H(l,A),m=!0,r!==void 0&&(r=A),c}return Q&&m||(O.f&G)!==0?l.v:b(l)})}export{ne as B,de as i,he as p}; diff --git a/frontend/.svelte-kit/output/client/_app/immutable/chunks/CCsGeFPC.js b/frontend/.svelte-kit/output/client/_app/immutable/chunks/CCsGeFPC.js new file mode 100644 index 0000000..e040cf5 --- /dev/null +++ b/frontend/.svelte-kit/output/client/_app/immutable/chunks/CCsGeFPC.js @@ -0,0 +1 @@ +import{b as d,a0 as g,u as c,e as b,a1 as i,a2 as m,j as p,k,a3 as v,a4 as h}from"./CQO205-B.js";function x(a=!1){const s=d,e=s.l.u;if(!e)return;let f=()=>k(s.s);if(a){let n=0,t={};const _=v(()=>{let l=!1;const r=s.s;for(const o in r)r[o]!==t[o]&&(t[o]=r[o],l=!0);return l&&n++,n});f=()=>p(_)}e.b.length&&g(()=>{u(s,f),i(e.b)}),c(()=>{const n=b(()=>e.m.map(m));return()=>{for(const t of n)typeof t=="function"&&t()}}),e.a.length&&c(()=>{u(s,f),i(e.a)})}function u(a,s){if(a.l.s)for(const e of a.l.s)p(e);s()}h();export{x as i}; diff --git a/frontend/.svelte-kit/output/client/_app/immutable/chunks/CHnJS4Dz.js b/frontend/.svelte-kit/output/client/_app/immutable/chunks/CHnJS4Dz.js new file mode 100644 index 0000000..5fb6da7 --- /dev/null +++ b/frontend/.svelte-kit/output/client/_app/immutable/chunks/CHnJS4Dz.js @@ -0,0 +1 @@ +import{$ as be,aA as U,j as T,o as P,ab as Z,b1 as Ne,b2 as mt}from"./CQO205-B.js";import{o as qe}from"./CqZim_6h.js";class ke{constructor(t,n){this.status=t,typeof n=="string"?this.body={message:n}:n?this.body=n:this.body={message:`Error: ${t}`}}toString(){return JSON.stringify(this.body)}}class Ee{constructor(t,n){this.status=t,this.location=n}}class Se extends Error{constructor(t,n,a){super(a),this.status=t,this.text=n}}new URL("sveltekit-internal://");function _t(e,t){return e==="/"||t==="ignore"?e:t==="never"?e.endsWith("/")?e.slice(0,-1):e:t==="always"&&!e.endsWith("/")?e+"/":e}function wt(e){return e.split("%25").map(decodeURI).join("%25")}function vt(e){for(const t in e)e[t]=decodeURIComponent(e[t]);return e}function de({href:e}){return e.split("#")[0]}function yt(e,t,n,a=!1){const r=new URL(e);Object.defineProperty(r,"searchParams",{value:new Proxy(r.searchParams,{get(o,s){if(s==="get"||s==="getAll"||s==="has")return l=>(n(l),o[s](l));t();const c=Reflect.get(o,s);return typeof c=="function"?c.bind(o):c}}),enumerable:!0,configurable:!0});const i=["href","pathname","search","toString","toJSON"];a&&i.push("hash");for(const o of i)Object.defineProperty(r,o,{get(){return t(),e[o]},enumerable:!0,configurable:!0});return r}function bt(...e){let t=5381;for(const n of e)if(typeof n=="string"){let a=n.length;for(;a;)t=t*33^n.charCodeAt(--a)}else if(ArrayBuffer.isView(n)){const a=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let r=a.length;for(;r;)t=t*33^a[--r]}else throw new TypeError("value must be a string or TypedArray");return(t>>>0).toString(36)}new TextEncoder;new TextDecoder;function kt(e){const t=atob(e),n=new Uint8Array(t.length);for(let a=0;a((e instanceof Request?e.method:t?.method||"GET")!=="GET"&&G.delete(Re(e)),Et(e,t));const G=new Map;function St(e,t){const n=Re(e,t),a=document.querySelector(n);if(a?.textContent){a.remove();let{body:r,...i}=JSON.parse(a.textContent);const o=a.getAttribute("data-ttl");return o&&G.set(n,{body:r,init:i,ttl:1e3*Number(o)}),a.getAttribute("data-b64")!==null&&(r=kt(r)),Promise.resolve(new Response(r,i))}return window.fetch(e,t)}function Rt(e,t,n){if(G.size>0){const a=Re(e,n),r=G.get(a);if(r){if(performance.now(){const r=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(a);if(r)return t.push({name:r[1],matcher:r[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const i=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(a);if(i)return t.push({name:i[1],matcher:i[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!a)return;const o=a.split(/\[(.+?)\](?!\])/);return"/"+o.map((c,l)=>{if(l%2){if(c.startsWith("x+"))return he(String.fromCharCode(parseInt(c.slice(2),16)));if(c.startsWith("u+"))return he(String.fromCharCode(...c.slice(2).split("-").map(w=>parseInt(w,16))));const d=xt.exec(c),[,h,f,u,p]=d;return t.push({name:u,matcher:p,optional:!!h,rest:!!f,chained:f?l===1&&o[0]==="":!1}),f?"([^]*?)":h?"([^/]*)?":"([^/]+?)"}return he(c)}).join("")}).join("")}/?$`),params:t}}function Lt(e){return e!==""&&!/^\([^)]+\)$/.test(e)}function Ut(e){return e.slice(1).split("/").filter(Lt)}function Tt(e,t,n){const a={},r=e.slice(1),i=r.filter(s=>s!==void 0);let o=0;for(let s=0;sd).join("/"),o=0),l===void 0){c.rest&&(a[c.name]="");continue}if(!c.matcher||n[c.matcher](l)){a[c.name]=l;const d=t[s+1],h=r[s+1];d&&!d.rest&&d.optional&&h&&c.chained&&(o=0),!d&&!h&&Object.keys(a).length===i.length&&(o=0);continue}if(c.optional&&c.chained){o++;continue}return}if(!o)return a}function he(e){return e.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function Pt({nodes:e,server_loads:t,dictionary:n,matchers:a}){const r=new Set(t);return Object.entries(n).map(([s,[c,l,d]])=>{const{pattern:h,params:f}=At(s),u={id:s,exec:p=>{const w=h.exec(p);if(w)return Tt(w,f,a)},errors:[1,...d||[]].map(p=>e[p]),layouts:[0,...l||[]].map(o),leaf:i(c)};return u.errors.length=u.layouts.length=Math.max(u.errors.length,u.layouts.length),u});function i(s){const c=s<0;return c&&(s=~s),[c,e[s]]}function o(s){return s===void 0?s:[r.has(s),e[s]]}}function We(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function De(e,t,n=JSON.stringify){const a=n(t);try{sessionStorage[e]=a}catch{}}const A=globalThis.__sveltekit_1uq6ubj?.base??"",It=globalThis.__sveltekit_1uq6ubj?.assets??A??"",Ot="1766259433446",Ye="sveltekit:snapshot",Je="sveltekit:scroll",ze="sveltekit:states",$t="sveltekit:pageurl",B="sveltekit:history",H="sveltekit:navigation",j={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},xe=location.origin;function Xe(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){const n=document.getElementsByTagName("base");t=n.length?n[0].href:document.URL}return new URL(e,t)}function ce(){return{x:pageXOffset,y:pageYOffset}}function V(e,t){return e.getAttribute(`data-sveltekit-${t}`)}const Ve={...j,"":j.hover};function Qe(e){let t=e.assignedSlot??e.parentNode;return t?.nodeType===11&&(t=t.host),t}function Ze(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()==="A"&&e.hasAttribute("href"))return e;e=Qe(e)}}function me(e,t,n){let a;try{if(a=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&a.hash.match(/^#[^/]/)){const s=location.hash.split("#")[1]||"/";a.hash=`#${s}${a.hash}`}}catch{}const r=e instanceof SVGAElement?e.target.baseVal:e.target,i=!a||!!r||le(a,t,n)||(e.getAttribute("rel")||"").split(/\s+/).includes("external"),o=a?.origin===xe&&e.hasAttribute("download");return{url:a,external:i,target:r,download:o}}function ee(e){let t=null,n=null,a=null,r=null,i=null,o=null,s=e;for(;s&&s!==document.documentElement;)a===null&&(a=V(s,"preload-code")),r===null&&(r=V(s,"preload-data")),t===null&&(t=V(s,"keepfocus")),n===null&&(n=V(s,"noscroll")),i===null&&(i=V(s,"reload")),o===null&&(o=V(s,"replacestate")),s=Qe(s);function c(l){switch(l){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:Ve[a??"off"],preload_data:Ve[r??"off"],keepfocus:c(t),noscroll:c(n),reload:c(i),replace_state:c(o)}}function Be(e){const t=be(e);let n=!0;function a(){n=!0,t.update(o=>o)}function r(o){n=!1,t.set(o)}function i(o){let s;return t.subscribe(c=>{(s===void 0||n&&c!==s)&&o(s=c)})}return{notify:a,set:r,subscribe:i}}const et={v:()=>{}};function Ct(){const{set:e,subscribe:t}=be(!1);let n;async function a(){clearTimeout(n);try{const r=await fetch(`${It}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!r.ok)return!1;const o=(await r.json()).version!==Ot;return o&&(e(!0),et.v(),clearTimeout(n)),o}catch{return!1}}return{subscribe:t,check:a}}function le(e,t,n){return e.origin!==xe||!e.pathname.startsWith(t)?!0:n?e.pathname!==location.pathname:!1}function ln(e){}const tt=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...tt];const jt=new Set([...tt]);[...jt];function Nt(e){return e.filter(t=>t!=null)}function Ae(e){return e instanceof ke||e instanceof Se?e.status:500}function qt(e){return e instanceof Se?e.text:"Internal Error"}let k,W,pe;const Dt=qe.toString().includes("$$")||/function \w+\(\) \{\}/.test(qe.toString());Dt?(k={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL("https://example.com")},W={current:null},pe={current:!1}):(k=new class{#e=U({});get data(){return T(this.#e)}set data(t){P(this.#e,t)}#t=U(null);get form(){return T(this.#t)}set form(t){P(this.#t,t)}#n=U(null);get error(){return T(this.#n)}set error(t){P(this.#n,t)}#a=U({});get params(){return T(this.#a)}set params(t){P(this.#a,t)}#r=U({id:null});get route(){return T(this.#r)}set route(t){P(this.#r,t)}#o=U({});get state(){return T(this.#o)}set state(t){P(this.#o,t)}#s=U(-1);get status(){return T(this.#s)}set status(t){P(this.#s,t)}#i=U(new URL("https://example.com"));get url(){return T(this.#i)}set url(t){P(this.#i,t)}},W=new class{#e=U(null);get current(){return T(this.#e)}set current(t){P(this.#e,t)}},pe=new class{#e=U(!1);get current(){return T(this.#e)}set current(t){P(this.#e,t)}},et.v=()=>pe.current=!0);function nt(e){Object.assign(k,e)}const Ke={spanContext(){return Vt},setAttribute(){return this},setAttributes(){return this},addEvent(){return this},setStatus(){return this},updateName(){return this},end(){return this},isRecording(){return!1},recordException(){return this},addLink(){return this},addLinks(){return this}},Vt={traceId:"",spanId:"",traceFlags:0},Bt=new Set(["icon","shortcut icon","apple-touch-icon"]),q=We(Je)??{},Y=We(Ye)??{},C={url:Be({}),page:Be({}),navigating:be(null),updated:Ct()};function Le(e){q[e]=ce()}function Kt(e,t){let n=e+1;for(;q[n];)delete q[n],n+=1;for(n=t+1;Y[n];)delete Y[n],n+=1}function J(e,t=!1){return t?location.replace(e.href):location.href=e.href,new Promise(()=>{})}async function at(){if("serviceWorker"in navigator){const e=await navigator.serviceWorker.getRegistration(A||"/");e&&await e.update()}}function Fe(){}let Ue,_e,te,I,we,v;const ne=[],ae=[];let R=null;function ve(){R?.fork?.then(e=>e?.discard()),R=null}const Q=new Map,rt=new Set,Ft=new Set,M=new Set;let _={branch:[],error:null,url:null},ot=!1,re=!1,Ge=!0,z=!1,F=!1,st=!1,Te=!1,Pe,y,x,N;const oe=new Set,Me=new Map;async function hn(e,t,n){globalThis.__sveltekit_1uq6ubj?.data&&globalThis.__sveltekit_1uq6ubj.data,document.URL!==location.href&&(location.href=location.href),v=e,await e.hooks.init?.(),Ue=Pt(e),I=document.documentElement,we=t,_e=e.nodes[0],te=e.nodes[1],_e(),te(),y=history.state?.[B],x=history.state?.[H],y||(y=x=Date.now(),history.replaceState({...history.state,[B]:y,[H]:x},""));const a=q[y];function r(){a&&(history.scrollRestoration="manual",scrollTo(a.x,a.y))}n?(r(),await nn(we,n)):(await K({type:"enter",url:Xe(v.hash?on(new URL(location.href)):location.href),replace_state:!0}),r()),tn()}function Gt(){ne.length=0,Te=!1}function it(e){ae.some(t=>t?.snapshot)&&(Y[e]=ae.map(t=>t?.snapshot?.capture()))}function ct(e){Y[e]?.forEach((t,n)=>{ae[n]?.snapshot?.restore(t)})}function He(){Le(y),De(Je,q),it(x),De(Ye,Y)}async function Mt(e,t,n,a){let r;t.invalidateAll&&ve(),await K({type:"goto",url:Xe(e),keepfocus:t.keepFocus,noscroll:t.noScroll,replace_state:t.replaceState,state:t.state,redirect_count:n,nav_token:a,accept:()=>{t.invalidateAll&&(Te=!0,r=[...Me.keys()]),t.invalidate&&t.invalidate.forEach(en)}}),t.invalidateAll&&Z().then(Z).then(()=>{Me.forEach(({resource:i},o)=>{r?.includes(o)&&i.refresh?.()})})}async function Ht(e){if(e.id!==R?.id){ve();const t={};if(oe.add(t),R={id:e.id,token:t,promise:ft({...e,preload:t}).then(n=>(oe.delete(t),n.type==="loaded"&&n.state.error&&ve(),n)),fork:null},Ne){const n=R;n.fork=n.promise.then(a=>{if(n===R&&a.type==="loaded")try{return Ne(()=>{Pe.$set(a.props),nt(a.props.page)})}catch{}return null})}}return R.promise}async function ge(e){const t=(await ue(e,!1))?.route;t&&await Promise.all([...t.layouts,t.leaf].map(n=>n?.[1]()))}async function lt(e,t,n){_=e.state;const a=document.querySelector("style[data-sveltekit]");if(a&&a.remove(),Object.assign(k,e.props.page),Pe=new v.root({target:t,props:{...e.props,stores:C,components:ae},hydrate:n,sync:!1}),await Promise.resolve(),ct(x),n){const r={from:null,to:{params:_.params,route:{id:_.route?.id??null},url:new URL(location.href)},willUnload:!1,type:"enter",complete:Promise.resolve()};M.forEach(i=>i(r))}re=!0}function se({url:e,params:t,branch:n,status:a,error:r,route:i,form:o}){let s="never";if(A&&(e.pathname===A||e.pathname===A+"/"))s="always";else for(const u of n)u?.slash!==void 0&&(s=u.slash);e.pathname=_t(e.pathname,s),e.search=e.search;const c={type:"loaded",state:{url:e,params:t,branch:n,error:r,route:i},props:{constructors:Nt(n).map(u=>u.node.component),page:je(k)}};o!==void 0&&(c.props.form=o);let l={},d=!k,h=0;for(let u=0;u(s&&(c.route=!0),f[u])}),params:new Proxy(a,{get:(f,u)=>(s&&c.params.add(u),f[u])}),data:i?.data??null,url:yt(n,()=>{s&&(c.url=!0)},f=>{s&&c.search_params.add(f)},v.hash),async fetch(f,u){f instanceof Request&&(u={body:f.method==="GET"||f.method==="HEAD"?void 0:await f.blob(),cache:f.cache,credentials:f.credentials,headers:[...f.headers].length>0?f?.headers:void 0,integrity:f.integrity,keepalive:f.keepalive,method:f.method,mode:f.mode,redirect:f.redirect,referrer:f.referrer,referrerPolicy:f.referrerPolicy,signal:f.signal,...u});const{resolved:p,promise:w}=ut(f,u,n);return s&&d(p.href),w},setHeaders:()=>{},depends:d,parent(){return s&&(c.parent=!0),t()},untrack(f){s=!1;try{return f()}finally{s=!0}}};o=await l.universal.load.call(null,h)??null}return{node:l,loader:e,server:i,universal:l.universal?.load?{type:"data",data:o,uses:c}:null,data:o??i?.data??null,slash:l.universal?.trailingSlash??i?.slash}}function ut(e,t,n){let a=e instanceof Request?e.url:e;const r=new URL(a,n);r.origin===n.origin&&(a=r.href.slice(n.origin.length));const i=re?Rt(a,r.href,t):St(a,t);return{resolved:r,promise:i}}function Wt(e,t,n,a,r,i){if(Te)return!0;if(!r)return!1;if(r.parent&&e||r.route&&t||r.url&&n)return!0;for(const o of r.search_params)if(a.has(o))return!0;for(const o of r.params)if(i[o]!==_.params[o])return!0;for(const o of r.dependencies)if(ne.some(s=>s(new URL(o))))return!0;return!1}function Oe(e,t){return e?.type==="data"?e:e?.type==="skip"?t??null:null}function Yt(e,t){if(!e)return new Set(t.searchParams.keys());const n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(const a of n){const r=e.searchParams.getAll(a),i=t.searchParams.getAll(a);r.every(o=>i.includes(o))&&i.every(o=>r.includes(o))&&n.delete(a)}return n}function Jt({error:e,url:t,route:n,params:a}){return{type:"loaded",state:{error:e,url:t,route:n,params:a,branch:[]},props:{page:je(k),constructors:[]}}}async function ft({id:e,invalidating:t,url:n,params:a,route:r,preload:i}){if(R?.id===e)return oe.delete(R.token),R.promise;const{errors:o,layouts:s,leaf:c}=r,l=[...s,c];o.forEach(m=>m?.().catch(()=>{})),l.forEach(m=>m?.[1]().catch(()=>{}));const d=_.url?e!==ie(_.url):!1,h=_.route?r.id!==_.route.id:!1,f=Yt(_.url,n);let u=!1;const p=l.map(async(m,g)=>{if(!m)return;const E=_.branch[g];return m[1]===E?.loader&&!Wt(u,h,d,f,E.universal?.uses,a)?E:(u=!0,Ie({loader:m[1],url:n,params:a,route:r,parent:async()=>{const O={};for(let L=0;L{});const w=[];for(let m=0;mPromise.resolve({}),server_data_node:Oe(i)}),s={node:await te(),loader:te,universal:null,server:null,data:null};return se({url:n,params:r,branch:[o,s],status:e,error:t,route:null})}catch(o){if(o instanceof Ee)return Mt(new URL(o.location,location.href),{},0);throw o}}async function Xt(e){const t=e.href;if(Q.has(t))return Q.get(t);let n;try{const a=(async()=>{let r=await v.hooks.reroute({url:new URL(e),fetch:async(i,o)=>ut(i,o,e).promise})??e;if(typeof r=="string"){const i=new URL(e);v.hash?i.hash=r:i.pathname=r,r=i}return r})();Q.set(t,a),n=await a}catch{Q.delete(t);return}return n}async function ue(e,t){if(e&&!le(e,A,v.hash)){const n=await Xt(e);if(!n)return;const a=Qt(n);for(const r of Ue){const i=r.exec(a);if(i)return{id:ie(e),invalidating:t,route:r,params:vt(i),url:e}}}}function Qt(e){return wt(v.hash?e.hash.replace(/^#/,"").replace(/[?#].+/,""):e.pathname.slice(A.length))||"/"}function ie(e){return(v.hash?e.hash.replace(/^#/,""):e.pathname)+e.search}function dt({url:e,type:t,intent:n,delta:a,event:r}){let i=!1;const o=Ce(_,n,e,t);a!==void 0&&(o.navigation.delta=a),r!==void 0&&(o.navigation.event=r);const s={...o.navigation,cancel:()=>{i=!0,o.reject(new Error("navigation cancelled"))}};return z||rt.forEach(c=>c(s)),i?null:o}async function K({type:e,url:t,popped:n,keepfocus:a,noscroll:r,replace_state:i,state:o={},redirect_count:s=0,nav_token:c={},accept:l=Fe,block:d=Fe,event:h}){const f=N;N=c;const u=await ue(t,!1),p=e==="enter"?Ce(_,u,t,e):dt({url:t,type:e,delta:n?.delta,intent:u,event:h});if(!p){d(),N===c&&(N=f);return}const w=y,m=x;l(),z=!0,re&&p.navigation.type!=="enter"&&C.navigating.set(W.current=p.navigation);let g=u&&await ft(u);if(!g){if(le(t,A,v.hash))return await J(t,i);g=await ht(t,{id:null},await X(new Se(404,"Not Found",`Not found: ${t.pathname}`),{url:t,params:{},route:{id:null}}),404,i)}if(t=u?.url||t,N!==c)return p.reject(new Error("navigation aborted")),!1;if(g.type==="redirect"){if(s<20){await K({type:e,url:new URL(g.location,t),popped:n,keepfocus:a,noscroll:r,replace_state:i,state:o,redirect_count:s+1,nav_token:c}),p.fulfil(void 0);return}g=await $e({status:500,error:await X(new Error("Redirect loop"),{url:t,params:{},route:{id:null}}),url:t,route:{id:null}})}else g.props.page.status>=400&&await C.updated.check()&&(await at(),await J(t,i));if(Gt(),Le(w),it(m),g.props.page.url.pathname!==t.pathname&&(t.pathname=g.props.page.url.pathname),o=n?n.state:o,!n){const b=i?0:1,D={[B]:y+=b,[H]:x+=b,[ze]:o};(i?history.replaceState:history.pushState).call(history,D,"",t),i||Kt(y,x)}const E=u&&R?.id===u.id?R.fork:null;R=null,g.props.page.state=o;let S;if(re){const b=(await Promise.all(Array.from(Ft,$=>$(p.navigation)))).filter($=>typeof $=="function");if(b.length>0){let $=function(){b.forEach(fe=>{M.delete(fe)})};b.push($),b.forEach(fe=>{M.add(fe)})}_=g.state,g.props.page&&(g.props.page.url=t);const D=E&&await E;D?S=D.commit():(Pe.$set(g.props),nt(g.props.page),S=mt?.()),st=!0}else await lt(g,we,!1);const{activeElement:O}=document;await S,await Z(),await Z();let L=n?n.scroll:r?ce():null;if(Ge){const b=t.hash&&document.getElementById(pt(t));if(L)scrollTo(L.x,L.y);else if(b){b.scrollIntoView();const{top:D,left:$}=b.getBoundingClientRect();L={x:pageXOffset+$,y:pageYOffset+D}}else scrollTo(0,0)}const gt=document.activeElement!==O&&document.activeElement!==document.body;!a&&!gt&&rn(t,L),Ge=!0,g.props.page&&Object.assign(k,g.props.page),z=!1,e==="popstate"&&ct(x),p.fulfil(void 0),M.forEach(b=>b(p.navigation)),C.navigating.set(W.current=null)}async function ht(e,t,n,a,r){return e.origin===xe&&e.pathname===location.pathname&&!ot?await $e({status:a,error:n,url:e,route:t}):await J(e,r)}function Zt(){let e,t,n;I.addEventListener("mousemove",s=>{const c=s.target;clearTimeout(e),e=setTimeout(()=>{i(c,j.hover)},20)});function a(s){s.defaultPrevented||i(s.composedPath()[0],j.tap)}I.addEventListener("mousedown",a),I.addEventListener("touchstart",a,{passive:!0});const r=new IntersectionObserver(s=>{for(const c of s)c.isIntersecting&&(ge(new URL(c.target.href)),r.unobserve(c.target))},{threshold:0});async function i(s,c){const l=Ze(s,I),d=l===t&&c>=n;if(!l||d)return;const{url:h,external:f,download:u}=me(l,A,v.hash);if(f||u)return;const p=ee(l),w=h&&ie(_.url)===ie(h);if(!(p.reload||w))if(c<=p.preload_data){t=l,n=j.tap;const m=await ue(h,!1);if(!m)return;Ht(m)}else c<=p.preload_code&&(t=l,n=c,ge(h))}function o(){r.disconnect();for(const s of I.querySelectorAll("a")){const{url:c,external:l,download:d}=me(s,A,v.hash);if(l||d)continue;const h=ee(s);h.reload||(h.preload_code===j.viewport&&r.observe(s),h.preload_code===j.eager&&ge(c))}}M.add(o),o()}function X(e,t){if(e instanceof ke)return e.body;const n=Ae(e),a=qt(e);return v.hooks.handleError({error:e,event:t,status:n,message:a})??{message:a}}function en(e){if(typeof e=="function")ne.push(e);else{const{href:t}=new URL(e,location.href);ne.push(n=>n.href===t)}}function tn(){history.scrollRestoration="manual",addEventListener("beforeunload",t=>{let n=!1;if(He(),!z){const a=Ce(_,void 0,null,"leave"),r={...a.navigation,cancel:()=>{n=!0,a.reject(new Error("navigation cancelled"))}};rt.forEach(i=>i(r))}n?(t.preventDefault(),t.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&He()}),navigator.connection?.saveData||Zt(),I.addEventListener("click",async t=>{if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;const n=Ze(t.composedPath()[0],I);if(!n)return;const{url:a,external:r,target:i,download:o}=me(n,A,v.hash);if(!a)return;if(i==="_parent"||i==="_top"){if(window.parent!==window)return}else if(i&&i!=="_self")return;const s=ee(n);if(!(n instanceof SVGAElement)&&a.protocol!==location.protocol&&!(a.protocol==="https:"||a.protocol==="http:")||o)return;const[l,d]=(v.hash?a.hash.replace(/^#/,""):a.href).split("#"),h=l===de(location);if(r||s.reload&&(!h||!d)){dt({url:a,type:"link",event:t})?z=!0:t.preventDefault();return}if(d!==void 0&&h){const[,f]=_.url.href.split("#");if(f===d){if(t.preventDefault(),d===""||d==="top"&&n.ownerDocument.getElementById("top")===null)scrollTo({top:0});else{const u=n.ownerDocument.getElementById(decodeURIComponent(d));u&&(u.scrollIntoView(),u.focus())}return}if(F=!0,Le(y),e(a),!s.replace_state)return;F=!1}t.preventDefault(),await new Promise(f=>{requestAnimationFrame(()=>{setTimeout(f,0)}),setTimeout(f,100)}),await K({type:"link",url:a,keepfocus:s.keepfocus,noscroll:s.noscroll,replace_state:s.replace_state??a.href===location.href,event:t})}),I.addEventListener("submit",t=>{if(t.defaultPrevented)return;const n=HTMLFormElement.prototype.cloneNode.call(t.target),a=t.submitter;if((a?.formTarget||n.target)==="_blank"||(a?.formMethod||n.method)!=="get")return;const o=new URL(a?.hasAttribute("formaction")&&a?.formAction||n.action);if(le(o,A,!1))return;const s=t.target,c=ee(s);if(c.reload)return;t.preventDefault(),t.stopPropagation();const l=new FormData(s,a);o.search=new URLSearchParams(l).toString(),K({type:"form",url:o,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??o.href===location.href,event:t})}),addEventListener("popstate",async t=>{if(!ye){if(t.state?.[B]){const n=t.state[B];if(N={},n===y)return;const a=q[n],r=t.state[ze]??{},i=new URL(t.state[$t]??location.href),o=t.state[H],s=_.url?de(location)===de(_.url):!1;if(o===x&&(st||s)){r!==k.state&&(k.state=r),e(i),q[y]=ce(),a&&scrollTo(a.x,a.y),y=n;return}const l=n-y;await K({type:"popstate",url:i,popped:{state:r,scroll:a,delta:l},accept:()=>{y=n,x=o},block:()=>{history.go(-l)},nav_token:N,event:t})}else if(!F){const n=new URL(location.href);e(n),v.hash&&location.reload()}}}),addEventListener("hashchange",()=>{F&&(F=!1,history.replaceState({...history.state,[B]:++y,[H]:x},"",location.href))});for(const t of document.querySelectorAll("link"))Bt.has(t.rel)&&(t.href=t.href);addEventListener("pageshow",t=>{t.persisted&&C.navigating.set(W.current=null)});function e(t){_.url=k.url=t,C.page.set(je(k)),C.page.notify()}}async function nn(e,{status:t=200,error:n,node_ids:a,params:r,route:i,server_route:o,data:s,form:c}){ot=!0;const l=new URL(location.href);let d;({params:r={},route:i={id:null}}=await ue(l,!1)||{}),d=Ue.find(({id:u})=>u===i.id);let h,f=!0;try{const u=a.map(async(w,m)=>{const g=s[m];return g?.uses&&(g.uses=an(g.uses)),Ie({loader:v.nodes[w],url:l,params:r,route:i,parent:async()=>{const E={};for(let S=0;S{const s=history.state;ye=!0,location.replace(`#${a}`),v.hash&&location.replace(e.hash),history.replaceState(s,"",e.hash),scrollTo(i,o),ye=!1})}else{const i=document.body,o=i.getAttribute("tabindex");i.tabIndex=-1,i.focus({preventScroll:!0,focusVisible:!1}),o!==null?i.setAttribute("tabindex",o):i.removeAttribute("tabindex")}const r=getSelection();if(r&&r.type!=="None"){const i=[];for(let o=0;o{if(r.rangeCount===i.length){for(let o=0;o{r=c,i=l});return o.catch(()=>{}),{navigation:{from:{params:e.params,route:{id:e.route?.id??null},url:e.url},to:n&&{params:t?.params??null,route:{id:t?.route?.id??null},url:n},willUnload:!t,type:a,complete:o},fulfil:r,reject:i}}function je(e){return{data:e.data,error:e.error,form:e.form,params:e.params,route:e.route,state:e.state,status:e.status,url:e.url}}function on(e){const t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function pt(e){let t;if(v.hash){const[,,n]=e.hash.split("#",3);t=n??""}else t=e.hash.slice(1);return decodeURIComponent(t)}export{hn as a,ln as l,C as s}; diff --git a/frontend/.svelte-kit/output/client/_app/immutable/chunks/CQO205-B.js b/frontend/.svelte-kit/output/client/_app/immutable/chunks/CQO205-B.js new file mode 100644 index 0000000..dd5ca2f --- /dev/null +++ b/frontend/.svelte-kit/output/client/_app/immutable/chunks/CQO205-B.js @@ -0,0 +1 @@ +var Ut=Array.isArray,Bt=Array.prototype.indexOf,Pn=Array.from,In=Object.defineProperty,ce=Object.getOwnPropertyDescriptor,Vt=Object.getOwnPropertyDescriptors,Gt=Object.prototype,$t=Array.prototype,lt=Object.getPrototypeOf,nt=Object.isExtensible;const we=()=>{};function Cn(e){return e()}function zt(e){for(var t=0;t{e=r,t=s});return{promise:n,resolve:e,reject:t}}function Fn(e,t){if(Array.isArray(e))return e;if(!(Symbol.iterator in e))return Array.from(e);const n=[];for(const r of e)if(n.push(r),n.length===t)break;return n}const y=2,Ue=4,Re=8,Kt=1<<24,L=16,j=32,te=64,Be=128,D=512,E=1024,A=2048,N=4096,I=8192,H=16384,Ve=32768,ye=65536,Ce=1<<17,ot=1<<18,he=1<<19,ct=1<<20,Mn=1<<25,W=32768,Fe=1<<21,Ge=1<<22,U=1<<23,_e=Symbol("$state"),Ln=Symbol("legacy props"),jn=Symbol(""),re=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},$e=3,_t=8;function Xt(e){throw new Error("https://svelte.dev/e/experimental_async_required")}function Yn(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function Zt(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function Wt(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function Jt(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function Qt(e){throw new Error("https://svelte.dev/e/effect_orphan")}function en(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function tn(){throw new Error("https://svelte.dev/e/fork_discarded")}function nn(){throw new Error("https://svelte.dev/e/fork_timing")}function Hn(){throw new Error("https://svelte.dev/e/hydration_failed")}function Un(e){throw new Error("https://svelte.dev/e/props_invalid_value")}function rn(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function sn(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function fn(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Bn(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}const Vn=1,Gn=2,$n=4,zn=8,Kn=16,Xn=1,Zn=2,Wn=4,Jn=8,Qn=16,er=1,tr=2,an="[",ln="[!",un="]",ze={},m=Symbol(),nr="http://www.w3.org/1999/xhtml";function Ke(e){console.warn("https://svelte.dev/e/hydration_mismatch")}function rr(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}let J=!1;function sr(e){J=e}let x;function fe(e){if(e===null)throw Ke(),ze;return x=e}function fr(){return fe($(x))}function ir(e){if(J){if($(x)!==null)throw Ke(),ze;x=e}}function ar(e=1){if(J){for(var t=e,n=x;t--;)n=$(n);x=n}}function lr(e=!0){for(var t=0,n=x;;){if(n.nodeType===_t){var r=n.data;if(r===un){if(t===0)return n;t-=1}else(r===an||r===ln)&&(t+=1)}var s=$(n);e&&n.remove(),n=s}}function ur(e){if(!e||e.nodeType!==_t)throw Ke(),ze;return e.data}function vt(e){return e===this.v}function dt(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function ht(e){return!dt(e,this.v)}let ke=!1;function or(){ke=!0}let g=null;function Ee(e){g=e}function cr(e,t=!1,n){g={p:g,i:!1,c:null,e:null,s:e,x:null,l:ke&&!t?{s:null,u:null,$:[]}:null}}function _r(e){var t=g,n=t.e;if(n!==null){t.e=null;for(var r of n)kt(r)}return t.i=!0,g=t.p,{}}function pe(){return!ke||g!==null&&g.l===null}let z=[];function pt(){var e=z;z=[],zt(e)}function on(e){if(z.length===0&&!ve){var t=z;queueMicrotask(()=>{t===z&&pt()})}z.push(e)}function cn(){for(;z.length>0;)pt()}function _n(e){var t=h;if(t===null)return _.f|=U,e;if((t.f&Ve)===0){if((t.f&Be)===0)throw e;t.b.error(e)}else ge(e,t)}function ge(e,t){for(;t!==null;){if((t.f&Be)!==0)try{t.b.error(e);return}catch(n){e=n}t=t.parent}throw e}const K=new Set;let p=null,Pe=null,T=null,k=[],Oe=null,Me=!1,ve=!1;class V{committed=!1;current=new Map;previous=new Map;#r=new Set;#s=new Set;#e=0;#t=0;#a=null;#f=new Set;#i=new Set;skipped_effects=new Set;is_fork=!1;is_deferred(){return this.is_fork||this.#t>0}process(t){k=[],Pe=null,this.apply();var n={parent:null,effect:null,effects:[],render_effects:[]};for(const r of t)this.#l(r,n);this.is_fork||this.#o(),this.is_deferred()?(this.#n(n.effects),this.#n(n.render_effects)):(Pe=this,p=null,rt(n.render_effects),rt(n.effects),Pe=null,this.#a?.resolve()),T=null}#l(t,n){t.f^=E;for(var r=t.first;r!==null;){var s=r.f,f=(s&(j|te))!==0,u=f&&(s&E)!==0,l=u||(s&I)!==0||this.skipped_effects.has(r);if((r.f&Be)!==0&&r.b?.is_pending()&&(n={parent:n,effect:r,effects:[],render_effects:[]}),!l&&r.fn!==null){f?r.f^=E:(s&Ue)!==0?n.effects.push(r):ue(r)&&((r.f&L)!==0&&this.#f.add(r),ae(r));var a=r.first;if(a!==null){r=a;continue}}var i=r.parent;for(r=r.next;r===null&&i!==null;)i===n.effect&&(this.#n(n.effects),this.#n(n.render_effects),n=n.parent),r=i.next,i=i.parent}}#n(t){for(const n of t)(n.f&A)!==0?this.#f.add(n):(n.f&N)!==0&&this.#i.add(n),this.#u(n.deps),w(n,E)}#u(t){if(t!==null)for(const n of t)(n.f&y)===0||(n.f&W)===0||(n.f^=W,this.#u(n.deps))}capture(t,n){this.previous.has(t)||this.previous.set(t,n),(t.f&U)===0&&(this.current.set(t,t.v),T?.set(t,t.v))}activate(){p=this,this.apply()}deactivate(){p===this&&(p=null,T=null)}flush(){if(this.activate(),k.length>0){if(je(),p!==null&&p!==this)return}else this.#e===0&&this.process([]);this.deactivate()}discard(){for(const t of this.#s)t(this);this.#s.clear()}#o(){if(this.#t===0){for(const t of this.#r)t();this.#r.clear()}this.#e===0&&this.#c()}#c(){if(K.size>1){this.previous.clear();var t=T,n=!0,r={parent:null,effect:null,effects:[],render_effects:[]};for(const f of K){if(f===this){n=!1;continue}const u=[];for(const[a,i]of this.current){if(f.current.has(a))if(n&&i!==f.current.get(a))f.current.set(a,i);else continue;u.push(a)}if(u.length===0)continue;const l=[...f.current.keys()].filter(a=>!this.current.has(a));if(l.length>0){var s=k;k=[];const a=new Set,i=new Map;for(const o of u)wt(o,l,a,i);if(k.length>0){p=f,f.apply();for(const o of k)f.#l(o,r);f.deactivate()}k=s}}p=null,T=t}this.committed=!0,K.delete(this)}increment(t){this.#e+=1,t&&(this.#t+=1)}decrement(t){this.#e-=1,t&&(this.#t-=1),this.revive()}revive(){for(const t of this.#f)this.#i.delete(t),w(t,A),Q(t);for(const t of this.#i)w(t,N),Q(t);this.flush()}oncommit(t){this.#r.add(t)}ondiscard(t){this.#s.add(t)}settled(){return(this.#a??=ut()).promise}static ensure(){if(p===null){const t=p=new V;K.add(p),ve||V.enqueue(()=>{p===t&&t.flush()})}return p}static enqueue(t){on(t)}apply(){}}function Le(e){var t=ve;ve=!0;try{var n;for(e&&(p!==null&&je(),n=e());;){if(cn(),k.length===0&&(p?.flush(),k.length===0))return Oe=null,n;je()}}finally{ve=t}}function je(){var e=X;Me=!0;var t=null;try{var n=0;for(Se(!0);k.length>0;){var r=V.ensure();if(n++>1e3){var s,f;vn()}r.process(k),B.clear()}}finally{Me=!1,Se(e),Oe=null}}function vn(){try{en()}catch(e){ge(e,Oe)}}let F=null;function rt(e){var t=e.length;if(t!==0){for(var n=0;n0)){B.clear();for(const s of F){if((s.f&(H|I))!==0)continue;const f=[s];let u=s.parent;for(;u!==null;)F.has(u)&&(F.delete(u),f.push(u)),u=u.parent;for(let l=f.length-1;l>=0;l--){const a=f[l];(a.f&(H|I))===0&&ae(a)}}F.clear()}}F=null}}function wt(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(const s of e.reactions){const f=s.f;(f&y)!==0?wt(s,t,n,r):(f&(Ge|L))!==0&&(f&A)===0&&Et(s,t,r)&&(w(s,A),Q(s))}}function yt(e,t){if(e.reactions!==null)for(const n of e.reactions){const r=n.f;(r&y)!==0?yt(n,t):(r&Ce)!==0&&(w(n,A),t.add(n))}}function Et(e,t,n){const r=n.get(e);if(r!==void 0)return r;if(e.deps!==null)for(const s of e.deps){if(t.includes(s))return!0;if((s.f&y)!==0&&Et(s,t,n))return n.set(s,!0),!0}return n.set(e,!1),!1}function Q(e){for(var t=Oe=e;t.parent!==null;){t=t.parent;var n=t.f;if(Me&&t===h&&(n&L)!==0&&(n&ot)===0)return;if((n&(te|j))!==0){if((n&E)===0)return;t.f^=E}}k.push(t)}function vr(e){Xt(),p!==null&&nn();var t=V.ensure();t.is_fork=!0,T=new Map;var n=!1,r=t.settled();Le(e),T=null;for(var[s,f]of t.previous)s.v=f;return{commit:async()=>{if(n){await r;return}K.has(t)||tn(),n=!0,t.is_fork=!1;for(var[u,l]of t.current)u.v=l;Le(()=>{var a=new Set;for(var i of t.current.keys())yt(i,a);En(a),Tt()}),t.revive(),await r},discard:()=>{!n&&K.has(t)&&(K.delete(t),t.discard())}}}function dn(e,t,n,r){const s=pe()?Xe:wn;if(n.length===0&&e.length===0){r(t.map(s));return}var f=p,u=h,l=hn();function a(){Promise.all(n.map(i=>pn(i))).then(i=>{l();try{r([...t.map(s),...i])}catch(o){(u.f&H)===0&&ge(o,u)}f?.deactivate(),me()}).catch(i=>{ge(i,u)})}e.length>0?Promise.all(e).then(()=>{l();try{return a()}finally{f?.deactivate(),me()}}):a()}function hn(){var e=h,t=_,n=g,r=p;return function(f=!0){ie(e),G(t),Ee(n),f&&r?.activate()}}function me(){ie(null),G(null),Ee(null)}function Xe(e){var t=y|A,n=_!==null&&(_.f&y)!==0?_:null;return h!==null&&(h.f|=he),{ctx:g,deps:null,effects:null,equals:vt,f:t,fn:e,reactions:null,rv:0,v:m,wv:0,parent:n??h,ac:null}}function pn(e,t){let n=h;n===null&&Zt();var r=n.b,s=void 0,f=We(m),u=!_,l=new Map;return An(()=>{var a=ut();s=a.promise;try{Promise.resolve(e()).then(a.resolve,a.reject).then(()=>{i===p&&i.committed&&i.deactivate(),me()})}catch(c){a.reject(c),me()}var i=p;if(u){var o=!r.is_pending();r.update_pending_count(1),i.increment(o),l.get(i)?.reject(re),l.delete(i),l.set(i,a)}const v=(c,d=void 0)=>{if(i.activate(),d)d!==re&&(f.f|=U,qe(f,d));else{(f.f&U)!==0&&(f.f^=U),qe(f,c);for(const[O,De]of l){if(l.delete(O),O===i)break;De.reject(re)}}u&&(r.update_pending_count(-1),i.decrement(o))};a.promise.then(v,c=>v(null,c||"unknown"))}),Tn(()=>{for(const a of l.values())a.reject(re)}),new Promise(a=>{function i(o){function v(){o===s?a(f):i(s)}o.then(v,v)}i(s)})}function dr(e){const t=Xe(e);return Ft(t),t}function wn(e){const t=Xe(e);return t.equals=ht,t}function gt(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;nse(e))),t}function Y(e,t,n=!1){_!==null&&(!P||(_.f&Ce)!==0)&&pe()&&(_.f&(y|L|Ge|Ce))!==0&&!M?.includes(e)&&fn();let r=n?oe(t):t;return qe(e,r)}function qe(e,t){if(!e.equals(t)){var n=e.v;le?B.set(e,t):B.set(e,n),e.v=t;var r=V.ensure();r.capture(e,n),(e.f&y)!==0&&((e.f&A)!==0&&Ze(e),w(e,(e.f&D)!==0?E:N)),e.wv=Lt(),At(e,A),pe()&&h!==null&&(h.f&E)!==0&&(h.f&(j|te))===0&&(R===null?kn([e]):R.push(e)),!r.is_fork&&be.size>0&&!bt&&Tt()}return t}function Tt(){bt=!1;var e=X;Se(!0);const t=Array.from(be);try{for(const n of t)(n.f&E)!==0&&w(n,N),ue(n)&&ae(n)}finally{Se(e)}be.clear()}function Ie(e){Y(e,e.v+1)}function At(e,t){var n=e.reactions;if(n!==null)for(var r=pe(),s=n.length,f=0;f{if(Z===f)return l();var a=_,i=Z;G(null),at(f);var o=l();return G(a),at(i),o};return r&&n.set("length",q(e.length)),new Proxy(e,{defineProperty(l,a,i){(!("value"in i)||i.configurable===!1||i.enumerable===!1||i.writable===!1)&&rn();var o=n.get(a);return o===void 0?o=u(()=>{var v=q(i.value);return n.set(a,v),v}):Y(o,i.value,!0),!0},deleteProperty(l,a){var i=n.get(a);if(i===void 0){if(a in l){const o=u(()=>q(m));n.set(a,o),Ie(s)}}else Y(i,m),Ie(s);return!0},get(l,a,i){if(a===_e)return e;var o=n.get(a),v=a in l;if(o===void 0&&(!v||ce(l,a)?.writable)&&(o=u(()=>{var d=oe(v?l[a]:m),O=q(d);return O}),n.set(a,o)),o!==void 0){var c=se(o);return c===m?void 0:c}return Reflect.get(l,a,i)},getOwnPropertyDescriptor(l,a){var i=Reflect.getOwnPropertyDescriptor(l,a);if(i&&"value"in i){var o=n.get(a);o&&(i.value=se(o))}else if(i===void 0){var v=n.get(a),c=v?.v;if(v!==void 0&&c!==m)return{enumerable:!0,configurable:!0,value:c,writable:!0}}return i},has(l,a){if(a===_e)return!0;var i=n.get(a),o=i!==void 0&&i.v!==m||Reflect.has(l,a);if(i!==void 0||h!==null&&(!o||ce(l,a)?.writable)){i===void 0&&(i=u(()=>{var c=o?oe(l[a]):m,d=q(c);return d}),n.set(a,i));var v=se(i);if(v===m)return!1}return o},set(l,a,i,o){var v=n.get(a),c=a in l;if(r&&a==="length")for(var d=i;dq(m)),n.set(d+"",O))}if(v===void 0)(!c||ce(l,a)?.writable)&&(v=u(()=>q(void 0)),Y(v,oe(i)),n.set(a,v));else{c=v.v!==m;var De=u(()=>oe(i));Y(v,De)}var et=Reflect.getOwnPropertyDescriptor(l,a);if(et?.set&&et.set.call(o,i),!c){if(r&&typeof a=="string"){var tt=n.get("length"),Ne=Number(a);Number.isInteger(Ne)&&Ne>=tt.v&&Y(tt,Ne+1)}Ie(s)}return!0},ownKeys(l){se(s);var a=Reflect.ownKeys(l).filter(v=>{var c=n.get(v);return c===void 0||c.v!==m});for(var[i,o]of n)o.v!==m&&!(i in l)&&a.push(i);return a},setPrototypeOf(){sn()}})}var st,gn,St,xt;function wr(){if(st===void 0){st=window,gn=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;St=ce(t,"firstChild").get,xt=ce(t,"nextSibling").get,nt(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),nt(n)&&(n.__t=void 0)}}function Te(e=""){return document.createTextNode(e)}function Ye(e){return St.call(e)}function $(e){return xt.call(e)}function yr(e,t){if(!J)return Ye(e);var n=Ye(x);if(n===null)n=x.appendChild(Te());else if(t&&n.nodeType!==$e){var r=Te();return n?.before(r),fe(r),r}return fe(n),n}function Er(e,t=!1){if(!J){var n=Ye(e);return n instanceof Comment&&n.data===""?$(n):n}if(t&&x?.nodeType!==$e){var r=Te();return x?.before(r),fe(r),r}return x}function gr(e,t=1,n=!1){let r=J?x:e;for(var s;t--;)s=r,r=$(r);if(!J)return r;if(n&&r?.nodeType!==$e){var f=Te();return r===null?s?.after(f):r.before(f),fe(f),f}return fe(r),r}function mr(e){e.textContent=""}function br(){return!1}let ft=!1;function mn(){ft||(ft=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t.__on_r?.()})},{capture:!0}))}function Je(e){var t=_,n=h;G(null),ie(null);try{return e()}finally{G(t),ie(n)}}function Tr(e,t,n,r=n){e.addEventListener(t,()=>Je(n));const s=e.__on_r;s?e.__on_r=()=>{s(),r(!0)}:e.__on_r=()=>r(!0),mn()}function Rt(e){h===null&&(_===null&&Qt(),Jt()),le&&Wt()}function bn(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function C(e,t,n){var r=h;r!==null&&(r.f&I)!==0&&(e|=I);var s={ctx:g,deps:null,nodes:null,f:e|A|D,first:null,fn:t,last:null,next:null,parent:r,b:r&&r.b,prev:null,teardown:null,wv:0,ac:null};if(n)try{ae(s),s.f|=Ve}catch(l){throw ee(s),l}else t!==null&&Q(s);var f=s;if(n&&f.deps===null&&f.teardown===null&&f.nodes===null&&f.first===f.last&&(f.f&he)===0&&(f=f.first,(e&L)!==0&&(e&ye)!==0&&f!==null&&(f.f|=ye)),f!==null&&(f.parent=r,r!==null&&bn(f,r),_!==null&&(_.f&y)!==0&&(e&te)===0)){var u=_;(u.effects??=[]).push(f)}return s}function Ae(){return _!==null&&!P}function Tn(e){const t=C(Re,null,!1);return w(t,E),t.teardown=e,t}function Ar(e){Rt();var t=h.f,n=!_&&(t&j)!==0&&(t&Ve)===0;if(n){var r=g;(r.e??=[]).push(e)}else return kt(e)}function kt(e){return C(Ue|ct,e,!1)}function Sr(e){return Rt(),C(Re|ct,e,!0)}function xr(e){V.ensure();const t=C(te|he,e,!0);return(n={})=>new Promise(r=>{n.outro?Rn(t,()=>{ee(t),r(void 0)}):(ee(t),r(void 0))})}function Rr(e){return C(Ue,e,!1)}function kr(e,t){var n=g,r={effect:null,ran:!1,deps:e};n.l.$.push(r),r.effect=Ot(()=>{e(),!r.ran&&(r.ran=!0,Qe(t))})}function Or(){var e=g;Ot(()=>{for(var t of e.l.$){t.deps();var n=t.effect;(n.f&E)!==0&&w(n,N),ue(n)&&ae(n),t.ran=!1}})}function An(e){return C(Ge|he,e,!0)}function Ot(e,t=0){return C(Re|t,e,!0)}function Dr(e,t=[],n=[],r=[]){dn(r,t,n,s=>{C(Re,()=>e(...s.map(se)),!0)})}function Nr(e,t=0){var n=C(L|t,e,!0);return n}function Pr(e){return C(j|he,e,!0)}function Dt(e){var t=e.teardown;if(t!==null){const n=le,r=_;it(!0),G(null);try{t.call(null)}finally{it(n),G(r)}}}function Nt(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){const s=n.ac;s!==null&&Je(()=>{s.abort(re)});var r=n.next;(n.f&te)!==0?n.parent=null:ee(n,t),n=r}}function Sn(e){for(var t=e.first;t!==null;){var n=t.next;(t.f&j)===0&&ee(t),t=n}}function ee(e,t=!0){var n=!1;(t||(e.f&ot)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(xn(e.nodes.start,e.nodes.end),n=!0),Nt(e,t&&!n),xe(e,0),w(e,H);var r=e.nodes&&e.nodes.t;if(r!==null)for(const f of r)f.stop();Dt(e);var s=e.parent;s!==null&&s.first!==null&&Pt(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=null}function xn(e,t){for(;e!==null;){var n=e===t?null:$(e);e.remove(),e=n}}function Pt(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function Rn(e,t,n=!0){var r=[];It(e,r,!0);var s=()=>{n&&ee(e),t&&t()},f=r.length;if(f>0){var u=()=>--f||s();for(var l of r)l.out(u)}else s()}function It(e,t,n){if((e.f&I)===0){e.f^=I;var r=e.nodes&&e.nodes.t;if(r!==null)for(const l of r)(l.is_global||n)&&t.push(l);for(var s=e.first;s!==null;){var f=s.next,u=(s.f&ye)!==0||(s.f&j)!==0&&(e.f&L)!==0;It(s,t,u?n:!1),s=f}}}function Ir(e){Ct(e,!0)}function Ct(e,t){if((e.f&I)!==0){e.f^=I,(e.f&E)===0&&(w(e,A),Q(e));for(var n=e.first;n!==null;){var r=n.next,s=(n.f&ye)!==0||(n.f&j)!==0;Ct(n,s?t:!1),n=r}var f=e.nodes&&e.nodes.t;if(f!==null)for(const u of f)(u.is_global||t)&&u.in()}}function Cr(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var s=n===r?null:$(n);t.append(n),n=s}}let X=!1;function Se(e){X=e}let le=!1;function it(e){le=e}let _=null,P=!1;function G(e){_=e}let h=null;function ie(e){h=e}let M=null;function Ft(e){_!==null&&(M===null?M=[e]:M.push(e))}let b=null,S=0,R=null;function kn(e){R=e}let Mt=1,de=0,Z=de;function at(e){Z=e}function Lt(){return++Mt}function ue(e){var t=e.f;if((t&A)!==0)return!0;if(t&y&&(e.f&=~W),(t&N)!==0){var n=e.deps;if(n!==null)for(var r=n.length,s=0;se.wv)return!0}(t&D)!==0&&T===null&&w(e,E)}return!1}function jt(e,t,n=!0){var r=e.reactions;if(r!==null&&!M?.includes(e))for(var s=0;s{e.ac.abort(re)}),e.ac=null);try{e.f|=Fe;var o=e.fn,v=o(),c=e.deps;if(b!==null){var d;if(xe(e,S),c!==null&&S>0)for(c.length=S+b.length,d=0;de.subscribe(t,n));return r.unsubscribe?()=>r.unsubscribe():r}const ne=[];function jr(e,t=we){let n=null;const r=new Set;function s(l){if(dt(e,l)&&(e=l,n)){const a=!ne.length;for(const i of r)i[1](),ne.push(i,e);if(a){for(let i=0;i{r.delete(i),r.size===0&&n&&(n(),n=null)}}return{set:s,update:f,subscribe:u}}function qr(e){let t;return Nn(e,n=>t=n)(),t}export{jr as $,wn as A,ur as B,lr as C,sr as D,x as E,_t as F,un as G,ln as H,qe as I,p as J,Mn as K,Pr as L,br as M,We as N,Pn as O,Vn as P,Kn as Q,Gn as R,Ir as S,Rn as T,I as U,$ as V,mr as W,ee as X,$n as Y,on as Z,zn as _,_r as a,we as a$,Sr as a0,zt as a1,Cn as a2,Xe as a3,or as a4,mn as a5,jn as a6,nr as a7,lt as a8,Vt as a9,q as aA,Ae as aB,Ie as aC,V as aD,ie as aE,G as aF,Ee as aG,_n as aH,_ as aI,ge as aJ,Bn as aK,he as aL,Be as aM,rr as aN,Tn as aO,Je as aP,gn as aQ,er as aR,tr as aS,Ve as aT,$e as aU,wr as aV,an as aW,ze as aX,Hn as aY,xr as aZ,Ke as a_,Tr as aa,Fr as ab,Ot as ac,Pe as ad,Cr as ae,ye as af,ce as ag,Wn as ah,oe as ai,h as aj,H as ak,Zn as al,Jn as am,le as an,_e as ao,Ln as ap,Un as aq,Xn as ar,Qn as as,Er as at,qr as au,dr as av,Fn as aw,Rr as ax,Le as ay,In as az,g as b,Nn as b0,vr as b1,Mr as b2,yr as c,ke as d,Qe as e,kr as f,Or as g,J as h,Ut as i,se as j,Lr as k,Yn as l,hr as m,ar as n,Y as o,cr as p,pr as q,ir as r,gr as s,Dr as t,Ar as u,Te as v,Nr as w,fe as x,Ye as y,fr as z}; diff --git a/frontend/.svelte-kit/output/client/_app/immutable/chunks/CWb4Vnhz.js b/frontend/.svelte-kit/output/client/_app/immutable/chunks/CWb4Vnhz.js new file mode 100644 index 0000000..debe96c --- /dev/null +++ b/frontend/.svelte-kit/output/client/_app/immutable/chunks/CWb4Vnhz.js @@ -0,0 +1,2 @@ +import{aB as ee,j as V,N as X,ac as te,e as re,aC as U,Z as B,E as f,h as c,aj as v,w as ne,z,F as W,H as se,L as p,aD as S,T as F,v as w,aE as A,aF as m,aG as Y,aH as ie,aI as C,b as Z,ae,I as ue,X as M,x as N,n as oe,C as le,aJ as $,aK as fe,af as he,aL as ce,aM as de,aN as _e,aO as J,aP as pe,az as K,y as I,aQ as ve,aR as ge,aS as be,aT as ye,aU as me,aV as x,aW as Ee,V as Te,aX as P,D as O,aY as we,W as Ne,O as Re,aZ as Se,p as Oe,G as De,a_ as Ae,a as Le,a$ as j,m as Fe,b0 as Me,au as Ce,o as Ie}from"./CQO205-B.js";function xe(t){let e=0,r=X(0),s;return()=>{ee()&&(V(r),te(()=>(e===0&&(s=re(()=>t(()=>U(r)))),e+=1,()=>{B(()=>{e-=1,e===0&&(s?.(),s=void 0,U(r))})})))}}var Pe=he|ce|de;function ke(t,e,r){new He(t,e,r)}class He{parent;#r=!1;#t;#v=c?f:null;#s;#h;#i;#n=null;#e=null;#a=null;#u=null;#o=null;#c=0;#l=0;#d=!1;#f=null;#y=xe(()=>(this.#f=X(this.#c),()=>{this.#f=null}));constructor(e,r,s){this.#t=e,this.#s=r,this.#h=s,this.parent=v.b,this.#r=!!this.#s.pending,this.#i=ne(()=>{if(v.b=this,c){const n=this.#v;z(),n.nodeType===W&&n.data===se?this.#E():this.#m()}else{var i=this.#g();try{this.#n=p(()=>s(i))}catch(n){this.error(n)}this.#l>0?this.#p():this.#r=!1}return()=>{this.#o?.remove()}},Pe),c&&(this.#t=f)}#m(){try{this.#n=p(()=>this.#h(this.#t))}catch(e){this.error(e)}this.#r=!1}#E(){const e=this.#s.pending;e&&(this.#e=p(()=>e(this.#t)),S.enqueue(()=>{var r=this.#g();this.#n=this.#_(()=>(S.ensure(),p(()=>this.#h(r)))),this.#l>0?this.#p():(F(this.#e,()=>{this.#e=null}),this.#r=!1)}))}#g(){var e=this.#t;return this.#r&&(this.#o=w(),this.#t.before(this.#o),e=this.#o),e}is_pending(){return this.#r||!!this.parent&&this.parent.is_pending()}has_pending_snippet(){return!!this.#s.pending}#_(e){var r=v,s=C,i=Z;A(this.#i),m(this.#i),Y(this.#i.ctx);try{return e()}catch(n){return ie(n),null}finally{A(r),m(s),Y(i)}}#p(){const e=this.#s.pending;this.#n!==null&&(this.#u=document.createDocumentFragment(),this.#u.append(this.#o),ae(this.#n,this.#u)),this.#e===null&&(this.#e=p(()=>e(this.#t)))}#b(e){if(!this.has_pending_snippet()){this.parent&&this.parent.#b(e);return}this.#l+=e,this.#l===0&&(this.#r=!1,this.#e&&F(this.#e,()=>{this.#e=null}),this.#u&&(this.#t.before(this.#u),this.#u=null))}update_pending_count(e){this.#b(e),this.#c+=e,this.#f&&ue(this.#f,this.#c)}get_effect_pending(){return this.#y(),V(this.#f)}error(e){var r=this.#s.onerror;let s=this.#s.failed;if(this.#d||!r&&!s)throw e;this.#n&&(M(this.#n),this.#n=null),this.#e&&(M(this.#e),this.#e=null),this.#a&&(M(this.#a),this.#a=null),c&&(N(this.#v),oe(),N(le()));var i=!1,n=!1;const a=()=>{if(i){_e();return}i=!0,n&&fe(),S.ensure(),this.#c=0,this.#a!==null&&F(this.#a,()=>{this.#a=null}),this.#r=this.has_pending_snippet(),this.#n=this.#_(()=>(this.#d=!1,p(()=>this.#h(this.#t)))),this.#l>0?this.#p():this.#r=!1};var h=C;try{m(null),n=!0,r?.(e,a),n=!1}catch(l){$(l,this.#i&&this.#i.parent)}finally{m(h)}s&&B(()=>{this.#a=this.#_(()=>{S.ensure(),this.#d=!0;try{return p(()=>{s(this.#t,()=>e,()=>a)})}catch(l){return $(l,this.#i.parent),null}finally{this.#d=!1}})})}}const Ve=["touchstart","touchmove"];function Be(t){return Ve.includes(t)}const We=new Set,q=new Set;function Ue(t,e,r,s={}){function i(n){if(s.capture||T.call(e,n),!n.cancelBubble)return pe(()=>r?.call(this,n))}return t.startsWith("pointer")||t.startsWith("touch")||t==="wheel"?B(()=>{e.addEventListener(t,i,s)}):e.addEventListener(t,i,s),i}function Ge(t,e,r,s,i){var n={capture:s,passive:i},a=Ue(t,e,r,n);(e===document.body||e===window||e===document||e instanceof HTMLMediaElement)&&J(()=>{e.removeEventListener(t,a,n)})}let G=null;function T(t){var e=this,r=e.ownerDocument,s=t.type,i=t.composedPath?.()||[],n=i[0]||t.target;G=t;var a=0,h=G===t&&t.__root;if(h){var l=i.indexOf(h);if(l!==-1&&(e===document||e===window)){t.__root=e;return}var g=i.indexOf(e);if(g===-1)return;l<=g&&(a=l)}if(n=i[a]||t.target,n!==e){K(t,"currentTarget",{configurable:!0,get(){return n||r}});var L=C,d=v;m(null),A(null);try{for(var u,o=[];n!==null;){var b=n.assignedSlot||n.parentNode||n.host||null;try{var E=n["__"+s];E!=null&&(!n.disabled||t.target===n)&&E.call(n,t)}catch(R){u?o.push(R):u=R}if(t.cancelBubble||b===e||b===null)break;n=b}if(u){for(let R of o)queueMicrotask(()=>{throw R});throw u}}finally{t.__root=e,delete t.currentTarget,m(L),A(d)}}}function Ye(t){var e=document.createElement("template");return e.innerHTML=t.replaceAll("",""),e.content}function _(t,e){var r=v;r.nodes===null&&(r.nodes={start:t,end:e,a:null,t:null})}function Xe(t,e){var r=(e&ge)!==0,s=(e&be)!==0,i,n=!t.startsWith("");return()=>{if(c)return _(f,null),f;i===void 0&&(i=Ye(n?t:""+t),r||(i=I(i)));var a=s||ve?document.importNode(i,!0):i.cloneNode(!0);if(r){var h=I(a),l=a.lastChild;_(h,l)}else _(a,a);return a}}function ze(t=""){if(!c){var e=w(t+"");return _(e,e),e}var r=f;return r.nodeType!==me&&(r.before(r=w()),N(r)),_(r,r),r}function Ze(){if(c)return _(f,null),f;var t=document.createDocumentFragment(),e=document.createComment(""),r=w();return t.append(e,r),_(e,r),t}function Je(t,e){if(c){var r=v;((r.f&ye)===0||r.nodes.end===null)&&(r.nodes.end=f),z();return}t!==null&&t.before(e)}function Ke(t,e){var r=e==null?"":typeof e=="object"?e+"":e;r!==(t.__t??=t.nodeValue)&&(t.__t=r,t.nodeValue=r+"")}function $e(t,e){return Q(t,e)}function Qe(t,e){x(),e.intro=e.intro??!1;const r=e.target,s=c,i=f;try{for(var n=I(r);n&&(n.nodeType!==W||n.data!==Ee);)n=Te(n);if(!n)throw P;O(!0),N(n);const a=Q(t,{...e,anchor:n});return O(!1),a}catch(a){if(a instanceof Error&&a.message.split(` +`).some(h=>h.startsWith("https://svelte.dev/e/")))throw a;return a!==P&&console.warn("Failed to hydrate: ",a),e.recover===!1&&we(),x(),Ne(r),O(!1),$e(t,e)}finally{O(s),N(i)}}const y=new Map;function Q(t,{target:e,anchor:r,props:s={},events:i,context:n,intro:a=!0}){x();var h=new Set,l=d=>{for(var u=0;u{var d=r??e.appendChild(w());return ke(d,{pending:()=>{}},u=>{if(n){Oe({});var o=Z;o.c=n}if(i&&(s.$$events=i),c&&_(u,null),g=t(u,s)||{},c&&(v.nodes.end=f,f===null||f.nodeType!==W||f.data!==De))throw Ae(),P;n&&Le()}),()=>{for(var u of h){e.removeEventListener(u,T);var o=y.get(u);--o===0?(document.removeEventListener(u,T),y.delete(u)):y.set(u,o)}q.delete(l),d!==r&&d.parentNode?.removeChild(d)}});return k.set(g,L),g}let k=new WeakMap;function et(t,e){const r=k.get(t);return r?(k.delete(t),r(e)):Promise.resolve()}let D=!1,H=Symbol();function tt(t,e,r){const s=r[e]??={store:null,source:Fe(void 0),unsubscribe:j};if(s.store!==t&&!(H in r))if(s.unsubscribe(),s.store=t??null,t==null)s.source.v=void 0,s.unsubscribe=j;else{var i=!0;s.unsubscribe=Me(t,n=>{i?s.source.v=n:Ie(s.source,n)}),i=!1}return t&&H in r?Ce(t):V(s.source)}function rt(){const t={};function e(){J(()=>{for(var r in t)t[r].unsubscribe();K(t,H,{enumerable:!1,value:!0})})}return[t,e]}function nt(t){var e=D;try{return D=!1,[t(),D]}finally{D=e}}const je="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(je);export{Je as a,Ke as b,tt as c,nt as d,Ge as e,Xe as f,Ze as g,Qe as h,$e as m,rt as s,ze as t,et as u}; diff --git a/frontend/.svelte-kit/output/client/_app/immutable/chunks/CqZim_6h.js b/frontend/.svelte-kit/output/client/_app/immutable/chunks/CqZim_6h.js new file mode 100644 index 0000000..f50db26 --- /dev/null +++ b/frontend/.svelte-kit/output/client/_app/immutable/chunks/CqZim_6h.js @@ -0,0 +1 @@ +import{l as a,u as i,b as t,d as _,e as l,i as m}from"./CQO205-B.js";function p(e){t===null&&a(),_&&t.l!==null?d(t).m.push(e):i(()=>{const n=l(e);if(typeof n=="function")return n})}function x(e){t===null&&a(),p(()=>()=>l(e))}function v(e,n,{bubbles:o=!1,cancelable:s=!1}={}){return new CustomEvent(e,{detail:n,bubbles:o,cancelable:s})}function y(){const e=t;return e===null&&a(),(n,o,s)=>{const c=e.s.$$events?.[n];if(c){const r=m(c)?c.slice():[c],u=v(n,o,s);for(const f of r)f.call(e.x,u);return!u.defaultPrevented}return!0}}function d(e){var n=e.l;return n.u??={a:[],b:[],m:[]}}export{x as a,y as c,p as o}; diff --git a/frontend/.svelte-kit/output/client/_app/immutable/chunks/CsANhQOh.js b/frontend/.svelte-kit/output/client/_app/immutable/chunks/CsANhQOh.js new file mode 100644 index 0000000..63f5701 --- /dev/null +++ b/frontend/.svelte-kit/output/client/_app/immutable/chunks/CsANhQOh.js @@ -0,0 +1 @@ +import{v as H,w as W,x as O,h as R,y as Z,z as y,j as V,A as j,B as ee,H as ne,C as Y,D as k,E as D,F as re,G as fe,I as q,J as ae,K as m,L as F,M as ie,N as B,m as se,O as $,i as le,P as oe,Q as te,R as ue,S as X,T as G,U as z,V as de,W as ve,X as ce,Y as J,Z as pe,_ as ge,$ as he}from"./CQO205-B.js";function Se(e,r){return r}function _e(e,r,f){for(var t=[],g=r.length,o,l=r.length,p=0;p{if(o){if(o.pending.delete(_),o.done.add(_),o.pending.size===0){var u=e.outrogroups;L($(o.done)),u.delete(o),u.size===0&&(e.outrogroups=null)}}else l-=1},!1)}if(l===0){var i=t.length===0&&f!==null;if(i){var d=f,a=d.parentNode;ve(a),a.append(d),e.items.clear()}L(r,!i)}else o={pending:new Set(r),done:new Set},(e.outrogroups??=new Set).add(o)}function L(e,r=!0){for(var f=0;f{var s=f();return le(s)?s:s==null?[]:$(s)}),u,c=!0;function A(){n.fallback=a,Ee(n,u,l,r,t),a!==null&&(u.length===0?(a.f&m)===0?X(a):(a.f^=m,b(a,null,l)):G(a,()=>{a=null}))}var C=W(()=>{u=V(_);var s=u.length;let I=!1;if(R){var x=ee(l)===ne;x!==(s===0)&&(l=Y(),O(l),k(!1),I=!0)}for(var E=new Set,S=ae,N=ie(),h=0;ho(l)):(a=F(()=>o(U??=H())),a.f|=m)),R&&s>0&&O(Y()),!c)if(N){for(const[P,Q]of p)E.has(P)||S.skipped_effects.add(Q.e);S.oncommit(A),S.ondiscard(()=>{})}else A();I&&k(!0),V(_)}),n={effect:C,items:p,outrogroups:null,fallback:a};c=!1,R&&(l=D)}function Ee(e,r,f,t,g){var o=(t&ge)!==0,l=r.length,p=e.items,i=e.effect.first,d,a=null,_,u=[],c=[],A,C,n,s;if(o)for(s=0;s0){var M=(t&J)!==0&&l===0?f:null;if(o){for(s=0;s{if(_!==void 0)for(n of _)n.nodes?.a?.apply()})}function me(e,r,f,t,g,o,l,p){var i=(l&oe)!==0?(l&te)===0?se(f,!1,!1):B(f):null,d=(l&ue)!==0?B(g):null;return{v:i,i:d,e:F(()=>(o(r,i??f,d??g,p),()=>{e.delete(t)}))}}function b(e,r,f){if(e.nodes)for(var t=e.nodes.start,g=e.nodes.end,o=r&&(r.f&m)===0?r.nodes.start:f;t!==null;){var l=de(t);if(o.before(t),t===g)return;t=l}}function T(e,r,f){r===null?e.effect.first=f:r.next=f,f===null?e.effect.last=r:f.prev=r}const K=he([]);function Ce(e,r="info",f=3e3){const t=Math.random().toString(36).substr(2,9);console.log(`[toasts.addToast][Action] Adding toast context={{'id': '${t}', 'type': '${r}', 'message': '${e}'}}`),K.update(g=>[...g,{id:t,message:e,type:r}]),setTimeout(()=>Te(t),f)}function Te(e){console.log(`[toasts.removeToast][Action] Removing toast context={{'id': '${e}'}}`),K.update(r=>r.filter(f=>f.id!==e))}export{Ce as a,we as e,Se as i,K as t}; diff --git a/frontend/.svelte-kit/output/client/_app/immutable/chunks/DKg_yD9X.js b/frontend/.svelte-kit/output/client/_app/immutable/chunks/DKg_yD9X.js new file mode 100644 index 0000000..eece145 --- /dev/null +++ b/frontend/.svelte-kit/output/client/_app/immutable/chunks/DKg_yD9X.js @@ -0,0 +1 @@ +import{h as i}from"./CQO205-B.js";function n(s,l,r){var t=s==null?"":""+s;return t===""?null:t}function u(s,l,r,t,f,c){var a=s.__className;if(i||a!==r||a===void 0){var e=n(r);(!i||e!==s.getAttribute("class"))&&(e==null?s.removeAttribute("class"):s.className=e),s.__className=r}return c}export{u as s}; diff --git a/frontend/.svelte-kit/output/client/_app/immutable/entry/app.B-xBk5-0.js b/frontend/.svelte-kit/output/client/_app/immutable/entry/app.B-xBk5-0.js new file mode 100644 index 0000000..24ed7c7 --- /dev/null +++ b/frontend/.svelte-kit/output/client/_app/immutable/entry/app.B-xBk5-0.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.Cd4CVt-Z.js","../chunks/CWb4Vnhz.js","../chunks/CQO205-B.js","../chunks/CCsGeFPC.js","../chunks/DKg_yD9X.js","../chunks/BEiADdeo.js","../chunks/CHnJS4Dz.js","../chunks/CqZim_6h.js","../chunks/CsANhQOh.js","../nodes/1.CppBCq8O.js","../nodes/2.DbjHrap6.js","../chunks/BGnnHgKo.js","../chunks/C98uKxzC.js","../nodes/3.BgpIj6zk.js"])))=>i.map(i=>d[i]); +import{h as U,z as Y,w as G,af as W,ax as Z,ac as H,e as J,Z as K,ao as Q,o as x,ap as X,j as d,ay as $,az as tt,m as et,p as rt,a0 as st,u as at,aA as S,ab as nt,at as k,s as ot,a as ct,c as it,r as ut,av as A,t as lt}from"../chunks/CQO205-B.js";import{h as ft,m as dt,u as mt,f as D,a as b,g as L,t as ht,b as _t}from"../chunks/CWb4Vnhz.js";import{o as vt}from"../chunks/CqZim_6h.js";import{B as gt,p as T,i as j}from"../chunks/C98uKxzC.js";function p(s,t,a){U&&Y();var i=new gt(s);G(()=>{var n=t()??null;i.ensure(n,n&&(e=>a(e,n)))},W)}function N(s,t){return s===t||s?.[Q]===t}function C(s={},t,a,i){return Z(()=>{var n,e;return H(()=>{n=e,e=[],J(()=>{s!==a(...e)&&(t(s,...e),n&&N(a(...n),s)&&t(null,...n))})}),()=>{K(()=>{e&&N(a(...e),s)&&t(null,...e)})}}),s}function yt(s){return class extends bt{constructor(t){super({component:s,...t})}}}class bt{#e;#t;constructor(t){var a=new Map,i=(e,r)=>{var o=et(r,!1,!1);return a.set(e,o),o};const n=new Proxy({...t.props||{},$$events:{}},{get(e,r){return d(a.get(r)??i(r,Reflect.get(e,r)))},has(e,r){return r===X?!0:(d(a.get(r)??i(r,Reflect.get(e,r))),Reflect.has(e,r))},set(e,r,o){return x(a.get(r)??i(r,o),o),Reflect.set(e,r,o)}});this.#t=(t.hydrate?ft:dt)(t.component,{target:t.target,anchor:t.anchor,props:n,context:t.context,intro:t.intro??!1,recover:t.recover}),(!t?.props?.$$host||t.sync===!1)&&$(),this.#e=n.$$events;for(const e of Object.keys(this.#t))e==="$set"||e==="$destroy"||e==="$on"||tt(this,e,{get(){return this.#t[e]},set(r){this.#t[e]=r},enumerable:!0});this.#t.$set=e=>{Object.assign(n,e)},this.#t.$destroy=()=>{mt(this.#t)}}$set(t){this.#t.$set(t)}$on(t,a){this.#e[t]=this.#e[t]||[];const i=(...n)=>a.call(this,...n);return this.#e[t].push(i),()=>{this.#e[t]=this.#e[t].filter(n=>n!==i)}}$destroy(){this.#t.$destroy()}}const Et="modulepreload",Pt=function(s,t){return new URL(s,t).href},B={},O=function(t,a,i){let n=Promise.resolve();if(a&&a.length>0){let R=function(u){return Promise.all(u.map(f=>Promise.resolve(f).then(m=>({status:"fulfilled",value:m}),m=>({status:"rejected",reason:m}))))};const r=document.getElementsByTagName("link"),o=document.querySelector("meta[property=csp-nonce]"),w=o?.nonce||o?.getAttribute("nonce");n=R(a.map(u=>{if(u=Pt(u,i),u in B)return;B[u]=!0;const f=u.endsWith(".css"),m=f?'[rel="stylesheet"]':"";if(i)for(let h=r.length-1;h>=0;h--){const c=r[h];if(c.href===u&&(!f||c.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${u}"]${m}`))return;const l=document.createElement("link");if(l.rel=f?"stylesheet":Et,f||(l.as="script"),l.crossOrigin="",l.href=u,w&&l.setAttribute("nonce",w),document.head.appendChild(l),f)return new Promise((h,c)=>{l.addEventListener("load",h),l.addEventListener("error",()=>c(new Error(`Unable to preload CSS for ${u}`)))})}))}function e(r){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=r,window.dispatchEvent(o),!o.defaultPrevented)throw r}return n.then(r=>{for(const o of r||[])o.status==="rejected"&&e(o.reason);return t().catch(e)})},jt={};var wt=D('
'),Rt=D(" ",1);function kt(s,t){rt(t,!0);let a=T(t,"components",23,()=>[]),i=T(t,"data_0",3,null),n=T(t,"data_1",3,null);st(()=>t.stores.page.set(t.page)),at(()=>{t.stores,t.page,t.constructors,a(),t.form,i(),n(),t.stores.page.notify()});let e=S(!1),r=S(!1),o=S(null);vt(()=>{const c=t.stores.page.subscribe(()=>{d(e)&&(x(r,!0),nt().then(()=>{x(o,document.title||"untitled page",!0)}))});return x(e,!0),c});const w=A(()=>t.constructors[1]);var R=Rt(),u=k(R);{var f=c=>{const _=A(()=>t.constructors[0]);var v=L(),E=k(v);p(E,()=>d(_),(g,y)=>{C(y(g,{get data(){return i()},get form(){return t.form},get params(){return t.page.params},children:(P,xt)=>{var M=L(),V=k(M);p(V,()=>d(w),(q,z)=>{C(z(q,{get data(){return n()},get form(){return t.form},get params(){return t.page.params}}),F=>a()[1]=F,()=>a()?.[1])}),b(P,M)},$$slots:{default:!0}}),P=>a()[0]=P,()=>a()?.[0])}),b(c,v)},m=c=>{const _=A(()=>t.constructors[0]);var v=L(),E=k(v);p(E,()=>d(_),(g,y)=>{C(y(g,{get data(){return i()},get form(){return t.form},get params(){return t.page.params}}),P=>a()[0]=P,()=>a()?.[0])}),b(c,v)};j(u,c=>{t.constructors[1]?c(f):c(m,!1)})}var l=ot(u,2);{var h=c=>{var _=wt(),v=it(_);{var E=g=>{var y=ht();lt(()=>_t(y,d(o))),b(g,y)};j(v,g=>{d(r)&&g(E)})}ut(_),b(c,_)};j(l,c=>{d(e)&&c(h)})}b(s,R),ct()}const pt=yt(kt),Ct=[()=>O(()=>import("../nodes/0.Cd4CVt-Z.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8]),import.meta.url),()=>O(()=>import("../nodes/1.CppBCq8O.js"),__vite__mapDeps([9,1,2,3,5,6,7]),import.meta.url),()=>O(()=>import("../nodes/2.DbjHrap6.js"),__vite__mapDeps([10,11,2,8,1,3,12,7,4]),import.meta.url),()=>O(()=>import("../nodes/3.BgpIj6zk.js"),__vite__mapDeps([13,11,2,8,1,3,12]),import.meta.url)],Mt=[],Nt={"/":[2],"/settings":[3]},I={handleError:(({error:s})=>{console.error(s)}),reroute:(()=>{}),transport:{}},Ot=Object.fromEntries(Object.entries(I.transport).map(([s,t])=>[s,t.decode])),Bt=Object.fromEntries(Object.entries(I.transport).map(([s,t])=>[s,t.encode])),Dt=!1,It=(s,t)=>Ot[s](t);export{It as decode,Ot as decoders,Nt as dictionary,Bt as encoders,Dt as hash,I as hooks,jt as matchers,Ct as nodes,pt as root,Mt as server_loads}; diff --git a/frontend/.svelte-kit/output/client/_app/immutable/entry/start.CiUb2lZD.js b/frontend/.svelte-kit/output/client/_app/immutable/entry/start.CiUb2lZD.js new file mode 100644 index 0000000..1e6a22b --- /dev/null +++ b/frontend/.svelte-kit/output/client/_app/immutable/entry/start.CiUb2lZD.js @@ -0,0 +1 @@ +import{l as o,a as r}from"../chunks/CHnJS4Dz.js";export{o as load_css,r as start}; diff --git a/frontend/.svelte-kit/output/client/_app/immutable/nodes/0.Cd4CVt-Z.js b/frontend/.svelte-kit/output/client/_app/immutable/nodes/0.Cd4CVt-Z.js new file mode 100644 index 0000000..02647b1 --- /dev/null +++ b/frontend/.svelte-kit/output/client/_app/immutable/nodes/0.Cd4CVt-Z.js @@ -0,0 +1,5 @@ +import{f as u,a as c,s as b,c as g,b as x}from"../chunks/CWb4Vnhz.js";import{i as _}from"../chunks/CCsGeFPC.js";import{h as $,z as y,p as w,t as h,a as S,s as d,c as v,r as l,j as p,at as j}from"../chunks/CQO205-B.js";import{s as m}from"../chunks/DKg_yD9X.js";import{p as T}from"../chunks/BEiADdeo.js";import{e as z,t as O}from"../chunks/CsANhQOh.js";function k(r,a,s,o,n){$&&y();var e=a.$$slots?.[s],t=!1;e===!0&&(e=a.children,t=!0),e===void 0||e(r,t?()=>o:o)}const A=!1,D=!1,Q=Object.freeze(Object.defineProperty({__proto__:null,prerender:D,ssr:A},Symbol.toStringTag,{value:"Module"}));var F=u('
Superset Tools
');function M(r,a){w(a,!1);const s=()=>g(T,"$page",o),[o,n]=b();_();var e=F(),t=d(v(e),2),i=v(t),f=d(i,2);l(t),l(e),h(()=>{m(i,1,`text-gray-600 hover:text-blue-600 font-medium ${s().url.pathname==="/"?"text-blue-600 border-b-2 border-blue-600":""}`),m(f,1,`text-gray-600 hover:text-blue-600 font-medium ${s().url.pathname==="/settings"?"text-blue-600 border-b-2 border-blue-600":""}`)}),c(r,e),S(),n()}var N=u('
© 2025 Superset Tools. All rights reserved.
');function P(r){var a=N();c(r,a)}var q=u("
"),B=u('
');function C(r){const a=()=>g(O,"$toasts",s),[s,o]=b();var n=B();z(n,5,a,e=>e.id,(e,t)=>{var i=q(),f=v(i,!0);l(i),h(()=>{m(i,1,`p-4 rounded-md shadow-lg text-white + ${p(t).type==="info"&&"bg-blue-500"} + ${p(t).type==="success"&&"bg-green-500"} + ${p(t).type==="error"&&"bg-red-500"} + `),x(f,p(t).message)}),c(e,i)}),l(n),c(r,n),o()}var E=u('
',1);function R(r,a){var s=E(),o=j(s);C(o);var n=d(o,2),e=v(n);M(e,{});var t=d(e,2),i=v(t);k(i,a,"default",{}),l(t);var f=d(t,2);P(f),l(n),c(r,s)}export{R as component,Q as universal}; diff --git a/frontend/.svelte-kit/output/client/_app/immutable/nodes/1.CppBCq8O.js b/frontend/.svelte-kit/output/client/_app/immutable/nodes/1.CppBCq8O.js new file mode 100644 index 0000000..544fb9e --- /dev/null +++ b/frontend/.svelte-kit/output/client/_app/immutable/nodes/1.CppBCq8O.js @@ -0,0 +1 @@ +import{f,a as g,s as u,b as p,c as b}from"../chunks/CWb4Vnhz.js";import{i as d}from"../chunks/CCsGeFPC.js";import{p as h,t as v,a as _,c as e,r as s,s as $,n as y}from"../chunks/CQO205-B.js";import{p as k}from"../chunks/BEiADdeo.js";var w=f('');function q(n,i){h(i,!1);const r=()=>b(k,"$page",c),[c,l]=u();d();var t=w(),a=e(t),m=e(a,!0);s(a);var o=$(a,2),x=e(o,!0);s(o),y(2),s(t),v(()=>{p(m,r().status),p(x,r().error?.message||"Page not found")}),g(n,t),_(),l()}export{q as component}; diff --git a/frontend/.svelte-kit/output/client/_app/immutable/nodes/2.DbjHrap6.js b/frontend/.svelte-kit/output/client/_app/immutable/nodes/2.DbjHrap6.js new file mode 100644 index 0000000..eb7f892 --- /dev/null +++ b/frontend/.svelte-kit/output/client/_app/immutable/nodes/2.DbjHrap6.js @@ -0,0 +1 @@ +import{a as de,s as z,r as ee,b as le,c as fe}from"../chunks/BGnnHgKo.js";import{f as m,c as Q,a as i,s as ve,b as F,e as J,g as ae}from"../chunks/CWb4Vnhz.js";import{i as re}from"../chunks/CCsGeFPC.js";import{$ as V,p as oe,au as pe,c as u,r as c,a as se,at as E,s as y,t as O,j as e,k as B,e as p,q as I,m as ge,av as be,n as _e,aw as he,f as ke,g as xe}from"../chunks/CQO205-B.js";import{i as P,p as ue}from"../chunks/C98uKxzC.js";import{e as ne,i as ie}from"../chunks/CsANhQOh.js";import{o as ye,a as $e,c as we}from"../chunks/CqZim_6h.js";import{s as Te}from"../chunks/DKg_yD9X.js";function Se($){return function(...w){var d=w[0];return d.preventDefault(),$?.apply(this,w)}}async function De(){try{return{plugins:await de.getPlugins()}}catch($){return console.error("Failed to load plugins:",$),{plugins:[],error:"Failed to load plugins"}}}const et=Object.freeze(Object.defineProperty({__proto__:null,load:De},Symbol.toStringTag,{value:"Module"})),ce=V([]),H=V(null),U=V(null),te=V([]);var Fe=m('
'),Re=m('

',1),Ae=m("

No task selected.

"),Oe=m('
');function Ce($,w){oe(w,!1);const d=()=>Q(U,"$selectedTask",L),a=()=>Q(te,"$taskLogs",L),[L,K]=ve();let s;ye(()=>{const f=pe(U);if(f){console.log(`[TaskRunner][Entry] Connecting to logs for task: ${f.id}`),te.set([]);const n=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws/logs/${f.id}`;s=new WebSocket(n),s.onopen=()=>{console.log("[TaskRunner][Coherence:OK] WebSocket connection established")},s.onmessage=g=>{const v=JSON.parse(g.data);te.update(t=>[...t,v])},s.onerror=g=>{console.error("[TaskRunner][Coherence:Failed] WebSocket error:",g)},s.onclose=()=>{console.log("[TaskRunner][Exit] WebSocket connection closed")}}}),$e(()=>{s&&(console.log("[TaskRunner][Action] Closing WebSocket connection."),s.close())}),re();var k=Oe(),M=u(k);{var W=f=>{var R=Re(),n=E(R),g=u(n);c(n);var v=y(n,2);ne(v,5,a,ie,(t,o)=>{var b=Fe(),_=u(b),S=u(_,!0);c(_);var D=y(_,2),A=u(D);c(D);var h=y(D,2),r=u(h,!0);c(h),c(b),O(l=>{F(S,l),Te(D,1,e(o).level==="ERROR"?"text-red-500":"text-green-400"),F(A,`[${e(o).level??""}]`),F(r,e(o).message)},[()=>new Date(e(o).timestamp).toLocaleTimeString()]),i(t,b)}),c(v),O(()=>F(g,`Task: ${d().plugin_id??""}`)),i(f,R)},T=f=>{var R=Ae();i(f,R)};P(M,f=>{d()?f(W):f(T,!1)})}c(k),i($,k),se(),K()}var Ee=m(''),Pe=m(''),Le=m(''),We=m('
'),je=m(' ',1),ze=m('
');function Be($,w){oe(w,!1);let d=ue(w,"schema",8),a=ge({});const L=we();function K(){console.log("[DynamicForm][Action] Submitting form data.",{formData:e(a)}),L("submit",e(a))}function s(){if(d()&&d().properties)for(const T in d().properties)I(a,e(a)[T]=d().properties[T].default||"")}s(),re();var k=ze(),M=u(k);{var W=T=>{var f=je(),R=E(f);ne(R,1,()=>(B(d()),p(()=>Object.entries(d().properties))),ie,(n,g)=>{var v=be(()=>he(e(g),2));let t=()=>e(v)[0],o=()=>e(v)[1];var b=We(),_=u(b),S=u(_,!0);c(_);var D=y(_,2);{var A=r=>{var l=Ee();ee(l),O(()=>{z(l,"id",t()),z(l,"placeholder",(o(),p(()=>o().description||"")))}),le(l,()=>e(a)[t()],j=>I(a,e(a)[t()]=j)),i(r,l)},h=r=>{var l=ae(),j=E(l);{var X=C=>{var x=Pe();ee(x),O(()=>{z(x,"id",t()),z(x,"placeholder",(o(),p(()=>o().description||"")))}),le(x,()=>e(a)[t()],q=>I(a,e(a)[t()]=q)),i(C,x)},N=C=>{var x=ae(),q=E(x);{var Y=Z=>{var G=Le();ee(G),O(()=>z(G,"id",t())),fe(G,()=>e(a)[t()],me=>I(a,e(a)[t()]=me)),i(Z,G)};P(q,Z=>{o(),p(()=>o().type==="boolean")&&Z(Y)},!0)}i(C,x)};P(j,C=>{o(),p(()=>o().type==="number"||o().type==="integer")?C(X):C(N,!1)},!0)}i(r,l)};P(D,r=>{o(),p(()=>o().type==="string")?r(A):r(h,!1)})}c(b),O(()=>{z(_,"for",t()),F(S,(o(),t(),p(()=>o().title||t())))}),i(n,b)}),_e(2),i(T,f)};P(M,T=>{B(d()),p(()=>d()&&d().properties)&&T(W)})}c(k),J("submit",k,Se(K)),i($,k),se()}var Ke=m(' ',1),Me=m('

',1),Ne=m('
'),qe=m('

'),He=m('

Available Tools

',1),Je=m('
');function tt($,w){oe(w,!1);const d=()=>Q(U,"$selectedTask",L),a=()=>Q(H,"$selectedPlugin",L),[L,K]=ve();let s=ue(w,"data",8);function k(n){console.log(`[Dashboard][Action] Selecting plugin: ${n.id}`),H.set(n)}async function M(n){console.log("[App.handleFormSubmit][Action] Handling form submission for task creation.");const g=n.detail;try{const v=pe(H),t=await de.createTask(v.id,g);U.set(t),H.set(null),console.log(`[App.handleFormSubmit][Coherence:OK] Task created id=${t.id}`)}catch(v){console.error(`[App.handleFormSubmit][Coherence:Failed] Task creation failed error=${v}`)}}ke(()=>(B(s()),ce),()=>{s().plugins&&ce.set(s().plugins)}),xe(),re();var W=Je(),T=u(W);{var f=n=>{var g=Ke(),v=E(g);Ce(v,{});var t=y(v,2);J("click",t,()=>U.set(null)),i(n,g)},R=n=>{var g=ae(),v=E(g);{var t=b=>{var _=Me(),S=E(_),D=u(S,!0);c(S);var A=y(S,2);Be(A,{get schema(){return a(),p(()=>a().schema)},$$events:{submit:M}});var h=y(A,2);O(()=>F(D,(a(),p(()=>a().name)))),J("click",h,()=>H.set(null)),i(b,_)},o=b=>{var _=He(),S=y(E(_),2);{var D=h=>{var r=Ne(),l=u(r,!0);c(r),O(()=>F(l,(B(s()),p(()=>s().error)))),i(h,r)};P(S,h=>{B(s()),p(()=>s().error)&&h(D)})}var A=y(S,2);ne(A,5,()=>(B(s()),p(()=>s().plugins)),ie,(h,r)=>{var l=qe(),j=u(l),X=u(j,!0);c(j);var N=y(j,2),C=u(N,!0);c(N);var x=y(N,2),q=u(x);c(x),c(l),O(()=>{F(X,(e(r),p(()=>e(r).name))),F(C,(e(r),p(()=>e(r).description))),F(q,`v${e(r),p(()=>e(r).version)??""}`)}),J("click",l,()=>k(e(r))),J("keydown",l,Y=>Y.key==="Enter"&&k(e(r))),i(h,l)}),c(A),i(b,_)};P(v,b=>{a()?b(t):b(o,!1)},!0)}i(n,g)};P(T,n=>{d()?n(f):n(R,!1)})}c(W),i($,W),se(),K()}export{tt as component,et as universal}; diff --git a/frontend/.svelte-kit/output/client/_app/immutable/nodes/3.BgpIj6zk.js b/frontend/.svelte-kit/output/client/_app/immutable/nodes/3.BgpIj6zk.js new file mode 100644 index 0000000..04d2afd --- /dev/null +++ b/frontend/.svelte-kit/output/client/_app/immutable/nodes/3.BgpIj6zk.js @@ -0,0 +1 @@ +import{a as Ce,b as g,c as Fe,r as u,u as Ae,d as Oe,e as Ue,t as De,f as Ge}from"../chunks/BGnnHgKo.js";import{f as _,e as b,a as h,b as p}from"../chunks/CWb4Vnhz.js";import{i as Te}from"../chunks/CCsGeFPC.js";import{p as $e,m as I,f as Ke,g as Ne,t as L,j as t,a as je,k as R,s as a,c as s,o as x,e as c,r as n,n as Pe,q as m}from"../chunks/CQO205-B.js";import{p as Ie,i as Y}from"../chunks/C98uKxzC.js";import{e as Le,i as Re,a as d}from"../chunks/CsANhQOh.js";async function Ye(){try{return{settings:await Ce.getSettings()}}catch(y){return console.error("Failed to load settings:",y),{settings:{environments:[],settings:{backup_path:"",default_environment_id:null}},error:"Failed to load settings"}}}const et=Object.freeze(Object.defineProperty({__proto__:null,load:Ye},Symbol.toStringTag,{value:"Module"}));var qe=_('
'),ze=_('

Warning

No Superset environments configured. You must add at least one environment to perform backups or migrations.

'),Be=_(' '),Me=_(''),We=_('

Settings

Global Settings

Superset Environments

NameURLUsernameDefaultActions

');function tt(y,q){$e(q,!1);let v=Ie(q,"data",8),i=I(v().settings),o=I({id:"",name:"",url:"",username:"",password:"",is_default:!1}),l=I(null);async function le(){try{console.log("[Settings.handleSaveGlobal][Action] Saving global settings."),await Ae(t(i).settings),d("Global settings saved","success"),console.log("[Settings.handleSaveGlobal][Coherence:OK] Global settings saved.")}catch(e){console.error("[Settings.handleSaveGlobal][Coherence:Failed] Failed to save global settings:",e),d("Failed to save global settings","error")}}async function ce(){try{console.log(`[Settings.handleAddOrUpdateEnv][Action] ${t(l)?"Updating":"Adding"} environment.`),t(l)?(await Oe(t(l),t(o)),d("Environment updated","success")):(await Ue(t(o)),d("Environment added","success")),z(),location.reload(),console.log("[Settings.handleAddOrUpdateEnv][Coherence:OK] Environment saved.")}catch(e){console.error("[Settings.handleAddOrUpdateEnv][Coherence:Failed] Failed to save environment:",e),d("Failed to save environment","error")}}async function ve(e){if(confirm("Are you sure you want to delete this environment?"))try{console.log(`[Settings.handleDeleteEnv][Action] Deleting environment: ${e}`),await Ge(e),d("Environment deleted","success"),location.reload(),console.log("[Settings.handleDeleteEnv][Coherence:OK] Environment deleted.")}catch(r){console.error("[Settings.handleDeleteEnv][Coherence:Failed] Failed to delete environment:",r),d("Failed to delete environment","error")}}async function ue(e){try{console.log(`[Settings.handleTestEnv][Action] Testing environment: ${e}`);const r=await De(e);r.status==="success"?(d("Connection successful","success"),console.log("[Settings.handleTestEnv][Coherence:OK] Connection successful.")):(d(`Connection failed: ${r.message}`,"error"),console.log("[Settings.handleTestEnv][Coherence:Failed] Connection failed."))}catch(r){console.error("[Settings.handleTestEnv][Coherence:Failed] Error testing connection:",r),d("Failed to test connection","error")}}function pe(e){x(o,{...e}),x(l,e.id)}function z(){x(o,{id:"",name:"",url:"",username:"",password:"",is_default:!1}),x(l,null)}Ke(()=>R(v()),()=>{x(i,v().settings)}),Ne(),Te();var k=We(),B=a(s(k),2);{var me=e=>{var r=qe(),f=s(r,!0);n(r),L(()=>p(f,(R(v()),c(()=>v().error)))),h(e,r)};Y(B,e=>{R(v()),c(()=>v().error)&&e(me)})}var E=a(B,2),M=a(s(E),2),S=s(M),W=a(s(S),2);u(W),n(S);var ge=a(S,2);n(M),n(E);var H=a(E,2),J=a(s(H),2);{var be=e=>{var r=ze();h(e,r)};Y(J,e=>{t(i),c(()=>t(i).environments.length===0)&&e(be)})}var C=a(J,2),Q=s(C),V=a(s(Q));Le(V,5,()=>(t(i),c(()=>t(i).environments)),Re,(e,r)=>{var f=Be(),K=s(f),ye=s(K,!0);n(K);var N=a(K),we=s(N,!0);n(N);var j=a(N),ke=s(j,!0);n(j);var P=a(j),Ee=s(P,!0);n(P);var oe=a(P),de=s(oe),ie=a(de,2),Se=a(ie,2);n(oe),n(f),L(()=>{p(ye,(t(r),c(()=>t(r).name))),p(we,(t(r),c(()=>t(r).url))),p(ke,(t(r),c(()=>t(r).username))),p(Ee,(t(r),c(()=>t(r).is_default?"Yes":"No")))}),b("click",de,()=>ue(t(r).id)),b("click",ie,()=>pe(t(r))),b("click",Se,()=>ve(t(r).id)),h(e,f)}),n(V),n(Q),n(C);var X=a(C,2),F=s(X),fe=s(F);n(F);var A=a(F,2),O=s(A),U=a(s(O),2);u(U),n(O);var D=a(O,2),Z=a(s(D),2);u(Z),n(D);var G=a(D,2),ee=a(s(G),2);u(ee),n(G);var T=a(G,2),te=a(s(T),2);u(te),n(T);var $=a(T,2),ae=a(s($),2);u(ae),n($);var re=a($,2),ne=s(re);u(ne),Pe(2),n(re),n(A);var se=a(A,2),w=s(se),he=s(w);n(w);var xe=a(w,2);{var _e=e=>{var r=Me();b("click",r,z),h(e,r)};Y(xe,e=>{t(l)&&e(_e)})}n(se),n(X),n(H),n(k),L(()=>{p(fe,`${t(l)?"Edit":"Add"} Environment`),U.disabled=!!t(l),p(he,`${t(l)?"Update":"Add"} Environment`)}),g(W,()=>t(i).settings.backup_path,e=>m(i,t(i).settings.backup_path=e)),b("click",ge,le),g(U,()=>t(o).id,e=>m(o,t(o).id=e)),g(Z,()=>t(o).name,e=>m(o,t(o).name=e)),g(ee,()=>t(o).url,e=>m(o,t(o).url=e)),g(te,()=>t(o).username,e=>m(o,t(o).username=e)),g(ae,()=>t(o).password,e=>m(o,t(o).password=e)),Fe(ne,()=>t(o).is_default,e=>m(o,t(o).is_default=e)),b("click",w,ce),h(y,k),je()}export{tt as component,et as universal}; diff --git a/frontend/.svelte-kit/output/client/_app/version.json b/frontend/.svelte-kit/output/client/_app/version.json new file mode 100644 index 0000000..1fb0742 --- /dev/null +++ b/frontend/.svelte-kit/output/client/_app/version.json @@ -0,0 +1 @@ +{"version":"1766259433446"} \ No newline at end of file diff --git a/frontend/.svelte-kit/output/prerendered/dependencies/_app/env.js b/frontend/.svelte-kit/output/prerendered/dependencies/_app/env.js new file mode 100644 index 0000000..f5427da --- /dev/null +++ b/frontend/.svelte-kit/output/prerendered/dependencies/_app/env.js @@ -0,0 +1 @@ +export const env={} \ No newline at end of file diff --git a/frontend/.svelte-kit/output/server/.vite/manifest.json b/frontend/.svelte-kit/output/server/.vite/manifest.json new file mode 100644 index 0000000..53586a9 --- /dev/null +++ b/frontend/.svelte-kit/output/server/.vite/manifest.json @@ -0,0 +1,177 @@ +{ + ".svelte-kit/generated/server/internal.js": { + "file": "internal.js", + "name": "internal", + "src": ".svelte-kit/generated/server/internal.js", + "isEntry": true, + "imports": [ + "_internal.js", + "_environment.js" + ] + }, + "_api.js": { + "file": "chunks/api.js", + "name": "api", + "imports": [ + "_toasts.js" + ] + }, + "_environment.js": { + "file": "chunks/environment.js", + "name": "environment" + }, + "_equality.js": { + "file": "chunks/equality.js", + "name": "equality" + }, + "_exports.js": { + "file": "chunks/exports.js", + "name": "exports" + }, + "_false.js": { + "file": "chunks/false.js", + "name": "false" + }, + "_index.js": { + "file": "chunks/index.js", + "name": "index", + "imports": [ + "_equality.js" + ] + }, + "_index2.js": { + "file": "chunks/index2.js", + "name": "index", + "imports": [ + "_false.js", + "_equality.js" + ] + }, + "_internal.js": { + "file": "chunks/internal.js", + "name": "internal", + "imports": [ + "_index2.js", + "_equality.js", + "_environment.js" + ] + }, + "_shared.js": { + "file": "chunks/shared.js", + "name": "shared", + "imports": [ + "_utils.js" + ] + }, + "_stores.js": { + "file": "chunks/stores.js", + "name": "stores", + "imports": [ + "_index2.js", + "_exports.js", + "_utils.js", + "_equality.js" + ] + }, + "_toasts.js": { + "file": "chunks/toasts.js", + "name": "toasts", + "imports": [ + "_index.js" + ] + }, + "_utils.js": { + "file": "chunks/utils.js", + "name": "utils" + }, + "node_modules/@sveltejs/kit/src/runtime/app/server/remote/index.js": { + "file": "remote-entry.js", + "name": "remote-entry", + "src": "node_modules/@sveltejs/kit/src/runtime/app/server/remote/index.js", + "isEntry": true, + "imports": [ + "_shared.js", + "_false.js", + "_environment.js" + ] + }, + "node_modules/@sveltejs/kit/src/runtime/server/index.js": { + "file": "index.js", + "name": "index", + "src": "node_modules/@sveltejs/kit/src/runtime/server/index.js", + "isEntry": true, + "imports": [ + "_false.js", + "_environment.js", + "_shared.js", + "_exports.js", + "_utils.js", + "_index.js", + "_internal.js" + ] + }, + "src/routes/+error.svelte": { + "file": "entries/pages/_error.svelte.js", + "name": "entries/pages/_error.svelte", + "src": "src/routes/+error.svelte", + "isEntry": true, + "imports": [ + "_index2.js", + "_stores.js" + ] + }, + "src/routes/+layout.svelte": { + "file": "entries/pages/_layout.svelte.js", + "name": "entries/pages/_layout.svelte", + "src": "src/routes/+layout.svelte", + "isEntry": true, + "imports": [ + "_index2.js", + "_stores.js", + "_toasts.js" + ] + }, + "src/routes/+layout.ts": { + "file": "entries/pages/_layout.ts.js", + "name": "entries/pages/_layout.ts", + "src": "src/routes/+layout.ts", + "isEntry": true + }, + "src/routes/+page.svelte": { + "file": "entries/pages/_page.svelte.js", + "name": "entries/pages/_page.svelte", + "src": "src/routes/+page.svelte", + "isEntry": true, + "imports": [ + "_index2.js", + "_index.js" + ] + }, + "src/routes/+page.ts": { + "file": "entries/pages/_page.ts.js", + "name": "entries/pages/_page.ts", + "src": "src/routes/+page.ts", + "isEntry": true, + "imports": [ + "_api.js" + ] + }, + "src/routes/settings/+page.svelte": { + "file": "entries/pages/settings/_page.svelte.js", + "name": "entries/pages/settings/_page.svelte", + "src": "src/routes/settings/+page.svelte", + "isEntry": true, + "imports": [ + "_index2.js" + ] + }, + "src/routes/settings/+page.ts": { + "file": "entries/pages/settings/_page.ts.js", + "name": "entries/pages/settings/_page.ts", + "src": "src/routes/settings/+page.ts", + "isEntry": true, + "imports": [ + "_api.js" + ] + } +} \ No newline at end of file diff --git a/frontend/.svelte-kit/output/server/chunks/api.js b/frontend/.svelte-kit/output/server/chunks/api.js new file mode 100644 index 0000000..08dc5f4 --- /dev/null +++ b/frontend/.svelte-kit/output/server/chunks/api.js @@ -0,0 +1,77 @@ +import { a as addToast } from "./toasts.js"; +const API_BASE_URL = "/api"; +async function fetchApi(endpoint) { + try { + console.log(`[api.fetchApi][Action] Fetching from context={{'endpoint': '${endpoint}'}}`); + const response = await fetch(`${API_BASE_URL}${endpoint}`); + if (!response.ok) { + throw new Error(`API request failed with status ${response.status}`); + } + return await response.json(); + } catch (error) { + console.error(`[api.fetchApi][Coherence:Failed] Error fetching from ${endpoint}:`, error); + addToast(error.message, "error"); + throw error; + } +} +async function postApi(endpoint, body) { + try { + console.log(`[api.postApi][Action] Posting to context={{'endpoint': '${endpoint}'}}`); + const response = await fetch(`${API_BASE_URL}${endpoint}`, { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(body) + }); + if (!response.ok) { + throw new Error(`API request failed with status ${response.status}`); + } + return await response.json(); + } catch (error) { + console.error(`[api.postApi][Coherence:Failed] Error posting to ${endpoint}:`, error); + addToast(error.message, "error"); + throw error; + } +} +async function requestApi(endpoint, method = "GET", body = null) { + try { + console.log(`[api.requestApi][Action] ${method} to context={{'endpoint': '${endpoint}'}}`); + const options = { + method, + headers: { + "Content-Type": "application/json" + } + }; + if (body) { + options.body = JSON.stringify(body); + } + const response = await fetch(`${API_BASE_URL}${endpoint}`, options); + if (!response.ok) { + const errorData = await response.json().catch(() => ({})); + throw new Error(errorData.detail || `API request failed with status ${response.status}`); + } + return await response.json(); + } catch (error) { + console.error(`[api.requestApi][Coherence:Failed] Error ${method} to ${endpoint}:`, error); + addToast(error.message, "error"); + throw error; + } +} +const api = { + getPlugins: () => fetchApi("/plugins/"), + getTasks: () => fetchApi("/tasks/"), + getTask: (taskId) => fetchApi(`/tasks/${taskId}`), + createTask: (pluginId, params) => postApi("/tasks/", { plugin_id: pluginId, params }), + // Settings + getSettings: () => fetchApi("/settings/"), + updateGlobalSettings: (settings) => requestApi("/settings/global", "PATCH", settings), + getEnvironments: () => fetchApi("/settings/environments"), + addEnvironment: (env) => postApi("/settings/environments", env), + updateEnvironment: (id, env) => requestApi(`/settings/environments/${id}`, "PUT", env), + deleteEnvironment: (id) => requestApi(`/settings/environments/${id}`, "DELETE"), + testEnvironmentConnection: (id) => postApi(`/settings/environments/${id}/test`, {}) +}; +export { + api as a +}; diff --git a/frontend/.svelte-kit/output/server/chunks/environment.js b/frontend/.svelte-kit/output/server/chunks/environment.js new file mode 100644 index 0000000..ad45c3c --- /dev/null +++ b/frontend/.svelte-kit/output/server/chunks/environment.js @@ -0,0 +1,34 @@ +let base = ""; +let assets = base; +const app_dir = "_app"; +const relative = true; +const initial = { base, assets }; +function override(paths) { + base = paths.base; + assets = paths.assets; +} +function reset() { + base = initial.base; + assets = initial.assets; +} +function set_assets(path) { + assets = initial.assets = path; +} +let prerendering = false; +function set_building() { +} +function set_prerendering() { + prerendering = true; +} +export { + assets as a, + base as b, + app_dir as c, + reset as d, + set_building as e, + set_prerendering as f, + override as o, + prerendering as p, + relative as r, + set_assets as s +}; diff --git a/frontend/.svelte-kit/output/server/chunks/equality.js b/frontend/.svelte-kit/output/server/chunks/equality.js new file mode 100644 index 0000000..3f27de5 --- /dev/null +++ b/frontend/.svelte-kit/output/server/chunks/equality.js @@ -0,0 +1,51 @@ +var is_array = Array.isArray; +var index_of = Array.prototype.indexOf; +var array_from = Array.from; +var define_property = Object.defineProperty; +var get_descriptor = Object.getOwnPropertyDescriptor; +var object_prototype = Object.prototype; +var array_prototype = Array.prototype; +var get_prototype_of = Object.getPrototypeOf; +var is_extensible = Object.isExtensible; +const noop = () => { +}; +function run_all(arr) { + for (var i = 0; i < arr.length; i++) { + arr[i](); + } +} +function deferred() { + var resolve; + var reject; + var promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { promise, resolve, reject }; +} +function equals(value) { + return value === this.v; +} +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; +} +function safe_equals(value) { + return !safe_not_equal(value, this.v); +} +export { + array_from as a, + deferred as b, + array_prototype as c, + define_property as d, + equals as e, + get_prototype_of as f, + get_descriptor as g, + is_extensible as h, + is_array as i, + index_of as j, + safe_not_equal as k, + noop as n, + object_prototype as o, + run_all as r, + safe_equals as s +}; diff --git a/frontend/.svelte-kit/output/server/chunks/exports.js b/frontend/.svelte-kit/output/server/chunks/exports.js new file mode 100644 index 0000000..4380620 --- /dev/null +++ b/frontend/.svelte-kit/output/server/chunks/exports.js @@ -0,0 +1,174 @@ +const SCHEME = /^[a-z][a-z\d+\-.]+:/i; +const internal = new URL("sveltekit-internal://"); +function resolve(base, path) { + if (path[0] === "/" && path[1] === "/") return path; + let url = new URL(base, internal); + url = new URL(path, url); + return url.protocol === internal.protocol ? url.pathname + url.search + url.hash : url.href; +} +function normalize_path(path, trailing_slash) { + if (path === "/" || trailing_slash === "ignore") return path; + if (trailing_slash === "never") { + return path.endsWith("/") ? path.slice(0, -1) : path; + } else if (trailing_slash === "always" && !path.endsWith("/")) { + return path + "/"; + } + return path; +} +function decode_pathname(pathname) { + return pathname.split("%25").map(decodeURI).join("%25"); +} +function decode_params(params) { + for (const key in params) { + params[key] = decodeURIComponent(params[key]); + } + return params; +} +function make_trackable(url, callback, search_params_callback, allow_hash = false) { + const tracked = new URL(url); + Object.defineProperty(tracked, "searchParams", { + value: new Proxy(tracked.searchParams, { + get(obj, key) { + if (key === "get" || key === "getAll" || key === "has") { + return (param) => { + search_params_callback(param); + return obj[key](param); + }; + } + callback(); + const value = Reflect.get(obj, key); + return typeof value === "function" ? value.bind(obj) : value; + } + }), + enumerable: true, + configurable: true + }); + const tracked_url_properties = ["href", "pathname", "search", "toString", "toJSON"]; + if (allow_hash) tracked_url_properties.push("hash"); + for (const property of tracked_url_properties) { + Object.defineProperty(tracked, property, { + get() { + callback(); + return url[property]; + }, + enumerable: true, + configurable: true + }); + } + { + tracked[/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")] = (depth, opts, inspect) => { + return inspect(url, opts); + }; + tracked.searchParams[/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")] = (depth, opts, inspect) => { + return inspect(url.searchParams, opts); + }; + } + if (!allow_hash) { + disable_hash(tracked); + } + return tracked; +} +function disable_hash(url) { + allow_nodejs_console_log(url); + Object.defineProperty(url, "hash", { + get() { + throw new Error( + "Cannot access event.url.hash. Consider using `page.url.hash` inside a component instead" + ); + } + }); +} +function disable_search(url) { + allow_nodejs_console_log(url); + for (const property of ["search", "searchParams"]) { + Object.defineProperty(url, property, { + get() { + throw new Error(`Cannot access url.${property} on a page with prerendering enabled`); + } + }); + } +} +function allow_nodejs_console_log(url) { + { + url[/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")] = (depth, opts, inspect) => { + return inspect(new URL(url), opts); + }; + } +} +function validator(expected) { + function validate(module, file) { + if (!module) return; + for (const key in module) { + if (key[0] === "_" || expected.has(key)) continue; + const values = [...expected.values()]; + const hint = hint_for_supported_files(key, file?.slice(file.lastIndexOf("."))) ?? `valid exports are ${values.join(", ")}, or anything with a '_' prefix`; + throw new Error(`Invalid export '${key}'${file ? ` in ${file}` : ""} (${hint})`); + } + } + return validate; +} +function hint_for_supported_files(key, ext = ".js") { + const supported_files = []; + if (valid_layout_exports.has(key)) { + supported_files.push(`+layout${ext}`); + } + if (valid_page_exports.has(key)) { + supported_files.push(`+page${ext}`); + } + if (valid_layout_server_exports.has(key)) { + supported_files.push(`+layout.server${ext}`); + } + if (valid_page_server_exports.has(key)) { + supported_files.push(`+page.server${ext}`); + } + if (valid_server_exports.has(key)) { + supported_files.push(`+server${ext}`); + } + if (supported_files.length > 0) { + return `'${key}' is a valid export in ${supported_files.slice(0, -1).join(", ")}${supported_files.length > 1 ? " or " : ""}${supported_files.at(-1)}`; + } +} +const valid_layout_exports = /* @__PURE__ */ new Set([ + "load", + "prerender", + "csr", + "ssr", + "trailingSlash", + "config" +]); +const valid_page_exports = /* @__PURE__ */ new Set([...valid_layout_exports, "entries"]); +const valid_layout_server_exports = /* @__PURE__ */ new Set([...valid_layout_exports]); +const valid_page_server_exports = /* @__PURE__ */ new Set([...valid_layout_server_exports, "actions", "entries"]); +const valid_server_exports = /* @__PURE__ */ new Set([ + "GET", + "POST", + "PATCH", + "PUT", + "DELETE", + "OPTIONS", + "HEAD", + "fallback", + "prerender", + "trailingSlash", + "config", + "entries" +]); +const validate_layout_exports = validator(valid_layout_exports); +const validate_page_exports = validator(valid_page_exports); +const validate_layout_server_exports = validator(valid_layout_server_exports); +const validate_page_server_exports = validator(valid_page_server_exports); +const validate_server_exports = validator(valid_server_exports); +export { + SCHEME as S, + decode_params as a, + validate_layout_exports as b, + validate_page_server_exports as c, + disable_search as d, + validate_page_exports as e, + decode_pathname as f, + validate_server_exports as g, + make_trackable as m, + normalize_path as n, + resolve as r, + validate_layout_server_exports as v +}; diff --git a/frontend/.svelte-kit/output/server/chunks/false.js b/frontend/.svelte-kit/output/server/chunks/false.js new file mode 100644 index 0000000..85bc56d --- /dev/null +++ b/frontend/.svelte-kit/output/server/chunks/false.js @@ -0,0 +1,4 @@ +const BROWSER = false; +export { + BROWSER as B +}; diff --git a/frontend/.svelte-kit/output/server/chunks/index.js b/frontend/.svelte-kit/output/server/chunks/index.js new file mode 100644 index 0000000..f33cead --- /dev/null +++ b/frontend/.svelte-kit/output/server/chunks/index.js @@ -0,0 +1,59 @@ +import { n as noop, k as safe_not_equal } from "./equality.js"; +import "clsx"; +const subscriber_queue = []; +function readable(value, start) { + return { + subscribe: writable(value, start).subscribe + }; +} +function writable(value, start = noop) { + let stop = null; + const subscribers = /* @__PURE__ */ new Set(); + function set(new_value) { + if (safe_not_equal(value, new_value)) { + value = new_value; + if (stop) { + const run_queue = !subscriber_queue.length; + for (const subscriber of subscribers) { + subscriber[1](); + subscriber_queue.push(subscriber, value); + } + if (run_queue) { + for (let i = 0; i < subscriber_queue.length; i += 2) { + subscriber_queue[i][0](subscriber_queue[i + 1]); + } + subscriber_queue.length = 0; + } + } + } + } + function update(fn) { + set(fn( + /** @type {T} */ + value + )); + } + function subscribe(run, invalidate = noop) { + const subscriber = [run, invalidate]; + subscribers.add(subscriber); + if (subscribers.size === 1) { + stop = start(set, update) || noop; + } + run( + /** @type {T} */ + value + ); + return () => { + subscribers.delete(subscriber); + if (subscribers.size === 0 && stop) { + stop(); + stop = null; + } + }; + } + return { set, update, subscribe }; +} +export { + readable as r, + writable as w +}; diff --git a/frontend/.svelte-kit/output/server/chunks/index2.js b/frontend/.svelte-kit/output/server/chunks/index2.js new file mode 100644 index 0000000..3a8ff46 --- /dev/null +++ b/frontend/.svelte-kit/output/server/chunks/index2.js @@ -0,0 +1,2783 @@ +import { clsx as clsx$1 } from "clsx"; +import { B as BROWSER } from "./false.js"; +import { r as run_all, b as deferred, s as safe_equals, e as equals, o as object_prototype, c as array_prototype, g as get_descriptor, f as get_prototype_of, i as is_array, h as is_extensible, j as index_of, n as noop } from "./equality.js"; +const DERIVED = 1 << 1; +const EFFECT = 1 << 2; +const RENDER_EFFECT = 1 << 3; +const MANAGED_EFFECT = 1 << 24; +const BLOCK_EFFECT = 1 << 4; +const BRANCH_EFFECT = 1 << 5; +const ROOT_EFFECT = 1 << 6; +const BOUNDARY_EFFECT = 1 << 7; +const CONNECTED = 1 << 9; +const CLEAN = 1 << 10; +const DIRTY = 1 << 11; +const MAYBE_DIRTY = 1 << 12; +const INERT = 1 << 13; +const DESTROYED = 1 << 14; +const EFFECT_RAN = 1 << 15; +const EFFECT_TRANSPARENT = 1 << 16; +const EAGER_EFFECT = 1 << 17; +const HEAD_EFFECT = 1 << 18; +const EFFECT_PRESERVED = 1 << 19; +const USER_EFFECT = 1 << 20; +const WAS_MARKED = 1 << 15; +const REACTION_IS_UPDATING = 1 << 21; +const ASYNC = 1 << 22; +const ERROR_VALUE = 1 << 23; +const STATE_SYMBOL = /* @__PURE__ */ Symbol("$state"); +const LEGACY_PROPS = /* @__PURE__ */ Symbol("legacy props"); +const STALE_REACTION = new class StaleReactionError extends Error { + name = "StaleReactionError"; + message = "The reaction that called `getAbortSignal()` was re-run or destroyed"; +}(); +const COMMENT_NODE = 8; +function lifecycle_outside_component(name) { + { + throw new Error(`https://svelte.dev/e/lifecycle_outside_component`); + } +} +function effect_update_depth_exceeded() { + { + throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`); + } +} +function hydration_failed() { + { + throw new Error(`https://svelte.dev/e/hydration_failed`); + } +} +function state_descriptors_fixed() { + { + throw new Error(`https://svelte.dev/e/state_descriptors_fixed`); + } +} +function state_prototype_fixed() { + { + throw new Error(`https://svelte.dev/e/state_prototype_fixed`); + } +} +function state_unsafe_mutation() { + { + throw new Error(`https://svelte.dev/e/state_unsafe_mutation`); + } +} +function svelte_boundary_reset_onerror() { + { + throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`); + } +} +const HYDRATION_START = "["; +const HYDRATION_START_ELSE = "[!"; +const HYDRATION_END = "]"; +const HYDRATION_ERROR = {}; +const ELEMENT_IS_NAMESPACED = 1; +const ELEMENT_PRESERVE_ATTRIBUTE_CASE = 1 << 1; +const ELEMENT_IS_INPUT = 1 << 2; +const UNINITIALIZED = /* @__PURE__ */ Symbol(); +let tracing_mode_flag = false; +let component_context = null; +function set_component_context(context) { + component_context = context; +} +function push$1(props, runes = false, fn) { + component_context = { + p: component_context, + i: false, + c: null, + e: null, + s: props, + x: null, + l: null + }; +} +function pop$1(component) { + var context = ( + /** @type {ComponentContext} */ + component_context + ); + var effects = context.e; + if (effects !== null) { + context.e = null; + for (var fn of effects) { + create_user_effect(fn); + } + } + context.i = true; + component_context = context.p; + return ( + /** @type {T} */ + {} + ); +} +function is_runes() { + return true; +} +let micro_tasks = []; +function run_micro_tasks() { + var tasks = micro_tasks; + micro_tasks = []; + run_all(tasks); +} +function queue_micro_task(fn) { + if (micro_tasks.length === 0 && !is_flushing_sync) { + var tasks = micro_tasks; + queueMicrotask(() => { + if (tasks === micro_tasks) run_micro_tasks(); + }); + } + micro_tasks.push(fn); +} +function flush_tasks() { + while (micro_tasks.length > 0) { + run_micro_tasks(); + } +} +function handle_error(error) { + var effect = active_effect; + if (effect === null) { + active_reaction.f |= ERROR_VALUE; + return error; + } + if ((effect.f & EFFECT_RAN) === 0) { + if ((effect.f & BOUNDARY_EFFECT) === 0) { + throw error; + } + effect.b.error(error); + } else { + invoke_error_boundary(error, effect); + } +} +function invoke_error_boundary(error, effect) { + while (effect !== null) { + if ((effect.f & BOUNDARY_EFFECT) !== 0) { + try { + effect.b.error(error); + return; + } catch (e) { + error = e; + } + } + effect = effect.parent; + } + throw error; +} +const batches = /* @__PURE__ */ new Set(); +let current_batch = null; +let batch_values = null; +let queued_root_effects = []; +let last_scheduled_effect = null; +let is_flushing = false; +let is_flushing_sync = false; +class Batch { + committed = false; + /** + * The current values of any sources that are updated in this batch + * They keys of this map are identical to `this.#previous` + * @type {Map} + */ + current = /* @__PURE__ */ new Map(); + /** + * The values of any sources that are updated in this batch _before_ those updates took place. + * They keys of this map are identical to `this.#current` + * @type {Map} + */ + previous = /* @__PURE__ */ new Map(); + /** + * When the batch is committed (and the DOM is updated), we need to remove old branches + * and append new ones by calling the functions added inside (if/each/key/etc) blocks + * @type {Set<() => void>} + */ + #commit_callbacks = /* @__PURE__ */ new Set(); + /** + * If a fork is discarded, we need to destroy any effects that are no longer needed + * @type {Set<(batch: Batch) => void>} + */ + #discard_callbacks = /* @__PURE__ */ new Set(); + /** + * The number of async effects that are currently in flight + */ + #pending = 0; + /** + * The number of async effects that are currently in flight, _not_ inside a pending boundary + */ + #blocking_pending = 0; + /** + * A deferred that resolves when the batch is committed, used with `settled()` + * TODO replace with Promise.withResolvers once supported widely enough + * @type {{ promise: Promise, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null} + */ + #deferred = null; + /** + * Deferred effects (which run after async work has completed) that are DIRTY + * @type {Set} + */ + #dirty_effects = /* @__PURE__ */ new Set(); + /** + * Deferred effects that are MAYBE_DIRTY + * @type {Set} + */ + #maybe_dirty_effects = /* @__PURE__ */ new Set(); + /** + * A set of branches that still exist, but will be destroyed when this batch + * is committed — we skip over these during `process` + * @type {Set} + */ + skipped_effects = /* @__PURE__ */ new Set(); + is_fork = false; + is_deferred() { + return this.is_fork || this.#blocking_pending > 0; + } + /** + * + * @param {Effect[]} root_effects + */ + process(root_effects) { + queued_root_effects = []; + this.apply(); + var target = { + parent: null, + effect: null, + effects: [], + render_effects: [] + }; + for (const root of root_effects) { + this.#traverse_effect_tree(root, target); + } + if (!this.is_fork) { + this.#resolve(); + } + if (this.is_deferred()) { + this.#defer_effects(target.effects); + this.#defer_effects(target.render_effects); + } else { + current_batch = null; + flush_queued_effects(target.render_effects); + flush_queued_effects(target.effects); + this.#deferred?.resolve(); + } + batch_values = null; + } + /** + * Traverse the effect tree, executing effects or stashing + * them for later execution as appropriate + * @param {Effect} root + * @param {EffectTarget} target + */ + #traverse_effect_tree(root, target) { + root.f ^= CLEAN; + var effect = root.first; + while (effect !== null) { + var flags = effect.f; + var is_branch = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0; + var is_skippable_branch = is_branch && (flags & CLEAN) !== 0; + var skip = is_skippable_branch || (flags & INERT) !== 0 || this.skipped_effects.has(effect); + if ((effect.f & BOUNDARY_EFFECT) !== 0 && effect.b?.is_pending()) { + target = { + parent: target, + effect, + effects: [], + render_effects: [] + }; + } + if (!skip && effect.fn !== null) { + if (is_branch) { + effect.f ^= CLEAN; + } else if ((flags & EFFECT) !== 0) { + target.effects.push(effect); + } else if (is_dirty(effect)) { + if ((effect.f & BLOCK_EFFECT) !== 0) this.#dirty_effects.add(effect); + update_effect(effect); + } + var child = effect.first; + if (child !== null) { + effect = child; + continue; + } + } + var parent = effect.parent; + effect = effect.next; + while (effect === null && parent !== null) { + if (parent === target.effect) { + this.#defer_effects(target.effects); + this.#defer_effects(target.render_effects); + target = /** @type {EffectTarget} */ + target.parent; + } + effect = parent.next; + parent = parent.parent; + } + } + } + /** + * @param {Effect[]} effects + */ + #defer_effects(effects) { + for (const e of effects) { + if ((e.f & DIRTY) !== 0) { + this.#dirty_effects.add(e); + } else if ((e.f & MAYBE_DIRTY) !== 0) { + this.#maybe_dirty_effects.add(e); + } + this.#clear_marked(e.deps); + set_signal_status(e, CLEAN); + } + } + /** + * @param {Value[] | null} deps + */ + #clear_marked(deps) { + if (deps === null) return; + for (const dep of deps) { + if ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) { + continue; + } + dep.f ^= WAS_MARKED; + this.#clear_marked( + /** @type {Derived} */ + dep.deps + ); + } + } + /** + * Associate a change to a given source with the current + * batch, noting its previous and current values + * @param {Source} source + * @param {any} value + */ + capture(source2, value) { + if (!this.previous.has(source2)) { + this.previous.set(source2, value); + } + if ((source2.f & ERROR_VALUE) === 0) { + this.current.set(source2, source2.v); + batch_values?.set(source2, source2.v); + } + } + activate() { + current_batch = this; + this.apply(); + } + deactivate() { + if (current_batch !== this) return; + current_batch = null; + batch_values = null; + } + flush() { + this.activate(); + if (queued_root_effects.length > 0) { + flush_effects(); + if (current_batch !== null && current_batch !== this) { + return; + } + } else if (this.#pending === 0) { + this.process([]); + } + this.deactivate(); + } + discard() { + for (const fn of this.#discard_callbacks) fn(this); + this.#discard_callbacks.clear(); + } + #resolve() { + if (this.#blocking_pending === 0) { + for (const fn of this.#commit_callbacks) fn(); + this.#commit_callbacks.clear(); + } + if (this.#pending === 0) { + this.#commit(); + } + } + #commit() { + if (batches.size > 1) { + this.previous.clear(); + var previous_batch_values = batch_values; + var is_earlier = true; + var dummy_target = { + parent: null, + effect: null, + effects: [], + render_effects: [] + }; + for (const batch of batches) { + if (batch === this) { + is_earlier = false; + continue; + } + const sources = []; + for (const [source2, value] of this.current) { + if (batch.current.has(source2)) { + if (is_earlier && value !== batch.current.get(source2)) { + batch.current.set(source2, value); + } else { + continue; + } + } + sources.push(source2); + } + if (sources.length === 0) { + continue; + } + const others = [...batch.current.keys()].filter((s) => !this.current.has(s)); + if (others.length > 0) { + var prev_queued_root_effects = queued_root_effects; + queued_root_effects = []; + const marked = /* @__PURE__ */ new Set(); + const checked = /* @__PURE__ */ new Map(); + for (const source2 of sources) { + mark_effects(source2, others, marked, checked); + } + if (queued_root_effects.length > 0) { + current_batch = batch; + batch.apply(); + for (const root of queued_root_effects) { + batch.#traverse_effect_tree(root, dummy_target); + } + batch.deactivate(); + } + queued_root_effects = prev_queued_root_effects; + } + } + current_batch = null; + batch_values = previous_batch_values; + } + this.committed = true; + batches.delete(this); + } + /** + * + * @param {boolean} blocking + */ + increment(blocking) { + this.#pending += 1; + if (blocking) this.#blocking_pending += 1; + } + /** + * + * @param {boolean} blocking + */ + decrement(blocking) { + this.#pending -= 1; + if (blocking) this.#blocking_pending -= 1; + this.revive(); + } + revive() { + for (const e of this.#dirty_effects) { + this.#maybe_dirty_effects.delete(e); + set_signal_status(e, DIRTY); + schedule_effect(e); + } + for (const e of this.#maybe_dirty_effects) { + set_signal_status(e, MAYBE_DIRTY); + schedule_effect(e); + } + this.flush(); + } + /** @param {() => void} fn */ + oncommit(fn) { + this.#commit_callbacks.add(fn); + } + /** @param {(batch: Batch) => void} fn */ + ondiscard(fn) { + this.#discard_callbacks.add(fn); + } + settled() { + return (this.#deferred ??= deferred()).promise; + } + static ensure() { + if (current_batch === null) { + const batch = current_batch = new Batch(); + batches.add(current_batch); + if (!is_flushing_sync) { + Batch.enqueue(() => { + if (current_batch !== batch) { + return; + } + batch.flush(); + }); + } + } + return current_batch; + } + /** @param {() => void} task */ + static enqueue(task) { + queue_micro_task(task); + } + apply() { + return; + } +} +function flushSync(fn) { + var was_flushing_sync = is_flushing_sync; + is_flushing_sync = true; + try { + var result; + if (fn) ; + while (true) { + flush_tasks(); + if (queued_root_effects.length === 0) { + current_batch?.flush(); + if (queued_root_effects.length === 0) { + last_scheduled_effect = null; + return ( + /** @type {T} */ + result + ); + } + } + flush_effects(); + } + } finally { + is_flushing_sync = was_flushing_sync; + } +} +function flush_effects() { + var was_updating_effect = is_updating_effect; + is_flushing = true; + var source_stacks = null; + try { + var flush_count = 0; + set_is_updating_effect(true); + while (queued_root_effects.length > 0) { + var batch = Batch.ensure(); + if (flush_count++ > 1e3) { + var updates, entry; + if (BROWSER) ; + infinite_loop_guard(); + } + batch.process(queued_root_effects); + old_values.clear(); + if (BROWSER) ; + } + } finally { + is_flushing = false; + set_is_updating_effect(was_updating_effect); + last_scheduled_effect = null; + } +} +function infinite_loop_guard() { + try { + effect_update_depth_exceeded(); + } catch (error) { + invoke_error_boundary(error, last_scheduled_effect); + } +} +let eager_block_effects = null; +function flush_queued_effects(effects) { + var length = effects.length; + if (length === 0) return; + var i = 0; + while (i < length) { + var effect = effects[i++]; + if ((effect.f & (DESTROYED | INERT)) === 0 && is_dirty(effect)) { + eager_block_effects = /* @__PURE__ */ new Set(); + update_effect(effect); + if (effect.deps === null && effect.first === null && effect.nodes === null) { + if (effect.teardown === null && effect.ac === null) { + unlink_effect(effect); + } else { + effect.fn = null; + } + } + if (eager_block_effects?.size > 0) { + old_values.clear(); + for (const e of eager_block_effects) { + if ((e.f & (DESTROYED | INERT)) !== 0) continue; + const ordered_effects = [e]; + let ancestor = e.parent; + while (ancestor !== null) { + if (eager_block_effects.has(ancestor)) { + eager_block_effects.delete(ancestor); + ordered_effects.push(ancestor); + } + ancestor = ancestor.parent; + } + for (let j = ordered_effects.length - 1; j >= 0; j--) { + const e2 = ordered_effects[j]; + if ((e2.f & (DESTROYED | INERT)) !== 0) continue; + update_effect(e2); + } + } + eager_block_effects.clear(); + } + } + } + eager_block_effects = null; +} +function mark_effects(value, sources, marked, checked) { + if (marked.has(value)) return; + marked.add(value); + if (value.reactions !== null) { + for (const reaction of value.reactions) { + const flags = reaction.f; + if ((flags & DERIVED) !== 0) { + mark_effects( + /** @type {Derived} */ + reaction, + sources, + marked, + checked + ); + } else if ((flags & (ASYNC | BLOCK_EFFECT)) !== 0 && (flags & DIRTY) === 0 && depends_on(reaction, sources, checked)) { + set_signal_status(reaction, DIRTY); + schedule_effect( + /** @type {Effect} */ + reaction + ); + } + } + } +} +function depends_on(reaction, sources, checked) { + const depends = checked.get(reaction); + if (depends !== void 0) return depends; + if (reaction.deps !== null) { + for (const dep of reaction.deps) { + if (sources.includes(dep)) { + return true; + } + if ((dep.f & DERIVED) !== 0 && depends_on( + /** @type {Derived} */ + dep, + sources, + checked + )) { + checked.set( + /** @type {Derived} */ + dep, + true + ); + return true; + } + } + } + checked.set(reaction, false); + return false; +} +function schedule_effect(signal) { + var effect = last_scheduled_effect = signal; + while (effect.parent !== null) { + effect = effect.parent; + var flags = effect.f; + if (is_flushing && effect === active_effect && (flags & BLOCK_EFFECT) !== 0 && (flags & HEAD_EFFECT) === 0) { + return; + } + if ((flags & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) { + if ((flags & CLEAN) === 0) return; + effect.f ^= CLEAN; + } + } + queued_root_effects.push(effect); +} +function destroy_derived_effects(derived) { + var effects = derived.effects; + if (effects !== null) { + derived.effects = null; + for (var i = 0; i < effects.length; i += 1) { + destroy_effect( + /** @type {Effect} */ + effects[i] + ); + } + } +} +function get_derived_parent_effect(derived) { + var parent = derived.parent; + while (parent !== null) { + if ((parent.f & DERIVED) === 0) { + return (parent.f & DESTROYED) === 0 ? ( + /** @type {Effect} */ + parent + ) : null; + } + parent = parent.parent; + } + return null; +} +function execute_derived(derived) { + var value; + var prev_active_effect = active_effect; + set_active_effect(get_derived_parent_effect(derived)); + { + try { + derived.f &= ~WAS_MARKED; + destroy_derived_effects(derived); + value = update_reaction(derived); + } finally { + set_active_effect(prev_active_effect); + } + } + return value; +} +function update_derived(derived) { + var value = execute_derived(derived); + if (!derived.equals(value)) { + if (!current_batch?.is_fork) { + derived.v = value; + } + derived.wv = increment_write_version(); + } + if (is_destroying_effect) { + return; + } + if (batch_values !== null) { + if (effect_tracking() || current_batch?.is_fork) { + batch_values.set(derived, value); + } + } else { + var status = (derived.f & CONNECTED) === 0 ? MAYBE_DIRTY : CLEAN; + set_signal_status(derived, status); + } +} +let eager_effects = /* @__PURE__ */ new Set(); +const old_values = /* @__PURE__ */ new Map(); +let eager_effects_deferred = false; +function source(v, stack) { + var signal = { + f: 0, + // TODO ideally we could skip this altogether, but it causes type errors + v, + reactions: null, + equals, + rv: 0, + wv: 0 + }; + return signal; +} +// @__NO_SIDE_EFFECTS__ +function state(v, stack) { + const s = source(v); + push_reaction_value(s); + return s; +} +// @__NO_SIDE_EFFECTS__ +function mutable_source(initial_value, immutable = false, trackable = true) { + const s = source(initial_value); + if (!immutable) { + s.equals = safe_equals; + } + return s; +} +function set(source2, value, should_proxy = false) { + if (active_reaction !== null && // since we are untracking the function inside `$inspect.with` we need to add this check + // to ensure we error if state is set inside an inspect effect + (!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) && is_runes() && (active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 && !current_sources?.includes(source2)) { + state_unsafe_mutation(); + } + let new_value = should_proxy ? proxy(value) : value; + return internal_set(source2, new_value); +} +function internal_set(source2, value) { + if (!source2.equals(value)) { + var old_value = source2.v; + if (is_destroying_effect) { + old_values.set(source2, value); + } else { + old_values.set(source2, old_value); + } + source2.v = value; + var batch = Batch.ensure(); + batch.capture(source2, old_value); + if ((source2.f & DERIVED) !== 0) { + if ((source2.f & DIRTY) !== 0) { + execute_derived( + /** @type {Derived} */ + source2 + ); + } + set_signal_status(source2, (source2.f & CONNECTED) !== 0 ? CLEAN : MAYBE_DIRTY); + } + source2.wv = increment_write_version(); + mark_reactions(source2, DIRTY); + if (active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0) { + if (untracked_writes === null) { + set_untracked_writes([source2]); + } else { + untracked_writes.push(source2); + } + } + if (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) { + flush_eager_effects(); + } + } + return value; +} +function flush_eager_effects() { + eager_effects_deferred = false; + var prev_is_updating_effect = is_updating_effect; + set_is_updating_effect(true); + const inspects = Array.from(eager_effects); + try { + for (const effect of inspects) { + if ((effect.f & CLEAN) !== 0) { + set_signal_status(effect, MAYBE_DIRTY); + } + if (is_dirty(effect)) { + update_effect(effect); + } + } + } finally { + set_is_updating_effect(prev_is_updating_effect); + } + eager_effects.clear(); +} +function increment(source2) { + set(source2, source2.v + 1); +} +function mark_reactions(signal, status) { + var reactions = signal.reactions; + if (reactions === null) return; + var length = reactions.length; + for (var i = 0; i < length; i++) { + var reaction = reactions[i]; + var flags = reaction.f; + var not_dirty = (flags & DIRTY) === 0; + if (not_dirty) { + set_signal_status(reaction, status); + } + if ((flags & DERIVED) !== 0) { + var derived = ( + /** @type {Derived} */ + reaction + ); + batch_values?.delete(derived); + if ((flags & WAS_MARKED) === 0) { + if (flags & CONNECTED) { + reaction.f |= WAS_MARKED; + } + mark_reactions(derived, MAYBE_DIRTY); + } + } else if (not_dirty) { + if ((flags & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) { + eager_block_effects.add( + /** @type {Effect} */ + reaction + ); + } + schedule_effect( + /** @type {Effect} */ + reaction + ); + } + } +} +function proxy(value) { + if (typeof value !== "object" || value === null || STATE_SYMBOL in value) { + return value; + } + const prototype = get_prototype_of(value); + if (prototype !== object_prototype && prototype !== array_prototype) { + return value; + } + var sources = /* @__PURE__ */ new Map(); + var is_proxied_array = is_array(value); + var version = /* @__PURE__ */ state(0); + var parent_version = update_version; + var with_parent = (fn) => { + if (update_version === parent_version) { + return fn(); + } + var reaction = active_reaction; + var version2 = update_version; + set_active_reaction(null); + set_update_version(parent_version); + var result = fn(); + set_active_reaction(reaction); + set_update_version(version2); + return result; + }; + if (is_proxied_array) { + sources.set("length", /* @__PURE__ */ state( + /** @type {any[]} */ + value.length + )); + } + return new Proxy( + /** @type {any} */ + value, + { + defineProperty(_, prop, descriptor) { + if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) { + state_descriptors_fixed(); + } + var s = sources.get(prop); + if (s === void 0) { + s = with_parent(() => { + var s2 = /* @__PURE__ */ state(descriptor.value); + sources.set(prop, s2); + return s2; + }); + } else { + set(s, descriptor.value, true); + } + return true; + }, + deleteProperty(target, prop) { + var s = sources.get(prop); + if (s === void 0) { + if (prop in target) { + const s2 = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED)); + sources.set(prop, s2); + increment(version); + } + } else { + set(s, UNINITIALIZED); + increment(version); + } + return true; + }, + get(target, prop, receiver) { + if (prop === STATE_SYMBOL) { + return value; + } + var s = sources.get(prop); + var exists = prop in target; + if (s === void 0 && (!exists || get_descriptor(target, prop)?.writable)) { + s = with_parent(() => { + var p = proxy(exists ? target[prop] : UNINITIALIZED); + var s2 = /* @__PURE__ */ state(p); + return s2; + }); + sources.set(prop, s); + } + if (s !== void 0) { + var v = get(s); + return v === UNINITIALIZED ? void 0 : v; + } + return Reflect.get(target, prop, receiver); + }, + getOwnPropertyDescriptor(target, prop) { + var descriptor = Reflect.getOwnPropertyDescriptor(target, prop); + if (descriptor && "value" in descriptor) { + var s = sources.get(prop); + if (s) descriptor.value = get(s); + } else if (descriptor === void 0) { + var source2 = sources.get(prop); + var value2 = source2?.v; + if (source2 !== void 0 && value2 !== UNINITIALIZED) { + return { + enumerable: true, + configurable: true, + value: value2, + writable: true + }; + } + } + return descriptor; + }, + has(target, prop) { + if (prop === STATE_SYMBOL) { + return true; + } + var s = sources.get(prop); + var has = s !== void 0 && s.v !== UNINITIALIZED || Reflect.has(target, prop); + if (s !== void 0 || active_effect !== null && (!has || get_descriptor(target, prop)?.writable)) { + if (s === void 0) { + s = with_parent(() => { + var p = has ? proxy(target[prop]) : UNINITIALIZED; + var s2 = /* @__PURE__ */ state(p); + return s2; + }); + sources.set(prop, s); + } + var value2 = get(s); + if (value2 === UNINITIALIZED) { + return false; + } + } + return has; + }, + set(target, prop, value2, receiver) { + var s = sources.get(prop); + var has = prop in target; + if (is_proxied_array && prop === "length") { + for (var i = value2; i < /** @type {Source} */ + s.v; i += 1) { + var other_s = sources.get(i + ""); + if (other_s !== void 0) { + set(other_s, UNINITIALIZED); + } else if (i in target) { + other_s = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED)); + sources.set(i + "", other_s); + } + } + } + if (s === void 0) { + if (!has || get_descriptor(target, prop)?.writable) { + s = with_parent(() => /* @__PURE__ */ state(void 0)); + set(s, proxy(value2)); + sources.set(prop, s); + } + } else { + has = s.v !== UNINITIALIZED; + var p = with_parent(() => proxy(value2)); + set(s, p); + } + var descriptor = Reflect.getOwnPropertyDescriptor(target, prop); + if (descriptor?.set) { + descriptor.set.call(receiver, value2); + } + if (!has) { + if (is_proxied_array && typeof prop === "string") { + var ls = ( + /** @type {Source} */ + sources.get("length") + ); + var n = Number(prop); + if (Number.isInteger(n) && n >= ls.v) { + set(ls, n + 1); + } + } + increment(version); + } + return true; + }, + ownKeys(target) { + get(version); + var own_keys = Reflect.ownKeys(target).filter((key2) => { + var source3 = sources.get(key2); + return source3 === void 0 || source3.v !== UNINITIALIZED; + }); + for (var [key, source2] of sources) { + if (source2.v !== UNINITIALIZED && !(key in target)) { + own_keys.push(key); + } + } + return own_keys; + }, + setPrototypeOf() { + state_prototype_fixed(); + } + } + ); +} +var $window; +var first_child_getter; +var next_sibling_getter; +function init_operations() { + if ($window !== void 0) { + return; + } + $window = window; + var element_prototype = Element.prototype; + var node_prototype = Node.prototype; + var text_prototype = Text.prototype; + first_child_getter = get_descriptor(node_prototype, "firstChild").get; + next_sibling_getter = get_descriptor(node_prototype, "nextSibling").get; + if (is_extensible(element_prototype)) { + element_prototype.__click = void 0; + element_prototype.__className = void 0; + element_prototype.__attributes = null; + element_prototype.__style = void 0; + element_prototype.__e = void 0; + } + if (is_extensible(text_prototype)) { + text_prototype.__t = void 0; + } +} +function create_text(value = "") { + return document.createTextNode(value); +} +// @__NO_SIDE_EFFECTS__ +function get_first_child(node) { + return ( + /** @type {TemplateNode | null} */ + first_child_getter.call(node) + ); +} +// @__NO_SIDE_EFFECTS__ +function get_next_sibling(node) { + return ( + /** @type {TemplateNode | null} */ + next_sibling_getter.call(node) + ); +} +function clear_text_content(node) { + node.textContent = ""; +} +function without_reactive_context(fn) { + var previous_reaction = active_reaction; + var previous_effect = active_effect; + set_active_reaction(null); + set_active_effect(null); + try { + return fn(); + } finally { + set_active_reaction(previous_reaction); + set_active_effect(previous_effect); + } +} +function push_effect(effect, parent_effect) { + var parent_last = parent_effect.last; + if (parent_last === null) { + parent_effect.last = parent_effect.first = effect; + } else { + parent_last.next = effect; + effect.prev = parent_last; + parent_effect.last = effect; + } +} +function create_effect(type, fn, sync) { + var parent = active_effect; + if (parent !== null && (parent.f & INERT) !== 0) { + type |= INERT; + } + var effect = { + ctx: component_context, + deps: null, + nodes: null, + f: type | DIRTY | CONNECTED, + first: null, + fn, + last: null, + next: null, + parent, + b: parent && parent.b, + prev: null, + teardown: null, + wv: 0, + ac: null + }; + if (sync) { + try { + update_effect(effect); + effect.f |= EFFECT_RAN; + } catch (e2) { + destroy_effect(effect); + throw e2; + } + } else if (fn !== null) { + schedule_effect(effect); + } + var e = effect; + if (sync && e.deps === null && e.teardown === null && e.nodes === null && e.first === e.last && // either `null`, or a singular child + (e.f & EFFECT_PRESERVED) === 0) { + e = e.first; + if ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) { + e.f |= EFFECT_TRANSPARENT; + } + } + if (e !== null) { + e.parent = parent; + if (parent !== null) { + push_effect(e, parent); + } + if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0 && (type & ROOT_EFFECT) === 0) { + var derived = ( + /** @type {Derived} */ + active_reaction + ); + (derived.effects ??= []).push(e); + } + } + return effect; +} +function effect_tracking() { + return active_reaction !== null && !untracking; +} +function create_user_effect(fn) { + return create_effect(EFFECT | USER_EFFECT, fn, false); +} +function component_root(fn) { + Batch.ensure(); + const effect = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn, true); + return (options = {}) => { + return new Promise((fulfil) => { + if (options.outro) { + pause_effect(effect, () => { + destroy_effect(effect); + fulfil(void 0); + }); + } else { + destroy_effect(effect); + fulfil(void 0); + } + }); + }; +} +function render_effect(fn, flags = 0) { + return create_effect(RENDER_EFFECT | flags, fn, true); +} +function block(fn, flags = 0) { + var effect = create_effect(BLOCK_EFFECT | flags, fn, true); + return effect; +} +function branch(fn) { + return create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn, true); +} +function execute_effect_teardown(effect) { + var teardown = effect.teardown; + if (teardown !== null) { + const previously_destroying_effect = is_destroying_effect; + const previous_reaction = active_reaction; + set_is_destroying_effect(true); + set_active_reaction(null); + try { + teardown.call(null); + } finally { + set_is_destroying_effect(previously_destroying_effect); + set_active_reaction(previous_reaction); + } + } +} +function destroy_effect_children(signal, remove_dom = false) { + var effect = signal.first; + signal.first = signal.last = null; + while (effect !== null) { + const controller2 = effect.ac; + if (controller2 !== null) { + without_reactive_context(() => { + controller2.abort(STALE_REACTION); + }); + } + var next = effect.next; + if ((effect.f & ROOT_EFFECT) !== 0) { + effect.parent = null; + } else { + destroy_effect(effect, remove_dom); + } + effect = next; + } +} +function destroy_block_effect_children(signal) { + var effect = signal.first; + while (effect !== null) { + var next = effect.next; + if ((effect.f & BRANCH_EFFECT) === 0) { + destroy_effect(effect); + } + effect = next; + } +} +function destroy_effect(effect, remove_dom = true) { + var removed = false; + if ((remove_dom || (effect.f & HEAD_EFFECT) !== 0) && effect.nodes !== null && effect.nodes.end !== null) { + remove_effect_dom( + effect.nodes.start, + /** @type {TemplateNode} */ + effect.nodes.end + ); + removed = true; + } + destroy_effect_children(effect, remove_dom && !removed); + remove_reactions(effect, 0); + set_signal_status(effect, DESTROYED); + var transitions = effect.nodes && effect.nodes.t; + if (transitions !== null) { + for (const transition of transitions) { + transition.stop(); + } + } + execute_effect_teardown(effect); + var parent = effect.parent; + if (parent !== null && parent.first !== null) { + unlink_effect(effect); + } + effect.next = effect.prev = effect.teardown = effect.ctx = effect.deps = effect.fn = effect.nodes = effect.ac = null; +} +function remove_effect_dom(node, end) { + while (node !== null) { + var next = node === end ? null : /* @__PURE__ */ get_next_sibling(node); + node.remove(); + node = next; + } +} +function unlink_effect(effect) { + var parent = effect.parent; + var prev = effect.prev; + var next = effect.next; + if (prev !== null) prev.next = next; + if (next !== null) next.prev = prev; + if (parent !== null) { + if (parent.first === effect) parent.first = next; + if (parent.last === effect) parent.last = prev; + } +} +function pause_effect(effect, callback, destroy = true) { + var transitions = []; + pause_children(effect, transitions, true); + var fn = () => { + if (destroy) destroy_effect(effect); + if (callback) callback(); + }; + var remaining = transitions.length; + if (remaining > 0) { + var check = () => --remaining || fn(); + for (var transition of transitions) { + transition.out(check); + } + } else { + fn(); + } +} +function pause_children(effect, transitions, local) { + if ((effect.f & INERT) !== 0) return; + effect.f ^= INERT; + var t = effect.nodes && effect.nodes.t; + if (t !== null) { + for (const transition of t) { + if (transition.is_global || local) { + transitions.push(transition); + } + } + } + var child = effect.first; + while (child !== null) { + var sibling = child.next; + var transparent = (child.f & EFFECT_TRANSPARENT) !== 0 || // If this is a branch effect without a block effect parent, + // it means the parent block effect was pruned. In that case, + // transparency information was transferred to the branch effect. + (child.f & BRANCH_EFFECT) !== 0 && (effect.f & BLOCK_EFFECT) !== 0; + pause_children(child, transitions, transparent ? local : false); + child = sibling; + } +} +function move_effect(effect, fragment) { + if (!effect.nodes) return; + var node = effect.nodes.start; + var end = effect.nodes.end; + while (node !== null) { + var next = node === end ? null : /* @__PURE__ */ get_next_sibling(node); + fragment.append(node); + node = next; + } +} +let is_updating_effect = false; +function set_is_updating_effect(value) { + is_updating_effect = value; +} +let is_destroying_effect = false; +function set_is_destroying_effect(value) { + is_destroying_effect = value; +} +let active_reaction = null; +let untracking = false; +function set_active_reaction(reaction) { + active_reaction = reaction; +} +let active_effect = null; +function set_active_effect(effect) { + active_effect = effect; +} +let current_sources = null; +function push_reaction_value(value) { + if (active_reaction !== null && true) { + if (current_sources === null) { + current_sources = [value]; + } else { + current_sources.push(value); + } + } +} +let new_deps = null; +let skipped_deps = 0; +let untracked_writes = null; +function set_untracked_writes(value) { + untracked_writes = value; +} +let write_version = 1; +let read_version = 0; +let update_version = read_version; +function set_update_version(value) { + update_version = value; +} +function increment_write_version() { + return ++write_version; +} +function is_dirty(reaction) { + var flags = reaction.f; + if ((flags & DIRTY) !== 0) { + return true; + } + if (flags & DERIVED) { + reaction.f &= ~WAS_MARKED; + } + if ((flags & MAYBE_DIRTY) !== 0) { + var dependencies = reaction.deps; + if (dependencies !== null) { + var length = dependencies.length; + for (var i = 0; i < length; i++) { + var dependency = dependencies[i]; + if (is_dirty( + /** @type {Derived} */ + dependency + )) { + update_derived( + /** @type {Derived} */ + dependency + ); + } + if (dependency.wv > reaction.wv) { + return true; + } + } + } + if ((flags & CONNECTED) !== 0 && // During time traveling we don't want to reset the status so that + // traversal of the graph in the other batches still happens + batch_values === null) { + set_signal_status(reaction, CLEAN); + } + } + return false; +} +function schedule_possible_effect_self_invalidation(signal, effect, root = true) { + var reactions = signal.reactions; + if (reactions === null) return; + if (current_sources?.includes(signal)) { + return; + } + for (var i = 0; i < reactions.length; i++) { + var reaction = reactions[i]; + if ((reaction.f & DERIVED) !== 0) { + schedule_possible_effect_self_invalidation( + /** @type {Derived} */ + reaction, + effect, + false + ); + } else if (effect === reaction) { + if (root) { + set_signal_status(reaction, DIRTY); + } else if ((reaction.f & CLEAN) !== 0) { + set_signal_status(reaction, MAYBE_DIRTY); + } + schedule_effect( + /** @type {Effect} */ + reaction + ); + } + } +} +function update_reaction(reaction) { + var previous_deps = new_deps; + var previous_skipped_deps = skipped_deps; + var previous_untracked_writes = untracked_writes; + var previous_reaction = active_reaction; + var previous_sources = current_sources; + var previous_component_context = component_context; + var previous_untracking = untracking; + var previous_update_version = update_version; + var flags = reaction.f; + new_deps = /** @type {null | Value[]} */ + null; + skipped_deps = 0; + untracked_writes = null; + active_reaction = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null; + current_sources = null; + set_component_context(reaction.ctx); + untracking = false; + update_version = ++read_version; + if (reaction.ac !== null) { + without_reactive_context(() => { + reaction.ac.abort(STALE_REACTION); + }); + reaction.ac = null; + } + try { + reaction.f |= REACTION_IS_UPDATING; + var fn = ( + /** @type {Function} */ + reaction.fn + ); + var result = fn(); + var deps = reaction.deps; + if (new_deps !== null) { + var i; + remove_reactions(reaction, skipped_deps); + if (deps !== null && skipped_deps > 0) { + deps.length = skipped_deps + new_deps.length; + for (i = 0; i < new_deps.length; i++) { + deps[skipped_deps + i] = new_deps[i]; + } + } else { + reaction.deps = deps = new_deps; + } + if (effect_tracking() && (reaction.f & CONNECTED) !== 0) { + for (i = skipped_deps; i < deps.length; i++) { + (deps[i].reactions ??= []).push(reaction); + } + } + } else if (deps !== null && skipped_deps < deps.length) { + remove_reactions(reaction, skipped_deps); + deps.length = skipped_deps; + } + if (is_runes() && untracked_writes !== null && !untracking && deps !== null && (reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0) { + for (i = 0; i < /** @type {Source[]} */ + untracked_writes.length; i++) { + schedule_possible_effect_self_invalidation( + untracked_writes[i], + /** @type {Effect} */ + reaction + ); + } + } + if (previous_reaction !== null && previous_reaction !== reaction) { + read_version++; + if (untracked_writes !== null) { + if (previous_untracked_writes === null) { + previous_untracked_writes = untracked_writes; + } else { + previous_untracked_writes.push(.../** @type {Source[]} */ + untracked_writes); + } + } + } + if ((reaction.f & ERROR_VALUE) !== 0) { + reaction.f ^= ERROR_VALUE; + } + return result; + } catch (error) { + return handle_error(error); + } finally { + reaction.f ^= REACTION_IS_UPDATING; + new_deps = previous_deps; + skipped_deps = previous_skipped_deps; + untracked_writes = previous_untracked_writes; + active_reaction = previous_reaction; + current_sources = previous_sources; + set_component_context(previous_component_context); + untracking = previous_untracking; + update_version = previous_update_version; + } +} +function remove_reaction(signal, dependency) { + let reactions = dependency.reactions; + if (reactions !== null) { + var index = index_of.call(reactions, signal); + if (index !== -1) { + var new_length = reactions.length - 1; + if (new_length === 0) { + reactions = dependency.reactions = null; + } else { + reactions[index] = reactions[new_length]; + reactions.pop(); + } + } + } + if (reactions === null && (dependency.f & DERIVED) !== 0 && // Destroying a child effect while updating a parent effect can cause a dependency to appear + // to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps` + // allows us to skip the expensive work of disconnecting and immediately reconnecting it + (new_deps === null || !new_deps.includes(dependency))) { + set_signal_status(dependency, MAYBE_DIRTY); + if ((dependency.f & CONNECTED) !== 0) { + dependency.f ^= CONNECTED; + dependency.f &= ~WAS_MARKED; + } + destroy_derived_effects( + /** @type {Derived} **/ + dependency + ); + remove_reactions( + /** @type {Derived} **/ + dependency, + 0 + ); + } +} +function remove_reactions(signal, start_index) { + var dependencies = signal.deps; + if (dependencies === null) return; + for (var i = start_index; i < dependencies.length; i++) { + remove_reaction(signal, dependencies[i]); + } +} +function update_effect(effect) { + var flags = effect.f; + if ((flags & DESTROYED) !== 0) { + return; + } + set_signal_status(effect, CLEAN); + var previous_effect = active_effect; + var was_updating_effect = is_updating_effect; + active_effect = effect; + is_updating_effect = true; + try { + if ((flags & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) { + destroy_block_effect_children(effect); + } else { + destroy_effect_children(effect); + } + execute_effect_teardown(effect); + var teardown = update_reaction(effect); + effect.teardown = typeof teardown === "function" ? teardown : null; + effect.wv = write_version; + var dep; + if (BROWSER && tracing_mode_flag && (effect.f & DIRTY) !== 0 && effect.deps !== null) ; + } finally { + is_updating_effect = was_updating_effect; + active_effect = previous_effect; + } +} +function get(signal) { + var flags = signal.f; + var is_derived = (flags & DERIVED) !== 0; + if (active_reaction !== null && !untracking) { + var destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0; + if (!destroyed && !current_sources?.includes(signal)) { + var deps = active_reaction.deps; + if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) { + if (signal.rv < read_version) { + signal.rv = read_version; + if (new_deps === null && deps !== null && deps[skipped_deps] === signal) { + skipped_deps++; + } else if (new_deps === null) { + new_deps = [signal]; + } else if (!new_deps.includes(signal)) { + new_deps.push(signal); + } + } + } else { + (active_reaction.deps ??= []).push(signal); + var reactions = signal.reactions; + if (reactions === null) { + signal.reactions = [active_reaction]; + } else if (!reactions.includes(active_reaction)) { + reactions.push(active_reaction); + } + } + } + } + if (is_destroying_effect) { + if (old_values.has(signal)) { + return old_values.get(signal); + } + if (is_derived) { + var derived = ( + /** @type {Derived} */ + signal + ); + var value = derived.v; + if ((derived.f & CLEAN) === 0 && derived.reactions !== null || depends_on_old_values(derived)) { + value = execute_derived(derived); + } + old_values.set(derived, value); + return value; + } + } else if (is_derived && (!batch_values?.has(signal) || current_batch?.is_fork && !effect_tracking())) { + derived = /** @type {Derived} */ + signal; + if (is_dirty(derived)) { + update_derived(derived); + } + if (is_updating_effect && effect_tracking() && (derived.f & CONNECTED) === 0) { + reconnect(derived); + } + } + if (batch_values?.has(signal)) { + return batch_values.get(signal); + } + if ((signal.f & ERROR_VALUE) !== 0) { + throw signal.v; + } + return signal.v; +} +function reconnect(derived) { + if (derived.deps === null) return; + derived.f ^= CONNECTED; + for (const dep of derived.deps) { + (dep.reactions ??= []).push(derived); + if ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) { + reconnect( + /** @type {Derived} */ + dep + ); + } + } +} +function depends_on_old_values(derived) { + if (derived.v === UNINITIALIZED) return true; + if (derived.deps === null) return false; + for (const dep of derived.deps) { + if (old_values.has(dep)) { + return true; + } + if ((dep.f & DERIVED) !== 0 && depends_on_old_values( + /** @type {Derived} */ + dep + )) { + return true; + } + } + return false; +} +function untrack(fn) { + var previous_untracking = untracking; + try { + untracking = true; + return fn(); + } finally { + untracking = previous_untracking; + } +} +const STATUS_MASK = -7169; +function set_signal_status(signal, status) { + signal.f = signal.f & STATUS_MASK | status; +} +const DOM_BOOLEAN_ATTRIBUTES = [ + "allowfullscreen", + "async", + "autofocus", + "autoplay", + "checked", + "controls", + "default", + "disabled", + "formnovalidate", + "indeterminate", + "inert", + "ismap", + "loop", + "multiple", + "muted", + "nomodule", + "novalidate", + "open", + "playsinline", + "readonly", + "required", + "reversed", + "seamless", + "selected", + "webkitdirectory", + "defer", + "disablepictureinpicture", + "disableremoteplayback" +]; +function is_boolean_attribute(name) { + return DOM_BOOLEAN_ATTRIBUTES.includes(name); +} +const PASSIVE_EVENTS = ["touchstart", "touchmove"]; +function is_passive_event(name) { + return PASSIVE_EVENTS.includes(name); +} +const ATTR_REGEX = /[&"<]/g; +const CONTENT_REGEX = /[&<]/g; +function escape_html(value, is_attr) { + const str = String(value ?? ""); + const pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX; + pattern.lastIndex = 0; + let escaped = ""; + let last = 0; + while (pattern.test(str)) { + const i = pattern.lastIndex - 1; + const ch = str[i]; + escaped += str.substring(last, i) + (ch === "&" ? "&" : ch === '"' ? """ : "<"); + last = i + 1; + } + return escaped + str.substring(last); +} +const replacements = { + translate: /* @__PURE__ */ new Map([ + [true, "yes"], + [false, "no"] + ]) +}; +function attr(name, value, is_boolean = false) { + if (name === "hidden" && value !== "until-found") { + is_boolean = true; + } + if (value == null || !value && is_boolean) return ""; + const normalized = name in replacements && replacements[name].get(value) || value; + const assignment = is_boolean ? "" : `="${escape_html(normalized, true)}"`; + return ` ${name}${assignment}`; +} +function clsx(value) { + if (typeof value === "object") { + return clsx$1(value); + } else { + return value ?? ""; + } +} +const whitespace = [..." \n\r\f \v\uFEFF"]; +function to_class(value, hash, directives) { + var classname = value == null ? "" : "" + value; + if (hash) { + classname = classname ? classname + " " + hash : hash; + } + if (directives) { + for (var key in directives) { + if (directives[key]) { + classname = classname ? classname + " " + key : key; + } else if (classname.length) { + var len = key.length; + var a = 0; + while ((a = classname.indexOf(key, a)) >= 0) { + var b = a + len; + if ((a === 0 || whitespace.includes(classname[a - 1])) && (b === classname.length || whitespace.includes(classname[b]))) { + classname = (a === 0 ? "" : classname.substring(0, a)) + classname.substring(b + 1); + } else { + a = b; + } + } + } + } + } + return classname === "" ? null : classname; +} +function append_styles(styles, important = false) { + var separator = important ? " !important;" : ";"; + var css = ""; + for (var key in styles) { + var value = styles[key]; + if (value != null && value !== "") { + css += " " + key + ": " + value + separator; + } + } + return css; +} +function to_css_name(name) { + if (name[0] !== "-" || name[1] !== "-") { + return name.toLowerCase(); + } + return name; +} +function to_style(value, styles) { + if (styles) { + var new_style = ""; + var normal_styles; + var important_styles; + if (Array.isArray(styles)) { + normal_styles = styles[0]; + important_styles = styles[1]; + } else { + normal_styles = styles; + } + if (value) { + value = String(value).replaceAll(/\s*\/\*.*?\*\/\s*/g, "").trim(); + var in_str = false; + var in_apo = 0; + var in_comment = false; + var reserved_names = []; + if (normal_styles) { + reserved_names.push(...Object.keys(normal_styles).map(to_css_name)); + } + if (important_styles) { + reserved_names.push(...Object.keys(important_styles).map(to_css_name)); + } + var start_index = 0; + var name_index = -1; + const len = value.length; + for (var i = 0; i < len; i++) { + var c = value[i]; + if (in_comment) { + if (c === "/" && value[i - 1] === "*") { + in_comment = false; + } + } else if (in_str) { + if (in_str === c) { + in_str = false; + } + } else if (c === "/" && value[i + 1] === "*") { + in_comment = true; + } else if (c === '"' || c === "'") { + in_str = c; + } else if (c === "(") { + in_apo++; + } else if (c === ")") { + in_apo--; + } + if (!in_comment && in_str === false && in_apo === 0) { + if (c === ":" && name_index === -1) { + name_index = i; + } else if (c === ";" || i === len - 1) { + if (name_index !== -1) { + var name = to_css_name(value.substring(start_index, name_index).trim()); + if (!reserved_names.includes(name)) { + if (c !== ";") { + i++; + } + var property = value.substring(start_index, i).trim(); + new_style += " " + property + ";"; + } + } + start_index = i + 1; + name_index = -1; + } + } + } + } + if (normal_styles) { + new_style += append_styles(normal_styles); + } + if (important_styles) { + new_style += append_styles(important_styles, true); + } + new_style = new_style.trim(); + return new_style === "" ? null : new_style; + } + return value == null ? null : String(value); +} +function subscribe_to_store(store, run, invalidate) { + if (store == null) { + run(void 0); + return noop; + } + const unsub = untrack( + () => store.subscribe( + run, + // @ts-expect-error + invalidate + ) + ); + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; +} +const BLOCK_OPEN = ``; +const BLOCK_CLOSE = ``; +let controller = null; +function abort() { + controller?.abort(STALE_REACTION); + controller = null; +} +function await_invalid() { + const error = new Error(`await_invalid +Encountered asynchronous work while rendering synchronously. +https://svelte.dev/e/await_invalid`); + error.name = "Svelte error"; + throw error; +} +function invalid_csp() { + const error = new Error(`invalid_csp +\`csp.nonce\` was set while \`csp.hash\` was \`true\`. These options cannot be used simultaneously. +https://svelte.dev/e/invalid_csp`); + error.name = "Svelte error"; + throw error; +} +function server_context_required() { + const error = new Error(`server_context_required +Could not resolve \`render\` context. +https://svelte.dev/e/server_context_required`); + error.name = "Svelte error"; + throw error; +} +var ssr_context = null; +function set_ssr_context(v) { + ssr_context = v; +} +function getContext(key) { + const context_map = get_or_init_context_map(); + const result = ( + /** @type {T} */ + context_map.get(key) + ); + return result; +} +function setContext(key, context) { + get_or_init_context_map().set(key, context); + return context; +} +function get_or_init_context_map(name) { + if (ssr_context === null) { + lifecycle_outside_component(); + } + return ssr_context.c ??= new Map(get_parent_context(ssr_context) || void 0); +} +function push(fn) { + ssr_context = { p: ssr_context, c: null, r: null }; +} +function pop() { + ssr_context = /** @type {SSRContext} */ + ssr_context.p; +} +function get_parent_context(ssr_context2) { + let parent = ssr_context2.p; + while (parent !== null) { + const context_map = parent.c; + if (context_map !== null) { + return context_map; + } + parent = parent.p; + } + return null; +} +function unresolved_hydratable(key, stack) { + { + console.warn(`https://svelte.dev/e/unresolved_hydratable`); + } +} +function get_render_context() { + const store = als?.getStore(); + { + server_context_required(); + } + return store; +} +let als = null; +let text_encoder; +let crypto; +async function sha256(data) { + text_encoder ??= new TextEncoder(); + crypto ??= globalThis.crypto?.subtle?.digest ? globalThis.crypto : ( + // @ts-ignore - we don't install node types in the prod build + (await import("node:crypto")).webcrypto + ); + const hash_buffer = await crypto.subtle.digest("SHA-256", text_encoder.encode(data)); + return base64_encode(hash_buffer); +} +function base64_encode(bytes) { + if (globalThis.Buffer) { + return globalThis.Buffer.from(bytes).toString("base64"); + } + let binary = ""; + for (let i = 0; i < bytes.length; i++) { + binary += String.fromCharCode(bytes[i]); + } + return btoa(binary); +} +class Renderer { + /** + * The contents of the renderer. + * @type {RendererItem[]} + */ + #out = []; + /** + * Any `onDestroy` callbacks registered during execution of this renderer. + * @type {(() => void)[] | undefined} + */ + #on_destroy = void 0; + /** + * Whether this renderer is a component body. + * @type {boolean} + */ + #is_component_body = false; + /** + * The type of string content that this renderer is accumulating. + * @type {RendererType} + */ + type; + /** @type {Renderer | undefined} */ + #parent; + /** + * Asynchronous work associated with this renderer + * @type {Promise | undefined} + */ + promise = void 0; + /** + * State which is associated with the content tree as a whole. + * It will be re-exposed, uncopied, on all children. + * @type {SSRState} + * @readonly + */ + global; + /** + * State that is local to the branch it is declared in. + * It will be shallow-copied to all children. + * + * @type {{ select_value: string | undefined }} + */ + local; + /** + * @param {SSRState} global + * @param {Renderer | undefined} [parent] + */ + constructor(global, parent) { + this.#parent = parent; + this.global = global; + this.local = parent ? { ...parent.local } : { select_value: void 0 }; + this.type = parent ? parent.type : "body"; + } + /** + * @param {(renderer: Renderer) => void} fn + */ + head(fn) { + const head = new Renderer(this.global, this); + head.type = "head"; + this.#out.push(head); + head.child(fn); + } + /** + * @param {Array>} blockers + * @param {(renderer: Renderer) => void} fn + */ + async_block(blockers, fn) { + this.#out.push(BLOCK_OPEN); + this.async(blockers, fn); + this.#out.push(BLOCK_CLOSE); + } + /** + * @param {Array>} blockers + * @param {(renderer: Renderer) => void} fn + */ + async(blockers, fn) { + let callback = fn; + if (blockers.length > 0) { + const context = ssr_context; + callback = (renderer) => { + return Promise.all(blockers).then(() => { + const previous_context = ssr_context; + try { + set_ssr_context(context); + return fn(renderer); + } finally { + set_ssr_context(previous_context); + } + }); + }; + } + this.child(callback); + } + /** + * @param {Array<() => void>} thunks + */ + run(thunks) { + const context = ssr_context; + let promise = Promise.resolve(thunks[0]()); + const promises = [promise]; + for (const fn of thunks.slice(1)) { + promise = promise.then(() => { + const previous_context = ssr_context; + set_ssr_context(context); + try { + return fn(); + } finally { + set_ssr_context(previous_context); + } + }); + promises.push(promise); + } + return promises; + } + /** + * Create a child renderer. The child renderer inherits the state from the parent, + * but has its own content. + * @param {(renderer: Renderer) => MaybePromise} fn + */ + child(fn) { + const child = new Renderer(this.global, this); + this.#out.push(child); + const parent = ssr_context; + set_ssr_context({ + ...ssr_context, + p: parent, + c: null, + r: child + }); + const result = fn(child); + set_ssr_context(parent); + if (result instanceof Promise) { + if (child.global.mode === "sync") { + await_invalid(); + } + result.catch(() => { + }); + child.promise = result; + } + return child; + } + /** + * Create a component renderer. The component renderer inherits the state from the parent, + * but has its own content. It is treated as an ordering boundary for ondestroy callbacks. + * @param {(renderer: Renderer) => MaybePromise} fn + * @param {Function} [component_fn] + * @returns {void} + */ + component(fn, component_fn) { + push(); + const child = this.child(fn); + child.#is_component_body = true; + pop(); + } + /** + * @param {Record} attrs + * @param {(renderer: Renderer) => void} fn + * @param {string | undefined} [css_hash] + * @param {Record | undefined} [classes] + * @param {Record | undefined} [styles] + * @param {number | undefined} [flags] + * @returns {void} + */ + select(attrs, fn, css_hash, classes, styles, flags) { + const { value, ...select_attrs } = attrs; + this.push(``); + this.child((renderer) => { + renderer.local.select_value = value; + fn(renderer); + }); + this.push(""); + } + /** + * @param {Record} attrs + * @param {string | number | boolean | ((renderer: Renderer) => void)} body + * @param {string | undefined} [css_hash] + * @param {Record | undefined} [classes] + * @param {Record | undefined} [styles] + * @param {number | undefined} [flags] + */ + option(attrs, body, css_hash, classes, styles, flags) { + this.#out.push(` { + if ("value" in attrs) { + value = attrs.value; + } + if (value === this.local.select_value) { + renderer.#out.push(" selected"); + } + renderer.#out.push(`>${body2}`); + if (head) { + renderer.head((child) => child.push(head)); + } + }; + if (typeof body === "function") { + this.child((renderer) => { + const r = new Renderer(this.global, this); + body(r); + if (this.global.mode === "async") { + return r.#collect_content_async().then((content) => { + close(renderer, content.body.replaceAll("", ""), content); + }); + } else { + const content = r.#collect_content(); + close(renderer, content.body.replaceAll("", ""), content); + } + }); + } else { + close(this, body, { body }); + } + } + /** + * @param {(renderer: Renderer) => void} fn + */ + title(fn) { + const path = this.get_path(); + const close = (head) => { + this.global.set_title(head, path); + }; + this.child((renderer) => { + const r = new Renderer(renderer.global, renderer); + fn(r); + if (renderer.global.mode === "async") { + return r.#collect_content_async().then((content) => { + close(content.head); + }); + } else { + const content = r.#collect_content(); + close(content.head); + } + }); + } + /** + * @param {string | (() => Promise)} content + */ + push(content) { + if (typeof content === "function") { + this.child(async (renderer) => renderer.push(await content())); + } else { + this.#out.push(content); + } + } + /** + * @param {() => void} fn + */ + on_destroy(fn) { + (this.#on_destroy ??= []).push(fn); + } + /** + * @returns {number[]} + */ + get_path() { + return this.#parent ? [...this.#parent.get_path(), this.#parent.#out.indexOf(this)] : []; + } + /** + * @deprecated this is needed for legacy component bindings + */ + copy() { + const copy = new Renderer(this.global, this.#parent); + copy.#out = this.#out.map((item) => item instanceof Renderer ? item.copy() : item); + copy.promise = this.promise; + return copy; + } + /** + * @param {Renderer} other + * @deprecated this is needed for legacy component bindings + */ + subsume(other) { + if (this.global.mode !== other.global.mode) { + throw new Error( + "invariant: A renderer cannot switch modes. If you're seeing this, there's a compiler bug. File an issue!" + ); + } + this.local = other.local; + this.#out = other.#out.map((item) => { + if (item instanceof Renderer) { + item.subsume(item); + } + return item; + }); + this.promise = other.promise; + this.type = other.type; + } + get length() { + return this.#out.length; + } + /** + * Only available on the server and when compiling with the `server` option. + * Takes a component and returns an object with `body` and `head` properties on it, which you can use to populate the HTML when server-rendering your app. + * @template {Record} Props + * @param {Component} component + * @param {{ props?: Omit; context?: Map; idPrefix?: string; csp?: Csp }} [options] + * @returns {RenderOutput} + */ + static render(component, options = {}) { + let sync; + const result = ( + /** @type {RenderOutput} */ + {} + ); + Object.defineProperties(result, { + html: { + get: () => { + return (sync ??= Renderer.#render(component, options)).body; + } + }, + head: { + get: () => { + return (sync ??= Renderer.#render(component, options)).head; + } + }, + body: { + get: () => { + return (sync ??= Renderer.#render(component, options)).body; + } + }, + hashes: { + value: { + script: "" + } + }, + then: { + value: ( + /** + * this is not type-safe, but honestly it's the best I can do right now, and it's a straightforward function. + * + * @template TResult1 + * @template [TResult2=never] + * @param { (value: SyncRenderOutput) => TResult1 } onfulfilled + * @param { (reason: unknown) => TResult2 } onrejected + */ + (onfulfilled, onrejected) => { + { + const result2 = sync ??= Renderer.#render(component, options); + const user_result = onfulfilled({ + head: result2.head, + body: result2.body, + html: result2.body, + hashes: { script: [] } + }); + return Promise.resolve(user_result); + } + } + ) + } + }); + return result; + } + /** + * Collect all of the `onDestroy` callbacks registered during rendering. In an async context, this is only safe to call + * after awaiting `collect_async`. + * + * Child renderers are "porous" and don't affect execution order, but component body renderers + * create ordering boundaries. Within a renderer, callbacks run in order until hitting a component boundary. + * @returns {Iterable<() => void>} + */ + *#collect_on_destroy() { + for (const component of this.#traverse_components()) { + yield* component.#collect_ondestroy(); + } + } + /** + * Performs a depth-first search of renderers, yielding the deepest components first, then additional components as we backtrack up the tree. + * @returns {Iterable} + */ + *#traverse_components() { + for (const child of this.#out) { + if (typeof child !== "string") { + yield* child.#traverse_components(); + } + } + if (this.#is_component_body) { + yield this; + } + } + /** + * @returns {Iterable<() => void>} + */ + *#collect_ondestroy() { + if (this.#on_destroy) { + for (const fn of this.#on_destroy) { + yield fn; + } + } + for (const child of this.#out) { + if (child instanceof Renderer && !child.#is_component_body) { + yield* child.#collect_ondestroy(); + } + } + } + /** + * Render a component. Throws if any of the children are performing asynchronous work. + * + * @template {Record} Props + * @param {Component} component + * @param {{ props?: Omit; context?: Map; idPrefix?: string }} options + * @returns {AccumulatedContent} + */ + static #render(component, options) { + var previous_context = ssr_context; + try { + const renderer = Renderer.#open_render("sync", component, options); + const content = renderer.#collect_content(); + return Renderer.#close_render(content, renderer); + } finally { + abort(); + set_ssr_context(previous_context); + } + } + /** + * Render a component. + * + * @template {Record} Props + * @param {Component} component + * @param {{ props?: Omit; context?: Map; idPrefix?: string; csp?: Csp }} options + * @returns {Promise} + */ + static async #render_async(component, options) { + const previous_context = ssr_context; + try { + const renderer = Renderer.#open_render("async", component, options); + const content = await renderer.#collect_content_async(); + const hydratables = await renderer.#collect_hydratables(); + if (hydratables !== null) { + content.head = hydratables + content.head; + } + return Renderer.#close_render(content, renderer); + } finally { + set_ssr_context(previous_context); + abort(); + } + } + /** + * Collect all of the code from the `out` array and return it as a string, or a promise resolving to a string. + * @param {AccumulatedContent} content + * @returns {AccumulatedContent} + */ + #collect_content(content = { head: "", body: "" }) { + for (const item of this.#out) { + if (typeof item === "string") { + content[this.type] += item; + } else if (item instanceof Renderer) { + item.#collect_content(content); + } + } + return content; + } + /** + * Collect all of the code from the `out` array and return it as a string. + * @param {AccumulatedContent} content + * @returns {Promise} + */ + async #collect_content_async(content = { head: "", body: "" }) { + await this.promise; + for (const item of this.#out) { + if (typeof item === "string") { + content[this.type] += item; + } else if (item instanceof Renderer) { + await item.#collect_content_async(content); + } + } + return content; + } + async #collect_hydratables() { + const ctx = get_render_context().hydratable; + for (const [_, key] of ctx.unresolved_promises) { + unresolved_hydratable(key, ctx.lookup.get(key)?.stack ?? ""); + } + for (const comparison of ctx.comparisons) { + await comparison; + } + return await this.#hydratable_block(ctx); + } + /** + * @template {Record} Props + * @param {'sync' | 'async'} mode + * @param {import('svelte').Component} component + * @param {{ props?: Omit; context?: Map; idPrefix?: string; csp?: Csp }} options + * @returns {Renderer} + */ + static #open_render(mode, component, options) { + const renderer = new Renderer( + new SSRState(mode, options.idPrefix ? options.idPrefix + "-" : "", options.csp) + ); + renderer.push(BLOCK_OPEN); + if (options.context) { + push(); + ssr_context.c = options.context; + ssr_context.r = renderer; + } + component(renderer, options.props ?? {}); + if (options.context) { + pop(); + } + renderer.push(BLOCK_CLOSE); + return renderer; + } + /** + * @param {AccumulatedContent} content + * @param {Renderer} renderer + * @returns {AccumulatedContent & { hashes: { script: Sha256Source[] } }} + */ + static #close_render(content, renderer) { + for (const cleanup of renderer.#collect_on_destroy()) { + cleanup(); + } + let head = content.head + renderer.global.get_title(); + let body = content.body; + for (const { hash, code } of renderer.global.css) { + head += ``; + } + return { + head, + body, + hashes: { + script: renderer.global.csp.script_hashes + } + }; + } + /** + * @param {HydratableContext} ctx + */ + async #hydratable_block(ctx) { + if (ctx.lookup.size === 0) { + return null; + } + let entries = []; + let has_promises = false; + for (const [k, v] of ctx.lookup) { + if (v.promises) { + has_promises = true; + for (const p of v.promises) await p; + } + entries.push(`[${JSON.stringify(k)},${v.serialized}]`); + } + let prelude = `const h = (window.__svelte ??= {}).h ??= new Map();`; + if (has_promises) { + prelude = `const r = (v) => Promise.resolve(v); + ${prelude}`; + } + const body = ` + { + ${prelude} + + for (const [k, v] of [ + ${entries.join(",\n ")} + ]) { + h.set(k, v); + } + } + `; + let csp_attr = ""; + if (this.global.csp.nonce) { + csp_attr = ` nonce="${this.global.csp.nonce}"`; + } else if (this.global.csp.hash) { + const hash = await sha256(body); + this.global.csp.script_hashes.push(`sha256-${hash}`); + } + return ` + ${body}<\/script>`; + } +} +class SSRState { + /** @readonly @type {Csp & { script_hashes: Sha256Source[] }} */ + csp; + /** @readonly @type {'sync' | 'async'} */ + mode; + /** @readonly @type {() => string} */ + uid; + /** @readonly @type {Set<{ hash: string; code: string }>} */ + css = /* @__PURE__ */ new Set(); + /** @type {{ path: number[], value: string }} */ + #title = { path: [], value: "" }; + /** + * @param {'sync' | 'async'} mode + * @param {string} id_prefix + * @param {Csp} csp + */ + constructor(mode, id_prefix = "", csp = { hash: false }) { + this.mode = mode; + this.csp = { ...csp, script_hashes: [] }; + let uid = 1; + this.uid = () => `${id_prefix}s${uid++}`; + } + get_title() { + return this.#title.value; + } + /** + * Performs a depth-first (lexicographic) comparison using the path. Rejects sets + * from earlier than or equal to the current value. + * @param {string} value + * @param {number[]} path + */ + set_title(value, path) { + const current = this.#title.path; + let i = 0; + let l = Math.min(path.length, current.length); + while (i < l && path[i] === current[i]) i += 1; + if (path[i] === void 0) return; + if (current[i] === void 0 || path[i] > current[i]) { + this.#title.path = path; + this.#title.value = value; + } + } +} +const INVALID_ATTR_NAME_CHAR_REGEX = /[\s'">/=\u{FDD0}-\u{FDEF}\u{FFFE}\u{FFFF}\u{1FFFE}\u{1FFFF}\u{2FFFE}\u{2FFFF}\u{3FFFE}\u{3FFFF}\u{4FFFE}\u{4FFFF}\u{5FFFE}\u{5FFFF}\u{6FFFE}\u{6FFFF}\u{7FFFE}\u{7FFFF}\u{8FFFE}\u{8FFFF}\u{9FFFE}\u{9FFFF}\u{AFFFE}\u{AFFFF}\u{BFFFE}\u{BFFFF}\u{CFFFE}\u{CFFFF}\u{DFFFE}\u{DFFFF}\u{EFFFE}\u{EFFFF}\u{FFFFE}\u{FFFFF}\u{10FFFE}\u{10FFFF}]/u; +function render(component, options = {}) { + if (options.csp?.hash && options.csp.nonce) { + invalid_csp(); + } + return Renderer.render( + /** @type {Component} */ + component, + options + ); +} +function attributes(attrs, css_hash, classes, styles, flags = 0) { + if (styles) { + attrs.style = to_style(attrs.style, styles); + } + if (attrs.class) { + attrs.class = clsx(attrs.class); + } + if (css_hash || classes) { + attrs.class = to_class(attrs.class, css_hash, classes); + } + let attr_str = ""; + let name; + const is_html = (flags & ELEMENT_IS_NAMESPACED) === 0; + const lowercase = (flags & ELEMENT_PRESERVE_ATTRIBUTE_CASE) === 0; + const is_input = (flags & ELEMENT_IS_INPUT) !== 0; + for (name in attrs) { + if (typeof attrs[name] === "function") continue; + if (name[0] === "$" && name[1] === "$") continue; + if (INVALID_ATTR_NAME_CHAR_REGEX.test(name)) continue; + var value = attrs[name]; + if (lowercase) { + name = name.toLowerCase(); + } + if (is_input) { + if (name === "defaultvalue" || name === "defaultchecked") { + name = name === "defaultvalue" ? "value" : "checked"; + if (attrs[name]) continue; + } + } + attr_str += attr(name, value, is_html && is_boolean_attribute(name)); + } + return attr_str; +} +function stringify(value) { + return typeof value === "string" ? value : value == null ? "" : value + ""; +} +function attr_class(value, hash, directives) { + var result = to_class(value, hash, directives); + return result ? ` class="${escape_html(result, true)}"` : ""; +} +function store_get(store_values, store_name, store) { + if (store_name in store_values && store_values[store_name][0] === store) { + return store_values[store_name][2]; + } + store_values[store_name]?.[1](); + store_values[store_name] = [store, null, void 0]; + const unsub = subscribe_to_store( + store, + /** @param {any} v */ + (v) => store_values[store_name][2] = v + ); + store_values[store_name][1] = unsub; + return store_values[store_name][2]; +} +function unsubscribe_stores(store_values) { + for (const store_name in store_values) { + store_values[store_name][1](); + } +} +function slot(renderer, $$props, name, slot_props, fallback_fn) { + var slot_fn = $$props.$$slots?.[name]; + if (slot_fn === true) { + slot_fn = $$props["children"]; + } + if (slot_fn !== void 0) { + slot_fn(renderer, slot_props); + } +} +function bind_props(props_parent, props_now) { + for (const key in props_now) { + const initial_value = props_parent[key]; + const value = props_now[key]; + if (initial_value === void 0 && value !== void 0 && Object.getOwnPropertyDescriptor(props_parent, key)?.set) { + props_parent[key] = value; + } + } +} +function ensure_array_like(array_like_or_iterator) { + if (array_like_or_iterator) { + return array_like_or_iterator.length !== void 0 ? array_like_or_iterator : Array.from(array_like_or_iterator); + } + return []; +} +export { + slot as $, + svelte_boundary_reset_onerror as A, + Batch as B, + COMMENT_NODE as C, + EFFECT_PRESERVED as D, + EFFECT_TRANSPARENT as E, + BOUNDARY_EFFECT as F, + init_operations as G, + HYDRATION_ERROR as H, + get_first_child as I, + hydration_failed as J, + clear_text_content as K, + component_root as L, + is_passive_event as M, + push$1 as N, + pop$1 as O, + set as P, + LEGACY_PROPS as Q, + flushSync as R, + mutable_source as S, + render as T, + setContext as U, + attr_class as V, + stringify as W, + store_get as X, + unsubscribe_stores as Y, + ensure_array_like as Z, + escape_html as _, + HYDRATION_END as a, + getContext as a0, + ssr_context as a1, + attr as a2, + bind_props as a3, + HYDRATION_START as b, + HYDRATION_START_ELSE as c, + get as d, + effect_tracking as e, + active_effect as f, + get_next_sibling as g, + block as h, + increment as i, + branch as j, + create_text as k, + set_active_effect as l, + set_active_reaction as m, + set_component_context as n, + handle_error as o, + pause_effect as p, + queue_micro_task as q, + render_effect as r, + source as s, + active_reaction as t, + untrack as u, + component_context as v, + move_effect as w, + internal_set as x, + destroy_effect as y, + invoke_error_boundary as z +}; diff --git a/frontend/.svelte-kit/output/server/chunks/internal.js b/frontend/.svelte-kit/output/server/chunks/internal.js new file mode 100644 index 0000000..7cb3f4a --- /dev/null +++ b/frontend/.svelte-kit/output/server/chunks/internal.js @@ -0,0 +1,982 @@ +import { H as HYDRATION_ERROR, C as COMMENT_NODE, a as HYDRATION_END, g as get_next_sibling, b as HYDRATION_START, c as HYDRATION_START_ELSE, e as effect_tracking, d as get, s as source, r as render_effect, u as untrack, i as increment, q as queue_micro_task, f as active_effect, h as block, j as branch, B as Batch, p as pause_effect, k as create_text, l as set_active_effect, m as set_active_reaction, n as set_component_context, o as handle_error, t as active_reaction, v as component_context, w as move_effect, x as internal_set, y as destroy_effect, z as invoke_error_boundary, A as svelte_boundary_reset_onerror, E as EFFECT_TRANSPARENT, D as EFFECT_PRESERVED, F as BOUNDARY_EFFECT, G as init_operations, I as get_first_child, J as hydration_failed, K as clear_text_content, L as component_root, M as is_passive_event, N as push, O as pop, P as set, Q as LEGACY_PROPS, R as flushSync, S as mutable_source, T as render, U as setContext } from "./index2.js"; +import { d as define_property, a as array_from } from "./equality.js"; +import "clsx"; +import "./environment.js"; +let public_env = {}; +function set_private_env(environment) { +} +function set_public_env(environment) { + public_env = environment; +} +function hydration_mismatch(location) { + { + console.warn(`https://svelte.dev/e/hydration_mismatch`); + } +} +function svelte_boundary_reset_noop() { + { + console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`); + } +} +let hydrating = false; +function set_hydrating(value) { + hydrating = value; +} +let hydrate_node; +function set_hydrate_node(node) { + if (node === null) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + return hydrate_node = node; +} +function hydrate_next() { + return set_hydrate_node(get_next_sibling(hydrate_node)); +} +function next(count = 1) { + if (hydrating) { + var i = count; + var node = hydrate_node; + while (i--) { + node = /** @type {TemplateNode} */ + get_next_sibling(node); + } + hydrate_node = node; + } +} +function skip_nodes(remove = true) { + var depth = 0; + var node = hydrate_node; + while (true) { + if (node.nodeType === COMMENT_NODE) { + var data = ( + /** @type {Comment} */ + node.data + ); + if (data === HYDRATION_END) { + if (depth === 0) return node; + depth -= 1; + } else if (data === HYDRATION_START || data === HYDRATION_START_ELSE) { + depth += 1; + } + } + var next2 = ( + /** @type {TemplateNode} */ + get_next_sibling(node) + ); + if (remove) node.remove(); + node = next2; + } +} +function createSubscriber(start) { + let subscribers = 0; + let version = source(0); + let stop; + return () => { + if (effect_tracking()) { + get(version); + render_effect(() => { + if (subscribers === 0) { + stop = untrack(() => start(() => increment(version))); + } + subscribers += 1; + return () => { + queue_micro_task(() => { + subscribers -= 1; + if (subscribers === 0) { + stop?.(); + stop = void 0; + increment(version); + } + }); + }; + }); + } + }; +} +var flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED | BOUNDARY_EFFECT; +function boundary(node, props, children) { + new Boundary(node, props, children); +} +class Boundary { + /** @type {Boundary | null} */ + parent; + #pending = false; + /** @type {TemplateNode} */ + #anchor; + /** @type {TemplateNode | null} */ + #hydrate_open = hydrating ? hydrate_node : null; + /** @type {BoundaryProps} */ + #props; + /** @type {((anchor: Node) => void)} */ + #children; + /** @type {Effect} */ + #effect; + /** @type {Effect | null} */ + #main_effect = null; + /** @type {Effect | null} */ + #pending_effect = null; + /** @type {Effect | null} */ + #failed_effect = null; + /** @type {DocumentFragment | null} */ + #offscreen_fragment = null; + /** @type {TemplateNode | null} */ + #pending_anchor = null; + #local_pending_count = 0; + #pending_count = 0; + #is_creating_fallback = false; + /** + * A source containing the number of pending async deriveds/expressions. + * Only created if `$effect.pending()` is used inside the boundary, + * otherwise updating the source results in needless `Batch.ensure()` + * calls followed by no-op flushes + * @type {Source | null} + */ + #effect_pending = null; + #effect_pending_subscriber = createSubscriber(() => { + this.#effect_pending = source(this.#local_pending_count); + return () => { + this.#effect_pending = null; + }; + }); + /** + * @param {TemplateNode} node + * @param {BoundaryProps} props + * @param {((anchor: Node) => void)} children + */ + constructor(node, props, children) { + this.#anchor = node; + this.#props = props; + this.#children = children; + this.parent = /** @type {Effect} */ + active_effect.b; + this.#pending = !!this.#props.pending; + this.#effect = block(() => { + active_effect.b = this; + if (hydrating) { + const comment = this.#hydrate_open; + hydrate_next(); + const server_rendered_pending = ( + /** @type {Comment} */ + comment.nodeType === COMMENT_NODE && /** @type {Comment} */ + comment.data === HYDRATION_START_ELSE + ); + if (server_rendered_pending) { + this.#hydrate_pending_content(); + } else { + this.#hydrate_resolved_content(); + } + } else { + var anchor = this.#get_anchor(); + try { + this.#main_effect = branch(() => children(anchor)); + } catch (error) { + this.error(error); + } + if (this.#pending_count > 0) { + this.#show_pending_snippet(); + } else { + this.#pending = false; + } + } + return () => { + this.#pending_anchor?.remove(); + }; + }, flags); + if (hydrating) { + this.#anchor = hydrate_node; + } + } + #hydrate_resolved_content() { + try { + this.#main_effect = branch(() => this.#children(this.#anchor)); + } catch (error) { + this.error(error); + } + this.#pending = false; + } + #hydrate_pending_content() { + const pending = this.#props.pending; + if (!pending) { + return; + } + this.#pending_effect = branch(() => pending(this.#anchor)); + Batch.enqueue(() => { + var anchor = this.#get_anchor(); + this.#main_effect = this.#run(() => { + Batch.ensure(); + return branch(() => this.#children(anchor)); + }); + if (this.#pending_count > 0) { + this.#show_pending_snippet(); + } else { + pause_effect( + /** @type {Effect} */ + this.#pending_effect, + () => { + this.#pending_effect = null; + } + ); + this.#pending = false; + } + }); + } + #get_anchor() { + var anchor = this.#anchor; + if (this.#pending) { + this.#pending_anchor = create_text(); + this.#anchor.before(this.#pending_anchor); + anchor = this.#pending_anchor; + } + return anchor; + } + /** + * Returns `true` if the effect exists inside a boundary whose pending snippet is shown + * @returns {boolean} + */ + is_pending() { + return this.#pending || !!this.parent && this.parent.is_pending(); + } + has_pending_snippet() { + return !!this.#props.pending; + } + /** + * @param {() => Effect | null} fn + */ + #run(fn) { + var previous_effect = active_effect; + var previous_reaction = active_reaction; + var previous_ctx = component_context; + set_active_effect(this.#effect); + set_active_reaction(this.#effect); + set_component_context(this.#effect.ctx); + try { + return fn(); + } catch (e) { + handle_error(e); + return null; + } finally { + set_active_effect(previous_effect); + set_active_reaction(previous_reaction); + set_component_context(previous_ctx); + } + } + #show_pending_snippet() { + const pending = ( + /** @type {(anchor: Node) => void} */ + this.#props.pending + ); + if (this.#main_effect !== null) { + this.#offscreen_fragment = document.createDocumentFragment(); + this.#offscreen_fragment.append( + /** @type {TemplateNode} */ + this.#pending_anchor + ); + move_effect(this.#main_effect, this.#offscreen_fragment); + } + if (this.#pending_effect === null) { + this.#pending_effect = branch(() => pending(this.#anchor)); + } + } + /** + * Updates the pending count associated with the currently visible pending snippet, + * if any, such that we can replace the snippet with content once work is done + * @param {1 | -1} d + */ + #update_pending_count(d) { + if (!this.has_pending_snippet()) { + if (this.parent) { + this.parent.#update_pending_count(d); + } + return; + } + this.#pending_count += d; + if (this.#pending_count === 0) { + this.#pending = false; + if (this.#pending_effect) { + pause_effect(this.#pending_effect, () => { + this.#pending_effect = null; + }); + } + if (this.#offscreen_fragment) { + this.#anchor.before(this.#offscreen_fragment); + this.#offscreen_fragment = null; + } + } + } + /** + * Update the source that powers `$effect.pending()` inside this boundary, + * and controls when the current `pending` snippet (if any) is removed. + * Do not call from inside the class + * @param {1 | -1} d + */ + update_pending_count(d) { + this.#update_pending_count(d); + this.#local_pending_count += d; + if (this.#effect_pending) { + internal_set(this.#effect_pending, this.#local_pending_count); + } + } + get_effect_pending() { + this.#effect_pending_subscriber(); + return get( + /** @type {Source} */ + this.#effect_pending + ); + } + /** @param {unknown} error */ + error(error) { + var onerror = this.#props.onerror; + let failed = this.#props.failed; + if (this.#is_creating_fallback || !onerror && !failed) { + throw error; + } + if (this.#main_effect) { + destroy_effect(this.#main_effect); + this.#main_effect = null; + } + if (this.#pending_effect) { + destroy_effect(this.#pending_effect); + this.#pending_effect = null; + } + if (this.#failed_effect) { + destroy_effect(this.#failed_effect); + this.#failed_effect = null; + } + if (hydrating) { + set_hydrate_node( + /** @type {TemplateNode} */ + this.#hydrate_open + ); + next(); + set_hydrate_node(skip_nodes()); + } + var did_reset = false; + var calling_on_error = false; + const reset = () => { + if (did_reset) { + svelte_boundary_reset_noop(); + return; + } + did_reset = true; + if (calling_on_error) { + svelte_boundary_reset_onerror(); + } + Batch.ensure(); + this.#local_pending_count = 0; + if (this.#failed_effect !== null) { + pause_effect(this.#failed_effect, () => { + this.#failed_effect = null; + }); + } + this.#pending = this.has_pending_snippet(); + this.#main_effect = this.#run(() => { + this.#is_creating_fallback = false; + return branch(() => this.#children(this.#anchor)); + }); + if (this.#pending_count > 0) { + this.#show_pending_snippet(); + } else { + this.#pending = false; + } + }; + var previous_reaction = active_reaction; + try { + set_active_reaction(null); + calling_on_error = true; + onerror?.(error, reset); + calling_on_error = false; + } catch (error2) { + invoke_error_boundary(error2, this.#effect && this.#effect.parent); + } finally { + set_active_reaction(previous_reaction); + } + if (failed) { + queue_micro_task(() => { + this.#failed_effect = this.#run(() => { + Batch.ensure(); + this.#is_creating_fallback = true; + try { + return branch(() => { + failed( + this.#anchor, + () => error, + () => reset + ); + }); + } catch (error2) { + invoke_error_boundary( + error2, + /** @type {Effect} */ + this.#effect.parent + ); + return null; + } finally { + this.#is_creating_fallback = false; + } + }); + }); + } + } +} +const all_registered_events = /* @__PURE__ */ new Set(); +const root_event_handles = /* @__PURE__ */ new Set(); +let last_propagated_event = null; +function handle_event_propagation(event) { + var handler_element = this; + var owner_document = ( + /** @type {Node} */ + handler_element.ownerDocument + ); + var event_name = event.type; + var path = event.composedPath?.() || []; + var current_target = ( + /** @type {null | Element} */ + path[0] || event.target + ); + last_propagated_event = event; + var path_idx = 0; + var handled_at = last_propagated_event === event && event.__root; + if (handled_at) { + var at_idx = path.indexOf(handled_at); + if (at_idx !== -1 && (handler_element === document || handler_element === /** @type {any} */ + window)) { + event.__root = handler_element; + return; + } + var handler_idx = path.indexOf(handler_element); + if (handler_idx === -1) { + return; + } + if (at_idx <= handler_idx) { + path_idx = at_idx; + } + } + current_target = /** @type {Element} */ + path[path_idx] || event.target; + if (current_target === handler_element) return; + define_property(event, "currentTarget", { + configurable: true, + get() { + return current_target || owner_document; + } + }); + var previous_reaction = active_reaction; + var previous_effect = active_effect; + set_active_reaction(null); + set_active_effect(null); + try { + var throw_error; + var other_errors = []; + while (current_target !== null) { + var parent_element = current_target.assignedSlot || current_target.parentNode || /** @type {any} */ + current_target.host || null; + try { + var delegated = current_target["__" + event_name]; + if (delegated != null && (!/** @type {any} */ + current_target.disabled || // DOM could've been updated already by the time this is reached, so we check this as well + // -> the target could not have been disabled because it emits the event in the first place + event.target === current_target)) { + delegated.call(current_target, event); + } + } catch (error) { + if (throw_error) { + other_errors.push(error); + } else { + throw_error = error; + } + } + if (event.cancelBubble || parent_element === handler_element || parent_element === null) { + break; + } + current_target = parent_element; + } + if (throw_error) { + for (let error of other_errors) { + queueMicrotask(() => { + throw error; + }); + } + throw throw_error; + } + } finally { + event.__root = handler_element; + delete event.currentTarget; + set_active_reaction(previous_reaction); + set_active_effect(previous_effect); + } +} +function assign_nodes(start, end) { + var effect = ( + /** @type {Effect} */ + active_effect + ); + if (effect.nodes === null) { + effect.nodes = { start, end, a: null, t: null }; + } +} +function mount(component, options2) { + return _mount(component, options2); +} +function hydrate(component, options2) { + init_operations(); + options2.intro = options2.intro ?? false; + const target = options2.target; + const was_hydrating = hydrating; + const previous_hydrate_node = hydrate_node; + try { + var anchor = get_first_child(target); + while (anchor && (anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */ + anchor.data !== HYDRATION_START)) { + anchor = get_next_sibling(anchor); + } + if (!anchor) { + throw HYDRATION_ERROR; + } + set_hydrating(true); + set_hydrate_node( + /** @type {Comment} */ + anchor + ); + const instance = _mount(component, { ...options2, anchor }); + set_hydrating(false); + return ( + /** @type {Exports} */ + instance + ); + } catch (error) { + if (error instanceof Error && error.message.split("\n").some((line) => line.startsWith("https://svelte.dev/e/"))) { + throw error; + } + if (error !== HYDRATION_ERROR) { + console.warn("Failed to hydrate: ", error); + } + if (options2.recover === false) { + hydration_failed(); + } + init_operations(); + clear_text_content(target); + set_hydrating(false); + return mount(component, options2); + } finally { + set_hydrating(was_hydrating); + set_hydrate_node(previous_hydrate_node); + } +} +const document_listeners = /* @__PURE__ */ new Map(); +function _mount(Component, { target, anchor, props = {}, events, context, intro = true }) { + init_operations(); + var registered_events = /* @__PURE__ */ new Set(); + var event_handle = (events2) => { + for (var i = 0; i < events2.length; i++) { + var event_name = events2[i]; + if (registered_events.has(event_name)) continue; + registered_events.add(event_name); + var passive = is_passive_event(event_name); + target.addEventListener(event_name, handle_event_propagation, { passive }); + var n = document_listeners.get(event_name); + if (n === void 0) { + document.addEventListener(event_name, handle_event_propagation, { passive }); + document_listeners.set(event_name, 1); + } else { + document_listeners.set(event_name, n + 1); + } + } + }; + event_handle(array_from(all_registered_events)); + root_event_handles.add(event_handle); + var component = void 0; + var unmount2 = component_root(() => { + var anchor_node = anchor ?? target.appendChild(create_text()); + boundary( + /** @type {TemplateNode} */ + anchor_node, + { + pending: () => { + } + }, + (anchor_node2) => { + if (context) { + push({}); + var ctx = ( + /** @type {ComponentContext} */ + component_context + ); + ctx.c = context; + } + if (events) { + props.$$events = events; + } + if (hydrating) { + assign_nodes( + /** @type {TemplateNode} */ + anchor_node2, + null + ); + } + component = Component(anchor_node2, props) || {}; + if (hydrating) { + active_effect.nodes.end = hydrate_node; + if (hydrate_node === null || hydrate_node.nodeType !== COMMENT_NODE || /** @type {Comment} */ + hydrate_node.data !== HYDRATION_END) { + hydration_mismatch(); + throw HYDRATION_ERROR; + } + } + if (context) { + pop(); + } + } + ); + return () => { + for (var event_name of registered_events) { + target.removeEventListener(event_name, handle_event_propagation); + var n = ( + /** @type {number} */ + document_listeners.get(event_name) + ); + if (--n === 0) { + document.removeEventListener(event_name, handle_event_propagation); + document_listeners.delete(event_name); + } else { + document_listeners.set(event_name, n); + } + } + root_event_handles.delete(event_handle); + if (anchor_node !== anchor) { + anchor_node.parentNode?.removeChild(anchor_node); + } + }; + }); + mounted_components.set(component, unmount2); + return component; +} +let mounted_components = /* @__PURE__ */ new WeakMap(); +function unmount(component, options2) { + const fn = mounted_components.get(component); + if (fn) { + mounted_components.delete(component); + return fn(options2); + } + return Promise.resolve(); +} +function asClassComponent$1(component) { + return class extends Svelte4Component { + /** @param {any} options */ + constructor(options2) { + super({ + component, + ...options2 + }); + } + }; +} +class Svelte4Component { + /** @type {any} */ + #events; + /** @type {Record} */ + #instance; + /** + * @param {ComponentConstructorOptions & { + * component: any; + * }} options + */ + constructor(options2) { + var sources = /* @__PURE__ */ new Map(); + var add_source = (key, value) => { + var s = mutable_source(value, false, false); + sources.set(key, s); + return s; + }; + const props = new Proxy( + { ...options2.props || {}, $$events: {} }, + { + get(target, prop) { + return get(sources.get(prop) ?? add_source(prop, Reflect.get(target, prop))); + }, + has(target, prop) { + if (prop === LEGACY_PROPS) return true; + get(sources.get(prop) ?? add_source(prop, Reflect.get(target, prop))); + return Reflect.has(target, prop); + }, + set(target, prop, value) { + set(sources.get(prop) ?? add_source(prop, value), value); + return Reflect.set(target, prop, value); + } + } + ); + this.#instance = (options2.hydrate ? hydrate : mount)(options2.component, { + target: options2.target, + anchor: options2.anchor, + props, + context: options2.context, + intro: options2.intro ?? false, + recover: options2.recover + }); + if (!options2?.props?.$$host || options2.sync === false) { + flushSync(); + } + this.#events = props.$$events; + for (const key of Object.keys(this.#instance)) { + if (key === "$set" || key === "$destroy" || key === "$on") continue; + define_property(this, key, { + get() { + return this.#instance[key]; + }, + /** @param {any} value */ + set(value) { + this.#instance[key] = value; + }, + enumerable: true + }); + } + this.#instance.$set = /** @param {Record} next */ + (next2) => { + Object.assign(props, next2); + }; + this.#instance.$destroy = () => { + unmount(this.#instance); + }; + } + /** @param {Record} props */ + $set(props) { + this.#instance.$set(props); + } + /** + * @param {string} event + * @param {(...args: any[]) => any} callback + * @returns {any} + */ + $on(event, callback) { + this.#events[event] = this.#events[event] || []; + const cb = (...args) => callback.call(this, ...args); + this.#events[event].push(cb); + return () => { + this.#events[event] = this.#events[event].filter( + /** @param {any} fn */ + (fn) => fn !== cb + ); + }; + } + $destroy() { + this.#instance.$destroy(); + } +} +let read_implementation = null; +function set_read_implementation(fn) { + read_implementation = fn; +} +function set_manifest(_) { +} +function asClassComponent(component) { + const component_constructor = asClassComponent$1(component); + const _render = (props, { context, csp } = {}) => { + const result = render(component, { props, context, csp }); + const munged = Object.defineProperties( + /** @type {LegacyRenderResult & PromiseLike} */ + {}, + { + css: { + value: { code: "", map: null } + }, + head: { + get: () => result.head + }, + html: { + get: () => result.body + }, + then: { + /** + * this is not type-safe, but honestly it's the best I can do right now, and it's a straightforward function. + * + * @template TResult1 + * @template [TResult2=never] + * @param { (value: LegacyRenderResult) => TResult1 } onfulfilled + * @param { (reason: unknown) => TResult2 } onrejected + */ + value: (onfulfilled, onrejected) => { + { + const user_result = onfulfilled({ + css: munged.css, + head: munged.head, + html: munged.html + }); + return Promise.resolve(user_result); + } + } + } + } + ); + return munged; + }; + component_constructor.render = _render; + return component_constructor; +} +function Root($$renderer, $$props) { + $$renderer.component(($$renderer2) => { + let { + stores, + page, + constructors, + components = [], + form, + data_0 = null, + data_1 = null + } = $$props; + { + setContext("__svelte__", stores); + } + { + stores.page.set(page); + } + const Pyramid_1 = constructors[1]; + if (constructors[1]) { + $$renderer2.push(""); + const Pyramid_0 = constructors[0]; + $$renderer2.push(``); + Pyramid_0($$renderer2, { + data: data_0, + form, + params: page.params, + children: ($$renderer3) => { + $$renderer3.push(``); + Pyramid_1($$renderer3, { data: data_1, form, params: page.params }); + $$renderer3.push(``); + }, + $$slots: { default: true } + }); + $$renderer2.push(``); + } else { + $$renderer2.push(""); + const Pyramid_0 = constructors[0]; + $$renderer2.push(``); + Pyramid_0($$renderer2, { data: data_0, form, params: page.params }); + $$renderer2.push(``); + } + $$renderer2.push(` `); + { + $$renderer2.push(""); + } + $$renderer2.push(``); + }); +} +const root = asClassComponent(Root); +const options = { + app_template_contains_nonce: false, + async: false, + csp: { "mode": "auto", "directives": { "upgrade-insecure-requests": false, "block-all-mixed-content": false }, "reportOnly": { "upgrade-insecure-requests": false, "block-all-mixed-content": false } }, + csrf_check_origin: true, + csrf_trusted_origins: [], + embedded: false, + env_public_prefix: "PUBLIC_", + env_private_prefix: "", + hash_routing: false, + hooks: null, + // added lazily, via `get_hooks` + preload_strategy: "modulepreload", + root, + service_worker: false, + service_worker_options: void 0, + templates: { + app: ({ head, body, assets, nonce, env }) => '\n\n \n \n \n \n ' + head + '\n \n \n
' + body + "
\n \n\n", + error: ({ status, message }) => '\n\n \n \n ' + message + ` + + + + +
+ ` + status + '\n
\n

' + message + "

\n
\n
\n \n\n" + }, + version_hash: "1uq6ubj" +}; +async function get_hooks() { + let handle; + let handleFetch; + let handleError; + let handleValidationError; + let init; + let reroute; + let transport; + return { + handle, + handleFetch, + handleError, + handleValidationError, + init, + reroute, + transport + }; +} +export { + set_public_env as a, + set_read_implementation as b, + set_manifest as c, + get_hooks as g, + options as o, + public_env as p, + read_implementation as r, + set_private_env as s +}; diff --git a/frontend/.svelte-kit/output/server/chunks/shared.js b/frontend/.svelte-kit/output/server/chunks/shared.js new file mode 100644 index 0000000..fa7f6a3 --- /dev/null +++ b/frontend/.svelte-kit/output/server/chunks/shared.js @@ -0,0 +1,522 @@ +import * as devalue from "devalue"; +import { t as text_decoder, b as base64_encode, c as base64_decode } from "./utils.js"; +function set_nested_value(object, path_string, value) { + if (path_string.startsWith("n:")) { + path_string = path_string.slice(2); + value = value === "" ? void 0 : parseFloat(value); + } else if (path_string.startsWith("b:")) { + path_string = path_string.slice(2); + value = value === "on"; + } + deep_set(object, split_path(path_string), value); +} +function convert_formdata(data) { + const result = {}; + for (let key of data.keys()) { + const is_array = key.endsWith("[]"); + let values = data.getAll(key); + if (is_array) key = key.slice(0, -2); + if (values.length > 1 && !is_array) { + throw new Error(`Form cannot contain duplicated keys — "${key}" has ${values.length} values`); + } + values = values.filter( + (entry) => typeof entry === "string" || entry.name !== "" || entry.size > 0 + ); + if (key.startsWith("n:")) { + key = key.slice(2); + values = values.map((v) => v === "" ? void 0 : parseFloat( + /** @type {string} */ + v + )); + } else if (key.startsWith("b:")) { + key = key.slice(2); + values = values.map((v) => v === "on"); + } + set_nested_value(result, key, is_array ? values : values[0]); + } + return result; +} +const BINARY_FORM_CONTENT_TYPE = "application/x-sveltekit-formdata"; +const BINARY_FORM_VERSION = 0; +async function deserialize_binary_form(request) { + if (request.headers.get("content-type") !== BINARY_FORM_CONTENT_TYPE) { + const form_data = await request.formData(); + return { data: convert_formdata(form_data), meta: {}, form_data }; + } + if (!request.body) { + throw new Error("Could not deserialize binary form: no body"); + } + const reader = request.body.getReader(); + const chunks = []; + async function get_chunk(index) { + if (index in chunks) return chunks[index]; + let i = chunks.length; + while (i <= index) { + chunks[i] = reader.read().then((chunk) => chunk.value); + i++; + } + return chunks[index]; + } + async function get_buffer(offset, length) { + let start_chunk; + let chunk_start = 0; + let chunk_index; + for (chunk_index = 0; ; chunk_index++) { + const chunk = await get_chunk(chunk_index); + if (!chunk) return null; + const chunk_end = chunk_start + chunk.byteLength; + if (offset >= chunk_start && offset < chunk_end) { + start_chunk = chunk; + break; + } + chunk_start = chunk_end; + } + if (offset + length <= chunk_start + start_chunk.byteLength) { + return start_chunk.subarray(offset - chunk_start, offset + length - chunk_start); + } + const buffer = new Uint8Array(length); + buffer.set(start_chunk.subarray(offset - chunk_start)); + let cursor = start_chunk.byteLength - offset + chunk_start; + while (cursor < length) { + chunk_index++; + let chunk = await get_chunk(chunk_index); + if (!chunk) return null; + if (chunk.byteLength > length - cursor) { + chunk = chunk.subarray(0, length - cursor); + } + buffer.set(chunk, cursor); + cursor += chunk.byteLength; + } + return buffer; + } + const header = await get_buffer(0, 1 + 4 + 2); + if (!header) throw new Error("Could not deserialize binary form: too short"); + if (header[0] !== BINARY_FORM_VERSION) { + throw new Error( + `Could not deserialize binary form: got version ${header[0]}, expected version ${BINARY_FORM_VERSION}` + ); + } + const header_view = new DataView(header.buffer, header.byteOffset, header.byteLength); + const data_length = header_view.getUint32(1, true); + const file_offsets_length = header_view.getUint16(5, true); + const data_buffer = await get_buffer(1 + 4 + 2, data_length); + if (!data_buffer) throw new Error("Could not deserialize binary form: data too short"); + let file_offsets; + let files_start_offset; + if (file_offsets_length > 0) { + const file_offsets_buffer = await get_buffer(1 + 4 + 2 + data_length, file_offsets_length); + if (!file_offsets_buffer) + throw new Error("Could not deserialize binary form: file offset table too short"); + file_offsets = /** @type {Array} */ + JSON.parse(text_decoder.decode(file_offsets_buffer)); + files_start_offset = 1 + 4 + 2 + data_length + file_offsets_length; + } + const [data, meta] = devalue.parse(text_decoder.decode(data_buffer), { + File: ([name, type, size, last_modified, index]) => { + return new Proxy( + new LazyFile( + name, + type, + size, + last_modified, + get_chunk, + files_start_offset + file_offsets[index] + ), + { + getPrototypeOf() { + return File.prototype; + } + } + ); + } + }); + void (async () => { + let has_more = true; + while (has_more) { + const chunk = await get_chunk(chunks.length); + has_more = !!chunk; + } + })(); + return { data, meta, form_data: null }; +} +class LazyFile { + /** @type {(index: number) => Promise | undefined>} */ + #get_chunk; + /** @type {number} */ + #offset; + /** + * @param {string} name + * @param {string} type + * @param {number} size + * @param {number} last_modified + * @param {(index: number) => Promise | undefined>} get_chunk + * @param {number} offset + */ + constructor(name, type, size, last_modified, get_chunk, offset) { + this.name = name; + this.type = type; + this.size = size; + this.lastModified = last_modified; + this.webkitRelativePath = ""; + this.#get_chunk = get_chunk; + this.#offset = offset; + this.arrayBuffer = this.arrayBuffer.bind(this); + this.bytes = this.bytes.bind(this); + this.slice = this.slice.bind(this); + this.stream = this.stream.bind(this); + this.text = this.text.bind(this); + } + /** @type {ArrayBuffer | undefined} */ + #buffer; + async arrayBuffer() { + this.#buffer ??= await new Response(this.stream()).arrayBuffer(); + return this.#buffer; + } + async bytes() { + return new Uint8Array(await this.arrayBuffer()); + } + /** + * @param {number=} start + * @param {number=} end + * @param {string=} contentType + */ + slice(start = 0, end = this.size, contentType = this.type) { + if (start < 0) { + start = Math.max(this.size + start, 0); + } else { + start = Math.min(start, this.size); + } + if (end < 0) { + end = Math.max(this.size + end, 0); + } else { + end = Math.min(end, this.size); + } + const size = Math.max(end - start, 0); + const file = new LazyFile( + this.name, + contentType, + size, + this.lastModified, + this.#get_chunk, + this.#offset + start + ); + return file; + } + stream() { + let cursor = 0; + let chunk_index = 0; + return new ReadableStream({ + start: async (controller) => { + let chunk_start = 0; + let start_chunk = null; + for (chunk_index = 0; ; chunk_index++) { + const chunk = await this.#get_chunk(chunk_index); + if (!chunk) return null; + const chunk_end = chunk_start + chunk.byteLength; + if (this.#offset >= chunk_start && this.#offset < chunk_end) { + start_chunk = chunk; + break; + } + chunk_start = chunk_end; + } + if (this.#offset + this.size <= chunk_start + start_chunk.byteLength) { + controller.enqueue( + start_chunk.subarray(this.#offset - chunk_start, this.#offset + this.size - chunk_start) + ); + controller.close(); + } else { + controller.enqueue(start_chunk.subarray(this.#offset - chunk_start)); + cursor = start_chunk.byteLength - this.#offset + chunk_start; + } + }, + pull: async (controller) => { + chunk_index++; + let chunk = await this.#get_chunk(chunk_index); + if (!chunk) { + controller.error("Could not deserialize binary form: incomplete file data"); + controller.close(); + return; + } + if (chunk.byteLength > this.size - cursor) { + chunk = chunk.subarray(0, this.size - cursor); + } + controller.enqueue(chunk); + cursor += chunk.byteLength; + if (cursor >= this.size) { + controller.close(); + } + } + }); + } + async text() { + return text_decoder.decode(await this.arrayBuffer()); + } +} +const path_regex = /^[a-zA-Z_$]\w*(\.[a-zA-Z_$]\w*|\[\d+\])*$/; +function split_path(path) { + if (!path_regex.test(path)) { + throw new Error(`Invalid path ${path}`); + } + return path.split(/\.|\[|\]/).filter(Boolean); +} +function check_prototype_pollution(key) { + if (key === "__proto__" || key === "constructor" || key === "prototype") { + throw new Error( + `Invalid key "${key}"` + ); + } +} +function deep_set(object, keys, value) { + let current = object; + for (let i = 0; i < keys.length - 1; i += 1) { + const key = keys[i]; + check_prototype_pollution(key); + const is_array = /^\d+$/.test(keys[i + 1]); + const exists = key in current; + const inner = current[key]; + if (exists && is_array !== Array.isArray(inner)) { + throw new Error(`Invalid array key ${keys[i + 1]}`); + } + if (!exists) { + current[key] = is_array ? [] : {}; + } + current = current[key]; + } + const final_key = keys[keys.length - 1]; + check_prototype_pollution(final_key); + current[final_key] = value; +} +function normalize_issue(issue, server = false) { + const normalized = { name: "", path: [], message: issue.message, server }; + if (issue.path !== void 0) { + let name = ""; + for (const segment of issue.path) { + const key = ( + /** @type {string | number} */ + typeof segment === "object" ? segment.key : segment + ); + normalized.path.push(key); + if (typeof key === "number") { + name += `[${key}]`; + } else if (typeof key === "string") { + name += name === "" ? key : "." + key; + } + } + normalized.name = name; + } + return normalized; +} +function flatten_issues(issues) { + const result = {}; + for (const issue of issues) { + (result.$ ??= []).push(issue); + let name = ""; + if (issue.path !== void 0) { + for (const key of issue.path) { + if (typeof key === "number") { + name += `[${key}]`; + } else if (typeof key === "string") { + name += name === "" ? key : "." + key; + } + (result[name] ??= []).push(issue); + } + } + } + return result; +} +function deep_get(object, path) { + let current = object; + for (const key of path) { + if (current == null || typeof current !== "object") { + return current; + } + current = current[key]; + } + return current; +} +function create_field_proxy(target, get_input, set_input, get_issues, path = []) { + const get_value = () => { + return deep_get(get_input(), path); + }; + return new Proxy(target, { + get(target2, prop) { + if (typeof prop === "symbol") return target2[prop]; + if (/^\d+$/.test(prop)) { + return create_field_proxy({}, get_input, set_input, get_issues, [ + ...path, + parseInt(prop, 10) + ]); + } + const key = build_path_string(path); + if (prop === "set") { + const set_func = function(newValue) { + set_input(path, newValue); + return newValue; + }; + return create_field_proxy(set_func, get_input, set_input, get_issues, [...path, prop]); + } + if (prop === "value") { + return create_field_proxy(get_value, get_input, set_input, get_issues, [...path, prop]); + } + if (prop === "issues" || prop === "allIssues") { + const issues_func = () => { + const all_issues = get_issues()[key === "" ? "$" : key]; + if (prop === "allIssues") { + return all_issues?.map((issue) => ({ + path: issue.path, + message: issue.message + })); + } + return all_issues?.filter((issue) => issue.name === key)?.map((issue) => ({ + path: issue.path, + message: issue.message + })); + }; + return create_field_proxy(issues_func, get_input, set_input, get_issues, [...path, prop]); + } + if (prop === "as") { + const as_func = (type, input_value) => { + const is_array = type === "file multiple" || type === "select multiple" || type === "checkbox" && typeof input_value === "string"; + const prefix = type === "number" || type === "range" ? "n:" : type === "checkbox" && !is_array ? "b:" : ""; + const base_props = { + name: prefix + key + (is_array ? "[]" : ""), + get "aria-invalid"() { + const issues = get_issues(); + return key in issues ? "true" : void 0; + } + }; + if (type !== "text" && type !== "select" && type !== "select multiple") { + base_props.type = type === "file multiple" ? "file" : type; + } + if (type === "submit" || type === "hidden") { + return Object.defineProperties(base_props, { + value: { value: input_value, enumerable: true } + }); + } + if (type === "select" || type === "select multiple") { + return Object.defineProperties(base_props, { + multiple: { value: is_array, enumerable: true }, + value: { + enumerable: true, + get() { + return get_value(); + } + } + }); + } + if (type === "checkbox" || type === "radio") { + return Object.defineProperties(base_props, { + value: { value: input_value ?? "on", enumerable: true }, + checked: { + enumerable: true, + get() { + const value = get_value(); + if (type === "radio") { + return value === input_value; + } + if (is_array) { + return (value ?? []).includes(input_value); + } + return value; + } + } + }); + } + if (type === "file" || type === "file multiple") { + return Object.defineProperties(base_props, { + multiple: { value: is_array, enumerable: true }, + files: { + enumerable: true, + get() { + const value = get_value(); + if (value instanceof File) { + if (typeof DataTransfer !== "undefined") { + const fileList = new DataTransfer(); + fileList.items.add(value); + return fileList.files; + } + return { 0: value, length: 1 }; + } + if (Array.isArray(value) && value.every((f) => f instanceof File)) { + if (typeof DataTransfer !== "undefined") { + const fileList = new DataTransfer(); + value.forEach((file) => fileList.items.add(file)); + return fileList.files; + } + const fileListLike = { length: value.length }; + value.forEach((file, index) => { + fileListLike[index] = file; + }); + return fileListLike; + } + return null; + } + } + }); + } + return Object.defineProperties(base_props, { + value: { + enumerable: true, + get() { + const value = get_value(); + return value != null ? String(value) : ""; + } + } + }); + }; + return create_field_proxy(as_func, get_input, set_input, get_issues, [...path, "as"]); + } + return create_field_proxy({}, get_input, set_input, get_issues, [...path, prop]); + } + }); +} +function build_path_string(path) { + let result = ""; + for (const segment of path) { + if (typeof segment === "number") { + result += `[${segment}]`; + } else { + result += result === "" ? segment : "." + segment; + } + } + return result; +} +const INVALIDATED_PARAM = "x-sveltekit-invalidated"; +const TRAILING_SLASH_PARAM = "x-sveltekit-trailing-slash"; +function stringify(data, transport) { + const encoders = Object.fromEntries(Object.entries(transport).map(([k, v]) => [k, v.encode])); + return devalue.stringify(data, encoders); +} +function stringify_remote_arg(value, transport) { + if (value === void 0) return ""; + const json_string = stringify(value, transport); + const bytes = new TextEncoder().encode(json_string); + return base64_encode(bytes).replaceAll("=", "").replaceAll("+", "-").replaceAll("/", "_"); +} +function parse_remote_arg(string, transport) { + if (!string) return void 0; + const json_string = text_decoder.decode( + // no need to add back `=` characters, atob can handle it + base64_decode(string.replaceAll("-", "+").replaceAll("_", "/")) + ); + const decoders = Object.fromEntries(Object.entries(transport).map(([k, v]) => [k, v.decode])); + return devalue.parse(json_string, decoders); +} +function create_remote_key(id, payload) { + return id + "/" + payload; +} +export { + BINARY_FORM_CONTENT_TYPE as B, + INVALIDATED_PARAM as I, + TRAILING_SLASH_PARAM as T, + stringify_remote_arg as a, + create_field_proxy as b, + create_remote_key as c, + deserialize_binary_form as d, + set_nested_value as e, + flatten_issues as f, + deep_set as g, + normalize_issue as n, + parse_remote_arg as p, + stringify as s +}; diff --git a/frontend/.svelte-kit/output/server/chunks/stores.js b/frontend/.svelte-kit/output/server/chunks/stores.js new file mode 100644 index 0000000..af3139c --- /dev/null +++ b/frontend/.svelte-kit/output/server/chunks/stores.js @@ -0,0 +1,44 @@ +import { a0 as getContext } from "./index2.js"; +import "clsx"; +import "@sveltejs/kit/internal"; +import "./exports.js"; +import "./utils.js"; +import "@sveltejs/kit/internal/server"; +import { n as noop } from "./equality.js"; +const is_legacy = noop.toString().includes("$$") || /function \w+\(\) \{\}/.test(noop.toString()); +if (is_legacy) { + ({ + data: {}, + form: null, + error: null, + params: {}, + route: { id: null }, + state: {}, + status: -1, + url: new URL("https://example.com") + }); +} +const getStores = () => { + const stores = getContext("__svelte__"); + return { + /** @type {typeof page} */ + page: { + subscribe: stores.page.subscribe + }, + /** @type {typeof navigating} */ + navigating: { + subscribe: stores.navigating.subscribe + }, + /** @type {typeof updated} */ + updated: stores.updated + }; +}; +const page = { + subscribe(fn) { + const store = getStores().page; + return store.subscribe(fn); + } +}; +export { + page as p +}; diff --git a/frontend/.svelte-kit/output/server/chunks/toasts.js b/frontend/.svelte-kit/output/server/chunks/toasts.js new file mode 100644 index 0000000..f556cd3 --- /dev/null +++ b/frontend/.svelte-kit/output/server/chunks/toasts.js @@ -0,0 +1,16 @@ +import { w as writable } from "./index.js"; +const toasts = writable([]); +function addToast(message, type = "info", duration = 3e3) { + const id = Math.random().toString(36).substr(2, 9); + console.log(`[toasts.addToast][Action] Adding toast context={{'id': '${id}', 'type': '${type}', 'message': '${message}'}}`); + toasts.update((all) => [...all, { id, message, type }]); + setTimeout(() => removeToast(id), duration); +} +function removeToast(id) { + console.log(`[toasts.removeToast][Action] Removing toast context={{'id': '${id}'}}`); + toasts.update((all) => all.filter((t) => t.id !== id)); +} +export { + addToast as a, + toasts as t +}; diff --git a/frontend/.svelte-kit/output/server/chunks/utils.js b/frontend/.svelte-kit/output/server/chunks/utils.js new file mode 100644 index 0000000..78e5bde --- /dev/null +++ b/frontend/.svelte-kit/output/server/chunks/utils.js @@ -0,0 +1,43 @@ +const text_encoder = new TextEncoder(); +const text_decoder = new TextDecoder(); +function get_relative_path(from, to) { + const from_parts = from.split(/[/\\]/); + const to_parts = to.split(/[/\\]/); + from_parts.pop(); + while (from_parts[0] === to_parts[0]) { + from_parts.shift(); + to_parts.shift(); + } + let i = from_parts.length; + while (i--) from_parts[i] = ".."; + return from_parts.concat(to_parts).join("/"); +} +function base64_encode(bytes) { + if (globalThis.Buffer) { + return globalThis.Buffer.from(bytes).toString("base64"); + } + let binary = ""; + for (let i = 0; i < bytes.length; i++) { + binary += String.fromCharCode(bytes[i]); + } + return btoa(binary); +} +function base64_decode(encoded) { + if (globalThis.Buffer) { + const buffer = globalThis.Buffer.from(encoded, "base64"); + return new Uint8Array(buffer); + } + const binary = atob(encoded); + const bytes = new Uint8Array(binary.length); + for (let i = 0; i < binary.length; i++) { + bytes[i] = binary.charCodeAt(i); + } + return bytes; +} +export { + text_encoder as a, + base64_encode as b, + base64_decode as c, + get_relative_path as g, + text_decoder as t +}; diff --git a/frontend/.svelte-kit/output/server/entries/pages/_error.svelte.js b/frontend/.svelte-kit/output/server/entries/pages/_error.svelte.js new file mode 100644 index 0000000..99eb73a --- /dev/null +++ b/frontend/.svelte-kit/output/server/entries/pages/_error.svelte.js @@ -0,0 +1,12 @@ +import { _ as escape_html, X as store_get, Y as unsubscribe_stores } from "../../chunks/index2.js"; +import { p as page } from "../../chunks/stores.js"; +function _error($$renderer, $$props) { + $$renderer.component(($$renderer2) => { + var $$store_subs; + $$renderer2.push(`

${escape_html(store_get($$store_subs ??= {}, "$page", page).status)}

${escape_html(store_get($$store_subs ??= {}, "$page", page).error?.message || "Page not found")}

Back to Dashboard
`); + if ($$store_subs) unsubscribe_stores($$store_subs); + }); +} +export { + _error as default +}; diff --git a/frontend/.svelte-kit/output/server/entries/pages/_layout.svelte.js b/frontend/.svelte-kit/output/server/entries/pages/_layout.svelte.js new file mode 100644 index 0000000..e7d6810 --- /dev/null +++ b/frontend/.svelte-kit/output/server/entries/pages/_layout.svelte.js @@ -0,0 +1,38 @@ +import { V as attr_class, W as stringify, X as store_get, Y as unsubscribe_stores, Z as ensure_array_like, _ as escape_html, $ as slot } from "../../chunks/index2.js"; +import { p as page } from "../../chunks/stores.js"; +import "clsx"; +import { t as toasts } from "../../chunks/toasts.js"; +function Navbar($$renderer, $$props) { + $$renderer.component(($$renderer2) => { + var $$store_subs; + $$renderer2.push(`
Superset Tools
`); + if ($$store_subs) unsubscribe_stores($$store_subs); + }); +} +function Footer($$renderer) { + $$renderer.push(`
© 2025 Superset Tools. All rights reserved.
`); +} +function Toast($$renderer) { + var $$store_subs; + $$renderer.push(`
`); + const each_array = ensure_array_like(store_get($$store_subs ??= {}, "$toasts", toasts)); + for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { + let toast = each_array[$$index]; + $$renderer.push(`${escape_html(toast.message)}
`); + } + $$renderer.push(``); + if ($$store_subs) unsubscribe_stores($$store_subs); +} +function _layout($$renderer, $$props) { + Toast($$renderer); + $$renderer.push(`
`); + Navbar($$renderer); + $$renderer.push(`
`); + slot($$renderer, $$props, "default", {}); + $$renderer.push(`
`); + Footer($$renderer); + $$renderer.push(`
`); +} +export { + _layout as default +}; diff --git a/frontend/.svelte-kit/output/server/entries/pages/_layout.ts.js b/frontend/.svelte-kit/output/server/entries/pages/_layout.ts.js new file mode 100644 index 0000000..aeea3c2 --- /dev/null +++ b/frontend/.svelte-kit/output/server/entries/pages/_layout.ts.js @@ -0,0 +1,6 @@ +const ssr = false; +const prerender = false; +export { + prerender, + ssr +}; diff --git a/frontend/.svelte-kit/output/server/entries/pages/_page.svelte.js b/frontend/.svelte-kit/output/server/entries/pages/_page.svelte.js new file mode 100644 index 0000000..aaf2282 --- /dev/null +++ b/frontend/.svelte-kit/output/server/entries/pages/_page.svelte.js @@ -0,0 +1,132 @@ +import { a1 as ssr_context, X as store_get, _ as escape_html, Z as ensure_array_like, V as attr_class, Y as unsubscribe_stores, a2 as attr, a3 as bind_props } from "../../chunks/index2.js"; +import { w as writable } from "../../chunks/index.js"; +import "clsx"; +function onDestroy(fn) { + /** @type {SSRContext} */ + ssr_context.r.on_destroy(fn); +} +const plugins = writable([]); +const selectedPlugin = writable(null); +const selectedTask = writable(null); +const taskLogs = writable([]); +function TaskRunner($$renderer, $$props) { + $$renderer.component(($$renderer2) => { + var $$store_subs; + onDestroy(() => { + }); + $$renderer2.push(`
`); + if (store_get($$store_subs ??= {}, "$selectedTask", selectedTask)) { + $$renderer2.push(""); + $$renderer2.push(`

Task: ${escape_html(store_get($$store_subs ??= {}, "$selectedTask", selectedTask).plugin_id)}

`); + const each_array = ensure_array_like(store_get($$store_subs ??= {}, "$taskLogs", taskLogs)); + for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { + let log = each_array[$$index]; + $$renderer2.push(`
${escape_html(new Date(log.timestamp).toLocaleTimeString())} [${escape_html(log.level)}] ${escape_html(log.message)}
`); + } + $$renderer2.push(`
`); + } else { + $$renderer2.push(""); + $$renderer2.push(`

No task selected.

`); + } + $$renderer2.push(`
`); + if ($$store_subs) unsubscribe_stores($$store_subs); + }); +} +function DynamicForm($$renderer, $$props) { + $$renderer.component(($$renderer2) => { + let schema = $$props["schema"]; + let formData = {}; + function initializeForm() { + if (schema && schema.properties) { + for (const key in schema.properties) { + formData[key] = schema.properties[key].default || ""; + } + } + } + initializeForm(); + $$renderer2.push(`
`); + if (schema && schema.properties) { + $$renderer2.push(""); + $$renderer2.push(``); + const each_array = ensure_array_like(Object.entries(schema.properties)); + for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { + let [key, prop] = each_array[$$index]; + $$renderer2.push(`
${escape_html(prop.title || key)} `); + if (prop.type === "string") { + $$renderer2.push(""); + $$renderer2.push(``); + } else { + $$renderer2.push(""); + if (prop.type === "number" || prop.type === "integer") { + $$renderer2.push(""); + $$renderer2.push(``); + } else { + $$renderer2.push(""); + if (prop.type === "boolean") { + $$renderer2.push(""); + $$renderer2.push(``); + } else { + $$renderer2.push(""); + } + $$renderer2.push(``); + } + $$renderer2.push(``); + } + $$renderer2.push(`
`); + } + $$renderer2.push(` `); + } else { + $$renderer2.push(""); + } + $$renderer2.push(`
`); + bind_props($$props, { schema }); + }); +} +function _page($$renderer, $$props) { + $$renderer.component(($$renderer2) => { + var $$store_subs; + let data = $$props["data"]; + if (data.plugins) { + plugins.set(data.plugins); + } + $$renderer2.push(`
`); + if (store_get($$store_subs ??= {}, "$selectedTask", selectedTask)) { + $$renderer2.push(""); + TaskRunner($$renderer2); + $$renderer2.push(` `); + } else { + $$renderer2.push(""); + if (store_get($$store_subs ??= {}, "$selectedPlugin", selectedPlugin)) { + $$renderer2.push(""); + $$renderer2.push(`

${escape_html(store_get($$store_subs ??= {}, "$selectedPlugin", selectedPlugin).name)}

`); + DynamicForm($$renderer2, { + schema: store_get($$store_subs ??= {}, "$selectedPlugin", selectedPlugin).schema + }); + $$renderer2.push(` `); + } else { + $$renderer2.push(""); + $$renderer2.push(`

Available Tools

`); + if (data.error) { + $$renderer2.push(""); + $$renderer2.push(`
${escape_html(data.error)}
`); + } else { + $$renderer2.push(""); + } + $$renderer2.push(`
`); + const each_array = ensure_array_like(data.plugins); + for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { + let plugin = each_array[$$index]; + $$renderer2.push(`

${escape_html(plugin.name)}

${escape_html(plugin.description)}

v${escape_html(plugin.version)}
`); + } + $$renderer2.push(`
`); + } + $$renderer2.push(``); + } + $$renderer2.push(`
`); + if ($$store_subs) unsubscribe_stores($$store_subs); + bind_props($$props, { data }); + }); +} +export { + _page as default +}; diff --git a/frontend/.svelte-kit/output/server/entries/pages/_page.ts.js b/frontend/.svelte-kit/output/server/entries/pages/_page.ts.js new file mode 100644 index 0000000..02f2bef --- /dev/null +++ b/frontend/.svelte-kit/output/server/entries/pages/_page.ts.js @@ -0,0 +1,18 @@ +import { a as api } from "../../chunks/api.js"; +async function load() { + try { + const plugins = await api.getPlugins(); + return { + plugins + }; + } catch (error) { + console.error("Failed to load plugins:", error); + return { + plugins: [], + error: "Failed to load plugins" + }; + } +} +export { + load +}; diff --git a/frontend/.svelte-kit/output/server/entries/pages/settings/_page.svelte.js b/frontend/.svelte-kit/output/server/entries/pages/settings/_page.svelte.js new file mode 100644 index 0000000..a891268 --- /dev/null +++ b/frontend/.svelte-kit/output/server/entries/pages/settings/_page.svelte.js @@ -0,0 +1,45 @@ +import { _ as escape_html, a2 as attr, Z as ensure_array_like, a3 as bind_props } from "../../../chunks/index2.js"; +function _page($$renderer, $$props) { + $$renderer.component(($$renderer2) => { + let data = $$props["data"]; + let settings = data.settings; + let newEnv = { + id: "", + name: "", + url: "", + username: "", + password: "", + is_default: false + }; + settings = data.settings; + $$renderer2.push(`

Settings

`); + if (data.error) { + $$renderer2.push(""); + $$renderer2.push(`
${escape_html(data.error)}
`); + } else { + $$renderer2.push(""); + } + $$renderer2.push(`

Global Settings

Superset Environments

`); + if (settings.environments.length === 0) { + $$renderer2.push(""); + $$renderer2.push(`

Warning

No Superset environments configured. You must add at least one environment to perform backups or migrations.

`); + } else { + $$renderer2.push(""); + } + $$renderer2.push(`
`); + const each_array = ensure_array_like(settings.environments); + for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { + let env = each_array[$$index]; + $$renderer2.push(``); + } + $$renderer2.push(`
NameURLUsernameDefaultActions
${escape_html(env.name)}${escape_html(env.url)}${escape_html(env.username)}${escape_html(env.is_default ? "Yes" : "No")}

${escape_html("Add")} Environment

`); + { + $$renderer2.push(""); + } + $$renderer2.push(`
`); + bind_props($$props, { data }); + }); +} +export { + _page as default +}; diff --git a/frontend/.svelte-kit/output/server/entries/pages/settings/_page.ts.js b/frontend/.svelte-kit/output/server/entries/pages/settings/_page.ts.js new file mode 100644 index 0000000..9f66d64 --- /dev/null +++ b/frontend/.svelte-kit/output/server/entries/pages/settings/_page.ts.js @@ -0,0 +1,24 @@ +import { a as api } from "../../../chunks/api.js"; +async function load() { + try { + const settings = await api.getSettings(); + return { + settings + }; + } catch (error) { + console.error("Failed to load settings:", error); + return { + settings: { + environments: [], + settings: { + backup_path: "", + default_environment_id: null + } + }, + error: "Failed to load settings" + }; + } +} +export { + load +}; diff --git a/frontend/.svelte-kit/output/server/index.js b/frontend/.svelte-kit/output/server/index.js new file mode 100644 index 0000000..94bcc9f --- /dev/null +++ b/frontend/.svelte-kit/output/server/index.js @@ -0,0 +1,3857 @@ +import { B as BROWSER } from "./chunks/false.js"; +import { json, text, error } from "@sveltejs/kit"; +import { HttpError, SvelteKitError, Redirect, ActionFailure } from "@sveltejs/kit/internal"; +import { with_request_store, merge_tracing, try_get_request_store } from "@sveltejs/kit/internal/server"; +import { a as assets, b as base, c as app_dir, r as relative, o as override, d as reset } from "./chunks/environment.js"; +import { B as BINARY_FORM_CONTENT_TYPE, c as create_remote_key, p as parse_remote_arg, s as stringify, d as deserialize_binary_form, T as TRAILING_SLASH_PARAM, I as INVALIDATED_PARAM } from "./chunks/shared.js"; +import * as devalue from "devalue"; +import { m as make_trackable, d as disable_search, a as decode_params, S as SCHEME, v as validate_layout_server_exports, b as validate_layout_exports, c as validate_page_server_exports, e as validate_page_exports, n as normalize_path, r as resolve, f as decode_pathname, g as validate_server_exports } from "./chunks/exports.js"; +import { b as base64_encode, t as text_decoder, a as text_encoder, g as get_relative_path } from "./chunks/utils.js"; +import { r as readable, w as writable } from "./chunks/index.js"; +import { p as public_env, r as read_implementation, o as options, s as set_private_env, a as set_public_env, g as get_hooks, b as set_read_implementation } from "./chunks/internal.js"; +import { parse, serialize } from "cookie"; +import * as set_cookie_parser from "set-cookie-parser"; +function with_resolvers() { + let resolve2; + let reject; + const promise = new Promise((res, rej) => { + resolve2 = res; + reject = rej; + }); + return { promise, resolve: resolve2, reject }; +} +const NULL_BODY_STATUS = [101, 103, 204, 205, 304]; +const IN_WEBCONTAINER = !!globalThis.process?.versions?.webcontainer; +const SVELTE_KIT_ASSETS = "/_svelte_kit_assets"; +const ENDPOINT_METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS", "HEAD"]; +const PAGE_METHODS = ["GET", "POST", "HEAD"]; +function negotiate(accept, types) { + const parts = []; + accept.split(",").forEach((str, i) => { + const match = /([^/ \t]+)\/([^; \t]+)[ \t]*(?:;[ \t]*q=([0-9.]+))?/.exec(str); + if (match) { + const [, type, subtype, q = "1"] = match; + parts.push({ type, subtype, q: +q, i }); + } + }); + parts.sort((a, b) => { + if (a.q !== b.q) { + return b.q - a.q; + } + if (a.subtype === "*" !== (b.subtype === "*")) { + return a.subtype === "*" ? 1 : -1; + } + if (a.type === "*" !== (b.type === "*")) { + return a.type === "*" ? 1 : -1; + } + return a.i - b.i; + }); + let accepted; + let min_priority = Infinity; + for (const mimetype of types) { + const [type, subtype] = mimetype.split("/"); + const priority = parts.findIndex( + (part) => (part.type === type || part.type === "*") && (part.subtype === subtype || part.subtype === "*") + ); + if (priority !== -1 && priority < min_priority) { + accepted = mimetype; + min_priority = priority; + } + } + return accepted; +} +function is_content_type(request, ...types) { + const type = request.headers.get("content-type")?.split(";", 1)[0].trim() ?? ""; + return types.includes(type.toLowerCase()); +} +function is_form_content_type(request) { + return is_content_type( + request, + "application/x-www-form-urlencoded", + "multipart/form-data", + "text/plain", + BINARY_FORM_CONTENT_TYPE + ); +} +function coalesce_to_error(err) { + return err instanceof Error || err && /** @type {any} */ + err.name && /** @type {any} */ + err.message ? ( + /** @type {Error} */ + err + ) : new Error(JSON.stringify(err)); +} +function normalize_error(error2) { + return ( + /** @type {import('../exports/internal/index.js').Redirect | HttpError | SvelteKitError | Error} */ + error2 + ); +} +function get_status(error2) { + return error2 instanceof HttpError || error2 instanceof SvelteKitError ? error2.status : 500; +} +function get_message(error2) { + return error2 instanceof SvelteKitError ? error2.text : "Internal Error"; +} +const escape_html_attr_dict = { + "&": "&", + '"': """ + // Svelte also escapes < because the escape function could be called inside a `noscript` there + // https://github.com/sveltejs/svelte/security/advisories/GHSA-8266-84wp-wv5c + // However, that doesn't apply in SvelteKit +}; +const escape_html_dict = { + "&": "&", + "<": "<" +}; +const surrogates = ( + // high surrogate without paired low surrogate + "[\\ud800-\\udbff](?![\\udc00-\\udfff])|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\udc00-\\udfff]" +); +const escape_html_attr_regex = new RegExp( + `[${Object.keys(escape_html_attr_dict).join("")}]|` + surrogates, + "g" +); +const escape_html_regex = new RegExp( + `[${Object.keys(escape_html_dict).join("")}]|` + surrogates, + "g" +); +function escape_html(str, is_attr) { + const dict = is_attr ? escape_html_attr_dict : escape_html_dict; + const escaped_str = str.replace(is_attr ? escape_html_attr_regex : escape_html_regex, (match) => { + if (match.length === 2) { + return match; + } + return dict[match] ?? `&#${match.charCodeAt(0)};`; + }); + return escaped_str; +} +function method_not_allowed(mod, method) { + return text(`${method} method not allowed`, { + status: 405, + headers: { + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405 + // "The server must generate an Allow header field in a 405 status code response" + allow: allowed_methods(mod).join(", ") + } + }); +} +function allowed_methods(mod) { + const allowed = ENDPOINT_METHODS.filter((method) => method in mod); + if ("GET" in mod && !("HEAD" in mod)) { + allowed.push("HEAD"); + } + return allowed; +} +function get_global_name(options2) { + return `__sveltekit_${options2.version_hash}`; +} +function static_error_page(options2, status, message) { + let page = options2.templates.error({ status, message: escape_html(message) }); + return text(page, { + headers: { "content-type": "text/html; charset=utf-8" }, + status + }); +} +async function handle_fatal_error(event, state, options2, error2) { + error2 = error2 instanceof HttpError ? error2 : coalesce_to_error(error2); + const status = get_status(error2); + const body2 = await handle_error_and_jsonify(event, state, options2, error2); + const type = negotiate(event.request.headers.get("accept") || "text/html", [ + "application/json", + "text/html" + ]); + if (event.isDataRequest || type === "application/json") { + return json(body2, { + status + }); + } + return static_error_page(options2, status, body2.message); +} +async function handle_error_and_jsonify(event, state, options2, error2) { + if (error2 instanceof HttpError) { + return { message: "Unknown Error", ...error2.body }; + } + const status = get_status(error2); + const message = get_message(error2); + return await with_request_store( + { event, state }, + () => options2.hooks.handleError({ error: error2, event, status, message }) + ) ?? { message }; +} +function redirect_response(status, location) { + const response = new Response(void 0, { + status, + headers: { location } + }); + return response; +} +function clarify_devalue_error(event, error2) { + if (error2.path) { + return `Data returned from \`load\` while rendering ${event.route.id} is not serializable: ${error2.message} (${error2.path}). If you need to serialize/deserialize custom types, use transport hooks: https://svelte.dev/docs/kit/hooks#Universal-hooks-transport.`; + } + if (error2.path === "") { + return `Data returned from \`load\` while rendering ${event.route.id} is not a plain object`; + } + return error2.message; +} +function serialize_uses(node) { + const uses = {}; + if (node.uses && node.uses.dependencies.size > 0) { + uses.dependencies = Array.from(node.uses.dependencies); + } + if (node.uses && node.uses.search_params.size > 0) { + uses.search_params = Array.from(node.uses.search_params); + } + if (node.uses && node.uses.params.size > 0) { + uses.params = Array.from(node.uses.params); + } + if (node.uses?.parent) uses.parent = 1; + if (node.uses?.route) uses.route = 1; + if (node.uses?.url) uses.url = 1; + return uses; +} +function has_prerendered_path(manifest, pathname) { + return manifest._.prerendered_routes.has(pathname) || pathname.at(-1) === "/" && manifest._.prerendered_routes.has(pathname.slice(0, -1)); +} +function format_server_error(status, error2, event) { + const formatted_text = ` +\x1B[1;31m[${status}] ${event.request.method} ${event.url.pathname}\x1B[0m`; + if (status === 404) { + return formatted_text; + } + return `${formatted_text} +${error2.stack}`; +} +function get_node_type(node_id) { + const parts = node_id?.split("/"); + const filename = parts?.at(-1); + if (!filename) return "unknown"; + const dot_parts = filename.split("."); + return dot_parts.slice(0, -1).join("."); +} +async function render_endpoint(event, event_state, mod, state) { + const method = ( + /** @type {import('types').HttpMethod} */ + event.request.method + ); + let handler = mod[method] || mod.fallback; + if (method === "HEAD" && !mod.HEAD && mod.GET) { + handler = mod.GET; + } + if (!handler) { + return method_not_allowed(mod, method); + } + const prerender = mod.prerender ?? state.prerender_default; + if (prerender && (mod.POST || mod.PATCH || mod.PUT || mod.DELETE)) { + throw new Error("Cannot prerender endpoints that have mutative methods"); + } + if (state.prerendering && !state.prerendering.inside_reroute && !prerender) { + if (state.depth > 0) { + throw new Error(`${event.route.id} is not prerenderable`); + } else { + return new Response(void 0, { status: 204 }); + } + } + event_state.is_endpoint_request = true; + try { + const response = await with_request_store( + { event, state: event_state }, + () => handler( + /** @type {import('@sveltejs/kit').RequestEvent>} */ + event + ) + ); + if (!(response instanceof Response)) { + throw new Error( + `Invalid response from route ${event.url.pathname}: handler should return a Response object` + ); + } + if (state.prerendering && (!state.prerendering.inside_reroute || prerender)) { + const cloned = new Response(response.clone().body, { + status: response.status, + statusText: response.statusText, + headers: new Headers(response.headers) + }); + cloned.headers.set("x-sveltekit-prerender", String(prerender)); + if (state.prerendering.inside_reroute && prerender) { + cloned.headers.set( + "x-sveltekit-routeid", + encodeURI( + /** @type {string} */ + event.route.id + ) + ); + state.prerendering.dependencies.set(event.url.pathname, { response: cloned, body: null }); + } else { + return cloned; + } + } + return response; + } catch (e) { + if (e instanceof Redirect) { + return new Response(void 0, { + status: e.status, + headers: { location: e.location } + }); + } + throw e; + } +} +function is_endpoint_request(event) { + const { method, headers: headers2 } = event.request; + if (ENDPOINT_METHODS.includes(method) && !PAGE_METHODS.includes(method)) { + return true; + } + if (method === "POST" && headers2.get("x-sveltekit-action") === "true") return false; + const accept = event.request.headers.get("accept") ?? "*/*"; + return negotiate(accept, ["*", "text/html"]) !== "text/html"; +} +function compact(arr) { + return arr.filter( + /** @returns {val is NonNullable} */ + (val) => val != null + ); +} +const DATA_SUFFIX = "/__data.json"; +const HTML_DATA_SUFFIX = ".html__data.json"; +function has_data_suffix(pathname) { + return pathname.endsWith(DATA_SUFFIX) || pathname.endsWith(HTML_DATA_SUFFIX); +} +function add_data_suffix(pathname) { + if (pathname.endsWith(".html")) return pathname.replace(/\.html$/, HTML_DATA_SUFFIX); + return pathname.replace(/\/$/, "") + DATA_SUFFIX; +} +function strip_data_suffix(pathname) { + if (pathname.endsWith(HTML_DATA_SUFFIX)) { + return pathname.slice(0, -HTML_DATA_SUFFIX.length) + ".html"; + } + return pathname.slice(0, -DATA_SUFFIX.length); +} +const ROUTE_SUFFIX = "/__route.js"; +function has_resolution_suffix(pathname) { + return pathname.endsWith(ROUTE_SUFFIX); +} +function add_resolution_suffix(pathname) { + return pathname.replace(/\/$/, "") + ROUTE_SUFFIX; +} +function strip_resolution_suffix(pathname) { + return pathname.slice(0, -ROUTE_SUFFIX.length); +} +const noop_span = { + spanContext() { + return noop_span_context; + }, + setAttribute() { + return this; + }, + setAttributes() { + return this; + }, + addEvent() { + return this; + }, + setStatus() { + return this; + }, + updateName() { + return this; + }, + end() { + return this; + }, + isRecording() { + return false; + }, + recordException() { + return this; + }, + addLink() { + return this; + }, + addLinks() { + return this; + } +}; +const noop_span_context = { + traceId: "", + spanId: "", + traceFlags: 0 +}; +async function record_span({ name, attributes, fn }) { + { + return fn(noop_span); + } +} +function is_action_json_request(event) { + const accept = negotiate(event.request.headers.get("accept") ?? "*/*", [ + "application/json", + "text/html" + ]); + return accept === "application/json" && event.request.method === "POST"; +} +async function handle_action_json_request(event, event_state, options2, server) { + const actions = server?.actions; + if (!actions) { + const no_actions_error = new SvelteKitError( + 405, + "Method Not Allowed", + `POST method not allowed. No form actions exist for ${"this page"}` + ); + return action_json( + { + type: "error", + error: await handle_error_and_jsonify(event, event_state, options2, no_actions_error) + }, + { + status: no_actions_error.status, + headers: { + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405 + // "The server must generate an Allow header field in a 405 status code response" + allow: "GET" + } + } + ); + } + check_named_default_separate(actions); + try { + const data = await call_action(event, event_state, actions); + if (BROWSER) ; + if (data instanceof ActionFailure) { + return action_json({ + type: "failure", + status: data.status, + // @ts-expect-error we assign a string to what is supposed to be an object. That's ok + // because we don't use the object outside, and this way we have better code navigation + // through knowing where the related interface is used. + data: stringify_action_response( + data.data, + /** @type {string} */ + event.route.id, + options2.hooks.transport + ) + }); + } else { + return action_json({ + type: "success", + status: data ? 200 : 204, + // @ts-expect-error see comment above + data: stringify_action_response( + data, + /** @type {string} */ + event.route.id, + options2.hooks.transport + ) + }); + } + } catch (e) { + const err = normalize_error(e); + if (err instanceof Redirect) { + return action_json_redirect(err); + } + return action_json( + { + type: "error", + error: await handle_error_and_jsonify( + event, + event_state, + options2, + check_incorrect_fail_use(err) + ) + }, + { + status: get_status(err) + } + ); + } +} +function check_incorrect_fail_use(error2) { + return error2 instanceof ActionFailure ? new Error('Cannot "throw fail()". Use "return fail()"') : error2; +} +function action_json_redirect(redirect) { + return action_json({ + type: "redirect", + status: redirect.status, + location: redirect.location + }); +} +function action_json(data, init2) { + return json(data, init2); +} +function is_action_request(event) { + return event.request.method === "POST"; +} +async function handle_action_request(event, event_state, server) { + const actions = server?.actions; + if (!actions) { + event.setHeaders({ + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405 + // "The server must generate an Allow header field in a 405 status code response" + allow: "GET" + }); + return { + type: "error", + error: new SvelteKitError( + 405, + "Method Not Allowed", + `POST method not allowed. No form actions exist for ${"this page"}` + ) + }; + } + check_named_default_separate(actions); + try { + const data = await call_action(event, event_state, actions); + if (BROWSER) ; + if (data instanceof ActionFailure) { + return { + type: "failure", + status: data.status, + data: data.data + }; + } else { + return { + type: "success", + status: 200, + // @ts-expect-error this will be removed upon serialization, so `undefined` is the same as omission + data + }; + } + } catch (e) { + const err = normalize_error(e); + if (err instanceof Redirect) { + return { + type: "redirect", + status: err.status, + location: err.location + }; + } + return { + type: "error", + error: check_incorrect_fail_use(err) + }; + } +} +function check_named_default_separate(actions) { + if (actions.default && Object.keys(actions).length > 1) { + throw new Error( + "When using named actions, the default action cannot be used. See the docs for more info: https://svelte.dev/docs/kit/form-actions#named-actions" + ); + } +} +async function call_action(event, event_state, actions) { + const url = new URL(event.request.url); + let name = "default"; + for (const param of url.searchParams) { + if (param[0].startsWith("/")) { + name = param[0].slice(1); + if (name === "default") { + throw new Error('Cannot use reserved action name "default"'); + } + break; + } + } + const action = actions[name]; + if (!action) { + throw new SvelteKitError(404, "Not Found", `No action with name '${name}' found`); + } + if (!is_form_content_type(event.request)) { + throw new SvelteKitError( + 415, + "Unsupported Media Type", + `Form actions expect form-encoded data — received ${event.request.headers.get( + "content-type" + )}` + ); + } + return record_span({ + name: "sveltekit.form_action", + attributes: { + "http.route": event.route.id || "unknown" + }, + fn: async (current2) => { + const traced_event = merge_tracing(event, current2); + const result = await with_request_store( + { event: traced_event, state: event_state }, + () => action(traced_event) + ); + if (result instanceof ActionFailure) { + current2.setAttributes({ + "sveltekit.form_action.result.type": "failure", + "sveltekit.form_action.result.status": result.status + }); + } + return result; + } + }); +} +function validate_action_return(data) { + if (data instanceof Redirect) { + throw new Error("Cannot `return redirect(...)` — use `redirect(...)` instead"); + } + if (data instanceof HttpError) { + throw new Error("Cannot `return error(...)` — use `error(...)` or `return fail(...)` instead"); + } +} +function uneval_action_response(data, route_id, transport) { + const replacer = (thing) => { + for (const key2 in transport) { + const encoded = transport[key2].encode(thing); + if (encoded) { + return `app.decode('${key2}', ${devalue.uneval(encoded, replacer)})`; + } + } + }; + return try_serialize(data, (value) => devalue.uneval(value, replacer), route_id); +} +function stringify_action_response(data, route_id, transport) { + const encoders = Object.fromEntries( + Object.entries(transport).map(([key2, value]) => [key2, value.encode]) + ); + return try_serialize(data, (value) => devalue.stringify(value, encoders), route_id); +} +function try_serialize(data, fn, route_id) { + try { + return fn(data); + } catch (e) { + const error2 = ( + /** @type {any} */ + e + ); + if (data instanceof Response) { + throw new Error( + `Data returned from action inside ${route_id} is not serializable. Form actions need to return plain objects or fail(). E.g. return { success: true } or return fail(400, { message: "invalid" });` + ); + } + if ("path" in error2) { + let message = `Data returned from action inside ${route_id} is not serializable: ${error2.message}`; + if (error2.path !== "") message += ` (data.${error2.path})`; + throw new Error(message); + } + throw error2; + } +} +function create_async_iterator() { + let resolved = -1; + let returned = -1; + const deferred = []; + return { + iterate: (transform = (x) => x) => { + return { + [Symbol.asyncIterator]() { + return { + next: async () => { + const next = deferred[++returned]; + if (!next) return { value: null, done: true }; + const value = await next.promise; + return { value: transform(value), done: false }; + } + }; + } + }; + }, + add: (promise) => { + deferred.push(with_resolvers()); + void promise.then((value) => { + deferred[++resolved].resolve(value); + }); + } + }; +} +function server_data_serializer(event, event_state, options2) { + let promise_id = 1; + let max_nodes = -1; + const iterator = create_async_iterator(); + const global = get_global_name(options2); + function get_replacer(index) { + return function replacer(thing) { + if (typeof thing?.then === "function") { + const id = promise_id++; + const promise = thing.then( + /** @param {any} data */ + (data) => ({ data }) + ).catch( + /** @param {any} error */ + async (error2) => ({ + error: await handle_error_and_jsonify(event, event_state, options2, error2) + }) + ).then( + /** + * @param {{data: any; error: any}} result + */ + async ({ data, error: error2 }) => { + let str; + try { + str = devalue.uneval(error2 ? [, error2] : [data], replacer); + } catch { + error2 = await handle_error_and_jsonify( + event, + event_state, + options2, + new Error(`Failed to serialize promise while rendering ${event.route.id}`) + ); + data = void 0; + str = devalue.uneval([, error2], replacer); + } + return { + index, + str: `${global}.resolve(${id}, ${str.includes("app.decode") ? `(app) => ${str}` : `() => ${str}`})` + }; + } + ); + iterator.add(promise); + return `${global}.defer(${id})`; + } else { + for (const key2 in options2.hooks.transport) { + const encoded = options2.hooks.transport[key2].encode(thing); + if (encoded) { + return `app.decode('${key2}', ${devalue.uneval(encoded, replacer)})`; + } + } + } + }; + } + const strings = ( + /** @type {string[]} */ + [] + ); + return { + set_max_nodes(i) { + max_nodes = i; + }, + add_node(i, node) { + try { + if (!node) { + strings[i] = "null"; + return; + } + const payload = { type: "data", data: node.data, uses: serialize_uses(node) }; + if (node.slash) payload.slash = node.slash; + strings[i] = devalue.uneval(payload, get_replacer(i)); + } catch (e) { + e.path = e.path.slice(1); + throw new Error(clarify_devalue_error( + event, + /** @type {any} */ + e + )); + } + }, + get_data(csp) { + const open = ``; + const close = `<\/script> +`; + return { + data: `[${compact(max_nodes > -1 ? strings.slice(0, max_nodes) : strings).join(",")}]`, + chunks: promise_id > 1 ? iterator.iterate(({ index, str }) => { + if (max_nodes > -1 && index >= max_nodes) { + return ""; + } + return open + str + close; + }) : null + }; + } + }; +} +function server_data_serializer_json(event, event_state, options2) { + let promise_id = 1; + const iterator = create_async_iterator(); + const reducers = { + ...Object.fromEntries( + Object.entries(options2.hooks.transport).map(([key2, value]) => [key2, value.encode]) + ), + /** @param {any} thing */ + Promise: (thing) => { + if (typeof thing?.then !== "function") { + return; + } + const id = promise_id++; + let key2 = "data"; + const promise = thing.catch( + /** @param {any} e */ + async (e) => { + key2 = "error"; + return handle_error_and_jsonify( + event, + event_state, + options2, + /** @type {any} */ + e + ); + } + ).then( + /** @param {any} value */ + async (value) => { + let str; + try { + str = devalue.stringify(value, reducers); + } catch { + const error2 = await handle_error_and_jsonify( + event, + event_state, + options2, + new Error(`Failed to serialize promise while rendering ${event.route.id}`) + ); + key2 = "error"; + str = devalue.stringify(error2, reducers); + } + return `{"type":"chunk","id":${id},"${key2}":${str}} +`; + } + ); + iterator.add(promise); + return id; + } + }; + const strings = ( + /** @type {string[]} */ + [] + ); + return { + add_node(i, node) { + try { + if (!node) { + strings[i] = "null"; + return; + } + if (node.type === "error" || node.type === "skip") { + strings[i] = JSON.stringify(node); + return; + } + strings[i] = `{"type":"data","data":${devalue.stringify(node.data, reducers)},"uses":${JSON.stringify( + serialize_uses(node) + )}${node.slash ? `,"slash":${JSON.stringify(node.slash)}` : ""}}`; + } catch (e) { + e.path = "data" + e.path; + throw new Error(clarify_devalue_error( + event, + /** @type {any} */ + e + )); + } + }, + get_data() { + return { + data: `{"type":"data","nodes":[${strings.join(",")}]} +`, + chunks: promise_id > 1 ? iterator.iterate() : null + }; + } + }; +} +async function load_server_data({ event, event_state, state, node, parent }) { + if (!node?.server) return null; + let is_tracking = true; + const uses = { + dependencies: /* @__PURE__ */ new Set(), + params: /* @__PURE__ */ new Set(), + parent: false, + route: false, + url: false, + search_params: /* @__PURE__ */ new Set() + }; + const load = node.server.load; + const slash = node.server.trailingSlash; + if (!load) { + return { type: "data", data: null, uses, slash }; + } + const url = make_trackable( + event.url, + () => { + if (is_tracking) { + uses.url = true; + } + }, + (param) => { + if (is_tracking) { + uses.search_params.add(param); + } + } + ); + if (state.prerendering) { + disable_search(url); + } + const result = await record_span({ + name: "sveltekit.load", + attributes: { + "sveltekit.load.node_id": node.server_id || "unknown", + "sveltekit.load.node_type": get_node_type(node.server_id), + "http.route": event.route.id || "unknown" + }, + fn: async (current2) => { + const traced_event = merge_tracing(event, current2); + const result2 = await with_request_store( + { event: traced_event, state: event_state }, + () => load.call(null, { + ...traced_event, + fetch: (info, init2) => { + new URL(info instanceof Request ? info.url : info, event.url); + return event.fetch(info, init2); + }, + /** @param {string[]} deps */ + depends: (...deps) => { + for (const dep of deps) { + const { href } = new URL(dep, event.url); + uses.dependencies.add(href); + } + }, + params: new Proxy(event.params, { + get: (target, key2) => { + if (is_tracking) { + uses.params.add(key2); + } + return target[ + /** @type {string} */ + key2 + ]; + } + }), + parent: async () => { + if (is_tracking) { + uses.parent = true; + } + return parent(); + }, + route: new Proxy(event.route, { + get: (target, key2) => { + if (is_tracking) { + uses.route = true; + } + return target[ + /** @type {'id'} */ + key2 + ]; + } + }), + url, + untrack(fn) { + is_tracking = false; + try { + return fn(); + } finally { + is_tracking = true; + } + } + }) + ); + return result2; + } + }); + return { + type: "data", + data: result ?? null, + uses, + slash + }; +} +async function load_data({ + event, + event_state, + fetched, + node, + parent, + server_data_promise, + state, + resolve_opts, + csr +}) { + const server_data_node = await server_data_promise; + const load = node?.universal?.load; + if (!load) { + return server_data_node?.data ?? null; + } + const result = await record_span({ + name: "sveltekit.load", + attributes: { + "sveltekit.load.node_id": node.universal_id || "unknown", + "sveltekit.load.node_type": get_node_type(node.universal_id), + "http.route": event.route.id || "unknown" + }, + fn: async (current2) => { + const traced_event = merge_tracing(event, current2); + return await with_request_store( + { event: traced_event, state: event_state }, + () => load.call(null, { + url: event.url, + params: event.params, + data: server_data_node?.data ?? null, + route: event.route, + fetch: create_universal_fetch(event, state, fetched, csr, resolve_opts), + setHeaders: event.setHeaders, + depends: () => { + }, + parent, + untrack: (fn) => fn(), + tracing: traced_event.tracing + }) + ); + } + }); + return result ?? null; +} +function create_universal_fetch(event, state, fetched, csr, resolve_opts) { + const universal_fetch = async (input, init2) => { + const cloned_body = input instanceof Request && input.body ? input.clone().body : null; + const cloned_headers = input instanceof Request && [...input.headers].length ? new Headers(input.headers) : init2?.headers; + let response = await event.fetch(input, init2); + const url = new URL(input instanceof Request ? input.url : input, event.url); + const same_origin = url.origin === event.url.origin; + let dependency; + if (same_origin) { + if (state.prerendering) { + dependency = { response, body: null }; + state.prerendering.dependencies.set(url.pathname, dependency); + } + } else if (url.protocol === "https:" || url.protocol === "http:") { + const mode = input instanceof Request ? input.mode : init2?.mode ?? "cors"; + if (mode === "no-cors") { + response = new Response("", { + status: response.status, + statusText: response.statusText, + headers: response.headers + }); + } else { + const acao = response.headers.get("access-control-allow-origin"); + if (!acao || acao !== event.url.origin && acao !== "*") { + throw new Error( + `CORS error: ${acao ? "Incorrect" : "No"} 'Access-Control-Allow-Origin' header is present on the requested resource` + ); + } + } + } + let teed_body; + const proxy = new Proxy(response, { + get(response2, key2, receiver) { + async function push_fetched(body2, is_b64) { + const status_number = Number(response2.status); + if (isNaN(status_number)) { + throw new Error( + `response.status is not a number. value: "${response2.status}" type: ${typeof response2.status}` + ); + } + fetched.push({ + url: same_origin ? url.href.slice(event.url.origin.length) : url.href, + method: event.request.method, + request_body: ( + /** @type {string | ArrayBufferView | undefined} */ + input instanceof Request && cloned_body ? await stream_to_string(cloned_body) : init2?.body + ), + request_headers: cloned_headers, + response_body: body2, + response: response2, + is_b64 + }); + } + if (key2 === "body") { + if (response2.body === null) { + return null; + } + if (teed_body) { + return teed_body; + } + const [a, b] = response2.body.tee(); + void (async () => { + let result = new Uint8Array(); + for await (const chunk of a) { + const combined = new Uint8Array(result.length + chunk.length); + combined.set(result, 0); + combined.set(chunk, result.length); + result = combined; + } + if (dependency) { + dependency.body = new Uint8Array(result); + } + void push_fetched(base64_encode(result), true); + })(); + return teed_body = b; + } + if (key2 === "arrayBuffer") { + return async () => { + const buffer = await response2.arrayBuffer(); + const bytes = new Uint8Array(buffer); + if (dependency) { + dependency.body = bytes; + } + if (buffer instanceof ArrayBuffer) { + await push_fetched(base64_encode(bytes), true); + } + return buffer; + }; + } + async function text2() { + const body2 = await response2.text(); + if (body2 === "" && NULL_BODY_STATUS.includes(response2.status)) { + await push_fetched(void 0, false); + return void 0; + } + if (!body2 || typeof body2 === "string") { + await push_fetched(body2, false); + } + if (dependency) { + dependency.body = body2; + } + return body2; + } + if (key2 === "text") { + return text2; + } + if (key2 === "json") { + return async () => { + const body2 = await text2(); + return body2 ? JSON.parse(body2) : void 0; + }; + } + const value = Reflect.get(response2, key2, response2); + if (value instanceof Function) { + return Object.defineProperties( + /** + * @this {any} + */ + function() { + return Reflect.apply(value, this === receiver ? response2 : this, arguments); + }, + { + name: { value: value.name }, + length: { value: value.length } + } + ); + } + return value; + } + }); + if (csr) { + const get = response.headers.get; + response.headers.get = (key2) => { + const lower = key2.toLowerCase(); + const value = get.call(response.headers, lower); + if (value && !lower.startsWith("x-sveltekit-")) { + const included = resolve_opts.filterSerializedResponseHeaders(lower, value); + if (!included) { + throw new Error( + `Failed to get response header "${lower}" — it must be included by the \`filterSerializedResponseHeaders\` option: https://svelte.dev/docs/kit/hooks#Server-hooks-handle (at ${event.route.id})` + ); + } + } + return value; + }; + } + return proxy; + }; + return (input, init2) => { + const response = universal_fetch(input, init2); + response.catch(() => { + }); + return response; + }; +} +async function stream_to_string(stream) { + let result = ""; + const reader = stream.getReader(); + while (true) { + const { done, value } = await reader.read(); + if (done) { + break; + } + result += text_decoder.decode(value); + } + return result; +} +function hash(...values) { + let hash2 = 5381; + for (const value of values) { + if (typeof value === "string") { + let i = value.length; + while (i) hash2 = hash2 * 33 ^ value.charCodeAt(--i); + } else if (ArrayBuffer.isView(value)) { + const buffer = new Uint8Array(value.buffer, value.byteOffset, value.byteLength); + let i = buffer.length; + while (i) hash2 = hash2 * 33 ^ buffer[--i]; + } else { + throw new TypeError("value must be a string or TypedArray"); + } + } + return (hash2 >>> 0).toString(36); +} +const replacements = { + "<": "\\u003C", + "\u2028": "\\u2028", + "\u2029": "\\u2029" +}; +const pattern = new RegExp(`[${Object.keys(replacements).join("")}]`, "g"); +function serialize_data(fetched, filter, prerendering = false) { + const headers2 = {}; + let cache_control = null; + let age = null; + let varyAny = false; + for (const [key2, value] of fetched.response.headers) { + if (filter(key2, value)) { + headers2[key2] = value; + } + if (key2 === "cache-control") cache_control = value; + else if (key2 === "age") age = value; + else if (key2 === "vary" && value.trim() === "*") varyAny = true; + } + const payload = { + status: fetched.response.status, + statusText: fetched.response.statusText, + headers: headers2, + body: fetched.response_body + }; + const safe_payload = JSON.stringify(payload).replace(pattern, (match) => replacements[match]); + const attrs = [ + 'type="application/json"', + "data-sveltekit-fetched", + `data-url="${escape_html(fetched.url, true)}"` + ]; + if (fetched.is_b64) { + attrs.push("data-b64"); + } + if (fetched.request_headers || fetched.request_body) { + const values = []; + if (fetched.request_headers) { + values.push([...new Headers(fetched.request_headers)].join(",")); + } + if (fetched.request_body) { + values.push(fetched.request_body); + } + attrs.push(`data-hash="${hash(...values)}"`); + } + if (!prerendering && fetched.method === "GET" && cache_control && !varyAny) { + const match = /s-maxage=(\d+)/g.exec(cache_control) ?? /max-age=(\d+)/g.exec(cache_control); + if (match) { + const ttl = +match[1] - +(age ?? "0"); + attrs.push(`data-ttl="${ttl}"`); + } + } + return `\n * ```\n */\nexport function getAbortSignal() {\n\tif (active_reaction === null) {\n\t\te.get_abort_signal_outside_reaction();\n\t}\n\n\treturn (active_reaction.ac ??= new AbortController()).signal;\n}\n\n/**\n * `onMount`, like [`$effect`](https://svelte.dev/docs/svelte/$effect), schedules a function to run as soon as the component has been mounted to the DOM.\n * Unlike `$effect`, the provided function only runs once.\n *\n * It must be called during the component's initialisation (but doesn't need to live _inside_ the component;\n * it can be called from an external module). If a function is returned _synchronously_ from `onMount`,\n * it will be called when the component is unmounted.\n *\n * `onMount` functions do not run during [server-side rendering](https://svelte.dev/docs/svelte/svelte-server#render).\n *\n * @template T\n * @param {() => NotFunction | Promise> | (() => any)} fn\n * @returns {void}\n */\nexport function onMount(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('onMount');\n\t}\n\n\tif (legacy_mode_flag && component_context.l !== null) {\n\t\tinit_update_callbacks(component_context).m.push(fn);\n\t} else {\n\t\tuser_effect(() => {\n\t\t\tconst cleanup = untrack(fn);\n\t\t\tif (typeof cleanup === 'function') return /** @type {() => void} */ (cleanup);\n\t\t});\n\t}\n}\n\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * @param {() => any} fn\n * @returns {void}\n */\nexport function onDestroy(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('onDestroy');\n\t}\n\n\tonMount(() => () => untrack(fn));\n}\n\n/**\n * @template [T=any]\n * @param {string} type\n * @param {T} [detail]\n * @param {any}params_0\n * @returns {CustomEvent}\n */\nfunction create_custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n\treturn new CustomEvent(type, { detail, bubbles, cancelable });\n}\n\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](https://svelte.dev/docs/svelte/legacy-on#Component-events).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument:\n * ```ts\n * const dispatch = createEventDispatcher<{\n * loaded: null; // does not take a detail argument\n * change: string; // takes a detail argument of type string, which is required\n * optional: number | null; // takes an optional detail argument of type number\n * }>();\n * ```\n *\n * @deprecated Use callback props and/or the `$host()` rune instead — see [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Event-changes-Component-events)\n * @template {Record} [EventMap = any]\n * @returns {EventDispatcher}\n */\nexport function createEventDispatcher() {\n\tconst active_component_context = component_context;\n\tif (active_component_context === null) {\n\t\te.lifecycle_outside_component('createEventDispatcher');\n\t}\n\n\t/**\n\t * @param [detail]\n\t * @param [options]\n\t */\n\treturn (type, detail, options) => {\n\t\tconst events = /** @type {Record} */ (\n\t\t\tactive_component_context.s.$$events\n\t\t)?.[/** @type {string} */ (type)];\n\n\t\tif (events) {\n\t\t\tconst callbacks = is_array(events) ? events.slice() : [events];\n\t\t\t// TODO are there situations where events could be dispatched\n\t\t\t// in a server (non-DOM) environment?\n\t\t\tconst event = create_custom_event(/** @type {string} */ (type), detail, options);\n\t\t\tfor (const fn of callbacks) {\n\t\t\t\tfn.call(active_component_context.x, event);\n\t\t\t}\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\n\t\treturn true;\n\t};\n}\n\n// TODO mark beforeUpdate and afterUpdate as deprecated in Svelte 6\n\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`.\n *\n * In runes mode use `$effect.pre` instead.\n *\n * @deprecated Use [`$effect.pre`](https://svelte.dev/docs/svelte/$effect#$effect.pre) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function beforeUpdate(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('beforeUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('beforeUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).b.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`.\n *\n * In runes mode use `$effect` instead.\n *\n * @deprecated Use [`$effect`](https://svelte.dev/docs/svelte/$effect) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function afterUpdate(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('afterUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('afterUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).a.push(fn);\n}\n\n/**\n * Legacy-mode: Init callbacks object for onMount/beforeUpdate/afterUpdate\n * @param {ComponentContext} context\n */\nfunction init_update_callbacks(context) {\n\tvar l = /** @type {ComponentContextLegacy} */ (context).l;\n\treturn (l.u ??= { a: [], b: [], m: [] });\n}\n\nexport { flushSync, fork } from './internal/client/reactivity/batch.js';\nexport {\n\tcreateContext,\n\tgetContext,\n\tgetAllContexts,\n\thasContext,\n\tsetContext\n} from './internal/client/context.js';\nexport { hydratable } from './internal/client/hydratable.js';\nexport { hydrate, mount, unmount } from './internal/client/render.js';\nexport { tick, untrack, settled } from './internal/client/runtime.js';\nexport { createRawSnippet } from './internal/client/dom/blocks/snippet.js';\n"], + "mappings": "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", + "names": ["key", "key", "next", "source", "stack", "stack", "key", "flags", "component", "component_context", "effect", "effect", "flags", "child", "source", "stack", "update", "e", "settled", "source", "value", "eager_effects", "comment", "pending", "reset", "error", "derived", "stack", "source", "effect", "source", "flags", "derived", "stack", "version", "prop", "source", "s", "value", "key", "prop", "array_prototype", "index", "effect", "e", "derived", "flags", "effect", "flags", "flags", "effect", "effect", "teardown", "next", "transition", "child", "sibling", "effect", "next", "effect", "flags", "index", "teardown", "trace", "derived", "event", "html", "effect", "effect", "component", "events", "passive", "unmount", "anchor_node", "snippet", "element", "html", "element", "listeners", "run", "set", "update", "run", "derived", "pending", "get", "key", "prop", "next", "event", "slot", "key", "attr", "prop", "element", "key", "event"] +} diff --git a/frontend/.vite/deps/package.json b/frontend/.vite/deps/package.json new file mode 100644 index 0000000..3dbc1ca --- /dev/null +++ b/frontend/.vite/deps/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/frontend/.vite/deps/svelte.js b/frontend/.vite/deps/svelte.js new file mode 100644 index 0000000..f7977e9 --- /dev/null +++ b/frontend/.vite/deps/svelte.js @@ -0,0 +1,46 @@ +import { + afterUpdate, + beforeUpdate, + createContext, + createEventDispatcher, + createRawSnippet, + flushSync, + fork, + getAbortSignal, + getAllContexts, + getContext, + hasContext, + hydratable, + hydrate, + mount, + onDestroy, + onMount, + setContext, + settled, + tick, + unmount, + untrack +} from "./chunk-YAQNMG2X.js"; +export { + afterUpdate, + beforeUpdate, + createContext, + createEventDispatcher, + createRawSnippet, + flushSync, + fork, + getAbortSignal, + getAllContexts, + getContext, + hasContext, + hydratable, + hydrate, + mount, + onDestroy, + onMount, + setContext, + settled, + tick, + unmount, + untrack +}; diff --git a/frontend/.vite/deps/svelte.js.map b/frontend/.vite/deps/svelte.js.map new file mode 100644 index 0000000..9865211 --- /dev/null +++ b/frontend/.vite/deps/svelte.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] +} diff --git a/frontend/.vite/deps/svelte_store.js b/frontend/.vite/deps/svelte_store.js new file mode 100644 index 0000000..5505850 --- /dev/null +++ b/frontend/.vite/deps/svelte_store.js @@ -0,0 +1,100 @@ +import { + active_effect, + active_reaction, + createSubscriber, + derived, + effect_root, + effect_tracking, + get, + readable, + readonly, + render_effect, + set_active_effect, + set_active_reaction, + writable +} from "./chunk-YAQNMG2X.js"; + +// node_modules/svelte/src/store/index-client.js +function toStore(get2, set) { + var effect = active_effect; + var reaction = active_reaction; + var init_value = get2(); + const store = writable(init_value, (set2) => { + var ran = init_value !== get2(); + var teardown; + var previous_reaction = active_reaction; + var previous_effect = active_effect; + set_active_reaction(reaction); + set_active_effect(effect); + try { + teardown = effect_root(() => { + render_effect(() => { + const value = get2(); + if (ran) set2(value); + }); + }); + } finally { + set_active_reaction(previous_reaction); + set_active_effect(previous_effect); + } + ran = true; + return teardown; + }); + if (set) { + return { + set, + update: (fn) => set(fn(get2())), + subscribe: store.subscribe + }; + } + return { + subscribe: store.subscribe + }; +} +function fromStore(store) { + let value = ( + /** @type {V} */ + void 0 + ); + const subscribe = createSubscriber((update) => { + let ran = false; + const unsubscribe = store.subscribe((v) => { + value = v; + if (ran) update(); + }); + ran = true; + return unsubscribe; + }); + function current() { + if (effect_tracking()) { + subscribe(); + return value; + } + return get(store); + } + if ("set" in store) { + return { + get current() { + return current(); + }, + set current(v) { + store.set(v); + } + }; + } + return { + get current() { + return current(); + } + }; +} +export { + derived, + fromStore, + get, + readable, + readonly, + toStore, + writable +}; +//# sourceMappingURL=svelte_store.js.map diff --git a/frontend/.vite/deps/svelte_store.js.map b/frontend/.vite/deps/svelte_store.js.map new file mode 100644 index 0000000..d0ee695 --- /dev/null +++ b/frontend/.vite/deps/svelte_store.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/svelte/src/store/index-client.js"], + "sourcesContent": ["/** @import { Readable, Writable } from './public.js' */\nimport {\n\teffect_root,\n\teffect_tracking,\n\trender_effect\n} from '../internal/client/reactivity/effects.js';\nimport { get, writable } from './shared/index.js';\nimport { createSubscriber } from '../reactivity/create-subscriber.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../internal/client/runtime.js';\n\nexport { derived, get, readable, readonly, writable } from './shared/index.js';\n\n/**\n * @template V\n * @overload\n * @param {() => V} get\n * @param {(v: V) => void} set\n * @returns {Writable}\n */\n/**\n * @template V\n * @overload\n * @param {() => V} get\n * @returns {Readable}\n */\n/**\n * Create a store from a function that returns state, and (to make a writable store), an\n * optional second function that sets state.\n *\n * ```ts\n * import { toStore } from 'svelte/store';\n *\n * let count = $state(0);\n *\n * const store = toStore(() => count, (v) => (count = v));\n * ```\n * @template V\n * @param {() => V} get\n * @param {(v: V) => void} [set]\n * @returns {Writable | Readable}\n */\nexport function toStore(get, set) {\n\tvar effect = active_effect;\n\tvar reaction = active_reaction;\n\tvar init_value = get();\n\n\tconst store = writable(init_value, (set) => {\n\t\t// If the value has changed before we call subscribe, then\n\t\t// we need to treat the value as already having run\n\t\tvar ran = init_value !== get();\n\n\t\t// TODO do we need a different implementation on the server?\n\t\tvar teardown;\n\t\t// Apply the reaction and effect at the time of toStore being called\n\t\tvar previous_reaction = active_reaction;\n\t\tvar previous_effect = active_effect;\n\t\tset_active_reaction(reaction);\n\t\tset_active_effect(effect);\n\n\t\ttry {\n\t\t\tteardown = effect_root(() => {\n\t\t\t\trender_effect(() => {\n\t\t\t\t\tconst value = get();\n\t\t\t\t\tif (ran) set(value);\n\t\t\t\t});\n\t\t\t});\n\t\t} finally {\n\t\t\tset_active_reaction(previous_reaction);\n\t\t\tset_active_effect(previous_effect);\n\t\t}\n\n\t\tran = true;\n\n\t\treturn teardown;\n\t});\n\n\tif (set) {\n\t\treturn {\n\t\t\tset,\n\t\t\tupdate: (fn) => set(fn(get())),\n\t\t\tsubscribe: store.subscribe\n\t\t};\n\t}\n\n\treturn {\n\t\tsubscribe: store.subscribe\n\t};\n}\n\n/**\n * @template V\n * @overload\n * @param {Writable} store\n * @returns {{ current: V }}\n */\n/**\n * @template V\n * @overload\n * @param {Readable} store\n * @returns {{ readonly current: V }}\n */\n/**\n * Convert a store to an object with a reactive `current` property. If `store`\n * is a readable store, `current` will be a readonly property.\n *\n * ```ts\n * import { fromStore, get, writable } from 'svelte/store';\n *\n * const store = writable(0);\n *\n * const count = fromStore(store);\n *\n * count.current; // 0;\n * store.set(1);\n * count.current; // 1\n *\n * count.current += 1;\n * get(store); // 2\n * ```\n * @template V\n * @param {Writable | Readable} store\n */\nexport function fromStore(store) {\n\tlet value = /** @type {V} */ (undefined);\n\n\tconst subscribe = createSubscriber((update) => {\n\t\tlet ran = false;\n\n\t\tconst unsubscribe = store.subscribe((v) => {\n\t\t\tvalue = v;\n\t\t\tif (ran) update();\n\t\t});\n\n\t\tran = true;\n\n\t\treturn unsubscribe;\n\t});\n\n\tfunction current() {\n\t\tif (effect_tracking()) {\n\t\t\tsubscribe();\n\t\t\treturn value;\n\t\t}\n\n\t\treturn get(store);\n\t}\n\n\tif ('set' in store) {\n\t\treturn {\n\t\t\tget current() {\n\t\t\t\treturn current();\n\t\t\t},\n\t\t\tset current(v) {\n\t\t\t\tstore.set(v);\n\t\t\t}\n\t\t};\n\t}\n\n\treturn {\n\t\tget current() {\n\t\t\treturn current();\n\t\t}\n\t};\n}\n"], + "mappings": ";;;;;;;;;;;;;;;;;AA8CO,SAAS,QAAQA,MAAK,KAAK;AACjC,MAAI,SAAS;AACb,MAAI,WAAW;AACf,MAAI,aAAaA,KAAI;AAErB,QAAM,QAAQ,SAAS,YAAY,CAACC,SAAQ;AAG3C,QAAI,MAAM,eAAeD,KAAI;AAG7B,QAAI;AAEJ,QAAI,oBAAoB;AACxB,QAAI,kBAAkB;AACtB,wBAAoB,QAAQ;AAC5B,sBAAkB,MAAM;AAExB,QAAI;AACH,iBAAW,YAAY,MAAM;AAC5B,sBAAc,MAAM;AACnB,gBAAM,QAAQA,KAAI;AAClB,cAAI,IAAK,CAAAC,KAAI,KAAK;AAAA,QACnB,CAAC;AAAA,MACF,CAAC;AAAA,IACF,UAAE;AACD,0BAAoB,iBAAiB;AACrC,wBAAkB,eAAe;AAAA,IAClC;AAEA,UAAM;AAEN,WAAO;AAAA,EACR,CAAC;AAED,MAAI,KAAK;AACR,WAAO;AAAA,MACN;AAAA,MACA,QAAQ,CAAC,OAAO,IAAI,GAAGD,KAAI,CAAC,CAAC;AAAA,MAC7B,WAAW,MAAM;AAAA,IAClB;AAAA,EACD;AAEA,SAAO;AAAA,IACN,WAAW,MAAM;AAAA,EAClB;AACD;AAmCO,SAAS,UAAU,OAAO;AAChC,MAAI;AAAA;AAAA,IAA0B;AAAA;AAE9B,QAAM,YAAY,iBAAiB,CAAC,WAAW;AAC9C,QAAI,MAAM;AAEV,UAAM,cAAc,MAAM,UAAU,CAAC,MAAM;AAC1C,cAAQ;AACR,UAAI,IAAK,QAAO;AAAA,IACjB,CAAC;AAED,UAAM;AAEN,WAAO;AAAA,EACR,CAAC;AAED,WAAS,UAAU;AAClB,QAAI,gBAAgB,GAAG;AACtB,gBAAU;AACV,aAAO;AAAA,IACR;AAEA,WAAO,IAAI,KAAK;AAAA,EACjB;AAEA,MAAI,SAAS,OAAO;AACnB,WAAO;AAAA,MACN,IAAI,UAAU;AACb,eAAO,QAAQ;AAAA,MAChB;AAAA,MACA,IAAI,QAAQ,GAAG;AACd,cAAM,IAAI,CAAC;AAAA,MACZ;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AAAA,IACN,IAAI,UAAU;AACb,aAAO,QAAQ;AAAA,IAChB;AAAA,EACD;AACD;", + "names": ["get", "set"] +} diff --git a/frontend/README.md b/frontend/README.md index 54a2631..6a48769 100755 --- a/frontend/README.md +++ b/frontend/README.md @@ -1,43 +1,39 @@ -# Svelte + Vite +# Superset Tools Frontend (SvelteKit) -This template should help get you started developing with Svelte in Vite. +This is the frontend for the Superset Tools application, built with SvelteKit in SPA mode. -## Recommended IDE Setup +## Development -[VS Code](https://code.visualstudio.com/) + [Svelte](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode). +1. **Install dependencies**: + ```bash + npm install + ``` -## Need an official Svelte framework? +2. **Run development server**: + ```bash + npm run dev + ``` + The frontend will be available at `http://localhost:5173`. It is configured to proxy API requests to `http://localhost:8000`. -Check out [SvelteKit](https://github.com/sveltejs/kit#readme), which is also powered by Vite. Deploy anywhere with its serverless-first approach and adapt to various platforms, with out of the box support for TypeScript, SCSS, and Less, and easily-added support for mdsvex, GraphQL, PostCSS, Tailwind CSS, and more. +## Production Build -## Technical considerations +1. **Build the static SPA**: + ```bash + npm run build + ``` + This generates a static SPA in the `build/` directory. -**Why use this over SvelteKit?** +2. **Serve with Backend**: + The Python backend is configured to serve the files from `frontend/build/`. Ensure the backend is running: + ```bash + cd ../backend + python src/app.py + ``` -- It brings its own routing solution which might not be preferable for some users. -- It is first and foremost a framework that just happens to use Vite under the hood, not a Vite app. +## Architecture -This template contains as little as possible to get started with Vite + Svelte, while taking into account the developer experience with regards to HMR and intellisense. It demonstrates capabilities on par with the other `create-vite` templates and is a good starting point for beginners dipping their toes into a Vite + Svelte project. - -Should you later need the extended capabilities and extensibility provided by SvelteKit, the template has been structured similarly to SvelteKit so that it is easy to migrate. - -**Why include `.vscode/extensions.json`?** - -Other templates indirectly recommend extensions via the README, but this file allows VS Code to prompt the user to install the recommended extension upon opening the project. - -**Why enable `checkJs` in the JS template?** - -It is likely that most cases of changing variable types in runtime are likely to be accidental, rather than deliberate. This provides advanced typechecking out of the box. Should you like to take advantage of the dynamically-typed nature of JavaScript, it is trivial to change the configuration. - -**Why is HMR not preserving my local component state?** - -HMR state preservation comes with a number of gotchas! It has been disabled by default in both `svelte-hmr` and `@sveltejs/vite-plugin-svelte` due to its often surprising behavior. You can read the details [here](https://github.com/sveltejs/svelte-hmr/tree/master/packages/svelte-hmr#preservation-of-local-state). - -If you have state that's important to retain within a component, consider creating an external store which would not be replaced by HMR. - -```js -// store.js -// An extremely simple external store -import { writable } from 'svelte/store' -export default writable(0) -``` +- **Routing**: File-based routing in `src/routes/`. +- **Layouts**: Shared UI in `src/routes/+layout.svelte`. +- **Data Loading**: `load` functions in `+page.ts` for efficient data fetching. +- **API Client**: Centralized API logic in `src/lib/api.js`. +- **Styling**: Tailwind CSS. diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 012268a..c033340 100755 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8,6 +8,8 @@ "name": "frontend", "version": "0.0.0", "devDependencies": { + "@sveltejs/adapter-static": "^3.0.10", + "@sveltejs/kit": "^2.49.2", "@sveltejs/vite-plugin-svelte": "^6.2.1", "autoprefixer": "^10.4.0", "postcss": "^8.4.0", @@ -559,6 +561,13 @@ "node": ">= 8" } }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.53.5", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.5.tgz", @@ -867,6 +876,13 @@ "win32" ] }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, "node_modules/@sveltejs/acorn-typescript": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.8.tgz", @@ -877,6 +893,56 @@ "acorn": "^8.9.0" } }, + "node_modules/@sveltejs/adapter-static": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.10.tgz", + "integrity": "sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@sveltejs/kit": "^2.0.0" + } + }, + "node_modules/@sveltejs/kit": { + "version": "2.49.2", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.49.2.tgz", + "integrity": "sha512-Vp3zX/qlwerQmHMP6x0Ry1oY7eKKRcOWGc2P59srOp4zcqyn+etJyQpELgOi4+ZSUgteX8Y387NuwruLgGXLUQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@sveltejs/acorn-typescript": "^1.0.5", + "@types/cookie": "^0.6.0", + "acorn": "^8.14.1", + "cookie": "^0.6.0", + "devalue": "^5.3.2", + "esm-env": "^1.2.2", + "kleur": "^4.1.5", + "magic-string": "^0.30.5", + "mrmime": "^2.0.0", + "sade": "^1.8.1", + "set-cookie-parser": "^2.6.0", + "sirv": "^3.0.0" + }, + "bin": { + "svelte-kit": "svelte-kit.js" + }, + "engines": { + "node": ">=18.13" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0", + "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + } + } + }, "node_modules/@sveltejs/vite-plugin-svelte": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.1.tgz", @@ -917,6 +983,13 @@ "vite": "^6.3.0 || ^7.0.0" } }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -1183,6 +1256,16 @@ "node": ">= 6" } }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -1522,6 +1605,16 @@ "jiti": "bin/jiti.js" } }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/lilconfig": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", @@ -1583,6 +1676,26 @@ "node": ">=8.6" } }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -2011,6 +2124,41 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "dev": true, + "license": "MIT" + }, + "node_modules/sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -2208,6 +2356,16 @@ "node": ">=8.0" } }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", diff --git a/frontend/package.json b/frontend/package.json index 73f5ee7..7945d57 100755 --- a/frontend/package.json +++ b/frontend/package.json @@ -9,11 +9,13 @@ "preview": "vite preview" }, "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^6.2.1", - "svelte": "^5.43.8", - "vite": "^7.2.4", - "tailwindcss": "^3.0.0", - "autoprefixer": "^10.4.0", - "postcss": "^8.4.0" + "@sveltejs/adapter-static": "^3.0.10", + "@sveltejs/kit": "^2.49.2", + "@sveltejs/vite-plugin-svelte": "^6.2.1", + "autoprefixer": "^10.4.0", + "postcss": "^8.4.0", + "svelte": "^5.43.8", + "tailwindcss": "^3.0.0", + "vite": "^7.2.4" } } diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte index 7f657aa..f14c465 100755 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -1,5 +1,5 @@ + +
@@ -101,4 +108,6 @@ {/if}
+ + diff --git a/frontend/src/app.html b/frontend/src/app.html new file mode 100644 index 0000000..6769ed5 --- /dev/null +++ b/frontend/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/frontend/src/components/DynamicForm.svelte b/frontend/src/components/DynamicForm.svelte index fa13921..95fb885 100755 --- a/frontend/src/components/DynamicForm.svelte +++ b/frontend/src/components/DynamicForm.svelte @@ -1,5 +1,5 @@ + +
{#if schema && schema.properties} {#each Object.entries(schema.properties) as [key, prop]} @@ -76,4 +83,6 @@ {/if}
- \ No newline at end of file + + + diff --git a/frontend/src/components/Footer.svelte b/frontend/src/components/Footer.svelte new file mode 100644 index 0000000..e1d9076 --- /dev/null +++ b/frontend/src/components/Footer.svelte @@ -0,0 +1,3 @@ +
+ © 2025 Superset Tools. All rights reserved. +
diff --git a/frontend/src/components/Navbar.svelte b/frontend/src/components/Navbar.svelte new file mode 100644 index 0000000..64fde12 --- /dev/null +++ b/frontend/src/components/Navbar.svelte @@ -0,0 +1,26 @@ + + +
+ + Superset Tools + + +
diff --git a/frontend/src/components/TaskRunner.svelte b/frontend/src/components/TaskRunner.svelte index 2c2dfef..105f32f 100755 --- a/frontend/src/components/TaskRunner.svelte +++ b/frontend/src/components/TaskRunner.svelte @@ -1,5 +1,5 @@ + +
{#if $selectedTask}

Task: {$selectedTask.plugin_id}

@@ -71,4 +80,6 @@

No task selected.

{/if}
- \ No newline at end of file + + + diff --git a/frontend/src/components/Toast.svelte b/frontend/src/components/Toast.svelte index 76fe42d..47fb11d 100755 --- a/frontend/src/components/Toast.svelte +++ b/frontend/src/components/Toast.svelte @@ -1,5 +1,5 @@ + +
{#each $toasts as toast (toast.id)}
+

Available Tools

@@ -37,6 +44,9 @@
selectPlugin(plugin)} + role="button" + tabindex="0" + on:keydown={(e) => e.key === 'Enter' && selectPlugin(plugin)} >

{plugin.name}

{plugin.description}

@@ -45,4 +55,6 @@ {/each}
- \ No newline at end of file + + + diff --git a/frontend/src/pages/Settings.svelte b/frontend/src/pages/Settings.svelte index c4d6cf0..a15e419 100755 --- a/frontend/src/pages/Settings.svelte +++ b/frontend/src/pages/Settings.svelte @@ -1,21 +1,21 @@ + +

Settings

@@ -211,4 +266,6 @@ None
+ + diff --git a/frontend/src/routes/+error.svelte b/frontend/src/routes/+error.svelte new file mode 100644 index 0000000..ffc95b1 --- /dev/null +++ b/frontend/src/routes/+error.svelte @@ -0,0 +1,11 @@ + + +
+

{$page.status}

+

{$page.error?.message || 'Page not found'}

+ + Back to Dashboard + +
diff --git a/frontend/src/routes/+layout.svelte b/frontend/src/routes/+layout.svelte new file mode 100644 index 0000000..2b4526b --- /dev/null +++ b/frontend/src/routes/+layout.svelte @@ -0,0 +1,17 @@ + + + + +
+ + +
+ +
+ +
+
diff --git a/frontend/src/routes/+layout.ts b/frontend/src/routes/+layout.ts new file mode 100644 index 0000000..83addb7 --- /dev/null +++ b/frontend/src/routes/+layout.ts @@ -0,0 +1,2 @@ +export const ssr = false; +export const prerender = false; diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte new file mode 100644 index 0000000..30d33dd --- /dev/null +++ b/frontend/src/routes/+page.svelte @@ -0,0 +1,71 @@ + + +
+ {#if $selectedTask} + + + {:else if $selectedPlugin} +

{$selectedPlugin.name}

+ + + {:else} +

Available Tools

+ {#if data.error} +
+ {data.error} +
+ {/if} +
+ {#each data.plugins as plugin} +
selectPlugin(plugin)} + role="button" + tabindex="0" + on:keydown={(e) => e.key === 'Enter' && selectPlugin(plugin)} + > +

{plugin.name}

+

{plugin.description}

+ v{plugin.version} +
+ {/each} +
+ {/if} +
diff --git a/frontend/src/routes/+page.ts b/frontend/src/routes/+page.ts new file mode 100644 index 0000000..9750392 --- /dev/null +++ b/frontend/src/routes/+page.ts @@ -0,0 +1,17 @@ +import { api } from '../lib/api'; + +/** @type {import('./$types').PageLoad} */ +export async function load() { + try { + const plugins = await api.getPlugins(); + return { + plugins + }; + } catch (error) { + console.error('Failed to load plugins:', error); + return { + plugins: [], + error: 'Failed to load plugins' + }; + } +} diff --git a/frontend/src/routes/settings/+page.svelte b/frontend/src/routes/settings/+page.svelte new file mode 100644 index 0000000..80d5529 --- /dev/null +++ b/frontend/src/routes/settings/+page.svelte @@ -0,0 +1,209 @@ + + +
+

Settings

+ + {#if data.error} +
+ {data.error} +
+ {/if} + +
+

Global Settings

+
+
+ + +
+ +
+
+ +
+

Superset Environments

+ + {#if settings.environments.length === 0} +
+

Warning

+

No Superset environments configured. You must add at least one environment to perform backups or migrations.

+
+ {/if} + +
+ + + + + + + + + + + + {#each settings.environments as env} + + + + + + + + {/each} + +
NameURLUsernameDefaultActions
{env.name}{env.url}{env.username}{env.is_default ? 'Yes' : 'No'} + + + +
+
+ +
+

{editingEnvId ? 'Edit' : 'Add'} Environment

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + {#if editingEnvId} + + {/if} +
+
+
+
diff --git a/frontend/src/routes/settings/+page.ts b/frontend/src/routes/settings/+page.ts new file mode 100644 index 0000000..91f7849 --- /dev/null +++ b/frontend/src/routes/settings/+page.ts @@ -0,0 +1,23 @@ +import { api } from '../../lib/api'; + +/** @type {import('./$types').PageLoad} */ +export async function load() { + try { + const settings = await api.getSettings(); + return { + settings + }; + } catch (error) { + console.error('Failed to load settings:', error); + return { + settings: { + environments: [], + settings: { + backup_path: '', + default_environment_id: null + } + }, + error: 'Failed to load settings' + }; + } +} diff --git a/frontend/svelte.config.js b/frontend/svelte.config.js index 47822f2..46769d8 100755 --- a/frontend/svelte.config.js +++ b/frontend/svelte.config.js @@ -1,13 +1,19 @@ -import { vitePreprocess } from '@sveltejs/vite-plugin-svelte' +import adapter from '@sveltejs/adapter-static'; +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; -/** @type {import("@sveltejs/vite-plugin-svelte").SvelteConfig} */ -export default { - // Consult https://svelte.dev/docs#compile-time-svelte-preprocess - // for more information about preprocessors - preprocess: vitePreprocess(), - compilerOptions: { - compatibility: { - componentApi: 4, - }, - }, -} +/** @type {import('@sveltejs/kit').Config} */ +const config = { + preprocess: vitePreprocess(), + + kit: { + adapter: adapter({ + pages: 'build', + assets: 'build', + fallback: 'index.html', + precompress: false, + strict: true + }) + } +}; + +export default config; diff --git a/frontend/vite.config.js b/frontend/vite.config.js index 2d8284e..1b5964e 100755 --- a/frontend/vite.config.js +++ b/frontend/vite.config.js @@ -1,32 +1,19 @@ -import { defineConfig } from 'vite' -import { svelte } from '@sveltejs/vite-plugin-svelte' +import { sveltekit } from '@sveltejs/kit/vite'; +import { defineConfig } from 'vite'; -// https://vite.dev/config/ export default defineConfig({ - plugins: [svelte()], - server: { - proxy: { - '/plugins': { - target: 'http://localhost:8000', - changeOrigin: true, - }, - '/tasks': { - target: 'http://localhost:8000', - changeOrigin: true, - }, - '/settings': { - target: 'http://localhost:8000', - changeOrigin: true, - }, - '/api': { - target: 'http://localhost:8000', - changeOrigin: true, - rewrite: (path) => path.replace(/^\/api/, ''), - }, - '/ws': { - target: 'ws://localhost:8000', - ws: true, - }, - }, - }, -}) + plugins: [sveltekit()], + server: { + proxy: { + '/api': { + target: 'http://localhost:8000', + changeOrigin: true, + rewrite: (path) => path.replace(/^\/api/, '') + }, + '/ws': { + target: 'ws://localhost:8000', + ws: true + } + } + } +}); diff --git a/specs/004-integrate-svelte-kit/checklists/requirements.md b/specs/004-integrate-svelte-kit/checklists/requirements.md new file mode 100644 index 0000000..f14c468 --- /dev/null +++ b/specs/004-integrate-svelte-kit/checklists/requirements.md @@ -0,0 +1,34 @@ +# Specification Quality Checklist: Integrate SvelteKit + +**Purpose**: Validate specification completeness and quality before proceeding to planning +**Created**: 2025-12-20 +**Feature**: [Link to spec.md](../spec.md) + +## Content Quality + +- [x] No implementation details (languages, frameworks, APIs) +- [x] Focused on user value and business needs +- [x] Written for non-technical stakeholders +- [x] All mandatory sections completed + +## Requirement Completeness + +- [x] No [NEEDS CLARIFICATION] markers remain +- [x] Requirements are testable and unambiguous +- [x] Success criteria are measurable +- [x] Success criteria are technology-agnostic (no implementation details) +- [x] All acceptance scenarios are defined +- [x] Edge cases are identified +- [x] Scope is clearly bounded +- [x] Dependencies and assumptions identified + +## Feature Readiness + +- [x] All functional requirements have clear acceptance criteria +- [x] User scenarios cover primary flows +- [x] Feature meets measurable outcomes defined in Success Criteria +- [x] No implementation details leak into specification + +## Notes + +- Spec updated to assume SPA mode and standard fetch, removing clarification needs. diff --git a/specs/004-integrate-svelte-kit/contracts/api.md b/specs/004-integrate-svelte-kit/contracts/api.md new file mode 100644 index 0000000..fdbc49a --- /dev/null +++ b/specs/004-integrate-svelte-kit/contracts/api.md @@ -0,0 +1,61 @@ +# API Contracts: SvelteKit Frontend + +The SvelteKit frontend will interact with the following existing backend API endpoints. + +## Settings API (`/api/settings`) + +### Get All Settings +- **Endpoint**: `GET /api/settings/` +- **Response**: `AppConfig` (JSON) +- **Usage**: Load initial configuration for the application. + +### Update Global Settings +- **Endpoint**: `PATCH /api/settings/global` +- **Request Body**: `GlobalSettings` (JSON) +- **Response**: `GlobalSettings` (JSON) +- **Usage**: Save changes to global settings. + +### List Environments +- **Endpoint**: `GET /api/settings/environments` +- **Response**: `List[Environment]` (JSON) +- **Usage**: Display configured Superset environments. + +### Add Environment +- **Endpoint**: `POST /api/settings/environments` +- **Request Body**: `Environment` (JSON) +- **Response**: `Environment` (JSON) +- **Usage**: Create a new environment configuration. + +### Update Environment +- **Endpoint**: `PUT /api/settings/environments/{id}` +- **Request Body**: `Environment` (JSON) +- **Response**: `Environment` (JSON) +- **Usage**: Modify an existing environment. + +### Delete Environment +- **Endpoint**: `DELETE /api/settings/environments/{id}` +- **Response**: `{"message": "..."}` +- **Usage**: Remove an environment. + +### Test Connection +- **Endpoint**: `POST /api/settings/environments/{id}/test` +- **Response**: `{"status": "success/error", "message": "..."}` +- **Usage**: Verify connectivity to a Superset instance. + +## Plugins API (`/api/plugins`) + +### List Plugins +- **Endpoint**: `GET /api/plugins/` +- **Response**: `List[PluginConfig]` (JSON) +- **Usage**: Display available plugins on the Dashboard. + +## Tasks API (`/api/tasks`) +*(Inferred from file list, used for running plugin tasks)* + +### List Tasks +- **Endpoint**: `GET /api/tasks/` +- **Usage**: Show active or historical tasks. + +### Run Task +- **Endpoint**: `POST /api/tasks/{plugin_id}` +- **Usage**: Execute a plugin-specific task. diff --git a/specs/004-integrate-svelte-kit/data-model.md b/specs/004-integrate-svelte-kit/data-model.md new file mode 100644 index 0000000..4d5d791 --- /dev/null +++ b/specs/004-integrate-svelte-kit/data-model.md @@ -0,0 +1,40 @@ +# Data Model: SvelteKit Integration + +## Entities + +### Route +Represents a navigable URL in the application. + +| Field | Type | Description | +|-------|------|-------------| +| `path` | String | The URL path (e.g., `/`, `/settings`) | +| `component` | Svelte Component | The page component to render | +| `data_requirements` | List | Backend data needed for this route | +| `layout` | Layout | The layout wrapping this route | + +**Validation Rules**: +- `path` must be unique. +- `path` must follow SvelteKit file-based routing conventions. + +### Layout +Represents a shared UI structure. + +| Field | Type | Description | +|-------|------|-------------| +| `name` | String | Identifier for the layout (e.g., `default`) | +| `components` | List | Shared components (Header, Footer, Sidebar) | +| `slot` | Placeholder | Where the route content is injected | + +## State Transitions + +### Navigation +1. **Trigger**: User clicks link or `goto(path)` is called. +2. **Action**: SvelteKit router intercepts the request. +3. **Data Fetching**: `load` function in `+page.ts` or `+layout.ts` is executed. +4. **Rendering**: The new page component is rendered within the layout. +5. **URL Update**: Browser history is updated. + +### Error Handling +1. **Trigger**: Navigation to non-existent path or API failure. +2. **Action**: SvelteKit renders `+error.svelte`. +3. **Display**: User-friendly error message with recovery options. diff --git a/specs/004-integrate-svelte-kit/plan.md b/specs/004-integrate-svelte-kit/plan.md new file mode 100644 index 0000000..cb1b1f9 --- /dev/null +++ b/specs/004-integrate-svelte-kit/plan.md @@ -0,0 +1,70 @@ +# Implementation Plan: Integrate SvelteKit + +**Branch**: `004-integrate-svelte-kit` | **Date**: 2025-12-20 | **Spec**: [specs/004-integrate-svelte-kit/spec.md](specs/004-integrate-svelte-kit/spec.md) +**Input**: Feature specification from `/specs/004-integrate-svelte-kit/spec.md` + +## Summary + +Integrate SvelteKit as the primary frontend framework to provide seamless navigation, improved data loading, and a unified layout. The application will be configured as a Static Single Page Application (SPA) to be served by the existing Python backend, preserving all existing functionality while leveraging modern framework features like file-based routing and shared layouts. + +## Technical Context + +**Language/Version**: Python 3.9+, Node.js 18+ +**Primary Dependencies**: SvelteKit, FastAPI, Tailwind CSS (inferred from existing frontend) +**Storage**: N/A (Frontend integration) +**Testing**: pytest (Backend), Vitest/Playwright (Frontend - SvelteKit defaults) +**Target Platform**: Linux server (SPA served by backend) +**Project Type**: Web application (frontend + backend) +**Performance Goals**: Page transition time < 200ms (SC-001) +**Constraints**: Must be deployable as a Static SPA (FR-003), no Node.js server in production (Assumptions) +**Scale/Scope**: Migration of existing Dashboard and Settings pages + +## Constitution Check + +*GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.* + +- **Principle Compliance**: The project constitution is currently in a template state. No specific violations identified. +- **Architecture Alignment**: The move to SvelteKit aligns with the goal of using modern frontend patterns while maintaining the "SPA served by backend" constraint. + +## Project Structure + +### Documentation (this feature) + +```text +specs/004-integrate-svelte-kit/ +├── plan.md # This file (/speckit.plan command output) +├── research.md # Phase 0 output (/speckit.plan command) +├── data-model.md # Phase 1 output (/speckit.plan command) +├── quickstart.md # Phase 1 output (/speckit.plan command) +├── contracts/ # Phase 1 output (/speckit.plan command) +└── tasks.md # Phase 2 output (/speckit.tasks command - NOT created by /speckit.plan) +``` + +### Source Code (repository root) + +```text +backend/ +├── src/ +│ ├── models/ +│ ├── services/ +│ └── api/ +└── tests/ + +frontend/ +├── src/ +│ ├── lib/ +│ ├── routes/ # SvelteKit file-based routing +│ └── app.html +├── static/ +└── tests/ +``` + +**Structure Decision**: Option 2: Web application. The project already has `backend/` and `frontend/` directories. SvelteKit will be integrated into the `frontend/` directory, replacing the current Svelte setup. + +## Complexity Tracking + +> **Fill ONLY if Constitution Check has violations that must be justified** + +| Violation | Why Needed | Simpler Alternative Rejected Because | +|-----------|------------|-------------------------------------| +| None | N/A | N/A | diff --git a/specs/004-integrate-svelte-kit/quickstart.md b/specs/004-integrate-svelte-kit/quickstart.md new file mode 100644 index 0000000..444c563 --- /dev/null +++ b/specs/004-integrate-svelte-kit/quickstart.md @@ -0,0 +1,51 @@ +# Quickstart: SvelteKit Integration + +This guide provides instructions for setting up and running the SvelteKit frontend integrated with the FastAPI backend. + +## Prerequisites +- Node.js 18+ +- Python 3.9+ +- `npm` + +## Frontend Setup + +1. **Initialize SvelteKit**: + ```bash + cd frontend + # (Assuming migration to SvelteKit structure) + npm install + ``` + +2. **Development Mode**: + Run the SvelteKit development server: + ```bash + npm run dev + ``` + The frontend will be available at `http://localhost:5173`. + +3. **Build for Production**: + Generate the static SPA files: + ```bash + npm run build + ``` + The output will be in the `frontend/build` directory. + +## Backend Setup + +1. **Install Dependencies**: + ```bash + cd backend + pip install -r requirements.txt + ``` + +2. **Run Backend**: + ```bash + python src/app.py + ``` + The backend will serve the static frontend files from `frontend/build`. + +## Verification Steps + +1. **Navigation**: Open `http://localhost:8000` (backend URL). Click on "Settings" and verify the URL changes to `/settings` without a page reload. +2. **Deep Linking**: Refresh the page at `http://localhost:8000/settings`. Verify the Settings page loads correctly. +3. **Data Loading**: Verify that the Dashboard correctly lists available plugins and Settings shows the current configuration. diff --git a/specs/004-integrate-svelte-kit/research.md b/specs/004-integrate-svelte-kit/research.md new file mode 100644 index 0000000..c6db7b0 --- /dev/null +++ b/specs/004-integrate-svelte-kit/research.md @@ -0,0 +1,45 @@ +# Research: SvelteKit Integration + +## Decision: SvelteKit SPA with FastAPI Backend + +### Rationale +SvelteKit provides a robust file-based routing system and shared layout mechanism that fulfills the requirements (FR-001, FR-002, FR-004, FR-005). By using `adapter-static` in SPA mode, we can generate a set of static files that can be served by the existing FastAPI backend, satisfying the constraint of no Node.js server in production (FR-003, Assumptions). + +### Alternatives Considered +- **Vanilla Svelte (Current)**: Lacks built-in routing and layout management, leading to manual implementation overhead. +- **SvelteKit with Node.js Server**: Rejected because the project requires the Python backend to be the primary server. +- **Inertia.js**: Requires more tight coupling between backend and frontend than desired for this project. + +## Technical Implementation Details + +### SvelteKit Configuration (SPA Mode) +1. **Adapter**: Use `@sveltejs/adapter-static`. +2. **Fallback**: Configure `fallback: 'index.html'` in `svelte.config.js`. +3. **Client-Side Rendering**: Create `src/routes/+layout.ts` with: + ```typescript + export const ssr = false; + export const prerender = false; + ``` + This ensures the entire app is treated as a SPA. + +### FastAPI Backend Integration +1. **Static Files**: Mount the `frontend/build` (or `dist`) directory using `StaticFiles`. +2. **SPA Routing**: Implement a catch-all route to serve `index.html` for any non-API request. This allows SvelteKit's client-side router to handle deep links like `/settings`. + ```python + @app.get("/{full_path:path}") + async def serve_spa(full_path: str): + # Check if path exists in static files, else serve index.html + ... + ``` + +### Migration Strategy +1. **Layout**: Move shared UI (header, footer) from `App.svelte` to `src/routes/+layout.svelte`. +2. **Routes**: + - `Dashboard.svelte` -> `src/routes/+page.svelte` (or `src/routes/dashboard/+page.svelte`) + - `Settings.svelte` -> `src/routes/settings/+page.svelte` +3. **API Client**: Reuse existing `frontend/src/lib/api.js` but ensure it works within SvelteKit's load functions if needed (though for pure SPA, standard `onMount` or reactive statements also work). + +## Best Practices +- Use SvelteKit's `$lib` alias for shared components and utilities. +- Leverage `+page.ts` `load` functions for data fetching to ensure data is ready before component mount (User Story 2). +- Use SvelteKit's `goto` for programmatic navigation. diff --git a/specs/004-integrate-svelte-kit/spec.md b/specs/004-integrate-svelte-kit/spec.md new file mode 100644 index 0000000..b6b8603 --- /dev/null +++ b/specs/004-integrate-svelte-kit/spec.md @@ -0,0 +1,87 @@ +# Feature Specification: Integrate SvelteKit + +**Feature Branch**: `004-integrate-svelte-kit` +**Created**: 2025-12-20 +**Status**: Draft +**Input**: User description: "Integrate SvelteKit into the project" + +## User Scenarios & Testing *(mandatory)* + +### User Story 1 - Seamless Navigation (Priority: P1) + +As a user, I want to navigate between different parts of the application (Dashboard, Settings) using standard URL paths so that I can bookmark pages and use the browser's back/forward buttons reliably. + +**Why this priority**: Core application usability and standard web behavior. + +**Independent Test**: Can be tested by clicking navigation links and verifying the URL changes and the correct content renders without a full page reload. + +**Acceptance Scenarios**: + +1. **Given** I am on the Dashboard, **When** I click the "Settings" link, **Then** the URL changes to `/settings` and the Settings page is displayed. +2. **Given** I am on `/settings`, **When** I refresh the page, **Then** the Settings page is still displayed (not redirected to home). + +--- + +### User Story 2 - Improved Data Loading (Priority: P2) + +As a developer, I want to use modern data loading patterns so that data is fetched efficiently before the page renders, reducing layout shifts and loading spinners. + +**Why this priority**: Improves user experience and developer productivity. + +**Independent Test**: Can be tested by observing the page load sequence and verifying that data is available to the component immediately upon mount. + +**Acceptance Scenarios**: + +1. **Given** a page requires data from the backend, **When** the page is navigated to, **Then** the data is fetched and ready before the content is fully visible. + +--- + +### User Story 3 - Unified Layout (Priority: P3) + +As a user, I want a consistent look and feel across all pages with a shared navigation bar and footer. + +**Why this priority**: Visual consistency and ease of use. + +**Independent Test**: Can be tested by navigating between pages and verifying that the header/footer remain static and do not re-render or flicker. + +**Acceptance Scenarios**: + +1. **Given** I am navigating between Dashboard and Settings, **When** the page changes, **Then** the top navigation bar remains visible and unchanged. + +--- + +### Edge Cases + +- **Invalid Routes**: When a user navigates to a non-existent URL, the system should display a user-friendly 404 error page with a link back to the dashboard. +- **API Failures during Load**: If the backend API is unavailable during a data load operation, the system should display a graceful error message or redirect to a dedicated error page. + +## Requirements *(mandatory)* + +### Functional Requirements + +- **FR-001**: System MUST use SvelteKit as the primary frontend framework. +- **FR-002**: System MUST implement file-based routing for all existing pages (Dashboard, Settings). +- **FR-003**: System MUST be deployable as a Static Single Page Application (SPA) to be served by the existing backend. +- **FR-004**: System MUST provide a shared layout mechanism for common UI elements (header, footer). +- **FR-005**: System MUST handle client-side navigation between routes without full page refreshes. +- **FR-006**: System MUST integrate with the existing backend API for data retrieval. +- **FR-007**: System MUST support data submission via existing API endpoints using standard asynchronous requests. + +### Key Entities *(include if feature involves data)* + +- **Route**: Represents a URL path and its associated page content and data requirements. +- **Layout**: Represents a shared UI structure that wraps multiple routes. + +## Success Criteria *(mandatory)* + +### Measurable Outcomes + +- **SC-001**: Page transition time between Dashboard and Settings is under 200ms. +- **SC-002**: 100% of existing frontend functionality is preserved after migration. +- **SC-003**: Application is accessible via direct URLs (e.g., `/settings`) without manual configuration of the web server for SPA routing. +- **SC-004**: Developer setup time for the frontend is reduced by using standard framework tooling. + +## Assumptions + +- The application will be deployed as a static site served by the Python backend (no Node.js server in production). +- Existing API endpoints are sufficient for the frontend needs. diff --git a/specs/004-integrate-svelte-kit/tasks.md b/specs/004-integrate-svelte-kit/tasks.md new file mode 100644 index 0000000..51172b5 --- /dev/null +++ b/specs/004-integrate-svelte-kit/tasks.md @@ -0,0 +1,166 @@ +# Tasks: Integrate SvelteKit + +**Input**: Design documents from `/specs/004-integrate-svelte-kit/` +**Prerequisites**: plan.md (required), spec.md (required for user stories), research.md, data-model.md, contracts/ + +**Tests**: Tests are NOT explicitly requested in the feature specification, so no test-specific tasks are included. Verification will be done via the "Independent Test" criteria for each story. + +**Organization**: Tasks are grouped by user story to enable independent implementation and testing of each story. + +## Format: `[ID] [P?] [Story] Description` + +- **[P]**: Can run in parallel (different files, no dependencies) +- **[Story]**: Which user story this task belongs to (e.g., US1, US2, US3) +- Include exact file paths in descriptions + +## Path Conventions + +- **Web app**: `backend/src/`, `frontend/src/` + +--- + +## Phase 1: Setup (Shared Infrastructure) + +**Purpose**: Project initialization and basic structure + +- [ ] T001 Initialize SvelteKit in `frontend/` directory (replacing current setup) +- [ ] T002 Install `@sveltejs/adapter-static` in `frontend/package.json` +- [ ] T003 [P] Configure `frontend/svelte.config.js` for static adapter and SPA fallback + +--- + +## Phase 2: Foundational (Blocking Prerequisites) + +**Purpose**: Core infrastructure that MUST be complete before ANY user story can be implemented + +**⚠️ CRITICAL**: No user story work can begin until this phase is complete + +- [ ] T004 Create `frontend/src/routes/+layout.ts` to disable SSR and prerendering (`ssr = false`, `prerender = false`) +- [ ] T005 Implement catch-all route in `backend/src/app.py` to serve `index.html` for SPA routing +- [ ] T006 [P] Update `backend/src/app.py` to mount `frontend/build` directory using `StaticFiles` +- [ ] T007 [P] Update `frontend/src/lib/api.js` to ensure compatibility with SvelteKit environment + +**Checkpoint**: Foundation ready - user story implementation can now begin in parallel + +--- + +## Phase 3: User Story 1 - Seamless Navigation (Priority: P1) 🎯 MVP + +**Goal**: Navigate between Dashboard and Settings using standard URL paths so that users can bookmark pages and use browser navigation. + +**Independent Test**: Click navigation links and verify the URL changes and the correct content renders without a full page reload. Verify deep linking by refreshing at `/settings`. + +### Implementation for User Story 1 + +- [ ] T008 [P] [US1] Create Dashboard route in `frontend/src/routes/+page.svelte` (migrating from `App.svelte`/`Dashboard.svelte`) +- [ ] T009 [P] [US1] Create Settings route in `frontend/src/routes/settings/+page.svelte` (migrating from `Settings.svelte`) +- [ ] T010 [US1] Implement navigation links between Dashboard and Settings in `frontend/src/routes/+page.svelte` and `frontend/src/routes/settings/+page.svelte` + +**Checkpoint**: At this point, User Story 1 should be fully functional and testable independently. + +--- + +## Phase 4: User Story 2 - Improved Data Loading (Priority: P2) + +**Goal**: Use modern data loading patterns so that data is fetched efficiently before the page renders. + +**Independent Test**: Observe the page load sequence and verify that data is available to the component immediately upon mount via the `data` prop. + +### Implementation for User Story 2 + +- [ ] T011 [P] [US2] Implement `load` function for Dashboard in `frontend/src/routes/+page.ts` to fetch plugins from `/api/plugins/` +- [ ] T012 [P] [US2] Implement `load` function for Settings in `frontend/src/routes/settings/+page.ts` to fetch config and environments from `/api/settings/` +- [ ] T013 [US2] Update `frontend/src/routes/+page.svelte` to use data from `load` function via `export let data;` +- [ ] T014 [US2] Update `frontend/src/routes/settings/+page.svelte` to use data from `load` function via `export let data;` + +**Checkpoint**: At this point, User Stories 1 AND 2 should both work independently. + +--- + +## Phase 5: User Story 3 - Unified Layout (Priority: P3) + +**Goal**: Consistent look and feel across all pages with a shared navigation bar and footer. + +**Independent Test**: Navigate between Dashboard and Settings and verify that the header/footer remain static and do not re-render or flicker. + +### Implementation for User Story 3 + +- [ ] T015 [US3] Create shared layout in `frontend/src/routes/+layout.svelte` with `` +- [ ] T016 [P] [US3] Move navigation bar component to `frontend/src/components/Navbar.svelte` and include in `+layout.svelte` +- [ ] T017 [P] [US3] Create footer component in `frontend/src/components/Footer.svelte` and include in `+layout.svelte` + +**Checkpoint**: All user stories should now be independently functional. + +--- + +## Phase 6: Polish & Cross-Cutting Concerns + +**Purpose**: Improvements that affect multiple user stories + +- [ ] T018 [P] Implement custom 404 error page in `frontend/src/routes/+error.svelte` +- [ ] T019 Add graceful error handling for API failures in `load` functions (T011, T012) +- [ ] T020 [P] Update `frontend/README.md` with new SvelteKit-based development and build instructions +- [ ] T021 Run `specs/004-integrate-svelte-kit/quickstart.md` validation + +--- + +## Dependencies & Execution Order + +### Phase Dependencies + +- **Setup (Phase 1)**: No dependencies - can start immediately +- **Foundational (Phase 2)**: Depends on Setup completion - BLOCKS all user stories +- **User Stories (Phase 3+)**: All depend on Foundational phase completion + - User stories can then proceed in parallel (if staffed) + - Or sequentially in priority order (P1 → P2 → P3) +- **Polish (Final Phase)**: Depends on all desired user stories being complete + +### User Story Dependencies + +- **User Story 1 (P1)**: Can start after Foundational (Phase 2) - No dependencies on other stories +- **User Story 2 (P2)**: Can start after Foundational (Phase 2) - Depends on US1 routes existing +- **User Story 3 (P3)**: Can start after Foundational (Phase 2) - Can be implemented independently of US1/US2 content + +### Within Each User Story + +- Models/Data fetching before UI implementation +- Core implementation before integration +- Story complete before moving to next priority + +### Parallel Opportunities + +- T003 (Svelte config) can run in parallel with other setup +- T006 (Backend mount) and T007 (API client) can run in parallel +- T008 (Dashboard route) and T009 (Settings route) can run in parallel +- T011 and T012 (Load functions) can run in parallel +- T016 and T017 (Navbar/Footer components) can run in parallel + +--- + +## Parallel Example: User Story 2 + +```bash +# Launch all load function implementations for User Story 2 together: +Task: "Implement load function for Dashboard in frontend/src/routes/+page.ts" +Task: "Implement load function for Settings in frontend/src/routes/settings/+page.ts" +``` + +--- + +## Implementation Strategy + +### MVP First (User Story 1 Only) + +1. Complete Phase 1: Setup +2. Complete Phase 2: Foundational (CRITICAL - blocks all stories) +3. Complete Phase 3: User Story 1 +4. **STOP and VALIDATE**: Test User Story 1 independently (Navigation and Deep Linking) +5. Deploy/demo if ready + +### Incremental Delivery + +1. Complete Setup + Foundational → Foundation ready +2. Add User Story 1 → Test independently → Deploy/Demo (MVP!) +3. Add User Story 2 → Test independently → Deploy/Demo +4. Add User Story 3 → Test independently → Deploy/Demo +5. Each story adds value without breaking previous stories