From 48c16d7892ed809457761926fd89d76751837882 Mon Sep 17 00:00:00 2001 From: Bradley Shellnut Date: Thu, 15 Jun 2023 23:28:49 -0700 Subject: [PATCH] Comment out collection until I can fix it. Rewrite wishlist, create users with the default role, add seed roles, update the user with the default role if they don't have it. And other things. --- package.json | 38 +- pnpm-lock.yaml | 848 ++++++++++-------- postcss.config.cjs | 2 +- prisma/schema.prisma | 32 +- prisma/seed.ts | 37 +- src/app.d.ts | 1 + src/db/roles.ts | 32 + src/db/users.ts | 56 ++ src/hooks.server.ts | 29 +- src/lib/components/header/index.svelte | 11 +- src/lib/components/search/random/index.svelte | 4 +- .../components/search/textSearch/index.svelte | 10 +- src/lib/server/lucia.ts | 7 +- src/lib/zodValidation.ts | 7 + src/routes/+layout.svelte | 4 +- src/routes/+page.svelte | 2 + src/routes/admin/+layout.server.ts | 5 + src/routes/admin/+layout.svelte | 1 + src/routes/admin/+page.svelte | 0 src/routes/auth/signin/+page.server.ts | 30 +- src/routes/auth/signin/+page.svelte | 1 + src/routes/auth/signup/+page.server.ts | 2 + src/routes/collection/+page.server.ts | 69 +- src/routes/collection/+page.svelte | 132 +-- src/routes/game/[id]/+page.svelte | 4 +- src/routes/wishlist/+page.server.ts | 95 ++ src/routes/wishlist/+page.svelte | 119 +-- svelte.config.js | 12 +- 28 files changed, 978 insertions(+), 612 deletions(-) create mode 100644 src/db/roles.ts create mode 100644 src/db/users.ts create mode 100644 src/routes/admin/+layout.server.ts create mode 100644 src/routes/admin/+layout.svelte create mode 100644 src/routes/admin/+page.svelte create mode 100644 src/routes/wishlist/+page.server.ts diff --git a/package.json b/package.json index dc17f69..0f76a5f 100644 --- a/package.json +++ b/package.json @@ -21,36 +21,36 @@ "seed": "ts-node --esm prisma/seed.ts" }, "devDependencies": { - "@playwright/test": "^1.34.3", + "@playwright/test": "^1.35.1", "@rgossiaux/svelte-headlessui": "1.0.2", "@rgossiaux/svelte-heroicons": "^0.1.2", "@sveltejs/adapter-auto": "^1.0.3", "@sveltejs/adapter-vercel": "^1.0.6", - "@sveltejs/kit": "^1.19.0", + "@sveltejs/kit": "^1.20.2", "@types/cookie": "^0.5.1", - "@types/node": "^18.16.16", - "@typescript-eslint/eslint-plugin": "^5.59.7", - "@typescript-eslint/parser": "^5.59.7", + "@types/node": "^18.16.18", + "@typescript-eslint/eslint-plugin": "^5.59.11", + "@typescript-eslint/parser": "^5.59.11", "autoprefixer": "^10.4.14", - "eslint": "^8.41.0", + "eslint": "^8.42.0", "eslint-config-prettier": "^8.8.0", - "eslint-plugin-svelte": "^2.29.0", + "eslint-plugin-svelte": "^2.30.0", "just-clone": "^6.2.0", "just-debounce-it": "^3.2.0", - "postcss": "^8.4.23", + "postcss": "^8.4.24", "postcss-import": "^15.1.0", "postcss-load-config": "^4.0.1", - "postcss-preset-env": "^8.4.2", + "postcss-preset-env": "^8.5.0", "prettier": "^2.8.8", - "prettier-plugin-svelte": "^2.10.0", - "prisma": "^4.14.1", - "sass": "^1.62.1", + "prettier-plugin-svelte": "^2.10.1", + "prisma": "^4.15.0", + "sass": "^1.63.4", "svelte": "^3.59.1", "svelte-check": "^2.10.3", - "svelte-preprocess": "^5.0.3", - "sveltekit-superforms": "^0.8.7", + "svelte-preprocess": "^5.0.4", + "sveltekit-superforms": "^1.0.0", "ts-node": "^10.9.1", - "tslib": "^2.5.2", + "tslib": "^2.5.3", "typescript": "^4.9.5", "vite": "^4.3.9", "vitest": "^0.25.3", @@ -64,21 +64,21 @@ "dependencies": { "@axiomhq/axiom-node": "^0.12.0", "@fontsource/fira-mono": "^4.5.10", - "@iconify-icons/line-md": "^1.2.22", + "@iconify-icons/line-md": "^1.2.23", "@iconify-icons/mdi": "^1.2.46", "@leveluptuts/svelte-side-menu": "^1.0.5", "@leveluptuts/svelte-toy": "^2.0.3", "@lucia-auth/adapter-mysql": "^1.1.1", "@lucia-auth/adapter-prisma": "^2.0.0", "@lukeed/uuid": "^2.0.1", - "@prisma/client": "4.14.1", + "@prisma/client": "4.15.0", "@types/feather-icons": "^4.29.1", "cookie": "^0.5.0", "feather-icons": "^4.29.0", "iconify-icon": "^1.0.7", "loader": "^2.1.1", - "lucia-auth": "^1.7.0", - "open-props": "^1.5.8", + "lucia-auth": "^1.8.0", + "open-props": "^1.5.9", "svelte-lazy": "^1.2.1", "svelte-lazy-loader": "^1.0.0", "svelte-legos": "^0.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 78c4309..1caaae1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.1' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -12,8 +12,8 @@ dependencies: specifier: ^4.5.10 version: 4.5.10 '@iconify-icons/line-md': - specifier: ^1.2.22 - version: 1.2.22 + specifier: ^1.2.23 + version: 1.2.23 '@iconify-icons/mdi': specifier: ^1.2.46 version: 1.2.46 @@ -25,16 +25,16 @@ dependencies: version: 2.0.3 '@lucia-auth/adapter-mysql': specifier: ^1.1.1 - version: 1.1.1(lucia-auth@1.7.0) + version: 1.1.1(lucia-auth@1.8.0) '@lucia-auth/adapter-prisma': specifier: ^2.0.0 - version: 2.0.0(@prisma/client@4.14.1)(lucia-auth@1.7.0) + version: 2.0.0(@prisma/client@4.15.0)(lucia-auth@1.8.0) '@lukeed/uuid': specifier: ^2.0.1 version: 2.0.1 '@prisma/client': - specifier: 4.14.1 - version: 4.14.1(prisma@4.14.1) + specifier: 4.15.0 + version: 4.15.0(prisma@4.15.0) '@types/feather-icons': specifier: ^4.29.1 version: 4.29.1 @@ -51,11 +51,11 @@ dependencies: specifier: ^2.1.1 version: 2.1.1 lucia-auth: - specifier: ^1.7.0 - version: 1.7.0 + specifier: ^1.8.0 + version: 1.8.0 open-props: - specifier: ^1.5.8 - version: 1.5.8 + specifier: ^1.5.9 + version: 1.5.9 svelte-lazy: specifier: ^1.2.1 version: 1.2.1(svelte@3.59.1) @@ -67,15 +67,15 @@ dependencies: version: 0.2.1(svelte@3.59.1) sveltekit-flash-message: specifier: ^0.11.3 - version: 0.11.3(@sveltejs/kit@1.19.0)(svelte@3.59.1) + version: 0.11.3(@sveltejs/kit@1.20.2)(svelte@3.59.1) zod-to-json-schema: specifier: ^3.21.1 version: 3.21.1(zod@3.21.4) devDependencies: '@playwright/test': - specifier: ^1.34.3 - version: 1.34.3 + specifier: ^1.35.1 + version: 1.35.1 '@rgossiaux/svelte-headlessui': specifier: 1.0.2 version: 1.0.2(svelte@3.59.1) @@ -84,37 +84,37 @@ devDependencies: version: 0.1.2(svelte@3.59.1) '@sveltejs/adapter-auto': specifier: ^1.0.3 - version: 1.0.3(@sveltejs/kit@1.19.0) + version: 1.0.3(@sveltejs/kit@1.20.2) '@sveltejs/adapter-vercel': specifier: ^1.0.6 - version: 1.0.6(@sveltejs/kit@1.19.0) + version: 1.0.6(@sveltejs/kit@1.20.2) '@sveltejs/kit': - specifier: ^1.19.0 - version: 1.19.0(svelte@3.59.1)(vite@4.3.9) + specifier: ^1.20.2 + version: 1.20.2(svelte@3.59.1)(vite@4.3.9) '@types/cookie': specifier: ^0.5.1 version: 0.5.1 '@types/node': - specifier: ^18.16.16 - version: 18.16.16 + specifier: ^18.16.18 + version: 18.16.18 '@typescript-eslint/eslint-plugin': - specifier: ^5.59.7 - version: 5.59.7(@typescript-eslint/parser@5.59.7)(eslint@8.41.0)(typescript@4.9.5) + specifier: ^5.59.11 + version: 5.59.11(@typescript-eslint/parser@5.59.11)(eslint@8.42.0)(typescript@4.9.5) '@typescript-eslint/parser': - specifier: ^5.59.7 - version: 5.59.7(eslint@8.41.0)(typescript@4.9.5) + specifier: ^5.59.11 + version: 5.59.11(eslint@8.42.0)(typescript@4.9.5) autoprefixer: specifier: ^10.4.14 - version: 10.4.14(postcss@8.4.23) + version: 10.4.14(postcss@8.4.24) eslint: - specifier: ^8.41.0 - version: 8.41.0 + specifier: ^8.42.0 + version: 8.42.0 eslint-config-prettier: specifier: ^8.8.0 - version: 8.8.0(eslint@8.41.0) + version: 8.8.0(eslint@8.42.0) eslint-plugin-svelte: - specifier: ^2.29.0 - version: 2.29.0(eslint@8.41.0)(svelte@3.59.1)(ts-node@10.9.1) + specifier: ^2.30.0 + version: 2.30.0(eslint@8.42.0)(svelte@3.59.1)(ts-node@10.9.1) just-clone: specifier: ^6.2.0 version: 6.2.0 @@ -122,56 +122,56 @@ devDependencies: specifier: ^3.2.0 version: 3.2.0 postcss: - specifier: ^8.4.23 - version: 8.4.23 + specifier: ^8.4.24 + version: 8.4.24 postcss-import: specifier: ^15.1.0 - version: 15.1.0(postcss@8.4.23) + version: 15.1.0(postcss@8.4.24) postcss-load-config: specifier: ^4.0.1 - version: 4.0.1(postcss@8.4.23)(ts-node@10.9.1) + version: 4.0.1(postcss@8.4.24)(ts-node@10.9.1) postcss-preset-env: - specifier: ^8.4.2 - version: 8.4.2(postcss@8.4.23) + specifier: ^8.5.0 + version: 8.5.0(postcss@8.4.24) prettier: specifier: ^2.8.8 version: 2.8.8 prettier-plugin-svelte: - specifier: ^2.10.0 - version: 2.10.0(prettier@2.8.8)(svelte@3.59.1) + specifier: ^2.10.1 + version: 2.10.1(prettier@2.8.8)(svelte@3.59.1) prisma: - specifier: ^4.14.1 - version: 4.14.1 + specifier: ^4.15.0 + version: 4.15.0 sass: - specifier: ^1.62.1 - version: 1.62.1 + specifier: ^1.63.4 + version: 1.63.4 svelte: specifier: ^3.59.1 version: 3.59.1 svelte-check: specifier: ^2.10.3 - version: 2.10.3(postcss-load-config@4.0.1)(postcss@8.4.23)(sass@1.62.1)(svelte@3.59.1) + version: 2.10.3(postcss-load-config@4.0.1)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1) svelte-preprocess: - specifier: ^5.0.3 - version: 5.0.3(postcss-load-config@4.0.1)(postcss@8.4.23)(sass@1.62.1)(svelte@3.59.1)(typescript@4.9.5) + specifier: ^5.0.4 + version: 5.0.4(postcss-load-config@4.0.1)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@4.9.5) sveltekit-superforms: - specifier: ^0.8.7 - version: 0.8.7(@sveltejs/kit@1.19.0)(svelte@3.59.1)(zod@3.21.4) + specifier: ^1.0.0 + version: 1.0.0(@sveltejs/kit@1.20.2)(svelte@3.59.1)(zod@3.21.4) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.16.16)(typescript@4.9.5) + version: 10.9.1(@types/node@18.16.18)(typescript@4.9.5) tslib: - specifier: ^2.5.2 - version: 2.5.2 + specifier: ^2.5.3 + version: 2.5.3 typescript: specifier: ^4.9.5 version: 4.9.5 vite: specifier: ^4.3.9 - version: 4.3.9(@types/node@18.16.16)(sass@1.62.1) + version: 4.3.9(@types/node@18.16.18)(sass@1.63.4) vitest: specifier: ^0.25.3 - version: 0.25.8(sass@1.62.1) + version: 0.25.8(sass@1.63.4) zod: specifier: ^3.21.4 version: 3.21.4 @@ -236,6 +236,17 @@ packages: '@csstools/css-tokenizer': 2.1.1 dev: true + /@csstools/css-calc@1.1.1(@csstools/css-parser-algorithms@2.2.0)(@csstools/css-tokenizer@2.1.1): + resolution: {integrity: sha512-Nh+iLCtjlooTzuR0lpmB8I6hPX/VupcGQ3Z1U2+wgJJ4fa8+cWkub+lCsbZcYPzBGsZLEL8fQAg+Na5dwEFJxg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.1.1 + '@csstools/css-tokenizer': ^2.1.1 + dependencies: + '@csstools/css-parser-algorithms': 2.2.0(@csstools/css-tokenizer@2.1.1) + '@csstools/css-tokenizer': 2.1.1 + dev: true + /@csstools/css-color-parser@1.2.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1): resolution: {integrity: sha512-kt9jhqyL/Ig/Tsf1cY+iygxs2nu3/D532048G9BSeg9YjlpZxbor6I+nvgMNB1A1ppL+i15Mb/yyDHYMQmgBtQ==} engines: {node: ^14 || ^16 || >=18} @@ -249,6 +260,19 @@ packages: '@csstools/css-tokenizer': 2.1.1 dev: true + /@csstools/css-color-parser@1.2.1(@csstools/css-parser-algorithms@2.2.0)(@csstools/css-tokenizer@2.1.1): + resolution: {integrity: sha512-NcmaoJIEycIH0HnzZRrwRcBljPh1AWcXl4CNL8MAD3+Zy8XyIpdTtTMaY/phnLHHIYkyjaoSTdxAecss6+PCcg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.1.1 + '@csstools/css-tokenizer': ^2.1.1 + dependencies: + '@csstools/color-helpers': 2.1.0 + '@csstools/css-calc': 1.1.1(@csstools/css-parser-algorithms@2.2.0)(@csstools/css-tokenizer@2.1.1) + '@csstools/css-parser-algorithms': 2.2.0(@csstools/css-tokenizer@2.1.1) + '@csstools/css-tokenizer': 2.1.1 + dev: true + /@csstools/css-parser-algorithms@2.1.1(@csstools/css-tokenizer@2.1.1): resolution: {integrity: sha512-viRnRh02AgO4mwIQb2xQNJju0i+Fh9roNgmbR5xEuG7J3TGgxjnE95HnBLgsFJOJOksvcfxOUCgODcft6Y07cA==} engines: {node: ^14 || ^16 || >=18} @@ -258,6 +282,15 @@ packages: '@csstools/css-tokenizer': 2.1.1 dev: true + /@csstools/css-parser-algorithms@2.2.0(@csstools/css-tokenizer@2.1.1): + resolution: {integrity: sha512-9BoQ/jSrPq4vv3b9jjLW+PNNv56KlDH5JMx5yASSNrCtvq70FCNZUjXRvbCeR9hYj9ZyhURtqpU/RFIgg6kiOw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-tokenizer': ^2.1.1 + dependencies: + '@csstools/css-tokenizer': 2.1.1 + dev: true + /@csstools/css-tokenizer@2.1.1: resolution: {integrity: sha512-GbrTj2Z8MCTUv+52GE0RbFGM527xuXZ0Xa5g0Z+YN573uveS4G0qi6WNOMyz3yrFM/jaILTTwJ0+umx81EzqfA==} engines: {node: ^14 || ^16 || >=18} @@ -274,18 +307,18 @@ packages: '@csstools/css-tokenizer': 2.1.1 dev: true - /@csstools/postcss-cascade-layers@3.0.1(postcss@8.4.23): + /@csstools/postcss-cascade-layers@3.0.1(postcss@8.4.24): resolution: {integrity: sha512-dD8W98dOYNOH/yX4V4HXOhfCOnvVAg8TtsL+qCGNoKXuq5z2C/d026wGWgySgC8cajXXo/wNezS31Glj5GcqrA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.11) - postcss: 8.4.23 + postcss: 8.4.24 postcss-selector-parser: 6.0.11 dev: true - /@csstools/postcss-color-function@2.2.3(postcss@8.4.23): + /@csstools/postcss-color-function@2.2.3(postcss@8.4.24): resolution: {integrity: sha512-b1ptNkr1UWP96EEHqKBWWaV5m/0hgYGctgA/RVZhONeP1L3T/8hwoqDm9bB23yVCfOgE9U93KI9j06+pEkJTvw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -294,11 +327,11 @@ packages: '@csstools/css-color-parser': 1.2.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) '@csstools/css-tokenizer': 2.1.1 - '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) - postcss: 8.4.23 + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.24) + postcss: 8.4.24 dev: true - /@csstools/postcss-color-mix-function@1.0.3(postcss@8.4.23): + /@csstools/postcss-color-mix-function@1.0.3(postcss@8.4.24): resolution: {integrity: sha512-QGXjGugTluqFZWzVf+S3wCiRiI0ukXlYqCi7OnpDotP/zaVTyl/aqZujLFzTOXy24BoWnu89frGMc79ohY5eog==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -307,21 +340,21 @@ packages: '@csstools/css-color-parser': 1.2.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) '@csstools/css-tokenizer': 2.1.1 - '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) - postcss: 8.4.23 + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.24) + postcss: 8.4.24 dev: true - /@csstools/postcss-font-format-keywords@2.0.2(postcss@8.4.23): + /@csstools/postcss-font-format-keywords@2.0.2(postcss@8.4.24): resolution: {integrity: sha512-iKYZlIs6JsNT7NKyRjyIyezTCHLh4L4BBB3F5Nx7Dc4Z/QmBgX+YJFuUSar8IM6KclGiAUFGomXFdYxAwJydlA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-gradients-interpolation-method@3.0.6(postcss@8.4.23): + /@csstools/postcss-gradients-interpolation-method@3.0.6(postcss@8.4.24): resolution: {integrity: sha512-rBOBTat/YMmB0G8VHwKqDEx+RZ4KCU9j42K8LwS0IpZnyThalZZF7BCSsZ6TFlZhcRZKlZy3LLFI2pLqjNVGGA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -330,11 +363,11 @@ packages: '@csstools/css-color-parser': 1.2.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) '@csstools/css-tokenizer': 2.1.1 - '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) - postcss: 8.4.23 + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.24) + postcss: 8.4.24 dev: true - /@csstools/postcss-hwb-function@2.2.2(postcss@8.4.23): + /@csstools/postcss-hwb-function@2.2.2(postcss@8.4.24): resolution: {integrity: sha512-W5Y5oaJ382HSlbdGfPf60d7dAK6Hqf10+Be1yZbd/TNNrQ/3dDdV1c07YwOXPQ3PZ6dvFMhxbIbn8EC3ki3nEg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -343,61 +376,61 @@ packages: '@csstools/css-color-parser': 1.2.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) '@csstools/css-tokenizer': 2.1.1 - postcss: 8.4.23 + postcss: 8.4.24 dev: true - /@csstools/postcss-ic-unit@2.0.4(postcss@8.4.23): + /@csstools/postcss-ic-unit@2.0.4(postcss@8.4.24): resolution: {integrity: sha512-9W2ZbV7whWnr1Gt4qYgxMWzbevZMOvclUczT5vk4yR6vS53W/njiiUhtm/jh/BKYwQ1W3PECZjgAd2dH4ebJig==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) - postcss: 8.4.23 + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.24) + postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-is-pseudo-class@3.2.1(postcss@8.4.23): + /@csstools/postcss-is-pseudo-class@3.2.1(postcss@8.4.24): resolution: {integrity: sha512-AtANdV34kJl04Al62is3eQRk/BfOfyAvEmRJvbt+nx5REqImLC+2XhuE6skgkcPli1l8ONS67wS+l1sBzySc3Q==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.11) - postcss: 8.4.23 + postcss: 8.4.24 postcss-selector-parser: 6.0.11 dev: true - /@csstools/postcss-logical-float-and-clear@1.0.1(postcss@8.4.23): + /@csstools/postcss-logical-float-and-clear@1.0.1(postcss@8.4.24): resolution: {integrity: sha512-eO9z2sMLddvlfFEW5Fxbjyd03zaO7cJafDurK4rCqyRt9P7aaWwha0LcSzoROlcZrw1NBV2JAp2vMKfPMQO1xw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 dev: true - /@csstools/postcss-logical-resize@1.0.1(postcss@8.4.23): + /@csstools/postcss-logical-resize@1.0.1(postcss@8.4.24): resolution: {integrity: sha512-x1ge74eCSvpBkDDWppl+7FuD2dL68WP+wwP2qvdUcKY17vJksz+XoE1ZRV38uJgS6FNUwC0AxrPW5gy3MxsDHQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-logical-viewport-units@1.0.3(postcss@8.4.23): + /@csstools/postcss-logical-viewport-units@1.0.3(postcss@8.4.24): resolution: {integrity: sha512-6zqcyRg9HSqIHIPMYdt6THWhRmE5/tyHKJQLysn2TeDf/ftq7Em9qwMTx98t2C/7UxIsYS8lOiHHxAVjWn2WUg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: '@csstools/css-tokenizer': 2.1.1 - postcss: 8.4.23 + postcss: 8.4.24 dev: true - /@csstools/postcss-media-minmax@1.0.3(postcss@8.4.23): + /@csstools/postcss-media-minmax@1.0.3(postcss@8.4.24): resolution: {integrity: sha512-os7qe2HV/qBILKCGa/dl5AbpO6c+MZyunFBWPWJBrEVhulCYo13FgEWbhyERFM5FeJghiqYgJxM54oiJASpBnw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -407,10 +440,10 @@ packages: '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) '@csstools/css-tokenizer': 2.1.1 '@csstools/media-query-list-parser': 2.1.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) - postcss: 8.4.23 + postcss: 8.4.24 dev: true - /@csstools/postcss-media-queries-aspect-ratio-number-values@1.0.3(postcss@8.4.23): + /@csstools/postcss-media-queries-aspect-ratio-number-values@1.0.3(postcss@8.4.24): resolution: {integrity: sha512-JHdwBSNZsur/mJXwzuC/gxyekhfSdWJaTiSOhUITk2D8pYRYcjV1MZiCiWupQNfM2Qp2W7w1A/gEU6U/xlpIyA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -419,30 +452,30 @@ packages: '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) '@csstools/css-tokenizer': 2.1.1 '@csstools/media-query-list-parser': 2.1.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) - postcss: 8.4.23 + postcss: 8.4.24 dev: true - /@csstools/postcss-nested-calc@2.0.2(postcss@8.4.23): + /@csstools/postcss-nested-calc@2.0.2(postcss@8.4.24): resolution: {integrity: sha512-jbwrP8rN4e7LNaRcpx3xpMUjhtt34I9OV+zgbcsYAAk6k1+3kODXJBf95/JMYWhu9g1oif7r06QVUgfWsKxCFw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-normalize-display-values@2.0.1(postcss@8.4.23): + /@csstools/postcss-normalize-display-values@2.0.1(postcss@8.4.24): resolution: {integrity: sha512-TQT5g3JQ5gPXC239YuRK8jFceXF9d25ZvBkyjzBGGoW5st5sPXFVQS8OjYb9IJ/K3CdfK4528y483cgS2DJR/w==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-oklab-function@2.2.3(postcss@8.4.23): + /@csstools/postcss-oklab-function@2.2.3(postcss@8.4.24): resolution: {integrity: sha512-AgJ2rWMnLCDcbSMTHSqBYn66DNLBym6JpBpCaqmwZ9huGdljjDRuH3DzOYzkgQ7Pm2K92IYIq54IvFHloUOdvA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -451,44 +484,44 @@ packages: '@csstools/css-color-parser': 1.2.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) '@csstools/css-tokenizer': 2.1.1 - '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) - postcss: 8.4.23 + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.24) + postcss: 8.4.24 dev: true - /@csstools/postcss-progressive-custom-properties@2.3.0(postcss@8.4.23): + /@csstools/postcss-progressive-custom-properties@2.3.0(postcss@8.4.24): resolution: {integrity: sha512-Zd8ojyMlsL919TBExQ1I0CTpBDdyCpH/yOdqatZpuC3sd22K4SwC7+Yez3Q/vmXMWSAl+shjNeFZ7JMyxMjK+Q==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-relative-color-syntax@1.0.1(postcss@8.4.23): - resolution: {integrity: sha512-IskxdQqAkx/pyyOEW3Lhn3nvOu5zlaZ8wQljFl5zc3ABl+gEFf2G42yWK3+wX+J0F4jm7OikOigXo9fAISFEmg==} + /@csstools/postcss-relative-color-syntax@1.0.2(postcss@8.4.24): + resolution: {integrity: sha512-juCoVInkgH2TZPfOhyx6tIal7jW37L/0Tt+Vcl1LoxqQA9sxcg3JWYZ98pl1BonDnki6s/M7nXzFQHWsWMeHgw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/css-color-parser': 1.2.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) - '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) + '@csstools/css-color-parser': 1.2.1(@csstools/css-parser-algorithms@2.2.0)(@csstools/css-tokenizer@2.1.1) + '@csstools/css-parser-algorithms': 2.2.0(@csstools/css-tokenizer@2.1.1) '@csstools/css-tokenizer': 2.1.1 - '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) - postcss: 8.4.23 + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.24) + postcss: 8.4.24 dev: true - /@csstools/postcss-scope-pseudo-class@2.0.2(postcss@8.4.23): + /@csstools/postcss-scope-pseudo-class@2.0.2(postcss@8.4.24): resolution: {integrity: sha512-6Pvo4uexUCXt+Hz5iUtemQAcIuCYnL+ePs1khFR6/xPgC92aQLJ0zGHonWoewiBE+I++4gXK3pr+R1rlOFHe5w==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-selector-parser: 6.0.11 dev: true - /@csstools/postcss-stepped-value-functions@2.1.1(postcss@8.4.23): + /@csstools/postcss-stepped-value-functions@2.1.1(postcss@8.4.24): resolution: {integrity: sha512-YCvdF0GCZK35nhLgs7ippcxDlRVe5QsSht3+EghqTjnYnyl3BbWIN6fYQ1dKWYTJ+7Bgi41TgqQFfJDcp9Xy/w==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -497,21 +530,21 @@ packages: '@csstools/css-calc': 1.1.1(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) '@csstools/css-tokenizer': 2.1.1 - postcss: 8.4.23 + postcss: 8.4.24 dev: true - /@csstools/postcss-text-decoration-shorthand@2.2.4(postcss@8.4.23): + /@csstools/postcss-text-decoration-shorthand@2.2.4(postcss@8.4.24): resolution: {integrity: sha512-zPN56sQkS/7YTCVZhOBVCWf7AiNge8fXDl7JVaHLz2RyT4pnyK2gFjckWRLpO0A2xkm1lCgZ0bepYZTwAVd/5A==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: '@csstools/color-helpers': 2.1.0 - postcss: 8.4.23 + postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-trigonometric-functions@2.1.1(postcss@8.4.23): + /@csstools/postcss-trigonometric-functions@2.1.1(postcss@8.4.24): resolution: {integrity: sha512-XcXmHEFfHXhvYz40FtDlA4Fp4NQln2bWTsCwthd2c+MCnYArUYU3YaMqzR5CrKP3pMoGYTBnp5fMqf1HxItNyw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -520,16 +553,16 @@ packages: '@csstools/css-calc': 1.1.1(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) '@csstools/css-tokenizer': 2.1.1 - postcss: 8.4.23 + postcss: 8.4.24 dev: true - /@csstools/postcss-unset-value@2.0.1(postcss@8.4.23): + /@csstools/postcss-unset-value@2.0.1(postcss@8.4.24): resolution: {integrity: sha512-oJ9Xl29/yU8U7/pnMJRqAZd4YXNCfGEdcP4ywREuqm/xMqcgDNDppYRoCGDt40aaZQIEKBS79LytUDN/DHf0Ew==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 dev: true /@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.11): @@ -541,6 +574,15 @@ packages: postcss-selector-parser: 6.0.11 dev: true + /@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.13): + resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.10 + dependencies: + postcss-selector-parser: 6.0.13 + dev: true + /@esbuild/android-arm64@0.16.8: resolution: {integrity: sha512-TGQM/tdy5EV1KoFHu0+cMrKvPR8UBLGEfwS84PTCJ07KVp21Fr488aFEL2TCamz9CxoF1np36kY6XOSdLncg2Q==} engines: {node: '>=12'} @@ -915,13 +957,13 @@ packages: requiresBuild: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.41.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.42.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.41.0 + eslint: 8.42.0 eslint-visitor-keys: 3.4.1 dev: true @@ -947,8 +989,8 @@ packages: - supports-color dev: true - /@eslint/js@8.41.0: - resolution: {integrity: sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==} + /@eslint/js@8.42.0: + resolution: {integrity: sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -956,8 +998,8 @@ packages: resolution: {integrity: sha512-bxUnRP8xptGRo8YXeY073DSpfK74XpSb0ZyRNpHV9WvLnJ7TwPOjZll8hTMin7zLC6iOp59pDZ8EQDj1gzgAQQ==} dev: false - /@humanwhocodes/config-array@0.11.8: - resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} + /@humanwhocodes/config-array@0.11.10: + resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 @@ -976,8 +1018,8 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@iconify-icons/line-md@1.2.22: - resolution: {integrity: sha512-Z5zMcB/hP6SSfh/HruACSOhJ4A2+qCikaE/vpsJ+HQ1mp9nA1ZnWPdEVeuQmiBbJtXqTayrsQnTEQL+bnGejfA==} + /@iconify-icons/line-md@1.2.23: + resolution: {integrity: sha512-iyoNK/K2U3bQWh309iI43MXmE/nt7v2Se9UUElKFZvfSerYtqgCzJwMSkwMrr7LFhxFfqqQx65Z04g1vkM68Rw==} dependencies: '@iconify/types': 2.0.0 dev: false @@ -1028,7 +1070,7 @@ packages: lodash.set: 4.3.2 dev: false - /@lucia-auth/adapter-mysql@1.1.1(lucia-auth@1.7.0): + /@lucia-auth/adapter-mysql@1.1.1(lucia-auth@1.8.0): resolution: {integrity: sha512-br+/OBDNJ+eRc6RrZnnC20ef+2VEMrXFxNYvsbryPw64ito7vg40STblpENdjJF0o4R10mjWTO43wQ+56jyXLA==} peerDependencies: '@planetscale/database': ^1.0.0 @@ -1040,17 +1082,17 @@ packages: mysql2: optional: true dependencies: - lucia-auth: 1.7.0 + lucia-auth: 1.8.0 dev: false - /@lucia-auth/adapter-prisma@2.0.0(@prisma/client@4.14.1)(lucia-auth@1.7.0): + /@lucia-auth/adapter-prisma@2.0.0(@prisma/client@4.15.0)(lucia-auth@1.8.0): resolution: {integrity: sha512-8qxEcoVNJDbK8zXzyMK/4SHnLTaih0oNjTfp7l4ndRg5WI+eMgP3N0OUGQVaq3C5N0iIfkXxgj/ZGH8ZidwVeQ==} peerDependencies: '@prisma/client': ^4.2.0 lucia-auth: ^1.3.0 dependencies: - '@prisma/client': 4.14.1(prisma@4.14.1) - lucia-auth: 1.7.0 + '@prisma/client': 4.15.0(prisma@4.15.0) + lucia-auth: 1.8.0 dev: false /@lukeed/csprng@1.1.0: @@ -1104,13 +1146,13 @@ packages: fastq: 1.15.0 dev: true - /@playwright/test@1.34.3: - resolution: {integrity: sha512-zPLef6w9P6T/iT6XDYG3mvGOqOyb6eHaV9XtkunYs0+OzxBtrPAAaHotc0X+PJ00WPPnLfFBTl7mf45Mn8DBmw==} - engines: {node: '>=14'} + /@playwright/test@1.35.1: + resolution: {integrity: sha512-b5YoFe6J9exsMYg0pQAobNDR85T1nLumUYgUTtKm4d21iX2L7WqKq9dW8NGJ+2vX0etZd+Y7UeuqsxDXm9+5ZA==} + engines: {node: '>=16'} hasBin: true dependencies: - '@types/node': 18.16.16 - playwright-core: 1.34.3 + '@types/node': 18.16.18 + playwright-core: 1.35.1 optionalDependencies: fsevents: 2.3.2 dev: true @@ -1118,8 +1160,8 @@ packages: /@polka/url@1.0.0-next.21: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} - /@prisma/client@4.14.1(prisma@4.14.1): - resolution: {integrity: sha512-TZIswkeX1ccsHG/eN2kICzg/csXll0osK3EHu1QKd8VJ3XLcXozbNELKkCNfsCUvKJAwPdDtFCzF+O+raIVldw==} + /@prisma/client@4.15.0(prisma@4.15.0): + resolution: {integrity: sha512-xnROvyABcGiwqRNdrObHVZkD9EjkJYHOmVdlKy1yGgI+XOzvMzJ4tRg3dz1pUlsyhKxXGCnjIQjWW+2ur+YXuw==} engines: {node: '>=14.17'} requiresBuild: true peerDependencies: @@ -1128,16 +1170,16 @@ packages: prisma: optional: true dependencies: - '@prisma/engines-version': 4.14.0-67.d9a4c5988f480fa576d43970d5a23641aa77bc9c - prisma: 4.14.1 + '@prisma/engines-version': 4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944 + prisma: 4.15.0 dev: false - /@prisma/engines-version@4.14.0-67.d9a4c5988f480fa576d43970d5a23641aa77bc9c: - resolution: {integrity: sha512-3jum8/YSudeSN0zGW5qkpz+wAN2V/NYCQ+BPjvHYDfWatLWlQkqy99toX0GysDeaUoBIJg1vaz2yKqiA3CFcQw==} + /@prisma/engines-version@4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944: + resolution: {integrity: sha512-sVOig4tjGxxlYaFcXgE71f/rtFhzyYrfyfNFUsxCIEJyVKU9rdOWIlIwQ2NQ7PntvGnn+x0XuFo4OC1jvPJKzg==} dev: false - /@prisma/engines@4.14.1: - resolution: {integrity: sha512-APqFddPVHYmWNKqc+5J5SqrLFfOghKOLZxobmguDUacxOwdEutLsbXPVhNnpFDmuQWQFbXmrTTPoRrrF6B1MWA==} + /@prisma/engines@4.15.0: + resolution: {integrity: sha512-FTaOCGs0LL0OW68juZlGxFtYviZa4xdQj/rQEdat2txw0s3Vu/saAPKjNVXfIgUsGXmQ72HPgNr6935/P8FNAA==} requiresBuild: true /@rgossiaux/svelte-headlessui@1.0.2(svelte@3.59.1): @@ -1164,21 +1206,21 @@ packages: picomatch: 2.3.1 dev: true - /@sveltejs/adapter-auto@1.0.3(@sveltejs/kit@1.19.0): + /@sveltejs/adapter-auto@1.0.3(@sveltejs/kit@1.20.2): resolution: {integrity: sha512-hc7O12YQqvZ1CD4fo1gMJuPzBZvuoG5kwxb2RRoz4fVoB8B2vuPO2cY751Ln0G6T/HMrAf8kCqw6Pg+wbxcstw==} peerDependencies: '@sveltejs/kit': ^1.0.0 dependencies: - '@sveltejs/kit': 1.19.0(svelte@3.59.1)(vite@4.3.9) + '@sveltejs/kit': 1.20.2(svelte@3.59.1)(vite@4.3.9) import-meta-resolve: 2.2.0 dev: true - /@sveltejs/adapter-vercel@1.0.6(@sveltejs/kit@1.19.0): + /@sveltejs/adapter-vercel@1.0.6(@sveltejs/kit@1.20.2): resolution: {integrity: sha512-fo6aaEygPd/6B5Jms4Ff7R4jbADnppuLvKOWBNTGe5MGB7ZRUkl+gxHWMQx2av2knyEZkA6V8y5M6R3ML5yN4g==} peerDependencies: '@sveltejs/kit': ^1.0.0 dependencies: - '@sveltejs/kit': 1.19.0(svelte@3.59.1)(vite@4.3.9) + '@sveltejs/kit': 1.20.2(svelte@3.59.1)(vite@4.3.9) '@vercel/nft': 0.22.6 esbuild: 0.16.8 transitivePeerDependencies: @@ -1186,16 +1228,16 @@ packages: - supports-color dev: true - /@sveltejs/kit@1.19.0(svelte@3.59.1)(vite@4.3.9): - resolution: {integrity: sha512-39fHvYvUQL3bCdV6Ed9MRIESO6ceM/MRNxAloQin+Qs9DfiM53vhUJBWtbwWAvRR/nM6isWnsbContjE/2/JxQ==} + /@sveltejs/kit@1.20.2(svelte@3.59.1)(vite@4.3.9): + resolution: {integrity: sha512-MtR1i+HtmYWcRgtubw1GQqT/+CWXL/z24PegE0xYAdObbhdr7YtEfmoe705D/JZMtMmoPXrmSk4W0MfL5A3lYw==} engines: {node: ^16.14 || >=18} hasBin: true requiresBuild: true peerDependencies: - svelte: ^3.54.0 + svelte: ^3.54.0 || ^4.0.0-next.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 2.1.1(svelte@3.59.1)(vite@4.3.9) + '@sveltejs/vite-plugin-svelte': 2.4.1(svelte@3.59.1)(vite@4.3.9) '@types/cookie': 0.5.1 cookie: 0.5.0 devalue: 4.3.1 @@ -1209,24 +1251,40 @@ packages: svelte: 3.59.1 tiny-glob: 0.2.9 undici: 5.22.0 - vite: 4.3.9(@types/node@18.16.16)(sass@1.62.1) + vite: 4.3.9(@types/node@18.16.18)(sass@1.63.4) transitivePeerDependencies: - supports-color - /@sveltejs/vite-plugin-svelte@2.1.1(svelte@3.59.1)(vite@4.3.9): - resolution: {integrity: sha512-7YeBDt4us0FiIMNsVXxyaP4Hwyn2/v9x3oqStkHU3ZdIc5O22pGwUwH33wUqYo+7Itdmo8zxJ45Qvfm3H7UUjQ==} + /@sveltejs/vite-plugin-svelte-inspector@1.0.2(@sveltejs/vite-plugin-svelte@2.4.1)(svelte@3.59.1)(vite@4.3.9): + resolution: {integrity: sha512-Cy1dUMcYCnDVV/hPLXa43YZJ2jGKVW5rA0xuNL9dlmYhT0yoS1g7+FOFSRlgk0BXKk/Oc7grs+8BVA5Iz2fr8A==} engines: {node: ^14.18.0 || >= 16} peerDependencies: - svelte: ^3.54.0 + '@sveltejs/vite-plugin-svelte': ^2.2.0 + svelte: ^3.54.0 || ^4.0.0-next.0 vite: ^4.0.0 dependencies: + '@sveltejs/vite-plugin-svelte': 2.4.1(svelte@3.59.1)(vite@4.3.9) + debug: 4.3.4 + svelte: 3.59.1 + vite: 4.3.9(@types/node@18.16.18)(sass@1.63.4) + transitivePeerDependencies: + - supports-color + + /@sveltejs/vite-plugin-svelte@2.4.1(svelte@3.59.1)(vite@4.3.9): + resolution: {integrity: sha512-bNNKvoRY89ptY7udeBSCmTdCVwkjmMcZ0j/z9J5MuedT8jPjq0zrknAo/jF1sToAza4NVaAgR9AkZoD9oJJmnA==} + engines: {node: ^14.18.0 || >= 16} + peerDependencies: + svelte: ^3.54.0 || ^4.0.0-next.0 + vite: ^4.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 1.0.2(@sveltejs/vite-plugin-svelte@2.4.1)(svelte@3.59.1)(vite@4.3.9) debug: 4.3.4 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.0 svelte: 3.59.1 - svelte-hmr: 0.15.1(svelte@3.59.1) - vite: 4.3.9(@types/node@18.16.16)(sass@1.62.1) + svelte-hmr: 0.15.2(svelte@3.59.1) + vite: 4.3.9(@types/node@18.16.18)(sass@1.63.4) vitefu: 0.2.4(vite@4.3.9) transitivePeerDependencies: - supports-color @@ -1264,12 +1322,12 @@ packages: resolution: {integrity: sha512-8+PdenCN8UWTfyIHNaJdmk/oPg6zyw7S9kHtT8PdkmHEwfTHSrSWEHpNZJzbuWmZBXQKA/+dLVXjrloX9XixPg==} dev: false - /@types/json-schema@7.0.11: - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + /@types/json-schema@7.0.12: + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} dev: true - /@types/node@18.16.16: - resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} + /@types/node@18.16.18: + resolution: {integrity: sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw==} /@types/pug@2.0.6: resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==} @@ -1278,7 +1336,7 @@ packages: /@types/sass@1.43.1: resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==} dependencies: - '@types/node': 18.16.16 + '@types/node': 18.16.18 dev: true /@types/semver@7.5.0: @@ -1289,8 +1347,8 @@ packages: resolution: {integrity: sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==} dev: false - /@typescript-eslint/eslint-plugin@5.59.7(@typescript-eslint/parser@5.59.7)(eslint@8.41.0)(typescript@4.9.5): - resolution: {integrity: sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==} + /@typescript-eslint/eslint-plugin@5.59.11(@typescript-eslint/parser@5.59.11)(eslint@8.42.0)(typescript@4.9.5): + resolution: {integrity: sha512-XxuOfTkCUiOSyBWIvHlUraLw/JT/6Io1365RO6ZuI88STKMavJZPNMU0lFcUTeQXEhHiv64CbxYxBNoDVSmghg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -1301,12 +1359,12 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.5.0 - '@typescript-eslint/parser': 5.59.7(eslint@8.41.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 5.59.7 - '@typescript-eslint/type-utils': 5.59.7(eslint@8.41.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.59.7(eslint@8.41.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.11(eslint@8.42.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.59.11 + '@typescript-eslint/type-utils': 5.59.11(eslint@8.42.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.59.11(eslint@8.42.0)(typescript@4.9.5) debug: 4.3.4 - eslint: 8.41.0 + eslint: 8.42.0 grapheme-splitter: 1.0.4 ignore: 5.2.1 natural-compare-lite: 1.4.0 @@ -1317,8 +1375,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@5.59.7(eslint@8.41.0)(typescript@4.9.5): - resolution: {integrity: sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==} + /@typescript-eslint/parser@5.59.11(eslint@8.42.0)(typescript@4.9.5): + resolution: {integrity: sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1327,26 +1385,26 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.59.7 - '@typescript-eslint/types': 5.59.7 - '@typescript-eslint/typescript-estree': 5.59.7(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.59.11 + '@typescript-eslint/types': 5.59.11 + '@typescript-eslint/typescript-estree': 5.59.11(typescript@4.9.5) debug: 4.3.4 - eslint: 8.41.0 + eslint: 8.42.0 typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.59.7: - resolution: {integrity: sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==} + /@typescript-eslint/scope-manager@5.59.11: + resolution: {integrity: sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.59.7 - '@typescript-eslint/visitor-keys': 5.59.7 + '@typescript-eslint/types': 5.59.11 + '@typescript-eslint/visitor-keys': 5.59.11 dev: true - /@typescript-eslint/type-utils@5.59.7(eslint@8.41.0)(typescript@4.9.5): - resolution: {integrity: sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==} + /@typescript-eslint/type-utils@5.59.11(eslint@8.42.0)(typescript@4.9.5): + resolution: {integrity: sha512-LZqVY8hMiVRF2a7/swmkStMYSoXMFlzL6sXV6U/2gL5cwnLWQgLEG8tjWPpaE4rMIdZ6VKWwcffPlo1jPfk43g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -1355,23 +1413,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.59.7(typescript@4.9.5) - '@typescript-eslint/utils': 5.59.7(eslint@8.41.0)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 5.59.11(typescript@4.9.5) + '@typescript-eslint/utils': 5.59.11(eslint@8.42.0)(typescript@4.9.5) debug: 4.3.4 - eslint: 8.41.0 + eslint: 8.42.0 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.59.7: - resolution: {integrity: sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==} + /@typescript-eslint/types@5.59.11: + resolution: {integrity: sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.59.7(typescript@4.9.5): - resolution: {integrity: sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==} + /@typescript-eslint/typescript-estree@5.59.11(typescript@4.9.5): + resolution: {integrity: sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -1379,8 +1437,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.59.7 - '@typescript-eslint/visitor-keys': 5.59.7 + '@typescript-eslint/types': 5.59.11 + '@typescript-eslint/visitor-keys': 5.59.11 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -1391,19 +1449,19 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.59.7(eslint@8.41.0)(typescript@4.9.5): - resolution: {integrity: sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==} + /@typescript-eslint/utils@5.59.11(eslint@8.42.0)(typescript@4.9.5): + resolution: {integrity: sha512-didu2rHSOMUdJThLk4aZ1Or8IcO3HzCw/ZvEjTTIfjIrcdd5cvSIwwDy2AOlE7htSNp7QIZ10fLMyRCveesMLg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.41.0) - '@types/json-schema': 7.0.11 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.42.0) + '@types/json-schema': 7.0.12 '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 5.59.7 - '@typescript-eslint/types': 5.59.7 - '@typescript-eslint/typescript-estree': 5.59.7(typescript@4.9.5) - eslint: 8.41.0 + '@typescript-eslint/scope-manager': 5.59.11 + '@typescript-eslint/types': 5.59.11 + '@typescript-eslint/typescript-estree': 5.59.11(typescript@4.9.5) + eslint: 8.42.0 eslint-scope: 5.1.1 semver: 7.3.8 transitivePeerDependencies: @@ -1411,11 +1469,11 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@5.59.7: - resolution: {integrity: sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==} + /@typescript-eslint/visitor-keys@5.59.11: + resolution: {integrity: sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.59.7 + '@typescript-eslint/types': 5.59.11 eslint-visitor-keys: 3.4.1 dev: true @@ -1543,7 +1601,7 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: false - /autoprefixer@10.4.14(postcss@8.4.23): + /autoprefixer@10.4.14(postcss@8.4.24): resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} engines: {node: ^10 || ^12 || >=14} hasBin: true @@ -1555,7 +1613,7 @@ packages: fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.23 + postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true @@ -1742,35 +1800,35 @@ packages: which: 2.0.2 dev: true - /css-blank-pseudo@5.0.2(postcss@8.4.23): + /css-blank-pseudo@5.0.2(postcss@8.4.24): resolution: {integrity: sha512-aCU4AZ7uEcVSUzagTlA9pHciz7aWPKA/YzrEkpdSopJ2pvhIxiQ5sYeMz1/KByxlIo4XBdvMNJAVKMg/GRnhfw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-selector-parser: 6.0.11 dev: true - /css-has-pseudo@5.0.2(postcss@8.4.23): + /css-has-pseudo@5.0.2(postcss@8.4.24): resolution: {integrity: sha512-q+U+4QdwwB7T9VEW/LyO6CFrLAeLqOykC5mDqJXc7aKZAhDbq7BvGT13VGJe+IwBfdN2o3Xdw2kJ5IxwV1Sc9Q==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.11) - postcss: 8.4.23 + postcss: 8.4.24 postcss-selector-parser: 6.0.11 postcss-value-parser: 4.2.0 dev: true - /css-prefers-color-scheme@8.0.2(postcss@8.4.23): + /css-prefers-color-scheme@8.0.2(postcss@8.4.24): resolution: {integrity: sha512-OvFghizHJ45x7nsJJUSYLyQNTzsCU8yWjxAc/nhPQg1pbs18LMoET8N3kOweFDPy0JV0OSXN2iqRFhPBHYOeMA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 dev: true /cssdb@7.6.0: @@ -1931,36 +1989,36 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-prettier@8.8.0(eslint@8.41.0): + /eslint-config-prettier@8.8.0(eslint@8.42.0): resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.41.0 + eslint: 8.42.0 dev: true - /eslint-plugin-svelte@2.29.0(eslint@8.41.0)(svelte@3.59.1)(ts-node@10.9.1): - resolution: {integrity: sha512-ukEC5z9ZXwDtwD8L12ei9doF9P/mQVeiLZiUxExWN9ZNTLNwZgfmEKx+s0tNio0YnYHzKz6qELxFei4SqVbLkQ==} + /eslint-plugin-svelte@2.30.0(eslint@8.42.0)(svelte@3.59.1)(ts-node@10.9.1): + resolution: {integrity: sha512-2/qj0BJsfM0U2j4EjGb7iC/0nbUvXx1Gn78CdtyuXpi/rSomLPCPwnsZsloXMzlt6Xwe8LBlpRvZObSKEHLP5A==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0-0 - svelte: ^3.37.0 + svelte: ^3.37.0 || ^4.0.0-0 peerDependenciesMeta: svelte: optional: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.41.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.42.0) '@jridgewell/sourcemap-codec': 1.4.15 debug: 4.3.4 - eslint: 8.41.0 + eslint: 8.42.0 esutils: 2.0.3 known-css-properties: 0.27.0 - postcss: 8.4.23 - postcss-load-config: 3.1.4(postcss@8.4.23)(ts-node@10.9.1) - postcss-safe-parser: 6.0.0(postcss@8.4.23) + postcss: 8.4.24 + postcss-load-config: 3.1.4(postcss@8.4.24)(ts-node@10.9.1) + postcss-safe-parser: 6.0.0(postcss@8.4.24) svelte: 3.59.1 - svelte-eslint-parser: 0.29.0(svelte@3.59.1) + svelte-eslint-parser: 0.30.0(svelte@3.59.1) transitivePeerDependencies: - supports-color - ts-node @@ -1987,16 +2045,16 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.41.0: - resolution: {integrity: sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==} + /eslint@8.42.0: + resolution: {integrity: sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.41.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.42.0) '@eslint-community/regexpp': 4.5.0 '@eslint/eslintrc': 2.0.3 - '@eslint/js': 8.41.0 - '@humanwhocodes/config-array': 0.11.8 + '@eslint/js': 8.42.0 + '@humanwhocodes/config-array': 0.11.10 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 @@ -2491,8 +2549,8 @@ packages: yallist: 4.0.0 dev: true - /lucia-auth@1.7.0: - resolution: {integrity: sha512-JisZE50dlvVdX726TSxUH0uoI/bwBrgSjO/+Ts/Yrk7TseKtcK8ezDNCAYUCI1XK3PHm37jgobklELpxeAmYLw==} + /lucia-auth@1.8.0: + resolution: {integrity: sha512-zI8gT2AOpxTPIxYzToEdgoht+GOflrduZiHPsOEmg4/2pThOyCW3o3lXh+Uwh20tJ9QoXwQe9/Omn6PlUG6efw==} dev: false /magic-string@0.25.9: @@ -2687,8 +2745,8 @@ packages: wrappy: 1.0.2 dev: true - /open-props@1.5.8: - resolution: {integrity: sha512-pE9oKg+4rDrKNJpHNSP1ensgMz41YW5pPCHExd4P12595gdObMmiO1OhTvXG0t7inRS54GhyZr5jm+28XzapEg==} + /open-props@1.5.9: + resolution: {integrity: sha512-7cY+O+QPiLFcm1a/nnkSK7CHLIW55XBwnnKYS2ajGcWw/xmY990JkgPzYFbohOODyCGM6oJZ+XzRJF7207QqiA==} dev: false /optionator@0.9.1: @@ -2764,64 +2822,64 @@ packages: engines: {node: '>=0.10.0'} dev: true - /playwright-core@1.34.3: - resolution: {integrity: sha512-2pWd6G7OHKemc5x1r1rp8aQcpvDh7goMBZlJv6Co5vCNLVcQJdhxRL09SGaY6HcyHH9aT4tiynZabMofVasBYw==} - engines: {node: '>=14'} + /playwright-core@1.35.1: + resolution: {integrity: sha512-pNXb6CQ7OqmGDRspEjlxE49w+4YtR6a3X6mT1hZXeJHWmsEz7SunmvZeiG/+y1yyMZdHnnn73WKYdtV1er0Xyg==} + engines: {node: '>=16'} hasBin: true dev: true - /postcss-attribute-case-insensitive@6.0.2(postcss@8.4.23): + /postcss-attribute-case-insensitive@6.0.2(postcss@8.4.24): resolution: {integrity: sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-selector-parser: 6.0.11 dev: true - /postcss-clamp@4.1.0(postcss@8.4.23): + /postcss-clamp@4.1.0(postcss@8.4.24): resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} engines: {node: '>=7.6.0'} peerDependencies: postcss: ^8.4.6 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true - /postcss-color-functional-notation@5.1.0(postcss@8.4.23): + /postcss-color-functional-notation@5.1.0(postcss@8.4.24): resolution: {integrity: sha512-w2R4py6zrVE1U7FwNaAc76tNQlG9GLkrBbcFw+VhUjyDDiV28vfZG+l4LyPmpoQpeSJVtu8VgNjE8Jv5SpC7dQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) - postcss: 8.4.23 + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.24) + postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true - /postcss-color-hex-alpha@9.0.2(postcss@8.4.23): + /postcss-color-hex-alpha@9.0.2(postcss@8.4.24): resolution: {integrity: sha512-SfPjgr//VQ/DOCf80STIAsdAs7sbIbxATvVmd+Ec7JvR8onz9pjawhq3BJM3Pie40EE3TyB0P6hft16D33Nlyg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true - /postcss-color-rebeccapurple@8.0.2(postcss@8.4.23): + /postcss-color-rebeccapurple@8.0.2(postcss@8.4.24): resolution: {integrity: sha512-xWf/JmAxVoB5bltHpXk+uGRoGFwu4WDAR7210el+iyvTdqiKpDhtcT8N3edXMoVJY0WHFMrKMUieql/wRNiXkw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true - /postcss-custom-media@9.1.4(postcss@8.4.23): + /postcss-custom-media@9.1.4(postcss@8.4.24): resolution: {integrity: sha512-4A7WEG3iIyKwfpxL5bkuSlHoHHGRTHl0212Z3uvpwJPyVfZJlkZAQNNgVC+oogrJgksDnfKyuuMbG6HafZPW8Q==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -2831,10 +2889,10 @@ packages: '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) '@csstools/css-tokenizer': 2.1.1 '@csstools/media-query-list-parser': 2.1.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) - postcss: 8.4.23 + postcss: 8.4.24 dev: true - /postcss-custom-properties@13.2.0(postcss@8.4.23): + /postcss-custom-properties@13.2.0(postcss@8.4.24): resolution: {integrity: sha512-UYiPqbqmVayyv56y0mtGhvUKZClflwE9cTTmPaqEX8fOVjVwsotqKGYtJXSLxrJLwf9tt7ka+Luyh1ZAOhGHWA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -2843,11 +2901,11 @@ packages: '@csstools/cascade-layer-name-parser': 1.0.2(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) '@csstools/css-tokenizer': 2.1.1 - postcss: 8.4.23 + postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true - /postcss-custom-selectors@7.1.3(postcss@8.4.23): + /postcss-custom-selectors@7.1.3(postcss@8.4.24): resolution: {integrity: sha512-GTVscax6O/8s7agFF0HsOoIyjrnAbLjgCUle8tn+0oDGJuVx7p56U7ClSRoC49poxFuMfu2B4Q8GnxSCOeuFKw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -2856,99 +2914,99 @@ packages: '@csstools/cascade-layer-name-parser': 1.0.2(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) '@csstools/css-tokenizer': 2.1.1 - postcss: 8.4.23 + postcss: 8.4.24 postcss-selector-parser: 6.0.11 dev: true - /postcss-dir-pseudo-class@7.0.2(postcss@8.4.23): + /postcss-dir-pseudo-class@7.0.2(postcss@8.4.24): resolution: {integrity: sha512-cMnslilYxBf9k3qejnovrUONZx1rXeUZJw06fgIUBzABJe3D2LiLL5WAER7Imt3nrkaIgG05XZBztueLEf5P8w==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-selector-parser: 6.0.11 dev: true - /postcss-double-position-gradients@4.0.4(postcss@8.4.23): + /postcss-double-position-gradients@4.0.4(postcss@8.4.24): resolution: {integrity: sha512-nUAbUXURemLXIrl4Xoia2tiu5z/n8sY+BVDZApoeT9BlpByyrp02P/lFCRrRvZ/zrGRE+MOGLhk8o7VcMCtPtQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) - postcss: 8.4.23 + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.24) + postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true - /postcss-focus-visible@8.0.2(postcss@8.4.23): + /postcss-focus-visible@8.0.2(postcss@8.4.24): resolution: {integrity: sha512-f/Vd+EC/GaKElknU59esVcRYr/Y3t1ZAQyL4u2xSOgkDy4bMCmG7VP5cGvj3+BTLNE9ETfEuz2nnt4qkZwTTeA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-selector-parser: 6.0.11 dev: true - /postcss-focus-within@7.0.2(postcss@8.4.23): + /postcss-focus-within@7.0.2(postcss@8.4.24): resolution: {integrity: sha512-AHAJ89UQBcqBvFgQJE9XasGuwMNkKsGj4D/f9Uk60jFmEBHpAL14DrnSk3Rj+SwZTr/WUG+mh+Rvf8fid/346w==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-selector-parser: 6.0.11 dev: true - /postcss-font-variant@5.0.0(postcss@8.4.23): + /postcss-font-variant@5.0.0(postcss@8.4.24): resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 dev: true - /postcss-gap-properties@4.0.1(postcss@8.4.23): + /postcss-gap-properties@4.0.1(postcss@8.4.24): resolution: {integrity: sha512-V5OuQGw4lBumPlwHWk/PRfMKjaq/LTGR4WDTemIMCaMevArVfCCA9wBJiL1VjDAd+rzuCIlkRoRvDsSiAaZ4Fg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 dev: true - /postcss-image-set-function@5.0.2(postcss@8.4.23): + /postcss-image-set-function@5.0.2(postcss@8.4.24): resolution: {integrity: sha512-Sszjwo0ubETX0Fi5MvpYzsONwrsjeabjMoc5YqHvURFItXgIu3HdCjcVuVKGMPGzKRhgaknmdM5uVWInWPJmeg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true - /postcss-import@15.1.0(postcss@8.4.23): + /postcss-import@15.1.0(postcss@8.4.24): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.1 dev: true - /postcss-initial@4.0.1(postcss@8.4.23): + /postcss-initial@4.0.1(postcss@8.4.24): resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 dev: true - /postcss-lab-function@5.2.3(postcss@8.4.23): + /postcss-lab-function@5.2.3(postcss@8.4.24): resolution: {integrity: sha512-fi32AYKzji5/rvgxo5zXHFvAYBw0u0OzELbeCNjEZVLUir18Oj+9RmNphtM8QdLUaUnrfx8zy8vVYLmFLkdmrQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -2957,11 +3015,11 @@ packages: '@csstools/css-color-parser': 1.2.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) '@csstools/css-tokenizer': 2.1.1 - '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) - postcss: 8.4.23 + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.24) + postcss: 8.4.24 dev: true - /postcss-load-config@3.1.4(postcss@8.4.23)(ts-node@10.9.1): + /postcss-load-config@3.1.4(postcss@8.4.24)(ts-node@10.9.1): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -2974,12 +3032,12 @@ packages: optional: true dependencies: lilconfig: 2.0.6 - postcss: 8.4.23 - ts-node: 10.9.1(@types/node@18.16.16)(typescript@4.9.5) + postcss: 8.4.24 + ts-node: 10.9.1(@types/node@18.16.18)(typescript@4.9.5) yaml: 1.10.2 dev: true - /postcss-load-config@4.0.1(postcss@8.4.23)(ts-node@10.9.1): + /postcss-load-config@4.0.1(postcss@8.4.24)(ts-node@10.9.1): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} engines: {node: '>= 14'} peerDependencies: @@ -2992,168 +3050,168 @@ packages: optional: true dependencies: lilconfig: 2.0.6 - postcss: 8.4.23 - ts-node: 10.9.1(@types/node@18.16.16)(typescript@4.9.5) + postcss: 8.4.24 + ts-node: 10.9.1(@types/node@18.16.18)(typescript@4.9.5) yaml: 2.1.3 dev: true - /postcss-logical@6.2.0(postcss@8.4.23): + /postcss-logical@6.2.0(postcss@8.4.24): resolution: {integrity: sha512-aqlfKGaY0nnbgI9jwUikp4gJKBqcH5noU/EdnIVceghaaDPYhZuyJVxlvWNy55tlTG5tunRKCTAX9yljLiFgmw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true - /postcss-nesting@11.2.2(postcss@8.4.23): - resolution: {integrity: sha512-aOTiUniAB1bcPE6GGiynWRa6PZFPhOTAm5q3q5cem6QeSijIHHkWr6gs65ukCZMXeak8yXeZVbBJET3VM+HlhA==} + /postcss-nesting@11.3.0(postcss@8.4.24): + resolution: {integrity: sha512-JlS10AQm/RzyrUGgl5irVkAlZYTJ99mNueUl+Qab+TcHhVedLiylWVkKBhRale+rS9yWIJK48JVzQlq3LcSdeA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.11) - postcss: 8.4.23 - postcss-selector-parser: 6.0.11 + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) + postcss: 8.4.24 + postcss-selector-parser: 6.0.13 dev: true - /postcss-opacity-percentage@2.0.0(postcss@8.4.23): + /postcss-opacity-percentage@2.0.0(postcss@8.4.24): resolution: {integrity: sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.2 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 dev: true - /postcss-overflow-shorthand@4.0.1(postcss@8.4.23): + /postcss-overflow-shorthand@4.0.1(postcss@8.4.24): resolution: {integrity: sha512-HQZ0qi/9iSYHW4w3ogNqVNr2J49DHJAl7r8O2p0Meip38jsdnRPgiDW7r/LlLrrMBMe3KHkvNtAV2UmRVxzLIg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true - /postcss-page-break@3.0.4(postcss@8.4.23): + /postcss-page-break@3.0.4(postcss@8.4.24): resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} peerDependencies: postcss: ^8 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 dev: true - /postcss-place@8.0.1(postcss@8.4.23): + /postcss-place@8.0.1(postcss@8.4.24): resolution: {integrity: sha512-Ow2LedN8sL4pq8ubukO77phSVt4QyCm35ZGCYXKvRFayAwcpgB0sjNJglDoTuRdUL32q/ZC1VkPBo0AOEr4Uiw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true - /postcss-preset-env@8.4.2(postcss@8.4.23): - resolution: {integrity: sha512-Bihxo+FsyVNjsRADiYYnj9Ez0WBSWSSHAe8WvxoMlqrw8H8m6gK9E0MkDd7P6ForoikRIF3I8grGg/pFM6ECRQ==} + /postcss-preset-env@8.5.0(postcss@8.4.24): + resolution: {integrity: sha512-aqAbT5dXqYX5ZvicGKQpaW/eDEZFRfnhV6Hn1Jn2bCKEB9L2MgsTdnIsXsZyFUQflIV2wIs9HTEQgkH5duMCNg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/postcss-cascade-layers': 3.0.1(postcss@8.4.23) - '@csstools/postcss-color-function': 2.2.3(postcss@8.4.23) - '@csstools/postcss-color-mix-function': 1.0.3(postcss@8.4.23) - '@csstools/postcss-font-format-keywords': 2.0.2(postcss@8.4.23) - '@csstools/postcss-gradients-interpolation-method': 3.0.6(postcss@8.4.23) - '@csstools/postcss-hwb-function': 2.2.2(postcss@8.4.23) - '@csstools/postcss-ic-unit': 2.0.4(postcss@8.4.23) - '@csstools/postcss-is-pseudo-class': 3.2.1(postcss@8.4.23) - '@csstools/postcss-logical-float-and-clear': 1.0.1(postcss@8.4.23) - '@csstools/postcss-logical-resize': 1.0.1(postcss@8.4.23) - '@csstools/postcss-logical-viewport-units': 1.0.3(postcss@8.4.23) - '@csstools/postcss-media-minmax': 1.0.3(postcss@8.4.23) - '@csstools/postcss-media-queries-aspect-ratio-number-values': 1.0.3(postcss@8.4.23) - '@csstools/postcss-nested-calc': 2.0.2(postcss@8.4.23) - '@csstools/postcss-normalize-display-values': 2.0.1(postcss@8.4.23) - '@csstools/postcss-oklab-function': 2.2.3(postcss@8.4.23) - '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) - '@csstools/postcss-relative-color-syntax': 1.0.1(postcss@8.4.23) - '@csstools/postcss-scope-pseudo-class': 2.0.2(postcss@8.4.23) - '@csstools/postcss-stepped-value-functions': 2.1.1(postcss@8.4.23) - '@csstools/postcss-text-decoration-shorthand': 2.2.4(postcss@8.4.23) - '@csstools/postcss-trigonometric-functions': 2.1.1(postcss@8.4.23) - '@csstools/postcss-unset-value': 2.0.1(postcss@8.4.23) - autoprefixer: 10.4.14(postcss@8.4.23) + '@csstools/postcss-cascade-layers': 3.0.1(postcss@8.4.24) + '@csstools/postcss-color-function': 2.2.3(postcss@8.4.24) + '@csstools/postcss-color-mix-function': 1.0.3(postcss@8.4.24) + '@csstools/postcss-font-format-keywords': 2.0.2(postcss@8.4.24) + '@csstools/postcss-gradients-interpolation-method': 3.0.6(postcss@8.4.24) + '@csstools/postcss-hwb-function': 2.2.2(postcss@8.4.24) + '@csstools/postcss-ic-unit': 2.0.4(postcss@8.4.24) + '@csstools/postcss-is-pseudo-class': 3.2.1(postcss@8.4.24) + '@csstools/postcss-logical-float-and-clear': 1.0.1(postcss@8.4.24) + '@csstools/postcss-logical-resize': 1.0.1(postcss@8.4.24) + '@csstools/postcss-logical-viewport-units': 1.0.3(postcss@8.4.24) + '@csstools/postcss-media-minmax': 1.0.3(postcss@8.4.24) + '@csstools/postcss-media-queries-aspect-ratio-number-values': 1.0.3(postcss@8.4.24) + '@csstools/postcss-nested-calc': 2.0.2(postcss@8.4.24) + '@csstools/postcss-normalize-display-values': 2.0.1(postcss@8.4.24) + '@csstools/postcss-oklab-function': 2.2.3(postcss@8.4.24) + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.24) + '@csstools/postcss-relative-color-syntax': 1.0.2(postcss@8.4.24) + '@csstools/postcss-scope-pseudo-class': 2.0.2(postcss@8.4.24) + '@csstools/postcss-stepped-value-functions': 2.1.1(postcss@8.4.24) + '@csstools/postcss-text-decoration-shorthand': 2.2.4(postcss@8.4.24) + '@csstools/postcss-trigonometric-functions': 2.1.1(postcss@8.4.24) + '@csstools/postcss-unset-value': 2.0.1(postcss@8.4.24) + autoprefixer: 10.4.14(postcss@8.4.24) browserslist: 4.21.5 - css-blank-pseudo: 5.0.2(postcss@8.4.23) - css-has-pseudo: 5.0.2(postcss@8.4.23) - css-prefers-color-scheme: 8.0.2(postcss@8.4.23) + css-blank-pseudo: 5.0.2(postcss@8.4.24) + css-has-pseudo: 5.0.2(postcss@8.4.24) + css-prefers-color-scheme: 8.0.2(postcss@8.4.24) cssdb: 7.6.0 - postcss: 8.4.23 - postcss-attribute-case-insensitive: 6.0.2(postcss@8.4.23) - postcss-clamp: 4.1.0(postcss@8.4.23) - postcss-color-functional-notation: 5.1.0(postcss@8.4.23) - postcss-color-hex-alpha: 9.0.2(postcss@8.4.23) - postcss-color-rebeccapurple: 8.0.2(postcss@8.4.23) - postcss-custom-media: 9.1.4(postcss@8.4.23) - postcss-custom-properties: 13.2.0(postcss@8.4.23) - postcss-custom-selectors: 7.1.3(postcss@8.4.23) - postcss-dir-pseudo-class: 7.0.2(postcss@8.4.23) - postcss-double-position-gradients: 4.0.4(postcss@8.4.23) - postcss-focus-visible: 8.0.2(postcss@8.4.23) - postcss-focus-within: 7.0.2(postcss@8.4.23) - postcss-font-variant: 5.0.0(postcss@8.4.23) - postcss-gap-properties: 4.0.1(postcss@8.4.23) - postcss-image-set-function: 5.0.2(postcss@8.4.23) - postcss-initial: 4.0.1(postcss@8.4.23) - postcss-lab-function: 5.2.3(postcss@8.4.23) - postcss-logical: 6.2.0(postcss@8.4.23) - postcss-nesting: 11.2.2(postcss@8.4.23) - postcss-opacity-percentage: 2.0.0(postcss@8.4.23) - postcss-overflow-shorthand: 4.0.1(postcss@8.4.23) - postcss-page-break: 3.0.4(postcss@8.4.23) - postcss-place: 8.0.1(postcss@8.4.23) - postcss-pseudo-class-any-link: 8.0.2(postcss@8.4.23) - postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.23) - postcss-selector-not: 7.0.1(postcss@8.4.23) + postcss: 8.4.24 + postcss-attribute-case-insensitive: 6.0.2(postcss@8.4.24) + postcss-clamp: 4.1.0(postcss@8.4.24) + postcss-color-functional-notation: 5.1.0(postcss@8.4.24) + postcss-color-hex-alpha: 9.0.2(postcss@8.4.24) + postcss-color-rebeccapurple: 8.0.2(postcss@8.4.24) + postcss-custom-media: 9.1.4(postcss@8.4.24) + postcss-custom-properties: 13.2.0(postcss@8.4.24) + postcss-custom-selectors: 7.1.3(postcss@8.4.24) + postcss-dir-pseudo-class: 7.0.2(postcss@8.4.24) + postcss-double-position-gradients: 4.0.4(postcss@8.4.24) + postcss-focus-visible: 8.0.2(postcss@8.4.24) + postcss-focus-within: 7.0.2(postcss@8.4.24) + postcss-font-variant: 5.0.0(postcss@8.4.24) + postcss-gap-properties: 4.0.1(postcss@8.4.24) + postcss-image-set-function: 5.0.2(postcss@8.4.24) + postcss-initial: 4.0.1(postcss@8.4.24) + postcss-lab-function: 5.2.3(postcss@8.4.24) + postcss-logical: 6.2.0(postcss@8.4.24) + postcss-nesting: 11.3.0(postcss@8.4.24) + postcss-opacity-percentage: 2.0.0(postcss@8.4.24) + postcss-overflow-shorthand: 4.0.1(postcss@8.4.24) + postcss-page-break: 3.0.4(postcss@8.4.24) + postcss-place: 8.0.1(postcss@8.4.24) + postcss-pseudo-class-any-link: 8.0.2(postcss@8.4.24) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.24) + postcss-selector-not: 7.0.1(postcss@8.4.24) postcss-value-parser: 4.2.0 dev: true - /postcss-pseudo-class-any-link@8.0.2(postcss@8.4.23): + /postcss-pseudo-class-any-link@8.0.2(postcss@8.4.24): resolution: {integrity: sha512-FYTIuRE07jZ2CW8POvctRgArQJ43yxhr5vLmImdKUvjFCkR09kh8pIdlCwdx/jbFm7MiW4QP58L4oOUv3grQYA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-selector-parser: 6.0.11 dev: true - /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.23): + /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.24): resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} peerDependencies: postcss: ^8.0.3 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 dev: true - /postcss-safe-parser@6.0.0(postcss@8.4.23): + /postcss-safe-parser@6.0.0(postcss@8.4.24): resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.3.3 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 dev: true - /postcss-selector-not@7.0.1(postcss@8.4.23): + /postcss-selector-not@7.0.1(postcss@8.4.24): resolution: {integrity: sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-selector-parser: 6.0.11 dev: true @@ -3165,12 +3223,20 @@ packages: util-deprecate: 1.0.2 dev: true + /postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true - /postcss@8.4.23: - resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==} + /postcss@8.4.24: + resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.6 @@ -3182,11 +3248,11 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier-plugin-svelte@2.10.0(prettier@2.8.8)(svelte@3.59.1): - resolution: {integrity: sha512-GXMY6t86thctyCvQq+jqElO+MKdB09BkL3hexyGP3Oi8XLKRFaJP1ud/xlWCZ9ZIa2BxHka32zhHfcuU+XsRQg==} + /prettier-plugin-svelte@2.10.1(prettier@2.8.8)(svelte@3.59.1): + resolution: {integrity: sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==} peerDependencies: prettier: ^1.16.4 || ^2.0.0 - svelte: ^3.2.0 + svelte: ^3.2.0 || ^4.0.0-next.0 dependencies: prettier: 2.8.8 svelte: 3.59.1 @@ -3202,13 +3268,13 @@ packages: resolution: {integrity: sha512-db91Bf3pRGKDPz1lAqLFSJXeW13mulUJxhycysFpfXV5MIK7RgWWK2E5aPAa71s8TCzQUXxF5JOV42/iOs6QkA==} dev: false - /prisma@4.14.1: - resolution: {integrity: sha512-z6hxzTMYqT9SIKlzD08dhzsLUpxjFKKsLpp5/kBDnSqiOjtUyyl/dC5tzxLcOa3jkEHQ8+RpB/fE3w8bgNP51g==} + /prisma@4.15.0: + resolution: {integrity: sha512-iKZZpobPl48gTcSZVawLMQ3lEy6BnXwtoMj7hluoGFYu2kQ6F9LBuBrUyF95zRVnNo8/3KzLXJXJ5TEnLSJFiA==} engines: {node: '>=14.17'} hasBin: true requiresBuild: true dependencies: - '@prisma/engines': 4.14.1 + '@prisma/engines': 4.15.0 /prismjs@1.29.0: resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} @@ -3326,8 +3392,8 @@ packages: rimraf: 2.7.1 dev: true - /sass@1.62.1: - resolution: {integrity: sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==} + /sass@1.63.4: + resolution: {integrity: sha512-Sx/+weUmK+oiIlI+9sdD0wZHsqpbgQg8wSwSnGBjwb5GwqFhYNwwnI+UWZtLjKvKyFlKkatRK235qQ3mokyPoQ==} engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -3481,7 +3547,7 @@ packages: engines: {node: '>= 0.4'} dev: true - /svelte-check@2.10.3(postcss-load-config@4.0.1)(postcss@8.4.23)(sass@1.62.1)(svelte@3.59.1): + /svelte-check@2.10.3(postcss-load-config@4.0.1)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1): resolution: {integrity: sha512-Nt1aWHTOKFReBpmJ1vPug0aGysqPwJh2seM1OvICfM2oeyaA62mOiy5EvkXhltGfhCcIQcq2LoE0l1CwcWPjlw==} hasBin: true peerDependencies: @@ -3494,7 +3560,7 @@ packages: picocolors: 1.0.0 sade: 1.8.1 svelte: 3.59.1 - svelte-preprocess: 4.10.7(postcss-load-config@4.0.1)(postcss@8.4.23)(sass@1.62.1)(svelte@3.59.1)(typescript@4.9.5) + svelte-preprocess: 4.10.7(postcss-load-config@4.0.1)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - '@babel/core' @@ -3509,11 +3575,11 @@ packages: - sugarss dev: true - /svelte-eslint-parser@0.29.0(svelte@3.59.1): - resolution: {integrity: sha512-2uzOw9vRpSO3fo6NkbH7UynfCopQbMz/7LO9KT05YPvkB0uuFvFHex8+Ccv3gSrxHRvKS7FwJmV4H8WNWIzgWQ==} + /svelte-eslint-parser@0.30.0(svelte@3.59.1): + resolution: {integrity: sha512-H0Cn2TKr70DU9p/Gb04CfwtS7eK28MYumrHYPaDNkIFbfwGDLADpbERBn7u8G1Rcm2RMr2/mL6mq0J2e8iKFlA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - svelte: ^3.37.0 + svelte: ^3.37.0 || ^4.0.0-0 peerDependenciesMeta: svelte: optional: true @@ -3524,11 +3590,11 @@ packages: svelte: 3.59.1 dev: true - /svelte-hmr@0.15.1(svelte@3.59.1): - resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==} + /svelte-hmr@0.15.2(svelte@3.59.1): + resolution: {integrity: sha512-q/bAruCvFLwvNbeE1x3n37TYFb3mTBJ6TrCq6p2CoFbSTNhDE9oAtEfpy+wmc9So8AG0Tja+X0/mJzX9tSfvIg==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: - svelte: '>=3.19.0' + svelte: ^3.19.0 || ^4.0.0-next.0 dependencies: svelte: 3.59.1 @@ -3555,7 +3621,7 @@ packages: svelte: 3.59.1 dev: false - /svelte-preprocess@4.10.7(postcss-load-config@4.0.1)(postcss@8.4.23)(sass@1.62.1)(svelte@3.59.1)(typescript@4.9.5): + /svelte-preprocess@4.10.7(postcss-load-config@4.0.1)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@4.9.5): resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==} engines: {node: '>= 9.11.2'} requiresBuild: true @@ -3600,17 +3666,17 @@ packages: '@types/sass': 1.43.1 detect-indent: 6.1.0 magic-string: 0.25.9 - postcss: 8.4.23 - postcss-load-config: 4.0.1(postcss@8.4.23)(ts-node@10.9.1) - sass: 1.62.1 + postcss: 8.4.24 + postcss-load-config: 4.0.1(postcss@8.4.24)(ts-node@10.9.1) + sass: 1.63.4 sorcery: 0.10.0 strip-indent: 3.0.0 svelte: 3.59.1 typescript: 4.9.5 dev: true - /svelte-preprocess@5.0.3(postcss-load-config@4.0.1)(postcss@8.4.23)(sass@1.62.1)(svelte@3.59.1)(typescript@4.9.5): - resolution: {integrity: sha512-GrHF1rusdJVbOZOwgPWtpqmaexkydznKzy5qIC2FabgpFyKN57bjMUUUqPRfbBXK5igiEWn1uO/DXsa2vJ5VHA==} + /svelte-preprocess@5.0.4(postcss-load-config@4.0.1)(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@4.9.5): + resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==} engines: {node: '>= 14.10.0'} requiresBuild: true peerDependencies: @@ -3623,7 +3689,7 @@ packages: sass: ^1.26.8 stylus: ^0.55.0 sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 - svelte: ^3.23.0 + svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' peerDependenciesMeta: '@babel/core': @@ -3650,9 +3716,9 @@ packages: '@types/pug': 2.0.6 detect-indent: 6.1.0 magic-string: 0.27.0 - postcss: 8.4.23 - postcss-load-config: 4.0.1(postcss@8.4.23)(ts-node@10.9.1) - sass: 1.62.1 + postcss: 8.4.24 + postcss-load-config: 4.0.1(postcss@8.4.24)(ts-node@10.9.1) + sass: 1.63.4 sorcery: 0.11.0 strip-indent: 3.0.0 svelte: 3.59.1 @@ -3663,24 +3729,24 @@ packages: resolution: {integrity: sha512-pKj8fEBmqf6mq3/NfrB9SLtcJcUvjYSWyePlfCqN9gujLB25RitWK8PvFzlwim6hD/We35KbPlRteuA6rnPGcQ==} engines: {node: '>= 8'} - /sveltekit-flash-message@0.11.3(@sveltejs/kit@1.19.0)(svelte@3.59.1): + /sveltekit-flash-message@0.11.3(@sveltejs/kit@1.20.2)(svelte@3.59.1): resolution: {integrity: sha512-tMKBobVFLYth0z2Kq9M+pi7Ip2OBhOrzivzx64v9+D2bWRwnZ3pmdWStYfQYxlz5CayozRQsmtipNg1vM+JN9Q==} peerDependencies: '@sveltejs/kit': ^1.0.0 svelte: ^3 dependencies: - '@sveltejs/kit': 1.19.0(svelte@3.59.1)(vite@4.3.9) + '@sveltejs/kit': 1.20.2(svelte@3.59.1)(vite@4.3.9) svelte: 3.59.1 dev: false - /sveltekit-superforms@0.8.7(@sveltejs/kit@1.19.0)(svelte@3.59.1)(zod@3.21.4): - resolution: {integrity: sha512-0aFK31TNz4AM3N7dzL99QUXlVF2O+W/TNVU+M41VVaAKtJKFNasbv8GNLd5wrhN7UWN6kNJnt4MlZBPISkIQ6w==} + /sveltekit-superforms@1.0.0(@sveltejs/kit@1.20.2)(svelte@3.59.1)(zod@3.21.4): + resolution: {integrity: sha512-FihTu/szUCF1fpmqBQUo3tYdAMaNNt7HWaRcLWCIbubG29bpPAEoucWJ8IQpjloE4sGpof1MtgvZpK7k78Bkxg==} peerDependencies: '@sveltejs/kit': 1.x svelte: 3.x zod: 3.x dependencies: - '@sveltejs/kit': 1.19.0(svelte@3.59.1)(vite@4.3.9) + '@sveltejs/kit': 1.20.2(svelte@3.59.1)(vite@4.3.9) svelte: 3.59.1 zod: 3.21.4 dev: true @@ -3745,7 +3811,7 @@ packages: resolution: {integrity: sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==} dev: false - /ts-node@10.9.1(@types/node@18.16.16)(typescript@4.9.5): + /ts-node@10.9.1(@types/node@18.16.18)(typescript@4.9.5): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -3764,7 +3830,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 18.16.16 + '@types/node': 18.16.18 acorn: 8.8.2 acorn-walk: 8.2.0 arg: 4.1.3 @@ -3780,8 +3846,8 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib@2.5.2: - resolution: {integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==} + /tslib@2.5.3: + resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} dev: true /tsutils@3.21.0(typescript@4.9.5): @@ -3847,7 +3913,7 @@ packages: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /vite@4.3.9(@types/node@18.16.16)(sass@1.62.1): + /vite@4.3.9(@types/node@18.16.18)(sass@1.63.4): resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -3872,11 +3938,11 @@ packages: terser: optional: true dependencies: - '@types/node': 18.16.16 + '@types/node': 18.16.18 esbuild: 0.17.18 - postcss: 8.4.23 + postcss: 8.4.24 rollup: 3.21.0 - sass: 1.62.1 + sass: 1.63.4 optionalDependencies: fsevents: 2.3.2 @@ -3888,9 +3954,9 @@ packages: vite: optional: true dependencies: - vite: 4.3.9(@types/node@18.16.16)(sass@1.62.1) + vite: 4.3.9(@types/node@18.16.18)(sass@1.63.4) - /vitest@0.25.8(sass@1.62.1): + /vitest@0.25.8(sass@1.63.4): resolution: {integrity: sha512-X75TApG2wZTJn299E/TIYevr4E9/nBo1sUtZzn0Ci5oK8qnpZAZyhwg0qCeMSakGIWtc6oRwcQFyFfW14aOFWg==} engines: {node: '>=v14.16.0'} hasBin: true @@ -3914,7 +3980,7 @@ packages: dependencies: '@types/chai': 4.3.4 '@types/chai-subset': 1.3.3 - '@types/node': 18.16.16 + '@types/node': 18.16.18 acorn: 8.8.1 acorn-walk: 8.2.0 chai: 4.3.7 @@ -3925,7 +3991,7 @@ packages: tinybench: 2.3.1 tinypool: 0.3.0 tinyspy: 1.0.2 - vite: 4.3.9(@types/node@18.16.16)(sass@1.62.1) + vite: 4.3.9(@types/node@18.16.18)(sass@1.63.4) transitivePeerDependencies: - less - sass diff --git a/postcss.config.cjs b/postcss.config.cjs index 6b00645..2ed1852 100644 --- a/postcss.config.cjs +++ b/postcss.config.cjs @@ -5,7 +5,7 @@ const config = { plugins: [ atImport(), postcssPresetEnv({ - stage: 3, + stage: 2, features: { 'nesting-rules': true, 'custom-media-queries': true, diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 9a0b6c9..96d217b 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -11,20 +11,39 @@ datasource db { relationMode = "prisma" } +model Role { + id String @id @default(cuid()) + name String @unique + userRoles UserRole[] +} + +model UserRole { + id String @id @default(cuid()) + user AuthUser @relation(fields: [userId], references: [id]) + userId String + role Role @relation(fields: [roleId], references: [id]) + roleId String + + @@unique([userId, roleId]) + @@index([userId]) + @@index([roleId]) +} + model AuthUser { id String @id @default(cuid()) username String @unique - email String? @unique + email String? @unique firstName String? lastName String? - role Role @default(USER) + roles UserRole[] verified Boolean @default(false) receiveEmail Boolean @default(false) token String? @unique collection Collection? wishlist Wishlist[] - createdAt DateTime @default(now()) @db.Timestamp(6) - updatedAt DateTime @updatedAt @db.Timestamp(6) + theme String @default("system") + createdAt DateTime @default(now()) @db.Timestamp(6) + updatedAt DateTime @updatedAt @db.Timestamp(6) auth_session AuthSession[] auth_key AuthKey[] @@ -54,11 +73,6 @@ model AuthKey { @@map("auth_key") } -enum Role { - USER - ADMIN -} - model Collection { id String @id @default(cuid()) user_id String @unique diff --git a/prisma/seed.ts b/prisma/seed.ts index 23e393f..11490cf 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -1,31 +1,40 @@ import { PrismaClient } from '@prisma/client'; -import userData from '../src/lib/data.json' assert { type: 'json' }; +// import userData from '../src/lib/data.json' assert { type: 'json' }; const prisma = new PrismaClient(); async function main() { console.log(`Start seeding ...`); - for (const p of userData) { - const user = await prisma.user.create({ - data: { - firstName: p.user.firstName, - lastName: p.user.lastName, - email: p.user.email, - username: p.user.username - } + const existingRoles = await prisma.role.findMany(); + if (existingRoles.length === 0) { + await prisma.role.createMany({ + data: [{ name: 'admin' }, { name: 'user' }] }); - console.log(`Created user with id: ${user.id}`); + console.log('Roles created.'); + } else { + console.log('Roles already exist. No action taken.'); } + + // for (const p of userData) { + // const user = await prisma.user.create({ + // data: { + // firstName: p.user.firstName, + // lastName: p.user.lastName, + // email: p.user.email, + // username: p.user.username + // } + // }); + // console.log(`Created user with id: ${user.id}`); + // } console.log(`Seeding finished.`); } main() - .then(async () => { - await prisma.$disconnect(); - }) .catch(async (e) => { console.error(e); - await prisma.$disconnect(); process.exit(1); + }) + .finally(async () => { + await prisma.$disconnect(); }); diff --git a/src/app.d.ts b/src/app.d.ts index 7759350..59ed3b3 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -9,6 +9,7 @@ declare global { } interface Locals { auth: import('lucia-auth').AuthRequest; + prisma: PrismaClient; user: Lucia.UserAttributes; startTimer: number; error: string; diff --git a/src/db/roles.ts b/src/db/roles.ts new file mode 100644 index 0000000..7a3011b --- /dev/null +++ b/src/db/roles.ts @@ -0,0 +1,32 @@ +import prisma from '$lib/prisma'; + +export async function add_user_to_role(userId: string, roleName: string) { + // Find the role by its name + const role = await prisma.role.findUnique({ + where: { + name: roleName + } + }); + + if (!role) { + throw new Error(`Role with name ${roleName} not found`); + } + + // Create a UserRole entry linking the user and the role + const userRole = await prisma.userRole.create({ + data: { + user: { + connect: { + id: userId + } + }, + role: { + connect: { + id: role.id + } + } + } + }); + + return userRole; +} diff --git a/src/db/users.ts b/src/db/users.ts new file mode 100644 index 0000000..60daed4 --- /dev/null +++ b/src/db/users.ts @@ -0,0 +1,56 @@ +import { auth } from '$lib/server/lucia'; +import prisma from '$lib/prisma'; +import type { AuthUser } from '@prisma/client'; +import { add_user_to_role } from './roles'; + +export function create_user(user: AuthUser) { + return prisma.authUser.create({ + data: { + username: user.username + } + }); +} + +export async function find_or_create_user(user: AuthUser) { + const existing_user = await prisma.authUser.findUnique({ + where: { + username: user.username + } + }); + if (existing_user) { + return existing_user; + } else { + const new_user = await create_user(user); + add_user_to_role(new_user.id, 'user'); + return new_user; + } +} + +export async function find_user_with_roles(user_id: string) { + const user_with_roles = await prisma.authUser.findUnique({ + where: { + id: user_id + }, + include: { + roles: { + select: { + role: { + select: { + name: true + } + } + } + } + } + }); + if (!user_with_roles) { + throw new Error('User not found'); + } + + const user = { + ...user_with_roles, + roles: user_with_roles.roles.map((user_role) => user_role.role.name) + }; + + return user; +} diff --git a/src/hooks.server.ts b/src/hooks.server.ts index 7b82c00..6e0ae89 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -1,8 +1,9 @@ -import { redirect, type Handle } from '@sveltejs/kit'; -import type { HandleServerError } from '@sveltejs/kit'; +import { sequence } from '@sveltejs/kit/hooks'; +import { redirect, type HandleServerError, type Handle } from '@sveltejs/kit'; +import { dev } from '$app/environment'; import { auth } from '$lib/server/lucia'; import log from '$lib/server/log'; -import { dev } from '$app/environment'; +import prisma from '$lib/config/prisma'; export const handleError: HandleServerError = async ({ error, event }) => { const errorId = crypto.randomUUID(); @@ -24,24 +25,28 @@ export const handleError: HandleServerError = async ({ error, event }) => { }; }; -export const handle: Handle = async ({ event, resolve }) => { +// export const prismaClient: Handle = async function ({ event, resolve }) { +// event.locals.prisma = prisma; +// const response = await resolve(event); +// return response; +// }; + +export const authentication: Handle = async function ({ event, resolve }) { const startTimer = Date.now(); event.locals.startTimer = startTimer; event.locals.auth = auth.handleRequest(event); - console.log(JSON.stringify(event)); if (event.locals?.auth) { const { user } = await event.locals.auth.validateUser(); event.locals.user = user; - if (event.route.id?.startsWith('/(protected)')) { - if (!user) throw redirect(302, '/auth/sign-in'); - if (!user.verified) throw redirect(302, '/auth/verify/email'); - } + // if (event.route.id?.startsWith('/(protected)')) { + // if (!user) throw redirect(302, '/auth/sign-in'); + // if (!user.verified) throw redirect(302, '/auth/verify/email'); + // } } const response = await resolve(event); - if (!dev) { - log(response.status, event); - } return response; }; + +export const handle = sequence(authentication); diff --git a/src/lib/components/header/index.svelte b/src/lib/components/header/index.svelte index cd7ff9e..b45e950 100644 --- a/src/lib/components/header/index.svelte +++ b/src/lib/components/header/index.svelte @@ -1,6 +1,6 @@ diff --git a/src/routes/admin/+layout.server.ts b/src/routes/admin/+layout.server.ts new file mode 100644 index 0000000..51ade48 --- /dev/null +++ b/src/routes/admin/+layout.server.ts @@ -0,0 +1,5 @@ +import { redirect } from '@sveltejs/kit'; + +export const load = async function ({ locals }) { + if (!locals?.user?.role?.includes('admin')) throw redirect(302, '/'); +}; diff --git a/src/routes/admin/+layout.svelte b/src/routes/admin/+layout.svelte new file mode 100644 index 0000000..0385342 --- /dev/null +++ b/src/routes/admin/+layout.svelte @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/routes/admin/+page.svelte b/src/routes/admin/+page.svelte new file mode 100644 index 0000000..e69de29 diff --git a/src/routes/auth/signin/+page.server.ts b/src/routes/auth/signin/+page.server.ts index 1065f54..dcb743e 100644 --- a/src/routes/auth/signin/+page.server.ts +++ b/src/routes/auth/signin/+page.server.ts @@ -1,7 +1,9 @@ import { fail, redirect } from '@sveltejs/kit'; import { setError, superValidate } from 'sveltekit-superforms/server'; import { auth } from '$lib/server/lucia'; +import prisma from '$lib/prisma.js'; import { userSchema } from '$lib/config/zod-schemas'; +import { add_user_to_role } from '$db/roles'; const signInSchema = userSchema.pick({ username: true, @@ -13,10 +15,10 @@ export const load = async (event) => { if (session) { throw redirect(302, '/'); } - // const form = await superValidate(event, signInSchema); - // return { - // form - // }; + const form = await superValidate(event, signInSchema); + return { + form + }; }; export const actions = { @@ -30,16 +32,32 @@ export const actions = { }); } - // Adding user to the db try { const key = await auth.useKey('username', form.data.username, form.data.password); const session = await auth.createSession(key.userId); event.locals.auth.setSession(session); + + const user = await prisma.authUser.findUnique({ + where: { + id: session.userId + }, + include: { + roles: { + select: { + role: true + } + } + } + }); + + if (user && user.roles.length === 0) { + add_user_to_role(user.id, 'user'); + } } catch (e) { // TODO: need to return error message to the client console.error(e); form.data.password = ''; - return setError(form, null, 'The username or password is incorrect.'); + return setError(form, '', 'The username or password is incorrect.'); } form.data.username = ''; form.data.password = ''; diff --git a/src/routes/auth/signin/+page.svelte b/src/routes/auth/signin/+page.svelte index 97d1ff8..89f50e3 100644 --- a/src/routes/auth/signin/+page.svelte +++ b/src/routes/auth/signin/+page.svelte @@ -3,6 +3,7 @@ import { userSchema } from '$lib/config/zod-schemas.js'; export let data; + const signInSchema = userSchema.pick({ username: true, password: true }); const { form, errors, enhance, delayed } = superForm(data.form, { taintedMessage: null, diff --git a/src/routes/auth/signup/+page.server.ts b/src/routes/auth/signup/+page.server.ts index 22127c1..17e4c78 100644 --- a/src/routes/auth/signup/+page.server.ts +++ b/src/routes/auth/signup/+page.server.ts @@ -2,6 +2,7 @@ import { fail, redirect } from '@sveltejs/kit'; import { setError, superValidate } from 'sveltekit-superforms/server'; import { auth } from '$lib/server/lucia'; import { userSchema } from '$lib/config/zod-schemas'; +import { add_user_to_role } from '$db/roles'; const signUpSchema = userSchema.pick({ firstName: true, @@ -55,6 +56,7 @@ export const actions = { token } }); + add_user_to_role(user.id, 'user'); console.log('User', user); diff --git a/src/routes/collection/+page.server.ts b/src/routes/collection/+page.server.ts index 741b409..68103c6 100644 --- a/src/routes/collection/+page.server.ts +++ b/src/routes/collection/+page.server.ts @@ -1,14 +1,65 @@ -import type { PageServerLoad } from "../$types"; +// import { redirect } from '@sveltejs/kit'; +// import { superValidate } from 'sveltekit-superforms/server'; +// import { search_schema } from '$lib/zodValidation'; -export const load: PageServerLoad = async ({ fetch, url }) => { - const searchParams = Object.fromEntries(url?.searchParams); - const q = searchParams?.q; - const limit = parseInt(searchParams?.limit) || 10; - const skip = parseInt(searchParams?.skip) || 0; +export const load = async ({ fetch, url, locals }) => { + // const session = await locals.auth.validate(); + // if (!session) { + // throw redirect(302, '/auth/signin'); + // } + + console.log('locals load', locals); + // const searchParams = Object.fromEntries(url?.searchParams); + // const q = searchParams?.q; + // const limit = parseInt(searchParams?.limit) || 10; + // const skip = parseInt(searchParams?.skip) || 0; + + // const searchData = { + // q, + // limit, + // skip + // }; + + // const form = await superValidate(searchData, search_schema); + + try { + // let collection = await locals.prisma.collection.findUnique({ + // where: { + // user_id: session.userId + // } + // include: { + // collectionItems: { + // where: { + // title: { + // contains: q, + // mode: 'insensitive' + // } + // }, + // take: limit, + // skip + // } + // } + // }); + + // console.log('collection', collection); + // if (!collection) { + // collection = await locals.prisma.collection.create({ + // data: { + // user_id: session.userId + // } + // }); + // } + + return { + // form, + // collection + }; + } catch (e) { + console.error(e); + } return { - q, - limit, - skip + // form, + // collection: [] }; }; diff --git a/src/routes/collection/+page.svelte b/src/routes/collection/+page.svelte index 4a5eda7..8cb0e0d 100644 --- a/src/routes/collection/+page.svelte +++ b/src/routes/collection/+page.svelte @@ -1,78 +1,78 @@ @@ -80,9 +80,9 @@

Your Collection

- + -
+ -