UNPKG

@npio/internals

Version:

A free visual website editor, powered with your own SolidJS components.

48 lines (40 loc) 1.54 kB
import { PrismaClient } from "@prisma/client"; import { isAbsolute, join } from "node:path"; import { createGlobal } from "./util"; // Prismas default DATABASE_URL resolution doesnt work nicely with nitro build // This makes sure that relative urls are resolved to their proper absolute path (based on cwd) // https://github.com/nuxt/nuxt/issues/22738 // https://github.com/prisma/prisma/issues/2559 const resolveRelativeDatasourceUrl = function (url?: string) { const FILE_INDICATOR = "file:"; if (!url?.startsWith(FILE_INDICATOR)) { return url; } const rawUrl = url.replace(FILE_INDICATOR, ""); if (isAbsolute(rawUrl)) { return rawUrl; } const newUrl = FILE_INDICATOR + join(process.cwd(), "prisma", "schema", rawUrl); return newUrl; }; const createClient = () => { const prisma = new PrismaClient({ // Inspired by: https://github.com/t3-oss/create-t3-app/blob/1e4c2d352e9b42e0f48c98980714c5334bfd06d7/cli/template/extras/src/server/db.ts#L12 log: import.meta.env?.DEV ? ["query", "error", "warn"] : ["error"], datasourceUrl: resolveRelativeDatasourceUrl(process.env["DATABASE_URL"]), }); return prisma; }; export const [useDatabase, setDatabase] = createGlobal<ReturnType<typeof createClient>>("npDatabase"); const initDatabase = () => setDatabase(createClient); export default initDatabase; export const connectOrDisconnect = ( id?: string | null, connectOnly = false, ) => { if (id) return { connect: { id } }; if (connectOnly) return; return { disconnect: true }; };