// Generiert BEIDE Prisma-Client-Varianten (Postgres + MySQL) aus derselben // prisma/schema.prisma, damit ein einzelnes Docker-Image zur Laufzeit per // DATABASE_PROVIDER zwischen beiden waehlen kann (lib/prisma.ts, // prisma/seed.ts) — ein einzelner generierter Client ist fest an EINEN // Provider gebunden (Prisma unterstuetzt keinen Laufzeit-Wechsel desselben // generierten Clients zwischen Providern). Anders als // scripts/prisma-provider.mjs (schreibt genau EINEN Provider fuer // db push/migrate/studio, die gegen eine konkrete Ziel-DB laufen) ist dieses // Skript fuer dev/build/start/postinstall gedacht. import { readFileSync, writeFileSync } from "node:fs"; import { fileURLToPath } from "node:url"; import { execSync } from "node:child_process"; import path from "node:path"; const projectRoot = path.join(path.dirname(fileURLToPath(import.meta.url)), ".."); const schemaPath = path.join(projectRoot, "prisma", "schema.prisma"); const VARIANTS = [ { provider: "postgresql", output: "../src/generated/prisma" }, { provider: "mysql", output: "../src/generated/prisma-mysql" }, ]; const originalSchema = readFileSync(schemaPath, "utf8"); try { for (const { provider, output } of VARIANTS) { let schema = originalSchema.replace( /(datasource db \{[^}]*provider\s*=\s*")[a-z]+(")/, `$1${provider}$2` ); schema = schema.replace( /(generator client \{[^}]*output\s*=\s*")[^"]*(")/, `$1${output}$2` ); writeFileSync(schemaPath, schema); console.log(`Generiere Prisma Client (${provider}) -> ${output} ...`); // execSync (statt execFileSync) laeuft ueber die Shell — auf Windows ist // "npx" ein .cmd-Batch-Skript, das execFileSync ohne shell:true nicht // aufloest. execSync("npx prisma generate", { stdio: "inherit", cwd: projectRoot }); } } finally { // schema.prisma unveraendert lassen: der eigentliche Provider fuer // db push/migrate/studio wird separat von scripts/prisma-provider.mjs // gesetzt, nicht von diesem Skript. writeFileSync(schemaPath, originalSchema); }