import type { DatabaseSync } from "node:sqlite"; import { formatErrorMessage } from "../../../../src/infra/errors.js"; import { normalizeOptionalString } from "../../../../src/shared/string-coerce.js"; export async function loadSqliteVecExtension(params: { db: DatabaseSync; extensionPath?: string; }): Promise<{ ok: boolean; extensionPath?: string; error?: string }> { try { const sqliteVec = await import("sqlite-vec"); const resolvedPath = normalizeOptionalString(params.extensionPath); const extensionPath = resolvedPath ?? sqliteVec.getLoadablePath(); params.db.enableLoadExtension(true); if (resolvedPath) { params.db.loadExtension(extensionPath); } else { sqliteVec.load(params.db); } return { ok: true, extensionPath }; } catch (err) { const message = formatErrorMessage(err); return { ok: false, error: message }; } }