Removing prisma.

This commit is contained in:
Bradley Shellnut 2024-03-06 20:37:05 -08:00
parent 6503659352
commit d86b975b4e
23 changed files with 221 additions and 1462 deletions

View file

@ -11,7 +11,7 @@ export default defineConfig({
user: process.env.DATABASE_USER,
password: process.env.DATABASE_PASSWORD,
database: process.env.DATABASE || 'boredgame',
ssl: true
ssl: process.env.DATABASE_HOST === 'localhost' ? false : true,
},
// Print all statements
verbose: true,

View file

@ -4,12 +4,11 @@
"private": "true",
"scripts": {
"dev": "NODE_OPTIONS=\"--inspect\" vite dev --host",
"build": "prisma generate && vite build",
"build": "drizzle-kit generate:pg && vite build",
"package": "svelte-kit package",
"preview": "vite preview",
"test": "playwright test",
"test:ui": "svelte-kit sync && playwright test --ui",
"postinstall": "prisma generate",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"test:unit": "vitest",
@ -26,7 +25,7 @@
},
"devDependencies": {
"@melt-ui/pp": "^0.3.0",
"@melt-ui/svelte": "^0.75.2",
"@melt-ui/svelte": "^0.75.3",
"@playwright/test": "^1.42.0",
"@resvg/resvg-js": "^2.6.0",
"@sveltejs/adapter-auto": "^3.1.1",
@ -34,7 +33,7 @@
"@sveltejs/kit": "^2.5.2",
"@sveltejs/vite-plugin-svelte": "^3.0.2",
"@types/cookie": "^0.6.0",
"@types/node": "^20.11.24",
"@types/node": "^20.11.25",
"@types/pg": "^8.11.2",
"@typescript-eslint/eslint-plugin": "^6.21.0",
"@typescript-eslint/parser": "^6.21.0",
@ -49,10 +48,9 @@
"postcss": "^8.4.35",
"postcss-import": "^16.0.1",
"postcss-load-config": "^5.0.3",
"postcss-preset-env": "^9.4.0",
"postcss-preset-env": "^9.5.0",
"prettier": "^3.2.5",
"prettier-plugin-svelte": "^3.2.2",
"prisma": "^5.9.1",
"sass": "^1.71.1",
"satori": "^0.10.13",
"satori-html": "^0.3.2",
@ -63,12 +61,12 @@
"svelte-sequential-preprocessor": "^2.0.1",
"sveltekit-flash-message": "^2.4.2",
"sveltekit-rate-limiter": "^0.4.3",
"sveltekit-superforms": "^2.7.0",
"sveltekit-superforms": "^2.8.0",
"tailwindcss": "^3.4.1",
"ts-node": "^10.9.2",
"tslib": "^2.6.1",
"tsx": "^4.7.1",
"typescript": "^5.3.3",
"typescript": "^5.4.2",
"vite": "^5.1.5",
"vitest": "^1.3.1",
"zod": "^3.22.4"
@ -88,12 +86,11 @@
"@neondatabase/serverless": "^0.9.0",
"@paralleldrive/cuid2": "^2.2.2",
"@planetscale/database": "^1.16.0",
"@prisma/client": "^5.9.1",
"@sentry/sveltekit": "^7.100.1",
"@sveltejs/adapter-vercel": "^5.1.0",
"@types/feather-icons": "^4.29.4",
"@vercel/og": "^0.5.20",
"bits-ui": "^0.19.3",
"bits-ui": "^0.19.5",
"boardgamegeekclient": "^1.9.1",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.0",

View file

@ -32,9 +32,6 @@ dependencies:
'@planetscale/database':
specifier: ^1.16.0
version: 1.16.0
'@prisma/client':
specifier: ^5.9.1
version: 5.9.1(prisma@5.9.1)
'@sentry/sveltekit':
specifier: ^7.100.1
version: 7.100.1(@sveltejs/kit@2.5.2)(svelte@4.2.12)
@ -48,8 +45,8 @@ dependencies:
specifier: ^0.5.20
version: 0.5.20
bits-ui:
specifier: ^0.19.3
version: 0.19.3(svelte@4.2.12)
specifier: ^0.19.5
version: 0.19.5(svelte@4.2.12)
boardgamegeekclient:
specifier: ^1.9.1
version: 1.9.1
@ -70,7 +67,7 @@ dependencies:
version: 4.29.1
formsnap:
specifier: ^0.5.1
version: 0.5.1(svelte@4.2.12)(sveltekit-superforms@2.7.0)
version: 0.5.1(svelte@4.2.12)(sveltekit-superforms@2.8.0)
html-entities:
specifier: ^2.5.2
version: 2.5.2
@ -132,10 +129,10 @@ dependencies:
devDependencies:
'@melt-ui/pp':
specifier: ^0.3.0
version: 0.3.0(@melt-ui/svelte@0.75.2)(svelte@4.2.12)
version: 0.3.0(@melt-ui/svelte@0.75.3)(svelte@4.2.12)
'@melt-ui/svelte':
specifier: ^0.75.2
version: 0.75.2(svelte@4.2.12)
specifier: ^0.75.3
version: 0.75.3(svelte@4.2.12)
'@playwright/test':
specifier: ^1.42.0
version: 1.42.0
@ -158,17 +155,17 @@ devDependencies:
specifier: ^0.6.0
version: 0.6.0
'@types/node':
specifier: ^20.11.24
version: 20.11.24
specifier: ^20.11.25
version: 20.11.25
'@types/pg':
specifier: ^8.11.2
version: 8.11.2
'@typescript-eslint/eslint-plugin':
specifier: ^6.21.0
version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.3.3)
version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.2)
'@typescript-eslint/parser':
specifier: ^6.21.0
version: 6.21.0(eslint@8.57.0)(typescript@5.3.3)
version: 6.21.0(eslint@8.57.0)(typescript@5.4.2)
autoprefixer:
specifier: ^10.4.18
version: 10.4.18(postcss@8.4.35)
@ -203,17 +200,14 @@ devDependencies:
specifier: ^5.0.3
version: 5.0.3(postcss@8.4.35)
postcss-preset-env:
specifier: ^9.4.0
version: 9.4.0(postcss@8.4.35)
specifier: ^9.5.0
version: 9.5.0(postcss@8.4.35)
prettier:
specifier: ^3.2.5
version: 3.2.5
prettier-plugin-svelte:
specifier: ^3.2.2
version: 3.2.2(prettier@3.2.5)(svelte@4.2.12)
prisma:
specifier: ^5.9.1
version: 5.9.1
sass:
specifier: ^1.71.1
version: 1.71.1
@ -231,10 +225,10 @@ devDependencies:
version: 3.6.6(postcss-load-config@5.0.3)(postcss@8.4.35)(sass@1.71.1)(svelte@4.2.12)
svelte-meta-tags:
specifier: ^3.1.1
version: 3.1.1(svelte@4.2.12)(typescript@5.3.3)
version: 3.1.1(svelte@4.2.12)(typescript@5.4.2)
svelte-preprocess:
specifier: ^5.1.3
version: 5.1.3(postcss-load-config@5.0.3)(postcss@8.4.35)(sass@1.71.1)(svelte@4.2.12)(typescript@5.3.3)
version: 5.1.3(postcss-load-config@5.0.3)(postcss@8.4.35)(sass@1.71.1)(svelte@4.2.12)(typescript@5.4.2)
svelte-sequential-preprocessor:
specifier: ^2.0.1
version: 2.0.1
@ -245,14 +239,14 @@ devDependencies:
specifier: ^0.4.3
version: 0.4.3(@sveltejs/kit@2.5.2)
sveltekit-superforms:
specifier: ^2.7.0
version: 2.7.0(@sveltejs/kit@2.5.2)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.1)(svelte@4.2.12)
specifier: ^2.8.0
version: 2.8.0(@sveltejs/kit@2.5.2)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.1)(svelte@4.2.12)
tailwindcss:
specifier: ^3.4.1
version: 3.4.1(ts-node@10.9.2)
ts-node:
specifier: ^10.9.2
version: 10.9.2(@types/node@20.11.24)(typescript@5.3.3)
version: 10.9.2(@types/node@20.11.25)(typescript@5.4.2)
tslib:
specifier: ^2.6.1
version: 2.6.2
@ -260,14 +254,14 @@ devDependencies:
specifier: ^4.7.1
version: 4.7.1
typescript:
specifier: ^5.3.3
version: 5.3.3
specifier: ^5.4.2
version: 5.4.2
vite:
specifier: ^5.1.5
version: 5.1.5(@types/node@20.11.24)(sass@1.71.1)
version: 5.1.5(@types/node@20.11.25)(sass@1.71.1)
vitest:
specifier: ^1.3.1
version: 1.3.1(@types/node@20.11.24)(sass@1.71.1)
version: 1.3.1(@types/node@20.11.25)(sass@1.71.1)
zod:
specifier: ^3.22.4
version: 3.22.4
@ -469,8 +463,8 @@ packages:
postcss: 8.4.35
dev: true
/@csstools/postcss-gradients-interpolation-method@4.0.10(postcss@8.4.35):
resolution: {integrity: sha512-PwKOxVuX8lo52bPtPeKjaIp6oH2EzhcBxCndRcvGZKsqZYQ35k9A5G4yihZ+wp7PoxPqDNiXuhQsvQG2lqMpOA==}
/@csstools/postcss-gradients-interpolation-method@4.0.11(postcss@8.4.35):
resolution: {integrity: sha512-LFom5jCVUfzF+iuiOZvhvX7RRN8vc+tKpcKo9s4keEBAU2mPwV5/Fgz5iylEfXP/DZbEdq2C0At20urMi/lupw==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
@ -728,6 +722,15 @@ packages:
postcss: 8.4.35
dev: true
/@csstools/selector-resolve-nested@1.1.0(postcss-selector-parser@6.0.15):
resolution: {integrity: sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss-selector-parser: ^6.0.13
dependencies:
postcss-selector-parser: 6.0.15
dev: true
/@csstools/selector-specificity@3.0.2(postcss-selector-parser@6.0.15):
resolution: {integrity: sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==}
engines: {node: ^14 || ^16 || >=18}
@ -1941,7 +1944,7 @@ packages:
'@prisma/client': ^4.2.0 || ^5.0.0
lucia: 3.x
dependencies:
'@prisma/client': 5.9.1(prisma@5.9.1)
'@prisma/client': 5.9.1
lucia: 3.0.1
dev: false
@ -1975,21 +1978,21 @@ packages:
- supports-color
dev: false
/@melt-ui/pp@0.3.0(@melt-ui/svelte@0.75.2)(svelte@4.2.12):
/@melt-ui/pp@0.3.0(@melt-ui/svelte@0.75.3)(svelte@4.2.12):
resolution: {integrity: sha512-b07Bdh8l2KcwKVCXOY+SoBw1dk9eWvQfMSi6SoacpRVyVmmfpi0kV4oGt3HYF0tUCB3sEmVicxse50ZzZxEzEA==}
engines: {pnpm: '>=8.6.3'}
peerDependencies:
'@melt-ui/svelte': '>= 0.29.0'
svelte: ^3.55.0 || ^4.0.0 || ^5.0.0-next.1
dependencies:
'@melt-ui/svelte': 0.75.2(svelte@4.2.12)
'@melt-ui/svelte': 0.75.3(svelte@4.2.12)
estree-walker: 3.0.3
magic-string: 0.30.5
svelte: 4.2.12
dev: true
/@melt-ui/svelte@0.75.2(svelte@4.2.12):
resolution: {integrity: sha512-EZYH5iEzHs/CPsWqRlH6AnJ70sTuPB4llVK3ajafWig6I5q3qyGU8NIz4aozUssL0edf9BKmyDVAy6Vksy1fbA==}
/@melt-ui/svelte@0.75.3(svelte@4.2.12):
resolution: {integrity: sha512-EA2IKn7w9qtzO/M7VEENpphQ9A4az+QDMQbA8SJLuKyu+S8NWliln5y9vvmnx9dZF8GtKtUKuxpwRNyPg5LAOg==}
peerDependencies:
svelte: '>=3 <5'
dependencies:
@ -2662,7 +2665,7 @@ packages:
requiresBuild: true
optional: true
/@prisma/client@5.9.1(prisma@5.9.1):
/@prisma/client@5.9.1:
resolution: {integrity: sha512-caSOnG4kxcSkhqC/2ShV7rEoWwd3XrftokxJqOCMVvia4NYV/TPtJlS9C2os3Igxw/Qyxumj9GBQzcStzECvtQ==}
engines: {node: '>=16.13'}
requiresBuild: true
@ -2671,37 +2674,8 @@ packages:
peerDependenciesMeta:
prisma:
optional: true
dependencies:
prisma: 5.9.1
dev: false
/@prisma/debug@5.9.1:
resolution: {integrity: sha512-yAHFSFCg8KVoL0oRUno3m60GAjsUKYUDkQ+9BA2X2JfVR3kRVSJFc/GpQ2fSORi4pSHZR9orfM4UC9OVXIFFTA==}
/@prisma/engines-version@5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64:
resolution: {integrity: sha512-HFl7275yF0FWbdcNvcSRbbu9JCBSLMcurYwvWc8WGDnpu7APxQo2ONtZrUggU3WxLxUJ2uBX+0GOFIcJeVeOOQ==}
/@prisma/engines@5.9.1:
resolution: {integrity: sha512-gkdXmjxQ5jktxWNdDA5aZZ6R8rH74JkoKq6LD5mACSvxd2vbqWeWIOV0Py5wFC8vofOYShbt6XUeCIUmrOzOnQ==}
requiresBuild: true
dependencies:
'@prisma/debug': 5.9.1
'@prisma/engines-version': 5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64
'@prisma/fetch-engine': 5.9.1
'@prisma/get-platform': 5.9.1
/@prisma/fetch-engine@5.9.1:
resolution: {integrity: sha512-l0goQOMcNVOJs1kAcwqpKq3ylvkD9F04Ioe1oJoCqmz05mw22bNAKKGWuDd3zTUoUZr97va0c/UfLNru+PDmNA==}
dependencies:
'@prisma/debug': 5.9.1
'@prisma/engines-version': 5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64
'@prisma/get-platform': 5.9.1
/@prisma/get-platform@5.9.1:
resolution: {integrity: sha512-6OQsNxTyhvG+T2Ksr8FPFpuPeL4r9u0JF0OZHUBI/Uy9SS43sPyAIutt4ZEAyqWQt104ERh70EZedkHZKsnNbg==}
dependencies:
'@prisma/debug': 5.9.1
/@resvg/resvg-js-android-arm-eabi@2.6.0:
resolution: {integrity: sha512-lJnZ/2P5aMocrFMW7HWhVne5gH82I8xH6zsfH75MYr4+/JOaVcGCTEQ06XFohGMdYRP3v05SSPLPvTM/RHjxfA==}
engines: {node: '>= 10'}
@ -3249,7 +3223,7 @@ packages:
sirv: 2.0.4
svelte: 4.2.12
tiny-glob: 0.2.9
vite: 5.1.5(@types/node@20.11.24)(sass@1.71.1)
vite: 5.1.5(@types/node@20.11.25)(sass@1.71.1)
/@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@5.1.5):
resolution: {integrity: sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==}
@ -3262,7 +3236,7 @@ packages:
'@sveltejs/vite-plugin-svelte': 3.0.2(svelte@4.2.12)(vite@5.1.5)
debug: 4.3.4
svelte: 4.2.12
vite: 5.1.5(@types/node@20.11.24)(sass@1.71.1)
vite: 5.1.5(@types/node@20.11.25)(sass@1.71.1)
transitivePeerDependencies:
- supports-color
@ -3280,7 +3254,7 @@ packages:
magic-string: 0.30.5
svelte: 4.2.12
svelte-hmr: 0.15.3(svelte@4.2.12)
vite: 5.1.5(@types/node@20.11.24)(sass@1.71.1)
vite: 5.1.5(@types/node@20.11.25)(sass@1.71.1)
vitefu: 0.2.5(vite@5.1.5)
transitivePeerDependencies:
- supports-color
@ -3323,22 +3297,22 @@ packages:
/@types/json-schema@7.0.15:
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
/@types/node@20.11.24:
resolution: {integrity: sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==}
/@types/node@20.11.25:
resolution: {integrity: sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==}
dependencies:
undici-types: 5.26.5
/@types/pg@8.11.2:
resolution: {integrity: sha512-G2Mjygf2jFMU/9hCaTYxJrwdObdcnuQde1gndooZSOHsNSaCehAuwc7EIuSA34Do8Jx2yZ19KtvW8P0j4EuUXw==}
dependencies:
'@types/node': 20.11.24
'@types/node': 20.11.25
pg-protocol: 1.6.0
pg-types: 4.0.2
/@types/pg@8.6.6:
resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==}
dependencies:
'@types/node': 20.11.24
'@types/node': 20.11.25
pg-protocol: 1.6.0
pg-types: 2.2.0
dev: false
@ -3356,7 +3330,7 @@ packages:
requiresBuild: true
optional: true
/@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.3.3):
/@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.2):
resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
@ -3368,10 +3342,10 @@ packages:
optional: true
dependencies:
'@eslint-community/regexpp': 4.10.0
'@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.3.3)
'@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.2)
'@typescript-eslint/scope-manager': 6.21.0
'@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.3.3)
'@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.3.3)
'@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.2)
'@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.2)
'@typescript-eslint/visitor-keys': 6.21.0
debug: 4.3.4
eslint: 8.57.0
@ -3379,13 +3353,13 @@ packages:
ignore: 5.3.0
natural-compare: 1.4.0
semver: 7.5.4
ts-api-utils: 1.0.3(typescript@5.3.3)
typescript: 5.3.3
ts-api-utils: 1.0.3(typescript@5.4.2)
typescript: 5.4.2
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3):
/@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.2):
resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
@ -3397,11 +3371,11 @@ packages:
dependencies:
'@typescript-eslint/scope-manager': 6.21.0
'@typescript-eslint/types': 6.21.0
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3)
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.2)
'@typescript-eslint/visitor-keys': 6.21.0
debug: 4.3.4
eslint: 8.57.0
typescript: 5.3.3
typescript: 5.4.2
transitivePeerDependencies:
- supports-color
dev: true
@ -3414,7 +3388,7 @@ packages:
'@typescript-eslint/visitor-keys': 6.21.0
dev: true
/@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.3.3):
/@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.4.2):
resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
@ -3424,12 +3398,12 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3)
'@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.3.3)
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.2)
'@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.2)
debug: 4.3.4
eslint: 8.57.0
ts-api-utils: 1.0.3(typescript@5.3.3)
typescript: 5.3.3
ts-api-utils: 1.0.3(typescript@5.4.2)
typescript: 5.4.2
transitivePeerDependencies:
- supports-color
dev: true
@ -3439,7 +3413,7 @@ packages:
engines: {node: ^16.0.0 || >=18.0.0}
dev: true
/@typescript-eslint/typescript-estree@6.21.0(typescript@5.3.3):
/@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.2):
resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
@ -3455,13 +3429,13 @@ packages:
is-glob: 4.0.3
minimatch: 9.0.3
semver: 7.6.0
ts-api-utils: 1.2.1(typescript@5.3.3)
typescript: 5.3.3
ts-api-utils: 1.2.1(typescript@5.4.2)
typescript: 5.4.2
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.3.3):
/@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.2):
resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
@ -3472,7 +3446,7 @@ packages:
'@types/semver': 7.5.6
'@typescript-eslint/scope-manager': 6.21.0
'@typescript-eslint/types': 6.21.0
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3)
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.2)
eslint: 8.57.0
semver: 7.5.4
transitivePeerDependencies:
@ -3771,13 +3745,13 @@ packages:
file-uri-to-path: 1.0.0
dev: false
/bits-ui@0.19.3(svelte@4.2.12):
resolution: {integrity: sha512-0qqZ1bwE4ZmTnzTdsl4mYEbHY5f0NVgxhddIqscLjJZx4ltkVKDXxBwEusbE2NToqKtXNNrU0wy7sLusdzdhcg==}
/bits-ui@0.19.5(svelte@4.2.12):
resolution: {integrity: sha512-jrt0pGZdixtl27VrfzLj5yJxha29CK+6nClZZSoJCL5DlXFT1sluF9NnOSMP48D3kczR5YjpArvCe0BEnGq4jA==}
peerDependencies:
svelte: ^4.0.0
dependencies:
'@internationalized/date': 3.5.2
'@melt-ui/svelte': 0.75.2(svelte@4.2.12)
'@melt-ui/svelte': 0.75.3(svelte@4.2.12)
nanoid: 5.0.6
svelte: 4.2.12
dev: false
@ -4110,8 +4084,8 @@ packages:
mdn-data: 2.0.30
source-map-js: 1.0.2
/cssdb@7.11.0:
resolution: {integrity: sha512-YUVAJhjDcTZzVD5XE49l3PQtGE29vvhzaL1bM3BtkvSmIRJeYENdfn1dn5jauBI7BBF+IyyiBS+oSVx3Hz/Gaw==}
/cssdb@7.11.1:
resolution: {integrity: sha512-F0nEoX/Rv8ENTHsjMPGHd9opdjGfXkgRBafSUGnQKPzGZFB7Lm0BbT10x21TMOCrKLbVsJ0NoCDMk6AfKqw8/A==}
dev: true
/cssesc@3.0.0:
@ -4834,7 +4808,7 @@ packages:
is-callable: 1.2.7
dev: false
/formsnap@0.5.1(svelte@4.2.12)(sveltekit-superforms@2.7.0):
/formsnap@0.5.1(svelte@4.2.12)(sveltekit-superforms@2.8.0):
resolution: {integrity: sha512-8ppOlOu7llBEJbV0PzUz/KWh1J8KfiGqwjiyb8emQ2m+/nYXohLBtMcLVpW3XwlMkUbYaIXM+5lhfGjw8xbGJw==}
peerDependencies:
svelte: ^4.0.0
@ -4842,7 +4816,7 @@ packages:
dependencies:
nanoid: 5.0.6
svelte: 4.2.12
sveltekit-superforms: 2.7.0(@sveltejs/kit@2.5.2)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.1)(svelte@4.2.12)
sveltekit-superforms: 2.8.0(@sveltejs/kit@2.5.2)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.1)(svelte@4.2.12)
dev: false
/fraction.js@4.3.7:
@ -6278,7 +6252,7 @@ packages:
dependencies:
lilconfig: 2.1.0
postcss: 8.4.35
ts-node: 10.9.2(@types/node@20.11.24)(typescript@5.3.3)
ts-node: 10.9.2(@types/node@20.11.25)(typescript@5.4.2)
yaml: 1.10.2
dev: true
@ -6296,7 +6270,7 @@ packages:
dependencies:
lilconfig: 3.0.0
postcss: 8.4.35
ts-node: 10.9.2(@types/node@20.11.24)(typescript@5.3.3)
ts-node: 10.9.2(@types/node@20.11.25)(typescript@5.4.2)
yaml: 2.3.4
/postcss-load-config@5.0.3(postcss@8.4.35):
@ -6335,12 +6309,13 @@ packages:
postcss: 8.4.35
postcss-selector-parser: 6.0.13
/postcss-nesting@12.0.3(postcss@8.4.35):
resolution: {integrity: sha512-yrtMRPFNkfZMv9ikBvZ/Eh3RxhpMBKQ3KzD7LCY8+jYVlgju/Mdcxi4JY8bW2Y7ISXw8GTLuF/o+kFtp+yaVfQ==}
/postcss-nesting@12.1.0(postcss@8.4.35):
resolution: {integrity: sha512-QOYnosaZ+mlP6plQrAxFw09UUp2Sgtxj1BVHN+rSVbtV0Yx48zRt9/9F/ZOoxOKBBEsaJk2MYhhVRjeRRw5yuw==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
'@csstools/selector-resolve-nested': 1.1.0(postcss-selector-parser@6.0.15)
'@csstools/selector-specificity': 3.0.2(postcss-selector-parser@6.0.15)
postcss: 8.4.35
postcss-selector-parser: 6.0.15
@ -6383,8 +6358,8 @@ packages:
postcss-value-parser: 4.2.0
dev: true
/postcss-preset-env@9.4.0(postcss@8.4.35):
resolution: {integrity: sha512-5X2UA4Dn4xo7sJFCxlzW/dAGo71Oxh/K5DVls33hd2e3j06OKnW5FJQTw2hB0wTnGv0f6WcMaVBGFqcEfAgwlw==}
/postcss-preset-env@9.5.0(postcss@8.4.35):
resolution: {integrity: sha512-ZTrTWCSqKVYSABB1GerMBb6F8Uto5YWIq1nqi+TKOHPzrXMcyJNuJTc0v2lp5WjG4Sfvwdo7HF/7/3j7HskRog==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
@ -6395,7 +6370,7 @@ packages:
'@csstools/postcss-exponential-functions': 1.0.4(postcss@8.4.35)
'@csstools/postcss-font-format-keywords': 3.0.2(postcss@8.4.35)
'@csstools/postcss-gamut-mapping': 1.0.3(postcss@8.4.35)
'@csstools/postcss-gradients-interpolation-method': 4.0.10(postcss@8.4.35)
'@csstools/postcss-gradients-interpolation-method': 4.0.11(postcss@8.4.35)
'@csstools/postcss-hwb-function': 3.0.9(postcss@8.4.35)
'@csstools/postcss-ic-unit': 3.0.4(postcss@8.4.35)
'@csstools/postcss-initial': 1.0.1(postcss@8.4.35)
@ -6423,7 +6398,7 @@ packages:
css-blank-pseudo: 6.0.1(postcss@8.4.35)
css-has-pseudo: 6.0.2(postcss@8.4.35)
css-prefers-color-scheme: 9.0.1(postcss@8.4.35)
cssdb: 7.11.0
cssdb: 7.11.1
postcss: 8.4.35
postcss-attribute-case-insensitive: 6.0.3(postcss@8.4.35)
postcss-clamp: 4.1.0(postcss@8.4.35)
@ -6442,7 +6417,7 @@ packages:
postcss-image-set-function: 6.0.3(postcss@8.4.35)
postcss-lab-function: 6.0.10(postcss@8.4.35)
postcss-logical: 7.0.1(postcss@8.4.35)
postcss-nesting: 12.0.3(postcss@8.4.35)
postcss-nesting: 12.1.0(postcss@8.4.35)
postcss-opacity-percentage: 2.0.0(postcss@8.4.35)
postcss-overflow-shorthand: 5.0.1(postcss@8.4.35)
postcss-page-break: 3.0.4(postcss@8.4.35)
@ -6602,14 +6577,6 @@ packages:
react-is: 18.2.0
dev: true
/prisma@5.9.1:
resolution: {integrity: sha512-Hy/8KJZz0ELtkw4FnG9MS9rNWlXcJhf98Z2QMqi0QiVMoS8PzsBkpla0/Y5hTlob8F3HeECYphBjqmBxrluUrQ==}
engines: {node: '>=16.13'}
hasBin: true
requiresBuild: true
dependencies:
'@prisma/engines': 5.9.1
/progress@2.0.3:
resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
engines: {node: '>=0.4.0'}
@ -6820,12 +6787,12 @@ packages:
yoga-wasm-web: 0.3.3
dev: false
/schema-dts@1.1.2(typescript@5.3.3):
/schema-dts@1.1.2(typescript@5.4.2):
resolution: {integrity: sha512-MpNwH0dZJHinVxk9bT8XUdjKTxMYrA5bLtrrGmFA6PTLwlOKnhi67XoRd6/ty+Djt6ZC0slR57qFhZDNMI6DhQ==}
peerDependencies:
typescript: '>=4.1.0'
dependencies:
typescript: 5.3.3
typescript: 5.4.2
dev: true
/semver@6.3.1:
@ -7089,8 +7056,8 @@ packages:
picocolors: 1.0.0
sade: 1.8.1
svelte: 4.2.12
svelte-preprocess: 5.1.3(postcss-load-config@5.0.3)(postcss@8.4.35)(sass@1.71.1)(svelte@4.2.12)(typescript@5.3.3)
typescript: 5.3.3
svelte-preprocess: 5.1.3(postcss-load-config@5.0.3)(postcss@8.4.35)(sass@1.71.1)(svelte@4.2.12)(typescript@5.4.2)
typescript: 5.4.2
transitivePeerDependencies:
- '@babel/core'
- coffeescript
@ -7141,12 +7108,12 @@ packages:
resolution: {integrity: sha512-AZD6R60vksyojn21FgXLglmBiBB9K5Dkdu0hdGrLbCaRCYT68IsWkZfRUqKhMx1IfzqWcZQ8X9y/f+Ih0oNQkQ==}
dev: false
/svelte-meta-tags@3.1.1(svelte@4.2.12)(typescript@5.3.3):
/svelte-meta-tags@3.1.1(svelte@4.2.12)(typescript@5.4.2):
resolution: {integrity: sha512-tSWU1xbRGV5rkDN4wWXZfY24BRuhPa3Z8W2Zpt3GCv01QQdWRhhgmlpYVdfoSPNQX060bDB/JM1cu4H+lXxe8w==}
peerDependencies:
svelte: ^3.55.0 || ^4.0.0
dependencies:
schema-dts: 1.1.2(typescript@5.3.3)
schema-dts: 1.1.2(typescript@5.4.2)
svelte: 4.2.12
transitivePeerDependencies:
- typescript
@ -7160,7 +7127,7 @@ packages:
svelte: 4.2.12
dev: true
/svelte-preprocess@5.1.3(postcss-load-config@5.0.3)(postcss@8.4.35)(sass@1.71.1)(svelte@4.2.12)(typescript@5.3.3):
/svelte-preprocess@5.1.3(postcss-load-config@5.0.3)(postcss@8.4.35)(sass@1.71.1)(svelte@4.2.12)(typescript@5.4.2):
resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==}
engines: {node: '>= 16.0.0', pnpm: ^8.0.0}
requiresBuild: true
@ -7207,7 +7174,7 @@ packages:
sorcery: 0.11.0
strip-indent: 3.0.0
svelte: 4.2.12
typescript: 5.3.3
typescript: 5.4.2
dev: true
/svelte-sequential-preprocessor@2.0.1:
@ -7264,8 +7231,8 @@ packages:
'@sveltejs/kit': 2.5.2(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@5.1.5)
dev: true
/sveltekit-superforms@2.7.0(@sveltejs/kit@2.5.2)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.1)(svelte@4.2.12):
resolution: {integrity: sha512-z/YXWE4utCy/HIo/AcXlckItRj7ANNPFFHO4C42uwbtXZOODnEbuPb+sbpbTdGAw65JhIos59qEZXFFofzfEug==}
/sveltekit-superforms@2.8.0(@sveltejs/kit@2.5.2)(@types/json-schema@7.0.15)(esbuild-runner@2.2.2)(esbuild@0.20.1)(svelte@4.2.12):
resolution: {integrity: sha512-Ac3GlnVOjZ6q4m6+1xcPEznJsoet4tNn3FqbgZ83UJP5O/io4fWXioGFDztuZXmIDPeaBoAx22A0TMmS61pCxA==}
peerDependencies:
'@sveltejs/kit': 1.x || 2.x
svelte: 3.x || 4.x || >=5.0.0-next.51
@ -7285,7 +7252,7 @@ packages:
joi: 17.12.2
superstruct: 1.0.3
valibot: 0.29.0
yup: 1.3.3
yup: 1.4.0
zod: 3.22.4
zod-to-json-schema: 3.22.4(zod@3.22.4)
transitivePeerDependencies:
@ -7436,22 +7403,22 @@ packages:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
dev: false
/ts-api-utils@1.0.3(typescript@5.3.3):
/ts-api-utils@1.0.3(typescript@5.4.2):
resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==}
engines: {node: '>=16.13.0'}
peerDependencies:
typescript: '>=4.2.0'
dependencies:
typescript: 5.3.3
typescript: 5.4.2
dev: true
/ts-api-utils@1.2.1(typescript@5.3.3):
/ts-api-utils@1.2.1(typescript@5.4.2):
resolution: {integrity: sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==}
engines: {node: '>=16'}
peerDependencies:
typescript: '>=4.2.0'
dependencies:
typescript: 5.3.3
typescript: 5.4.2
dev: true
/ts-deepmerge@7.0.0:
@ -7461,7 +7428,7 @@ packages:
/ts-interface-checker@0.1.13:
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
/ts-node@10.9.2(@types/node@20.11.24)(typescript@5.3.3):
/ts-node@10.9.2(@types/node@20.11.25)(typescript@5.4.2):
resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
hasBin: true
peerDependencies:
@ -7480,14 +7447,14 @@ packages:
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 20.11.24
'@types/node': 20.11.25
acorn: 8.11.2
acorn-walk: 8.3.0
arg: 4.1.3
create-require: 1.1.1
diff: 4.0.2
make-error: 1.3.6
typescript: 5.3.3
typescript: 5.4.2
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
@ -7540,8 +7507,8 @@ packages:
resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==}
dev: true
/typescript@5.3.3:
resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==}
/typescript@5.4.2:
resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==}
engines: {node: '>=14.17'}
hasBin: true
@ -7629,7 +7596,7 @@ packages:
- rollup
dev: true
/vite-node@1.3.1(@types/node@20.11.24)(sass@1.71.1):
/vite-node@1.3.1(@types/node@20.11.25)(sass@1.71.1):
resolution: {integrity: sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
@ -7638,7 +7605,7 @@ packages:
debug: 4.3.4
pathe: 1.1.2
picocolors: 1.0.0
vite: 5.1.5(@types/node@20.11.24)(sass@1.71.1)
vite: 5.1.5(@types/node@20.11.25)(sass@1.71.1)
transitivePeerDependencies:
- '@types/node'
- less
@ -7650,7 +7617,7 @@ packages:
- terser
dev: true
/vite@5.1.5(@types/node@20.11.24)(sass@1.71.1):
/vite@5.1.5(@types/node@20.11.25)(sass@1.71.1):
resolution: {integrity: sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
@ -7678,7 +7645,7 @@ packages:
terser:
optional: true
dependencies:
'@types/node': 20.11.24
'@types/node': 20.11.25
esbuild: 0.19.12
postcss: 8.4.35
rollup: 4.12.0
@ -7694,9 +7661,9 @@ packages:
vite:
optional: true
dependencies:
vite: 5.1.5(@types/node@20.11.24)(sass@1.71.1)
vite: 5.1.5(@types/node@20.11.25)(sass@1.71.1)
/vitest@1.3.1(@types/node@20.11.24)(sass@1.71.1):
/vitest@1.3.1(@types/node@20.11.25)(sass@1.71.1):
resolution: {integrity: sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
@ -7721,7 +7688,7 @@ packages:
jsdom:
optional: true
dependencies:
'@types/node': 20.11.24
'@types/node': 20.11.25
'@vitest/expect': 1.3.1
'@vitest/runner': 1.3.1
'@vitest/snapshot': 1.3.1
@ -7739,8 +7706,8 @@ packages:
strip-literal: 2.0.0
tinybench: 2.6.0
tinypool: 0.8.2
vite: 5.1.5(@types/node@20.11.24)(sass@1.71.1)
vite-node: 1.3.1(@types/node@20.11.24)(sass@1.71.1)
vite: 5.1.5(@types/node@20.11.25)(sass@1.71.1)
vite-node: 1.3.1(@types/node@20.11.25)(sass@1.71.1)
why-is-node-running: 2.2.2
transitivePeerDependencies:
- less
@ -7845,8 +7812,8 @@ packages:
/yoga-wasm-web@0.3.3:
resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==}
/yup@1.3.3:
resolution: {integrity: sha512-v8QwZSsHH2K3/G9WSkp6mZKO+hugKT1EmnMqLNUcfu51HU9MDyhlETT/JgtzprnrnQHPWsjc6MUDMBp/l9fNnw==}
/yup@1.4.0:
resolution: {integrity: sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==}
requiresBuild: true
dependencies:
property-expr: 2.0.6

View file

@ -1,256 +0,0 @@
{
"categories": [
{
"name": "Abstract Strategy"
},
{
"name": "Action / Dexterity"
},
{
"name": "Adventure"
},
{
"name": "Age of Reason"
},
{
"name": "American Civil War"
},
{
"name": "American Indian Wars"
},
{
"name": "American Revolutionary War"
},
{
"name": "American West"
},
{
"name": "Ancient"
},
{
"name": "Animals"
},
{
"name": "Arabian"
},
{
"name": "Aviation / Flight"
},
{
"name": "Bluffing"
},
{
"name": "Book"
},
{
"name": "Card Game"
},
{
"name": "Children's Game"
},
{
"name": "City Building"
},
{
"name": "Civil War"
},
{
"name": "Civilization"
},
{
"name": "Collectible Components"
},
{
"name": "Comic Book / Strip"
},
{
"name": "Deduction"
},
{
"name": "Dice"
},
{
"name": "Economic"
},
{
"name": "Educational"
},
{
"name": "Electronic"
},
{
"name": "Environmental"
},
{
"name": "Expansion for Base-game"
},
{
"name": "Exploration"
},
{
"name": "Fan Expansion"
},
{
"name": "Fantasy"
},
{
"name": "Farming"
},
{
"name": "Fighting"
},
{
"name": "Game System"
},
{
"name": "Horror"
},
{
"name": "Humor"
},
{
"name": "Industry / Manufacturing"
},
{
"name": "Korean War"
},
{
"name": "Mafia"
},
{
"name": "Math"
},
{
"name": "Mature / Adult"
},
{
"name": "Maze"
},
{
"name": "Medical"
},
{
"name": "Medieval"
},
{
"name": "Memory"
},
{
"name": "Miniatures"
},
{
"name": "Modern Warefare"
},
{
"name": "Movies / TV / Radio Theme"
},
{
"name": "Murder/Mystery"
},
{
"name": "Music"
},
{
"name": "Mythology"
},
{
"name": "Napoleonic"
},
{
"name": "Nautical"
},
{
"name": "Negotiation"
},
{
"name": "Novel-based"
},
{
"name": "Number"
},
{
"name": "Party Game"
},
{
"name": "Pike and Shot"
},
{
"name": "Pirates"
},
{
"name": "Political"
},
{
"name": "Post-Napoleonic"
},
{
"name": "Prehistoric"
},
{
"name": "Print & Play"
},
{
"name": "Puzzle"
},
{
"name": "Racing"
},
{
"name": "Real-time"
},
{
"name": "Religious"
},
{
"name": "Renaissance"
},
{
"name": "Science Fiction"
},
{
"name": "Space Exploration"
},
{
"name": "Spies/Secret Agents"
},
{
"name": "Sports"
},
{
"name": "Territory Building"
},
{
"name": "Trains"
},
{
"name": "Transportation"
},
{
"name": "Travel"
},
{
"name": "Trivia"
},
{
"name": "Video Game Theme"
},
{
"name": "Vietnam War"
},
{
"name": "Wargame"
},
{
"name": "Word Game"
},
{
"name": "World War I"
},
{
"name": "World War II"
},
{
"name": "Zombies"
}
]
}

View file

@ -1,577 +0,0 @@
{
"mechanics": [
{
"name": "Acting"
},
{
"name": "Action Drafting"
},
{
"name": "Action Points"
},
{
"name": "Action Queue"
},
{
"name": "Action Retrieval"
},
{
"name": "Action Timer"
},
{
"name": "Action/Event"
},
{
"name": "Advantage Token"
},
{
"name": "Alliances"
},
{
"name": "Area Majority / Influence"
},
{
"name": "Area Movement"
},
{
"name": "Area-Impulse"
},
{
"name": "Auction Compensation"
},
{
"name": "Auction: Dexterity"
},
{
"name": "Auction: Dutch"
},
{
"name": "Auction: Dutch Priority"
},
{
"name": "Auction: English"
},
{
"name": "Auction: Fixed Placement"
},
{
"name": "Auction: Multiple Lot"
},
{
"name": "Auction: Once Around"
},
{
"name": "Auction: Sealed Bid"
},
{
"name": "Auction: Turn Order Until Pass"
},
{
"name": "Auction/Bidding"
},
{
"name": "Automatic Resource Growth"
},
{
"name": "Betting and Bluffing"
},
{
"name": "Bias"
},
{
"name": "Bids As Wagers"
},
{
"name": "Bingo"
},
{
"name": "Bribery"
},
{
"name": "Campaign / Battle Card Driven"
},
{
"name": "Card Play Conflict Resolution"
},
{
"name": "Catch the Leader"
},
{
"name": "Chaining"
},
{
"name": "Chit-Pull System"
},
{
"name": "Closed Drafting"
},
{
"name": "Closed Economy Auction"
},
{
"name": "Command Cards"
},
{
"name": "Commodity Speculation"
},
{
"name": "Communication Limits"
},
{
"name": "Connections"
},
{
"name": "Constrained Bidding"
},
{
"name": "Contracts"
},
{
"name": "Cooperative Game"
},
{
"name": "Crayon Rail System"
},
{
"name": "Critical Hits and Failures"
},
{
"name": "Cube Tower"
},
{
"name": "Deck Construction"
},
{
"name": "Deck, Bag, and Pool Building"
},
{
"name": "Deduction"
},
{
"name": "Delayed Purchase"
},
{
"name": "Dice Rolling"
},
{
"name": "Die Icon Resolution"
},
{
"name": "Different Dice Movement"
},
{
"name": "Drawing"
},
{
"name": "Elapsed Real Time Ending"
},
{
"name": "Enclosure"
},
{
"name": "End Game Bonuses"
},
{
"name": "Events"
},
{
"name": "Finale Ending"
},
{
"name": "Flicking"
},
{
"name": "Follow"
},
{
"name": "Force Commitment"
},
{
"name": "Grid Coverage"
},
{
"name": "Grid Movement"
},
{
"name": "Hand Management"
},
{
"name": "Hexagon Grid"
},
{
"name": "Hidden Movement"
},
{
"name": "Hidden Roles"
},
{
"name": "Hidden Victory Points"
},
{
"name": "Highest-Lowest Scoring"
},
{
"name": "Hot Potato"
},
{
"name": "I Cut, You Choose"
},
{
"name": "Impulse Movement"
},
{
"name": "Income"
},
{
"name": "Increase Value of Unchosen Resources"
},
{
"name": "Induction"
},
{
"name": "Interrupts"
},
{
"name": "Investment"
},
{
"name": "Kill Steal"
},
{
"name": "King of the Hill"
},
{
"name": "Ladder Climbing"
},
{
"name": "Layering"
},
{
"name": "Legacy Game"
},
{
"name": "Line Drawing"
},
{
"name": "Line of Sight"
},
{
"name": "Loans"
},
{
"name": "Lose a Turn"
},
{
"name": "Mancala"
},
{
"name": "Map Addition"
},
{
"name": "Map Deformation"
},
{
"name": "Map Reduction"
},
{
"name": "Market"
},
{
"name": "Matching"
},
{
"name": "Measurement Movement"
},
{
"name": "Melding and Splaying"
},
{
"name": "Memory"
},
{
"name": "Minimap Resolution"
},
{
"name": "Modular Board"
},
{
"name": "Move Through Deck"
},
{
"name": "Movement Points"
},
{
"name": "Movement Template"
},
{
"name": "Moving Multiple Units"
},
{
"name": "Multi-Use Cards"
},
{
"name": "Multiple Maps"
},
{
"name": "Narrative Choice / Paragraph"
},
{
"name": "Negotiation"
},
{
"name": "Neighbor Scope"
},
{
"name": "Network and Route Building"
},
{
"name": "Once-Per-Game Abilities"
},
{
"name": "Open Drafting"
},
{
"name": "Order Counters"
},
{
"name": "Ordering"
},
{
"name": "Ownership"
},
{
"name": "Paper-and-Pencil"
},
{
"name": "Passed Action Token"
},
{
"name": "Pattern Building"
},
{
"name": "Pattern Movement"
},
{
"name": "Pattern Recognition"
},
{
"name": "Physical Removal"
},
{
"name": "Pick-up and Deliver"
},
{
"name": "Pieces as Map"
},
{
"name": "Player Elimination"
},
{
"name": "Player Judge"
},
{
"name": "Point to Point Movement"
},
{
"name": "Predictive Bid"
},
{
"name": "Prisoner's Dilemma"
},
{
"name": "Programmed Movement"
},
{
"name": "Push Your Luck"
},
{
"name": "Questions and Answers"
},
{
"name": "Race"
},
{
"name": "Random Production"
},
{
"name": "Ratio / Combat Results Table"
},
{
"name": "Re-rolling and Locking"
},
{
"name": "Real-Time"
},
{
"name": "Relative Movement"
},
{
"name": "Resource Queue"
},
{
"name": "Resource to Move"
},
{
"name": "Rock-Paper-Scissors"
},
{
"name": "Role Playing"
},
{
"name": "Roles with Asymmetric Information"
},
{
"name": "Roll / Spin and Move"
},
{
"name": "Rondel"
},
{
"name": "Scenario / Mission / Campaign Game"
},
{
"name": "Score-and-Reset Game"
},
{
"name": "Secret Unit Deployment"
},
{
"name": "Selection Order Bid"
},
{
"name": "Semi-Cooperative Game"
},
{
"name": "Set Collection"
},
{
"name": "Simulation"
},
{
"name": "Simultaneous Action Selection"
},
{
"name": "Singing"
},
{
"name": "Single Loser Game"
},
{
"name": "Slide/Push"
},
{
"name": "Solo / Solitaire Game"
},
{
"name": "Speed Matching"
},
{
"name": "Square Grid"
},
{
"name": "Stacking and Balancing"
},
{
"name": "Stat Check Resolution"
},
{
"name": "Static Capture"
},
{
"name": "Stock Holding"
},
{
"name": "Storytelling"
},
{
"name": "Sudden Death Ending"
},
{
"name": "Tags"
},
{
"name": "Take That"
},
{
"name": "Targeted Clues"
},
{
"name": "Team-Based Game"
},
{
"name": "Tech Trees / Tech Tracks"
},
{
"name": "Three Dimensional Movement"
},
{
"name": "Tile Placement"
},
{
"name": "Track Movement"
},
{
"name": "Trading"
},
{
"name": "Traitor Game"
},
{
"name": "Trick-taking"
},
{
"name": "Tug of War"
},
{
"name": "Turn Order: Auction"
},
{
"name": "Turn Order: Claim Action"
},
{
"name": "Turn Order: Pass Order"
},
{
"name": "Turn Order: Progressive"
},
{
"name": "Turn Order: Random"
},
{
"name": "Turn Order: Role Order"
},
{
"name": "Turn Order: Stat-Based"
},
{
"name": "Turn Order: Time Track"
},
{
"name": "Variable Phase Order"
},
{
"name": "Variable Player Powers"
},
{
"name": "Variable Set-up"
},
{
"name": "Victory Points as a Resource"
},
{
"name": "Voting"
},
{
"name": "Worker Placement"
},
{
"name": "Worker Placement with Dice Workers"
},
{
"name": "Worker Placement, Different Worker Types"
},
{
"name": "Zone of Control"
}
]
}

View file

@ -1,272 +0,0 @@
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
previewFeatures = ["fullTextSearch", "fullTextIndex", "relationJoins"]
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
relationMode = "prisma"
}
model Role {
id String @id @default(cuid())
name String @unique
userRoles UserRole[]
@@map("roles")
}
model UserRole {
id String @id @default(cuid())
user User @relation(fields: [user_id], references: [id])
user_id String
role Role @relation(fields: [role_id], references: [id])
role_id String
created_at DateTime @default(now()) @db.Timestamp(6)
updated_at DateTime @updatedAt @db.Timestamp(6)
@@unique([user_id, role_id])
@@index([user_id])
@@index([role_id])
@@map("user_roles")
}
model User {
id String @id @default(cuid())
username String @unique
hashed_password String?
email String? @unique
firstName String?
lastName String?
roles UserRole[]
verified Boolean @default(false)
receiveEmail Boolean @default(false)
collection Collection?
wishlist Wishlist?
list List[]
theme String @default("system")
created_at DateTime @default(now()) @db.Timestamp(6)
updated_at DateTime @updatedAt @db.Timestamp(6)
sessions Session[]
@@map("users")
}
model Session {
id String @id @unique
userId String
ip_country String
ip_address String
expiresAt DateTime
user User @relation(references: [id], fields: [userId], onDelete: Cascade)
@@index([userId])
@@map("sessions")
}
model Collection {
id String @id @default(cuid())
user_id String @unique
user User @relation(references: [id], fields: [user_id])
items CollectionItem[]
@@index([user_id])
@@map("collections")
}
model CollectionItem {
id String @id @default(cuid())
collection_id String
collection Collection @relation(references: [id], fields: [collection_id], onDelete: Cascade)
game_id String @unique
game Game @relation(references: [id], fields: [game_id])
times_played Int
@@index([game_id, collection_id])
@@index([game_id])
@@index([collection_id])
@@map("collection_items")
}
model Wishlist {
id String @id @default(cuid())
user_id String @unique
user User @relation(references: [id], fields: [user_id])
items WishlistItem[]
@@index([user_id])
@@map("wishlists")
}
model WishlistItem {
id String @id @default(cuid())
wishlist_id String
wishlist Wishlist @relation(references: [id], fields: [wishlist_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, wishlist_id])
@@index([game_id])
@@index([wishlist_id])
@@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
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])
@@index([game_id])
@@index([list_id])
@@map("list_items")
}
model Game {
id String @id @default(cuid())
name String
slug String
description String? @db.LongText
year_published Int? @db.Year
min_players Int?
max_players Int?
playtime Int?
min_playtime Int?
max_playtime Int?
min_age Int?
image_url String?
thumb_url String?
url String?
categories Category[]
mechanics Mechanic[]
designers Designer[]
publishers Publisher[]
artists Artist[]
names GameName[]
expansions Expansion[] @relation("BaseToExpansion")
expansion_of Expansion[] @relation("ExpansionToBase")
collection_items CollectionItem[]
wishlist_items WishlistItem[]
list_items ListItem[]
external_id Int @unique
last_sync_at DateTime? @db.Timestamp(6)
created_at DateTime @default(now()) @db.Timestamp(6)
updated_at DateTime @updatedAt @db.Timestamp(6)
@@fulltext([name])
@@fulltext([slug])
@@map("games")
}
model GameName {
id String @id @default(cuid())
name String
slug String
game_id String
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])
@@map("game_names")
}
model Publisher {
id String @id @default(cuid())
name String
slug String
external_id Int @unique
games Game[]
created_at DateTime @default(now()) @db.Timestamp(6)
updated_at DateTime @updatedAt @db.Timestamp(6)
@@fulltext([name])
@@map("publishers")
}
model Category {
id String @id @default(cuid())
name String
slug String
games Game[]
external_id Int @unique
created_at DateTime @default(now()) @db.Timestamp(6)
updated_at DateTime @updatedAt @db.Timestamp(6)
@@fulltext([name])
@@map("categories")
}
model Mechanic {
id String @id @default(cuid())
name String
slug String
games Game[]
external_id Int @unique
created_at DateTime @default(now()) @db.Timestamp(6)
updated_at DateTime @updatedAt @db.Timestamp(6)
@@fulltext([name])
@@map("mechanics")
}
model Designer {
id String @id @default(cuid())
name String
slug String
external_id Int @unique
games Game[]
created_at DateTime @default(now()) @db.Timestamp(6)
updated_at DateTime @updatedAt @db.Timestamp(6)
@@fulltext([name])
@@map("designers")
}
model Artist {
id String @id @default(cuid())
name String
slug String @unique
external_id Int @unique
games Game[]
created_at DateTime @default(now()) @db.Timestamp(6)
updated_at DateTime @updatedAt @db.Timestamp(6)
@@fulltext([name])
@@map("artists")
}
model Expansion {
id String @id @default(cuid())
base_game Game @relation(name: "BaseToExpansion", fields: [base_game_id], references: [id])
base_game_id String
game Game @relation(name: "ExpansionToBase", fields: [game_id], references: [id])
game_id String
created_at DateTime @default(now()) @db.Timestamp(6)
updated_at DateTime @updatedAt @db.Timestamp(6)
@@index([base_game_id])
@@index([game_id])
@@map("expansions")
}

View file

@ -1,84 +0,0 @@
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
console.log(`Start seeding ...`);
console.log('Creating roles ...');
const existingRoles = await prisma.role.findMany();
if (existingRoles.length === 0) {
await prisma.role.createMany({
data: [{ name: 'admin' }, { name: 'user' }]
});
console.log('Roles created.');
} else {
console.log('Roles already exist. No action taken.');
}
if (!await prisma.publisher.findFirst({
where: {
external_id: 9999
}
})) {
console.log('Publisher does not exist. Creating...');
await prisma.publisher.create({
data: {
name: 'Unknown',
slug: 'unknown',
external_id: 9999
}
});
}
if (!await prisma.designer.findFirst({
where: {
external_id: 9999
}
})) {
console.log('Designer does not exist. Creating...');
await prisma.designer.create({
data: {
name: 'Unknown',
slug: 'unknown',
external_id: 9999
}
});
}
if (!await prisma.artist.findFirst({
where: {
external_id: 9999
}
})) {
console.log('Artist does not exist. Creating...');
await prisma.artist.create({
data: {
name: 'Unknown',
slug: 'unknown',
external_id: 9999
}
});
}
// 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()
.catch(async (e) => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});

5
src/app.d.ts vendored
View file

@ -2,10 +2,6 @@
// for information about these interfaces
// and what to do when importing types
import type { PrismaClient, User } from '@prisma/client';
type User = Omit<User, 'created_at' | 'updated_at'>;
// src/app.d.ts
declare global {
namespace App {
@ -16,7 +12,6 @@ declare global {
auth: import('lucia').AuthRequest;
user: import('lucia').User | null;
session: import('lucia').Session | null;
prisma: PrismaClient;
startTimer: number;
ip: string;
country: string;

View file

@ -1,14 +1,12 @@
<script lang="ts">
import { enhance } from "$app/forms";
import { fly } from "svelte/transition";
import { createSelect, melt } from "@melt-ui/svelte";
import { Check, ChevronDown, MinusCircle, PlusCircle } from "lucide-svelte";
import { MinusCircle, PlusCircle } from "lucide-svelte";
import { Button } from '$components/ui/button';
import type { Collection, Wishlist } from "@prisma/client";
import type { CollectionItems, Wishlists } from "../../schema";
export let game_id: string;
export let collection: Collection;
export let wishlist: Wishlist;
export let collection: CollectionItems;
export let wishlist: Wishlists;
export let in_wishlist = false;
export let in_collection = false;
export let lists = [];

View file

@ -1,9 +1,9 @@
<script lang="ts">
import type { GameType, SavedGameType } from '$lib/types';
import * as Card from "$lib/components/ui/card";
import type { CollectionItem } from '@prisma/client';
import type { CollectionItems } from '../../schema';
export let game: GameType | CollectionItem;
export let game: GameType | CollectionItems;
export let detailed: boolean = false;
export let variant: 'default' | 'compact' = 'default';
@ -18,10 +18,10 @@
<Card.Header>
<Card.Title class="game-card-header">
<span style:--transition-name="game-name-{game.slug}">
{game.name}
<!-- {game.name}
{#if game?.year_published}
({game?.year_published})
{/if}
{/if} -->
</span>
</Card.Title>
</Card.Header>
@ -32,7 +32,7 @@
title={`View ${game.name}`}
data-sveltekit-preload-data
>
<img src={game.thumb_url} alt={`Image of ${game.name}`} loading="lazy" decoding="async" />
<!-- <img src={game.thumb_url} alt={`Image of ${game.name}`} loading="lazy" decoding="async" />
<div class="game-details">
{#if game?.players}
<p>Players: {game.players}</p>
@ -44,7 +44,7 @@
<div class="description">{@html game.description}</div>
{/if}
{/if}
</div>
</div> -->
</a>
</Card.Content>
</Card.Root>

View file

@ -1,15 +1,22 @@
<script lang="ts">
import { applyAction, enhance } from '$app/forms';
import toast from 'svelte-french-toast';
import { ListChecks, ListTodo, LogOut, User } from 'lucide-svelte';
import { ListChecks, ListTodo, LogOut } from 'lucide-svelte';
import * as DropdownMenu from "$components/ui/dropdown-menu";
import * as Avatar from "$components/ui/avatar";
import { invalidateAll } from '$app/navigation';
import Logo from '$components/logo.svelte';
import type { Users } from '../../schema';
export let user: User | null;
export let user: Users;
let avatar = user?.username.slice(0, 1).toUpperCase() || '?';
let avatar: string;
let loggedIn = false;
$: if (user) {
avatar = user.username?.slice(0, 1).toUpperCase() || '?';
loggedIn = true;
}
</script>
<header>
@ -23,7 +30,7 @@
</div>
<!-- <TextSearch /> -->
<nav>
{#if user}
{#if loggedIn}
<a href="/collection" title="Go to your collection" data-sveltekit-preload-data>Collection</a>
<a href="/wishlist" title="Go to your wishlist" data-sveltekit-preload-data>Wishlist</a>
<DropdownMenu.Root>
@ -89,7 +96,7 @@
</DropdownMenu.Content>
</DropdownMenu.Root>
{/if}
{#if !user}
{#if !loggedIn}
<a href="/login">
<span class="flex-auto">Login</span></a
>

View file

@ -16,7 +16,7 @@ const pool = new pg.Pool({
host: DATABASE_HOST,
port: Number(DATABASE_PORT).valueOf(),
database: DATABASE_DB,
ssl: true,
ssl: DATABASE_HOST === 'localhost' ? false : true,
});
// user: DATABASE_USER,

View file

@ -1,4 +0,0 @@
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
export default prisma

View file

@ -1,5 +1,4 @@
import type { GameType, SavedGameType } from '$lib/types';
import type { Game } from '@prisma/client';
import kebabCase from 'just-kebab-case';
import type { Games } from '../../schema';

View file

@ -9,7 +9,7 @@ const connection = postgres({
user: process.env.DATABASE_USER || 'root',
password: process.env.DATABASE_PASSWORD || '',
database: process.env.DATABASE_DB || 'boredgame',
ssl: 'require',
ssl: process.env.DATABASE_HOST === 'localhost' ? false : 'require',
max: 1
});
const db = drizzle(connection);

View file

@ -1,5 +1,7 @@
import { fail, redirect } from '@sveltejs/kit';
import prisma from '$lib/prisma';
import { fail } from '@sveltejs/kit';
import { eq } from 'drizzle-orm';
import db from '$lib/drizzle.js';
import { wishlists } from '../../../../schema.js';
export async function load({ locals }) {
if (!locals.user) {
@ -7,23 +9,12 @@ export async function load({ locals }) {
}
try {
let wishlists = await prisma.wishlist.findMany({
where: {
user_id: session.userId
}
const userWishlists = await db.query.wishlists.findMany({
where: eq(wishlists.user_id, locals.user.id)
});
if (wishlists.length === 0) {
const wishlist = await prisma.wishlist.create({
data: {
user_id: session.userId
}
});
wishlists.push(wishlist);
}
return {
wishlists
wishlsits: userWishlists
};
} catch (e) {
console.error(e);

View file

@ -5,20 +5,18 @@
const wishlists = data.wishlists || [];
</script>
<aside class="wishlists">
<h2>Your Wishlists</h2>
<div class="separator"></div>
{#each wishlists as wishlist}
<h2 class="wishlist"><a href={`/wishlist/${wishlist.id}`}>{wishlist.name}</a></h2>
{/each}
</aside>
<div class="content">
<Transition url={data.url} transition={{ type: 'page' }}>
<slot />
</Transition>
</div>
<aside class="wishlists">
<h2>Your Wishlists</h2>
<div class="separator"></div>
{#each wishlists as wishlist}
<h2 class="wishlist"><a href={`/wishlist/${wishlist.id}`}>{wishlist.name}</a></h2>
{/each}
</aside>
<div class="content">
<Transition url={data.url} transition={{ type: 'page' }}>
<slot />
</Transition>
</div>
<style lang="postcss">
.wishlists {

View file

@ -1,6 +1,9 @@
import { type Actions, fail, redirect } from "@sveltejs/kit";
import { and, eq } from "drizzle-orm";
import db from "$lib/drizzle.js";
import { superValidate } from 'sveltekit-superforms/server';
import prisma from '$lib/prisma';
import { games, wishlist_items, wishlists } from "../../../../../schema.js";
import { zod } from "sveltekit-superforms/adapters";
export async function load({ params, locals }) {
const user = locals.user;
@ -9,27 +12,32 @@ export async function load({ params, locals }) {
}
try {
let wishlist = await prisma.wishlist.findUnique({
where: {
id: params.id,
AND: {
user_id: user.id
}
const wishlist = await db.select({
wishlistId: wishlists.id,
wishlistName: wishlists.name,
wishlistItems: {
id: wishlist_items.id,
gameId: wishlist_items.game_id,
gameName: games.name,
gameThumbUrl: games.thumb_url
},
include: {
items: {
include: {
game: {
select: {
id: true,
name: true,
thumb_url: true
}
}
}
}
}
});
}).from(wishlists).leftJoin(wishlist_items, eq(wishlists.id, wishlist_items.wishlist_id)).leftJoin(games, eq(games.id, wishlist_items.game_id)).where(eq(wishlists.id, params.id));
// let wishlist = await db.query.wishlists.findFirst({
// where: and(eq(wishlists.id, params.id), eq(wishlists.user_id, user.id)),
// with: {
// : {
// include: {
// game: {
// select: {
// id: true,
// name: true,
// thumb_url: true
// }
// }
// }
// }
// }
// });
return {
wishlist
@ -51,10 +59,8 @@ export const actions: Actions = {
}
let game = await prisma.game.findUnique({
where: {
id: form.id
}
let game = await db.query.games.findFirst({
where: eq(games.id, form.id)
});
if (!game) {
@ -68,10 +74,8 @@ export const actions: Actions = {
});
}
const wishlist = await prisma.wishlist.findUnique({
where: {
id: params.id
}
const wishlist = await db.query.wishlists.findFirst({
where: eq(wishlists.id, params.id)
});
if (wishlist?.user_id !== locals.user.id) {

View file

@ -0,0 +1,9 @@
import { loadFlash } from 'sveltekit-flash-message/server';
import type { LayoutServerLoad } from '../$types';
export const load: LayoutServerLoad = loadFlash(async ({ url, locals }) => {
return {
url: url.pathname,
user: locals.user
};
});

View file

@ -1,8 +1,5 @@
import { superValidate } from 'sveltekit-superforms/server';
import { search_schema } from '$lib/zodValidation';
import type { MetaTagsProps } from 'svelte-meta-tags';
import type { PageServerLoad } from './$types';
import type { Game } from '@prisma/client';
export const load: PageServerLoad = async ({ fetch, url }) => {
const image = {

View file

@ -10,7 +10,7 @@ const pool = new pg.Pool({
host: process.env.DATABASE_HOST,
port: new Number(process.env.DATABASE_PORT).valueOf(),
database: process.env.DATABASE_DB,
ssl: true,
ssl: process.env.DATABASE_HOST === 'localhost' ? false : true,
});
const db = drizzle(pool, { schema: schema });

View file

@ -1,20 +1,17 @@
import type { User } from '@prisma/client';
import { prisma_client } from '../hooks.server';
import db from '$lib/drizzle';
import { eq } from 'drizzle-orm';
import { users, type Users } from '../schema';
import { add_user_to_role } from './roles';
export function create_user(user: User) {
return prisma_client.user.create({
data: {
username: user.username
}
export function create_user(user: Users) {
return db.insert(users).values({
username: user.username
});
}
export async function find_or_create_user(user: User) {
const existing_user = await prisma_client.user.findUnique({
where: {
username: user.username
}
export async function find_or_create_user(user: Users) {
const existing_user = await db.query.users.findFirst({
where: eq(users.username, user.username),
});
if (existing_user) {
return existing_user;
@ -26,14 +23,12 @@ export async function find_or_create_user(user: User) {
}
export async function find_user_with_roles(user_id: string) {
const user_with_roles = await prisma_client.user.findUnique({
where: {
id: user_id
},
include: {
roles: {
select: {
role: {
const user_with_roles = await db.query.users.findFirst({
where: eq(users.id, user_id),
with: {
user_roles: {
with: {
roles: {
select: {
name: true
}

View file

@ -39,9 +39,4 @@ export default defineConfig({
}
}
},
resolve: {
alias: {
'.prisma/client/index-browser': './node_modules/@prisma/client/index-browser.js'
}
}
});