Skip to content

Commit 131b032

Browse files
vanceingallsclaude
andcommitted
fix(sdk): export adapter types, awaitable flush(), never-coalesce mode
- Export PersistAdapter, PreviewAdapter, PersistVersionEntry from package root — callers can now write typed fakes without reaching into internals - Add flush(): Promise<void> to Composition interface + CompositionImpl — app-close handlers can await a clean drain of the persist queue - coalesceMs <= 0 disables coalescing entirely in createHistory — enables deterministic test scenarios without per-entry timestamp manipulation Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent b828596 commit 131b032

4 files changed

Lines changed: 9 additions & 0 deletions

File tree

packages/sdk/src/history.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ export function createHistory(session: Composition, opts: HistoryOptions = {}):
6868
}
6969

7070
function shouldCoalesce(entry: HistoryEntry, incoming: PatchEvent): boolean {
71+
if (coalesceMs <= 0) return false;
7172
if (opTypesKey(entry.opTypes) !== opTypesKey(incoming.opTypes)) return false;
7273
if (entry.origin !== incoming.origin) return false;
7374
// Coalesce only when the SAME paths are touched (e.g. slider drag on one

packages/sdk/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,5 @@ export type { HistoryModule, HistoryOptions, HistoryEntry } from "./history.js";
3030

3131
export { createPersistQueue } from "./persist-queue.js";
3232
export type { PersistQueueModule, PersistQueueOptions } from "./persist-queue.js";
33+
34+
export type { PersistAdapter, PreviewAdapter, PersistVersionEntry } from "./adapters/types.js";

packages/sdk/src/session.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,10 @@ class CompositionImpl implements Composition {
391391

392392
// ── Lifecycle ────────────────────────────────────────────────────────────────
393393

394+
async flush(): Promise<void> {
395+
await this.persistQueueModule?.flush();
396+
}
397+
394398
dispose(): void {
395399
this.persistQueueModule?.dispose();
396400
this.historyModule?.dispose();

packages/sdk/src/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,5 +252,7 @@ export interface Composition {
252252
applyPatches(patches: readonly JsonPatchOp[], opts?: { origin?: unknown }): void;
253253

254254
// ── Lifecycle ──────────────────────────────────────────────────────────────
255+
/** Drain the persist queue — resolves when any queued write is committed. No-op if no adapter. */
256+
flush(): Promise<void>;
255257
dispose(): void;
256258
}

0 commit comments

Comments
 (0)