@tanstack/db
Version:
A reactive client store for building super fast apps on sync
53 lines (52 loc) • 2.02 kB
text/typescript
import { QueueStrategy, QueueStrategyOptions } from './types.cjs';
/**
* Creates a queue strategy that processes admitted mutations in order with proper serialization.
*
* Unlike other strategies that may drop executions, queue ensures every
* admitted mutation is attempted sequentially. Each transaction commit completes before
* the next one starts. Useful when data consistency is critical and
* every admitted operation must be attempted in order. When a bounded queue is
* full, the returned transaction fails and its optimistic mutation rolls back.
* Cleanup stops new admission. The existing timer drains admitted waiting work
* at its configured pace behind earlier writes. Cleanup does not wait for settlement.
*
* **Error handling behavior:**
* - If a mutation fails, it is NOT automatically retried - the transaction transitions to "failed" state
* - Failed mutations surface their error via `transaction.isPersisted.promise` (which will reject)
* - Subsequent mutations continue processing - a single failure does not block the queue
* - Each mutation is independent; there is no all-or-nothing transaction semantics
*
* @param options - Configuration for queue behavior (FIFO/LIFO, timing, size limits)
* @returns A queue strategy instance
*
* @example
* ```ts
* // FIFO queue - process in order received
* const mutate = usePacedMutations({
* mutationFn: async ({ transaction }) => {
* await api.save(transaction.mutations)
* },
* strategy: queueStrategy({
* wait: 200,
* addItemsTo: 'back',
* getItemsFrom: 'front'
* })
* })
* ```
*
* @example
* ```ts
* // LIFO queue - process most recent first
* const mutate = usePacedMutations({
* mutationFn: async ({ transaction }) => {
* await api.save(transaction.mutations)
* },
* strategy: queueStrategy({
* wait: 200,
* addItemsTo: 'back',
* getItemsFrom: 'back'
* })
* })
* ```
*/
export declare function queueStrategy(options?: QueueStrategyOptions): QueueStrategy;