{"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;;"}