{"version":3,"file":"multi-cursor-buffer.cjs","names":["#items","#wakeups","#closed"],"sources":["../../../src/client/stream/multi-cursor-buffer.ts"],"sourcesContent":["/**\n * Multi-cursor buffer that supports independent async iterators over a\n * shared append-only log of items.  Each `for await` loop gets its own\n * cursor starting at position 0, so late consumers still see all\n * previously buffered items.\n *\n * Mirrors the in-process multi-cursor buffering used by `GraphRunStream`.\n */\nexport class MultiCursorBuffer<T> implements AsyncIterable<T> {\n  readonly #items: T[] = [];\n  readonly #wakeups = new Set<() => void>();\n  #closed = false;\n\n  push(item: T): void {\n    this.#items.push(item);\n    for (const cb of this.#wakeups) cb();\n    this.#wakeups.clear();\n  }\n\n  close(): void {\n    this.#closed = true;\n    for (const cb of this.#wakeups) cb();\n    this.#wakeups.clear();\n  }\n\n  get length(): number {\n    return this.#items.length;\n  }\n\n  [Symbol.asyncIterator](): AsyncIterator<T> {\n    let cursor = 0;\n    return {\n      next: async (): Promise<IteratorResult<T>> => {\n        while (true) {\n          if (cursor < this.#items.length) {\n            return { done: false, value: this.#items[cursor++] };\n          }\n          if (this.#closed) {\n            return { done: true, value: undefined };\n          }\n          await new Promise<void>((resolve) => {\n            this.#wakeups.add(resolve);\n          });\n        }\n      },\n      return: async () => ({ done: true, value: undefined }),\n    };\n  }\n}\n"],"mappings":";;;;;;;;;AAQA,IAAa,oBAAb,MAA8D;CAC5D,SAAuB,EAAE;CACzB,2BAAoB,IAAI,KAAiB;CACzC,UAAU;CAEV,KAAK,MAAe;AAClB,QAAA,MAAY,KAAK,KAAK;AACtB,OAAK,MAAM,MAAM,MAAA,QAAe,KAAI;AACpC,QAAA,QAAc,OAAO;;CAGvB,QAAc;AACZ,QAAA,SAAe;AACf,OAAK,MAAM,MAAM,MAAA,QAAe,KAAI;AACpC,QAAA,QAAc,OAAO;;CAGvB,IAAI,SAAiB;AACnB,SAAO,MAAA,MAAY;;CAGrB,CAAC,OAAO,iBAAmC;EACzC,IAAI,SAAS;AACb,SAAO;GACL,MAAM,YAAwC;AAC5C,WAAO,MAAM;AACX,SAAI,SAAS,MAAA,MAAY,OACvB,QAAO;MAAE,MAAM;MAAO,OAAO,MAAA,MAAY;MAAW;AAEtD,SAAI,MAAA,OACF,QAAO;MAAE,MAAM;MAAM,OAAO,KAAA;MAAW;AAEzC,WAAM,IAAI,SAAe,YAAY;AACnC,YAAA,QAAc,IAAI,QAAQ;OAC1B;;;GAGN,QAAQ,aAAa;IAAE,MAAM;IAAM,OAAO,KAAA;IAAW;GACtD"}