From f5102cf0c901d0cfa12a934e29fee03e6a56c10c Mon Sep 17 00:00:00 2001 From: Aman Varshney Date: Thu, 6 Nov 2025 23:46:52 +0530 Subject: [PATCH 1/3] update prisma --- .gitignore | 1 + app/routes/users/index.tsx | 2 +- app/utils/auth.server.ts | 2 +- app/utils/db.server.ts | 7 +- package-lock.json | 711 +++++++++++++++++++++++++++++++--- package.json | 10 +- prisma.config.ts | 14 + prisma/schema.prisma | 4 +- tests/e2e/note-images.test.ts | 2 +- tests/playwright-utils.ts | 6 +- 10 files changed, 691 insertions(+), 68 deletions(-) create mode 100644 prisma.config.ts diff --git a/.gitignore b/.gitignore index 2345034e4..3745b13f4 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ node_modules /prisma/data.db /prisma/data.db-journal /tests/prisma +/prisma/generated /test-results/ /playwright-report/ diff --git a/app/routes/users/index.tsx b/app/routes/users/index.tsx index d6a5e1221..ab6a5f177 100644 --- a/app/routes/users/index.tsx +++ b/app/routes/users/index.tsx @@ -1,4 +1,4 @@ -import { searchUsers } from '@prisma/client/sql' +import { searchUsers } from '../../../prisma/generated/sql' import { Img } from 'openimg/react' import { redirect, Link } from 'react-router' import { GeneralErrorBoundary } from '#app/components/error-boundary.tsx' diff --git a/app/utils/auth.server.ts b/app/utils/auth.server.ts index f785ea88d..6d36f6025 100644 --- a/app/utils/auth.server.ts +++ b/app/utils/auth.server.ts @@ -1,5 +1,5 @@ import crypto from 'node:crypto' -import { type Connection, type Password, type User } from '@prisma/client' +import { type Connection, type Password, type User } from '../../prisma/generated/client' import bcrypt from 'bcryptjs' import { redirect } from 'react-router' import { Authenticator } from 'remix-auth' diff --git a/app/utils/db.server.ts b/app/utils/db.server.ts index 711844e89..83e748421 100644 --- a/app/utils/db.server.ts +++ b/app/utils/db.server.ts @@ -1,7 +1,8 @@ +import 'dotenv/config' import { styleText } from 'node:util' import { remember } from '@epic-web/remember' -// Changed import due to issue: https://github.com/remix-run/react-router/pull/12644 -import { PrismaClient } from '@prisma/client/index.js' +import { PrismaClient } from '../../prisma/generated/client' +import { PrismaBetterSQLite3 } from "@prisma/adapter-better-sqlite3" export const prisma = remember('prisma', () => { // NOTE: if you change anything in this function you'll need to restart @@ -10,7 +11,9 @@ export const prisma = remember('prisma', () => { // Feel free to change this log threshold to something that makes sense for you const logThreshold = 20 + const adapter = new PrismaBetterSQLite3({ url: process.env.DATABASE_URL }) const client = new PrismaClient({ + adapter, log: [ { level: 'query', emit: 'event' }, { level: 'error', emit: 'stdout' }, diff --git a/package-lock.json b/package-lock.json index 36eaf419a..1c403d94f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,8 +21,9 @@ "@oslojs/crypto": "^1.0.1", "@oslojs/encoding": "^1.1.0", "@paralleldrive/cuid2": "^2.2.2", - "@prisma/client": "^6.7.0", - "@prisma/instrumentation": "^6.7.0", + "@prisma/adapter-better-sqlite3": "^6.19.0", + "@prisma/client": "^6.19.0", + "@prisma/instrumentation": "^6.19.0", "@radix-ui/react-checkbox": "^1.2.3", "@radix-ui/react-dropdown-menu": "^2.1.12", "@radix-ui/react-label": "^2.1.4", @@ -62,7 +63,7 @@ "mime-types": "^3.0.1", "morgan": "^1.10.0", "openimg": "^1.1.0", - "prisma": "^6.7.0", + "prisma": "^6.19.0", "qrcode": "^1.5.4", "react": "^19.1.0", "react-dom": "^19.1.0", @@ -3530,10 +3531,20 @@ "node": ">=18" } }, + "node_modules/@prisma/adapter-better-sqlite3": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@prisma/adapter-better-sqlite3/-/adapter-better-sqlite3-6.19.0.tgz", + "integrity": "sha512-uNhlDx1hhubRBg5V6etlVfVAuKoyZcAKF8pKbpUmSvz5IZGrw8Ugr1JrhpMyZMqgZ1SlUqNsMVYw2EOBJz5wkQ==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/driver-adapter-utils": "6.19.0", + "better-sqlite3": "^11.9.0" + } + }, "node_modules/@prisma/client": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.10.1.tgz", - "integrity": "sha512-Re4pMlcUsQsUTAYMK7EJ4Bw2kg3WfZAAlr8GjORJaK4VOP6LxRQUQ1TuLnxcF42XqGkWQ36q5CQF1yVadANQ6w==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.19.0.tgz", + "integrity": "sha512-QXFT+N/bva/QI2qoXmjBzL7D6aliPffIwP+81AdTGq0FXDoLxLkWivGMawG8iM5B9BKfxLIXxfWWAF6wbuJU6g==", "hasInstallScript": true, "license": "Apache-2.0", "engines": { @@ -3553,66 +3564,78 @@ } }, "node_modules/@prisma/config": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.10.1.tgz", - "integrity": "sha512-kz4/bnqrOrzWo8KzYguN0cden4CzLJJ+2VSpKtF8utHS3l1JS0Lhv6BLwpOX6X9yNreTbZQZwewb+/BMPDCIYQ==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.19.0.tgz", + "integrity": "sha512-zwCayme+NzI/WfrvFEtkFhhOaZb/hI+X8TTjzjJ252VbPxAl2hWHK5NMczmnG9sXck2lsXrxIZuK524E25UNmg==", "license": "Apache-2.0", "dependencies": { - "jiti": "2.4.2" + "c12": "3.1.0", + "deepmerge-ts": "7.1.5", + "effect": "3.18.4", + "empathic": "2.0.0" } }, "node_modules/@prisma/debug": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.10.1.tgz", - "integrity": "sha512-k2YT53cWxv9OLjW4zSYTZ6Z7j0gPfCzcr2Mj99qsuvlxr8WAKSZ2NcSR0zLf/mP4oxnYG842IMj3utTgcd7CaA==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.19.0.tgz", + "integrity": "sha512-8hAdGG7JmxrzFcTzXZajlQCidX0XNkMJkpqtfbLV54wC6LSSX6Vni25W/G+nAANwLnZ2TmwkfIuWetA7jJxJFA==", "license": "Apache-2.0" }, + "node_modules/@prisma/driver-adapter-utils": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-6.19.0.tgz", + "integrity": "sha512-VAC/wFebV569Jk7iEqzLxekM2A5toKYAr6cPM2KWVHiRHgyjsh/IHf++Xo67q8uor/JxY8mwOuyQyuxkstSf5w==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.19.0" + } + }, "node_modules/@prisma/engines": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.10.1.tgz", - "integrity": "sha512-Q07P5rS2iPwk2IQr/rUQJ42tHjpPyFcbiH7PXZlV81Ryr9NYIgdxcUrwgVOWVm5T7ap02C0dNd1dpnNcSWig8A==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.19.0.tgz", + "integrity": "sha512-pMRJ+1S6NVdXoB8QJAPIGpKZevFjxhKt0paCkRDTZiczKb7F4yTgRP8M4JdVkpQwmaD4EoJf6qA+p61godDokw==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.10.1", - "@prisma/engines-version": "6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c", - "@prisma/fetch-engine": "6.10.1", - "@prisma/get-platform": "6.10.1" + "@prisma/debug": "6.19.0", + "@prisma/engines-version": "6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773", + "@prisma/fetch-engine": "6.19.0", + "@prisma/get-platform": "6.19.0" } }, "node_modules/@prisma/engines-version": { - "version": "6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c.tgz", - "integrity": "sha512-ZJFTsEqapiTYVzXya6TUKYDFnSWCNegfUiG5ik9fleQva5Sk3DNyyUi7X1+0ZxWFHwHDr6BZV5Vm+iwP+LlciA==", + "version": "6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773.tgz", + "integrity": "sha512-gV7uOBQfAFlWDvPJdQxMT1aSRur3a0EkU/6cfbAC5isV67tKDWUrPauyaHNpB+wN1ebM4A9jn/f4gH+3iHSYSQ==", "license": "Apache-2.0" }, "node_modules/@prisma/fetch-engine": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.10.1.tgz", - "integrity": "sha512-clmbG/Jgmrc/n6Y77QcBmAUlq9LrwI9Dbgy4pq5jeEARBpRCWJDJ7PWW1P8p0LfFU0i5fsyO7FqRzRB8mkdS4g==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.19.0.tgz", + "integrity": "sha512-OOx2Lda0DGrZ1rodADT06ZGqHzr7HY7LNMaFE2Vp8dp146uJld58sRuasdX0OiwpHgl8SqDTUKHNUyzEq7pDdQ==", "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.10.1", - "@prisma/engines-version": "6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c", - "@prisma/get-platform": "6.10.1" + "@prisma/debug": "6.19.0", + "@prisma/engines-version": "6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773", + "@prisma/get-platform": "6.19.0" } }, "node_modules/@prisma/get-platform": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.10.1.tgz", - "integrity": "sha512-4CY5ndKylcsce9Mv+VWp5obbR2/86SHOLVV053pwIkhVtT9C9A83yqiqI/5kJM9T1v1u1qco/bYjDKycmei9HA==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.19.0.tgz", + "integrity": "sha512-ym85WDO2yDhC3fIXHWYpG3kVMBA49cL1XD2GCsCF8xbwoy2OkDQY44gEbAt2X46IQ4Apq9H6g0Ex1iFfPqEkHA==", "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.10.1" + "@prisma/debug": "6.19.0" } }, "node_modules/@prisma/instrumentation": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-6.10.1.tgz", - "integrity": "sha512-JC8qzgEDuFKjuBsqrZvXHINUb12psnE6Qy3q5p2MBhalC1KW1MBBUwuonx6iS5TCfCdtNslHft8uc2r+EdLWWg==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-6.19.0.tgz", + "integrity": "sha512-QcuYy25pkXM8BJ37wVFBO7Zh34nyRV1GOb2n3lPkkbRYfl4hWl3PTcImP41P0KrzVXfa/45p6eVCos27x3exIg==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0" + "@opentelemetry/instrumentation": ">=0.52.0 <1" }, "peerDependencies": { "@opentelemetry/api": "^1.8" @@ -5729,6 +5752,18 @@ "node": ">=18" } }, + "node_modules/@sentry/node/node_modules/@prisma/instrumentation": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-6.10.1.tgz", + "integrity": "sha512-JC8qzgEDuFKjuBsqrZvXHINUb12psnE6Qy3q5p2MBhalC1KW1MBBUwuonx6iS5TCfCdtNslHft8uc2r+EdLWWg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.8" + } + }, "node_modules/@sentry/opentelemetry": { "version": "9.32.0", "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-9.32.0.tgz", @@ -6063,6 +6098,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "license": "MIT" + }, "node_modules/@tailwindcss/node": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz", @@ -8239,7 +8280,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, "funding": [ { "type": "github", @@ -8298,6 +8338,17 @@ "beautify": "bin/beautify.js" } }, + "node_modules/better-sqlite3": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.10.0.tgz", + "integrity": "sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" + } + }, "node_modules/big-integer": { "version": "1.6.52", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", @@ -8320,6 +8371,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, "node_modules/bippy": { "version": "0.3.17", "resolved": "https://registry.npmjs.org/bippy/-/bippy-0.3.17.tgz", @@ -8499,6 +8559,40 @@ "node": ">= 0.8" } }, + "node_modules/c12": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.1.0.tgz", + "integrity": "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==", + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.3", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^16.6.1", + "exsolve": "^1.0.7", + "giget": "^2.0.0", + "jiti": "^2.4.2", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.2.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.5" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/c12/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, "node_modules/cac": { "version": "6.7.14", "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", @@ -8651,7 +8745,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, "license": "MIT", "dependencies": { "readdirp": "^4.0.1" @@ -8672,6 +8765,15 @@ "node": ">=18" } }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, "node_modules/cjs-module-lexer": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", @@ -8978,6 +9080,12 @@ "typedarray": "^0.0.6" } }, + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "license": "MIT" + }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -8989,6 +9097,15 @@ "proto-list": "~1.2.1" } }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -9438,6 +9555,21 @@ "dev": true, "license": "MIT" }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/dedent": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", @@ -9463,6 +9595,15 @@ "node": ">=6" } }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -9479,6 +9620,15 @@ "node": ">=0.10.0" } }, + "node_modules/deepmerge-ts": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz", + "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/defaults": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", @@ -9538,6 +9688,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -9567,6 +9723,12 @@ "node": ">=6" } }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -9701,9 +9863,9 @@ } }, "node_modules/dotenv": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.0.tgz", - "integrity": "sha512-Omf1L8paOy2VJhILjyhrhqwLIdstqm1BvcDPKg4NGAlkwEu9ODyrFbvk8UymUOMCT+HXo31jg1lArIrVAAhuGA==", + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -9783,6 +9945,16 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, + "node_modules/effect": { + "version": "3.18.4", + "resolved": "https://registry.npmjs.org/effect/-/effect-3.18.4.tgz", + "integrity": "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "fast-check": "^3.23.1" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.176", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.176.tgz", @@ -9795,6 +9967,15 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "license": "MIT" }, + "node_modules/empathic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", + "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", @@ -9804,6 +9985,15 @@ "node": ">= 0.8" } }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/enforce-unique": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/enforce-unique/-/enforce-unique-1.3.0.tgz", @@ -10609,6 +10799,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, "node_modules/expect-type": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz", @@ -10704,6 +10903,34 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, + "node_modules/exsolve": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz", + "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==", + "license": "MIT" + }, + "node_modules/fast-check": { + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", + "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT", + "dependencies": { + "pure-rand": "^6.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -10808,6 +11035,12 @@ "node": ">=16.0.0" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -11021,6 +11254,12 @@ "node": ">= 0.6" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, "node_modules/fs-extra": { "version": "11.3.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", @@ -11219,6 +11458,35 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, + "node_modules/giget/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, "node_modules/glob": { "version": "11.0.3", "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", @@ -11628,7 +11896,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, "funding": [ { "type": "github", @@ -11714,7 +11981,6 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, "license": "ISC" }, "node_modules/input-otp": { @@ -13269,6 +13535,18 @@ "node": ">=6" } }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -13294,6 +13572,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -13330,6 +13617,12 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, "node_modules/module-details-from-path": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz", @@ -13490,6 +13783,12 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" + }, "node_modules/napi-postinstall": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.2.4.tgz", @@ -13591,6 +13890,12 @@ } } }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, "node_modules/node-fetch/node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -13989,6 +14294,40 @@ "dev": true, "license": "MIT" }, + "node_modules/nypm": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.2.tgz", + "integrity": "sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.2", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "tinyexec": "^1.0.1" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" + } + }, + "node_modules/nypm/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/nypm/node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -14096,6 +14435,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -14117,6 +14462,15 @@ "node": ">= 0.8" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -14465,6 +14819,12 @@ "url": "https://ko-fi.com/killymxi" } }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, "node_modules/periscopic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-4.0.2.tgz", @@ -14548,6 +14908,23 @@ "node": ">=4" } }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, + "node_modules/pkg-types/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, "node_modules/playwright": { "version": "1.53.1", "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.53.1.tgz", @@ -14667,6 +15044,32 @@ "node": ">=0.10.0" } }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -14836,14 +15239,14 @@ } }, "node_modules/prisma": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.10.1.tgz", - "integrity": "sha512-khhlC/G49E4+uyA3T3H5PRBut486HD2bDqE2+rvkU0pwk9IAqGFacLFUyIx9Uw+W2eCtf6XGwsp+/strUwMNPw==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.19.0.tgz", + "integrity": "sha512-F3eX7K+tWpkbhl3l4+VkFtrwJlLXbAM+f9jolgoUZbFcm1DgHZ4cq9AgVEgUym2au5Ad/TDLN8lg83D+M10ycw==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/config": "6.10.1", - "@prisma/engines": "6.10.1" + "@prisma/config": "6.19.0", + "@prisma/engines": "6.19.0" }, "bin": { "prisma": "build/index.js" @@ -14988,6 +15391,16 @@ "url": "https://github.com/sponsors/lupomontero" } }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -14998,6 +15411,22 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, "node_modules/pvtsutils": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", @@ -15271,6 +15700,40 @@ "node": ">= 0.8" } }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, "node_modules/react": { "version": "19.1.0", "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", @@ -15682,7 +16145,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 14.18.0" @@ -16594,6 +17056,51 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -16796,7 +17303,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" @@ -16806,7 +17312,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, "license": "MIT" }, "node_modules/string-width": { @@ -17165,6 +17670,89 @@ "node": ">=18" } }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/tar-stream/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/test-exclude": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", @@ -17445,6 +18033,18 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/turbo-stream": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.1.tgz", @@ -17891,7 +18491,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, "license": "MIT" }, "node_modules/utils-merge": { @@ -18591,6 +19190,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, "node_modules/ws": { "version": "8.18.2", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", diff --git a/package.json b/package.json index 006e36fc7..927acf649 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,9 @@ "@oslojs/crypto": "^1.0.1", "@oslojs/encoding": "^1.1.0", "@paralleldrive/cuid2": "^2.2.2", - "@prisma/client": "^6.7.0", - "@prisma/instrumentation": "^6.7.0", + "@prisma/adapter-better-sqlite3": "^6.19.0", + "@prisma/client": "^6.19.0", + "@prisma/instrumentation": "^6.19.0", "@radix-ui/react-checkbox": "^1.2.3", "@radix-ui/react-dropdown-menu": "^2.1.12", "@radix-ui/react-label": "^2.1.4", @@ -93,7 +94,7 @@ "mime-types": "^3.0.1", "morgan": "^1.10.0", "openimg": "^1.1.0", - "prisma": "^6.7.0", + "prisma": "^6.19.0", "qrcode": "^1.5.4", "react": "^19.1.0", "react-dom": "^19.1.0", @@ -159,8 +160,5 @@ "engines": { "node": "22" }, - "prisma": { - "seed": "tsx prisma/seed.ts" - }, "prettier": "@epic-web/config/prettier" } diff --git a/prisma.config.ts b/prisma.config.ts new file mode 100644 index 000000000..5bdb5593b --- /dev/null +++ b/prisma.config.ts @@ -0,0 +1,14 @@ +import "dotenv/config"; +import { defineConfig, env } from "prisma/config"; + +export default defineConfig({ + schema: "prisma/schema.prisma", + migrations: { + path: "prisma/migrations", + seed: "tsx prisma/seed.ts", + }, + engine: "classic", + datasource: { + url: env("DATABASE_URL"), + }, +}); diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 36140d6c3..87e87f4f5 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -2,7 +2,9 @@ // learn more about it in the docs: https://pris.ly/d/prisma-schema generator client { - provider = "prisma-client-js" + provider = "prisma-client" + output = "./generated" + engineType = "client" previewFeatures = ["typedSql"] } diff --git a/tests/e2e/note-images.test.ts b/tests/e2e/note-images.test.ts index eea596e33..bb4390ece 100644 --- a/tests/e2e/note-images.test.ts +++ b/tests/e2e/note-images.test.ts @@ -1,5 +1,5 @@ import { faker } from '@faker-js/faker' -import { type NoteImage, type Note } from '@prisma/client' +import { type NoteImage, type Note } from '../../prisma/generated/client' import { prisma } from '#app/utils/db.server.ts' import { expect, test } from '#tests/playwright-utils.ts' diff --git a/tests/playwright-utils.ts b/tests/playwright-utils.ts index b8317caaa..124f2c056 100644 --- a/tests/playwright-utils.ts +++ b/tests/playwright-utils.ts @@ -1,5 +1,5 @@ import { test as base, type Response } from '@playwright/test' -import { type User as UserModel } from '@prisma/client' +import { type User as UserModel } from '../prisma/generated/client' import { href, type Register } from 'react-router' import * as setCookieParser from 'set-cookie-parser' import { @@ -79,14 +79,14 @@ export const test = base.extend<{ return page.goto(href(...args)) }) }, - insertNewUser: async ({}, use) => { + insertNewUser: async ({ }, use) => { let userId: string | undefined = undefined await use(async (options) => { const user = await getOrInsertUser(options) userId = user.id return user }) - await prisma.user.delete({ where: { id: userId } }).catch(() => {}) + await prisma.user.delete({ where: { id: userId } }).catch(() => { }) }, login: async ({ page }, use) => { let userId: string | undefined = undefined From 9ee75dc2e8e6e421b9ea4152224185697d88d6a8 Mon Sep 17 00:00:00 2001 From: Aman Varshney Date: Tue, 11 Nov 2025 21:56:59 +0530 Subject: [PATCH 2/3] Add Prisma import alias to package.json --- app/routes/users/index.tsx | 2 +- app/utils/auth.server.ts | 6 ++- app/utils/db.server.ts | 4 +- docs/database.md | 1 - docs/decisions/031-imports.md | 9 ++-- docs/decisions/039-passkeys.md | 12 ----- docs/decisions/043-pwnedpasswords.md | 3 -- docs/decisions/044-rr-devtools.md | 68 ++++++++++++++-------------- package.json | 3 +- prisma.config.ts | 24 +++++----- server/index.ts | 8 +++- tests/e2e/note-images.test.ts | 2 +- tests/e2e/search.test.ts | 8 ++-- tests/playwright-utils.ts | 6 +-- 14 files changed, 73 insertions(+), 83 deletions(-) diff --git a/app/routes/users/index.tsx b/app/routes/users/index.tsx index ab6a5f177..68f0d3393 100644 --- a/app/routes/users/index.tsx +++ b/app/routes/users/index.tsx @@ -1,4 +1,4 @@ -import { searchUsers } from '../../../prisma/generated/sql' +import { searchUsers } from '#prisma/generated/sql.ts' import { Img } from 'openimg/react' import { redirect, Link } from 'react-router' import { GeneralErrorBoundary } from '#app/components/error-boundary.tsx' diff --git a/app/utils/auth.server.ts b/app/utils/auth.server.ts index 6d36f6025..b709e5134 100644 --- a/app/utils/auth.server.ts +++ b/app/utils/auth.server.ts @@ -1,5 +1,9 @@ import crypto from 'node:crypto' -import { type Connection, type Password, type User } from '../../prisma/generated/client' +import { + type Connection, + type Password, + type User, +} from '#prisma/generated/client.ts' import bcrypt from 'bcryptjs' import { redirect } from 'react-router' import { Authenticator } from 'remix-auth' diff --git a/app/utils/db.server.ts b/app/utils/db.server.ts index 83e748421..0282d3187 100644 --- a/app/utils/db.server.ts +++ b/app/utils/db.server.ts @@ -1,8 +1,8 @@ import 'dotenv/config' import { styleText } from 'node:util' import { remember } from '@epic-web/remember' -import { PrismaClient } from '../../prisma/generated/client' -import { PrismaBetterSQLite3 } from "@prisma/adapter-better-sqlite3" +import { PrismaClient } from '#prisma/generated/client.ts' +import { PrismaBetterSQLite3 } from '@prisma/adapter-better-sqlite3' export const prisma = remember('prisma', () => { // NOTE: if you change anything in this function you'll need to restart diff --git a/docs/database.md b/docs/database.md index 746714d37..f9d69c322 100644 --- a/docs/database.md +++ b/docs/database.md @@ -300,7 +300,6 @@ You've got a few options: re-generating the migration after fixing the error. 3. If you do care about the data and don't have a backup, you can follow these steps: - 1. Comment out the [`exec` section from `litefs.yml` file](https://github.com/epicweb-dev/epic-stack/blob/main/other/litefs.yml#L31-L37). diff --git a/docs/decisions/031-imports.md b/docs/decisions/031-imports.md index 83ad00bf4..599b2b637 100644 --- a/docs/decisions/031-imports.md +++ b/docs/decisions/031-imports.md @@ -28,9 +28,9 @@ and manually modify. Despite the magic of Path aliases, they are actually a standard `package.json` supported feature. Sort of. [The `"imports"` field](https://nodejs.org/api/packages.html#imports) in -`package.json` allows you to configure aliases for your imports. -TypeScript also uses this for its own Path aliases since version 5.4 -so you get autocomplete and type checking for your imports. +`package.json` allows you to configure aliases for your imports. TypeScript also +uses this for its own Path aliases since version 5.4 so you get autocomplete and +type checking for your imports. By using the `"imports"` field, you don't have to do any special configuration for `vitest` or `eslint` to be able to resolve imports. They just resolve them @@ -44,7 +44,8 @@ again it's just a matter of familiarity. So it's no big deal. ## Decision -We're going to configure `"imports"` in the `package.json` to use path aliases for imports. +We're going to configure `"imports"` in the `package.json` to use path aliases +for imports. We'll set it to `"#*": "./*"` which will allow us to import anything in the root of the repo with `#/`. diff --git a/docs/decisions/039-passkeys.md b/docs/decisions/039-passkeys.md index af37ca62e..32916b52f 100644 --- a/docs/decisions/039-passkeys.md +++ b/docs/decisions/039-passkeys.md @@ -11,7 +11,6 @@ username/password and OAuth providers. While these methods are widely used, they come with various security challenges: 1. Password-based authentication: - - Users often reuse passwords across services - Passwords can be phished or stolen - Password management is a burden for users @@ -39,14 +38,12 @@ using: The authentication flow works as follows: 1. Registration: - - Server generates a challenge and sends registration options - Client creates a new key pair and signs the challenge with the private key - Public key and metadata are sent to the server for storage - Private key remains securely stored in the authenticator 2. Authentication: - - Server generates a new challenge - Client signs it with the stored private key - Server verifies the signature using the stored public key @@ -64,19 +61,16 @@ While passkeys represent the future of authentication, we maintain support for password and OAuth authentication because: 1. Adoption and Transition: - - Passkey support is still rolling out across platforms and browsers - Users need time to become comfortable with the new technology - Organizations may have existing requirements for specific auth methods 2. Fallback Options: - - Some users may not have compatible devices - Enterprise environments might restrict biometric authentication - Backup authentication methods provide reliability 3. User Choice: - - Different users have different security/convenience preferences - Some scenarios may require specific authentication types - Supporting multiple methods maximizes accessibility @@ -112,20 +106,17 @@ We chose SimpleWebAuthn because: ### Positive: 1. Enhanced Security for Users: - - Phishing-resistant authentication adds protection against common attacks - Hardware-backed security provides stronger guarantees than passwords alone - Biometric authentication reduces risk of credential sharing 2. Improved User Experience Options: - - Users can choose between password, OAuth, or passkey based on their needs - Native biometric flows provide fast and familiar authentication - Password manager integration enables seamless cross-device access - Multiple authentication methods increase accessibility 3. Future-Proofing Authentication: - - Adoption of web standard - Gradual transition path as passkey support grows - Meeting evolving security best practices @@ -133,14 +124,12 @@ We chose SimpleWebAuthn because: ### Negative: 1. Implementation Complexity: - - WebAuthn is a complex specification - Need to handle various device capabilities - Must maintain backward compatibility - Need to maintain password-based auth as fallback 2. User Education: - - New technology requires user education - Some users may be hesitant to adopt - Need clear documentation and UI guidance @@ -148,7 +137,6 @@ We chose SimpleWebAuthn because: ### Neutral: 1. Data Storage: - - New database model for passkeys - Additional storage requirements per user - Migration path for existing users diff --git a/docs/decisions/043-pwnedpasswords.md b/docs/decisions/043-pwnedpasswords.md index 366105e6f..e457f537d 100644 --- a/docs/decisions/043-pwnedpasswords.md +++ b/docs/decisions/043-pwnedpasswords.md @@ -22,14 +22,12 @@ However, we wanted to implement this in a way that: We will integrate the HaveIBeenPwned Password API with the following approach: 1. **Progressive Enhancement** - - The password check is implemented as a non-blocking enhancement - If the check fails or times out (>1s), we allow the password - This ensures users can still set passwords even if the service is unavailable 2. **Development Experience** - - The API calls are mocked during development and testing using MSW (Mock Service Worker) - This prevents unnecessary API calls during development @@ -37,7 +35,6 @@ We will integrate the HaveIBeenPwned Password API with the following approach: - Follows our pattern of mocking external services 3. **Error Handling** - - Timeout after 1 second to prevent blocking users - Graceful fallback if the service is unavailable - Warning logs for monitoring service health diff --git a/docs/decisions/044-rr-devtools.md b/docs/decisions/044-rr-devtools.md index 904051aba..60b4c52b4 100644 --- a/docs/decisions/044-rr-devtools.md +++ b/docs/decisions/044-rr-devtools.md @@ -6,34 +6,33 @@ Status: accepted ## Context -Epic Stack uses React Router for routing. React Router is a powerful -library, but it can be difficult to debug and visualize the routing -in your application. This is especially true when you have a complex -routing structure with nested routes, dynamic routes, and you rely -on data functions like loaders and actions, which the Epic Stack does. - -It is also hard to know which routes are currently active -(which ones are rendered) and if any if the loaders are triggered -when you expect them to be. This can lead to confusion and frustration -and the use of console.log statements to debug the routing in your -application. - -This is where the React Router DevTools come in. The React -Router DevTools are a set of tools that do all of these things for you. - -React Router has a set of DevTools that help debug and visualize the -routing in your application. The DevTools allow you to see the -current route information, including the current location, the matched -routes, and the route hierarchy. This can be very helpful when debugging -your applications. The DevTools also hook into your server-side by -wrapping loaders and actions, allowing you to get extensive -information about the data being loaded and the actions being dispatched. +Epic Stack uses React Router for routing. React Router is a powerful library, +but it can be difficult to debug and visualize the routing in your application. +This is especially true when you have a complex routing structure with nested +routes, dynamic routes, and you rely on data functions like loaders and actions, +which the Epic Stack does. + +It is also hard to know which routes are currently active (which ones are +rendered) and if any if the loaders are triggered when you expect them to be. +This can lead to confusion and frustration and the use of console.log statements +to debug the routing in your application. + +This is where the React Router DevTools come in. The React Router DevTools are a +set of tools that do all of these things for you. + +React Router has a set of DevTools that help debug and visualize the routing in +your application. The DevTools allow you to see the current route information, +including the current location, the matched routes, and the route hierarchy. +This can be very helpful when debugging your applications. The DevTools also +hook into your server-side by wrapping loaders and actions, allowing you to get +extensive information about the data being loaded and the actions being +dispatched. ## Decision -We will add the React Router DevTools to the Epic Stack. The DevTools -will be added to the project as a development dependency. The DevTools -will be used in development mode only. +We will add the React Router DevTools to the Epic Stack. The DevTools will be +added to the project as a development dependency. The DevTools will be used in +development mode only. The DevTools will be used to enhance the following: @@ -45,19 +44,18 @@ The DevTools will be used to enhance the following: 6. See cache information returned via headers from your loaders 7. See which loaders/actions are triggered when you navigate to a route 8. and a lot more! - ## Consequences With the addition of the React Router DevTools, you will not have to rely on -console.log statements to debug your routing. The DevTools will provide you -with the tools to ship your applications faster and with more confidence. +console.log statements to debug your routing. The DevTools will provide you with +the tools to ship your applications faster and with more confidence. -The DevTools will also help you visualize the routing in your application, -which can be very helpful in understanding routing in general, and figuring -out if your routes are set up correctly. +The DevTools will also help you visualize the routing in your application, which +can be very helpful in understanding routing in general, and figuring out if +your routes are set up correctly. -They are not included in the production build by default, so you will not -have to worry about them being included in your production bundle. -They are only included in development mode, so you can use them without -any negative performance impact in production. \ No newline at end of file +They are not included in the production build by default, so you will not have +to worry about them being included in your production bundle. They are only +included in development mode, so you can use them without any negative +performance impact in production. diff --git a/package.json b/package.json index 927acf649..925f29d7d 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "type": "module", "imports": { "#app/*": "./app/*", - "#tests/*": "./tests/*" + "#tests/*": "./tests/*", + "#prisma/*": "./prisma/*" }, "scripts": { "build": "run-s build:*", diff --git a/prisma.config.ts b/prisma.config.ts index 5bdb5593b..ec9487d2e 100644 --- a/prisma.config.ts +++ b/prisma.config.ts @@ -1,14 +1,14 @@ -import "dotenv/config"; -import { defineConfig, env } from "prisma/config"; +import 'dotenv/config' +import { defineConfig, env } from 'prisma/config' export default defineConfig({ - schema: "prisma/schema.prisma", - migrations: { - path: "prisma/migrations", - seed: "tsx prisma/seed.ts", - }, - engine: "classic", - datasource: { - url: env("DATABASE_URL"), - }, -}); + schema: 'prisma/schema.prisma', + migrations: { + path: 'prisma/migrations', + seed: 'tsx prisma/seed.ts', + }, + engine: 'classic', + datasource: { + url: env('DATABASE_URL'), + }, +}) diff --git a/server/index.ts b/server/index.ts index b3103284c..3dbe1679e 100644 --- a/server/index.ts +++ b/server/index.ts @@ -28,7 +28,7 @@ const viteDevServer = IS_PROD server: { middlewareMode: true, }, - // We tell Vite we are running a custom app instead of + // We tell Vite we are running a custom app instead of // the SPA default so it doesn't run HTML middleware appType: 'custom', }), @@ -84,7 +84,11 @@ if (viteDevServer) { // Remix fingerprints its assets so we can cache forever. app.use( '/assets', - express.static('build/client/assets', { immutable: true, maxAge: '1y', fallthrough: false }), + express.static('build/client/assets', { + immutable: true, + maxAge: '1y', + fallthrough: false, + }), ) // Everything else (like favicon.ico) is cached for an hour. You may want to be diff --git a/tests/e2e/note-images.test.ts b/tests/e2e/note-images.test.ts index bb4390ece..4c6e33ef7 100644 --- a/tests/e2e/note-images.test.ts +++ b/tests/e2e/note-images.test.ts @@ -1,5 +1,5 @@ import { faker } from '@faker-js/faker' -import { type NoteImage, type Note } from '../../prisma/generated/client' +import { type NoteImage, type Note } from '#prisma/generated/client.ts' import { prisma } from '#app/utils/db.server.ts' import { expect, test } from '#tests/playwright-utils.ts' diff --git a/tests/e2e/search.test.ts b/tests/e2e/search.test.ts index 35b23c91f..6efbd95aa 100644 --- a/tests/e2e/search.test.ts +++ b/tests/e2e/search.test.ts @@ -12,11 +12,9 @@ test('Search from home page', async ({ page, navigate, insertNewUser }) => { const userList = page.getByRole('main').getByRole('list') await expect(userList.getByRole('listitem')).toHaveCount(1) await expect( - userList - .getByRole('listitem') - .getByRole('link', { - name: `${newUser.name || newUser.username} profile`, - }), + userList.getByRole('listitem').getByRole('link', { + name: `${newUser.name || newUser.username} profile`, + }), ).toBeVisible() // Search for a non-existing user. diff --git a/tests/playwright-utils.ts b/tests/playwright-utils.ts index 124f2c056..2d52e2dc2 100644 --- a/tests/playwright-utils.ts +++ b/tests/playwright-utils.ts @@ -1,5 +1,5 @@ import { test as base, type Response } from '@playwright/test' -import { type User as UserModel } from '../prisma/generated/client' +import { type User as UserModel } from '#prisma/generated/client.ts' import { href, type Register } from 'react-router' import * as setCookieParser from 'set-cookie-parser' import { @@ -79,14 +79,14 @@ export const test = base.extend<{ return page.goto(href(...args)) }) }, - insertNewUser: async ({ }, use) => { + insertNewUser: async ({}, use) => { let userId: string | undefined = undefined await use(async (options) => { const user = await getOrInsertUser(options) userId = user.id return user }) - await prisma.user.delete({ where: { id: userId } }).catch(() => { }) + await prisma.user.delete({ where: { id: userId } }).catch(() => {}) }, login: async ({ page }, use) => { let userId: string | undefined = undefined From 6ba2b0e14412e75c8ef5dad5090e2513f84cac5e Mon Sep 17 00:00:00 2001 From: Aman Varshney Date: Fri, 14 Nov 2025 17:14:40 +0530 Subject: [PATCH 3/3] update prisma and adjust database url --- app/utils/db.server.ts | 4 +- package-lock.json | 206 +++++++++++++++++++++++++++++------------ package.json | 8 +- prisma.config.ts | 1 - prisma/schema.prisma | 2 - 5 files changed, 153 insertions(+), 68 deletions(-) diff --git a/app/utils/db.server.ts b/app/utils/db.server.ts index 0282d3187..2acf9e72a 100644 --- a/app/utils/db.server.ts +++ b/app/utils/db.server.ts @@ -2,7 +2,7 @@ import 'dotenv/config' import { styleText } from 'node:util' import { remember } from '@epic-web/remember' import { PrismaClient } from '#prisma/generated/client.ts' -import { PrismaBetterSQLite3 } from '@prisma/adapter-better-sqlite3' +import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3' export const prisma = remember('prisma', () => { // NOTE: if you change anything in this function you'll need to restart @@ -11,7 +11,7 @@ export const prisma = remember('prisma', () => { // Feel free to change this log threshold to something that makes sense for you const logThreshold = 20 - const adapter = new PrismaBetterSQLite3({ url: process.env.DATABASE_URL }) + const adapter = new PrismaBetterSqlite3({ url: process.env.DATABASE_URL }) const client = new PrismaClient({ adapter, log: [ diff --git a/package-lock.json b/package-lock.json index 1c403d94f..92d30f3ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,9 +21,9 @@ "@oslojs/crypto": "^1.0.1", "@oslojs/encoding": "^1.1.0", "@paralleldrive/cuid2": "^2.2.2", - "@prisma/adapter-better-sqlite3": "^6.19.0", - "@prisma/client": "^6.19.0", - "@prisma/instrumentation": "^6.19.0", + "@prisma/adapter-better-sqlite3": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "@prisma/client": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "@prisma/instrumentation": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", "@radix-ui/react-checkbox": "^1.2.3", "@radix-ui/react-dropdown-menu": "^2.1.12", "@radix-ui/react-label": "^2.1.4", @@ -63,7 +63,7 @@ "mime-types": "^3.0.1", "morgan": "^1.10.0", "openimg": "^1.1.0", - "prisma": "^6.19.0", + "prisma": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", "qrcode": "^1.5.4", "react": "^19.1.0", "react-dom": "^19.1.0", @@ -3532,27 +3532,29 @@ } }, "node_modules/@prisma/adapter-better-sqlite3": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@prisma/adapter-better-sqlite3/-/adapter-better-sqlite3-6.19.0.tgz", - "integrity": "sha512-uNhlDx1hhubRBg5V6etlVfVAuKoyZcAKF8pKbpUmSvz5IZGrw8Ugr1JrhpMyZMqgZ1SlUqNsMVYw2EOBJz5wkQ==", + "version": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "resolved": "https://registry.npmjs.org/@prisma/adapter-better-sqlite3/-/adapter-better-sqlite3-6.20.0-integration-aqrln-wpvsvmvvnylq.1.tgz", + "integrity": "sha512-GDP+RYbRGIb23kUDD12O8zX8O1FoED9cJOPW8CLzYQ4VBlRSuUI6cTjWluTT9tfyLcVs0QLKMalachCNMPybFA==", "license": "Apache-2.0", "dependencies": { - "@prisma/driver-adapter-utils": "6.19.0", - "better-sqlite3": "^11.9.0" + "@prisma/driver-adapter-utils": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "better-sqlite3": "^11.10.0" } }, "node_modules/@prisma/client": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.19.0.tgz", - "integrity": "sha512-QXFT+N/bva/QI2qoXmjBzL7D6aliPffIwP+81AdTGq0FXDoLxLkWivGMawG8iM5B9BKfxLIXxfWWAF6wbuJU6g==", - "hasInstallScript": true, + "version": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.20.0-integration-aqrln-wpvsvmvvnylq.1.tgz", + "integrity": "sha512-MvpSbYQEN9cs6dIj1k7Y7pZdgJou4QOMzAd/5hPSmLaCPmRKA1CJbXh8AkktJMfKk0tA4iZozoAlnbtmzyWt/g==", "license": "Apache-2.0", + "dependencies": { + "@prisma/client-runtime-utils": "6.20.0-integration-aqrln-wpvsvmvvnylq.1" + }, "engines": { - "node": ">=18.18" + "node": "^20.19 || ^22.12 || ^24.0" }, "peerDependencies": { "prisma": "*", - "typescript": ">=5.1.0" + "typescript": ">=5.4.0" }, "peerDependenciesMeta": { "prisma": { @@ -3563,10 +3565,16 @@ } } }, + "node_modules/@prisma/client-runtime-utils": { + "version": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "resolved": "https://registry.npmjs.org/@prisma/client-runtime-utils/-/client-runtime-utils-6.20.0-integration-aqrln-wpvsvmvvnylq.1.tgz", + "integrity": "sha512-D5vLRjzayEOyfR9vPW7AH0IP4EY1jOtbSqnvpbny7+zs003NQyZLaxq9ZZuPbKoLZ1WrinNyWq5ifJawHlbbMQ==", + "license": "Apache-2.0" + }, "node_modules/@prisma/config": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.19.0.tgz", - "integrity": "sha512-zwCayme+NzI/WfrvFEtkFhhOaZb/hI+X8TTjzjJ252VbPxAl2hWHK5NMczmnG9sXck2lsXrxIZuK524E25UNmg==", + "version": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.20.0-integration-aqrln-wpvsvmvvnylq.1.tgz", + "integrity": "sha512-etDtvX9UTCTIRyPxrUil4YGyI0+GCBFKxjsxvoJeV9QwAFaxZGv8jyVAUjZvFp0umiZsfvjpuYAKIhvnkuh22w==", "license": "Apache-2.0", "dependencies": { "c12": "3.1.0", @@ -3576,71 +3584,136 @@ } }, "node_modules/@prisma/debug": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.19.0.tgz", - "integrity": "sha512-8hAdGG7JmxrzFcTzXZajlQCidX0XNkMJkpqtfbLV54wC6LSSX6Vni25W/G+nAANwLnZ2TmwkfIuWetA7jJxJFA==", + "version": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.20.0-integration-aqrln-wpvsvmvvnylq.1.tgz", + "integrity": "sha512-OlhTnoAi9yTIFOGdbwDwxwzvt36aZ3Zggs4cCZiOTMd81cvs4chWQp0yA2Cu6x6RpPz3ZWTmHFLUNTY4LJivlg==", "license": "Apache-2.0" }, "node_modules/@prisma/driver-adapter-utils": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-6.19.0.tgz", - "integrity": "sha512-VAC/wFebV569Jk7iEqzLxekM2A5toKYAr6cPM2KWVHiRHgyjsh/IHf++Xo67q8uor/JxY8mwOuyQyuxkstSf5w==", + "version": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-6.20.0-integration-aqrln-wpvsvmvvnylq.1.tgz", + "integrity": "sha512-GZqCxwA9tKduxE4nKQZHev5z30HZDP+ySouEsHSxuO2UjbyWfEO7NpReSn/FM69NCsQef+NtgEq/bXHhgnQwow==", "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.19.0" + "@prisma/debug": "6.20.0-integration-aqrln-wpvsvmvvnylq.1" } }, "node_modules/@prisma/engines": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.19.0.tgz", - "integrity": "sha512-pMRJ+1S6NVdXoB8QJAPIGpKZevFjxhKt0paCkRDTZiczKb7F4yTgRP8M4JdVkpQwmaD4EoJf6qA+p61godDokw==", + "version": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.20.0-integration-aqrln-wpvsvmvvnylq.1.tgz", + "integrity": "sha512-3gmahzpkx8VYcDk7R1iLflQd8XvQ8rb5MKzXVV3LYKaEWjdaFtVRqwbOJ47WfQEa6TmbhNDwZCWxq+TOrRg9rA==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.19.0", - "@prisma/engines-version": "6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773", - "@prisma/fetch-engine": "6.19.0", - "@prisma/get-platform": "6.19.0" + "@prisma/debug": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "@prisma/engines-version": "6.20.0-11.next-80ee0a44bf5668992b0c909c946a755b86b56c95", + "@prisma/fetch-engine": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "@prisma/get-platform": "6.20.0-integration-aqrln-wpvsvmvvnylq.1" } }, "node_modules/@prisma/engines-version": { - "version": "6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773.tgz", - "integrity": "sha512-gV7uOBQfAFlWDvPJdQxMT1aSRur3a0EkU/6cfbAC5isV67tKDWUrPauyaHNpB+wN1ebM4A9jn/f4gH+3iHSYSQ==", + "version": "6.20.0-11.next-80ee0a44bf5668992b0c909c946a755b86b56c95", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.20.0-11.next-80ee0a44bf5668992b0c909c946a755b86b56c95.tgz", + "integrity": "sha512-DqrQqRIgeocvWpgN7t9PymiJdV8ISSSrZCuilAtpKEaKIt4JUGIxsAdWNMRSHk188hYA2W1YFG5KvWUYBaCO1A==", "license": "Apache-2.0" }, "node_modules/@prisma/fetch-engine": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.19.0.tgz", - "integrity": "sha512-OOx2Lda0DGrZ1rodADT06ZGqHzr7HY7LNMaFE2Vp8dp146uJld58sRuasdX0OiwpHgl8SqDTUKHNUyzEq7pDdQ==", + "version": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.20.0-integration-aqrln-wpvsvmvvnylq.1.tgz", + "integrity": "sha512-wfpRF41dYVs+wiuiwliGNp48UQnt7VDRc1MTAuRpvBzqBAXCPG0gprs5D6ywq1LN/SQUU90xmKi46HRgpy8NPQ==", "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.19.0", - "@prisma/engines-version": "6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773", - "@prisma/get-platform": "6.19.0" + "@prisma/debug": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "@prisma/engines-version": "6.20.0-11.next-80ee0a44bf5668992b0c909c946a755b86b56c95", + "@prisma/get-platform": "6.20.0-integration-aqrln-wpvsvmvvnylq.1" } }, "node_modules/@prisma/get-platform": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.19.0.tgz", - "integrity": "sha512-ym85WDO2yDhC3fIXHWYpG3kVMBA49cL1XD2GCsCF8xbwoy2OkDQY44gEbAt2X46IQ4Apq9H6g0Ex1iFfPqEkHA==", + "version": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.20.0-integration-aqrln-wpvsvmvvnylq.1.tgz", + "integrity": "sha512-ne4AGZxuL+DbjcEGQQPesdR3uwX/gO7wZSouky0hdflG+cHSqe4OW8Y3uJDZaK4oh8Ft0Bb1g1aO7wuqHEIQNA==", "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.19.0" + "@prisma/debug": "6.20.0-integration-aqrln-wpvsvmvvnylq.1" } }, "node_modules/@prisma/instrumentation": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-6.19.0.tgz", - "integrity": "sha512-QcuYy25pkXM8BJ37wVFBO7Zh34nyRV1GOb2n3lPkkbRYfl4hWl3PTcImP41P0KrzVXfa/45p6eVCos27x3exIg==", + "version": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-6.20.0-integration-aqrln-wpvsvmvvnylq.1.tgz", + "integrity": "sha512-5on6wOlvfueZvr+YZuXC+SX4uz3zyRFNNVrAGAD8Vo5+X4mLMf2eYd1oySFZQ5sdGEC1TmebqQDoi921FWv/9w==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": ">=0.52.0 <1" + "@opentelemetry/instrumentation": "^0.207.0" }, "peerDependencies": { "@opentelemetry/api": "^1.8" } }, + "node_modules/@prisma/instrumentation/node_modules/@opentelemetry/api-logs": { + "version": "0.207.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.207.0.tgz", + "integrity": "sha512-lAb0jQRVyleQQGiuuvCOTDVspc14nx6XJjP4FspJ1sNARo3Regq4ZZbrc3rN4b1TYSuUCvgH+UXUPug4SLOqEQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@prisma/instrumentation/node_modules/@opentelemetry/instrumentation": { + "version": "0.207.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.207.0.tgz", + "integrity": "sha512-y6eeli9+TLKnznrR8AZlQMSJT7wILpXH+6EYq5Vf/4Ao+huI7EedxQHwRgVUOMLFbe7VFDvHJrX9/f4lcwnJsA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.207.0", + "import-in-the-middle": "^2.0.0", + "require-in-the-middle": "^8.0.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@prisma/instrumentation/node_modules/import-in-the-middle": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-2.0.0.tgz", + "integrity": "sha512-yNZhyQYqXpkT0AKq3F3KLasUSK4fHvebNH5hOsKQw2dhGSALvQ4U0BqUc5suziKvydO5u5hgN2hy1RJaho8U5A==", + "license": "Apache-2.0", + "dependencies": { + "acorn": "^8.14.0", + "acorn-import-attributes": "^1.9.5", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" + } + }, + "node_modules/@prisma/instrumentation/node_modules/require-in-the-middle": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-8.0.1.tgz", + "integrity": "sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "module-details-from-path": "^1.0.3" + }, + "engines": { + "node": ">=9.3.0 || >=8.10.0 <9.0.0" + } + }, + "node_modules/@prisma/studio-core-licensed": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@prisma/studio-core-licensed/-/studio-core-licensed-0.6.0.tgz", + "integrity": "sha512-LNC8ohLosuWz6n9oKNqfR5Ep/JYiPavk4RxrU6inOS4LEvMQts8N+Vtt7NAB9i06BaiIRKnPsg1Hcaao5pRjSw==", + "license": "UNLICENSED", + "peerDependencies": { + "@types/react": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, "node_modules/@radix-ui/number": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", @@ -10904,9 +10977,9 @@ "license": "MIT" }, "node_modules/exsolve": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz", - "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", "license": "MIT" }, "node_modules/fast-check": { @@ -15005,6 +15078,19 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postgres": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/postgres/-/postgres-3.4.7.tgz", + "integrity": "sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==", + "license": "Unlicense", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/porsager" + } + }, "node_modules/postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", @@ -15239,23 +15325,25 @@ } }, "node_modules/prisma": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.19.0.tgz", - "integrity": "sha512-F3eX7K+tWpkbhl3l4+VkFtrwJlLXbAM+f9jolgoUZbFcm1DgHZ4cq9AgVEgUym2au5Ad/TDLN8lg83D+M10ycw==", + "version": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.20.0-integration-aqrln-wpvsvmvvnylq.1.tgz", + "integrity": "sha512-hr2p5XR7vDE9MZ0zlVoU700byLlhtOmKjuRR8ZMDNUzX9zeayN8loWnEW+KPDEP2rI3IjcgXynNVLYqk4nyb7A==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/config": "6.19.0", - "@prisma/engines": "6.19.0" + "@prisma/config": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "@prisma/engines": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "@prisma/studio-core-licensed": "0.6.0", + "postgres": "3.4.7" }, "bin": { "prisma": "build/index.js" }, "engines": { - "node": ">=18.18" + "node": "^20.19 || ^22.12 || ^24.0" }, "peerDependencies": { - "typescript": ">=5.1.0" + "typescript": ">=5.4.0" }, "peerDependenciesMeta": { "typescript": { diff --git a/package.json b/package.json index 925f29d7d..b9949dc53 100644 --- a/package.json +++ b/package.json @@ -53,9 +53,9 @@ "@oslojs/crypto": "^1.0.1", "@oslojs/encoding": "^1.1.0", "@paralleldrive/cuid2": "^2.2.2", - "@prisma/adapter-better-sqlite3": "^6.19.0", - "@prisma/client": "^6.19.0", - "@prisma/instrumentation": "^6.19.0", + "@prisma/adapter-better-sqlite3": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "@prisma/client": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", + "@prisma/instrumentation": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", "@radix-ui/react-checkbox": "^1.2.3", "@radix-ui/react-dropdown-menu": "^2.1.12", "@radix-ui/react-label": "^2.1.4", @@ -95,7 +95,7 @@ "mime-types": "^3.0.1", "morgan": "^1.10.0", "openimg": "^1.1.0", - "prisma": "^6.19.0", + "prisma": "6.20.0-integration-aqrln-wpvsvmvvnylq.1", "qrcode": "^1.5.4", "react": "^19.1.0", "react-dom": "^19.1.0", diff --git a/prisma.config.ts b/prisma.config.ts index ec9487d2e..8cbdbe97c 100644 --- a/prisma.config.ts +++ b/prisma.config.ts @@ -7,7 +7,6 @@ export default defineConfig({ path: 'prisma/migrations', seed: 'tsx prisma/seed.ts', }, - engine: 'classic', datasource: { url: env('DATABASE_URL'), }, diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 87e87f4f5..e94b03cbc 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -4,13 +4,11 @@ generator client { provider = "prisma-client" output = "./generated" - engineType = "client" previewFeatures = ["typedSql"] } datasource db { provider = "sqlite" - url = env("DATABASE_URL") } model User {