From 74cc87f8d252e170bddd006b8d9c0f316b0410bf Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Fri, 22 May 2026 00:47:17 +0200 Subject: [PATCH 01/34] feat: add PostgreSQL service configuration in docker-compose --- docker-compose.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 docker-compose.yml diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..7e771490d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,16 @@ +services: + postgres: + image: postgres:18-alpine + container_name: skycrypt-postgres + restart: unless-stopped + ports: + - ${DB_PORT:-5432}:5432 + environment: + - POSTGRES_USER=${DB_USER:-root} + - POSTGRES_PASSWORD=${DB_PASSWORD:-mysecretpassword} + - POSTGRES_DB=${DB_NAME:-skycrypt_frontend} + volumes: + - postgres_data:/var/lib/postgresql + +volumes: + postgres_data: From ac14068a1904913e89905d2ef17d0a052a32b5c9 Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Fri, 22 May 2026 00:47:36 +0200 Subject: [PATCH 02/34] chore: update deps and remove depricated options and deps --- .prettierrc | 1 - AGENTS.md | 1 - package.json | 25 +- pnpm-lock.yaml | 1056 +++++++++++++++++++++---------------------- pnpm-workspace.yaml | 1 - 5 files changed, 516 insertions(+), 568 deletions(-) diff --git a/.prettierrc b/.prettierrc index de8fdc28c..0f2cb621a 100644 --- a/.prettierrc +++ b/.prettierrc @@ -14,7 +14,6 @@ } } ], - "svelteStrictMode": true, "tailwindStylesheet": "./src/app.css", "tailwindAttributes": ["class", "class:*", "class:name", "payload"], "tailwindFunctions": ["cn"], diff --git a/AGENTS.md b/AGENTS.md index f103a4224..6d8628bab 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -140,7 +140,6 @@ All content injection uses Svelte 5 snippets. No `` usage. ### Formatting - Prettier: double quotes, no trailing comma, `printWidth: 999999`, `bracketSameLine: true` -- `svelteStrictMode: true` — enforces Svelte best practices - Conventional commits enforced via commitlint + simple-git-hooks ## ANTI-PATTERNS diff --git a/package.json b/package.json index 5f54bef86..5433ae179 100644 --- a/package.json +++ b/package.json @@ -54,39 +54,38 @@ "@tailwindcss/vite": "^4.3.0", "@types/culori": "^4.0.1", "@types/eslint": "^9.6.1", - "@types/node": "^25.8.0", + "@types/node": "^25.9.1", "@types/relaxed-json": "^1.0.4", "@types/upng-js": "^2.1.5", - "@vitest/browser-playwright": "^4.1.6", - "@vitest/coverage-v8": "^4.1.6", - "@vitest/ui": "^4.1.6", + "@vitest/browser-playwright": "^4.1.7", + "@vitest/coverage-v8": "^4.1.7", + "@vitest/ui": "^4.1.7", "bits-ui": "^2.18.1", "clsx": "^2.1.1", - "date-fns": "^4.1.0", + "date-fns": "^4.2.1", "devalue": "^5.8.1", "dotenv-cli": "^11.0.0", - "eslint": "^10.3.0", + "eslint": "^10.4.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-svelte": "^3.17.1", "formsnap": "^2.0.1", "globals": "^17.6.0", "ky": "^2.0.2", "numerable": "^0.3.15", - "orval": "^8.10.0", + "orval": "^8.11.0", "paneforge": "^1.0.2", "playwright": "^1.60.0", "prettier": "^3.8.3", - "prettier-plugin-svelte": "^3.5.2", + "prettier-plugin-svelte": "^4.0.0", "prettier-plugin-tailwindcss": "^0.8.0", "pretty-ms": "^9.3.0", "runed": "^0.37.1", "satori-html": "^0.3.2", "skinview3d": "^3.4.2", "super-sitemap": "^1.0.12", - "svelte": "^5.55.7", + "svelte": "^5.55.9", "svelte-check": "^4.4.8", "svelte-persisted-store": "^0.12.0", - "svelte-preprocess": "^6.0.3", "svelte-seo": "^2.0.0", "svelte-sonner": "^1.1.1", "svelte-tiny-virtual-list": "4.0.0-rc.2", @@ -96,10 +95,10 @@ "tailwindcss-motion": "^1.1.1", "tslib": "^2.8.1", "typescript": "^6.0.3", - "typescript-eslint": "^8.59.3", + "typescript-eslint": "^8.59.4", "vaul-svelte": "1.0.0-next.7", "vite": "^8.0.13", - "vitest": "^4.1.6", + "vitest": "^4.1.7", "vitest-browser-svelte": "^2.1.1", "zod": "^4.4.3" }, @@ -107,7 +106,7 @@ "@sentry/sveltekit": "^10.53.1", "culori": "^4.0.2", "simple-git-hooks": "^2.13.1", - "takumi-js": "1.1.2" + "takumi-js": "1.3.0" }, "engines": { "node": "^24", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3471fe751..64121e11a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@sentry/sveltekit': specifier: ^10.53.1 - version: 10.53.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(rollup@4.60.4)(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + version: 10.53.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(rollup@4.60.4)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) culori: specifier: ^4.0.2 version: 4.0.2 @@ -18,15 +18,15 @@ importers: specifier: ^2.13.1 version: 2.13.1 takumi-js: - specifier: 1.1.2 - version: 1.1.2 + specifier: 1.3.0 + version: 1.3.0 devDependencies: '@changesets/cli': specifier: ^2.31.0 - version: 2.31.0(@types/node@25.8.0) + version: 2.31.0(@types/node@25.9.1) '@commitlint/cli': specifier: ^21.0.1 - version: 21.0.1(@types/node@25.8.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3) + version: 21.0.1(@types/node@25.9.1)(conventional-commits-parser@6.4.0)(typescript@6.0.3) '@commitlint/config-conventional': specifier: ^21.0.1 version: 21.0.1 @@ -47,16 +47,16 @@ importers: version: 0.4.0 '@dnd-kit/svelte': specifier: ^0.4.0 - version: 0.4.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + version: 0.4.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)) '@eslint/compat': specifier: ^2.1.0 - version: 2.1.0(eslint@10.3.0(jiti@2.7.0)) + version: 2.1.0(eslint@10.4.0(jiti@2.7.0)) '@eslint/js': specifier: ^10.0.1 - version: 10.0.1(eslint@10.3.0(jiti@2.7.0)) + version: 10.0.1(eslint@10.4.0(jiti@2.7.0)) '@lucide/svelte': specifier: ^1.16.0 - version: 1.16.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + version: 1.16.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)) '@oslojs/crypto': specifier: ^1.0.1 version: 1.0.1 @@ -68,19 +68,19 @@ importers: version: 1.60.0 '@sveltejs/adapter-node': specifier: ^5.5.4 - version: 5.5.4(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))) + version: 5.5.4(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))) '@sveltejs/kit': specifier: ^2.60.1 - version: 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + version: 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) '@sveltejs/vite-plugin-svelte': specifier: ^7.1.2 - version: 7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + version: 7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) '@svitejs/changesets-changelog-github-compact': specifier: ^1.2.0 version: 1.2.0 '@tailwindcss/vite': specifier: ^4.3.0 - version: 4.3.0(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + version: 4.3.0(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) '@types/culori': specifier: ^4.0.1 version: 4.0.1 @@ -88,8 +88,8 @@ importers: specifier: ^9.6.1 version: 9.6.1 '@types/node': - specifier: ^25.8.0 - version: 25.8.0 + specifier: ^25.9.1 + version: 25.9.1 '@types/relaxed-json': specifier: ^1.0.4 version: 1.0.4 @@ -97,23 +97,23 @@ importers: specifier: ^2.1.5 version: 2.1.5 '@vitest/browser-playwright': - specifier: ^4.1.6 - version: 4.1.6(playwright@1.60.0)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.6) + specifier: ^4.1.7 + version: 4.1.7(playwright@1.60.0)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.7) '@vitest/coverage-v8': - specifier: ^4.1.6 - version: 4.1.6(@vitest/browser@4.1.6)(vitest@4.1.6) + specifier: ^4.1.7 + version: 4.1.7(@vitest/browser@4.1.7)(vitest@4.1.7) '@vitest/ui': - specifier: ^4.1.6 - version: 4.1.6(vitest@4.1.6) + specifier: ^4.1.7 + version: 4.1.7(vitest@4.1.7) bits-ui: specifier: ^2.18.1 - version: 2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + version: 2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) clsx: specifier: ^2.1.1 version: 2.1.1 date-fns: - specifier: ^4.1.0 - version: 4.1.0 + specifier: ^4.2.1 + version: 4.2.1 devalue: specifier: ^5.8.1 version: 5.8.1 @@ -121,17 +121,17 @@ importers: specifier: ^11.0.0 version: 11.0.0 eslint: - specifier: ^10.3.0 - version: 10.3.0(jiti@2.7.0) + specifier: ^10.4.0 + version: 10.4.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + version: 10.1.8(eslint@10.4.0(jiti@2.7.0)) eslint-plugin-svelte: specifier: ^3.17.1 - version: 3.17.1(eslint@10.3.0(jiti@2.7.0))(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + version: 3.17.1(eslint@10.4.0(jiti@2.7.0))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) formsnap: specifier: ^2.0.1 - version: 2.0.1(svelte@5.55.7(@typescript-eslint/types@8.59.3))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)) + version: 2.0.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)) globals: specifier: ^17.6.0 version: 17.6.0 @@ -142,11 +142,11 @@ importers: specifier: ^0.3.15 version: 0.3.15 orval: - specifier: ^8.10.0 - version: 8.10.0(prettier@3.8.3)(typescript@6.0.3) + specifier: ^8.11.0 + version: 8.11.0(prettier@3.8.3)(typescript@6.0.3) paneforge: specifier: ^1.0.2 - version: 1.0.2(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + version: 1.0.2(svelte@5.55.9(@typescript-eslint/types@8.59.4)) playwright: specifier: ^1.60.0 version: 1.60.0 @@ -154,17 +154,17 @@ importers: specifier: ^3.8.3 version: 3.8.3 prettier-plugin-svelte: - specifier: ^3.5.2 - version: 3.5.2(prettier@3.8.3)(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + specifier: ^4.0.0 + version: 4.0.0(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)) prettier-plugin-tailwindcss: specifier: ^0.8.0 - version: 0.8.0(prettier-plugin-svelte@3.5.2(prettier@3.8.3)(svelte@5.55.7(@typescript-eslint/types@8.59.3)))(prettier@3.8.3) + version: 0.8.0(prettier-plugin-svelte@4.0.0(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)))(prettier@3.8.3) pretty-ms: specifier: ^9.3.0 version: 9.3.0 runed: specifier: ^0.37.1 - version: 0.37.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(zod@4.4.3) + version: 0.37.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(zod@4.4.3) satori-html: specifier: ^0.3.2 version: 0.3.2 @@ -173,31 +173,28 @@ importers: version: 3.4.2 super-sitemap: specifier: ^1.0.12 - version: 1.0.12(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + version: 1.0.12(svelte@5.55.9(@typescript-eslint/types@8.59.4)) svelte: - specifier: ^5.55.7 - version: 5.55.7(@typescript-eslint/types@8.59.3) + specifier: ^5.55.9 + version: 5.55.9(@typescript-eslint/types@8.59.4) svelte-check: specifier: ^4.4.8 - version: 4.4.8(picomatch@4.0.4)(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3) + version: 4.4.8(picomatch@4.0.4)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3) svelte-persisted-store: specifier: ^0.12.0 - version: 0.12.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)) - svelte-preprocess: - specifier: ^6.0.3 - version: 6.0.3(@babel/core@7.29.0)(postcss-load-config@3.1.4(postcss@8.5.14))(postcss@8.5.14)(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3) + version: 0.12.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)) svelte-seo: specifier: ^2.0.0 - version: 2.0.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + version: 2.0.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)) svelte-sonner: specifier: ^1.1.1 - version: 1.1.1(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + version: 1.1.1(svelte@5.55.9(@typescript-eslint/types@8.59.4)) svelte-tiny-virtual-list: specifier: 4.0.0-rc.2 - version: 4.0.0-rc.2(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + version: 4.0.0-rc.2(svelte@5.55.9(@typescript-eslint/types@8.59.4)) sveltekit-superforms: specifier: ^2.30.1 - version: 2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3) + version: 2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3) tailwind-merge: specifier: ^3.6.0 version: 3.6.0 @@ -214,20 +211,20 @@ importers: specifier: ^6.0.3 version: 6.0.3 typescript-eslint: - specifier: ^8.59.3 - version: 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + specifier: ^8.59.4 + version: 8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3) vaul-svelte: specifier: 1.0.0-next.7 - version: 1.0.0-next.7(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + version: 1.0.0-next.7(svelte@5.55.9(@typescript-eslint/types@8.59.4)) vite: specifier: ^8.0.13 - version: 8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) + version: 8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) vitest: - specifier: ^4.1.6 - version: 4.1.6(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/browser-playwright@4.1.6)(@vitest/coverage-v8@4.1.6)(@vitest/ui@4.1.6)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + specifier: ^4.1.7 + version: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) vitest-browser-svelte: specifier: ^2.1.1 - version: 2.1.1(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vitest@4.1.6) + version: 2.1.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) zod: specifier: ^4.4.3 version: 4.4.3 @@ -676,8 +673,8 @@ packages: resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/config-helpers@0.5.5': - resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==} + '@eslint/config-helpers@0.6.0': + resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/core@1.2.1': @@ -980,43 +977,43 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 - '@orval/angular@8.10.0': - resolution: {integrity: sha512-MAamzCA68K796MwgmS1WEnVrDIDeMm3iv2fmKtz8oOhYxjVRDLX+Bh3dgsoGPmQwCN1x8xMHdHW1c6vrnIZCCA==} + '@orval/angular@8.11.0': + resolution: {integrity: sha512-L6vl2gX0Bn9Wn3b00juWpM+UZJlUT0EaTyWKFMzllq3rU+vL1yItAioL2SmTVeJghSktshB31wYX0YqL5JnUbQ==} - '@orval/axios@8.10.0': - resolution: {integrity: sha512-i5RLA1fJ+DW8sgVK3A71YfvugBNurfb78jxXUgiPBrCVw7jVzxnuZT3hYv3ABsMfpk3lyONcO/o1EGzOwLsB3A==} + '@orval/axios@8.11.0': + resolution: {integrity: sha512-cwD9XEQEvWfEZrjTDvmMKwbY63LqlGVQzZdCVEcVrxP+KohaFBMIBIUmgL2Y5twkKEg08IxnzI8+M4K2PbpJ0w==} - '@orval/core@8.10.0': - resolution: {integrity: sha512-JKO1sPNCVjp5ktIP9xl06XcnEFkXQAw65q9gxzXBrBR8i3+ifMRF9UESuwGJvvMZJMZofT0IKp2zbKONZyG5RA==} + '@orval/core@8.11.0': + resolution: {integrity: sha512-E4scpBLgmUsz1OLSXT/A66a2+w/F4syBwgVp+iI4Ex6KSMMBEfUJVpfi3U6zSHSALauMNrloSBywq/F67DvOcQ==} peerDependencies: '@faker-js/faker': '>=10' peerDependenciesMeta: '@faker-js/faker': optional: true - '@orval/fetch@8.10.0': - resolution: {integrity: sha512-U4tBjhzXeBJKvqx3xJG9OK95XLFKhPtdgPu2VPwq3SN2WE/xEkbdZnSz1pF0N9IAAG9mHuFIMz/C+H//TdT+ZQ==} + '@orval/fetch@8.11.0': + resolution: {integrity: sha512-tiCRJgEl7CUntzbntkf/lsKkUNgCn8sdyPfIS8M0W8NVQVzAQvP4PwPHoY4/syOhK7zQje2pwLm/HAfz+9XyDg==} - '@orval/hono@8.10.0': - resolution: {integrity: sha512-hWqBXaycTOaXWAMwh7YV7Y8ff72xRRRIh+8NnhfVIT2IKf5/r43rv6Q9wpV9CtFR/ciquVUZHejuIJFUr0RrRw==} + '@orval/hono@8.11.0': + resolution: {integrity: sha512-g0Ht6J/9Hcto8UjJzhNQZk/5/uhPOu928Qrog3vCVHOXHvt/6k4al76hABf00xDnizbNApUQ54JS27rs1v98KA==} - '@orval/mcp@8.10.0': - resolution: {integrity: sha512-IiLMvr/NZKZxmSgZvvnsA4iXH93CF/SdSQN1SBmvQtpWVhinHOLKGFjH/iXJm6byxiw0SjWsI/4BaL7/WhPbew==} + '@orval/mcp@8.11.0': + resolution: {integrity: sha512-1PMOdJvntWOGn67IV1Vn8oWMOImx/kH1YftumlK9FxJc/meMbjGNNYohhumedqSPcIjdtekzDNKrqvC0utWRAg==} - '@orval/mock@8.10.0': - resolution: {integrity: sha512-oVfEs89/7G7PorEHE/spHr4FRpONvDX7DB5h+VWsGYY8k/uuHeIRPfQBlsFTe4yilblFypAka9nD/7uDKAuzVQ==} + '@orval/mock@8.11.0': + resolution: {integrity: sha512-hch3Jhgrm/XcCV6e+w3uv+4RRcAY3WPHdQoMMog3PfB9ocSgM+80CRv8GhJTK2U4oesUYanYlHa8zqLs9HF+4g==} - '@orval/query@8.10.0': - resolution: {integrity: sha512-gnztWtnIeGDUHdeiAcLzMkGJ0dvq+vfrwEzOthM7nSBNsnT8RV1beS7xwXdERPcvP89GnSkZ7RZ+2zKy31FF6w==} + '@orval/query@8.11.0': + resolution: {integrity: sha512-+VKldxLOGvcn6mf5tWFz/7LKimCRvN5jp8kSv4wJCniSr95rAjWjYr2kUz9gvKHs38CiPX/yWJIZIMCTpvXeoA==} - '@orval/solid-start@8.10.0': - resolution: {integrity: sha512-sFB2OZeVxHw7+LD9cwGe+CbU0I41UAZt+fuZ/AwCt8Q5scHlIzRmmIEDuQQ7ElB6vqa5vc+wsffCx+/rlvD0aw==} + '@orval/solid-start@8.11.0': + resolution: {integrity: sha512-NomnUGbt8PwGR+st+vH6YmvWSoeuut628rxBMDnM2j2HNln4qat4iOuwxYbyu1s9do7sdgR7R08spVRQ07J1ng==} - '@orval/swr@8.10.0': - resolution: {integrity: sha512-a/pMtv5Y8WF7TWkvttL1UvcOnkprcNwScCRZ2+zVfNeShlIu9/+FEpSE3n2YCcMYBNo+ZZLCe7/i2Fr57JhaMg==} + '@orval/swr@8.11.0': + resolution: {integrity: sha512-yhKAF3JsiwONrLvuFEqWlHFDtDrrbPXSUijufmB02ZCzV8T+9vavLRW2bZV1M3StqophQ425yPaxw69g2eqh1Q==} - '@orval/zod@8.10.0': - resolution: {integrity: sha512-3OyEXdcm/j4Qqj/TFz/xpsgP4swANH6Vd2WHLLDbzj2ed7zIzfLM/H8iPSErO49cioGLazYsxQawIX8/SyZq7A==} + '@orval/zod@8.11.0': + resolution: {integrity: sha512-/VcupTOIoE+pZgPO9/2fEy4GDzxcIrN+p/l14/sfxzOyOoeRRCyOPuIv1HMkXILYfFmo9PJTwbaPwxOSquErdA==} '@oslojs/asn1@1.0.0': resolution: {integrity: sha512-zw/wn0sj0j0QKbIXfIlnEcTviaCzYOY3V5rAyjR6YtOByFtJiT574+8p9Wlach0lZH9fddD4yb9laEAIl4vXQA==} @@ -1553,8 +1550,8 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@sveltejs/acorn-typescript@1.0.9': - resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==} + '@sveltejs/acorn-typescript@1.0.10': + resolution: {integrity: sha512-4WfKk68eTih+MiJD4fSbxN7E8kVBmTMPWHUPYjvl2N0rMs53YLTT8/YjKU5Dtnz5LqDjl7LEw4U7lXR2W3J5WA==} peerDependencies: acorn: ^8.9.0 @@ -1687,64 +1684,64 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 - '@takumi-rs/core-darwin-arm64@1.1.2': - resolution: {integrity: sha512-CLPzikYAND2xFm0Lg5HKImCOnl+Sue4F/WIcm1Z2ykL7h2r9rWDBzcFqGhAEFj9onMJH6c60Mph8kDa1jdj2rQ==} + '@takumi-rs/core-darwin-arm64@1.3.0': + resolution: {integrity: sha512-UaBr7xgDW50VXXlulAwBYNrTGqUYevSUcxEa+kJUvpCGAMJO5BhqpVcWLGj7hGSdv0SrLKth8Vv+IDg9aNOwvw==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [arm64] os: [darwin] - '@takumi-rs/core-darwin-x64@1.1.2': - resolution: {integrity: sha512-eH351x+BJOMdLQgUoVKEIfTQbBjR6Dv7rzTLZUdWwbbwjEe38geCNsxQunHQ96nsB7M+0sGc8aJjOkd+0qoK3g==} + '@takumi-rs/core-darwin-x64@1.3.0': + resolution: {integrity: sha512-TBy0RJIeoDGKHl/fjHaPGCk8ZH2v+uhszuHVFCwcje3zLl7eoHTojE5Npyl8pLVrRuvl+6nlYR15yK6/EXubDg==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [x64] os: [darwin] - '@takumi-rs/core-linux-arm64-gnu@1.1.2': - resolution: {integrity: sha512-2cuSnKWAfQjQwS+7aprz0LRkztPVsGqWGTto0TydVI81z7sNyC4kZWoJMTpkNb3439HB03UBStQVacgUeVOL+w==} + '@takumi-rs/core-linux-arm64-gnu@1.3.0': + resolution: {integrity: sha512-dTEMey9VmaH/4aOWFtiwSAVYGRuqRPSZ0jFAN+Lruheoj7ByY4xmygUbB6OuF2Ly7gVhfAs0NK89Zdjy0/+GBw==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [arm64] os: [linux] libc: [glibc] - '@takumi-rs/core-linux-arm64-musl@1.1.2': - resolution: {integrity: sha512-7OIdvVy6lbr49LIBe96uvlOg4Awmye5w+DgL4d0rRi1Zv7bmY23ciBCGaM+7jjkZgcThGrlZKz1Ecopx56pPqA==} + '@takumi-rs/core-linux-arm64-musl@1.3.0': + resolution: {integrity: sha512-Q1/soPJ/xMby+vrMc0isUzxe5MCy7kzizhwa8pMvCvXIddDDnc4OT6HQ5iNtHG6Apg7DaWno43bqUGdCaVWuxQ==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [arm64] os: [linux] libc: [musl] - '@takumi-rs/core-linux-x64-gnu@1.1.2': - resolution: {integrity: sha512-IXEhQjGSGye+kwawDad00kN2cLpj1rPF5u0K4KsANvWxa/dho32Nnw+RX8cCtPGiuvEKhtENxtdc7pVSx1E84g==} + '@takumi-rs/core-linux-x64-gnu@1.3.0': + resolution: {integrity: sha512-mH+GuATAbU3MkDFtsCIsK7n8wutgJ94hz7HozytbTHYiEk7dFe9gIfLeQKkdYdoKvE1FjDHTOLsvXZHfZ45lYw==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [x64] os: [linux] libc: [glibc] - '@takumi-rs/core-linux-x64-musl@1.1.2': - resolution: {integrity: sha512-Q2vuZCwQ/XmHwwbJxSKNNEKdWdhsvBMhTF8pyyGti5s44yx7W6+a0MkDdMRAkStzDhH6HeZlpknpHcUk4R4g8w==} + '@takumi-rs/core-linux-x64-musl@1.3.0': + resolution: {integrity: sha512-piNl5R9X3bG0stMzUZfA5nSabKyX4tgghCVHeov7YHuy9KV1cdaqZWV0g5xwEwRX6mukn5O3lob7DNdIkGZrrQ==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [x64] os: [linux] libc: [musl] - '@takumi-rs/core-win32-arm64-msvc@1.1.2': - resolution: {integrity: sha512-CKpslxYCltih/lL+h7xkVzsfIZtDcXp3WGk01fudgx82Ic87b/jjRMX5KE4f/exkgrKxshRF4yCQGGeQ3vIhiw==} + '@takumi-rs/core-win32-arm64-msvc@1.3.0': + resolution: {integrity: sha512-Kipcon2DS5FeTwPHLjvFg/YVRgbW/w3V7m4Z58TPHNSFyakMfEVqF9/mz8CLjWFZJxUUKI/MsVMu95UhwyKLKg==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [arm64] os: [win32] - '@takumi-rs/core-win32-x64-msvc@1.1.2': - resolution: {integrity: sha512-c+n2vPpDscMuTHZ29eJp8did5tlJ/KKBKicc51D6AdkA5jhr7MLeryzIKe3ob59iQttWYd/1j4+tUwoO6yEusg==} + '@takumi-rs/core-win32-x64-msvc@1.3.0': + resolution: {integrity: sha512-2qgKRPS8d3tNKh/XU9ZdXphujuoeuhyQOoTI/iEE0+TvceZKt6hqGqjIjWTi9UPTXGeUJWChIHXrrOyLnzex0Q==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [x64] os: [win32] - '@takumi-rs/core@1.1.2': - resolution: {integrity: sha512-JI0kUis5MCPzOt2sCahBZLVJERpp1t1fXTRBaBbCGploUa/hqRA9HW6Nr+tccDM/C6wy9FDrJnI4SB56W0HfDA==} + '@takumi-rs/core@1.3.0': + resolution: {integrity: sha512-pPv7Nd7l8dCfh969SfJUvEK7fovSkLro5TquKVMsT0kROFX4HJ5cbkRfp2MNYYrfYFSoNAzvto+JrcVqV5+MhA==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} - '@takumi-rs/helpers@1.1.2': - resolution: {integrity: sha512-Edvmk7UzPhlbUCYpIqeBBfq9h/lAeWAhtwIhJJ10vxv7qNWjgfIPakzNWeAYhFVj8KT5y47S3RLT3cKVniqI5g==} + '@takumi-rs/helpers@1.3.0': + resolution: {integrity: sha512-Qmi5YBBZSv5OjZTgOsn0zJqPjOrFcD8ft2vkD4THvfKwGt9Rv8g+qzw70dYvz39uNVsTeQynAEVbslfwoIlb9g==} peerDependencies: react: ^19.2.5 react-dom: ^18.0.0 || ^19.0.0 @@ -1754,8 +1751,8 @@ packages: react-dom: optional: true - '@takumi-rs/wasm@1.1.2': - resolution: {integrity: sha512-in2kLgFp6nuXie5q7blvRk8m/3UuvNDtc5SEFUh6Eu2yn20PcElj1VMdXhQhn+IN0h119BUWWdJ3AuEuh8PiDg==} + '@takumi-rs/wasm@1.3.0': + resolution: {integrity: sha512-WadZuvxsjORg7qX+WhHblucJc1EtKlhCk1hz6Qm5tnuiu2CSlODD2Jv3haxIMRcmp6XmnfwLZcCGEu4lStrA2w==} '@testing-library/svelte-core@1.0.0': resolution: {integrity: sha512-VkUePoLV6oOYwSUvX6ShA8KLnJqZiYMIbP2JW2t0GLWLkJxKGvuH5qrrZBV/X7cXFnLGuFQEC7RheYiZOW68KQ==} @@ -1805,8 +1802,8 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@25.8.0': - resolution: {integrity: sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==} + '@types/node@25.9.1': + resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} '@types/pg-pool@2.0.7': resolution: {integrity: sha512-U4CwmGVQcbEuqpyju8/ptOKg6gEC+Tqsvj2xS9o1g71bUh8twxnC6ZL5rZKCsGN0iyH0CwgUyc9VR5owNQF9Ng==} @@ -1860,63 +1857,63 @@ packages: '@types/json-schema': optional: true - '@typescript-eslint/eslint-plugin@8.59.3': - resolution: {integrity: sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==} + '@typescript-eslint/eslint-plugin@8.59.4': + resolution: {integrity: sha512-PegsU+XfyJJNjd4+u/k6f9yTyp0lEXXiPopUNobZcIAUJFGICFLN+sP0Rb3JehVmiij1Ph0dFGYqODoRo/2+6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.59.3 + '@typescript-eslint/parser': ^8.59.4 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.59.3': - resolution: {integrity: sha512-HPwA+hVkfcriajbNvTmZv4VRauibay+cWArYUYq7u7W7PmGShMxbPxLvrwDme55a6d5alG3nrYfhyJ/G28XlLg==} + '@typescript-eslint/parser@8.59.4': + resolution: {integrity: sha512-zORHqO/tuhxY1zWuTvMUqddRxpiFJ72xVfcNoWpqdLjs6lfPbuQBJuW4pk+49/uBMy7Ssr4bzgjiKmmDB1UbZQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.59.3': - resolution: {integrity: sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==} + '@typescript-eslint/project-service@8.59.4': + resolution: {integrity: sha512-Ly00Vu4oAacfDeHp2Zg85ioNG6l8HG+tN1D7J+xTHSxu9y0awYKJ2zH1rFBn8ZSfuGK+7FxK3Cgl3uAz0aZZLg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.59.3': - resolution: {integrity: sha512-t2LvZnoEfzKtnPjgeEu41xw5gxq9mQVfYy4OoZ4Vlt0sk3JwxmhCca/AR7DwOiHrjWgjAj6as4AhRLKSDfvZIA==} + '@typescript-eslint/scope-manager@8.59.4': + resolution: {integrity: sha512-mUeR/3H1WrTAddJrwut8OoPjfauaztMQmRwV5fQTUyNVJCLiUXXe4lGEyYIL2oFDpP7UtgbGJXCt72wT0z2S3Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.59.3': - resolution: {integrity: sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==} + '@typescript-eslint/tsconfig-utils@8.59.4': + resolution: {integrity: sha512-DLCpnKgD4alVxTBSKulK+gU1KCqOgUXfDRDXh2mZgzokQKa/70ax93I2uVO3m/LLvIAtWZIFoiifudmIqAxpMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.59.3': - resolution: {integrity: sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==} + '@typescript-eslint/type-utils@8.59.4': + resolution: {integrity: sha512-uonTuPAAKr9XaBGqJ3LjYTh72zy5DyGesljO9gtmk/eFW0W1fRHjnwVYKB35Lm8d5Q5CluEW3gPHjTvZTmgrfA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.59.3': - resolution: {integrity: sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==} + '@typescript-eslint/types@8.59.4': + resolution: {integrity: sha512-F1o7WJcCq+bc8dwcO/YsSEOudAH8RDtaOhM6wcAQhcUsFhnWQl81JKy48q1hoxAU0qrzM89+31GYh1515Zde3Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.59.3': - resolution: {integrity: sha512-CbRjVRAf7Lr9Kr8RopKcbY45p2VfmmHrm0ygOCYFi7oU8q19m0Fs/6iHS7kNOmwpp+ob07ZVcAqlxUod9lYdmg==} + '@typescript-eslint/typescript-estree@8.59.4': + resolution: {integrity: sha512-F+RuOmcDXo4+TPdfd/TCLS3m2nw8gE9XXyZLrA3JBfaA5tz9TtdkyD3YJFmPxulyc2cKbEok/CvFE3MgSLWnag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.59.3': - resolution: {integrity: sha512-JAvT14goBzRzzzZyqq3P9BLArIxTtQURUtFgQ/V7FO+eU+Gg6ES+5ymOPP1wRxXcxAYeivCk4uS3jCKWI1K8Zg==} + '@typescript-eslint/utils@8.59.4': + resolution: {integrity: sha512-cYXeNAUsG4lJo5dbc1FcKm+JwIWrj1/UpTORsC6tGMjEZ81DYcvIr9/ueikhMa/Y/gDQYGp+YX9/xQrXje5BJw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.59.3': - resolution: {integrity: sha512-f1UQF7ggd42YiwI5wGrRaPsa+P0CINBlrkLPmGfpq/u/I/oVtecoEIfFR9ag/oa1sLOsRNZ6xehf6qMZhQGBDg==} + '@typescript-eslint/visitor-keys@8.59.4': + resolution: {integrity: sha512-U3gxVaDVnuZKhSspW/MzMxE1kq7zOdc072FcSNoqA1I9p8HyKbBFfEHoWckBAMgNMph4MamwS5iTVzFmrnt8TQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@valibot/to-json-schema@1.7.0': @@ -1932,31 +1929,31 @@ packages: resolution: {integrity: sha512-ZtvYkYpZOYdvbws3uaOAvTFuvFXoQGAtmzeiXu+XSMGxi5GVsODpoI9Xu9TplEMuD/5fmAtBbKb9cQHkWkLXDQ==} engines: {node: '>=18.16.0'} - '@vitest/browser-playwright@4.1.6': - resolution: {integrity: sha512-4csoeyl/qwHyxU2zNL0++WaoDr8YJDXOQPwWPNJoTZ+QzcdO3INYKgF5Zfz730Io7zbkuv914aZmfQ+QE+1Hvw==} + '@vitest/browser-playwright@4.1.7': + resolution: {integrity: sha512-OlTlJej7YN6VwV7zJJoNeaCsctF+JXpzpZ4oBHUbrQFfIq+0KW2f07rprCLh9N/zRIZ0v4Mchn1QDDmWMUhPKw==} peerDependencies: playwright: '*' - vitest: 4.1.6 + vitest: 4.1.7 - '@vitest/browser@4.1.6': - resolution: {integrity: sha512-ynsspTubXGSpa58JFJ24xIQt4z4A25epSbugEyaTmmrV1//Wec9EgE/LtoaC6yxUrXi5P7erGHRrkdZIHaVQuA==} + '@vitest/browser@4.1.7': + resolution: {integrity: sha512-N2JFGfXoEGVAut+kHeru9dD4BUMq/q5xDvBARNl0tUsly3m5KglLOu8VO/6MkDfOlgxXTycojkt6gBKsuyR+IQ==} peerDependencies: - vitest: 4.1.6 + vitest: 4.1.7 - '@vitest/coverage-v8@4.1.6': - resolution: {integrity: sha512-36l628fQ/9a/8ihy97eOtEnvWQEdqULQOJtcaxtoNq0G1w3Mxd4szSahOaMM9/NGyZ+hyKcMtIW/WIxq0XQViQ==} + '@vitest/coverage-v8@4.1.7': + resolution: {integrity: sha512-qsYPeXc5Q9dFLd1i8Ap+Bx8sQgcp+rFVQo4R0dDsWNBzl26ldVF1qOO+RL24K7FDrR6pA+50XedRLSoSG24bVQ==} peerDependencies: - '@vitest/browser': 4.1.6 - vitest: 4.1.6 + '@vitest/browser': 4.1.7 + vitest: 4.1.7 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@4.1.6': - resolution: {integrity: sha512-7EHDquPthALSV0jhhjgEW8FXaviMx7rSqu8W6oqCoAuOhKov814P99QDV1pxMA3QPv21YudvJngIhjrNI4opLg==} + '@vitest/expect@4.1.7': + resolution: {integrity: sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w==} - '@vitest/mocker@4.1.6': - resolution: {integrity: sha512-MCFc63czMjEInOlcY2cpQCvCN+KgbAn+60xu9cMgP4sKaLC5JNAKw7JH8QdAnoAC88hW1IiSNZ+GgVXlN1UcMQ==} + '@vitest/mocker@4.1.7': + resolution: {integrity: sha512-vY7nuamKgfvpA1Koa3oYIw/k7D6kZnpGyNMZW8loow2bsBYla1TFdqTaXncWdRn4pgwNs+90RhnXhJScDwQeJA==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1966,25 +1963,25 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.6': - resolution: {integrity: sha512-h5SxD/IzNhZYnrSZRsUZQIC+vD0GY8cUvq0iwsmkFKixRCKLLWqCXa/FIQ4S1R+sI+PGoojkHsdNrbZiM9Qpgw==} + '@vitest/pretty-format@4.1.7': + resolution: {integrity: sha512-umgCarTOYQWIaDMvGDRZij+6b9oVeLIyJzfN+AS88e0ZOU3QTgNNSTtjQOpcvWr3np1N0j4WgZj+sb3oYBDscw==} - '@vitest/runner@4.1.6': - resolution: {integrity: sha512-nOPCmn2+yD0ZNmKdsXGv/UxMMWbMuKeD6GyYncNwdkYDxpQvrPSKYj2rWuDjC2Y4b6w6hjip5dBKFzEUuZe3vA==} + '@vitest/runner@4.1.7': + resolution: {integrity: sha512-BapjmAQ2aI78WdMEfeUWivnfVzB+VPGwWRQcJE0OUq7qEeEcBsCSf+0T5iREBNE5nBb4wA5Ya0W6IA+sghdEFw==} - '@vitest/snapshot@4.1.6': - resolution: {integrity: sha512-YhsdE6xAVfTDmzjxL2ZDUvjj+ZsgyOKe+TdQzqkD72wIOmHka8NuGQ6NpTNZv9D2Z63fbwWKJPeVpEw4EQgYxw==} + '@vitest/snapshot@4.1.7': + resolution: {integrity: sha512-ZacLzja+TmJeZ1h14xW2FB/WpeimUD3haBXQPyJqxvo8jQTmfeA8zv58mtjN2C7EHXZDYVcVYdYmAxjkWVvKCw==} - '@vitest/spy@4.1.6': - resolution: {integrity: sha512-JFKxMx6udhwKh/Ldo270e17QX710vgunMkuPAvXjHSvC6oqLWAHhVhjg/I71q0u0CBSErIODV1Kjv0FQNSWjdg==} + '@vitest/spy@4.1.7': + resolution: {integrity: sha512-kbkI5LMWakyuTIvs6fUJ5qdIVb1XVKsYJAT4OJ938cHMROYMSfmoQdZy0aaAnjbbc8F61vkoTqz/Az+/HiIu5Q==} - '@vitest/ui@4.1.6': - resolution: {integrity: sha512-wiu5em68DfGv/2HFvI1Njr7JI2CHcBlQvereSzVG8my53PRxjTNOCsD9VOkRKrsJBDHmyuXvosxWZw7T91a2mw==} + '@vitest/ui@4.1.7': + resolution: {integrity: sha512-TP6utB2yX6rsJNVRo2qAlsi48i1YwFTrLV2tnTtWqJaYX7m4lRCCLirZBjU6xC5m0RsPHr+L2+N+eIPhgEzFfw==} peerDependencies: - vitest: 4.1.6 + vitest: 4.1.7 - '@vitest/utils@4.1.6': - resolution: {integrity: sha512-FxIY+U81R3LGKCxaHHFRQ5+g6/iRgGLmeHWdp2Amj4ljQRrEIWHmZyDfDYBRZlpyqA7qKxtS9DD1dhk8RnRIVQ==} + '@vitest/utils@4.1.7': + resolution: {integrity: sha512-T532WBu791cBxJlCl6SO+J14l81DQx6uQHm1bQbmCDY7nqlEIgkza/UFnSBNaUtSf41unldDFjdOBYEQC4b5Hw==} acorn-import-attributes@1.9.5: resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} @@ -2081,8 +2078,8 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.10.29: - resolution: {integrity: sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ==} + baseline-browser-mapping@2.10.31: + resolution: {integrity: sha512-MujYO3eP72uvmSE0i4wltsodRfIpZATP3jvzRNRGGxgzId7aVocVJJV3nf01qnzzKFGxQVC9bpWxl5cjxTr/7Q==} engines: {node: '>=6.0.0'} hasBin: true @@ -2118,8 +2115,8 @@ packages: resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} engines: {node: '>=16'} - caniuse-lite@1.0.30001792: - resolution: {integrity: sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==} + caniuse-lite@1.0.30001793: + resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} @@ -2216,8 +2213,8 @@ packages: dataloader@1.4.0: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} - date-fns@4.1.0: - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + date-fns@4.2.1: + resolution: {integrity: sha512-37RhSdxaG1suen6VDCza6rNrQfooyQh57HFVPwQGEq2QWliVLzPQZ8Oa017weOu+HZCnzI7N3Pf/wyoBKfEqrA==} dayjs@1.11.20: resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} @@ -2283,14 +2280,14 @@ packages: effect@3.21.2: resolution: {integrity: sha512-rXd2FGDM8KdjSIrc+mqEELo7ScW7xTVxEf1iInmPSpIde9/nyGuFM710cjTo7/EreGXiUX2MOonPpprbz2XHCg==} - electron-to-chromium@1.5.356: - resolution: {integrity: sha512-9NgFd7m5t5MCJ5rUSjJITUXAH9mEGlrlofnMf4YEr+pz6JlP7cWmTAH+JFmbPnaSW8koVTkuW7pacORWAnA5Yw==} + electron-to-chromium@1.5.360: + resolution: {integrity: sha512-GkcBt6YYAw9SxFWn+xVar4cLVGlXVuswwtRLBozi2zp0GjXs4ZnOrqV4zbXzg35n7w81hCkyJNYicgXlVHAmBA==} emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} - enhanced-resolve@5.21.3: - resolution: {integrity: sha512-QyL119InA+XXEkNLNTPCXPugSvOfhwv0JOlGNzvxs0hZaiHLNvXSpudUWsOlsXGWJh8G6ckCScEkVHfX3kw/2Q==} + enhanced-resolve@5.21.6: + resolution: {integrity: sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==} engines: {node: '>=10.13.0'} enquirer@2.4.1: @@ -2367,8 +2364,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.3.0: - resolution: {integrity: sha512-XbEXaRva5cF0ZQB8w6MluHA0kZZfV2DuCMJ3ozyEOHLwDpZX2Lmm/7Pp0xdJmI0GL1W05VH5VwIFHEm1Vcw2gw==} + eslint@10.4.0: + resolution: {integrity: sha512-loXy6bWOoP3EP6JA7jo6p5jMpBJmHmsNZM5SFRHLdh1MGOPurMnNBj4ZlAbaqUAaQWbCr7jHV4P7gzAyryZWkQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -2397,8 +2394,8 @@ packages: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} - esrap@2.2.8: - resolution: {integrity: sha512-MPweq2EvEGj8jwOI7Hgycw/QIHzqA1EbAM8lG7p+FBfZbZq/hQ6h3AMsqnu/djzisH1KVWNzbb7LSgIVtMlPSg==} + esrap@2.2.9: + resolution: {integrity: sha512-4KijP+NxCWthMCUC3qHbE6n4vCjqgJS1uAYKhuT/GWfFTf1Qyive2TgOjep+gzbSzRfnNyaN/UU9YmdOt8Eg0A==} peerDependencies: '@typescript-eslint/types': ^8.2.0 peerDependenciesMeta: @@ -2469,8 +2466,8 @@ packages: fflate@0.6.10: resolution: {integrity: sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==} - fflate@0.8.2: - resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + fflate@0.8.3: + resolution: {integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==} figures@6.1.0: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} @@ -2922,8 +2919,8 @@ packages: lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - lru-cache@11.3.6: - resolution: {integrity: sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==} + lru-cache@11.5.0: + resolution: {integrity: sha512-5YgH9UJd7wVb9hIouI2adWpgqrrICkt070Dnj8EUY1+B4B2P9eRLPAkAAo6NICA7CEhOIeBHl46u9zSNpNu7zA==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -3034,8 +3031,8 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - orval@8.10.0: - resolution: {integrity: sha512-rdvKP0HqFcGe1Q83i+MIxzDDduj4qt3sNymbKnMHamuFZrR6hfko+7p3euX/gjIJBdaYHRunkwmawiwKVPeKIA==} + orval@8.11.0: + resolution: {integrity: sha512-kzQ6Jlzh/FafiuI2Feur8kdyVOJ8blQK1sjqRMU/Z2tBrqYjJirS3tDXe5UdyIgU+cmAq0ckiOuU2dsGMwyv6Q==} engines: {node: '>=22.18.0'} hasBin: true peerDependencies: @@ -3133,8 +3130,8 @@ packages: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} - pg-protocol@1.13.0: - resolution: {integrity: sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==} + pg-protocol@1.14.0: + resolution: {integrity: sha512-n5taZ1kO3s9ngDTVxsEznOqCyToTgz0FLuPq0B33COy5pPpuWJpY3/2oRBVETuOgzdqRXfWpM9HIhp2LBBT1BA==} pg-types@2.2.0: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} @@ -3197,8 +3194,8 @@ packages: resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} engines: {node: '>=4'} - postcss@8.5.14: - resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} postgres-array@2.0.0: @@ -3221,11 +3218,12 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-plugin-svelte@3.5.2: - resolution: {integrity: sha512-ItFouLvzSFE3ulNl4DKoWM3BGcbDCNVpIyy/Y3F2gC3aNiGLxtFUdffVqO5Z5hhYG+DFT5KULWaxmeFFpdbvaQ==} + prettier-plugin-svelte@4.0.0: + resolution: {integrity: sha512-StoBMZGsfE9ztz1i9ejLhYU2nlP1+FdoWqGCb7Bh7EGVVBW2smCcyoCPxWCdszVdx1SsDiK7n4uAv/YUsHqimQ==} + engines: {node: '>=20'} peerDependencies: prettier: ^3.0.0 - svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 + svelte: ^5.0.0 prettier-plugin-tailwindcss@0.8.0: resolution: {integrity: sha512-V8ITGH87yuBDF6JpEZTOVlUz/saAwqb8f3HRgUj8Lh+tGCcrmorhsLpYqzygwFwK0PE2Ib6Mv3M7T/uE2tZV1g==} @@ -3564,43 +3562,6 @@ packages: peerDependencies: svelte: ^3.48.0 || ^4 || ^5 - svelte-preprocess@6.0.3: - resolution: {integrity: sha512-PLG2k05qHdhmRG7zR/dyo5qKvakhm8IJ+hD2eFRQmMLHp7X3eJnjeupUtvuRpbNiF31RjVw45W+abDwHEmP5OA==} - engines: {node: '>= 18.0.0'} - peerDependencies: - '@babel/core': ^7.10.2 - coffeescript: ^2.5.1 - less: ^3.11.3 || ^4.0.0 - postcss: ^7 || ^8 - postcss-load-config: '>=3' - pug: ^3.0.0 - sass: ^1.26.8 - stylus: '>=0.55' - sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 - svelte: ^4.0.0 || ^5.0.0-next.100 || ^5.0.0 - typescript: ^5.0.0 - peerDependenciesMeta: - '@babel/core': - optional: true - coffeescript: - optional: true - less: - optional: true - postcss: - optional: true - postcss-load-config: - optional: true - pug: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - typescript: - optional: true - svelte-seo@2.0.0: resolution: {integrity: sha512-taLhDc7tqxKLhUlVEqzK4McowtQtmCtyJFs4cuH68rBWJF9TYBpIkjWQM6mnOIu9Zxq9jqMO+EvRqiNK4TzADw==} peerDependencies: @@ -3641,8 +3602,8 @@ packages: peerDependencies: svelte: ^5.30.2 - svelte@5.55.7: - resolution: {integrity: sha512-ymI5ykLPwIHW839E053FQbI1G+jnRFJEw3Kv5Y4njixVWywQBx+NUFpkkKyk5LIb36Fg9DVXSYpqiGekLD0hyw==} + svelte@5.55.9: + resolution: {integrity: sha512-fTjjT8cHLDwigcu2j3pv7Jq04LklXevPB8uBgyHNiTXv+RMNvVnrjS4UEYrLMkhuq1vpCodHjiW+z/95SDs/fg==} engines: {node: '>=18'} sveltekit-superforms@2.30.1: @@ -3665,8 +3626,8 @@ packages: tailwindcss@4.3.0: resolution: {integrity: sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==} - takumi-js@1.1.2: - resolution: {integrity: sha512-S8Ff0zBUQJ8VC40r7y1RPBo5QXFXV3U868M+T8B8JGt5Tko8l83DVEr1BYLOxqUenEeev853S708oE0aD50eZA==} + takumi-js@1.3.0: + resolution: {integrity: sha512-iFOVWUIQqZHRrDlCwmJmo+6jGaxluem7NMyeL0DSt+nYDPeSurES1GbWyynFWNbpPMAYOJvj3x0sdrrH59QleA==} tapable@2.3.3: resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} @@ -3760,8 +3721,8 @@ packages: peerDependencies: typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x || 6.0.x - typescript-eslint@8.59.3: - resolution: {integrity: sha512-KgusgyDgG4LI8Ih/sWaCtZ06tckLAS5CvT5A4D1Q7bYVoAAyzwiZvE4BmwDHkhRVkvhRBepKeASoFzQetha7Fg==} + typescript-eslint@8.59.4: + resolution: {integrity: sha512-Rw6+44QNFaXtgHSjPy+Kw8hrJniMYzR85E9yLmOLcfZ91/rz+JXQbDTCmc6ccxMPY6K6PgAq26f0JCBfR7LIPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -3884,20 +3845,20 @@ packages: svelte: ^3 || ^4 || ^5 || ^5.0.0-next.0 vitest: ^4.0.0 - vitest@4.1.6: - resolution: {integrity: sha512-6lvjbS3p9b4CrdCmguzbh2/4uoXhGE2q71R4OX5sqF9R1bo9Xd6fGrMAfvp5wnCzlBnFVdCOp6onuTQVbo8iUQ==} + vitest@4.1.7: + resolution: {integrity: sha512-flYyaFd2CgoCoU+0UKt3pxksgC+S02iTDN0n3LtqaMeXsI9SBcdNujc2k0DeFLzUn/0k538yNjOSdwgCqcrwJA==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.6 - '@vitest/browser-preview': 4.1.6 - '@vitest/browser-webdriverio': 4.1.6 - '@vitest/coverage-istanbul': 4.1.6 - '@vitest/coverage-v8': 4.1.6 - '@vitest/ui': 4.1.6 + '@vitest/browser-playwright': 4.1.7 + '@vitest/browser-preview': 4.1.7 + '@vitest/browser-webdriverio': 4.1.7 + '@vitest/coverage-istanbul': 4.1.7 + '@vitest/coverage-v8': 4.1.7 + '@vitest/ui': 4.1.7 happy-dom: '*' jsdom: '*' vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -4160,7 +4121,7 @@ snapshots: dependencies: '@changesets/types': 6.1.0 - '@changesets/cli@2.31.0(@types/node@25.8.0)': + '@changesets/cli@2.31.0(@types/node@25.9.1)': dependencies: '@changesets/apply-release-plan': 7.1.1 '@changesets/assemble-release-plan': 6.0.10 @@ -4176,7 +4137,7 @@ snapshots: '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@changesets/write': 0.4.0 - '@inquirer/external-editor': 1.0.3(@types/node@25.8.0) + '@inquirer/external-editor': 1.0.3(@types/node@25.9.1) '@manypkg/get-packages': 1.1.3 ansi-colors: 4.1.3 enquirer: 2.4.1 @@ -4285,11 +4246,11 @@ snapshots: dependencies: commander: 14.0.3 - '@commitlint/cli@21.0.1(@types/node@25.8.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3)': + '@commitlint/cli@21.0.1(@types/node@25.9.1)(conventional-commits-parser@6.4.0)(typescript@6.0.3)': dependencies: '@commitlint/format': 21.0.1 '@commitlint/lint': 21.0.1 - '@commitlint/load': 21.0.1(@types/node@25.8.0)(typescript@6.0.3) + '@commitlint/load': 21.0.1(@types/node@25.9.1)(typescript@6.0.3) '@commitlint/read': 21.0.1(conventional-commits-parser@6.4.0) '@commitlint/types': 21.0.1 tinyexec: 1.1.2 @@ -4334,14 +4295,14 @@ snapshots: '@commitlint/rules': 21.0.1 '@commitlint/types': 21.0.1 - '@commitlint/load@21.0.1(@types/node@25.8.0)(typescript@6.0.3)': + '@commitlint/load@21.0.1(@types/node@25.9.1)(typescript@6.0.3)': dependencies: '@commitlint/config-validator': 21.0.1 '@commitlint/execute-rule': 21.0.1 '@commitlint/resolve-extends': 21.0.1 '@commitlint/types': 21.0.1 cosmiconfig: 9.0.1(typescript@6.0.3) - cosmiconfig-typescript-loader: 6.3.0(@types/node@25.8.0)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3) + cosmiconfig-typescript-loader: 6.3.0(@types/node@25.9.1)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3) es-toolkit: 1.46.1 is-plain-obj: 4.1.0 picocolors: 1.1.1 @@ -4438,12 +4399,12 @@ snapshots: '@preact/signals-core': 1.14.2 tslib: 2.8.1 - '@dnd-kit/svelte@0.4.0(svelte@5.55.7(@typescript-eslint/types@8.59.3))': + '@dnd-kit/svelte@0.4.0(svelte@5.55.9(@typescript-eslint/types@8.59.4))': dependencies: '@dnd-kit/abstract': 0.4.0 '@dnd-kit/dom': 0.4.0 '@dnd-kit/state': 0.4.0 - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) tslib: 2.8.1 '@emnapi/core@1.10.0': @@ -4540,18 +4501,18 @@ snapshots: '@esbuild/win32-x64@0.27.7': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.3.0(jiti@2.7.0))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.4.0(jiti@2.7.0))': dependencies: - eslint: 10.3.0(jiti@2.7.0) + eslint: 10.4.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/compat@2.1.0(eslint@10.3.0(jiti@2.7.0))': + '@eslint/compat@2.1.0(eslint@10.4.0(jiti@2.7.0))': dependencies: '@eslint/core': 1.2.1 optionalDependencies: - eslint: 10.3.0(jiti@2.7.0) + eslint: 10.4.0(jiti@2.7.0) '@eslint/config-array@0.23.5': dependencies: @@ -4561,7 +4522,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.5.5': + '@eslint/config-helpers@0.6.0': dependencies: '@eslint/core': 1.2.1 @@ -4569,9 +4530,9 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/js@10.0.1(eslint@10.3.0(jiti@2.7.0))': + '@eslint/js@10.0.1(eslint@10.4.0(jiti@2.7.0))': optionalDependencies: - eslint: 10.3.0(jiti@2.7.0) + eslint: 10.4.0(jiti@2.7.0) '@eslint/object-schema@3.0.5': {} @@ -4636,12 +4597,12 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@inquirer/external-editor@1.0.3(@types/node@25.8.0)': + '@inquirer/external-editor@1.0.3(@types/node@25.9.1)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 25.8.0 + '@types/node': 25.9.1 '@internationalized/date@3.12.1': dependencies: @@ -4666,9 +4627,9 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@lucide/svelte@1.16.0(svelte@5.55.7(@typescript-eslint/types@8.59.3))': + '@lucide/svelte@1.16.0(svelte@5.55.9(@typescript-eslint/types@8.59.4))': dependencies: - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) '@manypkg/find-root@1.1.0': dependencies: @@ -4931,23 +4892,23 @@ snapshots: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1) - '@orval/angular@8.10.0(typescript@6.0.3)': + '@orval/angular@8.11.0(typescript@6.0.3)': dependencies: - '@orval/core': 8.10.0(typescript@6.0.3) + '@orval/core': 8.11.0(typescript@6.0.3) transitivePeerDependencies: - '@faker-js/faker' - supports-color - typescript - '@orval/axios@8.10.0(typescript@6.0.3)': + '@orval/axios@8.11.0(typescript@6.0.3)': dependencies: - '@orval/core': 8.10.0(typescript@6.0.3) + '@orval/core': 8.11.0(typescript@6.0.3) transitivePeerDependencies: - '@faker-js/faker' - supports-color - typescript - '@orval/core@8.10.0(typescript@6.0.3)': + '@orval/core@8.11.0(typescript@6.0.3)': dependencies: '@scalar/openapi-types': 0.8.0 acorn: 8.16.0 @@ -4964,19 +4925,19 @@ snapshots: - supports-color - typescript - '@orval/fetch@8.10.0(typescript@6.0.3)': + '@orval/fetch@8.11.0(typescript@6.0.3)': dependencies: - '@orval/core': 8.10.0(typescript@6.0.3) + '@orval/core': 8.11.0(typescript@6.0.3) '@scalar/openapi-types': 0.8.0 transitivePeerDependencies: - '@faker-js/faker' - supports-color - typescript - '@orval/hono@8.10.0(typescript@6.0.3)': + '@orval/hono@8.11.0(typescript@6.0.3)': dependencies: - '@orval/core': 8.10.0(typescript@6.0.3) - '@orval/zod': 8.10.0(typescript@6.0.3) + '@orval/core': 8.11.0(typescript@6.0.3) + '@orval/zod': 8.11.0(typescript@6.0.3) fs-extra: 11.3.5 remeda: 2.34.1 transitivePeerDependencies: @@ -4984,56 +4945,56 @@ snapshots: - supports-color - typescript - '@orval/mcp@8.10.0(typescript@6.0.3)': + '@orval/mcp@8.11.0(typescript@6.0.3)': dependencies: - '@orval/core': 8.10.0(typescript@6.0.3) - '@orval/fetch': 8.10.0(typescript@6.0.3) - '@orval/zod': 8.10.0(typescript@6.0.3) + '@orval/core': 8.11.0(typescript@6.0.3) + '@orval/fetch': 8.11.0(typescript@6.0.3) + '@orval/zod': 8.11.0(typescript@6.0.3) transitivePeerDependencies: - '@faker-js/faker' - supports-color - typescript - '@orval/mock@8.10.0(typescript@6.0.3)': + '@orval/mock@8.11.0(typescript@6.0.3)': dependencies: - '@orval/core': 8.10.0(typescript@6.0.3) + '@orval/core': 8.11.0(typescript@6.0.3) remeda: 2.34.1 transitivePeerDependencies: - '@faker-js/faker' - supports-color - typescript - '@orval/query@8.10.0(typescript@6.0.3)': + '@orval/query@8.11.0(typescript@6.0.3)': dependencies: - '@orval/core': 8.10.0(typescript@6.0.3) - '@orval/fetch': 8.10.0(typescript@6.0.3) + '@orval/core': 8.11.0(typescript@6.0.3) + '@orval/fetch': 8.11.0(typescript@6.0.3) remeda: 2.34.1 transitivePeerDependencies: - '@faker-js/faker' - supports-color - typescript - '@orval/solid-start@8.10.0(typescript@6.0.3)': + '@orval/solid-start@8.11.0(typescript@6.0.3)': dependencies: - '@orval/core': 8.10.0(typescript@6.0.3) + '@orval/core': 8.11.0(typescript@6.0.3) '@scalar/openapi-types': 0.8.0 transitivePeerDependencies: - '@faker-js/faker' - supports-color - typescript - '@orval/swr@8.10.0(typescript@6.0.3)': + '@orval/swr@8.11.0(typescript@6.0.3)': dependencies: - '@orval/core': 8.10.0(typescript@6.0.3) - '@orval/fetch': 8.10.0(typescript@6.0.3) + '@orval/core': 8.11.0(typescript@6.0.3) + '@orval/fetch': 8.11.0(typescript@6.0.3) transitivePeerDependencies: - '@faker-js/faker' - supports-color - typescript - '@orval/zod@8.10.0(typescript@6.0.3)': + '@orval/zod@8.11.0(typescript@6.0.3)': dependencies: - '@orval/core': 8.10.0(typescript@6.0.3) + '@orval/core': 8.11.0(typescript@6.0.3) remeda: 2.34.1 transitivePeerDependencies: - '@faker-js/faker' @@ -5429,27 +5390,27 @@ snapshots: - encoding - supports-color - '@sentry/svelte@10.53.1(svelte@5.55.7(@typescript-eslint/types@8.59.3))': + '@sentry/svelte@10.53.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))': dependencies: '@sentry/browser': 10.53.1 '@sentry/core': 10.53.1 magic-string: 0.30.21 - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) - '@sentry/sveltekit@10.53.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(rollup@4.60.4)(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))': + '@sentry/sveltekit@10.53.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(rollup@4.60.4)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))': dependencies: '@sentry/cloudflare': 10.53.1 '@sentry/core': 10.53.1 '@sentry/node': 10.53.1 - '@sentry/svelte': 10.53.1(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + '@sentry/svelte': 10.53.1(svelte@5.55.9(@typescript-eslint/types@8.59.4)) '@sentry/vite-plugin': 5.3.0(rollup@4.60.4) - '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) - '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + '@sveltejs/acorn-typescript': 1.0.10(acorn@8.16.0) + '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) acorn: 8.16.0 magic-string: 0.30.21 sorcery: 1.0.0 optionalDependencies: - vite: 8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) transitivePeerDependencies: - '@cloudflare/workers-types' - '@opentelemetry/exporter-trace-otlp-http' @@ -5508,23 +5469,23 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@sveltejs/acorn-typescript@1.0.9(acorn@8.16.0)': + '@sveltejs/acorn-typescript@1.0.10(acorn@8.16.0)': dependencies: acorn: 8.16.0 - '@sveltejs/adapter-node@5.5.4(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))': + '@sveltejs/adapter-node@5.5.4(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))': dependencies: '@rollup/plugin-commonjs': 29.0.2(rollup@4.60.4) '@rollup/plugin-json': 6.1.0(rollup@4.60.4) '@rollup/plugin-node-resolve': 16.0.3(rollup@4.60.4) - '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) rollup: 4.60.4 - '@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))': + '@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))': dependencies: '@standard-schema/spec': 1.1.0 - '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) - '@sveltejs/vite-plugin-svelte': 7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + '@sveltejs/acorn-typescript': 1.0.10(acorn@8.16.0) + '@sveltejs/vite-plugin-svelte': 7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) '@types/cookie': 0.6.0 acorn: 8.16.0 cookie: 0.6.0 @@ -5535,20 +5496,20 @@ snapshots: mrmime: 2.0.1 set-cookie-parser: 3.1.0 sirv: 3.0.2 - svelte: 5.55.7(@typescript-eslint/types@8.59.3) - vite: 8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) optionalDependencies: '@opentelemetry/api': 1.9.1 typescript: 6.0.3 - '@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))': + '@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))': dependencies: deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.1 - svelte: 5.55.7(@typescript-eslint/types@8.59.3) - vite: 8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) - vitefu: 1.1.3(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) + vitefu: 1.1.3(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) '@svitejs/changesets-changelog-github-compact@1.2.0': dependencies: @@ -5564,7 +5525,7 @@ snapshots: '@tailwindcss/node@4.3.0': dependencies: '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.21.3 + enhanced-resolve: 5.21.6 jiti: 2.7.0 lightningcss: 1.32.0 magic-string: 0.30.21 @@ -5622,65 +5583,65 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.3.0 '@tailwindcss/oxide-win32-x64-msvc': 4.3.0 - '@tailwindcss/vite@4.3.0(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))': + '@tailwindcss/vite@4.3.0(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))': dependencies: '@tailwindcss/node': 4.3.0 '@tailwindcss/oxide': 4.3.0 tailwindcss: 4.3.0 - vite: 8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) - '@takumi-rs/core-darwin-arm64@1.1.2': + '@takumi-rs/core-darwin-arm64@1.3.0': optional: true - '@takumi-rs/core-darwin-x64@1.1.2': + '@takumi-rs/core-darwin-x64@1.3.0': optional: true - '@takumi-rs/core-linux-arm64-gnu@1.1.2': + '@takumi-rs/core-linux-arm64-gnu@1.3.0': optional: true - '@takumi-rs/core-linux-arm64-musl@1.1.2': + '@takumi-rs/core-linux-arm64-musl@1.3.0': optional: true - '@takumi-rs/core-linux-x64-gnu@1.1.2': + '@takumi-rs/core-linux-x64-gnu@1.3.0': optional: true - '@takumi-rs/core-linux-x64-musl@1.1.2': + '@takumi-rs/core-linux-x64-musl@1.3.0': optional: true - '@takumi-rs/core-win32-arm64-msvc@1.1.2': + '@takumi-rs/core-win32-arm64-msvc@1.3.0': optional: true - '@takumi-rs/core-win32-x64-msvc@1.1.2': + '@takumi-rs/core-win32-x64-msvc@1.3.0': optional: true - '@takumi-rs/core@1.1.2': + '@takumi-rs/core@1.3.0': dependencies: - '@takumi-rs/helpers': 1.1.2 + '@takumi-rs/helpers': 1.3.0 optionalDependencies: - '@takumi-rs/core-darwin-arm64': 1.1.2 - '@takumi-rs/core-darwin-x64': 1.1.2 - '@takumi-rs/core-linux-arm64-gnu': 1.1.2 - '@takumi-rs/core-linux-arm64-musl': 1.1.2 - '@takumi-rs/core-linux-x64-gnu': 1.1.2 - '@takumi-rs/core-linux-x64-musl': 1.1.2 - '@takumi-rs/core-win32-arm64-msvc': 1.1.2 - '@takumi-rs/core-win32-x64-msvc': 1.1.2 + '@takumi-rs/core-darwin-arm64': 1.3.0 + '@takumi-rs/core-darwin-x64': 1.3.0 + '@takumi-rs/core-linux-arm64-gnu': 1.3.0 + '@takumi-rs/core-linux-arm64-musl': 1.3.0 + '@takumi-rs/core-linux-x64-gnu': 1.3.0 + '@takumi-rs/core-linux-x64-musl': 1.3.0 + '@takumi-rs/core-win32-arm64-msvc': 1.3.0 + '@takumi-rs/core-win32-x64-msvc': 1.3.0 transitivePeerDependencies: - react - react-dom - '@takumi-rs/helpers@1.1.2': {} + '@takumi-rs/helpers@1.3.0': {} - '@takumi-rs/wasm@1.1.2': + '@takumi-rs/wasm@1.3.0': dependencies: - '@takumi-rs/helpers': 1.1.2 + '@takumi-rs/helpers': 1.3.0 transitivePeerDependencies: - react - react-dom - '@testing-library/svelte-core@1.0.0(svelte@5.55.7(@typescript-eslint/types@8.59.3))': + '@testing-library/svelte-core@1.0.0(svelte@5.55.9(@typescript-eslint/types@8.59.4))': dependencies: - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) '@tybys/wasm-util@0.10.2': dependencies: @@ -5694,7 +5655,7 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 25.8.0 + '@types/node': 25.9.1 '@types/cookie@0.6.0': {} @@ -5721,11 +5682,11 @@ snapshots: '@types/mysql@2.15.27': dependencies: - '@types/node': 25.8.0 + '@types/node': 25.9.1 '@types/node@12.20.55': {} - '@types/node@25.8.0': + '@types/node@25.9.1': dependencies: undici-types: 7.24.6 @@ -5735,8 +5696,8 @@ snapshots: '@types/pg@8.15.6': dependencies: - '@types/node': 25.8.0 - pg-protocol: 1.13.0 + '@types/node': 25.9.1 + pg-protocol: 1.14.0 pg-types: 2.2.0 '@types/relaxed-json@1.0.4': {} @@ -5747,7 +5708,7 @@ snapshots: '@types/tedious@4.0.14': dependencies: - '@types/node': 25.8.0 + '@types/node': 25.9.1 '@types/three@0.156.0': dependencies: @@ -5781,15 +5742,15 @@ snapshots: '@types/json-schema': 7.0.15 optional: true - '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.59.4(@typescript-eslint/parser@8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.59.3 - '@typescript-eslint/type-utils': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.59.3 - eslint: 10.3.0(jiti@2.7.0) + '@typescript-eslint/parser': 8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.59.4 + '@typescript-eslint/type-utils': 8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.59.4 + eslint: 10.4.0(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) @@ -5797,56 +5758,56 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/parser@8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.59.3 - '@typescript-eslint/types': 8.59.3 - '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.59.3 + '@typescript-eslint/scope-manager': 8.59.4 + '@typescript-eslint/types': 8.59.4 + '@typescript-eslint/typescript-estree': 8.59.4(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.59.4 debug: 4.4.3 - eslint: 10.3.0(jiti@2.7.0) + eslint: 10.4.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.59.3(typescript@6.0.3)': + '@typescript-eslint/project-service@8.59.4(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.59.3(typescript@6.0.3) - '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/tsconfig-utils': 8.59.4(typescript@6.0.3) + '@typescript-eslint/types': 8.59.4 debug: 4.4.3 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.59.3': + '@typescript-eslint/scope-manager@8.59.4': dependencies: - '@typescript-eslint/types': 8.59.3 - '@typescript-eslint/visitor-keys': 8.59.3 + '@typescript-eslint/types': 8.59.4 + '@typescript-eslint/visitor-keys': 8.59.4 - '@typescript-eslint/tsconfig-utils@8.59.3(typescript@6.0.3)': + '@typescript-eslint/tsconfig-utils@8.59.4(typescript@6.0.3)': dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.59.3 - '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/types': 8.59.4 + '@typescript-eslint/typescript-estree': 8.59.4(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3) debug: 4.4.3 - eslint: 10.3.0(jiti@2.7.0) + eslint: 10.4.0(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.59.3': {} + '@typescript-eslint/types@8.59.4': {} - '@typescript-eslint/typescript-estree@8.59.3(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.59.4(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.59.3(typescript@6.0.3) - '@typescript-eslint/tsconfig-utils': 8.59.3(typescript@6.0.3) - '@typescript-eslint/types': 8.59.3 - '@typescript-eslint/visitor-keys': 8.59.3 + '@typescript-eslint/project-service': 8.59.4(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.59.4(typescript@6.0.3) + '@typescript-eslint/types': 8.59.4 + '@typescript-eslint/visitor-keys': 8.59.4 debug: 4.4.3 minimatch: 10.2.5 semver: 7.8.0 @@ -5856,20 +5817,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/utils@8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.7.0)) - '@typescript-eslint/scope-manager': 8.59.3 - '@typescript-eslint/types': 8.59.3 - '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3) - eslint: 10.3.0(jiti@2.7.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.7.0)) + '@typescript-eslint/scope-manager': 8.59.4 + '@typescript-eslint/types': 8.59.4 + '@typescript-eslint/typescript-estree': 8.59.4(typescript@6.0.3) + eslint: 10.4.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.59.3': + '@typescript-eslint/visitor-keys@8.59.4': dependencies: - '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/types': 8.59.4 eslint-visitor-keys: 5.0.1 '@valibot/to-json-schema@1.7.0(valibot@1.4.0(typescript@6.0.3))': @@ -5892,29 +5853,29 @@ snapshots: validator: 13.15.35 optional: true - '@vitest/browser-playwright@4.1.6(playwright@1.60.0)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.6)': + '@vitest/browser-playwright@4.1.7(playwright@1.60.0)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.7)': dependencies: - '@vitest/browser': 4.1.6(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.6) - '@vitest/mocker': 4.1.6(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + '@vitest/browser': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.7) + '@vitest/mocker': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) playwright: 1.60.0 tinyrainbow: 3.1.0 - vitest: 4.1.6(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/browser-playwright@4.1.6)(@vitest/coverage-v8@4.1.6)(@vitest/ui@4.1.6)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.1.6(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.6)': + '@vitest/browser@4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.7)': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.6(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) - '@vitest/utils': 4.1.6 + '@vitest/mocker': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + '@vitest/utils': 4.1.7 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.0 - vitest: 4.1.6(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/browser-playwright@4.1.6)(@vitest/coverage-v8@4.1.6)(@vitest/ui@4.1.6)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) ws: 8.20.1 transitivePeerDependencies: - bufferutil @@ -5922,10 +5883,10 @@ snapshots: - utf-8-validate - vite - '@vitest/coverage-v8@4.1.6(@vitest/browser@4.1.6)(vitest@4.1.6)': + '@vitest/coverage-v8@4.1.7(@vitest/browser@4.1.7)(vitest@4.1.7)': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.1.6 + '@vitest/utils': 4.1.7 ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 @@ -5934,59 +5895,59 @@ snapshots: obug: 2.1.1 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.6(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/browser-playwright@4.1.6)(@vitest/coverage-v8@4.1.6)(@vitest/ui@4.1.6)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) optionalDependencies: - '@vitest/browser': 4.1.6(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.6) + '@vitest/browser': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.7) - '@vitest/expect@4.1.6': + '@vitest/expect@4.1.7': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.6 - '@vitest/utils': 4.1.6 + '@vitest/spy': 4.1.7 + '@vitest/utils': 4.1.7 chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.6(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))': + '@vitest/mocker@4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))': dependencies: - '@vitest/spy': 4.1.6 + '@vitest/spy': 4.1.7 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) - '@vitest/pretty-format@4.1.6': + '@vitest/pretty-format@4.1.7': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.6': + '@vitest/runner@4.1.7': dependencies: - '@vitest/utils': 4.1.6 + '@vitest/utils': 4.1.7 pathe: 2.0.3 - '@vitest/snapshot@4.1.6': + '@vitest/snapshot@4.1.7': dependencies: - '@vitest/pretty-format': 4.1.6 - '@vitest/utils': 4.1.6 + '@vitest/pretty-format': 4.1.7 + '@vitest/utils': 4.1.7 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.6': {} + '@vitest/spy@4.1.7': {} - '@vitest/ui@4.1.6(vitest@4.1.6)': + '@vitest/ui@4.1.7(vitest@4.1.7)': dependencies: - '@vitest/utils': 4.1.6 - fflate: 0.8.2 + '@vitest/utils': 4.1.7 + fflate: 0.8.3 flatted: 3.4.2 pathe: 2.0.3 sirv: 3.0.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vitest: 4.1.6(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/browser-playwright@4.1.6)(@vitest/coverage-v8@4.1.6)(@vitest/ui@4.1.6)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) - '@vitest/utils@4.1.6': + '@vitest/utils@4.1.7': dependencies: - '@vitest/pretty-format': 4.1.6 + '@vitest/pretty-format': 4.1.7 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 @@ -6072,21 +6033,21 @@ snapshots: balanced-match@4.0.4: {} - baseline-browser-mapping@2.10.29: {} + baseline-browser-mapping@2.10.31: {} better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 - bits-ui@2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3)): + bits-ui@2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: '@floating-ui/core': 1.7.5 '@floating-ui/dom': 1.7.6 '@internationalized/date': 3.12.1 esm-env: 1.2.2 - runed: 0.35.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3)) - svelte: 5.55.7(@typescript-eslint/types@8.59.3) - svelte-toolbelt: 0.10.6(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + runed: 0.35.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) tabbable: 6.4.0 transitivePeerDependencies: - '@sveltejs/kit' @@ -6101,9 +6062,9 @@ snapshots: browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.10.29 - caniuse-lite: 1.0.30001792 - electron-to-chromium: 1.5.356 + baseline-browser-mapping: 2.10.31 + caniuse-lite: 1.0.30001793 + electron-to-chromium: 1.5.360 node-releases: 2.0.44 update-browserslist-db: 1.2.3(browserslist@4.28.2) @@ -6112,7 +6073,7 @@ snapshots: camelcase@8.0.0: optional: true - caniuse-lite@1.0.30001792: {} + caniuse-lite@1.0.30001793: {} chai@6.2.2: {} @@ -6171,9 +6132,9 @@ snapshots: cookie@0.6.0: {} - cosmiconfig-typescript-loader@6.3.0(@types/node@25.8.0)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3): + cosmiconfig-typescript-loader@6.3.0(@types/node@25.9.1)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3): dependencies: - '@types/node': 25.8.0 + '@types/node': 25.9.1 cosmiconfig: 9.0.1(typescript@6.0.3) jiti: 2.6.1 typescript: 6.0.3 @@ -6199,7 +6160,7 @@ snapshots: dataloader@1.4.0: {} - date-fns@4.1.0: {} + date-fns@4.2.1: {} dayjs@1.11.20: optional: true @@ -6252,11 +6213,11 @@ snapshots: fast-check: 3.23.2 optional: true - electron-to-chromium@1.5.356: {} + electron-to-chromium@1.5.360: {} emoji-regex@10.6.0: {} - enhanced-resolve@5.21.3: + enhanced-resolve@5.21.6: dependencies: graceful-fs: 4.2.11 tapable: 2.3.3 @@ -6313,25 +6274,25 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)): + eslint-config-prettier@10.1.8(eslint@10.4.0(jiti@2.7.0)): dependencies: - eslint: 10.3.0(jiti@2.7.0) + eslint: 10.4.0(jiti@2.7.0) - eslint-plugin-svelte@3.17.1(eslint@10.3.0(jiti@2.7.0))(svelte@5.55.7(@typescript-eslint/types@8.59.3)): + eslint-plugin-svelte@3.17.1(eslint@10.4.0(jiti@2.7.0))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.7.0)) '@jridgewell/sourcemap-codec': 1.5.5 - eslint: 10.3.0(jiti@2.7.0) + eslint: 10.4.0(jiti@2.7.0) esutils: 2.0.3 globals: 16.5.0 known-css-properties: 0.37.0 - postcss: 8.5.14 - postcss-load-config: 3.1.4(postcss@8.5.14) - postcss-safe-parser: 7.0.1(postcss@8.5.14) + postcss: 8.5.15 + postcss-load-config: 3.1.4(postcss@8.5.15) + postcss-safe-parser: 7.0.1(postcss@8.5.15) semver: 7.8.0 - svelte-eslint-parser: 1.6.1(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + svelte-eslint-parser: 1.6.1(svelte@5.55.9(@typescript-eslint/types@8.59.4)) optionalDependencies: - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) transitivePeerDependencies: - ts-node @@ -6353,12 +6314,12 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.3.0(jiti@2.7.0): + eslint@10.4.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 - '@eslint/config-helpers': 0.5.5 + '@eslint/config-helpers': 0.6.0 '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.1 '@humanfs/node': 0.16.8 @@ -6410,11 +6371,11 @@ snapshots: dependencies: estraverse: 5.3.0 - esrap@2.2.8(@typescript-eslint/types@8.59.3): + esrap@2.2.9(@typescript-eslint/types@8.59.4): dependencies: '@jridgewell/sourcemap-codec': 1.5.5 optionalDependencies: - '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/types': 8.59.4 esrecurse@4.3.0: dependencies: @@ -6480,7 +6441,7 @@ snapshots: fflate@0.6.10: {} - fflate@0.8.2: {} + fflate@0.8.3: {} figures@6.1.0: dependencies: @@ -6516,11 +6477,11 @@ snapshots: flatted@3.4.2: {} - formsnap@2.0.1(svelte@5.55.7(@typescript-eslint/types@8.59.3))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)): + formsnap@2.0.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)): dependencies: - svelte: 5.55.7(@typescript-eslint/types@8.59.3) - svelte-toolbelt: 0.5.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)) - sveltekit-superforms: 2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + svelte-toolbelt: 0.5.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + sveltekit-superforms: 2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3) forwarded-parse@2.1.2: {} @@ -6877,7 +6838,7 @@ snapshots: lodash.startcase@4.4.0: {} - lru-cache@11.3.6: {} + lru-cache@11.5.0: {} lru-cache@5.1.1: dependencies: @@ -6972,20 +6933,20 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - orval@8.10.0(prettier@3.8.3)(typescript@6.0.3): + orval@8.11.0(prettier@3.8.3)(typescript@6.0.3): dependencies: '@commander-js/extra-typings': 14.0.0(commander@14.0.3) - '@orval/angular': 8.10.0(typescript@6.0.3) - '@orval/axios': 8.10.0(typescript@6.0.3) - '@orval/core': 8.10.0(typescript@6.0.3) - '@orval/fetch': 8.10.0(typescript@6.0.3) - '@orval/hono': 8.10.0(typescript@6.0.3) - '@orval/mcp': 8.10.0(typescript@6.0.3) - '@orval/mock': 8.10.0(typescript@6.0.3) - '@orval/query': 8.10.0(typescript@6.0.3) - '@orval/solid-start': 8.10.0(typescript@6.0.3) - '@orval/swr': 8.10.0(typescript@6.0.3) - '@orval/zod': 8.10.0(typescript@6.0.3) + '@orval/angular': 8.11.0(typescript@6.0.3) + '@orval/axios': 8.11.0(typescript@6.0.3) + '@orval/core': 8.11.0(typescript@6.0.3) + '@orval/fetch': 8.11.0(typescript@6.0.3) + '@orval/hono': 8.11.0(typescript@6.0.3) + '@orval/mcp': 8.11.0(typescript@6.0.3) + '@orval/mock': 8.11.0(typescript@6.0.3) + '@orval/query': 8.11.0(typescript@6.0.3) + '@orval/solid-start': 8.11.0(typescript@6.0.3) + '@orval/swr': 8.11.0(typescript@6.0.3) + '@orval/zod': 8.11.0(typescript@6.0.3) '@scalar/json-magic': 0.12.14 '@scalar/openapi-parser': 0.25.12 '@scalar/openapi-types': 0.8.0 @@ -7048,11 +7009,11 @@ snapshots: dependencies: quansync: 0.2.11 - paneforge@1.0.2(svelte@5.55.7(@typescript-eslint/types@8.59.3)): + paneforge@1.0.2(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: - runed: 0.23.4(svelte@5.55.7(@typescript-eslint/types@8.59.3)) - svelte: 5.55.7(@typescript-eslint/types@8.59.3) - svelte-toolbelt: 0.9.3(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + runed: 0.23.4(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + svelte-toolbelt: 0.9.3(svelte@5.55.9(@typescript-eslint/types@8.59.4)) parent-module@1.0.1: dependencies: @@ -7077,7 +7038,7 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.3.6 + lru-cache: 11.5.0 minipass: 7.1.3 path-type@4.0.0: {} @@ -7086,7 +7047,7 @@ snapshots: pg-int8@1.0.1: {} - pg-protocol@1.13.0: {} + pg-protocol@1.14.0: {} pg-types@2.2.0: dependencies: @@ -7114,27 +7075,27 @@ snapshots: pngjs@7.0.0: {} - postcss-load-config@3.1.4(postcss@8.5.14): + postcss-load-config@3.1.4(postcss@8.5.15): dependencies: lilconfig: 2.1.0 yaml: 1.10.3 optionalDependencies: - postcss: 8.5.14 + postcss: 8.5.15 - postcss-safe-parser@7.0.1(postcss@8.5.14): + postcss-safe-parser@7.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.14 + postcss: 8.5.15 - postcss-scss@4.0.9(postcss@8.5.14): + postcss-scss@4.0.9(postcss@8.5.15): dependencies: - postcss: 8.5.14 + postcss: 8.5.15 postcss-selector-parser@7.1.1: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss@8.5.14: + postcss@8.5.15: dependencies: nanoid: 3.3.12 picocolors: 1.1.1 @@ -7152,16 +7113,16 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-svelte@3.5.2(prettier@3.8.3)(svelte@5.55.7(@typescript-eslint/types@8.59.3)): + prettier-plugin-svelte@4.0.0(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: prettier: 3.8.3 - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) - prettier-plugin-tailwindcss@0.8.0(prettier-plugin-svelte@3.5.2(prettier@3.8.3)(svelte@5.55.7(@typescript-eslint/types@8.59.3)))(prettier@3.8.3): + prettier-plugin-tailwindcss@0.8.0(prettier-plugin-svelte@4.0.0(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)))(prettier@3.8.3): dependencies: prettier: 3.8.3 optionalDependencies: - prettier-plugin-svelte: 3.5.2(prettier@3.8.3)(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + prettier-plugin-svelte: 4.0.0(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)) prettier@2.8.8: {} @@ -7282,38 +7243,38 @@ snapshots: dependencies: queue-microtask: 1.2.3 - runed@0.23.4(svelte@5.55.7(@typescript-eslint/types@8.59.3)): + runed@0.23.4(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: esm-env: 1.2.2 - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) - runed@0.28.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)): + runed@0.28.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: esm-env: 1.2.2 - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) - runed@0.29.2(svelte@5.55.7(@typescript-eslint/types@8.59.3)): + runed@0.29.2(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: esm-env: 1.2.2 - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) - runed@0.35.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3)): + runed@0.35.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) optionalDependencies: - '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) - runed@0.37.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(zod@4.4.3): + runed@0.37.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(zod@4.4.3): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) optionalDependencies: - '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) zod: 4.4.3 sade@1.8.1: @@ -7407,9 +7368,9 @@ snapshots: dependencies: inline-style-parser: 0.2.7 - super-sitemap@1.0.12(svelte@5.55.7(@typescript-eslint/types@8.59.3)): + super-sitemap@1.0.12(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) superstruct@2.0.2: optional: true @@ -7420,91 +7381,82 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@4.4.8(picomatch@4.0.4)(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3): + svelte-check@4.4.8(picomatch@4.0.4)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3): dependencies: '@jridgewell/trace-mapping': 0.3.31 chokidar: 4.0.3 fdir: 6.5.0(picomatch@4.0.4) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) typescript: 6.0.3 transitivePeerDependencies: - picomatch - svelte-eslint-parser@1.6.1(svelte@5.55.7(@typescript-eslint/types@8.59.3)): + svelte-eslint-parser@1.6.1(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - postcss: 8.5.14 - postcss-scss: 4.0.9(postcss@8.5.14) + postcss: 8.5.15 + postcss-scss: 4.0.9(postcss@8.5.15) postcss-selector-parser: 7.1.1 semver: 7.8.0 optionalDependencies: - svelte: 5.55.7(@typescript-eslint/types@8.59.3) - - svelte-persisted-store@0.12.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)): - dependencies: - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) - svelte-preprocess@6.0.3(@babel/core@7.29.0)(postcss-load-config@3.1.4(postcss@8.5.14))(postcss@8.5.14)(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3): + svelte-persisted-store@0.12.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: - svelte: 5.55.7(@typescript-eslint/types@8.59.3) - optionalDependencies: - '@babel/core': 7.29.0 - postcss: 8.5.14 - postcss-load-config: 3.1.4(postcss@8.5.14) - typescript: 6.0.3 + svelte: 5.55.9(@typescript-eslint/types@8.59.4) - svelte-seo@2.0.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)): + svelte-seo@2.0.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: schema-dts: 1.1.5 - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) - svelte-sonner@1.1.1(svelte@5.55.7(@typescript-eslint/types@8.59.3)): + svelte-sonner@1.1.1(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: - runed: 0.28.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)) - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + runed: 0.28.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) - svelte-tiny-virtual-list@4.0.0-rc.2(svelte@5.55.7(@typescript-eslint/types@8.59.3)): + svelte-tiny-virtual-list@4.0.0-rc.2(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) - svelte-toolbelt@0.10.6(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3)): + svelte-toolbelt@0.10.6(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: clsx: 2.1.1 - runed: 0.35.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + runed: 0.35.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) style-to-object: 1.0.14 - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) transitivePeerDependencies: - '@sveltejs/kit' - svelte-toolbelt@0.5.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)): + svelte-toolbelt@0.5.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: clsx: 2.1.1 style-to-object: 1.0.14 - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) - svelte-toolbelt@0.7.1(svelte@5.55.7(@typescript-eslint/types@8.59.3)): + svelte-toolbelt@0.7.1(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: clsx: 2.1.1 - runed: 0.23.4(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + runed: 0.23.4(svelte@5.55.9(@typescript-eslint/types@8.59.4)) style-to-object: 1.0.14 - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) - svelte-toolbelt@0.9.3(svelte@5.55.7(@typescript-eslint/types@8.59.3)): + svelte-toolbelt@0.9.3(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: clsx: 2.1.1 - runed: 0.29.2(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + runed: 0.29.2(svelte@5.55.9(@typescript-eslint/types@8.59.4)) style-to-object: 1.0.14 - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) - svelte@5.55.7(@typescript-eslint/types@8.59.3): + svelte@5.55.9(@typescript-eslint/types@8.59.4): dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 - '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) + '@sveltejs/acorn-typescript': 1.0.10(acorn@8.16.0) '@types/estree': 1.0.9 '@types/trusted-types': 2.0.7 acorn: 8.16.0 @@ -7513,7 +7465,7 @@ snapshots: clsx: 2.1.1 devalue: 5.8.1 esm-env: 1.2.2 - esrap: 2.2.8(@typescript-eslint/types@8.59.3) + esrap: 2.2.9(@typescript-eslint/types@8.59.4) is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.21 @@ -7521,12 +7473,12 @@ snapshots: transitivePeerDependencies: - '@typescript-eslint/types' - sveltekit-superforms@2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3): + sveltekit-superforms@2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3): dependencies: - '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) devalue: 5.8.1 memoize-weak: 1.0.2 - svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) ts-deepmerge: 7.0.3 optionalDependencies: '@exodus/schemasafe': 1.3.0 @@ -7559,11 +7511,11 @@ snapshots: tailwindcss@4.3.0: {} - takumi-js@1.1.2: + takumi-js@1.3.0: dependencies: - '@takumi-rs/core': 1.1.2 - '@takumi-rs/helpers': 1.1.2 - '@takumi-rs/wasm': 1.1.2 + '@takumi-rs/core': 1.3.0 + '@takumi-rs/helpers': 1.3.0 + '@takumi-rs/wasm': 1.3.0 transitivePeerDependencies: - react - react-dom @@ -7642,13 +7594,13 @@ snapshots: typescript: 6.0.3 yaml: 2.9.0 - typescript-eslint@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3): + typescript-eslint@8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/parser': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) - eslint: 10.3.0(jiti@2.7.0) + '@typescript-eslint/eslint-plugin': 8.59.4(@typescript-eslint/parser@8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.59.4(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.4.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -7689,45 +7641,45 @@ snapshots: validator@13.15.35: optional: true - vaul-svelte@1.0.0-next.7(svelte@5.55.7(@typescript-eslint/types@8.59.3)): + vaul-svelte@1.0.0-next.7(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: - runed: 0.23.4(svelte@5.55.7(@typescript-eslint/types@8.59.3)) - svelte: 5.55.7(@typescript-eslint/types@8.59.3) - svelte-toolbelt: 0.7.1(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + runed: 0.23.4(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + svelte-toolbelt: 0.7.1(svelte@5.55.9(@typescript-eslint/types@8.59.4)) - vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0): + vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 - postcss: 8.5.14 + postcss: 8.5.15 rolldown: 1.0.1 tinyglobby: 0.2.16 optionalDependencies: - '@types/node': 25.8.0 + '@types/node': 25.9.1 esbuild: 0.27.7 fsevents: 2.3.3 jiti: 2.7.0 yaml: 2.9.0 - vitefu@1.1.3(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)): + vitefu@1.1.3(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)): optionalDependencies: - vite: 8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) - vitest-browser-svelte@2.1.1(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vitest@4.1.6): + vitest-browser-svelte@2.1.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7): dependencies: - '@testing-library/svelte-core': 1.0.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)) - svelte: 5.55.7(@typescript-eslint/types@8.59.3) - vitest: 4.1.6(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/browser-playwright@4.1.6)(@vitest/coverage-v8@4.1.6)(@vitest/ui@4.1.6)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + '@testing-library/svelte-core': 1.0.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) - vitest@4.1.6(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/browser-playwright@4.1.6)(@vitest/coverage-v8@4.1.6)(@vitest/ui@4.1.6)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)): + vitest@4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)): dependencies: - '@vitest/expect': 4.1.6 - '@vitest/mocker': 4.1.6(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) - '@vitest/pretty-format': 4.1.6 - '@vitest/runner': 4.1.6 - '@vitest/snapshot': 4.1.6 - '@vitest/spy': 4.1.6 - '@vitest/utils': 4.1.6 + '@vitest/expect': 4.1.7 + '@vitest/mocker': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.7 + '@vitest/runner': 4.1.7 + '@vitest/snapshot': 4.1.7 + '@vitest/spy': 4.1.7 + '@vitest/utils': 4.1.7 es-module-lexer: 2.1.0 expect-type: 1.3.0 magic-string: 0.30.21 @@ -7739,14 +7691,14 @@ snapshots: tinyexec: 1.1.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 - '@types/node': 25.8.0 - '@vitest/browser-playwright': 4.1.6(playwright@1.60.0)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.6) - '@vitest/coverage-v8': 4.1.6(@vitest/browser@4.1.6)(vitest@4.1.6) - '@vitest/ui': 4.1.6(vitest@4.1.6) + '@types/node': 25.9.1 + '@vitest/browser-playwright': 4.1.7(playwright@1.60.0)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.7) + '@vitest/coverage-v8': 4.1.7(@vitest/browser@4.1.7)(vitest@4.1.7) + '@vitest/ui': 4.1.7(vitest@4.1.7) transitivePeerDependencies: - msw diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e937750d9..e157368b4 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,4 +2,3 @@ allowBuilds: "@sentry/cli": true esbuild: true simple-git-hooks: true - svelte-preprocess: true From c077847a0fbf13a8aa73122aa28e873189c172f4 Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Sat, 23 May 2026 02:17:12 +0200 Subject: [PATCH 03/34] feat(accounts): setup drizzle, better-auth and initial account system --- .changeset/crisp-tires-hang.md | 5 + .env.example | 23 +- .prettierignore | 1 + drizzle.config.ts | 12 + package.json | 14 +- pnpm-lock.yaml | 1928 ++++++++++++++++- pnpm-workspace.yaml | 2 + src/app.d.ts | 13 +- src/hooks.server.ts | 52 +- src/lib/server/auth.ts | 135 ++ src/lib/server/db/index.ts | 11 + src/lib/server/db/migrate.ts | 22 + src/lib/server/db/schema/auth.schema.ts | 127 ++ src/lib/server/db/schema/index.ts | 1 + src/lib/shared/auth-client.ts | 14 + .../drizzle/0000_dapper_killer_shrike.sql | 86 + .../shared/drizzle/meta/0000_snapshot.json | 602 +++++ src/lib/shared/drizzle/meta/_journal.json | 13 + src/lib/shared/roles.ts | 9 + src/routes/(protected)/dashboard/+page.svelte | 1 + src/routes/(protected)/logout/+page.server.ts | 11 + src/routes/login/+page.svelte | 40 + src/routes/login/login.remote.ts | 22 + src/routes/sitemap.xml/+server.ts | 2 +- svelte.config.js | 6 + 25 files changed, 3072 insertions(+), 80 deletions(-) create mode 100644 .changeset/crisp-tires-hang.md create mode 100644 drizzle.config.ts create mode 100644 src/lib/server/auth.ts create mode 100644 src/lib/server/db/index.ts create mode 100644 src/lib/server/db/migrate.ts create mode 100644 src/lib/server/db/schema/auth.schema.ts create mode 100644 src/lib/server/db/schema/index.ts create mode 100644 src/lib/shared/auth-client.ts create mode 100644 src/lib/shared/drizzle/0000_dapper_killer_shrike.sql create mode 100644 src/lib/shared/drizzle/meta/0000_snapshot.json create mode 100644 src/lib/shared/drizzle/meta/_journal.json create mode 100644 src/lib/shared/roles.ts create mode 100644 src/routes/(protected)/dashboard/+page.svelte create mode 100644 src/routes/(protected)/logout/+page.server.ts create mode 100644 src/routes/login/+page.svelte create mode 100644 src/routes/login/login.remote.ts diff --git a/.changeset/crisp-tires-hang.md b/.changeset/crisp-tires-hang.md new file mode 100644 index 000000000..caf3fbc30 --- /dev/null +++ b/.changeset/crisp-tires-hang.md @@ -0,0 +1,5 @@ +--- +"skycrypt-frontend": minor +--- + +Add initial work for SkyCrypt accounts diff --git a/.env.example b/.env.example index 1c0f9c0b3..99f40c51b 100644 --- a/.env.example +++ b/.env.example @@ -17,4 +17,25 @@ PUBLIC_SENTRY_PROJECT_ID="" # GO API PUBLIC_API_URL="http://localhost:8080/api/" PUBLIC_SERVER_API_URL="http://localhost:8080/api/" # If you're using docker, set this to the name of the backend container, e.g. http://skycrypt-backend-1:8080/api/ -SERVER_API_TOKEN="" # Must match the token in the backend config \ No newline at end of file +SERVER_API_TOKEN="" # Must match the token in the backend config + +# Drizzle +DATABASE_URL="postgres://root:mysecretpassword@localhost:5432/skycrypt_frontend" + +# Better Auth +# For production use 32 characters and generated with high entropy +# https://www.better-auth.com/docs/installation +BETTER_AUTH_SECRET="" +# Discord OAuth +# https://www.better-auth.com/docs/authentication/discord +DISCORD_CLIENT_ID="" +DISCORD_CLIENT_SECRET="" +# MC-ID OAuth +# https://www.better-auth.com/docs/authentication/other-social-providers +# https://mc-id.com +MC_ID_CLIENT_ID="" +MC_ID_CLIENT_SECRET="" +# Patreon API +# https://www.patreon.com/portal/registration/register-clients +PATREON_CLIENT_ID="" +PATREON_CLIENT_SECRET="" \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index be8bff7b7..ca45359e2 100644 --- a/.prettierignore +++ b/.prettierignore @@ -8,3 +8,4 @@ bun.lockb # Miscellaneous /static/ .changeset/ +/drizzle/ diff --git a/drizzle.config.ts b/drizzle.config.ts new file mode 100644 index 000000000..156bd0672 --- /dev/null +++ b/drizzle.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "drizzle-kit"; + +if (!process.env.DATABASE_URL) throw new Error("DATABASE_URL is not set"); + +export default defineConfig({ + schema: "./src/lib/server/db/schema/index.ts", + out: "./src/lib/shared/drizzle", + dialect: "postgresql", + dbCredentials: { url: process.env.DATABASE_URL }, + verbose: true, + strict: true +}); diff --git a/package.json b/package.json index 5433ae179..498662d75 100644 --- a/package.json +++ b/package.json @@ -29,9 +29,16 @@ "changeset:tag": "changeset tag", "release:beta": "node scripts/release-beta.mjs", "release:stable": "node scripts/release-stable.mjs", - "test:e2e": "playwright test" + "test:e2e": "playwright test", + "db:start": "docker compose up", + "db:push": "drizzle-kit push", + "db:generate": "drizzle-kit generate", + "db:migrate": "drizzle-kit migrate", + "db:studio": "drizzle-kit studio", + "auth:schema": "auth generate --config src/lib/server/auth.ts --output src/lib/server/db/schema/auth.schema.ts --yes" }, "devDependencies": { + "@better-auth/api-key": "^1.6.11", "@changesets/cli": "^2.31.0", "@commitlint/cli": "^21.0.1", "@commitlint/config-conventional": "^21.0.1", @@ -60,11 +67,15 @@ "@vitest/browser-playwright": "^4.1.7", "@vitest/coverage-v8": "^4.1.7", "@vitest/ui": "^4.1.7", + "auth": "^1.6.11", + "better-auth": "^1.6.11", "bits-ui": "^2.18.1", "clsx": "^2.1.1", "date-fns": "^4.2.1", "devalue": "^5.8.1", "dotenv-cli": "^11.0.0", + "drizzle-kit": "^0.31.10", + "drizzle-orm": "^0.45.2", "eslint": "^10.4.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-svelte": "^3.17.1", @@ -75,6 +86,7 @@ "orval": "^8.11.0", "paneforge": "^1.0.2", "playwright": "^1.60.0", + "postgres": "^3.4.9", "prettier": "^3.8.3", "prettier-plugin-svelte": "^4.0.0", "prettier-plugin-tailwindcss": "^0.8.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 64121e11a..cd4b78db9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@sentry/sveltekit': specifier: ^10.53.1 - version: 10.53.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(rollup@4.60.4)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + version: 10.53.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(rollup@4.60.4)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) culori: specifier: ^4.0.2 version: 4.0.2 @@ -21,6 +21,9 @@ importers: specifier: 1.3.0 version: 1.3.0 devDependencies: + '@better-auth/api-key': + specifier: ^1.6.11 + version: 1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(better-auth@1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7)) '@changesets/cli': specifier: ^2.31.0 version: 2.31.0(@types/node@25.9.1) @@ -68,19 +71,19 @@ importers: version: 1.60.0 '@sveltejs/adapter-node': specifier: ^5.5.4 - version: 5.5.4(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))) + version: 5.5.4(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))) '@sveltejs/kit': specifier: ^2.60.1 - version: 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + version: 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) '@sveltejs/vite-plugin-svelte': specifier: ^7.1.2 - version: 7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + version: 7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) '@svitejs/changesets-changelog-github-compact': specifier: ^1.2.0 version: 1.2.0 '@tailwindcss/vite': specifier: ^4.3.0 - version: 4.3.0(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + version: 4.3.0(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) '@types/culori': specifier: ^4.0.1 version: 4.0.1 @@ -98,16 +101,22 @@ importers: version: 2.1.5 '@vitest/browser-playwright': specifier: ^4.1.7 - version: 4.1.7(playwright@1.60.0)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.7) + version: 4.1.7(playwright@1.60.0)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7) '@vitest/coverage-v8': specifier: ^4.1.7 version: 4.1.7(@vitest/browser@4.1.7)(vitest@4.1.7) '@vitest/ui': specifier: ^4.1.7 version: 4.1.7(vitest@4.1.7) + auth: + specifier: ^1.6.11 + version: 1.6.11(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(better-call@1.3.5(zod@4.4.3))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(jose@6.2.3)(kysely@0.28.17)(magicast@0.5.3)(nanostores@1.3.0)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) + better-auth: + specifier: ^1.6.11 + version: 1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) bits-ui: specifier: ^2.18.1 - version: 2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + version: 2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -120,6 +129,12 @@ importers: dotenv-cli: specifier: ^11.0.0 version: 11.0.0 + drizzle-kit: + specifier: ^0.31.10 + version: 0.31.10 + drizzle-orm: + specifier: ^0.45.2 + version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9) eslint: specifier: ^10.4.0 version: 10.4.0(jiti@2.7.0) @@ -131,7 +146,7 @@ importers: version: 3.17.1(eslint@10.4.0(jiti@2.7.0))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) formsnap: specifier: ^2.0.1 - version: 2.0.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)) + version: 2.0.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)) globals: specifier: ^17.6.0 version: 17.6.0 @@ -150,6 +165,9 @@ importers: playwright: specifier: ^1.60.0 version: 1.60.0 + postgres: + specifier: ^3.4.9 + version: 3.4.9 prettier: specifier: ^3.8.3 version: 3.8.3 @@ -164,7 +182,7 @@ importers: version: 9.3.0 runed: specifier: ^0.37.1 - version: 0.37.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(zod@4.4.3) + version: 0.37.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(zod@4.4.3) satori-html: specifier: ^0.3.2 version: 0.3.2 @@ -194,7 +212,7 @@ importers: version: 4.0.0-rc.2(svelte@5.55.9(@typescript-eslint/types@8.59.4)) sveltekit-superforms: specifier: ^2.30.1 - version: 2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3) + version: 2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3) tailwind-merge: specifier: ^3.6.0 version: 3.6.0 @@ -218,10 +236,10 @@ importers: version: 1.0.0-next.7(svelte@5.55.9(@typescript-eslint/types@8.59.4)) vite: specifier: ^8.0.13 - version: 8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) + version: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0) vitest: specifier: ^4.1.7 - version: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + version: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) vitest-browser-svelte: specifier: ^2.1.1 version: 2.1.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) @@ -253,14 +271,28 @@ packages: resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.28.6': resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.29.3': + resolution: {integrity: sha512-RpLYy2sb51oNLjuu1iD3bwBqCBWUzjO0ocp+iaCP/lJtb2CPLcnC2Fftw+4sAzaMELGeWTgExSKADbdo0GFVzA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-globals@7.28.0': resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.28.5': + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.28.6': resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} engines: {node: '>=6.9.0'} @@ -271,6 +303,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} + + '@babel/helper-replace-supers@7.28.6': + resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} @@ -292,6 +342,66 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/plugin-syntax-jsx@7.28.6': + resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.28.6': + resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.28.6': + resolution: {integrity: sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-display-name@7.28.0': + resolution: {integrity: sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-development@7.27.1': + resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx@7.28.6': + resolution: {integrity: sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-pure-annotations@7.27.1': + resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.28.6': + resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-react@7.28.5': + resolution: {integrity: sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-typescript@7.28.5': + resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/runtime@7.29.2': resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} engines: {node: '>=6.9.0'} @@ -312,6 +422,92 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} + '@better-auth/api-key@1.6.11': + resolution: {integrity: sha512-717Bmbs1Y2h0KrPIwrutxI/HwdqKlga1a1OHlL5TrRbN35IxHeY3GilqvyI/92n7RxFGa/AQhIajX0OL+FJkvw==} + peerDependencies: + '@better-auth/core': ^1.6.11 + '@better-auth/utils': 0.4.0 + better-auth: ^1.6.11 + + '@better-auth/core@1.6.11': + resolution: {integrity: sha512-LrwidLCV8azdMGjvtwp30nj9tIv1BwI3VhtC0UaGSjQkAVWw4bN42I8qwbxRziPeSQoj+zUVkOpxZzAWBDARtQ==} + peerDependencies: + '@better-auth/utils': 0.4.0 + '@better-fetch/fetch': 1.1.21 + '@cloudflare/workers-types': '>=4' + '@opentelemetry/api': ^1.9.0 + better-call: 1.3.5 + jose: ^6.1.0 + kysely: ^0.28.5 + nanostores: ^1.0.1 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true + '@opentelemetry/api': + optional: true + + '@better-auth/drizzle-adapter@1.6.11': + resolution: {integrity: sha512-4jpkETIGZOHCf7BK4jnu22fdN6jjomH0/HhEzkaWy3+Eppi5PYlHTF/460jrTmA3Xc+Vqwp9t282ymHiEPypGw==} + peerDependencies: + '@better-auth/core': ^1.6.11 + '@better-auth/utils': 0.4.0 + drizzle-orm: ^0.45.2 + peerDependenciesMeta: + drizzle-orm: + optional: true + + '@better-auth/kysely-adapter@1.6.11': + resolution: {integrity: sha512-/g8M9RfIjdcZDnbstSUvQiINkvdNlCeZr248zwqx2/PVksQI1MhQofbzUn3RnQnbPKp0EPwpX/dR3oudRFenUg==} + peerDependencies: + '@better-auth/core': ^1.6.11 + '@better-auth/utils': 0.4.0 + kysely: ^0.28.17 + peerDependenciesMeta: + kysely: + optional: true + + '@better-auth/memory-adapter@1.6.11': + resolution: {integrity: sha512-hpdfw0BBf8MuzLkIdmbcUZICbY9r/bhLO2RxSnkzT5+/O+0I0u2I8+m0YUP7vNllP/ZCKASHOYgXPLO75Z0f9Q==} + peerDependencies: + '@better-auth/core': ^1.6.11 + '@better-auth/utils': 0.4.0 + + '@better-auth/mongo-adapter@1.6.11': + resolution: {integrity: sha512-3Tor8rSv8vSEIMEaV2PFpPEuVhqc1gNoZ6eGvoh3LwExXXuj8madew6ob+H1pH7Aphn3Ar5PQ08AguT8TbwFAA==} + peerDependencies: + '@better-auth/core': ^1.6.11 + '@better-auth/utils': 0.4.0 + mongodb: ^6.0.0 || ^7.0.0 + peerDependenciesMeta: + mongodb: + optional: true + + '@better-auth/prisma-adapter@1.6.11': + resolution: {integrity: sha512-Pw+7q7zTp+VSci1V+CYMvuxIbAeVMZLe4lRo46LJoAKMHfjFl5T/ycsyFvWs/DkWC7n9gZZzRDEbHp0I5FiKKw==} + peerDependencies: + '@better-auth/core': ^1.6.11 + '@better-auth/utils': 0.4.0 + '@prisma/client': ^5.0.0 || ^6.0.0 || ^7.0.0 + prisma: ^5.0.0 || ^6.0.0 || ^7.0.0 + peerDependenciesMeta: + '@prisma/client': + optional: true + prisma: + optional: true + + '@better-auth/telemetry@1.6.11': + resolution: {integrity: sha512-hsjDHc8MZbm6/AHeNdtywrWedXevnBjmdvnHTcZub+rTVjOv+Td0roI8USKuC6uUibmrl//2rJfVCsGbopihNA==} + peerDependencies: + '@better-auth/core': ^1.6.11 + '@better-auth/utils': 0.4.0 + '@better-fetch/fetch': 1.1.21 + + '@better-auth/utils@0.4.0': + resolution: {integrity: sha512-RpMtLUIQAEWMgdPLNVbIF5ON2mm+CH0U3rCdUCU1VyeAUui4m38DyK7/aXMLZov2YDjG684pS1D0MBllrmgjQA==} + + '@better-fetch/fetch@1.1.21': + resolution: {integrity: sha512-/ImESw0sskqlVR94jB+5+Pxjf+xBwDZF/N5+y2/q4EqD7IARUTSpPfIo8uf39SYpCxyOCtbyYpUrZ3F/k0zT4A==} + '@blazediff/core@1.9.1': resolution: {integrity: sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==} @@ -373,6 +569,24 @@ packages: '@changesets/write@0.4.0': resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} + '@chevrotain/cst-dts-gen@10.5.0': + resolution: {integrity: sha512-lhmC/FyqQ2o7pGK4Om+hzuDrm9rhFYIJ/AXoQBeongmn870Xeb0L6oGEiuR8nohFNL5sMaQEJWCxr1oIVIVXrw==} + + '@chevrotain/gast@10.5.0': + resolution: {integrity: sha512-pXdMJ9XeDAbgOWKuD1Fldz4ieCs6+nLNmyVhe2gZVqoO7v8HXuHYs5OV2EzUtbuai37TlOAQHrTDvxMnvMJz3A==} + + '@chevrotain/types@10.5.0': + resolution: {integrity: sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A==} + + '@chevrotain/utils@10.5.0': + resolution: {integrity: sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ==} + + '@clack/core@0.5.0': + resolution: {integrity: sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==} + + '@clack/prompts@0.11.0': + resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==} + '@commander-js/extra-typings@14.0.0': resolution: {integrity: sha512-hIn0ncNaJRLkZrxBIp5AsW/eXEHNKYQBh0aPdoUqNgD+Io3NIykQqpKFyKcuasZhicGaEZJX/JBSIkZ4e5x8Dg==} peerDependencies: @@ -485,6 +699,9 @@ packages: peerDependencies: svelte: ^5.29.0 + '@drizzle-team/brocli@0.10.2': + resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} + '@emnapi/core@1.10.0': resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} @@ -494,162 +711,614 @@ packages: '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@esbuild-kit/core-utils@3.3.2': + resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} + deprecated: 'Merged into tsx: https://tsx.is' + + '@esbuild-kit/esm-loader@2.6.5': + resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} + deprecated: 'Merged into tsx: https://tsx.is' + + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.27.7': resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.28.0': + resolution: {integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.18.20': + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.27.7': resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.28.0': + resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.18.20': + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.27.7': resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-arm@0.28.0': + resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.18.20': + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.27.7': resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/android-x64@0.28.0': + resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.18.20': + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.27.7': resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.28.0': + resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.18.20': + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.27.7': resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.28.0': + resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.18.20': + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.27.7': resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.28.0': + resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.18.20': + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.27.7': resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.28.0': + resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.18.20': + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.27.7': resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.28.0': + resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.18.20': + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.27.7': resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.28.0': + resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.18.20': + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.27.7': resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.28.0': + resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.18.20': + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.27.7': resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.28.0': + resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.18.20': + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.27.7': resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.28.0': + resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.18.20': + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.27.7': resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.28.0': + resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.18.20': + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.27.7': resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.28.0': + resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.18.20': + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.27.7': resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.28.0': + resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.18.20': + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.27.7': resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.28.0': + resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.27.7': resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-arm64@0.28.0': + resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.18.20': + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.27.7': resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.28.0': + resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.27.7': resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.28.0': + resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.18.20': + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.27.7': resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.28.0': + resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/openharmony-arm64@0.27.7': resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] + '@esbuild/openharmony-arm64@0.28.0': + resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.18.20': + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.27.7': resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.28.0': + resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.18.20': + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.27.7': resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.28.0': + resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.18.20': + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.27.7': resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.28.0': + resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.18.20': + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.27.7': resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} engines: {node: '>=18'} cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.28.0': + resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.9.1': resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -783,12 +1452,24 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@mrleebo/prisma-ast@0.13.1': + resolution: {integrity: sha512-XyroGQXcHrZdvmrGJvsA9KNeOOgGMg1Vg9OlheUsBOSKznLMDl+YChxbkboRHvtFYJEMRYmlV3uoo/njCw05iw==} + engines: {node: '>=16'} + '@napi-rs/wasm-runtime@1.1.4': resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} peerDependencies: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 + '@noble/ciphers@2.2.0': + resolution: {integrity: sha512-Z6pjIZ/8IJcCGzb2S/0Px5J81yij85xASuk1teLNeg75bfT07MV3a/O2Mtn1I2se43k3lkVEcFaR10N4cgQcZA==} + engines: {node: '>= 20.19.0'} + + '@noble/hashes@2.2.0': + resolution: {integrity: sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==} + engines: {node: '>= 20.19.0'} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2070,6 +2751,10 @@ packages: ast-v8-to-istanbul@1.0.0: resolution: {integrity: sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==} + auth@1.6.11: + resolution: {integrity: sha512-SyQZAU37AosE8koF0fBsDob9+Q7AvdAA1YFblg/5DkhwdiaHGIACjDZTJJq8cEWjkLAszDcAc0kC2DSr1xZ8wg==} + hasBin: true + axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} @@ -2078,10 +2763,80 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.10.31: - resolution: {integrity: sha512-MujYO3eP72uvmSE0i4wltsodRfIpZATP3jvzRNRGGxgzId7aVocVJJV3nf01qnzzKFGxQVC9bpWxl5cjxTr/7Q==} - engines: {node: '>=6.0.0'} - hasBin: true + baseline-browser-mapping@2.10.31: + resolution: {integrity: sha512-MujYO3eP72uvmSE0i4wltsodRfIpZATP3jvzRNRGGxgzId7aVocVJJV3nf01qnzzKFGxQVC9bpWxl5cjxTr/7Q==} + engines: {node: '>=6.0.0'} + hasBin: true + + better-auth@1.6.11: + resolution: {integrity: sha512-Wwt6+q07dwIhsp6XiM7L1qSXVUWBEtNl+eZvwM778CguFqDZFBN9Pt6LtFaHl55t8Z+Zc//5kxcbgDY8/79vFQ==} + peerDependencies: + '@lynx-js/react': '*' + '@prisma/client': ^5.0.0 || ^6.0.0 || ^7.0.0 + '@sveltejs/kit': ^2.0.0 + '@tanstack/react-start': ^1.0.0 + '@tanstack/solid-start': ^1.0.0 + better-sqlite3: ^12.0.0 + drizzle-kit: '>=0.31.4' + drizzle-orm: ^0.45.2 + mongodb: ^6.0.0 || ^7.0.0 + mysql2: ^3.0.0 + next: ^14.0.0 || ^15.0.0 || ^16.0.0 + pg: ^8.0.0 + prisma: ^5.0.0 || ^6.0.0 || ^7.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + solid-js: ^1.0.0 + svelte: ^4.0.0 || ^5.0.0 + vitest: ^2.0.0 || ^3.0.0 || ^4.0.0 + vue: ^3.0.0 + peerDependenciesMeta: + '@lynx-js/react': + optional: true + '@prisma/client': + optional: true + '@sveltejs/kit': + optional: true + '@tanstack/react-start': + optional: true + '@tanstack/solid-start': + optional: true + better-sqlite3: + optional: true + drizzle-kit: + optional: true + drizzle-orm: + optional: true + mongodb: + optional: true + mysql2: + optional: true + next: + optional: true + pg: + optional: true + prisma: + optional: true + react: + optional: true + react-dom: + optional: true + solid-js: + optional: true + svelte: + optional: true + vitest: + optional: true + vue: + optional: true + + better-call@1.3.5: + resolution: {integrity: sha512-kOFJkBP7utAQLEYrobZm3vkTH8mXq5GNgvjc5/XEST1ilVHaxXUXfeDeFlqoETMtyqS4+3/h4ONX2i++ebZrvA==} + peerDependencies: + zod: ^4.0.0 + peerDependenciesMeta: + zod: + optional: true better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} @@ -2107,6 +2862,21 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + c12@3.3.4: + resolution: {integrity: sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==} + peerDependencies: + magicast: '*' + peerDependenciesMeta: + magicast: + optional: true + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -2122,9 +2892,16 @@ packages: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + chevrotain@10.5.0: + resolution: {integrity: sha512-Pkv5rBY3+CsHOYfV5g/Vs5JY9WTHHDEKOlohI2XeygaZhUeqhAlldZ8Hz9cRmxu709bvS08YzxHdTPHhffc13A==} + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -2147,6 +2924,10 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + commander@14.0.3: resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} engines: {node: '>=20'} @@ -2160,6 +2941,9 @@ packages: compare-versions@6.1.1: resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + confbox@0.2.4: + resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} + conventional-changelog-angular@8.3.1: resolution: {integrity: sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==} engines: {node: '>=18'} @@ -2235,10 +3019,28 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} + engines: {node: '>=18'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -2277,6 +3079,102 @@ packages: resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} engines: {node: '>=12'} + drizzle-kit@0.31.10: + resolution: {integrity: sha512-7OZcmQUrdGI+DUNNsKBn1aW8qSoKuTH7d0mYgSP8bAzdFzKoovxEFnoGQp2dVs82EOJeYycqRtciopszwUf8bw==} + hasBin: true + + drizzle-orm@0.45.2: + resolution: {integrity: sha512-kY0BSaTNYWnoDMVoyY8uxmyHjpJW1geOmBMdSSicKo9CIIWkSxMIj2rkeSR51b8KAPB7m+qysjuHme5nKP+E5Q==} + peerDependencies: + '@aws-sdk/client-rds-data': '>=3' + '@cloudflare/workers-types': '>=4' + '@electric-sql/pglite': '>=0.2.0' + '@libsql/client': '>=0.10.0' + '@libsql/client-wasm': '>=0.10.0' + '@neondatabase/serverless': '>=0.10.0' + '@op-engineering/op-sqlite': '>=2' + '@opentelemetry/api': ^1.4.1 + '@planetscale/database': '>=1.13' + '@prisma/client': '*' + '@tidbcloud/serverless': '*' + '@types/better-sqlite3': '*' + '@types/pg': '*' + '@types/sql.js': '*' + '@upstash/redis': '>=1.34.7' + '@vercel/postgres': '>=0.8.0' + '@xata.io/client': '*' + better-sqlite3: '>=7' + bun-types: '*' + expo-sqlite: '>=14.0.0' + gel: '>=2' + knex: '*' + kysely: '*' + mysql2: '>=2' + pg: '>=8' + postgres: '>=3' + prisma: '*' + sql.js: '>=1' + sqlite3: '>=5' + peerDependenciesMeta: + '@aws-sdk/client-rds-data': + optional: true + '@cloudflare/workers-types': + optional: true + '@electric-sql/pglite': + optional: true + '@libsql/client': + optional: true + '@libsql/client-wasm': + optional: true + '@neondatabase/serverless': + optional: true + '@op-engineering/op-sqlite': + optional: true + '@opentelemetry/api': + optional: true + '@planetscale/database': + optional: true + '@prisma/client': + optional: true + '@tidbcloud/serverless': + optional: true + '@types/better-sqlite3': + optional: true + '@types/pg': + optional: true + '@types/sql.js': + optional: true + '@upstash/redis': + optional: true + '@vercel/postgres': + optional: true + '@xata.io/client': + optional: true + better-sqlite3: + optional: true + bun-types: + optional: true + expo-sqlite: + optional: true + gel: + optional: true + knex: + optional: true + kysely: + optional: true + mysql2: + optional: true + pg: + optional: true + postgres: + optional: true + prisma: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + effect@3.21.2: resolution: {integrity: sha512-rXd2FGDM8KdjSIrc+mqEELo7ScW7xTVxEf1iInmPSpIde9/nyGuFM710cjTo7/EreGXiUX2MOonPpprbz2XHCg==} @@ -2315,11 +3213,26 @@ packages: es-toolkit@1.46.1: resolution: {integrity: sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ==} + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.27.7: resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} engines: {node: '>=18'} hasBin: true + esbuild@0.28.0: + resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -2428,6 +3341,9 @@ packages: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} @@ -2554,6 +3470,10 @@ packages: get-tsconfig@4.14.0: resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} + giget@3.2.0: + resolution: {integrity: sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A==} + hasBin: true + git-raw-commits@5.0.1: resolution: {integrity: sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==} engines: {node: '>=18'} @@ -2664,6 +3584,11 @@ packages: resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} engines: {node: '>= 0.4'} + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -2672,6 +3597,11 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} @@ -2713,6 +3643,10 @@ packages: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -2739,6 +3673,9 @@ packages: joi@17.13.3: resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + jose@6.2.3: + resolution: {integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==} + js-tokens@10.0.0: resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} @@ -2795,6 +3732,10 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -2806,6 +3747,10 @@ packages: resolution: {integrity: sha512-/GmXpo9F9W+f8n4Ivr2iH+7h7wL7jLbLKWkMlpflcCRb6kGjBfTlASEXaZ9qUgNTn4VgS0P2pwxxzQ4EM6Ulgg==} engines: {node: '>=22'} + kysely@0.28.17: + resolution: {integrity: sha512-nbD8lB9EB3wNdMhOCdx5Li8DxnLbvKByylRLcJ1h+4SkrowVeECAyZlyiKMThF7xFdRz0jSQ2MoJr+wXux2y0Q==} + engines: {node: '>=20.0.0'} + leven@4.1.0: resolution: {integrity: sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2919,6 +3864,9 @@ packages: lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lru-cache@11.5.0: resolution: {integrity: sha512-5YgH9UJd7wVb9hIouI2adWpgqrrICkt070Dnj8EUY1+B4B2P9eRLPAkAAo6NICA7CEhOIeBHl46u9zSNpNu7zA==} engines: {node: 20 || >=22} @@ -2998,6 +3946,10 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanostores@1.3.0: + resolution: {integrity: sha512-XPUa/jz+P1oJvN9VBxw4L9MtdFfaH3DAryqPssqhb2kXjmb9npz0dly6rCsgFWOPr4Yg9mTfM3MDZgZZ+7A3lA==} + engines: {node: ^20.0.0 || >=22.0.0} + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -3027,6 +3979,13 @@ packages: obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -3126,6 +4085,9 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + perfect-debounce@2.1.0: + resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} + pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} @@ -3152,6 +4114,9 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} + pkg-types@2.3.1: + resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==} + playwright-core@1.60.0: resolution: {integrity: sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==} engines: {node: '>=18'} @@ -3214,6 +4179,10 @@ packages: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} + postgres@3.4.9: + resolution: {integrity: sha512-GD3qdB0x1z9xgFI6cdRD6xu2Sp2WCOEoe3mtnyB5Ee0XrrL5Pe+e4CCnJrRMnL1zYtRDZmQQVbvOttLnKDLnaw==} + engines: {node: '>=12'} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -3298,6 +4267,10 @@ packages: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + property-expr@2.0.6: resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} @@ -3321,6 +4294,9 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + rc9@3.0.1: + resolution: {integrity: sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==} + read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} @@ -3333,6 +4309,9 @@ packages: resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} engines: {node: '>= 20.19.0'} + regexp-to-ast@0.5.0: + resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==} + remeda@2.34.1: resolution: {integrity: sha512-k5iIF3lHm2NQ+2bNGDvZTD5jZl/JZkCS6AQOfGjYBd7V4rbb3K5whHvab0/O7CqPI43vYzbnIVCQXQJqmOyI6w==} @@ -3374,6 +4353,13 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rou3@0.7.12: + resolution: {integrity: sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg==} + + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -3461,6 +4447,9 @@ packages: resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} engines: {node: '>=18'} + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + skinview-utils@0.7.1: resolution: {integrity: sha512-4eLrMqR526ehlZbsd8SuZ/CHpS9GiH0xUMoV+PYlJVi95ZFz5HJu7Spt5XYa72DRS7wgt5qquvHZf0XZJgmu9Q==} @@ -3483,6 +4472,13 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + spawndamnit@3.0.1: resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} @@ -3691,6 +4687,11 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsx@4.22.3: + resolution: {integrity: sha512-mdoNxBC/cSQObGGVQ5Bpn5i+yv7j68gk3Nfm3wFjcJg3Z0Mix9jzAFfP12prmm5eVGmDKtp0yyArrs0Q+8gZHg==} + engines: {node: '>=18.0.0'} + hasBin: true + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -3922,6 +4923,10 @@ packages: utf-8-validate: optional: true + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -3958,6 +4963,10 @@ packages: resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} engines: {node: '>=12.20'} + yocto-spinner@0.2.3: + resolution: {integrity: sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==} + engines: {node: '>=18.19'} + yoctocolors@2.1.2: resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} @@ -4022,6 +5031,10 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.29.0 + '@babel/helper-compilation-targets@7.28.6': dependencies: '@babel/compat-data': 7.29.3 @@ -4030,8 +5043,28 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.29.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.29.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/helper-globals@7.28.0': {} + '@babel/helper-member-expression-to-functions@7.28.5': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-imports@7.28.6': dependencies: '@babel/traverse': 7.29.0 @@ -4048,6 +5081,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.29.0 + + '@babel/helper-plugin-utils@7.28.6': {} + + '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-string-parser@7.27.1': {} '@babel/helper-validator-identifier@7.28.5': {} @@ -4063,6 +5118,87 @@ snapshots: dependencies: '@babel/types': 7.29.0 + '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.29.3(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/preset-react@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/preset-typescript@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + '@babel/runtime@7.29.2': {} '@babel/template@7.28.6': @@ -4090,6 +5226,68 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} + '@better-auth/api-key@1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(better-auth@1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7))': + dependencies: + '@better-auth/core': 1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/utils': 0.4.0 + better-auth: 1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) + zod: 4.4.3 + + '@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0)': + dependencies: + '@better-auth/utils': 0.4.0 + '@better-fetch/fetch': 1.1.21 + '@opentelemetry/semantic-conventions': 1.41.1 + '@standard-schema/spec': 1.1.0 + better-call: 1.3.5(zod@4.4.3) + jose: 6.2.3 + kysely: 0.28.17 + nanostores: 1.3.0 + zod: 4.4.3 + optionalDependencies: + '@opentelemetry/api': 1.9.1 + + '@better-auth/drizzle-adapter@1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))': + dependencies: + '@better-auth/core': 1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/utils': 0.4.0 + optionalDependencies: + drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9) + + '@better-auth/kysely-adapter@1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(kysely@0.28.17)': + dependencies: + '@better-auth/core': 1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/utils': 0.4.0 + optionalDependencies: + kysely: 0.28.17 + + '@better-auth/memory-adapter@1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)': + dependencies: + '@better-auth/core': 1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/utils': 0.4.0 + + '@better-auth/mongo-adapter@1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)': + dependencies: + '@better-auth/core': 1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/utils': 0.4.0 + + '@better-auth/prisma-adapter@1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)': + dependencies: + '@better-auth/core': 1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/utils': 0.4.0 + + '@better-auth/telemetry@1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)': + dependencies: + '@better-auth/core': 1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/utils': 0.4.0 + '@better-fetch/fetch': 1.1.21 + + '@better-auth/utils@0.4.0': + dependencies: + '@noble/hashes': 2.2.0 + + '@better-fetch/fetch@1.1.21': {} + '@blazediff/core@1.9.1': {} '@changesets/apply-release-plan@7.1.1': @@ -4242,6 +5440,32 @@ snapshots: human-id: 4.1.3 prettier: 2.8.8 + '@chevrotain/cst-dts-gen@10.5.0': + dependencies: + '@chevrotain/gast': 10.5.0 + '@chevrotain/types': 10.5.0 + lodash: 4.17.21 + + '@chevrotain/gast@10.5.0': + dependencies: + '@chevrotain/types': 10.5.0 + lodash: 4.17.21 + + '@chevrotain/types@10.5.0': {} + + '@chevrotain/utils@10.5.0': {} + + '@clack/core@0.5.0': + dependencies: + picocolors: 1.1.1 + sisteransi: 1.0.5 + + '@clack/prompts@0.11.0': + dependencies: + '@clack/core': 0.5.0 + picocolors: 1.1.1 + sisteransi: 1.0.5 + '@commander-js/extra-typings@14.0.0(commander@14.0.3)': dependencies: commander: 14.0.3 @@ -4407,100 +5631,334 @@ snapshots: svelte: 5.55.9(@typescript-eslint/types@8.59.4) tslib: 2.8.1 + '@drizzle-team/brocli@0.10.2': {} + '@emnapi/core@1.10.0': dependencies: '@emnapi/wasi-threads': 1.2.1 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.10.0': - dependencies: - tslib: 2.8.1 + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild-kit/core-utils@3.3.2': + dependencies: + esbuild: 0.18.20 + source-map-support: 0.5.21 + + '@esbuild-kit/esm-loader@2.6.5': + dependencies: + '@esbuild-kit/core-utils': 3.3.2 + get-tsconfig: 4.14.0 + + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/aix-ppc64@0.27.7': optional: true - '@emnapi/wasi-threads@1.2.1': - dependencies: - tslib: 2.8.1 + '@esbuild/aix-ppc64@0.28.0': optional: true - '@esbuild/aix-ppc64@0.27.7': + '@esbuild/android-arm64@0.18.20': + optional: true + + '@esbuild/android-arm64@0.25.12': optional: true '@esbuild/android-arm64@0.27.7': optional: true + '@esbuild/android-arm64@0.28.0': + optional: true + + '@esbuild/android-arm@0.18.20': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + '@esbuild/android-arm@0.27.7': optional: true + '@esbuild/android-arm@0.28.0': + optional: true + + '@esbuild/android-x64@0.18.20': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + '@esbuild/android-x64@0.27.7': optional: true + '@esbuild/android-x64@0.28.0': + optional: true + + '@esbuild/darwin-arm64@0.18.20': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + '@esbuild/darwin-arm64@0.27.7': optional: true + '@esbuild/darwin-arm64@0.28.0': + optional: true + + '@esbuild/darwin-x64@0.18.20': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + '@esbuild/darwin-x64@0.27.7': optional: true + '@esbuild/darwin-x64@0.28.0': + optional: true + + '@esbuild/freebsd-arm64@0.18.20': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + '@esbuild/freebsd-arm64@0.27.7': optional: true + '@esbuild/freebsd-arm64@0.28.0': + optional: true + + '@esbuild/freebsd-x64@0.18.20': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + '@esbuild/freebsd-x64@0.27.7': optional: true + '@esbuild/freebsd-x64@0.28.0': + optional: true + + '@esbuild/linux-arm64@0.18.20': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + '@esbuild/linux-arm64@0.27.7': optional: true + '@esbuild/linux-arm64@0.28.0': + optional: true + + '@esbuild/linux-arm@0.18.20': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + '@esbuild/linux-arm@0.27.7': optional: true + '@esbuild/linux-arm@0.28.0': + optional: true + + '@esbuild/linux-ia32@0.18.20': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + '@esbuild/linux-ia32@0.27.7': optional: true + '@esbuild/linux-ia32@0.28.0': + optional: true + + '@esbuild/linux-loong64@0.18.20': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + '@esbuild/linux-loong64@0.27.7': optional: true + '@esbuild/linux-loong64@0.28.0': + optional: true + + '@esbuild/linux-mips64el@0.18.20': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + '@esbuild/linux-mips64el@0.27.7': optional: true + '@esbuild/linux-mips64el@0.28.0': + optional: true + + '@esbuild/linux-ppc64@0.18.20': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + '@esbuild/linux-ppc64@0.27.7': optional: true + '@esbuild/linux-ppc64@0.28.0': + optional: true + + '@esbuild/linux-riscv64@0.18.20': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + '@esbuild/linux-riscv64@0.27.7': optional: true + '@esbuild/linux-riscv64@0.28.0': + optional: true + + '@esbuild/linux-s390x@0.18.20': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + '@esbuild/linux-s390x@0.27.7': optional: true + '@esbuild/linux-s390x@0.28.0': + optional: true + + '@esbuild/linux-x64@0.18.20': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + '@esbuild/linux-x64@0.27.7': optional: true + '@esbuild/linux-x64@0.28.0': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + '@esbuild/netbsd-arm64@0.27.7': optional: true + '@esbuild/netbsd-arm64@0.28.0': + optional: true + + '@esbuild/netbsd-x64@0.18.20': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + '@esbuild/netbsd-x64@0.27.7': optional: true + '@esbuild/netbsd-x64@0.28.0': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + '@esbuild/openbsd-arm64@0.27.7': optional: true + '@esbuild/openbsd-arm64@0.28.0': + optional: true + + '@esbuild/openbsd-x64@0.18.20': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + '@esbuild/openbsd-x64@0.27.7': optional: true + '@esbuild/openbsd-x64@0.28.0': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + '@esbuild/openharmony-arm64@0.27.7': optional: true + '@esbuild/openharmony-arm64@0.28.0': + optional: true + + '@esbuild/sunos-x64@0.18.20': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + '@esbuild/sunos-x64@0.27.7': optional: true + '@esbuild/sunos-x64@0.28.0': + optional: true + + '@esbuild/win32-arm64@0.18.20': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + '@esbuild/win32-arm64@0.27.7': optional: true + '@esbuild/win32-arm64@0.28.0': + optional: true + + '@esbuild/win32-ia32@0.18.20': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + '@esbuild/win32-ia32@0.27.7': optional: true + '@esbuild/win32-ia32@0.28.0': + optional: true + + '@esbuild/win32-x64@0.18.20': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + '@esbuild/win32-x64@0.27.7': optional: true + '@esbuild/win32-x64@0.28.0': + optional: true + '@eslint-community/eslint-utils@4.9.1(eslint@10.4.0(jiti@2.7.0))': dependencies: eslint: 10.4.0(jiti@2.7.0) @@ -4647,6 +6105,11 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 + '@mrleebo/prisma-ast@0.13.1': + dependencies: + chevrotain: 10.5.0 + lilconfig: 2.1.0 + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: '@emnapi/core': 1.10.0 @@ -4654,6 +6117,10 @@ snapshots: '@tybys/wasm-util': 0.10.2 optional: true + '@noble/ciphers@2.2.0': {} + + '@noble/hashes@2.2.0': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -5397,7 +6864,7 @@ snapshots: magic-string: 0.30.21 svelte: 5.55.9(@typescript-eslint/types@8.59.4) - '@sentry/sveltekit@10.53.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(rollup@4.60.4)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))': + '@sentry/sveltekit@10.53.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(rollup@4.60.4)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))': dependencies: '@sentry/cloudflare': 10.53.1 '@sentry/core': 10.53.1 @@ -5405,12 +6872,12 @@ snapshots: '@sentry/svelte': 10.53.1(svelte@5.55.9(@typescript-eslint/types@8.59.4)) '@sentry/vite-plugin': 5.3.0(rollup@4.60.4) '@sveltejs/acorn-typescript': 1.0.10(acorn@8.16.0) - '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) acorn: 8.16.0 magic-string: 0.30.21 sorcery: 1.0.0 optionalDependencies: - vite: 8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0) transitivePeerDependencies: - '@cloudflare/workers-types' - '@opentelemetry/exporter-trace-otlp-http' @@ -5473,19 +6940,19 @@ snapshots: dependencies: acorn: 8.16.0 - '@sveltejs/adapter-node@5.5.4(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))': + '@sveltejs/adapter-node@5.5.4(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))': dependencies: '@rollup/plugin-commonjs': 29.0.2(rollup@4.60.4) '@rollup/plugin-json': 6.1.0(rollup@4.60.4) '@rollup/plugin-node-resolve': 16.0.3(rollup@4.60.4) - '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) rollup: 4.60.4 - '@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))': + '@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))': dependencies: '@standard-schema/spec': 1.1.0 '@sveltejs/acorn-typescript': 1.0.10(acorn@8.16.0) - '@sveltejs/vite-plugin-svelte': 7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + '@sveltejs/vite-plugin-svelte': 7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) '@types/cookie': 0.6.0 acorn: 8.16.0 cookie: 0.6.0 @@ -5497,19 +6964,19 @@ snapshots: set-cookie-parser: 3.1.0 sirv: 3.0.2 svelte: 5.55.9(@typescript-eslint/types@8.59.4) - vite: 8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0) optionalDependencies: '@opentelemetry/api': 1.9.1 typescript: 6.0.3 - '@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))': + '@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))': dependencies: deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.1 svelte: 5.55.9(@typescript-eslint/types@8.59.4) - vite: 8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) - vitefu: 1.1.3(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0) + vitefu: 1.1.3(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) '@svitejs/changesets-changelog-github-compact@1.2.0': dependencies: @@ -5583,12 +7050,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.3.0 '@tailwindcss/oxide-win32-x64-msvc': 4.3.0 - '@tailwindcss/vite@4.3.0(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))': + '@tailwindcss/vite@4.3.0(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))': dependencies: '@tailwindcss/node': 4.3.0 '@tailwindcss/oxide': 4.3.0 tailwindcss: 4.3.0 - vite: 8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0) '@takumi-rs/core-darwin-arm64@1.3.0': optional: true @@ -5853,29 +7320,29 @@ snapshots: validator: 13.15.35 optional: true - '@vitest/browser-playwright@4.1.7(playwright@1.60.0)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.7)': + '@vitest/browser-playwright@4.1.7(playwright@1.60.0)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7)': dependencies: - '@vitest/browser': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.7) - '@vitest/mocker': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + '@vitest/browser': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7) + '@vitest/mocker': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) playwright: 1.60.0 tinyrainbow: 3.1.0 - vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.7)': + '@vitest/browser@4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7)': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + '@vitest/mocker': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) '@vitest/utils': 4.1.7 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.0 - vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) ws: 8.20.1 transitivePeerDependencies: - bufferutil @@ -5895,9 +7362,9 @@ snapshots: obug: 2.1.1 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) optionalDependencies: - '@vitest/browser': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.7) + '@vitest/browser': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7) '@vitest/expect@4.1.7': dependencies: @@ -5908,13 +7375,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))': + '@vitest/mocker@4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.7 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0) '@vitest/pretty-format@4.1.7': dependencies: @@ -5943,7 +7410,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) '@vitest/utils@4.1.7': dependencies: @@ -6029,25 +7496,115 @@ snapshots: estree-walker: 3.0.3 js-tokens: 10.0.0 + auth@1.6.11(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(better-call@1.3.5(zod@4.4.3))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(jose@6.2.3)(kysely@0.28.17)(magicast@0.5.3)(nanostores@1.3.0)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7): + dependencies: + '@babel/core': 7.29.0 + '@babel/preset-react': 7.28.5(@babel/core@7.29.0) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@better-auth/core': 1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/telemetry': 1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21) + '@better-auth/utils': 0.4.0 + '@clack/prompts': 0.11.0 + '@mrleebo/prisma-ast': 0.13.1 + better-auth: 1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) + c12: 3.3.4(magicast@0.5.3) + chalk: 5.6.2 + commander: 12.1.0 + dotenv: 17.4.2 + get-tsconfig: 4.14.0 + open: 10.2.0 + prettier: 3.8.3 + prompts: 2.4.2 + semver: 7.8.0 + yocto-spinner: 0.2.3 + zod: 4.4.3 + transitivePeerDependencies: + - '@better-fetch/fetch' + - '@cloudflare/workers-types' + - '@lynx-js/react' + - '@opentelemetry/api' + - '@prisma/client' + - '@sveltejs/kit' + - '@tanstack/react-start' + - '@tanstack/solid-start' + - better-call + - better-sqlite3 + - drizzle-kit + - drizzle-orm + - jose + - kysely + - magicast + - mongodb + - mysql2 + - nanostores + - next + - pg + - prisma + - react + - react-dom + - solid-js + - supports-color + - svelte + - vitest + - vue + axobject-query@4.1.0: {} balanced-match@4.0.4: {} baseline-browser-mapping@2.10.31: {} + better-auth@1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7): + dependencies: + '@better-auth/core': 1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/drizzle-adapter': 1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9)) + '@better-auth/kysely-adapter': 1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(kysely@0.28.17) + '@better-auth/memory-adapter': 1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) + '@better-auth/mongo-adapter': 1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) + '@better-auth/prisma-adapter': 1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) + '@better-auth/telemetry': 1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21) + '@better-auth/utils': 0.4.0 + '@better-fetch/fetch': 1.1.21 + '@noble/ciphers': 2.2.0 + '@noble/hashes': 2.2.0 + better-call: 1.3.5(zod@4.4.3) + defu: 6.1.7 + jose: 6.2.3 + kysely: 0.28.17 + nanostores: 1.3.0 + zod: 4.4.3 + optionalDependencies: + '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + drizzle-kit: 0.31.10 + drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + transitivePeerDependencies: + - '@cloudflare/workers-types' + - '@opentelemetry/api' + + better-call@1.3.5(zod@4.4.3): + dependencies: + '@better-auth/utils': 0.4.0 + '@better-fetch/fetch': 1.1.21 + rou3: 0.7.12 + set-cookie-parser: 3.1.0 + optionalDependencies: + zod: 4.4.3 + better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 - bits-ui@2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): + bits-ui@2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: '@floating-ui/core': 1.7.5 '@floating-ui/dom': 1.7.6 '@internationalized/date': 3.12.1 esm-env: 1.2.2 - runed: 0.35.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + runed: 0.35.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) svelte: 5.55.9(@typescript-eslint/types@8.59.4) - svelte-toolbelt: 0.10.6(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) tabbable: 6.4.0 transitivePeerDependencies: - '@sveltejs/kit' @@ -6068,6 +7625,29 @@ snapshots: node-releases: 2.0.44 update-browserslist-db: 1.2.3(browserslist@4.28.2) + buffer-from@1.1.2: {} + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + + c12@3.3.4(magicast@0.5.3): + dependencies: + chokidar: 5.0.0 + confbox: 0.2.4 + defu: 6.1.7 + dotenv: 17.4.2 + exsolve: 1.0.8 + giget: 3.2.0 + jiti: 2.7.0 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 2.1.0 + pkg-types: 2.3.1 + rc9: 3.0.1 + optionalDependencies: + magicast: 0.5.3 + callsites@3.1.0: {} camelcase@8.0.0: @@ -6077,8 +7657,19 @@ snapshots: chai@6.2.2: {} + chalk@5.6.2: {} + chardet@2.1.1: {} + chevrotain@10.5.0: + dependencies: + '@chevrotain/cst-dts-gen': 10.5.0 + '@chevrotain/gast': 10.5.0 + '@chevrotain/types': 10.5.0 + '@chevrotain/utils': 10.5.0 + lodash: 4.17.21 + regexp-to-ast: 0.5.0 + chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -6104,6 +7695,8 @@ snapshots: clsx@2.1.1: {} + commander@12.1.0: {} + commander@14.0.3: {} commondir@1.0.1: {} @@ -6115,6 +7708,8 @@ snapshots: compare-versions@6.1.1: {} + confbox@0.2.4: {} + conventional-changelog-angular@8.3.1: dependencies: compare-func: 2.0.0 @@ -6173,8 +7768,21 @@ snapshots: deepmerge@4.3.1: {} + default-browser-id@5.0.1: {} + + default-browser@5.5.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + + define-lazy-prop@3.0.0: {} + + defu@6.1.7: {} + dequal@2.0.3: {} + destr@2.0.5: {} + detect-indent@6.1.0: {} detect-libc@2.1.2: {} @@ -6207,6 +7815,20 @@ snapshots: dotenv@17.4.2: {} + drizzle-kit@0.31.10: + dependencies: + '@drizzle-team/brocli': 0.10.2 + '@esbuild-kit/esm-loader': 2.6.5 + esbuild: 0.25.12 + tsx: 4.22.3 + + drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9): + optionalDependencies: + '@opentelemetry/api': 1.9.1 + '@types/pg': 8.15.6 + kysely: 0.28.17 + postgres: 3.4.9 + effect@3.21.2: dependencies: '@standard-schema/spec': 1.1.0 @@ -6241,6 +7863,60 @@ snapshots: es-toolkit@1.46.1: {} + esbuild@0.18.20: + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + esbuild@0.27.7: optionalDependencies: '@esbuild/aix-ppc64': 0.27.7 @@ -6270,6 +7946,35 @@ snapshots: '@esbuild/win32-ia32': 0.27.7 '@esbuild/win32-x64': 0.27.7 + esbuild@0.28.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.0 + '@esbuild/android-arm': 0.28.0 + '@esbuild/android-arm64': 0.28.0 + '@esbuild/android-x64': 0.28.0 + '@esbuild/darwin-arm64': 0.28.0 + '@esbuild/darwin-x64': 0.28.0 + '@esbuild/freebsd-arm64': 0.28.0 + '@esbuild/freebsd-x64': 0.28.0 + '@esbuild/linux-arm': 0.28.0 + '@esbuild/linux-arm64': 0.28.0 + '@esbuild/linux-ia32': 0.28.0 + '@esbuild/linux-loong64': 0.28.0 + '@esbuild/linux-mips64el': 0.28.0 + '@esbuild/linux-ppc64': 0.28.0 + '@esbuild/linux-riscv64': 0.28.0 + '@esbuild/linux-s390x': 0.28.0 + '@esbuild/linux-x64': 0.28.0 + '@esbuild/netbsd-arm64': 0.28.0 + '@esbuild/netbsd-x64': 0.28.0 + '@esbuild/openbsd-arm64': 0.28.0 + '@esbuild/openbsd-x64': 0.28.0 + '@esbuild/openharmony-arm64': 0.28.0 + '@esbuild/sunos-x64': 0.28.0 + '@esbuild/win32-arm64': 0.28.0 + '@esbuild/win32-ia32': 0.28.0 + '@esbuild/win32-x64': 0.28.0 + escalade@3.2.0: {} escape-string-regexp@4.0.0: {} @@ -6408,6 +8113,8 @@ snapshots: expect-type@1.3.0: {} + exsolve@1.0.8: {} + extendable-error@0.1.7: {} fast-check@3.23.2: @@ -6477,11 +8184,11 @@ snapshots: flatted@3.4.2: {} - formsnap@2.0.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)): + formsnap@2.0.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)): dependencies: svelte: 5.55.9(@typescript-eslint/types@8.59.4) svelte-toolbelt: 0.5.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)) - sveltekit-superforms: 2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3) + sveltekit-superforms: 2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3) forwarded-parse@2.1.2: {} @@ -6526,6 +8233,8 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + giget@3.2.0: {} + git-raw-commits@5.0.1(conventional-commits-parser@6.4.0): dependencies: '@conventional-changelog/git-client': 2.7.0(conventional-commits-parser@6.4.0) @@ -6638,12 +8347,18 @@ snapshots: dependencies: hasown: 2.0.3 + is-docker@3.0.0: {} + is-extglob@2.1.1: {} is-glob@4.0.3: dependencies: is-extglob: 2.1.1 + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-module@1.0.0: {} is-number@7.0.0: {} @@ -6672,6 +8387,10 @@ snapshots: is-windows@1.0.2: {} + is-wsl@3.1.1: + dependencies: + is-inside-container: 1.0.0 + isexe@2.0.0: {} istanbul-lib-coverage@3.2.2: {} @@ -6700,6 +8419,8 @@ snapshots: '@sideway/pinpoint': 2.0.0 optional: true + jose@6.2.3: {} + js-tokens@10.0.0: {} js-tokens@4.0.0: {} @@ -6749,12 +8470,16 @@ snapshots: dependencies: json-buffer: 3.0.1 + kleur@3.0.3: {} + kleur@4.1.5: {} known-css-properties@0.37.0: {} ky@2.0.2: {} + kysely@0.28.17: {} + leven@4.1.0: {} levn@0.4.1: @@ -6838,6 +8563,8 @@ snapshots: lodash.startcase@4.4.0: {} + lodash@4.17.21: {} + lru-cache@11.5.0: {} lru-cache@5.1.1: @@ -6904,6 +8631,8 @@ snapshots: nanoid@3.3.12: {} + nanostores@1.3.0: {} + natural-compare@1.4.0: {} node-fetch@2.7.0: @@ -6924,6 +8653,15 @@ snapshots: obug@2.1.1: {} + ohash@2.0.11: {} + + open@10.2.0: + dependencies: + default-browser: 5.5.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -7045,6 +8783,8 @@ snapshots: pathe@2.0.3: {} + perfect-debounce@2.1.0: {} + pg-int8@1.0.1: {} pg-protocol@1.14.0: {} @@ -7065,6 +8805,12 @@ snapshots: pify@4.0.1: {} + pkg-types@2.3.1: + dependencies: + confbox: 0.2.4 + exsolve: 1.0.8 + pathe: 2.0.3 + playwright-core@1.60.0: {} playwright@1.60.0: @@ -7111,6 +8857,8 @@ snapshots: dependencies: xtend: 4.0.2 + postgres@3.4.9: {} + prelude-ls@1.2.1: {} prettier-plugin-svelte@4.0.0(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)): @@ -7134,6 +8882,11 @@ snapshots: progress@2.0.3: {} + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + property-expr@2.0.6: optional: true @@ -7150,6 +8903,11 @@ snapshots: queue-microtask@1.2.3: {} + rc9@3.0.1: + dependencies: + defu: 6.1.7 + destr: 2.0.5 + read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 @@ -7161,6 +8919,8 @@ snapshots: readdirp@5.0.0: {} + regexp-to-ast@0.5.0: {} + remeda@2.34.1: {} require-from-string@2.0.2: {} @@ -7239,6 +8999,10 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.60.4 fsevents: 2.3.3 + rou3@0.7.12: {} + + run-applescript@7.1.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -7258,23 +9022,23 @@ snapshots: esm-env: 1.2.2 svelte: 5.55.9(@typescript-eslint/types@8.59.4) - runed@0.35.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): + runed@0.35.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 svelte: 5.55.9(@typescript-eslint/types@8.59.4) optionalDependencies: - '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) - runed@0.37.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(zod@4.4.3): + runed@0.37.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(zod@4.4.3): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 svelte: 5.55.9(@typescript-eslint/types@8.59.4) optionalDependencies: - '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) zod: 4.4.3 sade@1.8.1: @@ -7313,6 +9077,8 @@ snapshots: mrmime: 2.0.1 totalist: 3.0.1 + sisteransi@1.0.5: {} + skinview-utils@0.7.1: {} skinview3d@3.4.2: @@ -7333,6 +9099,13 @@ snapshots: source-map-js@1.2.1: {} + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + spawndamnit@3.0.1: dependencies: cross-spawn: 7.0.6 @@ -7423,10 +9196,10 @@ snapshots: dependencies: svelte: 5.55.9(@typescript-eslint/types@8.59.4) - svelte-toolbelt@0.10.6(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): + svelte-toolbelt@0.10.6(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: clsx: 2.1.1 - runed: 0.35.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + runed: 0.35.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) style-to-object: 1.0.14 svelte: 5.55.9(@typescript-eslint/types@8.59.4) transitivePeerDependencies: @@ -7473,9 +9246,9 @@ snapshots: transitivePeerDependencies: - '@typescript-eslint/types' - sveltekit-superforms@2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3): + sveltekit-superforms@2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3): dependencies: - '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) devalue: 5.8.1 memoize-weak: 1.0.2 svelte: 5.55.9(@typescript-eslint/types@8.59.4) @@ -7567,6 +9340,12 @@ snapshots: tslib@2.8.1: {} + tsx@4.22.3: + dependencies: + esbuild: 0.28.0 + optionalDependencies: + fsevents: 2.3.3 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -7647,7 +9426,7 @@ snapshots: svelte: 5.55.9(@typescript-eslint/types@8.59.4) svelte-toolbelt: 0.7.1(svelte@5.55.9(@typescript-eslint/types@8.59.4)) - vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0): + vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -7656,25 +9435,26 @@ snapshots: tinyglobby: 0.2.16 optionalDependencies: '@types/node': 25.9.1 - esbuild: 0.27.7 + esbuild: 0.28.0 fsevents: 2.3.3 jiti: 2.7.0 + tsx: 4.22.3 yaml: 2.9.0 - vitefu@1.1.3(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)): + vitefu@1.1.3(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)): optionalDependencies: - vite: 8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0) vitest-browser-svelte@2.1.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7): dependencies: '@testing-library/svelte-core': 1.0.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)) svelte: 5.55.9(@typescript-eslint/types@8.59.4) - vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) - vitest@4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)): + vitest@4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.7 - '@vitest/mocker': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + '@vitest/mocker': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.7 '@vitest/runner': 4.1.7 '@vitest/snapshot': 4.1.7 @@ -7691,12 +9471,12 @@ snapshots: tinyexec: 1.1.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 '@types/node': 25.9.1 - '@vitest/browser-playwright': 4.1.7(playwright@1.60.0)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.7) + '@vitest/browser-playwright': 4.1.7(playwright@1.60.0)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7) '@vitest/coverage-v8': 4.1.7(@vitest/browser@4.1.7)(vitest@4.1.7) '@vitest/ui': 4.1.7(vitest@4.1.7) transitivePeerDependencies: @@ -7728,6 +9508,10 @@ snapshots: ws@8.20.1: {} + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.1 + xtend@4.0.2: {} y18n@5.0.8: {} @@ -7753,6 +9537,10 @@ snapshots: yocto-queue@1.2.2: {} + yocto-spinner@0.2.3: + dependencies: + yoctocolors: 2.1.2 + yoctocolors@2.1.2: {} yup@1.7.1: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e157368b4..fcfa3ddb3 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,6 @@ allowBuilds: + "@prisma/client": true "@sentry/cli": true + better-sqlite3: true esbuild: true simple-git-hooks: true diff --git a/src/app.d.ts b/src/app.d.ts index 533c99d02..031435aaa 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -1,3 +1,5 @@ +import type { Session, User } from "better-auth/minimal"; + // See https://kit.svelte.dev/docs/types#app // for information about these interfaces declare global { @@ -5,15 +7,16 @@ declare global { namespace App { // interface Error {} - // interface Locals {} // interface PageData {} // interface PageState {} // interface Platform {} namespace Superforms { - type Message = { - type: "error" | "success"; - text: string; - }; + type Message = { type: "error" | "success"; text: string }; + } + + interface Locals { + user?: User; + session?: Session; } } } diff --git a/src/hooks.server.ts b/src/hooks.server.ts index b582cf675..8d729f282 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -1,6 +1,19 @@ +import { building } from "$app/environment"; +import { auth } from "$lib/server/auth"; +import { UserRole } from "$lib/shared/roles"; +import { runMigrations } from "$src/lib/server/db/migrate"; import { handleErrorWithSentry, sentryHandle } from "@sentry/sveltekit"; -import type { Handle } from "@sveltejs/kit"; +import { redirect, type Handle, type ServerInit } from "@sveltejs/kit"; import { sequence } from "@sveltejs/kit/hooks"; +import { svelteKitHandler } from "better-auth/svelte-kit"; + +const protectedRouteGroupName = "(protected)"; +const protectedAdminRouteGroupName = "(admin)"; +const signInPath = "/login"; + +export const init: ServerInit = async () => { + await runMigrations(); +}; const headersHandler = (async ({ event, resolve }) => { const response = await resolve(event); @@ -37,5 +50,40 @@ const headersHandler = (async ({ event, resolve }) => { // If you have a custom error handler, pass it to `handleErrorWithSentry` export const handleError = handleErrorWithSentry(); +const betterAuthHandler: Handle = async ({ event, resolve }) => { + const session = await auth.api.getSession({ headers: event.request.headers }); + + if (session) { + event.locals.session = session.session; + event.locals.user = session.user; + } + + return svelteKitHandler({ event, resolve, auth, building }); +}; + +const protectedHandler = (async ({ event, resolve }) => { + const { locals, route } = event; + if (!locals.user) { + if (route.id?.includes(protectedRouteGroupName)) { + console.info("Redirecting to sign-in page as user is not authenticated."); + redirect(307, signInPath); + } + } + if (locals.user) { + const roles = (locals.user.role ? locals.user.role.split(",") : []) as UserRole[]; + const isAdmin = roles.includes(UserRole.Admin); + if (route.id?.includes(protectedAdminRouteGroupName) && !isAdmin) { + console.info("Redirecting to dashboard as user lacks admin role."); + redirect(307, "/dashboard"); + } + } + if (locals.user && locals.session) { + if (route.id?.startsWith(signInPath)) { + redirect(307, "/dashboard"); + } + } + return resolve(event); +}) satisfies Handle; + // If you have custom handlers, make sure to place them after `sentryHandle()` in the `sequence` function. -export const handle = sequence(sentryHandle(), headersHandler) satisfies Handle; +export const handle = sequence(sentryHandle(), betterAuthHandler, protectedHandler, headersHandler) satisfies Handle; diff --git a/src/lib/server/auth.ts b/src/lib/server/auth.ts new file mode 100644 index 000000000..8206ad037 --- /dev/null +++ b/src/lib/server/auth.ts @@ -0,0 +1,135 @@ +import { building, dev } from "$app/environment"; +import { getRequestEvent } from "$app/server"; +import { env as envPrivate } from "$env/dynamic/private"; +import { env as envPublic } from "$env/dynamic/public"; +import { db } from "$lib/server/db"; +import { apiKey } from "@better-auth/api-key"; +import { drizzleAdapter } from "better-auth/adapters/drizzle"; +import { betterAuth } from "better-auth/minimal"; +import { admin, genericOAuth, patreon } from "better-auth/plugins"; +import { sveltekitCookies } from "better-auth/svelte-kit"; + +const { BETTER_AUTH_SECRET, ORIGIN, DISCORD_CLIENT_ID, DISCORD_CLIENT_SECRET, ADDRESS_HEADER, MC_ID_CLIENT_ID, MC_ID_CLIENT_SECRET, PATREON_CLIENT_ID, PATREON_CLIENT_SECRET, DISCORD_WHITELIST } = envPrivate; +const { PUBLIC_BASE_URL } = envPublic; + +const BUILD_TIME_AUTH_SECRET = "build-time-placeholder-secret-for-sveltekit-build"; +const BUILD_TIME_BASE_URL = "http://localhost:3000"; + +// Uncomment when running `pn auth:schema` +// const building = false; // Placeholder since we can't import from $app/environment in this file +// const dev = false; // Placeholder since we can't import from $app/environment in this file + +function getBetterAuthSecret() { + if (BETTER_AUTH_SECRET) return BETTER_AUTH_SECRET; + if (building) return BUILD_TIME_AUTH_SECRET; + + throw new Error("BETTER_AUTH_SECRET is required at runtime."); +} + +function getBaseURL() { + if (PUBLIC_BASE_URL) return PUBLIC_BASE_URL; + if (ORIGIN) return ORIGIN; + if (building) return BUILD_TIME_BASE_URL; + + throw new Error("PUBLIC_BASE_URL or ORIGIN is required at runtime."); +} + +const getWhitelist = () => { + if (!DISCORD_WHITELIST) return []; + return DISCORD_WHITELIST.split(",") + .map((id) => id.trim()) + .filter(Boolean); +}; + +const baseURL = getBaseURL(); + +export const auth = betterAuth({ + appName: "SkyCrypt", + baseURL, + secret: getBetterAuthSecret(), + database: drizzleAdapter(db, { provider: "pg" }), + emailAndPassword: { enabled: false }, + socialProviders: { + discord: { + clientId: DISCORD_CLIENT_ID, + clientSecret: DISCORD_CLIENT_SECRET, + disableDefaultScope: true, + disableSignUp: false, + scope: ["identify"], + enabled: true, + prompt: "consent", + mapProfileToUser: (profile) => ({ + email: profile.id + "@discord.placeholder.local" + }) + } + }, + // Better Auth lifecycle database hooks + databaseHooks: { + user: { + create: { + before: async (user) => { + const whitelist = getWhitelist(); + + // Fallback if whitelist environment variable isn't configured yet + if (whitelist.length === 0) { + throw new Error("Access Denied: Registrations are currently locked."); + } + + // Extract the Discord ID out of the generated placeholder email address + const discordId = user.email.split("@")[0]; + + if (!whitelist.includes(discordId)) { + // Throwing an error here stops the database transaction entirely + throw new Error("Access Denied: Your Discord account is not whitelisted."); + } + + return { data: user }; + } + } + } + }, + session: { + cookieCache: { + enabled: true, + maxAge: 5 * 60, // Cache duration in seconds + strategy: "jwe" + }, + storeSessionInDatabase: true + }, + advanced: { + ipAddress: { + ipAddressHeaders: [(ADDRESS_HEADER || "x-forwarded-for").toLowerCase()] + }, + useSecureCookies: !dev + }, + plugins: [ + apiKey({ + defaultPrefix: "sky_" + }), + admin(), + genericOAuth({ + config: [ + { + providerId: "mc-id", + clientId: MC_ID_CLIENT_ID, + clientSecret: MC_ID_CLIENT_SECRET, + discoveryUrl: "https://mc-id.com/.well-known/openid-configuration", + scopes: ["profile", "connections"], + pkce: true, + disableSignUp: true, + disableImplicitSignUp: true, + requireIssuerValidation: true + }, + patreon({ + clientId: PATREON_CLIENT_ID, + clientSecret: PATREON_CLIENT_SECRET, + pkce: true, + disableSignUp: true, + disableImplicitSignUp: true, + scopes: ["identity.memberships"] + }) + ] + }), + sveltekitCookies(getRequestEvent) // make sure this is the last plugin in the array + ] +}); diff --git a/src/lib/server/db/index.ts b/src/lib/server/db/index.ts new file mode 100644 index 000000000..2c59b8638 --- /dev/null +++ b/src/lib/server/db/index.ts @@ -0,0 +1,11 @@ +import { env } from "$env/dynamic/private"; +import { drizzle } from "drizzle-orm/postgres-js"; + +import postgres from "postgres"; +import * as schema from "./schema"; + +if (!env.DATABASE_URL) throw new Error("DATABASE_URL is not set"); + +const client = postgres(env.DATABASE_URL); + +export const db = drizzle(client, { schema }); diff --git a/src/lib/server/db/migrate.ts b/src/lib/server/db/migrate.ts new file mode 100644 index 000000000..db6a22bcc --- /dev/null +++ b/src/lib/server/db/migrate.ts @@ -0,0 +1,22 @@ +import { db } from "$src/lib/server/db"; +import { migrate } from "drizzle-orm/postgres-js/migrator"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +export async function runMigrations() { + console.info("[migrate] Starting migrations..."); + + const __dirname = path.dirname(fileURLToPath(import.meta.url)); + + const migrationsFolder = path.resolve(__dirname, "../../shared/drizzle"); + + console.info(`[migrate] Migrations folder resolved to: ${migrationsFolder}`); + + try { + await migrate(db, { migrationsFolder }); + console.info("[migrate] All migrations complete"); + } catch (error) { + console.error("[migrate] Migration failed:", error); + throw error; // crash the process; never start with failed migration + } +} diff --git a/src/lib/server/db/schema/auth.schema.ts b/src/lib/server/db/schema/auth.schema.ts new file mode 100644 index 000000000..ae00fccb6 --- /dev/null +++ b/src/lib/server/db/schema/auth.schema.ts @@ -0,0 +1,127 @@ +import { relations } from "drizzle-orm"; +import { boolean, index, integer, pgTable, text, timestamp } from "drizzle-orm/pg-core"; + +export const user = pgTable("user", { + id: text("id").primaryKey(), + name: text("name").notNull(), + email: text("email").notNull().unique(), + emailVerified: boolean("email_verified").default(false).notNull(), + image: text("image"), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at") + .defaultNow() + .$onUpdate(() => /* @__PURE__ */ new Date()) + .notNull(), + role: text("role"), + banned: boolean("banned").default(false), + banReason: text("ban_reason"), + banExpires: timestamp("ban_expires") +}); + +export const session = pgTable( + "session", + { + id: text("id").primaryKey(), + expiresAt: timestamp("expires_at").notNull(), + token: text("token").notNull().unique(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at") + .$onUpdate(() => /* @__PURE__ */ new Date()) + .notNull(), + ipAddress: text("ip_address"), + userAgent: text("user_agent"), + userId: text("user_id") + .notNull() + .references(() => user.id, { onDelete: "cascade" }), + impersonatedBy: text("impersonated_by") + }, + (table) => [index("session_userId_idx").on(table.userId)] +); + +export const account = pgTable( + "account", + { + id: text("id").primaryKey(), + accountId: text("account_id").notNull(), + providerId: text("provider_id").notNull(), + userId: text("user_id") + .notNull() + .references(() => user.id, { onDelete: "cascade" }), + accessToken: text("access_token"), + refreshToken: text("refresh_token"), + idToken: text("id_token"), + accessTokenExpiresAt: timestamp("access_token_expires_at"), + refreshTokenExpiresAt: timestamp("refresh_token_expires_at"), + scope: text("scope"), + password: text("password"), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at") + .$onUpdate(() => /* @__PURE__ */ new Date()) + .notNull() + }, + (table) => [index("account_userId_idx").on(table.userId)] +); + +export const verification = pgTable( + "verification", + { + id: text("id").primaryKey(), + identifier: text("identifier").notNull(), + value: text("value").notNull(), + expiresAt: timestamp("expires_at").notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at") + .defaultNow() + .$onUpdate(() => /* @__PURE__ */ new Date()) + .notNull() + }, + (table) => [index("verification_identifier_idx").on(table.identifier)] +); + +export const apikey = pgTable( + "apikey", + { + id: text("id").primaryKey(), + configId: text("config_id").default("default").notNull(), + name: text("name"), + start: text("start"), + referenceId: text("reference_id").notNull(), + prefix: text("prefix"), + key: text("key").notNull(), + refillInterval: integer("refill_interval"), + refillAmount: integer("refill_amount"), + lastRefillAt: timestamp("last_refill_at"), + enabled: boolean("enabled").default(true), + rateLimitEnabled: boolean("rate_limit_enabled").default(true), + rateLimitTimeWindow: integer("rate_limit_time_window").default(86400000), + rateLimitMax: integer("rate_limit_max").default(10), + requestCount: integer("request_count").default(0), + remaining: integer("remaining"), + lastRequest: timestamp("last_request"), + expiresAt: timestamp("expires_at"), + createdAt: timestamp("created_at").notNull(), + updatedAt: timestamp("updated_at").notNull(), + permissions: text("permissions"), + metadata: text("metadata") + }, + (table) => [index("apikey_configId_idx").on(table.configId), index("apikey_referenceId_idx").on(table.referenceId), index("apikey_key_idx").on(table.key)] +); + +export const userRelations = relations(user, ({ many }) => ({ + sessions: many(session), + accounts: many(account) +})); + +export const sessionRelations = relations(session, ({ one }) => ({ + user: one(user, { + fields: [session.userId], + references: [user.id] + }) +})); + +export const accountRelations = relations(account, ({ one }) => ({ + user: one(user, { + fields: [account.userId], + references: [user.id] + }) +})); diff --git a/src/lib/server/db/schema/index.ts b/src/lib/server/db/schema/index.ts new file mode 100644 index 000000000..5d13be3df --- /dev/null +++ b/src/lib/server/db/schema/index.ts @@ -0,0 +1 @@ +export * from "./auth.schema"; diff --git a/src/lib/shared/auth-client.ts b/src/lib/shared/auth-client.ts new file mode 100644 index 000000000..e178f7dd6 --- /dev/null +++ b/src/lib/shared/auth-client.ts @@ -0,0 +1,14 @@ +import { env } from "$env/dynamic/public"; +import { apiKeyClient } from "@better-auth/api-key/client"; +import { adminClient, organizationClient } from "better-auth/client/plugins"; +import { createAuthClient } from "better-auth/svelte"; + +export const authClient = createAuthClient({ + baseURL: env.PUBLIC_ORIGIN, + sessionOptions: { + refetchInterval: 60, // Polling interval in seconds. Set to 0 to disable + refetchOnWindowFocus: true, + refetchWhenOffline: false + }, + plugins: [apiKeyClient(), adminClient(), organizationClient()] +}); diff --git a/src/lib/shared/drizzle/0000_dapper_killer_shrike.sql b/src/lib/shared/drizzle/0000_dapper_killer_shrike.sql new file mode 100644 index 000000000..afac68a9b --- /dev/null +++ b/src/lib/shared/drizzle/0000_dapper_killer_shrike.sql @@ -0,0 +1,86 @@ +CREATE TABLE "account" ( + "id" text PRIMARY KEY NOT NULL, + "account_id" text NOT NULL, + "provider_id" text NOT NULL, + "user_id" text NOT NULL, + "access_token" text, + "refresh_token" text, + "id_token" text, + "access_token_expires_at" timestamp, + "refresh_token_expires_at" timestamp, + "scope" text, + "password" text, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp NOT NULL +); +--> statement-breakpoint +CREATE TABLE "apikey" ( + "id" text PRIMARY KEY NOT NULL, + "config_id" text DEFAULT 'default' NOT NULL, + "name" text, + "start" text, + "reference_id" text NOT NULL, + "prefix" text, + "key" text NOT NULL, + "refill_interval" integer, + "refill_amount" integer, + "last_refill_at" timestamp, + "enabled" boolean DEFAULT true, + "rate_limit_enabled" boolean DEFAULT true, + "rate_limit_time_window" integer DEFAULT 86400000, + "rate_limit_max" integer DEFAULT 10, + "request_count" integer DEFAULT 0, + "remaining" integer, + "last_request" timestamp, + "expires_at" timestamp, + "created_at" timestamp NOT NULL, + "updated_at" timestamp NOT NULL, + "permissions" text, + "metadata" text +); +--> statement-breakpoint +CREATE TABLE "session" ( + "id" text PRIMARY KEY NOT NULL, + "expires_at" timestamp NOT NULL, + "token" text NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp NOT NULL, + "ip_address" text, + "user_agent" text, + "user_id" text NOT NULL, + "impersonated_by" text, + CONSTRAINT "session_token_unique" UNIQUE("token") +); +--> statement-breakpoint +CREATE TABLE "user" ( + "id" text PRIMARY KEY NOT NULL, + "name" text NOT NULL, + "email" text NOT NULL, + "email_verified" boolean DEFAULT false NOT NULL, + "image" text, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL, + "role" text, + "banned" boolean DEFAULT false, + "ban_reason" text, + "ban_expires" timestamp, + CONSTRAINT "user_email_unique" UNIQUE("email") +); +--> statement-breakpoint +CREATE TABLE "verification" ( + "id" text PRIMARY KEY NOT NULL, + "identifier" text NOT NULL, + "value" text NOT NULL, + "expires_at" timestamp NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL +); +--> statement-breakpoint +ALTER TABLE "account" ADD CONSTRAINT "account_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "session" ADD CONSTRAINT "session_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +CREATE INDEX "account_userId_idx" ON "account" USING btree ("user_id");--> statement-breakpoint +CREATE INDEX "apikey_configId_idx" ON "apikey" USING btree ("config_id");--> statement-breakpoint +CREATE INDEX "apikey_referenceId_idx" ON "apikey" USING btree ("reference_id");--> statement-breakpoint +CREATE INDEX "apikey_key_idx" ON "apikey" USING btree ("key");--> statement-breakpoint +CREATE INDEX "session_userId_idx" ON "session" USING btree ("user_id");--> statement-breakpoint +CREATE INDEX "verification_identifier_idx" ON "verification" USING btree ("identifier"); \ No newline at end of file diff --git a/src/lib/shared/drizzle/meta/0000_snapshot.json b/src/lib/shared/drizzle/meta/0000_snapshot.json new file mode 100644 index 000000000..3ce5e7662 --- /dev/null +++ b/src/lib/shared/drizzle/meta/0000_snapshot.json @@ -0,0 +1,602 @@ +{ + "id": "38215b0e-303d-4a3b-b06f-661d7774eeb7", + "prevId": "00000000-0000-0000-0000-000000000000", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.account": { + "name": "account", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "account_id": { + "name": "account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token_expires_at": { + "name": "access_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "refresh_token_expires_at": { + "name": "refresh_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "account_userId_idx": { + "name": "account_userId_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "account_user_id_user_id_fk": { + "name": "account_user_id_user_id_fk", + "tableFrom": "account", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.apikey": { + "name": "apikey", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "config_id": { + "name": "config_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'default'" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "start": { + "name": "start", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "reference_id": { + "name": "reference_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "refill_interval": { + "name": "refill_interval", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "refill_amount": { + "name": "refill_amount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_refill_at": { + "name": "last_refill_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rate_limit_enabled": { + "name": "rate_limit_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rate_limit_time_window": { + "name": "rate_limit_time_window", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 86400000 + }, + "rate_limit_max": { + "name": "rate_limit_max", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 10 + }, + "request_count": { + "name": "request_count", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "remaining": { + "name": "remaining", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_request": { + "name": "last_request", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "permissions": { + "name": "permissions", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "apikey_configId_idx": { + "name": "apikey_configId_idx", + "columns": [ + { + "expression": "config_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "apikey_referenceId_idx": { + "name": "apikey_referenceId_idx", + "columns": [ + { + "expression": "reference_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "apikey_key_idx": { + "name": "apikey_key_idx", + "columns": [ + { + "expression": "key", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.session": { + "name": "session", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_agent": { + "name": "user_agent", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "impersonated_by": { + "name": "impersonated_by", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "session_userId_idx": { + "name": "session_userId_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "session_token_unique": { + "name": "session_token_unique", + "nullsNotDistinct": false, + "columns": [ + "token" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "banned": { + "name": "banned", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "ban_reason": { + "name": "ban_reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ban_expires": { + "name": "ban_expires", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_email_unique": { + "name": "user_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.verification": { + "name": "verification", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "verification_identifier_idx": { + "name": "verification_identifier_idx", + "columns": [ + { + "expression": "identifier", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/src/lib/shared/drizzle/meta/_journal.json b/src/lib/shared/drizzle/meta/_journal.json new file mode 100644 index 000000000..4a7cf04a6 --- /dev/null +++ b/src/lib/shared/drizzle/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "7", + "dialect": "postgresql", + "entries": [ + { + "idx": 0, + "version": "7", + "when": 1779478193206, + "tag": "0000_dapper_killer_shrike", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/src/lib/shared/roles.ts b/src/lib/shared/roles.ts new file mode 100644 index 000000000..f484cc437 --- /dev/null +++ b/src/lib/shared/roles.ts @@ -0,0 +1,9 @@ +export enum UserRole { + User = "user", + Admin = "admin" +} + +export const roles = [ + { value: UserRole.Admin, label: "Admin" }, + { value: UserRole.User, label: "User" } +] satisfies { value: UserRole; label: string }[]; diff --git a/src/routes/(protected)/dashboard/+page.svelte b/src/routes/(protected)/dashboard/+page.svelte new file mode 100644 index 000000000..08419237d --- /dev/null +++ b/src/routes/(protected)/dashboard/+page.svelte @@ -0,0 +1 @@ +Nothing here yet diff --git a/src/routes/(protected)/logout/+page.server.ts b/src/routes/(protected)/logout/+page.server.ts new file mode 100644 index 000000000..459654e12 --- /dev/null +++ b/src/routes/(protected)/logout/+page.server.ts @@ -0,0 +1,11 @@ +import { resolve } from "$app/paths"; +import { auth } from "$src/lib/server/auth"; +import { redirect } from "@sveltejs/kit"; +import type { PageServerLoad } from "./$types"; + +export const load = (async (event) => { + await auth.api.signOut({ + headers: event.request.headers + }); + return redirect(302, resolve("/login")); +}) satisfies PageServerLoad; diff --git a/src/routes/login/+page.svelte b/src/routes/login/+page.svelte new file mode 100644 index 000000000..cabb30c2b --- /dev/null +++ b/src/routes/login/+page.svelte @@ -0,0 +1,40 @@ + + +
+
+
+ + + SC + +
+

Sign in to SkyCrypt

+
+
+ +
+ + + + + {#if signInSocial.pending} + +
+ +

We only request your basic Discord profile (username, avatar, and banner).
We do not access your email or any other personal information.

If this is not the case, then you may be a victim of a phishing attempt.

+
+
diff --git a/src/routes/login/login.remote.ts b/src/routes/login/login.remote.ts new file mode 100644 index 000000000..7013d7551 --- /dev/null +++ b/src/routes/login/login.remote.ts @@ -0,0 +1,22 @@ +import { form } from "$app/server"; +import { auth } from "$src/lib/server/auth"; +import { fail, redirect } from "@sveltejs/kit"; +import { z } from "zod"; + +export const signInSocial = form(z.object({ provider: z.string(), callbackURL: z.string() }), async ({ provider, callbackURL }) => { + if (!provider) { + return fail(400, { message: "Provider is required" }); + } + + const result = await auth.api.signInSocial({ + body: { + provider: provider, + callbackURL + } + }); + + if (result.url) { + return redirect(302, result.url); + } + return fail(400, { message: "Social sign-in failed" }); +}); diff --git a/src/routes/sitemap.xml/+server.ts b/src/routes/sitemap.xml/+server.ts index 2d1c86508..9aee9bab3 100644 --- a/src/routes/sitemap.xml/+server.ts +++ b/src/routes/sitemap.xml/+server.ts @@ -22,7 +22,7 @@ export const GET: RequestHandler = async () => { return sitemap.response({ origin: BASE_URL, additionalPaths: [...statsPaths], - excludeRoutePatterns: ["^/api/.*", "^/stats.*"], + excludeRoutePatterns: ["^/api/.*", "^/stats.*", "^/login.*", "(protected)", "(admin)"], headers: { "cache-control": "max-age=0, s-maxage=3600" } diff --git a/svelte.config.js b/svelte.config.js index 64b6a181a..f371cbd6b 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -42,6 +42,12 @@ const config = { name: process.env.PUBLIC_COMMIT_HASH, // in ms pollInterval: 1000 * 60 // 1 minute + }, + typescript: { + config: (config) => ({ + ...config, + include: [...config.include, "../drizzle.config.ts"] + }) } }, From 0f0fa4c345d0244911a3a0aaddf9825d814c530a Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Sat, 23 May 2026 02:21:38 +0200 Subject: [PATCH 04/34] fix(init): skip migrations during build process --- src/hooks.server.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/hooks.server.ts b/src/hooks.server.ts index 8d729f282..cccc0a1d6 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -12,6 +12,10 @@ const protectedAdminRouteGroupName = "(admin)"; const signInPath = "/login"; export const init: ServerInit = async () => { + if (building) { + console.info("Skipping migrations during build."); + return; + } await runMigrations(); }; From 9c095a76dfdce0d29603e880872b7c8530eedb9a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 23 May 2026 00:36:03 +0000 Subject: [PATCH 05/34] chore: version packages (beta) [skip ci] --- .changeset/pre.json | 10 ++++++++++ CHANGELOG.md | 6 ++++++ package.json | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 .changeset/pre.json diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 000000000..0c4d1a7a9 --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,10 @@ +{ + "mode": "pre", + "tag": "beta", + "initialVersions": { + "skycrypt-frontend": "3.6.2" + }, + "changesets": [ + "crisp-tires-hang" + ] +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 71e4af95e..8d89c8efe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 3.7.0-beta.0 + +### Minor Changes + +- Add initial work for SkyCrypt accounts ([#328](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/pull/328)) + ## 3.6.2 ### Patch Changes diff --git a/package.json b/package.json index 498662d75..924567492 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "skycrypt-frontend", - "version": "3.6.2", + "version": "3.7.0-beta.0", "private": true, "type": "module", "repository": { From 59cc1a2be98bc52707557b4e7ee7f9b642c1a520 Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Sat, 23 May 2026 02:53:26 +0200 Subject: [PATCH 06/34] fix(deps): update prettier-plugin-svelte to version 4.0.1 and adjust prettier-ignore for drizzle --- .prettierignore | 2 +- package.json | 2 +- pnpm-lock.yaml | 16 ++++++++-------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.prettierignore b/.prettierignore index ca45359e2..8b88e9beb 100644 --- a/.prettierignore +++ b/.prettierignore @@ -8,4 +8,4 @@ bun.lockb # Miscellaneous /static/ .changeset/ -/drizzle/ +**/drizzle/** diff --git a/package.json b/package.json index 924567492..b520a5986 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "playwright": "^1.60.0", "postgres": "^3.4.9", "prettier": "^3.8.3", - "prettier-plugin-svelte": "^4.0.0", + "prettier-plugin-svelte": "^4.0.1", "prettier-plugin-tailwindcss": "^0.8.0", "pretty-ms": "^9.3.0", "runed": "^0.37.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cd4b78db9..3726c17a4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -172,11 +172,11 @@ importers: specifier: ^3.8.3 version: 3.8.3 prettier-plugin-svelte: - specifier: ^4.0.0 - version: 4.0.0(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + specifier: ^4.0.1 + version: 4.0.1(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)) prettier-plugin-tailwindcss: specifier: ^0.8.0 - version: 0.8.0(prettier-plugin-svelte@4.0.0(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)))(prettier@3.8.3) + version: 0.8.0(prettier-plugin-svelte@4.0.1(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)))(prettier@3.8.3) pretty-ms: specifier: ^9.3.0 version: 9.3.0 @@ -4187,8 +4187,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-plugin-svelte@4.0.0: - resolution: {integrity: sha512-StoBMZGsfE9ztz1i9ejLhYU2nlP1+FdoWqGCb7Bh7EGVVBW2smCcyoCPxWCdszVdx1SsDiK7n4uAv/YUsHqimQ==} + prettier-plugin-svelte@4.0.1: + resolution: {integrity: sha512-oDVmtKi+M8bJeUoMfPvulUqZYcuXrs5AmhhLYPKtBeg6hcpMdx7UYYisVCqEaLQuKtiPSYFpotfwp4cZK3D4xw==} engines: {node: '>=20'} peerDependencies: prettier: ^3.0.0 @@ -8861,16 +8861,16 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-svelte@4.0.0(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)): + prettier-plugin-svelte@4.0.1(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: prettier: 3.8.3 svelte: 5.55.9(@typescript-eslint/types@8.59.4) - prettier-plugin-tailwindcss@0.8.0(prettier-plugin-svelte@4.0.0(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)))(prettier@3.8.3): + prettier-plugin-tailwindcss@0.8.0(prettier-plugin-svelte@4.0.1(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)))(prettier@3.8.3): dependencies: prettier: 3.8.3 optionalDependencies: - prettier-plugin-svelte: 4.0.0(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + prettier-plugin-svelte: 4.0.1(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)) prettier@2.8.8: {} From 8d0c28ceedb6a4d761deebe0e3d9e97b1a94f871 Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Sat, 23 May 2026 03:10:56 +0200 Subject: [PATCH 07/34] fix(deps): update takumi-js to version ^1.4.0 in package.json and pnpm-lock.yaml --- package.json | 2 +- pnpm-lock.yaml | 102 ++++++++++++++++++++++---------------------- pnpm-workspace.yaml | 13 ++++++ 3 files changed, 65 insertions(+), 52 deletions(-) diff --git a/package.json b/package.json index b520a5986..cd97dec4a 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "@sentry/sveltekit": "^10.53.1", "culori": "^4.0.2", "simple-git-hooks": "^2.13.1", - "takumi-js": "1.3.0" + "takumi-js": "^1.4.0" }, "engines": { "node": "^24", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3726c17a4..78ad5123e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,8 +18,8 @@ importers: specifier: ^2.13.1 version: 2.13.1 takumi-js: - specifier: 1.3.0 - version: 1.3.0 + specifier: ^1.4.0 + version: 1.4.0 devDependencies: '@better-auth/api-key': specifier: ^1.6.11 @@ -2365,64 +2365,64 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 - '@takumi-rs/core-darwin-arm64@1.3.0': - resolution: {integrity: sha512-UaBr7xgDW50VXXlulAwBYNrTGqUYevSUcxEa+kJUvpCGAMJO5BhqpVcWLGj7hGSdv0SrLKth8Vv+IDg9aNOwvw==} + '@takumi-rs/core-darwin-arm64@1.4.0': + resolution: {integrity: sha512-p0WvQsAocsnINzyFisfNp31m0colMZkPqexfhE0WaISixPSfk1kvV0HIaJ4ULr801MxWAwNovk91LWamgM/Cgg==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [arm64] os: [darwin] - '@takumi-rs/core-darwin-x64@1.3.0': - resolution: {integrity: sha512-TBy0RJIeoDGKHl/fjHaPGCk8ZH2v+uhszuHVFCwcje3zLl7eoHTojE5Npyl8pLVrRuvl+6nlYR15yK6/EXubDg==} + '@takumi-rs/core-darwin-x64@1.4.0': + resolution: {integrity: sha512-M4TGoYWsAAeiFyAYy5mqnojINdb6J0AJWWErxh33HkSaqJYrGFBOT44urWgAx0QXKhGLlv8bJauXQ34Hx5lPZA==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [x64] os: [darwin] - '@takumi-rs/core-linux-arm64-gnu@1.3.0': - resolution: {integrity: sha512-dTEMey9VmaH/4aOWFtiwSAVYGRuqRPSZ0jFAN+Lruheoj7ByY4xmygUbB6OuF2Ly7gVhfAs0NK89Zdjy0/+GBw==} + '@takumi-rs/core-linux-arm64-gnu@1.4.0': + resolution: {integrity: sha512-8IVRI23j60oavmtJUQQ6olOXDg4FGWTy8idNTyNDxtdnjVvUIStjeTJBADdjkuLbKYmJehjOzIgIaOy+QRoS9g==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [arm64] os: [linux] libc: [glibc] - '@takumi-rs/core-linux-arm64-musl@1.3.0': - resolution: {integrity: sha512-Q1/soPJ/xMby+vrMc0isUzxe5MCy7kzizhwa8pMvCvXIddDDnc4OT6HQ5iNtHG6Apg7DaWno43bqUGdCaVWuxQ==} + '@takumi-rs/core-linux-arm64-musl@1.4.0': + resolution: {integrity: sha512-z956DT2h3K6a6cCFGA5iBpvwV+59KA0/hhwrGj5weu+1IFPr9aUL+NStvZ8Xu5JLvssEhpjeJm2vRvcsbhQwpA==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [arm64] os: [linux] libc: [musl] - '@takumi-rs/core-linux-x64-gnu@1.3.0': - resolution: {integrity: sha512-mH+GuATAbU3MkDFtsCIsK7n8wutgJ94hz7HozytbTHYiEk7dFe9gIfLeQKkdYdoKvE1FjDHTOLsvXZHfZ45lYw==} + '@takumi-rs/core-linux-x64-gnu@1.4.0': + resolution: {integrity: sha512-wTquzFopFVADBlMgbLHc3k9bf1P68fJjhw4Ej4rnI2jqLheCGwLbOlF14MzLXwL9JP6JWVqFzojKI6l/3u+d4A==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [x64] os: [linux] libc: [glibc] - '@takumi-rs/core-linux-x64-musl@1.3.0': - resolution: {integrity: sha512-piNl5R9X3bG0stMzUZfA5nSabKyX4tgghCVHeov7YHuy9KV1cdaqZWV0g5xwEwRX6mukn5O3lob7DNdIkGZrrQ==} + '@takumi-rs/core-linux-x64-musl@1.4.0': + resolution: {integrity: sha512-zagP9hH1sL+toPeIGsOCwupmerzjhyw8YizCHeWMQVzO8lpFj4IMigIRmemt7Jh+/xUKl/Mx/zo5Qh4hIQSr7A==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [x64] os: [linux] libc: [musl] - '@takumi-rs/core-win32-arm64-msvc@1.3.0': - resolution: {integrity: sha512-Kipcon2DS5FeTwPHLjvFg/YVRgbW/w3V7m4Z58TPHNSFyakMfEVqF9/mz8CLjWFZJxUUKI/MsVMu95UhwyKLKg==} + '@takumi-rs/core-win32-arm64-msvc@1.4.0': + resolution: {integrity: sha512-2x9xVeGFsq6jeup1J0i5l4SuXVhdT2EYYzHYWuf8Lx1M+jTCt4oGioZZ4nLPBJ/xaZROv92kOmQpgGZy/pq9kA==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [arm64] os: [win32] - '@takumi-rs/core-win32-x64-msvc@1.3.0': - resolution: {integrity: sha512-2qgKRPS8d3tNKh/XU9ZdXphujuoeuhyQOoTI/iEE0+TvceZKt6hqGqjIjWTi9UPTXGeUJWChIHXrrOyLnzex0Q==} + '@takumi-rs/core-win32-x64-msvc@1.4.0': + resolution: {integrity: sha512-rLYkdWPNV4mXov6n3stsyS5aCthhbMIO3SEjr8AH6m1nXEmyzC4EcpHSAIN5hnDCb8JJfd+bQtlI79rns4jcTQ==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [x64] os: [win32] - '@takumi-rs/core@1.3.0': - resolution: {integrity: sha512-pPv7Nd7l8dCfh969SfJUvEK7fovSkLro5TquKVMsT0kROFX4HJ5cbkRfp2MNYYrfYFSoNAzvto+JrcVqV5+MhA==} + '@takumi-rs/core@1.4.0': + resolution: {integrity: sha512-7n+iD9l2WhfGld+aTcRnlxwqLH9tWC6r++rPAFiM4UG+UoEXJmCMymw3bgycN3UqdWGYnx8ltR3MeZbDpSZZhw==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} - '@takumi-rs/helpers@1.3.0': - resolution: {integrity: sha512-Qmi5YBBZSv5OjZTgOsn0zJqPjOrFcD8ft2vkD4THvfKwGt9Rv8g+qzw70dYvz39uNVsTeQynAEVbslfwoIlb9g==} + '@takumi-rs/helpers@1.4.0': + resolution: {integrity: sha512-2ZUXQfuGp3Z/Wux0gP/n4cFDdZtBIJkE5UJK7dfhOTLybKcIReTFMctLf22SgVaf/TDeQWE0kLane7U9+VdBMw==} peerDependencies: react: ^19.2.5 react-dom: ^18.0.0 || ^19.0.0 @@ -2432,8 +2432,8 @@ packages: react-dom: optional: true - '@takumi-rs/wasm@1.3.0': - resolution: {integrity: sha512-WadZuvxsjORg7qX+WhHblucJc1EtKlhCk1hz6Qm5tnuiu2CSlODD2Jv3haxIMRcmp6XmnfwLZcCGEu4lStrA2w==} + '@takumi-rs/wasm@1.4.0': + resolution: {integrity: sha512-wcun2FK/Ido++3dFLYI11b76ZGBYNUW+zCXaWBqfYz689b8JgEzdxtUlZEWT0zLy+tsNzQlmYs2RLLMmMHG1hg==} '@testing-library/svelte-core@1.0.0': resolution: {integrity: sha512-VkUePoLV6oOYwSUvX6ShA8KLnJqZiYMIbP2JW2t0GLWLkJxKGvuH5qrrZBV/X7cXFnLGuFQEC7RheYiZOW68KQ==} @@ -4622,8 +4622,8 @@ packages: tailwindcss@4.3.0: resolution: {integrity: sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==} - takumi-js@1.3.0: - resolution: {integrity: sha512-iFOVWUIQqZHRrDlCwmJmo+6jGaxluem7NMyeL0DSt+nYDPeSurES1GbWyynFWNbpPMAYOJvj3x0sdrrH59QleA==} + takumi-js@1.4.0: + resolution: {integrity: sha512-E4HavE8RqZ1iH1S5y1iOMn1xlrZi489y9e2ln8CC70wEXi94dl45nccEyLFe6yYW0kkdC/9SRCO/3YGmx90euw==} tapable@2.3.3: resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} @@ -7057,51 +7057,51 @@ snapshots: tailwindcss: 4.3.0 vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0) - '@takumi-rs/core-darwin-arm64@1.3.0': + '@takumi-rs/core-darwin-arm64@1.4.0': optional: true - '@takumi-rs/core-darwin-x64@1.3.0': + '@takumi-rs/core-darwin-x64@1.4.0': optional: true - '@takumi-rs/core-linux-arm64-gnu@1.3.0': + '@takumi-rs/core-linux-arm64-gnu@1.4.0': optional: true - '@takumi-rs/core-linux-arm64-musl@1.3.0': + '@takumi-rs/core-linux-arm64-musl@1.4.0': optional: true - '@takumi-rs/core-linux-x64-gnu@1.3.0': + '@takumi-rs/core-linux-x64-gnu@1.4.0': optional: true - '@takumi-rs/core-linux-x64-musl@1.3.0': + '@takumi-rs/core-linux-x64-musl@1.4.0': optional: true - '@takumi-rs/core-win32-arm64-msvc@1.3.0': + '@takumi-rs/core-win32-arm64-msvc@1.4.0': optional: true - '@takumi-rs/core-win32-x64-msvc@1.3.0': + '@takumi-rs/core-win32-x64-msvc@1.4.0': optional: true - '@takumi-rs/core@1.3.0': + '@takumi-rs/core@1.4.0': dependencies: - '@takumi-rs/helpers': 1.3.0 + '@takumi-rs/helpers': 1.4.0 optionalDependencies: - '@takumi-rs/core-darwin-arm64': 1.3.0 - '@takumi-rs/core-darwin-x64': 1.3.0 - '@takumi-rs/core-linux-arm64-gnu': 1.3.0 - '@takumi-rs/core-linux-arm64-musl': 1.3.0 - '@takumi-rs/core-linux-x64-gnu': 1.3.0 - '@takumi-rs/core-linux-x64-musl': 1.3.0 - '@takumi-rs/core-win32-arm64-msvc': 1.3.0 - '@takumi-rs/core-win32-x64-msvc': 1.3.0 + '@takumi-rs/core-darwin-arm64': 1.4.0 + '@takumi-rs/core-darwin-x64': 1.4.0 + '@takumi-rs/core-linux-arm64-gnu': 1.4.0 + '@takumi-rs/core-linux-arm64-musl': 1.4.0 + '@takumi-rs/core-linux-x64-gnu': 1.4.0 + '@takumi-rs/core-linux-x64-musl': 1.4.0 + '@takumi-rs/core-win32-arm64-msvc': 1.4.0 + '@takumi-rs/core-win32-x64-msvc': 1.4.0 transitivePeerDependencies: - react - react-dom - '@takumi-rs/helpers@1.3.0': {} + '@takumi-rs/helpers@1.4.0': {} - '@takumi-rs/wasm@1.3.0': + '@takumi-rs/wasm@1.4.0': dependencies: - '@takumi-rs/helpers': 1.3.0 + '@takumi-rs/helpers': 1.4.0 transitivePeerDependencies: - react - react-dom @@ -9284,11 +9284,11 @@ snapshots: tailwindcss@4.3.0: {} - takumi-js@1.3.0: + takumi-js@1.4.0: dependencies: - '@takumi-rs/core': 1.3.0 - '@takumi-rs/helpers': 1.3.0 - '@takumi-rs/wasm': 1.3.0 + '@takumi-rs/core': 1.4.0 + '@takumi-rs/helpers': 1.4.0 + '@takumi-rs/wasm': 1.4.0 transitivePeerDependencies: - react - react-dom diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index fcfa3ddb3..f1846764b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -4,3 +4,16 @@ allowBuilds: better-sqlite3: true esbuild: true simple-git-hooks: true +minimumReleaseAgeExclude: + - "@takumi-rs/core-darwin-arm64@1.4.0" + - "@takumi-rs/core-darwin-x64@1.4.0" + - "@takumi-rs/core-linux-arm64-gnu@1.4.0" + - "@takumi-rs/core-linux-arm64-musl@1.4.0" + - "@takumi-rs/core-linux-x64-gnu@1.4.0" + - "@takumi-rs/core-linux-x64-musl@1.4.0" + - "@takumi-rs/core-win32-arm64-msvc@1.4.0" + - "@takumi-rs/core-win32-x64-msvc@1.4.0" + - "@takumi-rs/core@1.4.0" + - "@takumi-rs/helpers@1.4.0" + - "@takumi-rs/wasm@1.4.0" + - takumi-js@1.4.0 From 94bd1abe69c190e3f510cde1cae167542659f5e1 Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Sat, 23 May 2026 03:23:26 +0200 Subject: [PATCH 08/34] chore(drizzle): change output paths --- .prettierignore | 2 +- Dockerfile | 1 + drizzle.config.ts | 2 +- .../shared/drizzle => drizzle}/0000_dapper_killer_shrike.sql | 0 {src/lib/shared/drizzle => drizzle}/meta/0000_snapshot.json | 0 {src/lib/shared/drizzle => drizzle}/meta/_journal.json | 0 src/lib/server/db/migrate.ts | 5 +---- 7 files changed, 4 insertions(+), 6 deletions(-) rename {src/lib/shared/drizzle => drizzle}/0000_dapper_killer_shrike.sql (100%) rename {src/lib/shared/drizzle => drizzle}/meta/0000_snapshot.json (100%) rename {src/lib/shared/drizzle => drizzle}/meta/_journal.json (100%) diff --git a/.prettierignore b/.prettierignore index 8b88e9beb..ca45359e2 100644 --- a/.prettierignore +++ b/.prettierignore @@ -8,4 +8,4 @@ bun.lockb # Miscellaneous /static/ .changeset/ -**/drizzle/** +/drizzle/ diff --git a/Dockerfile b/Dockerfile index 112e71ba3..0e4618b82 100644 --- a/Dockerfile +++ b/Dockerfile @@ -38,6 +38,7 @@ WORKDIR /app COPY --from=builder /app/build build/ COPY --from=builder /app/node_modules node_modules/ COPY --from=builder /app/static static/ +COPY --from=builder /app/drizzle drizzle/ COPY package.json . COPY pnpm-lock.yaml . diff --git a/drizzle.config.ts b/drizzle.config.ts index 156bd0672..59f99c33d 100644 --- a/drizzle.config.ts +++ b/drizzle.config.ts @@ -4,7 +4,7 @@ if (!process.env.DATABASE_URL) throw new Error("DATABASE_URL is not set"); export default defineConfig({ schema: "./src/lib/server/db/schema/index.ts", - out: "./src/lib/shared/drizzle", + out: "./drizzle", dialect: "postgresql", dbCredentials: { url: process.env.DATABASE_URL }, verbose: true, diff --git a/src/lib/shared/drizzle/0000_dapper_killer_shrike.sql b/drizzle/0000_dapper_killer_shrike.sql similarity index 100% rename from src/lib/shared/drizzle/0000_dapper_killer_shrike.sql rename to drizzle/0000_dapper_killer_shrike.sql diff --git a/src/lib/shared/drizzle/meta/0000_snapshot.json b/drizzle/meta/0000_snapshot.json similarity index 100% rename from src/lib/shared/drizzle/meta/0000_snapshot.json rename to drizzle/meta/0000_snapshot.json diff --git a/src/lib/shared/drizzle/meta/_journal.json b/drizzle/meta/_journal.json similarity index 100% rename from src/lib/shared/drizzle/meta/_journal.json rename to drizzle/meta/_journal.json diff --git a/src/lib/server/db/migrate.ts b/src/lib/server/db/migrate.ts index db6a22bcc..7775bfe18 100644 --- a/src/lib/server/db/migrate.ts +++ b/src/lib/server/db/migrate.ts @@ -1,14 +1,11 @@ import { db } from "$src/lib/server/db"; import { migrate } from "drizzle-orm/postgres-js/migrator"; import path from "node:path"; -import { fileURLToPath } from "node:url"; export async function runMigrations() { console.info("[migrate] Starting migrations..."); - const __dirname = path.dirname(fileURLToPath(import.meta.url)); - - const migrationsFolder = path.resolve(__dirname, "../../shared/drizzle"); + const migrationsFolder = path.resolve(process.cwd(), "drizzle"); console.info(`[migrate] Migrations folder resolved to: ${migrationsFolder}`); From 05cafc68a3b8523e43ac3842aaa7e8513eeeec5d Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Sat, 23 May 2026 03:48:53 +0200 Subject: [PATCH 09/34] feat(auth): dynamically import openAPI plugin in development --- src/lib/server/auth.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/lib/server/auth.ts b/src/lib/server/auth.ts index 8206ad037..44bd8b273 100644 --- a/src/lib/server/auth.ts +++ b/src/lib/server/auth.ts @@ -4,6 +4,7 @@ import { env as envPrivate } from "$env/dynamic/private"; import { env as envPublic } from "$env/dynamic/public"; import { db } from "$lib/server/db"; import { apiKey } from "@better-auth/api-key"; +import type { BetterAuthPlugin } from "better-auth"; import { drizzleAdapter } from "better-auth/adapters/drizzle"; import { betterAuth } from "better-auth/minimal"; import { admin, genericOAuth, patreon } from "better-auth/plugins"; @@ -43,6 +44,14 @@ const getWhitelist = () => { const baseURL = getBaseURL(); +// Dynamically import the openAPI plugin only in development to avoid including it in the production bundle +const openAPIPlugin: BetterAuthPlugin | null = dev + ? await (async () => { + const { openAPI } = await import("better-auth/plugins"); + return openAPI(); + })() + : null; + export const auth = betterAuth({ appName: "SkyCrypt", baseURL, @@ -130,6 +139,7 @@ export const auth = betterAuth({ }) ] }), + ...(openAPIPlugin ? [openAPIPlugin] : []), // Conditionally include the openAPI plugin only in development sveltekitCookies(getRequestEvent) // make sure this is the last plugin in the array ] }); From a74b0339f66196ae719dbc19c06ab704995e502c Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Fri, 5 Jun 2026 00:23:01 +0200 Subject: [PATCH 10/34] feat(newsroom): add CMS-backed newsroom --- .changeset/fuzzy-newsrooms-smile.md | 5 + .env.example | 8 +- eslint.config.ts | 2 +- orval.config.ts | 17 + pnpm-lock.yaml | 1 + src/hooks.server.ts | 14 +- src/lib/components/newsroom/Pagination.svelte | 46 + src/lib/components/newsroom/PostCard.svelte | 81 + .../components/newsroom/PostRenderer.svelte | 15 + src/lib/components/newsroom/TypeBadge.svelte | 31 + .../newsroom/lexical/LexicalRenderer.svelte | 43 + .../newsroom/lexical/ModifierWrapper.svelte | 23 + .../newsroom/lexical/TextRenderer.svelte | 12 + .../lexical/elements/Blockquote.svelte | 10 + .../newsroom/lexical/elements/Heading.svelte | 22 + .../newsroom/lexical/elements/Image.svelte | 20 + .../newsroom/lexical/elements/Link.svelte | 15 + .../newsroom/lexical/elements/List.svelte | 15 + .../newsroom/lexical/elements/ListItem.svelte | 23 + .../lexical/elements/Paragraph.svelte | 10 + .../lexical/elements/Relationship.svelte | 20 + .../newsroom/lexical/elements/RichText.svelte | 8 + .../newsroom/lexical/elements/Upload.svelte | 18 + .../newsroom/lexical/inline/Bold.svelte | 7 + .../newsroom/lexical/inline/Code.svelte | 7 + .../newsroom/lexical/inline/Italic.svelte | 7 + .../lexical/inline/Strikethrough.svelte | 7 + .../newsroom/lexical/inline/Underline.svelte | 7 + .../components/newsroom/lexical/lexical.ts | 22 + src/lib/hooks/client-locale.svelte.ts | 32 + src/lib/shared/api/cms-api.remote.ts | 51 + src/lib/shared/api/cms-generated.ts | 4158 +++++++++++++++++ src/lib/shared/api/mutator/cms-instance.ts | 41 + src/lib/shared/api/orval-generated-zod.ts | 2 +- src/lib/shared/api/orval-generated.ts | 2 +- src/lib/types/cms.ts | 73 + src/lib/types/index.ts | 1 + src/routes/+page.svelte | 45 + src/routes/newsroom/+error.svelte | 21 + src/routes/newsroom/+page.server.ts | 29 + src/routes/newsroom/+page.svelte | 65 + src/routes/newsroom/[slug]/+page.server.ts | 40 + src/routes/newsroom/[slug]/+page.svelte | 120 + src/routes/sitemap.xml/+server.ts | 19 +- svelte.config.js | 7 +- 45 files changed, 5212 insertions(+), 10 deletions(-) create mode 100644 .changeset/fuzzy-newsrooms-smile.md create mode 100644 src/lib/components/newsroom/Pagination.svelte create mode 100644 src/lib/components/newsroom/PostCard.svelte create mode 100644 src/lib/components/newsroom/PostRenderer.svelte create mode 100644 src/lib/components/newsroom/TypeBadge.svelte create mode 100644 src/lib/components/newsroom/lexical/LexicalRenderer.svelte create mode 100644 src/lib/components/newsroom/lexical/ModifierWrapper.svelte create mode 100644 src/lib/components/newsroom/lexical/TextRenderer.svelte create mode 100644 src/lib/components/newsroom/lexical/elements/Blockquote.svelte create mode 100644 src/lib/components/newsroom/lexical/elements/Heading.svelte create mode 100644 src/lib/components/newsroom/lexical/elements/Image.svelte create mode 100644 src/lib/components/newsroom/lexical/elements/Link.svelte create mode 100644 src/lib/components/newsroom/lexical/elements/List.svelte create mode 100644 src/lib/components/newsroom/lexical/elements/ListItem.svelte create mode 100644 src/lib/components/newsroom/lexical/elements/Paragraph.svelte create mode 100644 src/lib/components/newsroom/lexical/elements/Relationship.svelte create mode 100644 src/lib/components/newsroom/lexical/elements/RichText.svelte create mode 100644 src/lib/components/newsroom/lexical/elements/Upload.svelte create mode 100644 src/lib/components/newsroom/lexical/inline/Bold.svelte create mode 100644 src/lib/components/newsroom/lexical/inline/Code.svelte create mode 100644 src/lib/components/newsroom/lexical/inline/Italic.svelte create mode 100644 src/lib/components/newsroom/lexical/inline/Strikethrough.svelte create mode 100644 src/lib/components/newsroom/lexical/inline/Underline.svelte create mode 100644 src/lib/components/newsroom/lexical/lexical.ts create mode 100644 src/lib/hooks/client-locale.svelte.ts create mode 100644 src/lib/shared/api/cms-api.remote.ts create mode 100644 src/lib/shared/api/cms-generated.ts create mode 100644 src/lib/shared/api/mutator/cms-instance.ts create mode 100644 src/lib/types/cms.ts create mode 100644 src/routes/newsroom/+error.svelte create mode 100644 src/routes/newsroom/+page.server.ts create mode 100644 src/routes/newsroom/+page.svelte create mode 100644 src/routes/newsroom/[slug]/+page.server.ts create mode 100644 src/routes/newsroom/[slug]/+page.svelte diff --git a/.changeset/fuzzy-newsrooms-smile.md b/.changeset/fuzzy-newsrooms-smile.md new file mode 100644 index 000000000..1eeed9966 --- /dev/null +++ b/.changeset/fuzzy-newsrooms-smile.md @@ -0,0 +1,5 @@ +--- +"skycrypt-frontend": minor +--- + +Add the CMS-backed newsroom with post listing, article pages, previews, and sitemap entries. diff --git a/.env.example b/.env.example index 99f40c51b..16436f942 100644 --- a/.env.example +++ b/.env.example @@ -38,4 +38,10 @@ MC_ID_CLIENT_SECRET="" # Patreon API # https://www.patreon.com/portal/registration/register-clients PATREON_CLIENT_ID="" -PATREON_CLIENT_SECRET="" \ No newline at end of file +PATREON_CLIENT_SECRET="" + +# Payload CMS +PUBLIC_CMS_URL="https://cms.shiiyu.moe" +SERVER_CMS_API_URL="https://cms.shiiyu.moe" # If you're using docker, set this to the name of the CMS container +CMS_API_TOKEN="" # Users API Key generated in CMS admin (Users → API Key tab) +CMS_PREVIEW_TOKEN="" # Must match CMS_PREVIEW_TOKEN in SkyCrypt-CMS .env \ No newline at end of file diff --git a/eslint.config.ts b/eslint.config.ts index b7aa00e2f..b30df8ae5 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -58,5 +58,5 @@ export default defineConfig( "svelte/no-useless-mustaches": "off" } }, - { ignores: ["**/.DS_Store", "**/node_modules/", "**/build/", "**/.svelte-kit/", "**/package/", "**/.env", "**/.env.*", "**/pnpm-lock.yaml", "**/package-lock.json", "**/yarn.lock", "**/static/", "**/cache/", "**/api/*-generated-zod.ts"] } + { ignores: ["**/.DS_Store", "**/node_modules/", "**/build/", "**/.svelte-kit/", "**/package/", "**/.env", "**/.env.*", "**/pnpm-lock.yaml", "**/package-lock.json", "**/yarn.lock", "**/static/", "**/cache/", "**/api/*-generated-zod.ts", "**/api/cms-generated.ts"] } ); diff --git a/orval.config.ts b/orval.config.ts index 22fa37108..339ad3bcf 100644 --- a/orval.config.ts +++ b/orval.config.ts @@ -29,5 +29,22 @@ export default defineConfig({ hooks: { afterAllFilesWrite: "prettier --write ./src/lib/shared/api/orval-generated-zod.ts" } + }, + cms: { + input: "http://localhost:3000/api/openapi.json", + output: { + target: "./src/lib/shared/api/cms-generated.ts", + client: "fetch", + tsconfig: "./tsconfig.json", + override: { + mutator: { + path: "./src/lib/shared/api/mutator/cms-instance.ts", + name: "cmsFetch" + } + } + }, + hooks: { + afterAllFilesWrite: "prettier --write ./src/lib/shared/api/cms-generated.ts" + } } }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 78ad5123e..7e6b777f8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2267,6 +2267,7 @@ packages: '@svitejs/changesets-changelog-github-compact@1.2.0': resolution: {integrity: sha512-08eKiDAjj4zLug1taXSIJ0kGL5cawjVCyJkBb6EWSg5fEPX6L+Wtr0CH2If4j5KYylz85iaZiFlUItvgJvll5g==} engines: {node: ^14.13.1 || ^16.0.0 || >=18} + deprecated: unmaintained '@swc/helpers@0.5.21': resolution: {integrity: sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==} diff --git a/src/hooks.server.ts b/src/hooks.server.ts index cccc0a1d6..f248a0e3a 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -1,4 +1,5 @@ import { building } from "$app/environment"; +import { env as envPublic } from "$env/dynamic/public"; import { auth } from "$lib/server/auth"; import { UserRole } from "$lib/shared/roles"; import { runMigrations } from "$src/lib/server/db/migrate"; @@ -28,7 +29,18 @@ const headersHandler = (async ({ event, resolve }) => { response.headers.set("Permissions-Policy", "accelerometer=(), autoplay=(), camera=(), encrypted-media=(), fullscreen=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), sync-xhr=(), usb=(), xr-spatial-tracking=(), geolocation=()"); response.headers.set("X-Content-Type-Options", "nosniff"); response.headers.set("Strict-Transport-Security", "max-age=31536000; includeSubDomains; preload"); - response.headers.set("X-Frame-Options", "DENY"); + + // Clickjacking protection. The newsroom draft preview must be embeddable in the Payload + // CMS admin's live-preview iframe, so allow only the CMS origin to frame that one route; + // everything else stays frame-locked. + const isNewsroomPreview = url.pathname.startsWith("/newsroom/") && url.searchParams.get("preview") === "1"; + if (isNewsroomPreview) { + const cms = envPublic.PUBLIC_CMS_URL?.trim(); + response.headers.append("Content-Security-Policy", `frame-ancestors 'self'${cms ? ` ${cms}` : ""}`); + } else { + response.headers.set("X-Frame-Options", "DENY"); + response.headers.append("Content-Security-Policy", "frame-ancestors 'none'"); + } // Cross-Origin policies // COEP intentionally unsafe-none: tightening would require all cross-origin diff --git a/src/lib/components/newsroom/Pagination.svelte b/src/lib/components/newsroom/Pagination.svelte new file mode 100644 index 000000000..c5e8b37fb --- /dev/null +++ b/src/lib/components/newsroom/Pagination.svelte @@ -0,0 +1,46 @@ + + +{#if totalPages > 1} + +{/if} diff --git a/src/lib/components/newsroom/PostCard.svelte b/src/lib/components/newsroom/PostCard.svelte new file mode 100644 index 000000000..9ba8c478b --- /dev/null +++ b/src/lib/components/newsroom/PostCard.svelte @@ -0,0 +1,81 @@ + + + +
+ {#if thumb && post.heroImage} + + + + + + + {/if} +
+ {#if post.featured} + + {/if} +
+
+
+
+ {#if author.mcUuid} + + + {initials} + + {/if} + {displayName} +
+ +
+ + {post.title} + + {#if post.excerpt} +

{post.excerpt}

+ {/if} + +
+ + {#each visibleTags as tag (tag)} + #{tag} + {/each} + {#if overflowTags > 0} + +{overflowTags} + {/if} +
+
+
diff --git a/src/lib/components/newsroom/PostRenderer.svelte b/src/lib/components/newsroom/PostRenderer.svelte new file mode 100644 index 000000000..cc8408197 --- /dev/null +++ b/src/lib/components/newsroom/PostRenderer.svelte @@ -0,0 +1,15 @@ + + +{#each body as block, i (block.id ?? i)} + {#if block.blockType === "image"} + + {:else if block.blockType === "richText"} + + {/if} +{/each} diff --git a/src/lib/components/newsroom/TypeBadge.svelte b/src/lib/components/newsroom/TypeBadge.svelte new file mode 100644 index 000000000..ca947e160 --- /dev/null +++ b/src/lib/components/newsroom/TypeBadge.svelte @@ -0,0 +1,31 @@ + + + + + + {POST_TYPE_LABELS[type]} + diff --git a/src/lib/components/newsroom/lexical/LexicalRenderer.svelte b/src/lib/components/newsroom/lexical/LexicalRenderer.svelte new file mode 100644 index 000000000..ae6e8d934 --- /dev/null +++ b/src/lib/components/newsroom/lexical/LexicalRenderer.svelte @@ -0,0 +1,43 @@ + + +{#each nodes as node, i (i)} + {#if node.type === "linebreak"} +
+ {:else if node.type === "horizontalrule"} +
+ {:else if registry[node.type]} + {@const Element = registry[node.type]} + + {:else if node.children} + + {/if} +{/each} diff --git a/src/lib/components/newsroom/lexical/ModifierWrapper.svelte b/src/lib/components/newsroom/lexical/ModifierWrapper.svelte new file mode 100644 index 000000000..a4681b15d --- /dev/null +++ b/src/lib/components/newsroom/lexical/ModifierWrapper.svelte @@ -0,0 +1,23 @@ + + +{#if Mod} + + {#if hasMore}{:else}{text}{/if} + +{:else}{text}{/if} diff --git a/src/lib/components/newsroom/lexical/TextRenderer.svelte b/src/lib/components/newsroom/lexical/TextRenderer.svelte new file mode 100644 index 000000000..edb09b5b8 --- /dev/null +++ b/src/lib/components/newsroom/lexical/TextRenderer.svelte @@ -0,0 +1,12 @@ + + +{#each parts as part, i (i)}{#if i < parts.length - 1}
{/if}{/each} diff --git a/src/lib/components/newsroom/lexical/elements/Blockquote.svelte b/src/lib/components/newsroom/lexical/elements/Blockquote.svelte new file mode 100644 index 000000000..66896982b --- /dev/null +++ b/src/lib/components/newsroom/lexical/elements/Blockquote.svelte @@ -0,0 +1,10 @@ + + +
+ +
diff --git a/src/lib/components/newsroom/lexical/elements/Heading.svelte b/src/lib/components/newsroom/lexical/elements/Heading.svelte new file mode 100644 index 000000000..73b4ce2de --- /dev/null +++ b/src/lib/components/newsroom/lexical/elements/Heading.svelte @@ -0,0 +1,22 @@ + + + + + diff --git a/src/lib/components/newsroom/lexical/elements/Image.svelte b/src/lib/components/newsroom/lexical/elements/Image.svelte new file mode 100644 index 000000000..4e7032c70 --- /dev/null +++ b/src/lib/components/newsroom/lexical/elements/Image.svelte @@ -0,0 +1,20 @@ + + +
+ + {#if block.caption} +
{block.caption}
+ {/if} +
diff --git a/src/lib/components/newsroom/lexical/elements/Link.svelte b/src/lib/components/newsroom/lexical/elements/Link.svelte new file mode 100644 index 000000000..e28601ea1 --- /dev/null +++ b/src/lib/components/newsroom/lexical/elements/Link.svelte @@ -0,0 +1,15 @@ + + + + + + diff --git a/src/lib/components/newsroom/lexical/elements/List.svelte b/src/lib/components/newsroom/lexical/elements/List.svelte new file mode 100644 index 000000000..f5b78e181 --- /dev/null +++ b/src/lib/components/newsroom/lexical/elements/List.svelte @@ -0,0 +1,15 @@ + + + + + diff --git a/src/lib/components/newsroom/lexical/elements/ListItem.svelte b/src/lib/components/newsroom/lexical/elements/ListItem.svelte new file mode 100644 index 000000000..3cfecb7bd --- /dev/null +++ b/src/lib/components/newsroom/lexical/elements/ListItem.svelte @@ -0,0 +1,23 @@ + + +{#if isCheck} +
  • + + + + +
  • +{:else} +
  • + +
  • +{/if} diff --git a/src/lib/components/newsroom/lexical/elements/Paragraph.svelte b/src/lib/components/newsroom/lexical/elements/Paragraph.svelte new file mode 100644 index 000000000..362d382e8 --- /dev/null +++ b/src/lib/components/newsroom/lexical/elements/Paragraph.svelte @@ -0,0 +1,10 @@ + + +

    + +

    diff --git a/src/lib/components/newsroom/lexical/elements/Relationship.svelte b/src/lib/components/newsroom/lexical/elements/Relationship.svelte new file mode 100644 index 000000000..f6e4ab947 --- /dev/null +++ b/src/lib/components/newsroom/lexical/elements/Relationship.svelte @@ -0,0 +1,20 @@ + + +{#if user && name} + {#if user.mcUuid} + + {name} + {:else} + {name} + {/if} +{/if} diff --git a/src/lib/components/newsroom/lexical/elements/RichText.svelte b/src/lib/components/newsroom/lexical/elements/RichText.svelte new file mode 100644 index 000000000..841c121f0 --- /dev/null +++ b/src/lib/components/newsroom/lexical/elements/RichText.svelte @@ -0,0 +1,8 @@ + + + diff --git a/src/lib/components/newsroom/lexical/elements/Upload.svelte b/src/lib/components/newsroom/lexical/elements/Upload.svelte new file mode 100644 index 000000000..56be397e6 --- /dev/null +++ b/src/lib/components/newsroom/lexical/elements/Upload.svelte @@ -0,0 +1,18 @@ + + +{#if src} +
    + +
    +{/if} diff --git a/src/lib/components/newsroom/lexical/inline/Bold.svelte b/src/lib/components/newsroom/lexical/inline/Bold.svelte new file mode 100644 index 000000000..ed6017faf --- /dev/null +++ b/src/lib/components/newsroom/lexical/inline/Bold.svelte @@ -0,0 +1,7 @@ + + +{@render children()} diff --git a/src/lib/components/newsroom/lexical/inline/Code.svelte b/src/lib/components/newsroom/lexical/inline/Code.svelte new file mode 100644 index 000000000..c52492bea --- /dev/null +++ b/src/lib/components/newsroom/lexical/inline/Code.svelte @@ -0,0 +1,7 @@ + + +{@render children()} diff --git a/src/lib/components/newsroom/lexical/inline/Italic.svelte b/src/lib/components/newsroom/lexical/inline/Italic.svelte new file mode 100644 index 000000000..2ec264eb1 --- /dev/null +++ b/src/lib/components/newsroom/lexical/inline/Italic.svelte @@ -0,0 +1,7 @@ + + +{@render children()} diff --git a/src/lib/components/newsroom/lexical/inline/Strikethrough.svelte b/src/lib/components/newsroom/lexical/inline/Strikethrough.svelte new file mode 100644 index 000000000..2d3f10731 --- /dev/null +++ b/src/lib/components/newsroom/lexical/inline/Strikethrough.svelte @@ -0,0 +1,7 @@ + + +{@render children()} diff --git a/src/lib/components/newsroom/lexical/inline/Underline.svelte b/src/lib/components/newsroom/lexical/inline/Underline.svelte new file mode 100644 index 000000000..c68907aca --- /dev/null +++ b/src/lib/components/newsroom/lexical/inline/Underline.svelte @@ -0,0 +1,7 @@ + + +{@render children()} diff --git a/src/lib/components/newsroom/lexical/lexical.ts b/src/lib/components/newsroom/lexical/lexical.ts new file mode 100644 index 000000000..f0e74d405 --- /dev/null +++ b/src/lib/components/newsroom/lexical/lexical.ts @@ -0,0 +1,22 @@ +/** Lexical text-format bitfield flags. */ +export const FORMAT = { + BOLD: 1, + ITALIC: 2, + STRIKETHROUGH: 4, + UNDERLINE: 8, + CODE: 16 +} as const; + +export type Modifier = "bold" | "italic" | "underline" | "strikethrough" | "code"; + +/** Active text modifiers for a Lexical text node's `format` bitfield, outermost first. */ +export function getActiveModifiers(format: number | string | undefined): Modifier[] { + const bits = typeof format === "number" ? format : 0; + const mods: Modifier[] = []; + if (bits & FORMAT.BOLD) mods.push("bold"); + if (bits & FORMAT.ITALIC) mods.push("italic"); + if (bits & FORMAT.UNDERLINE) mods.push("underline"); + if (bits & FORMAT.STRIKETHROUGH) mods.push("strikethrough"); + if (bits & FORMAT.CODE) mods.push("code"); + return mods; +} diff --git a/src/lib/hooks/client-locale.svelte.ts b/src/lib/hooks/client-locale.svelte.ts new file mode 100644 index 000000000..16bd5a2b1 --- /dev/null +++ b/src/lib/hooks/client-locale.svelte.ts @@ -0,0 +1,32 @@ +import { createSubscriber } from "svelte/reactivity"; + +const FALLBACK_LOCALE = "en-US"; + +/** + * The browser's `navigator.language`, exposed reactively and SSR-safely. + * + * `navigator` doesn't exist (meaningfully) on the server, and reading it during + * the first client render would make the hydrated markup disagree with the + * server's — a hydration mismatch for anything locale-formatted (dates, numbers). + * + * `createSubscriber` solves both: its `start` callback only runs once `current` + * is read inside an effect, which never happens on the server and only happens + * *after* mount on the client. So SSR and the initial hydration render both see + * {@link FALLBACK_LOCALE}, then the value updates to the real locale once mounted. + * + * Safe as a module singleton: the state is only ever mutated client-side, so the + * server-side value is constant and can't leak between requests. + */ +class ClientLocale { + #current = $state(FALLBACK_LOCALE); + #subscribe = createSubscriber(() => { + this.#current = navigator.language || FALLBACK_LOCALE; + }); + + get current(): string { + this.#subscribe(); + return this.#current; + } +} + +export const clientLocale = new ClientLocale(); diff --git a/src/lib/shared/api/cms-api.remote.ts b/src/lib/shared/api/cms-api.remote.ts new file mode 100644 index 000000000..3477b0814 --- /dev/null +++ b/src/lib/shared/api/cms-api.remote.ts @@ -0,0 +1,51 @@ +import { query } from "$app/server"; +import { env as envPrivate } from "$env/dynamic/private"; +import { listPosts as listPostsRequest, type ListPostsParams } from "$lib/shared/api/cms-generated"; +import { POST_TYPES, type Post, type PostListResponse } from "$types"; +import { error } from "@sveltejs/kit"; +import z from "zod"; + +/** + * Payload REST filters with bracket-notation query params (`where[x][equals]=y`) and + * supports comma-separated multi-sort — neither of which orval's URL serializer can + * express through the typed `where`/`sort` params. We pass them as flat string keys + * instead; this bridges that plain record to the generated `ListPostsParams` shape. + */ +const asListParams = (params: Record): ListPostsParams => params as unknown as ListPostsParams; + +/** List published posts, paginated. Featured posts sort first. */ +export const listPosts = query( + z.object({ + page: z.number().int().min(1).default(1), + limit: z.number().int().min(1).max(50).default(20), + type: z.enum(POST_TYPES).optional() + }), + async ({ page, limit, type }) => { + const params: Record = { + page, + limit, + depth: 1, + sort: "-featured,-publishedAt", + "where[_status][equals]": "published" + }; + if (type) params["where[type][equals]"] = type; + + const { data } = await listPostsRequest(asListParams(params)); + return data as PostListResponse; + } +); + +/** Get a single published post by slug. */ +export const getPostBySlug = query(z.object({ slug: z.string() }), async ({ slug }) => { + const { data } = await listPostsRequest(asListParams({ limit: 1, depth: 2, "where[slug][equals]": slug, "where[_status][equals]": "published" })); + if (!data.docs.length) error(404, "Post not found"); + return data.docs[0] as Post; +}); + +/** Get a draft post by slug. Never cached. Uses CMS_API_TOKEN. */ +export const getPostBySlugDraft = query(z.object({ slug: z.string() }), async ({ slug }) => { + const token = envPrivate.CMS_API_TOKEN; + const { data } = await listPostsRequest(asListParams({ limit: 1, depth: 2, draft: true, "where[slug][equals]": slug }), token ? { headers: { Authorization: `users API-Key ${token}` } } : undefined); + if (!data.docs.length) error(404, "Post not found"); + return data.docs[0] as Post; +}); diff --git a/src/lib/shared/api/cms-generated.ts b/src/lib/shared/api/cms-generated.ts new file mode 100644 index 000000000..f863a5f3c --- /dev/null +++ b/src/lib/shared/api/cms-generated.ts @@ -0,0 +1,4158 @@ +/** + * Generated by orval v8.11.0 🍺 + * Do not edit manually. + * SkyCrypt Payload API + * API documentation for the Payload CMS application used by SkyCrypt. + * OpenAPI spec version: 1.0.0 + */ +import { cmsFetch } from "./mutator/cms-instance"; +export type SupportedTimezones = string; + +export type UserSessionsItem = { + id: string; + /** @nullable */ + createdAt?: string | null; + expiresAt: string; +}; + +export type UserCollection = (typeof UserCollection)[keyof typeof UserCollection]; + +export const UserCollection = { + users: "users" +} as const; + +export interface User { + id: string; + name: string; + /** + * Public-facing name shown on /newsroom (typically the Minecraft username). Falls back to `name` when empty. + * @nullable + */ + displayName?: string | null; + /** + * Optional. Drives the Minecraft head avatar on /newsroom. 32-hex with or without dashes. + * @nullable + */ + mcUuid?: string | null; + updatedAt: string; + createdAt: string; + /** @nullable */ + enableAPIKey?: boolean | null; + /** @nullable */ + apiKey?: string | null; + /** @nullable */ + apiKeyIndex?: string | null; + email: string; + /** @nullable */ + resetPasswordToken?: string | null; + /** @nullable */ + resetPasswordExpiration?: string | null; + /** @nullable */ + salt?: string | null; + /** @nullable */ + hash?: string | null; + /** @nullable */ + loginAttempts?: number | null; + /** @nullable */ + lockUntil?: string | null; + /** @nullable */ + sessions?: UserSessionsItem[] | null; + /** @nullable */ + password?: string | null; + collection: UserCollection; +} + +export type MediaSizesThumbnail = { + /** @nullable */ + url?: string | null; + /** @nullable */ + width?: number | null; + /** @nullable */ + height?: number | null; + /** @nullable */ + mimeType?: string | null; + /** @nullable */ + filesize?: number | null; + /** @nullable */ + filename?: string | null; +}; + +export type MediaSizesCard = { + /** @nullable */ + url?: string | null; + /** @nullable */ + width?: number | null; + /** @nullable */ + height?: number | null; + /** @nullable */ + mimeType?: string | null; + /** @nullable */ + filesize?: number | null; + /** @nullable */ + filename?: string | null; +}; + +export type MediaSizesHero = { + /** @nullable */ + url?: string | null; + /** @nullable */ + width?: number | null; + /** @nullable */ + height?: number | null; + /** @nullable */ + mimeType?: string | null; + /** @nullable */ + filesize?: number | null; + /** @nullable */ + filename?: string | null; +}; + +export type MediaSizes = { + thumbnail?: MediaSizesThumbnail; + card?: MediaSizesCard; + hero?: MediaSizesHero; +}; + +export interface Media { + id: string; + alt: string; + updatedAt: string; + createdAt: string; + /** @nullable */ + url?: string | null; + /** @nullable */ + thumbnailURL?: string | null; + /** @nullable */ + filename?: string | null; + /** @nullable */ + mimeType?: string | null; + /** @nullable */ + filesize?: number | null; + /** @nullable */ + width?: number | null; + /** @nullable */ + height?: number | null; + /** @nullable */ + focalX?: number | null; + /** @nullable */ + focalY?: number | null; + sizes?: MediaSizes; +} + +export type PostType = (typeof PostType)[keyof typeof PostType]; + +export const PostType = { + announcement: "announcement", + news: "news", + update: "update", + changelog: "changelog", + guide: "guide", + event: "event" +} as const; + +export type PostBodyItem = + | { + media: string | Media; + /** @nullable */ + caption?: string | null; + /** @nullable */ + alt?: string | null; + /** @nullable */ + id?: string | null; + /** @nullable */ + blockName?: string | null; + blockType: "image"; + } + | { + language: "ts" | "js" | "go" | "bash" | "json" | "sql" | "svelte"; + code: string; + /** @nullable */ + id?: string | null; + /** @nullable */ + blockName?: string | null; + blockType: "code"; + } + | { + variant: "info" | "warning" | "danger" | "success"; + /** @nullable */ + title?: string | null; + body: { + root: { + type: string; + children: { + type: string; + version: number; + [key: string]: unknown; + }[]; + direction: "ltr" | "rtl" | null; + format: "left" | "start" | "center" | "right" | "end" | "justify" | ""; + indent: number; + version: number; + }; + }; + /** @nullable */ + id?: string | null; + /** @nullable */ + blockName?: string | null; + blockType: "callout"; + } + | { + url: string; + provider: "youtube" | "twitter" | "discord" | "generic"; + /** @nullable */ + id?: string | null; + /** @nullable */ + blockName?: string | null; + blockType: "embed"; + } + | { + content: { + root: { + type: string; + children: { + type: string; + version: number; + [key: string]: unknown; + }[]; + direction: "ltr" | "rtl" | null; + format: "left" | "start" | "center" | "right" | "end" | "justify" | ""; + indent: number; + version: number; + }; + }; + /** @nullable */ + id?: string | null; + /** @nullable */ + blockName?: string | null; + blockType: "richText"; + }; + +/** + * @nullable + */ +export type _PostStatus = (typeof _PostStatus)[keyof typeof _PostStatus] | null; + +export const _PostStatus = { + draft: "draft", + published: "published" +} as const; + +export interface Post { + id: string; + title: string; + /** @nullable */ + slug?: string | null; + /** @nullable */ + excerpt?: string | null; + type: PostType; + /** + * Optional free-form tags. Press Enter after each. + * @nullable + */ + tags?: string[] | null; + /** + * Pin to top of /newsroom regardless of publishedAt. + * @nullable + */ + featured?: boolean | null; + heroImage?: string | null | Media; + /** @nullable */ + body?: PostBodyItem[] | null; + /** @nullable */ + publishedAt?: string | null; + author: string | User; + updatedAt: string; + createdAt: string; + /** @nullable */ + _status?: _PostStatus; +} + +/** + * @nullable + */ +export type PayloadKvData = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +export interface PayloadKv { + id: string; + key: string; + /** @nullable */ + data: PayloadKvData; +} + +/** + * Input data provided to the job + * @nullable + */ +export type PayloadJobInput = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +/** + * @nullable + */ +export type PayloadJobTaskStatus = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +/** + * If hasError is true, this is the error that caused it + * @nullable + */ +export type PayloadJobError = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +export type PayloadJobLogItemTaskSlug = (typeof PayloadJobLogItemTaskSlug)[keyof typeof PayloadJobLogItemTaskSlug]; + +export const PayloadJobLogItemTaskSlug = { + inline: "inline", + schedulePublish: "schedulePublish" +} as const; + +/** + * @nullable + */ +export type PayloadJobLogItemInput = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +/** + * @nullable + */ +export type PayloadJobLogItemOutput = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +export type PayloadJobLogItemState = (typeof PayloadJobLogItemState)[keyof typeof PayloadJobLogItemState]; + +export const PayloadJobLogItemState = { + failed: "failed", + succeeded: "succeeded" +} as const; + +/** + * @nullable + */ +export type PayloadJobLogItemError = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +export type PayloadJobLogItem = { + executedAt: string; + completedAt: string; + taskSlug: PayloadJobLogItemTaskSlug; + taskID: string; + /** @nullable */ + input?: PayloadJobLogItemInput; + /** @nullable */ + output?: PayloadJobLogItemOutput; + state: PayloadJobLogItemState; + /** @nullable */ + error?: PayloadJobLogItemError; + /** @nullable */ + id?: string | null; +}; + +/** + * @nullable + */ +export type PayloadJobTaskSlug = (typeof PayloadJobTaskSlug)[keyof typeof PayloadJobTaskSlug] | null; + +export const PayloadJobTaskSlug = { + inline: "inline", + schedulePublish: "schedulePublish" +} as const; + +export interface PayloadJob { + id: string; + /** + * Input data provided to the job + * @nullable + */ + input?: PayloadJobInput; + /** @nullable */ + taskStatus?: PayloadJobTaskStatus; + /** @nullable */ + completedAt?: string | null; + /** @nullable */ + totalTried?: number | null; + /** + * If hasError is true this job will not be retried + * @nullable + */ + hasError?: boolean | null; + /** + * If hasError is true, this is the error that caused it + * @nullable + */ + error?: PayloadJobError; + /** + * Task execution log + * @nullable + */ + log?: PayloadJobLogItem[] | null; + /** @nullable */ + taskSlug?: PayloadJobTaskSlug; + /** @nullable */ + queue?: string | null; + /** @nullable */ + waitUntil?: string | null; + /** @nullable */ + processing?: boolean | null; + updatedAt: string; + createdAt: string; +} + +export type PayloadLockedDocumentDocument = + | { + relationTo: "users"; + value: string | User; + } + | null + | { + relationTo: "media"; + value: string | Media; + } + | { + relationTo: "posts"; + value: string | Post; + }; + +export type PayloadLockedDocumentUser = { + relationTo: "users"; + value: string | User; +}; + +export interface PayloadLockedDocument { + id: string; + document?: PayloadLockedDocumentDocument; + /** @nullable */ + globalSlug?: string | null; + user: PayloadLockedDocumentUser; + updatedAt: string; + createdAt: string; +} + +export type PayloadPreferenceUser = { + relationTo: "users"; + value: string | User; +}; + +/** + * @nullable + */ +export type PayloadPreferenceValue = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +export interface PayloadPreference { + id: string; + user: PayloadPreferenceUser; + /** @nullable */ + key?: string | null; + /** @nullable */ + value?: PayloadPreferenceValue; + updatedAt: string; + createdAt: string; +} + +export interface PayloadMigration { + id: string; + /** @nullable */ + name?: string | null; + /** @nullable */ + batch?: number | null; + updatedAt: string; + createdAt: string; +} + +export type UserQueryOperationsName = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type UserQueryOperationsDisplayName = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type UserQueryOperationsMcUuid = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type UserQueryOperationsUpdatedAt = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + greater_than?: string; + greater_than_equal?: string; + less_than?: string; + less_than_equal?: string; +}; + +export type UserQueryOperationsCreatedAt = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + greater_than?: string; + greater_than_equal?: string; + less_than?: string; + less_than_equal?: string; +}; + +export type UserQueryOperationsEnableAPIKey = { + equals?: boolean; + not_equals?: boolean; + in?: string; + not_in?: string; +}; + +export type UserQueryOperationsApiKey = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type UserQueryOperationsApiKeyIndex = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type UserQueryOperationsEmail = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + contains?: string; +}; + +export type UserQueryOperationsResetPasswordToken = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type UserQueryOperationsResetPasswordExpiration = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + greater_than?: string; + greater_than_equal?: string; + less_than?: string; + less_than_equal?: string; +}; + +export type UserQueryOperationsSalt = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type UserQueryOperationsHash = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type UserQueryOperationsLoginAttempts = { + equals?: number; + not_equals?: number; + in?: string; + not_in?: string; + greater_than?: number; + greater_than_equal?: number; + less_than?: number; + less_than_equal?: number; +}; + +export type UserQueryOperationsLockUntil = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + greater_than?: string; + greater_than_equal?: string; + less_than?: string; + less_than_equal?: string; +}; + +export interface UserQueryOperations { + name?: UserQueryOperationsName; + displayName?: UserQueryOperationsDisplayName; + mcUuid?: UserQueryOperationsMcUuid; + updatedAt?: UserQueryOperationsUpdatedAt; + createdAt?: UserQueryOperationsCreatedAt; + enableAPIKey?: UserQueryOperationsEnableAPIKey; + apiKey?: UserQueryOperationsApiKey; + apiKeyIndex?: UserQueryOperationsApiKeyIndex; + email?: UserQueryOperationsEmail; + resetPasswordToken?: UserQueryOperationsResetPasswordToken; + resetPasswordExpiration?: UserQueryOperationsResetPasswordExpiration; + salt?: UserQueryOperationsSalt; + hash?: UserQueryOperationsHash; + loginAttempts?: UserQueryOperationsLoginAttempts; + lockUntil?: UserQueryOperationsLockUntil; +} + +export interface UserQueryOperationsOr { + or: (UserQueryOperations | UserQueryOperationsAnd | UserQueryOperationsOr)[]; +} + +export interface UserQueryOperationsAnd { + and: (UserQueryOperations | UserQueryOperationsAnd | UserQueryOperationsOr)[]; +} + +export type MediaQueryOperationsAlt = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type MediaQueryOperationsUpdatedAt = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + greater_than?: string; + greater_than_equal?: string; + less_than?: string; + less_than_equal?: string; +}; + +export type MediaQueryOperationsCreatedAt = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + greater_than?: string; + greater_than_equal?: string; + less_than?: string; + less_than_equal?: string; +}; + +export type MediaQueryOperationsUrl = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type MediaQueryOperationsThumbnailURL = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type MediaQueryOperationsFilename = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type MediaQueryOperationsMimeType = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type MediaQueryOperationsFilesize = { + equals?: number; + not_equals?: number; + in?: string; + not_in?: string; + greater_than?: number; + greater_than_equal?: number; + less_than?: number; + less_than_equal?: number; +}; + +export type MediaQueryOperationsWidth = { + equals?: number; + not_equals?: number; + in?: string; + not_in?: string; + greater_than?: number; + greater_than_equal?: number; + less_than?: number; + less_than_equal?: number; +}; + +export type MediaQueryOperationsHeight = { + equals?: number; + not_equals?: number; + in?: string; + not_in?: string; + greater_than?: number; + greater_than_equal?: number; + less_than?: number; + less_than_equal?: number; +}; + +export type MediaQueryOperationsFocalX = { + equals?: number; + not_equals?: number; + in?: string; + not_in?: string; + greater_than?: number; + greater_than_equal?: number; + less_than?: number; + less_than_equal?: number; +}; + +export type MediaQueryOperationsFocalY = { + equals?: number; + not_equals?: number; + in?: string; + not_in?: string; + greater_than?: number; + greater_than_equal?: number; + less_than?: number; + less_than_equal?: number; +}; + +export interface MediaQueryOperations { + alt?: MediaQueryOperationsAlt; + updatedAt?: MediaQueryOperationsUpdatedAt; + createdAt?: MediaQueryOperationsCreatedAt; + url?: MediaQueryOperationsUrl; + thumbnailURL?: MediaQueryOperationsThumbnailURL; + filename?: MediaQueryOperationsFilename; + mimeType?: MediaQueryOperationsMimeType; + filesize?: MediaQueryOperationsFilesize; + width?: MediaQueryOperationsWidth; + height?: MediaQueryOperationsHeight; + focalX?: MediaQueryOperationsFocalX; + focalY?: MediaQueryOperationsFocalY; +} + +export interface MediaQueryOperationsOr { + or: (MediaQueryOperations | MediaQueryOperationsAnd | MediaQueryOperationsOr)[]; +} + +export interface MediaQueryOperationsAnd { + and: (MediaQueryOperations | MediaQueryOperationsAnd | MediaQueryOperationsOr)[]; +} + +export type PostQueryOperationsTitle = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type PostQueryOperationsSlug = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type PostQueryOperationsTypeEquals = (typeof PostQueryOperationsTypeEquals)[keyof typeof PostQueryOperationsTypeEquals]; + +export const PostQueryOperationsTypeEquals = { + announcement: "announcement", + news: "news", + update: "update", + changelog: "changelog", + guide: "guide", + event: "event" +} as const; + +export type PostQueryOperationsTypeNotEquals = (typeof PostQueryOperationsTypeNotEquals)[keyof typeof PostQueryOperationsTypeNotEquals]; + +export const PostQueryOperationsTypeNotEquals = { + announcement: "announcement", + news: "news", + update: "update", + changelog: "changelog", + guide: "guide", + event: "event" +} as const; + +export type PostQueryOperationsType = { + equals?: PostQueryOperationsTypeEquals; + not_equals?: PostQueryOperationsTypeNotEquals; + in?: string; + not_in?: string; +}; + +export type PostQueryOperationsTags = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type PostQueryOperationsFeatured = { + equals?: boolean; + not_equals?: boolean; + in?: string; + not_in?: string; +}; + +export type PostQueryOperationsPublishedAt = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + greater_than?: string; + greater_than_equal?: string; + less_than?: string; + less_than_equal?: string; +}; + +export type PostQueryOperationsUpdatedAt = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + greater_than?: string; + greater_than_equal?: string; + less_than?: string; + less_than_equal?: string; +}; + +export type PostQueryOperationsCreatedAt = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + greater_than?: string; + greater_than_equal?: string; + less_than?: string; + less_than_equal?: string; +}; + +export type _PostQueryOperationsStatusEquals = (typeof _PostQueryOperationsStatusEquals)[keyof typeof _PostQueryOperationsStatusEquals]; + +export const _PostQueryOperationsStatusEquals = { + draft: "draft", + published: "published" +} as const; + +export type _PostQueryOperationsStatusNotEquals = (typeof _PostQueryOperationsStatusNotEquals)[keyof typeof _PostQueryOperationsStatusNotEquals]; + +export const _PostQueryOperationsStatusNotEquals = { + draft: "draft", + published: "published" +} as const; + +export type _PostQueryOperationsStatus = { + equals?: _PostQueryOperationsStatusEquals; + not_equals?: _PostQueryOperationsStatusNotEquals; + in?: string; + not_in?: string; +}; + +export interface PostQueryOperations { + title?: PostQueryOperationsTitle; + slug?: PostQueryOperationsSlug; + type?: PostQueryOperationsType; + tags?: PostQueryOperationsTags; + featured?: PostQueryOperationsFeatured; + publishedAt?: PostQueryOperationsPublishedAt; + updatedAt?: PostQueryOperationsUpdatedAt; + createdAt?: PostQueryOperationsCreatedAt; + _status?: _PostQueryOperationsStatus; +} + +export interface PostQueryOperationsOr { + or: (PostQueryOperations | PostQueryOperationsAnd | PostQueryOperationsOr)[]; +} + +export interface PostQueryOperationsAnd { + and: (PostQueryOperations | PostQueryOperationsAnd | PostQueryOperationsOr)[]; +} + +export type PayloadKvQueryOperationsKey = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export interface PayloadKvQueryOperations { + key?: PayloadKvQueryOperationsKey; +} + +export interface PayloadKvQueryOperationsOr { + or: (PayloadKvQueryOperations | PayloadKvQueryOperationsAnd | PayloadKvQueryOperationsOr)[]; +} + +export interface PayloadKvQueryOperationsAnd { + and: (PayloadKvQueryOperations | PayloadKvQueryOperationsAnd | PayloadKvQueryOperationsOr)[]; +} + +export type PayloadJobQueryOperationsTaskSlugEquals = (typeof PayloadJobQueryOperationsTaskSlugEquals)[keyof typeof PayloadJobQueryOperationsTaskSlugEquals]; + +export const PayloadJobQueryOperationsTaskSlugEquals = { + inline: "inline", + schedulePublish: "schedulePublish" +} as const; + +export type PayloadJobQueryOperationsTaskSlugNotEquals = (typeof PayloadJobQueryOperationsTaskSlugNotEquals)[keyof typeof PayloadJobQueryOperationsTaskSlugNotEquals]; + +export const PayloadJobQueryOperationsTaskSlugNotEquals = { + inline: "inline", + schedulePublish: "schedulePublish" +} as const; + +export type PayloadJobQueryOperationsTaskSlug = { + equals?: PayloadJobQueryOperationsTaskSlugEquals; + not_equals?: PayloadJobQueryOperationsTaskSlugNotEquals; + in?: string; + not_in?: string; +}; + +export type PayloadJobQueryOperationsQueue = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type PayloadJobQueryOperationsWaitUntil = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + greater_than?: string; + greater_than_equal?: string; + less_than?: string; + less_than_equal?: string; +}; + +export type PayloadJobQueryOperationsProcessing = { + equals?: boolean; + not_equals?: boolean; + in?: string; + not_in?: string; +}; + +export type PayloadJobQueryOperationsUpdatedAt = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + greater_than?: string; + greater_than_equal?: string; + less_than?: string; + less_than_equal?: string; +}; + +export type PayloadJobQueryOperationsCreatedAt = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + greater_than?: string; + greater_than_equal?: string; + less_than?: string; + less_than_equal?: string; +}; + +export interface PayloadJobQueryOperations { + taskSlug?: PayloadJobQueryOperationsTaskSlug; + queue?: PayloadJobQueryOperationsQueue; + waitUntil?: PayloadJobQueryOperationsWaitUntil; + processing?: PayloadJobQueryOperationsProcessing; + updatedAt?: PayloadJobQueryOperationsUpdatedAt; + createdAt?: PayloadJobQueryOperationsCreatedAt; +} + +export interface PayloadJobQueryOperationsOr { + or: (PayloadJobQueryOperations | PayloadJobQueryOperationsAnd | PayloadJobQueryOperationsOr)[]; +} + +export interface PayloadJobQueryOperationsAnd { + and: (PayloadJobQueryOperations | PayloadJobQueryOperationsAnd | PayloadJobQueryOperationsOr)[]; +} + +export type PayloadLockedDocumentQueryOperationsGlobalSlug = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type PayloadLockedDocumentQueryOperationsUpdatedAt = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + greater_than?: string; + greater_than_equal?: string; + less_than?: string; + less_than_equal?: string; +}; + +export type PayloadLockedDocumentQueryOperationsCreatedAt = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + greater_than?: string; + greater_than_equal?: string; + less_than?: string; + less_than_equal?: string; +}; + +export interface PayloadLockedDocumentQueryOperations { + globalSlug?: PayloadLockedDocumentQueryOperationsGlobalSlug; + updatedAt?: PayloadLockedDocumentQueryOperationsUpdatedAt; + createdAt?: PayloadLockedDocumentQueryOperationsCreatedAt; +} + +export interface PayloadLockedDocumentQueryOperationsOr { + or: (PayloadLockedDocumentQueryOperations | PayloadLockedDocumentQueryOperationsAnd | PayloadLockedDocumentQueryOperationsOr)[]; +} + +export interface PayloadLockedDocumentQueryOperationsAnd { + and: (PayloadLockedDocumentQueryOperations | PayloadLockedDocumentQueryOperationsAnd | PayloadLockedDocumentQueryOperationsOr)[]; +} + +export type PayloadPreferenceQueryOperationsKey = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type PayloadPreferenceQueryOperationsUpdatedAt = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + greater_than?: string; + greater_than_equal?: string; + less_than?: string; + less_than_equal?: string; +}; + +export type PayloadPreferenceQueryOperationsCreatedAt = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + greater_than?: string; + greater_than_equal?: string; + less_than?: string; + less_than_equal?: string; +}; + +export interface PayloadPreferenceQueryOperations { + key?: PayloadPreferenceQueryOperationsKey; + updatedAt?: PayloadPreferenceQueryOperationsUpdatedAt; + createdAt?: PayloadPreferenceQueryOperationsCreatedAt; +} + +export interface PayloadPreferenceQueryOperationsOr { + or: (PayloadPreferenceQueryOperations | PayloadPreferenceQueryOperationsAnd | PayloadPreferenceQueryOperationsOr)[]; +} + +export interface PayloadPreferenceQueryOperationsAnd { + and: (PayloadPreferenceQueryOperations | PayloadPreferenceQueryOperationsAnd | PayloadPreferenceQueryOperationsOr)[]; +} + +export type PayloadMigrationQueryOperationsName = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + like?: string; + contains?: string; +}; + +export type PayloadMigrationQueryOperationsBatch = { + equals?: number; + not_equals?: number; + in?: string; + not_in?: string; + greater_than?: number; + greater_than_equal?: number; + less_than?: number; + less_than_equal?: number; +}; + +export type PayloadMigrationQueryOperationsUpdatedAt = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + greater_than?: string; + greater_than_equal?: string; + less_than?: string; + less_than_equal?: string; +}; + +export type PayloadMigrationQueryOperationsCreatedAt = { + equals?: string; + not_equals?: string; + in?: string; + not_in?: string; + greater_than?: string; + greater_than_equal?: string; + less_than?: string; + less_than_equal?: string; +}; + +export interface PayloadMigrationQueryOperations { + name?: PayloadMigrationQueryOperationsName; + batch?: PayloadMigrationQueryOperationsBatch; + updatedAt?: PayloadMigrationQueryOperationsUpdatedAt; + createdAt?: PayloadMigrationQueryOperationsCreatedAt; +} + +export interface PayloadMigrationQueryOperationsOr { + or: (PayloadMigrationQueryOperations | PayloadMigrationQueryOperationsAnd | PayloadMigrationQueryOperationsOr)[]; +} + +export interface PayloadMigrationQueryOperationsAnd { + and: (PayloadMigrationQueryOperations | PayloadMigrationQueryOperationsAnd | PayloadMigrationQueryOperationsOr)[]; +} + +/** + * User object + */ +export type UserResponseResponse = User; + +export type NewUserResponseResponseDoc = User & { + id: string; + createdAt: string; + updatedAt: string; +}; + +export type NewUserResponseResponse = { + message: string; + doc: NewUserResponseResponseDoc; +}; + +/** + * User not found + */ +export type UserNotFoundResponseResponse = void; + +export type UserListResponseResponse = { + docs: User[]; + totalDocs: number; + limit: number; + totalPages: number; + page: number; + pagingCounter: number; + hasPrevPage: boolean; + hasNextPage: boolean; + /** @nullable */ + prevPage: number | null; + /** @nullable */ + nextPage: number | null; +}; + +/** + * Media object + */ +export type MediaResponseResponse = Media; + +export type NewMediaResponseResponseDoc = Media & { + id: string; + createdAt: string; + updatedAt: string; +}; + +export type NewMediaResponseResponse = { + message: string; + doc: NewMediaResponseResponseDoc; +}; + +/** + * Media not found + */ +export type MediaNotFoundResponseResponse = void; + +export type MediaListResponseResponse = { + docs: Media[]; + totalDocs: number; + limit: number; + totalPages: number; + page: number; + pagingCounter: number; + hasPrevPage: boolean; + hasNextPage: boolean; + /** @nullable */ + prevPage: number | null; + /** @nullable */ + nextPage: number | null; +}; + +/** + * Post object + */ +export type PostResponseResponse = Post; + +export type NewPostResponseResponseDoc = Post & { + id: string; + createdAt: string; + updatedAt: string; +}; + +export type NewPostResponseResponse = { + message: string; + doc: NewPostResponseResponseDoc; +}; + +/** + * Post not found + */ +export type PostNotFoundResponseResponse = void; + +export type PostListResponseResponse = { + docs: Post[]; + totalDocs: number; + limit: number; + totalPages: number; + page: number; + pagingCounter: number; + hasPrevPage: boolean; + hasNextPage: boolean; + /** @nullable */ + prevPage: number | null; + /** @nullable */ + nextPage: number | null; +}; + +/** + * Payload Kv object + */ +export type PayloadKvResponseResponse = PayloadKv; + +export type NewPayloadKvResponseResponseDoc = PayloadKv & { + id: string; + createdAt: string; + updatedAt: string; +}; + +export type NewPayloadKvResponseResponse = { + message: string; + doc: NewPayloadKvResponseResponseDoc; +}; + +/** + * Payload Kv not found + */ +export type PayloadKvNotFoundResponseResponse = void; + +export type PayloadKvListResponseResponse = { + docs: PayloadKv[]; + totalDocs: number; + limit: number; + totalPages: number; + page: number; + pagingCounter: number; + hasPrevPage: boolean; + hasNextPage: boolean; + /** @nullable */ + prevPage: number | null; + /** @nullable */ + nextPage: number | null; +}; + +/** + * Payload Job object + */ +export type PayloadJobResponseResponse = PayloadJob; + +export type NewPayloadJobResponseResponseDoc = PayloadJob & { + id: string; + createdAt: string; + updatedAt: string; +}; + +export type NewPayloadJobResponseResponse = { + message: string; + doc: NewPayloadJobResponseResponseDoc; +}; + +/** + * Payload Job not found + */ +export type PayloadJobNotFoundResponseResponse = void; + +export type PayloadJobListResponseResponse = { + docs: PayloadJob[]; + totalDocs: number; + limit: number; + totalPages: number; + page: number; + pagingCounter: number; + hasPrevPage: boolean; + hasNextPage: boolean; + /** @nullable */ + prevPage: number | null; + /** @nullable */ + nextPage: number | null; +}; + +/** + * Payload Locked Document object + */ +export type PayloadLockedDocumentResponseResponse = PayloadLockedDocument; + +export type NewPayloadLockedDocumentResponseResponseDoc = PayloadLockedDocument & { + id: string; + createdAt: string; + updatedAt: string; +}; + +export type NewPayloadLockedDocumentResponseResponse = { + message: string; + doc: NewPayloadLockedDocumentResponseResponseDoc; +}; + +/** + * Payload Locked Document not found + */ +export type PayloadLockedDocumentNotFoundResponseResponse = void; + +export type PayloadLockedDocumentListResponseResponse = { + docs: PayloadLockedDocument[]; + totalDocs: number; + limit: number; + totalPages: number; + page: number; + pagingCounter: number; + hasPrevPage: boolean; + hasNextPage: boolean; + /** @nullable */ + prevPage: number | null; + /** @nullable */ + nextPage: number | null; +}; + +/** + * Payload Preference object + */ +export type PayloadPreferenceResponseResponse = PayloadPreference; + +export type NewPayloadPreferenceResponseResponseDoc = PayloadPreference & { + id: string; + createdAt: string; + updatedAt: string; +}; + +export type NewPayloadPreferenceResponseResponse = { + message: string; + doc: NewPayloadPreferenceResponseResponseDoc; +}; + +/** + * Payload Preference not found + */ +export type PayloadPreferenceNotFoundResponseResponse = void; + +export type PayloadPreferenceListResponseResponse = { + docs: PayloadPreference[]; + totalDocs: number; + limit: number; + totalPages: number; + page: number; + pagingCounter: number; + hasPrevPage: boolean; + hasNextPage: boolean; + /** @nullable */ + prevPage: number | null; + /** @nullable */ + nextPage: number | null; +}; + +/** + * Payload Migration object + */ +export type PayloadMigrationResponseResponse = PayloadMigration; + +export type NewPayloadMigrationResponseResponseDoc = PayloadMigration & { + id: string; + createdAt: string; + updatedAt: string; +}; + +export type NewPayloadMigrationResponseResponse = { + message: string; + doc: NewPayloadMigrationResponseResponseDoc; +}; + +/** + * Payload Migration not found + */ +export type PayloadMigrationNotFoundResponseResponse = void; + +export type PayloadMigrationListResponseResponse = { + docs: PayloadMigration[]; + totalDocs: number; + limit: number; + totalPages: number; + page: number; + pagingCounter: number; + hasPrevPage: boolean; + hasNextPage: boolean; + /** @nullable */ + prevPage: number | null; + /** @nullable */ + nextPage: number | null; +}; + +export type UserRequestBodyBodySessionsItem = { + id: string; + /** @nullable */ + createdAt?: string | null; + expiresAt: string; +}; + +export type UserRequestBodyBodyCollection = (typeof UserRequestBodyBodyCollection)[keyof typeof UserRequestBodyBodyCollection]; + +export const UserRequestBodyBodyCollection = { + users: "users" +} as const; + +export type UserRequestBodyBody = { + name: string; + /** + * Public-facing name shown on /newsroom (typically the Minecraft username). Falls back to `name` when empty. + * @nullable + */ + displayName?: string | null; + /** + * Optional. Drives the Minecraft head avatar on /newsroom. 32-hex with or without dashes. + * @nullable + */ + mcUuid?: string | null; + /** @nullable */ + enableAPIKey?: boolean | null; + /** @nullable */ + apiKey?: string | null; + /** @nullable */ + apiKeyIndex?: string | null; + email: string; + /** @nullable */ + resetPasswordToken?: string | null; + /** @nullable */ + resetPasswordExpiration?: string | null; + /** @nullable */ + salt?: string | null; + /** @nullable */ + hash?: string | null; + /** @nullable */ + loginAttempts?: number | null; + /** @nullable */ + lockUntil?: string | null; + /** @nullable */ + sessions?: UserRequestBodyBodySessionsItem[] | null; + /** @nullable */ + password?: string | null; + collection: UserRequestBodyBodyCollection; +}; + +export type UserPatchRequestBodyBodySessionsItem = { + id: string; + /** @nullable */ + createdAt?: string | null; + expiresAt: string; +}; + +export type UserPatchRequestBodyBodyCollection = (typeof UserPatchRequestBodyBodyCollection)[keyof typeof UserPatchRequestBodyBodyCollection]; + +export const UserPatchRequestBodyBodyCollection = { + users: "users" +} as const; + +export type UserPatchRequestBodyBody = { + name?: string; + /** + * Public-facing name shown on /newsroom (typically the Minecraft username). Falls back to `name` when empty. + * @nullable + */ + displayName?: string | null; + /** + * Optional. Drives the Minecraft head avatar on /newsroom. 32-hex with or without dashes. + * @nullable + */ + mcUuid?: string | null; + /** @nullable */ + enableAPIKey?: boolean | null; + /** @nullable */ + apiKey?: string | null; + /** @nullable */ + apiKeyIndex?: string | null; + email?: string; + /** @nullable */ + resetPasswordToken?: string | null; + /** @nullable */ + resetPasswordExpiration?: string | null; + /** @nullable */ + salt?: string | null; + /** @nullable */ + hash?: string | null; + /** @nullable */ + loginAttempts?: number | null; + /** @nullable */ + lockUntil?: string | null; + /** @nullable */ + sessions?: UserPatchRequestBodyBodySessionsItem[] | null; + /** @nullable */ + password?: string | null; + collection?: UserPatchRequestBodyBodyCollection; +}; + +export type MediaRequestBodyBodySizesThumbnail = { + /** @nullable */ + url?: string | null; + /** @nullable */ + width?: number | null; + /** @nullable */ + height?: number | null; + /** @nullable */ + mimeType?: string | null; + /** @nullable */ + filesize?: number | null; + /** @nullable */ + filename?: string | null; +}; + +export type MediaRequestBodyBodySizesCard = { + /** @nullable */ + url?: string | null; + /** @nullable */ + width?: number | null; + /** @nullable */ + height?: number | null; + /** @nullable */ + mimeType?: string | null; + /** @nullable */ + filesize?: number | null; + /** @nullable */ + filename?: string | null; +}; + +export type MediaRequestBodyBodySizesHero = { + /** @nullable */ + url?: string | null; + /** @nullable */ + width?: number | null; + /** @nullable */ + height?: number | null; + /** @nullable */ + mimeType?: string | null; + /** @nullable */ + filesize?: number | null; + /** @nullable */ + filename?: string | null; +}; + +export type MediaRequestBodyBodySizes = { + thumbnail?: MediaRequestBodyBodySizesThumbnail; + card?: MediaRequestBodyBodySizesCard; + hero?: MediaRequestBodyBodySizesHero; +}; + +export type MediaRequestBodyBody = { + alt: string; + /** @nullable */ + url?: string | null; + /** @nullable */ + thumbnailURL?: string | null; + /** @nullable */ + filename?: string | null; + /** @nullable */ + mimeType?: string | null; + /** @nullable */ + filesize?: number | null; + /** @nullable */ + width?: number | null; + /** @nullable */ + height?: number | null; + /** @nullable */ + focalX?: number | null; + /** @nullable */ + focalY?: number | null; + sizes?: MediaRequestBodyBodySizes; +}; + +export type MediaPatchRequestBodyBodySizesThumbnail = { + /** @nullable */ + url?: string | null; + /** @nullable */ + width?: number | null; + /** @nullable */ + height?: number | null; + /** @nullable */ + mimeType?: string | null; + /** @nullable */ + filesize?: number | null; + /** @nullable */ + filename?: string | null; +}; + +export type MediaPatchRequestBodyBodySizesCard = { + /** @nullable */ + url?: string | null; + /** @nullable */ + width?: number | null; + /** @nullable */ + height?: number | null; + /** @nullable */ + mimeType?: string | null; + /** @nullable */ + filesize?: number | null; + /** @nullable */ + filename?: string | null; +}; + +export type MediaPatchRequestBodyBodySizesHero = { + /** @nullable */ + url?: string | null; + /** @nullable */ + width?: number | null; + /** @nullable */ + height?: number | null; + /** @nullable */ + mimeType?: string | null; + /** @nullable */ + filesize?: number | null; + /** @nullable */ + filename?: string | null; +}; + +export type MediaPatchRequestBodyBodySizes = { + thumbnail?: MediaPatchRequestBodyBodySizesThumbnail; + card?: MediaPatchRequestBodyBodySizesCard; + hero?: MediaPatchRequestBodyBodySizesHero; +}; + +export type MediaPatchRequestBodyBody = { + alt?: string; + /** @nullable */ + url?: string | null; + /** @nullable */ + thumbnailURL?: string | null; + /** @nullable */ + filename?: string | null; + /** @nullable */ + mimeType?: string | null; + /** @nullable */ + filesize?: number | null; + /** @nullable */ + width?: number | null; + /** @nullable */ + height?: number | null; + /** @nullable */ + focalX?: number | null; + /** @nullable */ + focalY?: number | null; + sizes?: MediaPatchRequestBodyBodySizes; +}; + +export type PostRequestBodyBodyType = (typeof PostRequestBodyBodyType)[keyof typeof PostRequestBodyBodyType]; + +export const PostRequestBodyBodyType = { + announcement: "announcement", + news: "news", + update: "update", + changelog: "changelog", + guide: "guide", + event: "event" +} as const; + +export type PostRequestBodyBodyBodyItem = + | { + media: string | Media; + /** @nullable */ + caption?: string | null; + /** @nullable */ + alt?: string | null; + /** @nullable */ + id?: string | null; + /** @nullable */ + blockName?: string | null; + blockType: "image"; + } + | { + language: "ts" | "js" | "go" | "bash" | "json" | "sql" | "svelte"; + code: string; + /** @nullable */ + id?: string | null; + /** @nullable */ + blockName?: string | null; + blockType: "code"; + } + | { + variant: "info" | "warning" | "danger" | "success"; + /** @nullable */ + title?: string | null; + body: { + root: { + type: string; + children: { + type: string; + version: number; + [key: string]: unknown; + }[]; + direction: "ltr" | "rtl" | null; + format: "left" | "start" | "center" | "right" | "end" | "justify" | ""; + indent: number; + version: number; + }; + }; + /** @nullable */ + id?: string | null; + /** @nullable */ + blockName?: string | null; + blockType: "callout"; + } + | { + url: string; + provider: "youtube" | "twitter" | "discord" | "generic"; + /** @nullable */ + id?: string | null; + /** @nullable */ + blockName?: string | null; + blockType: "embed"; + } + | { + content: { + root: { + type: string; + children: { + type: string; + version: number; + [key: string]: unknown; + }[]; + direction: "ltr" | "rtl" | null; + format: "left" | "start" | "center" | "right" | "end" | "justify" | ""; + indent: number; + version: number; + }; + }; + /** @nullable */ + id?: string | null; + /** @nullable */ + blockName?: string | null; + blockType: "richText"; + }; + +/** + * @nullable + */ +export type _PostRequestBodyBodyStatus = (typeof _PostRequestBodyBodyStatus)[keyof typeof _PostRequestBodyBodyStatus] | null; + +export const _PostRequestBodyBodyStatus = { + draft: "draft", + published: "published" +} as const; + +export type PostRequestBodyBody = { + title: string; + /** @nullable */ + slug?: string | null; + /** @nullable */ + excerpt?: string | null; + type: PostRequestBodyBodyType; + /** + * Optional free-form tags. Press Enter after each. + * @nullable + */ + tags?: string[] | null; + /** + * Pin to top of /newsroom regardless of publishedAt. + * @nullable + */ + featured?: boolean | null; + heroImage?: string | null | Media; + /** @nullable */ + body?: PostRequestBodyBodyBodyItem[] | null; + /** @nullable */ + publishedAt?: string | null; + /** ID of the users */ + author: string; + /** @nullable */ + _status?: _PostRequestBodyBodyStatus; +}; + +export type PostPatchRequestBodyBodyType = (typeof PostPatchRequestBodyBodyType)[keyof typeof PostPatchRequestBodyBodyType]; + +export const PostPatchRequestBodyBodyType = { + announcement: "announcement", + news: "news", + update: "update", + changelog: "changelog", + guide: "guide", + event: "event" +} as const; + +export type PostPatchRequestBodyBodyBodyItem = + | { + media: string | Media; + /** @nullable */ + caption?: string | null; + /** @nullable */ + alt?: string | null; + /** @nullable */ + id?: string | null; + /** @nullable */ + blockName?: string | null; + blockType: "image"; + } + | { + language: "ts" | "js" | "go" | "bash" | "json" | "sql" | "svelte"; + code: string; + /** @nullable */ + id?: string | null; + /** @nullable */ + blockName?: string | null; + blockType: "code"; + } + | { + variant: "info" | "warning" | "danger" | "success"; + /** @nullable */ + title?: string | null; + body: { + root: { + type: string; + children: { + type: string; + version: number; + [key: string]: unknown; + }[]; + direction: "ltr" | "rtl" | null; + format: "left" | "start" | "center" | "right" | "end" | "justify" | ""; + indent: number; + version: number; + }; + }; + /** @nullable */ + id?: string | null; + /** @nullable */ + blockName?: string | null; + blockType: "callout"; + } + | { + url: string; + provider: "youtube" | "twitter" | "discord" | "generic"; + /** @nullable */ + id?: string | null; + /** @nullable */ + blockName?: string | null; + blockType: "embed"; + } + | { + content: { + root: { + type: string; + children: { + type: string; + version: number; + [key: string]: unknown; + }[]; + direction: "ltr" | "rtl" | null; + format: "left" | "start" | "center" | "right" | "end" | "justify" | ""; + indent: number; + version: number; + }; + }; + /** @nullable */ + id?: string | null; + /** @nullable */ + blockName?: string | null; + blockType: "richText"; + }; + +/** + * @nullable + */ +export type _PostPatchRequestBodyBodyStatus = (typeof _PostPatchRequestBodyBodyStatus)[keyof typeof _PostPatchRequestBodyBodyStatus] | null; + +export const _PostPatchRequestBodyBodyStatus = { + draft: "draft", + published: "published" +} as const; + +export type PostPatchRequestBodyBody = { + title?: string; + /** @nullable */ + slug?: string | null; + /** @nullable */ + excerpt?: string | null; + type?: PostPatchRequestBodyBodyType; + /** + * Optional free-form tags. Press Enter after each. + * @nullable + */ + tags?: string[] | null; + /** + * Pin to top of /newsroom regardless of publishedAt. + * @nullable + */ + featured?: boolean | null; + heroImage?: string | null | Media; + /** @nullable */ + body?: PostPatchRequestBodyBodyBodyItem[] | null; + /** @nullable */ + publishedAt?: string | null; + /** ID of the users */ + author?: string; + /** @nullable */ + _status?: _PostPatchRequestBodyBodyStatus; +}; + +/** + * @nullable + */ +export type PayloadKvRequestBodyBodyData = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +export type PayloadKvRequestBodyBody = { + key: string; + /** @nullable */ + data: PayloadKvRequestBodyBodyData; +}; + +/** + * @nullable + */ +export type PayloadKvPatchRequestBodyBodyData = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +export type PayloadKvPatchRequestBodyBody = { + key?: string; + /** @nullable */ + data?: PayloadKvPatchRequestBodyBodyData; +}; + +/** + * Input data provided to the job + * @nullable + */ +export type PayloadJobRequestBodyBodyInput = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +/** + * @nullable + */ +export type PayloadJobRequestBodyBodyTaskStatus = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +/** + * If hasError is true, this is the error that caused it + * @nullable + */ +export type PayloadJobRequestBodyBodyError = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +export type PayloadJobRequestBodyBodyLogItemTaskSlug = (typeof PayloadJobRequestBodyBodyLogItemTaskSlug)[keyof typeof PayloadJobRequestBodyBodyLogItemTaskSlug]; + +export const PayloadJobRequestBodyBodyLogItemTaskSlug = { + inline: "inline", + schedulePublish: "schedulePublish" +} as const; + +/** + * @nullable + */ +export type PayloadJobRequestBodyBodyLogItemInput = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +/** + * @nullable + */ +export type PayloadJobRequestBodyBodyLogItemOutput = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +export type PayloadJobRequestBodyBodyLogItemState = (typeof PayloadJobRequestBodyBodyLogItemState)[keyof typeof PayloadJobRequestBodyBodyLogItemState]; + +export const PayloadJobRequestBodyBodyLogItemState = { + failed: "failed", + succeeded: "succeeded" +} as const; + +/** + * @nullable + */ +export type PayloadJobRequestBodyBodyLogItemError = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +export type PayloadJobRequestBodyBodyLogItem = { + executedAt: string; + completedAt: string; + taskSlug: PayloadJobRequestBodyBodyLogItemTaskSlug; + taskID: string; + /** @nullable */ + input?: PayloadJobRequestBodyBodyLogItemInput; + /** @nullable */ + output?: PayloadJobRequestBodyBodyLogItemOutput; + state: PayloadJobRequestBodyBodyLogItemState; + /** @nullable */ + error?: PayloadJobRequestBodyBodyLogItemError; + /** @nullable */ + id?: string | null; +}; + +/** + * @nullable + */ +export type PayloadJobRequestBodyBodyTaskSlug = (typeof PayloadJobRequestBodyBodyTaskSlug)[keyof typeof PayloadJobRequestBodyBodyTaskSlug] | null; + +export const PayloadJobRequestBodyBodyTaskSlug = { + inline: "inline", + schedulePublish: "schedulePublish" +} as const; + +export type PayloadJobRequestBodyBody = { + /** + * Input data provided to the job + * @nullable + */ + input?: PayloadJobRequestBodyBodyInput; + /** @nullable */ + taskStatus?: PayloadJobRequestBodyBodyTaskStatus; + /** @nullable */ + completedAt?: string | null; + /** @nullable */ + totalTried?: number | null; + /** + * If hasError is true this job will not be retried + * @nullable + */ + hasError?: boolean | null; + /** + * If hasError is true, this is the error that caused it + * @nullable + */ + error?: PayloadJobRequestBodyBodyError; + /** + * Task execution log + * @nullable + */ + log?: PayloadJobRequestBodyBodyLogItem[] | null; + /** @nullable */ + taskSlug?: PayloadJobRequestBodyBodyTaskSlug; + /** @nullable */ + queue?: string | null; + /** @nullable */ + waitUntil?: string | null; + /** @nullable */ + processing?: boolean | null; +}; + +/** + * Input data provided to the job + * @nullable + */ +export type PayloadJobPatchRequestBodyBodyInput = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +/** + * @nullable + */ +export type PayloadJobPatchRequestBodyBodyTaskStatus = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +/** + * If hasError is true, this is the error that caused it + * @nullable + */ +export type PayloadJobPatchRequestBodyBodyError = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +export type PayloadJobPatchRequestBodyBodyLogItemTaskSlug = (typeof PayloadJobPatchRequestBodyBodyLogItemTaskSlug)[keyof typeof PayloadJobPatchRequestBodyBodyLogItemTaskSlug]; + +export const PayloadJobPatchRequestBodyBodyLogItemTaskSlug = { + inline: "inline", + schedulePublish: "schedulePublish" +} as const; + +/** + * @nullable + */ +export type PayloadJobPatchRequestBodyBodyLogItemInput = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +/** + * @nullable + */ +export type PayloadJobPatchRequestBodyBodyLogItemOutput = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +export type PayloadJobPatchRequestBodyBodyLogItemState = (typeof PayloadJobPatchRequestBodyBodyLogItemState)[keyof typeof PayloadJobPatchRequestBodyBodyLogItemState]; + +export const PayloadJobPatchRequestBodyBodyLogItemState = { + failed: "failed", + succeeded: "succeeded" +} as const; + +/** + * @nullable + */ +export type PayloadJobPatchRequestBodyBodyLogItemError = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +export type PayloadJobPatchRequestBodyBodyLogItem = { + executedAt: string; + completedAt: string; + taskSlug: PayloadJobPatchRequestBodyBodyLogItemTaskSlug; + taskID: string; + /** @nullable */ + input?: PayloadJobPatchRequestBodyBodyLogItemInput; + /** @nullable */ + output?: PayloadJobPatchRequestBodyBodyLogItemOutput; + state: PayloadJobPatchRequestBodyBodyLogItemState; + /** @nullable */ + error?: PayloadJobPatchRequestBodyBodyLogItemError; + /** @nullable */ + id?: string | null; +}; + +/** + * @nullable + */ +export type PayloadJobPatchRequestBodyBodyTaskSlug = (typeof PayloadJobPatchRequestBodyBodyTaskSlug)[keyof typeof PayloadJobPatchRequestBodyBodyTaskSlug] | null; + +export const PayloadJobPatchRequestBodyBodyTaskSlug = { + inline: "inline", + schedulePublish: "schedulePublish" +} as const; + +export type PayloadJobPatchRequestBodyBody = { + /** + * Input data provided to the job + * @nullable + */ + input?: PayloadJobPatchRequestBodyBodyInput; + /** @nullable */ + taskStatus?: PayloadJobPatchRequestBodyBodyTaskStatus; + /** @nullable */ + completedAt?: string | null; + /** @nullable */ + totalTried?: number | null; + /** + * If hasError is true this job will not be retried + * @nullable + */ + hasError?: boolean | null; + /** + * If hasError is true, this is the error that caused it + * @nullable + */ + error?: PayloadJobPatchRequestBodyBodyError; + /** + * Task execution log + * @nullable + */ + log?: PayloadJobPatchRequestBodyBodyLogItem[] | null; + /** @nullable */ + taskSlug?: PayloadJobPatchRequestBodyBodyTaskSlug; + /** @nullable */ + queue?: string | null; + /** @nullable */ + waitUntil?: string | null; + /** @nullable */ + processing?: boolean | null; +}; + +export type PayloadLockedDocumentRequestBodyBody = { + /** ID of the users/media/posts */ + document?: string; + /** @nullable */ + globalSlug?: string | null; + /** ID of the users */ + user: string; +}; + +export type PayloadLockedDocumentPatchRequestBodyBody = { + /** ID of the users/media/posts */ + document?: string; + /** @nullable */ + globalSlug?: string | null; + /** ID of the users */ + user?: string; +}; + +/** + * @nullable + */ +export type PayloadPreferenceRequestBodyBodyValue = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +export type PayloadPreferenceRequestBodyBody = { + /** ID of the users */ + user: string; + /** @nullable */ + key?: string | null; + /** @nullable */ + value?: PayloadPreferenceRequestBodyBodyValue; +}; + +/** + * @nullable + */ +export type PayloadPreferencePatchRequestBodyBodyValue = { [key: string]: unknown } | unknown[] | string | number | boolean | null; + +export type PayloadPreferencePatchRequestBodyBody = { + /** ID of the users */ + user?: string; + /** @nullable */ + key?: string | null; + /** @nullable */ + value?: PayloadPreferencePatchRequestBodyBodyValue; +}; + +export type PayloadMigrationRequestBodyBody = { + /** @nullable */ + name?: string | null; + /** @nullable */ + batch?: number | null; +}; + +export type PayloadMigrationPatchRequestBodyBody = { + /** @nullable */ + name?: string | null; + /** @nullable */ + batch?: number | null; +}; + +export type ListUsersParams = { + page?: number; + limit?: number; + depth?: number; + locale?: string; + "fallback-locale"?: string; + sort?: ListUsersSort; + where?: { [key: string]: unknown } & (UserQueryOperations | UserQueryOperationsAnd | UserQueryOperationsOr); +}; + +export type ListUsersSort = (typeof ListUsersSort)[keyof typeof ListUsersSort]; + +export const ListUsersSort = { + name: "name", + "-name": "-name", + displayName: "displayName", + "-displayName": "-displayName", + mcUuid: "mcUuid", + "-mcUuid": "-mcUuid", + updatedAt: "updatedAt", + "-updatedAt": "-updatedAt", + createdAt: "createdAt", + "-createdAt": "-createdAt", + apiKey: "apiKey", + "-apiKey": "-apiKey", + apiKeyIndex: "apiKeyIndex", + "-apiKeyIndex": "-apiKeyIndex", + email: "email", + "-email": "-email", + resetPasswordToken: "resetPasswordToken", + "-resetPasswordToken": "-resetPasswordToken", + resetPasswordExpiration: "resetPasswordExpiration", + "-resetPasswordExpiration": "-resetPasswordExpiration", + salt: "salt", + "-salt": "-salt", + hash: "hash", + "-hash": "-hash", + loginAttempts: "loginAttempts", + "-loginAttempts": "-loginAttempts", + lockUntil: "lockUntil", + "-lockUntil": "-lockUntil" +} as const; + +export type CreateUserParams = { + depth?: number; + locale?: string; +}; + +export type FindUserByIdParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type UpdateUserParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type DeleteUserParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type ListMediaParams = { + page?: number; + limit?: number; + depth?: number; + locale?: string; + "fallback-locale"?: string; + sort?: ListMediaSort; + where?: { [key: string]: unknown } & (MediaQueryOperations | MediaQueryOperationsAnd | MediaQueryOperationsOr); +}; + +export type ListMediaSort = (typeof ListMediaSort)[keyof typeof ListMediaSort]; + +export const ListMediaSort = { + alt: "alt", + "-alt": "-alt", + updatedAt: "updatedAt", + "-updatedAt": "-updatedAt", + createdAt: "createdAt", + "-createdAt": "-createdAt", + url: "url", + "-url": "-url", + thumbnailURL: "thumbnailURL", + "-thumbnailURL": "-thumbnailURL", + filename: "filename", + "-filename": "-filename", + mimeType: "mimeType", + "-mimeType": "-mimeType", + filesize: "filesize", + "-filesize": "-filesize", + width: "width", + "-width": "-width", + height: "height", + "-height": "-height", + focalX: "focalX", + "-focalX": "-focalX", + focalY: "focalY", + "-focalY": "-focalY" +} as const; + +export type CreateMediaParams = { + depth?: number; + locale?: string; +}; + +export type FindMediaByIdParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type UpdateMediaParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type DeleteMediaParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type ListPostsParams = { + page?: number; + limit?: number; + depth?: number; + locale?: string; + "fallback-locale"?: string; + sort?: ListPostsSort; + where?: { [key: string]: unknown } & (PostQueryOperations | PostQueryOperationsAnd | PostQueryOperationsOr); +}; + +export type ListPostsSort = (typeof ListPostsSort)[keyof typeof ListPostsSort]; + +export const ListPostsSort = { + title: "title", + "-title": "-title", + slug: "slug", + "-slug": "-slug", + tags: "tags", + "-tags": "-tags", + publishedAt: "publishedAt", + "-publishedAt": "-publishedAt", + updatedAt: "updatedAt", + "-updatedAt": "-updatedAt", + createdAt: "createdAt", + "-createdAt": "-createdAt" +} as const; + +export type CreatePostParams = { + depth?: number; + locale?: string; +}; + +export type FindPostByIdParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type UpdatePostParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type DeletePostParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type ListPayloadKvsParams = { + page?: number; + limit?: number; + depth?: number; + locale?: string; + "fallback-locale"?: string; + sort?: ListPayloadKvsSort; + where?: { [key: string]: unknown } & (PayloadKvQueryOperations | PayloadKvQueryOperationsAnd | PayloadKvQueryOperationsOr); +}; + +export type ListPayloadKvsSort = (typeof ListPayloadKvsSort)[keyof typeof ListPayloadKvsSort]; + +export const ListPayloadKvsSort = { + key: "key", + "-key": "-key" +} as const; + +export type CreatePayloadKvParams = { + depth?: number; + locale?: string; +}; + +export type FindPayloadKvByIdParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type UpdatePayloadKvParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type DeletePayloadKvParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type ListPayloadJobsParams = { + page?: number; + limit?: number; + depth?: number; + locale?: string; + "fallback-locale"?: string; + sort?: ListPayloadJobsSort; + where?: { [key: string]: unknown } & (PayloadJobQueryOperations | PayloadJobQueryOperationsAnd | PayloadJobQueryOperationsOr); +}; + +export type ListPayloadJobsSort = (typeof ListPayloadJobsSort)[keyof typeof ListPayloadJobsSort]; + +export const ListPayloadJobsSort = { + queue: "queue", + "-queue": "-queue", + waitUntil: "waitUntil", + "-waitUntil": "-waitUntil", + updatedAt: "updatedAt", + "-updatedAt": "-updatedAt", + createdAt: "createdAt", + "-createdAt": "-createdAt" +} as const; + +export type CreatePayloadJobParams = { + depth?: number; + locale?: string; +}; + +export type FindPayloadJobByIdParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type UpdatePayloadJobParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type DeletePayloadJobParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type ListPayloadLockedDocumentsParams = { + page?: number; + limit?: number; + depth?: number; + locale?: string; + "fallback-locale"?: string; + sort?: ListPayloadLockedDocumentsSort; + where?: { [key: string]: unknown } & (PayloadLockedDocumentQueryOperations | PayloadLockedDocumentQueryOperationsAnd | PayloadLockedDocumentQueryOperationsOr); +}; + +export type ListPayloadLockedDocumentsSort = (typeof ListPayloadLockedDocumentsSort)[keyof typeof ListPayloadLockedDocumentsSort]; + +export const ListPayloadLockedDocumentsSort = { + globalSlug: "globalSlug", + "-globalSlug": "-globalSlug", + updatedAt: "updatedAt", + "-updatedAt": "-updatedAt", + createdAt: "createdAt", + "-createdAt": "-createdAt" +} as const; + +export type CreatePayloadLockedDocumentParams = { + depth?: number; + locale?: string; +}; + +export type FindPayloadLockedDocumentByIdParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type UpdatePayloadLockedDocumentParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type DeletePayloadLockedDocumentParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type ListPayloadPreferencesParams = { + page?: number; + limit?: number; + depth?: number; + locale?: string; + "fallback-locale"?: string; + sort?: ListPayloadPreferencesSort; + where?: { [key: string]: unknown } & (PayloadPreferenceQueryOperations | PayloadPreferenceQueryOperationsAnd | PayloadPreferenceQueryOperationsOr); +}; + +export type ListPayloadPreferencesSort = (typeof ListPayloadPreferencesSort)[keyof typeof ListPayloadPreferencesSort]; + +export const ListPayloadPreferencesSort = { + key: "key", + "-key": "-key", + updatedAt: "updatedAt", + "-updatedAt": "-updatedAt", + createdAt: "createdAt", + "-createdAt": "-createdAt" +} as const; + +export type CreatePayloadPreferenceParams = { + depth?: number; + locale?: string; +}; + +export type FindPayloadPreferenceByIdParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type UpdatePayloadPreferenceParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type DeletePayloadPreferenceParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type ListPayloadMigrationsParams = { + page?: number; + limit?: number; + depth?: number; + locale?: string; + "fallback-locale"?: string; + sort?: ListPayloadMigrationsSort; + where?: { [key: string]: unknown } & (PayloadMigrationQueryOperations | PayloadMigrationQueryOperationsAnd | PayloadMigrationQueryOperationsOr); +}; + +export type ListPayloadMigrationsSort = (typeof ListPayloadMigrationsSort)[keyof typeof ListPayloadMigrationsSort]; + +export const ListPayloadMigrationsSort = { + name: "name", + "-name": "-name", + batch: "batch", + "-batch": "-batch", + updatedAt: "updatedAt", + "-updatedAt": "-updatedAt", + createdAt: "createdAt", + "-createdAt": "-createdAt" +} as const; + +export type CreatePayloadMigrationParams = { + depth?: number; + locale?: string; +}; + +export type FindPayloadMigrationByIdParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type UpdatePayloadMigrationParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type DeletePayloadMigrationParams = { + depth?: number; + locale?: string; + "fallback-locale"?: string; +}; + +export type listUsersResponse200 = { + data: UserListResponseResponse; + status: 200; +}; + +export type listUsersResponseSuccess = listUsersResponse200 & { + headers: Headers; +}; +export type listUsersResponse = listUsersResponseSuccess; + +export const getListUsersUrl = (params?: ListUsersParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/users?${stringifiedParams}` : `/api/users`; +}; + +/** + * @summary Retrieve a list of Users + */ +export const listUsers = async (params?: ListUsersParams, options?: RequestInit): Promise => { + return cmsFetch(getListUsersUrl(params), { + ...options, + method: "GET" + }); +}; + +export type createUserResponse201 = { + data: NewUserResponseResponse; + status: 201; +}; + +export type createUserResponseSuccess = createUserResponse201 & { + headers: Headers; +}; +export type createUserResponse = createUserResponseSuccess; + +export const getCreateUserUrl = (params?: CreateUserParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/users?${stringifiedParams}` : `/api/users`; +}; + +/** + * @summary Create a new User + */ +export const createUser = async (userRequestBodyBody?: UserRequestBodyBody, params?: CreateUserParams, options?: RequestInit): Promise => { + return cmsFetch(getCreateUserUrl(params), { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(userRequestBodyBody) + }); +}; + +export type findUserByIdResponse200 = { + data: UserResponseResponse; + status: 200; +}; + +export type findUserByIdResponse404 = { + data: UserNotFoundResponseResponse; + status: 404; +}; + +export type findUserByIdResponseSuccess = findUserByIdResponse200 & { + headers: Headers; +}; +export type findUserByIdResponseError = findUserByIdResponse404 & { + headers: Headers; +}; + +export type findUserByIdResponse = findUserByIdResponseSuccess | findUserByIdResponseError; + +export const getFindUserByIdUrl = (id: string, params?: FindUserByIdParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/users/${id}?${stringifiedParams}` : `/api/users/${id}`; +}; + +/** + * @summary Find a User by ID + */ +export const findUserById = async (id: string, params?: FindUserByIdParams, options?: RequestInit): Promise => { + return cmsFetch(getFindUserByIdUrl(id, params), { + ...options, + method: "GET" + }); +}; + +export type updateUserResponse200 = { + data: UserResponseResponse; + status: 200; +}; + +export type updateUserResponse404 = { + data: UserNotFoundResponseResponse; + status: 404; +}; + +export type updateUserResponseSuccess = updateUserResponse200 & { + headers: Headers; +}; +export type updateUserResponseError = updateUserResponse404 & { + headers: Headers; +}; + +export type updateUserResponse = updateUserResponseSuccess | updateUserResponseError; + +export const getUpdateUserUrl = (id: string, params?: UpdateUserParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/users/${id}?${stringifiedParams}` : `/api/users/${id}`; +}; + +/** + * @summary Update a User + */ +export const updateUser = async (id: string, userPatchRequestBodyBody?: UserPatchRequestBodyBody, params?: UpdateUserParams, options?: RequestInit): Promise => { + return cmsFetch(getUpdateUserUrl(id, params), { + ...options, + method: "PATCH", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(userPatchRequestBodyBody) + }); +}; + +export type deleteUserResponse200 = { + data: UserResponseResponse; + status: 200; +}; + +export type deleteUserResponse404 = { + data: UserNotFoundResponseResponse; + status: 404; +}; + +export type deleteUserResponseSuccess = deleteUserResponse200 & { + headers: Headers; +}; +export type deleteUserResponseError = deleteUserResponse404 & { + headers: Headers; +}; + +export type deleteUserResponse = deleteUserResponseSuccess | deleteUserResponseError; + +export const getDeleteUserUrl = (id: string, params?: DeleteUserParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/users/${id}?${stringifiedParams}` : `/api/users/${id}`; +}; + +/** + * @summary Delete a User + */ +export const deleteUser = async (id: string, params?: DeleteUserParams, options?: RequestInit): Promise => { + return cmsFetch(getDeleteUserUrl(id, params), { + ...options, + method: "DELETE" + }); +}; + +export type listMediaResponse200 = { + data: MediaListResponseResponse; + status: 200; +}; + +export type listMediaResponseSuccess = listMediaResponse200 & { + headers: Headers; +}; +export type listMediaResponse = listMediaResponseSuccess; + +export const getListMediaUrl = (params?: ListMediaParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/media?${stringifiedParams}` : `/api/media`; +}; + +/** + * @summary Retrieve a list of Media + */ +export const listMedia = async (params?: ListMediaParams, options?: RequestInit): Promise => { + return cmsFetch(getListMediaUrl(params), { + ...options, + method: "GET" + }); +}; + +export type createMediaResponse201 = { + data: NewMediaResponseResponse; + status: 201; +}; + +export type createMediaResponseSuccess = createMediaResponse201 & { + headers: Headers; +}; +export type createMediaResponse = createMediaResponseSuccess; + +export const getCreateMediaUrl = (params?: CreateMediaParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/media?${stringifiedParams}` : `/api/media`; +}; + +/** + * @summary Create a new Media + */ +export const createMedia = async (mediaRequestBodyBody?: MediaRequestBodyBody, params?: CreateMediaParams, options?: RequestInit): Promise => { + return cmsFetch(getCreateMediaUrl(params), { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(mediaRequestBodyBody) + }); +}; + +export type findMediaByIdResponse200 = { + data: MediaResponseResponse; + status: 200; +}; + +export type findMediaByIdResponse404 = { + data: MediaNotFoundResponseResponse; + status: 404; +}; + +export type findMediaByIdResponseSuccess = findMediaByIdResponse200 & { + headers: Headers; +}; +export type findMediaByIdResponseError = findMediaByIdResponse404 & { + headers: Headers; +}; + +export type findMediaByIdResponse = findMediaByIdResponseSuccess | findMediaByIdResponseError; + +export const getFindMediaByIdUrl = (id: string, params?: FindMediaByIdParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/media/${id}?${stringifiedParams}` : `/api/media/${id}`; +}; + +/** + * @summary Find a Media by ID + */ +export const findMediaById = async (id: string, params?: FindMediaByIdParams, options?: RequestInit): Promise => { + return cmsFetch(getFindMediaByIdUrl(id, params), { + ...options, + method: "GET" + }); +}; + +export type updateMediaResponse200 = { + data: MediaResponseResponse; + status: 200; +}; + +export type updateMediaResponse404 = { + data: MediaNotFoundResponseResponse; + status: 404; +}; + +export type updateMediaResponseSuccess = updateMediaResponse200 & { + headers: Headers; +}; +export type updateMediaResponseError = updateMediaResponse404 & { + headers: Headers; +}; + +export type updateMediaResponse = updateMediaResponseSuccess | updateMediaResponseError; + +export const getUpdateMediaUrl = (id: string, params?: UpdateMediaParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/media/${id}?${stringifiedParams}` : `/api/media/${id}`; +}; + +/** + * @summary Update a Media + */ +export const updateMedia = async (id: string, mediaPatchRequestBodyBody?: MediaPatchRequestBodyBody, params?: UpdateMediaParams, options?: RequestInit): Promise => { + return cmsFetch(getUpdateMediaUrl(id, params), { + ...options, + method: "PATCH", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(mediaPatchRequestBodyBody) + }); +}; + +export type deleteMediaResponse200 = { + data: MediaResponseResponse; + status: 200; +}; + +export type deleteMediaResponse404 = { + data: MediaNotFoundResponseResponse; + status: 404; +}; + +export type deleteMediaResponseSuccess = deleteMediaResponse200 & { + headers: Headers; +}; +export type deleteMediaResponseError = deleteMediaResponse404 & { + headers: Headers; +}; + +export type deleteMediaResponse = deleteMediaResponseSuccess | deleteMediaResponseError; + +export const getDeleteMediaUrl = (id: string, params?: DeleteMediaParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/media/${id}?${stringifiedParams}` : `/api/media/${id}`; +}; + +/** + * @summary Delete a Media + */ +export const deleteMedia = async (id: string, params?: DeleteMediaParams, options?: RequestInit): Promise => { + return cmsFetch(getDeleteMediaUrl(id, params), { + ...options, + method: "DELETE" + }); +}; + +export type listPostsResponse200 = { + data: PostListResponseResponse; + status: 200; +}; + +export type listPostsResponseSuccess = listPostsResponse200 & { + headers: Headers; +}; +export type listPostsResponse = listPostsResponseSuccess; + +export const getListPostsUrl = (params?: ListPostsParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/posts?${stringifiedParams}` : `/api/posts`; +}; + +/** + * @summary Retrieve a list of Posts + */ +export const listPosts = async (params?: ListPostsParams, options?: RequestInit): Promise => { + return cmsFetch(getListPostsUrl(params), { + ...options, + method: "GET" + }); +}; + +export type createPostResponse201 = { + data: NewPostResponseResponse; + status: 201; +}; + +export type createPostResponseSuccess = createPostResponse201 & { + headers: Headers; +}; +export type createPostResponse = createPostResponseSuccess; + +export const getCreatePostUrl = (params?: CreatePostParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/posts?${stringifiedParams}` : `/api/posts`; +}; + +/** + * @summary Create a new Post + */ +export const createPost = async (postRequestBodyBody?: PostRequestBodyBody, params?: CreatePostParams, options?: RequestInit): Promise => { + return cmsFetch(getCreatePostUrl(params), { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(postRequestBodyBody) + }); +}; + +export type findPostByIdResponse200 = { + data: PostResponseResponse; + status: 200; +}; + +export type findPostByIdResponse404 = { + data: PostNotFoundResponseResponse; + status: 404; +}; + +export type findPostByIdResponseSuccess = findPostByIdResponse200 & { + headers: Headers; +}; +export type findPostByIdResponseError = findPostByIdResponse404 & { + headers: Headers; +}; + +export type findPostByIdResponse = findPostByIdResponseSuccess | findPostByIdResponseError; + +export const getFindPostByIdUrl = (id: string, params?: FindPostByIdParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/posts/${id}?${stringifiedParams}` : `/api/posts/${id}`; +}; + +/** + * @summary Find a Post by ID + */ +export const findPostById = async (id: string, params?: FindPostByIdParams, options?: RequestInit): Promise => { + return cmsFetch(getFindPostByIdUrl(id, params), { + ...options, + method: "GET" + }); +}; + +export type updatePostResponse200 = { + data: PostResponseResponse; + status: 200; +}; + +export type updatePostResponse404 = { + data: PostNotFoundResponseResponse; + status: 404; +}; + +export type updatePostResponseSuccess = updatePostResponse200 & { + headers: Headers; +}; +export type updatePostResponseError = updatePostResponse404 & { + headers: Headers; +}; + +export type updatePostResponse = updatePostResponseSuccess | updatePostResponseError; + +export const getUpdatePostUrl = (id: string, params?: UpdatePostParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/posts/${id}?${stringifiedParams}` : `/api/posts/${id}`; +}; + +/** + * @summary Update a Post + */ +export const updatePost = async (id: string, postPatchRequestBodyBody?: PostPatchRequestBodyBody, params?: UpdatePostParams, options?: RequestInit): Promise => { + return cmsFetch(getUpdatePostUrl(id, params), { + ...options, + method: "PATCH", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(postPatchRequestBodyBody) + }); +}; + +export type deletePostResponse200 = { + data: PostResponseResponse; + status: 200; +}; + +export type deletePostResponse404 = { + data: PostNotFoundResponseResponse; + status: 404; +}; + +export type deletePostResponseSuccess = deletePostResponse200 & { + headers: Headers; +}; +export type deletePostResponseError = deletePostResponse404 & { + headers: Headers; +}; + +export type deletePostResponse = deletePostResponseSuccess | deletePostResponseError; + +export const getDeletePostUrl = (id: string, params?: DeletePostParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/posts/${id}?${stringifiedParams}` : `/api/posts/${id}`; +}; + +/** + * @summary Delete a Post + */ +export const deletePost = async (id: string, params?: DeletePostParams, options?: RequestInit): Promise => { + return cmsFetch(getDeletePostUrl(id, params), { + ...options, + method: "DELETE" + }); +}; + +export type listPayloadKvsResponse200 = { + data: PayloadKvListResponseResponse; + status: 200; +}; + +export type listPayloadKvsResponseSuccess = listPayloadKvsResponse200 & { + headers: Headers; +}; +export type listPayloadKvsResponse = listPayloadKvsResponseSuccess; + +export const getListPayloadKvsUrl = (params?: ListPayloadKvsParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-kv?${stringifiedParams}` : `/api/payload-kv`; +}; + +/** + * @summary Retrieve a list of Payload Kvs + */ +export const listPayloadKvs = async (params?: ListPayloadKvsParams, options?: RequestInit): Promise => { + return cmsFetch(getListPayloadKvsUrl(params), { + ...options, + method: "GET" + }); +}; + +export type createPayloadKvResponse201 = { + data: NewPayloadKvResponseResponse; + status: 201; +}; + +export type createPayloadKvResponseSuccess = createPayloadKvResponse201 & { + headers: Headers; +}; +export type createPayloadKvResponse = createPayloadKvResponseSuccess; + +export const getCreatePayloadKvUrl = (params?: CreatePayloadKvParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-kv?${stringifiedParams}` : `/api/payload-kv`; +}; + +/** + * @summary Create a new Payload Kv + */ +export const createPayloadKv = async (payloadKvRequestBodyBody?: PayloadKvRequestBodyBody, params?: CreatePayloadKvParams, options?: RequestInit): Promise => { + return cmsFetch(getCreatePayloadKvUrl(params), { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(payloadKvRequestBodyBody) + }); +}; + +export type findPayloadKvByIdResponse200 = { + data: PayloadKvResponseResponse; + status: 200; +}; + +export type findPayloadKvByIdResponse404 = { + data: PayloadKvNotFoundResponseResponse; + status: 404; +}; + +export type findPayloadKvByIdResponseSuccess = findPayloadKvByIdResponse200 & { + headers: Headers; +}; +export type findPayloadKvByIdResponseError = findPayloadKvByIdResponse404 & { + headers: Headers; +}; + +export type findPayloadKvByIdResponse = findPayloadKvByIdResponseSuccess | findPayloadKvByIdResponseError; + +export const getFindPayloadKvByIdUrl = (id: string, params?: FindPayloadKvByIdParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-kv/${id}?${stringifiedParams}` : `/api/payload-kv/${id}`; +}; + +/** + * @summary Find a Payload Kv by ID + */ +export const findPayloadKvById = async (id: string, params?: FindPayloadKvByIdParams, options?: RequestInit): Promise => { + return cmsFetch(getFindPayloadKvByIdUrl(id, params), { + ...options, + method: "GET" + }); +}; + +export type updatePayloadKvResponse200 = { + data: PayloadKvResponseResponse; + status: 200; +}; + +export type updatePayloadKvResponse404 = { + data: PayloadKvNotFoundResponseResponse; + status: 404; +}; + +export type updatePayloadKvResponseSuccess = updatePayloadKvResponse200 & { + headers: Headers; +}; +export type updatePayloadKvResponseError = updatePayloadKvResponse404 & { + headers: Headers; +}; + +export type updatePayloadKvResponse = updatePayloadKvResponseSuccess | updatePayloadKvResponseError; + +export const getUpdatePayloadKvUrl = (id: string, params?: UpdatePayloadKvParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-kv/${id}?${stringifiedParams}` : `/api/payload-kv/${id}`; +}; + +/** + * @summary Update a Payload Kv + */ +export const updatePayloadKv = async (id: string, payloadKvPatchRequestBodyBody?: PayloadKvPatchRequestBodyBody, params?: UpdatePayloadKvParams, options?: RequestInit): Promise => { + return cmsFetch(getUpdatePayloadKvUrl(id, params), { + ...options, + method: "PATCH", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(payloadKvPatchRequestBodyBody) + }); +}; + +export type deletePayloadKvResponse200 = { + data: PayloadKvResponseResponse; + status: 200; +}; + +export type deletePayloadKvResponse404 = { + data: PayloadKvNotFoundResponseResponse; + status: 404; +}; + +export type deletePayloadKvResponseSuccess = deletePayloadKvResponse200 & { + headers: Headers; +}; +export type deletePayloadKvResponseError = deletePayloadKvResponse404 & { + headers: Headers; +}; + +export type deletePayloadKvResponse = deletePayloadKvResponseSuccess | deletePayloadKvResponseError; + +export const getDeletePayloadKvUrl = (id: string, params?: DeletePayloadKvParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-kv/${id}?${stringifiedParams}` : `/api/payload-kv/${id}`; +}; + +/** + * @summary Delete a Payload Kv + */ +export const deletePayloadKv = async (id: string, params?: DeletePayloadKvParams, options?: RequestInit): Promise => { + return cmsFetch(getDeletePayloadKvUrl(id, params), { + ...options, + method: "DELETE" + }); +}; + +export type listPayloadJobsResponse200 = { + data: PayloadJobListResponseResponse; + status: 200; +}; + +export type listPayloadJobsResponseSuccess = listPayloadJobsResponse200 & { + headers: Headers; +}; +export type listPayloadJobsResponse = listPayloadJobsResponseSuccess; + +export const getListPayloadJobsUrl = (params?: ListPayloadJobsParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-jobs?${stringifiedParams}` : `/api/payload-jobs`; +}; + +/** + * @summary Retrieve a list of Payload Jobs + */ +export const listPayloadJobs = async (params?: ListPayloadJobsParams, options?: RequestInit): Promise => { + return cmsFetch(getListPayloadJobsUrl(params), { + ...options, + method: "GET" + }); +}; + +export type createPayloadJobResponse201 = { + data: NewPayloadJobResponseResponse; + status: 201; +}; + +export type createPayloadJobResponseSuccess = createPayloadJobResponse201 & { + headers: Headers; +}; +export type createPayloadJobResponse = createPayloadJobResponseSuccess; + +export const getCreatePayloadJobUrl = (params?: CreatePayloadJobParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-jobs?${stringifiedParams}` : `/api/payload-jobs`; +}; + +/** + * @summary Create a new Payload Job + */ +export const createPayloadJob = async (payloadJobRequestBodyBody?: PayloadJobRequestBodyBody, params?: CreatePayloadJobParams, options?: RequestInit): Promise => { + return cmsFetch(getCreatePayloadJobUrl(params), { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(payloadJobRequestBodyBody) + }); +}; + +export type findPayloadJobByIdResponse200 = { + data: PayloadJobResponseResponse; + status: 200; +}; + +export type findPayloadJobByIdResponse404 = { + data: PayloadJobNotFoundResponseResponse; + status: 404; +}; + +export type findPayloadJobByIdResponseSuccess = findPayloadJobByIdResponse200 & { + headers: Headers; +}; +export type findPayloadJobByIdResponseError = findPayloadJobByIdResponse404 & { + headers: Headers; +}; + +export type findPayloadJobByIdResponse = findPayloadJobByIdResponseSuccess | findPayloadJobByIdResponseError; + +export const getFindPayloadJobByIdUrl = (id: string, params?: FindPayloadJobByIdParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-jobs/${id}?${stringifiedParams}` : `/api/payload-jobs/${id}`; +}; + +/** + * @summary Find a Payload Job by ID + */ +export const findPayloadJobById = async (id: string, params?: FindPayloadJobByIdParams, options?: RequestInit): Promise => { + return cmsFetch(getFindPayloadJobByIdUrl(id, params), { + ...options, + method: "GET" + }); +}; + +export type updatePayloadJobResponse200 = { + data: PayloadJobResponseResponse; + status: 200; +}; + +export type updatePayloadJobResponse404 = { + data: PayloadJobNotFoundResponseResponse; + status: 404; +}; + +export type updatePayloadJobResponseSuccess = updatePayloadJobResponse200 & { + headers: Headers; +}; +export type updatePayloadJobResponseError = updatePayloadJobResponse404 & { + headers: Headers; +}; + +export type updatePayloadJobResponse = updatePayloadJobResponseSuccess | updatePayloadJobResponseError; + +export const getUpdatePayloadJobUrl = (id: string, params?: UpdatePayloadJobParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-jobs/${id}?${stringifiedParams}` : `/api/payload-jobs/${id}`; +}; + +/** + * @summary Update a Payload Job + */ +export const updatePayloadJob = async (id: string, payloadJobPatchRequestBodyBody?: PayloadJobPatchRequestBodyBody, params?: UpdatePayloadJobParams, options?: RequestInit): Promise => { + return cmsFetch(getUpdatePayloadJobUrl(id, params), { + ...options, + method: "PATCH", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(payloadJobPatchRequestBodyBody) + }); +}; + +export type deletePayloadJobResponse200 = { + data: PayloadJobResponseResponse; + status: 200; +}; + +export type deletePayloadJobResponse404 = { + data: PayloadJobNotFoundResponseResponse; + status: 404; +}; + +export type deletePayloadJobResponseSuccess = deletePayloadJobResponse200 & { + headers: Headers; +}; +export type deletePayloadJobResponseError = deletePayloadJobResponse404 & { + headers: Headers; +}; + +export type deletePayloadJobResponse = deletePayloadJobResponseSuccess | deletePayloadJobResponseError; + +export const getDeletePayloadJobUrl = (id: string, params?: DeletePayloadJobParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-jobs/${id}?${stringifiedParams}` : `/api/payload-jobs/${id}`; +}; + +/** + * @summary Delete a Payload Job + */ +export const deletePayloadJob = async (id: string, params?: DeletePayloadJobParams, options?: RequestInit): Promise => { + return cmsFetch(getDeletePayloadJobUrl(id, params), { + ...options, + method: "DELETE" + }); +}; + +export type listPayloadLockedDocumentsResponse200 = { + data: PayloadLockedDocumentListResponseResponse; + status: 200; +}; + +export type listPayloadLockedDocumentsResponseSuccess = listPayloadLockedDocumentsResponse200 & { + headers: Headers; +}; +export type listPayloadLockedDocumentsResponse = listPayloadLockedDocumentsResponseSuccess; + +export const getListPayloadLockedDocumentsUrl = (params?: ListPayloadLockedDocumentsParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-locked-documents?${stringifiedParams}` : `/api/payload-locked-documents`; +}; + +/** + * @summary Retrieve a list of Payload Locked Documents + */ +export const listPayloadLockedDocuments = async (params?: ListPayloadLockedDocumentsParams, options?: RequestInit): Promise => { + return cmsFetch(getListPayloadLockedDocumentsUrl(params), { + ...options, + method: "GET" + }); +}; + +export type createPayloadLockedDocumentResponse201 = { + data: NewPayloadLockedDocumentResponseResponse; + status: 201; +}; + +export type createPayloadLockedDocumentResponseSuccess = createPayloadLockedDocumentResponse201 & { + headers: Headers; +}; +export type createPayloadLockedDocumentResponse = createPayloadLockedDocumentResponseSuccess; + +export const getCreatePayloadLockedDocumentUrl = (params?: CreatePayloadLockedDocumentParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-locked-documents?${stringifiedParams}` : `/api/payload-locked-documents`; +}; + +/** + * @summary Create a new Payload Locked Document + */ +export const createPayloadLockedDocument = async (payloadLockedDocumentRequestBodyBody?: PayloadLockedDocumentRequestBodyBody, params?: CreatePayloadLockedDocumentParams, options?: RequestInit): Promise => { + return cmsFetch(getCreatePayloadLockedDocumentUrl(params), { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(payloadLockedDocumentRequestBodyBody) + }); +}; + +export type findPayloadLockedDocumentByIdResponse200 = { + data: PayloadLockedDocumentResponseResponse; + status: 200; +}; + +export type findPayloadLockedDocumentByIdResponse404 = { + data: PayloadLockedDocumentNotFoundResponseResponse; + status: 404; +}; + +export type findPayloadLockedDocumentByIdResponseSuccess = findPayloadLockedDocumentByIdResponse200 & { + headers: Headers; +}; +export type findPayloadLockedDocumentByIdResponseError = findPayloadLockedDocumentByIdResponse404 & { + headers: Headers; +}; + +export type findPayloadLockedDocumentByIdResponse = findPayloadLockedDocumentByIdResponseSuccess | findPayloadLockedDocumentByIdResponseError; + +export const getFindPayloadLockedDocumentByIdUrl = (id: string, params?: FindPayloadLockedDocumentByIdParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-locked-documents/${id}?${stringifiedParams}` : `/api/payload-locked-documents/${id}`; +}; + +/** + * @summary Find a Payload Locked Document by ID + */ +export const findPayloadLockedDocumentById = async (id: string, params?: FindPayloadLockedDocumentByIdParams, options?: RequestInit): Promise => { + return cmsFetch(getFindPayloadLockedDocumentByIdUrl(id, params), { + ...options, + method: "GET" + }); +}; + +export type updatePayloadLockedDocumentResponse200 = { + data: PayloadLockedDocumentResponseResponse; + status: 200; +}; + +export type updatePayloadLockedDocumentResponse404 = { + data: PayloadLockedDocumentNotFoundResponseResponse; + status: 404; +}; + +export type updatePayloadLockedDocumentResponseSuccess = updatePayloadLockedDocumentResponse200 & { + headers: Headers; +}; +export type updatePayloadLockedDocumentResponseError = updatePayloadLockedDocumentResponse404 & { + headers: Headers; +}; + +export type updatePayloadLockedDocumentResponse = updatePayloadLockedDocumentResponseSuccess | updatePayloadLockedDocumentResponseError; + +export const getUpdatePayloadLockedDocumentUrl = (id: string, params?: UpdatePayloadLockedDocumentParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-locked-documents/${id}?${stringifiedParams}` : `/api/payload-locked-documents/${id}`; +}; + +/** + * @summary Update a Payload Locked Document + */ +export const updatePayloadLockedDocument = async (id: string, payloadLockedDocumentPatchRequestBodyBody?: PayloadLockedDocumentPatchRequestBodyBody, params?: UpdatePayloadLockedDocumentParams, options?: RequestInit): Promise => { + return cmsFetch(getUpdatePayloadLockedDocumentUrl(id, params), { + ...options, + method: "PATCH", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(payloadLockedDocumentPatchRequestBodyBody) + }); +}; + +export type deletePayloadLockedDocumentResponse200 = { + data: PayloadLockedDocumentResponseResponse; + status: 200; +}; + +export type deletePayloadLockedDocumentResponse404 = { + data: PayloadLockedDocumentNotFoundResponseResponse; + status: 404; +}; + +export type deletePayloadLockedDocumentResponseSuccess = deletePayloadLockedDocumentResponse200 & { + headers: Headers; +}; +export type deletePayloadLockedDocumentResponseError = deletePayloadLockedDocumentResponse404 & { + headers: Headers; +}; + +export type deletePayloadLockedDocumentResponse = deletePayloadLockedDocumentResponseSuccess | deletePayloadLockedDocumentResponseError; + +export const getDeletePayloadLockedDocumentUrl = (id: string, params?: DeletePayloadLockedDocumentParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-locked-documents/${id}?${stringifiedParams}` : `/api/payload-locked-documents/${id}`; +}; + +/** + * @summary Delete a Payload Locked Document + */ +export const deletePayloadLockedDocument = async (id: string, params?: DeletePayloadLockedDocumentParams, options?: RequestInit): Promise => { + return cmsFetch(getDeletePayloadLockedDocumentUrl(id, params), { + ...options, + method: "DELETE" + }); +}; + +export type listPayloadPreferencesResponse200 = { + data: PayloadPreferenceListResponseResponse; + status: 200; +}; + +export type listPayloadPreferencesResponseSuccess = listPayloadPreferencesResponse200 & { + headers: Headers; +}; +export type listPayloadPreferencesResponse = listPayloadPreferencesResponseSuccess; + +export const getListPayloadPreferencesUrl = (params?: ListPayloadPreferencesParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-preferences?${stringifiedParams}` : `/api/payload-preferences`; +}; + +/** + * @summary Retrieve a list of Payload Preferences + */ +export const listPayloadPreferences = async (params?: ListPayloadPreferencesParams, options?: RequestInit): Promise => { + return cmsFetch(getListPayloadPreferencesUrl(params), { + ...options, + method: "GET" + }); +}; + +export type createPayloadPreferenceResponse201 = { + data: NewPayloadPreferenceResponseResponse; + status: 201; +}; + +export type createPayloadPreferenceResponseSuccess = createPayloadPreferenceResponse201 & { + headers: Headers; +}; +export type createPayloadPreferenceResponse = createPayloadPreferenceResponseSuccess; + +export const getCreatePayloadPreferenceUrl = (params?: CreatePayloadPreferenceParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-preferences?${stringifiedParams}` : `/api/payload-preferences`; +}; + +/** + * @summary Create a new Payload Preference + */ +export const createPayloadPreference = async (payloadPreferenceRequestBodyBody?: PayloadPreferenceRequestBodyBody, params?: CreatePayloadPreferenceParams, options?: RequestInit): Promise => { + return cmsFetch(getCreatePayloadPreferenceUrl(params), { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(payloadPreferenceRequestBodyBody) + }); +}; + +export type findPayloadPreferenceByIdResponse200 = { + data: PayloadPreferenceResponseResponse; + status: 200; +}; + +export type findPayloadPreferenceByIdResponse404 = { + data: PayloadPreferenceNotFoundResponseResponse; + status: 404; +}; + +export type findPayloadPreferenceByIdResponseSuccess = findPayloadPreferenceByIdResponse200 & { + headers: Headers; +}; +export type findPayloadPreferenceByIdResponseError = findPayloadPreferenceByIdResponse404 & { + headers: Headers; +}; + +export type findPayloadPreferenceByIdResponse = findPayloadPreferenceByIdResponseSuccess | findPayloadPreferenceByIdResponseError; + +export const getFindPayloadPreferenceByIdUrl = (id: string, params?: FindPayloadPreferenceByIdParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-preferences/${id}?${stringifiedParams}` : `/api/payload-preferences/${id}`; +}; + +/** + * @summary Find a Payload Preference by ID + */ +export const findPayloadPreferenceById = async (id: string, params?: FindPayloadPreferenceByIdParams, options?: RequestInit): Promise => { + return cmsFetch(getFindPayloadPreferenceByIdUrl(id, params), { + ...options, + method: "GET" + }); +}; + +export type updatePayloadPreferenceResponse200 = { + data: PayloadPreferenceResponseResponse; + status: 200; +}; + +export type updatePayloadPreferenceResponse404 = { + data: PayloadPreferenceNotFoundResponseResponse; + status: 404; +}; + +export type updatePayloadPreferenceResponseSuccess = updatePayloadPreferenceResponse200 & { + headers: Headers; +}; +export type updatePayloadPreferenceResponseError = updatePayloadPreferenceResponse404 & { + headers: Headers; +}; + +export type updatePayloadPreferenceResponse = updatePayloadPreferenceResponseSuccess | updatePayloadPreferenceResponseError; + +export const getUpdatePayloadPreferenceUrl = (id: string, params?: UpdatePayloadPreferenceParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-preferences/${id}?${stringifiedParams}` : `/api/payload-preferences/${id}`; +}; + +/** + * @summary Update a Payload Preference + */ +export const updatePayloadPreference = async (id: string, payloadPreferencePatchRequestBodyBody?: PayloadPreferencePatchRequestBodyBody, params?: UpdatePayloadPreferenceParams, options?: RequestInit): Promise => { + return cmsFetch(getUpdatePayloadPreferenceUrl(id, params), { + ...options, + method: "PATCH", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(payloadPreferencePatchRequestBodyBody) + }); +}; + +export type deletePayloadPreferenceResponse200 = { + data: PayloadPreferenceResponseResponse; + status: 200; +}; + +export type deletePayloadPreferenceResponse404 = { + data: PayloadPreferenceNotFoundResponseResponse; + status: 404; +}; + +export type deletePayloadPreferenceResponseSuccess = deletePayloadPreferenceResponse200 & { + headers: Headers; +}; +export type deletePayloadPreferenceResponseError = deletePayloadPreferenceResponse404 & { + headers: Headers; +}; + +export type deletePayloadPreferenceResponse = deletePayloadPreferenceResponseSuccess | deletePayloadPreferenceResponseError; + +export const getDeletePayloadPreferenceUrl = (id: string, params?: DeletePayloadPreferenceParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-preferences/${id}?${stringifiedParams}` : `/api/payload-preferences/${id}`; +}; + +/** + * @summary Delete a Payload Preference + */ +export const deletePayloadPreference = async (id: string, params?: DeletePayloadPreferenceParams, options?: RequestInit): Promise => { + return cmsFetch(getDeletePayloadPreferenceUrl(id, params), { + ...options, + method: "DELETE" + }); +}; + +export type listPayloadMigrationsResponse200 = { + data: PayloadMigrationListResponseResponse; + status: 200; +}; + +export type listPayloadMigrationsResponseSuccess = listPayloadMigrationsResponse200 & { + headers: Headers; +}; +export type listPayloadMigrationsResponse = listPayloadMigrationsResponseSuccess; + +export const getListPayloadMigrationsUrl = (params?: ListPayloadMigrationsParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-migrations?${stringifiedParams}` : `/api/payload-migrations`; +}; + +/** + * @summary Retrieve a list of Payload Migrations + */ +export const listPayloadMigrations = async (params?: ListPayloadMigrationsParams, options?: RequestInit): Promise => { + return cmsFetch(getListPayloadMigrationsUrl(params), { + ...options, + method: "GET" + }); +}; + +export type createPayloadMigrationResponse201 = { + data: NewPayloadMigrationResponseResponse; + status: 201; +}; + +export type createPayloadMigrationResponseSuccess = createPayloadMigrationResponse201 & { + headers: Headers; +}; +export type createPayloadMigrationResponse = createPayloadMigrationResponseSuccess; + +export const getCreatePayloadMigrationUrl = (params?: CreatePayloadMigrationParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-migrations?${stringifiedParams}` : `/api/payload-migrations`; +}; + +/** + * @summary Create a new Payload Migration + */ +export const createPayloadMigration = async (payloadMigrationRequestBodyBody?: PayloadMigrationRequestBodyBody, params?: CreatePayloadMigrationParams, options?: RequestInit): Promise => { + return cmsFetch(getCreatePayloadMigrationUrl(params), { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(payloadMigrationRequestBodyBody) + }); +}; + +export type findPayloadMigrationByIdResponse200 = { + data: PayloadMigrationResponseResponse; + status: 200; +}; + +export type findPayloadMigrationByIdResponse404 = { + data: PayloadMigrationNotFoundResponseResponse; + status: 404; +}; + +export type findPayloadMigrationByIdResponseSuccess = findPayloadMigrationByIdResponse200 & { + headers: Headers; +}; +export type findPayloadMigrationByIdResponseError = findPayloadMigrationByIdResponse404 & { + headers: Headers; +}; + +export type findPayloadMigrationByIdResponse = findPayloadMigrationByIdResponseSuccess | findPayloadMigrationByIdResponseError; + +export const getFindPayloadMigrationByIdUrl = (id: string, params?: FindPayloadMigrationByIdParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-migrations/${id}?${stringifiedParams}` : `/api/payload-migrations/${id}`; +}; + +/** + * @summary Find a Payload Migration by ID + */ +export const findPayloadMigrationById = async (id: string, params?: FindPayloadMigrationByIdParams, options?: RequestInit): Promise => { + return cmsFetch(getFindPayloadMigrationByIdUrl(id, params), { + ...options, + method: "GET" + }); +}; + +export type updatePayloadMigrationResponse200 = { + data: PayloadMigrationResponseResponse; + status: 200; +}; + +export type updatePayloadMigrationResponse404 = { + data: PayloadMigrationNotFoundResponseResponse; + status: 404; +}; + +export type updatePayloadMigrationResponseSuccess = updatePayloadMigrationResponse200 & { + headers: Headers; +}; +export type updatePayloadMigrationResponseError = updatePayloadMigrationResponse404 & { + headers: Headers; +}; + +export type updatePayloadMigrationResponse = updatePayloadMigrationResponseSuccess | updatePayloadMigrationResponseError; + +export const getUpdatePayloadMigrationUrl = (id: string, params?: UpdatePayloadMigrationParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-migrations/${id}?${stringifiedParams}` : `/api/payload-migrations/${id}`; +}; + +/** + * @summary Update a Payload Migration + */ +export const updatePayloadMigration = async (id: string, payloadMigrationPatchRequestBodyBody?: PayloadMigrationPatchRequestBodyBody, params?: UpdatePayloadMigrationParams, options?: RequestInit): Promise => { + return cmsFetch(getUpdatePayloadMigrationUrl(id, params), { + ...options, + method: "PATCH", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(payloadMigrationPatchRequestBodyBody) + }); +}; + +export type deletePayloadMigrationResponse200 = { + data: PayloadMigrationResponseResponse; + status: 200; +}; + +export type deletePayloadMigrationResponse404 = { + data: PayloadMigrationNotFoundResponseResponse; + status: 404; +}; + +export type deletePayloadMigrationResponseSuccess = deletePayloadMigrationResponse200 & { + headers: Headers; +}; +export type deletePayloadMigrationResponseError = deletePayloadMigrationResponse404 & { + headers: Headers; +}; + +export type deletePayloadMigrationResponse = deletePayloadMigrationResponseSuccess | deletePayloadMigrationResponseError; + +export const getDeletePayloadMigrationUrl = (id: string, params?: DeletePayloadMigrationParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => {}); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 ? `/api/payload-migrations/${id}?${stringifiedParams}` : `/api/payload-migrations/${id}`; +}; + +/** + * @summary Delete a Payload Migration + */ +export const deletePayloadMigration = async (id: string, params?: DeletePayloadMigrationParams, options?: RequestInit): Promise => { + return cmsFetch(getDeletePayloadMigrationUrl(id, params), { + ...options, + method: "DELETE" + }); +}; diff --git a/src/lib/shared/api/mutator/cms-instance.ts b/src/lib/shared/api/mutator/cms-instance.ts new file mode 100644 index 000000000..739fd0786 --- /dev/null +++ b/src/lib/shared/api/mutator/cms-instance.ts @@ -0,0 +1,41 @@ +import { getRequestEvent } from "$app/server"; +import { env as envPrivate } from "$env/dynamic/private"; +import { env as envPublic } from "$env/dynamic/public"; +import { error } from "@sveltejs/kit"; + +// NOTE: Supports cases where `content-type` is other than `json` +const getBody = (c: Response | Request): Promise => { + const contentType = c.headers.get("content-type"); + + if (contentType && contentType.includes("application/json")) { + return c.json(); + } + + return c.text() as Promise; +}; + +// NOTE: Resolve against the CMS base url (server-only, falls back to the public url). +const getUrl = (contextUrl: string): string => { + const base = envPrivate.SERVER_CMS_API_URL || envPublic.PUBLIC_CMS_URL; + if (!base) error(500, "CMS URL not configured"); + // The OpenAPI paths already include the `/api` prefix, so strip a trailing one from the base. + const baseUrl = base.replace(/\/api\/?$/, ""); + return new URL(`${baseUrl}${contextUrl}`).toString(); +}; + +export const cmsFetch = async (url: string, options: RequestInit): Promise => { + let fetchFunction = fetch; + try { + const event = getRequestEvent(); + fetchFunction = event.fetch; + } catch { + // Ignore this, we just won't have access to the request for this call + } + + const requestUrl = getUrl(url); + + const response = await fetchFunction(requestUrl, options); + const data = await getBody(response); + + return { status: response.status, data, headers: response.headers } as T; +}; diff --git a/src/lib/shared/api/orval-generated-zod.ts b/src/lib/shared/api/orval-generated-zod.ts index 2c78f4db1..267f1e96e 100644 --- a/src/lib/shared/api/orval-generated-zod.ts +++ b/src/lib/shared/api/orval-generated-zod.ts @@ -1,5 +1,5 @@ /** - * Generated by orval v8.10.0 🍺 + * Generated by orval v8.11.0 🍺 * Do not edit manually. * SkyCrypt API * API for SkyCrypt - A Hypixel SkyBlock Stats Viewer diff --git a/src/lib/shared/api/orval-generated.ts b/src/lib/shared/api/orval-generated.ts index 63218a199..094388f76 100644 --- a/src/lib/shared/api/orval-generated.ts +++ b/src/lib/shared/api/orval-generated.ts @@ -1,5 +1,5 @@ /** - * Generated by orval v8.10.0 🍺 + * Generated by orval v8.11.0 🍺 * Do not edit manually. * SkyCrypt API * API for SkyCrypt - A Hypixel SkyBlock Stats Viewer diff --git a/src/lib/types/cms.ts b/src/lib/types/cms.ts new file mode 100644 index 000000000..d86dafe64 --- /dev/null +++ b/src/lib/types/cms.ts @@ -0,0 +1,73 @@ +import type { Media, Post as CmsPost, PostBodyItem, PostListResponseResponse, PostType, User } from "$lib/shared/api/cms-generated"; + +// Type-only re-exports: `cms-generated.ts` pulls in a server-only mutator ($env/dynamic/private), +// so this barrel must never create a runtime import of it (it's consumed by browser components). +export type { Media, PostBodyItem, PostType }; + +/** + * Allowed post categories, in display order. + * + * This is the one value we can't derive from the generated schema: the runtime enum + * only exists as a const in `cms-generated.ts`, and importing that value here would + * pull the server-only mutator ($env/dynamic/private) into the browser bundle. So the + * list is hand-written but kept honest against the schema — `satisfies` rejects entries + * that aren't a {@link PostType}, and the assertion below fails to compile if the CMS + * adds a type that's missing here. + */ +export const POST_TYPES = ["announcement", "news", "update", "changelog", "guide", "event"] as const satisfies readonly PostType[]; + +const _postTypesAreExhaustive: Exclude extends never ? true : ["POST_TYPES is missing a PostType:", Exclude] = true; + +/** Payload `users` doc — the public-facing author of a post. */ +export type Author = User; + +/** The author fields the newsroom UI renders. A string author ID resolves to a minimal placeholder. */ +export type AuthorView = Pick; + +/** A single content block, straight from the generated Payload schema. */ +export type Block = PostBodyItem; +export type BlockImage = Extract; +export type BlockRichText = Extract; + +/** + * Minimal subset of Lexical's serialized JSON shape that the newsroom renderer + * understands. The generated schema only types Lexical content as a loose + * `{ type, version, ... }` object, so the renderer keeps this richer view and + * casts at the boundary. + */ +export type LexicalNode = { + type: string; + children?: LexicalNode[]; + text?: string; + /** Text nodes: bitfield (1=bold, 2=italic, 4=strikethrough, 8=underline, 16=code). Block nodes: alignment string. */ + format?: number | string; + /** Headings: "h1".."h6"; legacy list tag: "ul"|"ol". */ + tag?: string; + /** Lists: "bullet" | "number" | "check". */ + listType?: string; + /** Checklist items. */ + checked?: boolean; + /** Legacy/custom links (Payload links use `fields.url`). */ + url?: string; + /** Payload link node fields. */ + fields?: { url?: string | null; newTab?: boolean | null; [key: string]: unknown } | null; + /** Upload media object, relationship doc, or list-item number. */ + value?: unknown; + /** Upload / relationship target collection. */ + relationTo?: string; +}; + +/** + * A post as consumed by the UI. Identical to the generated `Post`, but with the + * relationship fields narrowed to their populated shape — every query runs with + * `depth >= 1`, so `heroImage`/`author` are always resolved objects, never IDs. + */ +export type Post = Omit & { + heroImage?: Media | null; + author: Author | string; +}; + +/** Paginated list response with {@link Post}-shaped docs. */ +export type PostListResponse = Omit & { + docs: Post[]; +}; diff --git a/src/lib/types/index.ts b/src/lib/types/index.ts index ec85cdfdd..2cb8d8118 100644 --- a/src/lib/types/index.ts +++ b/src/lib/types/index.ts @@ -25,3 +25,4 @@ export enum APIEndpointName { } export * from "./types.d"; +export * from "./cms"; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 6d6d86d58..5520ecdd2 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -4,10 +4,13 @@ import { getFavorites, getPreferences } from "$ctx"; import { env } from "$env/dynamic/public"; import { ContributorCard, ContributorCardSkeleton, CtaCard } from "$lib/components/misc"; + import PostCard from "$lib/components/newsroom/PostCard.svelte"; import { Notice } from "$lib/components/notices"; + import { listPosts } from "$lib/shared/api/cms-api.remote"; import { searchUser } from "$lib/shared/api/skycrypt-api.remote"; import { cn } from "$lib/shared/utils"; import { getContributors } from "$routes/contributors.remote"; + import ArrowRight from "@lucide/svelte/icons/arrow-right"; import CodeXml from "@lucide/svelte/icons/code-xml"; import GitPullRequestArrow from "@lucide/svelte/icons/git-pull-request-arrow"; import LoaderCircle from "@lucide/svelte/icons/loader-circle"; @@ -150,6 +153,48 @@ {/if} + + {#snippet pending()} +
    +
    +
    + {#each new Array(3) as _, i (i)} +
    +
    +
    +
    +
    +
    +
    +
    + {/each} +
    +
    + {/snippet} + {#snippet failed()}{/snippet} + + {@const newsroom = await listPosts({ page: 1, limit: 3 })} + {#if newsroom.docs.length > 0} +
    +
    +
    +

    Newsroom

    +

    Latest announcements and updates

    +
    + + View all + + +
    +
    + {#each newsroom.docs as post (post.id)} + + {/each} +
    +
    + {/if} +
    +
    {#if favorites.current.length === 0} diff --git a/src/routes/newsroom/+error.svelte b/src/routes/newsroom/+error.svelte new file mode 100644 index 000000000..184f4f723 --- /dev/null +++ b/src/routes/newsroom/+error.svelte @@ -0,0 +1,21 @@ + + +
    +
    + +

    + {page.status === 404 ? "Post not found" : "Something went wrong"} +

    + {#if page.error?.message} +

    {page.error.message}

    + {/if} + Back to newsroom +
    +
    diff --git a/src/routes/newsroom/+page.server.ts b/src/routes/newsroom/+page.server.ts new file mode 100644 index 000000000..538396c53 --- /dev/null +++ b/src/routes/newsroom/+page.server.ts @@ -0,0 +1,29 @@ +import { listPosts } from "$lib/shared/api/cms-api.remote"; +import { POST_TYPES, type PostType } from "$types"; +import { error, isHttpError } from "@sveltejs/kit"; +import type { PageServerLoad } from "./$types"; + +const POSTS_PER_PAGE = 12; + +const isPostType = (value: string | null): value is PostType => value != null && (POST_TYPES as readonly string[]).includes(value); + +export const load: PageServerLoad = async ({ url, setHeaders }) => { + setHeaders({ "cache-control": "public, s-maxage=60, stale-while-revalidate=600" }); + + const rawPage = url.searchParams.get("page"); + const parsed = rawPage == null ? 1 : Number.parseInt(rawPage, 10); + const page = Number.isFinite(parsed) && parsed >= 1 ? parsed : 1; + + const rawType = url.searchParams.get("type"); + const type = isPostType(rawType) ? rawType : undefined; + + try { + const result = await listPosts({ page, limit: POSTS_PER_PAGE, type }); + if (result.totalPages > 0 && page > result.totalPages) error(404, "Page not found"); + return { ...result, type }; + } catch (e) { + if (isHttpError(e)) throw e; + console.error("Failed to list posts from CMS:", e); + error(503, "Newsroom is temporarily unavailable"); + } +}; diff --git a/src/routes/newsroom/+page.svelte b/src/routes/newsroom/+page.svelte new file mode 100644 index 000000000..30d1601b4 --- /dev/null +++ b/src/routes/newsroom/+page.svelte @@ -0,0 +1,65 @@ + + + + +
    +
    +
    +

    Newsroom

    +

    Latest announcements and updates from the SkyCrypt team.

    +
    +
    + + +
    +
    + + {#if data.docs.length === 0} +
    +

    No posts yet

    +

    + {data.type ? `No ${POST_TYPE_LABELS[data.type].toLowerCase()} posts in this category.` : "Check back soon for announcements and updates."} +

    +
    + {:else} +
    + {#each data.docs as post (post.id)} + + {/each} +
    + + {#if data.totalPages > 1} +
    + +
    + {/if} + {/if} +
    diff --git a/src/routes/newsroom/[slug]/+page.server.ts b/src/routes/newsroom/[slug]/+page.server.ts new file mode 100644 index 000000000..8dc6dc386 --- /dev/null +++ b/src/routes/newsroom/[slug]/+page.server.ts @@ -0,0 +1,40 @@ +import { env as envPrivate } from "$env/dynamic/private"; +import { getPostBySlug, getPostBySlugDraft } from "$lib/shared/api/cms-api.remote"; +import { error, isHttpError } from "@sveltejs/kit"; +import type { PageServerLoad } from "./$types"; + +const constantTimeEqual = (a: string, b: string): boolean => { + if (a.length !== b.length) return false; + let diff = 0; + for (let i = 0; i < a.length; i++) diff |= a.charCodeAt(i) ^ b.charCodeAt(i); + return diff === 0; +}; + +export const load: PageServerLoad = async ({ params, url, setHeaders }) => { + const preview = url.searchParams.get("preview") === "1"; + const token = url.searchParams.get("token") ?? ""; + + if (preview) { + const expected = envPrivate.CMS_PREVIEW_TOKEN; + if (!expected || !constantTimeEqual(token, expected)) error(404, "Not found"); + setHeaders({ "cache-control": "no-store" }); + try { + const post = await getPostBySlugDraft({ slug: params.slug }); + return { post, preview: true }; + } catch (e) { + if (isHttpError(e)) throw e; + console.error("Failed to fetch draft from CMS:", e); + error(503, "Newsroom is temporarily unavailable"); + } + } + + setHeaders({ "cache-control": "public, s-maxage=60, stale-while-revalidate=600" }); + try { + const post = await getPostBySlug({ slug: params.slug }); + return { post, preview: false }; + } catch (e) { + if (isHttpError(e)) throw e; + console.error("Failed to fetch post from CMS:", e); + error(503, "Newsroom is temporarily unavailable"); + } +}; diff --git a/src/routes/newsroom/[slug]/+page.svelte b/src/routes/newsroom/[slug]/+page.svelte new file mode 100644 index 000000000..c5c5ef752 --- /dev/null +++ b/src/routes/newsroom/[slug]/+page.svelte @@ -0,0 +1,120 @@ + + + + +
    + + + Newsroom + + + {#if data.preview} +
    Draft preview — not visible to public
    + {/if} + + {#if heroSrc} +
    + {heroAlt} +
    + {/if} + +
    +
    + + {#if post.featured} + + + Featured + + {/if} +
    +

    {post.title}

    +
    + + {#if author.mcUuid} + + {/if} + {initials} + +
    + {displayName} + +
    +
    + {#if post.tags && post.tags.length > 0} +
    + {#each post.tags as tag (tag)} + #{tag} + {/each} +
    + {/if} +
    + +
    *:first-child]:mt-0 [&>*:last-child]:mb-0", containerClass)}> + +
    +
    diff --git a/src/routes/sitemap.xml/+server.ts b/src/routes/sitemap.xml/+server.ts index 9aee9bab3..2b936100e 100644 --- a/src/routes/sitemap.xml/+server.ts +++ b/src/routes/sitemap.xml/+server.ts @@ -1,12 +1,13 @@ +import { listPosts } from "$lib/shared/api/cms-api.remote"; import { getContributors } from "$routes/contributors.remote"; import type { RequestHandler } from "@sveltejs/kit"; import * as sitemap from "super-sitemap"; const BASE_URL = "https://sky.shiiyu.moe"; +const postSlugs = new Set(); +const statsPaths = new Set(); export const GET: RequestHandler = async () => { - const statsPaths = new Set(); - try { const contributors = await getContributors(); @@ -19,8 +20,22 @@ export const GET: RequestHandler = async () => { console.error("Failed to generate contributor sitemap entries", error); } + try { + const { docs: posts } = await listPosts({}); + for (const post of posts) { + if (post.slug) { + postSlugs.add(post.slug); + } + } + } catch (error) { + console.error("Failed to generate newsroom sitemap entries", error); + } + return sitemap.response({ origin: BASE_URL, + paramValues: { + "/newsroom/[slug]": [...postSlugs] + }, additionalPaths: [...statsPaths], excludeRoutePatterns: ["^/api/.*", "^/stats.*", "^/login.*", "(protected)", "(admin)"], headers: { diff --git a/svelte.config.js b/svelte.config.js index f371cbd6b..3522475ea 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -32,10 +32,11 @@ const config = { "script-src": ["self", "unsafe-inline"], "worker-src": ["self", "blob:"], "style-src": ["self", "unsafe-inline", "https://fonts.googleapis.com"], - "img-src": ["self", "data:", "https://textures.minecraft.net", "http://localhost:8080", "https://cupcake.shiiyu.moe", "https://sky.shiiyu.moe", "https://nmsr.nickac.dev"], - "connect-src": ["self", "https://mowojang.matdoes.dev", "https://mowojang.seraph.si", "http://localhost:8080", "https://cupcake.shiiyu.moe", "https://sky.shiiyu.moe"], + "img-src": ["self", "data:", "https://textures.minecraft.net", "http://localhost:8080", "https://cupcake.shiiyu.moe", "https://sky.shiiyu.moe", "https://nmsr.nickac.dev", "https://cms.shiiyu.moe", "http://localhost:3000"], + "connect-src": ["self", "https://mowojang.matdoes.dev", "https://mowojang.seraph.si", "http://localhost:8080", "https://cupcake.shiiyu.moe", "https://sky.shiiyu.moe", "https://cms.shiiyu.moe", "http://localhost:3000"], "font-src": ["self", "https://fonts.gstatic.com"], - "frame-ancestors": ["self"] + "frame-ancestors": ["self", "https://cms.shiiyu.moe", "http://localhost:3000"], + "frame-src": ["self"] } }, version: { From c2b599e7e729a61d029f4998f736ae3fa1f0571d Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Fri, 5 Jun 2026 02:07:31 +0200 Subject: [PATCH 11/34] feat(newsroom): add new post notifications --- .changeset/bright-posts-wink.md | 5 + src/context/index.ts | 1 + .../newsroom-notifications.svelte.spec.ts | 151 ++++++++++++++++++ src/context/newsroom-notifications.svelte.ts | 133 +++++++++++++++ .../newsroom/NewPostsNotifier.svelte | 51 ++++++ .../components/newsroom/NewPostsToast.svelte | 72 +++++++++ src/lib/shared/api/cms-api.remote.ts | 11 ++ src/routes/+layout.svelte | 10 +- src/routes/newsroom/+page.svelte | 9 +- src/routes/newsroom/[slug]/+page.svelte | 10 +- 10 files changed, 449 insertions(+), 4 deletions(-) create mode 100644 .changeset/bright-posts-wink.md create mode 100644 src/context/newsroom-notifications.svelte.spec.ts create mode 100644 src/context/newsroom-notifications.svelte.ts create mode 100644 src/lib/components/newsroom/NewPostsNotifier.svelte create mode 100644 src/lib/components/newsroom/NewPostsToast.svelte diff --git a/.changeset/bright-posts-wink.md b/.changeset/bright-posts-wink.md new file mode 100644 index 000000000..e3e582a7e --- /dev/null +++ b/.changeset/bright-posts-wink.md @@ -0,0 +1,5 @@ +--- +"skycrypt-frontend": minor +--- + +Add local newsroom notifications for new CMS posts. diff --git a/src/context/index.ts b/src/context/index.ts index 57337de2a..3888bd7b4 100644 --- a/src/context/index.ts +++ b/src/context/index.ts @@ -1,6 +1,7 @@ export * from "./createContext.svelte"; export * from "./favorites.svelte"; export * from "./internal.svelte"; +export * from "./newsroom-notifications.svelte"; export * from "./packs.svelte"; export * from "./preferences.svelte"; export * from "./searches.svelte"; diff --git a/src/context/newsroom-notifications.svelte.spec.ts b/src/context/newsroom-notifications.svelte.spec.ts new file mode 100644 index 000000000..ccf547270 --- /dev/null +++ b/src/context/newsroom-notifications.svelte.spec.ts @@ -0,0 +1,151 @@ +import type { Post } from "$types"; +import { flushSync, untrack } from "svelte"; +import { afterEach, beforeEach, describe, it } from "vitest"; +import { NewsroomNotificationsContext } from "./newsroom-notifications.svelte"; + +const post = (id: string, publishedAt: string | null = `2026-01-${id.padStart(2, "0")}T00:00:00.000Z`): Post => ({ + id, + title: `Post ${id}`, + slug: `post-${id}`, + excerpt: null, + type: "news", + tags: null, + featured: false, + heroImage: null, + body: null, + publishedAt, + author: "author", + updatedAt: publishedAt ?? "2026-01-01T00:00:00.000Z", + createdAt: publishedAt ?? "2026-01-01T00:00:00.000Z" +}); + +describe("NewsroomNotificationsContext", () => { + beforeEach(() => { + localStorage.clear(); + }); + + afterEach(() => { + localStorage.clear(); + }); + + it("starts with zero unread posts", ({ expect }) => { + const cleanup = $effect.root(() => { + const notifications = new NewsroomNotificationsContext(); + + untrack(() => { + expect(notifications.current.seenPostIds).toEqual([]); + expect(notifications.current.lastSeenPublishedAt).toBeNull(); + expect(notifications.unreadCount).toBe(0); + expect(notifications.newestUnseen).toBeNull(); + }); + }); + + cleanup(); + }); + + it("marks latest posts as unseen until they are seen", ({ expect }) => { + const cleanup = $effect.root(() => { + const notifications = new NewsroomNotificationsContext(); + const posts = [post("1"), post("2")]; + + untrack(() => { + notifications.setLatestPosts(posts); + expect(notifications.unreadCount).toBe(2); + expect(notifications.unseenPosts.map((item) => item.id)).toEqual(["2", "1"]); + }); + }); + + cleanup(); + }); + + it("markPostSeen removes exactly one post from unread state", ({ expect }) => { + const cleanup = $effect.root(() => { + const notifications = new NewsroomNotificationsContext(); + const posts = [post("1"), post("2")]; + + untrack(() => { + notifications.setLatestPosts(posts); + notifications.markPostSeen(posts[0]); + flushSync(); + + expect(notifications.unreadCount).toBe(1); + expect(notifications.unseenPosts[0].id).toBe("2"); + expect(notifications.current.seenPostIds).toEqual(["1"]); + }); + }); + + cleanup(); + }); + + it("markAllSeen clears all currently tracked posts", ({ expect }) => { + const cleanup = $effect.root(() => { + const notifications = new NewsroomNotificationsContext(); + const posts = [post("1"), post("2")]; + + untrack(() => { + notifications.setLatestPosts(posts); + notifications.markAllSeen(); + flushSync(); + + expect(notifications.unreadCount).toBe(0); + expect(notifications.current.seenPostIds).toEqual(["1", "2"]); + }); + }); + + cleanup(); + }); + + it("de-duplicates seen ids", ({ expect }) => { + const cleanup = $effect.root(() => { + const notifications = new NewsroomNotificationsContext(); + const item = post("1"); + + untrack(() => { + notifications.markPostSeen(item); + notifications.markPostSeen(item); + flushSync(); + + expect(notifications.current.seenPostIds).toEqual(["1"]); + }); + }); + + cleanup(); + }); + + it("bounds seen ids to 100", ({ expect }) => { + const cleanup = $effect.root(() => { + const notifications = new NewsroomNotificationsContext(); + const posts = Array.from({ length: 101 }, (_, index) => post(String(index + 1))); + + untrack(() => { + notifications.markAllSeen(posts); + flushSync(); + + expect(notifications.current.seenPostIds).toHaveLength(100); + expect(notifications.current.seenPostIds[0]).toBe("2"); + expect(notifications.current.seenPostIds.at(-1)).toBe("101"); + }); + }); + + cleanup(); + }); + + it("shows newer posts after previously dismissing current latest posts", ({ expect }) => { + const cleanup = $effect.root(() => { + const notifications = new NewsroomNotificationsContext(); + const firstPosts = [post("1"), post("2")]; + const newerPost = post("3", "2026-02-01T00:00:00.000Z"); + + untrack(() => { + notifications.setLatestPosts(firstPosts); + notifications.markAllSeen(); + notifications.setLatestPosts([newerPost, ...firstPosts]); + + expect(notifications.unreadCount).toBe(1); + expect(notifications.newestUnseen?.id).toBe("3"); + }); + }); + + cleanup(); + }); +}); diff --git a/src/context/newsroom-notifications.svelte.ts b/src/context/newsroom-notifications.svelte.ts new file mode 100644 index 000000000..598153428 --- /dev/null +++ b/src/context/newsroom-notifications.svelte.ts @@ -0,0 +1,133 @@ +import type { Post } from "$types"; +import { PersistedState } from "runed"; +import { createContext } from "svelte"; + +export interface SeenNewsroomPost { + id: string; + slug: string; + publishedAt: string | null; +} + +export interface NewsroomNotificationsData { + seenPostIds: string[]; + lastSeenPublishedAt: string | null; +} + +const STORAGE_KEY = "skycryptNewsroomNotifications"; +const MAX_SEEN_POST_IDS = 100; + +const defaultData = (): NewsroomNotificationsData => ({ + seenPostIds: [], + lastSeenPublishedAt: null +}); + +const isValidDate = (value: string | null | undefined): value is string => { + if (!value) return false; + return Number.isFinite(Date.parse(value)); +}; + +const newestDate = (current: string | null, next: string | null | undefined): string | null => { + if (!isValidDate(next)) return current; + if (!isValidDate(current)) return next; + return Date.parse(next) > Date.parse(current) ? next : current; +}; + +const sanitizeData = (value: unknown): NewsroomNotificationsData => { + if (!value || typeof value !== "object") return defaultData(); + + const data = value as Partial; + const seenPostIds = Array.isArray(data.seenPostIds) ? data.seenPostIds.filter((id): id is string => typeof id === "string" && id.length > 0) : []; + return { + seenPostIds: seenPostIds.filter((id, index) => seenPostIds.indexOf(id) === index).slice(-MAX_SEEN_POST_IDS), + lastSeenPublishedAt: isValidDate(data.lastSeenPublishedAt) ? data.lastSeenPublishedAt : null + }; +}; + +export class NewsroomNotificationsContext { + #data = new PersistedState(STORAGE_KEY, defaultData()); + #latestPosts: Post[] = $state.raw([]); + + get current() { + return sanitizeData(this.#data.current); + } + + set current(value: NewsroomNotificationsData) { + this.#data.current = sanitizeData(value); + } + + get unseenPosts() { + return this.getUnseenPosts(); + } + + get unreadCount() { + return this.unseenPosts.length; + } + + get newestUnseen() { + return this.unseenPosts[0] ?? null; + } + + getUnseenPosts(posts: Post[] = this.#latestPosts) { + const seen = this.current.seenPostIds; + return posts + .filter((post) => !seen.includes(post.id)) + .map((post, index) => ({ post, index })) + .sort((a, b) => { + const aTime = isValidDate(a.post.publishedAt) ? Date.parse(a.post.publishedAt) : null; + const bTime = isValidDate(b.post.publishedAt) ? Date.parse(b.post.publishedAt) : null; + + if (aTime !== null && bTime !== null && aTime !== bTime) return bTime - aTime; + if (aTime !== null && bTime === null) return -1; + if (aTime === null && bTime !== null) return 1; + return a.index - b.index; + }) + .map(({ post }) => post); + } + + getUnreadCount(posts: Post[] = this.#latestPosts) { + return this.getUnseenPosts(posts).length; + } + + getNewestUnseen(posts: Post[] = this.#latestPosts) { + return this.getUnseenPosts(posts)[0] ?? null; + } + + setLatestPosts(posts: Post[]) { + this.#latestPosts = posts; + } + + markPostSeen(post: Pick) { + const current = this.current; + const seenPostIds = current.seenPostIds.includes(post.id) ? current.seenPostIds : [...current.seenPostIds, post.id]; + + this.current = { + seenPostIds: seenPostIds.slice(-MAX_SEEN_POST_IDS), + lastSeenPublishedAt: newestDate(current.lastSeenPublishedAt, post.publishedAt) + }; + } + + markAllSeen(posts: Pick[] = this.#latestPosts) { + let lastSeenPublishedAt = this.current.lastSeenPublishedAt; + const seenPostIds = [...this.current.seenPostIds]; + + for (const post of posts) { + if (!seenPostIds.includes(post.id)) seenPostIds.push(post.id); + lastSeenPublishedAt = newestDate(lastSeenPublishedAt, post.publishedAt); + } + + this.current = { + seenPostIds: seenPostIds.slice(-MAX_SEEN_POST_IDS), + lastSeenPublishedAt + }; + } +} + +const [getNewsroomNotifications, setNewsroomNotifications] = createContext(); + +function initNewsroomNotifications() { + const notifications = new NewsroomNotificationsContext(); + setNewsroomNotifications(notifications); + return notifications; +} + +export { getNewsroomNotifications, initNewsroomNotifications }; diff --git a/src/lib/components/newsroom/NewPostsNotifier.svelte b/src/lib/components/newsroom/NewPostsNotifier.svelte new file mode 100644 index 000000000..11c243214 --- /dev/null +++ b/src/lib/components/newsroom/NewPostsNotifier.svelte @@ -0,0 +1,51 @@ + diff --git a/src/lib/components/newsroom/NewPostsToast.svelte b/src/lib/components/newsroom/NewPostsToast.svelte new file mode 100644 index 000000000..560c8971a --- /dev/null +++ b/src/lib/components/newsroom/NewPostsToast.svelte @@ -0,0 +1,72 @@ + + +
    +
    + {#if thumb && newestUnseen.heroImage} + + + + + + + {:else} + + {/if} + +
    + + {#if newestUnseen.excerpt} +

    {newestUnseen.excerpt}

    + {/if} + {#if publishedDate} + + {/if} +
    +
    + +
    + Close + {#if newestUnseen.slug} + Read + {/if} +
    +
    diff --git a/src/lib/shared/api/cms-api.remote.ts b/src/lib/shared/api/cms-api.remote.ts index 3477b0814..86092d32d 100644 --- a/src/lib/shared/api/cms-api.remote.ts +++ b/src/lib/shared/api/cms-api.remote.ts @@ -35,6 +35,17 @@ export const listPosts = query( } ); +/** List the latest published posts for local unread notifications. */ +export const listLatestPostsForNotifications = query( + z.object({ + limit: z.number().int().min(1).max(10).default(5) + }), + async ({ limit }) => { + const { data } = await listPostsRequest(asListParams({ page: 1, limit, depth: 1, sort: "-publishedAt", "where[_status][equals]": "published" })); + return data as PostListResponse; + } +); + /** Get a single published post by slug. */ export const getPostBySlug = query(z.object({ slug: z.string() }), async ({ slug }) => { const { data } = await listPostsRequest(asListParams({ limit: 1, depth: 2, "where[slug][equals]": slug, "where[_status][equals]": "published" })); diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index edf432b50..b3cd88585 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -2,12 +2,14 @@ import { browser, dev } from "$app/environment"; import { beforeNavigate, replaceState } from "$app/navigation"; import { page, updated } from "$app/state"; - import { initDisabledPacks, initFavorites, initInternalState, initPreferences, initRecentSearches, initTheme, PacksContext, setHoverContext, setMobileContext, setPacksContext } from "$ctx"; + import { initDisabledPacks, initFavorites, initInternalState, initNewsroomNotifications, initPreferences, initRecentSearches, initTheme, PacksContext, setHoverContext, setMobileContext, setPacksContext } from "$ctx"; import Header from "$lib/components/header/Header.svelte"; import { CommandPalette, JsonLd, PerformanceMode } from "$lib/components/misc"; + import NewPostsNotifier from "$lib/components/newsroom/NewPostsNotifier.svelte"; import ThemeEditor from "$lib/components/theme-editor/ThemeEditor.svelte"; import { IsHover } from "$lib/hooks/is-hover.svelte"; import { IsMobile } from "$lib/hooks/is-mobile.svelte"; + import { listLatestPostsForNotifications } from "$lib/shared/api/cms-api.remote"; import { getPacks } from "$lib/shared/api/skycrypt-api.remote"; import { parseThemeFromURL } from "$lib/shared/themes/sharing"; import { cn } from "$lib/shared/utils"; @@ -86,6 +88,7 @@ initDisabledPacks(); initFavorites(); + initNewsroomNotifications(); initRecentSearches(); setMobileContext(isMobile); setHoverContext(isHover); @@ -229,6 +232,11 @@
    + + {#snippet failed()}{/snippet} + {@const latestNewsroom = await listLatestPostsForNotifications({ limit: 5 })} + + {@render children()} diff --git a/src/routes/newsroom/+page.svelte b/src/routes/newsroom/+page.svelte index 30d1601b4..1d757179f 100644 --- a/src/routes/newsroom/+page.svelte +++ b/src/routes/newsroom/+page.svelte @@ -1,6 +1,6 @@ diff --git a/src/routes/newsroom/[slug]/+page.svelte b/src/routes/newsroom/[slug]/+page.svelte index c5c5ef752..f6e8c02ca 100644 --- a/src/routes/newsroom/[slug]/+page.svelte +++ b/src/routes/newsroom/[slug]/+page.svelte @@ -1,5 +1,6 @@ Date: Fri, 5 Jun 2026 00:15:59 +0000 Subject: [PATCH 12/34] chore: version packages (beta) [skip ci] --- .changeset/pre.json | 4 +++- CHANGELOG.md | 8 ++++++++ package.json | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 0c4d1a7a9..794f5d0ca 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -5,6 +5,8 @@ "skycrypt-frontend": "3.6.2" }, "changesets": [ - "crisp-tires-hang" + "bright-posts-wink", + "crisp-tires-hang", + "fuzzy-newsrooms-smile" ] } diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d89c8efe..b403ed1e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 3.7.0-beta.1 + +### Minor Changes + +- Add local newsroom notifications for new CMS posts. ([`c2b599e`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/c2b599e7e729a61d029f4998f736ae3fa1f0571d)) + +- Add the CMS-backed newsroom with post listing, article pages, previews, and sitemap entries. ([`a74b033`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/a74b0339f66196ae719dbc19c06ab704995e502c)) + ## 3.7.0-beta.0 ### Minor Changes diff --git a/package.json b/package.json index cd97dec4a..434d9b5b8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "skycrypt-frontend", - "version": "3.7.0-beta.0", + "version": "3.7.0-beta.1", "private": true, "type": "module", "repository": { From 31d283ec8c027cb27583a8bb9c026bacf01759a4 Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Fri, 5 Jun 2026 03:06:02 +0200 Subject: [PATCH 13/34] fix: migrate remote query calls --- .changeset/modern-queries-wait.md | 5 ++ package.json | 2 +- pnpm-lock.yaml | 82 +++++++++---------- pnpm-workspace.yaml | 1 + src/lib/components/misc/CommandPalette.svelte | 20 ++--- src/routes/+page.svelte | 2 +- 6 files changed, 59 insertions(+), 53 deletions(-) create mode 100644 .changeset/modern-queries-wait.md diff --git a/.changeset/modern-queries-wait.md b/.changeset/modern-queries-wait.md new file mode 100644 index 000000000..73a13b3d3 --- /dev/null +++ b/.changeset/modern-queries-wait.md @@ -0,0 +1,5 @@ +--- +"skycrypt-frontend": patch +--- + +Migrate remote query search calls to the current SvelteKit API. diff --git a/package.json b/package.json index 434d9b5b8..fe6534c1e 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "@oslojs/encoding": "^1.1.0", "@playwright/test": "^1.60.0", "@sveltejs/adapter-node": "^5.5.4", - "@sveltejs/kit": "^2.60.1", + "@sveltejs/kit": "^2.63.0", "@sveltejs/vite-plugin-svelte": "^7.1.2", "@svitejs/changesets-changelog-github-compact": "^1.2.0", "@tailwindcss/vite": "^4.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7e6b777f8..d839bad31 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@sentry/sveltekit': specifier: ^10.53.1 - version: 10.53.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(rollup@4.60.4)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + version: 10.53.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(rollup@4.60.4)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) culori: specifier: ^4.0.2 version: 4.0.2 @@ -23,7 +23,7 @@ importers: devDependencies: '@better-auth/api-key': specifier: ^1.6.11 - version: 1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(better-auth@1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7)) + version: 1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(better-auth@1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7)) '@changesets/cli': specifier: ^2.31.0 version: 2.31.0(@types/node@25.9.1) @@ -71,10 +71,10 @@ importers: version: 1.60.0 '@sveltejs/adapter-node': specifier: ^5.5.4 - version: 5.5.4(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))) + version: 5.5.4(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))) '@sveltejs/kit': - specifier: ^2.60.1 - version: 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + specifier: ^2.63.0 + version: 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) '@sveltejs/vite-plugin-svelte': specifier: ^7.1.2 version: 7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) @@ -110,13 +110,13 @@ importers: version: 4.1.7(vitest@4.1.7) auth: specifier: ^1.6.11 - version: 1.6.11(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(better-call@1.3.5(zod@4.4.3))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(jose@6.2.3)(kysely@0.28.17)(magicast@0.5.3)(nanostores@1.3.0)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) + version: 1.6.11(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(better-call@1.3.5(zod@4.4.3))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(jose@6.2.3)(kysely@0.28.17)(magicast@0.5.3)(nanostores@1.3.0)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) better-auth: specifier: ^1.6.11 - version: 1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) + version: 1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) bits-ui: specifier: ^2.18.1 - version: 2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + version: 2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -146,7 +146,7 @@ importers: version: 3.17.1(eslint@10.4.0(jiti@2.7.0))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) formsnap: specifier: ^2.0.1 - version: 2.0.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)) + version: 2.0.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)) globals: specifier: ^17.6.0 version: 17.6.0 @@ -182,7 +182,7 @@ importers: version: 9.3.0 runed: specifier: ^0.37.1 - version: 0.37.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(zod@4.4.3) + version: 0.37.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(zod@4.4.3) satori-html: specifier: ^0.3.2 version: 0.3.2 @@ -212,7 +212,7 @@ importers: version: 4.0.0-rc.2(svelte@5.55.9(@typescript-eslint/types@8.59.4)) sveltekit-superforms: specifier: ^2.30.1 - version: 2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3) + version: 2.30.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3) tailwind-merge: specifier: ^3.6.0 version: 3.6.0 @@ -2241,8 +2241,8 @@ packages: peerDependencies: '@sveltejs/kit': ^2.4.0 - '@sveltejs/kit@2.60.1': - resolution: {integrity: sha512-mQjlkNo+rJvpln7V2IGY2j99BqhcFbS4UN0AQNKNYfhBAFZTuCDAdW3a1sgf330mvtNvsBXn3HpAhcmvdJTcIQ==} + '@sveltejs/kit@2.63.0': + resolution: {integrity: sha512-1DrR7vQ9brXLrNE2sLtFXApwr7AUXPfpbIFYc+CQRf2+iURaZbXGU+7TG/RLr+9fdFkoRdyCAVUOHCChw11LFA==} engines: {node: '>=18.13'} hasBin: true peerDependencies: @@ -2269,8 +2269,8 @@ packages: engines: {node: ^14.13.1 || ^16.0.0 || >=18} deprecated: unmaintained - '@swc/helpers@0.5.21': - resolution: {integrity: sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==} + '@swc/helpers@0.5.23': + resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} '@tailwindcss/node@4.3.0': resolution: {integrity: sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==} @@ -5227,11 +5227,11 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} - '@better-auth/api-key@1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(better-auth@1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7))': + '@better-auth/api-key@1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(better-auth@1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7))': dependencies: '@better-auth/core': 1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 - better-auth: 1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) + better-auth: 1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) zod: 4.4.3 '@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0)': @@ -6065,7 +6065,7 @@ snapshots: '@internationalized/date@3.12.1': dependencies: - '@swc/helpers': 0.5.21 + '@swc/helpers': 0.5.23 '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -6865,7 +6865,7 @@ snapshots: magic-string: 0.30.21 svelte: 5.55.9(@typescript-eslint/types@8.59.4) - '@sentry/sveltekit@10.53.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(rollup@4.60.4)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))': + '@sentry/sveltekit@10.53.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(rollup@4.60.4)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))': dependencies: '@sentry/cloudflare': 10.53.1 '@sentry/core': 10.53.1 @@ -6873,7 +6873,7 @@ snapshots: '@sentry/svelte': 10.53.1(svelte@5.55.9(@typescript-eslint/types@8.59.4)) '@sentry/vite-plugin': 5.3.0(rollup@4.60.4) '@sveltejs/acorn-typescript': 1.0.10(acorn@8.16.0) - '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) acorn: 8.16.0 magic-string: 0.30.21 sorcery: 1.0.0 @@ -6941,15 +6941,15 @@ snapshots: dependencies: acorn: 8.16.0 - '@sveltejs/adapter-node@5.5.4(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))': + '@sveltejs/adapter-node@5.5.4(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))': dependencies: '@rollup/plugin-commonjs': 29.0.2(rollup@4.60.4) '@rollup/plugin-json': 6.1.0(rollup@4.60.4) '@rollup/plugin-node-resolve': 16.0.3(rollup@4.60.4) - '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) rollup: 4.60.4 - '@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))': + '@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))': dependencies: '@standard-schema/spec': 1.1.0 '@sveltejs/acorn-typescript': 1.0.10(acorn@8.16.0) @@ -6986,7 +6986,7 @@ snapshots: transitivePeerDependencies: - encoding - '@swc/helpers@0.5.21': + '@swc/helpers@0.5.23': dependencies: tslib: 2.8.1 @@ -7497,7 +7497,7 @@ snapshots: estree-walker: 3.0.3 js-tokens: 10.0.0 - auth@1.6.11(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(better-call@1.3.5(zod@4.4.3))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(jose@6.2.3)(kysely@0.28.17)(magicast@0.5.3)(nanostores@1.3.0)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7): + auth@1.6.11(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(better-call@1.3.5(zod@4.4.3))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(jose@6.2.3)(kysely@0.28.17)(magicast@0.5.3)(nanostores@1.3.0)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7): dependencies: '@babel/core': 7.29.0 '@babel/preset-react': 7.28.5(@babel/core@7.29.0) @@ -7507,7 +7507,7 @@ snapshots: '@better-auth/utils': 0.4.0 '@clack/prompts': 0.11.0 '@mrleebo/prisma-ast': 0.13.1 - better-auth: 1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) + better-auth: 1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) c12: 3.3.4(magicast@0.5.3) chalk: 5.6.2 commander: 12.1.0 @@ -7555,7 +7555,7 @@ snapshots: baseline-browser-mapping@2.10.31: {} - better-auth@1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7): + better-auth@1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7): dependencies: '@better-auth/core': 1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/drizzle-adapter': 1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9)) @@ -7575,7 +7575,7 @@ snapshots: nanostores: 1.3.0 zod: 4.4.3 optionalDependencies: - '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) drizzle-kit: 0.31.10 drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9) svelte: 5.55.9(@typescript-eslint/types@8.59.4) @@ -7597,15 +7597,15 @@ snapshots: dependencies: is-windows: 1.0.2 - bits-ui@2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): + bits-ui@2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: '@floating-ui/core': 1.7.5 '@floating-ui/dom': 1.7.6 '@internationalized/date': 3.12.1 esm-env: 1.2.2 - runed: 0.35.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + runed: 0.35.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) svelte: 5.55.9(@typescript-eslint/types@8.59.4) - svelte-toolbelt: 0.10.6(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) tabbable: 6.4.0 transitivePeerDependencies: - '@sveltejs/kit' @@ -8185,11 +8185,11 @@ snapshots: flatted@3.4.2: {} - formsnap@2.0.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)): + formsnap@2.0.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)): dependencies: svelte: 5.55.9(@typescript-eslint/types@8.59.4) svelte-toolbelt: 0.5.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)) - sveltekit-superforms: 2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3) + sveltekit-superforms: 2.30.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3) forwarded-parse@2.1.2: {} @@ -9023,23 +9023,23 @@ snapshots: esm-env: 1.2.2 svelte: 5.55.9(@typescript-eslint/types@8.59.4) - runed@0.35.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): + runed@0.35.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 svelte: 5.55.9(@typescript-eslint/types@8.59.4) optionalDependencies: - '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) - runed@0.37.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(zod@4.4.3): + runed@0.37.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(zod@4.4.3): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 svelte: 5.55.9(@typescript-eslint/types@8.59.4) optionalDependencies: - '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) zod: 4.4.3 sade@1.8.1: @@ -9197,10 +9197,10 @@ snapshots: dependencies: svelte: 5.55.9(@typescript-eslint/types@8.59.4) - svelte-toolbelt@0.10.6(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): + svelte-toolbelt@0.10.6(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: clsx: 2.1.1 - runed: 0.35.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + runed: 0.35.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) style-to-object: 1.0.14 svelte: 5.55.9(@typescript-eslint/types@8.59.4) transitivePeerDependencies: @@ -9247,9 +9247,9 @@ snapshots: transitivePeerDependencies: - '@typescript-eslint/types' - sveltekit-superforms@2.30.1(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3): + sveltekit-superforms@2.30.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3): dependencies: - '@sveltejs/kit': 2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) devalue: 5.8.1 memoize-weak: 1.0.2 svelte: 5.55.9(@typescript-eslint/types@8.59.4) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index f1846764b..608ecf7ba 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -17,3 +17,4 @@ minimumReleaseAgeExclude: - "@takumi-rs/helpers@1.4.0" - "@takumi-rs/wasm@1.4.0" - takumi-js@1.4.0 + - "@sveltejs/kit@2.63.0" diff --git a/src/lib/components/misc/CommandPalette.svelte b/src/lib/components/misc/CommandPalette.svelte index 4d680e6a4..0d746c29d 100644 --- a/src/lib/components/misc/CommandPalette.svelte +++ b/src/lib/components/misc/CommandPalette.svelte @@ -53,9 +53,15 @@ return score; } + function setCommandOpen(open: boolean) { + internalState.openCommand = open; + if (!open) { + resetSearchState(); + } + } + function closeCommand() { - internalState.openCommand = false; - resetSearchState(); + setCommandOpen(false); } async function submitSearch() { @@ -68,7 +74,7 @@ submittedSearchError = undefined; try { - const response = await searchUser({ username }).run(); + const response = await searchUser({ username }); closeCommand(); await goto(resolve("/stats/[ign]", { ign: response.username ?? "" })); } catch (err) { @@ -86,15 +92,9 @@ void submitSearch(); } } - - $effect(() => { - if (!internalState.openCommand) { - resetSearchState(); - } - }); - + internalState.openCommand, setCommandOpen}> {#snippet child({ props, open })} diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 5520ecdd2..d2518fee0 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -94,7 +94,7 @@ submittedSearchError = undefined; try { - const response = await searchUser({ username }).run(); + const response = await searchUser({ username }); await goto(resolve("/stats/[ign]", { ign: response.username ?? "" })); } catch (err) { submittedSearchError = getErrorMessage(err); From 0ae985e966ec97090b050f4d4607f516359bedd5 Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Fri, 5 Jun 2026 03:55:31 +0200 Subject: [PATCH 14/34] refactor(newsroom): render rich text with payload html --- .changeset/rich-newsrooms-render.md | 5 + package.json | 1 + pnpm-lock.yaml | 2847 ++++++++++++++++- pnpm-workspace.yaml | 1 + .../newsroom/lexical/LexicalRenderer.svelte | 43 - .../newsroom/lexical/ModifierWrapper.svelte | 23 - .../newsroom/lexical/TextRenderer.svelte | 12 - .../lexical/elements/Blockquote.svelte | 10 - .../newsroom/lexical/elements/Heading.svelte | 22 - .../newsroom/lexical/elements/Link.svelte | 15 - .../newsroom/lexical/elements/List.svelte | 15 - .../newsroom/lexical/elements/ListItem.svelte | 23 - .../lexical/elements/Paragraph.svelte | 10 - .../lexical/elements/Relationship.svelte | 20 - .../newsroom/lexical/elements/RichText.svelte | 95 +- .../newsroom/lexical/elements/Upload.svelte | 18 - .../newsroom/lexical/inline/Bold.svelte | 7 - .../newsroom/lexical/inline/Code.svelte | 7 - .../newsroom/lexical/inline/Italic.svelte | 7 - .../lexical/inline/Strikethrough.svelte | 7 - .../newsroom/lexical/inline/Underline.svelte | 7 - .../components/newsroom/lexical/lexical.ts | 22 - src/lib/shared/cms/rich-text-html.spec.ts | 203 ++ src/lib/shared/cms/rich-text-html.ts | 161 + src/lib/types/cms.ts | 28 - src/routes/newsroom/[slug]/+page.server.ts | 13 +- src/routes/newsroom/[slug]/+page.svelte | 2 +- 27 files changed, 3243 insertions(+), 381 deletions(-) create mode 100644 .changeset/rich-newsrooms-render.md delete mode 100644 src/lib/components/newsroom/lexical/LexicalRenderer.svelte delete mode 100644 src/lib/components/newsroom/lexical/ModifierWrapper.svelte delete mode 100644 src/lib/components/newsroom/lexical/TextRenderer.svelte delete mode 100644 src/lib/components/newsroom/lexical/elements/Blockquote.svelte delete mode 100644 src/lib/components/newsroom/lexical/elements/Heading.svelte delete mode 100644 src/lib/components/newsroom/lexical/elements/Link.svelte delete mode 100644 src/lib/components/newsroom/lexical/elements/List.svelte delete mode 100644 src/lib/components/newsroom/lexical/elements/ListItem.svelte delete mode 100644 src/lib/components/newsroom/lexical/elements/Paragraph.svelte delete mode 100644 src/lib/components/newsroom/lexical/elements/Relationship.svelte delete mode 100644 src/lib/components/newsroom/lexical/elements/Upload.svelte delete mode 100644 src/lib/components/newsroom/lexical/inline/Bold.svelte delete mode 100644 src/lib/components/newsroom/lexical/inline/Code.svelte delete mode 100644 src/lib/components/newsroom/lexical/inline/Italic.svelte delete mode 100644 src/lib/components/newsroom/lexical/inline/Strikethrough.svelte delete mode 100644 src/lib/components/newsroom/lexical/inline/Underline.svelte delete mode 100644 src/lib/components/newsroom/lexical/lexical.ts create mode 100644 src/lib/shared/cms/rich-text-html.spec.ts create mode 100644 src/lib/shared/cms/rich-text-html.ts diff --git a/.changeset/rich-newsrooms-render.md b/.changeset/rich-newsrooms-render.md new file mode 100644 index 000000000..29c897549 --- /dev/null +++ b/.changeset/rich-newsrooms-render.md @@ -0,0 +1,5 @@ +--- +"skycrypt-frontend": patch +--- + +Render newsroom rich text with Payload's Lexical HTML converter while preserving SkyCrypt-specific links, uploads, checklists, and relationship nodes. diff --git a/package.json b/package.json index fe6534c1e..6d701130d 100644 --- a/package.json +++ b/package.json @@ -115,6 +115,7 @@ "zod": "^4.4.3" }, "dependencies": { + "@payloadcms/richtext-lexical": "^3.85.0", "@sentry/sveltekit": "^10.53.1", "culori": "^4.0.2", "simple-git-hooks": "^2.13.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d839bad31..7d1f6906f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,9 +8,12 @@ importers: .: dependencies: + '@payloadcms/richtext-lexical': + specifier: ^3.85.0 + version: 3.85.0(@faceless-ui/modal@3.0.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@faceless-ui/scroll-info@2.0.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@payloadcms/next@3.85.0(@types/react@19.2.16)(graphql@16.14.1)(monaco-editor@0.55.1)(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(payload@3.85.0(graphql@16.14.1)(typescript@6.0.3))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3))(@types/react@19.2.16)(monaco-editor@0.55.1)(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(payload@3.85.0(graphql@16.14.1)(typescript@6.0.3))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3)(yjs@13.6.31) '@sentry/sveltekit': specifier: ^10.53.1 - version: 10.53.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(rollup@4.60.4)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + version: 10.53.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(rollup@4.60.4)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) culori: specifier: ^4.0.2 version: 4.0.2 @@ -19,11 +22,11 @@ importers: version: 2.13.1 takumi-js: specifier: ^1.4.0 - version: 1.4.0 + version: 1.4.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) devDependencies: '@better-auth/api-key': specifier: ^1.6.11 - version: 1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(better-auth@1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7)) + version: 1.6.11(0e582a5d6ab9944b6670413694128ee5) '@changesets/cli': specifier: ^2.31.0 version: 2.31.0(@types/node@25.9.1) @@ -71,19 +74,19 @@ importers: version: 1.60.0 '@sveltejs/adapter-node': specifier: ^5.5.4 - version: 5.5.4(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))) + version: 5.5.4(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0))) '@sveltejs/kit': specifier: ^2.63.0 - version: 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + version: 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) '@sveltejs/vite-plugin-svelte': specifier: ^7.1.2 - version: 7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + version: 7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) '@svitejs/changesets-changelog-github-compact': specifier: ^1.2.0 version: 1.2.0 '@tailwindcss/vite': specifier: ^4.3.0 - version: 4.3.0(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + version: 4.3.0(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) '@types/culori': specifier: ^4.0.1 version: 4.0.1 @@ -101,7 +104,7 @@ importers: version: 2.1.5 '@vitest/browser-playwright': specifier: ^4.1.7 - version: 4.1.7(playwright@1.60.0)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7) + version: 4.1.7(playwright@1.60.0)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7) '@vitest/coverage-v8': specifier: ^4.1.7 version: 4.1.7(@vitest/browser@4.1.7)(vitest@4.1.7) @@ -110,13 +113,13 @@ importers: version: 4.1.7(vitest@4.1.7) auth: specifier: ^1.6.11 - version: 1.6.11(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(better-call@1.3.5(zod@4.4.3))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(jose@6.2.3)(kysely@0.28.17)(magicast@0.5.3)(nanostores@1.3.0)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) + version: 1.6.11(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(better-call@1.3.5(zod@4.4.3))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(jose@6.2.3)(kysely@0.28.17)(magicast@0.5.3)(nanostores@1.3.0)(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) better-auth: specifier: ^1.6.11 - version: 1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) + version: 1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) bits-ui: specifier: ^2.18.1 - version: 2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + version: 2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -146,7 +149,7 @@ importers: version: 3.17.1(eslint@10.4.0(jiti@2.7.0))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) formsnap: specifier: ^2.0.1 - version: 2.0.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)) + version: 2.0.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)) globals: specifier: ^17.6.0 version: 17.6.0 @@ -182,7 +185,7 @@ importers: version: 9.3.0 runed: specifier: ^0.37.1 - version: 0.37.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(zod@4.4.3) + version: 0.37.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(zod@4.4.3) satori-html: specifier: ^0.3.2 version: 0.3.2 @@ -212,7 +215,7 @@ importers: version: 4.0.0-rc.2(svelte@5.55.9(@typescript-eslint/types@8.59.4)) sveltekit-superforms: specifier: ^2.30.1 - version: 2.30.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3) + version: 2.30.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3) tailwind-merge: specifier: ^3.6.0 version: 3.6.0 @@ -236,10 +239,10 @@ importers: version: 1.0.0-next.7(svelte@5.55.9(@typescript-eslint/types@8.59.4)) vite: specifier: ^8.0.13 - version: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0) + version: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0) vitest: specifier: ^4.1.7 - version: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + version: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(happy-dom@20.10.1)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) vitest-browser-svelte: specifier: ^2.1.1 version: 2.1.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) @@ -249,6 +252,10 @@ importers: packages: + '@apidevtools/json-schema-ref-parser@11.9.3': + resolution: {integrity: sha512-60vepv88RwcJtSHrD6MjIL6Ta3SOYbgfnkHb+ppAVK+o9mXprRtulx7VlRl3lN3bbvysAfCS7WMVfhUYemB0IQ==} + engines: {node: '>= 16'} + '@ark/schema@0.56.0': resolution: {integrity: sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA==} @@ -511,6 +518,9 @@ packages: '@blazediff/core@1.9.1': resolution: {integrity: sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==} + '@borewit/text-codec@0.2.2': + resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} + '@changesets/apply-release-plan@7.1.1': resolution: {integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==} @@ -673,15 +683,29 @@ packages: conventional-commits-parser: optional: true + '@date-fns/tz@1.2.0': + resolution: {integrity: sha512-LBrd7MiJZ9McsOgxqWX7AaxrDjcFVjWH/tIKJd7pnR7McaslGYOP1QmmiBXdJH/H/yLCT+rcQ7FaPBUxRGUtrg==} + '@date-fns/tz@1.4.1': resolution: {integrity: sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==} '@dnd-kit/abstract@0.4.0': resolution: {integrity: sha512-loEEJxKT5oLOLeRBJVTO9qpgvvW/Qq902xO20v1JMbpANuN/NLurUdpxIwNpVz+RtOSyzznnbc7lO7psmOhc9A==} + '@dnd-kit/accessibility@3.1.1': + resolution: {integrity: sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==} + peerDependencies: + react: '>=16.8.0' + '@dnd-kit/collision@0.4.0': resolution: {integrity: sha512-oOHHUkH1h9Vl2m8TwLw/mPHA7Blf+s0PYcRoLNWNBVxDzugJKZo8WdpU58EMu9qkqyQGrR/YTOozGiMPhlqZ5Q==} + '@dnd-kit/core@6.3.1': + resolution: {integrity: sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + '@dnd-kit/dom@0.4.0': resolution: {integrity: sha512-mJDKt0BtlHXetZyrvZXh6++aycleIbYWH/OVC4nlszDh8NvW7q8dfsxFllR5RtLKLcykLaI4o545Figfks/HZQ==} @@ -691,6 +715,18 @@ packages: '@dnd-kit/helpers@0.4.0': resolution: {integrity: sha512-9YOKevD6zOwKVvV4k3fQL//NF+UaN92sfqPpJhT0/7Jq5PLtfD+CTpzmFAjTt5o1qQpFj3xqjWnQl25ooW62wQ==} + '@dnd-kit/modifiers@9.0.0': + resolution: {integrity: sha512-ybiLc66qRGuZoC20wdSSG6pDXFikui/dCNGthxv4Ndy8ylErY0N3KVxY2bgo7AWwIbxDmXDg3ylAFmnrjcbVvw==} + peerDependencies: + '@dnd-kit/core': ^6.3.0 + react: '>=16.8.0' + + '@dnd-kit/sortable@10.0.0': + resolution: {integrity: sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==} + peerDependencies: + '@dnd-kit/core': ^6.3.0 + react: '>=16.8.0' + '@dnd-kit/state@0.4.0': resolution: {integrity: sha512-vVdwOY9VsYdMNa7Z0xQhTXlzHqCcCugGuoM1kzvZhnZ0tYVPRdmIhWfeO6Y2ZoN92JwYAyJRRNl4ICkEe2mneg==} @@ -699,6 +735,11 @@ packages: peerDependencies: svelte: ^5.29.0 + '@dnd-kit/utilities@3.2.2': + resolution: {integrity: sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==} + peerDependencies: + react: '>=16.8.0' + '@drizzle-team/brocli@0.10.2': resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} @@ -711,6 +752,47 @@ packages: '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@emotion/babel-plugin@11.13.5': + resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} + + '@emotion/cache@11.14.0': + resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} + + '@emotion/hash@0.9.2': + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + + '@emotion/memoize@0.9.0': + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + + '@emotion/react@11.14.0': + resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/serialize@1.3.3': + resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} + + '@emotion/sheet@1.4.0': + resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + + '@emotion/unitless@0.10.0': + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + + '@emotion/use-insertion-effect-with-fallbacks@1.2.0': + resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} + peerDependencies: + react: '>=16.8.0' + + '@emotion/utils@1.4.2': + resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} + + '@emotion/weak-memoize@0.4.0': + resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} deprecated: 'Merged into tsx: https://tsx.is' @@ -1370,6 +1452,24 @@ packages: '@exodus/schemasafe@1.3.0': resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==} + '@faceless-ui/modal@3.0.0': + resolution: {integrity: sha512-o3oEFsot99EQ8RJc1kL3s/nNMHX+y+WMXVzSSmca9L0l2MR6ez2QM1z1yIelJX93jqkLXQ9tW+R9tmsYa+O4Qg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@faceless-ui/scroll-info@2.0.0': + resolution: {integrity: sha512-BkyJ9OQ4bzpKjE3UhI8BhcG36ZgfB4run8TmlaR4oMFUbl59dfyarNfjveyimrxIso9RhFEja/AJ5nQmbcR9hw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@faceless-ui/window-info@3.0.1': + resolution: {integrity: sha512-uPjdJYE/j7hqVNelE9CRUNOeXuXDdPxR4DMe+oz3xwyZi2Y4CxsfpfdPTqqwmNAZa1P33O+ZiCyIkBEeNed0kw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@fastify/otel@0.18.0': resolution: {integrity: sha512-3TASCATfw+ctICSb4ymrv7iCm0qJ0N9CarB+CZ7zIJ7KqNbwI5JjyDL1/sxoC0ccTO1Zyd1iQ+oqncPg5FJXaA==} peerDependencies: @@ -1381,6 +1481,18 @@ packages: '@floating-ui/dom@1.7.6': resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} + '@floating-ui/react-dom@2.1.8': + resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/react@0.27.19': + resolution: {integrity: sha512-31B8h5mm8YxotlE7/AU/PhNAl8eWxAmjL/v2QOxroDNkTFLk3Uu82u63N3b6TXa4EGJeeZLVcd/9AlNlVqzeog==} + peerDependencies: + react: '>=17.0.0' + react-dom: '>=17.0.0' + '@floating-ui/utils@0.2.11': resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} @@ -1413,6 +1525,159 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@inquirer/external-editor@1.0.3': resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} engines: {node: '>=18'} @@ -1441,6 +1706,86 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@jsdevtools/ono@7.1.3': + resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + + '@lexical/clipboard@0.41.0': + resolution: {integrity: sha512-Ex5lPkb4NBBX1DCPzOAIeHBJFH1bJcmATjREaqpnTfxCbuOeQkt44wchezUA0oDl+iAxNZ3+pLLWiUju9icoSA==} + + '@lexical/code@0.41.0': + resolution: {integrity: sha512-0hoNi1KC9/N3SBOGcOcFqnT0OpwmcRRAhfxTKMGqfCtCvAMzULVwZ8RWc9/NV9bKYESgBTW5D9xkDANP2mspHg==} + + '@lexical/devtools-core@0.41.0': + resolution: {integrity: sha512-FzJtluBhBc8bKS11TUZe72KoZN/hnzIyiiM0SPJAsPwGpoXuM01jqpXQGybWf/1bWB+bmmhOae7O4Nywi/Csuw==} + peerDependencies: + react: '>=17.x' + react-dom: '>=17.x' + + '@lexical/dragon@0.41.0': + resolution: {integrity: sha512-gBEqkk8Q6ZPruvDaRcOdF1EK9suCVBODzOCcR+EnoJTaTjfDkCM7pkPAm4w90Wa1wCZEtFHvCfas+jU9MDSumg==} + + '@lexical/extension@0.41.0': + resolution: {integrity: sha512-sF4SPiP72yXvIGchmmIZ7Yg2XZTxNLOpFEIIzdqG7X/1fa1Ham9P/T7VbrblWpF6Ei5LJtK9JgNVB0hb4l3o1g==} + + '@lexical/hashtag@0.41.0': + resolution: {integrity: sha512-tFWM74RW4KU0E/sj2aowfWl26vmLUTp331CgVESnhQKcZBfT40KJYd57HEqBDTfQKn4MUhylQCCA0hbpw6EeFQ==} + + '@lexical/headless@0.41.0': + resolution: {integrity: sha512-MH8oDuUKdM/Jq0c9vlEEkCL9pEQg4SwyrABBGIbFf+87VBJ5EWDdG9g1vJq7fKSDxfhFux7F5+i+zgUnxOQR/g==} + + '@lexical/history@0.41.0': + resolution: {integrity: sha512-kGoVWsiOn62+RMjRolRa+NXZl8jFwxav6GNDiHH8yzivtoaH8n1SwUfLJELXCzeqzs81HySqD4q30VLJVTGoDg==} + + '@lexical/html@0.41.0': + resolution: {integrity: sha512-3RyZy+H/IDKz2D66rNN/NqYx87xVFrngfEbyu1OWtbY963RUFnopiVHCQvsge/8kT04QSZ7U/DzjVFqeNS6clg==} + + '@lexical/link@0.41.0': + resolution: {integrity: sha512-Rjtx5cGWAkKcnacncbVsZ1TqRnUB2Wm4eEVKpaAEG41+kHgqghzM2P+UGT15yROroxJu8KvAC9ISiYFiU4XE1w==} + + '@lexical/list@0.41.0': + resolution: {integrity: sha512-RXvB+xcbzVoQLGRDOBRCacztG7V+bI95tdoTwl8pz5xvgPtAaRnkZWMDP+yMNzMJZsqEChdtpxbf0NgtMkun6g==} + + '@lexical/mark@0.41.0': + resolution: {integrity: sha512-UO5WVs9uJAYIKHSlYh4Z1gHrBBchTOi21UCYBIZ7eAs4suK84hPzD+3/LAX5CB7ZltL6ke5Sly3FOwNXv/wfpA==} + + '@lexical/markdown@0.41.0': + resolution: {integrity: sha512-bzI73JMXpjGFhqUWNV6KqfjWcgAWzwFT+J3RHtbCF5rysC8HLldBYojOgAAtPfXqfxyv2mDzsY7SoJ75s9uHZA==} + + '@lexical/offset@0.41.0': + resolution: {integrity: sha512-2RHBXZqC8gm3X9C0AyRb0M8w7zJu5dKiasrif+jSKzsxPjAUeF1m95OtIOsWs1XLNUgASOSUqGovDZxKJslZfA==} + + '@lexical/overflow@0.41.0': + resolution: {integrity: sha512-Iy6ZiJip8X14EBYt1zKPOrXyQ4eG9JLBEoPoSVBTiSbVd+lYicdUvaOThT0k0/qeVTN9nqTaEltBjm56IrVKCQ==} + + '@lexical/plain-text@0.41.0': + resolution: {integrity: sha512-HIsGgmFUYRUNNyvckun33UQfU7LRzDlxymHUq67+Bxd5bXqdZOrStEKJXuDX+LuLh/GXZbaWNbDLqwLBObfbQg==} + + '@lexical/react@0.41.0': + resolution: {integrity: sha512-7+GUdZUm6sofWm+zdsWAs6cFBwKNsvsHezZTrf6k8jrZxL461ZQmbz/16b4DvjCGL9r5P1fR7md9/LCmk8TiCg==} + peerDependencies: + react: '>=17.x' + react-dom: '>=17.x' + + '@lexical/rich-text@0.41.0': + resolution: {integrity: sha512-yUcr7ZaaVTZNi8bow4CK1M8jy2qyyls1Vr+5dVjwBclVShOL/F/nFyzBOSb6RtXXRbd3Ahuk9fEleppX/RNIdw==} + + '@lexical/selection@0.41.0': + resolution: {integrity: sha512-1s7/kNyRzcv5uaTwsUL28NpiisqTf5xZ1zNukLsCN1xY+TWbv9RE9OxIv+748wMm4pxNczQe/UbIBODkbeknLw==} + + '@lexical/table@0.41.0': + resolution: {integrity: sha512-d3SPThBAr+oZ8O74TXU0iXM3rLbrAVC7/HcOnSAq7/AhWQW8yMutT51JQGN+0fMLP9kqoWSAojNtkdvzXfU/+A==} + + '@lexical/text@0.41.0': + resolution: {integrity: sha512-gGA+Anc7ck110EXo4KVKtq6Ui3M7Vz3OpGJ4QE6zJHWW8nV5h273koUGSutAMeoZgRVb6t01Izh3ORoFt/j1CA==} + + '@lexical/utils@0.41.0': + resolution: {integrity: sha512-Wlsokr5NQCq83D+7kxZ9qs5yQ3dU3Qaf2M+uXxLRoPoDaXqW8xTWZq1+ZFoEzsHzx06QoPa4Vu/40BZR91uQPg==} + + '@lexical/yjs@0.41.0': + resolution: {integrity: sha512-PaKTxSbVC4fpqUjQ7vUL9RkNF1PjL8TFl5jRe03PqoPYpE33buf3VXX6+cOUEfv9+uknSqLCPHoBS/4jN3a97w==} + peerDependencies: + yjs: '>=13.5.22' + '@lucide/svelte@1.16.0': resolution: {integrity: sha512-AvvPJnaWxeiNkAljI5MsSEc84yHPLMaWQIAJOcbX7k9au/f9ITS7cxTTQiautDiOFKVOXiYdZ+d6mtl88J+Kbg==} peerDependencies: @@ -1452,6 +1797,16 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@monaco-editor/loader@1.7.0': + resolution: {integrity: sha512-gIwR1HrJrrx+vfyOhYmCZ0/JcWqG5kbfG7+d3f/C1LXk2EvzAbHSg3MQ5lO2sMlo9izoAZ04shohfKLVT6crVA==} + + '@monaco-editor/react@4.7.0': + resolution: {integrity: sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==} + peerDependencies: + monaco-editor: '>= 0.25.0 < 1' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@mrleebo/prisma-ast@0.13.1': resolution: {integrity: sha512-XyroGQXcHrZdvmrGJvsA9KNeOOgGMg1Vg9OlheUsBOSKznLMDl+YChxbkboRHvtFYJEMRYmlV3uoo/njCw05iw==} engines: {node: '>=16'} @@ -1462,6 +1817,64 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 + '@next/env@15.5.19': + resolution: {integrity: sha512-sWWluFvcv5v3Fxznmf2ZfjyoVQt/64oCnYqS90inQWGzMPK1VjvekPiz3OPHKmFT30EnHrjlbyaHLt3M0vWabw==} + + '@next/env@16.2.7': + resolution: {integrity: sha512-tMJizPlj6ZYpBMMdK8S0LJufrP4QTdR6pcv9KQ/bVETPAmg0j1mlHE9G2c38UyGHxoBapgwuj7XjbGJ2RcDFOg==} + + '@next/swc-darwin-arm64@16.2.7': + resolution: {integrity: sha512-vm1EDI/pVaBNNiychmxk3fft+OhQPVD9cIM/tReLZIQ3TfQ4kqI9DwKk00dzuS1ulC7icbrzCFrmRRlk9PfNdw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@16.2.7': + resolution: {integrity: sha512-O3IRSv1ZBL1zs0WrIgefTEcTKFVn+ryxBNe54erJ6KsD+2f/Mmt7g2jOYh8PSBdUwPtKQJuCsTMlZ7tIu2AcsQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@16.2.7': + resolution: {integrity: sha512-Re6PZtjBDd0aMU+VcZcC/PrIvj4WhrjDYtMhhCVQamWN4L90EVP0pcEOBQD25prSlw7OzNw5QpHLWMilRLsRNw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-arm64-musl@16.2.7': + resolution: {integrity: sha512-qyogG9QtBzWxgJfeGBvOEHI3851gTfCF3wLZ5RDLTBJGAmE9p1qDwKCOdrBrvBzRvYDT+gUDp72pzlSEfAXgNA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@next/swc-linux-x64-gnu@16.2.7': + resolution: {integrity: sha512-Vhe4ZDuBpmMogrGi5D4R2Kq4JAQlj6+wvgaFYy31zfES0zPmt6TLA+cuYpM/OLrPZjo2MYQTHVqNUSCR6+fDZQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-x64-musl@16.2.7': + resolution: {integrity: sha512-srvian89JahFLw1YLBEuhvPJ0DO5lpUeJQMXy4xYo7g628ZlNgXdNkqoxSAv9OYrBfByh6vxISMwW/mRbzCY+g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@next/swc-win32-arm64-msvc@16.2.7': + resolution: {integrity: sha512-GX3wvLpULFuRFJzwHaKfm7QZJ18F4ZSuxlPJ96BoBglCzBmdSjyeBKF+ZhWhvL/ckxNfLnNa7bsObO2ipYpszw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@16.2.7': + resolution: {integrity: sha512-J4WlM72NMk076Qsg0jTdK3SNXatlSdnjW7L7oNGLst1tAGjHrJh/FYi+pw9wyIjEtGRKDNzD0zuiY16oWYWVaw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + '@noble/ciphers@2.2.0': resolution: {integrity: sha512-Z6pjIZ/8IJcCGzb2S/0Px5J81yij85xASuk1teLNeg75bfT07MV3a/O2Mtn1I2se43k3lkVEcFaR10N4cgQcZA==} engines: {node: '>= 20.19.0'} @@ -1711,6 +2124,47 @@ packages: '@oxc-project/types@0.130.0': resolution: {integrity: sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==} + '@payloadcms/graphql@3.85.0': + resolution: {integrity: sha512-QIAGSmtNS8XX5MxPZONMPX/xYANuzZ/xxAtlhFUxJvxTZVxbb1Aafx+dTIPTggJ4updzD3Rk/b76TYQc3jS13A==} + hasBin: true + peerDependencies: + graphql: ^16.8.1 + payload: 3.85.0 + + '@payloadcms/next@3.85.0': + resolution: {integrity: sha512-9Q0kaKgd1CBl2Nu6QMISqRKfDlGraCkLWxKlWH59MO0Fu+vhvqhqEIv/gjzNj6wWMMH8e4yzFm8knZjTJTzzWQ==} + engines: {node: ^18.20.2 || >=20.9.0} + peerDependencies: + graphql: ^16.8.1 + next: '>=15.2.9 <15.3.0 || >=15.3.9 <15.4.0 || >=15.4.11 <15.5.0 || >=16.2.6 <17.0.0' + payload: 3.85.0 + + '@payloadcms/richtext-lexical@3.85.0': + resolution: {integrity: sha512-FZjDEJdkQNj0ZeQn4p4K56RbuNnRF2BrmWY2p0w856INZxngNDszfCbkhClvP++B0NgyMUqTVe7pappx9+vxWA==} + engines: {node: ^18.20.2 || >=20.9.0} + peerDependencies: + '@faceless-ui/modal': 3.0.0 + '@faceless-ui/scroll-info': 2.0.0 + '@payloadcms/next': 3.85.0 + payload: 3.85.0 + react: ^19.0.1 || ^19.1.2 || ^19.2.1 + react-dom: ^19.0.1 || ^19.1.2 || ^19.2.1 + + '@payloadcms/translations@3.85.0': + resolution: {integrity: sha512-dZQc3OfVtp7IkL9R3e4t1n7MbDaKfhF6C6ewISOzJgkgrcdoCfrqXonwMYE4Ue6IDEqAtJuyEkOvFWew5tBHKw==} + + '@payloadcms/ui@3.85.0': + resolution: {integrity: sha512-MMOZkj6Ztasqtl/kTiUKE0rnz35iPSiFDXuAfRyDqoqNf7vvWWRrtxa41kNAg++yZVAHBKPcMcMaugV6KiN0rQ==} + engines: {node: ^18.20.2 || >=20.9.0} + peerDependencies: + next: '>=15.2.9 <15.3.0 || >=15.3.9 <15.4.0 || >=15.4.11 <15.5.0 || >=16.2.6 <17.0.0' + payload: 3.85.0 + react: ^19.0.1 || ^19.1.2 || ^19.2.1 + react-dom: ^19.0.1 || ^19.1.2 || ^19.2.1 + + '@pinojs/redact@0.4.0': + resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} + '@playwright/test@1.60.0': resolution: {integrity: sha512-O71yZIbAh/PxDMNGns37GHBIfrVkEVyn+AXyIa5dOTfb4/xNvRWV+Vv/NMbNCtODB/pO7vLlF2OTmMVLhmr7Ag==} engines: {node: '>=18'} @@ -2269,6 +2723,9 @@ packages: engines: {node: ^14.13.1 || ^16.0.0 || >=18} deprecated: unmaintained + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@swc/helpers@0.5.23': resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} @@ -2442,9 +2899,22 @@ packages: peerDependencies: svelte: ^3 || ^4 || ^5 || ^5.0.0-next.0 + '@tokenizer/inflate@0.4.1': + resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} + engines: {node: '>=18'} + + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + '@tybys/wasm-util@0.10.2': resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + '@types/acorn@4.0.6': + resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + + '@types/busboy@1.5.4': + resolution: {integrity: sha512-kG7WrUuAKK0NoyxfQHsVE6j1m01s6kMma64E+OZenQABMQyTJop1DumUWcLwAQ2JzpefU7PDYoRDKl8uZosFjw==} + '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -2457,6 +2927,9 @@ packages: '@types/culori@4.0.1': resolution: {integrity: sha512-43M51r/22CjhbOXyGT361GZ9vncSVQ39u62x5eJdBQFviI8zWp2X5jzqg7k4M6PVgDQAClpy2bUe2dtwEgEDVQ==} + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} + '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -2466,6 +2939,9 @@ packages: '@types/esrecurse@4.3.1': resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -2478,6 +2954,15 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/lodash@4.17.24': + resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/mysql@2.15.27': resolution: {integrity: sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA==} @@ -2487,12 +2972,23 @@ packages: '@types/node@25.9.1': resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + '@types/pg-pool@2.0.7': resolution: {integrity: sha512-U4CwmGVQcbEuqpyju8/ptOKg6gEC+Tqsvj2xS9o1g71bUh8twxnC6ZL5rZKCsGN0iyH0CwgUyc9VR5owNQF9Ng==} '@types/pg@8.15.6': resolution: {integrity: sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==} + '@types/react-transition-group@4.4.12': + resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==} + peerDependencies: + '@types/react': '*' + + '@types/react@19.2.16': + resolution: {integrity: sha512-esJiCAnl0kfpNdE69f3So4WJUXy95dLZydX0KwK46riIHDzHM7O9Vtf9xCHW0PXIqvgqNrswl522kA/5yx+F4w==} + '@types/relaxed-json@1.0.4': resolution: {integrity: sha512-MulPaZU5Hh81T8ROYhsWlC7tJuuapwUT1/wX1qS8/koMI8Ypf3tyEunFZKzewoLsjutDpuf4kXVhxkF82ZtXzg==} @@ -2511,6 +3007,9 @@ packages: '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} @@ -2523,6 +3022,12 @@ packages: '@types/webxr@0.5.24': resolution: {integrity: sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==} + '@types/whatwg-mimetype@3.0.2': + resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + '@typeschema/class-validator@0.3.0': resolution: {integrity: sha512-OJSFeZDIQ8EK1HTljKLT5CItM2wsbgczLN8tMEfz3I1Lmhc5TBfkZ0eikFzUC16tI3d1Nag7um6TfCgp2I2Bww==} peerDependencies: @@ -2703,6 +3208,9 @@ packages: ajv@6.15.0: resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ajv@8.20.0: resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} @@ -2722,6 +3230,10 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -2752,6 +3264,10 @@ packages: ast-v8-to-istanbul@1.0.0: resolution: {integrity: sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==} + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + auth@1.6.11: resolution: {integrity: sha512-SyQZAU37AosE8koF0fBsDob9+Q7AvdAA1YFblg/5DkhwdiaHGIACjDZTJJq8cEWjkLAszDcAc0kC2DSr1xZ8wg==} hasBin: true @@ -2760,6 +3276,10 @@ packages: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} @@ -2843,6 +3363,10 @@ packages: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + bits-ui@2.18.1: resolution: {integrity: sha512-KkemzKFH4T3gt3H+P86JcnAWExjByv/6vlwjm/BoCwTPHu03yiCdxbghdJLvFReQTe0acCAiRcKfmixxD6XvlA==} engines: {node: '>=20'} @@ -2850,6 +3374,9 @@ packages: '@internationalized/date': ^3.8.1 svelte: ^5.33.0 + body-scroll-lock@4.0.0-beta.0: + resolution: {integrity: sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==} + brace-expansion@5.0.6: resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} @@ -2863,13 +3390,24 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + bson-objectid@2.0.4: + resolution: {integrity: sha512-vgnKAUzcDoa+AeyYwXCoHyF2q6u/8H46dxu5JN+4/TZeq/Dlinn0K6GvxsCLb3LHUJl0m/TLiEK31kUwtgocMQ==} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer-image-size@0.6.4: + resolution: {integrity: sha512-nEh+kZOPY1w+gcCMobZ6ETUp9WfibndnosbpwB1iJk/8Gt5ZF2bhS6+B6bPYz424KtwsR6Rflc3tCz1/ghX2dQ==} + engines: {node: '>=4.0'} + bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + c12@3.3.4: resolution: {integrity: sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==} peerDependencies: @@ -2889,6 +3427,9 @@ packages: caniuse-lite@1.0.30001793: resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} @@ -2897,12 +3438,31 @@ packages: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + chevrotain@10.5.0: resolution: {integrity: sha512-Pkv5rBY3+CsHOYfV5g/Vs5JY9WTHHDEKOlohI2XeygaZhUeqhAlldZ8Hz9cRmxu709bvS08YzxHdTPHhffc13A==} + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -2911,12 +3471,19 @@ packages: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} + engines: {node: '>=8'} + cjs-module-lexer@2.2.0: resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==} class-validator@0.14.4: resolution: {integrity: sha512-AwNusCCam51q703dW82x95tOqQp6oC9HNUl724KxJJOfnKscI8dOloXFgyez7LbTTKWuRBA37FScqVbJEoq8Yw==} + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + cliui@9.0.1: resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} engines: {node: '>=20'} @@ -2925,6 +3492,9 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + commander@12.1.0: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} @@ -2933,6 +3503,9 @@ packages: resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} engines: {node: '>=20'} + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} @@ -2945,6 +3518,9 @@ packages: confbox@0.2.4: resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} + console-table-printer@2.12.1: + resolution: {integrity: sha512-wKGOQRRvdnd89pCeH96e2Fn4wkbenSP6LMHfjfyNLMbGuHEFbMqQNuxXqd0oXG9caIOQ1FTvc5Uijp9/4jujnQ==} + conventional-changelog-angular@8.3.1: resolution: {integrity: sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==} engines: {node: '>=18'} @@ -2958,6 +3534,9 @@ packages: engines: {node: '>=18'} hasBin: true + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -2973,6 +3552,10 @@ packages: cosmiconfig: '>=9' typescript: '>=5' + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + cosmiconfig@9.0.1: resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} engines: {node: '>=14'} @@ -2982,15 +3565,31 @@ packages: typescript: optional: true + croner@10.0.1: + resolution: {integrity: sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==} + engines: {node: '>=18.0'} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true + cssfilter@0.0.10: + resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + culori@4.0.2: resolution: {integrity: sha512-1+BhOB8ahCn4O0cep0Sh2l9KCOfOdY+BXJnKMHFFzDEouSr/el18QwXEMRlOj9UY5nCeA8UN3a/82rUWRBeyBw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2998,9 +3597,21 @@ packages: dataloader@1.4.0: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} + dataloader@2.2.3: + resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==} + + date-fns@3.6.0: + resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} + + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + date-fns@4.2.1: resolution: {integrity: sha512-37RhSdxaG1suen6VDCza6rNrQfooyQh57HFVPwQGEq2QWliVLzPQZ8Oa017weOu+HZCnzI7N3Pf/wyoBKfEqrA==} + dateformat@4.6.3: + resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + dayjs@1.11.20: resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} @@ -3013,6 +3624,9 @@ packages: supports-color: optional: true + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -3053,6 +3667,9 @@ packages: devalue@5.8.1: resolution: {integrity: sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -3060,6 +3677,12 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + + dompurify@3.2.7: + resolution: {integrity: sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==} + dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} @@ -3185,6 +3808,9 @@ packages: emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + enhanced-resolve@5.21.6: resolution: {integrity: sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==} engines: {node: '>=10.13.0'} @@ -3197,6 +3823,10 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -3238,6 +3868,9 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -3324,6 +3957,12 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + + estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} @@ -3352,6 +3991,9 @@ packages: resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} engines: {node: '>=8.0.0'} + fast-copy@3.0.2: + resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -3365,6 +4007,9 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-uri@3.1.2: resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} @@ -3394,10 +4039,17 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} + file-type@21.3.4: + resolution: {integrity: sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==} + engines: {node: '>=20'} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -3417,6 +4069,9 @@ packages: flatted@3.4.2: resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + focus-trap@7.5.4: + resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} + formsnap@2.0.1: resolution: {integrity: sha512-iJSe4YKd/W6WhLwKDVJU9FQeaJRpEFuolhju7ZXlRpUVyDdqFdMP8AUBICgnVvQPyP41IPAlBa/v0Eo35iE6wQ==} engines: {node: '>=18', pnpm: '>=8.7.0'} @@ -3471,6 +4126,9 @@ packages: get-tsconfig@4.14.0: resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + giget@3.2.0: resolution: {integrity: sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A==} hasBin: true @@ -3521,6 +4179,29 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graphql-http@1.22.4: + resolution: {integrity: sha512-OC3ucK988teMf+Ak/O+ZJ0N2ukcgrEurypp8ePyJFWq83VzwRAmHxxr+XxrMpxO/FIwI4a7m/Fzv3tWGJv0wPA==} + engines: {node: '>=12'} + peerDependencies: + graphql: '>=0.11 <=16' + + graphql-playground-html@1.6.30: + resolution: {integrity: sha512-tpCujhsJMva4aqE8ULnF7/l3xw4sNRZcSHu+R00VV+W0mfp+Q20Plvcrp+5UXD+2yS6oyCXncA+zoQJQqhGCEw==} + + graphql-scalars@1.22.2: + resolution: {integrity: sha512-my9FB4GtghqXqi/lWSVAOPiTzTnnEzdOXCsAC2bb5V7EFNQjVjwy3cSSbUvgYOtDuDibd+ZsCDhz+4eykYOlhQ==} + engines: {node: '>=10'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + graphql@16.14.1: + resolution: {integrity: sha512-cQOsSMS/IrDz82PVyRDvf/Q1F/bRbBVjJlh+xYOkI1qw2bWRvWGiWc+m2O0d6l4Bt1fyY+8kzJ8JFWGJqNeDBg==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + happy-dom@20.10.1: + resolution: {integrity: sha512-awPoqPjx8CgjapJllyDlgzgVHjBExcitKK5ZJkxwhQJyQpHFkyS2bEcqCm7IeW20cQvuCI0cz2Ifq79CJKqtiw==} + engines: {node: '>=20.0.0'} + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -3529,9 +4210,19 @@ packages: resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} engines: {node: '>= 0.4'} + help-me@5.0.0: + resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + http-status@2.1.0: + resolution: {integrity: sha512-O5kPr7AW7wYd/BBiOezTwnVAnmSNFY+J7hlZD2X5IOxVBetjcHAiTXhzj0gMrnojQlwy+UT1/Y3H3vJ3UlmvLA==} + engines: {node: '>= 0.4.0'} + https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -3548,6 +4239,9 @@ packages: resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -3556,6 +4250,14 @@ packages: resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} + image-size@2.0.2: + resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==} + engines: {node: '>=16.x'} + hasBin: true + + immutable@4.3.8: + resolution: {integrity: sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw==} + import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} @@ -3578,13 +4280,33 @@ packages: inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + ipaddr.js@2.2.0: + resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} + engines: {node: '>= 10'} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + is-core-module@2.16.2: resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} engines: {node: '>= 0.4'} + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3598,6 +4320,9 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} @@ -3651,6 +4376,9 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isomorphic.js@0.2.5: + resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==} + istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -3674,9 +4402,16 @@ packages: joi@17.13.3: resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + jose@5.10.0: + resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} + jose@6.2.3: resolution: {integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==} + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + js-tokens@10.0.0: resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} @@ -3706,6 +4441,11 @@ packages: resolution: {integrity: sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==} engines: {node: '>=16'} + json-schema-to-typescript@15.0.3: + resolution: {integrity: sha512-iOKdzTUWEVM4nlxpFudFsWyUiu/Jakkga4OZPEt7CGoSEsAsUgdOZqR6pcgx2STBek9Gm4hcarJpXSzIvZ/hKA==} + engines: {node: '>=16.0.0'} + hasBin: true + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -3730,6 +4470,10 @@ packages: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} + jsox@1.2.121: + resolution: {integrity: sha512-9Ag50tKhpTwS6r5wh3MJSAvpSof0UBr39Pto8OnzFT32Z/pAbxAsKHzyvsyMEHVslELvHyO/4/jaQELHk8wDcw==} + hasBin: true + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -3760,6 +4504,14 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lexical@0.41.0: + resolution: {integrity: sha512-pNIm5+n+hVnJHB9gYPDYsIO5Y59dNaDU9rJmPPsfqQhP2ojKFnUoPbcRnrI9FJLXB14sSumcY8LUw7Sq70TZqA==} + + lib0@0.2.117: + resolution: {integrity: sha512-DeXj9X5xDCjgKLU/7RR+/HQEVzuuEUiwldwOGsHK/sfAfELGWEyTcf0x+uOvCvK3O2zPmZePXWL85vtia6GyZw==} + engines: {node: '>=16'} + hasBin: true + libphonenumber-js@1.13.2: resolution: {integrity: sha512-S3kmBrptp3yRTm83NUcHy9g1vbwiWMzI8WvY22+koBJ6zkRteLnedBL2VX0MIAGwx2yiyxX4J85pceZyQ6ffgg==} @@ -3868,6 +4620,13 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + lru-cache@11.5.0: resolution: {integrity: sha512-5YgH9UJd7wVb9hIouI2adWpgqrrICkt070Dnj8EUY1+B4B2P9eRLPAkAAo6NICA7CEhOIeBHl46u9zSNpNu7zA==} engines: {node: 20 || >=22} @@ -3896,9 +4655,35 @@ packages: resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==} hasBin: true + marked@14.0.0: + resolution: {integrity: sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==} + engines: {node: '>= 18'} + hasBin: true + + md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + + mdast-util-mdx-jsx@3.1.3: + resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + memoize-weak@1.0.2: resolution: {integrity: sha512-gj39xkrjEw7nCn4nJ1M5ms6+MyMlyiGmttzsqAUsAKn6bYKwuTHh/AO3cKPF8IBrTIYTxb0wWXFs3E//Y8VoWQ==} @@ -3913,6 +4698,78 @@ packages: meshoptimizer@0.18.1: resolution: {integrity: sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==} + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-mdx-jsx@3.0.1: + resolution: {integrity: sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -3931,6 +4788,9 @@ packages: module-details-from-path@1.0.4: resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} + monaco-editor@0.55.1: + resolution: {integrity: sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A==} + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -3954,6 +4814,27 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + next@16.2.7: + resolution: {integrity: sha512-eMJxgjRzBaj3olkP4cBamHDXL79A8FC6u1GcsO1D1Tsx8bw/LLXUJCaoajVxtnhD3A1IJqIT8IcRJjgBIPJq4w==} + engines: {node: '>=20.9.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -3966,6 +4847,10 @@ packages: node-releases@2.0.44: resolution: {integrity: sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==} + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + normalize-url@8.1.1: resolution: {integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==} engines: {node: '>=14.16'} @@ -3977,12 +4862,26 @@ packages: numerable@0.3.15: resolution: {integrity: sha512-Cu0dX3OjvXmqIyGveN8HuEnafCIUCz269NORa4JKAERXCa/vWr+pBRlrWxBK4psLV9RuhJ+DPoJPisu2QMW0mg==} + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-to-formdata@4.5.1: + resolution: {integrity: sha512-QiM9D0NiU5jV6J6tjE1g7b4Z2tcUnKs1OPUi4iMb2zH+7jwlcUrASghgkFk9GtzqNNq8rTQJtT8AzjBAvLoNMw==} + obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + open@10.2.0: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} @@ -4052,6 +4951,9 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -4079,6 +4981,9 @@ packages: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -4086,6 +4991,13 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + payload@3.85.0: + resolution: {integrity: sha512-Cb3jX/WRkHhT5oZCx1BikR6fe32Xbld4Esxr0i+dXtHZMjBVgMjaf/oaK81jLRBstbJbUw7Ia/jMrRw82+FlwA==} + engines: {node: ^18.20.2 || >=20.9.0} + hasBin: true + peerDependencies: + graphql: ^16.8.1 + perfect-debounce@2.1.0: resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} @@ -4115,6 +5027,20 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} + pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + + pino-pretty@13.1.2: + resolution: {integrity: sha512-3cN0tCakkT4f3zo9RXDIhy6GTvtYD6bK4CRBLN9j3E/ePqN1tugAXD5rGVfoChW6s0hiek+eyYlLNqc/BG7vBQ==} + hasBin: true + + pino-std-serializers@7.1.0: + resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==} + + pino@9.14.0: + resolution: {integrity: sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==} + hasBin: true + pkg-types@2.3.1: resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==} @@ -4128,6 +5054,10 @@ packages: engines: {node: '>=18'} hasBin: true + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + pngjs@7.0.0: resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} engines: {node: '>=14.19.0'} @@ -4160,6 +5090,10 @@ packages: resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} engines: {node: '>=4'} + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + postcss@8.5.15: resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} @@ -4264,6 +5198,13 @@ packages: resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} engines: {node: '>=18'} + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + + process-warning@5.0.0: + resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} + progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -4272,12 +5213,18 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + property-expr@2.0.6: resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} + punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} @@ -4289,19 +5236,79 @@ packages: pure-rand@6.1.0: resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + qs-esm@8.0.1: + resolution: {integrity: sha512-eZ7l+0ZVy3He9c85pEM9KEBR9DFA4jrmWvIjm9wpcHvScwc/vgZDl2TNOF0pm0JsWKw24XBUZOY0Wxn7/nvJnw==} + engines: {node: '>=18'} + quansync@0.2.11: resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + rc9@3.0.1: resolution: {integrity: sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==} + react-datepicker@7.6.0: + resolution: {integrity: sha512-9cQH6Z/qa4LrGhzdc3XoHbhrxNcMi9MKjZmYgF/1MNNaJwvdSjv3Xd+jjvrEEbKEf71ZgCA3n7fQbdwd70qCRw==} + peerDependencies: + react: ^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc + + react-dom@19.2.7: + resolution: {integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==} + peerDependencies: + react: ^19.2.7 + + react-error-boundary@4.1.2: + resolution: {integrity: sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag==} + peerDependencies: + react: '>=16.13.1' + + react-error-boundary@6.1.2: + resolution: {integrity: sha512-3DpCr5HVdZ0caUjYE/kIHBEJN0mNP3ZCgf16c48uJ5TbWjorKVp+YG8W3XqlJ7vJAVNw6wNIImyPXmFydwmyng==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + + react-image-crop@10.1.8: + resolution: {integrity: sha512-4rb8XtXNx7ZaOZarKKnckgz4xLMvds/YrU6mpJfGhGAsy2Mg4mIw1x+DCCGngVGq2soTBVVOxx2s/C6mTX9+pA==} + peerDependencies: + react: '>=16.13.1' + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-select@5.9.0: + resolution: {integrity: sha512-nwRKGanVHGjdccsnzhFte/PULziueZxGD8LL2WojON78Mvnq7LdAMEtu2frrwld1fr3geixg3iiMBIc/LLAZpw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + react-transition-group@4.4.5: + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + + react@19.2.7: + resolution: {integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==} + engines: {node: '>=0.10.0'} + read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} @@ -4310,6 +5317,10 @@ packages: resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} engines: {node: '>= 20.19.0'} + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + regexp-to-ast@0.5.0: resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==} @@ -4404,15 +5415,36 @@ packages: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sanitize-filename@1.6.3: + resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} + + sass@1.77.4: + resolution: {integrity: sha512-vcF3Ckow6g939GMA4PeU7b2K/9FALXk2KF9J87txdHzXbUF9XRQRwSxcAs/fGaTnJeBFd7UoV22j3lzMLdM0Pw==} + engines: {node: '>=14.0.0'} + hasBin: true + satori-html@0.3.2: resolution: {integrity: sha512-wjTh14iqADFKDK80e51/98MplTGfxz2RmIzh0GqShlf4a67+BooLywF17TvJPD6phO0Hxm7Mf1N5LtRYvdkYRA==} + scheduler@0.25.0: + resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + schema-dts@1.1.5: resolution: {integrity: sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==} + secure-json-parse@4.1.0: + resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -4425,6 +5457,10 @@ packages: set-cookie-parser@3.1.0: resolution: {integrity: sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==} + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -4444,6 +5480,9 @@ packages: resolution: {integrity: sha512-WszCLXwT4h2k1ufIXAgsbiTOazqqevFCIncOuUBZJ91DdvWcC5+OFkluWRQPrcuSYd8fjq+o2y1QfWqYMoAToQ==} hasBin: true + simple-wcswidth@1.1.2: + resolution: {integrity: sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw==} + sirv@3.0.2: resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} engines: {node: '>=18'} @@ -4465,6 +5504,15 @@ packages: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} + sonic-boom@4.2.1: + resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} + + sonner@1.7.4: + resolution: {integrity: sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + sorcery@1.0.0: resolution: {integrity: sha512-5ay9oJE+7sNmhzl3YNG18jEEEf4AOQCM/FAqR5wMmzqd1FtRorFbJXn3w3SKOhbiQaVgHM+Q1lszZspjri7bpA==} hasBin: true @@ -4476,6 +5524,10 @@ packages: source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -4483,15 +5535,26 @@ packages: spawndamnit@3.0.1: resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + state-local@1.0.7: + resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} + std-env@4.1.0: resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -4500,6 +5563,9 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -4516,9 +5582,33 @@ packages: resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} engines: {node: '>=18'} + strip-json-comments@5.0.3: + resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} + engines: {node: '>=14.16'} + + strtok3@10.3.5: + resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} + engines: {node: '>=18'} + style-to-object@1.0.14: resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + super-sitemap@1.0.12: resolution: {integrity: sha512-C3gfAS1RZxL5bbZGtgnIOitMhfqAt8RmhW8AWTia6c8n9RW3Zx7f/SxVeFWZD0I1nUAx2pkxuWazVtev0Nmb5w==} peerDependencies: @@ -4634,6 +5724,9 @@ packages: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} + thread-stream@3.2.0: + resolution: {integrity: sha512-zLBvqpwr4Esa0kRjcrzGU6zL25lePWaCLMx0RQFrmteozIfeNdaMLpG5U7PeHzvlFkAWaRKA9/KVW4F60iB+qw==} + three@0.156.1: resolution: {integrity: sha512-kP7H0FK9d/k6t/XvQ9FO6i+QrePoDcNhwl0I02+wmUJRNSLCUIDMcfObnzQvxb37/0Uc9TDT0T1HgsRRrO6SYQ==} @@ -4662,6 +5755,10 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + token-types@6.1.2: + resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} + engines: {node: '>=14.16'} + toposort@2.0.2: resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} @@ -4672,6 +5769,9 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + truncate-utf8-bytes@1.0.2: + resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} + ts-algebra@2.0.0: resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==} @@ -4685,9 +5785,22 @@ packages: resolution: {integrity: sha512-Du/ZW2RfwV/D4cmA5rXafYjBQVuvu4qGiEEla4EmEHVHgRdx68Gftx7i66jn2bzHPwSVZY36Ae6OuDn9el4ZKA==} engines: {node: '>=14.13.1'} + ts-essentials@10.0.3: + resolution: {integrity: sha512-/FrVAZ76JLTWxJOERk04fm8hYENDo0PWSP3YLQKxevLwWtxemGcl5JJEzN4iqfDlRve0ckyfFaOBu4xbNH/wZw==} + peerDependencies: + typescript: '>=4.5.0' + peerDependenciesMeta: + typescript: + optional: true + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsx@4.21.0: + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + engines: {node: '>=18.0.0'} + hasBin: true + tsx@4.22.3: resolution: {integrity: sha512-mdoNxBC/cSQObGGVQ5Bpn5i+yv7j68gk3Nfm3wFjcJg3Z0Mix9jzAFfP12prmm5eVGmDKtp0yyArrs0Q+8gZHg==} engines: {node: '>=18.0.0'} @@ -4738,12 +5851,20 @@ packages: uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + uint8array-extras@1.5.0: + resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} + engines: {node: '>=18'} + ultrahtml@1.6.0: resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} undici-types@7.24.6: resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + undici@7.24.4: + resolution: {integrity: sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w==} + engines: {node: '>=20.18.1'} + unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} @@ -4752,6 +5873,21 @@ packages: resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} engines: {node: '>=20'} + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -4769,9 +5905,31 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + use-context-selector@2.0.0: + resolution: {integrity: sha512-owfuSmUNd3eNp3J9CdDl0kMgfidV+MkDvHPpvthN5ThqM+ibMccNE0k+Iq7TWC6JPFvGZqanqiGCuQx6DyV24g==} + peerDependencies: + react: '>=18.0.0' + scheduler: '>=0.19.0' + + use-isomorphic-layout-effect@1.2.1: + resolution: {integrity: sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + utf8-byte-length@1.0.5: + resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + uuid@13.0.2: + resolution: {integrity: sha512-vzi9uRZ926x4XV73S/4qQaTwPXM2JBj6/6lI/byHH1jOpCzb0zDbfytgA9LcN/hzb2l7WQSQnxITOVx5un/wGw==} + hasBin: true + valibot@1.4.0: resolution: {integrity: sha512-iC/x7fVcSyOwlm/VSt7RlHnzNGLGvR9GnxdifUeWoCJo0q4ZZvrVkIHC6faTlkxG47I2Y4UrFquPuVHCrOnrLg==} peerDependencies: @@ -4790,6 +5948,9 @@ packages: peerDependencies: svelte: ^5.0.0 + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + vite@8.0.13: resolution: {integrity: sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4891,6 +6052,10 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -4912,6 +6077,9 @@ packages: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + ws@8.20.1: resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==} engines: {node: '>=10.0.0'} @@ -4928,6 +6096,11 @@ packages: resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} + xss@1.0.15: + resolution: {integrity: sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==} + engines: {node: '>= 0.10.0'} + hasBin: true + xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -4956,6 +6129,10 @@ packages: resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yjs@13.6.31: + resolution: {integrity: sha512-Eq+5BRfbeGyqGVrTJL3bEcr8gKkxPuyuoHmAwpk52fDb8kOVMrfVSTRPd6yiGgX5Fskb96qCRjzjbRjrL4YEnw==} + engines: {node: '>=16.0.0', npm: '>=8.0.0'} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -4986,8 +6163,17 @@ packages: zod@4.4.3: resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + snapshots: + '@apidevtools/json-schema-ref-parser@11.9.3': + dependencies: + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.15 + js-yaml: 4.1.1 + '@ark/schema@0.56.0': dependencies: '@ark/util': 0.56.0 @@ -5227,11 +6413,11 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} - '@better-auth/api-key@1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(better-auth@1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7))': + '@better-auth/api-key@1.6.11(0e582a5d6ab9944b6670413694128ee5)': dependencies: '@better-auth/core': 1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 - better-auth: 1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) + better-auth: 1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) zod: 4.4.3 '@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0)': @@ -5291,6 +6477,8 @@ snapshots: '@blazediff/core@1.9.1': {} + '@borewit/text-codec@0.2.2': {} + '@changesets/apply-release-plan@7.1.1': dependencies: '@changesets/config': 3.1.4 @@ -5587,6 +6775,8 @@ snapshots: optionalDependencies: conventional-commits-parser: 6.4.0 + '@date-fns/tz@1.2.0': {} + '@date-fns/tz@1.4.1': {} '@dnd-kit/abstract@0.4.0': @@ -5595,12 +6785,25 @@ snapshots: '@dnd-kit/state': 0.4.0 tslib: 2.8.1 + '@dnd-kit/accessibility@3.1.1(react@19.2.7)': + dependencies: + react: 19.2.7 + tslib: 2.8.1 + '@dnd-kit/collision@0.4.0': dependencies: '@dnd-kit/abstract': 0.4.0 '@dnd-kit/geometry': 0.4.0 tslib: 2.8.1 + '@dnd-kit/core@6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@dnd-kit/accessibility': 3.1.1(react@19.2.7) + '@dnd-kit/utilities': 3.2.2(react@19.2.7) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + tslib: 2.8.1 + '@dnd-kit/dom@0.4.0': dependencies: '@dnd-kit/abstract': 0.4.0 @@ -5619,6 +6822,20 @@ snapshots: '@dnd-kit/abstract': 0.4.0 tslib: 2.8.1 + '@dnd-kit/modifiers@9.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react@19.2.7)': + dependencies: + '@dnd-kit/core': 6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@dnd-kit/utilities': 3.2.2(react@19.2.7) + react: 19.2.7 + tslib: 2.8.1 + + '@dnd-kit/sortable@10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react@19.2.7)': + dependencies: + '@dnd-kit/core': 6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@dnd-kit/utilities': 3.2.2(react@19.2.7) + react: 19.2.7 + tslib: 2.8.1 + '@dnd-kit/state@0.4.0': dependencies: '@preact/signals-core': 1.14.2 @@ -5632,6 +6849,11 @@ snapshots: svelte: 5.55.9(@typescript-eslint/types@8.59.4) tslib: 2.8.1 + '@dnd-kit/utilities@3.2.2(react@19.2.7)': + dependencies: + react: 19.2.7 + tslib: 2.8.1 + '@drizzle-team/brocli@0.10.2': {} '@emnapi/core@1.10.0': @@ -5650,6 +6872,70 @@ snapshots: tslib: 2.8.1 optional: true + '@emotion/babel-plugin@11.13.5': + dependencies: + '@babel/helper-module-imports': 7.28.6 + '@babel/runtime': 7.29.2 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/serialize': 1.3.3 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/cache@11.14.0': + dependencies: + '@emotion/memoize': 0.9.0 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + stylis: 4.2.0 + + '@emotion/hash@0.9.2': {} + + '@emotion/memoize@0.9.0': {} + + '@emotion/react@11.14.0(@types/react@19.2.16)(react@19.2.7)': + dependencies: + '@babel/runtime': 7.29.2 + '@emotion/babel-plugin': 11.13.5 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.7) + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + hoist-non-react-statics: 3.3.2 + react: 19.2.7 + optionalDependencies: + '@types/react': 19.2.16 + transitivePeerDependencies: + - supports-color + + '@emotion/serialize@1.3.3': + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.10.0 + '@emotion/utils': 1.4.2 + csstype: 3.1.3 + + '@emotion/sheet@1.4.0': {} + + '@emotion/unitless@0.10.0': {} + + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.2.7)': + dependencies: + react: 19.2.7 + + '@emotion/utils@1.4.2': {} + + '@emotion/weak-memoize@0.4.0': {} + '@esbuild-kit/core-utils@3.3.2': dependencies: esbuild: 0.18.20 @@ -6003,6 +7289,24 @@ snapshots: '@exodus/schemasafe@1.3.0': optional: true + '@faceless-ui/modal@3.0.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + body-scroll-lock: 4.0.0-beta.0 + focus-trap: 7.5.4 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + react-transition-group: 4.4.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + + '@faceless-ui/scroll-info@2.0.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + + '@faceless-ui/window-info@3.0.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + '@fastify/otel@0.18.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 @@ -6022,6 +7326,20 @@ snapshots: '@floating-ui/core': 1.7.5 '@floating-ui/utils': 0.2.11 + '@floating-ui/react-dom@2.1.8(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@floating-ui/dom': 1.7.6 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + + '@floating-ui/react@0.27.19(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@floating-ui/utils': 0.2.11 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + tabbable: 6.4.0 + '@floating-ui/utils@0.2.11': {} '@gerrit0/mini-shiki@3.23.0': @@ -6056,6 +7374,103 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@img/colour@1.1.0': + optional: true + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.10.0 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': + optional: true + '@inquirer/external-editor@1.0.3(@types/node@25.9.1)': dependencies: chardet: 2.1.1 @@ -6086,6 +7501,175 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@jsdevtools/ono@7.1.3': {} + + '@lexical/clipboard@0.41.0': + dependencies: + '@lexical/html': 0.41.0 + '@lexical/list': 0.41.0 + '@lexical/selection': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/code@0.41.0': + dependencies: + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + prismjs: 1.30.0 + + '@lexical/devtools-core@0.41.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@lexical/html': 0.41.0 + '@lexical/link': 0.41.0 + '@lexical/mark': 0.41.0 + '@lexical/table': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + + '@lexical/dragon@0.41.0': + dependencies: + '@lexical/extension': 0.41.0 + lexical: 0.41.0 + + '@lexical/extension@0.41.0': + dependencies: + '@lexical/utils': 0.41.0 + '@preact/signals-core': 1.14.2 + lexical: 0.41.0 + + '@lexical/hashtag@0.41.0': + dependencies: + '@lexical/text': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/headless@0.41.0': + dependencies: + happy-dom: 20.10.1 + lexical: 0.41.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@lexical/history@0.41.0': + dependencies: + '@lexical/extension': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/html@0.41.0': + dependencies: + '@lexical/selection': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/link@0.41.0': + dependencies: + '@lexical/extension': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/list@0.41.0': + dependencies: + '@lexical/extension': 0.41.0 + '@lexical/selection': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/mark@0.41.0': + dependencies: + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/markdown@0.41.0': + dependencies: + '@lexical/code': 0.41.0 + '@lexical/link': 0.41.0 + '@lexical/list': 0.41.0 + '@lexical/rich-text': 0.41.0 + '@lexical/text': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/offset@0.41.0': + dependencies: + lexical: 0.41.0 + + '@lexical/overflow@0.41.0': + dependencies: + lexical: 0.41.0 + + '@lexical/plain-text@0.41.0': + dependencies: + '@lexical/clipboard': 0.41.0 + '@lexical/dragon': 0.41.0 + '@lexical/selection': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/react@0.41.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(yjs@13.6.31)': + dependencies: + '@floating-ui/react': 0.27.19(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@lexical/devtools-core': 0.41.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@lexical/dragon': 0.41.0 + '@lexical/extension': 0.41.0 + '@lexical/hashtag': 0.41.0 + '@lexical/history': 0.41.0 + '@lexical/link': 0.41.0 + '@lexical/list': 0.41.0 + '@lexical/mark': 0.41.0 + '@lexical/markdown': 0.41.0 + '@lexical/overflow': 0.41.0 + '@lexical/plain-text': 0.41.0 + '@lexical/rich-text': 0.41.0 + '@lexical/table': 0.41.0 + '@lexical/text': 0.41.0 + '@lexical/utils': 0.41.0 + '@lexical/yjs': 0.41.0(yjs@13.6.31) + lexical: 0.41.0 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + react-error-boundary: 6.1.2(react@19.2.7) + transitivePeerDependencies: + - yjs + + '@lexical/rich-text@0.41.0': + dependencies: + '@lexical/clipboard': 0.41.0 + '@lexical/dragon': 0.41.0 + '@lexical/selection': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/selection@0.41.0': + dependencies: + lexical: 0.41.0 + + '@lexical/table@0.41.0': + dependencies: + '@lexical/clipboard': 0.41.0 + '@lexical/extension': 0.41.0 + '@lexical/utils': 0.41.0 + lexical: 0.41.0 + + '@lexical/text@0.41.0': + dependencies: + lexical: 0.41.0 + + '@lexical/utils@0.41.0': + dependencies: + '@lexical/selection': 0.41.0 + lexical: 0.41.0 + + '@lexical/yjs@0.41.0(yjs@13.6.31)': + dependencies: + '@lexical/offset': 0.41.0 + '@lexical/selection': 0.41.0 + lexical: 0.41.0 + yjs: 13.6.31 + '@lucide/svelte@1.16.0(svelte@5.55.9(@typescript-eslint/types@8.59.4))': dependencies: svelte: 5.55.9(@typescript-eslint/types@8.59.4) @@ -6106,6 +7690,17 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 + '@monaco-editor/loader@1.7.0': + dependencies: + state-local: 1.0.7 + + '@monaco-editor/react@4.7.0(monaco-editor@0.55.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@monaco-editor/loader': 1.7.0 + monaco-editor: 0.55.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + '@mrleebo/prisma-ast@0.13.1': dependencies: chevrotain: 10.5.0 @@ -6118,6 +7713,34 @@ snapshots: '@tybys/wasm-util': 0.10.2 optional: true + '@next/env@15.5.19': {} + + '@next/env@16.2.7': {} + + '@next/swc-darwin-arm64@16.2.7': + optional: true + + '@next/swc-darwin-x64@16.2.7': + optional: true + + '@next/swc-linux-arm64-gnu@16.2.7': + optional: true + + '@next/swc-linux-arm64-musl@16.2.7': + optional: true + + '@next/swc-linux-x64-gnu@16.2.7': + optional: true + + '@next/swc-linux-x64-musl@16.2.7': + optional: true + + '@next/swc-win32-arm64-msvc@16.2.7': + optional: true + + '@next/swc-win32-x64-msvc@16.2.7': + optional: true + '@noble/ciphers@2.2.0': {} '@noble/hashes@2.2.0': {} @@ -6484,6 +8107,132 @@ snapshots: '@oxc-project/types@0.130.0': {} + '@payloadcms/graphql@3.85.0(graphql@16.14.1)(payload@3.85.0(graphql@16.14.1)(typescript@6.0.3))(typescript@6.0.3)': + dependencies: + graphql: 16.14.1 + graphql-scalars: 1.22.2(graphql@16.14.1) + payload: 3.85.0(graphql@16.14.1)(typescript@6.0.3) + pluralize: 8.0.0 + ts-essentials: 10.0.3(typescript@6.0.3) + tsx: 4.21.0 + transitivePeerDependencies: + - typescript + + '@payloadcms/next@3.85.0(@types/react@19.2.16)(graphql@16.14.1)(monaco-editor@0.55.1)(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(payload@3.85.0(graphql@16.14.1)(typescript@6.0.3))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3)': + dependencies: + '@dnd-kit/core': 6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@dnd-kit/modifiers': 9.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react@19.2.7) + '@dnd-kit/sortable': 10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react@19.2.7) + '@payloadcms/graphql': 3.85.0(graphql@16.14.1)(payload@3.85.0(graphql@16.14.1)(typescript@6.0.3))(typescript@6.0.3) + '@payloadcms/translations': 3.85.0 + '@payloadcms/ui': 3.85.0(@types/react@19.2.16)(monaco-editor@0.55.1)(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(payload@3.85.0(graphql@16.14.1)(typescript@6.0.3))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + busboy: 1.6.0 + dequal: 2.0.3 + file-type: 21.3.4 + graphql: 16.14.1 + graphql-http: 1.22.4(graphql@16.14.1) + graphql-playground-html: 1.6.30 + http-status: 2.1.0 + next: 16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4) + path-to-regexp: 6.3.0 + payload: 3.85.0(graphql@16.14.1)(typescript@6.0.3) + qs-esm: 8.0.1 + sass: 1.77.4 + uuid: 13.0.2 + transitivePeerDependencies: + - '@types/react' + - monaco-editor + - react + - react-dom + - supports-color + - typescript + + '@payloadcms/richtext-lexical@3.85.0(@faceless-ui/modal@3.0.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@faceless-ui/scroll-info@2.0.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@payloadcms/next@3.85.0(@types/react@19.2.16)(graphql@16.14.1)(monaco-editor@0.55.1)(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(payload@3.85.0(graphql@16.14.1)(typescript@6.0.3))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3))(@types/react@19.2.16)(monaco-editor@0.55.1)(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(payload@3.85.0(graphql@16.14.1)(typescript@6.0.3))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3)(yjs@13.6.31)': + dependencies: + '@faceless-ui/modal': 3.0.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@faceless-ui/scroll-info': 2.0.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@lexical/clipboard': 0.41.0 + '@lexical/headless': 0.41.0 + '@lexical/html': 0.41.0 + '@lexical/link': 0.41.0 + '@lexical/list': 0.41.0 + '@lexical/mark': 0.41.0 + '@lexical/react': 0.41.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(yjs@13.6.31) + '@lexical/rich-text': 0.41.0 + '@lexical/selection': 0.41.0 + '@lexical/table': 0.41.0 + '@lexical/utils': 0.41.0 + '@payloadcms/next': 3.85.0(@types/react@19.2.16)(graphql@16.14.1)(monaco-editor@0.55.1)(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(payload@3.85.0(graphql@16.14.1)(typescript@6.0.3))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@payloadcms/translations': 3.85.0 + '@payloadcms/ui': 3.85.0(@types/react@19.2.16)(monaco-editor@0.55.1)(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(payload@3.85.0(graphql@16.14.1)(typescript@6.0.3))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + acorn: 8.16.0 + bson-objectid: 2.0.4 + csstype: 3.1.3 + dequal: 2.0.3 + escape-html: 1.0.3 + jsox: 1.2.121 + lexical: 0.41.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-mdx-jsx: 3.1.3 + micromark-extension-mdx-jsx: 3.0.1 + payload: 3.85.0(graphql@16.14.1)(typescript@6.0.3) + qs-esm: 8.0.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + react-error-boundary: 4.1.2(react@19.2.7) + ts-essentials: 10.0.3(typescript@6.0.3) + uuid: 13.0.2 + transitivePeerDependencies: + - '@types/react' + - bufferutil + - monaco-editor + - next + - supports-color + - typescript + - utf-8-validate + - yjs + + '@payloadcms/translations@3.85.0': + dependencies: + date-fns: 4.1.0 + + '@payloadcms/ui@3.85.0(@types/react@19.2.16)(monaco-editor@0.55.1)(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(payload@3.85.0(graphql@16.14.1)(typescript@6.0.3))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3)': + dependencies: + '@date-fns/tz': 1.2.0 + '@dnd-kit/core': 6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@dnd-kit/sortable': 10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react@19.2.7) + '@dnd-kit/utilities': 3.2.2(react@19.2.7) + '@faceless-ui/modal': 3.0.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@faceless-ui/scroll-info': 2.0.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@faceless-ui/window-info': 3.0.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@monaco-editor/react': 4.7.0(monaco-editor@0.55.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@payloadcms/translations': 3.85.0 + bson-objectid: 2.0.4 + date-fns: 4.1.0 + dequal: 2.0.3 + md5: 2.3.0 + next: 16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4) + object-to-formdata: 4.5.1 + payload: 3.85.0(graphql@16.14.1)(typescript@6.0.3) + qs-esm: 8.0.1 + react: 19.2.7 + react-datepicker: 7.6.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + react-dom: 19.2.7(react@19.2.7) + react-image-crop: 10.1.8(react@19.2.7) + react-select: 5.9.0(@types/react@19.2.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + scheduler: 0.25.0 + sonner: 1.7.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + ts-essentials: 10.0.3(typescript@6.0.3) + use-context-selector: 2.0.0(react@19.2.7)(scheduler@0.25.0) + uuid: 13.0.2 + transitivePeerDependencies: + - '@types/react' + - monaco-editor + - supports-color + - typescript + + '@pinojs/redact@0.4.0': {} + '@playwright/test@1.60.0': dependencies: playwright: 1.60.0 @@ -6865,7 +8614,7 @@ snapshots: magic-string: 0.30.21 svelte: 5.55.9(@typescript-eslint/types@8.59.4) - '@sentry/sveltekit@10.53.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(rollup@4.60.4)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))': + '@sentry/sveltekit@10.53.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(rollup@4.60.4)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0))': dependencies: '@sentry/cloudflare': 10.53.1 '@sentry/core': 10.53.1 @@ -6873,12 +8622,12 @@ snapshots: '@sentry/svelte': 10.53.1(svelte@5.55.9(@typescript-eslint/types@8.59.4)) '@sentry/vite-plugin': 5.3.0(rollup@4.60.4) '@sveltejs/acorn-typescript': 1.0.10(acorn@8.16.0) - '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) acorn: 8.16.0 magic-string: 0.30.21 sorcery: 1.0.0 optionalDependencies: - vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0) transitivePeerDependencies: - '@cloudflare/workers-types' - '@opentelemetry/exporter-trace-otlp-http' @@ -6941,19 +8690,19 @@ snapshots: dependencies: acorn: 8.16.0 - '@sveltejs/adapter-node@5.5.4(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))': + '@sveltejs/adapter-node@5.5.4(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))': dependencies: '@rollup/plugin-commonjs': 29.0.2(rollup@4.60.4) '@rollup/plugin-json': 6.1.0(rollup@4.60.4) '@rollup/plugin-node-resolve': 16.0.3(rollup@4.60.4) - '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) rollup: 4.60.4 - '@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))': + '@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0))': dependencies: '@standard-schema/spec': 1.1.0 '@sveltejs/acorn-typescript': 1.0.10(acorn@8.16.0) - '@sveltejs/vite-plugin-svelte': 7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + '@sveltejs/vite-plugin-svelte': 7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) '@types/cookie': 0.6.0 acorn: 8.16.0 cookie: 0.6.0 @@ -6965,19 +8714,19 @@ snapshots: set-cookie-parser: 3.1.0 sirv: 3.0.2 svelte: 5.55.9(@typescript-eslint/types@8.59.4) - vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0) optionalDependencies: '@opentelemetry/api': 1.9.1 typescript: 6.0.3 - '@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))': + '@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0))': dependencies: deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.1 svelte: 5.55.9(@typescript-eslint/types@8.59.4) - vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0) - vitefu: 1.1.3(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0) + vitefu: 1.1.3(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) '@svitejs/changesets-changelog-github-compact@1.2.0': dependencies: @@ -6986,6 +8735,10 @@ snapshots: transitivePeerDependencies: - encoding + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + '@swc/helpers@0.5.23': dependencies: tslib: 2.8.1 @@ -7051,12 +8804,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.3.0 '@tailwindcss/oxide-win32-x64-msvc': 4.3.0 - '@tailwindcss/vite@4.3.0(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))': + '@tailwindcss/vite@4.3.0(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0))': dependencies: '@tailwindcss/node': 4.3.0 '@tailwindcss/oxide': 4.3.0 tailwindcss: 4.3.0 - vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0) '@takumi-rs/core-darwin-arm64@1.4.0': optional: true @@ -7082,9 +8835,9 @@ snapshots: '@takumi-rs/core-win32-x64-msvc@1.4.0': optional: true - '@takumi-rs/core@1.4.0': + '@takumi-rs/core@1.4.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@takumi-rs/helpers': 1.4.0 + '@takumi-rs/helpers': 1.4.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) optionalDependencies: '@takumi-rs/core-darwin-arm64': 1.4.0 '@takumi-rs/core-darwin-x64': 1.4.0 @@ -7098,11 +8851,14 @@ snapshots: - react - react-dom - '@takumi-rs/helpers@1.4.0': {} + '@takumi-rs/helpers@1.4.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + optionalDependencies: + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@takumi-rs/wasm@1.4.0': + '@takumi-rs/wasm@1.4.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@takumi-rs/helpers': 1.4.0 + '@takumi-rs/helpers': 1.4.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) transitivePeerDependencies: - react - react-dom @@ -7111,11 +8867,28 @@ snapshots: dependencies: svelte: 5.55.9(@typescript-eslint/types@8.59.4) + '@tokenizer/inflate@0.4.1': + dependencies: + debug: 4.4.3 + token-types: 6.1.2 + transitivePeerDependencies: + - supports-color + + '@tokenizer/token@0.3.0': {} + '@tybys/wasm-util@0.10.2': dependencies: tslib: 2.8.1 optional: true + '@types/acorn@4.0.6': + dependencies: + '@types/estree': 1.0.9 + + '@types/busboy@1.5.4': + dependencies: + '@types/node': 25.9.1 + '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 @@ -7129,6 +8902,10 @@ snapshots: '@types/culori@4.0.1': {} + '@types/debug@4.1.13': + dependencies: + '@types/ms': 2.1.0 + '@types/deep-eql@4.0.2': {} '@types/eslint@9.6.1': @@ -7138,6 +8915,10 @@ snapshots: '@types/esrecurse@4.3.1': {} + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.9 + '@types/estree@1.0.8': {} '@types/estree@1.0.9': {} @@ -7148,6 +8929,14 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/lodash@4.17.24': {} + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/ms@2.1.0': {} + '@types/mysql@2.15.27': dependencies: '@types/node': 25.9.1 @@ -7158,6 +8947,8 @@ snapshots: dependencies: undici-types: 7.24.6 + '@types/parse-json@4.0.2': {} + '@types/pg-pool@2.0.7': dependencies: '@types/pg': 8.15.6 @@ -7168,6 +8959,14 @@ snapshots: pg-protocol: 1.14.0 pg-types: 2.2.0 + '@types/react-transition-group@4.4.12(@types/react@19.2.16)': + dependencies: + '@types/react': 19.2.16 + + '@types/react@19.2.16': + dependencies: + csstype: 3.2.3 + '@types/relaxed-json@1.0.4': {} '@types/resolve@1.20.2': {} @@ -7187,6 +8986,8 @@ snapshots: '@types/trusted-types@2.0.7': {} + '@types/unist@2.0.11': {} + '@types/unist@3.0.3': {} '@types/upng-js@2.1.5': {} @@ -7196,6 +8997,12 @@ snapshots: '@types/webxr@0.5.24': {} + '@types/whatwg-mimetype@3.0.2': {} + + '@types/ws@8.18.1': + dependencies: + '@types/node': 25.9.1 + '@typeschema/class-validator@0.3.0(@types/json-schema@7.0.15)(class-validator@0.14.4)': dependencies: '@typeschema/core': 0.14.0(@types/json-schema@7.0.15) @@ -7321,29 +9128,29 @@ snapshots: validator: 13.15.35 optional: true - '@vitest/browser-playwright@4.1.7(playwright@1.60.0)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7)': + '@vitest/browser-playwright@4.1.7(playwright@1.60.0)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7)': dependencies: - '@vitest/browser': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7) - '@vitest/mocker': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + '@vitest/browser': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7) + '@vitest/mocker': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) playwright: 1.60.0 tinyrainbow: 3.1.0 - vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(happy-dom@20.10.1)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7)': + '@vitest/browser@4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7)': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + '@vitest/mocker': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) '@vitest/utils': 4.1.7 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.0 - vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(happy-dom@20.10.1)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) ws: 8.20.1 transitivePeerDependencies: - bufferutil @@ -7363,9 +9170,9 @@ snapshots: obug: 2.1.1 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(happy-dom@20.10.1)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) optionalDependencies: - '@vitest/browser': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7) + '@vitest/browser': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7) '@vitest/expect@4.1.7': dependencies: @@ -7376,13 +9183,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))': + '@vitest/mocker@4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.7 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0) '@vitest/pretty-format@4.1.7': dependencies: @@ -7411,7 +9218,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(happy-dom@20.10.1)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) '@vitest/utils@4.1.7': dependencies: @@ -7450,6 +9257,13 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.18.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.2 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 @@ -7465,6 +9279,11 @@ snapshots: ansi-styles@6.2.3: {} + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.2 + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -7497,7 +9316,9 @@ snapshots: estree-walker: 3.0.3 js-tokens: 10.0.0 - auth@1.6.11(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(better-call@1.3.5(zod@4.4.3))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(jose@6.2.3)(kysely@0.28.17)(magicast@0.5.3)(nanostores@1.3.0)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7): + atomic-sleep@1.0.0: {} + + auth@1.6.11(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(better-call@1.3.5(zod@4.4.3))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(jose@6.2.3)(kysely@0.28.17)(magicast@0.5.3)(nanostores@1.3.0)(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7): dependencies: '@babel/core': 7.29.0 '@babel/preset-react': 7.28.5(@babel/core@7.29.0) @@ -7507,7 +9328,7 @@ snapshots: '@better-auth/utils': 0.4.0 '@clack/prompts': 0.11.0 '@mrleebo/prisma-ast': 0.13.1 - better-auth: 1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) + better-auth: 1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) c12: 3.3.4(magicast@0.5.3) chalk: 5.6.2 commander: 12.1.0 @@ -7551,11 +9372,17 @@ snapshots: axobject-query@4.1.0: {} + babel-plugin-macros@3.1.0: + dependencies: + '@babel/runtime': 7.29.2 + cosmiconfig: 7.1.0 + resolve: 1.22.12 + balanced-match@4.0.4: {} baseline-browser-mapping@2.10.31: {} - better-auth@1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7): + better-auth@1.6.11(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7): dependencies: '@better-auth/core': 1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/drizzle-adapter': 1.6.11(@better-auth/core@1.6.11(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9)) @@ -7575,11 +9402,14 @@ snapshots: nanostores: 1.3.0 zod: 4.4.3 optionalDependencies: - '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) drizzle-kit: 0.31.10 drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9) + next: 16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) svelte: 5.55.9(@typescript-eslint/types@8.59.4) - vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(happy-dom@20.10.1)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) transitivePeerDependencies: - '@cloudflare/workers-types' - '@opentelemetry/api' @@ -7597,19 +9427,23 @@ snapshots: dependencies: is-windows: 1.0.2 - bits-ui@2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): + binary-extensions@2.3.0: {} + + bits-ui@2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: '@floating-ui/core': 1.7.5 '@floating-ui/dom': 1.7.6 '@internationalized/date': 3.12.1 esm-env: 1.2.2 - runed: 0.35.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + runed: 0.35.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) svelte: 5.55.9(@typescript-eslint/types@8.59.4) - svelte-toolbelt: 0.10.6(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) tabbable: 6.4.0 transitivePeerDependencies: - '@sveltejs/kit' + body-scroll-lock@4.0.0-beta.0: {} + brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 @@ -7626,12 +9460,22 @@ snapshots: node-releases: 2.0.44 update-browserslist-db: 1.2.3(browserslist@4.28.2) + bson-objectid@2.0.4: {} + buffer-from@1.1.2: {} + buffer-image-size@0.6.4: + dependencies: + '@types/node': 25.9.1 + bundle-name@4.1.0: dependencies: run-applescript: 7.1.0 + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + c12@3.3.4(magicast@0.5.3): dependencies: chokidar: 5.0.0 @@ -7656,12 +9500,24 @@ snapshots: caniuse-lite@1.0.30001793: {} + ccount@2.0.1: {} + chai@6.2.2: {} chalk@5.6.2: {} + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + chardet@2.1.1: {} + charenc@0.0.2: {} + chevrotain@10.5.0: dependencies: '@chevrotain/cst-dts-gen': 10.5.0 @@ -7671,6 +9527,18 @@ snapshots: lodash: 4.17.21 regexp-to-ast: 0.5.0 + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -7679,6 +9547,8 @@ snapshots: dependencies: readdirp: 5.0.0 + ci-info@4.4.0: {} + cjs-module-lexer@2.2.0: {} class-validator@0.14.4: @@ -7688,6 +9558,8 @@ snapshots: validator: 13.15.35 optional: true + client-only@0.0.1: {} + cliui@9.0.1: dependencies: string-width: 7.2.0 @@ -7696,10 +9568,14 @@ snapshots: clsx@2.1.1: {} + colorette@2.0.20: {} + commander@12.1.0: {} commander@14.0.3: {} + commander@2.20.3: {} + commondir@1.0.1: {} compare-func@2.0.0: @@ -7711,6 +9587,10 @@ snapshots: confbox@0.2.4: {} + console-table-printer@2.12.1: + dependencies: + simple-wcswidth: 1.1.2 + conventional-changelog-angular@8.3.1: dependencies: compare-func: 2.0.0 @@ -7724,6 +9604,8 @@ snapshots: '@simple-libs/stream-utils': 1.2.0 meow: 13.2.0 + convert-source-map@1.9.0: {} + convert-source-map@2.0.0: {} cookie@0.6.0: {} @@ -7735,6 +9617,14 @@ snapshots: jiti: 2.6.1 typescript: 6.0.3 + cosmiconfig@7.1.0: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.1 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.3 + cosmiconfig@9.0.1(typescript@6.0.3): dependencies: env-paths: 2.2.1 @@ -7744,20 +9634,38 @@ snapshots: optionalDependencies: typescript: 6.0.3 + croner@10.0.1: {} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 + crypt@0.0.2: {} + cssesc@3.0.0: {} + cssfilter@0.0.10: {} + + csstype@3.1.3: {} + + csstype@3.2.3: {} + culori@4.0.2: {} dataloader@1.4.0: {} + dataloader@2.2.3: {} + + date-fns@3.6.0: {} + + date-fns@4.1.0: {} + date-fns@4.2.1: {} + dateformat@4.6.3: {} + dayjs@1.11.20: optional: true @@ -7765,6 +9673,10 @@ snapshots: dependencies: ms: 2.1.3 + decode-named-character-reference@1.3.0: + dependencies: + character-entities: 2.0.2 + deep-is@0.1.4: {} deepmerge@4.3.1: {} @@ -7790,6 +9702,10 @@ snapshots: devalue@5.8.1: {} + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -7797,6 +9713,15 @@ snapshots: dlv@1.1.3: optional: true + dom-helpers@5.2.1: + dependencies: + '@babel/runtime': 7.29.2 + csstype: 3.1.3 + + dompurify@3.2.7: + optionalDependencies: + '@types/trusted-types': 2.0.7 + dot-prop@5.3.0: dependencies: is-obj: 2.0.0 @@ -7840,6 +9765,10 @@ snapshots: emoji-regex@10.6.0: {} + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + enhanced-resolve@5.21.6: dependencies: graceful-fs: 4.2.11 @@ -7852,6 +9781,8 @@ snapshots: entities@4.5.0: {} + entities@7.0.1: {} + env-paths@2.2.1: {} error-ex@1.3.4: @@ -7978,6 +9909,8 @@ snapshots: escalade@3.2.0: {} + escape-html@1.0.3: {} + escape-string-regexp@4.0.0: {} eslint-config-prettier@10.1.8(eslint@10.4.0(jiti@2.7.0)): @@ -8089,6 +10022,13 @@ snapshots: estraverse@5.3.0: {} + estree-util-is-identifier-name@3.0.0: {} + + estree-util-visit@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 + estree-walker@2.0.2: {} estree-walker@3.0.3: @@ -8123,6 +10063,8 @@ snapshots: pure-rand: 6.1.0 optional: true + fast-copy@3.0.2: {} + fast-deep-equal@3.1.3: {} fast-glob@3.3.3: @@ -8137,6 +10079,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-safe-stringify@2.1.1: {} + fast-uri@3.1.2: {} fastq@1.20.1: @@ -8159,10 +10103,21 @@ snapshots: dependencies: flat-cache: 4.0.1 + file-type@21.3.4: + dependencies: + '@tokenizer/inflate': 0.4.1 + strtok3: 10.3.5 + token-types: 6.1.2 + uint8array-extras: 1.5.0 + transitivePeerDependencies: + - supports-color + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 + find-root@1.1.0: {} + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -8185,11 +10140,15 @@ snapshots: flatted@3.4.2: {} - formsnap@2.0.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)): + focus-trap@7.5.4: + dependencies: + tabbable: 6.4.0 + + formsnap@2.0.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)): dependencies: svelte: 5.55.9(@typescript-eslint/types@8.59.4) svelte-toolbelt: 0.5.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)) - sveltekit-superforms: 2.30.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3) + sveltekit-superforms: 2.30.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3) forwarded-parse@2.1.2: {} @@ -8234,6 +10193,10 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + get-tsconfig@4.8.1: + dependencies: + resolve-pkg-maps: 1.0.0 + giget@3.2.0: {} git-raw-commits@5.0.1(conventional-commits-parser@6.4.0): @@ -8290,14 +10253,50 @@ snapshots: graceful-fs@4.2.11: {} + graphql-http@1.22.4(graphql@16.14.1): + dependencies: + graphql: 16.14.1 + + graphql-playground-html@1.6.30: + dependencies: + xss: 1.0.15 + + graphql-scalars@1.22.2(graphql@16.14.1): + dependencies: + graphql: 16.14.1 + tslib: 2.8.1 + + graphql@16.14.1: {} + + happy-dom@20.10.1: + dependencies: + '@types/node': 25.9.1 + '@types/whatwg-mimetype': 3.0.2 + '@types/ws': 8.18.1 + buffer-image-size: 0.6.4 + entities: 7.0.1 + whatwg-mimetype: 3.0.0 + ws: 8.20.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + has-flag@4.0.0: {} hasown@2.0.3: dependencies: function-bind: 1.1.2 + help-me@5.0.0: {} + + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + html-escaper@2.0.2: {} + http-status@2.1.0: {} + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 @@ -8313,10 +10312,16 @@ snapshots: dependencies: safer-buffer: 2.1.2 + ieee754@1.2.1: {} + ignore@5.3.2: {} ignore@7.0.5: {} + image-size@2.0.2: {} + + immutable@4.3.8: {} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 @@ -8342,12 +10347,29 @@ snapshots: inline-style-parser@0.2.7: {} + ipaddr.js@2.2.0: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + is-arrayish@0.2.1: {} + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-buffer@1.1.6: {} + is-core-module@2.16.2: dependencies: hasown: 2.0.3 + is-decimal@2.0.1: {} + is-docker@3.0.0: {} is-extglob@2.1.1: {} @@ -8356,6 +10378,8 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-hexadecimal@2.0.1: {} + is-inside-container@1.0.0: dependencies: is-docker: 3.0.0 @@ -8394,6 +10418,8 @@ snapshots: isexe@2.0.0: {} + isomorphic.js@0.2.5: {} + istanbul-lib-coverage@3.2.2: {} istanbul-lib-report@3.0.1: @@ -8420,8 +10446,12 @@ snapshots: '@sideway/pinpoint': 2.0.0 optional: true + jose@5.10.0: {} + jose@6.2.3: {} + joycon@3.1.1: {} + js-tokens@10.0.0: {} js-tokens@4.0.0: {} @@ -8447,6 +10477,18 @@ snapshots: ts-algebra: 2.0.0 optional: true + json-schema-to-typescript@15.0.3: + dependencies: + '@apidevtools/json-schema-ref-parser': 11.9.3 + '@types/json-schema': 7.0.15 + '@types/lodash': 4.17.24 + is-glob: 4.0.3 + js-yaml: 4.1.1 + lodash: 4.17.21 + minimist: 1.2.8 + prettier: 3.8.3 + tinyglobby: 0.2.16 + json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} @@ -8467,6 +10509,8 @@ snapshots: jsonpointer@5.0.1: {} + jsox@1.2.121: {} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -8488,6 +10532,12 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lexical@0.41.0: {} + + lib0@0.2.117: + dependencies: + isomorphic.js: 0.2.5 + libphonenumber-js@1.13.2: optional: true @@ -8566,6 +10616,12 @@ snapshots: lodash@4.17.21: {} + longest-streak@3.1.0: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + lru-cache@11.5.0: {} lru-cache@5.1.1: @@ -8599,8 +10655,73 @@ snapshots: punycode.js: 2.3.1 uc.micro: 2.1.0 + marked@14.0.0: {} + + md5@2.3.0: + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + + mdast-util-from-markdown@2.0.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.1.3: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.1.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdurl@2.0.0: {} + memoize-one@6.0.0: {} + memoize-weak@1.0.2: {} meow@13.2.0: {} @@ -8609,6 +10730,175 @@ snapshots: meshoptimizer@0.18.1: {} + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-jsx@3.0.1: + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.9 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-mdx-expression@2.0.3: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.3.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-events-to-acorn@2.0.3: + dependencies: + '@types/estree': 1.0.9 + '@types/unist': 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.13 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -8624,6 +10914,11 @@ snapshots: module-details-from-path@1.0.4: {} + monaco-editor@0.55.1: + dependencies: + dompurify: 3.2.7 + marked: 14.0.0 + mri@1.2.0: {} mrmime@2.0.1: {} @@ -8636,12 +10931,41 @@ snapshots: natural-compare@1.4.0: {} + next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4): + dependencies: + '@next/env': 16.2.7 + '@swc/helpers': 0.5.15 + baseline-browser-mapping: 2.10.31 + caniuse-lite: 1.0.30001793 + postcss: 8.4.31 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.7) + optionalDependencies: + '@next/swc-darwin-arm64': 16.2.7 + '@next/swc-darwin-x64': 16.2.7 + '@next/swc-linux-arm64-gnu': 16.2.7 + '@next/swc-linux-arm64-musl': 16.2.7 + '@next/swc-linux-x64-gnu': 16.2.7 + '@next/swc-linux-x64-musl': 16.2.7 + '@next/swc-win32-arm64-msvc': 16.2.7 + '@next/swc-win32-x64-msvc': 16.2.7 + '@opentelemetry/api': 1.9.1 + '@playwright/test': 1.60.0 + sass: 1.77.4 + sharp: 0.34.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 node-releases@2.0.44: {} + normalize-path@3.0.0: {} + normalize-url@8.1.1: optional: true @@ -8652,10 +10976,20 @@ snapshots: numerable@0.3.15: {} + object-assign@4.1.1: {} + + object-to-formdata@4.5.1: {} + obug@2.1.1: {} ohash@2.0.11: {} + on-exit-leak-free@2.1.2: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + open@10.2.0: dependencies: default-browser: 5.5.0 @@ -8758,6 +11092,16 @@ snapshots: dependencies: callsites: 3.1.0 + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.3.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.29.0 @@ -8780,10 +11124,52 @@ snapshots: lru-cache: 11.5.0 minipass: 7.1.3 + path-to-regexp@6.3.0: {} + path-type@4.0.0: {} pathe@2.0.3: {} + payload@3.85.0(graphql@16.14.1)(typescript@6.0.3): + dependencies: + '@next/env': 15.5.19 + '@payloadcms/translations': 3.85.0 + '@types/busboy': 1.5.4 + ajv: 8.18.0 + bson-objectid: 2.0.4 + busboy: 1.6.0 + ci-info: 4.4.0 + console-table-printer: 2.12.1 + croner: 10.0.1 + dataloader: 2.2.3 + deepmerge: 4.3.1 + file-type: 21.3.4 + get-tsconfig: 4.8.1 + graphql: 16.14.1 + http-status: 2.1.0 + image-size: 2.0.2 + ipaddr.js: 2.2.0 + jose: 5.10.0 + json-schema-to-typescript: 15.0.3 + minimist: 1.2.8 + path-to-regexp: 6.3.0 + pino: 9.14.0 + pino-pretty: 13.1.2 + pluralize: 8.0.0 + qs-esm: 8.0.1 + range-parser: 1.2.1 + sanitize-filename: 1.6.3 + ts-essentials: 10.0.3(typescript@6.0.3) + tsx: 4.21.0 + undici: 7.24.4 + uuid: 13.0.2 + ws: 8.20.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - typescript + - utf-8-validate + perfect-debounce@2.1.0: {} pg-int8@1.0.1: {} @@ -8806,6 +11192,42 @@ snapshots: pify@4.0.1: {} + pino-abstract-transport@2.0.0: + dependencies: + split2: 4.2.0 + + pino-pretty@13.1.2: + dependencies: + colorette: 2.0.20 + dateformat: 4.6.3 + fast-copy: 3.0.2 + fast-safe-stringify: 2.1.1 + help-me: 5.0.0 + joycon: 3.1.1 + minimist: 1.2.8 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pump: 3.0.4 + secure-json-parse: 4.1.0 + sonic-boom: 4.2.1 + strip-json-comments: 5.0.3 + + pino-std-serializers@7.1.0: {} + + pino@9.14.0: + dependencies: + '@pinojs/redact': 0.4.0 + atomic-sleep: 1.0.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pino-std-serializers: 7.1.0 + process-warning: 5.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.2.1 + thread-stream: 3.2.0 + pkg-types@2.3.1: dependencies: confbox: 0.2.4 @@ -8820,6 +11242,8 @@ snapshots: optionalDependencies: fsevents: 2.3.2 + pluralize@8.0.0: {} + pngjs@7.0.0: {} postcss-load-config@3.1.4(postcss@8.5.15): @@ -8842,6 +11266,12 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 + postcss@8.4.31: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postcss@8.5.15: dependencies: nanoid: 3.3.12 @@ -8881,6 +11311,10 @@ snapshots: dependencies: parse-ms: 4.0.0 + prismjs@1.30.0: {} + + process-warning@5.0.0: {} + progress@2.0.3: {} prompts@2.4.2: @@ -8888,11 +11322,22 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + property-expr@2.0.6: optional: true proxy-from-env@1.1.0: {} + pump@3.0.4: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + punycode.js@2.3.1: {} punycode@2.3.1: {} @@ -8900,15 +11345,77 @@ snapshots: pure-rand@6.1.0: optional: true + qs-esm@8.0.1: {} + quansync@0.2.11: {} queue-microtask@1.2.3: {} + quick-format-unescaped@4.0.4: {} + + range-parser@1.2.1: {} + rc9@3.0.1: dependencies: defu: 6.1.7 destr: 2.0.5 + react-datepicker@7.6.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7): + dependencies: + '@floating-ui/react': 0.27.19(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + clsx: 2.1.1 + date-fns: 3.6.0 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + + react-dom@19.2.7(react@19.2.7): + dependencies: + react: 19.2.7 + scheduler: 0.27.0 + + react-error-boundary@4.1.2(react@19.2.7): + dependencies: + '@babel/runtime': 7.29.2 + react: 19.2.7 + + react-error-boundary@6.1.2(react@19.2.7): + dependencies: + react: 19.2.7 + + react-image-crop@10.1.8(react@19.2.7): + dependencies: + react: 19.2.7 + + react-is@16.13.1: {} + + react-select@5.9.0(@types/react@19.2.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): + dependencies: + '@babel/runtime': 7.29.2 + '@emotion/cache': 11.14.0 + '@emotion/react': 11.14.0(@types/react@19.2.16)(react@19.2.7) + '@floating-ui/dom': 1.7.6 + '@types/react-transition-group': 4.4.12(@types/react@19.2.16) + memoize-one: 6.0.0 + prop-types: 15.8.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + react-transition-group: 4.4.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + use-isomorphic-layout-effect: 1.2.1(@types/react@19.2.16)(react@19.2.7) + transitivePeerDependencies: + - '@types/react' + - supports-color + + react-transition-group@4.4.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7): + dependencies: + '@babel/runtime': 7.29.2 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + + react@19.2.7: {} + read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 @@ -8916,10 +11423,16 @@ snapshots: pify: 4.0.1 strip-bom: 3.0.0 + readdirp@3.6.0: + dependencies: + picomatch: 2.3.2 + readdirp@4.1.2: {} readdirp@5.0.0: {} + real-require@0.2.0: {} + regexp-to-ast@0.5.0: {} remeda@2.34.1: {} @@ -9023,43 +11536,93 @@ snapshots: esm-env: 1.2.2 svelte: 5.55.9(@typescript-eslint/types@8.59.4) - runed@0.35.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): + runed@0.35.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 svelte: 5.55.9(@typescript-eslint/types@8.59.4) optionalDependencies: - '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) - runed@0.37.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(zod@4.4.3): + runed@0.37.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(zod@4.4.3): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 svelte: 5.55.9(@typescript-eslint/types@8.59.4) optionalDependencies: - '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) zod: 4.4.3 sade@1.8.1: dependencies: mri: 1.2.0 + safe-stable-stringify@2.5.0: {} + safer-buffer@2.1.2: {} + sanitize-filename@1.6.3: + dependencies: + truncate-utf8-bytes: 1.0.2 + + sass@1.77.4: + dependencies: + chokidar: 3.6.0 + immutable: 4.3.8 + source-map-js: 1.2.1 + satori-html@0.3.2: dependencies: ultrahtml: 1.6.0 + scheduler@0.25.0: {} + + scheduler@0.27.0: {} + schema-dts@1.1.5: {} + secure-json-parse@4.1.0: {} + semver@6.3.1: {} semver@7.8.0: {} set-cookie-parser@3.1.0: {} + sharp@0.34.5: + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.0 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + optional: true + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -9072,6 +11635,8 @@ snapshots: simple-git-hooks@2.13.1: {} + simple-wcswidth@1.1.2: {} + sirv@3.0.2: dependencies: '@polka/url': 1.0.0-next.29 @@ -9092,6 +11657,15 @@ snapshots: slash@5.1.0: {} + sonic-boom@4.2.1: + dependencies: + atomic-sleep: 1.0.0 + + sonner@1.7.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7): + dependencies: + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + sorcery@1.0.0: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -9105,6 +11679,8 @@ snapshots: buffer-from: 1.1.2 source-map: 0.6.1 + source-map@0.5.7: {} + source-map@0.6.1: {} spawndamnit@3.0.1: @@ -9112,12 +11688,18 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 + split2@4.2.0: {} + sprintf-js@1.0.3: {} stackback@0.0.2: {} + state-local@1.0.7: {} + std-env@4.1.0: {} + streamsearch@1.1.0: {} + string-argv@0.3.2: {} string-width@7.2.0: @@ -9126,6 +11708,11 @@ snapshots: get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -9138,10 +11725,25 @@ snapshots: strip-final-newline@4.0.0: {} + strip-json-comments@5.0.3: {} + + strtok3@10.3.5: + dependencies: + '@tokenizer/token': 0.3.0 + style-to-object@1.0.14: dependencies: inline-style-parser: 0.2.7 + styled-jsx@5.1.6(@babel/core@7.29.0)(react@19.2.7): + dependencies: + client-only: 0.0.1 + react: 19.2.7 + optionalDependencies: + '@babel/core': 7.29.0 + + stylis@4.2.0: {} + super-sitemap@1.0.12(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: svelte: 5.55.9(@typescript-eslint/types@8.59.4) @@ -9197,10 +11799,10 @@ snapshots: dependencies: svelte: 5.55.9(@typescript-eslint/types@8.59.4) - svelte-toolbelt@0.10.6(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): + svelte-toolbelt@0.10.6(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: clsx: 2.1.1 - runed: 0.35.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + runed: 0.35.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) style-to-object: 1.0.14 svelte: 5.55.9(@typescript-eslint/types@8.59.4) transitivePeerDependencies: @@ -9247,9 +11849,9 @@ snapshots: transitivePeerDependencies: - '@typescript-eslint/types' - sveltekit-superforms@2.30.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3): + sveltekit-superforms@2.30.1(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3): dependencies: - '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) devalue: 5.8.1 memoize-weak: 1.0.2 svelte: 5.55.9(@typescript-eslint/types@8.59.4) @@ -9285,11 +11887,11 @@ snapshots: tailwindcss@4.3.0: {} - takumi-js@1.4.0: + takumi-js@1.4.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: - '@takumi-rs/core': 1.4.0 - '@takumi-rs/helpers': 1.4.0 - '@takumi-rs/wasm': 1.4.0 + '@takumi-rs/core': 1.4.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@takumi-rs/helpers': 1.4.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@takumi-rs/wasm': 1.4.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) transitivePeerDependencies: - react - react-dom @@ -9298,6 +11900,10 @@ snapshots: term-size@2.2.1: {} + thread-stream@3.2.0: + dependencies: + real-require: 0.2.0 + three@0.156.1: {} tiny-case@1.0.3: @@ -9323,6 +11929,12 @@ snapshots: dependencies: is-number: 7.0.0 + token-types@6.1.2: + dependencies: + '@borewit/text-codec': 0.2.2 + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + toposort@2.0.2: optional: true @@ -9330,6 +11942,10 @@ snapshots: tr46@0.0.3: {} + truncate-utf8-bytes@1.0.2: + dependencies: + utf8-byte-length: 1.0.5 + ts-algebra@2.0.0: optional: true @@ -9339,8 +11955,19 @@ snapshots: ts-deepmerge@7.0.3: {} + ts-essentials@10.0.3(typescript@6.0.3): + optionalDependencies: + typescript: 6.0.3 + tslib@2.8.1: {} + tsx@4.21.0: + dependencies: + esbuild: 0.27.7 + get-tsconfig: 4.14.0 + optionalDependencies: + fsevents: 2.3.3 + tsx@4.22.3: dependencies: esbuild: 0.28.0 @@ -9389,14 +12016,41 @@ snapshots: uc.micro@2.1.0: {} + uint8array-extras@1.5.0: {} + ultrahtml@1.6.0: {} undici-types@7.24.6: {} + undici@7.24.4: {} + unicorn-magic@0.3.0: {} unicorn-magic@0.4.0: {} + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position-from-estree@2.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + universalify@0.1.2: {} universalify@2.0.1: {} @@ -9411,8 +12065,23 @@ snapshots: dependencies: punycode: 2.3.1 + use-context-selector@2.0.0(react@19.2.7)(scheduler@0.25.0): + dependencies: + react: 19.2.7 + scheduler: 0.25.0 + + use-isomorphic-layout-effect@1.2.1(@types/react@19.2.16)(react@19.2.7): + dependencies: + react: 19.2.7 + optionalDependencies: + '@types/react': 19.2.16 + + utf8-byte-length@1.0.5: {} + util-deprecate@1.0.2: {} + uuid@13.0.2: {} + valibot@1.4.0(typescript@6.0.3): optionalDependencies: typescript: 6.0.3 @@ -9427,7 +12096,12 @@ snapshots: svelte: 5.55.9(@typescript-eslint/types@8.59.4) svelte-toolbelt: 0.7.1(svelte@5.55.9(@typescript-eslint/types@8.59.4)) - vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0): + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -9439,23 +12113,24 @@ snapshots: esbuild: 0.28.0 fsevents: 2.3.3 jiti: 2.7.0 + sass: 1.77.4 tsx: 4.22.3 yaml: 2.9.0 - vitefu@1.1.3(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)): + vitefu@1.1.3(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)): optionalDependencies: - vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0) vitest-browser-svelte@2.1.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7): dependencies: '@testing-library/svelte-core': 1.0.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)) svelte: 5.55.9(@typescript-eslint/types@8.59.4) - vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(happy-dom@20.10.1)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) - vitest@4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)): + vitest@4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(happy-dom@20.10.1)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.7 - '@vitest/mocker': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + '@vitest/mocker': 4.1.7(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.7 '@vitest/runner': 4.1.7 '@vitest/snapshot': 4.1.7 @@ -9472,19 +12147,22 @@ snapshots: tinyexec: 1.1.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0) + vite: 8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 '@types/node': 25.9.1 - '@vitest/browser-playwright': 4.1.7(playwright@1.60.0)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7) + '@vitest/browser-playwright': 4.1.7(playwright@1.60.0)(vite@8.0.13(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7) '@vitest/coverage-v8': 4.1.7(@vitest/browser@4.1.7)(vitest@4.1.7) '@vitest/ui': 4.1.7(vitest@4.1.7) + happy-dom: 20.10.1 transitivePeerDependencies: - msw webidl-conversions@3.0.1: {} + whatwg-mimetype@3.0.0: {} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -9507,12 +12185,19 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.2.0 + wrappy@1.0.2: {} + ws@8.20.1: {} wsl-utils@0.1.0: dependencies: is-wsl: 3.1.1 + xss@1.0.15: + dependencies: + commander: 2.20.3 + cssfilter: 0.0.10 + xtend@4.0.2: {} y18n@5.0.8: {} @@ -9534,6 +12219,10 @@ snapshots: y18n: 5.0.8 yargs-parser: 22.0.0 + yjs@13.6.31: + dependencies: + lib0: 0.2.117 + yocto-queue@0.1.0: {} yocto-queue@1.2.2: {} @@ -9560,3 +12249,5 @@ snapshots: optional: true zod@4.4.3: {} + + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 608ecf7ba..6aed53353 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,6 +3,7 @@ allowBuilds: "@sentry/cli": true better-sqlite3: true esbuild: true + sharp: false simple-git-hooks: true minimumReleaseAgeExclude: - "@takumi-rs/core-darwin-arm64@1.4.0" diff --git a/src/lib/components/newsroom/lexical/LexicalRenderer.svelte b/src/lib/components/newsroom/lexical/LexicalRenderer.svelte deleted file mode 100644 index ae6e8d934..000000000 --- a/src/lib/components/newsroom/lexical/LexicalRenderer.svelte +++ /dev/null @@ -1,43 +0,0 @@ - - -{#each nodes as node, i (i)} - {#if node.type === "linebreak"} -
    - {:else if node.type === "horizontalrule"} -
    - {:else if registry[node.type]} - {@const Element = registry[node.type]} - - {:else if node.children} - - {/if} -{/each} diff --git a/src/lib/components/newsroom/lexical/ModifierWrapper.svelte b/src/lib/components/newsroom/lexical/ModifierWrapper.svelte deleted file mode 100644 index a4681b15d..000000000 --- a/src/lib/components/newsroom/lexical/ModifierWrapper.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - -{#if Mod} - - {#if hasMore}{:else}{text}{/if} - -{:else}{text}{/if} diff --git a/src/lib/components/newsroom/lexical/TextRenderer.svelte b/src/lib/components/newsroom/lexical/TextRenderer.svelte deleted file mode 100644 index edb09b5b8..000000000 --- a/src/lib/components/newsroom/lexical/TextRenderer.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - -{#each parts as part, i (i)}{#if i < parts.length - 1}
    {/if}{/each} diff --git a/src/lib/components/newsroom/lexical/elements/Blockquote.svelte b/src/lib/components/newsroom/lexical/elements/Blockquote.svelte deleted file mode 100644 index 66896982b..000000000 --- a/src/lib/components/newsroom/lexical/elements/Blockquote.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - -
    - -
    diff --git a/src/lib/components/newsroom/lexical/elements/Heading.svelte b/src/lib/components/newsroom/lexical/elements/Heading.svelte deleted file mode 100644 index 73b4ce2de..000000000 --- a/src/lib/components/newsroom/lexical/elements/Heading.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - - - diff --git a/src/lib/components/newsroom/lexical/elements/Link.svelte b/src/lib/components/newsroom/lexical/elements/Link.svelte deleted file mode 100644 index e28601ea1..000000000 --- a/src/lib/components/newsroom/lexical/elements/Link.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/src/lib/components/newsroom/lexical/elements/List.svelte b/src/lib/components/newsroom/lexical/elements/List.svelte deleted file mode 100644 index f5b78e181..000000000 --- a/src/lib/components/newsroom/lexical/elements/List.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - - - - diff --git a/src/lib/components/newsroom/lexical/elements/ListItem.svelte b/src/lib/components/newsroom/lexical/elements/ListItem.svelte deleted file mode 100644 index 3cfecb7bd..000000000 --- a/src/lib/components/newsroom/lexical/elements/ListItem.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - -{#if isCheck} -
  • - - - - -
  • -{:else} -
  • - -
  • -{/if} diff --git a/src/lib/components/newsroom/lexical/elements/Paragraph.svelte b/src/lib/components/newsroom/lexical/elements/Paragraph.svelte deleted file mode 100644 index 362d382e8..000000000 --- a/src/lib/components/newsroom/lexical/elements/Paragraph.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - -

    - -

    diff --git a/src/lib/components/newsroom/lexical/elements/Relationship.svelte b/src/lib/components/newsroom/lexical/elements/Relationship.svelte deleted file mode 100644 index f6e4ab947..000000000 --- a/src/lib/components/newsroom/lexical/elements/Relationship.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -{#if user && name} - {#if user.mcUuid} - - {name} - {:else} - {name} - {/if} -{/if} diff --git a/src/lib/components/newsroom/lexical/elements/RichText.svelte b/src/lib/components/newsroom/lexical/elements/RichText.svelte index 841c121f0..b0c562713 100644 --- a/src/lib/components/newsroom/lexical/elements/RichText.svelte +++ b/src/lib/components/newsroom/lexical/elements/RichText.svelte @@ -1,8 +1,95 @@ - +
    + + {@html html} +
    + + diff --git a/src/lib/components/newsroom/lexical/elements/Upload.svelte b/src/lib/components/newsroom/lexical/elements/Upload.svelte deleted file mode 100644 index 56be397e6..000000000 --- a/src/lib/components/newsroom/lexical/elements/Upload.svelte +++ /dev/null @@ -1,18 +0,0 @@ - - -{#if src} -
    - -
    -{/if} diff --git a/src/lib/components/newsroom/lexical/inline/Bold.svelte b/src/lib/components/newsroom/lexical/inline/Bold.svelte deleted file mode 100644 index ed6017faf..000000000 --- a/src/lib/components/newsroom/lexical/inline/Bold.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - -{@render children()} diff --git a/src/lib/components/newsroom/lexical/inline/Code.svelte b/src/lib/components/newsroom/lexical/inline/Code.svelte deleted file mode 100644 index c52492bea..000000000 --- a/src/lib/components/newsroom/lexical/inline/Code.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - -{@render children()} diff --git a/src/lib/components/newsroom/lexical/inline/Italic.svelte b/src/lib/components/newsroom/lexical/inline/Italic.svelte deleted file mode 100644 index 2ec264eb1..000000000 --- a/src/lib/components/newsroom/lexical/inline/Italic.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - -{@render children()} diff --git a/src/lib/components/newsroom/lexical/inline/Strikethrough.svelte b/src/lib/components/newsroom/lexical/inline/Strikethrough.svelte deleted file mode 100644 index 2d3f10731..000000000 --- a/src/lib/components/newsroom/lexical/inline/Strikethrough.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - -{@render children()} diff --git a/src/lib/components/newsroom/lexical/inline/Underline.svelte b/src/lib/components/newsroom/lexical/inline/Underline.svelte deleted file mode 100644 index c68907aca..000000000 --- a/src/lib/components/newsroom/lexical/inline/Underline.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - -{@render children()} diff --git a/src/lib/components/newsroom/lexical/lexical.ts b/src/lib/components/newsroom/lexical/lexical.ts deleted file mode 100644 index f0e74d405..000000000 --- a/src/lib/components/newsroom/lexical/lexical.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** Lexical text-format bitfield flags. */ -export const FORMAT = { - BOLD: 1, - ITALIC: 2, - STRIKETHROUGH: 4, - UNDERLINE: 8, - CODE: 16 -} as const; - -export type Modifier = "bold" | "italic" | "underline" | "strikethrough" | "code"; - -/** Active text modifiers for a Lexical text node's `format` bitfield, outermost first. */ -export function getActiveModifiers(format: number | string | undefined): Modifier[] { - const bits = typeof format === "number" ? format : 0; - const mods: Modifier[] = []; - if (bits & FORMAT.BOLD) mods.push("bold"); - if (bits & FORMAT.ITALIC) mods.push("italic"); - if (bits & FORMAT.UNDERLINE) mods.push("underline"); - if (bits & FORMAT.STRIKETHROUGH) mods.push("strikethrough"); - if (bits & FORMAT.CODE) mods.push("code"); - return mods; -} diff --git a/src/lib/shared/cms/rich-text-html.spec.ts b/src/lib/shared/cms/rich-text-html.spec.ts new file mode 100644 index 000000000..dcc022e20 --- /dev/null +++ b/src/lib/shared/cms/rich-text-html.spec.ts @@ -0,0 +1,203 @@ +import { describe, it } from "vitest"; +import { richTextToHtml } from "./rich-text-html"; + +type TestNode = { + type: string; + version: number; + [key: string]: unknown; +}; + +const root = (children: TestNode[]) => ({ + root: { + type: "root", + children, + direction: "ltr" as const, + format: "" as const, + indent: 0, + version: 1 + } +}); + +const text = (value: string, format = 0) => ({ + type: "text", + text: value, + detail: 0, + format, + mode: "normal", + style: "", + version: 1 +}); + +const paragraph = (children: TestNode[]): TestNode => ({ + type: "paragraph", + children, + direction: "ltr", + format: "", + indent: 0, + textFormat: 0, + textStyle: "", + version: 1 +}); + +describe.concurrent("richTextToHtml()", () => { + it("escapes script tags in paragraph text", ({ expect }) => { + const result = richTextToHtml(root([paragraph([text("")])])); + + expect(result).not.toContain(" @@ -22,8 +22,8 @@
    - {#if themeIcon} - + {#if themeIconQuery.current} + {:else} {/if} diff --git a/src/lib/components/misc/Chip.svelte b/src/lib/components/misc/Chip.svelte index 7520043f5..fc8b96a90 100644 --- a/src/lib/components/misc/Chip.svelte +++ b/src/lib/components/misc/Chip.svelte @@ -41,11 +41,11 @@ let hasBeenInViewport = $state(false); let open = $state(false); - const inViewport = $derived(image ? new IsInViewport(() => targetNode, { rootMargin: "200px 0px", threshold: 0 }) : undefined); + const inViewport = new IsInViewport(() => (image ? targetNode : null), { rootMargin: "200px 0px", threshold: 0 }); const internalState = getInternalState(); $effect(() => { - if (inViewport?.current && !hasBeenInViewport) { + if (inViewport.current && !hasBeenInViewport) { hasBeenInViewport = true; } }); diff --git a/src/lib/components/misc/Navbar.svelte b/src/lib/components/misc/Navbar.svelte index a8c8f9ca7..6ec682911 100644 --- a/src/lib/components/misc/Navbar.svelte +++ b/src/lib/components/misc/Navbar.svelte @@ -51,11 +51,13 @@ function scrollToTab({ element, smooth = true, - options + options, + retries = 5 }: { element?: HTMLElement | null; smooth?: boolean; options?: ScrollIntoViewOptions; + retries?: number; } = {}) { const scrollOptions = options ?? { behavior: smooth ? "smooth" : "auto", @@ -66,7 +68,11 @@ const link = element ?? document.querySelector(`button[data-id="${internalState.tabValue}"]`); if (link == null) { - console.warn(`could not scroll to ${location.hash} tab because it does not exist`, link); + // Button may not be in the DOM yet — bits-ui's ScrollArea.Viewport sometimes mounts children + // a frame later than its root. Retry on rAF, bounded. + if (retries > 0) { + requestAnimationFrame(() => scrollToTab({ smooth, options, retries: retries - 1 })); + } return; } @@ -79,7 +85,8 @@ return; } - const topValue = parseInt(window.getComputedStyle(navbarElement).getPropertyValue("top")); + const parsedTop = parseInt(window.getComputedStyle(navbarElement).getPropertyValue("top")); + const topValue = Number.isFinite(parsedTop) ? parsedTop : 0; observer = new IntersectionObserver( ([e]) => { @@ -113,15 +120,18 @@ observerCleanup(); }); - // Effect to handle tab value changes and update URL + // Effect to handle tab value changes and update URL. + // Depends on filteredSectionOrderPreferences so it re-runs once the tab buttons populate, + // since the target button is rendered from that list and may not exist on the initial mount tick. $effect(() => { - if (navbarElement && internalState.tabValue) { - tick().then(() => { - scrollToTab({ smooth: true }); - // eslint-disable-next-line svelte/no-navigation-without-resolve - replaceState("#" + internalState.tabValue, page.state); - }); - } + if (!navbarElement || !internalState.tabValue) return; + if (!filteredSectionOrderPreferences.some((s) => s.name === internalState.tabValue)) return; + + tick().then(() => { + scrollToTab({ smooth: true }); + // eslint-disable-next-line svelte/no-navigation-without-resolve + replaceState("#" + internalState.tabValue, page.state); + }); }); @@ -138,7 +148,7 @@
    {/snippet} - + diff --git a/src/lib/layouts/stats/AdditionalStats.svelte b/src/lib/layouts/stats/AdditionalStats.svelte index 72690c5eb..516acc580 100644 --- a/src/lib/layouts/stats/AdditionalStats.svelte +++ b/src/lib/layouts/stats/AdditionalStats.svelte @@ -15,17 +15,7 @@ const profile = $derived(getProfileContext().current); const profileUUID = $derived(profile?.uuid); const profileId = $derived(profile?.profile_id); - const networthState = $derived.by(() => { - if (profileUUID == null || profileId == null) { - return { current: null }; - } - - const query = getNetworth({ uuid: profileUUID, profileId }); - - return { - current: query.current - }; - }); + const networth = $derived(profileUUID != null && profileId != null ? await getNetworth({ uuid: profileUUID, profileId }) : null); const defaultPatternDecimal: string = "0,0.##"; const defaultPattern: string = "0,0"; @@ -144,12 +134,12 @@ Retry
    {/snippet} - {#if networthState.current} - {#if networthState.current.normal} - + {#if networth} + {#if networth.normal} + {/if} - {#if networthState.current.nonCosmetic} - + {#if networth.nonCosmetic} + {/if} {/if} diff --git a/src/lib/layouts/stats/Main.svelte b/src/lib/layouts/stats/Main.svelte index 42f7dcd99..a85ff6851 100644 --- a/src/lib/layouts/stats/Main.svelte +++ b/src/lib/layouts/stats/Main.svelte @@ -48,17 +48,7 @@ const combinedClass = new CombinedContext(); setProfileContext(profileClass); setCombinedContext(combinedClass); - const combinedState = $derived.by(() => { - if (!ctx.uuid || !ctx.profile_id) { - return { current: null }; - } - - const query = getCombined({ uuid: ctx.uuid, profileId: ctx.profile_id }); - - return { - current: query.current - }; - }); + const combined = $derived(ctx.uuid && ctx.profile_id ? await getCombined({ uuid: ctx.uuid, profileId: ctx.profile_id }) : null); function rewriteURL() { if (!(ctx as ModelsStatsOutput)) return; @@ -117,7 +107,7 @@ }); $effect.pre(() => { - combinedClass.current = combinedState.current ?? null; + combinedClass.current = combined ?? null; }); $effect(() => { diff --git a/src/lib/layouts/stats/Stats.svelte b/src/lib/layouts/stats/Stats.svelte index 7239db858..735fdcb18 100644 --- a/src/lib/layouts/stats/Stats.svelte +++ b/src/lib/layouts/stats/Stats.svelte @@ -12,19 +12,7 @@ const profile = $derived(getProfileContext().current); const profileUUID = $derived(profile?.uuid); const profileId = $derived(profile?.profile_id); - const statsState = $derived.by(() => { - if (!openState || !profileUUID || !profileId) { - return { current: null, error: null, loading: false }; - } - - const query = getAdditionalStats({ uuid: profileUUID, profileId }); - - return { - current: query.current, - error: query.error, - loading: query.loading - }; - }); + const statsQuery = $derived(openState && profileUUID && profileId ? getAdditionalStats({ uuid: profileUUID, profileId }) : null);
    @@ -33,12 +21,12 @@ {#snippet child({ props, open })} {#if open} - {#if statsState.error} - + {#if statsQuery?.error} + {/if} - {#if statsState.current?.stats} + {#if statsQuery?.current?.stats}
    - {#each Object.entries(statsState.current.stats) as [statName, statData], index (index)} + {#each Object.entries(statsQuery.current.stats) as [statName, statData], index (index)} {#if statData.total > 0} {/if} @@ -50,7 +38,7 @@ {/key} - {#if statsState.loading} + {#if statsQuery?.loading} {:else} {openState ? "Hide Stats" : "Show Stats"} diff --git a/src/lib/sections/Sections.svelte b/src/lib/sections/Sections.svelte index 0ad528d7a..282dd6e01 100644 --- a/src/lib/sections/Sections.svelte +++ b/src/lib/sections/Sections.svelte @@ -1,8 +1,7 @@
    - {#if inventories.length && currentInventory} - selectedTabName, handleTabChange} class="@container relative mb-0 rounded-lg bg-background/30 p-5 pt-4"> - - - {#snippet viewportChildren()} -
    - {#each inventories as tabItem (tabItem.name)} - - - - - - - - {tabItem.name} - {#if selectedTabName === tabItem.name} -
    - {:else} -
    - {/if} -
    - {/each} -
    - {/snippet} - - - -
    -
    + + {#snippet pending()} + + {/snippet} + {#snippet failed()} +

    Failed to load inventories.

    + {/snippet} + {#if inventories.length && currentInventory} + selectedTabName, handleTabChange} class="@container relative mb-0 rounded-lg bg-background/30 p-5 pt-4"> + + + {#snippet viewportChildren()} +
    + {#each inventories as tabItem (tabItem.name)} + + + + + + + + {tabItem.name} + {#if selectedTabName === tabItem.name} +
    + {:else} +
    + {/if} +
    + {/each} +
    + {/snippet} + + + +
    +
    - - {#if selectedTabName === "Search"} - {#if uuid && profileId} - + + {#if selectedTabName === "Search"} + {#if uuid && profileId} + + {/if} + {:else if usesNestedInventoryView} + {@render multipleInventorySection(currentInventory?.items ?? [])} + {:else} + {/if} - {:else if usesNestedInventoryView} - {@render multipleInventorySection(currentInventory?.items ?? [])} - {:else} - - {/if} - -
    - {:else if inventoriesState.error} -

    Failed to load inventories.

    - {:else} - - {/if} + +
    + {/if} +
    {#snippet itemSnippet(item: ModelsStrippedItem)} diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index b3cd88585..ef06fd52e 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -159,10 +159,9 @@ }; }); - $effect(() => { - const packsDataRemoteFunction = getPacks(); - const packsData = packsDataRemoteFunction.current; + const packsData = $derived(await getPacks()); + $effect(() => { if (packsData) packs.packs = packsData; }); diff --git a/src/routes/stats/[ign]/[[profile]]/+page.svelte b/src/routes/stats/[ign]/[[profile]]/+page.svelte index f26aab91d..26fa015cd 100644 --- a/src/routes/stats/[ign]/[[profile]]/+page.svelte +++ b/src/routes/stats/[ign]/[[profile]]/+page.svelte @@ -16,14 +16,7 @@ const preferences = getPreferences(); const internalState = getInternalState(); - const profileStatsState = $derived.by(() => { - const query = getProfileStats({ uuid: page.params.ign || "", profileId: page.params.profile || "" }); - - return { - current: query.current, - error: query.error - }; - }); + const profile = $derived(await getProfileStats({ uuid: page.params.ign || "", profileId: page.params.profile || "" })); $effect.pre(() => { const hash = page.url.hash; @@ -51,30 +44,25 @@ {/if} {#key page.params.ign || page.params.profile} - {#if profileStatsState.error} -
    - getProfileStats({ uuid: page.params.ign || "", profileId: page.params.profile || "" }).refresh()} /> -
    - {:else if profileStatsState.current} - - {#snippet failed(err, reset)} -
    - -
    - {/snippet} - -
    - - {:else} -
    -
    -
    - - Loading profile... + + {#snippet pending()} +
    +
    +
    + + Loading profile... +
    -
    - {/if} + {/snippet} + {#snippet failed(err, reset)} +
    + +
    + {/snippet} + +
    + {/key} From a728a119f5e1f77d6d90bd1e26c464ae1d001f57 Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Fri, 5 Jun 2026 18:57:56 +0200 Subject: [PATCH 24/34] fix(newsroom): persist toast dismissal and scope notifier to relevant routes Payload returns numeric post IDs at runtime despite the typed string contract, so sanitizeData silently dropped them on write and the notification toast resurrected on every refresh. Coerce IDs to strings in the notifications context, wire the Read button to the same mark-all-seen flow as Close, gate the notifier off `/` and `/newsroom/*`, and dismiss the toast on unmount. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/context/newsroom-notifications.svelte.ts | 21 +++++++++++++++---- .../newsroom/NewPostsNotifier.svelte | 8 +++++-- .../components/newsroom/NewPostsToast.svelte | 2 +- src/routes/+layout.svelte | 13 +++++++----- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/context/newsroom-notifications.svelte.ts b/src/context/newsroom-notifications.svelte.ts index 598153428..983691a7e 100644 --- a/src/context/newsroom-notifications.svelte.ts +++ b/src/context/newsroom-notifications.svelte.ts @@ -32,11 +32,17 @@ const newestDate = (current: string | null, next: string | null | undefined): st return Date.parse(next) > Date.parse(current) ? next : current; }; +const toPostId = (id: unknown): string | null => { + if (typeof id === "string") return id.length > 0 ? id : null; + if (typeof id === "number" && Number.isFinite(id)) return String(id); + return null; +}; + const sanitizeData = (value: unknown): NewsroomNotificationsData => { if (!value || typeof value !== "object") return defaultData(); const data = value as Partial; - const seenPostIds = Array.isArray(data.seenPostIds) ? data.seenPostIds.filter((id): id is string => typeof id === "string" && id.length > 0) : []; + const seenPostIds = Array.isArray(data.seenPostIds) ? data.seenPostIds.map(toPostId).filter((id): id is string => id !== null) : []; return { seenPostIds: seenPostIds.filter((id, index) => seenPostIds.indexOf(id) === index).slice(-MAX_SEEN_POST_IDS), lastSeenPublishedAt: isValidDate(data.lastSeenPublishedAt) ? data.lastSeenPublishedAt : null @@ -70,7 +76,10 @@ export class NewsroomNotificationsContext { getUnseenPosts(posts: Post[] = this.#latestPosts) { const seen = this.current.seenPostIds; return posts - .filter((post) => !seen.includes(post.id)) + .filter((post) => { + const id = toPostId(post.id); + return id === null || !seen.includes(id); + }) .map((post, index) => ({ post, index })) .sort((a, b) => { const aTime = isValidDate(a.post.publishedAt) ? Date.parse(a.post.publishedAt) : null; @@ -97,8 +106,11 @@ export class NewsroomNotificationsContext { } markPostSeen(post: Pick) { + const id = toPostId(post.id); + if (id === null) return; + const current = this.current; - const seenPostIds = current.seenPostIds.includes(post.id) ? current.seenPostIds : [...current.seenPostIds, post.id]; + const seenPostIds = current.seenPostIds.includes(id) ? current.seenPostIds : [...current.seenPostIds, id]; this.current = { seenPostIds: seenPostIds.slice(-MAX_SEEN_POST_IDS), @@ -111,7 +123,8 @@ export class NewsroomNotificationsContext { const seenPostIds = [...this.current.seenPostIds]; for (const post of posts) { - if (!seenPostIds.includes(post.id)) seenPostIds.push(post.id); + const id = toPostId(post.id); + if (id !== null && !seenPostIds.includes(id)) seenPostIds.push(id); lastSeenPublishedAt = newestDate(lastSeenPublishedAt, post.publishedAt); } diff --git a/src/lib/components/newsroom/NewPostsNotifier.svelte b/src/lib/components/newsroom/NewPostsNotifier.svelte index 11c243214..051eb140f 100644 --- a/src/lib/components/newsroom/NewPostsNotifier.svelte +++ b/src/lib/components/newsroom/NewPostsNotifier.svelte @@ -39,13 +39,17 @@ dismissible: true, componentProps: { posts, - newestUnseen + newestUnseen, + closeToast: () => toast.dismiss("newsroom-new-posts") }, onDismiss: () => { - notifications.markAllSeen(posts); toastId = undefined; shownSignature = ""; } }); }); + + $effect(() => { + return () => toast.dismiss("newsroom-new-posts"); + }); diff --git a/src/lib/components/newsroom/NewPostsToast.svelte b/src/lib/components/newsroom/NewPostsToast.svelte index ee2683f65..e60b9efc7 100644 --- a/src/lib/components/newsroom/NewPostsToast.svelte +++ b/src/lib/components/newsroom/NewPostsToast.svelte @@ -80,7 +80,7 @@
    Close {#if newestUnseen.slug} - Read + Read {/if}
    diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index ef06fd52e..3bd49249f 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -31,6 +31,7 @@ let toastId: string | number = $state(0); let commandLoading = $state(false); const { ign } = $derived(page.params); + const showNewsroomToast = $derived(page.url.pathname !== "/" && !page.url.pathname.startsWith("/newsroom")); const preferences = initPreferences(); const themeContext = initTheme(); const internalState = initInternalState(); @@ -231,11 +232,13 @@
    - - {#snippet failed()}{/snippet} - {@const latestNewsroom = await listLatestPostsForNotifications({ limit: 5 })} - - +{#if showNewsroomToast} + + {#snippet failed()}{/snippet} + {@const latestNewsroom = await listLatestPostsForNotifications({ limit: 5 })} + + +{/if} {@render children()} From 793cd0ef92bdc01a1de274880f5b00487422d59a Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Fri, 5 Jun 2026 19:17:49 +0200 Subject: [PATCH 25/34] fix(newsroom): render social embeds as large-image cards Wire the `/newsroom` listing and `/newsroom/` posts to emit `twitter:card=summary_large_image`, set `og:image` to the post's hero variant (and a branded graphic on the listing), and exclude the routes from the layout-level SvelteSeo so the homepage defaults stop bleeding into the embed. Co-Authored-By: Claude Opus 4.7 (1M context) --- .changeset/large-newsroom-embeds.md | 5 +++++ src/routes/+layout.svelte | 2 +- src/routes/newsroom/+page.svelte | 19 ++++++++++++++++++- src/routes/newsroom/[slug]/+page.svelte | 10 +++++++++- static/img/newsroom.avif | Bin 0 -> 421159 bytes 5 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 .changeset/large-newsroom-embeds.md create mode 100644 static/img/newsroom.avif diff --git a/.changeset/large-newsroom-embeds.md b/.changeset/large-newsroom-embeds.md new file mode 100644 index 000000000..312c96cec --- /dev/null +++ b/.changeset/large-newsroom-embeds.md @@ -0,0 +1,5 @@ +--- +"skycrypt-frontend": patch +--- + +Render newsroom posts and the listing page as `summary_large_image` social embeds with the post's hero image (or a branded graphic on the listing), and stop the homepage SEO defaults from leaking into them. diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 3bd49249f..49cbc780d 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -37,7 +37,7 @@ const internalState = initInternalState(); const position = writable("bottom-right"); const theme = writable("dark"); - const noEmbedUrls = ["/stats/"]; + const noEmbedUrls = ["/stats/", "/newsroom"]; const packs = new PacksContext(); const websiteJsonLd = { "@context": "https://schema.org", diff --git a/src/routes/newsroom/+page.svelte b/src/routes/newsroom/+page.svelte index 1d757179f..4c6001e64 100644 --- a/src/routes/newsroom/+page.svelte +++ b/src/routes/newsroom/+page.svelte @@ -28,7 +28,24 @@ afterNavigate(markVisiblePostsSeen); - +
    diff --git a/src/routes/newsroom/[slug]/+page.svelte b/src/routes/newsroom/[slug]/+page.svelte index 8eb5bf765..f48606b4a 100644 --- a/src/routes/newsroom/[slug]/+page.svelte +++ b/src/routes/newsroom/[slug]/+page.svelte @@ -48,7 +48,7 @@ const heroHeight = $derived(post.heroImage?.sizes?.hero?.height ?? post.heroImage?.height ?? undefined); const heroAlt = $derived(post.heroImage?.alt ?? post.title); - const ogImages = $derived(post.heroImage?.url ? [{ url: post.heroImage.url, width: post.heroImage.width ?? undefined, height: post.heroImage.height ?? undefined, alt: post.heroImage.alt ?? post.title }] : []); + const ogImages = $derived(heroSrc ? [{ url: heroSrc, width: heroWidth, height: heroHeight, alt: heroAlt }] : []); const containerClass = $derived(cn("rounded-lg", preferences.performanceMode ? "bg-background-grey" : "backdrop-blur-lg backdrop-brightness-150 backdrop-contrast-60 dark:backdrop-brightness-50 dark:backdrop-contrast-100")); @@ -67,11 +67,19 @@ type: "article", title: post.title, description: post.excerpt ?? post.title, + site_name: "SkyCrypt", images: ogImages, article: { published_time: post.publishedAt ?? undefined, author: [displayName] } + }} + twitter={{ + card: "summary_large_image", + title: post.title, + description: post.excerpt ?? post.title, + image: heroSrc ?? undefined, + imageAlt: heroAlt }} />
    diff --git a/static/img/newsroom.avif b/static/img/newsroom.avif new file mode 100644 index 0000000000000000000000000000000000000000..4c8e78a1cbd51359bd61b0a5c7c006b98a8ed014 GIT binary patch literal 421159 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

    lYk%Ph)|{SSK-$rqJVbAeqolAih{-UbkJ@ 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

    vG^Ed?ImWWBS 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%0Ay5o3cr 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%0DK7GUeqo?&bC^X%pH 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%0DTT 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

    2p$Uk8YKsluv;zzYM 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 literal 0 HcmV?d00001 From 0c41f8f90cf42b62d92dfb76bf0bd1432469816c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 5 Jun 2026 17:19:05 +0000 Subject: [PATCH 26/34] chore: version packages (beta) [skip ci] --- .changeset/pre.json | 2 ++ CHANGELOG.md | 7 +++++++ package.json | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index c0e30dac0..4a9441c54 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -8,7 +8,9 @@ "bright-posts-wink", "crisp-tires-hang", "fuzzy-newsrooms-smile", + "large-newsroom-embeds", "modern-queries-wait", + "quiet-deriveds-resolve", "rich-newsrooms-render" ] } diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d373ea42..763a8e35b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## 3.7.0-beta.3 + +### Patch Changes + +- Render newsroom posts and the listing page as `summary_large_image` social embeds with the post's hero image (or a branded graphic on the listing), and stop the homepage SEO defaults from leaking into them. _[`793cd0e`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/793cd0ef92bdc01a1de274880f5b00487422d59a) [@DarthGigi](https://github.com/DarthGigi)_ +- Eliminate `derived_inert` runtime warnings by hoisting `new IsInViewport(...)` out of a `$derived` in `Chip.svelte` and splitting `getThemeIcons(...).current` in the header. Align remaining stats-view remote queries with the post-2.61 docs idiom (`await` for template/context-feed sites; `.current`/`.loading`/`.error` kept only for the loading-button-spinner case). Drop the redundant `getCombined()` in `Sections.svelte`. Make the navbar's tab scroll-on-mount race-resistant and its `IntersectionObserver` `rootMargin` NaN-safe. _[`d99d081`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/d99d0812879edad2cd6cdcfc5a60e925099c61fc) [@DarthGigi](https://github.com/DarthGigi)_ + ## 3.7.0-beta.2 ### Patch Changes diff --git a/package.json b/package.json index 6f5c172b2..08857dd5a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "skycrypt-frontend", - "version": "3.7.0-beta.2", + "version": "3.7.0-beta.3", "private": true, "type": "module", "repository": { From 689ca571eb0b251ce59c172f05d1205062ef7f78 Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Fri, 5 Jun 2026 19:32:50 +0200 Subject: [PATCH 27/34] fix: pin kysely version https://github.com/better-auth/better-auth/issues/9901 is fixed --- pnpm-lock.yaml | 111 ++++++++++++++++++++++++++++---------------- pnpm-workspace.yaml | 16 +------ 2 files changed, 72 insertions(+), 55 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3fe797576..cd3c61957 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,9 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + kysely: ^0.28.17 + importers: .: @@ -443,7 +446,7 @@ packages: '@opentelemetry/api': ^1.9.0 better-call: 1.3.5 jose: ^6.1.0 - kysely: ^0.28.5 || ^0.29.0 + kysely: ^0.28.17 nanostores: ^1.0.1 peerDependenciesMeta: '@cloudflare/workers-types': @@ -466,7 +469,7 @@ packages: peerDependencies: '@better-auth/core': ^1.6.14 '@better-auth/utils': 0.4.1 - kysely: ^0.28.17 || ^0.29.0 + kysely: ^0.28.17 peerDependenciesMeta: kysely: optional: true @@ -3566,7 +3569,7 @@ packages: expo-sqlite: '>=14.0.0' gel: '>=2' knex: '*' - kysely: '*' + kysely: ^0.28.17 mysql2: '>=2' pg: '>=8' postgres: '>=3' @@ -4316,6 +4319,10 @@ packages: resolution: {integrity: sha512-/GmXpo9F9W+f8n4Ivr2iH+7h7wL7jLbLKWkMlpflcCRb6kGjBfTlASEXaZ9qUgNTn4VgS0P2pwxxzQ4EM6Ulgg==} engines: {node: '>=22'} + kysely@0.28.17: + resolution: {integrity: sha512-nbD8lB9EB3wNdMhOCdx5Li8DxnLbvKByylRLcJ1h+4SkrowVeECAyZlyiKMThF7xFdRz0jSQ2MoJr+wXux2y0Q==} + engines: {node: '>=20.0.0'} + kysely@0.29.2: resolution: {integrity: sha512-s6WVJyEZrbm6jhBpiKHsGHyePMrVQKJ85wZCFCr9W4QHv6WTjWIrdvTmO9hDEA3bNK0xkrE2DqrHsXMLWuZpQg==} engines: {node: '>=22.0.0'} @@ -5279,8 +5286,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.8.1: - resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==} + semver@7.8.2: + resolution: {integrity: sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ==} engines: {node: '>=10'} hasBin: true @@ -5640,8 +5647,8 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - typebox@1.1.39: - resolution: {integrity: sha512-vj0afVtOfLQvv0GR0VxVagYxsXN64btL7Z9XoaG0ZggH3mruMMkOO6hXdgMsjCY3shZgEvooAWVeznQVs5c43w==} + typebox@1.2.0: + resolution: {integrity: sha512-5zmwtMQArPorr1PVqo5Ye3GRmaiHQ7iicRnlmRXWWDLg5k5fky8OG40B12ckVq5YIxpGM8s1qzcfcA8SKNjPVw==} typedoc-plugin-coverage@4.0.3: resolution: {integrity: sha512-baim3wyMkqpX7rBzL/6iZ7wzKJuSr9ffP16RHOsdTUNoHUZeXLIZHSUBtUhXmNHaUNRgfqdmKLBwyggbJjGdeQ==} @@ -6243,6 +6250,20 @@ snapshots: better-call: 1.3.5(zod@4.4.3) zod: 4.4.3 + '@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0)': + dependencies: + '@better-auth/utils': 0.4.1 + '@better-fetch/fetch': 1.1.21 + '@opentelemetry/semantic-conventions': 1.41.1 + '@standard-schema/spec': 1.1.0 + better-call: 1.3.5(zod@4.4.3) + jose: 6.2.3 + kysely: 0.28.17 + nanostores: 1.3.0 + zod: 4.4.3 + optionalDependencies: + '@opentelemetry/api': 1.9.1 + '@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0)': dependencies: '@better-auth/utils': 0.4.1 @@ -6257,34 +6278,40 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.1 - '@better-auth/drizzle-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.29.2)(postgres@3.4.9))': + '@better-auth/drizzle-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.29.2)(postgres@3.4.9))': dependencies: - '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) + '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.1 optionalDependencies: drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.29.2)(postgres@3.4.9) - '@better-auth/kysely-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(kysely@0.29.2)': + '@better-auth/kysely-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(kysely@0.28.17)': dependencies: - '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) + '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.1 optionalDependencies: - kysely: 0.29.2 + kysely: 0.28.17 - '@better-auth/memory-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)': + '@better-auth/memory-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)': dependencies: - '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) + '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.1 - '@better-auth/mongo-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)': + '@better-auth/mongo-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)': dependencies: - '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) + '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.1 - '@better-auth/prisma-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)': + '@better-auth/prisma-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)': dependencies: - '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) + '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/utils': 0.4.1 + + '@better-auth/telemetry@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)': + dependencies: + '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.1 + '@better-fetch/fetch': 1.1.21 '@better-auth/telemetry@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)': dependencies: @@ -6316,7 +6343,7 @@ snapshots: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.8.1 + semver: 7.8.2 '@changesets/assemble-release-plan@6.0.10': dependencies: @@ -6325,7 +6352,7 @@ snapshots: '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 - semver: 7.8.1 + semver: 7.8.2 '@changesets/changelog-git@0.2.1': dependencies: @@ -6356,7 +6383,7 @@ snapshots: package-manager-detector: 0.2.11 picocolors: 1.1.1 resolve-from: 5.0.0 - semver: 7.8.1 + semver: 7.8.2 spawndamnit: 3.0.1 term-size: 2.2.1 transitivePeerDependencies: @@ -6382,7 +6409,7 @@ snapshots: '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 picocolors: 1.1.1 - semver: 7.8.1 + semver: 7.8.2 '@changesets/get-github-info@0.8.0': dependencies: @@ -6522,7 +6549,7 @@ snapshots: '@commitlint/is-ignored@21.0.2': dependencies: '@commitlint/types': 21.0.1 - semver: 7.8.1 + semver: 7.8.2 '@commitlint/lint@21.0.2': dependencies: @@ -6594,7 +6621,7 @@ snapshots: dependencies: '@simple-libs/child-process-utils': 1.0.2 '@simple-libs/stream-utils': 1.2.0 - semver: 7.8.1 + semver: 7.8.2 optionalDependencies: conventional-commits-parser: 6.4.0 @@ -8661,7 +8688,7 @@ snapshots: '@typescript-eslint/visitor-keys': 8.60.1 debug: 4.4.3 minimatch: 10.2.5 - semver: 7.8.1 + semver: 7.8.2 tinyglobby: 0.2.17 ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 @@ -8913,7 +8940,7 @@ snapshots: open: 10.2.0 prettier: 3.8.3 prompts: 2.4.2 - semver: 7.8.1 + semver: 7.8.2 yocto-spinner: 0.2.3 zod: 4.4.3 transitivePeerDependencies: @@ -8960,13 +8987,13 @@ snapshots: better-auth@1.6.14(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.29.2)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8): dependencies: - '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) - '@better-auth/drizzle-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.29.2)(postgres@3.4.9)) - '@better-auth/kysely-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(kysely@0.29.2) - '@better-auth/memory-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1) - '@better-auth/mongo-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1) - '@better-auth/prisma-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1) - '@better-auth/telemetry': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21) + '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/drizzle-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.29.2)(postgres@3.4.9)) + '@better-auth/kysely-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(kysely@0.28.17) + '@better-auth/memory-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1) + '@better-auth/mongo-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1) + '@better-auth/prisma-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1) + '@better-auth/telemetry': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21) '@better-auth/utils': 0.4.1 '@better-fetch/fetch': 1.1.21 '@noble/ciphers': 2.2.0 @@ -8974,7 +9001,7 @@ snapshots: better-call: 1.3.5(zod@4.4.3) defu: 6.1.7 jose: 6.2.3 - kysely: 0.29.2 + kysely: 0.28.17 nanostores: 1.3.0 zod: 4.4.3 optionalDependencies: @@ -9511,7 +9538,7 @@ snapshots: postcss: 8.5.15 postcss-load-config: 3.1.4(postcss@8.5.15) postcss-safe-parser: 7.0.1(postcss@8.5.15) - semver: 7.8.1 + semver: 7.8.2 svelte-eslint-parser: 1.8.0(svelte@5.56.1(@typescript-eslint/types@8.60.1)) optionalDependencies: svelte: 5.56.1(@typescript-eslint/types@8.60.1) @@ -10090,6 +10117,8 @@ snapshots: ky@2.0.2: {} + kysely@0.28.17: {} + kysely@0.29.2: {} leven@4.1.0: {} @@ -10213,7 +10242,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.8.1 + semver: 7.8.2 markdown-it@14.2.0: dependencies: @@ -11164,7 +11193,7 @@ snapshots: semver@6.3.1: {} - semver@7.8.1: {} + semver@7.8.2: {} set-cookie-parser@3.1.0: {} @@ -11172,7 +11201,7 @@ snapshots: dependencies: '@img/colour': 1.1.0 detect-libc: 2.1.2 - semver: 7.8.1 + semver: 7.8.2 optionalDependencies: '@img/sharp-darwin-arm64': 0.34.5 '@img/sharp-darwin-x64': 0.34.5 @@ -11353,7 +11382,7 @@ snapshots: postcss: 8.5.15 postcss-scss: 4.0.9(postcss@8.5.15) postcss-selector-parser: 7.1.1 - semver: 7.8.1 + semver: 7.8.2 optionalDependencies: svelte: 5.56.1(@typescript-eslint/types@8.60.1) @@ -11444,7 +11473,7 @@ snapshots: joi: 17.13.3 json-schema-to-ts: 3.1.1 superstruct: 2.0.2 - typebox: 1.1.39 + typebox: 1.2.0 valibot: 1.4.1(typescript@6.0.3) yup: 1.7.1 zod: 4.4.3 @@ -11557,7 +11586,7 @@ snapshots: type-fest@2.19.0: optional: true - typebox@1.1.39: + typebox@1.2.0: optional: true typedoc-plugin-coverage@4.0.3(typedoc@0.28.19(typescript@6.0.3)): diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 75e6c10c8..e27a70363 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,17 +6,5 @@ allowBuilds: esbuild: true sharp: true simple-git-hooks: true -minimumReleaseAgeExclude: - - "@takumi-rs/core-darwin-arm64@1.4.0" - - "@takumi-rs/core-darwin-x64@1.4.0" - - "@takumi-rs/core-linux-arm64-gnu@1.4.0" - - "@takumi-rs/core-linux-arm64-musl@1.4.0" - - "@takumi-rs/core-linux-x64-gnu@1.4.0" - - "@takumi-rs/core-linux-x64-musl@1.4.0" - - "@takumi-rs/core-win32-arm64-msvc@1.4.0" - - "@takumi-rs/core-win32-x64-msvc@1.4.0" - - "@takumi-rs/core@1.4.0" - - "@takumi-rs/helpers@1.4.0" - - "@takumi-rs/wasm@1.4.0" - - takumi-js@1.4.0 - - "@sveltejs/kit@2.63.0" +overrides: + kysely: ^0.28.17 From ab06f727a4b4fdeb8ab83d6c25f892c591fdb9e3 Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Fri, 5 Jun 2026 19:37:02 +0200 Subject: [PATCH 28/34] feat: migrate svelte config to vite config, possible as of sveltekit 2.62.0 to prepare for kit@3 --- svelte.config.js | 56 ------------------------------------------------ vite.config.ts | 51 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 57 deletions(-) delete mode 100644 svelte.config.js diff --git a/svelte.config.js b/svelte.config.js deleted file mode 100644 index 3a38a5550..000000000 --- a/svelte.config.js +++ /dev/null @@ -1,56 +0,0 @@ -import adapter from "@sveltejs/adapter-node"; -import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"; - -/** @type {import('@sveltejs/kit').Config} */ -const config = { - // Consult https://svelte.dev/docs/kit/integrations - // for more information about preprocessors - preprocess: vitePreprocess(), - compilerOptions: { experimental: { async: true }, runes: true }, - kit: { - experimental: { - remoteFunctions: true, - tracing: { server: true }, - instrumentation: { server: true } - }, - adapter: adapter(), - alias: { - $params: "./src/params", - $types: "./src/lib/types", - $db: "./src/db", - $constants: "./src/lib/server/constants", - $ctx: "./src/context", - $routes: "./src/routes", - $src: "./src" - }, - csrf: { - trustedOrigins: ["https://cupcake.shiiyu.moe", "https://sky.shiiyu.moe", "http://localhost:5173", "http://localhost:4173", "http://localhost:3000", "http://localhost:8080"] - }, - csp: { - mode: "auto", - directives: { - "script-src": ["self", "unsafe-inline"], - "worker-src": ["self", "blob:"], - "style-src": ["self", "unsafe-inline", "https://fonts.googleapis.com"], - "img-src": ["self", "data:", "https://textures.minecraft.net", "http://localhost:8080", "https://cupcake.shiiyu.moe", "https://sky.shiiyu.moe", "https://nmsr.nickac.dev", "https://cms.shiiyu.moe", "http://localhost:3000"], - "connect-src": ["self", "https://mowojang.matdoes.dev", "https://mowojang.seraph.si", "http://localhost:8080", "https://cupcake.shiiyu.moe", "https://sky.shiiyu.moe", "https://cms.shiiyu.moe", "http://localhost:3000"], - "font-src": ["self", "https://fonts.gstatic.com"], - "frame-ancestors": ["self", "https://cms.shiiyu.moe", "http://localhost:3000"], - "frame-src": ["self"] - } - }, - version: { - name: process.env.PUBLIC_COMMIT_HASH, - // in ms - pollInterval: 1000 * 60 // 1 minute - }, - typescript: { - config: (config) => ({ - ...config, - include: [...config.include, "../drizzle.config.ts"] - }) - } - } -}; - -export default config; diff --git a/vite.config.ts b/vite.config.ts index db938eb51..4ba5a4061 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,5 +1,7 @@ import { sentrySvelteKit } from "@sentry/sveltekit"; +import adapter from "@sveltejs/adapter-node"; import { sveltekit } from "@sveltejs/kit/vite"; +import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"; import tailwindcss from "@tailwindcss/vite"; import { playwright } from "@vitest/browser-playwright"; import { defineConfig } from "vitest/config"; @@ -12,7 +14,54 @@ export default defineConfig({ adapter: "node" }), tailwindcss(), - sveltekit() + sveltekit({ + // Consult https://svelte.dev/docs/kit/integrations + // for more information about preprocessors + preprocess: vitePreprocess(), + compilerOptions: { experimental: { async: true }, runes: true }, + experimental: { + remoteFunctions: true, + tracing: { server: true }, + instrumentation: { server: true } + }, + adapter: adapter(), + alias: { + $params: "./src/params", + $types: "./src/lib/types", + $db: "./src/db", + $constants: "./src/lib/server/constants", + $ctx: "./src/context", + $routes: "./src/routes", + $src: "./src" + }, + csrf: { + trustedOrigins: ["https://cupcake.shiiyu.moe", "https://sky.shiiyu.moe", "http://localhost:5173", "http://localhost:4173", "http://localhost:3000", "http://localhost:8080"] + }, + csp: { + mode: "auto", + directives: { + "script-src": ["self", "unsafe-inline"], + "worker-src": ["self", "blob:"], + "style-src": ["self", "unsafe-inline", "https://fonts.googleapis.com"], + "img-src": ["self", "data:", "https://textures.minecraft.net", "http://localhost:8080", "https://cupcake.shiiyu.moe", "https://sky.shiiyu.moe", "https://nmsr.nickac.dev", "https://cms.shiiyu.moe", "http://localhost:3000"], + "connect-src": ["self", "https://mowojang.matdoes.dev", "https://mowojang.seraph.si", "http://localhost:8080", "https://cupcake.shiiyu.moe", "https://sky.shiiyu.moe", "https://cms.shiiyu.moe", "http://localhost:3000"], + "font-src": ["self", "https://fonts.gstatic.com"], + "frame-ancestors": ["self", "https://cms.shiiyu.moe", "http://localhost:3000"], + "frame-src": ["self"] + } + }, + version: { + name: process.env.PUBLIC_COMMIT_HASH, + // in ms + pollInterval: 1000 * 60 // 1 minute + }, + typescript: { + config: (config) => ({ + ...config, + include: [...config.include, "../drizzle.config.ts"] + }) + } + }) ], build: { sourcemap: true }, test: { From 46b8f8d3b8d1a8042ac88a9b398e52ab6d643fc6 Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Fri, 5 Jun 2026 19:44:51 +0200 Subject: [PATCH 29/34] fix: add @sveltejs/load-config to ESLint to load the svelte config --- eslint.config.ts | 4 +++- package.json | 1 + pnpm-lock.yaml | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/eslint.config.ts b/eslint.config.ts index a2c137fbe..6ae19ed53 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -1,11 +1,13 @@ import js from "@eslint/js"; +import { loadConfig } from "@sveltejs/load-config"; import prettier from "eslint-config-prettier"; import svelte from "eslint-plugin-svelte"; import { defineConfig, includeIgnoreFile } from "eslint/config"; import globals from "globals"; import path from "node:path"; import ts from "typescript-eslint"; -import svelteConfig from "./svelte.config.js"; + +const svelteConfig = await loadConfig(process.cwd()); const gitignorePath = path.resolve(import.meta.dirname, ".gitignore"); diff --git a/package.json b/package.json index 08857dd5a..573eb3e93 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "@playwright/test": "^1.60.0", "@sveltejs/adapter-node": "^5.5.4", "@sveltejs/kit": "^2.63.0", + "@sveltejs/load-config": "^0.1.1", "@sveltejs/vite-plugin-svelte": "^7.1.2", "@tailwindcss/vite": "^4.3.0", "@types/culori": "^4.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cd3c61957..6b1da2f3c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -78,6 +78,9 @@ importers: '@sveltejs/kit': specifier: ^2.63.0 version: 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)) + '@sveltejs/load-config': + specifier: ^0.1.1 + version: 0.1.1 '@sveltejs/vite-plugin-svelte': specifier: ^7.1.2 version: 7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)) From 2985da69a833eda5b3498e8e4f328370ac2aa109 Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Fri, 5 Jun 2026 20:13:27 +0200 Subject: [PATCH 30/34] fix(deps): pin kysely for better-auth peer resolution Add kysely 0.28.17 as a direct dev dependency. This makes Better Auth packages resolve one core peer graph. Keep the existing Kysely pin while the upstream adapter issue is open. TODO: remove this direct dependency once better-auth/better-auth#9901 is fixed. --- package.json | 1 + pnpm-lock.yaml | 65 ++++++++++++++++---------------------------------- 2 files changed, 22 insertions(+), 44 deletions(-) diff --git a/package.json b/package.json index 573eb3e93..c0e0cf6c6 100644 --- a/package.json +++ b/package.json @@ -82,6 +82,7 @@ "formsnap": "^2.0.1", "globals": "^17.6.0", "ky": "^2.0.2", + "kysely": "0.28.17", "numerable": "^0.3.15", "orval": "^8.15.0", "paneforge": "^1.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6b1da2f3c..e9f05f62e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,7 +29,7 @@ importers: devDependencies: '@better-auth/api-key': specifier: ^1.6.14 - version: 1.6.14(ac20daa48a8e1d85df3f2235848f5b2f) + version: 1.6.14(d0a5e8040f450401665893b755544d4a) '@changesets/cli': specifier: ^2.31.0 version: 2.31.0(@types/node@25.9.1) @@ -113,10 +113,10 @@ importers: version: 4.1.8(vitest@4.1.8) auth: specifier: ^1.6.14 - version: 1.6.14(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(better-call@1.3.5(zod@4.4.3))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.29.2)(postgres@3.4.9))(jose@6.2.3)(kysely@0.29.2)(magicast@0.5.3)(nanostores@1.3.0)(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8) + version: 1.6.14(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(better-call@1.3.5(zod@4.4.3))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(jose@6.2.3)(kysely@0.28.17)(magicast@0.5.3)(nanostores@1.3.0)(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8) better-auth: specifier: ^1.6.14 - version: 1.6.14(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.29.2)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8) + version: 1.6.14(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8) bits-ui: specifier: ^2.18.1 version: 2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1)) @@ -140,7 +140,7 @@ importers: version: 0.31.10 drizzle-orm: specifier: ^0.45.2 - version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.29.2)(postgres@3.4.9) + version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9) eslint: specifier: ^10.4.1 version: 10.4.1(jiti@2.7.0) @@ -159,6 +159,9 @@ importers: ky: specifier: ^2.0.2 version: 2.0.2 + kysely: + specifier: 0.28.17 + version: 0.28.17 numerable: specifier: ^0.3.15 version: 0.3.15 @@ -4326,10 +4329,6 @@ packages: resolution: {integrity: sha512-nbD8lB9EB3wNdMhOCdx5Li8DxnLbvKByylRLcJ1h+4SkrowVeECAyZlyiKMThF7xFdRz0jSQ2MoJr+wXux2y0Q==} engines: {node: '>=20.0.0'} - kysely@0.29.2: - resolution: {integrity: sha512-s6WVJyEZrbm6jhBpiKHsGHyePMrVQKJ85wZCFCr9W4QHv6WTjWIrdvTmO9hDEA3bNK0xkrE2DqrHsXMLWuZpQg==} - engines: {node: '>=22.0.0'} - leven@4.1.0: resolution: {integrity: sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6245,11 +6244,11 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} - '@better-auth/api-key@1.6.14(ac20daa48a8e1d85df3f2235848f5b2f)': + '@better-auth/api-key@1.6.14(d0a5e8040f450401665893b755544d4a)': dependencies: - '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) + '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.1 - better-auth: 1.6.14(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.29.2)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8) + better-auth: 1.6.14(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8) better-call: 1.3.5(zod@4.4.3) zod: 4.4.3 @@ -6267,26 +6266,12 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.1 - '@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0)': - dependencies: - '@better-auth/utils': 0.4.1 - '@better-fetch/fetch': 1.1.21 - '@opentelemetry/semantic-conventions': 1.41.1 - '@standard-schema/spec': 1.1.0 - better-call: 1.3.5(zod@4.4.3) - jose: 6.2.3 - kysely: 0.29.2 - nanostores: 1.3.0 - zod: 4.4.3 - optionalDependencies: - '@opentelemetry/api': 1.9.1 - - '@better-auth/drizzle-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.29.2)(postgres@3.4.9))': + '@better-auth/drizzle-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))': dependencies: '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.1 optionalDependencies: - drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.29.2)(postgres@3.4.9) + drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9) '@better-auth/kysely-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(kysely@0.28.17)': dependencies: @@ -6316,12 +6301,6 @@ snapshots: '@better-auth/utils': 0.4.1 '@better-fetch/fetch': 1.1.21 - '@better-auth/telemetry@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)': - dependencies: - '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) - '@better-auth/utils': 0.4.1 - '@better-fetch/fetch': 1.1.21 - '@better-auth/utils@0.4.1': dependencies: '@noble/hashes': 2.2.0 @@ -8924,17 +8903,17 @@ snapshots: atomic-sleep@1.0.0: {} - auth@1.6.14(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(better-call@1.3.5(zod@4.4.3))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.29.2)(postgres@3.4.9))(jose@6.2.3)(kysely@0.29.2)(magicast@0.5.3)(nanostores@1.3.0)(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8): + auth@1.6.14(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(better-call@1.3.5(zod@4.4.3))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(jose@6.2.3)(kysely@0.28.17)(magicast@0.5.3)(nanostores@1.3.0)(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8): dependencies: '@babel/core': 7.29.7 '@babel/preset-react': 7.29.7(@babel/core@7.29.7) '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7) - '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) - '@better-auth/telemetry': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21) + '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/telemetry': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21) '@better-auth/utils': 0.4.1 '@clack/prompts': 0.11.0 '@mrleebo/prisma-ast': 0.13.1 - better-auth: 1.6.14(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.29.2)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8) + better-auth: 1.6.14(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8) c12: 3.3.4(magicast@0.5.3) chalk: 5.6.2 commander: 12.1.0 @@ -8988,10 +8967,10 @@ snapshots: baseline-browser-mapping@2.10.33: {} - better-auth@1.6.14(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.29.2)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8): + better-auth@1.6.14(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8): dependencies: '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) - '@better-auth/drizzle-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.29.2)(postgres@3.4.9)) + '@better-auth/drizzle-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9)) '@better-auth/kysely-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(kysely@0.28.17) '@better-auth/memory-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1) '@better-auth/mongo-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1) @@ -9010,7 +8989,7 @@ snapshots: optionalDependencies: '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)) drizzle-kit: 0.31.10 - drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.29.2)(postgres@3.4.9) + drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9) next: 16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) @@ -9361,11 +9340,11 @@ snapshots: esbuild: 0.25.12 tsx: 4.22.4 - drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.29.2)(postgres@3.4.9): + drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9): optionalDependencies: '@opentelemetry/api': 1.9.1 '@types/pg': 8.15.6 - kysely: 0.29.2 + kysely: 0.28.17 postgres: 3.4.9 effect@3.21.2: @@ -10122,8 +10101,6 @@ snapshots: kysely@0.28.17: {} - kysely@0.29.2: {} - leven@4.1.0: {} levn@0.4.1: From 66c3b66133e6a0a27b2b8f4b61ba92a531d00787 Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Fri, 5 Jun 2026 20:16:17 +0200 Subject: [PATCH 31/34] fix: pls work --- pnpm-lock.yaml | 8 ++++---- pnpm-workspace.yaml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e9f05f62e..4b2e985fb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,7 +5,7 @@ settings: excludeLinksFromLockfile: false overrides: - kysely: ^0.28.17 + kysely: 0.28.17 importers: @@ -452,7 +452,7 @@ packages: '@opentelemetry/api': ^1.9.0 better-call: 1.3.5 jose: ^6.1.0 - kysely: ^0.28.17 + kysely: 0.28.17 nanostores: ^1.0.1 peerDependenciesMeta: '@cloudflare/workers-types': @@ -475,7 +475,7 @@ packages: peerDependencies: '@better-auth/core': ^1.6.14 '@better-auth/utils': 0.4.1 - kysely: ^0.28.17 + kysely: 0.28.17 peerDependenciesMeta: kysely: optional: true @@ -3575,7 +3575,7 @@ packages: expo-sqlite: '>=14.0.0' gel: '>=2' knex: '*' - kysely: ^0.28.17 + kysely: 0.28.17 mysql2: '>=2' pg: '>=8' postgres: '>=3' diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e27a70363..e8ef2a767 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -7,4 +7,4 @@ allowBuilds: sharp: true simple-git-hooks: true overrides: - kysely: ^0.28.17 + kysely: 0.28.17 From 45a806c1ec4d34715e1a3a23aa350c0b392205c6 Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Fri, 5 Jun 2026 21:27:43 +0200 Subject: [PATCH 32/34] fix: update packs data retrieval to use current query from getPacks --- src/routes/+layout.svelte | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 49cbc780d..79b5f9dc9 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -160,10 +160,9 @@ }; }); - const packsData = $derived(await getPacks()); - $effect(() => { - if (packsData) packs.packs = packsData; + const query = getPacks(); + if (query.current) packs.packs = query.current; }); From 128fe8d53474840de2f71634d84b9f013e995c09 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 5 Jun 2026 20:21:17 +0000 Subject: [PATCH 33/34] chore: version packages (stable) [skip ci] --- .changeset/bright-posts-wink.md | 5 ----- .changeset/crisp-tires-hang.md | 5 ----- .changeset/fuzzy-newsrooms-smile.md | 5 ----- .changeset/large-newsroom-embeds.md | 5 ----- .changeset/modern-queries-wait.md | 5 ----- .changeset/pre.json | 16 ---------------- .changeset/quiet-deriveds-resolve.md | 5 ----- .changeset/rich-newsrooms-render.md | 5 ----- CHANGELOG.md | 15 +++++++++++++++ package.json | 2 +- 10 files changed, 16 insertions(+), 52 deletions(-) delete mode 100644 .changeset/bright-posts-wink.md delete mode 100644 .changeset/crisp-tires-hang.md delete mode 100644 .changeset/fuzzy-newsrooms-smile.md delete mode 100644 .changeset/large-newsroom-embeds.md delete mode 100644 .changeset/modern-queries-wait.md delete mode 100644 .changeset/pre.json delete mode 100644 .changeset/quiet-deriveds-resolve.md delete mode 100644 .changeset/rich-newsrooms-render.md diff --git a/.changeset/bright-posts-wink.md b/.changeset/bright-posts-wink.md deleted file mode 100644 index e3e582a7e..000000000 --- a/.changeset/bright-posts-wink.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"skycrypt-frontend": minor ---- - -Add local newsroom notifications for new CMS posts. diff --git a/.changeset/crisp-tires-hang.md b/.changeset/crisp-tires-hang.md deleted file mode 100644 index caf3fbc30..000000000 --- a/.changeset/crisp-tires-hang.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"skycrypt-frontend": minor ---- - -Add initial work for SkyCrypt accounts diff --git a/.changeset/fuzzy-newsrooms-smile.md b/.changeset/fuzzy-newsrooms-smile.md deleted file mode 100644 index 1eeed9966..000000000 --- a/.changeset/fuzzy-newsrooms-smile.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"skycrypt-frontend": minor ---- - -Add the CMS-backed newsroom with post listing, article pages, previews, and sitemap entries. diff --git a/.changeset/large-newsroom-embeds.md b/.changeset/large-newsroom-embeds.md deleted file mode 100644 index 312c96cec..000000000 --- a/.changeset/large-newsroom-embeds.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"skycrypt-frontend": patch ---- - -Render newsroom posts and the listing page as `summary_large_image` social embeds with the post's hero image (or a branded graphic on the listing), and stop the homepage SEO defaults from leaking into them. diff --git a/.changeset/modern-queries-wait.md b/.changeset/modern-queries-wait.md deleted file mode 100644 index 73a13b3d3..000000000 --- a/.changeset/modern-queries-wait.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"skycrypt-frontend": patch ---- - -Migrate remote query search calls to the current SvelteKit API. diff --git a/.changeset/pre.json b/.changeset/pre.json deleted file mode 100644 index 4a9441c54..000000000 --- a/.changeset/pre.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "mode": "pre", - "tag": "beta", - "initialVersions": { - "skycrypt-frontend": "3.6.2" - }, - "changesets": [ - "bright-posts-wink", - "crisp-tires-hang", - "fuzzy-newsrooms-smile", - "large-newsroom-embeds", - "modern-queries-wait", - "quiet-deriveds-resolve", - "rich-newsrooms-render" - ] -} diff --git a/.changeset/quiet-deriveds-resolve.md b/.changeset/quiet-deriveds-resolve.md deleted file mode 100644 index ec90ace71..000000000 --- a/.changeset/quiet-deriveds-resolve.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"skycrypt-frontend": patch ---- - -Eliminate `derived_inert` runtime warnings by hoisting `new IsInViewport(...)` out of a `$derived` in `Chip.svelte` and splitting `getThemeIcons(...).current` in the header. Align remaining stats-view remote queries with the post-2.61 docs idiom (`await` for template/context-feed sites; `.current`/`.loading`/`.error` kept only for the loading-button-spinner case). Drop the redundant `getCombined()` in `Sections.svelte`. Make the navbar's tab scroll-on-mount race-resistant and its `IntersectionObserver` `rootMargin` NaN-safe. diff --git a/.changeset/rich-newsrooms-render.md b/.changeset/rich-newsrooms-render.md deleted file mode 100644 index 29c897549..000000000 --- a/.changeset/rich-newsrooms-render.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"skycrypt-frontend": patch ---- - -Render newsroom rich text with Payload's Lexical HTML converter while preserving SkyCrypt-specific links, uploads, checklists, and relationship nodes. diff --git a/CHANGELOG.md b/CHANGELOG.md index 763a8e35b..2d27936eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## 3.7.0 + +### Minor Changes + +- Add local newsroom notifications for new CMS posts. _[`#330`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/pull/330) [`c2b599e`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/c2b599e7e729a61d029f4998f736ae3fa1f0571d) [@DarthGigi](https://github.com/DarthGigi)_ +- Add initial work for SkyCrypt accounts _[`#328`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/pull/328) [`c077847`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/c077847a0fbf13a8aa73122aa28e873189c172f4) [@DarthGigi](https://github.com/DarthGigi)_ +- Add the CMS-backed newsroom with post listing, article pages, previews, and sitemap entries. _[`#330`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/pull/330) [`a74b033`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/a74b0339f66196ae719dbc19c06ab704995e502c) [@DarthGigi](https://github.com/DarthGigi)_ + +### Patch Changes + +- Render newsroom posts and the listing page as `summary_large_image` social embeds with the post's hero image (or a branded graphic on the listing), and stop the homepage SEO defaults from leaking into them. _[`#330`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/pull/330) [`793cd0e`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/793cd0ef92bdc01a1de274880f5b00487422d59a) [@DarthGigi](https://github.com/DarthGigi)_ +- Migrate remote query search calls to the current SvelteKit API. _[`#330`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/pull/330) [`31d283e`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/31d283ec8c027cb27583a8bb9c026bacf01759a4) [@DarthGigi](https://github.com/DarthGigi)_ +- Eliminate `derived_inert` runtime warnings by hoisting `new IsInViewport(...)` out of a `$derived` in `Chip.svelte` and splitting `getThemeIcons(...).current` in the header. Align remaining stats-view remote queries with the post-2.61 docs idiom (`await` for template/context-feed sites; `.current`/`.loading`/`.error` kept only for the loading-button-spinner case). Drop the redundant `getCombined()` in `Sections.svelte`. Make the navbar's tab scroll-on-mount race-resistant and its `IntersectionObserver` `rootMargin` NaN-safe. _[`#330`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/pull/330) [`d99d081`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/d99d0812879edad2cd6cdcfc5a60e925099c61fc) [@DarthGigi](https://github.com/DarthGigi)_ +- Render newsroom rich text with Payload's Lexical HTML converter while preserving SkyCrypt-specific links, uploads, checklists, and relationship nodes. _[`#330`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/pull/330) [`0ae985e`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/0ae985e966ec97090b050f4d4607f516359bedd5) [@DarthGigi](https://github.com/DarthGigi)_ + ## 3.7.0-beta.3 ### Patch Changes diff --git a/package.json b/package.json index c0e0cf6c6..4f7be7fe9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "skycrypt-frontend", - "version": "3.7.0-beta.3", + "version": "3.7.0", "private": true, "type": "module", "repository": { From 437d039fb01e3fb9c631a31498e7965a7c90fc2d Mon Sep 17 00:00:00 2001 From: inglettronald Date: Wed, 20 May 2026 11:38:41 -0500 Subject: [PATCH 34/34] chore: cf --- .gitignore | 4 + README.md | 8 + package.json | 4 +- pnpm-lock.yaml | 715 +++++++++++++++--- pnpm-workspace.yaml | 2 + src/app.css | 5 + src/context/preferences.svelte.ts | 4 +- src/hooks.server.ts | 76 +- src/instrumentation.server.ts | 28 - src/lib/components/header/Info.svelte | 6 +- .../components/header/settings/Misc.svelte | 93 +-- .../header/settings/Settings.svelte | 7 - .../components/header/settings/Themes.svelte | 82 +- src/lib/components/misc/Navbar.svelte | 2 +- src/lib/components/stats/Skillbar.svelte | 10 +- src/lib/hooks/is-hover.svelte.ts | 14 +- src/lib/layouts/stats/Main.svelte | 57 +- src/lib/layouts/stats/PlayerProfile.svelte | 143 +--- src/lib/sections/Sections.svelte | 1 + src/lib/sections/constants.ts | 1 + src/lib/sections/stats/Minions.svelte | 14 - src/lib/sections/stats/Overview.svelte | 18 + src/lib/sections/types.ts | 2 +- src/lib/server/db/index.ts | 24 +- src/routes/+layout.svelte | 23 +- .../stats/[ign]/[[profile]]/card/+server.ts | 13 +- vite.config.ts | 5 +- wrangler.jsonc | 25 + 28 files changed, 750 insertions(+), 636 deletions(-) delete mode 100644 src/instrumentation.server.ts create mode 100644 src/lib/sections/stats/Overview.svelte create mode 100644 wrangler.jsonc diff --git a/.gitignore b/.gitignore index ef515a6c9..7e3793d27 100644 --- a/.gitignore +++ b/.gitignore @@ -53,6 +53,10 @@ Temporary Items .svelte-kit/ package +### Cloudflare / Wrangler ### +# Local wrangler/miniflare runtime state (sqlite cache, etc.) +.wrangler/ + ### VisualStudioCode ### .vscode/* !.vscode/settings.json diff --git a/README.md b/README.md index 5e78fe4d1..1c3686149 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,11 @@ +> This is a fork of [SkyCryptWebsite/SkyCrypt-Frontend](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend) with minimal changes to support embedding the profile viewer in Lunar Client. To keep this fork up to date with upstream: +> +> ``` +> git rebase upstream/dev +> # Resolve any conflicts that occur +> git push origin dev --force-with-lease +> ``` +

    diff --git a/package.json b/package.json index 4f7be7fe9..0c47ecceb 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "@oslojs/crypto": "^1.0.1", "@oslojs/encoding": "^1.1.0", "@playwright/test": "^1.60.0", + "@sveltejs/adapter-cloudflare": "^7.2.8", "@sveltejs/adapter-node": "^5.5.4", "@sveltejs/kit": "^2.63.0", "@sveltejs/load-config": "^0.1.1", @@ -120,6 +121,7 @@ "@sentry/sveltekit": "^10.56.0", "culori": "^4.0.2", "simple-git-hooks": "^2.13.1", + "svelte-interactions": "^0.2.0", "takumi-js": "^1.7.0" }, "engines": { @@ -133,4 +135,4 @@ "simple-git-hooks": { "commit-msg": "pnpm exec commitlint --edit $1" } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b2e985fb..2cb910018 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,20 +16,23 @@ importers: version: 3.85.0(@faceless-ui/modal@3.0.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@faceless-ui/scroll-info@2.0.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@payloadcms/next@3.85.0(@types/react@19.2.16)(graphql@16.14.1)(monaco-editor@0.55.1)(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(payload@3.85.0(graphql@16.14.1)(typescript@6.0.3))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3))(@types/react@19.2.16)(monaco-editor@0.55.1)(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(payload@3.85.0(graphql@16.14.1)(typescript@6.0.3))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3)(yjs@13.6.31) '@sentry/sveltekit': specifier: ^10.56.0 - version: 10.56.0(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(rollup@4.61.1)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)) + version: 10.56.0(@cloudflare/workers-types@4.20260613.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(rollup@4.61.1)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)) culori: specifier: ^4.0.2 version: 4.0.2 simple-git-hooks: specifier: ^2.13.1 version: 2.13.1 + svelte-interactions: + specifier: ^0.2.0 + version: 0.2.0(svelte@5.56.1(@typescript-eslint/types@8.60.1)) takumi-js: specifier: ^1.7.0 version: 1.7.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) devDependencies: '@better-auth/api-key': specifier: ^1.6.14 - version: 1.6.14(d0a5e8040f450401665893b755544d4a) + version: 1.6.14(c35a64052094e7da9135b5e1c925e89c) '@changesets/cli': specifier: ^2.31.0 version: 2.31.0(@types/node@25.9.1) @@ -72,6 +75,9 @@ importers: '@playwright/test': specifier: ^1.60.0 version: 1.60.0 + '@sveltejs/adapter-cloudflare': + specifier: ^7.2.8 + version: 7.2.8(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(wrangler@4.100.0(@cloudflare/workers-types@4.20260613.1)) '@sveltejs/adapter-node': specifier: ^5.5.4 version: 5.5.4(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0))) @@ -113,10 +119,10 @@ importers: version: 4.1.8(vitest@4.1.8) auth: specifier: ^1.6.14 - version: 1.6.14(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(better-call@1.3.5(zod@4.4.3))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(jose@6.2.3)(kysely@0.28.17)(magicast@0.5.3)(nanostores@1.3.0)(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8) + version: 1.6.14(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(better-call@1.3.5(zod@4.4.3))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(kysely@0.28.17)(postgres@3.4.9))(jose@6.2.3)(kysely@0.28.17)(magicast@0.5.3)(nanostores@1.3.0)(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8) better-auth: specifier: ^1.6.14 - version: 1.6.14(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8) + version: 1.6.14(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8) bits-ui: specifier: ^2.18.1 version: 2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1)) @@ -140,7 +146,7 @@ importers: version: 0.31.10 drizzle-orm: specifier: ^0.45.2 - version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9) + version: 0.45.2(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(kysely@0.28.17)(postgres@3.4.9) eslint: specifier: ^10.4.1 version: 10.4.1(jiti@2.7.0) @@ -604,6 +610,52 @@ packages: '@clack/prompts@0.11.0': resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==} + '@cloudflare/kv-asset-handler@0.5.0': + resolution: {integrity: sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==} + engines: {node: '>=22.0.0'} + + '@cloudflare/unenv-preset@2.16.1': + resolution: {integrity: sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw==} + peerDependencies: + unenv: 2.0.0-rc.24 + workerd: '>1.20260305.0 <2.0.0-0' + peerDependenciesMeta: + workerd: + optional: true + + '@cloudflare/workerd-darwin-64@1.20260611.1': + resolution: {integrity: sha512-iJICldmi4sBGgi7IrQles8cStOGXM/Tmv95C4OODVs6VIbMsJPqThUM5h3uYVQNULuJ8I/aVvnJ3Eh/wZCKwuA==} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + + '@cloudflare/workerd-darwin-arm64@1.20260611.1': + resolution: {integrity: sha512-yBbVXvbZyltR3I7NJdC4C4ItkItjZSiabcA/3HzEWOUQjLVKFqRh4so6ToHr70VCYh8VGeR8EDZL23igLhXqFQ==} + engines: {node: '>=16'} + cpu: [arm64] + os: [darwin] + + '@cloudflare/workerd-linux-64@1.20260611.1': + resolution: {integrity: sha512-PfNjpxOlaIgZFYuhD7+neEEewCN2Ud993wEEN0fmbtSOax1AK53LGqmXUDvFhnbkHxJLFAxYCSNISW8QbzaAIg==} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + + '@cloudflare/workerd-linux-arm64@1.20260611.1': + resolution: {integrity: sha512-GEp4XbuIKjlF8pakqXcUDJfKiJosD/Q7S83J0d+r+z9XIlYGfF3ntm08e2aiF5TFTwp3fnG4yMoPUAKNhNJpvQ==} + engines: {node: '>=16'} + cpu: [arm64] + os: [linux] + + '@cloudflare/workerd-windows-64@1.20260611.1': + resolution: {integrity: sha512-S6JkS0kEbcCKs19RGqEPhjCRbP8GBkQwqYLp2fhBJtD/KTlwqLzOJ9E6PQ7gQKgWHtxy1NBG3oXarlNFRNU/dw==} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + + '@cloudflare/workers-types@4.20260613.1': + resolution: {integrity: sha512-1mrgjE6epolwBhroeGAp5ud5H6Vyi6tl1o/NP0T4rXJ8bmEjmhHnbCzAhHTDHV0PIeip43wcuzHKJarvaGTaUA==} + '@commander-js/extra-typings@14.0.0': resolution: {integrity: sha512-hIn0ncNaJRLkZrxBIp5AsW/eXEHNKYQBh0aPdoUqNgD+Io3NIykQqpKFyKcuasZhicGaEZJX/JBSIkZ4e5x8Dg==} peerDependencies: @@ -690,6 +742,10 @@ packages: conventional-commits-parser: optional: true + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + '@date-fns/tz@1.2.0': resolution: {integrity: sha512-LBrd7MiJZ9McsOgxqWX7AaxrDjcFVjWH/tIKJd7pnR7McaslGYOP1QmmiBXdJH/H/yLCT+rcQ7FaPBUxRGUtrg==} @@ -814,6 +870,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.27.3': + resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.27.7': resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} engines: {node: '>=18'} @@ -838,6 +900,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.27.3': + resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.27.7': resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} engines: {node: '>=18'} @@ -862,6 +930,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.27.3': + resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.27.7': resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} engines: {node: '>=18'} @@ -886,6 +960,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.27.3': + resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.27.7': resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} engines: {node: '>=18'} @@ -910,6 +990,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.27.3': + resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.27.7': resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} engines: {node: '>=18'} @@ -934,6 +1020,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.27.3': + resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.27.7': resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} engines: {node: '>=18'} @@ -958,6 +1050,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.27.3': + resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.27.7': resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} engines: {node: '>=18'} @@ -982,6 +1080,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.27.3': + resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.27.7': resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} engines: {node: '>=18'} @@ -1006,6 +1110,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.27.3': + resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.27.7': resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} engines: {node: '>=18'} @@ -1030,6 +1140,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.27.3': + resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.27.7': resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} engines: {node: '>=18'} @@ -1054,6 +1170,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.27.3': + resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.27.7': resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} engines: {node: '>=18'} @@ -1078,6 +1200,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.27.3': + resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.27.7': resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} engines: {node: '>=18'} @@ -1102,6 +1230,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.27.3': + resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.27.7': resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} engines: {node: '>=18'} @@ -1126,6 +1260,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.27.3': + resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.27.7': resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} engines: {node: '>=18'} @@ -1150,6 +1290,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.27.3': + resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.27.7': resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} engines: {node: '>=18'} @@ -1174,6 +1320,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.27.3': + resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.27.7': resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} engines: {node: '>=18'} @@ -1198,6 +1350,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.27.3': + resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.27.7': resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} engines: {node: '>=18'} @@ -1216,6 +1374,12 @@ packages: cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-arm64@0.27.3': + resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.27.7': resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} engines: {node: '>=18'} @@ -1240,6 +1404,12 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.27.3': + resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.27.7': resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} engines: {node: '>=18'} @@ -1258,6 +1428,12 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.27.3': + resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.27.7': resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} engines: {node: '>=18'} @@ -1282,6 +1458,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.27.3': + resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.27.7': resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} engines: {node: '>=18'} @@ -1300,6 +1482,12 @@ packages: cpu: [arm64] os: [openharmony] + '@esbuild/openharmony-arm64@0.27.3': + resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/openharmony-arm64@0.27.7': resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} engines: {node: '>=18'} @@ -1324,6 +1512,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.27.3': + resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.27.7': resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} engines: {node: '>=18'} @@ -1348,6 +1542,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.27.3': + resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.27.7': resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} engines: {node: '>=18'} @@ -1372,6 +1572,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.27.3': + resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.27.7': resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} engines: {node: '>=18'} @@ -1396,6 +1602,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.27.3': + resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.27.7': resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} engines: {node: '>=18'} @@ -1699,6 +1911,9 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@jsdevtools/ono@7.1.3': resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} @@ -2034,6 +2249,15 @@ packages: '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + '@poppinss/colors@4.1.6': + resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==} + + '@poppinss/dumper@0.6.5': + resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==} + + '@poppinss/exception@1.2.3': + resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} + '@poppinss/macroable@1.1.2': resolution: {integrity: sha512-FAVBRzzWhYP5mA3lCwLH1A0fKBqq5anyjGet90Z81aRK5c/+LTGUE1zJhZrErjaenBSOOI9BVUs3WVmotneFQA==} @@ -2534,10 +2758,17 @@ packages: resolution: {integrity: sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==} engines: {node: '>=18'} + '@sindresorhus/is@7.2.0': + resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} + engines: {node: '>=18'} + '@sindresorhus/merge-streams@4.0.0': resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} + '@speed-highlight/core@1.2.17': + resolution: {integrity: sha512-Z92FwKpCtfaW1V0jTU/fh3QzYEZN8wDwrzRIBoADCJfn4mJCNcJN/XegifX7BDrQ8/h9Xh/JnbyMchL0FqXrkg==} + '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -2546,6 +2777,12 @@ packages: peerDependencies: acorn: ^8.9.0 + '@sveltejs/adapter-cloudflare@7.2.8': + resolution: {integrity: sha512-bIdhY/Fi4AQmqiBdQVKnafH1h9Gw+xbCvHyUu4EouC8rJOU02zwhi14k/FDhQ0mJF1iblIu3m8UNQ8GpGIvIOQ==} + peerDependencies: + '@sveltejs/kit': ^2.0.0 + wrangler: ^4.0.0 + '@sveltejs/adapter-node@5.5.4': resolution: {integrity: sha512-45X92CXW+2J8ZUzPv3eLlKWEzINKiiGeFWTjyER4ZN4sGgNoaoeSkCY/QYNxHpPXy71QPsctwccBo9jJs0ySPQ==} peerDependencies: @@ -2821,9 +3058,6 @@ packages: '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - '@types/pg@8.15.6': - resolution: {integrity: sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==} - '@types/react-transition-group@4.4.12': resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==} peerDependencies: @@ -3214,6 +3448,9 @@ packages: '@internationalized/date': ^3.8.1 svelte: ^5.33.0 + blake3-wasm@2.1.5: + resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} + body-scroll-lock@4.0.0-beta.0: resolution: {integrity: sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==} @@ -3387,6 +3624,10 @@ packages: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + cosmiconfig-typescript-loader@6.3.0: resolution: {integrity: sha512-Akr82WH1Wfqatyiqpj8HDkO2o2KmJRu1FhKfSNJP3K4IdXwHfEyL7MOb62i1AGQVLtIQM+iCE9CGOtrfhR+mmA==} engines: {node: '>=v18'} @@ -3677,6 +3918,9 @@ packages: error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + error-stack-parser-es@1.0.5: + resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} + es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} @@ -3697,6 +3941,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.27.3: + resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.27.7: resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} engines: {node: '>=18'} @@ -4610,6 +4859,11 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + miniflare@4.20260611.0: + resolution: {integrity: sha512-i+JwEo8vN96naz1WL3ntFgFyRluBDYL408zwhHKvR2jefJ464KsZ/gCmJAQ5k+oaWeb5Ug+s7yne5AyiAEswjg==} + engines: {node: '>=22.0.0'} + hasBin: true + minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} @@ -4839,17 +5093,6 @@ packages: perfect-debounce@2.1.0: resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} - pg-int8@1.0.1: - resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} - engines: {node: '>=4.0.0'} - - pg-protocol@1.14.0: - resolution: {integrity: sha512-n5taZ1kO3s9ngDTVxsEznOqCyToTgz0FLuPq0B33COy5pPpuWJpY3/2oRBVETuOgzdqRXfWpM9HIhp2LBBT1BA==} - - pg-types@2.2.0: - resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} - engines: {node: '>=4'} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -4936,22 +5179,6 @@ packages: resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} - postgres-array@2.0.0: - resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} - engines: {node: '>=4'} - - postgres-bytea@1.0.1: - resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==} - engines: {node: '>=0.10.0'} - - postgres-date@1.0.7: - resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} - engines: {node: '>=0.10.0'} - - postgres-interval@1.2.0: - resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} - engines: {node: '>=0.10.0'} - postgres@3.4.9: resolution: {integrity: sha512-GD3qdB0x1z9xgFI6cdRD6xu2Sp2WCOEoe3mtnyB5Ee0XrrL5Pe+e4CCnJrRMnL1zYtRDZmQQVbvOttLnKDLnaw==} engines: {node: '>=12'} @@ -5162,6 +5389,10 @@ packages: regexp-to-ast@0.5.0: resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==} + regexparam@3.0.0: + resolution: {integrity: sha512-RSYAtP31mvYLkAHrOlh25pCNQ5hWnT106VukGaaFfuJrZFkGRX5GhUAdPqpSDXxOhA2c4akmRuplv1mRqnBn6Q==} + engines: {node: '>=8'} + remeda@2.37.0: resolution: {integrity: sha512-wN6BXWua0t4o7vDamqc27J3VRxnokG9cDezsFN2nOnt2JD/IkJQHTYqM6UvmEctAZETAoviwEFQZJO3kZ4Ohew==} engines: {node: '>=18.0.0'} @@ -5453,6 +5684,10 @@ packages: resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} engines: {node: '>=14.0.0'} + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -5478,6 +5713,11 @@ packages: svelte: optional: true + svelte-interactions@0.2.0: + resolution: {integrity: sha512-jGgZgdfSFnBzIs5j058T/XqHCEXHVpob31dkTwMu4KZyUSt2prozXoK/vKmN1eOyTaEIqALX20aLkYlbbapLPA==} + peerDependencies: + svelte: ^4.0.0 + svelte-persisted-store@0.12.0: resolution: {integrity: sha512-BdBQr2SGSJ+rDWH8/aEV5GthBJDapVP0GP3fuUCA7TjYG5ctcB+O9Mj9ZC0+Jo1oJMfZUd1y9H68NFRR5MyIJA==} engines: {node: '>=0.14'} @@ -5700,6 +5940,13 @@ packages: resolution: {integrity: sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w==} engines: {node: '>=20.18.1'} + undici@7.24.8: + resolution: {integrity: sha512-6KQ/+QxK49Z/p3HO6E5ZCZWNnCasyZLa5ExaVYyvPxUwKtbCPMKELJOqh7EqOle0t9cH/7d2TaaTRRa6Nhs4YQ==} + engines: {node: '>=20.18.1'} + + unenv@2.0.0-rc.24: + resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} + unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} @@ -5904,6 +6151,25 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + workerd@1.20260611.1: + resolution: {integrity: sha512-CS/640T7pIJ2HYX6x2DwKFGbcSckAWN3tgcdq+ptB6SaqjWUhlzIgA/YhPuwIU+/NnMnGpqOFX/hC18Oyge63w==} + engines: {node: '>=16'} + hasBin: true + + worktop@0.8.0-next.18: + resolution: {integrity: sha512-+TvsA6VAVoMC3XDKR5MoC/qlLqDixEfOBysDEKnPIPou/NvoPWCAuXHXMsswwlvmEuvX56lQjvELLyLuzTKvRw==} + engines: {node: '>=12'} + + wrangler@4.100.0: + resolution: {integrity: sha512-dSQO7DO+mD6XDzkVWIWBoGLO3yw+lacWSc/KhFvd7pgfpth+kX98qb5SGRHZN8ACCDhhfwzDLXwB6qHsIHhfBg==} + engines: {node: '>=22.0.0'} + hasBin: true + peerDependencies: + '@cloudflare/workers-types': ^4.20260611.1 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true + wrap-ansi@9.0.2: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} @@ -5911,6 +6177,18 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + ws@8.20.1: + resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + ws@8.21.0: resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} @@ -5932,10 +6210,6 @@ packages: engines: {node: '>= 0.10.0'} hasBin: true - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -5980,6 +6254,12 @@ packages: resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} + youch-core@0.3.3: + resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==} + + youch@4.1.0-beta.10: + resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} + yup@1.7.1: resolution: {integrity: sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw==} @@ -6244,15 +6524,15 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} - '@better-auth/api-key@1.6.14(d0a5e8040f450401665893b755544d4a)': + '@better-auth/api-key@1.6.14(c35a64052094e7da9135b5e1c925e89c)': dependencies: - '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.1 - better-auth: 1.6.14(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8) + better-auth: 1.6.14(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8) better-call: 1.3.5(zod@4.4.3) zod: 4.4.3 - '@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0)': + '@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0)': dependencies: '@better-auth/utils': 0.4.1 '@better-fetch/fetch': 1.1.21 @@ -6264,40 +6544,41 @@ snapshots: nanostores: 1.3.0 zod: 4.4.3 optionalDependencies: + '@cloudflare/workers-types': 4.20260613.1 '@opentelemetry/api': 1.9.1 - '@better-auth/drizzle-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))': + '@better-auth/drizzle-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(kysely@0.28.17)(postgres@3.4.9))': dependencies: - '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.1 optionalDependencies: - drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9) + drizzle-orm: 0.45.2(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(kysely@0.28.17)(postgres@3.4.9) - '@better-auth/kysely-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(kysely@0.28.17)': + '@better-auth/kysely-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(kysely@0.28.17)': dependencies: - '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.1 optionalDependencies: kysely: 0.28.17 - '@better-auth/memory-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)': + '@better-auth/memory-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)': dependencies: - '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.1 - '@better-auth/mongo-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)': + '@better-auth/mongo-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)': dependencies: - '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.1 - '@better-auth/prisma-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)': + '@better-auth/prisma-adapter@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)': dependencies: - '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.1 - '@better-auth/telemetry@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)': + '@better-auth/telemetry@1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)': dependencies: - '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.1 '@better-fetch/fetch': 1.1.21 @@ -6487,6 +6768,31 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 + '@cloudflare/kv-asset-handler@0.5.0': {} + + '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260611.1)': + dependencies: + unenv: 2.0.0-rc.24 + optionalDependencies: + workerd: 1.20260611.1 + + '@cloudflare/workerd-darwin-64@1.20260611.1': + optional: true + + '@cloudflare/workerd-darwin-arm64@1.20260611.1': + optional: true + + '@cloudflare/workerd-linux-64@1.20260611.1': + optional: true + + '@cloudflare/workerd-linux-arm64@1.20260611.1': + optional: true + + '@cloudflare/workerd-windows-64@1.20260611.1': + optional: true + + '@cloudflare/workers-types@4.20260613.1': {} + '@commander-js/extra-typings@14.0.0(commander@14.0.3)': dependencies: commander: 14.0.3 @@ -6607,6 +6913,10 @@ snapshots: optionalDependencies: conventional-commits-parser: 6.4.0 + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + '@date-fns/tz@1.2.0': {} '@date-fns/tz@1.5.0': {} @@ -6781,6 +7091,9 @@ snapshots: '@esbuild/aix-ppc64@0.25.12': optional: true + '@esbuild/aix-ppc64@0.27.3': + optional: true + '@esbuild/aix-ppc64@0.27.7': optional: true @@ -6793,6 +7106,9 @@ snapshots: '@esbuild/android-arm64@0.25.12': optional: true + '@esbuild/android-arm64@0.27.3': + optional: true + '@esbuild/android-arm64@0.27.7': optional: true @@ -6805,6 +7121,9 @@ snapshots: '@esbuild/android-arm@0.25.12': optional: true + '@esbuild/android-arm@0.27.3': + optional: true + '@esbuild/android-arm@0.27.7': optional: true @@ -6817,6 +7136,9 @@ snapshots: '@esbuild/android-x64@0.25.12': optional: true + '@esbuild/android-x64@0.27.3': + optional: true + '@esbuild/android-x64@0.27.7': optional: true @@ -6829,6 +7151,9 @@ snapshots: '@esbuild/darwin-arm64@0.25.12': optional: true + '@esbuild/darwin-arm64@0.27.3': + optional: true + '@esbuild/darwin-arm64@0.27.7': optional: true @@ -6841,6 +7166,9 @@ snapshots: '@esbuild/darwin-x64@0.25.12': optional: true + '@esbuild/darwin-x64@0.27.3': + optional: true + '@esbuild/darwin-x64@0.27.7': optional: true @@ -6853,6 +7181,9 @@ snapshots: '@esbuild/freebsd-arm64@0.25.12': optional: true + '@esbuild/freebsd-arm64@0.27.3': + optional: true + '@esbuild/freebsd-arm64@0.27.7': optional: true @@ -6865,6 +7196,9 @@ snapshots: '@esbuild/freebsd-x64@0.25.12': optional: true + '@esbuild/freebsd-x64@0.27.3': + optional: true + '@esbuild/freebsd-x64@0.27.7': optional: true @@ -6877,6 +7211,9 @@ snapshots: '@esbuild/linux-arm64@0.25.12': optional: true + '@esbuild/linux-arm64@0.27.3': + optional: true + '@esbuild/linux-arm64@0.27.7': optional: true @@ -6889,6 +7226,9 @@ snapshots: '@esbuild/linux-arm@0.25.12': optional: true + '@esbuild/linux-arm@0.27.3': + optional: true + '@esbuild/linux-arm@0.27.7': optional: true @@ -6901,6 +7241,9 @@ snapshots: '@esbuild/linux-ia32@0.25.12': optional: true + '@esbuild/linux-ia32@0.27.3': + optional: true + '@esbuild/linux-ia32@0.27.7': optional: true @@ -6913,6 +7256,9 @@ snapshots: '@esbuild/linux-loong64@0.25.12': optional: true + '@esbuild/linux-loong64@0.27.3': + optional: true + '@esbuild/linux-loong64@0.27.7': optional: true @@ -6925,6 +7271,9 @@ snapshots: '@esbuild/linux-mips64el@0.25.12': optional: true + '@esbuild/linux-mips64el@0.27.3': + optional: true + '@esbuild/linux-mips64el@0.27.7': optional: true @@ -6937,6 +7286,9 @@ snapshots: '@esbuild/linux-ppc64@0.25.12': optional: true + '@esbuild/linux-ppc64@0.27.3': + optional: true + '@esbuild/linux-ppc64@0.27.7': optional: true @@ -6949,6 +7301,9 @@ snapshots: '@esbuild/linux-riscv64@0.25.12': optional: true + '@esbuild/linux-riscv64@0.27.3': + optional: true + '@esbuild/linux-riscv64@0.27.7': optional: true @@ -6961,6 +7316,9 @@ snapshots: '@esbuild/linux-s390x@0.25.12': optional: true + '@esbuild/linux-s390x@0.27.3': + optional: true + '@esbuild/linux-s390x@0.27.7': optional: true @@ -6973,6 +7331,9 @@ snapshots: '@esbuild/linux-x64@0.25.12': optional: true + '@esbuild/linux-x64@0.27.3': + optional: true + '@esbuild/linux-x64@0.27.7': optional: true @@ -6982,6 +7343,9 @@ snapshots: '@esbuild/netbsd-arm64@0.25.12': optional: true + '@esbuild/netbsd-arm64@0.27.3': + optional: true + '@esbuild/netbsd-arm64@0.27.7': optional: true @@ -6994,6 +7358,9 @@ snapshots: '@esbuild/netbsd-x64@0.25.12': optional: true + '@esbuild/netbsd-x64@0.27.3': + optional: true + '@esbuild/netbsd-x64@0.27.7': optional: true @@ -7003,6 +7370,9 @@ snapshots: '@esbuild/openbsd-arm64@0.25.12': optional: true + '@esbuild/openbsd-arm64@0.27.3': + optional: true + '@esbuild/openbsd-arm64@0.27.7': optional: true @@ -7015,6 +7385,9 @@ snapshots: '@esbuild/openbsd-x64@0.25.12': optional: true + '@esbuild/openbsd-x64@0.27.3': + optional: true + '@esbuild/openbsd-x64@0.27.7': optional: true @@ -7024,6 +7397,9 @@ snapshots: '@esbuild/openharmony-arm64@0.25.12': optional: true + '@esbuild/openharmony-arm64@0.27.3': + optional: true + '@esbuild/openharmony-arm64@0.27.7': optional: true @@ -7036,6 +7412,9 @@ snapshots: '@esbuild/sunos-x64@0.25.12': optional: true + '@esbuild/sunos-x64@0.27.3': + optional: true + '@esbuild/sunos-x64@0.27.7': optional: true @@ -7048,6 +7427,9 @@ snapshots: '@esbuild/win32-arm64@0.25.12': optional: true + '@esbuild/win32-arm64@0.27.3': + optional: true + '@esbuild/win32-arm64@0.27.7': optional: true @@ -7060,6 +7442,9 @@ snapshots: '@esbuild/win32-ia32@0.25.12': optional: true + '@esbuild/win32-ia32@0.27.3': + optional: true + '@esbuild/win32-ia32@0.27.7': optional: true @@ -7072,6 +7457,9 @@ snapshots: '@esbuild/win32-x64@0.25.12': optional: true + '@esbuild/win32-x64@0.27.3': + optional: true + '@esbuild/win32-x64@0.27.7': optional: true @@ -7190,8 +7578,7 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@img/colour@1.1.0': - optional: true + '@img/colour@1.1.0': {} '@img/sharp-darwin-arm64@0.34.5': optionalDependencies: @@ -7317,6 +7704,11 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jsdevtools/ono@7.1.3': {} '@lexical/clipboard@0.41.0': @@ -7874,6 +8266,18 @@ snapshots: '@polka/url@1.0.0-next.29': {} + '@poppinss/colors@4.1.6': + dependencies: + kleur: 4.1.5 + + '@poppinss/dumper@0.6.5': + dependencies: + '@poppinss/colors': 4.1.6 + '@sindresorhus/is': 7.2.0 + supports-color: 10.2.2 + + '@poppinss/exception@1.2.3': {} + '@poppinss/macroable@1.1.2': optional: true @@ -8161,10 +8565,12 @@ snapshots: - encoding - supports-color - '@sentry/cloudflare@10.56.0': + '@sentry/cloudflare@10.56.0(@cloudflare/workers-types@4.20260613.1)': dependencies: '@opentelemetry/api': 1.9.1 '@sentry/core': 10.56.0 + optionalDependencies: + '@cloudflare/workers-types': 4.20260613.1 '@sentry/core@10.56.0': {} @@ -8221,9 +8627,9 @@ snapshots: magic-string: 0.30.21 svelte: 5.56.1(@typescript-eslint/types@8.60.1) - '@sentry/sveltekit@10.56.0(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(rollup@4.61.1)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0))': + '@sentry/sveltekit@10.56.0(@cloudflare/workers-types@4.20260613.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(rollup@4.61.1)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0))': dependencies: - '@sentry/cloudflare': 10.56.0 + '@sentry/cloudflare': 10.56.0(@cloudflare/workers-types@4.20260613.1) '@sentry/core': 10.56.0 '@sentry/node': 10.56.0 '@sentry/svelte': 10.56.0(svelte@5.56.1(@typescript-eslint/types@8.60.1)) @@ -8289,14 +8695,25 @@ snapshots: '@simple-libs/stream-utils@1.2.0': {} + '@sindresorhus/is@7.2.0': {} + '@sindresorhus/merge-streams@4.0.0': {} + '@speed-highlight/core@1.2.17': {} + '@standard-schema/spec@1.1.0': {} '@sveltejs/acorn-typescript@1.0.10(acorn@8.16.0)': dependencies: acorn: 8.16.0 + '@sveltejs/adapter-cloudflare@7.2.8(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(wrangler@4.100.0(@cloudflare/workers-types@4.20260613.1))': + dependencies: + '@cloudflare/workers-types': 4.20260613.1 + '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)) + worktop: 0.8.0-next.18 + wrangler: 4.100.0(@cloudflare/workers-types@4.20260613.1) + '@sveltejs/adapter-node@5.5.4(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))': dependencies: '@rollup/plugin-commonjs': 29.0.3(rollup@4.61.1) @@ -8541,13 +8958,6 @@ snapshots: '@types/parse-json@4.0.2': {} - '@types/pg@8.15.6': - dependencies: - '@types/node': 25.9.1 - pg-protocol: 1.14.0 - pg-types: 2.2.0 - optional: true - '@types/react-transition-group@4.4.12(@types/react@19.2.16)': dependencies: '@types/react': 19.2.16 @@ -8903,17 +9313,17 @@ snapshots: atomic-sleep@1.0.0: {} - auth@1.6.14(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(better-call@1.3.5(zod@4.4.3))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(jose@6.2.3)(kysely@0.28.17)(magicast@0.5.3)(nanostores@1.3.0)(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8): + auth@1.6.14(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(better-call@1.3.5(zod@4.4.3))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(kysely@0.28.17)(postgres@3.4.9))(jose@6.2.3)(kysely@0.28.17)(magicast@0.5.3)(nanostores@1.3.0)(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8): dependencies: '@babel/core': 7.29.7 '@babel/preset-react': 7.29.7(@babel/core@7.29.7) '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7) - '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) - '@better-auth/telemetry': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21) + '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/telemetry': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21) '@better-auth/utils': 0.4.1 '@clack/prompts': 0.11.0 '@mrleebo/prisma-ast': 0.13.1 - better-auth: 1.6.14(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8) + better-auth: 1.6.14(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8) c12: 3.3.4(magicast@0.5.3) chalk: 5.6.2 commander: 12.1.0 @@ -8967,15 +9377,15 @@ snapshots: baseline-browser-mapping@2.10.33: {} - better-auth@1.6.14(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8): + better-auth@1.6.14(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(@sveltejs/kit@2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8): dependencies: - '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) - '@better-auth/drizzle-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9)) - '@better-auth/kysely-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(kysely@0.28.17) - '@better-auth/memory-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1) - '@better-auth/mongo-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1) - '@better-auth/prisma-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1) - '@better-auth/telemetry': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21) + '@better-auth/core': 1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/drizzle-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(kysely@0.28.17)(postgres@3.4.9)) + '@better-auth/kysely-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(kysely@0.28.17) + '@better-auth/memory-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1) + '@better-auth/mongo-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1) + '@better-auth/prisma-adapter': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1) + '@better-auth/telemetry': 1.6.14(@better-auth/core@1.6.14(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21) '@better-auth/utils': 0.4.1 '@better-fetch/fetch': 1.1.21 '@noble/ciphers': 2.2.0 @@ -8989,7 +9399,7 @@ snapshots: optionalDependencies: '@sveltejs/kit': 2.63.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.77.4)(tsx@4.22.4)(yaml@2.9.0)) drizzle-kit: 0.31.10 - drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9) + drizzle-orm: 0.45.2(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(kysely@0.28.17)(postgres@3.4.9) next: 16.2.7(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.4) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) @@ -9027,6 +9437,8 @@ snapshots: transitivePeerDependencies: - '@sveltejs/kit' + blake3-wasm@2.1.5: {} + body-scroll-lock@4.0.0-beta.0: {} brace-expansion@5.0.6: @@ -9202,6 +9614,8 @@ snapshots: cookie@0.6.0: {} + cookie@1.1.1: {} + cosmiconfig-typescript-loader@6.3.0(@types/node@25.9.1)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3): dependencies: '@types/node': 25.9.1 @@ -9340,10 +9754,10 @@ snapshots: esbuild: 0.25.12 tsx: 4.22.4 - drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9): + drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260613.1)(@opentelemetry/api@1.9.1)(kysely@0.28.17)(postgres@3.4.9): optionalDependencies: + '@cloudflare/workers-types': 4.20260613.1 '@opentelemetry/api': 1.9.1 - '@types/pg': 8.15.6 kysely: 0.28.17 postgres: 3.4.9 @@ -9381,6 +9795,8 @@ snapshots: dependencies: is-arrayish: 0.2.1 + error-stack-parser-es@1.0.5: {} + es-errors@1.3.0: {} es-module-lexer@2.1.0: {} @@ -9441,6 +9857,35 @@ snapshots: '@esbuild/win32-ia32': 0.25.12 '@esbuild/win32-x64': 0.25.12 + esbuild@0.27.3: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.3 + '@esbuild/android-arm': 0.27.3 + '@esbuild/android-arm64': 0.27.3 + '@esbuild/android-x64': 0.27.3 + '@esbuild/darwin-arm64': 0.27.3 + '@esbuild/darwin-x64': 0.27.3 + '@esbuild/freebsd-arm64': 0.27.3 + '@esbuild/freebsd-x64': 0.27.3 + '@esbuild/linux-arm': 0.27.3 + '@esbuild/linux-arm64': 0.27.3 + '@esbuild/linux-ia32': 0.27.3 + '@esbuild/linux-loong64': 0.27.3 + '@esbuild/linux-mips64el': 0.27.3 + '@esbuild/linux-ppc64': 0.27.3 + '@esbuild/linux-riscv64': 0.27.3 + '@esbuild/linux-s390x': 0.27.3 + '@esbuild/linux-x64': 0.27.3 + '@esbuild/netbsd-arm64': 0.27.3 + '@esbuild/netbsd-x64': 0.27.3 + '@esbuild/openbsd-arm64': 0.27.3 + '@esbuild/openbsd-x64': 0.27.3 + '@esbuild/openharmony-arm64': 0.27.3 + '@esbuild/sunos-x64': 0.27.3 + '@esbuild/win32-arm64': 0.27.3 + '@esbuild/win32-ia32': 0.27.3 + '@esbuild/win32-x64': 0.27.3 + esbuild@0.27.7: optionalDependencies: '@esbuild/aix-ppc64': 0.27.7 @@ -10482,6 +10927,18 @@ snapshots: braces: 3.0.3 picomatch: 2.3.2 + miniflare@4.20260611.0: + dependencies: + '@cspotcode/source-map-support': 0.8.1 + sharp: 0.34.5 + undici: 7.24.8 + workerd: 1.20260611.1 + ws: 8.20.1 + youch: 4.1.0-beta.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + minimatch@10.2.5: dependencies: brace-expansion: 5.0.6 @@ -10751,21 +11208,6 @@ snapshots: perfect-debounce@2.1.0: {} - pg-int8@1.0.1: - optional: true - - pg-protocol@1.14.0: - optional: true - - pg-types@2.2.0: - dependencies: - pg-int8: 1.0.1 - postgres-array: 2.0.0 - postgres-bytea: 1.0.1 - postgres-date: 1.0.7 - postgres-interval: 1.2.0 - optional: true - picocolors@1.1.1: {} picomatch@2.3.2: {} @@ -10860,20 +11302,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postgres-array@2.0.0: - optional: true - - postgres-bytea@1.0.1: - optional: true - - postgres-date@1.0.7: - optional: true - - postgres-interval@1.2.0: - dependencies: - xtend: 4.0.2 - optional: true - postgres@3.4.9: {} prelude-ls@1.2.1: {} @@ -11021,6 +11449,8 @@ snapshots: regexp-to-ast@0.5.0: {} + regexparam@3.0.0: {} + remeda@2.37.0: {} require-from-string@2.0.2: {} @@ -11207,7 +11637,6 @@ snapshots: '@img/sharp-win32-arm64': 0.34.5 '@img/sharp-win32-ia32': 0.34.5 '@img/sharp-win32-x64': 0.34.5 - optional: true shebang-command@2.0.0: dependencies: @@ -11335,6 +11764,8 @@ snapshots: superstruct@2.0.2: optional: true + supports-color@10.2.2: {} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -11366,6 +11797,10 @@ snapshots: optionalDependencies: svelte: 5.56.1(@typescript-eslint/types@8.60.1) + svelte-interactions@0.2.0(svelte@5.56.1(@typescript-eslint/types@8.60.1)): + dependencies: + svelte: 5.56.1(@typescript-eslint/types@8.60.1) + svelte-persisted-store@0.12.0(svelte@5.56.1(@typescript-eslint/types@8.60.1)): dependencies: svelte: 5.56.1(@typescript-eslint/types@8.60.1) @@ -11609,6 +12044,12 @@ snapshots: undici@7.24.4: {} + undici@7.24.8: {} + + unenv@2.0.0-rc.24: + dependencies: + pathe: 2.0.3 + unicorn-magic@0.3.0: {} unist-util-is@6.0.1: @@ -11762,6 +12203,36 @@ snapshots: word-wrap@1.2.5: {} + workerd@1.20260611.1: + optionalDependencies: + '@cloudflare/workerd-darwin-64': 1.20260611.1 + '@cloudflare/workerd-darwin-arm64': 1.20260611.1 + '@cloudflare/workerd-linux-64': 1.20260611.1 + '@cloudflare/workerd-linux-arm64': 1.20260611.1 + '@cloudflare/workerd-windows-64': 1.20260611.1 + + worktop@0.8.0-next.18: + dependencies: + mrmime: 2.0.1 + regexparam: 3.0.0 + + wrangler@4.100.0(@cloudflare/workers-types@4.20260613.1): + dependencies: + '@cloudflare/kv-asset-handler': 0.5.0 + '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260611.1) + blake3-wasm: 2.1.5 + esbuild: 0.27.3 + miniflare: 4.20260611.0 + path-to-regexp: 6.3.0 + unenv: 2.0.0-rc.24 + workerd: 1.20260611.1 + optionalDependencies: + '@cloudflare/workers-types': 4.20260613.1 + fsevents: 2.3.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + wrap-ansi@9.0.2: dependencies: ansi-styles: 6.2.3 @@ -11770,6 +12241,8 @@ snapshots: wrappy@1.0.2: {} + ws@8.20.1: {} + ws@8.21.0: {} wsl-utils@0.1.0: @@ -11781,9 +12254,6 @@ snapshots: commander: 2.20.3 cssfilter: 0.0.10 - xtend@4.0.2: - optional: true - y18n@5.0.8: {} yallist@3.1.1: {} @@ -11817,6 +12287,19 @@ snapshots: yoctocolors@2.1.2: {} + youch-core@0.3.3: + dependencies: + '@poppinss/exception': 1.2.3 + error-stack-parser-es: 1.0.5 + + youch@4.1.0-beta.10: + dependencies: + '@poppinss/colors': 4.1.6 + '@poppinss/dumper': 0.6.5 + '@speed-highlight/core': 1.2.17 + cookie: 1.1.1 + youch-core: 0.3.3 + yup@1.7.1: dependencies: property-expr: 2.0.6 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e8ef2a767..f0ae5cded 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,5 +6,7 @@ allowBuilds: esbuild: true sharp: true simple-git-hooks: true + svelte-preprocess: true + workerd: true overrides: kysely: 0.28.17 diff --git a/src/app.css b/src/app.css index 9d4ac0038..79dfe691c 100644 --- a/src/app.css +++ b/src/app.css @@ -420,3 +420,8 @@ @utility minecraft-tooltip { @apply relative rounded-sm border-2 border-solid border-transparent bg-mctooltip-bg px-1 pt-1 pb-0.75 indent-[initial] font-minecraft text-[0.9375rem] leading-4.5 font-normal text-pretty [border-image:linear-gradient(to_bottom,oklch(48.503%_0.297_278.42/0.31),oklch(29.365%_0.17619_281.21/0.31))_1] text-shadow-[0.09375rem_0.09375rem_oklch(36.768%,0.00004,271.152)]; } + +body { + -webkit-user-select: none; + user-select: none; +} diff --git a/src/context/preferences.svelte.ts b/src/context/preferences.svelte.ts index 0098376dc..a46f3926b 100644 --- a/src/context/preferences.svelte.ts +++ b/src/context/preferences.svelte.ts @@ -17,9 +17,9 @@ interface PreferencesData { export class PreferencesContext { #data = new PersistedState("skycryptPreferences", { sectionOrder: sections, - performanceMode: false, + performanceMode: true, keybind: "/", - showGlint: true, + showGlint: false, rainbowEnchantments: false, mctooltip: false }); diff --git a/src/hooks.server.ts b/src/hooks.server.ts index f248a0e3a..a17fe1b97 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -1,24 +1,12 @@ -import { building } from "$app/environment"; -import { env as envPublic } from "$env/dynamic/public"; -import { auth } from "$lib/server/auth"; -import { UserRole } from "$lib/shared/roles"; -import { runMigrations } from "$src/lib/server/db/migrate"; import { handleErrorWithSentry, sentryHandle } from "@sentry/sveltekit"; -import { redirect, type Handle, type ServerInit } from "@sveltejs/kit"; +import { type Handle } from "@sveltejs/kit"; import { sequence } from "@sveltejs/kit/hooks"; -import { svelteKitHandler } from "better-auth/svelte-kit"; -const protectedRouteGroupName = "(protected)"; -const protectedAdminRouteGroupName = "(admin)"; -const signInPath = "/login"; - -export const init: ServerInit = async () => { - if (building) { - console.info("Skipping migrations during build."); - return; - } - await runMigrations(); -}; +// This fork is a public stats/card embed (skycrypt-embed.lunarclient.com) deployed +// on Cloudflare Workers. It has no user accounts, so the upstream better-auth + +// Postgres pipeline is intentionally omitted: DB-backed session lookups need a +// database the embed doesn't have, and migrate-on-startup can't run on Workers +// (no filesystem / process.cwd). See src/lib/server/db/index.ts (lazy db). const headersHandler = (async ({ event, resolve }) => { const response = await resolve(event); @@ -29,18 +17,8 @@ const headersHandler = (async ({ event, resolve }) => { response.headers.set("Permissions-Policy", "accelerometer=(), autoplay=(), camera=(), encrypted-media=(), fullscreen=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), sync-xhr=(), usb=(), xr-spatial-tracking=(), geolocation=()"); response.headers.set("X-Content-Type-Options", "nosniff"); response.headers.set("Strict-Transport-Security", "max-age=31536000; includeSubDomains; preload"); - - // Clickjacking protection. The newsroom draft preview must be embeddable in the Payload - // CMS admin's live-preview iframe, so allow only the CMS origin to frame that one route; - // everything else stays frame-locked. - const isNewsroomPreview = url.pathname.startsWith("/newsroom/") && url.searchParams.get("preview") === "1"; - if (isNewsroomPreview) { - const cms = envPublic.PUBLIC_CMS_URL?.trim(); - response.headers.append("Content-Security-Policy", `frame-ancestors 'self'${cms ? ` ${cms}` : ""}`); - } else { - response.headers.set("X-Frame-Options", "DENY"); - response.headers.append("Content-Security-Policy", "frame-ancestors 'none'"); - } + // No frame-locking: this fork is embedded as an iframe (skycrypt-embed.lunarclient.com), + // so X-Frame-Options / frame-ancestors restrictions are intentionally omitted. // Cross-Origin policies // COEP intentionally unsafe-none: tightening would require all cross-origin @@ -66,40 +44,4 @@ const headersHandler = (async ({ event, resolve }) => { // If you have a custom error handler, pass it to `handleErrorWithSentry` export const handleError = handleErrorWithSentry(); -const betterAuthHandler: Handle = async ({ event, resolve }) => { - const session = await auth.api.getSession({ headers: event.request.headers }); - - if (session) { - event.locals.session = session.session; - event.locals.user = session.user; - } - - return svelteKitHandler({ event, resolve, auth, building }); -}; - -const protectedHandler = (async ({ event, resolve }) => { - const { locals, route } = event; - if (!locals.user) { - if (route.id?.includes(protectedRouteGroupName)) { - console.info("Redirecting to sign-in page as user is not authenticated."); - redirect(307, signInPath); - } - } - if (locals.user) { - const roles = (locals.user.role ? locals.user.role.split(",") : []) as UserRole[]; - const isAdmin = roles.includes(UserRole.Admin); - if (route.id?.includes(protectedAdminRouteGroupName) && !isAdmin) { - console.info("Redirecting to dashboard as user lacks admin role."); - redirect(307, "/dashboard"); - } - } - if (locals.user && locals.session) { - if (route.id?.startsWith(signInPath)) { - redirect(307, "/dashboard"); - } - } - return resolve(event); -}) satisfies Handle; - -// If you have custom handlers, make sure to place them after `sentryHandle()` in the `sequence` function. -export const handle = sequence(sentryHandle(), betterAuthHandler, protectedHandler, headersHandler) satisfies Handle; +export const handle = sequence(sentryHandle(), headersHandler) satisfies Handle; diff --git a/src/instrumentation.server.ts b/src/instrumentation.server.ts deleted file mode 100644 index 417e25d58..000000000 --- a/src/instrumentation.server.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { dev } from "$app/environment"; -import { env } from "$env/dynamic/public"; -import * as Sentry from "@sentry/sveltekit"; -import { consoleLoggingIntegration, contextLinesIntegration, extraErrorDataIntegration } from "@sentry/sveltekit"; - -const { PUBLIC_SENTRY_DSN } = env; - -Sentry.init({ - dsn: PUBLIC_SENTRY_DSN, - - // Enable logs to be sent to Sentry - enableLogs: true, - - tracesSampleRate: 0.3, - integrations: [contextLinesIntegration(), extraErrorDataIntegration(), consoleLoggingIntegration()], - - // Disable Sentry during development - enabled: !dev, - environment: dev ? "development" : "production" -}); - -// Node 24's default --unhandled-rejections=throw will kill the process on any -// orphaned promise rejection (e.g. losing-side promises in Promise.all when -// one rejects first). Log and report so we get visibility, but don't crash. -process.on("unhandledRejection", (reason) => { - console.error("Unhandled promise rejection:", reason); - Sentry.captureException(reason); -}); diff --git a/src/lib/components/header/Info.svelte b/src/lib/components/header/Info.svelte index b4bf38234..3bb99ee7a 100644 --- a/src/lib/components/header/Info.svelte +++ b/src/lib/components/header/Info.svelte @@ -1,7 +1,7 @@ {#snippet info()}

    SkyCrypt is a free, open-source stats viewer for Hypixel SkyBlock.

    - {#if __NPM_PACKAGE_VERSION__ || PUBLIC_COMMIT_HASH} + {#if __NPM_PACKAGE_VERSION__ || version}

    Currently running version diff --git a/src/lib/components/header/settings/Misc.svelte b/src/lib/components/header/settings/Misc.svelte index 9b068544d..8369ccd55 100644 --- a/src/lib/components/header/settings/Misc.svelte +++ b/src/lib/components/header/settings/Misc.svelte @@ -1,44 +1,12 @@ @@ -54,71 +22,12 @@

    - (preferences.performanceMode = !preferences.performanceMode)}> - {#snippet icon()} - - {/snippet} - - - - - - - - {#snippet child({ wrapperProps, props, open })} - {#if open} -
    -
    -

    You might not need this! We've noticed that often the reason for low performance is due to Graphics Acceleration being disabled in the browser settings.

    -

    Graphics Acceleration gives the browsers access to your GPU for rendering, which can significantly improve performance; especially with opacity and blur effects.

    -

    - Enable Graphics Acceleration in your browser settings first, and if you still experience performance issues, then consider enabling Performance Mode. -

    - -
    -
    - {/if} - {/snippet} -
    -
    -
    -
    -
    - - (preferences.showGlint = !preferences.showGlint)}> - {#snippet icon()} - - {/snippet} - (preferences.mctooltip = !preferences.mctooltip)}> {#snippet icon()} {/snippet} - - (preferences.rainbowEnchantments = !preferences.rainbowEnchantments)}> - {#snippet icon()} - - {/snippet} - - -
    -
    - -
    -

    Keybind

    -

    Set the keybind to open the command menu

    -
    -
    - - {#if isListening} - Press a key - {:else} - {preferences.keybind} - {/if} - -
    diff --git a/src/lib/components/header/settings/Settings.svelte b/src/lib/components/header/settings/Settings.svelte index ca8622714..637947f46 100644 --- a/src/lib/components/header/settings/Settings.svelte +++ b/src/lib/components/header/settings/Settings.svelte @@ -1,13 +1,11 @@ @@ -90,54 +58,6 @@ {/await} {/each} - - openThemeEditor()} class="group mt-4 flex items-center gap-1 rounded-lg text-sm font-semibold text-text/60 transition-colors"> -
    My Themes
    - -
    - - {#if themeContext.userThemes.length === 0} -

    No custom themes yet. Create your own theme or import one from the community!

    - {:else} - {#each themeContext.userThemes as theme (theme.metadata.id)} - {#await getThemeIcons({ color: theme.colors?.logo, invert: theme.light }) then iconSvg} - {@const iconDataUrl = `data:image/svg+xml;base64,${btoa(iconSvg)}`} - -
    - - - {theme.metadata.name.slice(0, 2)} - -
    -

    {theme.metadata.name}

    -

    - by - {theme.metadata.author} -

    -
    -
    - -
    - - - - - openThemeEditor(theme.metadata.id)} class="rounded p-1.5 transition-colors hover:bg-text/10" aria-label="Edit theme"> - - - - shareTheme(theme.metadata.id)} class="rounded p-1.5 transition-colors hover:bg-text/10" aria-label="Share theme"> - - - - confirmDelete(theme.metadata.id)} class="rounded p-1.5 transition-colors hover:bg-text/10" aria-label="Delete theme"> - - -
    -
    - {/await} - {/each} - {/if}
    diff --git a/src/lib/components/misc/Navbar.svelte b/src/lib/components/misc/Navbar.svelte index 6ec682911..fdce0302b 100644 --- a/src/lib/components/misc/Navbar.svelte +++ b/src/lib/components/misc/Navbar.svelte @@ -135,7 +135,7 @@ }); - + {#snippet viewportChildren()}
    diff --git a/src/lib/components/stats/Skillbar.svelte b/src/lib/components/stats/Skillbar.svelte index 0b88ba1b7..d2020fe99 100644 --- a/src/lib/components/stats/Skillbar.svelte +++ b/src/lib/components/stats/Skillbar.svelte @@ -6,6 +6,7 @@ import BarChartHorizontal from "@lucide/svelte/icons/bar-chart-horizontal"; import { Avatar, Progress } from "bits-ui"; import { format } from "numerable"; + import { createHover } from "svelte-interactions"; import { cubicInOut } from "svelte/easing"; import { Tween } from "svelte/motion"; @@ -18,11 +19,10 @@ let { skill, skillData, apiEnabled = true, class: className }: Props = $props(); + const { hoverAction, isHovered } = createHover(); const isMaxed = $derived(skillData.maxed); const preferences = getPreferences(); const tween = new Tween(100, { duration: 1000, easing: cubicInOut }); - let isHovered = $state(false); - const skillbarProgress = $derived(100 - parseFloat(calculatePercentage(skillData.xpCurrent ?? 0, isMaxed ? (skillData.xpCurrent ?? 0) : (skillData.xpForNext ?? 0)))); $effect(() => { @@ -30,7 +30,7 @@ }); -
    (isHovered = true)} onpointerleave={() => (isHovered = false)} role="none"> +
    @@ -50,13 +50,13 @@ {#if apiEnabled}
    - {#if isHovered && !isMaxed} + {#if $isHovered && !isMaxed} {format(skillData.xpCurrent, "0,0")} / {format(skillData.xpForNext)} {:else if !isMaxed} {formatNumber(skillData.xpCurrent ?? 0)} / {formatNumber(skillData.xpForNext ?? 0)} {/if} - {#if isHovered && isMaxed} + {#if $isHovered && isMaxed} {format(skillData.xpCurrent, "0,0")} {:else if isMaxed} {formatNumber(skillData.xpCurrent ?? 0)} diff --git a/src/lib/hooks/is-hover.svelte.ts b/src/lib/hooks/is-hover.svelte.ts index 120ff5df3..52b51b1e8 100644 --- a/src/lib/hooks/is-hover.svelte.ts +++ b/src/lib/hooks/is-hover.svelte.ts @@ -1,9 +1,11 @@ -import { MediaQuery } from "svelte/reactivity"; +export class IsHover { + #current = $state(true); -const MEDIA_QUERY = "(hover: hover) and (pointer: fine)"; + constructor() { } -export class IsHover extends MediaQuery { - constructor() { - super(MEDIA_QUERY); + get current() { + return this.#current; } -} + + destroy() { } +} \ No newline at end of file diff --git a/src/lib/layouts/stats/Main.svelte b/src/lib/layouts/stats/Main.svelte index a85ff6851..55fcd9faa 100644 --- a/src/lib/layouts/stats/Main.svelte +++ b/src/lib/layouts/stats/Main.svelte @@ -1,27 +1,21 @@ - -
    - {#if isHover.current} diff --git a/src/lib/layouts/stats/PlayerProfile.svelte b/src/lib/layouts/stats/PlayerProfile.svelte index 196caa3ab..58460d6b0 100644 --- a/src/lib/layouts/stats/PlayerProfile.svelte +++ b/src/lib/layouts/stats/PlayerProfile.svelte @@ -1,21 +1,12 @@
    @@ -188,119 +162,6 @@ {/if}
    -
    - - { - if (profile == null) return; - if (!favorites.current.some((fav) => fav.uuid === profile.uuid)) { - favorites.current = [...favorites.current, { uuid: profile.uuid ?? "", ign: profile.username ?? "", displayName: profile.displayName ?? undefined }]; - toast.dismiss(toastId); - toastId = toast.success(`Added ${profile.username} to your favorites!`); - } else { - favorites.current = favorites.current.filter((fav) => fav.uuid !== profile.uuid); - toast.dismiss(toastId); - toastId = toast.success(`Removed ${profile.username} from your favorites!`); - } - }} - onpointerdown={() => (favoriteTooltipOpen = !favoriteTooltipOpen)}> - {#snippet child({ props })} - - {/snippet} - - - - {#snippet child({ wrapperProps, props, open })} - {#if open} -
    -
    - - {#if favorites.current.some((fav) => fav.uuid === profile?.uuid)} -

    Remove from favorites

    - {:else} -

    Add to favorites

    - {/if} -
    -
    - {/if} - {/snippet} -
    -
    -
    - - { - copyToClipboard(window.location.href); - }}> - - - - - - - Plancke - - - - Elite - - - (showMore = !showMore)}> - - - {#if showMore} - { - copyToClipboard(profile?.uuid ?? ""); - }}> - Copy UUID - - - { - copyToClipboard(profile?.profile_id ?? ""); - }}> - Copy Profile UUID - - - {#if profile?.social} - {#each Object.entries(profile.social) as [key, value], index (index)} - {#if key === "DISCORD"} - copyToClipboard(value)}> - - - - {profile.username?.slice(0, 2)} - - - {value} - - {:else} - - - - - {profile.username?.slice(0, 2)} - - - - {/if} - {/each} - {/if} - {/if} -
    {#snippet profileIcon(gameMode: string)} {#if gameMode === "bingo"} diff --git a/src/lib/sections/Sections.svelte b/src/lib/sections/Sections.svelte index 282dd6e01..607c6e66c 100644 --- a/src/lib/sections/Sections.svelte +++ b/src/lib/sections/Sections.svelte @@ -13,6 +13,7 @@ const shouldWaitForCombined = $derived(internalState.tabValue !== "Inventory"); const COMPONENTS = { + Overview: () => import("$lib/sections/stats/Overview.svelte"), Gear: () => import("$lib/sections/stats/Gear.svelte"), Accessories: () => import("$lib/sections/stats/Accessories.svelte"), Pets: () => import("$lib/sections/stats/Pets.svelte"), diff --git a/src/lib/sections/constants.ts b/src/lib/sections/constants.ts index db0b0b436..4087543de 100644 --- a/src/lib/sections/constants.ts +++ b/src/lib/sections/constants.ts @@ -1,6 +1,7 @@ import type { SectionID } from "$lib/sections/types"; export const sections: SectionID[] = [ + { id: -1, name: "Overview" }, { id: 0, name: "Gear" }, { id: 1, name: "Accessories" }, { id: 2, name: "Pets" }, diff --git a/src/lib/sections/stats/Minions.svelte b/src/lib/sections/stats/Minions.svelte index 1edd0400d..d8a693058 100644 --- a/src/lib/sections/stats/Minions.svelte +++ b/src/lib/sections/stats/Minions.svelte @@ -35,20 +35,6 @@
    {/snippet} - - - - MA - -
    -
    Looking for a place to trade minions?
    - - Check out - - -
    -
    - {#if minions.minions} {#each Object.entries(minions.minions) as [category, data], index (index)}
    diff --git a/src/lib/sections/stats/Overview.svelte b/src/lib/sections/stats/Overview.svelte new file mode 100644 index 000000000..b96fbcd6d --- /dev/null +++ b/src/lib/sections/stats/Overview.svelte @@ -0,0 +1,18 @@ + + +
    +
    + + + + +
    +
    \ No newline at end of file diff --git a/src/lib/sections/types.ts b/src/lib/sections/types.ts index a6bd43277..5b18aedf0 100644 --- a/src/lib/sections/types.ts +++ b/src/lib/sections/types.ts @@ -1,6 +1,6 @@ import type { Component } from "svelte"; -export type SectionName = "Gear" | "Accessories" | "Pets" | "Inventory" | "Skills" | "Dungeons" | "Slayer" | "Minions" | "Bestiary" | "Collections" | "Crimson_Isle" | "Rift" | "Misc"; +export type SectionName = "Overview" | "Gear" | "Accessories" | "Pets" | "Inventory" | "Skills" | "Dungeons" | "Slayer" | "Minions" | "Bestiary" | "Collections" | "Crimson_Isle" | "Attribute_Shards" | "Rift" | "Misc"; export type SectionComponents = Record | null>; export type SectionComponentsEager = Record; diff --git a/src/lib/server/db/index.ts b/src/lib/server/db/index.ts index 2c59b8638..93f060517 100644 --- a/src/lib/server/db/index.ts +++ b/src/lib/server/db/index.ts @@ -1,11 +1,27 @@ import { env } from "$env/dynamic/private"; -import { drizzle } from "drizzle-orm/postgres-js"; +import { drizzle, type PostgresJsDatabase } from "drizzle-orm/postgres-js"; import postgres from "postgres"; import * as schema from "./schema"; -if (!env.DATABASE_URL) throw new Error("DATABASE_URL is not set"); +// Lazily initialise the database connection. Importing this module must not +// throw when DATABASE_URL is unset: the SvelteKit build's `analyse` step imports +// every server module, and the Cloudflare embed deployment runs without a DB. +// The check + connection are deferred until `db` is actually queried. +let instance: PostgresJsDatabase | undefined; -const client = postgres(env.DATABASE_URL); +function getDb(): PostgresJsDatabase { + if (!instance) { + if (!env.DATABASE_URL) throw new Error("DATABASE_URL is not set"); + const client = postgres(env.DATABASE_URL); + instance = drizzle(client, { schema }); + } + return instance; +} -export const db = drizzle(client, { schema }); +export const db = new Proxy({} as PostgresJsDatabase, { + get(_target, prop, receiver) { + const value = Reflect.get(getDb(), prop, receiver); + return typeof value === "function" ? value.bind(getDb()) : value; + } +}); diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 79b5f9dc9..23d09d4da 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -2,21 +2,18 @@ import { browser, dev } from "$app/environment"; import { beforeNavigate, replaceState } from "$app/navigation"; import { page, updated } from "$app/state"; - import { initDisabledPacks, initFavorites, initInternalState, initNewsroomNotifications, initPreferences, initRecentSearches, initTheme, PacksContext, setHoverContext, setMobileContext, setPacksContext } from "$ctx"; - import Header from "$lib/components/header/Header.svelte"; + import { initDisabledPacks, initFavorites, initInternalState, initPreferences, initRecentSearches, initTheme, PacksContext, setHoverContext, setMobileContext, setPacksContext } from "$ctx"; import { CommandPalette, JsonLd, PerformanceMode } from "$lib/components/misc"; - import NewPostsNotifier from "$lib/components/newsroom/NewPostsNotifier.svelte"; import ThemeEditor from "$lib/components/theme-editor/ThemeEditor.svelte"; import { IsHover } from "$lib/hooks/is-hover.svelte"; import { IsMobile } from "$lib/hooks/is-mobile.svelte"; - import { listLatestPostsForNotifications } from "$lib/shared/api/cms-api.remote"; import { getPacks } from "$lib/shared/api/skycrypt-api.remote"; import { parseThemeFromURL } from "$lib/shared/themes/sharing"; import { cn } from "$lib/shared/utils"; import Wifi from "@lucide/svelte/icons/wifi"; import WifiOff from "@lucide/svelte/icons/wifi-off"; import { Tooltip } from "bits-ui"; - import { onMount, type Snippet } from "svelte"; + import { onDestroy, onMount, type Snippet } from "svelte"; import SvelteSeo from "svelte-seo"; import { toast, Toaster, type ToasterProps } from "svelte-sonner"; import { SvelteURLSearchParams } from "svelte/reactivity"; @@ -31,7 +28,6 @@ let toastId: string | number = $state(0); let commandLoading = $state(false); const { ign } = $derived(page.params); - const showNewsroomToast = $derived(page.url.pathname !== "/" && !page.url.pathname.startsWith("/newsroom")); const preferences = initPreferences(); const themeContext = initTheme(); const internalState = initInternalState(); @@ -89,7 +85,6 @@ initDisabledPacks(); initFavorites(); - initNewsroomNotifications(); initRecentSearches(); setMobileContext(isMobile); setHoverContext(isHover); @@ -101,6 +96,10 @@ } }); + onDestroy(() => { + isHover.destroy(); + }); + beforeNavigate(({ type }) => { if (type === "leave" || type === "link") return; @@ -228,16 +227,6 @@ {/if} -
    - -
    -{#if showNewsroomToast} - - {#snippet failed()}{/snippet} - {@const latestNewsroom = await listLatestPostsForNotifications({ limit: 5 })} - - -{/if} {@render children()} diff --git a/src/routes/stats/[ign]/[[profile]]/card/+server.ts b/src/routes/stats/[ign]/[[profile]]/card/+server.ts index 4a25e5b82..e2b58adee 100644 --- a/src/routes/stats/[ign]/[[profile]]/card/+server.ts +++ b/src/routes/stats/[ign]/[[profile]]/card/+server.ts @@ -8,7 +8,7 @@ import { getApiUuidUsername, type ModelsPlayerResolve } from "$src/lib/shared/ap import { getCombined, getNetworth, getProfileStats } from "$src/lib/shared/api/skycrypt-api.remote"; import { html as toReactNode } from "satori-html"; import { render } from "svelte/server"; -import { Renderer, type Font, type ImageSource } from "takumi-js/node"; +import type { Font, ImageSource } from "takumi-js"; import { ImageResponse } from "takumi-js/response"; import type { RequestHandler } from "./$types"; @@ -16,11 +16,6 @@ const { PUBLIC_ORIGIN: baseUrl } = env; const { fonts, persistentImages } = await initializeAssets(); -const renderer = new Renderer({ - fonts, - persistentImages -}); - export const GET: RequestHandler = async ({ params, request, url }) => { const { ign, profile } = params; @@ -73,7 +68,8 @@ export const GET: RequestHandler = async ({ params, request, url }) => { }, stylesheets: [appStyles], emoji: "twemoji", - renderer + fonts, + persistentImages }); const response = new Response(await imageResponse.arrayBuffer(), { @@ -98,7 +94,8 @@ export const GET: RequestHandler = async ({ params, request, url }) => { }, stylesheets: [appStyles], emoji: "twemoji", - renderer + fonts, + persistentImages }); return new Response(await errorResponse.arrayBuffer(), { diff --git a/vite.config.ts b/vite.config.ts index 4ba5a4061..c4d719741 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,5 +1,5 @@ import { sentrySvelteKit } from "@sentry/sveltekit"; -import adapter from "@sveltejs/adapter-node"; +import adapter from "@sveltejs/adapter-cloudflare"; import { sveltekit } from "@sveltejs/kit/vite"; import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"; import tailwindcss from "@tailwindcss/vite"; @@ -46,7 +46,8 @@ export default defineConfig({ "img-src": ["self", "data:", "https://textures.minecraft.net", "http://localhost:8080", "https://cupcake.shiiyu.moe", "https://sky.shiiyu.moe", "https://nmsr.nickac.dev", "https://cms.shiiyu.moe", "http://localhost:3000"], "connect-src": ["self", "https://mowojang.matdoes.dev", "https://mowojang.seraph.si", "http://localhost:8080", "https://cupcake.shiiyu.moe", "https://sky.shiiyu.moe", "https://cms.shiiyu.moe", "http://localhost:3000"], "font-src": ["self", "https://fonts.gstatic.com"], - "frame-ancestors": ["self", "https://cms.shiiyu.moe", "http://localhost:3000"], + // frame-ancestors intentionally omitted: this fork is embedded as an iframe + // (skycrypt-embed.lunarclient.com), so the site must be framable. "frame-src": ["self"] } }, diff --git a/wrangler.jsonc b/wrangler.jsonc new file mode 100644 index 000000000..ada73615d --- /dev/null +++ b/wrangler.jsonc @@ -0,0 +1,25 @@ +{ + "name": "skycrypt-embed-lunarclient-com", + "main": ".svelte-kit/cloudflare/_worker.js", + "compatibility_date": "2026-01-27", + "compatibility_flags": ["nodejs_compat"], + "workers_dev": true, + "preview_urls": true, + "assets": { + "binding": "ASSETS", + "directory": ".svelte-kit/cloudflare" + }, + "routes": [ + { + "pattern": "skycrypt-embed.lunarclient.com", + "custom_domain": true + } + ], + "observability": { + "enabled": true + }, + "vars": { + "PUBLIC_SERVER_API_URL": "https://sky.shiiyu.moe/api/", + "PUBLIC_API_URL": "https://sky.shiiyu.moe/api/" + } +} \ No newline at end of file