diff --git a/README.md b/README.md index 993e1f1..b4ca109 100644 --- a/README.md +++ b/README.md @@ -15,14 +15,6 @@ npm run dev npm run dev -- --open ``` -### Handle the prisma ORM - -```bash -./run/db_up.sh # Start the docker container, create a new database and run migrations + insert test data -npx prisma migrate dev --name my_migration --create-only # Create a new migration -npx prisma migrate dev # Apply migrations to the database -``` - ### Building To create a production version of your app: diff --git a/package.json b/package.json index 3d3d5d2..fe59a0b 100644 --- a/package.json +++ b/package.json @@ -18,53 +18,49 @@ }, "dependencies": { "@auth/core": "^0.27.0", + "@auth/sveltekit": "^0.13.0", "@floating-ui/core": "^1.6.0", "@mdi/js": "^7.4.47", - "@prisma/client": "^5.10.2", - "diff": "^5.2.0", - "isomorphic-dompurify": "^2.4.0", + "@prisma/client": "^5.9.1", + "isomorphic-dompurify": "^2.3.0", "marked": "^12.0.0", - "set-cookie-parser": "^2.6.0", "svelte-floating-ui": "^1.5.8", "zod": "^3.22.4", "zod-form-data": "^2.0.2" }, "devDependencies": { "@faker-js/faker": "^8.4.1", - "@playwright/test": "^1.42.0", + "@playwright/test": "^1.41.2", "@sveltejs/adapter-node": "^4.0.1", - "@sveltejs/kit": "^2.5.2", + "@sveltejs/kit": "^2.5.0", "@sveltejs/vite-plugin-svelte": "^3.0.2", "@tailwindcss/typography": "^0.5.10", "@trpc/client": "^10.45.1", "@trpc/server": "^10.45.1", - "@types/diff": "^5.0.9", - "@types/node": "^20.11.21", - "@types/set-cookie-parser": "^2.4.7", - "@typescript-eslint/eslint-plugin": "^7.1.0", - "@typescript-eslint/parser": "^7.1.0", + "@types/node": "^20.11.19", + "@typescript-eslint/eslint-plugin": "^7.0.1", + "@typescript-eslint/parser": "^7.0.1", "autoprefixer": "^10.4.17", "daisyui": "^4.7.2", - "dotenv": "^16.4.5", - "eslint": "^8.57.0", + "eslint": "^8.56.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-no-relative-import-paths": "^1.5.3", "eslint-plugin-svelte": "^2.35.1", "postcss-import": "^16.0.1", - "postcss-nesting": "^12.0.4", + "postcss-nesting": "^12.0.2", "prettier": "^3.2.5", - "prettier-plugin-svelte": "^3.2.2", - "prisma": "^5.10.2", - "svelte": "^4.2.12", - "svelte-check": "^3.6.5", - "sveltekit-superforms": "^2.6.2", + "prettier-plugin-svelte": "^3.2.1", + "prisma": "^5.9.1", + "svelte": "^4.2.11", + "svelte-check": "^3.6.4", + "sveltekit-superforms": "^2.3.0", "tailwindcss": "^3.4.1", - "trpc-sveltekit": "^3.5.27", + "trpc-sveltekit": "^3.5.26", "tslib": "^2.6.2", "tsx": "^4.7.1", "typescript": "^5.3.3", - "vite": "^5.1.4", - "vitest": "^1.3.1" + "vite": "^5.1.3", + "vitest": "^1.3.0" }, "type": "module" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 027929e..299c13b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ dependencies: '@auth/core': specifier: ^0.27.0 version: 0.27.0 + '@auth/sveltekit': + specifier: ^0.13.0 + version: 0.13.0(@sveltejs/kit@2.5.0)(svelte@4.2.11) '@floating-ui/core': specifier: ^1.6.0 version: 1.6.0 @@ -15,20 +18,14 @@ dependencies: specifier: ^7.4.47 version: 7.4.47 '@prisma/client': - specifier: ^5.10.2 - version: 5.10.2(prisma@5.10.2) - diff: - specifier: ^5.2.0 - version: 5.2.0 + specifier: ^5.9.1 + version: 5.9.1(prisma@5.9.1) isomorphic-dompurify: - specifier: ^2.4.0 - version: 2.4.0 + specifier: ^2.3.0 + version: 2.3.0 marked: specifier: ^12.0.0 version: 12.0.0 - set-cookie-parser: - specifier: ^2.6.0 - version: 2.6.0 svelte-floating-ui: specifier: ^1.5.8 version: 1.5.8 @@ -44,17 +41,17 @@ devDependencies: specifier: ^8.4.1 version: 8.4.1 '@playwright/test': - specifier: ^1.42.0 - version: 1.42.0 + specifier: ^1.41.2 + version: 1.41.2 '@sveltejs/adapter-node': specifier: ^4.0.1 - version: 4.0.1(@sveltejs/kit@2.5.2) + version: 4.0.1(@sveltejs/kit@2.5.0) '@sveltejs/kit': - specifier: ^2.5.2 - version: 2.5.2(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@5.1.4) + specifier: ^2.5.0 + version: 2.5.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.11)(vite@5.1.3) '@sveltejs/vite-plugin-svelte': specifier: ^3.0.2 - version: 3.0.2(svelte@4.2.12)(vite@5.1.4) + version: 3.0.2(svelte@4.2.11)(vite@5.1.3) '@tailwindcss/typography': specifier: ^0.5.10 version: 0.5.10(tailwindcss@3.4.1) @@ -64,72 +61,63 @@ devDependencies: '@trpc/server': specifier: ^10.45.1 version: 10.45.1 - '@types/diff': - specifier: ^5.0.9 - version: 5.0.9 '@types/node': - specifier: ^20.11.21 - version: 20.11.21 - '@types/set-cookie-parser': - specifier: ^2.4.7 - version: 2.4.7 + specifier: ^20.11.19 + version: 20.11.19 '@typescript-eslint/eslint-plugin': - specifier: ^7.1.0 - version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3) + specifier: ^7.0.1 + version: 7.0.1(@typescript-eslint/parser@7.0.1)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': - specifier: ^7.1.0 - version: 7.1.0(eslint@8.57.0)(typescript@5.3.3) + specifier: ^7.0.1 + version: 7.0.1(eslint@8.56.0)(typescript@5.3.3) autoprefixer: specifier: ^10.4.17 version: 10.4.17(postcss@8.4.35) daisyui: specifier: ^4.7.2 version: 4.7.2(postcss@8.4.35) - dotenv: - specifier: ^16.4.5 - version: 16.4.5 eslint: - specifier: ^8.57.0 - version: 8.57.0 + specifier: ^8.56.0 + version: 8.56.0 eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@8.57.0) + version: 9.1.0(eslint@8.56.0) eslint-plugin-no-relative-import-paths: specifier: ^1.5.3 version: 1.5.3 eslint-plugin-svelte: specifier: ^2.35.1 - version: 2.35.1(eslint@8.57.0)(svelte@4.2.12) + version: 2.35.1(eslint@8.56.0)(svelte@4.2.11) postcss-import: specifier: ^16.0.1 version: 16.0.1(postcss@8.4.35) postcss-nesting: - specifier: ^12.0.4 - version: 12.0.4(postcss@8.4.35) + specifier: ^12.0.2 + version: 12.0.2(postcss@8.4.35) prettier: specifier: ^3.2.5 version: 3.2.5 prettier-plugin-svelte: - specifier: ^3.2.2 - version: 3.2.2(prettier@3.2.5)(svelte@4.2.12) + specifier: ^3.2.1 + version: 3.2.1(prettier@3.2.5)(svelte@4.2.11) prisma: - specifier: ^5.10.2 - version: 5.10.2 + specifier: ^5.9.1 + version: 5.9.1 svelte: - specifier: ^4.2.12 - version: 4.2.12 + specifier: ^4.2.11 + version: 4.2.11 svelte-check: - specifier: ^3.6.5 - version: 3.6.5(postcss@8.4.35)(svelte@4.2.12) + specifier: ^3.6.4 + version: 3.6.4(postcss@8.4.35)(svelte@4.2.11) sveltekit-superforms: - specifier: ^2.6.2 - version: 2.6.2(@sveltejs/kit@2.5.2)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.1)(svelte@4.2.12) + specifier: ^2.3.0 + version: 2.3.0(@sveltejs/kit@2.5.0)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.19.12)(svelte@4.2.11) tailwindcss: specifier: ^3.4.1 version: 3.4.1 trpc-sveltekit: - specifier: ^3.5.27 - version: 3.5.27(@sveltejs/adapter-node@4.0.1)(@trpc/client@10.45.1)(@trpc/server@10.45.1)(ws@8.16.0) + specifier: ^3.5.26 + version: 3.5.26(@sveltejs/adapter-node@4.0.1)(@trpc/client@10.45.1)(@trpc/server@10.45.1)(ws@8.16.0) tslib: specifier: ^2.6.2 version: 2.6.2 @@ -140,11 +128,11 @@ devDependencies: specifier: ^5.3.3 version: 5.3.3 vite: - specifier: ^5.1.4 - version: 5.1.4(@types/node@20.11.21) + specifier: ^5.1.3 + version: 5.1.3(@types/node@20.11.19) vitest: - specifier: ^1.3.1 - version: 1.3.1(@types/node@20.11.21) + specifier: ^1.3.0 + version: 1.3.0(@types/node@20.11.19) packages: @@ -162,9 +150,8 @@ packages: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.4 - '@jridgewell/trace-mapping': 0.3.23 - dev: true + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.22 /@auth/core@0.27.0: resolution: {integrity: sha512-3bydnRJIM/Al6mkYmb53MsC+6G8ojw3lLPzwgVnX4dCo6N2lrib6Wq6r0vxZIhuHGjLObqqtUfpeaEj5aeTHFg==} @@ -189,8 +176,24 @@ packages: preact-render-to-string: 5.2.3(preact@10.11.3) dev: false - /@csstools/selector-specificity@3.0.2(postcss-selector-parser@6.0.15): - resolution: {integrity: sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==} + /@auth/sveltekit@0.13.0(@sveltejs/kit@2.5.0)(svelte@4.2.11): + resolution: {integrity: sha512-o0WZWsgscWuaSqWeEom3qy8Xw9jrCdpKiH6Tte7yB17iSll2WcVPpT2DAPUqLw3E7DtRpE8JGloWMsAlw11N0A==} + peerDependencies: + '@sveltejs/kit': ^1.0.0 || ^2.0.0 + svelte: ^3.54.0 || ^4.0.0 || ^5 + dependencies: + '@auth/core': 0.27.0 + '@sveltejs/kit': 2.5.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.11)(vite@5.1.3) + set-cookie-parser: 2.6.0 + svelte: 4.2.11 + transitivePeerDependencies: + - '@simplewebauthn/browser' + - '@simplewebauthn/server' + - nodemailer + dev: false + + /@csstools/selector-specificity@3.0.1(postcss-selector-parser@6.0.15): + resolution: {integrity: sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss-selector-parser: ^6.0.13 @@ -204,16 +207,6 @@ packages: cpu: [ppc64] os: [aix] requiresBuild: true - dev: true - optional: true - - /@esbuild/aix-ppc64@0.20.1: - resolution: {integrity: sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: true optional: true /@esbuild/android-arm64@0.19.12: @@ -222,16 +215,6 @@ packages: cpu: [arm64] os: [android] requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm64@0.20.1: - resolution: {integrity: sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true optional: true /@esbuild/android-arm@0.19.12: @@ -240,16 +223,6 @@ packages: cpu: [arm] os: [android] requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.20.1: - resolution: {integrity: sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true optional: true /@esbuild/android-x64@0.19.12: @@ -258,16 +231,6 @@ packages: cpu: [x64] os: [android] requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.20.1: - resolution: {integrity: sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true optional: true /@esbuild/darwin-arm64@0.19.12: @@ -276,16 +239,6 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.20.1: - resolution: {integrity: sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true optional: true /@esbuild/darwin-x64@0.19.12: @@ -294,16 +247,6 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.20.1: - resolution: {integrity: sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true optional: true /@esbuild/freebsd-arm64@0.19.12: @@ -312,16 +255,6 @@ packages: cpu: [arm64] os: [freebsd] requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.20.1: - resolution: {integrity: sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true optional: true /@esbuild/freebsd-x64@0.19.12: @@ -330,16 +263,6 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.20.1: - resolution: {integrity: sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true optional: true /@esbuild/linux-arm64@0.19.12: @@ -348,16 +271,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.20.1: - resolution: {integrity: sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true optional: true /@esbuild/linux-arm@0.19.12: @@ -366,16 +279,6 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.20.1: - resolution: {integrity: sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true optional: true /@esbuild/linux-ia32@0.19.12: @@ -384,16 +287,6 @@ packages: cpu: [ia32] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.20.1: - resolution: {integrity: sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true optional: true /@esbuild/linux-loong64@0.19.12: @@ -402,16 +295,6 @@ packages: cpu: [loong64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.20.1: - resolution: {integrity: sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true optional: true /@esbuild/linux-mips64el@0.19.12: @@ -420,16 +303,6 @@ packages: cpu: [mips64el] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.20.1: - resolution: {integrity: sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true optional: true /@esbuild/linux-ppc64@0.19.12: @@ -438,16 +311,6 @@ packages: cpu: [ppc64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ppc64@0.20.1: - resolution: {integrity: sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true optional: true /@esbuild/linux-riscv64@0.19.12: @@ -456,16 +319,6 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.20.1: - resolution: {integrity: sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true optional: true /@esbuild/linux-s390x@0.19.12: @@ -474,16 +327,6 @@ packages: cpu: [s390x] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x@0.20.1: - resolution: {integrity: sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true optional: true /@esbuild/linux-x64@0.19.12: @@ -492,16 +335,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.20.1: - resolution: {integrity: sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true optional: true /@esbuild/netbsd-x64@0.19.12: @@ -510,16 +343,6 @@ packages: cpu: [x64] os: [netbsd] requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.20.1: - resolution: {integrity: sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true optional: true /@esbuild/openbsd-x64@0.19.12: @@ -528,16 +351,6 @@ packages: cpu: [x64] os: [openbsd] requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.20.1: - resolution: {integrity: sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true optional: true /@esbuild/sunos-x64@0.19.12: @@ -546,16 +359,6 @@ packages: cpu: [x64] os: [sunos] requiresBuild: true - dev: true - optional: true - - /@esbuild/sunos-x64@0.20.1: - resolution: {integrity: sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true optional: true /@esbuild/win32-arm64@0.19.12: @@ -564,16 +367,6 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.20.1: - resolution: {integrity: sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true optional: true /@esbuild/win32-ia32@0.19.12: @@ -582,16 +375,6 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.20.1: - resolution: {integrity: sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true optional: true /@esbuild/win32-x64@0.19.12: @@ -600,25 +383,15 @@ packages: cpu: [x64] os: [win32] requiresBuild: true - dev: true optional: true - /@esbuild/win32-x64@0.20.1: - resolution: {integrity: sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.57.0 + eslint: 8.56.0 eslint-visitor-keys: 3.4.3 dev: true @@ -644,8 +417,8 @@ packages: - supports-color dev: true - /@eslint/js@8.57.0: - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + /@eslint/js@8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -671,7 +444,7 @@ packages: resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} dev: false - /@gcornut/valibot-json-schema@0.0.22(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.1)(valibot@0.28.1): + /@gcornut/valibot-json-schema@0.0.22(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.19.12)(valibot@0.28.1): resolution: {integrity: sha512-aUrIDndl7KJF1LruNMpGFMIQRNwB4pV5YhiTvgmIKkjet+OhEmX5ZfaET8MQQ+Br0Dd6fQgVtNbxhmyLPDB1+A==} hasBin: true requiresBuild: true @@ -682,8 +455,8 @@ packages: valibot: '>= 0.21.0' dependencies: '@types/json-schema': 7.0.15 - esbuild: 0.20.1 - esbuild-runner: 2.2.2(esbuild@0.20.1) + esbuild: 0.19.12 + esbuild-runner: 2.2.2(esbuild@0.19.12) valibot: 0.28.1 dev: true optional: true @@ -741,35 +514,30 @@ packages: '@sinclair/typebox': 0.27.8 dev: true - /@jridgewell/gen-mapping@0.3.4: - resolution: {integrity: sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==} + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.23 - dev: true + '@jridgewell/trace-mapping': 0.3.22 /@jridgewell/resolve-uri@3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true - /@jridgewell/trace-mapping@0.3.23: - resolution: {integrity: sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==} + /@jridgewell/trace-mapping@0.3.22: + resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /@mdi/js@7.4.47: resolution: {integrity: sha512-KPnNOtm5i2pMabqZxpUz7iQf+mfrYZyKCZ8QNz85czgEt7cuHcGorWfdzUMWYA0SD+a6Hn4FmJ+YhzzzjkTZrQ==} @@ -807,17 +575,16 @@ packages: dev: true optional: true - /@playwright/test@1.42.0: - resolution: {integrity: sha512-2k1HzC28Fs+HiwbJOQDUwrWMttqSLUVdjCqitBOjdCD0svWOMQUVqrXX6iFD7POps6xXAojsX/dGBpKnjZctLA==} + /@playwright/test@1.41.2: + resolution: {integrity: sha512-qQB9h7KbibJzrDpkXkYvsmiDJK14FULCCZgEcoe2AvFAS64oCirWTwzTlAYEbKaRxWs5TFesE1Na6izMv3HfGg==} engines: {node: '>=16'} hasBin: true dependencies: - playwright: 1.42.0 + playwright: 1.41.2 dev: true /@polka/url@1.0.0-next.24: resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==} - dev: true /@poppinss/macroable@1.0.1: resolution: {integrity: sha512-bO3+rnqGhE+gdx4DOyYjY9jCm2+c5Ncyl2Gmst0w271rIFnsB00btonpdmAqvFNzS8rcas+APGm+47fYMmkpQA==} @@ -826,8 +593,8 @@ packages: dev: true optional: true - /@prisma/client@5.10.2(prisma@5.10.2): - resolution: {integrity: sha512-ef49hzB2yJZCvM5gFHMxSFL9KYrIP9udpT5rYo0CsHD4P9IKj473MbhU1gjKKftiwWBTIyrt9jukprzZXazyag==} + /@prisma/client@5.9.1(prisma@5.9.1): + resolution: {integrity: sha512-caSOnG4kxcSkhqC/2ShV7rEoWwd3XrftokxJqOCMVvia4NYV/TPtJlS9C2os3Igxw/Qyxumj9GBQzcStzECvtQ==} engines: {node: '>=16.13'} requiresBuild: true peerDependencies: @@ -836,35 +603,35 @@ packages: prisma: optional: true dependencies: - prisma: 5.10.2 + prisma: 5.9.1 dev: false - /@prisma/debug@5.10.2: - resolution: {integrity: sha512-bkBOmH9dpEBbMKFJj8V+Zp8IZHIBjy3fSyhLhxj4FmKGb/UBSt9doyfA6k1UeUREsMJft7xgPYBbHSOYBr8XCA==} + /@prisma/debug@5.9.1: + resolution: {integrity: sha512-yAHFSFCg8KVoL0oRUno3m60GAjsUKYUDkQ+9BA2X2JfVR3kRVSJFc/GpQ2fSORi4pSHZR9orfM4UC9OVXIFFTA==} - /@prisma/engines-version@5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9: - resolution: {integrity: sha512-uCy/++3Jx/O3ufM+qv2H1L4tOemTNqcP/gyEVOlZqTpBvYJUe0tWtW0y3o2Ueq04mll4aM5X3f6ugQftOSLdFQ==} + /@prisma/engines-version@5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64: + resolution: {integrity: sha512-HFl7275yF0FWbdcNvcSRbbu9JCBSLMcurYwvWc8WGDnpu7APxQo2ONtZrUggU3WxLxUJ2uBX+0GOFIcJeVeOOQ==} - /@prisma/engines@5.10.2: - resolution: {integrity: sha512-HkSJvix6PW8YqEEt3zHfCYYJY69CXsNdhU+wna+4Y7EZ+AwzeupMnUThmvaDA7uqswiHkgm5/SZ6/4CStjaGmw==} + /@prisma/engines@5.9.1: + resolution: {integrity: sha512-gkdXmjxQ5jktxWNdDA5aZZ6R8rH74JkoKq6LD5mACSvxd2vbqWeWIOV0Py5wFC8vofOYShbt6XUeCIUmrOzOnQ==} requiresBuild: true dependencies: - '@prisma/debug': 5.10.2 - '@prisma/engines-version': 5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9 - '@prisma/fetch-engine': 5.10.2 - '@prisma/get-platform': 5.10.2 + '@prisma/debug': 5.9.1 + '@prisma/engines-version': 5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64 + '@prisma/fetch-engine': 5.9.1 + '@prisma/get-platform': 5.9.1 - /@prisma/fetch-engine@5.10.2: - resolution: {integrity: sha512-dSmXcqSt6DpTmMaLQ9K8ZKzVAMH3qwGCmYEZr/uVnzVhxRJ1EbT/w2MMwIdBNq1zT69Rvh0h75WMIi0mrIw7Hg==} + /@prisma/fetch-engine@5.9.1: + resolution: {integrity: sha512-l0goQOMcNVOJs1kAcwqpKq3ylvkD9F04Ioe1oJoCqmz05mw22bNAKKGWuDd3zTUoUZr97va0c/UfLNru+PDmNA==} dependencies: - '@prisma/debug': 5.10.2 - '@prisma/engines-version': 5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9 - '@prisma/get-platform': 5.10.2 + '@prisma/debug': 5.9.1 + '@prisma/engines-version': 5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64 + '@prisma/get-platform': 5.9.1 - /@prisma/get-platform@5.10.2: - resolution: {integrity: sha512-nqXP6vHiY2PIsebBAuDeWiUYg8h8mfjBckHh6Jezuwej0QJNnjDiOq30uesmg+JXxGk99nqyG3B7wpcOODzXvg==} + /@prisma/get-platform@5.9.1: + resolution: {integrity: sha512-6OQsNxTyhvG+T2Ksr8FPFpuPeL4r9u0JF0OZHUBI/Uy9SS43sPyAIutt4ZEAyqWQt104ERh70EZedkHZKsnNbg==} dependencies: - '@prisma/debug': 5.10.2 + '@prisma/debug': 5.9.1 /@rollup/plugin-commonjs@25.0.7(rollup@4.12.0): resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==} @@ -935,7 +702,6 @@ packages: cpu: [arm] os: [android] requiresBuild: true - dev: true optional: true /@rollup/rollup-android-arm64@4.12.0: @@ -943,7 +709,6 @@ packages: cpu: [arm64] os: [android] requiresBuild: true - dev: true optional: true /@rollup/rollup-darwin-arm64@4.12.0: @@ -951,7 +716,6 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true - dev: true optional: true /@rollup/rollup-darwin-x64@4.12.0: @@ -959,7 +723,6 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true - dev: true optional: true /@rollup/rollup-linux-arm-gnueabihf@4.12.0: @@ -967,7 +730,6 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: true optional: true /@rollup/rollup-linux-arm64-gnu@4.12.0: @@ -975,7 +737,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: true optional: true /@rollup/rollup-linux-arm64-musl@4.12.0: @@ -983,7 +744,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: true optional: true /@rollup/rollup-linux-riscv64-gnu@4.12.0: @@ -991,7 +751,6 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true - dev: true optional: true /@rollup/rollup-linux-x64-gnu@4.12.0: @@ -999,7 +758,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: true optional: true /@rollup/rollup-linux-x64-musl@4.12.0: @@ -1007,7 +765,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: true optional: true /@rollup/rollup-win32-arm64-msvc@4.12.0: @@ -1015,7 +772,6 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true - dev: true optional: true /@rollup/rollup-win32-ia32-msvc@4.12.0: @@ -1023,7 +779,6 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true - dev: true optional: true /@rollup/rollup-win32-x64-msvc@4.12.0: @@ -1031,7 +786,6 @@ packages: cpu: [x64] os: [win32] requiresBuild: true - dev: true optional: true /@sideway/address@4.1.5: @@ -1070,7 +824,7 @@ packages: dev: true optional: true - /@sveltejs/adapter-node@4.0.1(@sveltejs/kit@2.5.2): + /@sveltejs/adapter-node@4.0.1(@sveltejs/kit@2.5.0): resolution: {integrity: sha512-IviiTtKCDp+0QoTmmMlGGZBA1EoUNsjecU6XGV9k62S3f01SNsVhpqi2e4nbI62BLGKh/YKKfFii+Vz/b9XIxg==} peerDependencies: '@sveltejs/kit': ^2.4.0 @@ -1078,12 +832,12 @@ packages: '@rollup/plugin-commonjs': 25.0.7(rollup@4.12.0) '@rollup/plugin-json': 6.1.0(rollup@4.12.0) '@rollup/plugin-node-resolve': 15.2.3(rollup@4.12.0) - '@sveltejs/kit': 2.5.2(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@5.1.4) + '@sveltejs/kit': 2.5.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.11)(vite@5.1.3) rollup: 4.12.0 dev: true - /@sveltejs/kit@2.5.2(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@5.1.4): - resolution: {integrity: sha512-1Pm2lsBYURQsjnLyZa+jw75eVD4gYHxGRwPyFe4DAmB3FjTVR8vRNWGeuDLGFcKMh/B1ij6FTUrc9GrerogCng==} + /@sveltejs/kit@2.5.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.11)(vite@5.1.3): + resolution: {integrity: sha512-1uyXvzC2Lu1FZa30T4y5jUAC21R309ZMRG0TPt+PPPbNUoDpy8zSmSNVWYaBWxYDqLGQ5oPNWvjvvF2IjJ1jmA==} engines: {node: '>=18.13'} hasBin: true requiresBuild: true @@ -1092,7 +846,7 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.3 dependencies: - '@sveltejs/vite-plugin-svelte': 3.0.2(svelte@4.2.12)(vite@5.1.4) + '@sveltejs/vite-plugin-svelte': 3.0.2(svelte@4.2.11)(vite@5.1.3) '@types/cookie': 0.6.0 cookie: 0.6.0 devalue: 4.3.2 @@ -1104,12 +858,11 @@ packages: sade: 1.8.1 set-cookie-parser: 2.6.0 sirv: 2.0.4 - svelte: 4.2.12 + svelte: 4.2.11 tiny-glob: 0.2.9 - vite: 5.1.4(@types/node@20.11.21) - dev: true + vite: 5.1.3(@types/node@20.11.19) - /@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@5.1.4): + /@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.11)(vite@5.1.3): resolution: {integrity: sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==} engines: {node: ^18.0.0 || >=20} peerDependencies: @@ -1117,33 +870,31 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 3.0.2(svelte@4.2.12)(vite@5.1.4) + '@sveltejs/vite-plugin-svelte': 3.0.2(svelte@4.2.11)(vite@5.1.3) debug: 4.3.4 - svelte: 4.2.12 - vite: 5.1.4(@types/node@20.11.21) + svelte: 4.2.11 + vite: 5.1.3(@types/node@20.11.19) transitivePeerDependencies: - supports-color - dev: true - /@sveltejs/vite-plugin-svelte@3.0.2(svelte@4.2.12)(vite@5.1.4): + /@sveltejs/vite-plugin-svelte@3.0.2(svelte@4.2.11)(vite@5.1.3): resolution: {integrity: sha512-MpmF/cju2HqUls50WyTHQBZUV3ovV/Uk8k66AN2gwHogNAG8wnW8xtZDhzNBsFJJuvmq1qnzA5kE7YfMJNFv2Q==} engines: {node: ^18.0.0 || >=20} peerDependencies: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@5.1.4) + '@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.11)(vite@5.1.3) debug: 4.3.4 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.7 - svelte: 4.2.12 - svelte-hmr: 0.15.3(svelte@4.2.12) - vite: 5.1.4(@types/node@20.11.21) - vitefu: 0.2.5(vite@5.1.4) + svelte: 4.2.11 + svelte-hmr: 0.15.3(svelte@4.2.11) + vite: 5.1.3(@types/node@20.11.19) + vitefu: 0.2.5(vite@5.1.3) transitivePeerDependencies: - supports-color - dev: true /@tailwindcss/typography@0.5.10(tailwindcss@3.4.1): resolution: {integrity: sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==} @@ -1172,10 +923,6 @@ packages: /@types/cookie@0.6.0: resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - /@types/diff@5.0.9: - resolution: {integrity: sha512-RWVEhh/zGXpAVF/ZChwNnv7r4rvqzJ7lYNSmZSVTxjV0PBLf6Qu7RNg+SUtkpzxmiNkjCx0Xn2tPp7FIkshJwQ==} - dev: true - /@types/dompurify@3.0.5: resolution: {integrity: sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==} dependencies: @@ -1184,17 +931,15 @@ packages: /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: true /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true - /@types/node@20.11.21: - resolution: {integrity: sha512-/ySDLGscFPNasfqStUuWWPfL78jompfIoVzLJPVVAHBh6rpG68+pI2Gk+fNLeI8/f1yPYL4s46EleVIc20F1Ow==} + /@types/node@20.11.19: + resolution: {integrity: sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==} dependencies: undici-types: 5.26.5 - dev: true /@types/pug@2.0.10: resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} @@ -1204,14 +949,8 @@ packages: resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} dev: true - /@types/semver@7.5.8: - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - dev: true - - /@types/set-cookie-parser@2.4.7: - resolution: {integrity: sha512-+ge/loa0oTozxip6zmhRIk8Z/boU51wl9Q6QdLZcokIGMzY5lFXYy/x7Htj2HTC6/KZP1hUbZ1ekx8DYXICvWg==} - dependencies: - '@types/node': 20.11.21 + /@types/semver@7.5.7: + resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==} dev: true /@types/trusted-types@2.0.7: @@ -1224,8 +963,8 @@ packages: dev: true optional: true - /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3): - resolution: {integrity: sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==} + /@typescript-eslint/eslint-plugin@7.0.1(@typescript-eslint/parser@7.0.1)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-OLvgeBv3vXlnnJGIAgCLYKjgMEU+wBGj07MQ/nxAaON+3mLzX7mJbhRYrVGiVvFiXtwFlkcBa/TtmglHy0UbzQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -1236,13 +975,13 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 7.1.0 + '@typescript-eslint/parser': 7.0.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 7.0.1 + '@typescript-eslint/type-utils': 7.0.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 7.0.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 7.0.1 debug: 4.3.4 - eslint: 8.57.0 + eslint: 8.56.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 @@ -1253,8 +992,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3): - resolution: {integrity: sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w==} + /@typescript-eslint/parser@7.0.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-8GcRRZNzaHxKzBPU3tKtFNing571/GwPBeCvmAUw0yBtfE2XVd0zFKJIMSWkHJcPQi0ekxjIts6L/rrZq5cxGQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^8.56.0 @@ -1263,27 +1002,27 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 7.1.0 + '@typescript-eslint/scope-manager': 7.0.1 + '@typescript-eslint/types': 7.0.1 + '@typescript-eslint/typescript-estree': 7.0.1(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 7.0.1 debug: 4.3.4 - eslint: 8.57.0 + eslint: 8.56.0 typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@7.1.0: - resolution: {integrity: sha512-6TmN4OJiohHfoOdGZ3huuLhpiUgOGTpgXNUPJgeZOZR3DnIpdSgtt83RS35OYNNXxM4TScVlpVKC9jyQSETR1A==} + /@typescript-eslint/scope-manager@7.0.1: + resolution: {integrity: sha512-v7/T7As10g3bcWOOPAcbnMDuvctHzCFYCG/8R4bK4iYzdFqsZTbXGln0cZNVcwQcwewsYU2BJLay8j0/4zOk4w==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/visitor-keys': 7.1.0 + '@typescript-eslint/types': 7.0.1 + '@typescript-eslint/visitor-keys': 7.0.1 dev: true - /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): - resolution: {integrity: sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew==} + /@typescript-eslint/type-utils@7.0.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-YtT9UcstTG5Yqy4xtLiClm1ZpM/pWVGFnkAa90UfdkkZsR1eP2mR/1jbHeYp8Ay1l1JHPyGvoUYR6o3On5Nhmw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^8.56.0 @@ -1292,23 +1031,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 7.0.1(typescript@5.3.3) + '@typescript-eslint/utils': 7.0.1(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4 - eslint: 8.57.0 + eslint: 8.56.0 ts-api-utils: 1.2.1(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@7.1.0: - resolution: {integrity: sha512-qTWjWieJ1tRJkxgZYXx6WUYtWlBc48YRxgY2JN1aGeVpkhmnopq+SUC8UEVGNXIvWH7XyuTjwALfG6bFEgCkQA==} + /@typescript-eslint/types@7.0.1: + resolution: {integrity: sha512-uJDfmirz4FHib6ENju/7cz9SdMSkeVvJDK3VcMFvf/hAShg8C74FW+06MaQPODHfDJp/z/zHfgawIJRjlu0RLg==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@7.1.0(typescript@5.3.3): - resolution: {integrity: sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ==} + /@typescript-eslint/typescript-estree@7.0.1(typescript@5.3.3): + resolution: {integrity: sha512-SO9wHb6ph0/FN5OJxH4MiPscGah5wjOd0RRpaLvuBv9g8565Fgu0uMySFEPqwPHiQU90yzJ2FjRYKGrAhS1xig==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -1316,8 +1055,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/visitor-keys': 7.1.0 + '@typescript-eslint/types': 7.0.1 + '@typescript-eslint/visitor-keys': 7.0.1 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -1329,30 +1068,30 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): - resolution: {integrity: sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw==} + /@typescript-eslint/utils@7.0.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-oe4his30JgPbnv+9Vef1h48jm0S6ft4mNwi9wj7bX10joGn07QRfqIqFHoMiajrtoU88cIhXf8ahwgrcbNLgPA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^8.56.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - eslint: 8.57.0 + '@types/semver': 7.5.7 + '@typescript-eslint/scope-manager': 7.0.1 + '@typescript-eslint/types': 7.0.1 + '@typescript-eslint/typescript-estree': 7.0.1(typescript@5.3.3) + eslint: 8.56.0 semver: 7.6.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@7.1.0: - resolution: {integrity: sha512-FhUqNWluiGNzlvnDZiXad4mZRhtghdoKW6e98GoEOYSu5cND+E39rG5KwJMUzeENwm1ztYBRqof8wMLP+wNPIA==} + /@typescript-eslint/visitor-keys@7.0.1: + resolution: {integrity: sha512-hwAgrOyk++RTXrP4KzCg7zB2U0xt7RUU0ZdMSCsqF3eKUwkdXUMyTb0qdCuji7VIbcpG62kKTU9M1J1c9UpFBw==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 7.1.0 + '@typescript-eslint/types': 7.0.1 eslint-visitor-keys: 3.4.3 dev: true @@ -1383,38 +1122,38 @@ packages: dev: true optional: true - /@vitest/expect@1.3.1: - resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==} + /@vitest/expect@1.3.0: + resolution: {integrity: sha512-7bWt0vBTZj08B+Ikv70AnLRicohYwFgzNjFqo9SxxqHHxSlUJGSXmCRORhOnRMisiUryKMdvsi1n27Bc6jL9DQ==} dependencies: - '@vitest/spy': 1.3.1 - '@vitest/utils': 1.3.1 + '@vitest/spy': 1.3.0 + '@vitest/utils': 1.3.0 chai: 4.4.1 dev: true - /@vitest/runner@1.3.1: - resolution: {integrity: sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg==} + /@vitest/runner@1.3.0: + resolution: {integrity: sha512-1Jb15Vo/Oy7mwZ5bXi7zbgszsdIBNjc4IqP8Jpr/8RdBC4nF1CTzIAn2dxYvpF1nGSseeL39lfLQ2uvs5u1Y9A==} dependencies: - '@vitest/utils': 1.3.1 + '@vitest/utils': 1.3.0 p-limit: 5.0.0 pathe: 1.1.2 dev: true - /@vitest/snapshot@1.3.1: - resolution: {integrity: sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ==} + /@vitest/snapshot@1.3.0: + resolution: {integrity: sha512-swmktcviVVPYx9U4SEQXLV6AEY51Y6bZ14jA2yo6TgMxQ3h+ZYiO0YhAHGJNp0ohCFbPAis1R9kK0cvN6lDPQA==} dependencies: magic-string: 0.30.7 pathe: 1.1.2 pretty-format: 29.7.0 dev: true - /@vitest/spy@1.3.1: - resolution: {integrity: sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==} + /@vitest/spy@1.3.0: + resolution: {integrity: sha512-AkCU0ThZunMvblDpPKgjIi025UxR8V7MZ/g/EwmAGpjIujLVV2X6rGYGmxE2D4FJbAy0/ijdROHMWa2M/6JVMw==} dependencies: tinyspy: 2.2.1 dev: true - /@vitest/utils@1.3.1: - resolution: {integrity: sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==} + /@vitest/utils@1.3.0: + resolution: {integrity: sha512-/LibEY/fkaXQufi4GDlQZhikQsPO2entBKtfuyIpr1jV4DpaeasqkeHjhdOhU24vSHshcSuEyVlWdzvv2XmYCw==} dependencies: diff-sequences: 29.6.3 estree-walker: 3.0.3 @@ -1439,7 +1178,6 @@ packages: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /agent-base@7.1.0: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} @@ -1510,7 +1248,6 @@ packages: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} dependencies: dequal: 2.0.3 - dev: true /arktype@1.0.29-alpha: resolution: {integrity: sha512-glMLgVhIQRSkR3tymiS+POAcWVJH09sfrgic0jHnyFL8BlhHAJZX2BzdImU9zYr1y9NBqy+U93ZNrRTHXsKRDw==} @@ -1539,7 +1276,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001591 + caniuse-lite: 1.0.30001587 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -1551,7 +1288,6 @@ packages: resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==} dependencies: dequal: 2.0.3 - dev: true /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -1587,8 +1323,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001591 - electron-to-chromium: 1.4.685 + caniuse-lite: 1.0.30001587 + electron-to-chromium: 1.4.673 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) dev: true @@ -1629,8 +1365,8 @@ packages: dev: true optional: true - /caniuse-lite@1.0.30001591: - resolution: {integrity: sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==} + /caniuse-lite@1.0.30001587: + resolution: {integrity: sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==} dev: true /chai@4.4.1: @@ -1683,7 +1419,6 @@ packages: acorn: 8.11.3 estree-walker: 3.0.3 periscopic: 3.1.0 - dev: true /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} @@ -1742,7 +1477,6 @@ packages: dependencies: mdn-data: 2.0.30 source-map-js: 1.0.2 - dev: true /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} @@ -1817,7 +1551,6 @@ packages: /deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - dev: true /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} @@ -1827,7 +1560,6 @@ packages: /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - dev: true /detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} @@ -1836,7 +1568,6 @@ packages: /devalue@4.3.2: resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} - dev: true /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -1847,11 +1578,6 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /diff@5.2.0: - resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} - engines: {node: '>=0.3.1'} - dev: false - /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -1870,21 +1596,16 @@ packages: esutils: 2.0.3 dev: true - /dompurify@3.0.9: - resolution: {integrity: sha512-uyb4NDIvQ3hRn6NiC+SIFaP4mJ/MdXlvtunaqK9Bn6dD3RuB/1S/gasEjDHD8eiaqdSael2vBv+hOs7Y+jhYOQ==} + /dompurify@3.0.8: + resolution: {integrity: sha512-b7uwreMYL2eZhrSCRC4ahLTeZcPZxSmYfmcQGXGkXiZSNW1X85v+SDM5KsWcpivIiUBH47Ji7NtyUdpLeF5JZQ==} dev: false - /dotenv@16.4.5: - resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} - engines: {node: '>=12'} - dev: true - /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.685: - resolution: {integrity: sha512-yDYeobbTEe4TNooEzOQO6xFqg9XnAkVy2Lod1C1B2it8u47JNLYvl9nLDWBamqUakWB8Jc1hhS1uHUNYTNQdfw==} + /electron-to-chromium@1.4.673: + resolution: {integrity: sha512-zjqzx4N7xGdl5468G+vcgzDhaHkaYgVcf9MqgexcTqsl2UHSCmOj/Bi3HAprg4BZCpC7HyD8a6nZl6QAZf72gw==} dev: true /emoji-regex@8.0.0: @@ -1904,13 +1625,13 @@ packages: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} dev: true - /esbuild-runner@2.2.2(esbuild@0.20.1): + /esbuild-runner@2.2.2(esbuild@0.19.12): resolution: {integrity: sha512-fRFVXcmYVmSmtYm2mL8RlUASt2TDkGh3uRcvHFOKNr/T58VrfVeKD9uT9nlgxk96u0LS0ehS/GY7Da/bXWKkhw==} hasBin: true peerDependencies: esbuild: '*' dependencies: - esbuild: 0.20.1 + esbuild: 0.19.12 source-map-support: 0.5.21 tslib: 2.4.0 dev: true @@ -1945,39 +1666,6 @@ packages: '@esbuild/win32-arm64': 0.19.12 '@esbuild/win32-ia32': 0.19.12 '@esbuild/win32-x64': 0.19.12 - dev: true - - /esbuild@0.20.1: - resolution: {integrity: sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/aix-ppc64': 0.20.1 - '@esbuild/android-arm': 0.20.1 - '@esbuild/android-arm64': 0.20.1 - '@esbuild/android-x64': 0.20.1 - '@esbuild/darwin-arm64': 0.20.1 - '@esbuild/darwin-x64': 0.20.1 - '@esbuild/freebsd-arm64': 0.20.1 - '@esbuild/freebsd-x64': 0.20.1 - '@esbuild/linux-arm': 0.20.1 - '@esbuild/linux-arm64': 0.20.1 - '@esbuild/linux-ia32': 0.20.1 - '@esbuild/linux-loong64': 0.20.1 - '@esbuild/linux-mips64el': 0.20.1 - '@esbuild/linux-ppc64': 0.20.1 - '@esbuild/linux-riscv64': 0.20.1 - '@esbuild/linux-s390x': 0.20.1 - '@esbuild/linux-x64': 0.20.1 - '@esbuild/netbsd-x64': 0.20.1 - '@esbuild/openbsd-x64': 0.20.1 - '@esbuild/sunos-x64': 0.20.1 - '@esbuild/win32-arm64': 0.20.1 - '@esbuild/win32-ia32': 0.20.1 - '@esbuild/win32-x64': 0.20.1 - dev: true - optional: true /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} @@ -1989,29 +1677,29 @@ packages: engines: {node: '>=10'} dev: true - /eslint-compat-utils@0.1.2(eslint@8.57.0): + /eslint-compat-utils@0.1.2(eslint@8.56.0): resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} engines: {node: '>=12'} peerDependencies: eslint: '>=6.0.0' dependencies: - eslint: 8.57.0 + eslint: 8.56.0 dev: true - /eslint-config-prettier@9.1.0(eslint@8.57.0): + /eslint-config-prettier@9.1.0(eslint@8.56.0): resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.57.0 + eslint: 8.56.0 dev: true /eslint-plugin-no-relative-import-paths@1.5.3: resolution: {integrity: sha512-z7c7Km1U0zdLyPziWeRKSsN2mPaGaBHDjfXn98B8XjRIhFi2bPqduRYcxWih1kI5al5tQtiChXVmspLkB0wNsQ==} dev: true - /eslint-plugin-svelte@2.35.1(eslint@8.57.0)(svelte@4.2.12): + /eslint-plugin-svelte@2.35.1(eslint@8.56.0)(svelte@4.2.11): resolution: {integrity: sha512-IF8TpLnROSGy98Z3NrsKXWDSCbNY2ReHDcrYTuXZMbfX7VmESISR78TWgO9zdg4Dht1X8coub5jKwHzP0ExRug==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: @@ -2021,11 +1709,11 @@ packages: svelte: optional: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@jridgewell/sourcemap-codec': 1.4.15 debug: 4.3.4 - eslint: 8.57.0 - eslint-compat-utils: 0.1.2(eslint@8.57.0) + eslint: 8.56.0 + eslint-compat-utils: 0.1.2(eslint@8.56.0) esutils: 2.0.3 known-css-properties: 0.29.0 postcss: 8.4.35 @@ -2033,8 +1721,8 @@ packages: postcss-safe-parser: 6.0.0(postcss@8.4.35) postcss-selector-parser: 6.0.15 semver: 7.6.0 - svelte: 4.2.12 - svelte-eslint-parser: 0.33.1(svelte@4.2.12) + svelte: 4.2.11 + svelte-eslint-parser: 0.33.1(svelte@4.2.11) transitivePeerDependencies: - supports-color - ts-node @@ -2053,15 +1741,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + /eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 + '@eslint/js': 8.56.0 '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -2102,7 +1790,6 @@ packages: /esm-env@1.0.0: resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} - dev: true /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} @@ -2140,7 +1827,6 @@ packages: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: '@types/estree': 1.0.5 - dev: true /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} @@ -2156,7 +1842,7 @@ packages: human-signals: 5.0.0 is-stream: 3.0.0 merge-stream: 2.0.0 - npm-run-path: 5.3.0 + npm-run-path: 5.2.0 onetime: 6.0.0 signal-exit: 4.1.0 strip-final-newline: 3.0.0 @@ -2221,13 +1907,13 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.3.1 + flatted: 3.2.9 keyv: 4.5.4 rimraf: 3.0.2 dev: true - /flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true /foreground-child@3.1.1: @@ -2268,7 +1954,6 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true - dev: true optional: true /function-bind@1.1.2: @@ -2347,7 +2032,6 @@ packages: /globalyzer@0.1.0: resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - dev: true /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} @@ -2363,7 +2047,6 @@ packages: /globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - dev: true /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -2439,7 +2122,6 @@ packages: /import-meta-resolve@4.0.0: resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} - dev: true /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} @@ -2522,7 +2204,6 @@ packages: resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} dependencies: '@types/estree': 1.0.5 - dev: true /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} @@ -2533,12 +2214,12 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /isomorphic-dompurify@2.4.0: - resolution: {integrity: sha512-OW3VSGrjppnbshcHz7RNKnoYlCJkyBBJzEE5yxrTSA+kOl9JPTIrXsnIgOuH4wdLqqRujx22bz/IXebGWPLMAg==} + /isomorphic-dompurify@2.3.0: + resolution: {integrity: sha512-FCoKY4/mW/jnn/+VgE7wXGC2D/RXzVCAmGYuGWEuZXtyWnwmE2100caciIv+RbHk90q9LA0OW5IBn2f+ywHtww==} engines: {node: '>=18'} dependencies: '@types/dompurify': 3.0.5 - dompurify: 3.0.9 + dompurify: 3.0.8 jsdom: 24.0.0 transitivePeerDependencies: - bufferutil @@ -2561,8 +2242,8 @@ packages: hasBin: true dev: true - /joi@17.12.2: - resolution: {integrity: sha512-RonXAIzCiHLc8ss3Ibuz45u28GOsWE1UpfDXLbN/9NKbL4tCJf8TWYVKsoYuuh+sAUt7fsSNpA+r2+TBA6Wjmw==} + /joi@17.12.1: + resolution: {integrity: sha512-vtxmq+Lsc5SlfqotnfVjlViWfOL9nt/avKNbKYizwf6gsCfq9NYY/ceYRMFD8XDdrjJ9abJyScWmhmIiy+XRtQ==} requiresBuild: true dependencies: '@hapi/hoek': 9.3.0 @@ -2653,7 +2334,6 @@ packages: /kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - dev: true /known-css-properties@0.29.0: resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==} @@ -2672,8 +2352,8 @@ packages: engines: {node: '>=10'} dev: true - /lilconfig@3.1.1: - resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + /lilconfig@3.1.0: + resolution: {integrity: sha512-p3cz0JV5vw/XeouBU3Ldnp+ZkBjE+n8ydJ4mcwBrOiXXPqNlrzGBqWs9X4MWF7f+iKUBu794Y8Hh8yawiJbCjw==} engines: {node: '>=14'} dev: true @@ -2685,13 +2365,12 @@ packages: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} dependencies: - mlly: 1.6.1 + mlly: 1.5.0 pkg-types: 1.0.3 dev: true /locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} - dev: true /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} @@ -2735,7 +2414,6 @@ packages: engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /marked@12.0.0: resolution: {integrity: sha512-Vkwtq9rLqXryZnWaQc86+FHLC6tr/fycMfYAhiOIXkrNmeGAyhSxjqu0Rs1i0bBqw5u0S7+lV9fdH2ZSVaoa0w==} @@ -2745,7 +2423,6 @@ packages: /mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - dev: true /memoize-weak@1.0.2: resolution: {integrity: sha512-gj39xkrjEw7nCn4nJ1M5ms6+MyMlyiGmttzsqAUsAKn6bYKwuTHh/AO3cKPF8IBrTIYTxb0wWXFs3E//Y8VoWQ==} @@ -2826,8 +2503,8 @@ packages: minimist: 1.2.8 dev: true - /mlly@1.6.1: - resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} + /mlly@1.5.0: + resolution: {integrity: sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==} dependencies: acorn: 8.11.3 pathe: 1.1.2 @@ -2838,12 +2515,10 @@ packages: /mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} - dev: true /mrmime@2.0.0: resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} engines: {node: '>=10'} - dev: true /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -2860,7 +2535,6 @@ packages: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: true /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -2887,8 +2561,8 @@ packages: dev: true optional: true - /npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + /npm-run-path@5.2.0: + resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 @@ -3022,11 +2696,9 @@ packages: '@types/estree': 1.0.5 estree-walker: 3.0.3 is-reference: 3.0.2 - dev: true /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -3047,22 +2719,22 @@ packages: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: jsonc-parser: 3.2.1 - mlly: 1.6.1 + mlly: 1.5.0 pathe: 1.1.2 dev: true - /playwright-core@1.42.0: - resolution: {integrity: sha512-0HD9y8qEVlcbsAjdpBaFjmaTHf+1FeIddy8VJLeiqwhcNqGCBe4Wp2e8knpqiYbzxtxarxiXyNDw2cG8sCaNMQ==} + /playwright-core@1.41.2: + resolution: {integrity: sha512-VaTvwCA4Y8kxEe+kfm2+uUUw5Lubf38RxF7FpBxLPmGe5sdNkSg5e3ChEigaGrX7qdqT3pt2m/98LiyvU2x6CA==} engines: {node: '>=16'} hasBin: true dev: true - /playwright@1.42.0: - resolution: {integrity: sha512-Ko7YRUgj5xBHbntrgt4EIw/nE//XBHOKVKnBjO1KuZkmkhlbgyggTe5s9hjqQ1LpN+Xg+kHsQyt5Pa0Bw5XpvQ==} + /playwright@1.41.2: + resolution: {integrity: sha512-v0bOa6H2GJChDL8pAeLa/LZC4feoAMbSQm1/jF/ySsWWoaNItvrMP7GEkvEEFyCTUYKMxjQKaTSg5up7nR6/8A==} engines: {node: '>=16'} hasBin: true dependencies: - playwright-core: 1.42.0 + playwright-core: 1.41.2 optionalDependencies: fsevents: 2.3.2 dev: true @@ -3130,9 +2802,9 @@ packages: ts-node: optional: true dependencies: - lilconfig: 3.1.1 + lilconfig: 3.1.0 postcss: 8.4.35 - yaml: 2.4.0 + yaml: 2.3.4 dev: true /postcss-nested@6.0.1(postcss@8.4.35): @@ -3145,13 +2817,13 @@ packages: postcss-selector-parser: 6.0.15 dev: true - /postcss-nesting@12.0.4(postcss@8.4.35): - resolution: {integrity: sha512-WuCe0KnP4vKjLZK8VNoUWKL8ZLOv/5jiM94mHcI3VszLropHwmjotdUyP/ObzqZpXuQKP2Jf9R12vIHKFSStKw==} + /postcss-nesting@12.0.2(postcss@8.4.35): + resolution: {integrity: sha512-63PpJHSeNs93S3ZUIyi+7kKx4JqOIEJ6QYtG3x+0qA4J03+4n0iwsyA1GAHyWxsHYljQS4/4ZK1o2sMi70b5wQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/selector-specificity': 3.0.2(postcss-selector-parser@6.0.15) + '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.15) postcss: 8.4.35 postcss-selector-parser: 6.0.15 dev: true @@ -3201,7 +2873,6 @@ packages: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: true /preact-render-to-string@5.2.3(preact@10.11.3): resolution: {integrity: sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA==} @@ -3221,14 +2892,14 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier-plugin-svelte@3.2.2(prettier@3.2.5)(svelte@4.2.12): - resolution: {integrity: sha512-ZzzE/wMuf48/1+Lf2Ffko0uDa6pyCfgHV6+uAhtg2U0AAXGrhCSW88vEJNAkAxW5qyrFY1y1zZ4J8TgHrjW++Q==} + /prettier-plugin-svelte@3.2.1(prettier@3.2.5)(svelte@4.2.11): + resolution: {integrity: sha512-ENAPbIxASf2R79IZwgkG5sBdeNA9kLRlXVvKKmTXh79zWTy0KKoT86XO2pHrTitUPINd+iXWy12MRmgzKGVckA==} peerDependencies: prettier: ^3.0.0 svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 dependencies: prettier: 3.2.5 - svelte: 4.2.12 + svelte: 4.2.11 dev: true /prettier@3.2.5: @@ -3250,13 +2921,13 @@ packages: resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} dev: false - /prisma@5.10.2: - resolution: {integrity: sha512-hqb/JMz9/kymRE25pMWCxkdyhbnIWrq+h7S6WysJpdnCvhstbJSNP/S6mScEcqiB8Qv2F+0R3yG+osRaWqZacQ==} + /prisma@5.9.1: + resolution: {integrity: sha512-Hy/8KJZz0ELtkw4FnG9MS9rNWlXcJhf98Z2QMqi0QiVMoS8PzsBkpla0/Y5hTlob8F3HeECYphBjqmBxrluUrQ==} engines: {node: '>=16.13'} hasBin: true requiresBuild: true dependencies: - '@prisma/engines': 5.10.2 + '@prisma/engines': 5.9.1 /property-expr@2.0.6: resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} @@ -3359,7 +3030,6 @@ packages: '@rollup/rollup-win32-ia32-msvc': 4.12.0 '@rollup/rollup-win32-x64-msvc': 4.12.0 fsevents: 2.3.3 - dev: true /rrweb-cssom@0.6.0: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} @@ -3376,7 +3046,6 @@ packages: engines: {node: '>=6'} dependencies: mri: 1.2.0 - dev: true /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -3437,7 +3106,6 @@ packages: '@polka/url': 1.0.0-next.24 mrmime: 2.0.0 totalist: 3.0.1 - dev: true /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} @@ -3457,7 +3125,6 @@ packages: /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - dev: true /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -3541,7 +3208,7 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: - '@jridgewell/gen-mapping': 0.3.4 + '@jridgewell/gen-mapping': 0.3.3 commander: 4.1.1 glob: 10.3.10 lines-and-columns: 1.2.4 @@ -3569,20 +3236,20 @@ packages: engines: {node: '>= 0.4'} dev: true - /svelte-check@3.6.5(postcss@8.4.35)(svelte@4.2.12): - resolution: {integrity: sha512-5aLgoQEdadvp8ypvKQ2avhnQ+V9YPQQaWrTFlXFw5g/v8xIQBvo+X/WqxTyD+V/ItDqXg3+abUA53rdDHgUjCA==} + /svelte-check@3.6.4(postcss@8.4.35)(svelte@4.2.11): + resolution: {integrity: sha512-mY/dqucqm46p72M8yZmn81WPZx9mN6uuw8UVfR3ZKQeLxQg5HDGO3HHm5AZuWZPYNMLJ+TRMn+TeN53HfQ/vsw==} hasBin: true peerDependencies: svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 dependencies: - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/trace-mapping': 0.3.22 chokidar: 3.6.0 fast-glob: 3.3.2 import-fresh: 3.3.0 picocolors: 1.0.0 sade: 1.8.1 - svelte: 4.2.12 - svelte-preprocess: 5.1.3(postcss@8.4.35)(svelte@4.2.12)(typescript@5.3.3) + svelte: 4.2.11 + svelte-preprocess: 5.1.3(postcss@8.4.35)(svelte@4.2.11)(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: - '@babel/core' @@ -3596,7 +3263,7 @@ packages: - sugarss dev: true - /svelte-eslint-parser@0.33.1(svelte@4.2.12): + /svelte-eslint-parser@0.33.1(svelte@4.2.11): resolution: {integrity: sha512-vo7xPGTlKBGdLH8T5L64FipvTrqv3OQRx9d2z5X05KKZDlF4rQk8KViZO4flKERY+5BiVdOh7zZ7JGJWo5P0uA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3610,7 +3277,7 @@ packages: espree: 9.6.1 postcss: 8.4.35 postcss-scss: 4.0.9(postcss@8.4.35) - svelte: 4.2.12 + svelte: 4.2.11 dev: true /svelte-floating-ui@1.5.8: @@ -3620,16 +3287,15 @@ packages: '@floating-ui/dom': 1.6.3 dev: false - /svelte-hmr@0.15.3(svelte@4.2.12): + /svelte-hmr@0.15.3(svelte@4.2.11): resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: svelte: ^3.19.0 || ^4.0.0 dependencies: - svelte: 4.2.12 - dev: true + svelte: 4.2.11 - /svelte-preprocess@5.1.3(postcss@8.4.35)(svelte@4.2.12)(typescript@5.3.3): + /svelte-preprocess@5.1.3(postcss@8.4.35)(svelte@4.2.11)(typescript@5.3.3): resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==} engines: {node: '>= 16.0.0', pnpm: ^8.0.0} requiresBuild: true @@ -3673,17 +3339,17 @@ packages: postcss: 8.4.35 sorcery: 0.11.0 strip-indent: 3.0.0 - svelte: 4.2.12 + svelte: 4.2.11 typescript: 5.3.3 dev: true - /svelte@4.2.12: - resolution: {integrity: sha512-d8+wsh5TfPwqVzbm4/HCXC783/KPHV60NvwitJnyTA5lWn1elhXMNWhXGCJ7PwPa8qFUnyJNIyuIRt2mT0WMug==} + /svelte@4.2.11: + resolution: {integrity: sha512-YIQk3J4X89wOLhjsqIW8tqY3JHPuBdtdOIkASP2PZeAMcSW9RsIjQzMesCrxOF3gdWYC0mKknlKF7OqmLM+Zqg==} engines: {node: '>=16'} dependencies: '@ampproject/remapping': 2.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/trace-mapping': 0.3.22 '@types/estree': 1.0.5 acorn: 8.11.3 aria-query: 5.3.0 @@ -3695,10 +3361,9 @@ packages: locate-character: 3.0.0 magic-string: 0.30.7 periscopic: 3.1.0 - dev: true - /sveltekit-superforms@2.6.2(@sveltejs/kit@2.5.2)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.1)(svelte@4.2.12): - resolution: {integrity: sha512-a2dlCO5v+AiDJjEmVlUfEec4Spx/2VC5lp6yEh97sKsIQsNY63lwL8Uh9PmgzOGerDchUwlB008nAZJJf9PDng==} + /sveltekit-superforms@2.3.0(@sveltejs/kit@2.5.0)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.19.12)(svelte@4.2.11): + resolution: {integrity: sha512-ahToo6eEJfckRwl9TGHqjJjBq92bKXzex3YiTvH0bDYQ1G/ML4QYPAbUvQuEEG7UcFv8kRjPh8GcEjrxstI3eg==} requiresBuild: true peerDependencies: '@sveltejs/kit': 1.x || 2.x @@ -3721,19 +3386,19 @@ packages: zod: optional: true dependencies: - '@sveltejs/kit': 2.5.2(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@5.1.4) + '@sveltejs/kit': 2.5.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.11)(vite@5.1.3) devalue: 4.3.2 just-clone: 6.2.0 memoize-weak: 1.0.2 - svelte: 4.2.12 + svelte: 4.2.11 ts-deepmerge: 7.0.0 optionalDependencies: - '@gcornut/valibot-json-schema': 0.0.22(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.1)(valibot@0.28.1) + '@gcornut/valibot-json-schema': 0.0.22(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.19.12)(valibot@0.28.1) '@sinclair/typebox': 0.32.14 '@sodaru/yup-to-json-schema': 2.0.1 '@vinejs/vine': 1.7.1 arktype: 1.0.29-alpha - joi: 17.12.2 + joi: 17.12.1 superstruct: 1.0.3 valibot: 0.28.1 yup: 1.3.3 @@ -3808,7 +3473,6 @@ packages: dependencies: globalyzer: 0.1.0 globrex: 0.1.2 - dev: true /tinybench@2.6.0: resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} @@ -3840,7 +3504,6 @@ packages: /totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} - dev: true /tough-cookie@4.1.3: resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} @@ -3859,15 +3522,15 @@ packages: punycode: 2.3.1 dev: false - /trpc-sveltekit@3.5.27(@sveltejs/adapter-node@4.0.1)(@trpc/client@10.45.1)(@trpc/server@10.45.1)(ws@8.16.0): - resolution: {integrity: sha512-SAREU62gc9hLbp7Eea6t6r0CQ4tlcx6hEq1xHAA6NATyMT90sdSXJVHAtppghL1uBGy3bzt4lDHFoXkBQHSGMA==} + /trpc-sveltekit@3.5.26(@sveltejs/adapter-node@4.0.1)(@trpc/client@10.45.1)(@trpc/server@10.45.1)(ws@8.16.0): + resolution: {integrity: sha512-Xu1AjGCoWKEWHtiQIkWIetyF/yeiONyfwWQu2Tebvyb1jffaTyVeo9obwhWnMwq4V/6MkMpeU76W03DpK7+4hg==} peerDependencies: '@sveltejs/adapter-node': '>=1.2' - '@trpc/client': ^10.0.0 || ^11.0.0-next-beta.286 - '@trpc/server': ^10.0.0 || ^11.0.0-next-beta.286 + '@trpc/client': ^10.0.0 || ^11.0.0-next-beta.190 + '@trpc/server': ^10.0.0 || ^11.0.0-next-beta.190 ws: '>=8' dependencies: - '@sveltejs/adapter-node': 4.0.1(@sveltejs/kit@2.5.2) + '@sveltejs/adapter-node': 4.0.1(@sveltejs/kit@2.5.0) '@trpc/client': 10.45.1(@trpc/server@10.45.1) '@trpc/server': 10.45.1 ws: 8.16.0 @@ -3947,7 +3610,6 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true /universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} @@ -3995,8 +3657,8 @@ packages: dev: true optional: true - /vite-node@1.3.1(@types/node@20.11.21): - resolution: {integrity: sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==} + /vite-node@1.3.0(@types/node@20.11.19): + resolution: {integrity: sha512-D/oiDVBw75XMnjAXne/4feCkCEwcbr2SU1bjAhCcfI5Bq3VoOHji8/wCPAfUkDIeohJ5nSZ39fNxM3dNZ6OBOA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true dependencies: @@ -4004,7 +3666,7 @@ packages: debug: 4.3.4 pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.1.4(@types/node@20.11.21) + vite: 5.1.3(@types/node@20.11.19) transitivePeerDependencies: - '@types/node' - less @@ -4016,8 +3678,8 @@ packages: - terser dev: true - /vite@5.1.4(@types/node@20.11.21): - resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==} + /vite@5.1.3(@types/node@20.11.19): + resolution: {integrity: sha512-UfmUD36DKkqhi/F75RrxvPpry+9+tTkrXfMNZD+SboZqBCMsxKtO52XeGzzuh7ioz+Eo/SYDBbdb0Z7vgcDJew==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -4044,15 +3706,14 @@ packages: terser: optional: true dependencies: - '@types/node': 20.11.21 + '@types/node': 20.11.19 esbuild: 0.19.12 postcss: 8.4.35 rollup: 4.12.0 optionalDependencies: fsevents: 2.3.3 - dev: true - /vitefu@0.2.5(vite@5.1.4): + /vitefu@0.2.5(vite@5.1.3): resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} peerDependencies: vite: ^3.0.0 || ^4.0.0 || ^5.0.0 @@ -4060,18 +3721,17 @@ packages: vite: optional: true dependencies: - vite: 5.1.4(@types/node@20.11.21) - dev: true + vite: 5.1.3(@types/node@20.11.19) - /vitest@1.3.1(@types/node@20.11.21): - resolution: {integrity: sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==} + /vitest@1.3.0(@types/node@20.11.19): + resolution: {integrity: sha512-V9qb276J1jjSx9xb75T2VoYXdO1UKi+qfflY7V7w93jzX7oA/+RtYE6TcifxksxsZvygSSMwu2Uw6di7yqDMwg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 1.3.1 - '@vitest/ui': 1.3.1 + '@vitest/browser': 1.3.0 + '@vitest/ui': 1.3.0 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -4088,12 +3748,12 @@ packages: jsdom: optional: true dependencies: - '@types/node': 20.11.21 - '@vitest/expect': 1.3.1 - '@vitest/runner': 1.3.1 - '@vitest/snapshot': 1.3.1 - '@vitest/spy': 1.3.1 - '@vitest/utils': 1.3.1 + '@types/node': 20.11.19 + '@vitest/expect': 1.3.0 + '@vitest/runner': 1.3.0 + '@vitest/snapshot': 1.3.0 + '@vitest/spy': 1.3.0 + '@vitest/utils': 1.3.0 acorn-walk: 8.3.2 chai: 4.4.1 debug: 4.3.4 @@ -4106,8 +3766,8 @@ packages: strip-literal: 2.0.0 tinybench: 2.6.0 tinypool: 0.8.2 - vite: 5.1.4(@types/node@20.11.21) - vite-node: 1.3.1(@types/node@20.11.21) + vite: 5.1.3(@types/node@20.11.19) + vite-node: 1.3.0(@types/node@20.11.19) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -4220,10 +3880,9 @@ packages: engines: {node: '>= 6'} dev: true - /yaml@2.4.0: - resolution: {integrity: sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ==} + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} - hasBin: true dev: true /yocto-queue@0.1.0: diff --git a/prisma/migrations/20240113221445_search_index/migration.sql b/prisma/migrations/20240113221445_search_index/migration.sql index 0488c90..01b2f1f 100644 --- a/prisma/migrations/20240113221445_search_index/migration.sql +++ b/prisma/migrations/20240113221445_search_index/migration.sql @@ -33,5 +33,5 @@ EXECUTE PROCEDURE update_entry_tsvec (); ALTER TABLE patients ADD COLUMN full_name TEXT GENERATED ALWAYS AS (first_name || ' ' || last_name) STORED; -CREATE INDEX entries_tsvec_idx ON entries USING GIN (tsvec); +CREATE INDEX entries_tsvec ON entries USING GIN (tsvec); CREATE INDEX patients_full_name ON patients USING gin (full_name gin_trgm_ops); diff --git a/prisma/migrations/20240227233517_natural_collation/migration.sql b/prisma/migrations/20240227233517_natural_collation/migration.sql deleted file mode 100644 index f998ba7..0000000 --- a/prisma/migrations/20240227233517_natural_collation/migration.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE COLLATION NATURAL_CI (provider = icu, locale = 'en-u-kn-true'); - -ALTER TABLE stations ALTER COLUMN NAME TYPE TEXT COLLATE NATURAL_CI; -ALTER TABLE rooms ALTER COLUMN NAME TYPE TEXT COLLATE NATURAL_CI; -ALTER TABLE categories ALTER COLUMN NAME TYPE TEXT COLLATE NATURAL_CI; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index c401ae1..915ca43 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -108,7 +108,6 @@ model Entry { tsvec Unsupported("tsvector")? @@map("entries") - @@index([tsvec], type: Gin) } model EntryVersion { diff --git a/run/db_up.sh b/run/db_up.sh index 658259a..ab308f0 100755 --- a/run/db_up.sh +++ b/run/db_up.sh @@ -2,14 +2,13 @@ set -e DIR="$(cd "$(dirname "$0")" && pwd)" -cd "$DIR" -docker compose up -d +docker-compose up -d echo 'Waiting for database to be ready...' "$DIR/wait-for-it.sh" "localhost:5432" -- echo 'Database is ready!' # Create temporary test database -docker compose exec -u 999:999 db sh -e -c 'dropdb -f --if-exists test; createdb test' +docker-compose exec -u 999:999 db sh -e -c 'dropdb -f --if-exists test; createdb test' cd "$DIR/../" DATABASE_URL="postgresql://postgres:1234@localhost:5432/test?schema=public" npx prisma migrate reset --force diff --git a/src/app.d.ts b/src/app.d.ts index 0b9d41b..9741a58 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -1,13 +1,9 @@ -import type { Session } from "@auth/core/types"; - // See https://kit.svelte.dev/docs/types#app // for information about these interfaces declare global { namespace App { // interface Error {} - interface Locals { - session: Session; - } + // interface Locals {} // interface PageData {} // interface Platform {} } diff --git a/src/app.pcss b/src/app.pcss index 77319c1..05095e1 100644 --- a/src/app.pcss +++ b/src/app.pcss @@ -17,10 +17,6 @@ button { text-overflow: ellipsis; } -.border-1 { - border-width: 1px; -} - .v-form-field > input { @apply input input-bordered w-full max-w-xs; } @@ -29,32 +25,3 @@ button { .v-form-field > [aria-invalid="true"] { @apply input-error; } - -.card2 { - @apply bg-base-200; - @apply rounded-xl; - @apply mb-8; - @apply flex flex-col; - @apply border-solid border-base-content/30 border-[1px]; - - .row { - @apply flex flex-row p-2; - @apply border-solid border-base-content/30 border-t-[1px]; - } - - .row:first-child { - @apply rounded-t-xl border-none; - } - - .row:last-child { - @apply rounded-b-xl; - } - - .c-light { - @apply bg-base-content/20; - } - - .c-primary { - @apply bg-primary text-primary-content; - } -} diff --git a/src/hooks.server.ts b/src/hooks.server.ts index 0da1e3c..e2f0ed5 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -13,10 +13,9 @@ import { skAuthHandle } from "$lib/server/auth"; * auth mechanism) */ const authorization: Handle = async ({ event, resolve }) => { - // Allowed pages without login: TRPC API (has its own auth hook), Auth.js internal - // pages and the login site if (!/^\/(login|trpc)/.test(event.url.pathname)) { - if (!event.locals.session) { + const session = await event.locals.getSession(); + if (!session) { const params = new URLSearchParams({ returnURL: event.url.pathname }); redirect(303, "/login?" + params.toString()); } diff --git a/src/lib/components/table/CategoryField.svelte b/src/lib/components/table/CategoryField.svelte index 465a64e..fd4c2f7 100644 --- a/src/lib/components/table/CategoryField.svelte +++ b/src/lib/components/table/CategoryField.svelte @@ -2,15 +2,10 @@ import { URL_ENTRIES } from "$lib/shared/constants"; import type { Category } from "$lib/shared/model"; import { gotoEntityQuery } from "$lib/shared/util"; - import { getTextColor, colorToHex, hexToColor } from "$lib/shared/util/colors"; export let category: Category; export let baseUrl = URL_ENTRIES; - $: textColor = category.color - ? colorToHex(getTextColor(hexToColor(category.color))) - : null; - function onClick(e: MouseEvent) { gotoEntityQuery( { @@ -27,8 +22,6 @@ diff --git a/src/lib/components/ui/Header.svelte b/src/lib/components/ui/Header.svelte deleted file mode 100644 index 9b9db35..0000000 --- a/src/lib/components/ui/Header.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - -
-
- {#if backHref} - - - - {/if} - -

{title}

- - -
- -
diff --git a/src/lib/server/auth.ts b/src/lib/server/auth.ts index aea26a1..60d8670 100644 --- a/src/lib/server/auth.ts +++ b/src/lib/server/auth.ts @@ -1,21 +1,12 @@ -import { - Auth, - isAuthAction, - raw, - setEnvDefaults, - skipCSRFCheck, - type AuthConfig, -} from "@auth/core"; +import { SvelteKitAuth, type SvelteKitAuthConfig } from "@auth/sveltekit"; +import { Auth, raw, skipCSRFCheck } from "@auth/core"; import Keycloak from "@auth/core/providers/keycloak"; import { prisma } from "$lib/server/prisma"; import { PrismaAdapter } from "$lib/server/authAdapter"; import { env } from "$env/dynamic/private"; -import { redirect, type Handle, type RequestEvent } from "@sveltejs/kit"; -import { parse } from "set-cookie-parser"; +import { redirect, type RequestEvent } from "@sveltejs/kit"; -const AUTH_BASE_PATH: string = "/auth"; - -export const AUTH_CFG: AuthConfig = { +export const AUTH_CFG: SvelteKitAuthConfig = { adapter: PrismaAdapter(prisma), providers: [ Keycloak({ @@ -45,26 +36,10 @@ export const AUTH_CFG: AuthConfig = { return opt.session; }, }, - basePath: AUTH_BASE_PATH, + trustHost: true, }; -/* -Info: the @auth/sveltekit library has currently an issue with building request URLs. -If the application is run in production mode, it always creates HTTPS URLs -for the internal auth.js requests which fails if the application is not running -with HTTPS. This is the reason for not using the library and implementing the -auth handler function myself. - -Original source: https://github.com/nextauthjs/next-auth/blob/main/packages/frameworks-sveltekit/src/lib/actions.ts -ISC License -*/ - -function authjsUrl(event: RequestEvent, authjsEndpoint: string): string { - const url = event.url; - return url.protocol + "//" + url.host + AUTH_BASE_PATH + "/" + authjsEndpoint; -} - export async function makeAuthjsRequest( event: RequestEvent, authjsEndpoint: string, @@ -73,8 +48,11 @@ export async function makeAuthjsRequest( const headers = new Headers(event.request.headers); headers.set("Content-Type", "application/x-www-form-urlencoded"); + const url = event.url; + const baseUrl = url.protocol + "//" + url.host; + const body = new URLSearchParams(params); - const req = new Request(authjsUrl(event, authjsEndpoint), { + const req = new Request(baseUrl + authjsEndpoint, { method: "POST", headers, body, @@ -86,38 +64,4 @@ export async function makeAuthjsRequest( return redirect(302, res.redirect ?? ""); } -export async function auth(event: RequestEvent) { - const { request: req } = event; - setEnvDefaults(env, AUTH_CFG); - - const sessionUrl = authjsUrl(event, "session"); - const request = new Request(sessionUrl, { - headers: { cookie: req.headers.get("cookie") ?? "" }, - }); - const response = await Auth(request, AUTH_CFG); - const authCookies = parse(response.headers.getSetCookie()); - for (const cookie of authCookies) { - const { name, value, ...options } = cookie; - // @ts-expect-error - Review: SvelteKit and set-cookie-parser are mismatching - event.cookies.set(name, value, { path: "/", ...options }); - } - const { status = 200 } = response; - const data = await response.json(); - if (!data || !Object.keys(data).length) return null; - if (status === 200) return data; - throw new Error(data.message); -} - -export const skAuthHandle: Handle = async ({ event, resolve }) => { - const { url, request } = event; - - if ( - url.pathname.startsWith(AUTH_BASE_PATH + "/") && - isAuthAction(url.pathname.slice(AUTH_BASE_PATH.length + 1).split("/")[0]) - ) { - return Auth(request, AUTH_CFG); - } else { - event.locals.session = await auth(event); - } - return resolve(event); -}; +export const skAuthHandle = SvelteKitAuth(AUTH_CFG).handle; diff --git a/src/lib/server/trpc/context.ts b/src/lib/server/trpc/context.ts index 4af81c2..9219979 100644 --- a/src/lib/server/trpc/context.ts +++ b/src/lib/server/trpc/context.ts @@ -6,11 +6,13 @@ import { type inferAsyncReturnType, TRPCError } from "@trpc/server"; // hence the eslint-disable rule // eslint-disable-next-line @typescript-eslint/no-unused-vars export async function createContext(event: RequestEvent) { - if (!event.locals.session?.user) { + const session = await event.locals.getSession(); + + if (!session?.user) { throw new TRPCError({ code: "UNAUTHORIZED", message: "not logged in" }); } - const user = ZUser.parse(event.locals.session?.user); + const user = ZUser.parse(session?.user); return { user, }; diff --git a/src/lib/server/trpc/routes/entry.ts b/src/lib/server/trpc/routes/entry.ts index b6372f0..246b787 100644 --- a/src/lib/server/trpc/routes/entry.ts +++ b/src/lib/server/trpc/routes/entry.ts @@ -17,7 +17,6 @@ import { newEntryExecution, newEntryVersion, } from "$lib/server/query"; -import { versionsDiff } from "$lib/shared/util/diff"; const ZEntityId = fields.EntityId(); @@ -39,12 +38,6 @@ export const entryRouter = t.router({ versions: t.procedure .input(ZEntityId) .query(async (opts) => trpcWrap(async () => getEntryVersions(opts.input))), - versionsDiff: t.procedure.input(ZEntityId).query(async (opts) => - trpcWrap(async () => { - const versions = await getEntryVersions(opts.input); - return versionsDiff(versions); - }) - ), executions: t.procedure .input(ZEntityId) .query(async (opts) => trpcWrap(async () => getEntryExecutions(opts.input))), diff --git a/src/lib/server/util.ts b/src/lib/server/util.ts new file mode 100644 index 0000000..591dfb3 --- /dev/null +++ b/src/lib/server/util.ts @@ -0,0 +1,12 @@ +import type { RequestEvent } from "@sveltejs/kit"; + +export async function userId(event: RequestEvent): Promise { + const sess = await event.locals.getSession(); + const id = Number(sess?.user?.id); + if (id) { + return id; + } else { + // This should never happen, since unauthorized requests are caught by hooks.server.ts + throw new Error("no user id"); + } +} diff --git a/src/lib/shared/util/colors.test.ts b/src/lib/shared/util/colors.test.ts deleted file mode 100644 index 5979826..0000000 --- a/src/lib/shared/util/colors.test.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { describe, it, expect } from "vitest"; -import { hexToColor, colorToHex } from "./colors"; - -describe.each([ - { - hex: "#ffffff", - color: { r: 255, g: 255, b: 255 }, - }, - { - hex: "#000000", - color: { r: 0, g: 0, b: 0 }, - }, - { - hex: "#ff0000", - color: { r: 255, g: 0, b: 0 }, - }, - { - hex: "#00ff00", - color: { r: 0, g: 255, b: 0 }, - }, - { - hex: "#0000ff", - color: { r: 0, g: 0, b: 255 }, - }, - { - hex: "#8ECAE6", - color: { r: 142, g: 202, b: 230 }, - }, - { - hex: "#219EBC", - color: { r: 33, g: 158, b: 188 }, - }, - { - hex: "#023047", - color: { r: 2, g: 48, b: 71 }, - }, - { - hex: "#FFB703", - color: { r: 255, g: 183, b: 3 }, - }, - { - hex: "#FB8500", - color: { r: 251, g: 133, b: 0 }, - }, -])("color conversion", ({ hex, color }) => { - it("colorToHex", () => { - expect(colorToHex(color)).toBe(hex.toLowerCase()); - }); - it("hexToColor", () => { - expect(hexToColor(hex)).toStrictEqual(color); - }); -}); diff --git a/src/lib/shared/util/colors.ts b/src/lib/shared/util/colors.ts deleted file mode 100644 index 92091c8..0000000 --- a/src/lib/shared/util/colors.ts +++ /dev/null @@ -1,72 +0,0 @@ -// Source: https://css-tricks.com/nailing-the-perfect-contrast-between-light-text-and-a-background-image/ - -/** - * RGB color value (0-255) - */ -export type Color = { - r: number; - g: number; - b: number; -}; - -const WHITE: Color = { r: 255, g: 255, b: 255 }; -const BLACK: Color = { r: 0, g: 0, b: 0 }; - -export function colorToHex(c: Color): string { - return "#" + ((1 << 24) | (c.r << 16) | (c.g << 8) | c.b).toString(16).slice(1); -} - -export function hexToColor(s: string): Color { - const hexStr = s[0] === "#" ? s.substring(1) : s; - const c = parseInt(hexStr, 16); - return { - r: c >> 16, - g: (c >> 8) & 255, - b: c & 255, - }; -} - -function getContrast(color1: Color, color2: Color): number { - const color1_luminance = getLuminance(color1); - const color2_luminance = getLuminance(color2); - const lighterColorLuminance = Math.max(color1_luminance, color2_luminance); - const darkerColorLuminance = Math.min(color1_luminance, color2_luminance); - const contrast = (lighterColorLuminance + 0.05) / (darkerColorLuminance + 0.05); - return contrast; -} - -function getLuminance(c: Color): number { - return ( - 0.2126 * getLinearRGB(c.r) + 0.7152 * getLinearRGB(c.g) + 0.0722 * getLinearRGB(c.b) - ); -} - -function convert_8bit_RGB_to_standard_RGB(primaryColor_8bit: number): number { - return primaryColor_8bit / 255; -} - -function convert_standard_RGB_to_linear_RGB(primaryColor_sRGB: number): number { - const primaryColor_linear = - primaryColor_sRGB < 0.03928 - ? primaryColor_sRGB / 12.92 - : Math.pow((primaryColor_sRGB + 0.055) / 1.055, 2.4); - return primaryColor_linear; -} - -function getLinearRGB(primaryColor_8bit: number): number { - // First convert from 8-bit rbg (0-255) to standard RGB (0-1) - const primaryColor_sRGB = convert_8bit_RGB_to_standard_RGB(primaryColor_8bit); - - // Then convert from sRGB to linear RGB so we can use it to calculate luminance - const primaryColor_RGB_linear = convert_standard_RGB_to_linear_RGB(primaryColor_sRGB); - return primaryColor_RGB_linear; -} - -/** - * Get the preferred text color for the given background color - */ -export function getTextColor(bgColor: Color): Color { - const cWhite = getContrast(bgColor, WHITE); - const cBlack = getContrast(bgColor, BLACK); - return cWhite > cBlack ? WHITE : BLACK; -} diff --git a/src/lib/shared/util/diff.test.ts b/src/lib/shared/util/diff.test.ts deleted file mode 100644 index bcf6737..0000000 --- a/src/lib/shared/util/diff.test.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { test, expect } from "vitest"; -import type { EntryVersion } from "$lib/shared/model"; -import { CATEGORIES, U1, U2 } from "$tests/helpers/testdata"; -import { versionsDiff } from "./diff"; - -test("versions diff", () => { - const versions: EntryVersion[] = [ - { - id: 1, - author: U1, - category: CATEGORIES[0], - created_at: new Date(Date.UTC(2024, 1, 10, 10, 30)), - date: "2024-01-11", - priority: false, - text: "10ml Blut abnehmen.\n\nDas Blut muss auf XYZ getestet werden.", - }, - { - id: 2, - author: U2, - category: CATEGORIES[0], - created_at: new Date(Date.UTC(2024, 1, 10, 11, 30)), - date: "2024-01-12", - priority: true, - text: "10ml Blut abnehmen.\n\nDas Blut muss auf XYZ-Erreger getestet werden.\n\nHierfür ist das Labor Meier zuständig.", - }, - { - id: 3, - author: U1, - category: CATEGORIES[0], - created_at: new Date(Date.UTC(2024, 1, 10, 11, 31)), - date: "2024-01-12", - priority: true, - text: "10ml Blut abnehmen.\n\nDas Blut muss auf Lambda-Erreger getestet werden.\n\nHierfür ist das Labor Meier zuständig.", - }, - ]; - - const diff = versionsDiff(versions); - expect(diff).toStrictEqual([ - { - id: 3, - author: { - id: 1, - name: "Sven Schulz", - email: "sven.schulz@example.com", - }, - category: { - id: 1, - name: "Laborabnahme", - description: "Blutabnahme zur Untersuchung im Labor", - color: "FF0000", - }, - created_at: new Date("2024-02-10T11:31:00.000Z"), - date: "2024-01-12", - priority: true, - text: [ - { - count: 38, - added: true, - removed: undefined, - value: - "10ml Blut abnehmen.\n\nDas Blut muss auf Lambda-Erreger getestet werden.\n\nHierfür ist das Labor Meier zuständig.", - }, - ], - }, - { - id: 2, - author: { - id: 2, - name: "Sabrina Loewe", - email: "sabrina.loewe@example.com", - }, - created_at: new Date("2024-02-10T11:30:00.000Z"), - category: undefined, - date: undefined, - priority: undefined, - text: [ - { count: 16, value: "10ml Blut abnehmen.\n\nDas Blut muss auf " }, - { count: 1, added: undefined, removed: true, value: "Lambda" }, - { count: 1, added: true, removed: undefined, value: "XYZ" }, - { - count: 21, - value: "-Erreger getestet werden.\n\nHierfür ist das Labor Meier zuständig.", - }, - ], - }, - { - id: 1, - author: { - id: 1, - name: "Sven Schulz", - email: "sven.schulz@example.com", - }, - created_at: new Date("2024-02-10T10:30:00.000Z"), - category: undefined, - text: [ - { count: 17, value: "10ml Blut abnehmen.\n\nDas Blut muss auf XYZ" }, - { count: 2, added: undefined, removed: true, value: "-Erreger" }, - { count: 5, value: " getestet werden." }, - { - count: 14, - added: undefined, - removed: true, - value: "\n\nHierfür ist das Labor Meier zuständig.", - }, - ], - date: "2024-01-11", - priority: false, - }, - ]); -}); diff --git a/src/lib/shared/util/diff.ts b/src/lib/shared/util/diff.ts deleted file mode 100644 index 726346e..0000000 --- a/src/lib/shared/util/diff.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { diffWords } from "diff"; -import type { EntryVersion, Category, Option, UserTag } from "$lib/shared/model"; - -export type EntryVersionChange = { - id: number; - author: UserTag; - created_at: Date; - - text: Diff.Change[]; - date?: string; - category?: Option; - priority?: boolean; -}; - -function newOrUndef(o: T, n: T): T | undefined { - return o === n ? undefined : n; -} - -export function versionsDiff(versions: EntryVersion[]): EntryVersionChange[] { - let prev = versions[versions.length - 1]; - const changes: EntryVersionChange[] = [ - { - ...prev, - text: diffWords("", prev.text), - }, - ]; - - for (let i = versions.length - 2; i >= 0; i--) { - const v = versions[i]; - const text = diffWords(prev.text, v.text); - - changes.push({ - id: v.id, - author: v.author, - created_at: v.created_at, - text, - date: newOrUndef(prev.date, v.date), - category: prev.category?.id === v.category?.id ? undefined : v.category, - priority: newOrUndef(prev.priority, v.priority), - }); - - prev = v; - } - - return changes; -} diff --git a/src/lib/shared/util/index.ts b/src/lib/shared/util/index.ts index df6daf1..120df12 100644 --- a/src/lib/shared/util/index.ts +++ b/src/lib/shared/util/index.ts @@ -2,7 +2,6 @@ import { goto } from "$app/navigation"; import type { EntityQuery } from "$lib/shared/model"; import { TRPCClientError } from "@trpc/client"; import { error } from "@sveltejs/kit"; -import { ZodError } from "zod"; export function formatDate(date: Date | string, time = false): string { let dt = date; @@ -26,10 +25,6 @@ export function formatDate(date: Date | string, time = false): string { } } -export function formatBool(val: boolean): string { - return val ? "Ja" : "Nein"; -} - export function getQueryUrl(q: EntityQuery, basePath: string): string { if (Object.values(q).filter((q) => q !== undefined).length === 0) return basePath; return basePath + "/" + JSON.stringify(q); @@ -61,8 +56,6 @@ export async function loadWrap(f: () => Promise) { } catch (e) { if (e instanceof TRPCClientError) { error(e.data?.httpStatus ?? 500, e.message); - } else if (e instanceof ZodError) { - error(400, e.message); } else if (e instanceof Error) { error(500, e.message); } else { diff --git a/src/routes/(app)/+layout.svelte b/src/routes/(app)/+layout.svelte index 8114609..96dade7 100644 --- a/src/routes/(app)/+layout.svelte +++ b/src/routes/(app)/+layout.svelte @@ -1,6 +1,7 @@ @@ -16,57 +13,50 @@ Eintrag #{data.entry.id} -
+

+ Eintrag #{data.entry.id} {#if data.entry.current_version.category} {/if} - {#if data.entry.current_version.priority} -
Priorität
- {/if} +

- - - - -
- -
-
Patient
-
+
+

{#if data.entry.patient.room} {/if} {data.entry.patient.first_name} {data.entry.patient.last_name} ({data.entry.patient.age}) -

+

-
-
Beschreibung
-
-

- -

-
+
+

+ +

{#if data.entry.execution} -
-
-

- Erledigt am {formatDate(data.entry.execution.created_at, true)} von - : -

-
-
-

- -

-
+
+

+ Erledigt am {formatDate(data.entry.execution.created_at, true)} von + : +

+ +

+ +

{/if} + + diff --git a/src/routes/(app)/entry/[id]/+page.ts b/src/routes/(app)/entry/[id]/+page.ts index af28d20..204d7cf 100644 --- a/src/routes/(app)/entry/[id]/+page.ts +++ b/src/routes/(app)/entry/[id]/+page.ts @@ -4,10 +4,8 @@ import { loadWrap } from "$lib/shared/util"; import type { PageLoad } from "./$types"; export const load: PageLoad = async (event) => { - const entry = await loadWrap(async () => { - const id = ZUrlEntityId.parse(event.params.id); - return trpc(event).entry.get.query(id); - }); + const id = ZUrlEntityId.parse(event.params.id); + const entry = await loadWrap(async () => trpc(event).entry.get.query(id)); return { entry }; }; diff --git a/src/routes/(app)/entry/[id]/versions/+page.svelte b/src/routes/(app)/entry/[id]/versions/+page.svelte deleted file mode 100644 index aa5833f..0000000 --- a/src/routes/(app)/entry/[id]/versions/+page.svelte +++ /dev/null @@ -1,71 +0,0 @@ - - - - Eintrag #{entryId} - Versionen - - -
- -
- {#each data.versions as version} -
-
- , {formatDate(version.created_at, true)} -
- {#if version.category} -
-
Kategeorie
-
-
- {/if} - {#if version.text.length > 0} -
-
Text
-
- {#each version.text as change} - - {change.value} - - {/each} -
-
- {/if} - {#if version.date !== undefined} -
-
Datum
-
{formatDate(version.date)}
-
- {/if} - {#if version.priority !== undefined} -
-
Priorität
-
{formatBool(version.priority)}
-
- {/if} -
- {/each} -
- - diff --git a/src/routes/(app)/entry/[id]/versions/+page.ts b/src/routes/(app)/entry/[id]/versions/+page.ts deleted file mode 100644 index d7b5129..0000000 --- a/src/routes/(app)/entry/[id]/versions/+page.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ZUrlEntityId } from "$lib/shared/model/validation"; -import { trpc } from "$lib/shared/trpc"; -import { loadWrap } from "$lib/shared/util"; -import type { PageLoad } from "./$types"; - -export const load: PageLoad = async (event) => { - const id = ZUrlEntityId.parse(event.params.id); - const versions = await loadWrap(async () => trpc(event).entry.versionsDiff.query(id)); - - return { versions }; -}; diff --git a/src/routes/(app)/logout/+page.server.ts b/src/routes/(app)/logout/+page.server.ts index d26ef15..43e8f07 100644 --- a/src/routes/(app)/logout/+page.server.ts +++ b/src/routes/(app)/logout/+page.server.ts @@ -6,6 +6,6 @@ export const actions: Actions = { default: async (event) => { const callbackUrl = baseUrl(event.url) + "/login?noAuto=1"; - return makeAuthjsRequest(event, "signout", { callbackUrl }); + return makeAuthjsRequest(event, "/auth/signout", { callbackUrl }); }, }; diff --git a/src/routes/+layout.server.ts b/src/routes/+layout.server.ts index ade60e6..8812099 100644 --- a/src/routes/+layout.server.ts +++ b/src/routes/+layout.server.ts @@ -2,6 +2,6 @@ import type { LayoutServerLoad } from "./$types"; export const load: LayoutServerLoad = async (event) => { return { - session: event.locals.session, + session: await event.locals.getSession(), }; }; diff --git a/src/routes/login/+page.server.ts b/src/routes/login/+page.server.ts index 9299c86..fda0244 100644 --- a/src/routes/login/+page.server.ts +++ b/src/routes/login/+page.server.ts @@ -1,40 +1,11 @@ -import type { Actions, RequestEvent } from "./$types"; +import type { Actions } from "./$types"; import { makeAuthjsRequest } from "$lib/server/auth"; import { baseUrl } from "$lib/shared/util"; -import type { PageServerLoad } from "./$types"; - -/** - * This cookie stores the timestamp of the last automatic login. - * It is used to prevent infinite redirect loops in case the authentication fails. - */ -const COOKIE_NAME = "autoLoginTs"; - -async function doLogin(event: RequestEvent) { - const callbackUrl = event.url.searchParams.get("returnURL") ?? baseUrl(event.url); - - return makeAuthjsRequest(event, "signin/keycloak", { callbackUrl }); -} - -// Try to login the user using OIDC -export const load: PageServerLoad = async (event) => { - // the noAuto URL parameter disables auto-login - if (event.url.searchParams.get("noAuto")) return; - - let autoLoginTs = null; - const autoLoginTsStr = event.cookies.get(COOKIE_NAME); - if (autoLoginTsStr) { - autoLoginTs = parseInt(autoLoginTsStr); - } - - const now = Date.now(); - if (!autoLoginTs || autoLoginTs + 15000 < now) { - event.cookies.set(COOKIE_NAME, now.toString(), { path: "/login" }); - return doLogin(event); - } -}; export const actions: Actions = { default: async (event) => { - return doLogin(event); + const callbackUrl = event.url.searchParams.get("returnURL") ?? baseUrl(event.url); + + return makeAuthjsRequest(event, "/auth/signin/keycloak", { callbackUrl }); }, }; diff --git a/src/routes/login/+page.svelte b/src/routes/login/+page.svelte index 0d37816..f8341cf 100644 --- a/src/routes/login/+page.svelte +++ b/src/routes/login/+page.svelte @@ -1,5 +1,37 @@