Files
Sybil-2/server/src/db-init.ts
2026-02-13 23:15:12 -08:00

28 lines
1.0 KiB
TypeScript

import { execFileSync } from "node:child_process";
import { existsSync } from "node:fs";
import { dirname, join, resolve } from "node:path";
import { fileURLToPath } from "node:url";
import type { FastifyBaseLogger } from "fastify";
function runPrismaCli(rootDir: string, args: string[]) {
const prismaJs = join(rootDir, "node_modules", "prisma", "build", "index.js");
if (existsSync(prismaJs)) {
execFileSync(process.execPath, [prismaJs, ...args], {
cwd: rootDir,
stdio: "inherit",
env: { ...process.env, PRISMA_HIDE_UPDATE_MESSAGE: "1" },
});
return;
}
throw new Error("Prisma CLI not found at node_modules/prisma/build/index.js. Run `npm install` in /server.");
}
export async function ensureDatabaseReady(logger: FastifyBaseLogger) {
const rootDir = resolve(dirname(fileURLToPath(import.meta.url)), "..");
const startedAt = Date.now();
logger.info("Applying Prisma migrations...");
runPrismaCli(rootDir, ["migrate", "deploy"]);
logger.info({ durationMs: Date.now() - startedAt }, "Prisma migrations applied");
}