From bdfc1dfd3ff07890d0f591d5a178d46a785cd6d6 Mon Sep 17 00:00:00 2001 From: Bradley Shellnut Date: Sun, 13 Aug 2023 22:12:02 -0700 Subject: [PATCH] Updating dependencies, fixing search, fixing wishlist add and remove, fixing game page, not showing buttons on list of games, and adding helper components. --- .vscode/settings.json | 2 +- package.json | 34 +- pnpm-lock.yaml | 457 +++++++++--------- prisma/schema.prisma | 29 +- src/lib/apis/collection.ts | 0 src/lib/apis/wishlist.ts | 0 src/lib/components/AddToList.svelte | 138 ++++++ src/lib/components/WishlistButton.svelte | 0 src/lib/components/game/index.svelte | 99 +--- .../components/search/textSearch/index.svelte | 75 +-- src/lib/zodValidation.ts | 5 + .../(protected)/collection/+page.server.ts | 4 +- src/routes/(protected)/list/+layout.server.ts | 35 ++ src/routes/(protected)/list/+layout.svelte | 41 ++ .../(protected)/list/[id]/+page.server.ts | 126 +++++ src/routes/(protected)/list/[id]/+page.svelte | 24 + .../(protected)/wishlist/+page.server.ts | 161 ++++-- src/routes/(protected)/wishlist/+page.svelte | 138 +----- src/routes/+layout.svelte | 5 +- src/routes/api/wishlist/+server.ts | 33 ++ src/routes/api/wishlist/[id]/items/+server.ts | 0 .../api/wishlist/[id]/search/+server.ts | 74 +++ src/routes/auth/signin/+page.server.ts | 6 +- src/routes/auth/signup/+page.server.ts | 3 +- src/routes/game/[id]/+page.server.ts | 37 +- src/routes/game/[id]/+page.svelte | 88 +--- src/routes/search/+page.server.ts | 121 ++--- svelte.config.js | 1 + 28 files changed, 988 insertions(+), 748 deletions(-) create mode 100644 src/lib/apis/collection.ts create mode 100644 src/lib/apis/wishlist.ts create mode 100644 src/lib/components/AddToList.svelte create mode 100644 src/lib/components/WishlistButton.svelte create mode 100644 src/routes/(protected)/list/+layout.server.ts create mode 100644 src/routes/(protected)/list/+layout.svelte create mode 100644 src/routes/(protected)/list/[id]/+page.server.ts create mode 100644 src/routes/(protected)/list/[id]/+page.svelte create mode 100644 src/routes/api/wishlist/+server.ts create mode 100644 src/routes/api/wishlist/[id]/items/+server.ts create mode 100644 src/routes/api/wishlist/[id]/search/+server.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index f995fd8..1c54db3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,3 @@ { - "cSpell.words": ["iconify", "kickstarter", "msrp"] + "cSpell.words": ["iconify", "kickstarter", "lucide", "msrp"] } diff --git a/package.json b/package.json index 931184a..11fafd7 100644 --- a/package.json +++ b/package.json @@ -22,18 +22,18 @@ "seed": "ts-node --esm prisma/seed.ts" }, "devDependencies": { - "@melt-ui/pp": "^0.0.7", - "@playwright/test": "^1.36.2", + "@melt-ui/pp": "^0.1.2", + "@playwright/test": "^1.37.0", "@sveltejs/adapter-auto": "^1.0.3", "@sveltejs/adapter-vercel": "^1.0.6", - "@sveltejs/kit": "^1.22.4", + "@sveltejs/kit": "^1.22.5", "@types/cookie": "^0.5.1", - "@types/node": "^18.17.1", + "@types/node": "^18.17.5", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", - "autoprefixer": "^10.4.14", - "eslint": "^8.46.0", - "eslint-config-prettier": "^8.9.0", + "autoprefixer": "^10.4.15", + "eslint": "^8.47.0", + "eslint-config-prettier": "^8.10.0", "eslint-plugin-svelte": "^2.32.4", "just-clone": "^6.2.0", "just-debounce-it": "^3.2.0", @@ -44,18 +44,18 @@ "prettier": "^2.8.8", "prettier-plugin-svelte": "^2.10.1", "prisma": "^5.1.1", - "sass": "^1.64.2", - "svelte": "^4.1.2", - "svelte-check": "^3.4.6", + "sass": "^1.65.1", + "svelte": "^4.2.0", + "svelte-check": "^3.5.0", "svelte-preprocess": "^5.0.4", "svelte-sequential-preprocessor": "^2.0.1", - "sveltekit-flash-message": "^2.1.0", - "sveltekit-superforms": "^1.5.0", + "sveltekit-flash-message": "^2.1.3", + "sveltekit-superforms": "^1.5.1", "tailwindcss": "^3.3.3", "ts-node": "^10.9.1", "tslib": "^2.6.1", "typescript": "^5.1.6", - "vite": "^4.4.8", + "vite": "^4.4.9", "vitest": "^0.25.3", "zod": "^3.21.4" }, @@ -70,9 +70,9 @@ "@iconify-icons/line-md": "^1.2.23", "@iconify-icons/mdi": "^1.2.47", "@lucia-auth/adapter-mysql": "^2.0.0", - "@lucia-auth/adapter-prisma": "^3.0.0", + "@lucia-auth/adapter-prisma": "^3.0.1", "@lukeed/uuid": "^2.0.1", - "@melt-ui/svelte": "^0.27.3", + "@melt-ui/svelte": "^0.34.6", "@prisma/client": "5.1.1", "@types/feather-icons": "^4.29.1", "class-variance-authority": "^0.6.1", @@ -82,9 +82,9 @@ "iconify-icon": "^1.0.8", "just-kebab-case": "^4.2.0", "loader": "^2.1.1", - "lucia": "^2.0.0", + "lucia": "^2.3.0", "lucide-svelte": "^0.256.1", - "open-props": "^1.5.10", + "open-props": "^1.5.11", "radix-svelte": "^0.8.0", "svelte-french-toast": "^1.2.0", "svelte-lazy": "^1.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bc1abfe..b67ce0f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,16 +19,16 @@ dependencies: version: 1.2.47 '@lucia-auth/adapter-mysql': specifier: ^2.0.0 - version: 2.0.0(lucia@2.0.0) + version: 2.0.0(lucia@2.3.0) '@lucia-auth/adapter-prisma': - specifier: ^3.0.0 - version: 3.0.0(@prisma/client@5.1.1)(lucia@2.0.0) + specifier: ^3.0.1 + version: 3.0.1(@prisma/client@5.1.1)(lucia@2.3.0) '@lukeed/uuid': specifier: ^2.0.1 version: 2.0.1 '@melt-ui/svelte': - specifier: ^0.27.3 - version: 0.27.3(svelte@4.1.2) + specifier: ^0.34.6 + version: 0.34.6(svelte@4.2.0) '@prisma/client': specifier: 5.1.1 version: 5.1.1(prisma@5.1.1) @@ -57,29 +57,29 @@ dependencies: specifier: ^2.1.1 version: 2.1.1 lucia: - specifier: ^2.0.0 - version: 2.0.0 + specifier: ^2.3.0 + version: 2.3.0 lucide-svelte: specifier: ^0.256.1 - version: 0.256.1(svelte@4.1.2) + version: 0.256.1(svelte@4.2.0) open-props: - specifier: ^1.5.10 - version: 1.5.10 + specifier: ^1.5.11 + version: 1.5.11 radix-svelte: specifier: ^0.8.0 - version: 0.8.0(svelte@4.1.2) + version: 0.8.0(svelte@4.2.0) svelte-french-toast: specifier: ^1.2.0 - version: 1.2.0(svelte@4.1.2) + version: 1.2.0(svelte@4.2.0) svelte-lazy: specifier: ^1.2.1 - version: 1.2.1(svelte@4.1.2) + version: 1.2.1(svelte@4.2.0) svelte-lazy-loader: specifier: ^1.0.0 version: 1.0.0 svelte-legos: specifier: ^0.2.1 - version: 0.2.1(svelte@4.1.2) + version: 0.2.1(svelte@4.2.0) tailwind-merge: specifier: ^1.14.0 version: 1.14.0 @@ -92,44 +92,44 @@ dependencies: devDependencies: '@melt-ui/pp': - specifier: ^0.0.7 - version: 0.0.7(@melt-ui/svelte@0.27.3)(svelte@4.1.2) + specifier: ^0.1.2 + version: 0.1.2(@melt-ui/svelte@0.34.6)(svelte@4.2.0) '@playwright/test': - specifier: ^1.36.2 - version: 1.36.2 + specifier: ^1.37.0 + version: 1.37.0 '@sveltejs/adapter-auto': specifier: ^1.0.3 - version: 1.0.3(@sveltejs/kit@1.22.4) + version: 1.0.3(@sveltejs/kit@1.22.5) '@sveltejs/adapter-vercel': specifier: ^1.0.6 - version: 1.0.6(@sveltejs/kit@1.22.4) + version: 1.0.6(@sveltejs/kit@1.22.5) '@sveltejs/kit': - specifier: ^1.22.4 - version: 1.22.4(svelte@4.1.2)(vite@4.4.8) + specifier: ^1.22.5 + version: 1.22.5(svelte@4.2.0)(vite@4.4.9) '@types/cookie': specifier: ^0.5.1 version: 0.5.1 '@types/node': - specifier: ^18.17.1 - version: 18.17.1 + specifier: ^18.17.5 + version: 18.17.5 '@typescript-eslint/eslint-plugin': specifier: ^5.62.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.46.0)(typescript@5.1.6) + version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.47.0)(typescript@5.1.6) '@typescript-eslint/parser': specifier: ^5.62.0 - version: 5.62.0(eslint@8.46.0)(typescript@5.1.6) + version: 5.62.0(eslint@8.47.0)(typescript@5.1.6) autoprefixer: - specifier: ^10.4.14 - version: 10.4.14(postcss@8.4.27) + specifier: ^10.4.15 + version: 10.4.15(postcss@8.4.27) eslint: - specifier: ^8.46.0 - version: 8.46.0 + specifier: ^8.47.0 + version: 8.47.0 eslint-config-prettier: - specifier: ^8.9.0 - version: 8.9.0(eslint@8.46.0) + specifier: ^8.10.0 + version: 8.10.0(eslint@8.47.0) eslint-plugin-svelte: specifier: ^2.32.4 - version: 2.32.4(eslint@8.46.0)(svelte@4.1.2)(ts-node@10.9.1) + version: 2.32.4(eslint@8.47.0)(svelte@4.2.0)(ts-node@10.9.1) just-clone: specifier: ^6.2.0 version: 6.2.0 @@ -153,37 +153,37 @@ devDependencies: version: 2.8.8 prettier-plugin-svelte: specifier: ^2.10.1 - version: 2.10.1(prettier@2.8.8)(svelte@4.1.2) + version: 2.10.1(prettier@2.8.8)(svelte@4.2.0) prisma: specifier: ^5.1.1 version: 5.1.1 sass: - specifier: ^1.64.2 - version: 1.64.2 + specifier: ^1.65.1 + version: 1.65.1 svelte: - specifier: ^4.1.2 - version: 4.1.2 + specifier: ^4.2.0 + version: 4.2.0 svelte-check: - specifier: ^3.4.6 - version: 3.4.6(postcss-load-config@4.0.1)(postcss@8.4.27)(sass@1.64.2)(svelte@4.1.2) + specifier: ^3.5.0 + version: 3.5.0(postcss-load-config@4.0.1)(postcss@8.4.27)(sass@1.65.1)(svelte@4.2.0) svelte-preprocess: specifier: ^5.0.4 - version: 5.0.4(postcss-load-config@4.0.1)(postcss@8.4.27)(sass@1.64.2)(svelte@4.1.2)(typescript@5.1.6) + version: 5.0.4(postcss-load-config@4.0.1)(postcss@8.4.27)(sass@1.65.1)(svelte@4.2.0)(typescript@5.1.6) svelte-sequential-preprocessor: specifier: ^2.0.1 version: 2.0.1 sveltekit-flash-message: - specifier: ^2.1.0 - version: 2.1.0(@sveltejs/kit@1.22.4)(svelte@4.1.2) + specifier: ^2.1.3 + version: 2.1.3(@sveltejs/kit@1.22.5)(svelte@4.2.0) sveltekit-superforms: - specifier: ^1.5.0 - version: 1.5.0(@sveltejs/kit@1.22.4)(svelte@4.1.2)(zod@3.21.4) + specifier: ^1.5.1 + version: 1.5.1(@sveltejs/kit@1.22.5)(svelte@4.2.0)(zod@3.21.4) tailwindcss: specifier: ^3.3.3 version: 3.3.3(ts-node@10.9.1) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.17.1)(typescript@5.1.6) + version: 10.9.1(@types/node@18.17.5)(typescript@5.1.6) tslib: specifier: ^2.6.1 version: 2.6.1 @@ -191,11 +191,11 @@ devDependencies: specifier: ^5.1.6 version: 5.1.6 vite: - specifier: ^4.4.8 - version: 4.4.8(@types/node@18.17.1)(sass@1.64.2) + specifier: ^4.4.9 + version: 4.4.9(@types/node@18.17.5)(sass@1.65.1) vitest: specifier: ^0.25.3 - version: 0.25.8(sass@1.64.2) + version: 0.25.8(sass@1.65.1) zod: specifier: ^3.21.4 version: 3.21.4 @@ -1021,14 +1021,14 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.46.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.47.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.46.0 - eslint-visitor-keys: 3.4.2 + eslint: 8.47.0 + eslint-visitor-keys: 3.4.3 dev: true /@eslint-community/regexpp@4.5.0: @@ -1041,8 +1041,8 @@ packages: engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.1.1: - resolution: {integrity: sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==} + /@eslint/eslintrc@2.1.2: + resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 @@ -1058,18 +1058,34 @@ packages: - supports-color dev: true - /@eslint/js@8.46.0: - resolution: {integrity: sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==} + /@eslint/js@8.47.0: + resolution: {integrity: sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true /@floating-ui/core@1.3.1: resolution: {integrity: sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g==} + dev: false + + /@floating-ui/core@1.4.1: + resolution: {integrity: sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==} + dependencies: + '@floating-ui/utils': 0.1.1 /@floating-ui/dom@1.4.2: resolution: {integrity: sha512-VKmvHVatWnewmGGy+7Mdy4cTJX71Pli6v/Wjb5RQBuq5wjUYx+Ef+kRThi8qggZqDgD8CogCpqhRoVp3+yQk+g==} dependencies: '@floating-ui/core': 1.3.1 + dev: false + + /@floating-ui/dom@1.5.1: + resolution: {integrity: sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==} + dependencies: + '@floating-ui/core': 1.4.1 + '@floating-ui/utils': 0.1.1 + + /@floating-ui/utils@0.1.1: + resolution: {integrity: sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==} /@fontsource/fira-mono@4.5.10: resolution: {integrity: sha512-bxUnRP8xptGRo8YXeY073DSpfK74XpSb0ZyRNpHV9WvLnJ7TwPOjZll8hTMin7zLC6iOp59pDZ8EQDj1gzgAQQ==} @@ -1152,7 +1168,7 @@ packages: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.15 - /@lucia-auth/adapter-mysql@2.0.0(lucia@2.0.0): + /@lucia-auth/adapter-mysql@2.0.0(lucia@2.3.0): resolution: {integrity: sha512-8a4JZ3VjDyRu/mAop2hEt/jOJO2HXwWIAid6a4wGiR8wgnlyOws9brRc+/wxQHSOlWUlrWemrfDvXLs5mMtkeQ==} peerDependencies: '@planetscale/database': ^1.0.0 @@ -1164,17 +1180,17 @@ packages: mysql2: optional: true dependencies: - lucia: 2.0.0 + lucia: 2.3.0 dev: false - /@lucia-auth/adapter-prisma@3.0.0(@prisma/client@5.1.1)(lucia@2.0.0): - resolution: {integrity: sha512-qrFA5IID4AulINQbLQLQPIXqE9+M3zjmN558VDhrS3Y7Fdn5dyObPbHijUWw7lGYgOrhxDox9UUG8oyZ3+D1MA==} + /@lucia-auth/adapter-prisma@3.0.1(@prisma/client@5.1.1)(lucia@2.3.0): + resolution: {integrity: sha512-JZNl+721M5ApjtNiH+WUYstiC8cffcI/Y9IzKsa0uUhQMIHl2ObCrgO0R3fgHnjWHBjhQoK36g/r/iSJIDppBA==} peerDependencies: '@prisma/client': ^4.2.0 || ^5.0.0 lucia: ^2.0.0 dependencies: '@prisma/client': 5.1.1(prisma@5.1.1) - lucia: 2.0.0 + lucia: 2.3.0 dev: false /@lukeed/csprng@1.1.0: @@ -1207,26 +1223,27 @@ packages: - supports-color dev: true - /@melt-ui/pp@0.0.7(@melt-ui/svelte@0.27.3)(svelte@4.1.2): - resolution: {integrity: sha512-O7gRJ1OXmLjZBR7jB1SV2O4WORn1jk+k06gxej3EXPYAJGcPg+EfKNw54G0/VhhMup1ZrwMsleUgoCOzus/JUw==} + /@melt-ui/pp@0.1.2(@melt-ui/svelte@0.34.6)(svelte@4.2.0): + resolution: {integrity: sha512-GZeqp7UWLNZUC2dJpREnZrWMR88vy27WO7C3cIBz4KW3/CFD19FjNkd3VbSRfcRryrMkdnEs9nu2VUa8/0u58w==} + engines: {pnpm: '>=8.6.3'} peerDependencies: - '@melt-ui/svelte': '>= 0.22.0' + '@melt-ui/svelte': '>= 0.29.0' svelte: ^3.55.0 || ^4.0.0 dependencies: - '@melt-ui/svelte': 0.27.3(svelte@4.1.2) - svelte: 4.1.2 + '@melt-ui/svelte': 0.34.6(svelte@4.2.0) + svelte: 4.2.0 dev: true - /@melt-ui/svelte@0.27.3(svelte@4.1.2): - resolution: {integrity: sha512-NKv0GCmWqhp7cxvpJUW90ouNSmjxgE7GWs75w0cJfBdxS85Eie6DW4rCmkC8MOw1q20wg8fiQzQ03FGig4BbhA==} + /@melt-ui/svelte@0.34.6(svelte@4.2.0): + resolution: {integrity: sha512-uH+s8QL5vxvb9//tULFupGSBhWTh+TvRMbIVVEae8BVlIyQrvYD5G61hoq0CiJ+Oieqgti3wnckLkaz20aYDIg==} peerDependencies: svelte: '>=3 <5' dependencies: - '@floating-ui/core': 1.3.1 - '@floating-ui/dom': 1.4.2 + '@floating-ui/core': 1.4.1 + '@floating-ui/dom': 1.5.1 focus-trap: 7.5.2 nanoid: 4.0.2 - svelte: 4.1.2 + svelte: 4.2.0 /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -1246,13 +1263,13 @@ packages: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - /@playwright/test@1.36.2: - resolution: {integrity: sha512-2rVZeyPRjxfPH6J0oGJqE8YxiM1IBRyM8hyrXYK7eSiAqmbNhxwcLa7dZ7fy9Kj26V7FYia5fh9XJRq4Dqme+g==} + /@playwright/test@1.37.0: + resolution: {integrity: sha512-181WBLk4SRUyH1Q96VZl7BP6HcK0b7lbdeKisn3N/vnjitk+9HbdlFz/L5fey05vxaAhldIDnzo8KUoy8S3mmQ==} engines: {node: '>=16'} hasBin: true dependencies: - '@types/node': 18.17.1 - playwright-core: 1.36.2 + '@types/node': 18.17.5 + playwright-core: 1.37.0 optionalDependencies: fsevents: 2.3.2 dev: true @@ -1291,21 +1308,21 @@ packages: picomatch: 2.3.1 dev: true - /@sveltejs/adapter-auto@1.0.3(@sveltejs/kit@1.22.4): + /@sveltejs/adapter-auto@1.0.3(@sveltejs/kit@1.22.5): resolution: {integrity: sha512-hc7O12YQqvZ1CD4fo1gMJuPzBZvuoG5kwxb2RRoz4fVoB8B2vuPO2cY751Ln0G6T/HMrAf8kCqw6Pg+wbxcstw==} peerDependencies: '@sveltejs/kit': ^1.0.0 dependencies: - '@sveltejs/kit': 1.22.4(svelte@4.1.2)(vite@4.4.8) + '@sveltejs/kit': 1.22.5(svelte@4.2.0)(vite@4.4.9) import-meta-resolve: 2.2.0 dev: true - /@sveltejs/adapter-vercel@1.0.6(@sveltejs/kit@1.22.4): + /@sveltejs/adapter-vercel@1.0.6(@sveltejs/kit@1.22.5): resolution: {integrity: sha512-fo6aaEygPd/6B5Jms4Ff7R4jbADnppuLvKOWBNTGe5MGB7ZRUkl+gxHWMQx2av2knyEZkA6V8y5M6R3ML5yN4g==} peerDependencies: '@sveltejs/kit': ^1.0.0 dependencies: - '@sveltejs/kit': 1.22.4(svelte@4.1.2)(vite@4.4.8) + '@sveltejs/kit': 1.22.5(svelte@4.2.0)(vite@4.4.9) '@vercel/nft': 0.22.6 esbuild: 0.16.8 transitivePeerDependencies: @@ -1313,8 +1330,8 @@ packages: - supports-color dev: true - /@sveltejs/kit@1.22.4(svelte@4.1.2)(vite@4.4.8): - resolution: {integrity: sha512-Opkqw1QXk4Cc25b/heJP2D7mX+OUBFAq4MXKfET58svTTxdeiHFKzmnuRsSF3nmxESqrLjqPAgHpib+knNGzRw==} + /@sveltejs/kit@1.22.5(svelte@4.2.0)(vite@4.4.9): + resolution: {integrity: sha512-LHq+ECucoT6c6/tkrxIQtD8KVNhPFV4QQ+xOKTwBAs/Qdtff8P5gAzsIZiwEaaO6J6sYZoy5RP2VR6m8PSCgLA==} engines: {node: ^16.14 || >=18} hasBin: true requiresBuild: true @@ -1322,7 +1339,7 @@ packages: svelte: ^3.54.0 || ^4.0.0-next.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 2.4.1(svelte@4.1.2)(vite@4.4.8) + '@sveltejs/vite-plugin-svelte': 2.4.1(svelte@4.2.0)(vite@4.4.9) '@types/cookie': 0.5.1 cookie: 0.5.0 devalue: 4.3.1 @@ -1333,14 +1350,14 @@ packages: sade: 1.8.1 set-cookie-parser: 2.6.0 sirv: 2.0.2 - svelte: 4.1.2 - undici: 5.22.0 - vite: 4.4.8(@types/node@18.17.1)(sass@1.64.2) + svelte: 4.2.0 + undici: 5.23.0 + vite: 4.4.9(@types/node@18.17.5)(sass@1.65.1) transitivePeerDependencies: - supports-color dev: true - /@sveltejs/vite-plugin-svelte-inspector@1.0.2(@sveltejs/vite-plugin-svelte@2.4.1)(svelte@4.1.2)(vite@4.4.8): + /@sveltejs/vite-plugin-svelte-inspector@1.0.2(@sveltejs/vite-plugin-svelte@2.4.1)(svelte@4.2.0)(vite@4.4.9): resolution: {integrity: sha512-Cy1dUMcYCnDVV/hPLXa43YZJ2jGKVW5rA0xuNL9dlmYhT0yoS1g7+FOFSRlgk0BXKk/Oc7grs+8BVA5Iz2fr8A==} engines: {node: ^14.18.0 || >= 16} peerDependencies: @@ -1348,30 +1365,30 @@ packages: svelte: ^3.54.0 || ^4.0.0-next.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 2.4.1(svelte@4.1.2)(vite@4.4.8) + '@sveltejs/vite-plugin-svelte': 2.4.1(svelte@4.2.0)(vite@4.4.9) debug: 4.3.4 - svelte: 4.1.2 - vite: 4.4.8(@types/node@18.17.1)(sass@1.64.2) + svelte: 4.2.0 + vite: 4.4.9(@types/node@18.17.5)(sass@1.65.1) transitivePeerDependencies: - supports-color dev: true - /@sveltejs/vite-plugin-svelte@2.4.1(svelte@4.1.2)(vite@4.4.8): + /@sveltejs/vite-plugin-svelte@2.4.1(svelte@4.2.0)(vite@4.4.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@4.1.2)(vite@4.4.8) + '@sveltejs/vite-plugin-svelte-inspector': 1.0.2(@sveltejs/vite-plugin-svelte@2.4.1)(svelte@4.2.0)(vite@4.4.9) debug: 4.3.4 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.0 - svelte: 4.1.2 - svelte-hmr: 0.15.2(svelte@4.1.2) - vite: 4.4.8(@types/node@18.17.1)(sass@1.64.2) - vitefu: 0.2.4(vite@4.4.8) + svelte: 4.2.0 + svelte-hmr: 0.15.2(svelte@4.2.0) + vite: 4.4.9(@types/node@18.17.5)(sass@1.65.1) + vitefu: 0.2.4(vite@4.4.9) transitivePeerDependencies: - supports-color dev: true @@ -1413,8 +1430,8 @@ packages: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} dev: true - /@types/node@18.17.1: - resolution: {integrity: sha512-xlR1jahfizdplZYRU59JlUx9uzF1ARa8jbhM11ccpCJya8kvos5jwdm2ZAgxSCwOl0fq21svP18EVwPBXMQudw==} + /@types/node@18.17.5: + resolution: {integrity: sha512-xNbS75FxH6P4UXTPUJp/zNPq6/xsfdJKussCWNOnz4aULWIRwMgP1LgaB5RiBnMX1DPCYenuqGZfnIAx5mbFLA==} /@types/pug@2.0.6: resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==} @@ -1428,7 +1445,7 @@ packages: resolution: {integrity: sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==} dev: false - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.46.0)(typescript@5.1.6): + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.47.0)(typescript@5.1.6): resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1440,12 +1457,12 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.5.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/parser': 5.62.0(eslint@8.47.0)(typescript@5.1.6) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.46.0)(typescript@5.1.6) - '@typescript-eslint/utils': 5.62.0(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/type-utils': 5.62.0(eslint@8.47.0)(typescript@5.1.6) + '@typescript-eslint/utils': 5.62.0(eslint@8.47.0)(typescript@5.1.6) debug: 4.3.4 - eslint: 8.46.0 + eslint: 8.47.0 graphemer: 1.4.0 ignore: 5.2.1 natural-compare-lite: 1.4.0 @@ -1456,7 +1473,7 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.46.0)(typescript@5.1.6): + /@typescript-eslint/parser@5.62.0(eslint@8.47.0)(typescript@5.1.6): resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1470,7 +1487,7 @@ packages: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6) debug: 4.3.4 - eslint: 8.46.0 + eslint: 8.47.0 typescript: 5.1.6 transitivePeerDependencies: - supports-color @@ -1484,7 +1501,7 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.46.0)(typescript@5.1.6): + /@typescript-eslint/type-utils@5.62.0(eslint@8.47.0)(typescript@5.1.6): resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1495,9 +1512,9 @@ packages: optional: true dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6) - '@typescript-eslint/utils': 5.62.0(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/utils': 5.62.0(eslint@8.47.0)(typescript@5.1.6) debug: 4.3.4 - eslint: 8.46.0 + eslint: 8.47.0 tsutils: 3.21.0(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: @@ -1530,19 +1547,19 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.46.0)(typescript@5.1.6): + /@typescript-eslint/utils@5.62.0(eslint@8.47.0)(typescript@5.1.6): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} 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.46.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.47.0) '@types/json-schema': 7.0.12 '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6) - eslint: 8.46.0 + eslint: 8.47.0 eslint-scope: 5.1.1 semver: 7.3.8 transitivePeerDependencies: @@ -1555,7 +1572,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.2 + eslint-visitor-keys: 3.4.3 dev: true /@vercel/nft@0.22.6: @@ -1701,15 +1718,15 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: false - /autoprefixer@10.4.14(postcss@8.4.27): - resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} + /autoprefixer@10.4.15(postcss@8.4.27): + resolution: {integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.21.5 - caniuse-lite: 1.0.30001481 + browserslist: 4.21.10 + caniuse-lite: 1.0.30001520 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -1768,15 +1785,15 @@ packages: dependencies: fill-range: 7.0.1 - /browserslist@4.21.5: - resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} + /browserslist@4.21.10: + resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001481 - electron-to-chromium: 1.4.372 - node-releases: 2.0.10 - update-browserslist-db: 1.0.11(browserslist@4.21.5) + caniuse-lite: 1.0.30001520 + electron-to-chromium: 1.4.490 + node-releases: 2.0.13 + update-browserslist-db: 1.0.11(browserslist@4.21.10) dev: true /browserslist@4.21.9: @@ -1784,9 +1801,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001506 - electron-to-chromium: 1.4.438 - node-releases: 2.0.12 + caniuse-lite: 1.0.30001520 + electron-to-chromium: 1.4.490 + node-releases: 2.0.13 update-browserslist-db: 1.0.11(browserslist@4.21.9) dev: true @@ -1810,12 +1827,8 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - /caniuse-lite@1.0.30001481: - resolution: {integrity: sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==} - dev: true - - /caniuse-lite@1.0.30001506: - resolution: {integrity: sha512-6XNEcpygZMCKaufIcgpQNZNf00GEqc7VQON+9Rd0K1bMYo8xhMZRAo5zpbnbMNizi4YNgIDAFrdykWsvY3H4Hw==} + /caniuse-lite@1.0.30001520: + resolution: {integrity: sha512-tahF5O9EiiTzwTUqAeFjIZbn4Dnqxzz7ktrgGlMYNLH43Ul26IgTMH/zvL3DG0lZxBYnlT04axvInszUsZULdA==} dev: true /canvas-confetti@1.6.0: @@ -2071,12 +2084,8 @@ packages: esutils: 2.0.3 dev: true - /electron-to-chromium@1.4.372: - resolution: {integrity: sha512-MrlFq/j+TYHOjeWsWGYfzevc25HNeJdsF6qaLFrqBTRWZQtWkb1myq/Q2veLWezVaa5OcSZ99CFwTT4aF4Mung==} - dev: true - - /electron-to-chromium@1.4.438: - resolution: {integrity: sha512-x94U0FhphEsHsOloCvlsujHCvoir0ZQ73ZAs/QN4PLx98uNvyEU79F75rq1db75Bx/atvuh7KPeuxelh+xfYJw==} + /electron-to-chromium@1.4.490: + resolution: {integrity: sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A==} dev: true /emoji-regex@8.0.0: @@ -2157,16 +2166,16 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-prettier@8.9.0(eslint@8.46.0): - resolution: {integrity: sha512-+sbni7NfVXnOpnRadUA8S28AUlsZt9GjgFvABIRL9Hkn8KqNzOp+7Lw4QWtrwn20KzU3wqu1QoOj2m+7rKRqkA==} + /eslint-config-prettier@8.10.0(eslint@8.47.0): + resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.46.0 + eslint: 8.47.0 dev: true - /eslint-plugin-svelte@2.32.4(eslint@8.46.0)(svelte@4.1.2)(ts-node@10.9.1): + /eslint-plugin-svelte@2.32.4(eslint@8.47.0)(svelte@4.2.0)(ts-node@10.9.1): resolution: {integrity: sha512-VJ12i2Iogug1jvhwxSlognnfGj76P5gks/V4pUD4SCSVQOp14u47MNP0zAG8AQR3LT0Fi1iUvIFnY4l9z5Rwbg==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: @@ -2176,10 +2185,10 @@ packages: svelte: optional: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.47.0) '@jridgewell/sourcemap-codec': 1.4.15 debug: 4.3.4 - eslint: 8.46.0 + eslint: 8.47.0 esutils: 2.0.3 known-css-properties: 0.28.0 postcss: 8.4.27 @@ -2187,8 +2196,8 @@ packages: postcss-safe-parser: 6.0.0(postcss@8.4.27) postcss-selector-parser: 6.0.13 semver: 7.5.3 - svelte: 4.1.2 - svelte-eslint-parser: 0.32.2(svelte@4.1.2) + svelte: 4.2.0 + svelte-eslint-parser: 0.32.2(svelte@4.2.0) transitivePeerDependencies: - supports-color - ts-node @@ -2210,20 +2219,20 @@ packages: estraverse: 5.3.0 dev: true - /eslint-visitor-keys@3.4.2: - resolution: {integrity: sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==} + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.46.0: - resolution: {integrity: sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==} + /eslint@8.47.0: + resolution: {integrity: sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.47.0) '@eslint-community/regexpp': 4.6.2 - '@eslint/eslintrc': 2.1.1 - '@eslint/js': 8.46.0 + '@eslint/eslintrc': 2.1.2 + '@eslint/js': 8.47.0 '@humanwhocodes/config-array': 0.11.10 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -2234,7 +2243,7 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.2 + eslint-visitor-keys: 3.4.3 espree: 9.6.1 esquery: 1.5.0 esutils: 2.0.3 @@ -2271,7 +2280,7 @@ packages: dependencies: acorn: 8.10.0 acorn-jsx: 5.3.2(acorn@8.10.0) - eslint-visitor-keys: 3.4.2 + eslint-visitor-keys: 3.4.3 dev: true /esquery@1.5.0: @@ -2751,16 +2760,16 @@ packages: yallist: 4.0.0 dev: true - /lucia@2.0.0: - resolution: {integrity: sha512-WRBMoZIgTHH6y2bAEHZWgWcMH6tDsQ+wf45juUgmn3ycjipn/e6OGpWki4XSjEuRm50WXghH+2EF9LCjCHUsUw==} + /lucia@2.3.0: + resolution: {integrity: sha512-FS+WjvTh8xK/N2I5PBQ9xhF5+OJZo1g2w931ZlaJoXSRxsM1WTkMRAyxFAE3Azoe9vHqlKxRsw11ZiSv+yc3rA==} dev: false - /lucide-svelte@0.256.1(svelte@4.1.2): + /lucide-svelte@0.256.1(svelte@4.2.0): resolution: {integrity: sha512-Fk8kQ5Xal9lxvX7T4fkyo592so3zzBtwfAfCOtptEh68jOKery/DyMlhY5m/Bh0M0pvb87soakYchighTBzPLQ==} peerDependencies: svelte: '>=3 <5' dependencies: - svelte: 4.1.2 + svelte: 4.2.0 dev: false /magic-string@0.27.0: @@ -2922,12 +2931,8 @@ packages: hasBin: true dev: true - /node-releases@2.0.10: - resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} - dev: true - - /node-releases@2.0.12: - resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} dev: true /nopt@5.0.0: @@ -2969,8 +2974,8 @@ packages: dependencies: wrappy: 1.0.2 - /open-props@1.5.10: - resolution: {integrity: sha512-iE+B7Zo0ytgeUNI38uHiBrxF5Nnv3uX8AzogBXzf7wqeNyG6oqQEEBs1gnAZdRF+h7IRO0zOGM5d9/huiNFR+w==} + /open-props@1.5.11: + resolution: {integrity: sha512-wwfcnYPVKmTruKcZL7vx3o7/PA2qfL6W2/MZCyebUhzLWHSDd/K5iFRqwrSh/RbNfITYCfNdUTbexHDJpFq+2A==} dev: false /optionator@0.9.3: @@ -3054,8 +3059,8 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - /playwright-core@1.36.2: - resolution: {integrity: sha512-sQYZt31dwkqxOrP7xy2ggDfEzUxM1lodjhsQ3NMMv5uGTRDsLxU0e4xf4wwMkF2gplIxf17QMBCodSFgm6bFVQ==} + /playwright-core@1.37.0: + resolution: {integrity: sha512-1c46jhTH/myQw6sesrcuHVtLoSNfJv8Pfy9t3rs6subY7kARv0HRw5PpyfPYPpPtQvBOmgbE6K+qgYUpj81LAA==} engines: {node: '>=16'} hasBin: true dev: true @@ -3273,7 +3278,7 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.27 - ts-node: 10.9.1(@types/node@18.17.1)(typescript@5.1.6) + ts-node: 10.9.1(@types/node@18.17.5)(typescript@5.1.6) yaml: 1.10.2 dev: true @@ -3291,7 +3296,7 @@ packages: dependencies: lilconfig: 2.0.6 postcss: 8.4.27 - ts-node: 10.9.1(@types/node@18.17.1)(typescript@5.1.6) + ts-node: 10.9.1(@types/node@18.17.5)(typescript@5.1.6) yaml: 2.1.3 /postcss-logical@6.2.0(postcss@8.4.27): @@ -3390,7 +3395,7 @@ packages: '@csstools/postcss-text-decoration-shorthand': 2.2.4(postcss@8.4.27) '@csstools/postcss-trigonometric-functions': 2.1.1(postcss@8.4.27) '@csstools/postcss-unset-value': 2.0.1(postcss@8.4.27) - autoprefixer: 10.4.14(postcss@8.4.27) + autoprefixer: 10.4.15(postcss@8.4.27) browserslist: 4.21.9 css-blank-pseudo: 5.0.2(postcss@8.4.27) css-has-pseudo: 5.0.2(postcss@8.4.27) @@ -3495,14 +3500,14 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier-plugin-svelte@2.10.1(prettier@2.8.8)(svelte@4.1.2): + /prettier-plugin-svelte@2.10.1(prettier@2.8.8)(svelte@4.2.0): resolution: {integrity: sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==} peerDependencies: prettier: ^1.16.4 || ^2.0.0 svelte: ^3.2.0 || ^4.0.0-next.0 dependencies: prettier: 2.8.8 - svelte: 4.1.2 + svelte: 4.2.0 dev: true /prettier@2.8.8: @@ -3540,14 +3545,14 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - /radix-svelte@0.8.0(svelte@4.1.2): + /radix-svelte@0.8.0(svelte@4.2.0): resolution: {integrity: sha512-VweSd96EiLCml9wA6krPQFxyZfci+A7phAPl9J6QH4nivKroFV2EUSGo9wAnqM2u04nI2mxGKa+wfMhNy84GVg==} peerDependencies: svelte: ^3.58.0 dependencies: '@floating-ui/core': 1.3.1 '@floating-ui/dom': 1.4.2 - svelte: 4.1.2 + svelte: 4.2.0 dev: false /read-cache@1.0.0: @@ -3617,8 +3622,8 @@ packages: glob: 7.2.3 dev: true - /rollup@3.26.2: - resolution: {integrity: sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==} + /rollup@3.27.2: + resolution: {integrity: sha512-YGwmHf7h2oUHkVBT248x0yt6vZkYQ3/rvE5iQuVBh3WO8GcJ6BNeOkpoX1yMHIiBm18EMLjBPIoUDkhgnyxGOQ==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -3654,8 +3659,8 @@ packages: rimraf: 2.7.1 dev: true - /sass@1.64.2: - resolution: {integrity: sha512-TnDlfc+CRnUAgLO9D8cQLFu/GIjJIzJCGkE7o4ekIGQOH7T3GetiRR/PsTWJUHhkzcSPrARkPI+gNWn5alCzDg==} + /sass@1.65.1: + resolution: {integrity: sha512-9DINwtHmA41SEd36eVPQ9BJKpn7eKDQmUHmpI0y5Zv2Rcorrh0zS+cFrt050hdNbmmCNKTW3hV5mWfuegNRsEA==} engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -3818,8 +3823,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /svelte-check@3.4.6(postcss-load-config@4.0.1)(postcss@8.4.27)(sass@1.64.2)(svelte@4.1.2): - resolution: {integrity: sha512-OBlY8866Zh1zHQTkBMPS6psPi7o2umTUyj6JWm4SacnIHXpWFm658pG32m3dKvKFL49V4ntAkfFHKo4ztH07og==} + /svelte-check@3.5.0(postcss-load-config@4.0.1)(postcss@8.4.27)(sass@1.65.1)(svelte@4.2.0): + resolution: {integrity: sha512-KHujbn4k17xKYLmtCwv0sKKM7uiHTYcQvXnvrCcNU6a7hcszh99zFTIoiu/Sp/ewAw5aJmillJ1Cs8gKLmcX4A==} hasBin: true peerDependencies: svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 @@ -3830,8 +3835,8 @@ packages: import-fresh: 3.3.0 picocolors: 1.0.0 sade: 1.8.1 - svelte: 4.1.2 - svelte-preprocess: 5.0.4(postcss-load-config@4.0.1)(postcss@8.4.27)(sass@1.64.2)(svelte@4.1.2)(typescript@5.1.6) + svelte: 4.2.0 + svelte-preprocess: 5.0.4(postcss-load-config@4.0.1)(postcss@8.4.27)(sass@1.65.1)(svelte@4.2.0)(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: - '@babel/core' @@ -3845,7 +3850,7 @@ packages: - sugarss dev: true - /svelte-eslint-parser@0.32.2(svelte@4.1.2): + /svelte-eslint-parser@0.32.2(svelte@4.2.0): resolution: {integrity: sha512-Ok9D3A4b23iLQsONrjqtXtYDu5ZZ/826Blaw2LeFZVTg1pwofKDG4mz3/GYTax8fQ0plRGHI6j+d9VQYy5Lo/A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3855,44 +3860,44 @@ packages: optional: true dependencies: eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.2 + eslint-visitor-keys: 3.4.3 espree: 9.6.1 postcss: 8.4.27 postcss-scss: 4.0.6(postcss@8.4.27) - svelte: 4.1.2 + svelte: 4.2.0 dev: true - /svelte-french-toast@1.2.0(svelte@4.1.2): + /svelte-french-toast@1.2.0(svelte@4.2.0): resolution: {integrity: sha512-5PW+6RFX3xQPbR44CngYAP1Sd9oCq9P2FOox4FZffzJuZI2mHOB7q5gJBVnOiLF5y3moVGZ7u2bYt7+yPAgcEQ==} peerDependencies: svelte: ^3.57.0 || ^4.0.0 dependencies: - svelte: 4.1.2 - svelte-writable-derived: 3.1.0(svelte@4.1.2) + svelte: 4.2.0 + svelte-writable-derived: 3.1.0(svelte@4.2.0) dev: false - /svelte-hmr@0.15.2(svelte@4.1.2): + /svelte-hmr@0.15.2(svelte@4.2.0): resolution: {integrity: sha512-q/bAruCvFLwvNbeE1x3n37TYFb3mTBJ6TrCq6p2CoFbSTNhDE9oAtEfpy+wmc9So8AG0Tja+X0/mJzX9tSfvIg==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: svelte: ^3.19.0 || ^4.0.0-next.0 dependencies: - svelte: 4.1.2 + svelte: 4.2.0 dev: true /svelte-lazy-loader@1.0.0: resolution: {integrity: sha512-AZD6R60vksyojn21FgXLglmBiBB9K5Dkdu0hdGrLbCaRCYT68IsWkZfRUqKhMx1IfzqWcZQ8X9y/f+Ih0oNQkQ==} dev: false - /svelte-lazy@1.2.1(svelte@4.1.2): + /svelte-lazy@1.2.1(svelte@4.2.0): resolution: {integrity: sha512-8L+GrU5p0ia/nLDeGDMTC+DtmbXlFcoaTPoSf8jIy1NoKicqSJXz5tjiu6GUsD7ra0RjgIvhQiLcdZYR9VECeA==} peerDependencies: svelte: 3.x dependencies: - svelte: 4.1.2 + svelte: 4.2.0 dev: false - /svelte-legos@0.2.1(svelte@4.1.2): + /svelte-legos@0.2.1(svelte@4.2.0): resolution: {integrity: sha512-M7IncWP2e8FaHzQN1DSzxLSoq/6aQYWZ93REZam9bYlvLEjdPGWLAYdpPNnnZtXlHco+o3zrgYTdwsyyS9beUQ==} peerDependencies: svelte: ^3.54.0 @@ -3900,10 +3905,10 @@ packages: canvas-confetti: 1.6.0 prism-svelte: 0.5.0 prismjs: 1.29.0 - svelte: 4.1.2 + svelte: 4.2.0 dev: false - /svelte-preprocess@5.0.4(postcss-load-config@4.0.1)(postcss@8.4.27)(sass@1.64.2)(svelte@4.1.2)(typescript@5.1.6): + /svelte-preprocess@5.0.4(postcss-load-config@4.0.1)(postcss@8.4.27)(sass@1.65.1)(svelte@4.2.0)(typescript@5.1.6): resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==} engines: {node: '>= 14.10.0'} requiresBuild: true @@ -3946,10 +3951,10 @@ packages: magic-string: 0.27.0 postcss: 8.4.27 postcss-load-config: 4.0.1(postcss@8.4.27)(ts-node@10.9.1) - sass: 1.64.2 + sass: 1.65.1 sorcery: 0.11.0 strip-indent: 3.0.0 - svelte: 4.1.2 + svelte: 4.2.0 typescript: 5.1.6 dev: true @@ -3957,20 +3962,20 @@ packages: resolution: {integrity: sha512-N5JqlBni6BzElxmuFrOPxOJnjsxh1cFDACLEVKs8OHBcx8ZNRO1p5SxuQex1m3qbLzAC8G99EHeWcxGkjyKjLQ==} engines: {node: '>=16'} dependencies: - svelte: 4.1.2 + svelte: 4.2.0 tslib: 2.6.1 dev: true - /svelte-writable-derived@3.1.0(svelte@4.1.2): + /svelte-writable-derived@3.1.0(svelte@4.2.0): resolution: {integrity: sha512-cTvaVFNIJ036vSDIyPxJYivKC7ZLtcFOPm1Iq6qWBDo1fOHzfk6ZSbwaKrxhjgy52Rbl5IHzRcWgos6Zqn9/rg==} peerDependencies: svelte: ^3.2.1 || ^4.0.0-next.1 dependencies: - svelte: 4.1.2 + svelte: 4.2.0 dev: false - /svelte@4.1.2: - resolution: {integrity: sha512-/evA8U6CgOHe5ZD1C1W3va9iJG7mWflcCdghBORJaAhD2JzrVERJty/2gl0pIPrJYBGZwZycH6onYf+64XXF9g==} + /svelte@4.2.0: + resolution: {integrity: sha512-kVsdPjDbLrv74SmLSUzAsBGquMs4MPgWGkGLpH+PjOYnFOziAvENVzgJmyOCV2gntxE32aNm8/sqNKD6LbIpeQ==} engines: {node: '>=16'} dependencies: '@ampproject/remapping': 2.2.1 @@ -3987,25 +3992,25 @@ packages: magic-string: 0.30.0 periscopic: 3.1.0 - /sveltekit-flash-message@2.1.0(@sveltejs/kit@1.22.4)(svelte@4.1.2): - resolution: {integrity: sha512-I9UOYsFpONLu9erXHG8CeHW1tQVZguRUDXV3NHbi6kVA4jPG12R2ypJBrcYW7UyZOLBp3Y3FdVyemkaAmfwr/w==} + /sveltekit-flash-message@2.1.3(@sveltejs/kit@1.22.5)(svelte@4.2.0): + resolution: {integrity: sha512-NFhQ3t2101AM9JO5Mgj38r69ykF4BOs1Ap3567DaM1RoAaNtXRXpAuEc/DQV78HZN/Fxzw8dxyTMdIC1HztUvA==} peerDependencies: '@sveltejs/kit': 1.x svelte: 3.x || 4.x dependencies: - '@sveltejs/kit': 1.22.4(svelte@4.1.2)(vite@4.4.8) - svelte: 4.1.2 + '@sveltejs/kit': 1.22.5(svelte@4.2.0)(vite@4.4.9) + svelte: 4.2.0 dev: true - /sveltekit-superforms@1.5.0(@sveltejs/kit@1.22.4)(svelte@4.1.2)(zod@3.21.4): - resolution: {integrity: sha512-c/2v6zN9rtIAsOfsd6rBV7Kf0lB2+/o6sAFaOuMrYPlTBro5lpbz3iN/3nM5D3EuLE2Xt/iDdZYpkQdH8rq4nQ==} + /sveltekit-superforms@1.5.1(@sveltejs/kit@1.22.5)(svelte@4.2.0)(zod@3.21.4): + resolution: {integrity: sha512-OqKzxuL1P29CFiK1CD00JRsvEsRPedvrR0qXmB4uqzXAIjOS+DpLjoEaa6Cnkd4H00fRa2161GcZNeEBue/D3A==} peerDependencies: '@sveltejs/kit': 1.x svelte: 3.x || 4.x zod: 3.x dependencies: - '@sveltejs/kit': 1.22.4(svelte@4.1.2)(vite@4.4.8) - svelte: 4.1.2 + '@sveltejs/kit': 1.22.5(svelte@4.2.0)(vite@4.4.9) + svelte: 4.2.0 zod: 3.21.4 dev: true @@ -4124,7 +4129,7 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - /ts-node@10.9.1(@types/node@18.17.1)(typescript@5.1.6): + /ts-node@10.9.1(@types/node@18.17.5)(typescript@5.1.6): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -4143,7 +4148,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 18.17.1 + '@types/node': 18.17.5 acorn: 8.8.2 acorn-walk: 8.2.0 arg: 4.1.3 @@ -4194,20 +4199,20 @@ packages: engines: {node: '>=14.17'} hasBin: true - /undici@5.22.0: - resolution: {integrity: sha512-fR9RXCc+6Dxav4P9VV/sp5w3eFiSdOjJYsbtWfd4s5L5C4ogyuVpdKIVHeW0vV1MloM65/f7W45nR9ZxwVdyiA==} + /undici@5.23.0: + resolution: {integrity: sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==} engines: {node: '>=14.0'} dependencies: busboy: 1.6.0 dev: true - /update-browserslist-db@1.0.11(browserslist@4.21.5): + /update-browserslist-db@1.0.11(browserslist@4.21.10): resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.5 + browserslist: 4.21.10 escalade: 3.1.1 picocolors: 1.0.0 dev: true @@ -4235,8 +4240,8 @@ packages: /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - /vite@4.4.8(@types/node@18.17.1)(sass@1.64.2): - resolution: {integrity: sha512-LONawOUUjxQridNWGQlNizfKH89qPigK36XhMI7COMGztz8KNY0JHim7/xDd71CZwGT4HtSRgI7Hy+RlhG0Gvg==} + /vite@4.4.9(@types/node@18.17.5)(sass@1.65.1): + resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -4263,16 +4268,16 @@ packages: terser: optional: true dependencies: - '@types/node': 18.17.1 + '@types/node': 18.17.5 esbuild: 0.18.11 postcss: 8.4.27 - rollup: 3.26.2 - sass: 1.64.2 + rollup: 3.27.2 + sass: 1.65.1 optionalDependencies: fsevents: 2.3.2 dev: true - /vitefu@0.2.4(vite@4.4.8): + /vitefu@0.2.4(vite@4.4.9): resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} peerDependencies: vite: ^3.0.0 || ^4.0.0 @@ -4280,10 +4285,10 @@ packages: vite: optional: true dependencies: - vite: 4.4.8(@types/node@18.17.1)(sass@1.64.2) + vite: 4.4.9(@types/node@18.17.5)(sass@1.65.1) dev: true - /vitest@0.25.8(sass@1.64.2): + /vitest@0.25.8(sass@1.65.1): resolution: {integrity: sha512-X75TApG2wZTJn299E/TIYevr4E9/nBo1sUtZzn0Ci5oK8qnpZAZyhwg0qCeMSakGIWtc6oRwcQFyFfW14aOFWg==} engines: {node: '>=v14.16.0'} hasBin: true @@ -4307,7 +4312,7 @@ packages: dependencies: '@types/chai': 4.3.4 '@types/chai-subset': 1.3.3 - '@types/node': 18.17.1 + '@types/node': 18.17.5 acorn: 8.8.1 acorn-walk: 8.2.0 chai: 4.3.7 @@ -4318,7 +4323,7 @@ packages: tinybench: 2.3.1 tinypool: 0.3.0 tinyspy: 1.0.2 - vite: 4.4.8(@types/node@18.17.1)(sass@1.64.2) + vite: 4.4.9(@types/node@18.17.5)(sass@1.65.1) transitivePeerDependencies: - less - lightningcss diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 78807e1..a67265f 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -46,7 +46,8 @@ model User { receiveEmail Boolean @default(false) token String? @unique collection Collection? - wishlist Wishlist[] + wishlist Wishlist? + list List[] theme String @default("system") created_at DateTime @default(now()) @db.Timestamp(6) updated_at DateTime @updatedAt @db.Timestamp(6) @@ -101,7 +102,6 @@ model CollectionItem { model Wishlist { id String @id @default(cuid()) - name String user_id String @unique user User @relation(references: [id], fields: [user_id]) items WishlistItem[] @@ -123,6 +123,30 @@ model WishlistItem { @@map("wishlist_items") } +model List { + id String @id @default(cuid()) + name String + user_id String @unique + user User @relation(references: [id], fields: [user_id]) + items ListItem[] + + @@index([user_id]) + @@map("lists") +} + +model ListItem { + id String @id @default(cuid()) + list_id String @unique + list List @relation(references: [id], fields: [list_id], onDelete: Cascade) + game_id String @unique + game Game @relation(references: [id], fields: [game_id]) + created_at DateTime @default(now()) @db.Timestamp(6) + updated_at DateTime @updatedAt @db.Timestamp(6) + + @@index([game_id, list_id]) + @@map("list_items") +} + model Game { id String @id @default(cuid()) name String @@ -152,6 +176,7 @@ model Game { expansions Expansion[] collection_items CollectionItem[] wishlist_items WishlistItem[] + list_items ListItem[] external_id String @unique created_at DateTime @default(now()) @db.Timestamp(6) updated_at DateTime @updatedAt @db.Timestamp(6) diff --git a/src/lib/apis/collection.ts b/src/lib/apis/collection.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/lib/apis/wishlist.ts b/src/lib/apis/wishlist.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/lib/components/AddToList.svelte b/src/lib/components/AddToList.svelte new file mode 100644 index 0000000..c01b8a9 --- /dev/null +++ b/src/lib/components/AddToList.svelte @@ -0,0 +1,138 @@ + + +{#if in_wishlist} +
+ + +
+{:else} +
+ + +
+{/if} + +{#if in_collection} +
+ + +
+{:else} +
+ + +
+{/if} + +
+ + + {#if $open} +
+ {#each Object.entries(options) as [key, value]} +
+ {value} + {#if $isSelected(key)} +
+ +
+ {/if} +
+ {/each} +
+ {/if} +
+ + + \ No newline at end of file diff --git a/src/lib/components/WishlistButton.svelte b/src/lib/components/WishlistButton.svelte new file mode 100644 index 0000000..e69de29 diff --git a/src/lib/components/game/index.svelte b/src/lib/components/game/index.svelte index 8c965b3..f74bd0e 100644 --- a/src/lib/components/game/index.svelte +++ b/src/lib/components/game/index.svelte @@ -1,89 +1,18 @@
@@ -113,32 +42,6 @@ - -
-
- - -
-
- - -
-
-
diff --git a/src/lib/components/search/textSearch/index.svelte b/src/lib/components/search/textSearch/index.svelte index 7e64830..1ed169e 100644 --- a/src/lib/components/search/textSearch/index.svelte +++ b/src/lib/components/search/textSearch/index.svelte @@ -1,32 +1,21 @@ + + + +
+ + + +
+ + + \ No newline at end of file diff --git a/src/routes/(protected)/list/[id]/+page.server.ts b/src/routes/(protected)/list/[id]/+page.server.ts new file mode 100644 index 0000000..6c8b491 --- /dev/null +++ b/src/routes/(protected)/list/[id]/+page.server.ts @@ -0,0 +1,126 @@ +import { fail, redirect } from '@sveltejs/kit'; +import { superValidate } from 'sveltekit-superforms/server'; +import prisma from '$lib/prisma.js'; +import { list_game_request_schema } from '$lib/zodValidation'; + +export async function load({ params, locals }) { + const session = await locals.auth.validate(); + if (!session) { + throw redirect(302, '/auth/signin'); + } + + try { + let wishlist = await prisma.wishlist.findUnique({ + where: { + id: params.id, + AND: { + user_id: session.userId + } + }, + include: { + items: { + include: { + game: { + select: { + id: true, + name: true, + thumb_url: true + } + } + } + } + } + }); + + return { + wishlist + }; + } catch (e) { + console.error(e); + return {}; + } +} + +export const actions = { + // Add game to a wishlist + add: async (event) => { + const { params, locals, request } = event; + const form = await superValidate(event, modifyListGameSchema); + + const session = await locals.auth.validate(); + if (!session) { + throw redirect(302, '/auth/signin'); + } + + let game = await prisma.game.findUnique({ + where: { + id: form.id + } + }); + + if (!game) { + // game = await prisma.game.create({ + // data: { + // name: form.name + // } + // }); + return fail(400, { + message: 'Game not found' + }); + } + + const wishlist = await prisma.wishlist.findUnique({ + where: { + id: params.id + } + }); + + if (wishlist?.user_id !== session.userId) { + return fail(401, { + message: 'Unauthorized' + }); + } + + if (!wishlist) { + throw redirect(302, '/404'); + } + + const wishlistItem = await prisma.wishlistItem.create({ + data: { + game_id: game.id, + wishlist_id: wishlist.id + } + }); + + if (!wishlistItem) { + return fail(500, { + message: 'Something went wrong' + }); + } + + return { + form + }; + }, + // Create new wishlist + create: async ({ params, locals, request }) => { + const session = await locals.auth.validate(); + if (!session) { + throw redirect(302, '/auth/signin'); + } + }, + // Delete a wishlist + delete: async ({ params, locals, request }) => { + const session = await locals.auth.validate(); + if (!session) { + throw redirect(302, '/auth/signin'); + } + }, + // Remove game from a wishlist + remove: async ({ params, locals, request }) => { + const session = await locals.auth.validate(); + if (!session) { + throw redirect(302, '/auth/signin'); + } + } +}; diff --git a/src/routes/(protected)/list/[id]/+page.svelte b/src/routes/(protected)/list/[id]/+page.svelte new file mode 100644 index 0000000..00ebcfd --- /dev/null +++ b/src/routes/(protected)/list/[id]/+page.svelte @@ -0,0 +1,24 @@ + + + + {`Wishlist ${wishlist.name} | Bored Game`} + + +

{wishlist.name}

+

Games on your wishlist:

+
+ {#if gamesItems.length > 0} + {#each gamesItems as game (game.id)} + + {/each} + {:else} +

Sorry no games found!

+ {/if} +
\ No newline at end of file diff --git a/src/routes/(protected)/wishlist/+page.server.ts b/src/routes/(protected)/wishlist/+page.server.ts index 8b785a7..195ad65 100644 --- a/src/routes/(protected)/wishlist/+page.server.ts +++ b/src/routes/(protected)/wishlist/+page.server.ts @@ -1,7 +1,8 @@ -import { redirect } from '@sveltejs/kit'; +import { error, redirect } from '@sveltejs/kit'; import { superValidate } from 'sveltekit-superforms/server'; import prisma from '$lib/prisma.js'; import { list_game_request_schema } from '$lib/zodValidation'; +import { modifyListGameSchema } from '$lib/config/zod-schemas.js'; export async function load({ params, locals }) { const session = await locals.auth.validate(); @@ -9,72 +10,98 @@ export async function load({ params, locals }) { throw redirect(302, '/auth/signin'); } + console.log('Wishlist load User id', session.user); + try { - let wishlists = await prisma.wishlist.findMany({ + let wishlist = await prisma.wishlist.findUnique({ where: { - user_id: session.userId + user_id: session?.user?.userId }, include: { - items: true + items: { + include: { + game: { + select: { + id: true, + name: true, + thumb_url: true + } + } + } + } } }); - if (wishlists.length === 0) { - const wishlist = await prisma.wishlist.create({ - data: { - user_id: session.userId, - name: 'My Wishlist' - } - }); - wishlists.push(wishlist); + if (!wishlist) { + throw redirect(302, '/404'); } + console.log('wishlist', wishlist); + return { - wishlists + games: wishlist?.items }; } catch (e) { console.error(e); } + redirect(302, '/404'); } export const actions = { // Add game to a wishlist add: async (event) => { const { params, locals, request } = event; - const form = await superValidate(event, list_game_request_schema); + const form = await superValidate(event, modifyListGameSchema); - const session = await locals.auth.validate(); - if (!session) { - throw redirect(302, '/auth/signin'); - } - - let game = await prisma.game.findUnique({ - where: { - id: form.id + try { + const session = await locals.auth.validate(); + if (!session) { + throw redirect(302, '/auth/signin'); } - }); - if (!game) { - game = await prisma.game.create({ - data: { - name: form.name + let game = await prisma.game.findUnique({ + where: { + id: form.data.id } }); - throw redirect(302, '/404'); - } - if (game) { - const wishlist = await prisma.wishlist.create({ - data: { - user_id: session.userId, - name: form.name + if (!game) { + // game = await prisma.game.create({ + // data: { + // name: form.name + // } + // }); + console.log('game not found'); + throw redirect(302, '/404'); + } + + if (game) { + const wishlist = await prisma.wishlist.findUnique({ + where: { + user_id: session.user.userId + } + }); + + if (!wishlist) { + console.log('Wishlist not found'); + return error(404, 'Wishlist not found'); } - }); - } - return { - form - }; + await prisma.wishlistItem.create({ + data: { + game_id: game.id, + wishlist_id: wishlist.id + } + }); + } + + return { + form + }; + } catch (e) { + console.error(e); + return error(500, 'Something went wrong'); + } }, // Create new wishlist create: async ({ params, locals, request }) => { @@ -91,10 +118,58 @@ export const actions = { } }, // Remove game from a wishlist - remove: async ({ params, locals, request }) => { - const session = await locals.auth.validate(); - if (!session) { - throw redirect(302, '/auth/signin'); + remove: async (event) => { + const { params, locals, request } = event; + const form = await superValidate(event, modifyListGameSchema); + + try { + const session = await locals.auth.validate(); + if (!session) { + throw redirect(302, '/auth/signin'); + } + + let game = await prisma.game.findUnique({ + where: { + id: form.data.id + } + }); + + if (!game) { + // game = await prisma.game.create({ + // data: { + // name: form.name + // } + // }); + console.log('game not found'); + throw redirect(302, '/404'); + } + + if (game) { + const wishlist = await prisma.wishlist.findUnique({ + where: { + user_id: session.user.userId + } + }); + + if (!wishlist) { + console.log('Wishlist not found'); + return error(404, 'Wishlist not found'); + } + + await prisma.wishlistItem.delete({ + where: { + wishlist_id: wishlist.id, + game_id: game.id + } + }); + } + + return { + form + }; + } catch (e) { + console.error(e); + return error(500, 'Something went wrong'); } } }; diff --git a/src/routes/(protected)/wishlist/+page.svelte b/src/routes/(protected)/wishlist/+page.svelte index 635939d..ce6e60b 100644 --- a/src/routes/(protected)/wishlist/+page.svelte +++ b/src/routes/(protected)/wishlist/+page.svelte @@ -1,134 +1,22 @@ - Your Wishlist | Bored Game + {`Your Wishlist | Bored Game`} -

Your Wishlist

-{#each wishlists as wishlist} -

{wishlist.name}

-{/each} - - - + \ No newline at end of file diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 759e737..2aae69e 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -11,7 +11,6 @@ import Header from '$lib/components/header/index.svelte'; import Footer from '$lib/components/footer.svelte'; import Loading from '$lib/components/loading.svelte'; - import Transition from '$lib/components/transition/index.svelte'; import Portal from '$lib/Portal.svelte'; import { boredState } from '$lib/stores/boredState'; import { collectionStore } from '$lib/stores/collectionStore'; @@ -123,9 +122,9 @@
- + - +