import { createHash } from "node:crypto"; import { readdirSync, readFileSync, writeFileSync } from "node:fs"; import { join, resolve } from "node:path"; const projectRoot = resolve(import.meta.dir, ".."); const migrationsDir = join(projectRoot, "drizzle"); const outputPath = join(projectRoot, ".build", "migrations-data.ts"); function generateMigrationsData() { let entries: string[]; try { entries = readdirSync(migrationsDir) .filter((f) => f.endsWith(".sql")) .sort(); } catch { entries = []; } const records = entries.map((filename) => { const sql = readFileSync(join(migrationsDir, filename), "utf-8"); const id = filename.replace(/\.sql$/, ""); const checksum = createHash("sha256").update(sql).digest("hex").slice(0, 16); return { checksum, id, sql: sql.trim() }; }); const lines = [ `import type { MigrationRecord } from "../src/server/db/load-migrations";`, ``, `export const MIGRATIONS: MigrationRecord[] = [`, ...records.map( (r) => ` { id: ${JSON.stringify(r.id)}, sql: ${JSON.stringify(r.sql)}, checksum: ${JSON.stringify(r.checksum)} },`, ), `];`, ``, ].join("\n"); writeFileSync(outputPath, lines); console.log(`Generated ${outputPath} with ${records.length} migration(s)`); } generateMigrationsData();