Skip to content

Instantly share code, notes, and snippets.

@etienne-martin
Created December 9, 2018 03:10
Show Gist options
  • Save etienne-martin/fc6751b2d7e3e87386ac56bb80a44afb to your computer and use it in GitHub Desktop.
Save etienne-martin/fc6751b2d7e3e87386ac56bb80a44afb to your computer and use it in GitHub Desktop.
Make sqlite3 work with async/await
import * as sq3 from "sqlite3";
interface IRunFunction {
(sql: string): Promise<Database>;
(sql: string, ...params: any[]): Promise<Database>;
}
interface IGetFunction {
(sql: string): any;
(sql: string, ...params: any[]): any;
}
export interface Database {
run: IRunFunction;
get: IGetFunction;
}
const Database = (filename: string = ""): Promise<Database> => {
return new Promise<Database>((resolve) => {
const db = new (sq3.verbose()).Database(filename, (err) => {
if (err) throw err;
resolve(wrapDb(db));
});
});
};
const createRunFunc = (db: sq3.Database): IRunFunction => {
return (sql: string, ...params: any[]): Promise<Database> => {
return new Promise((resolve) => {
db.run(sql, params, (err) => {
if (err) throw err;
resolve(wrapDb(db));
});
});
};
};
const createGetFunc = (db: sq3.Database): IGetFunction => {
return (sql: string, ...params: any[]): Promise<Database> => {
return new Promise((resolve) => {
db.get(sql, params, (err, row) => {
if (err) throw err;
resolve(row);
});
});
};
};
const wrapDb = (db: sq3.Database): Database => ({
run: createRunFunc(db),
get: createGetFunc(db)
});
export default {
Database
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment