UNPKG

trilogy

Version:

TypeScript SQLite layer with support for both native C++ & pure JavaScript drivers.

46 lines (45 loc) 1.32 kB
import { dirname } from 'path'; import { readFileSync, writeFileSync } from 'fs'; import { createPool } from 'generic-pool'; import { makeDirPath } from './util'; export async function readDatabase(instance) { const name = instance.options.connection.filename; const init = await import('sql.js'); const SQL = await init.default(); if (name === ':memory:') { return new SQL.Database(); } let client; try { makeDirPath(dirname(name)); const file = readFileSync(name); client = new SQL.Database(file); } catch (e) { if (e.code === 'ENOENT') { client = new SQL.Database(); writeDatabase(instance, client); } else { throw e; } } return client; } export function writeDatabase(instance, db) { const name = instance.options.connection.filename; if (name === ':memory:') return; makeDirPath(dirname(name)); writeFileSync(name, db.export(), { mode: parseInt('0777', 8) }); } export function pureConnect(instance) { return createPool({ create() { return readDatabase(instance); }, async destroy(client) { client.close(); } }, { min: 1, max: 1 }); }