Files
shd.build/scripts/db-migrate.mjs
T

37 lines
1.1 KiB
JavaScript

import { connect } from '@tursodatabase/database';
import { access, mkdir, readFile } from 'node:fs/promises';
import { dirname, resolve } from 'node:path';
import process from 'node:process';
import { initializeDefaultUsers } from './default-users.mjs';
const databasePath = resolve(process.env.TDR_DATABASE_PATH || './data/shd-build.db');
const schemaPath = resolve('./database/schema.sql');
let databaseAlreadyExisted = true;
try {
await access(databasePath);
} catch {
databaseAlreadyExisted = false;
}
await mkdir(dirname(databasePath), { recursive: true });
const database = await connect(databasePath);
const schema = await readFile(schemaPath, 'utf8');
// The project schema deliberately avoids semicolons inside string literals.
const statements = schema
.split(';')
.map((statement) => statement.trim())
.filter(Boolean);
for (const statement of statements) {
await database.exec(statement);
}
console.log(`Applied ${statements.length} schema statements to ${databasePath}`);
if (!databaseAlreadyExisted) {
console.log('New database detected; creating default users.');
await initializeDefaultUsers(database);
}