Files
Neon-Desk/scripts/e2e-prepare.ts

53 lines
1.6 KiB
TypeScript

import { mkdirSync, readFileSync, rmSync } from 'node:fs';
import { dirname, join } from 'node:path';
import { Database } from 'bun:sqlite';
const MIGRATION_FILES = [
'0000_cold_silver_centurion.sql',
'0001_glossy_statement_snapshots.sql',
'0002_workflow_task_projection_metadata.sql',
'0003_task_stage_event_timeline.sql',
'0004_watchlist_company_taxonomy.sql',
'0005_financial_taxonomy_v3.sql',
'0006_coverage_journal_tracking.sql',
'0007_company_financial_bundles.sql',
'0008_research_workspace.sql'
] as const;
export const E2E_DATABASE_PATH = join(process.cwd(), 'data', 'e2e.sqlite');
export const E2E_WORKFLOW_DATA_DIR = join(process.cwd(), '.workflow-data', 'e2e');
function removeFileIfPresent(path: string) {
rmSync(path, { force: true });
}
function applyMigrations(database: Database) {
for (const file of MIGRATION_FILES) {
const sql = readFileSync(join(process.cwd(), 'drizzle', file), 'utf8');
database.exec(sql);
}
}
export function prepareE2eDatabase() {
mkdirSync(dirname(E2E_DATABASE_PATH), { recursive: true });
removeFileIfPresent(E2E_DATABASE_PATH);
removeFileIfPresent(`${E2E_DATABASE_PATH}-shm`);
removeFileIfPresent(`${E2E_DATABASE_PATH}-wal`);
rmSync(E2E_WORKFLOW_DATA_DIR, { force: true, recursive: true });
const database = new Database(E2E_DATABASE_PATH, { create: true });
try {
database.exec('PRAGMA foreign_keys = ON;');
applyMigrations(database);
} finally {
database.close();
}
}
if (import.meta.main) {
prepareE2eDatabase();
console.info(`[e2e] prepared SQLite database at ${E2E_DATABASE_PATH}`);
}