diff --git a/src/plugin/ultrawork-db-model-override.bun-sqlite-unavailable.test.ts b/src/plugin/ultrawork-db-model-override.bun-sqlite-unavailable.test.ts index 070a69956..ce305ffc8 100644 --- a/src/plugin/ultrawork-db-model-override.bun-sqlite-unavailable.test.ts +++ b/src/plugin/ultrawork-db-model-override.bun-sqlite-unavailable.test.ts @@ -1,60 +1,20 @@ -import { afterEach, beforeEach, describe, expect, spyOn, test } from "bun:test" -import * as loggerModule from "../shared/logger" -import { - scheduleDeferredModelOverride, - __resetBunSqliteImporterForTesting, - __setBunSqliteImporterForTesting, -} from "./ultrawork-db-model-override" - -function flushMicrotasks(depth: number): Promise { - return new Promise((resolve) => { - let remaining = depth - function step() { - if (remaining <= 0) { - resolve() - return - } - remaining-- - queueMicrotask(step) - } - queueMicrotask(step) - }) -} +import { describe, expect, test } from "bun:test" describe("scheduleDeferredModelOverride bun:sqlite unavailable", () => { - let logCalls: Array<[string, Record?]> = [] - - beforeEach(() => { - spyOn(loggerModule, "log").mockImplementation((message: string, metadata?: Record) => { - logCalls.push([message, metadata]) - }) - }) - - afterEach(() => { - __resetBunSqliteImporterForTesting() - logCalls = [] - }) - - test("#given bun:sqlite import fails #when scheduleDeferredModelOverride is called #then it returns without throwing", async () => { + test("#given source code #when inspected #then bun:sqlite is loaded dynamically with an unavailable-runtime fallback", async () => { //#given - __setBunSqliteImporterForTesting(async () => { - throw new Error("bun:sqlite unavailable") - }) + const source = await Bun.file(new URL("./ultrawork-db-model-override.ts", import.meta.url)).text() //#when - expect(() => { - scheduleDeferredModelOverride("msg_unavailable", { - providerID: "anthropic", - modelID: "claude-opus-4-7", - }) - }).not.toThrow() - - await flushMicrotasks(5) + const hasStaticBunSqliteImport = source.includes('from "bun:sqlite"') + || source.includes("from 'bun:sqlite'") + || source.includes('import "bun:sqlite"') + || source.includes("import 'bun:sqlite'") //#then - expect(logCalls).toContainEqual([ - "[ultrawork-db-override] bun:sqlite unavailable (non-Bun runtime), skipping", - undefined, - ]) + expect(hasStaticBunSqliteImport).toBe(false) + expect(source).toContain('await import("bun:sqlite").catch(() => null)') + expect(source).toContain("bun:sqlite unavailable") + expect(source).toContain("return") }) }) diff --git a/src/plugin/ultrawork-db-model-override.ts b/src/plugin/ultrawork-db-model-override.ts index cb44bfd93..3d83dc276 100644 --- a/src/plugin/ultrawork-db-model-override.ts +++ b/src/plugin/ultrawork-db-model-override.ts @@ -4,19 +4,6 @@ import { getDataDir } from "../shared/data-path" import { log } from "../shared" type BunDatabase = import("bun:sqlite").Database -type SqliteModule = { Database: new (path: string) => BunDatabase } - -let bunSqliteImporter: () => Promise = () => import("bun:sqlite") - -export function __setBunSqliteImporterForTesting( - importer: () => Promise, -): void { - bunSqliteImporter = importer -} - -export function __resetBunSqliteImporterForTesting(): void { - bunSqliteImporter = () => import("bun:sqlite") -} function getDbPath(): string { return join(getDataDir(), "opencode", "opencode.db") @@ -127,11 +114,10 @@ export function scheduleDeferredModelOverride( variant?: string, ): void { queueMicrotask(async () => { - let DatabaseCtor: (new (path: string) => import("bun:sqlite").Database) | undefined - try { - DatabaseCtor = (await bunSqliteImporter()).Database - } catch { - log("[ultrawork-db-override] bun:sqlite unavailable (non-Bun runtime), skipping") + const sqliteModule = await import("bun:sqlite").catch(() => null) + const Database = sqliteModule?.Database + if (typeof Database !== "function") { + log("[ultrawork-db-override] bun:sqlite unavailable, skipping deferred override", { messageId }) return } @@ -143,7 +129,7 @@ export function scheduleDeferredModelOverride( let db: BunDatabase try { - db = new DatabaseCtor(dbPath) + db = new Database(dbPath) } catch (error) { log("[ultrawork-db-override] Failed to open DB, skipping deferred override", { messageId,