Skip to content

@statesync/persistence


@statesync/persistence / createPersistenceApplier

Function: createPersistenceApplier()

ts
function createPersistenceApplier<T>(options): DisposablePersistenceApplier<T>;

Defined in: persistence/src/persistence-applier.ts:264

Creates a DisposablePersistenceApplier that wraps an inner applier with automatic persistence to a storage backend.

On every apply() call, the snapshot is forwarded to the inner applier and scheduled for saving to storage (with optional throttle/debounce). The inner applier is always called, even if the persistence write fails.

Lifecycle: Call dispose() when stopping sync to clean up pending timers, event listeners, and BroadcastChannel connections. Optionally call flush() first to ensure pending data is saved.

Type Parameters

Type ParameterDescription
TThe shape of the application state being persisted.

Parameters

ParameterTypeDescription
optionsPersistenceApplierOptions<T>Configuration for the persistence applier including storage backend, inner applier, throttling, compression, and cross-tab sync settings.

Returns

DisposablePersistenceApplier<T>

A disposable persistence applier with event subscription and stats.

Example

typescript
const applier = createPersistenceApplier({
  storage: createLocalStorageBackend({ key: 'my-state' }),
  applier: createPiniaSnapshotApplier(useMyStore()),
  throttling: { debounceMs: 300, maxWaitMs: 2000 },
  schemaVersion: 2,
  ttlMs: 24 * 60 * 60 * 1000, // 24 hours
});

// Subscribe to events
const unsub = applier.on('saveComplete', (snapshot, duration) => {
  console.log(`Saved revision ${snapshot.revision} in ${duration}ms`);
});

// Get stats
console.log(applier.getStats());

// When stopping:
await applier.flush(); // Optional: save pending data
applier.dispose();

Released under the MIT License.