/** * IndexedDB-backed op log. * * Browser-side companion to {@link JsonOpLog}. Designed to satisfy the * {@link OpLog} contract while accommodating IndexedDB's async nature: * * - `load()` opens the database and pulls every persisted op into an * in-memory cache. All subsequent reads serve from cache, so the engine * can continue using synchronous `readAll`/`getLastOp`/`count`. * - `append()` is synchronous from the caller's perspective: it updates the * in-memory cache immediately and enqueues a durable IDB write. The * returned promise from `flush()` resolves once every queued write has * committed. * - Hash dedup happens against the cache before the write is enqueued, so * replayed sync batches never insert the same op twice. * * Default store layout: one database per repo, one object store keyed by * `hash`, with a monotonically-increasing `seq` index so we can replay in * append order on load. Callers may override the IDB factory in tests by * passing `indexedDB` in the constructor options. */ import type { VcsOp } from './types.js'; import type { OpLog } from './op-log.js'; /** * Subset of the IndexedDB Factory we use. Matches both `globalThis.indexedDB` * and `fake-indexeddb`'s `IDBFactory`. Allows test injection without pulling * in the full DOM typings. */ export interface IdbFactoryLike { open(name: string, version?: number): IDBOpenDBRequest; } export interface IdbOpLogOptions { /** Database name. One Trellis repo per database. */ dbName: string; /** * Object store name. Defaults to `ops`. Override if multiple op logs share * a database (e.g. integration journal vs. lane journals). */ storeName?: string; /** * Injected IndexedDB factory. Defaults to `globalThis.indexedDB`. Tests * pass `fake-indexeddb`'s factory directly. */ indexedDB?: IdbFactoryLike; } export declare class IdbOpLog implements OpLog { private ops; private hashes; private db; private nextSeq; private pendingWrites; private readonly dbName; private readonly storeName; private readonly factory; constructor(opts: IdbOpLogOptions); load(): Promise; append(op: VcsOp): void; readAll(): VcsOp[]; getLastOp(): VcsOp | undefined; count(): number; flush(): Promise; close(): Promise; private openDb; private readAllRecords; private putRecord; } //# sourceMappingURL=idb-op-log.d.ts.map