From fdd48bf44f496b6b708c65c5612580c81c695428 Mon Sep 17 00:00:00 2001 From: Exelo Date: Sun, 7 Jun 2026 19:29:56 +0900 Subject: [PATCH] feat: add class validator on actions bodies --- package.json | 2 + pnpm-lock.yaml | 594 ++++++++++++------ pnpm-workspace.yaml | 13 +- .../server/actions/project/complete.action.ts | 14 + .../actions/project/fs/readdir.action.ts | 6 + src/lib/server/actions/project/info.action.ts | 6 + .../project/library/install-library.action.ts | 6 + src/lib/server/actions/project/load.action.ts | 17 + src/lib/server/actions/project/new.action.ts | 37 ++ .../project/package/add-components.action.ts | 6 + .../project/package/add-systems.action.ts | 6 + .../package/create-component.action.ts | 6 + .../project/package/create-system.action.ts | 6 + .../get-components-manifests.action.ts | 6 + .../package/get-systems-manifests.action.ts | 6 + .../actions/project/save/set-save.action.ts | 6 + .../utils/request-handler/action-handler.ts | 4 +- src/lib/server/utils/request-handler/body.ts | 26 +- src/lib/server/utils/validators/index.ts | 1 + .../is-string-or-false.validator.ts | 20 + tsconfig.json | 3 +- 21 files changed, 582 insertions(+), 209 deletions(-) create mode 100644 src/lib/server/utils/validators/index.ts create mode 100644 src/lib/server/utils/validators/is-string-or-false.validator.ts diff --git a/package.json b/package.json index b2b0d26..044b51a 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,8 @@ "dependencies": { "@nanoforge-dev/schematics": "^2.1.3", "bun": "catalog:core", + "class-transformer": "catalog:libs-back", + "class-validator": "catalog:libs-back", "dotenv": "catalog:libs-back", "typescript": "catalog:build" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 31dd70b..302196a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,11 +43,11 @@ catalogs: version: 0.55.1 core: '@nanoforge-dev/ecs-lib': - specifier: ^1.3.0 - version: 1.3.0 + specifier: ^1.3.1 + version: 1.3.1 '@sveltejs/kit': - specifier: ^2.62.0 - version: 2.62.0 + specifier: ^2.63.0 + version: 2.63.0 '@sveltejs/vite-plugin-svelte': specifier: ^7.1.2 version: 7.1.2 @@ -58,11 +58,11 @@ catalogs: specifier: ^1.3.14 version: 1.3.14 svelte: - specifier: ^5.56.1 - version: 5.56.1 + specifier: ^5.56.2 + version: 5.56.2 svelte-check: - specifier: ^4.5.0 - version: 4.5.0 + specifier: ^4.6.0 + version: 4.6.0 svelte-kit-sessions: specifier: ^0.4.0 version: 0.4.0 @@ -121,6 +121,12 @@ catalogs: specifier: ^1.17.0 version: 1.17.0 libs-back: + class-transformer: + specifier: ^0.5.1 + version: 0.5.1 + class-validator: + specifier: ^0.15.1 + version: 0.15.1 dotenv: specifier: ^17.4.2 version: 17.4.2 @@ -204,6 +210,12 @@ importers: bun: specifier: catalog:core version: 1.3.14 + class-transformer: + specifier: catalog:libs-back + version: 0.5.1 + class-validator: + specifier: catalog:libs-back + version: 0.15.1 dotenv: specifier: catalog:libs-back version: 17.4.2 @@ -216,7 +228,7 @@ importers: version: 0.0.4 '@commitlint/cli': specifier: catalog:ci - version: 21.0.2(@types/node@25.9.1)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3) + version: 21.0.2(@types/node@25.9.2)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3) '@commitlint/config-conventional': specifier: catalog:ci version: 21.0.2 @@ -246,13 +258,13 @@ importers: version: 3.12.2 '@lucide/svelte': specifier: catalog:icons - version: 1.17.0(svelte@5.56.1(@typescript-eslint/types@8.60.1)) + version: 1.17.0(svelte@5.56.2(@typescript-eslint/types@8.60.1)) '@nanoforge-dev/actions': specifier: catalog:ci version: 2.1.3 '@nanoforge-dev/ecs-lib': specifier: catalog:core - version: 1.3.0 + version: 1.3.1 '@nanoforge-dev/utils-eslint-config': specifier: catalog:lint version: 1.0.2(@types/eslint@9.6.1)(eslint@10.4.1(jiti@2.7.0))(prettier@3.8.3)(typescript@6.0.3) @@ -264,16 +276,16 @@ importers: version: 1.60.0 '@sveltejs/kit': specifier: catalog:core - version: 2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + version: 2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)) '@sveltejs/vite-plugin-svelte': specifier: catalog:core - version: 7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + version: 7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)) '@tanstack/svelte-query': specifier: catalog:libs-front - version: 6.1.34(svelte@5.56.1(@typescript-eslint/types@8.60.1)) + version: 6.1.34(svelte@5.56.2(@typescript-eslint/types@8.60.1)) '@trivago/prettier-plugin-sort-imports': specifier: catalog:lint - version: 6.0.2(prettier-plugin-svelte@4.1.0(prettier@3.8.3)(svelte@5.56.1(@typescript-eslint/types@8.60.1)))(prettier@3.8.3)(svelte@5.56.1(@typescript-eslint/types@8.60.1)) + version: 6.0.2(prettier-plugin-svelte@4.1.0(prettier@3.8.3)(svelte@5.56.2(@typescript-eslint/types@8.60.1)))(prettier@3.8.3)(svelte@5.56.2(@typescript-eslint/types@8.60.1)) '@tsconfig/svelte': specifier: catalog:build version: 5.0.8 @@ -294,13 +306,13 @@ importers: version: 66.7.0 '@vitest/browser-playwright': specifier: catalog:test - version: 4.1.8(playwright@1.60.0)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.8) + version: 4.1.8(playwright@1.60.0)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.8) '@vitest/coverage-v8': specifier: catalog:test version: 4.1.8(@vitest/browser@4.1.8)(vitest@4.1.8) bits-ui: specifier: catalog:components - version: 2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1)) + version: 2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1)) clsx: specifier: catalog:css version: 2.1.1 @@ -309,10 +321,10 @@ importers: version: 10.4.1(jiti@2.7.0) eslint-plugin-svelte: specifier: catalog:lint - version: 3.19.0(eslint@10.4.1(jiti@2.7.0))(svelte@5.56.1(@typescript-eslint/types@8.60.1)) + version: 3.19.0(eslint@10.4.1(jiti@2.7.0))(svelte@5.56.2(@typescript-eslint/types@8.60.1)) formsnap: specifier: catalog:libs-front - version: 2.0.1(svelte@5.56.1(@typescript-eslint/types@8.60.1))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)) + version: 2.0.1(svelte@5.56.2(@typescript-eslint/types@8.60.1))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)) globals: specifier: catalog:lint version: 17.6.0 @@ -324,7 +336,7 @@ importers: version: 17.0.7 mode-watcher: specifier: catalog:libs-front - version: 1.1.0(svelte@5.56.1(@typescript-eslint/types@8.60.1)) + version: 1.1.0(svelte@5.56.2(@typescript-eslint/types@8.60.1)) monaco-editor: specifier: catalog:components version: 0.55.1 @@ -336,25 +348,25 @@ importers: version: 3.8.3 prettier-plugin-svelte: specifier: catalog:lint - version: 4.1.0(prettier@3.8.3)(svelte@5.56.1(@typescript-eslint/types@8.60.1)) + version: 4.1.0(prettier@3.8.3)(svelte@5.56.2(@typescript-eslint/types@8.60.1)) svelte: specifier: catalog:core - version: 5.56.1(@typescript-eslint/types@8.60.1) + version: 5.56.2(@typescript-eslint/types@8.60.1) svelte-adapter-bun: specifier: catalog:build - version: 1.0.1(@sveltejs/kit@2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(typescript@6.0.3) + version: 1.0.1(@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(typescript@6.0.3) svelte-check: specifier: catalog:core - version: 4.5.0(picomatch@4.0.4)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3) + version: 4.6.0(picomatch@4.0.4)(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3) svelte-kit-sessions: specifier: catalog:core - version: 0.4.0(@sveltejs/kit@2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1)) + version: 0.4.0(@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1)) svelte-sonner: specifier: catalog:libs-front - version: 1.1.1(svelte@5.56.1(@typescript-eslint/types@8.60.1)) + version: 1.1.1(svelte@5.56.2(@typescript-eslint/types@8.60.1)) sveltekit-superforms: specifier: catalog:libs-front - version: 2.30.1(@sveltejs/kit@2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3) + version: 2.30.1(@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3) tailwind-merge: specifier: catalog:css version: 3.6.0 @@ -369,16 +381,16 @@ importers: version: 8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3) unocss: specifier: catalog:css - version: 66.7.0(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + version: 66.7.0(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)) vite: specifier: catalog:core - version: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0) + version: 8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0) vitest: specifier: catalog:test - version: 4.1.8(@types/node@25.9.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-v8@4.1.8)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + version: 4.1.8(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-v8@4.1.8)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)) vitest-browser-svelte: specifier: catalog:test - version: 2.1.1(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8) + version: 2.1.1(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vitest@4.1.8) zod: specifier: catalog:libs-front version: 4.4.3 @@ -732,12 +744,12 @@ packages: resolution: {integrity: sha512-eOuQ5q0gFylFrj//77c7PWCKAcX0GRKM7fAQiiExOnUxnuYWQGu4DIL3LMXsjDNAVMRgK3BMk0C1QivEPUN5Dg==} engines: {node: '25'} - '@nanoforge-dev/common@1.3.0': - resolution: {integrity: sha512-MpgZ/fsGpzD2ccsAAqR9iuvdZfVojGASfu0fi2Y3/UQaRcEpStqmWtgMsry4jtaf0wXPWHMMLw9Ses/0TfvWeg==} + '@nanoforge-dev/common@1.3.1': + resolution: {integrity: sha512-Nl+kzkdYiiw9hml9O9CsQd6S3VcOr8L9hLzamqXti8+xgYUqblsPJMq+w0vThOA/LinenX0QuuxYrVTkNZflvw==} engines: {node: '25'} - '@nanoforge-dev/ecs-lib@1.3.0': - resolution: {integrity: sha512-FZozPG9VrJRX/Pydl+iDflBWuIOlPLkiBuQu7cRNt+owJJ3iBU6sdSqwvXa4UxySjIJqij9pNaWyXOHQCl9Fjw==} + '@nanoforge-dev/ecs-lib@1.3.1': + resolution: {integrity: sha512-js4VQOri4S6w1Fh1Lk2O5ruxciP/QZCPppOx6YnF/VqgjYgn1GgHfqcxiBE9NxJT4SDi5O8KS4kd65Pj/0oc0A==} engines: {node: '25'} '@nanoforge-dev/schematics@2.1.3': @@ -1019,6 +1031,9 @@ packages: '@oxc-project/types@0.133.0': resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} + '@oxc-project/types@0.134.0': + resolution: {integrity: sha512-T0xuRRKrQFmocH8y+jGfpmSkGcheaJExY9lEihmR1Gm2aH+75B8CzgU2rABRQSzzDxLjZ15Sc0bRVLj5lVeNXQ==} + '@oxfmt/binding-android-arm-eabi@0.35.0': resolution: {integrity: sha512-BaRKlM3DyG81y/xWTsE6gZiv89F/3pHe2BqX2H4JbiB8HNVlWWtplzgATAE5IDSdwChdeuWLDTQzJ92Lglw3ZA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1165,30 +1180,60 @@ packages: cpu: [arm64] os: [android] + '@rolldown/binding-android-arm64@1.1.0': + resolution: {integrity: sha512-gCYzGOSkYY6Z034suzd20euvds7lPzMEEla62DJGE/ZAlR4OMBnNbvnBSsIGUCAr52gaWMsloGxP4tVGtN5aCA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + '@rolldown/binding-darwin-arm64@1.0.3': resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] + '@rolldown/binding-darwin-arm64@1.1.0': + resolution: {integrity: sha512-JQBD77MNgu+4Z6RAyg69acugdrhhVoWesr3l47zohYZ2YV2fwkWMArkN/2p4l6Ei+Sno7W5q+UsKdVWq5Ens0w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + '@rolldown/binding-darwin-x64@1.0.3': resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] + '@rolldown/binding-darwin-x64@1.1.0': + resolution: {integrity: sha512-p/8cXUTK4Sob604e+xxPhVSbDFf29E6J0l/xESM9rdCfn3aDai3nEs6TnMHUsdD5aNlFz0+gDbiGlozLKGa2YA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + '@rolldown/binding-freebsd-x64@1.0.3': resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] + '@rolldown/binding-freebsd-x64@1.1.0': + resolution: {integrity: sha512-KbtOSlVv6fElujiZWMcC3aQYhEwLVVf073RcwlSmpGQvIsKZFUqc0ef4sjUuurRwfbiI6JJXji9DQn+86hawmQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] + '@rolldown/binding-linux-arm-gnueabihf@1.1.0': + resolution: {integrity: sha512-9fZ9i0o0/MQaw7om6Z6TsT7tfCk0jtbEFtC+aPqZL5RNsGWNcHvn6EHgL3dAprjq+AZzPTAQjg2JtpJaMt+6pg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@rolldown/binding-linux-arm64-gnu@1.0.3': resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1196,6 +1241,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-arm64-gnu@1.1.0': + resolution: {integrity: sha512-+tog7T66i+yFyIuuAnjL6xmW182W/qTBOUt6BtQ6lBIM1Eikh/fSMz4HGgvuCp5uU0zuIVWng7kDYthjCMOHcg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-arm64-musl@1.0.3': resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1203,6 +1255,13 @@ packages: os: [linux] libc: [musl] + '@rolldown/binding-linux-arm64-musl@1.1.0': + resolution: {integrity: sha512-4b7yruLIIj/oZ3GpcLOvxcLCLDMraohn3IhQfN2hBP4w9UekG0DTIajWguJosRGfySf/+h/NwRUiMKoCpxCrqQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + '@rolldown/binding-linux-ppc64-gnu@1.0.3': resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1210,6 +1269,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-ppc64-gnu@1.1.0': + resolution: {integrity: sha512-QRDOVZd0bhQ5jLsUsCC3dUxDWdTSVY9WMznowZgCGOrZfLLgctWpelhUASEiBwsXfat/JwYnVd1EaxMhqyT+UQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-s390x-gnu@1.0.3': resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1217,6 +1283,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-s390x-gnu@1.1.0': + resolution: {integrity: sha512-ypxT+Hq76NFG7woFbNbySnGEajFuYuIXeKz/jfCU+lXUoxfi3zLE6OG/ZQNeK3RpZSYJlAe2bokpsQ046CaieQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-x64-gnu@1.0.3': resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1224,6 +1297,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-x64-gnu@1.1.0': + resolution: {integrity: sha512-IdovCmfROFmpTLahdecTDFL74aLERVYN68F/mLZjfVh6LfoplPfI6deyHNMTcVujbokDV5k05XrFO22zfv+qjg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-x64-musl@1.0.3': resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1231,29 +1311,59 @@ packages: os: [linux] libc: [musl] + '@rolldown/binding-linux-x64-musl@1.1.0': + resolution: {integrity: sha512-pcA8xlFp2tyk9T2R6Fi/rPe3bQ1MA+sSMDNUU5Ogu80GHOatkE4P8YCreGAvZErm5Ho2YRXnyvNrWiRncfVysQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + '@rolldown/binding-openharmony-arm64@1.0.3': resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] + '@rolldown/binding-openharmony-arm64@1.1.0': + resolution: {integrity: sha512-4+fexHayrLCWpriPh4c6dNvL4an34DEZCG7zOM/FD5QNF6h8DT+bDXzyB/kfC8lDJbaFb7jKShtnjDQFXVQEjg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + '@rolldown/binding-wasm32-wasi@1.0.3': resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] + '@rolldown/binding-wasm32-wasi@1.1.0': + resolution: {integrity: sha512-SbL++MNmOw6QamrwIGDMSSfM4ceTzFr+RjbOExJSLLBinScU4WI5OdA413h1qwPw2yH7lVF1+H4svQ+6mSXKTQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + '@rolldown/binding-win32-arm64-msvc@1.0.3': resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] + '@rolldown/binding-win32-arm64-msvc@1.1.0': + resolution: {integrity: sha512-+xTE6XC7wBgk0VKRXGG+QAnyW5S9b8vfsFpiMjf0waQTmSQSU8onsH/beyZ8X4aXVveJnotiy7VDjLOaW8bTrg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + '@rolldown/binding-win32-x64-msvc@1.0.3': resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] + '@rolldown/binding-win32-x64-msvc@1.1.0': + resolution: {integrity: sha512-Ogji1TQNqH3ACLnYr+1Ns1nyrJ0CO2P585u9Hsh02pXvtFiFpgtgT2b3P4PnCOU86VVCvqtAeCN4OftMT8KU4w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} @@ -1304,8 +1414,8 @@ packages: peerDependencies: acorn: ^8.9.0 - '@sveltejs/kit@2.62.0': - resolution: {integrity: sha512-4JlkXGRJ3kW15dL4LCHV3Mu5aSTTtmH8EBNE4QjJl+KLY77dClgAsZg8aebpwFcDXemNP1z9az8EatD2UNWAcQ==} + '@sveltejs/kit@2.63.0': + resolution: {integrity: sha512-1DrR7vQ9brXLrNE2sLtFXApwr7AUXPfpbIFYc+CQRf2+iURaZbXGU+7TG/RLr+9fdFkoRdyCAVUOHCChw11LFA==} engines: {node: '>=18.13'} hasBin: true peerDependencies: @@ -1320,6 +1430,10 @@ packages: typescript: optional: true + '@sveltejs/load-config@0.1.1': + resolution: {integrity: sha512-BXXm+VOH/9X4N7Dd1iZ2MqA1h7M+9i2noI8QYuLDY8QcN2WHYn7D/VK/+IJNfcAmRw7ACNJ538UT9GXIhnBTiA==} + engines: {node: '>= 18.0.0'} + '@sveltejs/vite-plugin-svelte@7.1.2': resolution: {integrity: sha512-DrUBA2UXRfDmUX/ZTiEopd3X40yavsJF1FX2RygcuIScHL7o5YX1fMvoYnDhjeJQC4weCOklirpNWlcb2NiSeA==} engines: {node: ^20.19 || ^22.12 || >=24} @@ -1393,8 +1507,8 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@25.9.1': - resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} + '@types/node@25.9.2': + resolution: {integrity: sha512-G05zqtJhcDLb8uslf5EjCxXg9G1KQxiV8OS0R26IC//Eoyitzqe8z37I7cqvnZlrlSfgocQRfSn/AHBZJJFyGw==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -1753,9 +1867,15 @@ packages: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} + class-transformer@0.5.1: + resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} + class-validator@0.14.4: resolution: {integrity: sha512-AwNusCCam51q703dW82x95tOqQp6oC9HNUl724KxJJOfnKscI8dOloXFgyez7LbTTKWuRBA37FScqVbJEoq8Yw==} + class-validator@0.15.1: + resolution: {integrity: sha512-LqoS80HBBSCVhz/3KloUly0ovokxpdOLR++Al3J3+dHXWt9sTKlKd4eYtoxhxyUjoe5+UcIM+5k9MIxyBWnRTw==} + cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -1937,8 +2057,8 @@ packages: duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - effect@3.21.2: - resolution: {integrity: sha512-rXd2FGDM8KdjSIrc+mqEELo7ScW7xTVxEf1iInmPSpIde9/nyGuFM710cjTo7/EreGXiUX2MOonPpprbz2XHCg==} + effect@3.21.3: + resolution: {integrity: sha512-RqwU7WnJ6CqYhyjpOVJA5vh1Sgkn6eVECO6mnD0EjlbWcC2M3LJaPglXXr13Rdo/Y+B+wTEPzGRYFNL2xKxNeQ==} emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -2068,8 +2188,8 @@ packages: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} - esrap@2.2.10: - resolution: {integrity: sha512-HUTyxhhAQBl1hhsyLlHD1sh9xF6o6vaejzLxK5sge+LzrdEflQPQaNhC+n98d+OVB8v3LCCF+y80x/4bACjjJw==} + esrap@2.2.11: + resolution: {integrity: sha512-gPdx+I+BjYEinNMQaBXFjbaJVyoPMU4ZODg5mE+M4DqVG9VusAVHHjcBX+zqyITlI0DIARwDMMzZwAWj36dRoQ==} peerDependencies: '@typescript-eslint/types': ^8.2.0 peerDependenciesMeta: @@ -2249,8 +2369,8 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - human-id@4.1.3: - resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==} + human-id@4.2.0: + resolution: {integrity: sha512-K3GbkIWqyvvlpfhBPlbEvD97TtqBpAYA4kt+cn2lD2x2HuohzZCibcA2nOlnJT6exqvJLggoB5nv2dNf192nEA==} hasBin: true human-signals@8.0.1: @@ -2429,8 +2549,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - libphonenumber-js@1.13.4: - resolution: {integrity: sha512-/lhWr7vq8foWN9Apksnd9v8/cfwzW6g6qKOCo25XBGkNaVCHucXO57hLy4CWHGvytvLz6Nt3J5Gs8p3jlCGFXA==} + libphonenumber-js@1.13.6: + resolution: {integrity: sha512-NdB6O6QvlGMCoG003m0YIKG2+Xw7DjmCZhmc1RH+K6HncADUbRf8TZeLegxBBN1VFyPHcNpPTKpIhYLXzJVy1Q==} lightningcss-android-arm64@1.32.0: resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} @@ -2625,8 +2745,9 @@ packages: resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} engines: {node: '>=18'} - obug@2.1.1: - resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + obug@2.1.2: + resolution: {integrity: sha512-AWGB9WFcRXOQs48Z/udjI5ZcZMHXwX8XPByNpOydgcGsDLIzjGizhoMWJyKAWze7AVW/2W1i+/gPX4YtKe5cyg==} + engines: {node: '>=12.20.0'} ofetch@1.5.1: resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} @@ -2845,6 +2966,11 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + rolldown@1.1.0: + resolution: {integrity: sha512-zpMvlJhs5PkXRTtKc0CaLBVI9AR/VDiJFpM+kx//hgToEca7FgMlGjaRIisXBcb19T76LswgmKECSQ96hjWr5A==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + runed@0.23.4: resolution: {integrity: sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA==} peerDependencies: @@ -2876,8 +3002,8 @@ packages: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} - semver@7.8.1: - resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==} + semver@7.8.2: + resolution: {integrity: sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ==} engines: {node: '>=10'} hasBin: true @@ -2983,16 +3109,16 @@ packages: '@sveltejs/kit': ^2.4.0 typescript: ^5 - svelte-check@4.5.0: - resolution: {integrity: sha512-9lNwPxCLWniFvQIcEv1LFqjIxcFtO3smb5+5BKbRJ3ttL4o2lXCej5rLF4DAnfLPI66oaA81vAxw6ILdIWI7kA==} + svelte-check@4.6.0: + resolution: {integrity: sha512-KhVnDFDSid57mmZtHz8gfW8AAGylOZ0vPnOIzVmAL+urzwK8sBYXRss953gD8T0OdgAQ11mdWhE6uadmtOz8TQ==} engines: {node: '>= 18.0.0'} hasBin: true peerDependencies: svelte: ^4.0.0 || ^5.0.0-next.0 typescript: '>=5.0.0' - svelte-eslint-parser@1.7.1: - resolution: {integrity: sha512-mmwwKL9L/MB0QyBKdfyWxGjDuQfEyzxWy5S9Kkd0O/V5XD57MQ33KQtXrO6vKLuP6PIt8CRozvOX1mxpcRTqUg==} + svelte-eslint-parser@1.8.0: + resolution: {integrity: sha512-mikR1qwIVy3t5WthUoAXkMwxkXvabZP9FJgdx35Ei7EbGWmctva1Pih16Koeor/bdNNq8NXHlwKGS6NkYTawLg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.34.1} peerDependencies: svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 @@ -3029,8 +3155,8 @@ packages: peerDependencies: svelte: ^5.0.0 - svelte@5.56.1: - resolution: {integrity: sha512-eArsJmvl3xZVuTYD852PzIEdg2wgDdIZ1NEsIPbzAukHwi284B18No4nK2rCO9AwsWUDza4Cjvmoa4HaojTl5g==} + svelte@5.56.2: + resolution: {integrity: sha512-1lDf8TLqpxyAt3xgybfytWPJQbaUD6TiDgpiCLH0BKrKEwzecB9pjuNVnEJMpzH018xUzo6oxheK2HT0oa2RoQ==} engines: {node: '>=18'} sveltekit-superforms@2.30.1: @@ -3122,8 +3248,8 @@ packages: type-level-regexp@0.1.17: resolution: {integrity: sha512-wTk4DH3cxwk196uGLK/E9pE45aLfeKJacKmcEgEOA/q5dnPGNxXt0cfYdFxb57L+sEpf1oJH4Dnx/pnRcku9jg==} - typebox@1.1.39: - resolution: {integrity: sha512-vj0afVtOfLQvv0GR0VxVagYxsXN64btL7Z9XoaG0ZggH3mruMMkOO6hXdgMsjCY3shZgEvooAWVeznQVs5c43w==} + typebox@1.2.1: + resolution: {integrity: sha512-0upGv6+mxJR7/Wc7yoxjc/U6SjOk2aNDNzbihYacSHh+JfOsf28IJ8ggW4/3tRlDKfbInvEDPVneEywjOWYCzw==} typescript-eslint@8.60.1: resolution: {integrity: sha512-6m5hkkRAp8lKvhVpcprAIn5KkehQEh+47oHH2VGnExEh7dhNxXlg6GPAOIu6TxbVQxhebrJDvjl3020ooiWCMA==} @@ -3512,11 +3638,11 @@ snapshots: '@blazediff/core@1.9.1': {} - '@commitlint/cli@21.0.2(@types/node@25.9.1)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3)': + '@commitlint/cli@21.0.2(@types/node@25.9.2)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3)': dependencies: '@commitlint/format': 21.0.1 '@commitlint/lint': 21.0.2 - '@commitlint/load': 21.0.2(@types/node@25.9.1)(typescript@6.0.3) + '@commitlint/load': 21.0.2(@types/node@25.9.2)(typescript@6.0.3) '@commitlint/read': 21.0.2(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) '@commitlint/types': 21.0.1 tinyexec: 1.2.4 @@ -3552,7 +3678,7 @@ snapshots: '@commitlint/is-ignored@21.0.2': dependencies: '@commitlint/types': 21.0.1 - semver: 7.8.1 + semver: 7.8.2 '@commitlint/lint@21.0.2': dependencies: @@ -3561,14 +3687,14 @@ snapshots: '@commitlint/rules': 21.0.2 '@commitlint/types': 21.0.1 - '@commitlint/load@21.0.2(@types/node@25.9.1)(typescript@6.0.3)': + '@commitlint/load@21.0.2(@types/node@25.9.2)(typescript@6.0.3)': dependencies: '@commitlint/config-validator': 21.0.1 '@commitlint/execute-rule': 21.0.1 '@commitlint/resolve-extends': 21.0.1 '@commitlint/types': 21.0.1 cosmiconfig: 9.0.1(typescript@6.0.3) - cosmiconfig-typescript-loader: 6.3.0(@types/node@25.9.1)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3) + cosmiconfig-typescript-loader: 6.3.0(@types/node@25.9.2)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3) es-toolkit: 1.47.0 is-plain-obj: 4.1.0 picocolors: 1.1.1 @@ -3624,7 +3750,7 @@ snapshots: dependencies: '@simple-libs/child-process-utils': 1.0.2 '@simple-libs/stream-utils': 1.2.0 - semver: 7.8.1 + semver: 7.8.2 optionalDependencies: conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.4.0 @@ -3700,7 +3826,7 @@ snapshots: execa: 9.6.1 git-cliff: 2.13.1 js-yaml: 4.2.0 - semver: 7.8.1 + semver: 7.8.2 smol-toml: 1.6.1 '@favware/colorette-spinner@1.0.1': @@ -3827,7 +3953,7 @@ snapshots: dependencies: '@lix-js/server-protocol-schema': 0.1.1 dedent: 1.5.1 - human-id: 4.1.3 + human-id: 4.2.0 js-sha256: 0.11.1 kysely: 0.28.17 sqlite-wasm-kysely: 0.3.0(kysely@0.28.17) @@ -3837,22 +3963,22 @@ snapshots: '@lix-js/server-protocol-schema@0.1.1': {} - '@lucide/svelte@1.17.0(svelte@5.56.1(@typescript-eslint/types@8.60.1))': + '@lucide/svelte@1.17.0(svelte@5.56.2(@typescript-eslint/types@8.60.1))': dependencies: - svelte: 5.56.1(@typescript-eslint/types@8.60.1) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) '@nanoforge-dev/actions@2.1.3': dependencies: '@actions/core': 3.0.1 '@actions/github': 9.1.1 commander: 15.0.0 - semver: 7.8.1 + semver: 7.8.2 - '@nanoforge-dev/common@1.3.0': {} + '@nanoforge-dev/common@1.3.1': {} - '@nanoforge-dev/ecs-lib@1.3.0': + '@nanoforge-dev/ecs-lib@1.3.1': dependencies: - '@nanoforge-dev/common': 1.3.0 + '@nanoforge-dev/common': 1.3.1 '@nanoforge-dev/schematics@2.1.3(chokidar@5.0.0)': dependencies: @@ -4063,6 +4189,8 @@ snapshots: '@oxc-project/types@0.133.0': {} + '@oxc-project/types@0.134.0': {} + '@oxfmt/binding-android-arm-eabi@0.35.0': optional: true @@ -4138,39 +4266,75 @@ snapshots: '@rolldown/binding-android-arm64@1.0.3': optional: true + '@rolldown/binding-android-arm64@1.1.0': + optional: true + '@rolldown/binding-darwin-arm64@1.0.3': optional: true + '@rolldown/binding-darwin-arm64@1.1.0': + optional: true + '@rolldown/binding-darwin-x64@1.0.3': optional: true + '@rolldown/binding-darwin-x64@1.1.0': + optional: true + '@rolldown/binding-freebsd-x64@1.0.3': optional: true + '@rolldown/binding-freebsd-x64@1.1.0': + optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.1.0': + optional: true + '@rolldown/binding-linux-arm64-gnu@1.0.3': optional: true + '@rolldown/binding-linux-arm64-gnu@1.1.0': + optional: true + '@rolldown/binding-linux-arm64-musl@1.0.3': optional: true + '@rolldown/binding-linux-arm64-musl@1.1.0': + optional: true + '@rolldown/binding-linux-ppc64-gnu@1.0.3': optional: true + '@rolldown/binding-linux-ppc64-gnu@1.1.0': + optional: true + '@rolldown/binding-linux-s390x-gnu@1.0.3': optional: true + '@rolldown/binding-linux-s390x-gnu@1.1.0': + optional: true + '@rolldown/binding-linux-x64-gnu@1.0.3': optional: true + '@rolldown/binding-linux-x64-gnu@1.1.0': + optional: true + '@rolldown/binding-linux-x64-musl@1.0.3': optional: true + '@rolldown/binding-linux-x64-musl@1.1.0': + optional: true + '@rolldown/binding-openharmony-arm64@1.0.3': optional: true + '@rolldown/binding-openharmony-arm64@1.1.0': + optional: true + '@rolldown/binding-wasm32-wasi@1.0.3': dependencies: '@emnapi/core': 1.10.0 @@ -4178,12 +4342,25 @@ snapshots: '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true + '@rolldown/binding-wasm32-wasi@1.1.0': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + '@rolldown/binding-win32-arm64-msvc@1.0.3': optional: true + '@rolldown/binding-win32-arm64-msvc@1.1.0': + optional: true + '@rolldown/binding-win32-x64-msvc@1.0.3': optional: true + '@rolldown/binding-win32-x64-msvc@1.1.0': + optional: true + '@rolldown/pluginutils@1.0.1': {} '@sapphire/result@2.8.0': {} @@ -4221,11 +4398,11 @@ snapshots: dependencies: acorn: 8.16.0 - '@sveltejs/kit@2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0))': + '@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0))': dependencies: '@standard-schema/spec': 1.1.0 '@sveltejs/acorn-typescript': 1.0.10(acorn@8.16.0) - '@sveltejs/vite-plugin-svelte': 7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + '@sveltejs/vite-plugin-svelte': 7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)) '@types/cookie': 0.6.0 acorn: 8.16.0 cookie: 0.6.0 @@ -4236,19 +4413,21 @@ snapshots: mrmime: 2.0.1 set-cookie-parser: 3.1.0 sirv: 3.0.2 - svelte: 5.56.1(@typescript-eslint/types@8.60.1) - vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) + vite: 8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0) optionalDependencies: typescript: 6.0.3 - '@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0))': + '@sveltejs/load-config@0.1.1': {} + + '@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0))': dependencies: deepmerge: 4.3.1 magic-string: 0.30.21 - obug: 2.1.1 - svelte: 5.56.1(@typescript-eslint/types@8.60.1) - vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0) - vitefu: 1.1.3(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + obug: 2.1.2 + svelte: 5.56.2(@typescript-eslint/types@8.60.1) + vite: 8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0) + vitefu: 1.1.3(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)) '@swc/helpers@0.5.23': dependencies: @@ -4256,16 +4435,16 @@ snapshots: '@tanstack/query-core@5.101.0': {} - '@tanstack/svelte-query@6.1.34(svelte@5.56.1(@typescript-eslint/types@8.60.1))': + '@tanstack/svelte-query@6.1.34(svelte@5.56.2(@typescript-eslint/types@8.60.1))': dependencies: '@tanstack/query-core': 5.101.0 - svelte: 5.56.1(@typescript-eslint/types@8.60.1) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) - '@testing-library/svelte-core@1.0.0(svelte@5.56.1(@typescript-eslint/types@8.60.1))': + '@testing-library/svelte-core@1.0.0(svelte@5.56.2(@typescript-eslint/types@8.60.1))': dependencies: - svelte: 5.56.1(@typescript-eslint/types@8.60.1) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) - '@trivago/prettier-plugin-sort-imports@6.0.2(prettier-plugin-svelte@4.1.0(prettier@3.8.3)(svelte@5.56.1(@typescript-eslint/types@8.60.1)))(prettier@3.8.3)(svelte@5.56.1(@typescript-eslint/types@8.60.1))': + '@trivago/prettier-plugin-sort-imports@6.0.2(prettier-plugin-svelte@4.1.0(prettier@3.8.3)(svelte@5.56.2(@typescript-eslint/types@8.60.1)))(prettier@3.8.3)(svelte@5.56.2(@typescript-eslint/types@8.60.1))': dependencies: '@babel/generator': 7.29.7 '@babel/parser': 7.29.7 @@ -4277,8 +4456,8 @@ snapshots: parse-imports-exports: 0.2.4 prettier: 3.8.3 optionalDependencies: - prettier-plugin-svelte: 4.1.0(prettier@3.8.3)(svelte@5.56.1(@typescript-eslint/types@8.60.1)) - svelte: 5.56.1(@typescript-eslint/types@8.60.1) + prettier-plugin-svelte: 4.1.0(prettier@3.8.3)(svelte@5.56.2(@typescript-eslint/types@8.60.1)) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) transitivePeerDependencies: - supports-color @@ -4313,14 +4492,13 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/node@25.9.1': + '@types/node@25.9.2': dependencies: undici-types: 7.24.6 '@types/trusted-types@2.0.7': {} - '@types/validator@13.15.10': - optional: true + '@types/validator@13.15.10': {} '@typeschema/class-validator@0.3.0(@types/json-schema@7.0.15)(class-validator@0.14.4)': dependencies: @@ -4404,7 +4582,7 @@ snapshots: '@typescript-eslint/visitor-keys': 8.60.1 debug: 4.4.3 minimatch: 10.2.5 - semver: 7.8.1 + semver: 7.8.2 tinyglobby: 0.2.17 ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 @@ -4562,7 +4740,7 @@ snapshots: dependencies: '@unocss/core': 66.7.0 - '@unocss/vite@66.7.0(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0))': + '@unocss/vite@66.7.0(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0))': dependencies: '@jridgewell/remapping': 2.3.5 '@unocss/config': 66.7.0 @@ -4573,7 +4751,7 @@ snapshots: pathe: 2.0.3 tinyglobby: 0.2.17 unplugin-utils: 0.3.1 - vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0) + vite: 8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0) '@valibot/to-json-schema@1.7.0(valibot@1.4.1(typescript@6.0.3))': dependencies: @@ -4595,29 +4773,29 @@ snapshots: validator: 13.15.35 optional: true - '@vitest/browser-playwright@4.1.8(playwright@1.60.0)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.8)': + '@vitest/browser-playwright@4.1.8(playwright@1.60.0)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.8)': dependencies: - '@vitest/browser': 4.1.8(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.8) - '@vitest/mocker': 4.1.8(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + '@vitest/browser': 4.1.8(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.8) + '@vitest/mocker': 4.1.8(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)) playwright: 1.60.0 tinyrainbow: 3.1.0 - vitest: 4.1.8(@types/node@25.9.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-v8@4.1.8)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + vitest: 4.1.8(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-v8@4.1.8)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.1.8(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.8)': + '@vitest/browser@4.1.8(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.8)': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.8(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + '@vitest/mocker': 4.1.8(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)) '@vitest/utils': 4.1.8 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.0 - vitest: 4.1.8(@types/node@25.9.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-v8@4.1.8)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + vitest: 4.1.8(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-v8@4.1.8)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)) ws: 8.21.0 transitivePeerDependencies: - bufferutil @@ -4634,12 +4812,12 @@ snapshots: istanbul-lib-report: 3.0.1 istanbul-reports: 3.2.0 magicast: 0.5.3 - obug: 2.1.1 + obug: 2.1.2 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.8(@types/node@25.9.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-v8@4.1.8)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + vitest: 4.1.8(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-v8@4.1.8)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)) optionalDependencies: - '@vitest/browser': 4.1.8(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.8) + '@vitest/browser': 4.1.8(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.8) '@vitest/expect@4.1.8': dependencies: @@ -4650,13 +4828,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.8(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0))': + '@vitest/mocker@4.1.8(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.8 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0) + vite: 8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0) '@vitest/pretty-format@4.1.8': dependencies: @@ -4757,15 +4935,15 @@ snapshots: before-after-hook@4.0.0: {} - bits-ui@2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1)): + bits-ui@2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1)): dependencies: '@floating-ui/core': 1.7.5 '@floating-ui/dom': 1.7.6 '@internationalized/date': 3.12.2 esm-env: 1.2.2 - runed: 0.35.1(@sveltejs/kit@2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1)) - svelte: 5.56.1(@typescript-eslint/types@8.60.1) - svelte-toolbelt: 0.10.6(@sveltejs/kit@2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1)) + runed: 0.35.1(@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1)) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1)) tabbable: 6.4.0 transitivePeerDependencies: - '@sveltejs/kit' @@ -4782,7 +4960,7 @@ snapshots: bun-types@1.3.14: dependencies: - '@types/node': 25.9.1 + '@types/node': 25.9.2 bun@1.3.14: optionalDependencies: @@ -4822,13 +5000,21 @@ snapshots: dependencies: readdirp: 5.0.0 + class-transformer@0.5.1: {} + class-validator@0.14.4: dependencies: '@types/validator': 13.15.10 - libphonenumber-js: 1.13.4 + libphonenumber-js: 1.13.6 validator: 13.15.35 optional: true + class-validator@0.15.1: + dependencies: + '@types/validator': 13.15.10 + libphonenumber-js: 1.13.6 + validator: 13.15.35 + cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -4903,9 +5089,9 @@ snapshots: cookie@0.6.0: {} - cosmiconfig-typescript-loader@6.3.0(@types/node@25.9.1)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3): + cosmiconfig-typescript-loader@6.3.0(@types/node@25.9.2)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3): dependencies: - '@types/node': 25.9.1 + '@types/node': 25.9.2 cosmiconfig: 9.0.1(typescript@6.0.3) jiti: 2.6.1 typescript: 6.0.3 @@ -4970,7 +5156,7 @@ snapshots: duplexer@0.1.2: {} - effect@3.21.2: + effect@3.21.3: dependencies: '@standard-schema/spec': 1.1.0 fast-check: 3.23.2 @@ -5039,7 +5225,7 @@ snapshots: '@types/eslint': 9.6.1 eslint-config-prettier: 10.1.8(eslint@10.4.1(jiti@2.7.0)) - eslint-plugin-svelte@3.19.0(eslint@10.4.1(jiti@2.7.0))(svelte@5.56.1(@typescript-eslint/types@8.60.1)): + eslint-plugin-svelte@3.19.0(eslint@10.4.1(jiti@2.7.0))(svelte@5.56.2(@typescript-eslint/types@8.60.1)): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1(jiti@2.7.0)) '@jridgewell/sourcemap-codec': 1.5.5 @@ -5050,10 +5236,10 @@ snapshots: postcss: 8.5.15 postcss-load-config: 3.1.4(postcss@8.5.15) postcss-safe-parser: 7.0.1(postcss@8.5.15) - semver: 7.8.1 - svelte-eslint-parser: 1.7.1(svelte@5.56.1(@typescript-eslint/types@8.60.1)) + semver: 7.8.2 + svelte-eslint-parser: 1.8.0(svelte@5.56.2(@typescript-eslint/types@8.60.1)) optionalDependencies: - svelte: 5.56.1(@typescript-eslint/types@8.60.1) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) transitivePeerDependencies: - ts-node @@ -5134,7 +5320,7 @@ snapshots: dependencies: estraverse: 5.3.0 - esrap@2.2.10(@typescript-eslint/types@8.60.1): + esrap@2.2.11(@typescript-eslint/types@8.60.1): dependencies: '@jridgewell/sourcemap-codec': 1.5.5 optionalDependencies: @@ -5210,11 +5396,11 @@ snapshots: flatted@3.4.2: {} - formsnap@2.0.1(svelte@5.56.1(@typescript-eslint/types@8.60.1))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)): + formsnap@2.0.1(svelte@5.56.2(@typescript-eslint/types@8.60.1))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)): dependencies: - svelte: 5.56.1(@typescript-eslint/types@8.60.1) - svelte-toolbelt: 0.5.0(svelte@5.56.1(@typescript-eslint/types@8.60.1)) - sveltekit-superforms: 2.30.1(@sveltejs/kit@2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) + svelte-toolbelt: 0.5.0(svelte@5.56.2(@typescript-eslint/types@8.60.1)) + sveltekit-superforms: 2.30.1(@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3) fsevents@2.3.2: optional: true @@ -5290,7 +5476,7 @@ snapshots: html-escaper@2.0.2: {} - human-id@4.1.3: {} + human-id@4.2.0: {} human-signals@8.0.1: {} @@ -5425,8 +5611,7 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - libphonenumber-js@1.13.4: - optional: true + libphonenumber-js@1.13.6: {} lightningcss-android-arm64@1.32.0: optional: true @@ -5543,7 +5728,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.8.1 + semver: 7.8.2 marked@14.0.0: {} @@ -5570,11 +5755,11 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.4 - mode-watcher@1.1.0(svelte@5.56.1(@typescript-eslint/types@8.60.1)): + mode-watcher@1.1.0(svelte@5.56.2(@typescript-eslint/types@8.60.1)): dependencies: - runed: 0.25.0(svelte@5.56.1(@typescript-eslint/types@8.60.1)) - svelte: 5.56.1(@typescript-eslint/types@8.60.1) - svelte-toolbelt: 0.7.1(svelte@5.56.1(@typescript-eslint/types@8.60.1)) + runed: 0.25.0(svelte@5.56.2(@typescript-eslint/types@8.60.1)) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) + svelte-toolbelt: 0.7.1(svelte@5.56.2(@typescript-eslint/types@8.60.1)) monaco-editor@0.55.1: dependencies: @@ -5601,7 +5786,7 @@ snapshots: path-key: 4.0.0 unicorn-magic: 0.3.0 - obug@2.1.1: {} + obug@2.1.2: {} ofetch@1.5.1: dependencies: @@ -5784,10 +5969,10 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier-plugin-svelte@4.1.0(prettier@3.8.3)(svelte@5.56.1(@typescript-eslint/types@8.60.1)): + prettier-plugin-svelte@4.1.0(prettier@3.8.3)(svelte@5.56.2(@typescript-eslint/types@8.60.1)): dependencies: prettier: 3.8.3 - svelte: 5.56.1(@typescript-eslint/types@8.60.1) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) prettier@2.5.1: {} @@ -5847,29 +6032,50 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.3 '@rolldown/binding-win32-x64-msvc': 1.0.3 - runed@0.23.4(svelte@5.56.1(@typescript-eslint/types@8.60.1)): + rolldown@1.1.0: + dependencies: + '@oxc-project/types': 0.134.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.1.0 + '@rolldown/binding-darwin-arm64': 1.1.0 + '@rolldown/binding-darwin-x64': 1.1.0 + '@rolldown/binding-freebsd-x64': 1.1.0 + '@rolldown/binding-linux-arm-gnueabihf': 1.1.0 + '@rolldown/binding-linux-arm64-gnu': 1.1.0 + '@rolldown/binding-linux-arm64-musl': 1.1.0 + '@rolldown/binding-linux-ppc64-gnu': 1.1.0 + '@rolldown/binding-linux-s390x-gnu': 1.1.0 + '@rolldown/binding-linux-x64-gnu': 1.1.0 + '@rolldown/binding-linux-x64-musl': 1.1.0 + '@rolldown/binding-openharmony-arm64': 1.1.0 + '@rolldown/binding-wasm32-wasi': 1.1.0 + '@rolldown/binding-win32-arm64-msvc': 1.1.0 + '@rolldown/binding-win32-x64-msvc': 1.1.0 + + runed@0.23.4(svelte@5.56.2(@typescript-eslint/types@8.60.1)): dependencies: esm-env: 1.2.2 - svelte: 5.56.1(@typescript-eslint/types@8.60.1) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) - runed@0.25.0(svelte@5.56.1(@typescript-eslint/types@8.60.1)): + runed@0.25.0(svelte@5.56.2(@typescript-eslint/types@8.60.1)): dependencies: esm-env: 1.2.2 - svelte: 5.56.1(@typescript-eslint/types@8.60.1) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) - runed@0.28.0(svelte@5.56.1(@typescript-eslint/types@8.60.1)): + runed@0.28.0(svelte@5.56.2(@typescript-eslint/types@8.60.1)): dependencies: esm-env: 1.2.2 - svelte: 5.56.1(@typescript-eslint/types@8.60.1) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) - runed@0.35.1(@sveltejs/kit@2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1)): + runed@0.35.1(@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1)): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 - svelte: 5.56.1(@typescript-eslint/types@8.60.1) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) optionalDependencies: - '@sveltejs/kit': 2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + '@sveltejs/kit': 2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)) rxjs@7.8.2: dependencies: @@ -5879,7 +6085,7 @@ snapshots: dependencies: mri: 1.2.0 - semver@7.8.1: {} + semver@7.8.2: {} set-cookie-parser@3.1.0: {} @@ -5963,25 +6169,26 @@ snapshots: has-flag: 5.0.1 supports-color: 10.2.2 - svelte-adapter-bun@1.0.1(@sveltejs/kit@2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(typescript@6.0.3): + svelte-adapter-bun@1.0.1(@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(typescript@6.0.3): dependencies: - '@sveltejs/kit': 2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) - rolldown: 1.0.3 + '@sveltejs/kit': 2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)) + rolldown: 1.1.0 typescript: 6.0.3 - svelte-check@4.5.0(picomatch@4.0.4)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3): + svelte-check@4.6.0(picomatch@4.0.4)(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3): dependencies: '@jridgewell/trace-mapping': 0.3.31 + '@sveltejs/load-config': 0.1.1 chokidar: 4.0.3 fdir: 6.5.0(picomatch@4.0.4) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.56.1(@typescript-eslint/types@8.60.1) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) typescript: 6.0.3 transitivePeerDependencies: - picomatch - svelte-eslint-parser@1.7.1(svelte@5.56.1(@typescript-eslint/types@8.60.1)): + svelte-eslint-parser@1.8.0(svelte@5.56.2(@typescript-eslint/types@8.60.1)): dependencies: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -5989,44 +6196,44 @@ snapshots: postcss: 8.5.15 postcss-scss: 4.0.9(postcss@8.5.15) postcss-selector-parser: 7.1.1 - semver: 7.8.1 + semver: 7.8.2 optionalDependencies: - svelte: 5.56.1(@typescript-eslint/types@8.60.1) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) - svelte-kit-sessions@0.4.0(@sveltejs/kit@2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1)): + svelte-kit-sessions@0.4.0(@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1)): dependencies: '@isaacs/ttlcache': 1.4.1 - '@sveltejs/kit': 2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) - svelte: 5.56.1(@typescript-eslint/types@8.60.1) + '@sveltejs/kit': 2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) - svelte-sonner@1.1.1(svelte@5.56.1(@typescript-eslint/types@8.60.1)): + svelte-sonner@1.1.1(svelte@5.56.2(@typescript-eslint/types@8.60.1)): dependencies: - runed: 0.28.0(svelte@5.56.1(@typescript-eslint/types@8.60.1)) - svelte: 5.56.1(@typescript-eslint/types@8.60.1) + runed: 0.28.0(svelte@5.56.2(@typescript-eslint/types@8.60.1)) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) - svelte-toolbelt@0.10.6(@sveltejs/kit@2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1)): + svelte-toolbelt@0.10.6(@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1)): dependencies: clsx: 2.1.1 - runed: 0.35.1(@sveltejs/kit@2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1)) + runed: 0.35.1(@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1)) style-to-object: 1.0.14 - svelte: 5.56.1(@typescript-eslint/types@8.60.1) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) transitivePeerDependencies: - '@sveltejs/kit' - svelte-toolbelt@0.5.0(svelte@5.56.1(@typescript-eslint/types@8.60.1)): + svelte-toolbelt@0.5.0(svelte@5.56.2(@typescript-eslint/types@8.60.1)): dependencies: clsx: 2.1.1 style-to-object: 1.0.14 - svelte: 5.56.1(@typescript-eslint/types@8.60.1) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) - svelte-toolbelt@0.7.1(svelte@5.56.1(@typescript-eslint/types@8.60.1)): + svelte-toolbelt@0.7.1(svelte@5.56.2(@typescript-eslint/types@8.60.1)): dependencies: clsx: 2.1.1 - runed: 0.23.4(svelte@5.56.1(@typescript-eslint/types@8.60.1)) + runed: 0.23.4(svelte@5.56.2(@typescript-eslint/types@8.60.1)) style-to-object: 1.0.14 - svelte: 5.56.1(@typescript-eslint/types@8.60.1) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) - svelte@5.56.1(@typescript-eslint/types@8.60.1): + svelte@5.56.2(@typescript-eslint/types@8.60.1): dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 @@ -6039,7 +6246,7 @@ snapshots: clsx: 2.1.1 devalue: 5.8.1 esm-env: 1.2.2 - esrap: 2.2.10(@typescript-eslint/types@8.60.1) + esrap: 2.2.11(@typescript-eslint/types@8.60.1) is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.21 @@ -6047,12 +6254,12 @@ snapshots: transitivePeerDependencies: - '@typescript-eslint/types' - sveltekit-superforms@2.30.1(@sveltejs/kit@2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3): + sveltekit-superforms@2.30.1(@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3): dependencies: - '@sveltejs/kit': 2.62.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.1(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + '@sveltejs/kit': 2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)) devalue: 5.8.1 memoize-weak: 1.0.2 - svelte: 5.56.1(@typescript-eslint/types@8.60.1) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) ts-deepmerge: 7.0.3 optionalDependencies: '@exodus/schemasafe': 1.3.0 @@ -6062,11 +6269,11 @@ snapshots: '@vinejs/vine': 3.0.1 arktype: 2.2.0 class-validator: 0.14.4 - effect: 3.21.2 + effect: 3.21.3 joi: 17.13.3 json-schema-to-ts: 3.1.1 superstruct: 2.0.2 - typebox: 1.1.39 + typebox: 1.2.1 valibot: 1.4.1(typescript@6.0.3) yup: 1.7.1 zod: 4.4.3 @@ -6134,7 +6341,7 @@ snapshots: type-level-regexp@0.1.17: {} - typebox@1.1.39: + typebox@1.2.1: optional: true typescript-eslint@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3): @@ -6173,7 +6380,7 @@ snapshots: universal-user-agent@7.0.3: {} - unocss@66.7.0(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)): + unocss@66.7.0(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)): dependencies: '@unocss/cli': 66.7.0 '@unocss/core': 66.7.0 @@ -6191,7 +6398,7 @@ snapshots: '@unocss/transformer-compile-class': 66.7.0 '@unocss/transformer-directives': 66.7.0 '@unocss/transformer-variant-group': 66.7.0 - '@unocss/vite': 66.7.0(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + '@unocss/vite': 66.7.0(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)) transitivePeerDependencies: - vite @@ -6222,10 +6429,9 @@ snapshots: typescript: 6.0.3 optional: true - validator@13.15.35: - optional: true + validator@13.15.35: {} - vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0): + vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -6233,25 +6439,25 @@ snapshots: rolldown: 1.0.3 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.9.2 fsevents: 2.3.3 jiti: 2.7.0 yaml: 2.9.0 - vitefu@1.1.3(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)): + vitefu@1.1.3(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)): optionalDependencies: - vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0) + vite: 8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0) - vitest-browser-svelte@2.1.1(svelte@5.56.1(@typescript-eslint/types@8.60.1))(vitest@4.1.8): + vitest-browser-svelte@2.1.1(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vitest@4.1.8): dependencies: - '@testing-library/svelte-core': 1.0.0(svelte@5.56.1(@typescript-eslint/types@8.60.1)) - svelte: 5.56.1(@typescript-eslint/types@8.60.1) - vitest: 4.1.8(@types/node@25.9.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-v8@4.1.8)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + '@testing-library/svelte-core': 1.0.0(svelte@5.56.2(@typescript-eslint/types@8.60.1)) + svelte: 5.56.2(@typescript-eslint/types@8.60.1) + vitest: 4.1.8(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-v8@4.1.8)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)) - vitest@4.1.8(@types/node@25.9.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-v8@4.1.8)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)): + vitest@4.1.8(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-v8@4.1.8)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.8 - '@vitest/mocker': 4.1.8(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + '@vitest/mocker': 4.1.8(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.8 '@vitest/runner': 4.1.8 '@vitest/snapshot': 4.1.8 @@ -6260,7 +6466,7 @@ snapshots: es-module-lexer: 2.1.0 expect-type: 1.3.0 magic-string: 0.30.21 - obug: 2.1.1 + obug: 2.1.2 pathe: 2.0.3 picomatch: 4.0.4 std-env: 4.1.0 @@ -6268,11 +6474,11 @@ snapshots: tinyexec: 1.2.4 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 - vite: 8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0) + vite: 8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 25.9.1 - '@vitest/browser-playwright': 4.1.8(playwright@1.60.0)(vite@8.0.16(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.8) + '@types/node': 25.9.2 + '@vitest/browser-playwright': 4.1.8(playwright@1.60.0)(vite@8.0.16(@types/node@25.9.2)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.8) '@vitest/coverage-v8': 4.1.8(@vitest/browser@4.1.8)(vitest@4.1.8) transitivePeerDependencies: - msw diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index dea645d..4da1afa 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -18,14 +18,14 @@ catalogs: monaco-editor: ^0.55.1 svelte-sonner: ^1.1.1 core: - '@nanoforge-dev/ecs-lib': ^1.3.0 + '@nanoforge-dev/ecs-lib': ^1.3.1 '@sveltejs/adapter-auto': ^7.0.1 - '@sveltejs/kit': ^2.62.0 + '@sveltejs/kit': ^2.63.0 '@sveltejs/vite-plugin-svelte': ^7.1.2 '@types/bun': ^1.3.14 bun: ^1.3.14 - svelte: ^5.56.1 - svelte-check: ^4.5.0 + svelte: ^5.56.2 + svelte-check: ^4.6.0 svelte-kit-sessions: ^0.4.0 vite: ^8.0.16 css: @@ -49,6 +49,8 @@ catalogs: '@iconify-json/solar': ^1.2.5 '@lucide/svelte': ^1.17.0 libs-back: + class-transformer: ^0.5.1 + class-validator: ^0.15.1 dotenv: ^17.4.2 libs-front: '@internationalized/date': ^3.12.2 @@ -75,6 +77,3 @@ catalogs: playwright: ^1.60.0 vitest: ^4.1.8 vitest-browser-svelte: ^2.1.1 - -minimumReleaseAgeExclude: - - '@nanoforge-dev/actions@2.1.3' diff --git a/src/lib/server/actions/project/complete.action.ts b/src/lib/server/actions/project/complete.action.ts index 844bacb..aeb34b0 100644 --- a/src/lib/server/actions/project/complete.action.ts +++ b/src/lib/server/actions/project/complete.action.ts @@ -1,12 +1,26 @@ +import { Expose } from 'class-transformer'; +import { IsBoolean, IsEnum, IsNotEmpty, IsOptional, IsString, IsUUID } from 'class-validator'; + import { resolveSessionFunctions } from '$lib/server/actions/project/load.action'; import { loadProject } from '$lib/server/project'; import { useActionHandler } from '@utils-server/request-handler'; export class CompleteProjectBody { + @Expose() + @IsUUID(8) + @IsNotEmpty() gatewayId!: string; + @Expose() + @IsString() + @IsOptional() + @IsEnum(['js', 'ts']) language?: 'js' | 'ts'; + + @Expose() + @IsBoolean() + @IsOptional() multiplayerServer?: boolean; } diff --git a/src/lib/server/actions/project/fs/readdir.action.ts b/src/lib/server/actions/project/fs/readdir.action.ts index b7814a6..d8d4742 100644 --- a/src/lib/server/actions/project/fs/readdir.action.ts +++ b/src/lib/server/actions/project/fs/readdir.action.ts @@ -1,6 +1,12 @@ +import { Expose } from 'class-transformer'; +import { IsOptional, IsString } from 'class-validator'; + import { useActionHandler } from '@utils-server/request-handler'; export class ReaddirFsBody { + @Expose() + @IsString() + @IsOptional() path?: string; } diff --git a/src/lib/server/actions/project/info.action.ts b/src/lib/server/actions/project/info.action.ts index b26704e..7847e89 100644 --- a/src/lib/server/actions/project/info.action.ts +++ b/src/lib/server/actions/project/info.action.ts @@ -1,3 +1,6 @@ +import { Expose } from 'class-transformer'; +import { IsOptional, IsString } from 'class-validator'; + import { useActionHandler } from '@utils-server/request-handler'; export interface InfoProject { @@ -7,6 +10,9 @@ export interface InfoProject { } export class InfoProjectBody { + @Expose() + @IsString() + @IsOptional() name?: string; } diff --git a/src/lib/server/actions/project/library/install-library.action.ts b/src/lib/server/actions/project/library/install-library.action.ts index 5109b9c..a8d6c7d 100644 --- a/src/lib/server/actions/project/library/install-library.action.ts +++ b/src/lib/server/actions/project/library/install-library.action.ts @@ -1,8 +1,14 @@ +import { Expose } from 'class-transformer'; +import { IsNotEmpty, IsString } from 'class-validator'; + import type { LibraryPackage } from '$lib/server/project/library'; import { useActionHandler } from '@utils-server/request-handler'; export class InstallLibraryBody { + @Expose() + @IsString() + @IsNotEmpty() libraryName!: string; } diff --git a/src/lib/server/actions/project/load.action.ts b/src/lib/server/actions/project/load.action.ts index 233797f..29d339e 100644 --- a/src/lib/server/actions/project/load.action.ts +++ b/src/lib/server/actions/project/load.action.ts @@ -1,3 +1,5 @@ +import { Expose } from 'class-transformer'; +import { IsOptional, IsString } from 'class-validator'; import { join } from 'path'; import { loadProject } from '$lib/server/project'; @@ -9,9 +11,24 @@ import { Exception } from '@utils/exception'; import { type Handler, useActionHandler } from '@utils-server/request-handler'; export class LoadProjectBody { + @Expose() + @IsString() + @IsOptional() id?: string; + + @Expose() + @IsString() + @IsOptional() path?: string; + + @Expose() + @IsString() + @IsOptional() gitUrl?: string; + + @Expose() + @IsString() + @IsOptional() gatewayId?: string; } diff --git a/src/lib/server/actions/project/new.action.ts b/src/lib/server/actions/project/new.action.ts index 172bb60..17598c5 100644 --- a/src/lib/server/actions/project/new.action.ts +++ b/src/lib/server/actions/project/new.action.ts @@ -1,18 +1,54 @@ +import { Expose } from 'class-transformer'; +import { IsBoolean, IsEnum, IsNotEmpty, IsOptional, IsString, Matches } from 'class-validator'; import { join } from 'path'; import { loadProject } from '$lib/server/project'; import { useActionHandler } from '@utils-server/request-handler'; +import { IsFalseOrString } from '@utils-server/validators'; export class CreateProjectBody { + @Expose() + @IsString() + @IsNotEmpty() + @Matches(/^[a-z0-9]+(?:-[a-z0-9]+)*$/) projectName!: string; + @Expose() + @IsString() + @IsOptional() projectPath?: string; + + @Expose() + @IsString() + @IsOptional() + @IsEnum(['npm', 'pnpm', 'yarn', 'bun']) packageManager?: 'npm' | 'pnpm' | 'yarn' | 'bun'; + + @Expose() + @IsString() + @IsOptional() + @IsEnum(['js', 'ts']) language?: 'js' | 'ts'; + + @Expose() + @IsBoolean() + @IsOptional() multiplayerServer?: boolean; + + @Expose() + @IsBoolean() + @IsOptional() dockerContainerization?: boolean; + + @Expose() + @IsBoolean() + @IsOptional() createGitRepository?: boolean; + + @Expose() + @IsFalseOrString() + @IsOptional() gitRemote?: string | false; } @@ -31,6 +67,7 @@ export const createProjectAction = useActionHandler( docker: body.dockerContainerization, git: body.createGitRepository, gitRemote: body.gitRemote, + lint: false, }); return await loadProject({ path: join(body.projectPath ?? '', body.projectName) }, handler); diff --git a/src/lib/server/actions/project/package/add-components.action.ts b/src/lib/server/actions/project/package/add-components.action.ts index 1d7e495..5ed7f75 100644 --- a/src/lib/server/actions/project/package/add-components.action.ts +++ b/src/lib/server/actions/project/package/add-components.action.ts @@ -1,8 +1,14 @@ +import { Expose } from 'class-transformer'; +import { IsNotEmpty, IsString } from 'class-validator'; + import type { ComponentPackage } from '$lib/server/project/package/package.type'; import { useActionHandler } from '@utils-server/request-handler'; export class AddComponentBody { + @Expose() + @IsString({ each: true }) + @IsNotEmpty() componentNames!: [string, ...string[]]; } diff --git a/src/lib/server/actions/project/package/add-systems.action.ts b/src/lib/server/actions/project/package/add-systems.action.ts index 96d7658..01d4c13 100644 --- a/src/lib/server/actions/project/package/add-systems.action.ts +++ b/src/lib/server/actions/project/package/add-systems.action.ts @@ -1,8 +1,14 @@ +import { Expose } from 'class-transformer'; +import { IsNotEmpty, IsString } from 'class-validator'; + import type { SystemPackage } from '$lib/server/project/package/package.type'; import { useActionHandler } from '@utils-server/request-handler'; export class AddSystemBody { + @Expose() + @IsString({ each: true }) + @IsNotEmpty() systemNames!: [string, ...string[]]; } diff --git a/src/lib/server/actions/project/package/create-component.action.ts b/src/lib/server/actions/project/package/create-component.action.ts index a826e9d..dc21e39 100644 --- a/src/lib/server/actions/project/package/create-component.action.ts +++ b/src/lib/server/actions/project/package/create-component.action.ts @@ -1,8 +1,14 @@ +import { Expose } from 'class-transformer'; +import { IsNotEmpty, IsString } from 'class-validator'; + import type { ComponentPackage } from '$lib/server/project/package/package.type'; import { useActionHandler } from '@utils-server/request-handler'; export class CreateComponentBody { + @Expose() + @IsString() + @IsNotEmpty() componentName!: string; } diff --git a/src/lib/server/actions/project/package/create-system.action.ts b/src/lib/server/actions/project/package/create-system.action.ts index 97963ef..9ba9c7f 100644 --- a/src/lib/server/actions/project/package/create-system.action.ts +++ b/src/lib/server/actions/project/package/create-system.action.ts @@ -1,8 +1,14 @@ +import { Expose } from 'class-transformer'; +import { IsNotEmpty, IsString } from 'class-validator'; + import type { SystemPackage } from '$lib/server/project/package/package.type'; import { useActionHandler } from '@utils-server/request-handler'; export class CreateSystemBody { + @Expose() + @IsString() + @IsNotEmpty() systemName!: string; } diff --git a/src/lib/server/actions/project/package/get-components-manifests.action.ts b/src/lib/server/actions/project/package/get-components-manifests.action.ts index d62e7a4..1806128 100644 --- a/src/lib/server/actions/project/package/get-components-manifests.action.ts +++ b/src/lib/server/actions/project/package/get-components-manifests.action.ts @@ -1,8 +1,14 @@ +import { Expose } from 'class-transformer'; +import { IsNotEmpty, IsString } from 'class-validator'; + import type { ComponentManifest } from '$lib/server/project/package'; import { useActionHandler } from '@utils-server/request-handler'; export class GetComponentManifestBody { + @Expose() + @IsString({ each: true }) + @IsNotEmpty() componentPaths!: [string, ...string[]]; } diff --git a/src/lib/server/actions/project/package/get-systems-manifests.action.ts b/src/lib/server/actions/project/package/get-systems-manifests.action.ts index bd1eef9..07c93e9 100644 --- a/src/lib/server/actions/project/package/get-systems-manifests.action.ts +++ b/src/lib/server/actions/project/package/get-systems-manifests.action.ts @@ -1,8 +1,14 @@ +import { Expose } from 'class-transformer'; +import { IsNotEmpty, IsString } from 'class-validator'; + import type { SystemManifest } from '$lib/server/project/package'; import { useActionHandler } from '@utils-server/request-handler'; export class GetSystemManifestBody { + @Expose() + @IsString({ each: true }) + @IsNotEmpty() systemPaths!: [string, ...string[]]; } diff --git a/src/lib/server/actions/project/save/set-save.action.ts b/src/lib/server/actions/project/save/set-save.action.ts index b553fd6..726f607 100644 --- a/src/lib/server/actions/project/save/set-save.action.ts +++ b/src/lib/server/actions/project/save/set-save.action.ts @@ -1,8 +1,14 @@ +import { Expose } from 'class-transformer'; +import { IsNotEmpty, IsObject } from 'class-validator'; + import type { Save } from '@utils/types'; import { useActionHandler } from '@utils-server/request-handler'; export class SetSaveBody { + @Expose() + @IsObject() + @IsNotEmpty() save!: Save; } diff --git a/src/lib/server/utils/request-handler/action-handler.ts b/src/lib/server/utils/request-handler/action-handler.ts index 46216fc..b5aa17e 100644 --- a/src/lib/server/utils/request-handler/action-handler.ts +++ b/src/lib/server/utils/request-handler/action-handler.ts @@ -16,7 +16,7 @@ const handleError = (e: unknown): ActionFailure<{ error: string; message: unknow return fail(500, { error: 'Internal Server Error', message: (e as any).toString() }); }; -export const useActionHandler = ( +export const useActionHandler = ( callback: Callback, options?: RequestHandlerOptions, ): Action => { @@ -24,7 +24,7 @@ export const useActionHandler = ( try { const context = await getContext(event); - const body = parseFormDataBody(await event.request.formData(), options?.body); + const body = await parseFormDataBody(await event.request.formData(), options?.body); assertRequest(context, options); diff --git a/src/lib/server/utils/request-handler/body.ts b/src/lib/server/utils/request-handler/body.ts index 5c67287..d36b1d8 100644 --- a/src/lib/server/utils/request-handler/body.ts +++ b/src/lib/server/utils/request-handler/body.ts @@ -1,17 +1,33 @@ +import { plainToInstance } from 'class-transformer'; +import { validate } from 'class-validator'; + +import { Exception } from '@utils/exception'; import type { ClassType } from '@utils/types'; -export const parseFormDataBody = ( +export const parseFormDataBody = ( rawBody: FormData, c: ClassType | undefined, -): Body => { +): Promise => { const baseBody = Object.fromEntries( Array.from(rawBody.entries()).map(([key, value]) => [key, JSON.parse(value)]), ); return parseBody(baseBody, c); }; -export const parseBody = (baseBody: any, c: ClassType | undefined): Body => { - // @todo add class validation and class transformation - void c; +export const parseBody = async ( + baseBody: any, + c: ClassType | undefined, +): Promise => { + if (!c) return baseBody as Body; + const data = plainToInstance(c, baseBody, { + excludeExtraneousValues: true, + }); + const errors = await validate(data); + if (errors.length > 0) + throw new Exception( + 'Bad Request', + `Invalid body :\n${errors.toString().replace(/,/g, '\n')}`, + 400, + ); return baseBody as Body; }; diff --git a/src/lib/server/utils/validators/index.ts b/src/lib/server/utils/validators/index.ts new file mode 100644 index 0000000..94e79c6 --- /dev/null +++ b/src/lib/server/utils/validators/index.ts @@ -0,0 +1 @@ +export { IsFalseOrString } from './is-string-or-false.validator'; diff --git a/src/lib/server/utils/validators/is-string-or-false.validator.ts b/src/lib/server/utils/validators/is-string-or-false.validator.ts new file mode 100644 index 0000000..92eb340 --- /dev/null +++ b/src/lib/server/utils/validators/is-string-or-false.validator.ts @@ -0,0 +1,20 @@ +import { type ValidationOptions, isBoolean, isString, registerDecorator } from 'class-validator'; + +export const IsFalseOrString = (validationOptions?: ValidationOptions) => { + return (object: object, propertyName: string) => { + registerDecorator({ + target: object.constructor, + propertyName: propertyName, + ...(validationOptions ? { options: validationOptions } : {}), + constraints: [], + validator: { + validate(value: string) { + return (isBoolean(value) && !value) || isString(value); + }, + defaultMessage() { + return `$value must be a valid IP address or FQDN`; + }, + }, + }); + }; +}; diff --git a/tsconfig.json b/tsconfig.json index b6a9dfb..153b229 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,7 +11,8 @@ "strict": true, "moduleResolution": "bundler", "types": ["bun"], - "lib": ["esnext", "DOM", "DOM.Iterable", "DOM.AsyncIterable"] + "lib": ["esnext", "DOM", "DOM.Iterable", "DOM.AsyncIterable"], + "experimentalDecorators": true } // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files