| 19 | } |
| 20 | |
| 21 | export function openDatabase(stateDir: string): DatabaseHandle { |
| 22 | mkdirSync(stateDir, { recursive: true, mode: 0o700 }); |
| 23 | chmodSync(stateDir, 0o700); |
| 24 | const path = databasePath(stateDir); |
| 25 | const sqlite = new Database(path); |
| 26 | chmodSync(path, 0o600); |
| 27 | sqlite.pragma("journal_mode = WAL"); |
| 28 | sqlite.pragma("synchronous = NORMAL"); |
| 29 | sqlite.pragma("busy_timeout = 5000"); |
| 30 | sqlite.pragma("foreign_keys = ON"); |
| 31 | migrateDatabase(sqlite); |
| 32 | |
| 33 | return { |
| 34 | sqlite, |
| 35 | db: createDrizzleDatabase(sqlite), |
| 36 | close: () => sqlite.close(), |
| 37 | }; |
| 38 | } |
| 39 | |
| 40 | function createDrizzleDatabase(sqlite: SqliteDatabase) { |
| 41 | return drizzle(sqlite, { schema }); |