| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- /**
- * db.ts - Cross-runtime SQLite compatibility layer
- *
- * Provides a unified Database export that works under both Bun (bun:sqlite)
- * and Node.js (better-sqlite3). The APIs are nearly identical — the main
- * difference is the import path.
- *
- * On macOS, Apple's system SQLite is compiled with SQLITE_OMIT_LOAD_EXTENSION,
- * which prevents loading native extensions like sqlite-vec. When running under
- * Bun we call Database.setCustomSQLite() to swap in Homebrew's full-featured
- * SQLite build before creating any database instances.
- */
- export declare const isBun: boolean;
- /**
- * Open a SQLite database. Works with both bun:sqlite and better-sqlite3.
- */
- export declare function openDatabase(path: string): Database;
- /**
- * Common subset of the Database interface used throughout QMD.
- */
- export interface Database {
- exec(sql: string): void;
- prepare(sql: string): Statement;
- loadExtension(path: string): void;
- close(): void;
- /**
- * Wrap a synchronous function in a SQLite transaction. better-sqlite3 opens
- * `BEGIN IMMEDIATE` on entry and `COMMIT` on return; on throw it rolls back
- * AND re-throws. bun:sqlite has the same shape. Used by `generateEmbeddings`
- * to batch per-row INSERTs into a single WAL fsync (i-fkpnar9i).
- */
- transaction<T extends unknown[], R>(fn: (...args: T) => R): (...args: T) => R;
- }
- export interface Statement {
- run(...params: any[]): {
- changes: number;
- lastInsertRowid: number | bigint;
- };
- get(...params: any[]): any;
- all(...params: any[]): any[];
- }
- /**
- * Load the sqlite-vec extension into a database.
- *
- * Throws with platform-specific fix instructions when the extension is
- * unavailable.
- */
- export declare function loadSqliteVec(db: Database): void;
|