UNPKG

@tanstack/db

Version:

A reactive client store for building super fast apps on sync

1 lines • 2.84 kB
{"version":3,"file":"serial-pacer.cjs","sources":["../../../src/strategies/serial-pacer.ts"],"sourcesContent":["/**\n * Eligible transactions wait behind current persistence. A new callback for\n * the same transaction replaces its pending work; distinct transactions from\n * managers sharing one strategy retain their own callbacks. `wait` bounds\n * actual starts independently of a strategy's admission timer.\n */\nexport function createSerialPacer(wait: number) {\n const pending = new Map<object, () => Promise<unknown>>()\n const defaultOwner = {}\n let persisting = false\n let nextStartAt = Number.NEGATIVE_INFINITY\n let timeout: ReturnType<typeof setTimeout> | undefined\n\n function drain(): void {\n if (persisting || pending.size === 0) return\n const delay = nextStartAt - Date.now()\n if (delay > 0) {\n timeout ??= setTimeout(() => {\n timeout = undefined\n drain()\n }, delay)\n return\n }\n const [owner, callback] = pending.entries().next().value!\n pending.delete(owner)\n persisting = true\n nextStartAt = Date.now() + wait\n try {\n void callback().then(settled, settled)\n } catch (error) {\n persisting = false\n queueMicrotask(drain)\n throw error\n }\n }\n\n function settled(): void {\n persisting = false\n drain()\n }\n\n return {\n schedule(callback: () => Promise<unknown>, owner = defaultOwner): void {\n pending.set(owner, callback)\n drain()\n },\n hasPending(owner?: object): boolean {\n return owner === undefined ? pending.size > 0 : pending.has(owner)\n },\n cancel(owner?: object): void {\n if (owner === undefined) pending.clear()\n else pending.delete(owner)\n if (pending.size === 0) {\n if (timeout !== undefined) clearTimeout(timeout)\n timeout = undefined\n }\n },\n }\n}\n"],"names":[],"mappings":";;AAMO,SAAS,kBAAkB,MAAc;AAC9C,QAAM,8BAAc,IAAA;AACpB,QAAM,eAAe,CAAA;AACrB,MAAI,aAAa;AACjB,MAAI,cAAc,OAAO;AACzB,MAAI;AAEJ,WAAS,QAAc;AACrB,QAAI,cAAc,QAAQ,SAAS,EAAG;AACtC,UAAM,QAAQ,cAAc,KAAK,IAAA;AACjC,QAAI,QAAQ,GAAG;AACb,kBAAY,WAAW,MAAM;AAC3B,kBAAU;AACV,cAAA;AAAA,MACF,GAAG,KAAK;AACR;AAAA,IACF;AACA,UAAM,CAAC,OAAO,QAAQ,IAAI,QAAQ,QAAA,EAAU,OAAO;AACnD,YAAQ,OAAO,KAAK;AACpB,iBAAa;AACb,kBAAc,KAAK,QAAQ;AAC3B,QAAI;AACF,WAAK,SAAA,EAAW,KAAK,SAAS,OAAO;AAAA,IACvC,SAAS,OAAO;AACd,mBAAa;AACb,qBAAe,KAAK;AACpB,YAAM;AAAA,IACR;AAAA,EACF;AAEA,WAAS,UAAgB;AACvB,iBAAa;AACb,UAAA;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS,UAAkC,QAAQ,cAAoB;AACrE,cAAQ,IAAI,OAAO,QAAQ;AAC3B,YAAA;AAAA,IACF;AAAA,IACA,WAAW,OAAyB;AAClC,aAAO,UAAU,SAAY,QAAQ,OAAO,IAAI,QAAQ,IAAI,KAAK;AAAA,IACnE;AAAA,IACA,OAAO,OAAsB;AAC3B,UAAI,UAAU,OAAW,SAAQ,MAAA;AAAA,UAC5B,SAAQ,OAAO,KAAK;AACzB,UAAI,QAAQ,SAAS,GAAG;AACtB,YAAI,YAAY,OAAW,cAAa,OAAO;AAC/C,kBAAU;AAAA,MACZ;AAAA,IACF;AAAA,EAAA;AAEJ;;"}