import { Database } from "bun:sqlite"; /** Minimal in-memory stand-in for a SQLite-backed Durable Object's `ctx.storage`, for unit tests only. */ export function fakeStorage() { const db = new Database(":memory:"); const kv = new Map(); let alarm: number | null = null; const sql = { exec(query: string, ...params: unknown[]) { const rows = db.query(query).all(...(params as never[])) as T[]; return { toArray: () => rows, one: () => { if (rows.length !== 1) throw new Error(`expected one row, got ${rows.length}`); return rows[0]; }, }; }, }; return { sql, get: async (key: string) => kv.get(key) as T | undefined, put: async (key: string, value: unknown) => void kv.set(key, value), delete: async (key: string) => kv.delete(key), deleteAll: async () => kv.clear(), getAlarm: async () => alarm, setAlarm: async (at: number) => void (alarm = at), deleteAlarm: async () => void (alarm = null), transactionSync: (fn: () => T) => fn(), get alarmAt() { return alarm; }, }; }