You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iggy.apache.org by pi...@apache.org on 2026/10/10 14:03:07 UTC
(iggy) branch master updated: chore(deps): Bump the web group across 1 directory with 8 updates (#4468)
This is an automated email from the ASF dual-hosted git repository.
spetz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iggy.git
The following commit(s) were added to refs/heads/master by this push:
new b4e357cc9 chore(deps): Bump the web group across 1 directory with 8 updates (#4468)
b4e357cc9 is described below
commit b4e357cc93586836bd38e6971833e585c0096f18
Author: dependabot[bot] <49...@users.noreply.github.com>
AuthorDate: Sat Oct 10 16:03:02 2026 +0200
chore(deps): Bump the web group across 1 directory with 8 updates (#4468)
---
web/README.md | 2 +-
web/eslint.config.js | 4 +-
web/package-lock.json | 1036 ++++----------------
web/package.json | 23 +-
web/src/ambient.d.ts | 2 +-
web/src/{hooks.client.ts => env.ts} | 7 +-
web/src/hooks.client.ts | 2 +-
web/src/lib/api/ApiSchema.ts | 4 +-
web/src/lib/api/clientApi.ts | 18 +-
web/src/lib/api/fetchApi.ts | 8 +-
web/src/lib/api/fetchRouteApi.ts | 6 +-
web/src/lib/api/handleFetchErrors.ts | 18 +-
web/src/lib/auth/authStore.svelte.ts | 8 +-
web/src/lib/components/Breadcrumbs.svelte | 12 +-
web/src/lib/components/Button.svelte | 2 +-
web/src/lib/components/Combobox.svelte | 2 +-
.../components/DeleteButtonWithConfirmation.svelte | 2 +-
.../components/DropdownMenu/DropdownMenu.svelte | 2 +-
web/src/lib/components/DurationInput.svelte | 2 +-
web/src/lib/components/Header.svelte | 6 +-
.../lib/components/Layouts/SettingsLayout.svelte | 12 +-
web/src/lib/components/LoadingIndicator.svelte | 4 +-
web/src/lib/components/Logo/Logo.svelte | 10 +-
.../MessageDecoder/MessageDecoder.svelte | 2 +-
.../decoders/BuiltInDecoders/jsonDecoder.ts | 2 +-
web/src/lib/components/ModalConfirmation.svelte | 2 +-
.../components/Modals/AddPartitionsModal.svelte | 6 +-
.../lib/components/Modals/AddStreamModal.svelte | 4 +-
web/src/lib/components/Modals/AddTopicModal.svelte | 8 +-
web/src/lib/components/Modals/AddUserModal.svelte | 6 +-
web/src/lib/components/Modals/AppModals.svelte | 4 +-
.../components/Modals/DeletePartitionsModal.svelte | 8 +-
.../lib/components/Modals/DeleteUserModal.svelte | 2 +-
web/src/lib/components/Modals/EditUserModal.svelte | 2 +-
.../Modals/EditUserPermissionsModal.svelte | 2 +-
.../lib/components/Modals/InspectMessage.svelte | 8 +-
web/src/lib/components/Modals/ModalBase.svelte | 2 +-
.../components/Modals/StreamSettingsModal.svelte | 14 +-
.../components/Modals/TopicSettingsModal.svelte | 12 +-
web/src/lib/components/Navbar.svelte | 23 +-
web/src/lib/components/Paginator.svelte | 4 +-
web/src/lib/components/PasswordInput.svelte | 2 +-
web/src/lib/components/PeriodicInvalidator.svelte | 6 +-
web/src/lib/components/PermissionsManager.svelte | 12 +-
.../RouteComponents/Settings/UsersTab.svelte | 16 +-
.../Settings/UsersTabActions.svelte | 4 +-
web/src/lib/components/SlimSortableList.svelte | 2 +-
web/src/lib/components/SortableList.svelte | 9 +-
web/src/lib/components/StopPropagation.svelte | 2 +-
web/src/lib/components/ThemeController.svelte | 4 +-
web/src/lib/domain/Message.ts | 2 +-
web/src/lib/domain/Partition.ts | 2 +-
web/src/lib/domain/Stats.ts | 2 +-
web/src/lib/domain/Topic.ts | 6 +-
web/src/lib/domain/User.ts | 2 +-
web/src/lib/hooks/useGoPrev.ts | 10 +-
web/src/lib/types/appRoutes.ts | 4 +-
web/{vite.config.ts => src/params.test.mjs} | 31 +-
web/src/{params/i32.ts => params.ts} | 8 +-
web/src/routes/+layout.svelte | 4 +-
web/src/routes/+layout.ts | 27 +-
web/src/routes/auth/+layout.svelte | 2 +-
web/src/routes/auth/logout/+page.svelte | 6 +-
web/src/routes/auth/sign-in/+page.svelte | 22 +-
web/src/routes/auth/sign-in/+page.ts | 8 +-
web/src/routes/dashboard/+layout.svelte | 8 +-
web/src/routes/dashboard/+layout.ts | 12 +-
web/src/routes/dashboard/overview/+page.ts | 4 +-
.../routes/dashboard/settings/server/+page.svelte | 8 +-
web/src/routes/dashboard/settings/server/+page.ts | 4 +-
.../dashboard/settings/terminal/+page.svelte | 2 +-
.../routes/dashboard/settings/users/+page.svelte | 18 +-
web/src/routes/dashboard/settings/users/+page.ts | 8 +-
.../routes/dashboard/settings/webUI/+page.svelte | 10 +-
web/src/routes/dashboard/streams/+layout.svelte | 17 +-
web/src/routes/dashboard/streams/+layout.ts | 4 +-
.../dashboard/streams/[streamId=i32]/+page.svelte | 14 +-
.../dashboard/streams/[streamId=i32]/+page.ts | 4 +-
.../streams/[streamId=i32]/topics/+page.svelte | 4 +-
.../topics/[topicId=i32]/+page.svelte | 18 +-
.../[streamId=i32]/topics/[topicId=i32]/+page.ts | 4 +-
.../partitions/[partitionId=i32]/+page.svelte | 4 +-
.../[partitionId=i32]/messages/+page.svelte | 25 +-
.../partitions/[partitionId=i32]/messages/+page.ts | 6 +-
web/svelte.config.js | 46 -
web/tsconfig.json | 15 +-
web/vite.config.ts | 31 +-
87 files changed, 547 insertions(+), 1215 deletions(-)
diff --git a/web/README.md b/web/README.md
index ef213b7d7..c3751d0f2 100644
--- a/web/README.md
+++ b/web/README.md
@@ -12,7 +12,7 @@ The [docker image](https://hub.docker.com/r/apache/iggy-web-ui) is available, an
## Tooling
-- Node.js: use a version supported by the current frontend toolchain, `^20.19.0 || ^22.13.0 || >=24`.
+- Node.js: use a version supported by the current frontend toolchain, `^22.17.0 || >=24`.
- Package manager: `npm`
- `pnpm` and `yarn` are not part of the supported workflow for this package. CI, Docker builds, and the committed lockfile use `npm`.
diff --git a/web/eslint.config.js b/web/eslint.config.js
index d2fb13dc0..e430f8c1f 100644
--- a/web/eslint.config.js
+++ b/web/eslint.config.js
@@ -23,7 +23,9 @@ import svelte from 'eslint-plugin-svelte';
import { defineConfig } from 'eslint/config';
import globals from 'globals';
import ts from 'typescript-eslint';
-import svelteConfig from './svelte.config.js';
+import { loadConfig } from '@sveltejs/load-config';
+
+const svelteConfig = (await loadConfig('./', { traverse: false }))?.config;
const gitignorePath = fileURLToPath(new URL('./.gitignore', import.meta.url));
diff --git a/web/package-lock.json b/web/package-lock.json
index 9681e5c5d..ebcc489e8 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -23,32 +23,33 @@
"devDependencies": {
"@eslint/compat": "^2.1.1",
"@eslint/js": "^10.0.1",
- "@sveltejs/adapter-node": "^5.5.7",
- "@sveltejs/adapter-static": "^3.0.10",
- "@sveltejs/kit": "^2.70.3",
+ "@sveltejs/adapter-node": "^6.0.0",
+ "@sveltejs/adapter-static": "^4.0.0",
+ "@sveltejs/kit": "^3.0.0",
+ "@sveltejs/load-config": "^0.2.2",
"@sveltejs/vite-plugin-svelte": "^7.3.1",
"@types/d3-interpolate": "^3.0.4",
"@types/json-bigint": "^1.0.4",
- "@types/node": "^26.6.2",
+ "@types/node": "^26.6.3",
"autoprefixer": "^10.6.1",
"esbuild": "^0.28.2",
"eslint": "^10.11.0",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-svelte": "^3.23.0",
- "globals": "^17.12.0",
+ "globals": "^17.13.0",
"jwt-decode": "^4.0.0",
"postcss": "^8.5.28",
"prettier": "^3.9.9",
"prettier-plugin-svelte": "^4.1.1",
"svelte": "^5.57.1",
"svelte-check": "^4.7.6",
- "sveltekit-superforms": "^2.30.2",
+ "sveltekit-superforms": "^3.0.0",
"tailwindcss": "^4.2.4",
"ts-toolbelt": "^9.6.0",
"tslib": "^2.8.1",
"typescript": "^6.0.3",
- "typescript-eslint": "^8.70.1",
- "vite": "^8.3.1",
+ "typescript-eslint": "^8.71.0",
+ "vite": "^8.3.2",
"zod": "^4.6.5"
}
},
@@ -65,20 +66,20 @@
}
},
"node_modules/@ark/schema": {
- "version": "0.56.2",
- "resolved": "https://registry.npmjs.org/@ark/schema/-/schema-0.56.2.tgz",
- "integrity": "sha512-Qx4D2JFbBWpntiHZaTv7bGG4H/M2rigiknezKg/WVyDSaLdE4YCcWAOoFB7pjjDqHbbV2OqRfntm1nnXvwMexg==",
+ "version": "0.56.7",
+ "resolved": "https://registry.npmjs.org/@ark/schema/-/schema-0.56.7.tgz",
+ "integrity": "sha512-jmoOJlYIc4k1uv8oYBDNOFnAsKk2a2D9t/D6npF2JUfW4ecPB0v6ce6lruKg7lkBxIBA8Z7UtxfmvephYbhUGQ==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
- "@ark/util": "0.56.2"
+ "@ark/util": "0.56.7"
}
},
"node_modules/@ark/util": {
- "version": "0.56.2",
- "resolved": "https://registry.npmjs.org/@ark/util/-/util-0.56.2.tgz",
- "integrity": "sha512-9kU2sUE38FZEGG7l3hamYMBieLYEJh2L1mrYD2eXpT+78EnQSV1bhjxJhnxGBMSTbtwpBSDNSK+K60WvaI/DTQ==",
+ "version": "0.56.7",
+ "resolved": "https://registry.npmjs.org/@ark/util/-/util-0.56.7.tgz",
+ "integrity": "sha512-z8pVnrPk/x9GC18yOp5wCe8rR2+Z6us4CTSg7dvxdsDLuA2xXYq+QETD1fO6f3fMuXe+PCjpvtCnhTW9RHLgEw==",
"dev": true,
"license": "MIT",
"optional": true
@@ -932,6 +933,14 @@
"license": "MIT",
"optional": true
},
+ "node_modules/@poppinss/types": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@poppinss/types/-/types-1.2.1.tgz",
+ "integrity": "sha512-qUYnzl0m9HJTWsXtr8Xo7CwDx6wcjrvo14bOVbIMIlKJCzKrm3LX55dRTDr1/x4PpSvKVgmxvC6Ly2YiqXKOvQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true
+ },
"node_modules/@rolldown/binding-android-arm-eabi": {
"version": "1.2.11",
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.11.tgz",
@@ -1212,474 +1221,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@rollup/plugin-commonjs": {
- "version": "29.0.2",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-29.0.2.tgz",
- "integrity": "sha512-S/ggWH1LU7jTyi9DxZOKyxpVd4hF/OZ0JrEbeLjXk/DFXwRny0tjD2c992zOUYQobLrVkRVMDdmHP16HKP7GRg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@rollup/pluginutils": "^5.0.1",
- "commondir": "^1.0.1",
- "estree-walker": "^2.0.2",
- "fdir": "^6.2.0",
- "is-reference": "1.2.1",
- "magic-string": "^0.30.3",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=16.0.0 || 14 >= 14.17"
- },
- "peerDependencies": {
- "rollup": "^2.68.0||^3.0.0||^4.0.0"
- },
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- }
- }
- },
- "node_modules/@rollup/plugin-json": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz",
- "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@rollup/pluginutils": "^5.1.0"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
- },
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- }
- }
- },
- "node_modules/@rollup/plugin-node-resolve": {
- "version": "16.0.3",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz",
- "integrity": "sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@rollup/pluginutils": "^5.0.1",
- "@types/resolve": "1.20.2",
- "deepmerge": "^4.2.2",
- "is-module": "^1.0.0",
- "resolve": "^1.22.1"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "rollup": "^2.78.0||^3.0.0||^4.0.0"
- },
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- }
- }
- },
- "node_modules/@rollup/plugin-replace": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-6.0.3.tgz",
- "integrity": "sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@rollup/pluginutils": "^5.0.1",
- "magic-string": "^0.30.3"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
- },
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- }
- }
- },
- "node_modules/@rollup/pluginutils": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz",
- "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "^1.0.0",
- "estree-walker": "^2.0.2",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
- },
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- }
- }
- },
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.0.tgz",
- "integrity": "sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.0.tgz",
- "integrity": "sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.0.tgz",
- "integrity": "sha512-qEF7CsKKzSRc20Ciu2Zw1wRrBz4g56F7r/vRwY430UPp/nt1x21Q/fpJ9N5l47WWvJlkNCPJz3QRVw008fi7yA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.0.tgz",
- "integrity": "sha512-WADYozJ4QCnXCH4wPB+3FuGmDPoFseVCUrANmA5LWwGmC6FL14BWC7pcq+FstOZv3baGX65tZ378uT6WG8ynTw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.0.tgz",
- "integrity": "sha512-6b8wGHJlDrGeSE3aH5mGNHBjA0TTkxdoNHik5EkvPHCt351XnigA4pS7Wsj/Eo9Y8RBU6f35cjN9SYmCFBtzxw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.0.tgz",
- "integrity": "sha512-h25Ga0t4jaylMB8M/JKAyrvvfxGRjnPQIR8lnCayyzEjEOx2EJIlIiMbhpWxDRKGKF8jbNH01NnN663dH638mA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.0.tgz",
- "integrity": "sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.0.tgz",
- "integrity": "sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.0.tgz",
- "integrity": "sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.0.tgz",
- "integrity": "sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loong64-gnu": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.0.tgz",
- "integrity": "sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loong64-musl": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.0.tgz",
- "integrity": "sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-ppc64-gnu": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.0.tgz",
- "integrity": "sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-ppc64-musl": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.0.tgz",
- "integrity": "sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.0.tgz",
- "integrity": "sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.0.tgz",
- "integrity": "sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.0.tgz",
- "integrity": "sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.0.tgz",
- "integrity": "sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.0.tgz",
- "integrity": "sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-openbsd-x64": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.0.tgz",
- "integrity": "sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ]
- },
- "node_modules/@rollup/rollup-openharmony-arm64": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.0.tgz",
- "integrity": "sha512-pESDkos/PDzYwtyzB5p/UoNU/8fJo68vcXM9ZW2V0kjYayj1KaaUfi1NmTUTUpMn4UhU4gTuK8gIaFO4UGuMbA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ]
- },
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.0.tgz",
- "integrity": "sha512-hj1wFStD7B1YBeYmvY+lWXZ7ey73YGPcViMShYikqKT1GtstIKQAtfUI6yrzPjAy/O7pO0VLXGmUVWXQMaYgTQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.0.tgz",
- "integrity": "sha512-SyaIPFoxmUPlNDq5EHkTbiKzmSEmq/gOYFI/3HHJ8iS/v1mbugVa7dXUzcJGQfoytp9DJFLhHH4U3/eTy2Bq4w==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-gnu": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.0.tgz",
- "integrity": "sha512-RdcryEfzZr+lAr5kRm2ucN9aVlCCa2QNq4hXelZxb8GG0NJSazq44Z3PCCc8wISRuCVnGs0lQJVX5Vp6fKA+IA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.0.tgz",
- "integrity": "sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
"node_modules/@sideway/address": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz",
@@ -1724,64 +1265,53 @@
}
},
"node_modules/@sveltejs/adapter-node": {
- "version": "5.5.7",
- "resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-5.5.7.tgz",
- "integrity": "sha512-uOfc9eVlI3A37RRSaKcgrheBYPrfJwC9VMqDp8x/O6tlKdcLLvHThSWD0KNIbjQ/d+7bwLGx3vx6aowAcRfd2g==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-6.0.0.tgz",
+ "integrity": "sha512-s7muM4JmJ75OZ8o0G4VRhrEKdi8twuEm3t2o/qQsdlm12hKaX7S/CuUBuw3n983wB/IFBSpzG2ugX0xdGzbKwg==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "@rollup/plugin-commonjs": "^29.0.0",
- "@rollup/plugin-json": "^6.1.0",
- "@rollup/plugin-node-resolve": "^16.0.0",
- "@rollup/plugin-replace": "^6.0.3",
- "rollup": "^4.59.0"
- },
"peerDependencies": {
- "@sveltejs/kit": "^2.4.0"
+ "@sveltejs/kit": "^3.0.0-next.0"
}
},
"node_modules/@sveltejs/adapter-static": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.10.tgz",
- "integrity": "sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-4.0.0.tgz",
+ "integrity": "sha512-aF1J23R1ebKqUxQ4/qLr/Lxu63NFmLAtg8UZl3HFLxaoA1D/nhTVGcD9lTqx65iUbjNR2iOL0TgOxSX82x6Paw==",
"dev": true,
"license": "MIT",
"peerDependencies": {
- "@sveltejs/kit": "^2.0.0"
+ "@sveltejs/kit": "^3.0.0-next.0"
}
},
"node_modules/@sveltejs/kit": {
- "version": "2.70.3",
- "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.70.3.tgz",
- "integrity": "sha512-UDvEYuZqAMbfB/oXIoqKvbKcb7YczK5zYrzmsGV1zRJk03jntwp8dXiYoIJotxAndsKvcPFtx9H1GRSKFdSHgg==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-3.0.0.tgz",
+ "integrity": "sha512-dmP6gjz41DAT7erONGW8FdTWjmsmOJ/SaWVEsuEc1MXDcpH6YV+Pt98biZFPuinH4LldJPmScxDqiHwCDLRCrg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@standard-schema/spec": "^1.0.0",
- "@sveltejs/acorn-typescript": "^1.0.9",
- "@types/cookie": "^0.6.0",
- "acorn": "^8.16.0",
- "cookie": "^0.6.0",
- "devalue": "^5.8.1",
+ "@rolldown/pluginutils": "^1.0.1",
+ "@standard-schema/spec": "^1.1.0",
+ "cookie": "^2.0.1",
+ "devalue": "^5.9.4",
"esm-env": "^1.2.2",
- "kleur": "^4.1.5",
- "magic-string": "^0.30.5",
- "mrmime": "^2.0.0",
- "set-cookie-parser": "^3.0.0",
- "sirv": "^3.0.0"
+ "magic-string": "^1.2.3",
+ "mrmime": "^2.0.1",
+ "sirv": "^3.0.2"
},
"bin": {
"svelte-kit": "svelte-kit.js"
},
"engines": {
- "node": ">=18.13"
+ "node": ">=22.17"
},
"peerDependencies": {
"@opentelemetry/api": "^1.0.0",
- "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0",
- "svelte": "^4.0.0 || ^5.0.0-next.0",
- "typescript": "^5.3.3 || ^6.0.0",
- "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0"
+ "@sveltejs/vite-plugin-svelte": "^7.0.0",
+ "svelte": "^5.57.1",
+ "typescript": "^6.0.0",
+ "vite": "^8.0.12"
},
"peerDependenciesMeta": {
"@opentelemetry/api": {
@@ -1792,6 +1322,16 @@
}
}
},
+ "node_modules/@sveltejs/kit/node_modules/magic-string": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.4.2.tgz",
+ "integrity": "sha512-vG+rjFRj1PqdIBozIxAGMjPlOhaVe+GXpbttY/iSK7rGcJRMlwNJO7dcUwmUqkymsFLJiNGI06t4D7Fr7yRC9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.6.0"
+ }
+ },
"node_modules/@sveltejs/load-config": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@sveltejs/load-config/-/load-config-0.2.3.tgz",
@@ -2160,13 +1700,6 @@
"tailwindcss": "4.3.3"
}
},
- "node_modules/@types/cookie": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
- "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@types/d3-color": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
@@ -2213,22 +1746,15 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.2.tgz",
- "integrity": "sha512-X1P21scMv4zGKLYqjdGjaKa7COa0RKVYYZZN/NfvLQ1JegxFhdhpZG/Lyn8AXx6CDUavKAd11v6BvfpkDByK8g==",
+ "version": "26.6.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.3.tgz",
+ "integrity": "sha512-dsqMQQoeTLqu9wynDD00q573mNzso3IdQOAfHRJqLCcmCFPoGo9A1bDpUcv/9tnKpErQWv9uKeGfl37EIS02Yg==",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~8.9.0"
}
},
- "node_modules/@types/resolve": {
- "version": "1.20.2",
- "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
- "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@types/validator": {
"version": "13.15.10",
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.10.tgz",
@@ -2273,17 +1799,17 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.70.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.70.1.tgz",
- "integrity": "sha512-nDNrUQ/4ruSNYbu749TRY7cfrzPtoLHEXSNBI8aaNY32LlZCajixqRf3FqcKC4p5Cam4VOHYx/t+i5+nKXvrqA==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.71.0.tgz",
+ "integrity": "sha512-pqcS9c1HxZTHt7End4nXqd0s5lJrrFzrgCkKFJrsbUnaL6M3+6oBFZaslg6Gjsl3argl2DDRFROnXARaZ2e4Nw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.12.2",
- "@typescript-eslint/scope-manager": "8.70.1",
- "@typescript-eslint/type-utils": "8.70.1",
- "@typescript-eslint/utils": "8.70.1",
- "@typescript-eslint/visitor-keys": "8.70.1",
+ "@typescript-eslint/scope-manager": "8.71.0",
+ "@typescript-eslint/type-utils": "8.71.0",
+ "@typescript-eslint/utils": "8.71.0",
+ "@typescript-eslint/visitor-keys": "8.71.0",
"ignore": "^7.0.5",
"natural-compare": "^1.4.0",
"ts-api-utils": "^2.5.0"
@@ -2296,15 +1822,15 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.70.1",
+ "@typescript-eslint/parser": "^8.71.0",
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
"typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
- "version": "7.0.10",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.10.tgz",
- "integrity": "sha512-HpbUakT7xp5miBUywCHf36ZEuAJNklBJDDsGpUIjMzOSmM8ELSfA9Sa/QDPeNeqeoN31u+UTCkL4klCOVvRm4Q==",
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.11.tgz",
+ "integrity": "sha512-YChdK5txDjwGUvgR7oCJcLGkwi3LDh8Zx8tS7ndYciLEg/oOCL26VUBSUEtgS7EjiybcBqFxh5j0rAdDX7/bbg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2312,16 +1838,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.70.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.70.1.tgz",
- "integrity": "sha512-nO974WLllwhSFWQXnMLj6nDGa8f0khKEz1JzpPJ1u7Vm/4X1X6ZHajpoknU4bb41vJyMB0HHVyS2GqdhWfIXZw==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.71.0.tgz",
+ "integrity": "sha512-CG4nPk1f2zc8yw4pALqHsFYH2hdo+h1T9daSp21+Hnxi9LOE3GT9hAfTKJCBXVNM2GmYs1eMEP615wPoeOgk3A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.70.1",
- "@typescript-eslint/types": "8.70.1",
- "@typescript-eslint/typescript-estree": "8.70.1",
- "@typescript-eslint/visitor-keys": "8.70.1",
+ "@typescript-eslint/scope-manager": "8.71.0",
+ "@typescript-eslint/types": "8.71.0",
+ "@typescript-eslint/typescript-estree": "8.71.0",
+ "@typescript-eslint/visitor-keys": "8.71.0",
"debug": "^4.4.3"
},
"engines": {
@@ -2337,14 +1863,14 @@
}
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.70.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.70.1.tgz",
- "integrity": "sha512-62xOgboPfwc3/IgPSX/W6oQR3ZbF04194FPGUGH8HL8iLFHbt/456/8Ph1wLNUgVF+s94FlHoipBsz+v7+LMnA==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.71.0.tgz",
+ "integrity": "sha512-aABjw5rjBacYONVPaPiWOCjJu0vEF4a25iQuodlmQYL1trtLZ0X/y+2Vzl3BKI1odM4LnwLE1oUDXYp1wzx1TQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.70.1",
- "@typescript-eslint/types": "^8.70.1",
+ "@typescript-eslint/tsconfig-utils": "^8.71.0",
+ "@typescript-eslint/types": "^8.71.0",
"debug": "^4.4.3"
},
"engines": {
@@ -2359,14 +1885,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.70.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.70.1.tgz",
- "integrity": "sha512-Pa0EeSeAusQc1WbjQMac+YfenewYTBu0KjgYvkUKwhXaHUKbFog23Dm/rp0DX/6tyYOQ3Xl1a+3EcFNZynGHCw==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.71.0.tgz",
+ "integrity": "sha512-gWF0BhUcnjZxSpLE8ngS/59n2SB0J3YqRxvX1+2aoRJk9hNtHSLOV+TcarFiOr5ipXm3yc1QrI4c9YZc8zyCxw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.70.1",
- "@typescript-eslint/visitor-keys": "8.70.1"
+ "@typescript-eslint/types": "8.71.0",
+ "@typescript-eslint/visitor-keys": "8.71.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2377,9 +1903,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.70.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.70.1.tgz",
- "integrity": "sha512-jumze1fPI+sDOaM2TWGQdn39PDxTr7TZGeuyLkAbNyx2vtMT3uRnVKChN0hfht5V2TugphJzF6bYXvBcE09qqg==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.71.0.tgz",
+ "integrity": "sha512-Z1UlWHADEK2Mlb9NpWfDeSjqoZ5EyrOv4R3eQpbkzqn/EwaIdOpXXupEA1+0ZIOSJSZZDBHG0BrQyN8zUG6Pwg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2394,15 +1920,15 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.70.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.70.1.tgz",
- "integrity": "sha512-7zKTnyvaVWqzLZHPFQtX1hVHqgkMC+WebPWakNCSyrQVbIP1AM0L0TlBZtACldIRb6PptI8Odk+jyZ5kP3B1VA==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.71.0.tgz",
+ "integrity": "sha512-i8uO1qbdxeKgRnS5sCRt6On3/nfo2d2DwQe3Yvjx543zLy7r8ySqRuPPiIIXAhS03U0v5NfAFx+rUgxFzKKwNw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.70.1",
- "@typescript-eslint/typescript-estree": "8.70.1",
- "@typescript-eslint/utils": "8.70.1",
+ "@typescript-eslint/types": "8.71.0",
+ "@typescript-eslint/typescript-estree": "8.71.0",
+ "@typescript-eslint/utils": "8.71.0",
"debug": "^4.4.3",
"ts-api-utils": "^2.5.0"
},
@@ -2419,9 +1945,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.70.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.70.1.tgz",
- "integrity": "sha512-Dm1ypdhhrGCTyyehxElhgJ6kgk8MVCv5qXdoOVqPr1uqk42jX8KjrZqhROvdShczA8qrDoYiOWn1ykWlx2k81Q==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.71.0.tgz",
+ "integrity": "sha512-cJ4OoxPGWvFnBTnSZyaU+qJzGTqPTGJY+gDchj6cRyLRdmIdt4rcsE4twj+zPfrNiWuVi38wijHzShL++Z9atQ==",
"devOptional": true,
"license": "MIT",
"engines": {
@@ -2433,16 +1959,16 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.70.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.70.1.tgz",
- "integrity": "sha512-TU8PwyGN0PQJUcE96mw8eCQ44SmxGdQlJmlWakHaHQ15eIuuvye5yNtmh/i6oS88jzXVQB71xdNkbkB/fMwL0g==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.71.0.tgz",
+ "integrity": "sha512-PEEF4G5sLLWAS5BpPrUvms4ySZkiBQQZM4z+3ReI46axK5Vqr/vXBQatJQIZZOYdGyPUAKTtsrWzpqKuU+3DEw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/project-service": "8.70.1",
- "@typescript-eslint/tsconfig-utils": "8.70.1",
- "@typescript-eslint/types": "8.70.1",
- "@typescript-eslint/visitor-keys": "8.70.1",
+ "@typescript-eslint/project-service": "8.71.0",
+ "@typescript-eslint/tsconfig-utils": "8.71.0",
+ "@typescript-eslint/types": "8.71.0",
+ "@typescript-eslint/visitor-keys": "8.71.0",
"debug": "^4.4.3",
"minimatch": "^10.2.2",
"semver": "^7.7.3",
@@ -2461,16 +1987,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.70.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.70.1.tgz",
- "integrity": "sha512-Esgul8MsnKnRLdYU2Eb2cRV9bS5HJYtKj1ByJnOzzG2M58DGdSUQ1jUuILxipqcpB2h9WLrbD5GijIWUjX/Tqw==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.71.0.tgz",
+ "integrity": "sha512-pKR/tEMVrXZG23UFKUn5BQf3zfmfk7KQceI2cGzywZ5nxM5Eu3hEJU1utjWzydtzBbcJAQhHN8iPCxobHpPcZQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.9.1",
- "@typescript-eslint/scope-manager": "8.70.1",
- "@typescript-eslint/types": "8.70.1",
- "@typescript-eslint/typescript-estree": "8.70.1"
+ "@typescript-eslint/scope-manager": "8.71.0",
+ "@typescript-eslint/types": "8.71.0",
+ "@typescript-eslint/typescript-estree": "8.71.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2485,13 +2011,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.70.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.70.1.tgz",
- "integrity": "sha512-Vwj9lUIW5Xq3wQ9w6gv3R86g1hMK8f2zNOdGTAgeXUMMXFK78G9ruCjjqutHMNJc0+CH7LYRnHeUB9IT8wFmcw==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.71.0.tgz",
+ "integrity": "sha512-8eQ9R218XORK+KLosnf4bu/QsUXvUyVwTbArg7/0NMB1Pu87OJKvj4nhFblkYE8gQV73mW1dx1ptlPCkwRGa7A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.70.1",
+ "@typescript-eslint/types": "8.71.0",
"eslint-visitor-keys": "^5.0.0"
},
"engines": {
@@ -2503,20 +2029,20 @@
}
},
"node_modules/@valibot/to-json-schema": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/@valibot/to-json-schema/-/to-json-schema-1.7.1.tgz",
- "integrity": "sha512-3qkmU6KXWh8GIThEAW3kuRHPQBMjWkKy+Ppz3WkUucx53DTpOa6siMn4xDGSOhlVyMrDaJTCTMLYPZVAIk1P0A==",
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@valibot/to-json-schema/-/to-json-schema-1.8.0.tgz",
+ "integrity": "sha512-a0M+uwCuQZEPAo65NYkFSJ14O5c213KoSZmPdoCfuFvUhfULi4T2Z6Tpjv6lTVMW9RoLm74RpRAjNEa43KcN+g==",
"dev": true,
"license": "MIT",
"optional": true,
"peerDependencies": {
- "valibot": "^1.4.0"
+ "valibot": "^1.5.0"
}
},
"node_modules/@vinejs/compiler": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@vinejs/compiler/-/compiler-3.0.0.tgz",
- "integrity": "sha512-v9Lsv59nR56+bmy2p0+czjZxsLHwaibJ+SV5iK9JJfehlJMa501jUJQqqz4X/OqKXrxtE3uTQmSqjUqzF3B2mw==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@vinejs/compiler/-/compiler-4.1.3.tgz",
+ "integrity": "sha512-UyH7Zn8dkTMLeU+PF2WjCnWkFb2qYaOxAcvp/uXW0njtKNcJOnVJaPsnWYwqewkTcHN47yvOdzosj3kj3RAP5w==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -2525,21 +2051,23 @@
}
},
"node_modules/@vinejs/vine": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@vinejs/vine/-/vine-3.0.1.tgz",
- "integrity": "sha512-ZtvYkYpZOYdvbws3uaOAvTFuvFXoQGAtmzeiXu+XSMGxi5GVsODpoI9Xu9TplEMuD/5fmAtBbKb9cQHkWkLXDQ==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@vinejs/vine/-/vine-4.4.0.tgz",
+ "integrity": "sha512-cfnNXjs9+f+22d3Eb8koyg2qlCbaT394XBlL4AeEr1WM+NH1omFcXwe1zrkW4hHwPDSfUd4lFUdNO6E+YnTeWQ==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
- "@poppinss/macroable": "^1.0.4",
- "@types/validator": "^13.12.2",
- "@vinejs/compiler": "^3.0.0",
- "camelcase": "^8.0.0",
- "dayjs": "^1.11.13",
+ "@poppinss/macroable": "^1.1.0",
+ "@poppinss/types": "^1.2.1",
+ "@standard-schema/spec": "^1.1.0",
+ "@types/validator": "^13.15.10",
+ "@vinejs/compiler": "^4.1.3",
+ "camelcase": "^9.0.0",
+ "dayjs": "^1.11.19",
"dlv": "^1.1.3",
- "normalize-url": "^8.0.1",
- "validator": "^13.12.0"
+ "normalize-url": "^8.1.1",
+ "validator": "^13.15.26"
},
"engines": {
"node": ">=18.16.0"
@@ -2594,27 +2122,27 @@
}
},
"node_modules/arkregex": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/arkregex/-/arkregex-0.0.8.tgz",
- "integrity": "sha512-PJcx6G1kQTgLKPUbeYlYecDRaKq15AMSGVajlKFYWlPeJRQL+j3dKE6tyMs40HZ99djS1l9Vhl3ezAHy9JBIqQ==",
+ "version": "0.0.13",
+ "resolved": "https://registry.npmjs.org/arkregex/-/arkregex-0.0.13.tgz",
+ "integrity": "sha512-c17sqCqiiZauxyoU1KZ2zbzCgeghGmc8dR2CrdQnlEtpq3bLhRLoLrxTL52M/8yQD8e/i1/IBRpRCNAuqJa7xQ==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
- "@ark/util": "0.56.2"
+ "@ark/util": "0.56.7"
}
},
"node_modules/arktype": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/arktype/-/arktype-2.2.3.tgz",
- "integrity": "sha512-7W+0RLTUNJiBFIIZXwOQxSR8Z273IAd6IvqBeG9+gHnQKFsIx2C0iOtGTmMrPnlX4qLXyc5+ll7A0BIj9WrbTg==",
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/arktype/-/arktype-2.2.8.tgz",
+ "integrity": "sha512-tZyLza7kO2vN8BXBKcj4t43IVMe8/ZyqlITH0chZv7FfEw+edLovpY922tqcK4mCjTpf4oNo2xV6np7tquP1ww==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
- "@ark/schema": "0.56.2",
- "@ark/util": "0.56.2",
- "arkregex": "0.0.8"
+ "@ark/schema": "0.56.7",
+ "@ark/util": "0.56.7",
+ "arkregex": "0.0.13"
}
},
"node_modules/autoprefixer": {
@@ -2757,14 +2285,14 @@
}
},
"node_modules/camelcase": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz",
- "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==",
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-9.0.0.tgz",
+ "integrity": "sha512-TO9xmyXTZ9HUHI8M1OnvExxYB0eYVS/1e5s7IDMTAoIcwUd+aNcFODs6Xk83mobk0velyHFQgA1yIrvYc6wclw==",
"dev": true,
"license": "MIT",
"optional": true,
"engines": {
- "node": ">=16"
+ "node": ">=20"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -2829,21 +2357,18 @@
"node": ">=6"
}
},
- "node_modules/commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/cookie": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
- "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-2.0.1.tgz",
+ "integrity": "sha512-yuToqVvRrj6pfDXREyQAAv8SkAEk/8GS3jQRTiUMm66TVtBYmqQeoEjL2Lmq8Rpo6271vH76InTChTitEAm65w==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">= 0.6"
+ "node": ">=22"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
"node_modules/cross-spawn": {
@@ -2906,9 +2431,9 @@
}
},
"node_modules/dayjs": {
- "version": "1.11.20",
- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz",
- "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==",
+ "version": "1.11.23",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.23.tgz",
+ "integrity": "sha512-QDTCU0M0MxR3hQfnlDJfwekQiaanm1ubOD231u73WBckQ/fsamwRLiE2GBz6D3a/xF1NgfiDLJjXBa1hYOYTtQ==",
"dev": true,
"license": "MIT",
"optional": true
@@ -3299,13 +2824,6 @@
"node": ">=4.0"
}
},
- "node_modules/estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -3454,16 +2972,6 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/glob-parent": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
@@ -3478,9 +2986,9 @@
}
},
"node_modules/globals": {
- "version": "17.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-17.12.0.tgz",
- "integrity": "sha512-cezEd/DTyyht9cvSSURyygXPfy04GtWO/5e6ZPvH7fCtjKz9PYOmuawphw1Ctd1f6C+5JypXfGD7ahNMXvevBA==",
+ "version": "17.13.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-17.13.0.tgz",
+ "integrity": "sha512-RwMTC61u7hrG3ZJMkZQOK4JLJrKS8QtoTii63EmWvFXHqycY9FObBJQCbsLxSO8kjKhWE5kV1GC+Vb1g3RI0Zg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3509,19 +3017,6 @@
"node": ">=20"
}
},
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
"node_modules/hookified": {
"version": "1.15.1",
"resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz",
@@ -3549,22 +3044,6 @@
"node": ">=0.8.19"
}
},
- "node_modules/is-core-module": {
- "version": "2.16.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
- "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -3588,23 +3067,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
- "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/is-reference": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
- "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "*"
- }
- },
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -3694,16 +3156,6 @@
"@keyv/serialize": "^1.1.1"
}
},
- "node_modules/kleur": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
- "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/known-css-properties": {
"version": "0.37.0",
"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz",
@@ -4212,13 +3664,6 @@
"node": ">=8"
}
},
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -4491,27 +3936,6 @@
"url": "https://paulmillr.com/funding/"
}
},
- "node_modules/resolve": {
- "version": "1.22.11",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
- "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-core-module": "^2.16.1",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/rolldown": {
"version": "1.2.11",
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.11.tgz",
@@ -4546,51 +3970,6 @@
"@rolldown/binding-win32-x64-msvc": "1.2.11"
}
},
- "node_modules/rollup": {
- "version": "4.60.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.0.tgz",
- "integrity": "sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "1.0.8"
- },
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.60.0",
- "@rollup/rollup-android-arm64": "4.60.0",
- "@rollup/rollup-darwin-arm64": "4.60.0",
- "@rollup/rollup-darwin-x64": "4.60.0",
- "@rollup/rollup-freebsd-arm64": "4.60.0",
- "@rollup/rollup-freebsd-x64": "4.60.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.60.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.60.0",
- "@rollup/rollup-linux-arm64-gnu": "4.60.0",
- "@rollup/rollup-linux-arm64-musl": "4.60.0",
- "@rollup/rollup-linux-loong64-gnu": "4.60.0",
- "@rollup/rollup-linux-loong64-musl": "4.60.0",
- "@rollup/rollup-linux-ppc64-gnu": "4.60.0",
- "@rollup/rollup-linux-ppc64-musl": "4.60.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.60.0",
- "@rollup/rollup-linux-riscv64-musl": "4.60.0",
- "@rollup/rollup-linux-s390x-gnu": "4.60.0",
- "@rollup/rollup-linux-x64-gnu": "4.60.0",
- "@rollup/rollup-linux-x64-musl": "4.60.0",
- "@rollup/rollup-openbsd-x64": "4.60.0",
- "@rollup/rollup-openharmony-arm64": "4.60.0",
- "@rollup/rollup-win32-arm64-msvc": "4.60.0",
- "@rollup/rollup-win32-ia32-msvc": "4.60.0",
- "@rollup/rollup-win32-x64-gnu": "4.60.0",
- "@rollup/rollup-win32-x64-msvc": "4.60.0",
- "fsevents": "~2.3.2"
- }
- },
"node_modules/sade": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
@@ -4617,13 +3996,6 @@
"node": ">=10"
}
},
- "node_modules/set-cookie-parser": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.1.0.tgz",
- "integrity": "sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -4682,19 +4054,6 @@
"node": ">=14.0.0"
}
},
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/svelte": {
"version": "5.57.1",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.57.1.tgz",
@@ -4868,9 +4227,9 @@
}
},
"node_modules/sveltekit-superforms": {
- "version": "2.30.2",
- "resolved": "https://registry.npmjs.org/sveltekit-superforms/-/sveltekit-superforms-2.30.2.tgz",
- "integrity": "sha512-6sR70ZfjFMAfdNure/Bu26o1rY32+WGxebko1L8jUFS+qZw5fxIHBPkUaTpNBkOIlJZ/UJwoNCYCm5xK2Z7Kqw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/sveltekit-superforms/-/sveltekit-superforms-3.0.0.tgz",
+ "integrity": "sha512-fnMV7pb96yYDD8jgoOZshob3c2jgcgtsNhYAYv9atBbkYQJRINOqptRGTK/iYdLaCnzvUqJDPSYHUVAtbmeXbA==",
"dev": true,
"funding": [
{
@@ -4888,7 +4247,8 @@
],
"license": "MIT",
"dependencies": {
- "devalue": "^5.8.1",
+ "devalue": "^5.9.4",
+ "esm-env": "^1.2.2",
"memoize-weak": "^1.0.2",
"ts-deepmerge": "^8.0.0"
},
@@ -4896,31 +4256,31 @@
"@exodus/schemasafe": "^1.3.0",
"@standard-schema/spec": "^1.1.0",
"@typeschema/class-validator": "^0.3.0",
- "@valibot/to-json-schema": "^1.7.1",
- "@vinejs/vine": "^3.0.1",
- "arktype": "^2.2.2",
+ "@valibot/to-json-schema": "^1.8.0",
+ "@vinejs/vine": "^4.0.0",
+ "arktype": "^2.2.7",
"class-validator": "^0.14.4",
- "effect": "^3.21.4",
- "joi": "^17.13.4",
+ "effect": "^3.22.2",
+ "joi": "^17.13.8",
"json-schema-to-ts": "^3.1.1",
"superstruct": "^2.0.2",
- "typebox": "^1.3.3",
- "valibot": "^1.4.2",
+ "typebox": "^1.3.34",
+ "valibot": "^1.5.0",
"yup": "^1.7.1",
- "zod": "^4.4.3",
+ "zod": "^4.6.5",
"zod-v3-to-json-schema": "^4.0.0"
},
"peerDependencies": {
"@exodus/schemasafe": "^1.3.0",
- "@sveltejs/kit": "1.x || 2.x",
+ "@sveltejs/kit": "^2.12.0 || ^3.0.0",
"@typeschema/class-validator": "^0.3.0",
- "@vinejs/vine": "^1.8.0 || ^2.0.0 || ^3.0.0",
- "arktype": ">=2.0.0-rc.23",
+ "@vinejs/vine": "^1.8.0 || ^2.0.0 || ^3.0.0 || ^4.0.0",
+ "arktype": "^2.0.0",
"class-validator": "^0.14.1",
"effect": "^3.21.0",
"joi": "^17.13.1",
"superstruct": "^2.0.2",
- "svelte": "3.x || 4.x || >=5.0.0-next.51",
+ "svelte": "^5.56.4",
"typebox": "^1.0.36",
"valibot": "^1.2.0",
"yup": "^1.4.0",
@@ -5110,9 +4470,9 @@
}
},
"node_modules/typebox": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/typebox/-/typebox-1.3.6.tgz",
- "integrity": "sha512-Sc8RA0NCMEFmApHNU9ZMzqcpQj46She44J8ffpLM/bdhLNUZKq7DJumcLcsFx1gRmDfQPgCgOmFFJ7rcnfWNyA==",
+ "version": "1.3.36",
+ "resolved": "https://registry.npmjs.org/typebox/-/typebox-1.3.36.tgz",
+ "integrity": "sha512-bu2Ec2Ti9B4IFSFj1FcZbtLNB/W7igQwxocMGJLAG2NTv1nI+ImtIA34YgHW4CVyGVlJqNXR1GJyLmdWgV3DuA==",
"dev": true,
"license": "MIT",
"optional": true
@@ -5132,16 +4492,16 @@
}
},
"node_modules/typescript-eslint": {
- "version": "8.70.1",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.70.1.tgz",
- "integrity": "sha512-AcWG7KDjZ2THNXsgwttMaGmzVi0VFRlFYfqFHYQRbDpF3owuYbuiL8c7UUrd2k8s3PoSfIQrWfrGXfcElrWLYA==",
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.71.0.tgz",
+ "integrity": "sha512-fBdHYiqQ14RW6mOMXD14Svn82ZsCYAoQSzGRzyEjR59S5A2Krh/l7fGTOQ7iCr8gGy/mHVXtEF7s5fgjEdV0Pw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/eslint-plugin": "8.70.1",
- "@typescript-eslint/parser": "8.70.1",
- "@typescript-eslint/typescript-estree": "8.70.1",
- "@typescript-eslint/utils": "8.70.1"
+ "@typescript-eslint/eslint-plugin": "8.71.0",
+ "@typescript-eslint/parser": "8.71.0",
+ "@typescript-eslint/typescript-estree": "8.71.0",
+ "@typescript-eslint/utils": "8.71.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5224,9 +4584,9 @@
}
},
"node_modules/valibot": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.4.2.tgz",
- "integrity": "sha512-gjdCvJ6d3RyHAneqxMYMW9QMCwYMb3jpOO0IyHZV1bnRHFBHrX3VkIILt5XYR0WhwHiH7Mty8ovuPZ/O3gamrg==",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.5.0.tgz",
+ "integrity": "sha512-nil6AkP2TChWL43Z5uJ6GTxX01CUA+g8LWUM+N/rB9NBbkUMaUsi9PUNzlUPgoKASgmx9f7eGOYpJ04/fSa6FQ==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -5251,16 +4611,16 @@
}
},
"node_modules/vite": {
- "version": "8.3.1",
- "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.1.tgz",
- "integrity": "sha512-/bvH9E9tmCXRGp2uXY3WbOldqpTwFkbha/8ANaEQ6VkxhH60KyqLwgZq6lG2y+4uT55x9+9eUHMpQ7uGnOCKjA==",
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.2.tgz",
+ "integrity": "sha512-SQr1x6W5vVSbROg7vsyXIaxK9b0G7zsT68acdWWRmnBUsgDieLCRG+Rep9WdZgcposvv/GSnr4GUUBqB3vXq6w==",
"dev": true,
"license": "MIT",
"dependencies": {
"lightningcss": "^1.33.0",
"picomatch": "^4.0.7",
"postcss": "^8.5.28",
- "rolldown": "~1.2.9",
+ "rolldown": "~1.2.11",
"tinyglobby": "^0.2.17"
},
"bin": {
diff --git a/web/package.json b/web/package.json
index f0efb2de8..f4920f8b7 100644
--- a/web/package.json
+++ b/web/package.json
@@ -17,32 +17,33 @@
"devDependencies": {
"@eslint/compat": "^2.1.1",
"@eslint/js": "^10.0.1",
- "@sveltejs/adapter-node": "^5.5.7",
- "@sveltejs/adapter-static": "^3.0.10",
- "@sveltejs/kit": "^2.70.3",
+ "@sveltejs/adapter-node": "^6.0.0",
+ "@sveltejs/adapter-static": "^4.0.0",
+ "@sveltejs/kit": "^3.0.0",
+ "@sveltejs/load-config": "^0.2.2",
"@sveltejs/vite-plugin-svelte": "^7.3.1",
"@types/d3-interpolate": "^3.0.4",
"@types/json-bigint": "^1.0.4",
- "@types/node": "^26.6.2",
+ "@types/node": "^26.6.3",
"autoprefixer": "^10.6.1",
"esbuild": "^0.28.2",
"eslint": "^10.11.0",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-svelte": "^3.23.0",
- "globals": "^17.12.0",
+ "globals": "^17.13.0",
"jwt-decode": "^4.0.0",
"postcss": "^8.5.28",
"prettier": "^3.9.9",
"prettier-plugin-svelte": "^4.1.1",
"svelte": "^5.57.1",
"svelte-check": "^4.7.6",
- "sveltekit-superforms": "^2.30.2",
+ "sveltekit-superforms": "^3.0.0",
"tailwindcss": "^4.2.4",
"ts-toolbelt": "^9.6.0",
"tslib": "^2.8.1",
"typescript": "^6.0.3",
- "typescript-eslint": "^8.70.1",
- "vite": "^8.3.1",
+ "typescript-eslint": "^8.71.0",
+ "vite": "^8.3.2",
"zod": "^4.6.5"
},
"dependencies": {
@@ -59,12 +60,14 @@
"uuid": "^14.0.2"
},
"overrides": {
- "cookie": "^0.7.0",
"valibot": "^1.2.0",
"devalue": "^5.9.4",
"flatted": "^3.4.2",
"effect": "^3.20.0",
"picomatch": "^4.0.4"
},
- "type": "module"
+ "type": "module",
+ "imports": {
+ "#lib/*": "./src/lib/*"
+ }
}
diff --git a/web/src/ambient.d.ts b/web/src/ambient.d.ts
index a1766066b..5643179dd 100644
--- a/web/src/ambient.d.ts
+++ b/web/src/ambient.d.ts
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-import type { Entries, ObjectKeys } from '$lib/types/utilTypes';
+import type { Entries, ObjectKeys } from '#lib/types/utilTypes.js';
declare global {
interface ObjectConstructor {
diff --git a/web/src/hooks.client.ts b/web/src/env.ts
similarity index 82%
copy from web/src/hooks.client.ts
copy to web/src/env.ts
index 319b5ef87..239864227 100644
--- a/web/src/hooks.client.ts
+++ b/web/src/env.ts
@@ -15,7 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-import { authStore } from '$lib/auth/authStore.svelte';
+import { defineEnvVars } from '@sveltejs/kit/env';
-// Initialize auth store when the app loads
-authStore.initialize();
+export const variables = defineEnvVars({
+ PUBLIC_IGGY_API_URL: { public: true, schema: (input) => input ?? '' }
+});
diff --git a/web/src/hooks.client.ts b/web/src/hooks.client.ts
index 319b5ef87..1548ad5df 100644
--- a/web/src/hooks.client.ts
+++ b/web/src/hooks.client.ts
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-import { authStore } from '$lib/auth/authStore.svelte';
+import { authStore } from '#lib/auth/authStore.svelte.js';
// Initialize auth store when the app loads
authStore.initialize();
diff --git a/web/src/lib/api/ApiSchema.ts b/web/src/lib/api/ApiSchema.ts
index 8af315340..ac0b66d64 100644
--- a/web/src/lib/api/ApiSchema.ts
+++ b/web/src/lib/api/ApiSchema.ts
@@ -15,8 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-import type { GlobalPermissions, StreamPermissions } from '$lib/domain/Permissions';
-import type { KeysToSnakeCase } from '$lib/utils/utilTypes';
+import type { GlobalPermissions, StreamPermissions } from '#lib/domain/Permissions.js';
+import type { KeysToSnakeCase } from '#lib/utils/utilTypes.js';
type Permissions = {
global: KeysToSnakeCase<GlobalPermissions>;
diff --git a/web/src/lib/api/clientApi.ts b/web/src/lib/api/clientApi.ts
index 322890ebe..75e4bfa8a 100644
--- a/web/src/lib/api/clientApi.ts
+++ b/web/src/lib/api/clientApi.ts
@@ -15,12 +15,12 @@
// specific language governing permissions and limitations
// under the License.
-import { browser } from '$app/environment';
+import { browser } from '$app/env';
import { goto } from '$app/navigation';
import { resolve } from '$app/paths';
-import { env } from '$env/dynamic/public';
-import { authStore } from '$lib/auth/authStore.svelte';
-import { typedRoute } from '$lib/types/appRoutes';
+import { PUBLIC_IGGY_API_URL } from '$app/env/public';
+import { authStore } from '#lib/auth/authStore.svelte.js';
+import { typedRoute } from '#lib/types/appRoutes.js';
import { error } from '@sveltejs/kit';
import { getJson } from './getJson';
@@ -43,7 +43,7 @@ export async function clientApi<T = unknown>(args: ApiRequest): Promise<T> {
}
// Use PUBLIC_IGGY_API_URL if set, otherwise use relative path (for embedded mode)
- const baseUrl = env.PUBLIC_IGGY_API_URL || '';
+ const baseUrl = PUBLIC_IGGY_API_URL || '';
let fullUrl = `${baseUrl}${path}`;
if (queryParams) {
@@ -68,11 +68,11 @@ export async function clientApi<T = unknown>(args: ApiRequest): Promise<T> {
if (browser) {
authStore.logout();
}
- error(401, { message: 'Unauthorized' });
+ error(401, 'Unauthorized');
}
if (response.status === 404) {
- error(404, { message: 'Not Found' });
+ error(404, 'Not Found');
}
if (response.status === 400) {
@@ -80,7 +80,7 @@ export async function clientApi<T = unknown>(args: ApiRequest): Promise<T> {
throw { status: 400, data };
}
- error(500, { message: 'Internal server error' });
+ error(500, 'Internal server error');
}
/**
@@ -95,7 +95,7 @@ export async function clientApiSafe<T = unknown>(
} catch (e: any) {
if (e?.status === 401 || e?.status === 403) {
if (browser) {
- goto(resolve(typedRoute('/auth/sign-in')));
+ goto(resolve(typedRoute('auth/sign-in')));
}
return { data: null, error: 'Unauthorized' };
}
diff --git a/web/src/lib/api/fetchApi.ts b/web/src/lib/api/fetchApi.ts
index c9612d762..2b6d1de7c 100644
--- a/web/src/lib/api/fetchApi.ts
+++ b/web/src/lib/api/fetchApi.ts
@@ -15,9 +15,9 @@
// specific language governing permissions and limitations
// under the License.
-import { env } from '$env/dynamic/public';
-import type { ApiSchema } from '$lib/api/ApiSchema';
-import { tokens } from '$lib/utils/constants/tokens';
+import { PUBLIC_IGGY_API_URL } from '$app/env/public';
+import type { ApiSchema } from '#lib/api/ApiSchema.js';
+import { tokens } from '#lib/utils/constants/tokens.js';
import { type Cookies } from '@sveltejs/kit';
export async function fetchIggyApi(
@@ -34,7 +34,7 @@ export async function fetchIggyApi(
if (accessToken) headers.set('Authorization', `Bearer ${accessToken}`);
}
- let fullUrl = `${env.PUBLIC_IGGY_API_URL}${path}`;
+ let fullUrl = `${PUBLIC_IGGY_API_URL}${path}`;
if (queryParams) {
const query = new URLSearchParams(Object.entries(queryParams));
diff --git a/web/src/lib/api/fetchRouteApi.ts b/web/src/lib/api/fetchRouteApi.ts
index 4daef7463..b9cbfc66e 100644
--- a/web/src/lib/api/fetchRouteApi.ts
+++ b/web/src/lib/api/fetchRouteApi.ts
@@ -15,8 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-import { env } from '$env/dynamic/public';
-import { authStore } from '$lib/auth/authStore.svelte';
+import { PUBLIC_IGGY_API_URL } from '$app/env/public';
+import { authStore } from '#lib/auth/authStore.svelte.js';
import type { ApiSchema } from './ApiSchema';
import { convertBigIntsToStrings } from './convertBigIntsToStrings';
import { getJson } from './getJson';
@@ -36,7 +36,7 @@ export const fetchRouteApi = async (
}
// Use PUBLIC_IGGY_API_URL if set, otherwise use relative path (for embedded mode)
- const baseUrl = env.PUBLIC_IGGY_API_URL || '';
+ const baseUrl = PUBLIC_IGGY_API_URL || '';
let fullUrl = `${baseUrl}${path}`;
if (queryParams) {
diff --git a/web/src/lib/api/handleFetchErrors.ts b/web/src/lib/api/handleFetchErrors.ts
index 2100c7669..e9c0131f5 100644
--- a/web/src/lib/api/handleFetchErrors.ts
+++ b/web/src/lib/api/handleFetchErrors.ts
@@ -16,10 +16,10 @@
// under the License.
import { error, type Cookies, redirect } from '@sveltejs/kit';
-import { base } from '$app/paths';
+import { resolve } from '$app/paths';
import { getJson } from './getJson';
-import { tokens } from '$lib/utils/constants/tokens';
-import { typedRoute } from '$lib/types/appRoutes';
+import { tokens } from '#lib/utils/constants/tokens.js';
+import { typedRoute } from '#lib/types/appRoutes.js';
export const handleFetchErrors = async (
fetchResult: Response | unknown,
@@ -58,18 +58,16 @@ export const handleFetchErrors = async (
401: () => {
console.log(`handleErrorStatus: 401 ${response.url}`);
removeCookies();
- redirect(302, `${base}${typedRoute('/auth/sign-in')}`);
+ redirect(302, resolve(typedRoute('auth/sign-in')));
},
403: () => {
console.log(`handleErrorStatus: 403 ${response.url}`);
removeCookies();
- redirect(302, `${base}${typedRoute('/auth/sign-in')}`);
+ redirect(302, resolve(typedRoute('auth/sign-in')));
},
404: () => {
console.log(`handleErrorStatus: 404 ${response.url}`);
- error(404, {
- message: 'Not Found'
- });
+ error(404, 'Not Found');
}
};
@@ -78,7 +76,5 @@ export const handleFetchErrors = async (
console.log(`handleErrorStatus: 500 ${response.url}`);
- error(500, {
- message: 'handleErrorStatus: Internal server error'
- });
+ error(500, 'handleErrorStatus: Internal server error');
};
diff --git a/web/src/lib/auth/authStore.svelte.ts b/web/src/lib/auth/authStore.svelte.ts
index aa82987da..7ae795ca7 100644
--- a/web/src/lib/auth/authStore.svelte.ts
+++ b/web/src/lib/auth/authStore.svelte.ts
@@ -15,11 +15,11 @@
// specific language governing permissions and limitations
// under the License.
-import { browser } from '$app/environment';
+import { browser } from '$app/env';
import { goto } from '$app/navigation';
import { resolve } from '$app/paths';
-import { typedRoute } from '$lib/types/appRoutes';
-import { tokens } from '$lib/utils/constants/tokens';
+import { typedRoute } from '#lib/types/appRoutes.js';
+import { tokens } from '#lib/utils/constants/tokens.js';
import { jwtDecode } from 'jwt-decode';
export interface AuthState {
@@ -88,7 +88,7 @@ function createAuthStore() {
function logout(): void {
clearTokenCookie();
state = { isAuthenticated: false, accessToken: null, userId: null };
- goto(resolve(typedRoute('/auth/sign-in')));
+ goto(resolve(typedRoute('auth/sign-in')));
}
function getAccessToken(): string | null {
diff --git a/web/src/lib/components/Breadcrumbs.svelte b/web/src/lib/components/Breadcrumbs.svelte
index e69737618..216ad4d3e 100644
--- a/web/src/lib/components/Breadcrumbs.svelte
+++ b/web/src/lib/components/Breadcrumbs.svelte
@@ -19,15 +19,15 @@ under the License.
<script lang="ts">
import { page } from '$app/state';
- import { typedRoute } from '$lib/types/appRoutes';
+ import { typedRoute } from '#lib/types/appRoutes.js';
import Icon from './Icon.svelte';
- import { isNumber } from '$lib/utils/parsers';
+ import { isNumber } from '#lib/utils/parsers.js';
import { twMerge } from 'tailwind-merge';
import { resolve } from '$app/paths';
- import type { Pathname } from '$app/types';
+ import type { Path } from '$app/types';
type Crumb = {
- path: Pathname;
+ path: Path;
label: string;
};
@@ -51,7 +51,7 @@ under the License.
}
function formatPathSegment(segment: string, index: number, parts: string[]): Crumb {
- const path = `/dashboard/${parts.slice(0, index + 1).join('/')}` as Pathname;
+ const path = `dashboard/${parts.slice(0, index + 1).join('/')}` as Path;
if (isNumber(segment)) {
const prevSegment = parts[index - 1];
@@ -72,7 +72,7 @@ under the License.
</script>
<div class="flex items-center">
- <a href={resolve(typedRoute('/dashboard/overview'))}>
+ <a href={resolve(typedRoute('dashboard/overview'))}>
<Icon name="home" class="dark:fill-shade-d900 dark:stroke-white mr-2" />
</a>
diff --git a/web/src/lib/components/Button.svelte b/web/src/lib/components/Button.svelte
index d53c461e3..ed8b40735 100644
--- a/web/src/lib/components/Button.svelte
+++ b/web/src/lib/components/Button.svelte
@@ -18,7 +18,7 @@ under the License.
-->
<script lang="ts">
- import { tooltip } from '$lib/actions/tooltip';
+ import { tooltip } from '#lib/actions/tooltip.js';
import type { Placement } from '@floating-ui/dom';
import type { HTMLButtonAttributes } from 'svelte/elements';
import { twMerge } from 'tailwind-merge';
diff --git a/web/src/lib/components/Combobox.svelte b/web/src/lib/components/Combobox.svelte
index c261ac6c8..543409289 100644
--- a/web/src/lib/components/Combobox.svelte
+++ b/web/src/lib/components/Combobox.svelte
@@ -20,7 +20,7 @@ under the License.
<script lang="ts">
import { run } from 'svelte/legacy';
- import { noTypeCheck } from '$lib/utils/noTypeCheck';
+ import { noTypeCheck } from '#lib/utils/noTypeCheck.js';
import Icon from './Icon.svelte';
import { createEventDispatcher, onMount, tick } from 'svelte';
import { createCombobox } from 'svelte-headlessui';
diff --git a/web/src/lib/components/DeleteButtonWithConfirmation.svelte b/web/src/lib/components/DeleteButtonWithConfirmation.svelte
index 5eb2fc534..50e0c45d9 100644
--- a/web/src/lib/components/DeleteButtonWithConfirmation.svelte
+++ b/web/src/lib/components/DeleteButtonWithConfirmation.svelte
@@ -20,7 +20,7 @@ under the License.
<script lang="ts">
import { run } from 'svelte/legacy';
- import { tooltip } from '$lib/actions/tooltip';
+ import { tooltip } from '#lib/actions/tooltip.js';
import { fade } from 'svelte/transition';
import Button from './Button.svelte';
diff --git a/web/src/lib/components/DropdownMenu/DropdownMenu.svelte b/web/src/lib/components/DropdownMenu/DropdownMenu.svelte
index 1c896b0d3..147152eec 100644
--- a/web/src/lib/components/DropdownMenu/DropdownMenu.svelte
+++ b/web/src/lib/components/DropdownMenu/DropdownMenu.svelte
@@ -18,7 +18,7 @@ under the License.
-->
<script lang="ts">
- import { tooltip } from '$lib/actions/tooltip';
+ import { tooltip } from '#lib/actions/tooltip.js';
import type { Placement } from '@floating-ui/dom';
interface Props {
diff --git a/web/src/lib/components/DurationInput.svelte b/web/src/lib/components/DurationInput.svelte
index 1edda06bf..f9ca415b7 100644
--- a/web/src/lib/components/DurationInput.svelte
+++ b/web/src/lib/components/DurationInput.svelte
@@ -22,7 +22,7 @@ under the License.
import Checkbox from './Checkbox.svelte';
import Input from './Input.svelte';
import SegmentedControl from './SegmentedControl.svelte';
- import { durationFormatter } from '$lib/utils/formatters/durationFormatter';
+ import { durationFormatter } from '#lib/utils/formatters/durationFormatter.js';
interface Props {
label?: string;
diff --git a/web/src/lib/components/Header.svelte b/web/src/lib/components/Header.svelte
index c8d4809b0..856dff718 100644
--- a/web/src/lib/components/Header.svelte
+++ b/web/src/lib/components/Header.svelte
@@ -22,10 +22,10 @@ under the License.
import Icon, { type iconType } from './Icon.svelte';
import PeriodicInvalidator from './PeriodicInvalidator.svelte';
import { type Theme } from './ThemeController.svelte';
- import type { User } from '$lib/domain/User';
+ import type { User } from '#lib/domain/User.js';
import DropdownMenu from './DropdownMenu/DropdownMenu.svelte';
import { theme } from './ThemeController.svelte';
- import { typedRoute } from '$lib/types/appRoutes';
+ import { typedRoute } from '#lib/types/appRoutes.js';
import { resolve } from '$app/paths';
import Button from './Button.svelte';
import StopPropagation from './StopPropagation.svelte';
@@ -100,7 +100,7 @@ under the License.
</label>
</div>
<a
- href={resolve(typedRoute('/auth/logout'))}
+ href={resolve(typedRoute('auth/logout'))}
class="flex w-full items-center justify-between gap-2 px-2 py-2 hover:bg-shade-l300 dark:hover:bg-shade-d1000 rounded-md my-1 dark:hover:text-white"
>
<span>Log Out</span>
diff --git a/web/src/lib/components/Layouts/SettingsLayout.svelte b/web/src/lib/components/Layouts/SettingsLayout.svelte
index 845eca081..bfe66d8ab 100644
--- a/web/src/lib/components/Layouts/SettingsLayout.svelte
+++ b/web/src/lib/components/Layouts/SettingsLayout.svelte
@@ -19,10 +19,10 @@ under the License.
<script lang="ts">
import { twMerge } from 'tailwind-merge';
- import type { iconType } from '$lib/components/Icon.svelte';
- import Icon from '$lib/components/Icon.svelte';
+ import type { iconType } from '#lib/components/Icon.svelte';
+ import Icon from '#lib/components/Icon.svelte';
- import { typedRoute } from '$lib/types/appRoutes';
+ import { typedRoute } from '#lib/types/appRoutes.js';
import { page } from '$app/state';
import { resolve } from '$app/paths';
interface Props {
@@ -41,19 +41,19 @@ under the License.
tab: 'server',
icon: 'adjustments',
name: 'Server',
- path: typedRoute('/dashboard/settings/server')
+ path: typedRoute('dashboard/settings/server')
},
{
tab: 'webUI',
icon: 'settings',
name: 'Web UI',
- path: typedRoute('/dashboard/settings/webUI')
+ path: typedRoute('dashboard/settings/webUI')
},
{
tab: 'users',
icon: 'usersGroup',
name: 'Users',
- path: typedRoute('/dashboard/settings/users')
+ path: typedRoute('dashboard/settings/users')
}
] satisfies { tab: Tabs; name: string; icon: iconType; path: string }[];
</script>
diff --git a/web/src/lib/components/LoadingIndicator.svelte b/web/src/lib/components/LoadingIndicator.svelte
index ffa821d54..30f421b86 100644
--- a/web/src/lib/components/LoadingIndicator.svelte
+++ b/web/src/lib/components/LoadingIndicator.svelte
@@ -52,7 +52,9 @@ under the License.
await opacity.set(0, { duration: 200, delay: 300 });
}
- onNavigate(() => {
+ onNavigate(({ shallow, type }) => {
+ if (shallow && type === 'goto') return;
+
start();
return () => {
stop();
diff --git a/web/src/lib/components/Logo/Logo.svelte b/web/src/lib/components/Logo/Logo.svelte
index 50fa5dcfa..0d8d13ac3 100644
--- a/web/src/lib/components/Logo/Logo.svelte
+++ b/web/src/lib/components/Logo/Logo.svelte
@@ -18,12 +18,16 @@ under the License.
-->
<script lang="ts">
- import { base } from '$app/paths';
+ import { asset } from '$app/paths';
+
let className = '';
+
export { className as class };
- const lightLogo = `${base}/iggy-apache-lightbg.svg`;
- const darkLogo = `${base}/iggy-apache-darkbg.svg`;
+
+ const lightLogo = asset('iggy-apache-lightbg.svg');
+ const darkLogo = asset('iggy-apache-darkbg.svg');
</script>
<img src={lightLogo} class="{className} block dark:hidden" alt="Apache Iggy" />
+
<img src={darkLogo} class="{className} hidden dark:block" alt="Apache Iggy" />
diff --git a/web/src/lib/components/MessageDecoder/MessageDecoder.svelte b/web/src/lib/components/MessageDecoder/MessageDecoder.svelte
index 9d5e86b5a..d71659530 100644
--- a/web/src/lib/components/MessageDecoder/MessageDecoder.svelte
+++ b/web/src/lib/components/MessageDecoder/MessageDecoder.svelte
@@ -21,7 +21,7 @@ under the License.
import Button from '../Button.svelte';
import Select from '../Select.svelte';
import { decoderRegistry } from './decoders/utils/decoderRegistry';
- import { decodeBase64 } from '$lib/utils/base64Utils';
+ import { decodeBase64 } from '#lib/utils/base64Utils.js';
interface Props {
payload?: string | undefined;
diff --git a/web/src/lib/components/MessageDecoder/decoders/BuiltInDecoders/jsonDecoder.ts b/web/src/lib/components/MessageDecoder/decoders/BuiltInDecoders/jsonDecoder.ts
index f126471ad..296feb0de 100644
--- a/web/src/lib/components/MessageDecoder/decoders/BuiltInDecoders/jsonDecoder.ts
+++ b/web/src/lib/components/MessageDecoder/decoders/BuiltInDecoders/jsonDecoder.ts
@@ -16,7 +16,7 @@
// under the License.
import type { Decoder } from '../types';
-import { parseNestedJson } from '$lib/utils/parsers';
+import { parseNestedJson } from '#lib/utils/parsers.js';
export const jsonDecoder: Decoder = {
name: 'json',
diff --git a/web/src/lib/components/ModalConfirmation.svelte b/web/src/lib/components/ModalConfirmation.svelte
index 59e9f8294..84139452f 100644
--- a/web/src/lib/components/ModalConfirmation.svelte
+++ b/web/src/lib/components/ModalConfirmation.svelte
@@ -23,7 +23,7 @@ under the License.
import { createEventDispatcher } from 'svelte';
import Input from './Input.svelte';
import Icon from './Icon.svelte';
- import { Keys } from '$lib/utils/constants/keys';
+ import { Keys } from '#lib/utils/constants/keys.js';
interface Props {
open: boolean;
diff --git a/web/src/lib/components/Modals/AddPartitionsModal.svelte b/web/src/lib/components/Modals/AddPartitionsModal.svelte
index c93a26454..8e1b331cb 100644
--- a/web/src/lib/components/Modals/AddPartitionsModal.svelte
+++ b/web/src/lib/components/Modals/AddPartitionsModal.svelte
@@ -18,14 +18,14 @@ under the License.
-->
<script lang="ts">
- import type { CloseModalFn } from '$lib/types/utilTypes';
+ import type { CloseModalFn } from '#lib/types/utilTypes.js';
import { z } from 'zod';
import Input from '../Input.svelte';
import ModalBase from './ModalBase.svelte';
- import { numberSizes } from '$lib/utils/constants/numberSizes';
+ import { numberSizes } from '#lib/utils/constants/numberSizes.js';
import { setError, superForm, defaults } from 'sveltekit-superforms/client';
import { zod4 } from 'sveltekit-superforms/adapters';
- import { fetchRouteApi } from '$lib/api/fetchRouteApi';
+ import { fetchRouteApi } from '#lib/api/fetchRouteApi.js';
import { page } from '$app/state';
import { showToast } from '../AppToasts.svelte';
import Button from '../Button.svelte';
diff --git a/web/src/lib/components/Modals/AddStreamModal.svelte b/web/src/lib/components/Modals/AddStreamModal.svelte
index 8269631f9..7c8265e98 100644
--- a/web/src/lib/components/Modals/AddStreamModal.svelte
+++ b/web/src/lib/components/Modals/AddStreamModal.svelte
@@ -18,7 +18,7 @@ under the License.
-->
<script lang="ts">
- import type { CloseModalFn } from '$lib/types/utilTypes';
+ import type { CloseModalFn } from '#lib/types/utilTypes.js';
import { setError, superForm, defaults } from 'sveltekit-superforms/client';
import { zod4 } from 'sveltekit-superforms/adapters';
import { z } from 'zod';
@@ -26,7 +26,7 @@ under the License.
import Input from '../Input.svelte';
import ModalBase from './ModalBase.svelte';
import { showToast } from '../AppToasts.svelte';
- import { fetchRouteApi } from '$lib/api/fetchRouteApi';
+ import { fetchRouteApi } from '#lib/api/fetchRouteApi.js';
import { customInvalidateAll } from '../PeriodicInvalidator.svelte';
interface Props {
diff --git a/web/src/lib/components/Modals/AddTopicModal.svelte b/web/src/lib/components/Modals/AddTopicModal.svelte
index d3f0fa269..fe4bfd538 100644
--- a/web/src/lib/components/Modals/AddTopicModal.svelte
+++ b/web/src/lib/components/Modals/AddTopicModal.svelte
@@ -25,11 +25,11 @@ under the License.
import Select from '../Select.svelte';
import Button from '../Button.svelte';
import ModalBase from './ModalBase.svelte';
- import type { CloseModalFn } from '$lib/types/utilTypes';
- import type { StreamDetails } from '$lib/domain/StreamDetails';
- import { fetchRouteApi } from '$lib/api/fetchRouteApi';
+ import type { CloseModalFn } from '#lib/types/utilTypes.js';
+ import type { StreamDetails } from '#lib/domain/StreamDetails.js';
+ import { fetchRouteApi } from '#lib/api/fetchRouteApi.js';
import DurationInput from '../DurationInput.svelte';
- import { numberSizes } from '$lib/utils/constants/numberSizes';
+ import { numberSizes } from '#lib/utils/constants/numberSizes.js';
import { showToast } from '../AppToasts.svelte';
import { customInvalidateAll } from '../PeriodicInvalidator.svelte';
diff --git a/web/src/lib/components/Modals/AddUserModal.svelte b/web/src/lib/components/Modals/AddUserModal.svelte
index 421453684..3f21e54cc 100644
--- a/web/src/lib/components/Modals/AddUserModal.svelte
+++ b/web/src/lib/components/Modals/AddUserModal.svelte
@@ -18,7 +18,7 @@ under the License.
-->
<script lang="ts">
- import type { CloseModalFn } from '$lib/types/utilTypes';
+ import type { CloseModalFn } from '#lib/types/utilTypes.js';
import Listbox from '../Listbox.svelte';
import Input from '../Input.svelte';
import { z } from 'zod';
@@ -28,8 +28,8 @@ under the License.
import PasswordInput from '../PasswordInput.svelte';
import Button from '../Button.svelte';
import PermissionsManager from '../PermissionsManager.svelte';
- import type { Stream } from '$lib/domain/Stream';
- import { fetchRouteApi } from '$lib/api/fetchRouteApi';
+ import type { Stream } from '#lib/domain/Stream.js';
+ import { fetchRouteApi } from '#lib/api/fetchRouteApi.js';
import { showToast } from '../AppToasts.svelte';
import { customInvalidateAll } from '../PeriodicInvalidator.svelte';
diff --git a/web/src/lib/components/Modals/AppModals.svelte b/web/src/lib/components/Modals/AppModals.svelte
index 0e16ed41d..7e1638eb3 100644
--- a/web/src/lib/components/Modals/AppModals.svelte
+++ b/web/src/lib/components/Modals/AppModals.svelte
@@ -31,9 +31,9 @@ under the License.
import StreamSettingsModal from './StreamSettingsModal.svelte';
import TopicSettingsModal from './TopicSettingsModal.svelte';
import { fade } from 'svelte/transition';
- import { noTypeCheck } from '$lib/utils/noTypeCheck';
+ import { noTypeCheck } from '#lib/utils/noTypeCheck.js';
import { writable } from 'svelte/store';
- import { Keys } from '$lib/utils/constants/keys';
+ import { Keys } from '#lib/utils/constants/keys.js';
const modals = {
AddPartitionsModal,
diff --git a/web/src/lib/components/Modals/DeletePartitionsModal.svelte b/web/src/lib/components/Modals/DeletePartitionsModal.svelte
index 53b0f65f0..2bd21a78b 100644
--- a/web/src/lib/components/Modals/DeletePartitionsModal.svelte
+++ b/web/src/lib/components/Modals/DeletePartitionsModal.svelte
@@ -18,7 +18,7 @@ under the License.
-->
<script lang="ts">
- import type { CloseModalFn } from '$lib/types/utilTypes';
+ import type { CloseModalFn } from '#lib/types/utilTypes.js';
import Input from '../Input.svelte';
import { z } from 'zod';
@@ -28,12 +28,12 @@ under the License.
import Button from '../Button.svelte';
import ModalConfirmation from '../ModalConfirmation.svelte';
- import { fetchRouteApi } from '$lib/api/fetchRouteApi';
+ import { fetchRouteApi } from '#lib/api/fetchRouteApi.js';
import { page } from '$app/state';
import { showToast } from '../AppToasts.svelte';
import { customInvalidateAll } from '../PeriodicInvalidator.svelte';
- import type { TopicDetails } from '$lib/domain/TopicDetails';
- import { arraySum } from '$lib/utils/arraySum';
+ import type { TopicDetails } from '#lib/domain/TopicDetails.js';
+ import { arraySum } from '#lib/utils/arraySum.js';
interface Props {
closeModal: CloseModalFn;
diff --git a/web/src/lib/components/Modals/DeleteUserModal.svelte b/web/src/lib/components/Modals/DeleteUserModal.svelte
index 04bc71a06..0d6b2cc74 100644
--- a/web/src/lib/components/Modals/DeleteUserModal.svelte
+++ b/web/src/lib/components/Modals/DeleteUserModal.svelte
@@ -18,7 +18,7 @@ under the License.
-->
<script lang="ts">
- import type { CloseModalFn } from '$lib/types/utilTypes';
+ import type { CloseModalFn } from '#lib/types/utilTypes.js';
import ModalBase from './ModalBase.svelte';
diff --git a/web/src/lib/components/Modals/EditUserModal.svelte b/web/src/lib/components/Modals/EditUserModal.svelte
index b3a574ce9..ba77a968b 100644
--- a/web/src/lib/components/Modals/EditUserModal.svelte
+++ b/web/src/lib/components/Modals/EditUserModal.svelte
@@ -18,7 +18,7 @@ under the License.
-->
<script lang="ts">
- import type { CloseModalFn } from '$lib/types/utilTypes';
+ import type { CloseModalFn } from '#lib/types/utilTypes.js';
import ModalBase from './ModalBase.svelte';
diff --git a/web/src/lib/components/Modals/EditUserPermissionsModal.svelte b/web/src/lib/components/Modals/EditUserPermissionsModal.svelte
index 9b95d1b76..0ed9f46be 100644
--- a/web/src/lib/components/Modals/EditUserPermissionsModal.svelte
+++ b/web/src/lib/components/Modals/EditUserPermissionsModal.svelte
@@ -18,7 +18,7 @@ under the License.
-->
<script lang="ts">
- import type { CloseModalFn } from '$lib/types/utilTypes';
+ import type { CloseModalFn } from '#lib/types/utilTypes.js';
import ModalBase from './ModalBase.svelte';
diff --git a/web/src/lib/components/Modals/InspectMessage.svelte b/web/src/lib/components/Modals/InspectMessage.svelte
index 3d0dae307..11c2ebf47 100644
--- a/web/src/lib/components/Modals/InspectMessage.svelte
+++ b/web/src/lib/components/Modals/InspectMessage.svelte
@@ -20,11 +20,11 @@ under the License.
<script lang="ts">
import { SvelteSet } from 'svelte/reactivity';
import ModalBase from './ModalBase.svelte';
- import type { CloseModalFn } from '$lib/types/utilTypes';
- import { type Message, type HeaderEntry, type HeaderField } from '$lib/domain/Message';
- import MessageDecoder from '$lib/components/MessageDecoder/MessageDecoder.svelte';
+ import type { CloseModalFn } from '#lib/types/utilTypes.js';
+ import { type Message, type HeaderEntry, type HeaderField } from '#lib/domain/Message.js';
+ import MessageDecoder from '#lib/components/MessageDecoder/MessageDecoder.svelte';
- import { formatMessageId } from '$lib/utils/formatters/uuidFormatter';
+ import { formatMessageId } from '#lib/utils/formatters/uuidFormatter.js';
interface Props {
closeModal: CloseModalFn;
diff --git a/web/src/lib/components/Modals/ModalBase.svelte b/web/src/lib/components/Modals/ModalBase.svelte
index b6968e62e..bdcce5057 100644
--- a/web/src/lib/components/Modals/ModalBase.svelte
+++ b/web/src/lib/components/Modals/ModalBase.svelte
@@ -23,7 +23,7 @@ under the License.
import type { TransitionConfig } from 'svelte/transition';
import { quintOut } from 'svelte/easing';
import Button from '../Button.svelte';
- import type { CloseModalFn } from '$lib/types/utilTypes';
+ import type { CloseModalFn } from '#lib/types/utilTypes.js';
interface Props {
closeModal: CloseModalFn;
diff --git a/web/src/lib/components/Modals/StreamSettingsModal.svelte b/web/src/lib/components/Modals/StreamSettingsModal.svelte
index 8d8c6fcc6..83f1dc4ea 100644
--- a/web/src/lib/components/Modals/StreamSettingsModal.svelte
+++ b/web/src/lib/components/Modals/StreamSettingsModal.svelte
@@ -18,8 +18,8 @@ under the License.
-->
<script lang="ts">
- import type { StreamDetails } from '$lib/domain/StreamDetails';
- import type { CloseModalFn } from '$lib/types/utilTypes';
+ import type { StreamDetails } from '#lib/domain/StreamDetails.js';
+ import type { CloseModalFn } from '#lib/types/utilTypes.js';
import { z } from 'zod';
import Button from '../Button.svelte';
import Icon from '../Icon.svelte';
@@ -27,14 +27,14 @@ under the License.
import ModalBase from './ModalBase.svelte';
import { setError, superForm, defaults } from 'sveltekit-superforms/client';
import { zod4 } from 'sveltekit-superforms/adapters';
- import { fetchRouteApi } from '$lib/api/fetchRouteApi';
+ import { fetchRouteApi } from '#lib/api/fetchRouteApi.js';
import { goto } from '$app/navigation';
import { showToast } from '../AppToasts.svelte';
import ModalConfirmation from '../ModalConfirmation.svelte';
- import { typedRoute } from '$lib/types/appRoutes';
- import { browser } from '$app/environment';
+ import { typedRoute } from '#lib/types/appRoutes.js';
+ import { browser } from '$app/env';
import { customInvalidateAll } from '../PeriodicInvalidator.svelte';
- import { arraySum } from '$lib/utils/arraySum';
+ import { arraySum } from '#lib/utils/arraySum.js';
import { resolve } from '$app/paths';
interface Props {
@@ -135,7 +135,7 @@ under the License.
if (ok) {
closeModal(async () => {
if (!browser) return;
- await goto(resolve(typedRoute('/dashboard/streams')));
+ await goto(resolve(typedRoute('dashboard/streams')));
await customInvalidateAll();
showToast({
type: 'success',
diff --git a/web/src/lib/components/Modals/TopicSettingsModal.svelte b/web/src/lib/components/Modals/TopicSettingsModal.svelte
index fc962d265..1e198d093 100644
--- a/web/src/lib/components/Modals/TopicSettingsModal.svelte
+++ b/web/src/lib/components/Modals/TopicSettingsModal.svelte
@@ -18,8 +18,8 @@ under the License.
-->
<script lang="ts">
- import type { CloseModalFn } from '$lib/types/utilTypes';
- import type { TopicDetails } from '$lib/domain/TopicDetails';
+ import type { CloseModalFn } from '#lib/types/utilTypes.js';
+ import type { TopicDetails } from '#lib/domain/TopicDetails.js';
import { z } from 'zod';
import Button from '../Button.svelte';
@@ -28,13 +28,13 @@ under the License.
import ModalBase from './ModalBase.svelte';
import { setError, superForm, defaults } from 'sveltekit-superforms/client';
import { zod4 } from 'sveltekit-superforms/adapters';
- import { fetchRouteApi } from '$lib/api/fetchRouteApi';
+ import { fetchRouteApi } from '#lib/api/fetchRouteApi.js';
import { goto } from '$app/navigation';
import { resolve } from '$app/paths';
- import type { Pathname } from '$app/types';
+ import type { Path } from '$app/types';
import { showToast } from '../AppToasts.svelte';
import ModalConfirmation from '../ModalConfirmation.svelte';
- import { browser } from '$app/environment';
+ import { browser } from '$app/env';
import { customInvalidateAll } from '../PeriodicInvalidator.svelte';
import { page } from '$app/state';
import DurationInput from '../DurationInput.svelte';
@@ -42,7 +42,7 @@ under the License.
interface Props {
topic: TopicDetails;
closeModal: CloseModalFn;
- onDeleteRedirectPath: Pathname;
+ onDeleteRedirectPath: Path;
}
let { topic, closeModal, onDeleteRedirectPath }: Props = $props();
diff --git a/web/src/lib/components/Navbar.svelte b/web/src/lib/components/Navbar.svelte
index a135dfb54..d3e0e3b1e 100644
--- a/web/src/lib/components/Navbar.svelte
+++ b/web/src/lib/components/Navbar.svelte
@@ -23,27 +23,27 @@ under the License.
import { page } from '$app/state';
import { resolve } from '$app/paths';
import { twMerge } from 'tailwind-merge';
- import { tooltip } from '$lib/actions/tooltip';
- import { typedRoute } from '$lib/types/appRoutes';
- import LogoType from '$lib/components/Logo/LogoType.svelte';
- import LogoMark from '$lib/components/Logo/LogoMark.svelte';
+ import { tooltip } from '#lib/actions/tooltip.js';
+ import { typedRoute } from '#lib/types/appRoutes.js';
+ import LogoType from '#lib/components/Logo/LogoType.svelte';
+ import LogoMark from '#lib/components/Logo/LogoMark.svelte';
let navItems = $derived([
{
name: 'Overview',
icon: 'home',
- path: typedRoute('/dashboard/overview'),
- active: page.url.pathname.includes(typedRoute('/dashboard/overview'))
+ path: typedRoute('dashboard/overview'),
+ active: page.url.pathname.includes(typedRoute('dashboard/overview'))
},
{
name: 'Streams',
icon: 'stream',
- path: typedRoute('/dashboard/streams'),
- active: page.url.pathname.includes(typedRoute('/dashboard/streams'))
+ path: typedRoute('dashboard/streams'),
+ active: page.url.pathname.includes(typedRoute('dashboard/streams'))
},
{
name: 'Settings',
icon: 'settings',
- path: typedRoute('/dashboard/settings/webUI'),
+ path: typedRoute('dashboard/settings/webUI'),
active: page.url.pathname.includes('/dashboard/settings')
}
] satisfies { name: string; icon: iconType; path: string; active: boolean }[]);
@@ -52,10 +52,7 @@ under the License.
<nav
class="fixed z-10 left-0 top-0 bottom-0 min-w-[90px] max-w-[90px] pb-7 pt-4 border-r flex flex-col items-center bg-shade-l300 dark:bg-shade-d1000"
>
- <a
- href={resolve(typedRoute('/dashboard/overview'))}
- class="flex flex-col items-center gap-5 mb-5"
- >
+ <a href={resolve(typedRoute('dashboard/overview'))} class="flex flex-col items-center gap-5 mb-5">
<LogoType class="w-[51px] h-[28px] pointer-events-none" />
<LogoMark class="w-[50px] h-[45px]" />
</a>
diff --git a/web/src/lib/components/Paginator.svelte b/web/src/lib/components/Paginator.svelte
index 4c9cb670f..20d862b3b 100644
--- a/web/src/lib/components/Paginator.svelte
+++ b/web/src/lib/components/Paginator.svelte
@@ -18,8 +18,8 @@ under the License.
-->
<script lang="ts">
- import Button from '$lib/components/Button.svelte';
- import Icon from '$lib/components/Icon.svelte';
+ import Button from '#lib/components/Button.svelte';
+ import Icon from '#lib/components/Icon.svelte';
import { createEventDispatcher } from 'svelte';
interface Props {
diff --git a/web/src/lib/components/PasswordInput.svelte b/web/src/lib/components/PasswordInput.svelte
index b75fc1839..73e5c8288 100644
--- a/web/src/lib/components/PasswordInput.svelte
+++ b/web/src/lib/components/PasswordInput.svelte
@@ -18,7 +18,7 @@ under the License.
-->
<script lang="ts">
- import Input from '$lib/components/Input.svelte';
+ import Input from '#lib/components/Input.svelte';
import Icon from './Icon.svelte';
import Button from './Button.svelte';
diff --git a/web/src/lib/components/PeriodicInvalidator.svelte b/web/src/lib/components/PeriodicInvalidator.svelte
index 45976a9e2..3c55f0faf 100644
--- a/web/src/lib/components/PeriodicInvalidator.svelte
+++ b/web/src/lib/components/PeriodicInvalidator.svelte
@@ -18,8 +18,8 @@ under the License.
-->
<script lang="ts" module>
- import { browser } from '$app/environment';
- import { invalidateAll } from '$app/navigation';
+ import { browser } from '$app/env';
+ import { refreshAll } from '$app/navigation';
import { onMount } from 'svelte';
import { writable } from 'svelte/store';
import Button from './Button.svelte';
@@ -33,7 +33,7 @@ under the License.
export async function customInvalidateAll() {
if (!browser) return;
isInvalidating.set(true);
- await invalidateAll();
+ await refreshAll();
isInvalidating.set(false);
}
</script>
diff --git a/web/src/lib/components/PermissionsManager.svelte b/web/src/lib/components/PermissionsManager.svelte
index d0f4a6322..443038a45 100644
--- a/web/src/lib/components/PermissionsManager.svelte
+++ b/web/src/lib/components/PermissionsManager.svelte
@@ -50,19 +50,19 @@ under the License.
import Icon from './Icon.svelte';
import Combobox from './Combobox.svelte';
- import type { Stream } from '$lib/domain/Stream';
- import { topicMapper, type Topic } from '$lib/domain/Topic';
- import { fetchRouteApi } from '$lib/api/fetchRouteApi';
+ import type { Stream } from '#lib/domain/Stream.js';
+ import { topicMapper, type Topic } from '#lib/domain/Topic.js';
+ import { fetchRouteApi } from '#lib/api/fetchRouteApi.js';
import { showToast } from './AppToasts.svelte';
- import type { KeysToSnakeCase } from '$lib/utils/utilTypes';
+ import type { KeysToSnakeCase } from '#lib/utils/utilTypes.js';
import type {
GlobalPermissions,
StreamPermissions,
TopicPermissions
- } from '$lib/domain/Permissions';
+ } from '#lib/domain/Permissions.js';
import Checkbox from './Checkbox.svelte';
import { twMerge } from 'tailwind-merge';
- import { noTypeCheck } from '$lib/utils/noTypeCheck';
+ import { noTypeCheck } from '#lib/utils/noTypeCheck.js';
import { fade } from 'svelte/transition';
import { SvelteSet } from 'svelte/reactivity';
diff --git a/web/src/lib/components/RouteComponents/Settings/UsersTab.svelte b/web/src/lib/components/RouteComponents/Settings/UsersTab.svelte
index c06805548..8e9610bbc 100644
--- a/web/src/lib/components/RouteComponents/Settings/UsersTab.svelte
+++ b/web/src/lib/components/RouteComponents/Settings/UsersTab.svelte
@@ -25,15 +25,15 @@ under the License.
</script>
<script lang="ts">
- import type { User } from '$lib/domain/User';
- import SlimSortableList from '$lib/components/SlimSortableList.svelte';
- import Checkbox from '$lib/components/Checkbox.svelte';
+ import type { User } from '#lib/domain/User.js';
+ import SlimSortableList from '#lib/components/SlimSortableList.svelte';
+ import Checkbox from '#lib/components/Checkbox.svelte';
import { twMerge } from 'tailwind-merge';
- import Button from '$lib/components/Button.svelte';
- import Icon, { type iconType } from '$lib/components/Icon.svelte';
- import DropdownMenu from '$lib/components/DropdownMenu/DropdownMenu.svelte';
- import StopPropagation from '$lib/components/StopPropagation.svelte';
- import { openModal } from '$lib/components/Modals/AppModals.svelte';
+ import Button from '#lib/components/Button.svelte';
+ import Icon, { type iconType } from '#lib/components/Icon.svelte';
+ import DropdownMenu from '#lib/components/DropdownMenu/DropdownMenu.svelte';
+ import StopPropagation from '#lib/components/StopPropagation.svelte';
+ import { openModal } from '#lib/components/Modals/AppModals.svelte';
interface Props {
users: Array<User>;
diff --git a/web/src/lib/components/RouteComponents/Settings/UsersTabActions.svelte b/web/src/lib/components/RouteComponents/Settings/UsersTabActions.svelte
index 7cc4384b4..29eb1ffac 100644
--- a/web/src/lib/components/RouteComponents/Settings/UsersTabActions.svelte
+++ b/web/src/lib/components/RouteComponents/Settings/UsersTabActions.svelte
@@ -18,8 +18,8 @@ under the License.
-->
<script lang="ts">
- import Icon from '$lib/components/Icon.svelte';
- import Input from '$lib/components/Input.svelte';
+ import Icon from '#lib/components/Icon.svelte';
+ import Input from '#lib/components/Input.svelte';
import { searchQuery, usersCount } from './UsersTab.svelte';
</script>
diff --git a/web/src/lib/components/SlimSortableList.svelte b/web/src/lib/components/SlimSortableList.svelte
index 74693f9b3..068593935 100644
--- a/web/src/lib/components/SlimSortableList.svelte
+++ b/web/src/lib/components/SlimSortableList.svelte
@@ -32,7 +32,7 @@ under the License.
<script lang="ts">
import { run } from 'svelte/legacy';
- import { asConst } from '$lib/utils/asConst';
+ import { asConst } from '#lib/utils/asConst.js';
import Icon from './Icon.svelte';
import { twMerge } from 'tailwind-merge';
diff --git a/web/src/lib/components/SortableList.svelte b/web/src/lib/components/SortableList.svelte
index 0cec0b391..fb57e98b8 100644
--- a/web/src/lib/components/SortableList.svelte
+++ b/web/src/lib/components/SortableList.svelte
@@ -21,6 +21,7 @@ under the License.
type ListItem = {
id: string | number;
};
+
type Ordering<T> = { key: keyof T; asc: boolean } | { key: undefined; asc: undefined };
function orderData<T>(data: T[], key: keyof T, asc: boolean) {
@@ -35,7 +36,7 @@ under the License.
<script lang="ts" generics="T extends ListItem">
import { run } from 'svelte/legacy';
- import { asConst } from '$lib/utils/asConst';
+ import { asConst } from '#lib/utils/asConst.js';
import { onNavigate } from '$app/navigation';
@@ -44,13 +45,15 @@ under the License.
import Icon from './Icon.svelte';
import { twMerge } from 'tailwind-merge';
- import { noTypeCheck } from '$lib/utils/noTypeCheck';
+ import { noTypeCheck } from '#lib/utils/noTypeCheck.js';
let animationEnabled = $state(true);
let isAnimating = $state(false);
let timeout: ReturnType<typeof setTimeout>;
- onNavigate(() => {
+ onNavigate(({ shallow, type }) => {
+ if (shallow && type === 'goto') return;
+
animationEnabled = false;
return () => {
diff --git a/web/src/lib/components/StopPropagation.svelte b/web/src/lib/components/StopPropagation.svelte
index 59a495989..9dec023b6 100644
--- a/web/src/lib/components/StopPropagation.svelte
+++ b/web/src/lib/components/StopPropagation.svelte
@@ -18,7 +18,7 @@ under the License.
-->
<script lang="ts">
- import { Keys } from '$lib/utils/constants/keys';
+ import { Keys } from '#lib/utils/constants/keys.js';
interface Props {
class?: string | undefined;
diff --git a/web/src/lib/components/ThemeController.svelte b/web/src/lib/components/ThemeController.svelte
index 5fbaf0c19..2c993a976 100644
--- a/web/src/lib/components/ThemeController.svelte
+++ b/web/src/lib/components/ThemeController.svelte
@@ -26,8 +26,8 @@ under the License.
<script lang="ts">
import { run } from 'svelte/legacy';
- import { browser } from '$app/environment';
- import { persistedStore } from '$lib/utils/persistedStore';
+ import { browser } from '$app/env';
+ import { persistedStore } from '#lib/utils/persistedStore.js';
const setAppTheme = () => {
if (!browser) return;
diff --git a/web/src/lib/domain/Message.ts b/web/src/lib/domain/Message.ts
index 247063418..4b6c7fa1b 100644
--- a/web/src/lib/domain/Message.ts
+++ b/web/src/lib/domain/Message.ts
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-import { formatDateWithMicroseconds } from '$lib/utils/formatters/dateFormatter';
+import { formatDateWithMicroseconds } from '#lib/utils/formatters/dateFormatter.js';
export type MessagePartition = {
partitionId: number;
diff --git a/web/src/lib/domain/Partition.ts b/web/src/lib/domain/Partition.ts
index 47bcfc13d..ba31d225a 100644
--- a/web/src/lib/domain/Partition.ts
+++ b/web/src/lib/domain/Partition.ts
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-import { formatDate } from '$lib/utils/formatters/dateFormatter';
+import { formatDate } from '#lib/utils/formatters/dateFormatter.js';
export type Partition = {
id: number;
diff --git a/web/src/lib/domain/Stats.ts b/web/src/lib/domain/Stats.ts
index 3d9864165..703d7c01d 100644
--- a/web/src/lib/domain/Stats.ts
+++ b/web/src/lib/domain/Stats.ts
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-import { formatDate, formatRuntime } from '$lib/utils/formatters/dateFormatter';
+import { formatDate, formatRuntime } from '#lib/utils/formatters/dateFormatter.js';
type StatsStringItem = { name: string; value: string; rawValue: string | number };
type StatsNumberItem = { name: string; value: number };
diff --git a/web/src/lib/domain/Topic.ts b/web/src/lib/domain/Topic.ts
index ee46cb45b..7109ca0e6 100644
--- a/web/src/lib/domain/Topic.ts
+++ b/web/src/lib/domain/Topic.ts
@@ -15,9 +15,9 @@
// specific language governing permissions and limitations
// under the License.
-import { bytesFormatter } from '$lib/utils/formatters/bytesFormatter';
-import { formatDate } from '$lib/utils/formatters/dateFormatter';
-import { durationFormatter } from '$lib/utils/formatters/durationFormatter';
+import { bytesFormatter } from '#lib/utils/formatters/bytesFormatter.js';
+import { formatDate } from '#lib/utils/formatters/dateFormatter.js';
+import { durationFormatter } from '#lib/utils/formatters/durationFormatter.js';
export type Topic = {
id: number;
diff --git a/web/src/lib/domain/User.ts b/web/src/lib/domain/User.ts
index 13886c305..d480be58c 100644
--- a/web/src/lib/domain/User.ts
+++ b/web/src/lib/domain/User.ts
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-import { formatDate } from '$lib/utils/formatters/dateFormatter';
+import { formatDate } from '#lib/utils/formatters/dateFormatter.js';
export type User = {
id: number;
diff --git a/web/src/lib/hooks/useGoPrev.ts b/web/src/lib/hooks/useGoPrev.ts
index e9e1213fd..b61b691d4 100644
--- a/web/src/lib/hooks/useGoPrev.ts
+++ b/web/src/lib/hooks/useGoPrev.ts
@@ -16,14 +16,16 @@
// under the License.
import { afterNavigate } from '$app/navigation';
-import { base } from '$app/paths';
+import { resolve } from '$app/paths';
import { writable } from 'svelte/store';
export const useGoPrev = () => {
- const { subscribe, set } = writable(base.toString());
+ const { subscribe, set } = writable<string>(resolve('dashboard/overview'));
- afterNavigate(({ from }) => {
- set(from?.url?.pathname || base);
+ afterNavigate(({ from, shallow, type }) => {
+ if (shallow && type === 'goto') return;
+
+ set(from?.url?.pathname || resolve('dashboard/overview'));
});
return { prevPage: { subscribe } };
diff --git a/web/src/lib/types/appRoutes.ts b/web/src/lib/types/appRoutes.ts
index f10005eb4..195dd433c 100644
--- a/web/src/lib/types/appRoutes.ts
+++ b/web/src/lib/types/appRoutes.ts
@@ -17,7 +17,7 @@
type SettingsSegment = `settings/${'server' | 'users' | 'terminal' | 'webUI'}`;
-type DashboardRoutes = `/dashboard/${
+type DashboardRoutes = `dashboard/${
| 'overview'
| 'streams'
| `streams/${number}`
@@ -27,7 +27,7 @@ type DashboardRoutes = `/dashboard/${
| 'logs'
| SettingsSegment}`;
-type AuthRoutes = `/auth/${'sign-in' | 'logout'}`;
+type AuthRoutes = `auth/${'sign-in' | 'logout'}`;
export const typedRoute = <const T extends DashboardRoutes | AuthRoutes>(route: T) => route;
export const publicRoutes = ['/auth/sign-in', '/auth/logout', '/auth/test'] as const;
diff --git a/web/vite.config.ts b/web/src/params.test.mjs
similarity index 55%
copy from web/vite.config.ts
copy to web/src/params.test.mjs
index cf5404a8d..f27963c81 100644
--- a/web/vite.config.ts
+++ b/web/src/params.test.mjs
@@ -15,23 +15,20 @@
// specific language governing permissions and limitations
// under the License.
-import { sveltekit } from '@sveltejs/kit/vite';
-import { defineConfig } from 'vite';
+import assert from 'node:assert/strict';
+import { test } from 'node:test';
+import { params } from './params.ts';
-export default defineConfig({
- base: '/',
- preview: {
- port: 3050,
- strictPort: true,
- host: true,
- allowedHosts: true
- },
- build: {
- outDir: '../dist',
- emptyOutDir: true
- },
- plugins: [sveltekit()],
- define: {
- SUPERFORMS_LEGACY: true
+test('preserve numeric route parameters as strings', async () => {
+ for (const value of ['0', '01', '42', '-1', '1.5']) {
+ const result = await params.i32['~standard'].validate(value);
+ assert.deepEqual(result, { value }, `Unexpected route parameter: ${value}`);
+ }
+});
+
+test('reject nonnumeric route parameters', async () => {
+ for (const value of ['', 'stream', '1/2', '1e3']) {
+ const result = await params.i32['~standard'].validate(value);
+ assert.ok(result.issues?.length, `Accepted invalid route parameter: ${value}`);
}
});
diff --git a/web/src/params/i32.ts b/web/src/params.ts
similarity index 82%
rename from web/src/params/i32.ts
rename to web/src/params.ts
index fd24317f6..fc80973a6 100644
--- a/web/src/params/i32.ts
+++ b/web/src/params.ts
@@ -15,6 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-export function match(value: any) {
- return /^-?\d+(\.\d+)?$/.test(value);
-}
+import { defineParams } from '@sveltejs/kit/params';
+
+export const params = defineParams({
+ i32: (value) => (/^-?\d+(\.\d+)?$/.test(value) ? value : undefined)
+});
diff --git a/web/src/routes/+layout.svelte b/web/src/routes/+layout.svelte
index c61d7bf19..e97b912a3 100644
--- a/web/src/routes/+layout.svelte
+++ b/web/src/routes/+layout.svelte
@@ -18,8 +18,8 @@ under the License.
-->
<script lang="ts">
- import LoadingIndicator from '$lib/components/LoadingIndicator.svelte';
- import ThemeController from '$lib/components/ThemeController.svelte';
+ import LoadingIndicator from '#lib/components/LoadingIndicator.svelte';
+ import ThemeController from '#lib/components/ThemeController.svelte';
import '../styles/app.css';
interface Props {
children?: import('svelte').Snippet;
diff --git a/web/src/routes/+layout.ts b/web/src/routes/+layout.ts
index 1a2d83caa..9b84935c9 100644
--- a/web/src/routes/+layout.ts
+++ b/web/src/routes/+layout.ts
@@ -15,11 +15,12 @@
// specific language governing permissions and limitations
// under the License.
-import { browser } from '$app/environment';
+import { browser } from '$app/env';
import { goto } from '$app/navigation';
-import { base, resolve } from '$app/paths';
-import { authStore } from '$lib/auth/authStore.svelte';
-import { checkIfPathnameIsPublic, typedRoute } from '$lib/types/appRoutes';
+import { resolve } from '$app/paths';
+import type { Path } from '$app/types';
+import { authStore } from '#lib/auth/authStore.svelte.js';
+import { checkIfPathnameIsPublic, typedRoute } from '#lib/types/appRoutes.js';
import type { LayoutLoad } from './$types';
// Enable client-side rendering for SPA mode
@@ -35,23 +36,25 @@ export const load: LayoutLoad = async ({ url }) => {
const isPublicPath = checkIfPathnameIsPublic(pathname);
const isAuthenticated = authStore.getAccessToken() !== null;
+ // Entry URLs without pages are absent from the generated route types.
+ const rootPath = resolve('' as Path);
const authRedirects = [
- base,
- `${base}/`,
- `${base}/dashboard`,
- `${base}/dashboard/`,
- `${base}/auth`,
- `${base}/auth/sign-in`
+ rootPath.replace(/\/$/, ''),
+ rootPath,
+ `${rootPath}dashboard`,
+ `${rootPath}dashboard/`,
+ `${rootPath}auth`,
+ resolve(typedRoute('auth/sign-in'))
];
if (browser) {
if (!isAuthenticated && !isPublicPath) {
- goto(resolve(typedRoute('/auth/sign-in')));
+ goto(resolve(typedRoute('auth/sign-in')));
return { isAuthenticated: false };
}
if (isAuthenticated && authRedirects.includes(pathname)) {
- goto(resolve(typedRoute('/dashboard/overview')));
+ goto(resolve(typedRoute('dashboard/overview')));
return { isAuthenticated: true };
}
}
diff --git a/web/src/routes/auth/+layout.svelte b/web/src/routes/auth/+layout.svelte
index 85e08689d..d32f0c235 100644
--- a/web/src/routes/auth/+layout.svelte
+++ b/web/src/routes/auth/+layout.svelte
@@ -18,7 +18,7 @@ under the License.
-->
<script>
- import Logo from '$lib/components/Logo/Logo.svelte';
+ import Logo from '#lib/components/Logo/Logo.svelte';
/** @type {{children?: import('svelte').Snippet}} */
let { children } = $props();
diff --git a/web/src/routes/auth/logout/+page.svelte b/web/src/routes/auth/logout/+page.svelte
index 2518af297..2013a061c 100644
--- a/web/src/routes/auth/logout/+page.svelte
+++ b/web/src/routes/auth/logout/+page.svelte
@@ -21,12 +21,12 @@ under the License.
import { onMount } from 'svelte';
import { goto } from '$app/navigation';
import { resolve } from '$app/paths';
- import { authStore } from '$lib/auth/authStore.svelte';
- import { typedRoute } from '$lib/types/appRoutes';
+ import { authStore } from '#lib/auth/authStore.svelte.js';
+ import { typedRoute } from '#lib/types/appRoutes.js';
onMount(() => {
authStore.logout();
- goto(resolve(typedRoute('/auth/sign-in')));
+ goto(resolve(typedRoute('auth/sign-in')));
});
</script>
diff --git a/web/src/routes/auth/sign-in/+page.svelte b/web/src/routes/auth/sign-in/+page.svelte
index 676af6b13..9d90f2298 100644
--- a/web/src/routes/auth/sign-in/+page.svelte
+++ b/web/src/routes/auth/sign-in/+page.svelte
@@ -20,15 +20,15 @@ under the License.
<script lang="ts">
import { goto } from '$app/navigation';
import { resolve } from '$app/paths';
- import { env } from '$env/dynamic/public';
- import { authStore } from '$lib/auth/authStore.svelte';
- import Button from '$lib/components/Button.svelte';
- import Checkbox from '$lib/components/Checkbox.svelte';
- import Icon from '$lib/components/Icon.svelte';
- import Input from '$lib/components/Input.svelte';
- import PasswordInput from '$lib/components/PasswordInput.svelte';
- import { typedRoute } from '$lib/types/appRoutes';
- import { persistedStore } from '$lib/utils/persistedStore.js';
+ import { PUBLIC_IGGY_API_URL } from '$app/env/public';
+ import { authStore } from '#lib/auth/authStore.svelte.js';
+ import Button from '#lib/components/Button.svelte';
+ import Checkbox from '#lib/components/Checkbox.svelte';
+ import Icon from '#lib/components/Icon.svelte';
+ import Input from '#lib/components/Input.svelte';
+ import PasswordInput from '#lib/components/PasswordInput.svelte';
+ import { typedRoute } from '#lib/types/appRoutes.js';
+ import { persistedStore } from '#lib/utils/persistedStore.js';
import { onMount } from 'svelte';
let username = $state('');
@@ -72,7 +72,7 @@ under the License.
isLoading = true;
try {
- const baseUrl = env.PUBLIC_IGGY_API_URL || '';
+ const baseUrl = PUBLIC_IGGY_API_URL || '';
const response = await fetch(`${baseUrl}/users/login`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
@@ -89,7 +89,7 @@ under the License.
const { access_token } = data;
authStore.login(access_token.token, access_token.expiry);
- goto(resolve(typedRoute('/dashboard/overview')));
+ goto(resolve(typedRoute('dashboard/overview')));
} catch {
errorMessage = 'Failed to connect to server';
isLoading = false;
diff --git a/web/src/routes/auth/sign-in/+page.ts b/web/src/routes/auth/sign-in/+page.ts
index 3e19baf7d..c5edc850d 100644
--- a/web/src/routes/auth/sign-in/+page.ts
+++ b/web/src/routes/auth/sign-in/+page.ts
@@ -15,16 +15,16 @@
// specific language governing permissions and limitations
// under the License.
-import { browser } from '$app/environment';
+import { browser } from '$app/env';
import { goto } from '$app/navigation';
import { resolve } from '$app/paths';
-import { authStore } from '$lib/auth/authStore.svelte';
-import { typedRoute } from '$lib/types/appRoutes';
+import { authStore } from '#lib/auth/authStore.svelte.js';
+import { typedRoute } from '#lib/types/appRoutes.js';
import type { PageLoad } from './$types';
export const load: PageLoad = async () => {
if (browser && authStore.getAccessToken()) {
- goto(resolve(typedRoute('/dashboard/overview')));
+ goto(resolve(typedRoute('dashboard/overview')));
}
return {};
diff --git a/web/src/routes/dashboard/+layout.svelte b/web/src/routes/dashboard/+layout.svelte
index e16c94546..b36cbe116 100644
--- a/web/src/routes/dashboard/+layout.svelte
+++ b/web/src/routes/dashboard/+layout.svelte
@@ -18,10 +18,10 @@ under the License.
-->
<script>
- import AppModals from '$lib/components/Modals/AppModals.svelte';
- import Navbar from '$lib/components/Navbar.svelte';
- import AppToasts from '$lib/components/AppToasts.svelte';
- import Header from '$lib/components/Header.svelte';
+ import AppModals from '#lib/components/Modals/AppModals.svelte';
+ import Navbar from '#lib/components/Navbar.svelte';
+ import AppToasts from '#lib/components/AppToasts.svelte';
+ import Header from '#lib/components/Header.svelte';
/** @type {{data: any, children?: import('svelte').Snippet}} */
let { data, children } = $props();
diff --git a/web/src/routes/dashboard/+layout.ts b/web/src/routes/dashboard/+layout.ts
index e9ce12e0e..6b0da9227 100644
--- a/web/src/routes/dashboard/+layout.ts
+++ b/web/src/routes/dashboard/+layout.ts
@@ -15,13 +15,13 @@
// specific language governing permissions and limitations
// under the License.
-import { browser } from '$app/environment';
+import { browser } from '$app/env';
import { goto } from '$app/navigation';
import { resolve } from '$app/paths';
-import { clientApi } from '$lib/api/clientApi';
-import { authStore } from '$lib/auth/authStore.svelte';
-import { userDetailsMapper } from '$lib/domain/UserDetails';
-import { typedRoute } from '$lib/types/appRoutes';
+import { clientApi } from '#lib/api/clientApi.js';
+import { authStore } from '#lib/auth/authStore.svelte.js';
+import { userDetailsMapper } from '#lib/domain/UserDetails.js';
+import { typedRoute } from '#lib/types/appRoutes.js';
import { jwtDecode } from 'jwt-decode';
import type { LayoutLoad } from './$types';
@@ -32,7 +32,7 @@ export const load: LayoutLoad = async () => {
const token = authStore.getAccessToken();
if (browser && !token) {
- goto(resolve(typedRoute('/auth/sign-in')));
+ goto(resolve(typedRoute('auth/sign-in')));
return { user: null };
}
diff --git a/web/src/routes/dashboard/overview/+page.ts b/web/src/routes/dashboard/overview/+page.ts
index 2c7aaf89d..f1ad24d01 100644
--- a/web/src/routes/dashboard/overview/+page.ts
+++ b/web/src/routes/dashboard/overview/+page.ts
@@ -15,8 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-import { clientApi } from '$lib/api/clientApi';
-import { statsMapper } from '$lib/domain/Stats';
+import { clientApi } from '#lib/api/clientApi.js';
+import { statsMapper } from '#lib/domain/Stats.js';
import type { PageLoad } from './$types';
export const load: PageLoad = async () => {
diff --git a/web/src/routes/dashboard/settings/server/+page.svelte b/web/src/routes/dashboard/settings/server/+page.svelte
index d1d26971d..b42904235 100644
--- a/web/src/routes/dashboard/settings/server/+page.svelte
+++ b/web/src/routes/dashboard/settings/server/+page.svelte
@@ -18,11 +18,11 @@ under the License.
-->
<script lang="ts">
- import Button from '$lib/components/Button.svelte';
- import SettingsLayout from '$lib/components/Layouts/SettingsLayout.svelte';
+ import Button from '#lib/components/Button.svelte';
+ import SettingsLayout from '#lib/components/Layouts/SettingsLayout.svelte';
- import RangeInput from '$lib/components/RangeInput.svelte';
- import Toggler from '$lib/components/Toggler.svelte';
+ import RangeInput from '#lib/components/RangeInput.svelte';
+ import Toggler from '#lib/components/Toggler.svelte';
interface Props {
data: any;
diff --git a/web/src/routes/dashboard/settings/server/+page.ts b/web/src/routes/dashboard/settings/server/+page.ts
index 257416ba8..ae46aca10 100644
--- a/web/src/routes/dashboard/settings/server/+page.ts
+++ b/web/src/routes/dashboard/settings/server/+page.ts
@@ -15,8 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-import { clientApi } from '$lib/api/clientApi';
-import { statsMapper } from '$lib/domain/Stats';
+import { clientApi } from '#lib/api/clientApi.js';
+import { statsMapper } from '#lib/domain/Stats.js';
import type { PageLoad } from './$types';
export const load: PageLoad = async () => {
diff --git a/web/src/routes/dashboard/settings/terminal/+page.svelte b/web/src/routes/dashboard/settings/terminal/+page.svelte
index 272007565..3615f077d 100644
--- a/web/src/routes/dashboard/settings/terminal/+page.svelte
+++ b/web/src/routes/dashboard/settings/terminal/+page.svelte
@@ -18,7 +18,7 @@ under the License.
-->
<script>
- import SettingsLayout from '$lib/components/Layouts/SettingsLayout.svelte';
+ import SettingsLayout from '#lib/components/Layouts/SettingsLayout.svelte';
</script>
<SettingsLayout>terminal</SettingsLayout>
diff --git a/web/src/routes/dashboard/settings/users/+page.svelte b/web/src/routes/dashboard/settings/users/+page.svelte
index 1e958a41c..304de6f73 100644
--- a/web/src/routes/dashboard/settings/users/+page.svelte
+++ b/web/src/routes/dashboard/settings/users/+page.svelte
@@ -25,17 +25,17 @@ under the License.
</script>
<script lang="ts">
- import SlimSortableList from '$lib/components/SlimSortableList.svelte';
- import Checkbox from '$lib/components/Checkbox.svelte';
+ import SlimSortableList from '#lib/components/SlimSortableList.svelte';
+ import Checkbox from '#lib/components/Checkbox.svelte';
import { twMerge } from 'tailwind-merge';
- import Button from '$lib/components/Button.svelte';
- import Icon, { type iconType } from '$lib/components/Icon.svelte';
- import DropdownMenu from '$lib/components/DropdownMenu/DropdownMenu.svelte';
- import StopPropagation from '$lib/components/StopPropagation.svelte';
- import { openModal } from '$lib/components/Modals/AppModals.svelte';
- import SettingsLayout from '$lib/components/Layouts/SettingsLayout.svelte';
+ import Button from '#lib/components/Button.svelte';
+ import Icon, { type iconType } from '#lib/components/Icon.svelte';
+ import DropdownMenu from '#lib/components/DropdownMenu/DropdownMenu.svelte';
+ import StopPropagation from '#lib/components/StopPropagation.svelte';
+ import { openModal } from '#lib/components/Modals/AppModals.svelte';
+ import SettingsLayout from '#lib/components/Layouts/SettingsLayout.svelte';
import { fade } from 'svelte/transition';
- import Input from '$lib/components/Input.svelte';
+ import Input from '#lib/components/Input.svelte';
interface Props {
data: any;
diff --git a/web/src/routes/dashboard/settings/users/+page.ts b/web/src/routes/dashboard/settings/users/+page.ts
index c671eca6f..8099a1102 100644
--- a/web/src/routes/dashboard/settings/users/+page.ts
+++ b/web/src/routes/dashboard/settings/users/+page.ts
@@ -15,10 +15,10 @@
// specific language governing permissions and limitations
// under the License.
-import { clientApi } from '$lib/api/clientApi';
-import { streamListMapper } from '$lib/domain/Stream';
-import { streamDetailsMapper } from '$lib/domain/StreamDetails';
-import { userMapper, type User } from '$lib/domain/User';
+import { clientApi } from '#lib/api/clientApi.js';
+import { streamListMapper } from '#lib/domain/Stream.js';
+import { streamDetailsMapper } from '#lib/domain/StreamDetails.js';
+import { userMapper, type User } from '#lib/domain/User.js';
import type { PageLoad } from './$types';
export const load: PageLoad = async () => {
diff --git a/web/src/routes/dashboard/settings/webUI/+page.svelte b/web/src/routes/dashboard/settings/webUI/+page.svelte
index 307a1363b..1123e05be 100644
--- a/web/src/routes/dashboard/settings/webUI/+page.svelte
+++ b/web/src/routes/dashboard/settings/webUI/+page.svelte
@@ -18,11 +18,11 @@ under the License.
-->
<script lang="ts">
- import Button from '$lib/components/Button.svelte';
- import Input from '$lib/components/Input.svelte';
- import SettingsLayout from '$lib/components/Layouts/SettingsLayout.svelte';
- import { invalidateIntervalDuration } from '$lib/components/PeriodicInvalidator.svelte';
- import { durationFormatter } from '$lib/utils/formatters/durationFormatter';
+ import Button from '#lib/components/Button.svelte';
+ import Input from '#lib/components/Input.svelte';
+ import SettingsLayout from '#lib/components/Layouts/SettingsLayout.svelte';
+ import { invalidateIntervalDuration } from '#lib/components/PeriodicInvalidator.svelte';
+ import { durationFormatter } from '#lib/utils/formatters/durationFormatter.js';
let intervalValue = $state($invalidateIntervalDuration);
diff --git a/web/src/routes/dashboard/streams/+layout.svelte b/web/src/routes/dashboard/streams/+layout.svelte
index 769ef40f2..d4995ebc7 100644
--- a/web/src/routes/dashboard/streams/+layout.svelte
+++ b/web/src/routes/dashboard/streams/+layout.svelte
@@ -18,14 +18,14 @@ under the License.
-->
<script lang="ts">
- import Icon from '$lib/components/Icon.svelte';
+ import Icon from '#lib/components/Icon.svelte';
import { goto } from '$app/navigation';
import { twMerge } from 'tailwind-merge';
import { page } from '$app/state';
- import { openModal } from '$lib/components/Modals/AppModals.svelte';
- import Button from '$lib/components/Button.svelte';
+ import { openModal } from '#lib/components/Modals/AppModals.svelte';
+ import Button from '#lib/components/Button.svelte';
- import { typedRoute } from '$lib/types/appRoutes';
+ import { typedRoute } from '#lib/types/appRoutes.js';
import { onMount } from 'svelte';
import { resolve } from '$app/paths';
@@ -41,11 +41,8 @@ under the License.
let filteredData = $derived(data.streams.filter((stream) => stream.name.includes(searchQuery)));
onMount(() => {
- if (
- data.streams.length > 0 &&
- page.url.pathname === resolve(typedRoute('/dashboard/streams'))
- ) {
- goto(resolve(typedRoute(`/dashboard/streams/${data.streams[0].id}`)));
+ if (data.streams.length > 0 && page.url.pathname === resolve(typedRoute('dashboard/streams'))) {
+ goto(resolve(typedRoute(`dashboard/streams/${data.streams[0].id}`)));
}
});
</script>
@@ -72,7 +69,7 @@ under the License.
{@const isActive = page.params.streamId === id.toString()}
<li class="last:mb-6">
<a
- href={resolve(typedRoute(`/dashboard/streams/${id}`))}
+ href={resolve(typedRoute(`dashboard/streams/${id}`))}
class={twMerge(
'flex w-full flex-col border-b gap-1 px-5 py-2 transition-colors outline-hidden dark:text-white hoverable',
isActive && 'bg-shade-l300 dark:bg-shade-d300'
diff --git a/web/src/routes/dashboard/streams/+layout.ts b/web/src/routes/dashboard/streams/+layout.ts
index b340bfa9b..0f906eaa7 100644
--- a/web/src/routes/dashboard/streams/+layout.ts
+++ b/web/src/routes/dashboard/streams/+layout.ts
@@ -15,8 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-import { clientApi } from '$lib/api/clientApi';
-import { streamMapper, type Stream } from '$lib/domain/Stream';
+import { clientApi } from '#lib/api/clientApi.js';
+import { streamMapper, type Stream } from '#lib/domain/Stream.js';
import type { LayoutLoad } from './$types';
export const load: LayoutLoad = async () => {
diff --git a/web/src/routes/dashboard/streams/[streamId=i32]/+page.svelte b/web/src/routes/dashboard/streams/[streamId=i32]/+page.svelte
index 041f0de6d..648376f68 100644
--- a/web/src/routes/dashboard/streams/[streamId=i32]/+page.svelte
+++ b/web/src/routes/dashboard/streams/[streamId=i32]/+page.svelte
@@ -20,12 +20,12 @@ under the License.
<script lang="ts">
import { page } from '$app/state';
import { resolve } from '$app/paths';
- import Button from '$lib/components/Button.svelte';
- import Icon from '$lib/components/Icon.svelte';
- import { openModal } from '$lib/components/Modals/AppModals.svelte';
- import SortableList from '$lib/components/SortableList.svelte';
- import { typedRoute } from '$lib/types/appRoutes';
- import type { StreamDetails } from '$lib/domain/StreamDetails';
+ import Button from '#lib/components/Button.svelte';
+ import Icon from '#lib/components/Icon.svelte';
+ import { openModal } from '#lib/components/Modals/AppModals.svelte';
+ import SortableList from '#lib/components/SortableList.svelte';
+ import { typedRoute } from '#lib/types/appRoutes.js';
+ import type { StreamDetails } from '#lib/domain/StreamDetails.js';
interface Props {
data: {
@@ -86,7 +86,7 @@ under the License.
rowClass="grid grid-cols-[150px_3fr_2fr_2fr_2fr_2fr_3fr]"
data={stream.topics}
hrefBuilder={(topic) =>
- resolve(typedRoute(`/dashboard/streams/${+(page.params.streamId || '')}/topics/${topic.id}`))}
+ resolve(typedRoute(`dashboard/streams/${+(page.params.streamId || '')}/topics/${topic.id}`))}
colNames={{
id: 'ID',
name: 'Name',
diff --git a/web/src/routes/dashboard/streams/[streamId=i32]/+page.ts b/web/src/routes/dashboard/streams/[streamId=i32]/+page.ts
index 5d6cd6acc..34ebfe3aa 100644
--- a/web/src/routes/dashboard/streams/[streamId=i32]/+page.ts
+++ b/web/src/routes/dashboard/streams/[streamId=i32]/+page.ts
@@ -15,8 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-import { clientApi } from '$lib/api/clientApi';
-import { streamDetailsMapper } from '$lib/domain/StreamDetails';
+import { clientApi } from '#lib/api/clientApi.js';
+import { streamDetailsMapper } from '#lib/domain/StreamDetails.js';
import type { PageLoad } from './$types';
export const load: PageLoad = async ({ params }) => {
diff --git a/web/src/routes/dashboard/streams/[streamId=i32]/topics/+page.svelte b/web/src/routes/dashboard/streams/[streamId=i32]/topics/+page.svelte
index 6e88d6765..6a91fb943 100644
--- a/web/src/routes/dashboard/streams/[streamId=i32]/topics/+page.svelte
+++ b/web/src/routes/dashboard/streams/[streamId=i32]/topics/+page.svelte
@@ -19,11 +19,11 @@ under the License.
<script>
import { goto } from '$app/navigation';
- import { typedRoute } from '$lib/types/appRoutes';
+ import { typedRoute } from '#lib/types/appRoutes.js';
import { onMount } from 'svelte';
import { resolve } from '$app/paths';
onMount(() => {
- goto(resolve(typedRoute('/dashboard/streams')));
+ goto(resolve(typedRoute('dashboard/streams')));
});
</script>
diff --git a/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/+page.svelte b/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/+page.svelte
index c151d1157..fd6ce78fe 100644
--- a/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/+page.svelte
+++ b/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/+page.svelte
@@ -19,15 +19,15 @@ under the License.
<script lang="ts">
import { page } from '$app/state';
- import Button from '$lib/components/Button.svelte';
- import Icon from '$lib/components/Icon.svelte';
+ import Button from '#lib/components/Button.svelte';
+ import Icon from '#lib/components/Icon.svelte';
import { goto } from '$app/navigation';
import { resolve } from '$app/paths';
- import { typedRoute } from '$lib/types/appRoutes';
- import { openModal } from '$lib/components/Modals/AppModals.svelte';
- import SortableList from '$lib/components/SortableList.svelte';
- import type { Topic } from '$lib/domain/Topic';
- import type { Partition } from '$lib/domain/Partition';
+ import { typedRoute } from '#lib/types/appRoutes.js';
+ import { openModal } from '#lib/components/Modals/AppModals.svelte';
+ import SortableList from '#lib/components/SortableList.svelte';
+ import type { Topic } from '#lib/domain/Topic.js';
+ import type { Partition } from '#lib/domain/Partition.js';
interface Props {
data: {
@@ -39,7 +39,7 @@ under the License.
let { data }: Props = $props();
let topic = $derived(data.topic);
- let prevPage = $derived(typedRoute(`/dashboard/streams/${+(page.params.streamId || '')}`));
+ let prevPage = $derived(typedRoute(`dashboard/streams/${+(page.params.streamId || '')}`));
</script>
<div class="h-[80px] flex text-xs items-center pl-2 pr-5">
@@ -94,7 +94,7 @@ under the License.
hrefBuilder={(partition) =>
resolve(
typedRoute(
- `/dashboard/streams/${+(page.params.streamId || '')}/topics/${topic.id}/partitions/${partition.id}/messages`
+ `dashboard/streams/${+(page.params.streamId || '')}/topics/${topic.id}/partitions/${partition.id}/messages`
)
)}
colNames={{
diff --git a/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/+page.ts b/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/+page.ts
index 0211f8123..816f47824 100644
--- a/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/+page.ts
+++ b/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/+page.ts
@@ -15,8 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-import { clientApi } from '$lib/api/clientApi';
-import { topicDetailsMapper } from '$lib/domain/TopicDetails';
+import { clientApi } from '#lib/api/clientApi.js';
+import { topicDetailsMapper } from '#lib/domain/TopicDetails.js';
import type { PageLoad } from './$types';
export const load: PageLoad = async ({ params }) => {
diff --git a/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/partitions/[partitionId=i32]/+page.svelte b/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/partitions/[partitionId=i32]/+page.svelte
index 6e88d6765..6a91fb943 100644
--- a/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/partitions/[partitionId=i32]/+page.svelte
+++ b/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/partitions/[partitionId=i32]/+page.svelte
@@ -19,11 +19,11 @@ under the License.
<script>
import { goto } from '$app/navigation';
- import { typedRoute } from '$lib/types/appRoutes';
+ import { typedRoute } from '#lib/types/appRoutes.js';
import { onMount } from 'svelte';
import { resolve } from '$app/paths';
onMount(() => {
- goto(resolve(typedRoute('/dashboard/streams')));
+ goto(resolve(typedRoute('dashboard/streams')));
});
</script>
diff --git a/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/partitions/[partitionId=i32]/messages/+page.svelte b/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/partitions/[partitionId=i32]/messages/+page.svelte
index 9689dc410..658ae5668 100644
--- a/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/partitions/[partitionId=i32]/messages/+page.svelte
+++ b/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/partitions/[partitionId=i32]/messages/+page.svelte
@@ -19,15 +19,15 @@ under the License.
<script lang="ts">
import { page } from '$app/state';
- import Button from '$lib/components/Button.svelte';
- import Icon from '$lib/components/Icon.svelte';
+ import Button from '#lib/components/Button.svelte';
+ import Icon from '#lib/components/Icon.svelte';
import { goto } from '$app/navigation';
import { resolve } from '$app/paths';
- import { openModal } from '$lib/components/Modals/AppModals.svelte';
- import SortableList from '$lib/components/SortableList.svelte';
- import Paginator from '$lib/components/Paginator.svelte';
- import type { MessagePartition } from '$lib/domain/Message';
- import type { TopicDetails } from '$lib/domain/TopicDetails';
+ import { openModal } from '#lib/components/Modals/AppModals.svelte';
+ import SortableList from '#lib/components/SortableList.svelte';
+ import Paginator from '#lib/components/Paginator.svelte';
+ import type { MessagePartition } from '#lib/domain/Message.js';
+ import type { TopicDetails } from '#lib/domain/TopicDetails.js';
import { SvelteURLSearchParams } from 'svelte/reactivity';
interface Props {
@@ -65,16 +65,11 @@ under the License.
searchParams.set('offset', offset.toString());
searchParams.set('direction', direction);
- // TODO: https://github.com/sveltejs/kit/issues/14750
await goto(
- // eslint-disable-next-line svelte/no-navigation-without-resolve
resolve(
- `/dashboard/streams/${page.params.streamId}/topics/${page.params.topicId}/partitions/${page.params.partitionId}/messages`
+ `dashboard/streams/${page.params.streamId}/topics/${page.params.topicId}/partitions/${page.params.partitionId}/messages`
) + `?${searchParams}`,
- {
- keepFocus: true,
- noScroll: true
- }
+ { reset: false }
);
currentPage = pageNum;
}
@@ -95,7 +90,7 @@ under the License.
variant="rounded"
class="mr-5"
onclick={() =>
- goto(resolve(`/dashboard/streams/${page.params.streamId}/topics/${page.params.topicId}`))}
+ goto(resolve(`dashboard/streams/${page.params.streamId}/topics/${page.params.topicId}`))}
>
<Icon name="arrowLeft" class="h-[40px] w-[30px]" />
</Button>
diff --git a/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/partitions/[partitionId=i32]/messages/+page.ts b/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/partitions/[partitionId=i32]/messages/+page.ts
index 541ab0cd0..e60a70ad1 100644
--- a/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/partitions/[partitionId=i32]/messages/+page.ts
+++ b/web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/partitions/[partitionId=i32]/messages/+page.ts
@@ -15,9 +15,9 @@
// specific language governing permissions and limitations
// under the License.
-import { clientApi } from '$lib/api/clientApi';
-import { partitionMessagesDetailsMapper } from '$lib/domain/MessageDetails';
-import { topicDetailsMapper } from '$lib/domain/TopicDetails';
+import { clientApi } from '#lib/api/clientApi.js';
+import { partitionMessagesDetailsMapper } from '#lib/domain/MessageDetails.js';
+import { topicDetailsMapper } from '#lib/domain/TopicDetails.js';
import type { PageLoad } from './$types';
const MESSAGES_PER_PAGE = 20;
diff --git a/web/svelte.config.js b/web/svelte.config.js
deleted file mode 100644
index 500f27940..000000000
--- a/web/svelte.config.js
+++ /dev/null
@@ -1,46 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-import adapterNode from '@sveltejs/adapter-node';
-import adapterStatic from '@sveltejs/adapter-static';
-import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
-
-// Use static adapter when STATIC_BUILD env is set (for embedding in Rust server)
-const useStaticAdapter = process.env.STATIC_BUILD === 'true';
-
-/** @type {import('@sveltejs/kit').Config} */
-const config = {
- kit: {
- adapter: useStaticAdapter
- ? adapterStatic({
- pages: 'build/static',
- assets: 'build/static',
- fallback: 'index.html'
- })
- : adapterNode({
- out: 'build'
- }),
- paths: {
- base: useStaticAdapter ? '/ui' : ''
- },
- csrf: {
- trustedOrigins: ['*']
- }
- },
- preprocess: vitePreprocess()
-};
-export default config;
diff --git a/web/tsconfig.json b/web/tsconfig.json
index b7b36cdf6..276622fff 100644
--- a/web/tsconfig.json
+++ b/web/tsconfig.json
@@ -1,19 +1,10 @@
{
- "extends": "./.svelte-kit/tsconfig.json",
+ "extends": "$app/tsconfig",
"compilerOptions": {
- "allowJs": true,
- "checkJs": true,
"noImplicitAny": false,
- "esModuleInterop": true,
- "forceConsistentCasingInFileNames": true,
- "resolveJsonModule": true,
- "skipLibCheck": true,
"sourceMap": true,
"strict": true,
"noErrorTruncation": true
- }
- // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
- //
- // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
- // from the referenced tsconfig.json - TypeScript does not merge them in
+ },
+ "include": ["src", "vite.config.ts"]
}
diff --git a/web/vite.config.ts b/web/vite.config.ts
index cf5404a8d..9976aa75f 100644
--- a/web/vite.config.ts
+++ b/web/vite.config.ts
@@ -15,11 +15,16 @@
// specific language governing permissions and limitations
// under the License.
+import adapterNode from '@sveltejs/adapter-node';
+import adapterStatic from '@sveltejs/adapter-static';
import { sveltekit } from '@sveltejs/kit/vite';
+import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
import { defineConfig } from 'vite';
+// Use static adapter when STATIC_BUILD env is set (for embedding in Rust server)
+const useStaticAdapter = process.env.STATIC_BUILD === 'true';
+
export default defineConfig({
- base: '/',
preview: {
port: 3050,
strictPort: true,
@@ -27,10 +32,28 @@ export default defineConfig({
allowedHosts: true
},
build: {
- outDir: '../dist',
- emptyOutDir: true
+ outDir: '../dist'
},
- plugins: [sveltekit()],
+ plugins: [
+ sveltekit({
+ preprocess: vitePreprocess(),
+ adapter: useStaticAdapter
+ ? adapterStatic({
+ pages: 'build/static',
+ assets: 'build/static',
+ fallback: 'index.html'
+ })
+ : adapterNode({
+ out: 'build'
+ }),
+ paths: {
+ base: useStaticAdapter ? '/ui' : ''
+ },
+ csrf: {
+ trustedOrigins: ['*']
+ }
+ })
+ ],
define: {
SUPERFORMS_LEGACY: true
}