41 lines
No EOL
1.4 KiB
TypeScript
41 lines
No EOL
1.4 KiB
TypeScript
import { sql as pgsql } from "bun";
|
|
import { Database as SQLiteDB } from "bun:sqlite";
|
|
|
|
const dbType = process.env.DB_TYPE;
|
|
|
|
|
|
const sqlite = () => {
|
|
const db = new SQLiteDB(process.env.DB_URL || ":memory:");
|
|
function toSql(strings: TemplateStringsArray, values: any[]) {
|
|
let sql = strings[0] || "";
|
|
for (let i = 0; i < values.length; i++) {
|
|
sql += "?" + (strings[i + 1] || "");
|
|
}
|
|
return sql;
|
|
}
|
|
|
|
return {
|
|
all: async <T extends any[]>(strings: TemplateStringsArray, ...params: any[]) => {
|
|
const sql = toSql(strings, params);
|
|
return db.query(sql).all(...params) as T;
|
|
},
|
|
get: async <T>(strings: TemplateStringsArray, ...params: any[]) => {
|
|
const sql = toSql(strings, params);
|
|
return db.query(sql).get(...params) as T;
|
|
},
|
|
run: async <T>(strings: TemplateStringsArray, ...params: any[]) => {
|
|
const sql = toSql(strings, params);
|
|
return db.query(sql).run(...params) as T;
|
|
},
|
|
};
|
|
};
|
|
|
|
const postgres = () => {
|
|
return {
|
|
all: async <T>(strings: TemplateStringsArray, ...values: any[]) => await pgsql(strings, ...values) as T,
|
|
get: async <T>(strings: TemplateStringsArray, ...values: any[]) => (await pgsql(strings, ...values))[0] as T,
|
|
run: async <T>(strings: TemplateStringsArray, ...values: any[]) => await pgsql(strings, ...values) as T,
|
|
};
|
|
};
|
|
|
|
export const db = dbType === "sqlite" ? sqlite() : postgres(); |