Files
suaveplan/packages/persistence/database/db-sqlite/src/drivers/bun-driver.ts
2026-05-27 23:47:53 +01:00

52 lines
1.5 KiB
TypeScript

import { SQLITE_CODES, SqliteError } from "../errors/index.js";
import type { BunDriverOptions } from "../schemas/index.js";
export interface BunDriverResult {
// biome-ignore lint/suspicious/noExplicitAny: bun:sqlite Database type varies by environment
sqlite: any;
close: () => Promise<void>;
}
export function isBunEnvironment(): boolean {
return typeof Bun !== "undefined";
}
export async function createBunDriver(
options?: BunDriverOptions
): Promise<BunDriverResult> {
/* c8 ignore next 5 */
if (!isBunEnvironment()) {
throw new SqliteError(
SQLITE_CODES.ENVIRONMENT_ERROR,
"createBunDriver requires Bun runtime — use createWasmDriver in browser environments"
);
}
let sqlite: BunDriverResult["sqlite"];
try {
const { Database } = await import("bun:sqlite");
const filename = options?.filename ?? ":memory:";
sqlite = new Database(filename, {
create: true,
readonly: options?.readonly ?? false,
});
} catch (err) {
throw new SqliteError(
SQLITE_CODES.DRIVER_INIT_FAILED,
`Failed to open SQLite database: ${err instanceof Error ? err.message : String(err)}`,
{ cause: err instanceof Error ? err : undefined }
);
}
let closed = false;
return {
sqlite,
close: async () => {
if (closed) return;
closed = true;
sqlite.close();
},
};
}