Sync / foldkit-sync
Testing without a browser or a server
A Storage needs three members, and the loopback transport takes a handler in
place of a socket:
ts
import { Effect } from 'effect'
import type { Storage } from 'foldkit-sync'
const memoryStorage = (): Storage => {
let state: unknown
return {
load: () => Effect.sync(() => state),
save: next => Effect.sync(() => void (state = structuredClone(next))),
close: Effect.void,
}
}
const program = Effect.gen(function* () {
const replica = yield* TodoSync.openReplica(ReplicaId.make('test'), memoryStorage())
yield* replica.submit(Message.CreatedTodo({ id: 't1', title: 'Milk' }))
yield* replica.synchronize
return yield* replica.status
}).pipe(
Effect.provide(
Sync.transport.loopback((_cursor, pending) => ({
operations: [],
acknowledged: pending.map(operation => operation.opId),
rejected: [],
})),
),
)In Node, Sync.indexedDb(name, new IDBFactory()) from fake-indexeddb tests
the real storage adapter. examples/sync tests every
recovery case below against a real journal.