Fixed files: - competitions-view.tsx: 10 strings (placeholders, labels) - subjects-view.tsx: 11 strings (types, actions, placeholders) - professional-calendar.tsx: 5 strings (event type labels) - illness-reporting-view.tsx: 3 strings (status badges) - student-detail-view.tsx: 4 strings (health form placeholders) - data-table.tsx: 2 strings (search, empty state) - compliance-wizard.tsx: 2 strings (name, state) - settings-view.tsx: 1 string (Skipped) - competence-flower-view.tsx: 1 string (Active) - disciplinary-view.tsx: 1 string (All clear) - district-management-view.tsx: 1 string (No recent activity) - competitions-view.tsx: 1 string (Stock) - ui/pagination.tsx: 3 strings (Previous, Next, More pages) - ui/breadcrumb.tsx: 1 string (More) - ui/carousel.tsx: 2 strings (Previous/Next slide) - ui/sidebar.tsx: 1 string (Sidebar title) Total: 44 hardcoded English strings replaced with German
24 lines
827 B
JavaScript
Executable File
24 lines
827 B
JavaScript
Executable File
import { access, mkdir } from 'node:fs/promises';
|
|
import path from 'node:path';
|
|
import { spawnSync } from 'node:child_process';
|
|
|
|
const databaseUrl = process.env.DATABASE_URL;
|
|
|
|
if (!databaseUrl?.startsWith('file:')) {
|
|
throw new Error('DATABASE_URL must use a SQLite file: URL');
|
|
}
|
|
|
|
const databasePath = path.resolve(databaseUrl.slice('file:'.length));
|
|
await mkdir(path.dirname(databasePath), { recursive: true });
|
|
|
|
const result = spawnSync('sqlite3', [databasePath, 'PRAGMA journal_mode=WAL; PRAGMA synchronous=NORMAL; PRAGMA foreign_keys=ON; PRAGMA wal_checkpoint(TRUNCATE);'], {
|
|
encoding: 'utf8',
|
|
});
|
|
|
|
if (result.error || result.status !== 0) {
|
|
throw result.error ?? new Error(result.stderr || 'Unable to configure SQLite WAL mode');
|
|
}
|
|
|
|
await access(databasePath);
|
|
console.log(`SQLite WAL configured: ${databasePath}`);
|