diff --git a/package.json b/package.json index 1626865..800f518 100644 --- a/package.json +++ b/package.json @@ -17,42 +17,44 @@ "test:e2e": "playwright test" }, "dependencies": { - "@auth/core": "^0.18.4", - "@auth/sveltekit": "^0.5.0", - "@mdi/js": "^7.3.67", - "@prisma/client": "^5.7.0", + "@auth/core": "^0.18.6", + "@auth/sveltekit": "^0.5.3", + "@mdi/js": "^7.4.47", + "@prisma/client": "^5.8.1", "zod": "^3.22.4" }, "devDependencies": { - "@faker-js/faker": "^8.3.1", - "@playwright/test": "^1.40.1", - "@sveltejs/adapter-node": "^2.0.0", - "@sveltejs/kit": "^2.0.0", - "@sveltejs/vite-plugin-svelte": "^3.0.0", + "@faker-js/faker": "^8.4.0", + "@playwright/test": "^1.41.1", + "@sveltejs/adapter-node": "^2.1.2", + "@sveltejs/kit": "^2.5.0", + "@sveltejs/vite-plugin-svelte": "^3.0.1", "@tailwindcss/typography": "^0.5.10", - "@types/node": "^20.10.5", - "@typescript-eslint/eslint-plugin": "^6.13.2", - "@typescript-eslint/parser": "^6.13.2", - "autoprefixer": "^10.4.16", - "daisyui": "^4.4.19", - "eslint": "^8.55.0", + "@trpc/client": "^10.45.0", + "@trpc/server": "^10.45.0", + "@types/node": "^20.11.7", + "@typescript-eslint/eslint-plugin": "^6.19.1", + "@typescript-eslint/parser": "^6.19.1", + "autoprefixer": "^10.4.17", + "daisyui": "^4.6.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": "^15.1.0", - "postcss-nesting": "^12.0.1", - "prettier": "^3.1.0", + "postcss-nesting": "^12.0.2", + "prettier": "^3.2.4", "prettier-plugin-svelte": "^3.1.2", - "prisma": "^5.7.0", - "svelte": "^4.2.8", - "svelte-check": "^3.6.2", - "sveltekit-zero-api": "^0.15.7", - "tailwindcss": "^3.3.6", + "prisma": "^5.8.1", + "svelte": "^4.2.9", + "svelte-check": "^3.6.3", + "tailwindcss": "^3.4.1", + "trpc-sveltekit": "^3.5.22", "tslib": "^2.6.2", "tsx": "^4.7.0", "typescript": "^5.3.3", - "vite": "^5.0.0", - "vitest": "^1.0.0" + "vite": "^5.0.12", + "vitest": "^1.2.2" }, "type": "module" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2d4fa53..23d163d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,94 +6,100 @@ settings: dependencies: '@auth/core': - specifier: ^0.18.4 - version: 0.18.4 + specifier: ^0.18.6 + version: 0.18.6 '@auth/sveltekit': - specifier: ^0.5.0 - version: 0.5.0(@sveltejs/kit@2.0.4)(svelte@4.2.8) + specifier: ^0.5.3 + version: 0.5.3(@sveltejs/kit@2.5.0)(svelte@4.2.9) '@mdi/js': - specifier: ^7.3.67 - version: 7.3.67 + specifier: ^7.4.47 + version: 7.4.47 '@prisma/client': - specifier: ^5.7.0 - version: 5.7.0(prisma@5.7.0) + specifier: ^5.8.1 + version: 5.8.1(prisma@5.8.1) zod: specifier: ^3.22.4 version: 3.22.4 devDependencies: '@faker-js/faker': - specifier: ^8.3.1 - version: 8.3.1 + specifier: ^8.4.0 + version: 8.4.0 '@playwright/test': - specifier: ^1.40.1 - version: 1.40.1 + specifier: ^1.41.1 + version: 1.41.1 '@sveltejs/adapter-node': - specifier: ^2.0.0 - version: 2.0.1(@sveltejs/kit@2.0.4) + specifier: ^2.1.2 + version: 2.1.2(@sveltejs/kit@2.5.0) '@sveltejs/kit': - specifier: ^2.0.0 - version: 2.0.4(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10) + specifier: ^2.5.0 + version: 2.5.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.9)(vite@5.0.12) '@sveltejs/vite-plugin-svelte': - specifier: ^3.0.0 - version: 3.0.1(svelte@4.2.8)(vite@5.0.10) + specifier: ^3.0.1 + version: 3.0.1(svelte@4.2.9)(vite@5.0.12) '@tailwindcss/typography': specifier: ^0.5.10 - version: 0.5.10(tailwindcss@3.3.6) + version: 0.5.10(tailwindcss@3.4.1) + '@trpc/client': + specifier: ^10.45.0 + version: 10.45.0(@trpc/server@10.45.0) + '@trpc/server': + specifier: ^10.45.0 + version: 10.45.0 '@types/node': - specifier: ^20.10.5 - version: 20.10.5 + specifier: ^20.11.7 + version: 20.11.7 '@typescript-eslint/eslint-plugin': - specifier: ^6.13.2 - version: 6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.3) + specifier: ^6.19.1 + version: 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': - specifier: ^6.13.2 - version: 6.13.2(eslint@8.55.0)(typescript@5.3.3) + specifier: ^6.19.1 + version: 6.19.1(eslint@8.56.0)(typescript@5.3.3) autoprefixer: - specifier: ^10.4.16 - version: 10.4.16(postcss@8.4.32) + specifier: ^10.4.17 + version: 10.4.17(postcss@8.4.33) daisyui: - specifier: ^4.4.19 - version: 4.4.19(postcss@8.4.32) + specifier: ^4.6.0 + version: 4.6.0(postcss@8.4.33) eslint: - specifier: ^8.55.0 - version: 8.55.0 + specifier: ^8.56.0 + version: 8.56.0 eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@8.55.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.55.0)(svelte@4.2.8) + version: 2.35.1(eslint@8.56.0)(svelte@4.2.9) postcss-import: specifier: ^15.1.0 - version: 15.1.0(postcss@8.4.32) + version: 15.1.0(postcss@8.4.33) postcss-nesting: - specifier: ^12.0.1 - version: 12.0.2(postcss@8.4.32) + specifier: ^12.0.2 + version: 12.0.2(postcss@8.4.33) prettier: - specifier: ^3.1.0 - version: 3.1.0 + specifier: ^3.2.4 + version: 3.2.4 prettier-plugin-svelte: specifier: ^3.1.2 - version: 3.1.2(prettier@3.1.0)(svelte@4.2.8) + version: 3.1.2(prettier@3.2.4)(svelte@4.2.9) prisma: - specifier: ^5.7.0 - version: 5.7.0 + specifier: ^5.8.1 + version: 5.8.1 svelte: - specifier: ^4.2.8 - version: 4.2.8 + specifier: ^4.2.9 + version: 4.2.9 svelte-check: - specifier: ^3.6.2 - version: 3.6.2(postcss@8.4.32)(svelte@4.2.8) - sveltekit-zero-api: - specifier: ^0.15.7 - version: 0.15.7(@sveltejs/kit@2.0.4)(svelte@4.2.8)(typescript@5.3.3) + specifier: ^3.6.3 + version: 3.6.3(postcss@8.4.33)(svelte@4.2.9) tailwindcss: - specifier: ^3.3.6 - version: 3.3.6 + specifier: ^3.4.1 + version: 3.4.1 + trpc-sveltekit: + specifier: ^3.5.22 + version: 3.5.22(@sveltejs/adapter-node@2.1.2)(@trpc/client@10.45.0)(@trpc/server@10.45.0)(ws@8.16.0) tslib: specifier: ^2.6.2 version: 2.6.2 @@ -104,11 +110,11 @@ devDependencies: specifier: ^5.3.3 version: 5.3.3 vite: - specifier: ^5.0.0 - version: 5.0.10(@types/node@20.10.5) + specifier: ^5.0.12 + version: 5.0.12(@types/node@20.11.7) vitest: - specifier: ^1.0.0 - version: 1.1.0(@types/node@20.10.5) + specifier: ^1.2.2 + version: 1.2.2(@types/node@20.11.7) packages: @@ -127,26 +133,10 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.22 - /@auth/core@0.18.4: - resolution: {integrity: sha512-GsNhsP1xE/3FoNS3dVkPjqRljLNJ4iyL2OLv3klQGNvw3bMpROFcK4lqhx7+pPHiamnVaYt2vg1xbB+lsNaevg==} - peerDependencies: - nodemailer: ^6.8.0 - peerDependenciesMeta: - nodemailer: - optional: true - dependencies: - '@panva/hkdf': 1.1.1 - cookie: 0.6.0 - jose: 5.1.3 - oauth4webapi: 2.4.0 - preact: 10.11.3 - preact-render-to-string: 5.2.3(preact@10.11.3) - dev: false - - /@auth/core@0.19.0: - resolution: {integrity: sha512-BkFg2SoNftMN6A2Sn2g1lLFLTO74qMtFKsZmSCEF9d1csqSaEXIv50k6OrfniODWi5tZP8bcfSxGodv75khlOA==} + /@auth/core@0.18.6: + resolution: {integrity: sha512-AI7tnyNOg5zVS2elA44O03MWS6jyp69S8habJts63IyiCIoSkhqcZX4EcEJ0287m0hxzOltPCV9Zq2aqXbrNSA==} peerDependencies: nodemailer: ^6.8.0 peerDependenciesMeta: @@ -156,225 +146,242 @@ packages: '@panva/hkdf': 1.1.1 '@types/cookie': 0.6.0 cookie: 0.6.0 - jose: 5.1.3 - oauth4webapi: 2.4.0 + jose: 5.2.0 + oauth4webapi: 2.8.1 preact: 10.11.3 preact-render-to-string: 5.2.3(preact@10.11.3) dev: false - /@auth/sveltekit@0.5.0(@sveltejs/kit@2.0.4)(svelte@4.2.8): - resolution: {integrity: sha512-oSfeevQE06KSpA2gucwDarXLzJ6rA/s9XWsH3cq6vrEgxxgeFS+t3CB2QuJHzoBg3UXRkg6EBpxrPY/9tCkYrA==} + /@auth/core@0.21.0: + resolution: {integrity: sha512-jUWYs8gjy2GvtP9dd/4S9KcwZ660Cm/IkybiAq96/2Ooku9SKk5SUG+UTEwkyLuaQ38ZgfwggfpDOgzsXEcufA==} + peerDependencies: + nodemailer: ^6.8.0 + peerDependenciesMeta: + nodemailer: + optional: true + dependencies: + '@panva/hkdf': 1.1.1 + '@types/cookie': 0.6.0 + cookie: 0.6.0 + jose: 5.2.0 + oauth4webapi: 2.8.1 + preact: 10.11.3 + preact-render-to-string: 5.2.3(preact@10.11.3) + dev: false + + /@auth/sveltekit@0.5.3(@sveltejs/kit@2.5.0)(svelte@4.2.9): + resolution: {integrity: sha512-1OLW2vhEIpWR3ywarBz8t+SPQXTs5L2HNNUcZ642b39TrYd3hQ4FELh7xqmxhqhP3lGNPo1qe5h8dQ4qm6uVaQ==} peerDependencies: '@sveltejs/kit': ^1.0.0 || ^2.0.0 svelte: ^3.54.0 || ^4.0.0 dependencies: - '@auth/core': 0.19.0 - '@sveltejs/kit': 2.0.4(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10) - svelte: 4.2.8 + '@auth/core': 0.21.0 + '@sveltejs/kit': 2.5.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.9)(vite@5.0.12) + svelte: 4.2.9 transitivePeerDependencies: - nodemailer dev: false - /@csstools/selector-specificity@3.0.1(postcss-selector-parser@6.0.13): + /@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 dependencies: - postcss-selector-parser: 6.0.13 + postcss-selector-parser: 6.0.15 dev: true - /@esbuild/aix-ppc64@0.19.10: - resolution: {integrity: sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==} + /@esbuild/aix-ppc64@0.19.12: + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] requiresBuild: true optional: true - /@esbuild/android-arm64@0.19.10: - resolution: {integrity: sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==} + /@esbuild/android-arm64@0.19.12: + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true optional: true - /@esbuild/android-arm@0.19.10: - resolution: {integrity: sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==} + /@esbuild/android-arm@0.19.12: + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true optional: true - /@esbuild/android-x64@0.19.10: - resolution: {integrity: sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==} + /@esbuild/android-x64@0.19.12: + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true optional: true - /@esbuild/darwin-arm64@0.19.10: - resolution: {integrity: sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==} + /@esbuild/darwin-arm64@0.19.12: + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@esbuild/darwin-x64@0.19.10: - resolution: {integrity: sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==} + /@esbuild/darwin-x64@0.19.12: + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /@esbuild/freebsd-arm64@0.19.10: - resolution: {integrity: sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==} + /@esbuild/freebsd-arm64@0.19.12: + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true optional: true - /@esbuild/freebsd-x64@0.19.10: - resolution: {integrity: sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==} + /@esbuild/freebsd-x64@0.19.12: + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true optional: true - /@esbuild/linux-arm64@0.19.10: - resolution: {integrity: sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==} + /@esbuild/linux-arm64@0.19.12: + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-arm@0.19.10: - resolution: {integrity: sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==} + /@esbuild/linux-arm@0.19.12: + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-ia32@0.19.10: - resolution: {integrity: sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==} + /@esbuild/linux-ia32@0.19.12: + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-loong64@0.19.10: - resolution: {integrity: sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==} + /@esbuild/linux-loong64@0.19.12: + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-mips64el@0.19.10: - resolution: {integrity: sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==} + /@esbuild/linux-mips64el@0.19.12: + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-ppc64@0.19.10: - resolution: {integrity: sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==} + /@esbuild/linux-ppc64@0.19.12: + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-riscv64@0.19.10: - resolution: {integrity: sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==} + /@esbuild/linux-riscv64@0.19.12: + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-s390x@0.19.10: - resolution: {integrity: sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==} + /@esbuild/linux-s390x@0.19.12: + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-x64@0.19.10: - resolution: {integrity: sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==} + /@esbuild/linux-x64@0.19.12: + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@esbuild/netbsd-x64@0.19.10: - resolution: {integrity: sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==} + /@esbuild/netbsd-x64@0.19.12: + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true optional: true - /@esbuild/openbsd-x64@0.19.10: - resolution: {integrity: sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==} + /@esbuild/openbsd-x64@0.19.12: + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true optional: true - /@esbuild/sunos-x64@0.19.10: - resolution: {integrity: sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==} + /@esbuild/sunos-x64@0.19.12: + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true optional: true - /@esbuild/win32-arm64@0.19.10: - resolution: {integrity: sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==} + /@esbuild/win32-arm64@0.19.12: + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /@esbuild/win32-ia32@0.19.10: - resolution: {integrity: sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==} + /@esbuild/win32-ia32@0.19.12: + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /@esbuild/win32-x64@0.19.10: - resolution: {integrity: sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==} + /@esbuild/win32-x64@0.19.12: + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.55.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.55.0 + eslint: 8.56.0 eslint-visitor-keys: 3.4.3 dev: true @@ -390,7 +397,7 @@ packages: ajv: 6.12.6 debug: 4.3.4 espree: 9.6.1 - globals: 13.23.0 + globals: 13.24.0 ignore: 5.3.0 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -400,21 +407,21 @@ packages: - supports-color dev: true - /@eslint/js@8.55.0: - resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} + /@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 - /@faker-js/faker@8.3.1: - resolution: {integrity: sha512-FdgpFxY6V6rLZE9mmIBb9hM0xpfvQOSNOLnzolzKwsE1DH+gC7lEKV1p1IbR0lAYyvYd5a4u3qWJzowUkw1bIw==} + /@faker-js/faker@8.4.0: + resolution: {integrity: sha512-htW87352wzUCdX1jyUQocUcmAaFqcR/w082EC8iP/gtkF0K+aKcBp0hR5Arb7dzR8tQ1TrhE9DNa5EbJELm84w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13'} dev: true - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.1 + '@humanwhocodes/object-schema': 2.0.2 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -426,8 +433,20 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + /@humanwhocodes/object-schema@2.0.2: + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + dev: true + + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 dev: true /@jest/schemas@29.6.3: @@ -443,7 +462,7 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.22 /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} @@ -456,14 +475,14 @@ packages: /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + /@jridgewell/trace-mapping@0.3.22: + resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - /@mdi/js@7.3.67: - resolution: {integrity: sha512-MnRjknFqpTC6FifhGHjZ0+QYq2bAkZFQqIj8JA2AdPZbBxUvr8QSgB2yPAJ8/ob/XkR41xlg5majDR3c1JP1hw==} + /@mdi/js@7.4.47: + resolution: {integrity: sha512-KPnNOtm5i2pMabqZxpUz7iQf+mfrYZyKCZ8QNz85czgEt7cuHcGorWfdzUMWYA0SD+a6Hn4FmJ+YhzzzjkTZrQ==} dev: false /@nodelib/fs.scandir@2.1.5: @@ -484,26 +503,33 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + fastq: 1.16.0 dev: true /@panva/hkdf@1.1.1: resolution: {integrity: sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==} dev: false - /@playwright/test@1.40.1: - resolution: {integrity: sha512-EaaawMTOeEItCRvfmkI9v6rBkF1svM8wjl/YPRrg2N2Wmp+4qJYkWtJsbew1szfKKDm6fPLy4YAanBhIlf9dWw==} + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + dev: true + optional: true + + /@playwright/test@1.41.1: + resolution: {integrity: sha512-9g8EWTjiQ9yFBXc6HjCWe41msLpxEX0KhmfmPl9RPLJdfzL4F0lg2BdJ91O9azFdl11y1pmpwdjBiSxvqc+btw==} engines: {node: '>=16'} hasBin: true dependencies: - playwright: 1.40.1 + playwright: 1.41.1 dev: true /@polka/url@1.0.0-next.24: resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==} - /@prisma/client@5.7.0(prisma@5.7.0): - resolution: {integrity: sha512-cZmglCrfNbYpzUtz7HscVHl38e9CrUs31nrVoGUK1nIPXGgt8hT4jj2s657UXcNdQ/jBUxDgGmHyu2Nyrq1txg==} + /@prisma/client@5.8.1(prisma@5.8.1): + resolution: {integrity: sha512-xQtMPfbIwLlbm0VVIVQY2yqQVOxPwRQhvIp7Z3m2900g1bu/zRHKhYZJQWELqmjl6d8YwBy0K2NvMqh47v1ubw==} engines: {node: '>=16.13'} requiresBuild: true peerDependencies: @@ -512,37 +538,37 @@ packages: prisma: optional: true dependencies: - prisma: 5.7.0 + prisma: 5.8.1 dev: false - /@prisma/debug@5.7.0: - resolution: {integrity: sha512-tZ+MOjWlVvz1kOEhNYMa4QUGURY+kgOUBqLHYIV8jmCsMuvA1tWcn7qtIMLzYWCbDcQT4ZS8xDgK0R2gl6/0wA==} + /@prisma/debug@5.8.1: + resolution: {integrity: sha512-tjuw7eA0Us3T42jx9AmAgL58rzwzpFGYc3R7Y4Ip75EBYrKMBA1YihuWMcBC92ILmjlQ/u3p8VxcIE0hr+fZfg==} - /@prisma/engines-version@5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9: - resolution: {integrity: sha512-V6tgRVi62jRwTm0Hglky3Scwjr/AKFBFtS+MdbsBr7UOuiu1TKLPc6xfPiyEN1+bYqjEtjxwGsHgahcJsd1rNg==} + /@prisma/engines-version@5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2: + resolution: {integrity: sha512-f5C3JM3l9yhGr3cr4FMqWloFaSCpNpMi58Om22rjD2DOz3owci2mFdFXMgnAGazFPKrCbbEhcxdsRfspEYRoFQ==} - /@prisma/engines@5.7.0: - resolution: {integrity: sha512-TkOMgMm60n5YgEKPn9erIvFX2/QuWnl3GBo6yTRyZKk5O5KQertXiNnrYgSLy0SpsKmhovEPQb+D4l0SzyE7XA==} + /@prisma/engines@5.8.1: + resolution: {integrity: sha512-TJgYLRrZr56uhqcXO4GmP5be+zjCIHtLDK20Cnfg+o9d905hsN065QOL+3Z0zQAy6YD31Ol4u2kzSfRmbJv/uA==} requiresBuild: true dependencies: - '@prisma/debug': 5.7.0 - '@prisma/engines-version': 5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9 - '@prisma/fetch-engine': 5.7.0 - '@prisma/get-platform': 5.7.0 + '@prisma/debug': 5.8.1 + '@prisma/engines-version': 5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2 + '@prisma/fetch-engine': 5.8.1 + '@prisma/get-platform': 5.8.1 - /@prisma/fetch-engine@5.7.0: - resolution: {integrity: sha512-zIn/qmO+N/3FYe7/L9o+yZseIU8ivh4NdPKSkQRIHfg2QVTVMnbhGoTcecbxfVubeTp+DjcbjS0H9fCuM4W04w==} + /@prisma/fetch-engine@5.8.1: + resolution: {integrity: sha512-+bgjjoSFa6uYEbAPlklfoVSStOEfcpheOjoBoNsNNSQdSzcwE2nM4Q0prun0+P8/0sCHo18JZ9xqa8gObvgOUw==} dependencies: - '@prisma/debug': 5.7.0 - '@prisma/engines-version': 5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9 - '@prisma/get-platform': 5.7.0 + '@prisma/debug': 5.8.1 + '@prisma/engines-version': 5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2 + '@prisma/get-platform': 5.8.1 - /@prisma/get-platform@5.7.0: - resolution: {integrity: sha512-ZeV/Op4bZsWXuw5Tg05WwRI8BlKiRFhsixPcAM+5BKYSiUZiMKIi713tfT3drBq8+T0E1arNZgYSA9QYcglWNA==} + /@prisma/get-platform@5.8.1: + resolution: {integrity: sha512-wnA+6HTFcY+tkykMokix9GiAkaauPC5W/gg0O5JB0J8tCTNWrqpnQ7AsaGRfkYUbeOIioh6woDjQrGTTRf1Zag==} dependencies: - '@prisma/debug': 5.7.0 + '@prisma/debug': 5.8.1 - /@rollup/plugin-commonjs@25.0.7(rollup@4.9.1): + /@rollup/plugin-commonjs@25.0.7(rollup@4.9.6): resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -551,16 +577,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.9.1) + '@rollup/pluginutils': 5.1.0(rollup@4.9.6) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.30.5 - rollup: 4.9.1 + rollup: 4.9.6 dev: true - /@rollup/plugin-json@6.1.0(rollup@4.9.1): + /@rollup/plugin-json@6.1.0(rollup@4.9.6): resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -569,11 +595,11 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.9.1) - rollup: 4.9.1 + '@rollup/pluginutils': 5.1.0(rollup@4.9.6) + rollup: 4.9.6 dev: true - /@rollup/plugin-node-resolve@15.2.3(rollup@4.9.1): + /@rollup/plugin-node-resolve@15.2.3(rollup@4.9.6): resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -582,16 +608,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.9.1) + '@rollup/pluginutils': 5.1.0(rollup@4.9.6) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.8 - rollup: 4.9.1 + rollup: 4.9.6 dev: true - /@rollup/pluginutils@5.1.0(rollup@4.9.1): + /@rollup/pluginutils@5.1.0(rollup@4.9.6): resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} peerDependencies: @@ -603,95 +629,95 @@ packages: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 4.9.1 + rollup: 4.9.6 dev: true - /@rollup/rollup-android-arm-eabi@4.9.1: - resolution: {integrity: sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==} + /@rollup/rollup-android-arm-eabi@4.9.6: + resolution: {integrity: sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==} cpu: [arm] os: [android] requiresBuild: true optional: true - /@rollup/rollup-android-arm64@4.9.1: - resolution: {integrity: sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==} + /@rollup/rollup-android-arm64@4.9.6: + resolution: {integrity: sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==} cpu: [arm64] os: [android] requiresBuild: true optional: true - /@rollup/rollup-darwin-arm64@4.9.1: - resolution: {integrity: sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==} + /@rollup/rollup-darwin-arm64@4.9.6: + resolution: {integrity: sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@rollup/rollup-darwin-x64@4.9.1: - resolution: {integrity: sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==} + /@rollup/rollup-darwin-x64@4.9.6: + resolution: {integrity: sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.9.1: - resolution: {integrity: sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==} + /@rollup/rollup-linux-arm-gnueabihf@4.9.6: + resolution: {integrity: sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.9.1: - resolution: {integrity: sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==} + /@rollup/rollup-linux-arm64-gnu@4.9.6: + resolution: {integrity: sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-arm64-musl@4.9.1: - resolution: {integrity: sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==} + /@rollup/rollup-linux-arm64-musl@4.9.6: + resolution: {integrity: sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.9.1: - resolution: {integrity: sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==} + /@rollup/rollup-linux-riscv64-gnu@4.9.6: + resolution: {integrity: sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==} cpu: [riscv64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-x64-gnu@4.9.1: - resolution: {integrity: sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==} + /@rollup/rollup-linux-x64-gnu@4.9.6: + resolution: {integrity: sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-x64-musl@4.9.1: - resolution: {integrity: sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==} + /@rollup/rollup-linux-x64-musl@4.9.6: + resolution: {integrity: sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.9.1: - resolution: {integrity: sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==} + /@rollup/rollup-win32-arm64-msvc@4.9.6: + resolution: {integrity: sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.9.1: - resolution: {integrity: sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==} + /@rollup/rollup-win32-ia32-msvc@4.9.6: + resolution: {integrity: sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /@rollup/rollup-win32-x64-msvc@4.9.1: - resolution: {integrity: sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==} + /@rollup/rollup-win32-x64-msvc@4.9.6: + resolution: {integrity: sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==} cpu: [x64] os: [win32] requiresBuild: true @@ -701,20 +727,20 @@ packages: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true - /@sveltejs/adapter-node@2.0.1(@sveltejs/kit@2.0.4): - resolution: {integrity: sha512-qobmfQ6f71yKlQSufLjtPGCFjuUqy0Y5QQySTlyqO3CEUI/F9dkrsgOUwYtEE0OBjZV+oIJds4vrJ78e2Dl/5w==} + /@sveltejs/adapter-node@2.1.2(@sveltejs/kit@2.5.0): + resolution: {integrity: sha512-ZfVY5buBclWHoBT+RbkMUViJGEIZ3IfT/0Hvhlgp+qC3LRZwp+wS1Zsw5dgkB2sFDZXctbLNXJtwlkjSp1mw0g==} peerDependencies: '@sveltejs/kit': ^2.0.0 dependencies: - '@rollup/plugin-commonjs': 25.0.7(rollup@4.9.1) - '@rollup/plugin-json': 6.1.0(rollup@4.9.1) - '@rollup/plugin-node-resolve': 15.2.3(rollup@4.9.1) - '@sveltejs/kit': 2.0.4(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10) - rollup: 4.9.1 + '@rollup/plugin-commonjs': 25.0.7(rollup@4.9.6) + '@rollup/plugin-json': 6.1.0(rollup@4.9.6) + '@rollup/plugin-node-resolve': 15.2.3(rollup@4.9.6) + '@sveltejs/kit': 2.5.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.9)(vite@5.0.12) + rollup: 4.9.6 dev: true - /@sveltejs/kit@2.0.4(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10): - resolution: {integrity: sha512-pqUOo1Slp2fybNjTouF7qgeN815hO2boRCNO1Z7/XtXu5IPNg9OSwI485qmQ0GUU2v2NmA0XZciFHGrgzOixyw==} + /@sveltejs/kit@2.5.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.9)(vite@5.0.12): + resolution: {integrity: sha512-1uyXvzC2Lu1FZa30T4y5jUAC21R309ZMRG0TPt+PPPbNUoDpy8zSmSNVWYaBWxYDqLGQ5oPNWvjvvF2IjJ1jmA==} engines: {node: '>=18.13'} hasBin: true requiresBuild: true @@ -723,22 +749,23 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.3 dependencies: - '@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.8)(vite@5.0.10) + '@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.9)(vite@5.0.12) '@types/cookie': 0.6.0 cookie: 0.6.0 devalue: 4.3.2 esm-env: 1.0.0 + import-meta-resolve: 4.0.0 kleur: 4.1.5 magic-string: 0.30.5 - mrmime: 1.0.1 + mrmime: 2.0.0 sade: 1.8.1 set-cookie-parser: 2.6.0 - sirv: 2.0.3 - svelte: 4.2.8 + sirv: 2.0.4 + svelte: 4.2.9 tiny-glob: 0.2.9 - vite: 5.0.10(@types/node@20.10.5) + vite: 5.0.12(@types/node@20.11.7) - /@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10): + /@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.9)(vite@5.0.12): resolution: {integrity: sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==} engines: {node: ^18.0.0 || >=20} peerDependencies: @@ -746,33 +773,33 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.8)(vite@5.0.10) + '@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.9)(vite@5.0.12) debug: 4.3.4 - svelte: 4.2.8 - vite: 5.0.10(@types/node@20.10.5) + svelte: 4.2.9 + vite: 5.0.12(@types/node@20.11.7) transitivePeerDependencies: - supports-color - /@sveltejs/vite-plugin-svelte@3.0.1(svelte@4.2.8)(vite@5.0.10): + /@sveltejs/vite-plugin-svelte@3.0.1(svelte@4.2.9)(vite@5.0.12): resolution: {integrity: sha512-CGURX6Ps+TkOovK6xV+Y2rn8JKa8ZPUHPZ/NKgCxAmgBrXReavzFl8aOSCj3kQ1xqT7yGJj53hjcV/gqwDAaWA==} 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.1)(svelte@4.2.8)(vite@5.0.10) + '@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.9)(vite@5.0.12) debug: 4.3.4 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.5 - svelte: 4.2.8 - svelte-hmr: 0.15.3(svelte@4.2.8) - vite: 5.0.10(@types/node@20.10.5) - vitefu: 0.2.5(vite@5.0.10) + svelte: 4.2.9 + svelte-hmr: 0.15.3(svelte@4.2.9) + vite: 5.0.12(@types/node@20.11.7) + vitefu: 0.2.5(vite@5.0.12) transitivePeerDependencies: - supports-color - /@tailwindcss/typography@0.5.10(tailwindcss@3.3.6): + /@tailwindcss/typography@0.5.10(tailwindcss@3.4.1): resolution: {integrity: sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' @@ -781,7 +808,19 @@ packages: lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.3.6 + tailwindcss: 3.4.1 + dev: true + + /@trpc/client@10.45.0(@trpc/server@10.45.0): + resolution: {integrity: sha512-m091R1qte9rvkvL8N1e/mzrbb8S4gb+Q4ZNJnEGDgd7kic/6a8DFgSciBTiCoSp0YwOTVhyQzSrrA/sZI6PhBg==} + peerDependencies: + '@trpc/server': 10.45.0 + dependencies: + '@trpc/server': 10.45.0 + dev: true + + /@trpc/server@10.45.0: + resolution: {integrity: sha512-2Fwzv6nqpE0Ie/G7PeS0EVR89zLm+c1Mw7T+RAGtU807j4oaUx0zGkBXTu5u9AI+j+BYNN2GZxJcuDTAecbr1A==} dev: true /@types/cookie@0.6.0: @@ -794,8 +833,8 @@ packages: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true - /@types/node@20.10.5: - resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} + /@types/node@20.11.7: + resolution: {integrity: sha512-GPmeN1C3XAyV5uybAf4cMLWT9fDWcmQhZVtMFu7OR32WjrqGG+Wnk2V1d0bmtUyE/Zy1QJ9BxyiTih9z8Oks8A==} dependencies: undici-types: 5.26.5 @@ -811,8 +850,8 @@ packages: resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} dev: true - /@typescript-eslint/eslint-plugin@6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-3+9OGAWHhk4O1LlcwLBONbdXsAhLjyCFogJY/cWy2lxdVJ2JrcTF2pTGMaLl2AE7U1l31n8Py4a8bx5DLf/0dQ==} + /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -823,13 +862,13 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.13.2 - '@typescript-eslint/type-utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.13.2 + '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.19.1 + '@typescript-eslint/type-utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.19.1 debug: 4.3.4 - eslint: 8.55.0 + eslint: 8.56.0 graphemer: 1.4.0 ignore: 5.3.0 natural-compare: 1.4.0 @@ -840,8 +879,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.13.2(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-MUkcC+7Wt/QOGeVlM8aGGJZy1XV5YKjTpq9jK6r6/iLsGXhBVaGP5N0UYvFsu9BFlSpwY9kMretzdBH01rkRXg==} + /@typescript-eslint/parser@6.19.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -850,27 +889,27 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.13.2 - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.13.2 + '@typescript-eslint/scope-manager': 6.19.1 + '@typescript-eslint/types': 6.19.1 + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.19.1 debug: 4.3.4 - eslint: 8.55.0 + eslint: 8.56.0 typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@6.13.2: - resolution: {integrity: sha512-CXQA0xo7z6x13FeDYCgBkjWzNqzBn8RXaE3QVQVIUm74fWJLkJkaHmHdKStrxQllGh6Q4eUGyNpMe0b1hMkXFA==} + /@typescript-eslint/scope-manager@6.19.1: + resolution: {integrity: sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/visitor-keys': 6.13.2 + '@typescript-eslint/types': 6.19.1 + '@typescript-eslint/visitor-keys': 6.19.1 dev: true - /@typescript-eslint/type-utils@6.13.2(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-Qr6ssS1GFongzH2qfnWKkAQmMUyZSyOr0W54nZNU1MDfo+U4Mv3XveeLZzadc/yq8iYhQZHYT+eoXJqnACM1tw==} + /@typescript-eslint/type-utils@6.19.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -879,23 +918,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) - '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.3.3) + '@typescript-eslint/utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4 - eslint: 8.55.0 + eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@6.13.2: - resolution: {integrity: sha512-7sxbQ+EMRubQc3wTfTsycgYpSujyVbI1xw+3UMRUcrhSy+pN09y/lWzeKDbvhoqcRbHdc+APLs/PWYi/cisLPg==} + /@typescript-eslint/types@6.19.1: + resolution: {integrity: sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.13.2(typescript@5.3.3): - resolution: {integrity: sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w==} + /@typescript-eslint/typescript-estree@6.19.1(typescript@5.3.3): + resolution: {integrity: sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -903,11 +942,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/visitor-keys': 6.13.2 + '@typescript-eslint/types': 6.19.1 + '@typescript-eslint/visitor-keys': 6.19.1 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 + minimatch: 9.0.3 semver: 7.5.4 ts-api-utils: 1.0.3(typescript@5.3.3) typescript: 5.3.3 @@ -915,30 +955,30 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.13.2(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-b9Ptq4eAZUym4idijCRzl61oPCwwREcfDI8xGk751Vhzig5fFZR9CyzDz4Sp/nxSLBYxUPyh4QdIDqWykFhNmQ==} + /@typescript-eslint/utils@6.19.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.13.2 - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) - eslint: 8.55.0 + '@typescript-eslint/scope-manager': 6.19.1 + '@typescript-eslint/types': 6.19.1 + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.3.3) + eslint: 8.56.0 semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@6.13.2: - resolution: {integrity: sha512-OGznFs0eAQXJsp+xSd6k/O1UbFi/K/L7WjqeRoFE7vadjAF9y0uppXhYNQNEqygjou782maGClOoZwPqF0Drlw==} + /@typescript-eslint/visitor-keys@6.19.1: + resolution: {integrity: sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.13.2 + '@typescript-eslint/types': 6.19.1 eslint-visitor-keys: 3.4.3 dev: true @@ -946,59 +986,60 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vitest/expect@1.1.0: - resolution: {integrity: sha512-9IE2WWkcJo2BR9eqtY5MIo3TPmS50Pnwpm66A6neb2hvk/QSLfPXBz2qdiwUOQkwyFuuXEUj5380CbwfzW4+/w==} + /@vitest/expect@1.2.2: + resolution: {integrity: sha512-3jpcdPAD7LwHUUiT2pZTj2U82I2Tcgg2oVPvKxhn6mDI2On6tfvPQTjAI4628GUGDZrCm4Zna9iQHm5cEexOAg==} dependencies: - '@vitest/spy': 1.1.0 - '@vitest/utils': 1.1.0 - chai: 4.3.10 + '@vitest/spy': 1.2.2 + '@vitest/utils': 1.2.2 + chai: 4.4.1 dev: true - /@vitest/runner@1.1.0: - resolution: {integrity: sha512-zdNLJ00pm5z/uhbWF6aeIJCGMSyTyWImy3Fcp9piRGvueERFlQFbUwCpzVce79OLm2UHk9iwaMSOaU9jVHgNVw==} + /@vitest/runner@1.2.2: + resolution: {integrity: sha512-JctG7QZ4LSDXr5CsUweFgcpEvrcxOV1Gft7uHrvkQ+fsAVylmWQvnaAr/HDp3LAH1fztGMQZugIheTWjaGzYIg==} dependencies: - '@vitest/utils': 1.1.0 + '@vitest/utils': 1.2.2 p-limit: 5.0.0 - pathe: 1.1.1 + pathe: 1.1.2 dev: true - /@vitest/snapshot@1.1.0: - resolution: {integrity: sha512-5O/wyZg09V5qmNmAlUgCBqflvn2ylgsWJRRuPrnHEfDNT6tQpQ8O1isNGgo+VxofISHqz961SG3iVvt3SPK/QQ==} + /@vitest/snapshot@1.2.2: + resolution: {integrity: sha512-SmGY4saEw1+bwE1th6S/cZmPxz/Q4JWsl7LvbQIky2tKE35US4gd0Mjzqfr84/4OD0tikGWaWdMja/nWL5NIPA==} dependencies: magic-string: 0.30.5 - pathe: 1.1.1 + pathe: 1.1.2 pretty-format: 29.7.0 dev: true - /@vitest/spy@1.1.0: - resolution: {integrity: sha512-sNOVSU/GE+7+P76qYo+VXdXhXffzWZcYIPQfmkiRxaNCSPiLANvQx5Mx6ZURJ/ndtEkUJEpvKLXqAYTKEY+lTg==} + /@vitest/spy@1.2.2: + resolution: {integrity: sha512-k9Gcahssw8d7X3pSLq3e3XEu/0L78mUkCjivUqCQeXJm9clfXR/Td8+AP+VC1O6fKPIDLcHDTAmBOINVuv6+7g==} dependencies: tinyspy: 2.2.0 dev: true - /@vitest/utils@1.1.0: - resolution: {integrity: sha512-z+s510fKmYz4Y41XhNs3vcuFTFhcij2YF7F8VQfMEYAAUfqQh0Zfg7+w9xdgFGhPf3tX3TicAe+8BDITk6ampQ==} + /@vitest/utils@1.2.2: + resolution: {integrity: sha512-WKITBHLsBHlpjnDQahr+XK6RE7MiAsgrIkr0pGhQ9ygoxBfUeG0lUG5iLlzqjmKSlBv3+j5EGsriBzh+C3Tq9g==} dependencies: diff-sequences: 29.6.3 + estree-walker: 3.0.3 loupe: 2.3.7 pretty-format: 29.7.0 dev: true - /acorn-jsx@5.3.2(acorn@8.11.2): + /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.11.2 + acorn: 8.11.3 dev: true - /acorn-walk@8.3.1: - resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} dev: true - /acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true @@ -1016,6 +1057,11 @@ packages: engines: {node: '>=8'} dev: true + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: true + /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -1028,6 +1074,11 @@ packages: engines: {node: '>=10'} dev: true + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: true + /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} dev: true @@ -1062,24 +1113,24 @@ packages: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true - /autoprefixer@10.4.16(postcss@8.4.32): - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} + /autoprefixer@10.4.17(postcss@8.4.33): + resolution: {integrity: sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: browserslist: 4.22.2 - caniuse-lite: 1.0.30001566 + caniuse-lite: 1.0.30001580 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.32 + postcss: 8.4.33 postcss-value-parser: 4.2.0 dev: true - /axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + /axobject-query@4.0.0: + resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==} dependencies: dequal: 2.0.3 @@ -1117,8 +1168,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001566 - electron-to-chromium: 1.4.609 + caniuse-lite: 1.0.30001580 + electron-to-chromium: 1.4.647 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true @@ -1147,12 +1198,12 @@ packages: engines: {node: '>= 6'} dev: true - /caniuse-lite@1.0.30001566: - resolution: {integrity: sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==} + /caniuse-lite@1.0.30001580: + resolution: {integrity: sha512-mtj5ur2FFPZcCEpXFy8ADXbDACuNFXg6mxVDqp7tqooX6l3zwm+d8EPoeOSIFRDvHs8qu7/SLFOGniULkcH2iA==} dev: true - /chai@4.3.10: - resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} + /chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} engines: {node: '>=4'} dependencies: assertion-error: 1.1.0 @@ -1198,7 +1249,7 @@ packages: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 '@types/estree': 1.0.5 - acorn: 8.11.2 + acorn: 8.11.3 estree-walker: 3.0.3 periscopic: 3.1.0 @@ -1264,14 +1315,14 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /daisyui@4.4.19(postcss@8.4.32): - resolution: {integrity: sha512-IjOLWwnndD4N7Ut5CDxbUsaVtbqXPeVHM92IcgxGFxpuOd3CCKW/PAXZH6JoBTHFRaN57vB9XqEhdWm5yC+bPA==} + /daisyui@4.6.0(postcss@8.4.33): + resolution: {integrity: sha512-B5ZB/sczXpp4LMdo/SZrtYY/U2hq+Vr9I15QawuWZ0VwgtSAbuZpAZUftKVryEsPuv3BM0yVlBED0nAmtis/dw==} engines: {node: '>=16.9.0'} dependencies: css-selector-tokenizer: 0.8.0 culori: 3.3.0 picocolors: 1.0.0 - postcss-js: 4.0.1(postcss@8.4.32) + postcss-js: 4.0.1(postcss@8.4.33) transitivePeerDependencies: - postcss dev: true @@ -1341,43 +1392,55 @@ packages: esutils: 2.0.3 dev: true - /electron-to-chromium@1.4.609: - resolution: {integrity: sha512-ihiCP7PJmjoGNuLpl7TjNA8pCQWu09vGyjlPYw1Rqww4gvNuCcmvl+44G+2QyJ6S2K4o+wbTS++Xz0YN8Q9ERw==} + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true + + /electron-to-chromium@1.4.647: + resolution: {integrity: sha512-Z/fTNGwc45WrYQhPaEcz5tAJuZZ8G7S/DBnhS6Kgp4BxnS40Z/HqlJ0hHg3Z79IGVzuVartIlTcjw/cQbPLgOw==} + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true /es6-promise@3.3.1: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} dev: true - /esbuild@0.19.10: - resolution: {integrity: sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==} + /esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/aix-ppc64': 0.19.10 - '@esbuild/android-arm': 0.19.10 - '@esbuild/android-arm64': 0.19.10 - '@esbuild/android-x64': 0.19.10 - '@esbuild/darwin-arm64': 0.19.10 - '@esbuild/darwin-x64': 0.19.10 - '@esbuild/freebsd-arm64': 0.19.10 - '@esbuild/freebsd-x64': 0.19.10 - '@esbuild/linux-arm': 0.19.10 - '@esbuild/linux-arm64': 0.19.10 - '@esbuild/linux-ia32': 0.19.10 - '@esbuild/linux-loong64': 0.19.10 - '@esbuild/linux-mips64el': 0.19.10 - '@esbuild/linux-ppc64': 0.19.10 - '@esbuild/linux-riscv64': 0.19.10 - '@esbuild/linux-s390x': 0.19.10 - '@esbuild/linux-x64': 0.19.10 - '@esbuild/netbsd-x64': 0.19.10 - '@esbuild/openbsd-x64': 0.19.10 - '@esbuild/sunos-x64': 0.19.10 - '@esbuild/win32-arm64': 0.19.10 - '@esbuild/win32-ia32': 0.19.10 - '@esbuild/win32-x64': 0.19.10 + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} @@ -1389,29 +1452,29 @@ packages: engines: {node: '>=10'} dev: true - /eslint-compat-utils@0.1.2(eslint@8.55.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.55.0 + eslint: 8.56.0 dev: true - /eslint-config-prettier@9.1.0(eslint@8.55.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.55.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.55.0)(svelte@4.2.8): + /eslint-plugin-svelte@2.35.1(eslint@8.56.0)(svelte@4.2.9): resolution: {integrity: sha512-IF8TpLnROSGy98Z3NrsKXWDSCbNY2ReHDcrYTuXZMbfX7VmESISR78TWgO9zdg4Dht1X8coub5jKwHzP0ExRug==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: @@ -1421,20 +1484,20 @@ packages: svelte: optional: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@jridgewell/sourcemap-codec': 1.4.15 debug: 4.3.4 - eslint: 8.55.0 - eslint-compat-utils: 0.1.2(eslint@8.55.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.32 - postcss-load-config: 3.1.4(postcss@8.4.32) - postcss-safe-parser: 6.0.0(postcss@8.4.32) - postcss-selector-parser: 6.0.13 + postcss: 8.4.33 + postcss-load-config: 3.1.4(postcss@8.4.33) + postcss-safe-parser: 6.0.0(postcss@8.4.33) + postcss-selector-parser: 6.0.15 semver: 7.5.4 - svelte: 4.2.8 - svelte-eslint-parser: 0.33.1(svelte@4.2.8) + svelte: 4.2.9 + svelte-eslint-parser: 0.33.1(svelte@4.2.9) transitivePeerDependencies: - supports-color - ts-node @@ -1453,16 +1516,16 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.55.0: - resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} + /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.55.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.55.0 - '@humanwhocodes/config-array': 0.11.13 + '@eslint/js': 8.56.0 + '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 @@ -1481,7 +1544,7 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.23.0 + globals: 13.24.0 graphemer: 1.4.0 ignore: 5.3.0 imurmurhash: 0.1.4 @@ -1507,8 +1570,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 3.4.3 dev: true @@ -1554,7 +1617,7 @@ packages: human-signals: 5.0.0 is-stream: 3.0.0 merge-stream: 2.0.0 - npm-run-path: 5.1.0 + npm-run-path: 5.2.0 onetime: 6.0.0 signal-exit: 4.1.0 strip-final-newline: 3.0.0 @@ -1587,8 +1650,8 @@ packages: resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==} dev: true - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + /fastq@1.16.0: + resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} dependencies: reusify: 1.0.4 dev: true @@ -1628,6 +1691,14 @@ packages: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true + /foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + dev: true + /fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} dev: true @@ -1684,15 +1755,16 @@ packages: is-glob: 4.0.3 dev: true - /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.3 + minipass: 7.0.4 + path-scurry: 1.10.1 dev: true /glob@7.2.3: @@ -1717,8 +1789,8 @@ packages: once: 1.4.0 dev: true - /globals@13.23.0: - resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -1780,6 +1852,9 @@ packages: resolve-from: 4.0.0 dev: true + /import-meta-resolve@4.0.0: + resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -1821,6 +1896,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -1862,13 +1942,22 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: true + /jiti@1.21.0: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true dev: true - /jose@5.1.3: - resolution: {integrity: sha512-GPExOkcMsCLBTi1YetY2LmkoY559fss0+0KVa6kOfb2YFe84nAM7Nm/XzuZozah4iHgmBGrCOHL5/cy670SBRw==} + /jose@5.2.0: + resolution: {integrity: sha512-oW3PCnvyrcm1HMvGTzqjxxfnEs9EoFOFWi2HsEGhlFVOXxTE3K9GKWVMFoFw06yPUqwpvEWic1BmtUZBI/tIjw==} dev: false /js-yaml@4.1.0: @@ -1890,8 +1979,8 @@ packages: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true - /jsonc-parser@3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + /jsonc-parser@3.2.1: + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} dev: true /keyv@4.5.4: @@ -1934,7 +2023,7 @@ packages: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} dependencies: - mlly: 1.4.2 + mlly: 1.5.0 pkg-types: 1.0.3 dev: true @@ -1966,6 +2055,11 @@ packages: get-func-name: 2.0.2 dev: true + /lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + engines: {node: 14 || >=16.14} + dev: true + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -1973,13 +2067,6 @@ packages: yallist: 4.0.0 dev: true - /magic-string@0.27.0: - resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /magic-string@0.30.5: resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} engines: {node: '>=12'} @@ -2029,10 +2116,22 @@ packages: brace-expansion: 2.0.1 dev: true + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true + /minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -2040,11 +2139,11 @@ packages: minimist: 1.2.8 dev: true - /mlly@1.4.2: - resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} + /mlly@1.5.0: + resolution: {integrity: sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==} dependencies: - acorn: 8.11.2 - pathe: 1.1.1 + acorn: 8.11.3 + pathe: 1.1.2 pkg-types: 1.0.3 ufo: 1.3.2 dev: true @@ -2053,8 +2152,8 @@ packages: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} - /mrmime@1.0.1: - resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} + /mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} engines: {node: '>=10'} /ms@2.1.2: @@ -2091,15 +2190,15 @@ packages: engines: {node: '>=0.10.0'} dev: true - /npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + /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 dev: true - /oauth4webapi@2.4.0: - resolution: {integrity: sha512-ZWl8ov8HeGVyc9Icl1cag76HvIcDAp23eIIT+UVGir+dEu8BMgMlvZeZwqLVd0P8DqaumH4N+QLQXN69G1QjSA==} + /oauth4webapi@2.8.1: + resolution: {integrity: sha512-Jm1Z6eUumtevQWxMllSw+4diHOcFyxuc3KAXoyh4fbpHndbXRbviyrLoCn8htEdHYZM/MIOVbeWjDk86BxVF+A==} dev: false /object-assign@4.1.1: @@ -2189,13 +2288,21 @@ packages: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true + /path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.2.0 + minipass: 7.0.4 + dev: true + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} dev: true - /pathe@1.1.1: - resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + /pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} dev: true /pathval@1.1.1: @@ -2230,50 +2337,50 @@ packages: /pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: - jsonc-parser: 3.2.0 - mlly: 1.4.2 - pathe: 1.1.1 + jsonc-parser: 3.2.1 + mlly: 1.5.0 + pathe: 1.1.2 dev: true - /playwright-core@1.40.1: - resolution: {integrity: sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ==} + /playwright-core@1.41.1: + resolution: {integrity: sha512-/KPO5DzXSMlxSX77wy+HihKGOunh3hqndhqeo/nMxfigiKzogn8kfL0ZBDu0L1RKgan5XHCPmn6zXd2NUJgjhg==} engines: {node: '>=16'} hasBin: true dev: true - /playwright@1.40.1: - resolution: {integrity: sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw==} + /playwright@1.41.1: + resolution: {integrity: sha512-gdZAWG97oUnbBdRL3GuBvX3nDDmUOuqzV/D24dytqlKt+eI5KbwusluZRGljx1YoJKZ2NRPaeWiFTeGZO7SosQ==} engines: {node: '>=16'} hasBin: true dependencies: - playwright-core: 1.40.1 + playwright-core: 1.41.1 optionalDependencies: fsevents: 2.3.2 dev: true - /postcss-import@15.1.0(postcss@8.4.32): + /postcss-import@15.1.0(postcss@8.4.33): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 dev: true - /postcss-js@4.0.1(postcss@8.4.32): + /postcss-js@4.0.1(postcss@8.4.33): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /postcss-load-config@3.1.4(postcss@8.4.32): + /postcss-load-config@3.1.4(postcss@8.4.33): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -2286,11 +2393,11 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - postcss: 8.4.32 + postcss: 8.4.33 yaml: 1.10.2 dev: true - /postcss-load-config@4.0.2(postcss@8.4.32): + /postcss-load-config@4.0.2(postcss@8.4.33): resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} peerDependencies: @@ -2303,47 +2410,47 @@ packages: optional: true dependencies: lilconfig: 3.0.0 - postcss: 8.4.32 + postcss: 8.4.33 yaml: 2.3.4 dev: true - /postcss-nested@6.0.1(postcss@8.4.32): + /postcss-nested@6.0.1(postcss@8.4.33): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 + postcss: 8.4.33 + postcss-selector-parser: 6.0.15 dev: true - /postcss-nesting@12.0.2(postcss@8.4.32): + /postcss-nesting@12.0.2(postcss@8.4.33): resolution: {integrity: sha512-63PpJHSeNs93S3ZUIyi+7kKx4JqOIEJ6QYtG3x+0qA4J03+4n0iwsyA1GAHyWxsHYljQS4/4ZK1o2sMi70b5wQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.13) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 + '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.15) + postcss: 8.4.33 + postcss-selector-parser: 6.0.15 dev: true - /postcss-safe-parser@6.0.0(postcss@8.4.32): + /postcss-safe-parser@6.0.0(postcss@8.4.33): resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.3.3 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /postcss-scss@4.0.9(postcss@8.4.32): + /postcss-scss@4.0.9(postcss@8.4.33): resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.4.29 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 dev: true /postcss-selector-parser@6.0.10: @@ -2354,8 +2461,8 @@ packages: util-deprecate: 1.0.2 dev: true - /postcss-selector-parser@6.0.13: - resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + /postcss-selector-parser@6.0.15: + resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 @@ -2366,8 +2473,8 @@ packages: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true - /postcss@8.4.32: - resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} + /postcss@8.4.33: + resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 @@ -2392,18 +2499,18 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier-plugin-svelte@3.1.2(prettier@3.1.0)(svelte@4.2.8): + /prettier-plugin-svelte@3.1.2(prettier@3.2.4)(svelte@4.2.9): resolution: {integrity: sha512-7xfMZtwgAWHMT0iZc8jN4o65zgbAQ3+O32V6W7pXrqNvKnHnkoyQCGCbKeUyXKZLbYE0YhFRnamfxfkEGxm8qA==} peerDependencies: prettier: ^3.0.0 svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 dependencies: - prettier: 3.1.0 - svelte: 4.2.8 + prettier: 3.2.4 + svelte: 4.2.9 dev: true - /prettier@3.1.0: - resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} + /prettier@3.2.4: + resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} engines: {node: '>=14'} hasBin: true dev: true @@ -2421,13 +2528,13 @@ packages: resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} dev: false - /prisma@5.7.0: - resolution: {integrity: sha512-0rcfXO2ErmGAtxnuTNHQT9ztL0zZheQjOI/VNJzdq87C3TlGPQtMqtM+KCwU6XtmkoEr7vbCQqA7HF9IY0ST+Q==} + /prisma@5.8.1: + resolution: {integrity: sha512-N6CpjzECnUHZ5beeYpDzkt2rYpEdAeqXX2dweu6BoQaeYkNZrC/WJHM+5MO/uidFHTak8QhkPKBWck1o/4MD4A==} engines: {node: '>=16.13'} hasBin: true requiresBuild: true dependencies: - '@prisma/engines': 5.7.0 + '@prisma/engines': 5.8.1 /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} @@ -2492,24 +2599,26 @@ packages: glob: 7.2.3 dev: true - /rollup@4.9.1: - resolution: {integrity: sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==} + /rollup@4.9.6: + resolution: {integrity: sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + dependencies: + '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.9.1 - '@rollup/rollup-android-arm64': 4.9.1 - '@rollup/rollup-darwin-arm64': 4.9.1 - '@rollup/rollup-darwin-x64': 4.9.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.9.1 - '@rollup/rollup-linux-arm64-gnu': 4.9.1 - '@rollup/rollup-linux-arm64-musl': 4.9.1 - '@rollup/rollup-linux-riscv64-gnu': 4.9.1 - '@rollup/rollup-linux-x64-gnu': 4.9.1 - '@rollup/rollup-linux-x64-musl': 4.9.1 - '@rollup/rollup-win32-arm64-msvc': 4.9.1 - '@rollup/rollup-win32-ia32-msvc': 4.9.1 - '@rollup/rollup-win32-x64-msvc': 4.9.1 + '@rollup/rollup-android-arm-eabi': 4.9.6 + '@rollup/rollup-android-arm64': 4.9.6 + '@rollup/rollup-darwin-arm64': 4.9.6 + '@rollup/rollup-darwin-x64': 4.9.6 + '@rollup/rollup-linux-arm-gnueabihf': 4.9.6 + '@rollup/rollup-linux-arm64-gnu': 4.9.6 + '@rollup/rollup-linux-arm64-musl': 4.9.6 + '@rollup/rollup-linux-riscv64-gnu': 4.9.6 + '@rollup/rollup-linux-x64-gnu': 4.9.6 + '@rollup/rollup-linux-x64-musl': 4.9.6 + '@rollup/rollup-win32-arm64-msvc': 4.9.6 + '@rollup/rollup-win32-ia32-msvc': 4.9.6 + '@rollup/rollup-win32-x64-msvc': 4.9.6 fsevents: 2.3.3 /run-parallel@1.2.0: @@ -2565,12 +2674,12 @@ packages: engines: {node: '>=14'} dev: true - /sirv@2.0.3: - resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} + /sirv@2.0.4: + resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} engines: {node: '>= 10'} dependencies: '@polka/url': 1.0.0-next.24 - mrmime: 1.0.1 + mrmime: 2.0.0 totalist: 3.0.1 /slash@3.0.0: @@ -2596,8 +2705,26 @@ packages: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} dev: true - /std-env@3.6.0: - resolution: {integrity: sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg==} + /std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 dev: true /strip-ansi@6.0.1: @@ -2607,6 +2734,13 @@ packages: ansi-regex: 5.0.1 dev: true + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: true + /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} @@ -2627,17 +2761,17 @@ packages: /strip-literal@1.3.0: resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} dependencies: - acorn: 8.11.2 + acorn: 8.11.3 dev: true - /sucrase@3.34.0: - resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} - engines: {node: '>=8'} + /sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: '@jridgewell/gen-mapping': 0.3.3 commander: 4.1.1 - glob: 7.1.6 + glob: 10.3.10 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -2656,20 +2790,20 @@ packages: engines: {node: '>= 0.4'} dev: true - /svelte-check@3.6.2(postcss@8.4.32)(svelte@4.2.8): - resolution: {integrity: sha512-E6iFh4aUCGJLRz6QZXH3gcN/VFfkzwtruWSRmlKrLWQTiO6VzLsivR6q02WYLGNAGecV3EocqZuCDrC2uttZ0g==} + /svelte-check@3.6.3(postcss@8.4.33)(svelte@4.2.9): + resolution: {integrity: sha512-Q2nGnoysxUnB9KjnjpQLZwdjK62DHyW6nuH/gm2qteFnDk0lCehe/6z8TsIvYeKjC6luKaWxiNGyOcWiLLPSwA==} 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.20 + '@jridgewell/trace-mapping': 0.3.22 chokidar: 3.5.3 fast-glob: 3.3.2 import-fresh: 3.3.0 picocolors: 1.0.0 sade: 1.8.1 - svelte: 4.2.8 - svelte-preprocess: 5.1.1(postcss@8.4.32)(svelte@4.2.8)(typescript@5.3.3) + svelte: 4.2.9 + svelte-preprocess: 5.1.3(postcss@8.4.33)(svelte@4.2.9)(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: - '@babel/core' @@ -2683,7 +2817,7 @@ packages: - sugarss dev: true - /svelte-eslint-parser@0.33.1(svelte@4.2.8): + /svelte-eslint-parser@0.33.1(svelte@4.2.9): resolution: {integrity: sha512-vo7xPGTlKBGdLH8T5L64FipvTrqv3OQRx9d2z5X05KKZDlF4rQk8KViZO4flKERY+5BiVdOh7zZ7JGJWo5P0uA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2695,29 +2829,29 @@ packages: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - postcss: 8.4.32 - postcss-scss: 4.0.9(postcss@8.4.32) - svelte: 4.2.8 + postcss: 8.4.33 + postcss-scss: 4.0.9(postcss@8.4.33) + svelte: 4.2.9 dev: true - /svelte-hmr@0.15.3(svelte@4.2.8): + /svelte-hmr@0.15.3(svelte@4.2.9): resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: svelte: ^3.19.0 || ^4.0.0 dependencies: - svelte: 4.2.8 + svelte: 4.2.9 - /svelte-preprocess@5.1.1(postcss@8.4.32)(svelte@4.2.8)(typescript@5.3.3): - resolution: {integrity: sha512-p/Dp4hmrBW5mrCCq29lEMFpIJT2FZsRlouxEc5qpbOmXRbaFs7clLs8oKPwD3xCFyZfv1bIhvOzpQkhMEVQdMw==} - engines: {node: '>= 14.10.0'} + /svelte-preprocess@5.1.3(postcss@8.4.33)(svelte@4.2.9)(typescript@5.3.3): + resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==} + engines: {node: '>= 16.0.0', pnpm: ^8.0.0} requiresBuild: true peerDependencies: '@babel/core': ^7.10.2 coffeescript: ^2.5.1 less: ^3.11.3 || ^4.0.0 postcss: ^7 || ^8 - postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 + postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 pug: ^3.0.0 sass: ^1.26.8 stylus: ^0.55.0 @@ -2748,24 +2882,25 @@ packages: dependencies: '@types/pug': 2.0.10 detect-indent: 6.1.0 - magic-string: 0.27.0 - postcss: 8.4.32 + magic-string: 0.30.5 + postcss: 8.4.33 sorcery: 0.11.0 strip-indent: 3.0.0 - svelte: 4.2.8 + svelte: 4.2.9 typescript: 5.3.3 dev: true - /svelte@4.2.8: - resolution: {integrity: sha512-hU6dh1MPl8gh6klQZwK/n73GiAHiR95IkFsesLPbMeEZi36ydaXL/ZAb4g9sayT0MXzpxyZjR28yderJHxcmYA==} + /svelte@4.2.9: + resolution: {integrity: sha512-hsoB/WZGEPFXeRRLPhPrbRz67PhP6sqYgvwcAs+gWdSQSvNDw+/lTeUJSWe5h2xC97Fz/8QxAOqItwBzNJPU8w==} engines: {node: '>=16'} dependencies: '@ampproject/remapping': 2.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 - acorn: 8.11.2 + '@jridgewell/trace-mapping': 0.3.22 + '@types/estree': 1.0.5 + acorn: 8.11.3 aria-query: 5.3.0 - axobject-query: 3.2.1 + axobject-query: 4.0.0 code-red: 1.0.4 css-tree: 2.3.1 estree-walker: 3.0.3 @@ -2774,20 +2909,8 @@ packages: magic-string: 0.30.5 periscopic: 3.1.0 - /sveltekit-zero-api@0.15.7(@sveltejs/kit@2.0.4)(svelte@4.2.8)(typescript@5.3.3): - resolution: {integrity: sha512-yklGBeRfHw4dmMjvzskkuXbeakyKWyRqmiVbuD/a4xXPsU3TerBfNKAy6+7Bmpo2KIE2Q6LTdrs+JUQyYYtltA==} - peerDependencies: - '@sveltejs/kit': ^1.5.5 - svelte: ^3.55.1 - typescript: '>=5.0.0' - dependencies: - '@sveltejs/kit': 2.0.4(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10) - svelte: 4.2.8 - typescript: 5.3.3 - dev: true - - /tailwindcss@3.3.6: - resolution: {integrity: sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw==} + /tailwindcss@3.4.1: + resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -2805,14 +2928,14 @@ packages: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.32 - postcss-import: 15.1.0(postcss@8.4.32) - postcss-js: 4.0.1(postcss@8.4.32) - postcss-load-config: 4.0.2(postcss@8.4.32) - postcss-nested: 6.0.1(postcss@8.4.32) - postcss-selector-parser: 6.0.13 + postcss: 8.4.33 + postcss-import: 15.1.0(postcss@8.4.33) + postcss-js: 4.0.1(postcss@8.4.33) + postcss-load-config: 4.0.2(postcss@8.4.33) + postcss-nested: 6.0.1(postcss@8.4.33) + postcss-selector-parser: 6.0.15 resolve: 1.22.8 - sucrase: 3.34.0 + sucrase: 3.35.0 transitivePeerDependencies: - ts-node dev: true @@ -2840,12 +2963,12 @@ packages: globalyzer: 0.1.0 globrex: 0.1.2 - /tinybench@2.5.1: - resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} + /tinybench@2.6.0: + resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} dev: true - /tinypool@0.8.1: - resolution: {integrity: sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==} + /tinypool@0.8.2: + resolution: {integrity: sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==} engines: {node: '>=14.0.0'} dev: true @@ -2865,6 +2988,20 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} + /trpc-sveltekit@3.5.22(@sveltejs/adapter-node@2.1.2)(@trpc/client@10.45.0)(@trpc/server@10.45.0)(ws@8.16.0): + resolution: {integrity: sha512-qFgtor6rGt+dOvLIvrk2325F/AVQ6tv/ZUzZ4PNuyUSFFYbendt/WlunrFgDDdR4vq6RWzLsh6mowcGyi++i4A==} + peerDependencies: + '@sveltejs/adapter-node': '>=1.2' + '@trpc/client': '>=10' + '@trpc/server': '>=10' + ws: '>=8' + dependencies: + '@sveltejs/adapter-node': 2.1.2(@sveltejs/kit@2.5.0) + '@trpc/client': 10.45.0(@trpc/server@10.45.0) + '@trpc/server': 10.45.0 + ws: 8.16.0 + dev: true + /ts-api-utils@1.0.3(typescript@5.3.3): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} @@ -2887,7 +3024,7 @@ packages: engines: {node: '>=18.0.0'} hasBin: true dependencies: - esbuild: 0.19.10 + esbuild: 0.19.12 get-tsconfig: 4.7.2 optionalDependencies: fsevents: 2.3.3 @@ -2944,16 +3081,16 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /vite-node@1.1.0(@types/node@20.10.5): - resolution: {integrity: sha512-jV48DDUxGLEBdHCQvxL1mEh7+naVy+nhUUUaPAZLd3FJgXuxQiewHcfeZebbJ6onDqNGkP4r3MhQ342PRlG81Q==} + /vite-node@1.2.2(@types/node@20.11.7): + resolution: {integrity: sha512-1as4rDTgVWJO3n1uHmUYqq7nsFgINQ9u+mRcXpjeOMJUmviqNKjcZB7UfRZrlM7MjYXMKpuWp5oGkjaFLnjawg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true dependencies: cac: 6.7.14 debug: 4.3.4 - pathe: 1.1.1 + pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.0.10(@types/node@20.10.5) + vite: 5.0.12(@types/node@20.11.7) transitivePeerDependencies: - '@types/node' - less @@ -2965,8 +3102,8 @@ packages: - terser dev: true - /vite@5.0.10(@types/node@20.10.5): - resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==} + /vite@5.0.12(@types/node@20.11.7): + resolution: {integrity: sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -2993,14 +3130,14 @@ packages: terser: optional: true dependencies: - '@types/node': 20.10.5 - esbuild: 0.19.10 - postcss: 8.4.32 - rollup: 4.9.1 + '@types/node': 20.11.7 + esbuild: 0.19.12 + postcss: 8.4.33 + rollup: 4.9.6 optionalDependencies: fsevents: 2.3.3 - /vitefu@0.2.5(vite@5.0.10): + /vitefu@0.2.5(vite@5.0.12): resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} peerDependencies: vite: ^3.0.0 || ^4.0.0 || ^5.0.0 @@ -3008,10 +3145,10 @@ packages: vite: optional: true dependencies: - vite: 5.0.10(@types/node@20.10.5) + vite: 5.0.12(@types/node@20.11.7) - /vitest@1.1.0(@types/node@20.10.5): - resolution: {integrity: sha512-oDFiCrw7dd3Jf06HoMtSRARivvyjHJaTxikFxuqJjO76U436PqlVw1uLn7a8OSPrhSfMGVaRakKpA2lePdw79A==} + /vitest@1.2.2(@types/node@20.11.7): + resolution: {integrity: sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -3035,27 +3172,27 @@ packages: jsdom: optional: true dependencies: - '@types/node': 20.10.5 - '@vitest/expect': 1.1.0 - '@vitest/runner': 1.1.0 - '@vitest/snapshot': 1.1.0 - '@vitest/spy': 1.1.0 - '@vitest/utils': 1.1.0 - acorn-walk: 8.3.1 + '@types/node': 20.11.7 + '@vitest/expect': 1.2.2 + '@vitest/runner': 1.2.2 + '@vitest/snapshot': 1.2.2 + '@vitest/spy': 1.2.2 + '@vitest/utils': 1.2.2 + acorn-walk: 8.3.2 cac: 6.7.14 - chai: 4.3.10 + chai: 4.4.1 debug: 4.3.4 execa: 8.0.1 local-pkg: 0.5.0 magic-string: 0.30.5 - pathe: 1.1.1 + pathe: 1.1.2 picocolors: 1.0.0 - std-env: 3.6.0 + std-env: 3.7.0 strip-literal: 1.3.0 - tinybench: 2.5.1 - tinypool: 0.8.1 - vite: 5.0.10(@types/node@20.10.5) - vite-node: 1.1.0(@types/node@20.10.5) + tinybench: 2.6.0 + tinypool: 0.8.2 + vite: 5.0.12(@types/node@20.11.7) + vite-node: 1.2.2(@types/node@20.11.7) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -3084,10 +3221,41 @@ packages: stackback: 0.0.2 dev: true + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + dev: true + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true + /ws@8.16.0: + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true diff --git a/prisma/migrations/20240124204635_patient_hidden/migration.sql b/prisma/migrations/20240124204635_patient_hidden/migration.sql new file mode 100644 index 0000000..872de0f --- /dev/null +++ b/prisma/migrations/20240124204635_patient_hidden/migration.sql @@ -0,0 +1,3 @@ +-- AlterTable +ALTER TABLE "patients" +ADD COLUMN "hidden" BOOLEAN NOT NULL DEFAULT FALSE; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 55bae29..fa81260 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -14,7 +14,7 @@ datasource db { model Account { id Int @id @default(autoincrement()) - user_id Int @map("userId") + user_id Int @map("userId") type String provider String providerAccountId String @@ -74,9 +74,13 @@ model Patient { room Room? @relation(fields: [room_id], references: [id], onDelete: SetNull) room_id Int? Entry Entry[] + hidden Boolean @default(false) created_at DateTime @default(now()) + full_name String? @default(dbgenerated("((first_name || ' '::text) || last_name)")) @ignore + + @@index([full_name(ops: raw("gin_trgm_ops"))], map: "patients_full_name", type: Gin) @@map("patients") } @@ -101,6 +105,8 @@ model Entry { created_at DateTime @default(now()) + tsvec Unsupported("tsvector")? + @@map("entries") } diff --git a/src/api.ts b/src/api.ts deleted file mode 100644 index ccf91ce..0000000 --- a/src/api.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { createZeroApi } from "sveltekit-zero-api/api"; -import type { GeneratedAPI } from "./sveltekit-zero-api"; - -const routes = createZeroApi({ - // eslint-disable-next-line no-console - onError: async (err) => console.error("[API]", err), -}) as GeneratedAPI; - -export default routes.api; diff --git a/src/hooks.server.ts b/src/hooks.server.ts index d27a80e..e0e58d1 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -1,5 +1,3 @@ -import { prisma } from "$lib/server/prisma"; -import { PrismaAdapter } from "$lib/server/authAdapter"; import { SvelteKitAuth } from "@auth/sveltekit"; import Keycloak from "@auth/core/providers/keycloak"; import { @@ -9,6 +7,12 @@ import { } from "$env/static/private"; import { redirect, type Handle } from "@sveltejs/kit"; import { sequence } from "@sveltejs/kit/hooks"; +import { createTRPCHandle } from "trpc-sveltekit"; + +import { prisma } from "$lib/server/prisma"; +import { PrismaAdapter } from "$lib/server/authAdapter"; +import { createContext } from "$lib/server/trpc/context"; +import { router } from "$lib/server/trpc/router"; /** * Protect the application against unauthorized access. @@ -41,5 +45,6 @@ export const handle = sequence( strategy: "jwt", }, }), - authorization + authorization, + createTRPCHandle({ router, createContext }) ); diff --git a/src/lib/server/authAdapter.ts b/src/lib/server/authAdapter.ts index 7bc5124..a0b255f 100644 --- a/src/lib/server/authAdapter.ts +++ b/src/lib/server/authAdapter.ts @@ -25,7 +25,7 @@ function mapAccount(account: Account): AdapterAccount { refresh_token: account.refresh_token ?? undefined, access_token: account.access_token ?? undefined, expires_at: account.expires_at ?? undefined, - token_type: account.token_type ?? undefined, + token_type: (account.token_type as Lowercase) ?? undefined, scope: account.scope ?? undefined, id_token: account.id_token ?? undefined, }; diff --git a/src/lib/server/handleError.ts b/src/lib/server/handleError.ts index 2e2bc69..4c9be4c 100644 --- a/src/lib/server/handleError.ts +++ b/src/lib/server/handleError.ts @@ -1,3 +1,4 @@ +/* import { ErrorConflict, ErrorNotFound } from "$lib/shared/util/error"; import { ZodError } from "zod"; import { @@ -67,3 +68,4 @@ export async function apiWrapUser( return handleError(error); } } +*/ diff --git a/src/lib/server/query/entry.ts b/src/lib/server/query/entry.ts index 7b8c5e7..a2a3917 100644 --- a/src/lib/server/query/entry.ts +++ b/src/lib/server/query/entry.ts @@ -2,6 +2,7 @@ import { prisma } from "$lib/server/prisma"; import type { EntriesFilter, Entry, + EntryExecution, EntryExecutionNew, EntryNew, EntryVersion, @@ -10,7 +11,7 @@ import type { PaginationRequest, } from "$lib/shared/model"; import { ErrorConflict } from "$lib/shared/util/error"; -import { mapEntry, mapVersion } from "./mapping"; +import { mapEntry, mapVersion, mapExecution } from "./mapping"; import { QueryBuilder, parseSearchQuery } from "./util"; const USER_SELECT = { select: { id: true, name: true } }; @@ -36,14 +37,22 @@ export async function getEntry(id: number): Promise { return mapEntry(entry); } -export async function getEntryHistory(id: number): Promise { - const entries = await prisma.entryVersion.findMany({ +export async function getEntryVersions(id: number): Promise { + const versions = await prisma.entryVersion.findMany({ where: { entry_id: id }, include: { author: USER_SELECT, category: true }, orderBy: { created_at: "desc" }, }); + return versions.map(mapVersion); +} - return entries.map(mapVersion); +export async function getEntryExecutions(id: number): Promise { + const executions = await prisma.entryExecution.findMany({ + where: { entry_id: id }, + include: { author: USER_SELECT }, + orderBy: { created_at: "desc" }, + }); + return executions.map(mapExecution); } export async function newEntry(author_id: number, entry: EntryNew): Promise { @@ -65,7 +74,8 @@ export async function newEntry(author_id: number, entry: EntryNew): Promise { return prisma.$transaction(async (tx) => { const entry = await tx.entry.findUniqueOrThrow({ @@ -80,7 +90,7 @@ export async function newEntryVersion( const cver = entry.EntryVersion[0]; // Check if the entry has been updated by someone else - if (version.old_version && (!cver || cver.id !== version.old_version)) { + if (old_version_id && (!cver || cver.id !== old_version_id)) { throw new ErrorConflict("old version id does not match"); } @@ -103,7 +113,8 @@ export async function newEntryVersion( export async function newEntryExecution( author_id: number, entry_id: number, - execution: EntryExecutionNew + execution: EntryExecutionNew, + old_execution_id: number | null | undefined = undefined ): Promise { return prisma.$transaction(async (tx) => { const entry = await tx.entry.findUniqueOrThrow({ @@ -119,8 +130,8 @@ export async function newEntryExecution( // Check if the execution has been updated by someone else if ( - (execution.old_execution && (!cex || cex.id !== execution.old_execution)) || - (execution.old_execution === null && cex) + (old_execution_id && (!cex || cex.id !== old_execution_id)) || + (old_execution_id === null && cex) ) { throw new ErrorConflict("old execution id does not match"); } @@ -164,6 +175,7 @@ export async function getEntries( p.first_name as patient_first_name, p.last_name as patient_last_name, p.age as patient_age, + p.hidden as patient_hidden, p.created_at as patient_created_at, r.id as room_id, r.name as room_name, @@ -259,6 +271,7 @@ join stations s on s.id = r.station_id` patient_first_name: string; patient_last_name: string; patient_age: number; + patient_hidden: boolean; patient_created_at: Date; room_id: number; room_name: string; @@ -281,6 +294,7 @@ join stations s on s.id = r.station_id` last_name: item.patient_last_name, created_at: item.patient_created_at, age: item.patient_age, + hidden: item.patient_hidden, room: { id: item.room_id, name: item.room_name, diff --git a/src/lib/server/query/mapping.ts b/src/lib/server/query/mapping.ts index 86ac865..45f5bf2 100644 --- a/src/lib/server/query/mapping.ts +++ b/src/lib/server/query/mapping.ts @@ -38,6 +38,7 @@ export function mapPatient(patient: DbPatientLn): Patient { first_name: patient.first_name, last_name: patient.last_name, created_at: patient.created_at, + hidden: patient.hidden, age: patient.age, room: patient.room ? { @@ -73,7 +74,7 @@ export function mapVersion(version: DbEntryVersionLn): EntryVersion { }; } -function mapExecution(execution: DbEntryExecutionLn): EntryExecution { +export function mapExecution(execution: DbEntryExecutionLn): EntryExecution { return { id: execution.id, author: execution.author, diff --git a/src/lib/server/query/patient.ts b/src/lib/server/query/patient.ts index 55bcef2..d1b9ace 100644 --- a/src/lib/server/query/patient.ts +++ b/src/lib/server/query/patient.ts @@ -36,7 +36,10 @@ export async function deletePatient(id: number) { } } -// TODO: Hide a patient +/** Hide/show a patient */ +export async function hidePatient(id: number, hidden: boolean) { + await prisma.patient.update({ where: { id }, data: { hidden } }); +} export async function getPatient(id: number): Promise { const patient = await prisma.patient.findUniqueOrThrow({ @@ -53,7 +56,7 @@ export async function getPatients( pagination: PaginationRequest ): Promise> { const qb = new QueryBuilder( - `select p.id, p.first_name, p.last_name, p.created_at, p.age, + `select p.id, p.first_name, p.last_name, p.created_at, p.age, p.hidden, r.id as room_id, r.name as room_name, s.id as station_id, s.name as station_name`, `from patients p join rooms r on r.id = p.room_id @@ -66,6 +69,10 @@ export async function getPatients( qb.addOrderClause(`similarity(p.full_name, ${qvar}) desc`); } + if (filter.hidden !== undefined) { + qb.addFilter("p.hidden", filter.hidden); + } + qb.addFilterList("r.id", filter.room); qb.addFilterList("s.id", filter.station); qb.addOrderClause("p.created_at desc"); @@ -77,6 +84,7 @@ export async function getPatients( last_name: string; created_at: Date; age: number; + hidden: boolean; room_id: number; room_name: string; station_id: number; @@ -96,6 +104,7 @@ export async function getPatients( last_name: patient.last_name, age: patient.age, created_at: patient.created_at, + hidden: patient.hidden, room: { id: patient.room_id, name: patient.room_name, diff --git a/src/lib/server/trpc/context.ts b/src/lib/server/trpc/context.ts new file mode 100644 index 0000000..09e1a63 --- /dev/null +++ b/src/lib/server/trpc/context.ts @@ -0,0 +1,21 @@ +import { ZUser } from "$lib/shared/model/validation"; +import type { RequestEvent } from "@sveltejs/kit"; +import { type inferAsyncReturnType, TRPCError } from "@trpc/server"; + +// we're not using the event parameter is this example, +// hence the eslint-disable rule +// eslint-disable-next-line @typescript-eslint/no-unused-vars +export async function createContext(event: RequestEvent) { + const session = await event.locals.getSession(); + + if (!session?.user) { + throw new TRPCError({ code: "UNAUTHORIZED", message: "no session" }); + } + + const user = ZUser.parse(session?.user); + return { + user, + }; +} + +export type Context = inferAsyncReturnType; diff --git a/src/lib/server/trpc/index.ts b/src/lib/server/trpc/index.ts new file mode 100644 index 0000000..d4d7ae3 --- /dev/null +++ b/src/lib/server/trpc/index.ts @@ -0,0 +1,4 @@ +import { initTRPC } from "@trpc/server"; +import type { Context } from "./context"; + +export const t = initTRPC.context().create(); diff --git a/src/lib/server/trpc/router.ts b/src/lib/server/trpc/router.ts new file mode 100644 index 0000000..a8ea9e2 --- /dev/null +++ b/src/lib/server/trpc/router.ts @@ -0,0 +1,14 @@ +import { t } from "."; + +import { categoryRouter } from "./routes/category"; +import { entryRouter } from "./routes/entry"; + +export const router = t.router({ + greeting: t.procedure.query(async () => { + return `Hello tRPC v10 @ ${new Date().toLocaleTimeString()}`; + }), + category: categoryRouter, + entry: entryRouter, +}); + +export type Router = typeof router; diff --git a/src/lib/server/trpc/routes/category.ts b/src/lib/server/trpc/routes/category.ts new file mode 100644 index 0000000..bb134b9 --- /dev/null +++ b/src/lib/server/trpc/routes/category.ts @@ -0,0 +1,26 @@ +import { t } from ".."; +import { z } from "zod"; + +import { + deleteCategory, + getCategories, + newCategory, + updateCategory, +} from "$lib/server/query"; +import { ZCategoryNew, ZEntityId } from "$lib/shared/model/validation"; + +export const categoryRouter = t.router({ + list: t.procedure.query(getCategories), + create: t.procedure.input(ZCategoryNew).mutation(async (opts) => { + const id = await newCategory(opts.input); + return { id }; + }), + update: t.procedure + .input(z.object({ id: ZEntityId, category: ZCategoryNew.partial() })) + .mutation(async (opts) => { + await updateCategory(opts.input.id, opts.input.category); + }), + delete: t.procedure.input(ZEntityId).mutation(async (opts) => { + await deleteCategory(opts.input); + }), +}); diff --git a/src/lib/server/trpc/routes/entry.ts b/src/lib/server/trpc/routes/entry.ts new file mode 100644 index 0000000..0ef429b --- /dev/null +++ b/src/lib/server/trpc/routes/entry.ts @@ -0,0 +1,74 @@ +import { t } from ".."; +import { z } from "zod"; + +import { + ZEntityId, + ZEntriesFilter, + ZEntryExecutionNew, + ZEntryVersionNew, + ZPagination, +} from "$lib/shared/model/validation"; +import { + getEntries, + getEntry, + getEntryExecutions, + getEntryVersions, + newEntryExecution, + newEntryVersion, +} from "$lib/server/query"; + +export const entryRouter = t.router({ + get: t.procedure.input(ZEntityId).query(async (opts) => { + return getEntry(opts.input); + }), + list: t.procedure + .input( + z + .object({ + filter: ZEntriesFilter, + pagination: ZPagination, + }) + .partial() + ) + .query(async (opts) => { + return getEntries(opts.input.filter || {}, opts.input.pagination || {}); + }), + versions: t.procedure.input(ZEntityId).query(async (opts) => { + return getEntryVersions(opts.input); + }), + executions: t.procedure.input(ZEntityId).query(async (opts) => { + return getEntryExecutions(opts.input); + }), + newVersion: t.procedure + .input( + z.object({ + id: ZEntityId, + version: ZEntryVersionNew, + old_version_id: ZEntityId.optional(), + }) + ) + .query(async (opts) => { + return newEntryVersion( + opts.ctx.user.id, + opts.input.id, + opts.input.version, + opts.input.old_version_id + ); + }), + newExecution: t.procedure + .input( + z.object({ + id: ZEntityId, + execution: ZEntryExecutionNew, + old_execution_id: ZEntityId.nullable().optional(), + }) + ) + .query(async (opts) => { + return newEntryExecution( + opts.ctx.user.id, + opts.input.id, + opts.input.execution, + opts.input.old_execution_id + ); + }), +}); diff --git a/src/lib/shared/model/model.ts b/src/lib/shared/model/model.ts index 3efdfd3..9761060 100644 --- a/src/lib/shared/model/model.ts +++ b/src/lib/shared/model/model.ts @@ -63,6 +63,7 @@ export type Patient = { last_name: string; age: Option; room: Option; + hidden: boolean; created_at: Date; }; @@ -103,10 +104,7 @@ export type EntryVersionNdata = { priority: boolean; }; -export type EntryVersionNew = Partial<{ - old_version: number; -}> & - Partial; +export type EntryVersionNew = Partial; export type EntryExecution = { id: number; @@ -115,8 +113,6 @@ export type EntryExecution = { created_at: Date; }; -export type EntryExecutionNew = Partial<{ - old_execution: number | null; -}> & { +export type EntryExecutionNew = { text: string; }; diff --git a/src/lib/shared/model/requests.ts b/src/lib/shared/model/requests.ts index aa1f93f..96c2e5f 100644 --- a/src/lib/shared/model/requests.ts +++ b/src/lib/shared/model/requests.ts @@ -21,4 +21,5 @@ export type PatientsFilter = Partial<{ search: string; station: FilterList; room: FilterList; + hidden: boolean; }>; diff --git a/src/lib/shared/model/validation.test.ts b/src/lib/shared/model/validation.test.ts deleted file mode 100644 index 22d9049..0000000 --- a/src/lib/shared/model/validation.test.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { expect, test } from "vitest"; -import { ZEntriesFilterUrl, ZPatientsFilterUrl } from "./validation"; -import type { EntriesFilter, PatientsFilter } from "."; - -test("valid EntriesFilterUrl", () => { - const data = ZEntriesFilterUrl.parse({ - done: "0", - }); - - expect(data).toStrictEqual({ - done: false, - } satisfies EntriesFilter); -}); - -test("valid PatientsFilterUrl", () => { - const data = ZPatientsFilterUrl.parse({ - room: "1;2;3;4", - station: "5", - }); - - expect(data).toStrictEqual({ - room: [1, 2, 3, 4], - station: [5], - } satisfies PatientsFilter); -}); diff --git a/src/lib/shared/model/validation.ts b/src/lib/shared/model/validation.ts index f3ec458..bada4c8 100644 --- a/src/lib/shared/model/validation.ts +++ b/src/lib/shared/model/validation.ts @@ -10,12 +10,19 @@ import type { PatientNew, RoomNew, StationNew, + User, } from "."; -const ZEntityId = z.number().int().nonnegative(); +export const ZEntityId = z.number().int().nonnegative(); const ZNameString = z.string().min(1).max(200).trim(); const ZTextString = z.string().trim(); +export const ZUser = implement().with({ + id: ZEntityId, + name: z.string().nullable(), + email: z.string().nullable(), +}); + export const ZStationNew = implement().with({ name: ZNameString }); export const ZRoomNew = implement().with({ @@ -41,7 +48,6 @@ export const ZPatientNew = implement().with({ }); export const ZEntryVersionNew = implement().with({ - old_version: ZEntityId.optional(), text: ZTextString.optional(), date: z.date().optional(), category_id: ZEntityId.optional().nullable(), @@ -59,41 +65,40 @@ export const ZEntryNew = implement().with({ }); export const ZEntryExecutionNew = implement().with({ - old_execution: ZEntityId.optional().nullable(), text: ZTextString, }); -// From URL -const ZFilterListUrl = z - .string() - .regex(/^\d+(;\d+)*$/) - .transform((s) => s.split(";").map(Number)) - .optional(); - -export const ZEntityIdUrl = z.coerce.number().int().nonnegative(); - -export const BooleanUrl = z - .string() - .transform((s) => s !== "0" && s.toLowerCase() !== "false"); - -export const ZPaginationUrl = implement().with({ - limit: ZEntityIdUrl.optional(), - offset: ZEntityIdUrl.optional(), +export const ZPagination = implement().with({ + limit: ZEntityId.optional(), + offset: ZEntityId.optional(), }); -export const ZEntriesFilterUrl = z.object({ - author: ZFilterListUrl, - category: ZFilterListUrl, - done: BooleanUrl.optional(), - executor: ZFilterListUrl, - patient: ZFilterListUrl, - priority: BooleanUrl.optional(), - room: ZFilterListUrl, - search: z.string().optional(), - station: ZFilterListUrl, -}); +// const ZFilterList = z +// .string() +// .regex(/^\d+(;\d+)*$/) +// .transform((s) => s.split(";").map(Number)) +// .optional(); +const ZFilterList = z.array(ZEntityId).or(ZEntityId); -export const ZPatientsFilterUrl = z.object({ - room: ZFilterListUrl, - station: ZFilterListUrl, -}); +export const ZEntriesFilter = z + .object({ + author: ZFilterList, + category: ZFilterList, + done: z.boolean(), + executor: ZFilterList, + patient: ZFilterList, + priority: z.boolean(), + room: ZFilterList, + search: z.string(), + station: ZFilterList, + }) + .partial(); + +export const ZPatientsFilterUrl = z + .object({ + search: z.string(), + room: ZFilterList, + station: ZFilterList, + hidden: z.boolean(), + }) + .partial(); diff --git a/src/lib/shared/trpc.ts b/src/lib/shared/trpc.ts new file mode 100644 index 0000000..cde6393 --- /dev/null +++ b/src/lib/shared/trpc.ts @@ -0,0 +1,16 @@ +import type { Router } from "$lib/server/trpc/router"; +import { createTRPCClient, type TRPCClientInit } from "trpc-sveltekit"; + +let browserClient: ReturnType>; + +/** Get a new tRPC client + * + * This function switches between calling the tRPC server directly and using the TRPC + * HTTP client depending on the side it is called on. */ +export function trpc(init?: TRPCClientInit) { + const isBrowser = typeof window !== "undefined"; + if (isBrowser && browserClient) return browserClient; + const client = createTRPCClient({ init }); + if (isBrowser) browserClient = client; + return client; +} diff --git a/src/routes/(app)/plan/+page.svelte b/src/routes/(app)/plan/+page.svelte index bab84fa..05a9630 100644 --- a/src/routes/(app)/plan/+page.svelte +++ b/src/routes/(app)/plan/+page.svelte @@ -1,10 +1,10 @@

Planung

+ +

{data.greeting}

+

{JSON.stringify(data.categories)}

diff --git a/src/routes/(app)/plan/+page.ts b/src/routes/(app)/plan/+page.ts new file mode 100644 index 0000000..d2ee5a6 --- /dev/null +++ b/src/routes/(app)/plan/+page.ts @@ -0,0 +1,11 @@ +import { trpc } from "$lib/shared/trpc"; +import type { PageLoad } from "./$types"; + +export const load: PageLoad = async (event) => { + const [greeting, categories] = await Promise.all([ + trpc(event).greeting.query(), + trpc(event).category.list.query(), + ]); + + return { greeting, categories }; +}; diff --git a/src/routes/api/category/+server.ts b/src/routes/api/category/+server.ts deleted file mode 100644 index 4fa7f10..0000000 --- a/src/routes/api/category/+server.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { KitEvent } from "sveltekit-zero-api"; -import type { RequestEvent } from "./$types"; - -import { getCategories, newCategory } from "$lib/server/query"; -import type { ApiBody, CategoryNew } from "$lib/shared/model"; -import { ZCategoryNew } from "$lib/shared/model/validation"; -import { apiWrap } from "$lib/server/handleError"; - -/** Get all categories */ -export const GET = async (event: KitEvent) => { - return apiWrap(getCategories); -}; - -/** Create a new category */ -export const POST = async (event: KitEvent, RequestEvent>) => { - return apiWrap(async () => { - const category = ZCategoryNew.parse(await event.request.json()); - const id = await newCategory(category); - return { id }; - }); -}; diff --git a/src/routes/api/category/[id]/+server.ts b/src/routes/api/category/[id]/+server.ts deleted file mode 100644 index 7bb5c74..0000000 --- a/src/routes/api/category/[id]/+server.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { apiWrap } from "$lib/server/handleError"; -import { deleteCategory, getCategory, updateCategory } from "$lib/server/query"; -import { ZCategoryNew, ZEntityIdUrl } from "$lib/shared/model/validation"; -import type { KitEvent } from "sveltekit-zero-api"; -import type { RequestEvent } from "./$types"; -import type { CategoryNew, ApiBody } from "$lib/shared/model"; - -/** Get a category */ -export const GET = async (event: KitEvent) => { - return apiWrap(async () => { - const id = ZEntityIdUrl.parse(event.params.id); - return await getCategory(id); - }); -}; - -/** Update a category */ -export const PATCH = async ( - event: KitEvent>, RequestEvent> -) => { - return apiWrap(async () => { - const id = ZEntityIdUrl.parse(event.params.id); - const category = ZCategoryNew.partial().parse(await event.request.json()); - await updateCategory(id, category); - return { id }; - }); -}; - -/** Delete a category */ -export const DELETE = async (event: KitEvent) => { - return apiWrap(async () => { - const id = ZEntityIdUrl.parse(event.params.id); - await deleteCategory(id); - return { id }; - }); -}; diff --git a/src/routes/api/entry/+server.ts b/src/routes/api/entry/+server.ts deleted file mode 100644 index d37241b..0000000 --- a/src/routes/api/entry/+server.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { getEntries } from "$lib/server/query"; -import { apiWrap } from "$lib/server/handleError"; -import { ZEntriesFilterUrl, ZPaginationUrl } from "$lib/shared/model/validation"; -import type { KitEvent } from "sveltekit-zero-api"; -import type { RequestEvent } from "./$types"; - -/** Get entries */ -export const GET = async (event: KitEvent) => { - return apiWrap(async () => { - const params = Object.fromEntries(event.url.searchParams); - const filter = ZEntriesFilterUrl.parse(params); - const pagination = ZPaginationUrl.parse(params); - return await getEntries(filter, pagination); - }); -}; diff --git a/src/routes/api/entry/[id]/+server.ts b/src/routes/api/entry/[id]/+server.ts deleted file mode 100644 index 65933e7..0000000 --- a/src/routes/api/entry/[id]/+server.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { apiWrap } from "$lib/server/handleError"; -import { getEntry } from "$lib/server/query"; -import { ZEntityIdUrl } from "$lib/shared/model/validation"; -import type { KitEvent } from "sveltekit-zero-api"; -import type { RequestEvent } from "./$types"; - -/** Get a entry */ -export const GET = async (event: KitEvent) => { - return apiWrap(async () => { - const id = ZEntityIdUrl.parse(event.params.id); - return getEntry(id); - }); -}; diff --git a/src/routes/api/entry/[id]/execution/+server.ts b/src/routes/api/entry/[id]/execution/+server.ts deleted file mode 100644 index a8cb8ea..0000000 --- a/src/routes/api/entry/[id]/execution/+server.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { KitEvent } from "sveltekit-zero-api"; -import type { RequestEvent } from "./$types"; -import type { ApiBody, EntryExecutionNew } from "$lib/shared/model"; -import { apiWrapUser } from "$lib/server/handleError"; -import { ZEntityIdUrl, ZEntryExecutionNew } from "$lib/shared/model/validation"; -import { newEntryExecution } from "$lib/server/query"; - -/** Create an entry execution */ -export const POST = async ( - event: KitEvent, RequestEvent> -) => { - return apiWrapUser(event, async (uId) => { - const id = ZEntityIdUrl.parse(event.params.id); - const execution = ZEntryExecutionNew.parse(await event.request.json()); - const newExecutionId = await newEntryExecution(uId, id, execution); - return { id, newExecutionId }; - }); -}; diff --git a/src/routes/api/entry/[id]/version/+server.ts b/src/routes/api/entry/[id]/version/+server.ts deleted file mode 100644 index 2ccbc5b..0000000 --- a/src/routes/api/entry/[id]/version/+server.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { apiWrap, apiWrapUser } from "$lib/server/handleError"; -import { getEntryHistory, newEntryVersion } from "$lib/server/query"; -import { ZEntityIdUrl, ZEntryVersionNew } from "$lib/shared/model/validation"; -import type { KitEvent } from "sveltekit-zero-api"; -import type { RequestEvent } from "./$types"; -import type { ApiBody, EntryVersionNew } from "$lib/shared/model"; - -/** Get all versions of an entry */ -export const GET = async (event: KitEvent) => { - return apiWrap(async () => { - const id = ZEntityIdUrl.parse(event.params.id); - return getEntryHistory(id); - }); -}; - -/** Create an entry version */ -export const PATCH = async ( - event: KitEvent>, RequestEvent> -) => { - return apiWrapUser(event, async (uId) => { - const id = ZEntityIdUrl.parse(event.params.id); - const version = ZEntryVersionNew.parse(await event.request.json()); - const newVersionId = await newEntryVersion(uId, id, version); - return { id, newVersionId }; - }); -}; diff --git a/src/routes/api/patient/+server.ts b/src/routes/api/patient/+server.ts deleted file mode 100644 index 0333422..0000000 --- a/src/routes/api/patient/+server.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { apiWrap } from "$lib/server/handleError"; -import { getPatients } from "$lib/server/query"; -import { ZPaginationUrl, ZPatientsFilterUrl } from "$lib/shared/model/validation"; -import type { KitEvent } from "sveltekit-zero-api"; -import type { RequestEvent } from "./$types"; - -/** Get patients */ -export const GET = async (event: KitEvent) => { - return apiWrap(async () => { - const params = Object.fromEntries(event.url.searchParams); - const filter = ZPatientsFilterUrl.parse(params); - const pagination = ZPaginationUrl.parse(params); - return await getPatients(filter, pagination); - }); -}; diff --git a/src/routes/api/patient/[id]/+server.ts b/src/routes/api/patient/[id]/+server.ts deleted file mode 100644 index ab2ff97..0000000 --- a/src/routes/api/patient/[id]/+server.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { apiWrap } from "$lib/server/handleError"; -import { deletePatient, getPatient, updatePatient } from "$lib/server/query"; -import { ZEntityIdUrl, ZPatientNew } from "$lib/shared/model/validation"; -import type { KitEvent } from "sveltekit-zero-api"; -import type { RequestEvent } from "./$types"; -import type { ApiBody, PatientNew } from "$lib/shared/model"; - -/** Get a patient */ -export const GET = async (event: KitEvent) => { - return apiWrap(async () => { - const id = ZEntityIdUrl.parse(event.params.id); - return await getPatient(id); - }); -}; - -/** Update a patient */ -export const PATCH = async ( - event: KitEvent>, RequestEvent> -) => { - return apiWrap(async () => { - const id = ZEntityIdUrl.parse(event.params.id); - const patient = ZPatientNew.partial().parse(await event.request.json()); - await updatePatient(id, patient); - return { id }; - }); -}; - -/** Delete a patient */ -export const DELETE = async (event: KitEvent) => { - return apiWrap(async () => { - const id = ZEntityIdUrl.parse(event.params.id); - await deletePatient(id); - return { id }; - }); -}; diff --git a/src/routes/api/room/+server.ts b/src/routes/api/room/+server.ts deleted file mode 100644 index 4d0ff40..0000000 --- a/src/routes/api/room/+server.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { getRooms, newRoom } from "$lib/server/query"; -import { apiWrap } from "$lib/server/handleError"; -import type { KitEvent } from "sveltekit-zero-api"; -import type { RequestEvent } from "./$types"; -import type { ApiBody, RoomNew } from "$lib/shared/model"; -import { ZRoomNew } from "$lib/shared/model/validation"; - -/** Get all rooms */ -export const GET = async (event: KitEvent) => { - return apiWrap(getRooms); -}; - -/** Create a new room */ -export const POST = async (event: KitEvent, RequestEvent>) => { - return apiWrap(async () => { - const room = ZRoomNew.parse(await event.request.json()); - const id = await newRoom(room); - return { id }; - }); -}; diff --git a/src/routes/api/room/[id]/+server.ts b/src/routes/api/room/[id]/+server.ts deleted file mode 100644 index 645b4b2..0000000 --- a/src/routes/api/room/[id]/+server.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { apiWrap } from "$lib/server/handleError"; -import { getRoom, updateRoom, deleteRoom } from "$lib/server/query"; -import { ZRoomNew, ZEntityIdUrl } from "$lib/shared/model/validation"; -import type { KitEvent } from "sveltekit-zero-api"; -import type { RequestEvent } from "./$types"; -import type { ApiBody, RoomNew } from "$lib/shared/model"; - -/** Get a room */ -export const GET = async (event: KitEvent) => { - return apiWrap(async () => { - const id = ZEntityIdUrl.parse(event.params.id); - return await getRoom(id); - }); -}; - -/** Update a room */ -export const PATCH = async ( - event: KitEvent>, RequestEvent> -) => { - return apiWrap(async () => { - const id = ZEntityIdUrl.parse(event.params.id); - const room = ZRoomNew.partial().parse(await event.request.json()); - await updateRoom(id, room); - return { id }; - }); -}; - -/** Delete a room */ -export const DELETE = async (event: KitEvent) => { - return apiWrap(async () => { - const id = ZEntityIdUrl.parse(event.params.id); - await deleteRoom(id); - return { id }; - }); -}; diff --git a/src/routes/api/station/+server.ts b/src/routes/api/station/+server.ts deleted file mode 100644 index 4d0ff40..0000000 --- a/src/routes/api/station/+server.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { getRooms, newRoom } from "$lib/server/query"; -import { apiWrap } from "$lib/server/handleError"; -import type { KitEvent } from "sveltekit-zero-api"; -import type { RequestEvent } from "./$types"; -import type { ApiBody, RoomNew } from "$lib/shared/model"; -import { ZRoomNew } from "$lib/shared/model/validation"; - -/** Get all rooms */ -export const GET = async (event: KitEvent) => { - return apiWrap(getRooms); -}; - -/** Create a new room */ -export const POST = async (event: KitEvent, RequestEvent>) => { - return apiWrap(async () => { - const room = ZRoomNew.parse(await event.request.json()); - const id = await newRoom(room); - return { id }; - }); -}; diff --git a/src/routes/api/station/[id]/+server.ts b/src/routes/api/station/[id]/+server.ts deleted file mode 100644 index 639dad3..0000000 --- a/src/routes/api/station/[id]/+server.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { apiWrap } from "$lib/server/handleError"; -import { deleteStation, getStation, updateStation } from "$lib/server/query"; -import { ZEntityIdUrl, ZStationNew } from "$lib/shared/model/validation"; -import type { KitEvent } from "sveltekit-zero-api"; -import type { RequestEvent } from "./$types"; -import type { ApiBody, StationNew } from "$lib/shared/model"; - -/** Get a station */ -export const GET = async (event: KitEvent) => { - return apiWrap(async () => { - const id = ZEntityIdUrl.parse(event.params.id); - return await getStation(id); - }); -}; - -/** Update a station */ -export const PATCH = async ( - event: KitEvent>, RequestEvent> -) => { - return apiWrap(async () => { - const id = ZEntityIdUrl.parse(event.params.id); - const station = ZStationNew.partial().parse(await event.request.json()); - await updateStation(id, station); - return { id }; - }); -}; - -/** Delete a station */ -export const DELETE = async (event: KitEvent) => { - return apiWrap(async () => { - const id = ZEntityIdUrl.parse(event.params.id); - await deleteStation(id); - return { id }; - }); -}; diff --git a/src/routes/api/user/+server.ts b/src/routes/api/user/+server.ts deleted file mode 100644 index 2cfc29f..0000000 --- a/src/routes/api/user/+server.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { apiWrap } from "$lib/server/handleError"; -import { getUsers } from "$lib/server/query"; -import { ZPaginationUrl } from "$lib/shared/model/validation"; -import type { KitEvent } from "sveltekit-zero-api"; -import type { RequestEvent } from "./$types"; - -/** Get users */ -export const GET = async (event: KitEvent) => { - return apiWrap(async () => { - const params = Object.fromEntries(event.url.searchParams); - const pagination = ZPaginationUrl.parse(params); - return await getUsers(pagination); - }); -}; diff --git a/tests/integration/query/entry.ts b/tests/integration/query/entry.ts index f43c574..d6cca4b 100644 --- a/tests/integration/query/entry.ts +++ b/tests/integration/query/entry.ts @@ -1,7 +1,7 @@ import { getEntries, getEntry, - getEntryHistory, + getEntryVersions, newEntry, newEntryExecution, newEntryVersion, @@ -59,7 +59,7 @@ test("create entry version", async () => { }; expect(entry.current_version).toMatchObject(expectedVersion); - const history = await getEntryHistory(eId); + const history = await getEntryVersions(eId); expect(history).length(2); expect(history[0]).toMatchObject(expectedVersion); expect(history[1].text).toBe(TEST_VERSION.text); @@ -74,10 +74,7 @@ test("create entry version (partial)", async () => { const oldEntry = await getEntry(eId); const text = "10ml Blut abnehmen\n\nPS: Nadel nicht vergessen"; - await newEntryVersion(2, eId, { - old_version: oldEntry.current_version.id, - text, - }); + await newEntryVersion(2, eId, { text }, oldEntry.current_version.id); const entry = await getEntry(eId); expect(entry.current_version).toMatchObject({ @@ -97,10 +94,12 @@ test("create entry version (wrong old vid)", async () => { const entry = await getEntry(eId); expect(async () => { - await newEntryVersion(1, eId, { - old_version: entry.current_version.id + 1, - text: "Hello World", - }); + await newEntryVersion( + 1, + eId, + { text: "Hello World" }, + entry.current_version.id + 1 + ); }).rejects.toThrowError(new ErrorConflict("old version id does not match")); }); @@ -111,7 +110,7 @@ test("create entry execution", async () => { }); const text = "Blutabnahme erledigt."; - const xId = await newEntryExecution(1, eId, { old_execution: null, text }); + const xId = await newEntryExecution(1, eId, { text }, null); const entry = await getEntry(eId); expect(entry.execution?.id).toBe(xId); @@ -125,8 +124,8 @@ test("create entry execution (update)", async () => { version: TEST_VERSION, }); - const x1 = await newEntryExecution(1, eId, { old_execution: null, text: "x1" }); - const x2 = await newEntryExecution(2, eId, { old_execution: x1, text: "x2" }); + const x1 = await newEntryExecution(1, eId, { text: "x1" }, null); + const x2 = await newEntryExecution(2, eId, { text: "x2" }, x1); const entry = await getEntry(eId); expect(entry.execution?.id).toBe(x2); @@ -139,10 +138,10 @@ test("create entry execution (wrong old xid)", async () => { patient_id: 1, version: TEST_VERSION, }); - const x1 = await newEntryExecution(1, eId, { old_execution: null, text: "x1" }); + const x1 = await newEntryExecution(1, eId, { text: "x1" }, null); expect( - async () => await newEntryExecution(1, eId, { old_execution: x1 + 1, text: "x2" }) + async () => await newEntryExecution(1, eId, { text: "x2" }, x1 + 1) ).rejects.toThrowError(new ErrorConflict("old execution id does not match")); }); @@ -239,6 +238,12 @@ test("get entries", async () => { expect(entriesDone.items[0].id).toBe(eId3); expect(entriesDone.items[1].id).toBe(eId2); + // Filter not done + const entriesNotDone = await getEntries({ done: false }, {}); + expect(entriesNotDone.items).length(1); + expect(entriesNotDone.total).toBe(1); + expect(entriesNotDone.items[0].id).toBe(eId1); + // Filter by priority const entriesPrio = await getEntries({ priority: true }, {}); expect(entriesPrio.items).length(1); diff --git a/tests/integration/query/patient.ts b/tests/integration/query/patient.ts index 268e09e..949b89e 100644 --- a/tests/integration/query/patient.ts +++ b/tests/integration/query/patient.ts @@ -5,6 +5,7 @@ import { updatePatient, deletePatient, newEntry, + hidePatient, } from "$lib/server/query"; import { expect, test } from "vitest"; import { S1, S2 } from "$tests/helpers/testdata"; @@ -65,6 +66,16 @@ test("delete patient (restricted)", async () => { ); }); +test("hide patient", async () => { + await hidePatient(1, true); + let patient = await getPatient(1); + expect(patient.hidden).toBe(true); + + await hidePatient(1, false); + patient = await getPatient(1); + expect(patient.hidden).toBe(false); +}); + test("get patients", async () => { const patients = await getPatients({}, {}); expect(patients).toMatchObject({ @@ -118,6 +129,18 @@ test("get patients (by station)", async () => { expect(patients.items[1].id).toBe(2); }); +test("get patients (hidden)", async () => { + await hidePatient(2, true); + + let patients = await getPatients({ hidden: false }, {}); + expect(patients.items).length(2); + expect(patients.items[0].id).toBe(1); + + patients = await getPatients({ hidden: true }, {}); + expect(patients.items).length(1); + expect(patients.items[0].id).toBe(2); +}); + test("search patients", async () => { const patients = await getPatients({ search: "Schustr" }, {}); expect(patients.items).length(1); diff --git a/vite.config.ts b/vite.config.ts index 034f22f..49c9e7c 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,9 +1,8 @@ import { sveltekit } from "@sveltejs/kit/vite"; import { defineConfig } from "vitest/config"; -import { zeroAPI } from "sveltekit-zero-api"; export default defineConfig({ - plugins: [sveltekit(), zeroAPI()], + plugins: [sveltekit()], test: { include: ["src/**/*.{test,spec}.{js,ts}"], },