vapor-chamber API reference - v1.3.0
    Preparing search index...

    Type Alias PersistOptions<T>

    type PersistOptions<T = any> = {
        key: string;
        getState: () => T;
        serialize?: (state: T) => string;
        deserialize?: (raw: string) => T | null;
        validate?: (state: T) => boolean;
        filter?: (cmd: Command) => boolean;
        storage?: Pick<Storage, "getItem" | "setItem" | "removeItem">;
        coalesce?: boolean;
    }

    Type Parameters

    • T = any
    Index

    Properties

    key: string

    Storage key. Use a unique prefix per feature to avoid collisions.

    'vc:cart', 'vc:user-prefs'
    
    getState: () => T

    Function that returns the current state to be saved after each command.

    serialize?: (state: T) => string

    Serializer. Default: JSON.stringify

    deserialize?: (raw: string) => T | null

    Deserializer. Return null/undefined to skip rehydration. Default: JSON.parse

    validate?: (state: T) => boolean

    Validate deserialized state before returning from load(). Return true to accept, false to reject (load() returns null). Use this to reject stale or structurally invalid persisted state after deploys that change the shape of persisted data.

    persist({
    key: 'vc:cart',
    getState: () => cart.value,
    validate: (state) => Array.isArray(state.items) && typeof state.total === 'number',
    })
    filter?: (cmd: Command) => boolean

    Which actions trigger a save. Default: all successful dispatches.

    storage?: Pick<Storage, "getItem" | "setItem" | "removeItem">

    Storage backend. Default: globalThis.localStorage Pass sessionStorage for session-scoped persistence.

    coalesce?: boolean

    When true, collapse back-to-back saves within the same microtask into one. Trades 1 microtask of latency for one getState() + JSON.stringify() + setItem() cycle per burst, regardless of how many dispatches triggered it.

    Use when the same state is touched by many rapid commands (form input, scroll tracking, batched cart updates). Default: false (every successful dispatch saves immediately, matching pre-v1.2 behavior).

    persist({ key: 'vc:cart', getState: () => cart.value, coalesce: true })