You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-desktop/ts/node/sqlInstance.ts

45 lines
1.2 KiB
TypeScript

import * as BetterSqlite3 from '@signalapp/better-sqlite3';
let globalInstance: BetterSqlite3.Database | null = null;
export function assertGlobalInstance(): BetterSqlite3.Database {
if (!globalInstance) {
throw new Error('globalInstance is not initialized.');
}
return globalInstance;
}
export function isInstanceInitialized(): boolean {
return !!globalInstance;
}
export function assertGlobalInstanceOrInstance(
instance?: BetterSqlite3.Database | null
): BetterSqlite3.Database {
// if none of them are initialized, throw
if (!globalInstance && !instance) {
throw new Error('neither globalInstance nor initialized is initialized.');
}
// otherwise, return which ever is true, priority to the global one
return globalInstance || (instance as BetterSqlite3.Database);
}
export function initDbInstanceWith(instance: BetterSqlite3.Database) {
if (globalInstance) {
throw new Error('already init');
}
globalInstance = instance;
}
export function closeDbInstance() {
if (!globalInstance) {
return;
}
const dbRef = globalInstance;
globalInstance = null;
// SQLLite documentation suggests that we run `PRAGMA optimize` right before
// closing the database connection.
dbRef.pragma('optimize');
dbRef.close();
}