import { existsSync } from 'node:fs' import { readFile, writeFile } from 'node:fs/promises' const JOURNAL = './drizzle/meta/_journal.json' const OUTPUT = './src/server/db/migrations.gen.ts' const SQL_RELATIVE_FROM_OUTPUT = '../../../drizzle' type JournalEntry = { idx: number; tag: string; when: number; breakpoints: boolean } type Journal = { entries: JournalEntry[] } const main = async () => { const entries: JournalEntry[] = existsSync(JOURNAL) ? ((JSON.parse(await readFile(JOURNAL, 'utf-8')) as Journal).entries ?? []).sort((a, b) => a.idx - b.idx) : [] const imports = entries .map((e) => `import sql_${e.idx} from '${SQL_RELATIVE_FROM_OUTPUT}/${e.tag}.sql' with { type: 'text' }`) .join('\n') const arrayBody = entries.length ? `[\n${entries.map((e) => ` { tag: '${e.tag}', sql: sql_${e.idx}, when: ${e.when}, breakpoints: ${e.breakpoints} },`).join('\n')}\n]` : '[]' const out = `// AUTO-GENERATED by \`bun run db:embed\`. Do not edit. ${imports ? `${imports}\n` : ''} export type EmbeddedMigration = { tag: string; sql: string; when: number; breakpoints: boolean } export const embeddedMigrations: readonly EmbeddedMigration[] = ${arrayBody} ` await writeFile(OUTPUT, out) console.log(`✓ ${OUTPUT} (${entries.length} migration${entries.length === 1 ? '' : 's'})`) } main().catch((err) => { console.error('❌', err instanceof Error ? err.message : err) process.exit(1) })