const sqlite3 = require('sqlite3'); class DatabaseClient { constructor({ path, busyTimeout = 5000 }) { this.db = new sqlite3.Database(path, (err) => { if (err) { console.error('unable to open sqlite file', err); } }); this.db.configure('busyTimeout', busyTimeout); } run(sql, params = []) { return new Promise((resolve, reject) => { this.db.run(sql, params, function (err) { if (err) return reject(err); resolve({ lastID: this.lastID, changes: this.changes }); }); }); } get(sql, params = []) { return new Promise((resolve, reject) => { this.db.get(sql, params, (err, row) => { if (err) return reject(err); resolve(row); }); }); } all(sql, params = []) { return new Promise((resolve, reject) => { this.db.all(sql, params, (err, rows) => { if (err) return reject(err); resolve(rows); }); }); } exec(sql) { return new Promise((resolve, reject) => { this.db.exec(sql, (err) => { if (err) return reject(err); resolve(); }); }); } close() { return new Promise((resolve, reject) => { this.db.close((err) => { if (err) return reject(err); resolve(); }); }); } } module.exports = DatabaseClient;