@graphrefly/ts 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/LICENSE +21 -0
  2. package/dist/adapters/index.cjs +9015 -0
  3. package/dist/adapters/index.cjs.map +1 -0
  4. package/dist/adapters/index.d.cts +678 -0
  5. package/dist/adapters/index.d.ts +678 -0
  6. package/dist/adapters/index.js +2894 -0
  7. package/dist/adapters/index.js.map +1 -0
  8. package/dist/adapters/observe-storage.cjs +260 -0
  9. package/dist/adapters/observe-storage.cjs.map +1 -0
  10. package/dist/adapters/observe-storage.d.cts +77 -0
  11. package/dist/adapters/observe-storage.d.ts +77 -0
  12. package/dist/adapters/observe-storage.js +161 -0
  13. package/dist/adapters/observe-storage.js.map +1 -0
  14. package/dist/append-log-DisvEReb.d.cts +189 -0
  15. package/dist/append-log-DzKMmjxx.d.ts +189 -0
  16. package/dist/chunk-2ILL7HQI.js +1189 -0
  17. package/dist/chunk-2ILL7HQI.js.map +1 -0
  18. package/dist/chunk-4VLAQHZI.js +330 -0
  19. package/dist/chunk-4VLAQHZI.js.map +1 -0
  20. package/dist/chunk-6PHB5CJS.js +229 -0
  21. package/dist/chunk-6PHB5CJS.js.map +1 -0
  22. package/dist/chunk-COHO25CZ.js +2449 -0
  23. package/dist/chunk-COHO25CZ.js.map +1 -0
  24. package/dist/chunk-D6BG7U6A.js +161 -0
  25. package/dist/chunk-D6BG7U6A.js.map +1 -0
  26. package/dist/chunk-DJC4CHLQ.js +818 -0
  27. package/dist/chunk-DJC4CHLQ.js.map +1 -0
  28. package/dist/chunk-DK554R7P.js +67 -0
  29. package/dist/chunk-DK554R7P.js.map +1 -0
  30. package/dist/chunk-DKP56CSW.js +322 -0
  31. package/dist/chunk-DKP56CSW.js.map +1 -0
  32. package/dist/chunk-G4M3NHRJ.js +688 -0
  33. package/dist/chunk-G4M3NHRJ.js.map +1 -0
  34. package/dist/chunk-GAJW5I5P.js +1 -0
  35. package/dist/chunk-GAJW5I5P.js.map +1 -0
  36. package/dist/chunk-GDL26N2T.js +282 -0
  37. package/dist/chunk-GDL26N2T.js.map +1 -0
  38. package/dist/chunk-GTPCOEOZ.js +741 -0
  39. package/dist/chunk-GTPCOEOZ.js.map +1 -0
  40. package/dist/chunk-H2HTHFVN.js +1 -0
  41. package/dist/chunk-H2HTHFVN.js.map +1 -0
  42. package/dist/chunk-HDRL4VQQ.js +218 -0
  43. package/dist/chunk-HDRL4VQQ.js.map +1 -0
  44. package/dist/chunk-I3IHOHCJ.js +2267 -0
  45. package/dist/chunk-I3IHOHCJ.js.map +1 -0
  46. package/dist/chunk-JIMUDQN3.js +965 -0
  47. package/dist/chunk-JIMUDQN3.js.map +1 -0
  48. package/dist/chunk-JR4IKCR2.js +462 -0
  49. package/dist/chunk-JR4IKCR2.js.map +1 -0
  50. package/dist/chunk-K3FXTC3I.js +165 -0
  51. package/dist/chunk-K3FXTC3I.js.map +1 -0
  52. package/dist/chunk-OOEN33FB.js +65 -0
  53. package/dist/chunk-OOEN33FB.js.map +1 -0
  54. package/dist/chunk-PKVBHGBM.js +554 -0
  55. package/dist/chunk-PKVBHGBM.js.map +1 -0
  56. package/dist/chunk-RIIOUTGM.js +1857 -0
  57. package/dist/chunk-RIIOUTGM.js.map +1 -0
  58. package/dist/chunk-SCRFRCGR.js +33 -0
  59. package/dist/chunk-SCRFRCGR.js.map +1 -0
  60. package/dist/chunk-SWTLEQL6.js +53 -0
  61. package/dist/chunk-SWTLEQL6.js.map +1 -0
  62. package/dist/chunk-SZAETNNA.js +1 -0
  63. package/dist/chunk-SZAETNNA.js.map +1 -0
  64. package/dist/chunk-TEW47IVR.js +49 -0
  65. package/dist/chunk-TEW47IVR.js.map +1 -0
  66. package/dist/chunk-Y3ZLRGHC.js +1482 -0
  67. package/dist/chunk-Y3ZLRGHC.js.map +1 -0
  68. package/dist/chunk-Z2ANQ6JW.js +149 -0
  69. package/dist/chunk-Z2ANQ6JW.js.map +1 -0
  70. package/dist/codec-BB7p8fJc.d.cts +38 -0
  71. package/dist/codec-BB7p8fJc.d.ts +38 -0
  72. package/dist/composition/index.cjs +2505 -0
  73. package/dist/composition/index.cjs.map +1 -0
  74. package/dist/composition/index.d.cts +95 -0
  75. package/dist/composition/index.d.ts +95 -0
  76. package/dist/composition/index.js +19 -0
  77. package/dist/composition/index.js.map +1 -0
  78. package/dist/core/index.cjs +2475 -0
  79. package/dist/core/index.cjs.map +1 -0
  80. package/dist/core/index.d.cts +25 -0
  81. package/dist/core/index.d.ts +25 -0
  82. package/dist/core/index.js +74 -0
  83. package/dist/core/index.js.map +1 -0
  84. package/dist/cqrs/index.cjs +595 -0
  85. package/dist/cqrs/index.cjs.map +1 -0
  86. package/dist/cqrs/index.d.cts +200 -0
  87. package/dist/cqrs/index.d.ts +200 -0
  88. package/dist/cqrs/index.js +557 -0
  89. package/dist/cqrs/index.js.map +1 -0
  90. package/dist/data-structures/index.cjs +4277 -0
  91. package/dist/data-structures/index.cjs.map +1 -0
  92. package/dist/data-structures/index.d.cts +22 -0
  93. package/dist/data-structures/index.d.ts +22 -0
  94. package/dist/data-structures/index.js +31 -0
  95. package/dist/data-structures/index.js.map +1 -0
  96. package/dist/describe-BZb7AS2y.d.ts +57 -0
  97. package/dist/describe-Ciu8SUnN.d.cts +57 -0
  98. package/dist/graph/index.cjs +7832 -0
  99. package/dist/graph/index.cjs.map +1 -0
  100. package/dist/graph/index.d.cts +251 -0
  101. package/dist/graph/index.d.ts +251 -0
  102. package/dist/graph/index.js +131 -0
  103. package/dist/graph/index.js.map +1 -0
  104. package/dist/graph-DfdF9zy4.d.ts +666 -0
  105. package/dist/graph-s23RbbFO.d.cts +666 -0
  106. package/dist/index-CAEmLCYF.d.cts +166 -0
  107. package/dist/index-SnzZu3x7.d.ts +166 -0
  108. package/dist/index.cjs +15409 -0
  109. package/dist/index.cjs.map +1 -0
  110. package/dist/index.d.cts +23 -0
  111. package/dist/index.d.ts +23 -0
  112. package/dist/index.js +582 -0
  113. package/dist/index.js.map +1 -0
  114. package/dist/messages-BZqrGGm1.d.cts +55 -0
  115. package/dist/messages-BZqrGGm1.d.ts +55 -0
  116. package/dist/messaging/index.cjs +818 -0
  117. package/dist/messaging/index.cjs.map +1 -0
  118. package/dist/messaging/index.d.cts +235 -0
  119. package/dist/messaging/index.d.ts +235 -0
  120. package/dist/messaging/index.js +767 -0
  121. package/dist/messaging/index.js.map +1 -0
  122. package/dist/observe-event-log-0SVsx7JG.d.cts +88 -0
  123. package/dist/observe-event-log-Dnm76owp.d.ts +88 -0
  124. package/dist/operators/index.cjs +3774 -0
  125. package/dist/operators/index.cjs.map +1 -0
  126. package/dist/operators/index.d.cts +308 -0
  127. package/dist/operators/index.d.ts +308 -0
  128. package/dist/operators/index.js +112 -0
  129. package/dist/operators/index.js.map +1 -0
  130. package/dist/orchestration/index.cjs +3541 -0
  131. package/dist/orchestration/index.cjs.map +1 -0
  132. package/dist/orchestration/index.d.cts +302 -0
  133. package/dist/orchestration/index.d.ts +302 -0
  134. package/dist/orchestration/index.js +1004 -0
  135. package/dist/orchestration/index.js.map +1 -0
  136. package/dist/patterns/index.cjs +1045 -0
  137. package/dist/patterns/index.cjs.map +1 -0
  138. package/dist/patterns/index.d.cts +39 -0
  139. package/dist/patterns/index.d.ts +39 -0
  140. package/dist/patterns/index.js +33 -0
  141. package/dist/patterns/index.js.map +1 -0
  142. package/dist/reactive-collection-BxBqtIOE.d.cts +344 -0
  143. package/dist/reactive-collection-Cb1II1Fi.d.ts +344 -0
  144. package/dist/reactive-collection-storage-BNiEc-Gd.d.ts +217 -0
  145. package/dist/reactive-collection-storage-D-KmjE0J.d.cts +217 -0
  146. package/dist/reactive-map-BcB4KsQR.d.ts +256 -0
  147. package/dist/reactive-map-D-g3dv8I.d.cts +256 -0
  148. package/dist/read-through-B1CYPfq_.d.cts +82 -0
  149. package/dist/read-through-DwyJhGs1.d.ts +82 -0
  150. package/dist/render/index.cjs +250 -0
  151. package/dist/render/index.cjs.map +1 -0
  152. package/dist/render/index.d.cts +58 -0
  153. package/dist/render/index.d.ts +58 -0
  154. package/dist/render/index.js +20 -0
  155. package/dist/render/index.js.map +1 -0
  156. package/dist/resilience-Dig3Q7n0.d.cts +45 -0
  157. package/dist/resilience-Dig3Q7n0.d.ts +45 -0
  158. package/dist/semantic-memory-graph-BYoIlP35.d.cts +356 -0
  159. package/dist/semantic-memory-graph-CxyXLms3.d.ts +356 -0
  160. package/dist/solutions/index.cjs +3249 -0
  161. package/dist/solutions/index.cjs.map +1 -0
  162. package/dist/solutions/index.d.cts +520 -0
  163. package/dist/solutions/index.d.ts +520 -0
  164. package/dist/solutions/index.js +31 -0
  165. package/dist/solutions/index.js.map +1 -0
  166. package/dist/sources/browser.cjs +3095 -0
  167. package/dist/sources/browser.cjs.map +1 -0
  168. package/dist/sources/browser.d.cts +39 -0
  169. package/dist/sources/browser.d.ts +39 -0
  170. package/dist/sources/browser.js +137 -0
  171. package/dist/sources/browser.js.map +1 -0
  172. package/dist/sources/index.cjs +3021 -0
  173. package/dist/sources/index.cjs.map +1 -0
  174. package/dist/sources/index.d.cts +7 -0
  175. package/dist/sources/index.d.ts +7 -0
  176. package/dist/sources/index.js +63 -0
  177. package/dist/sources/index.js.map +1 -0
  178. package/dist/sources/node.cjs +675 -0
  179. package/dist/sources/node.cjs.map +1 -0
  180. package/dist/sources/node.d.cts +109 -0
  181. package/dist/sources/node.d.ts +109 -0
  182. package/dist/sources/node.js +639 -0
  183. package/dist/sources/node.js.map +1 -0
  184. package/dist/storage/browser.cjs +777 -0
  185. package/dist/storage/browser.cjs.map +1 -0
  186. package/dist/storage/browser.d.cts +40 -0
  187. package/dist/storage/browser.d.ts +40 -0
  188. package/dist/storage/browser.js +275 -0
  189. package/dist/storage/browser.js.map +1 -0
  190. package/dist/storage/index.cjs +1989 -0
  191. package/dist/storage/index.cjs.map +1 -0
  192. package/dist/storage/index.d.cts +92 -0
  193. package/dist/storage/index.d.ts +92 -0
  194. package/dist/storage/index.js +161 -0
  195. package/dist/storage/index.js.map +1 -0
  196. package/dist/storage/node.cjs +898 -0
  197. package/dist/storage/node.cjs.map +1 -0
  198. package/dist/storage/node.d.cts +66 -0
  199. package/dist/storage/node.d.ts +66 -0
  200. package/dist/storage/node.js +402 -0
  201. package/dist/storage/node.js.map +1 -0
  202. package/dist/testing/index.cjs +95 -0
  203. package/dist/testing/index.cjs.map +1 -0
  204. package/dist/testing/index.d.cts +20 -0
  205. package/dist/testing/index.d.ts +20 -0
  206. package/dist/testing/index.js +8 -0
  207. package/dist/testing/index.js.map +1 -0
  208. package/dist/types-bNMSWKqF.d.cts +732 -0
  209. package/dist/types-h12mNYbq.d.ts +732 -0
  210. package/package.json +250 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/graph/sources.ts"],"sourcesContent":["/**\n * Async + sync sources (binding-layer sugar, D43 / D40 / feedback_async_sources_binding_layer).\n *\n * Sources are depless {@link Operator}`<never, T>` specs built on the `producer`/`node` path:\n * the body runs ONCE on activation (node `_activate`), schedules its work, and emits later via\n * the captured `ctx.down` (an external tier-3 emit → the leading DIRTY is synthesized for it,\n * R-dirty-before-data). Async lives ONLY here (R-no-raw-async / F-SYNC-CORE): `setTimeout` /\n * `Promise` / `for await` are confined to source bodies; the wave core stays sync. Cleanup is\n * `ctx.onDeactivation` (D28), NOT a returned object. Per-language (D6/D24), never in parity.\n *\n * Instantiate via `g.initNode(timer(1000), [])` (graph-bound, inspectable) or\n * {@link initNode}(timer(1000), []) (bare). Pool/pause defaults (D43): timer/interval =\n * sync + pausable:false (keep producing through PAUSE); fromPromise/fromAsyncIter = async\n * (default pausable, so a paused source buffers its late emits — R-async-paused).\n */\n\nimport type { Ctx } from \"../ctx/types.js\";\nimport type { Node, NodeOptions } from \"../node/node.js\";\nimport { errorPayload } from \"../protocol/messages.js\";\nimport { toCheckpointJson } from \"./checkpoint.js\";\nimport type {\n\tDriverCancel,\n\tDriverResult,\n\tHttpRequest,\n\tHttpResponse,\n\tProcessCommand,\n\tProcessResult,\n\tSseDriverEvent,\n\tSseEvent,\n\tSseRequest,\n\tWebhookDriverEvent,\n\tWebhookEvent,\n\tWebhookRegistration,\n\tWebSocketDriverEvent,\n\tWebSocketEvent,\n\tWebSocketRequest,\n} from \"./environment.js\";\nimport { initNode, type Operator } from \"./operators.js\";\n\n/**\n * Values accepted by {@link fromAny}: an existing Node, a Promise, an (a)sync iterable, or a\n * bare scalar. The universal coercion target for higher-order operators (CSP-2.7).\n */\nexport type NodeInput<T> = Node<T> | PromiseLike<T> | AsyncIterable<T> | Iterable<T> | T;\n\n/** Host-boundary options for {@link singleFromAny}. */\nexport interface SingleFromAnyOptions<K> {\n\t/**\n\t * Map a caller key to the in-flight dedupe key. Defaults to key identity; object keys dedupe only\n\t * when the same object reference is reused. Return a stable string/canonical value for structural\n\t * object-key dedupe.\n\t */\n\tkeyOf?: (key: K) => unknown;\n\t/** Treat a sync iterable result as a stream and take its first item. Defaults to scalar value. */\n\titer?: boolean;\n}\n\n/**\n * Internal: build a depless source spec. `setup` runs once on activation; its returned fn (if\n * any) is registered as the deactivation cleanup (clear timers / abort). `setup` schedules the\n * async work and emits via `ctx.down` — synchronously (sync sources) or later (async sources).\n */\nfunction source<T>(\n\tfactory: string,\n\t// biome-ignore lint/suspicious/noConfusingVoidType: setup returns a cleanup fn OR nothing — the void arm keeps no-return source bodies (e.g. `of`/`fromIter`) ergonomic, same idiom as EffectFn.\n\tsetup: (ctx: Ctx) => void | (() => void),\n\topts?: Partial<NodeOptions<T>>,\n): Operator<never, T> {\n\treturn {\n\t\tfactory,\n\t\topts,\n\t\tbody: (ctx) => {\n\t\t\tlet cleanup: undefined | (() => void);\n\t\t\tlet deactivated = false;\n\t\t\tctx.onDeactivation(() => {\n\t\t\t\tdeactivated = true;\n\t\t\t\tif (typeof cleanup === \"function\") cleanup();\n\t\t\t});\n\t\t\tconst maybeCleanup = setup(ctx);\n\t\t\tcleanup = typeof maybeCleanup === \"function\" ? maybeCleanup : undefined;\n\t\t\tif (deactivated && typeof cleanup === \"function\") cleanup();\n\t\t},\n\t};\n}\n\nfunction assertNonEmptyString(value: string, label: string): void {\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new TypeError(`${label} must be a non-empty string`);\n\t}\n}\n\nfunction cleanupDriverWork(\n\tactive: { value: boolean },\n\tcancelSlot: { value: DriverCancel | undefined },\n): void {\n\tactive.value = false;\n\tconst cancel = cancelSlot.value;\n\tcancelSlot.value = undefined;\n\tif (cancel !== undefined) runDriverCancel(cancel);\n}\n\nfunction installDriverCancel(\n\tactive: { value: boolean },\n\tcancelSlot: { value: DriverCancel | undefined },\n\tcancel: DriverCancel,\n): void {\n\tif (active.value) cancelSlot.value = cancel;\n\telse runDriverCancel(cancel);\n}\n\nfunction runDriverCancel(cancel: DriverCancel): void {\n\ttry {\n\t\tcancel();\n\t} catch {\n\t\t// Driver cleanup is best-effort: it must not suppress graph-visible terminal delivery.\n\t}\n}\n\nfunction driverOneShotSource<T>(\n\tfactory: string,\n\tmissing: string,\n\tstart: (ctx: Ctx, callback: (result: DriverResult<T>) => void) => DriverCancel | undefined,\n): Operator<never, T> {\n\treturn source<T>(\n\t\tfactory,\n\t\t(ctx) => {\n\t\t\tconst active = { value: true };\n\t\t\tconst cancelSlot: { value: DriverCancel | undefined } = { value: undefined };\n\t\t\tconst callback = (result: DriverResult<T>) => {\n\t\t\t\tif (!active.value) return;\n\t\t\t\tcleanupDriverWork(active, cancelSlot);\n\t\t\t\tif (result.ok) ctx.down([[\"DATA\", result.value], [\"COMPLETE\"]]);\n\t\t\t\telse ctx.down([[\"ERROR\", errorPayload(result.error)]]);\n\t\t\t};\n\t\t\tlet cancel: DriverCancel | undefined;\n\t\t\ttry {\n\t\t\t\tcancel = start(ctx, callback);\n\t\t\t} catch (e) {\n\t\t\t\tactive.value = false;\n\t\t\t\tctx.down([[\"ERROR\", errorPayload(e)]]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (cancel === undefined) {\n\t\t\t\tactive.value = false;\n\t\t\t\tctx.down([[\"ERROR\", missing]]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tinstallDriverCancel(active, cancelSlot, cancel);\n\t\t\treturn () => cleanupDriverWork(active, cancelSlot);\n\t\t},\n\t\t{ pool: \"async\", pausable: false },\n\t);\n}\n\nfunction driverStreamSource<T, E extends { readonly kind: string }>(\n\tfactory: string,\n\tmissing: string,\n\tstart: (ctx: Ctx, callback: (event: E) => void) => DriverCancel | undefined,\n\tdataOf: (event: E) => T | undefined,\n\terrorOf: (event: E) => unknown,\n): Operator<never, T> {\n\treturn source<T>(\n\t\tfactory,\n\t\t(ctx) => {\n\t\t\tconst active = { value: true };\n\t\t\tconst cancelSlot: { value: DriverCancel | undefined } = { value: undefined };\n\t\t\tconst callback = (event: E) => {\n\t\t\t\tif (!active.value) return;\n\t\t\t\tif (event.kind === \"event\") {\n\t\t\t\t\tconst value = dataOf(event);\n\t\t\t\t\tif (value !== undefined) ctx.down([[\"DATA\", value]]);\n\t\t\t\t} else if (event.kind === \"error\") {\n\t\t\t\t\tcleanupDriverWork(active, cancelSlot);\n\t\t\t\t\tctx.down([[\"ERROR\", errorPayload(errorOf(event))]]);\n\t\t\t\t} else if (event.kind === \"complete\") {\n\t\t\t\t\tcleanupDriverWork(active, cancelSlot);\n\t\t\t\t\tctx.down([[\"COMPLETE\"]]);\n\t\t\t\t}\n\t\t\t};\n\t\t\tlet cancel: DriverCancel | undefined;\n\t\t\ttry {\n\t\t\t\tcancel = start(ctx, callback);\n\t\t\t} catch (e) {\n\t\t\t\tactive.value = false;\n\t\t\t\tctx.down([[\"ERROR\", errorPayload(e)]]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (cancel === undefined) {\n\t\t\t\tactive.value = false;\n\t\t\t\tctx.down([[\"ERROR\", missing]]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tinstallDriverCancel(active, cancelSlot, cancel);\n\t\t\treturn () => cleanupDriverWork(active, cancelSlot);\n\t\t},\n\t\t{ pool: \"async\", pausable: false },\n\t);\n}\n\nfunction isNode(x: unknown): x is Node {\n\treturn (\n\t\tx != null &&\n\t\ttypeof x === \"object\" &&\n\t\t\"cache\" in x &&\n\t\ttypeof (x as Node).subscribe === \"function\"\n\t);\n}\n\nfunction isThenable(x: unknown): x is PromiseLike<unknown> {\n\treturn x != null && typeof (x as PromiseLike<unknown>).then === \"function\";\n}\n\nfunction isAsyncIterable<T>(x: unknown): x is AsyncIterable<T> {\n\treturn (\n\t\tx !== null &&\n\t\tx !== undefined &&\n\t\ttypeof (x as { [Symbol.asyncIterator]?: unknown })[Symbol.asyncIterator] === \"function\"\n\t);\n}\n\nfunction isIterable<T>(x: unknown): x is Iterable<T> {\n\treturn (\n\t\tx !== null &&\n\t\tx !== undefined &&\n\t\ttypeof (x as { [Symbol.iterator]?: unknown })[Symbol.iterator] === \"function\"\n\t);\n}\n\n/** Options shared by async/timer sources: an optional AbortSignal → ERROR on abort. */\nexport interface AsyncSourceOpts {\n\tsignal?: AbortSignal;\n}\n\nexport interface TimerSourceOpts extends AsyncSourceOpts {\n\tperiod?: number;\n}\n\n/** Options for {@link fromCron}. */\nexport interface FromCronOptions extends AsyncSourceOpts {\n\t/** Cron matcher polling interval in milliseconds. Default: 60_000. */\n\ttickMs?: number;\n\t/**\n\t * Emitted value shape. `timestamp_ns` is a decimal string so it cannot lose precision as a\n\t * JavaScript number; use `timestamp_ms` when numeric millisecond precision is enough.\n\t */\n\toutput?: \"date\" | \"timestamp_ms\" | \"timestamp_ns\";\n}\n\n/** Minimal five-field cron schedule: minute hour day-of-month month day-of-week. */\nexport interface CronSchedule {\n\treadonly minutes: ReadonlySet<number>;\n\treadonly hours: ReadonlySet<number>;\n\treadonly daysOfMonth: ReadonlySet<number>;\n\treadonly months: ReadonlySet<number>;\n\treadonly daysOfWeek: ReadonlySet<number>;\n}\n\n/** DOM/EventEmitter-style target accepted by {@link fromEvent}. */\nexport interface EventTargetLike {\n\taddEventListener(\n\t\ttype: string,\n\t\tlistener: (event: unknown) => void,\n\t\toptions?: EventListenerOptionsLike,\n\t): void;\n\tremoveEventListener(\n\t\ttype: string,\n\t\tlistener: (event: unknown) => void,\n\t\toptions?: EventListenerOptionsLike,\n\t): void;\n}\n\nexport interface EventListenerOptionsLike {\n\tcapture?: boolean;\n\tpassive?: boolean;\n\tonce?: boolean;\n}\n\nexport type FromEventOptions = EventListenerOptionsLike;\n\n/** Host push registration callback accepted by {@link fromPushNotification}. */\nexport type PushUnsubscribe = () => void;\nexport type PushRegister<T> = (deliver: (payload: T) => void) => PushUnsubscribe | undefined;\n\nfunction parseCronField(field: string, min: number, max: number): Set<number> {\n\tif (field.length === 0) throw new Error(\"Invalid cron field: empty\");\n\tconst out = new Set<number>();\n\tfor (const part of field.split(\",\")) {\n\t\tif (part.length === 0) throw new Error(`Invalid cron field: ${field}`);\n\t\tconst stepParts = part.split(\"/\");\n\t\tif (stepParts.length > 2) throw new Error(`Invalid cron step: ${part}`);\n\t\tconst [range, stepText] = stepParts;\n\t\tif (range == null || range.length === 0) throw new Error(`Invalid cron field: ${field}`);\n\t\tif (stepText === \"\") throw new Error(`Invalid cron step: ${part}`);\n\t\tconst step = stepText == null ? 1 : parseCronInt(stepText, `Invalid cron step: ${part}`);\n\t\tif (step < 1) throw new Error(`Invalid cron step: ${part}`);\n\n\t\tlet start: number;\n\t\tlet end: number;\n\t\tif (range === \"*\") {\n\t\t\tstart = min;\n\t\t\tend = max;\n\t\t} else if (range.includes(\"-\")) {\n\t\t\tconst [a, b, extra] = range.split(\"-\");\n\t\t\tif (extra !== undefined || a === \"\" || b === \"\")\n\t\t\t\tthrow new Error(`Invalid cron field: ${field}`);\n\t\t\tstart = parseCronInt(a, `Invalid cron field: ${field}`);\n\t\t\tend = parseCronInt(b, `Invalid cron field: ${field}`);\n\t\t} else {\n\t\t\tstart = parseCronInt(range, `Invalid cron field: ${field}`);\n\t\t\tend = start;\n\t\t}\n\n\t\tif (!Number.isInteger(start) || !Number.isInteger(end)) {\n\t\t\tthrow new Error(`Invalid cron field: ${field}`);\n\t\t}\n\t\tif (start < min || end > max) {\n\t\t\tthrow new RangeError(`Cron field out of range: ${field} (${min}-${max})`);\n\t\t}\n\t\tif (start > end) throw new Error(`Invalid cron range: ${start}-${end} in ${field}`);\n\t\tfor (let i = start; i <= end; i += step) out.add(i);\n\t}\n\treturn out;\n}\n\nfunction parseCronInt(text: string, message: string): number {\n\tif (!/^\\d+$/.test(text)) throw new Error(message);\n\tconst value = Number.parseInt(text, 10);\n\tif (!Number.isSafeInteger(value)) throw new Error(message);\n\treturn value;\n}\n\n/** Parse a standard five-field cron expression. */\nexport function parseCron(expr: string): CronSchedule {\n\tconst parts = expr.trim().split(/\\s+/);\n\tif (parts.length !== 5 || parts.some((part) => part.length === 0)) {\n\t\tthrow new Error(`Invalid cron: expected 5 fields, got ${parts.length}`);\n\t}\n\treturn {\n\t\tminutes: parseCronField(parts[0], 0, 59),\n\t\thours: parseCronField(parts[1], 0, 23),\n\t\tdaysOfMonth: parseCronField(parts[2], 1, 31),\n\t\tmonths: parseCronField(parts[3], 1, 12),\n\t\tdaysOfWeek: parseCronField(parts[4], 0, 6),\n\t};\n}\n\n/** Test whether a local Date matches a parsed cron schedule. */\nexport function matchesCron(schedule: CronSchedule, date: Date): boolean {\n\treturn (\n\t\tschedule.minutes.has(date.getMinutes()) &&\n\t\tschedule.hours.has(date.getHours()) &&\n\t\tschedule.daysOfMonth.has(date.getDate()) &&\n\t\tschedule.months.has(date.getMonth() + 1) &&\n\t\tschedule.daysOfWeek.has(date.getDay())\n\t);\n}\n\nfunction cronMinuteKey(date: Date): string {\n\treturn `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}-${date.getHours()}-${date.getMinutes()}`;\n}\n\nfunction dateToTimestampNs(date: Date): string {\n\treturn (BigInt(date.getTime()) * 1_000_000n).toString();\n}\n\nexport function fromCron(\n\texpr: string,\n\topts: FromCronOptions & { output: \"date\" },\n): Operator<never, Date>;\nexport function fromCron(\n\texpr: string,\n\topts: FromCronOptions & { output: \"timestamp_ms\" },\n): Operator<never, number>;\nexport function fromCron(\n\texpr: string,\n\topts?: FromCronOptions & { output?: \"timestamp_ns\" },\n): Operator<never, string>;\nexport function fromCron(\n\texpr: string,\n\topts?: FromCronOptions,\n): Operator<never, Date | number | string>;\nexport function fromCron(\n\texpr: string,\n\topts: FromCronOptions = {},\n): Operator<never, Date | number | string> {\n\tconst schedule = parseCron(expr);\n\tconst { tickMs = 60_000, output = \"timestamp_ns\", signal } = opts;\n\tif (!Number.isFinite(tickMs) || tickMs <= 0) {\n\t\tthrow new RangeError(\"fromCron: tickMs must be a positive finite number\");\n\t}\n\treturn source<Date | number | string>(\n\t\t\"fromCron\",\n\t\t(ctx) => {\n\t\t\tlet done = false;\n\t\t\tlet lastFiredKey: string | undefined;\n\t\t\tlet intervalId: ReturnType<typeof setInterval> | undefined;\n\t\t\tconst cleanup = () => {\n\t\t\t\tdone = true;\n\t\t\t\tif (intervalId !== undefined) clearInterval(intervalId);\n\t\t\t\tintervalId = undefined;\n\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t};\n\t\t\tconst onAbort = () => {\n\t\t\t\tif (done) return;\n\t\t\t\tcleanup();\n\t\t\t\tctx.down([[\"ERROR\", errorPayload(signal?.reason)]]);\n\t\t\t};\n\t\t\tconst emitNow = (now: Date) => {\n\t\t\t\tif (output === \"date\") ctx.down([[\"DATA\", now]]);\n\t\t\t\telse if (output === \"timestamp_ms\") ctx.down([[\"DATA\", now.getTime()]]);\n\t\t\t\telse ctx.down([[\"DATA\", dateToTimestampNs(now)]]);\n\t\t\t};\n\t\t\tconst check = () => {\n\t\t\t\tif (done) return;\n\t\t\t\tconst now = new Date();\n\t\t\t\tconst key = cronMinuteKey(now);\n\t\t\t\tif (key !== lastFiredKey && matchesCron(schedule, now)) {\n\t\t\t\t\tlastFiredKey = key;\n\t\t\t\t\temitNow(now);\n\t\t\t\t}\n\t\t\t};\n\t\t\tif (signal?.aborted) {\n\t\t\t\tonAbort();\n\t\t\t\treturn cleanup;\n\t\t\t}\n\t\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\tcheck();\n\t\t\tintervalId = setInterval(check, tickMs);\n\t\t\treturn cleanup;\n\t\t},\n\t\t{ pool: \"sync\", pausable: false },\n\t);\n}\n\nexport function runProcess(\n\tprogram: string,\n\targs: readonly string[] = [],\n): Operator<never, ProcessResult> {\n\treturn runProcessWithOptions({ program, args });\n}\n\nexport function fromProcess(\n\tprogram: string,\n\targs: readonly string[] = [],\n): Operator<never, ProcessResult> {\n\treturn processSource(\"fromProcess\", { program, args });\n}\n\nexport function runProcessWithOptions(command: ProcessCommand): Operator<never, ProcessResult> {\n\treturn processSource(\"runProcess\", command);\n}\n\nfunction processSource(factory: string, command: ProcessCommand): Operator<never, ProcessResult> {\n\tassertNonEmptyString(command.program, `${factory}: program`);\n\treturn driverOneShotSource<ProcessResult>(\n\t\tfactory,\n\t\t`${factory}: missing process driver`,\n\t\t(ctx, callback) => ctx.environment().processDriver()?.run(command, callback),\n\t);\n}\n\nexport function fromHttp(url: string): Operator<never, HttpResponse> {\n\treturn fromHttpWithOptions({ method: \"GET\", url });\n}\n\nexport function fromHttpWithOptions(request: HttpRequest): Operator<never, HttpResponse> {\n\tassertNonEmptyString(request.url, \"fromHttp: url\");\n\tassertNonEmptyString(request.method, \"fromHttp: method\");\n\treturn driverOneShotSource<HttpResponse>(\n\t\t\"fromHttp\",\n\t\t\"fromHttp: missing http driver\",\n\t\t(ctx, callback) => ctx.environment().httpDriver()?.request(request, callback),\n\t);\n}\n\nexport function fromSSE(url: string): Operator<never, SseEvent> {\n\treturn fromSSEWithOptions({ url });\n}\n\nexport function fromSSEWithOptions(request: SseRequest): Operator<never, SseEvent> {\n\tassertNonEmptyString(request.url, \"fromSSE: url\");\n\treturn driverStreamSource<SseEvent, SseDriverEvent>(\n\t\t\"fromSSE\",\n\t\t\"fromSSE: missing sse driver\",\n\t\t(ctx, callback) => ctx.environment().sseDriver()?.connect(request, callback),\n\t\t(event) => (event.kind === \"event\" ? event.event : undefined),\n\t\t(event) => (event.kind === \"error\" ? event.error : undefined),\n\t);\n}\n\nexport function fromWebSocket(url: string): Operator<never, WebSocketEvent> {\n\treturn fromWebSocketWithOptions({ url });\n}\n\nexport function fromWebSocketWithOptions(\n\trequest: WebSocketRequest,\n): Operator<never, WebSocketEvent> {\n\tassertNonEmptyString(request.url, \"fromWebSocket: url\");\n\treturn driverStreamSource<WebSocketEvent, WebSocketDriverEvent>(\n\t\t\"fromWebSocket\",\n\t\t\"fromWebSocket: missing websocket driver\",\n\t\t(ctx, callback) => ctx.environment().webSocketDriver()?.connect(request, callback),\n\t\t(event) => (event.kind === \"event\" ? event.event : undefined),\n\t\t(event) => (event.kind === \"error\" ? event.error : undefined),\n\t);\n}\n\nexport function fromWebhook(id: string): Operator<never, WebhookEvent> {\n\treturn fromWebhookWithOptions({ id });\n}\n\nexport function fromWebhookWithOptions(\n\tregistration: WebhookRegistration,\n): Operator<never, WebhookEvent> {\n\tassertNonEmptyString(registration.id, \"fromWebhook: id\");\n\treturn driverStreamSource<WebhookEvent, WebhookDriverEvent>(\n\t\t\"fromWebhook\",\n\t\t\"fromWebhook: missing webhook driver\",\n\t\t(ctx, callback) => ctx.environment().webhookDriver()?.register(registration, callback),\n\t\t(event) => (event.kind === \"event\" ? event.event : undefined),\n\t\t(event) => (event.kind === \"error\" ? event.error : undefined),\n\t);\n}\n\nfunction timerSource(factory: string, ms: number, opts?: TimerSourceOpts): Operator<never, number> {\n\tconst { period, signal } = opts ?? {};\n\tconst op = source<number>(\n\t\tfactory,\n\t\t(ctx) => {\n\t\t\tlet done = false;\n\t\t\tlet count = 0;\n\t\t\tlet t: ReturnType<typeof setTimeout> | undefined;\n\t\t\tlet iv: ReturnType<typeof setInterval> | undefined;\n\t\t\tconst cleanup = () => {\n\t\t\t\tdone = true;\n\t\t\t\tif (t !== undefined) clearTimeout(t);\n\t\t\t\tif (iv !== undefined) clearInterval(iv);\n\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t};\n\t\t\tconst onAbort = () => {\n\t\t\t\tif (done) return;\n\t\t\t\tcleanup();\n\t\t\t\tctx.down([[\"ERROR\", errorPayload(signal?.reason)]]);\n\t\t\t};\n\t\t\tconst finish = () => {\n\t\t\t\tif (done) return;\n\t\t\t\tif (period != null) {\n\t\t\t\t\tctx.down([[\"DATA\", count++]]);\n\t\t\t\t\tiv = setInterval(() => {\n\t\t\t\t\t\tif (done) return;\n\t\t\t\t\t\tctx.down([[\"DATA\", count++]]);\n\t\t\t\t\t}, period);\n\t\t\t\t} else {\n\t\t\t\t\t// One-shot: DATA then COMPLETE in one wave (terminal-is-forever).\n\t\t\t\t\tdone = true;\n\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tctx.down([[\"DATA\", count++], [\"COMPLETE\"]]);\n\t\t\t\t}\n\t\t\t};\n\t\t\tif (signal?.aborted) {\n\t\t\t\tonAbort();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\tt = setTimeout(finish, ms);\n\t\t\treturn cleanup;\n\t\t},\n\t\t{ pool: \"sync\", pausable: false },\n\t);\n\tif (factory === \"timer\" && period === undefined && signal === undefined) {\n\t\treturn { ...op, restore: { ref: \"timer\", config: { ms: toCheckpointJson(ms, \"timer.ms\") } } };\n\t}\n\treturn op;\n}\n\n/**\n * Timer source: one-shot (first tick then COMPLETE) or periodic (`{period}` → 0, 1, 2, …).\n * sync pool + pausable:false (a timer keeps producing through PAUSE, R-pause-modes). Emits the\n * tick counter from 0; deactivation clears the timers.\n */\nexport function timer(ms: number, opts?: TimerSourceOpts): Operator<never, number> {\n\treturn timerSource(\"timer\", ms, opts);\n}\n\n/** Frozen pure-ts name for {@link timer}; preserves the real factory name in describe(). */\nexport function fromTimer(ms: number, opts?: TimerSourceOpts): Operator<never, number> {\n\treturn timerSource(\"fromTimer\", ms, opts);\n}\n\n/** interval: periodic ticks (0, 1, 2, …), first at `ms`, then every `ms` (RxJS semantics). */\nexport function interval(ms: number): Operator<never, number> {\n\treturn timerSource(\"interval\", ms, { period: ms });\n}\n\n/**\n * Lift a Promise (or thenable) to a single-value stream: one DATA then COMPLETE, or ERROR on\n * rejection. async pool (default pausable → a paused source buffers its late emit). Optional\n * `signal` aborts to ERROR.\n */\nexport function fromPromise<T>(\n\tp: Promise<T> | PromiseLike<T>,\n\topts?: AsyncSourceOpts,\n): Operator<never, T> {\n\tconst signal = opts?.signal;\n\treturn source<T>(\n\t\t\"fromPromise\",\n\t\t(ctx) => {\n\t\t\tlet settled = false;\n\t\t\tconst onAbort = () => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\t// onAbort only runs from a `signal` listener / the `signal.aborted` guard → signal is defined.\n\t\t\t\tctx.down([[\"ERROR\", errorPayload((signal as AbortSignal).reason)]]);\n\t\t\t};\n\t\t\tif (signal?.aborted) {\n\t\t\t\tonAbort();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\tvoid Promise.resolve(p).then(\n\t\t\t\t(v) => {\n\t\t\t\t\tif (settled) return;\n\t\t\t\t\tsettled = true;\n\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tctx.down([[\"DATA\", v], [\"COMPLETE\"]]);\n\t\t\t\t},\n\t\t\t\t(e) => {\n\t\t\t\t\tif (settled) return;\n\t\t\t\t\tsettled = true;\n\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tctx.down([[\"ERROR\", errorPayload(e)]]);\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn () => {\n\t\t\t\tsettled = true;\n\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t};\n\t\t},\n\t\t{ pool: \"async\" },\n\t);\n}\n\n/**\n * Read an async iterable: each value → DATA; COMPLETE when done; ERROR on failure. async pool.\n * Optional `signal` aborts the pump.\n */\nexport function fromAsyncIter<T>(\n\titerable: AsyncIterable<T>,\n\topts?: AsyncSourceOpts,\n): Operator<never, T> {\n\tconst outerSignal = opts?.signal;\n\treturn source<T>(\n\t\t\"fromAsyncIter\",\n\t\t(ctx) => {\n\t\t\tconst ac = new AbortController();\n\t\t\tconst onOuterAbort = () => ac.abort(outerSignal?.reason);\n\t\t\touterSignal?.addEventListener(\"abort\", onOuterAbort, { once: true });\n\t\t\tlet done = false;\n\t\t\tconst pump = async () => {\n\t\t\t\ttry {\n\t\t\t\t\tfor await (const v of iterable) {\n\t\t\t\t\t\tif (ac.signal.aborted) break;\n\t\t\t\t\t\tctx.down([[\"DATA\", v]]);\n\t\t\t\t\t}\n\t\t\t\t\tif (!ac.signal.aborted) ctx.down([[\"COMPLETE\"]]);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (!ac.signal.aborted) ctx.down([[\"ERROR\", errorPayload(e)]]);\n\t\t\t\t} finally {\n\t\t\t\t\tdone = true;\n\t\t\t\t}\n\t\t\t};\n\t\t\tvoid pump();\n\t\t\treturn () => {\n\t\t\t\tif (!done) ac.abort();\n\t\t\t\touterSignal?.removeEventListener(\"abort\", onOuterAbort);\n\t\t\t};\n\t\t},\n\t\t{ pool: \"async\" },\n\t);\n}\n\n/**\n * of: synchronous values — each argument as DATA, then COMPLETE. `of()` is the EMPTY source.\n */\nexport function of<T = never>(...values: T[]): Operator<never, T> {\n\treturn source<T>(\n\t\t\"of\",\n\t\t(ctx) => {\n\t\t\tfor (const value of values) ctx.down([[\"DATA\", value]]);\n\t\t\tctx.down([[\"COMPLETE\"]]);\n\t\t},\n\t\t{ pool: \"sync\" },\n\t);\n}\n\n/** fromIter: a sync iterable — each value → DATA (in order), then COMPLETE, on activation. */\nexport function fromIter<T>(iterable: Iterable<T>): Operator<never, T> {\n\treturn source<T>(\n\t\t\"fromIter\",\n\t\t(ctx) => {\n\t\t\tfor (const v of iterable) ctx.down([[\"DATA\", v]]);\n\t\t\tctx.down([[\"COMPLETE\"]]);\n\t\t},\n\t\t{ pool: \"sync\" },\n\t);\n}\n\n/** EMPTY analogue: complete immediately with no DATA. */\nexport function empty<T = never>(): Operator<never, T> {\n\treturn source<T>(\n\t\t\"empty\",\n\t\t(ctx) => {\n\t\t\tctx.down([[\"COMPLETE\"]]);\n\t\t},\n\t\t{ pool: \"sync\" },\n\t);\n}\n\n/** NEVER analogue: activate and remain silent until deactivation. */\nexport function never<T = never>(): Operator<never, T> {\n\treturn source<T>(\"never\", () => undefined, { pool: \"sync\" });\n}\n\n/** Error source: terminate with ERROR on activation, coercing invalid host-language payloads. */\nexport function throwError(err: unknown): Operator<never, never> {\n\treturn source<never>(\n\t\t\"throwError\",\n\t\t(ctx) => {\n\t\t\tctx.down([[\"ERROR\", errorPayload(err)]]);\n\t\t},\n\t\t{ pool: \"sync\" },\n\t);\n}\n\n/**\n * Wrap a DOM-style event target. Each event becomes DATA; deactivation removes the listener.\n * External callbacks are source boundaries (D43), so no polling or operator-level async leaks in.\n */\nexport function fromEvent<T = unknown>(\n\ttarget: EventTargetLike,\n\ttype: string,\n\topts: FromEventOptions = {},\n): Operator<never, T> {\n\tif (target == null || typeof target.addEventListener !== \"function\") {\n\t\tthrow new TypeError(\"fromEvent: target must implement addEventListener\");\n\t}\n\tif (typeof target.removeEventListener !== \"function\") {\n\t\tthrow new TypeError(\"fromEvent: target must implement removeEventListener\");\n\t}\n\tif (typeof type !== \"string\" || type.length === 0) {\n\t\tthrow new TypeError(\"fromEvent: event type must be a non-empty string\");\n\t}\n\treturn source<T>(\n\t\t\"fromEvent\",\n\t\t(ctx) => {\n\t\t\tlet done = false;\n\t\t\tconst handler = (event: unknown) => {\n\t\t\t\tif (!done) ctx.down([[\"DATA\", event as T]]);\n\t\t\t};\n\t\t\ttarget.addEventListener(type, handler, opts);\n\t\t\treturn () => {\n\t\t\t\tdone = true;\n\t\t\t\ttarget.removeEventListener(type, handler, opts);\n\t\t\t};\n\t\t},\n\t\t{ pool: \"sync\" },\n\t);\n}\n\n/**\n * Wrap a host push transport. The host owns network/native setup; this factory owns reactive\n * delivery and teardown only, preserving async-at-source-boundary discipline.\n */\nexport function fromPushNotification<T = unknown>(register: PushRegister<T>): Operator<never, T> {\n\tif (typeof register !== \"function\") {\n\t\tthrow new TypeError(\"fromPushNotification: register must be a function\");\n\t}\n\treturn source<T>(\n\t\t\"fromPushNotification\",\n\t\t(ctx) => {\n\t\t\tlet done = false;\n\t\t\tconst deliver = (payload: T) => {\n\t\t\t\tif (!done) ctx.down([[\"DATA\", payload]]);\n\t\t\t};\n\t\t\tconst unsubscribe = register(deliver);\n\t\t\treturn () => {\n\t\t\t\tdone = true;\n\t\t\t\tif (typeof unsubscribe === \"function\") unsubscribe();\n\t\t\t};\n\t\t},\n\t\t{ pool: \"sync\" },\n\t);\n}\n\n/**\n * Coerce a {@link NodeInput}`<T>` to a `Node<T>` (D43 — coercion prerequisite for the CSP-2.7\n * higher-order operators). An existing Node passes through; a thenable → {@link fromPromise};\n * an async iterable → {@link fromAsyncIter}; with `{iter:true}` a sync iterable →\n * {@link fromIter}; everything else → {@link of}. Coerced nodes are bare (use\n * `opts.dispatcher` to bind one, default = process-global D26).\n */\nexport function fromAny<T>(\n\tinput: NodeInput<T>,\n\topts: NodeOptions<T> & { iter?: boolean } = {},\n): Node<T> {\n\tif (isNode(input)) return input as Node<T>;\n\tconst { iter, ...nodeOpts } = opts;\n\tif (isThenable(input)) {\n\t\treturn initNode(fromPromise(input as PromiseLike<T>), [], nodeOpts);\n\t}\n\tif (input !== null && input !== undefined) {\n\t\tconst candidate = input as {\n\t\t\t[Symbol.asyncIterator]?: unknown;\n\t\t\t[Symbol.iterator]?: unknown;\n\t\t};\n\t\tif (typeof candidate[Symbol.asyncIterator] === \"function\") {\n\t\t\treturn initNode(fromAsyncIter(input as AsyncIterable<T>), [], nodeOpts);\n\t\t}\n\t\tif (iter === true && typeof candidate[Symbol.iterator] === \"function\") {\n\t\t\treturn initNode(fromIter(input as Iterable<T>), [], nodeOpts);\n\t\t}\n\t}\n\treturn initNode(of(input as T), [], nodeOpts);\n}\n\n/**\n * Resolve the first DATA from a Node as a Promise. This is a host-boundary escape hatch, not a\n * graph operator; do not call it from reactive node bodies. ERROR rejects, and COMPLETE before DATA\n * rejects because no value exists.\n */\nexport function firstValueFrom<T>(source: Node<T>): Promise<T> {\n\treturn new Promise<T>((resolve, reject) => {\n\t\tlet settled = false;\n\t\tlet shouldUnsub = false;\n\t\tlet unsub: (() => void) | undefined;\n\t\tconst finish = (f: () => void): void => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tf();\n\t\t\tif (unsub) {\n\t\t\t\tunsub();\n\t\t\t\tunsub = undefined;\n\t\t\t} else {\n\t\t\t\tshouldUnsub = true;\n\t\t\t}\n\t\t};\n\t\tunsub = source.subscribe((msg) => {\n\t\t\tif (msg[0] === \"DATA\") {\n\t\t\t\tfinish(() => resolve(msg[1] as T));\n\t\t\t} else if (msg[0] === \"ERROR\") {\n\t\t\t\tfinish(() => reject(msg[1]));\n\t\t\t} else if (msg[0] === \"COMPLETE\") {\n\t\t\t\tfinish(() => reject(new Error(\"firstValueFrom: completed without DATA\")));\n\t\t\t} else if (msg[0] === \"TEARDOWN\") {\n\t\t\t\tfinish(() => reject(new Error(\"firstValueFrom: torn down without DATA\")));\n\t\t\t}\n\t\t});\n\t\tif (shouldUnsub) {\n\t\t\tunsub?.();\n\t\t\tunsub = undefined;\n\t\t}\n\t});\n}\n\nfunction singleFromAnyValue<T>(value: T): T {\n\tif (value === undefined) {\n\t\tthrow new TypeError(\"singleFromAny: undefined is the substrate SENTINEL\");\n\t}\n\treturn value;\n}\n\nasync function firstFromAsyncIterable<T>(input: AsyncIterable<T>): Promise<T> {\n\tconst iter = input[Symbol.asyncIterator]();\n\tconst { value, done } = await iter.next();\n\tif (done) {\n\t\tawait iter.return?.();\n\t\tthrow new Error(\"singleFromAny: factory returned empty async iterable\");\n\t}\n\ttry {\n\t\tawait iter.return?.();\n\t} catch {\n\t\t// The first value is the bridge result; close failures after that are cleanup-only.\n\t}\n\treturn value as T;\n}\n\nfunction firstFromIterable<T>(input: Iterable<T>): Promise<T> {\n\tconst iter = input[Symbol.iterator]();\n\tconst { value, done } = iter.next();\n\tif (done) {\n\t\titer.return?.();\n\t\treturn Promise.reject(new Error(\"singleFromAny: factory returned empty iterable\"));\n\t}\n\ttry {\n\t\titer.return?.();\n\t} catch {\n\t\t// The first value is the bridge result; close failures after that are cleanup-only.\n\t}\n\treturn Promise.resolve(value as T);\n}\n\nfunction nodeInputToPromise<T>(input: NodeInput<T>, opts: { iter?: boolean }): Promise<T> {\n\tif (isThenable(input)) return Promise.resolve(input as PromiseLike<T>).then(singleFromAnyValue);\n\tif (isNode(input)) return firstValueFrom(input as Node<T>).then(singleFromAnyValue);\n\tif (isAsyncIterable<T>(input)) return firstFromAsyncIterable(input).then(singleFromAnyValue);\n\tif (opts.iter === true && isIterable<T>(input)) {\n\t\treturn firstFromIterable(input).then(singleFromAnyValue);\n\t}\n\tif (input === undefined) {\n\t\treturn Promise.reject(new TypeError(\"singleFromAny: undefined is the substrate SENTINEL\"));\n\t}\n\treturn Promise.resolve(singleFromAnyValue(input as T));\n}\n\n/**\n * Keyed singleflight over {@link NodeInput}. Concurrent calls with the same key share one Promise;\n * once that input resolves/rejects, the in-flight entry is cleared and a later call re-runs the\n * factory. Host-boundary helper only; it does not create graph topology.\n */\nexport function singleFromAny<K, T>(\n\tfactory: (key: K) => NodeInput<T>,\n\topts: SingleFromAnyOptions<K> = {},\n): (key: K) => Promise<T> {\n\tconst keyOf = opts.keyOf ?? ((key: K): unknown => key);\n\tconst inFlight = new Map<unknown, Promise<T>>();\n\n\treturn (key: K): Promise<T> => {\n\t\tconst dedupeKey = keyOf(key);\n\t\tconst existing = inFlight.get(dedupeKey);\n\t\tif (existing) return existing;\n\n\t\tlet resolvePending!: (value: T) => void;\n\t\tlet rejectPending!: (reason: unknown) => void;\n\t\tlet tracked!: Promise<T>;\n\t\tconst cleanup = (): void => {\n\t\t\tif (inFlight.get(dedupeKey) === tracked) inFlight.delete(dedupeKey);\n\t\t};\n\t\tconst pending = new Promise<T>((resolve, reject) => {\n\t\t\tresolvePending = resolve;\n\t\t\trejectPending = reject;\n\t\t});\n\t\ttracked = pending.then(\n\t\t\t(value) => {\n\t\t\t\tcleanup();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\t(error) => {\n\t\t\t\tcleanup();\n\t\t\t\tthrow error;\n\t\t\t},\n\t\t);\n\t\tinFlight.set(dedupeKey, tracked);\n\t\ttry {\n\t\t\tnodeInputToPromise(factory(key), opts).then(resolvePending, rejectPending);\n\t\t} catch (e) {\n\t\t\trejectPending(e);\n\t\t}\n\t\treturn tracked;\n\t};\n}\n"],"mappings":"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","names":["source"]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-GAJW5I5P.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,282 @@
1
+ import {
2
+ depBatch,
3
+ depCount,
4
+ depLatest,
5
+ depTerminal,
6
+ isTerminalComplete,
7
+ isTerminalError,
8
+ isTerminalNone,
9
+ terminalErrorValue
10
+ } from "./chunk-SWTLEQL6.js";
11
+
12
+ // src/graph/combinators.ts
13
+ function combine() {
14
+ return {
15
+ factory: "combine",
16
+ opts: { partial: true },
17
+ body: (ctx) => {
18
+ const vals = Array.from({ length: depCount(ctx) }, (_, i) => depLatest(ctx, i));
19
+ if (vals.some((v) => v === void 0)) return;
20
+ ctx.down([["DATA", vals]]);
21
+ }
22
+ };
23
+ }
24
+ var combineLatest = combine;
25
+ function withLatestFrom() {
26
+ return {
27
+ factory: "withLatestFrom",
28
+ opts: { completeWhenDepsComplete: false, terminalAsRealInput: true },
29
+ body: (ctx) => {
30
+ if (isTerminalComplete(depTerminal(ctx, 0))) {
31
+ ctx.down([["COMPLETE"]]);
32
+ return;
33
+ }
34
+ const b0 = depBatch(ctx, 0);
35
+ if (!b0 || b0.length === 0) return;
36
+ const sec = depLatest(ctx, 1);
37
+ if (sec === void 0) return;
38
+ for (const v of b0) ctx.down([["DATA", [v, sec]]]);
39
+ }
40
+ };
41
+ }
42
+ function zip() {
43
+ return {
44
+ factory: "zip",
45
+ opts: { partial: true, completeWhenDepsComplete: false, terminalAsRealInput: true },
46
+ body: (ctx) => {
47
+ const n = depCount(ctx);
48
+ if (n === 0) {
49
+ ctx.down([["COMPLETE"]]);
50
+ return;
51
+ }
52
+ const st = ctx.state.get() ?? {
53
+ queues: Array.from({ length: n }, () => []),
54
+ terminal: new Array(n).fill(false)
55
+ };
56
+ for (let i = 0; i < n; i++) {
57
+ const b = depBatch(ctx, i);
58
+ if (b) for (const v of b) st.queues[i].push(v);
59
+ if (isTerminalComplete(depTerminal(ctx, i))) st.terminal[i] = true;
60
+ }
61
+ while (st.queues.every((q) => q.length > 0)) {
62
+ ctx.down([["DATA", st.queues.map((q) => q.shift())]]);
63
+ }
64
+ ctx.state.set(st);
65
+ for (let i = 0; i < n; i++) {
66
+ if (st.terminal[i] && st.queues[i].length === 0) {
67
+ ctx.down([["COMPLETE"]]);
68
+ return;
69
+ }
70
+ }
71
+ }
72
+ };
73
+ }
74
+ function concat() {
75
+ return {
76
+ factory: "concat",
77
+ opts: { partial: true, completeWhenDepsComplete: false, terminalAsRealInput: true },
78
+ body: (ctx) => {
79
+ const firstBatch = depBatch(ctx, 0);
80
+ const secondBatch = depBatch(ctx, 1);
81
+ const firstTerminal = depTerminal(ctx, 0);
82
+ const secondTerminal = depTerminal(ctx, 1);
83
+ const st = ctx.state.get() ?? {
84
+ phase: 0,
85
+ pending: [],
86
+ secondDone: false
87
+ };
88
+ if (st.phase === 0) {
89
+ if (firstBatch) for (const v of firstBatch) ctx.down([["DATA", v]]);
90
+ if (secondBatch) for (const v of secondBatch) st.pending.push(v);
91
+ if (isTerminalComplete(secondTerminal)) st.secondDone = true;
92
+ if (isTerminalComplete(firstTerminal)) {
93
+ st.phase = 1;
94
+ for (const v of st.pending) ctx.down([["DATA", v]]);
95
+ st.pending = [];
96
+ if (st.secondDone) ctx.down([["COMPLETE"]]);
97
+ }
98
+ } else {
99
+ if (secondBatch) for (const v of secondBatch) ctx.down([["DATA", v]]);
100
+ if (isTerminalComplete(secondTerminal)) ctx.down([["COMPLETE"]]);
101
+ }
102
+ ctx.state.set(st);
103
+ }
104
+ };
105
+ }
106
+ function race() {
107
+ return {
108
+ factory: "race",
109
+ opts: {
110
+ partial: true,
111
+ errorWhenDepsError: false,
112
+ completeWhenDepsComplete: false,
113
+ terminalAsRealInput: true
114
+ },
115
+ body: (ctx) => {
116
+ const n = depCount(ctx);
117
+ const st = ctx.state.get() ?? {
118
+ winner: null,
119
+ terminals: new Array(n).fill(false)
120
+ };
121
+ for (let i = 0; i < n; i++) {
122
+ const terminal = depTerminal(ctx, i);
123
+ if (!isTerminalNone(terminal)) st.terminals[i] = terminal;
124
+ }
125
+ if (st.winner === null) {
126
+ for (let i = 0; i < n; i++) {
127
+ const b = depBatch(ctx, i);
128
+ if (b && b.length > 0) {
129
+ st.winner = i;
130
+ for (const v of b) ctx.down([["DATA", v]]);
131
+ break;
132
+ }
133
+ }
134
+ if (st.winner === null) {
135
+ if (st.terminals.every((t) => !isTerminalNone(t))) {
136
+ ctx.state.set(st);
137
+ ctx.down([["COMPLETE"]]);
138
+ return;
139
+ }
140
+ }
141
+ } else {
142
+ const b = depBatch(ctx, st.winner);
143
+ const terminal = depTerminal(ctx, st.winner);
144
+ if (b) for (const v of b) ctx.down([["DATA", v]]);
145
+ if (isTerminalComplete(terminal)) {
146
+ ctx.state.set(st);
147
+ ctx.down([["COMPLETE"]]);
148
+ return;
149
+ }
150
+ if (isTerminalError(terminal)) {
151
+ ctx.state.set(st);
152
+ ctx.down([["ERROR", terminalErrorValue(terminal)]]);
153
+ return;
154
+ }
155
+ }
156
+ ctx.state.set(st);
157
+ }
158
+ };
159
+ }
160
+ function buffer() {
161
+ return {
162
+ factory: "buffer",
163
+ opts: { partial: true, completeWhenDepsComplete: false, terminalAsRealInput: true },
164
+ body: (ctx) => {
165
+ const sourceBatch = depBatch(ctx, 0);
166
+ const notifierBatch = depBatch(ctx, 1);
167
+ const buf = ctx.state.get() ?? [];
168
+ if (sourceBatch) for (const v of sourceBatch) buf.push(v);
169
+ if (isTerminalComplete(depTerminal(ctx, 0))) {
170
+ if (buf.length > 0) ctx.down([["DATA", [...buf]]]);
171
+ ctx.state.set([]);
172
+ ctx.down([["COMPLETE"]]);
173
+ return;
174
+ }
175
+ if (notifierBatch && notifierBatch.length > 0) {
176
+ ctx.down([["DATA", [...buf]]]);
177
+ ctx.state.set([]);
178
+ return;
179
+ }
180
+ ctx.state.set(buf);
181
+ }
182
+ };
183
+ }
184
+ function bufferCount(count) {
185
+ if (!Number.isInteger(count) || count < 1) {
186
+ throw new RangeError(`bufferCount: count must be a positive integer (got ${count})`);
187
+ }
188
+ return {
189
+ factory: "bufferCount",
190
+ opts: { completeWhenDepsComplete: false, terminalAsRealInput: true },
191
+ body: (ctx) => {
192
+ const b = depBatch(ctx, 0);
193
+ const buf = ctx.state.get() ?? [];
194
+ if (b) {
195
+ for (const v of b) {
196
+ buf.push(v);
197
+ if (buf.length >= count) ctx.down([["DATA", buf.splice(0, buf.length)]]);
198
+ }
199
+ }
200
+ if (isTerminalComplete(depTerminal(ctx, 0))) {
201
+ if (buf.length > 0) ctx.down([["DATA", [...buf]]]);
202
+ ctx.state.set([]);
203
+ ctx.down([["COMPLETE"]]);
204
+ return;
205
+ }
206
+ ctx.state.set(buf);
207
+ }
208
+ };
209
+ }
210
+ function sample() {
211
+ return {
212
+ factory: "sample",
213
+ opts: {
214
+ partial: true,
215
+ completeWhenDepsComplete: false,
216
+ errorWhenDepsError: false,
217
+ terminalAsRealInput: true
218
+ },
219
+ body: (ctx) => {
220
+ const sourceBatch = depBatch(ctx, 0);
221
+ const notifierBatch = depBatch(ctx, 1);
222
+ const sourceTerminal = depTerminal(ctx, 0);
223
+ const notifierTerminal = depTerminal(ctx, 1);
224
+ const st = ctx.state.get() ?? {
225
+ last: void 0,
226
+ sourceDone: false
227
+ };
228
+ if (isTerminalError(sourceTerminal)) {
229
+ ctx.down([["ERROR", terminalErrorValue(sourceTerminal)]]);
230
+ return;
231
+ }
232
+ if (isTerminalError(notifierTerminal)) {
233
+ ctx.down([["ERROR", terminalErrorValue(notifierTerminal)]]);
234
+ return;
235
+ }
236
+ if (sourceBatch) for (const v of sourceBatch) st.last = { v };
237
+ if (isTerminalComplete(sourceTerminal)) {
238
+ st.sourceDone = true;
239
+ st.last = void 0;
240
+ }
241
+ if (isTerminalComplete(notifierTerminal)) {
242
+ ctx.state.set(st);
243
+ ctx.down([["COMPLETE"]]);
244
+ return;
245
+ }
246
+ if (notifierBatch && notifierBatch.length > 0 && st.last !== void 0 && !st.sourceDone) {
247
+ ctx.down([["DATA", st.last.v]]);
248
+ }
249
+ ctx.state.set(st);
250
+ }
251
+ };
252
+ }
253
+ function takeUntil() {
254
+ return {
255
+ factory: "takeUntil",
256
+ opts: { partial: true, completeWhenDepsComplete: false, terminalAsRealInput: true },
257
+ body: (ctx) => {
258
+ const sourceBatch = depBatch(ctx, 0);
259
+ const notifierBatch = depBatch(ctx, 1);
260
+ if (notifierBatch && notifierBatch.length > 0) {
261
+ ctx.down([["COMPLETE"]]);
262
+ return;
263
+ }
264
+ if (sourceBatch) for (const v of sourceBatch) ctx.down([["DATA", v]]);
265
+ if (isTerminalComplete(depTerminal(ctx, 0))) ctx.down([["COMPLETE"]]);
266
+ }
267
+ };
268
+ }
269
+
270
+ export {
271
+ combine,
272
+ combineLatest,
273
+ withLatestFrom,
274
+ zip,
275
+ concat,
276
+ race,
277
+ buffer,
278
+ bufferCount,
279
+ sample,
280
+ takeUntil
281
+ };
282
+ //# sourceMappingURL=chunk-GDL26N2T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/graph/combinators.ts"],"sourcesContent":["/**\n * Multi-source combinators + notifier-driven operators (CSP-2.7 catalog re-derive, D40 / D45).\n *\n * Per-language sugar (D6/D24, never in parity). Each forms topology ONLY via DECLARED deps (D45) —\n * the frozen pure-ts reference (D41) builds these as a producer that calls `subscribeOr` on each\n * source INSIDE the fn body, which is the D45-banned describe island (an edge `describe` cannot\n * show). Re-derived here as static-dep nodes with `partial:true` (fire on any dep, R-first-run-gate\n * off) + `ctx.state` (queue / phase / winner) — so every edge is a real subscription `describe`\n * shows truthfully (D3 / R-edges-derived). Multi-source completion / error reads\n * `depTerminal(ctx, i)` (R-deps-terminal) via `completeWhenDepsComplete:false +\n * terminalAsRealInput:true`.\n *\n * Under D49 (no equals-absorption) `combine` emits a fresh tuple on EVERY contributing wave (no\n * substrate tuple-dedup; the pure-ts `equals` tuple comparator is gone) — pair with\n * `distinctUntilChanged` for opt-in dedup. SENTINEL (\"a dep has never delivered DATA\") is detected\n * via `depLatest(ctx, i) === undefined` (R-sentinel: `undefined` is the global sentinel, `null` is a valid\n * value).\n *\n * NOT re-derived in this cut (flagged): the window family (`window`/`windowCount`/`windowTime`)\n * emits `Node<Node<T>>` nested sub-streams — the frozen reference creates child nodes inside the fn\n * body and pushes DATA into them imperatively, which is a describe island AND an open question for\n * how an emitted live sub-stream appears in `describe` (D45/D51). Deferred to a design pass.\n */\n\nimport {\n\ttype Ctx,\n\tdepBatch,\n\tdepCount,\n\tdepLatest,\n\tdepTerminal,\n\tisTerminalComplete,\n\tisTerminalError,\n\tisTerminalNone,\n\tterminalErrorValue,\n} from \"../ctx/types.js\";\nimport type { Operator } from \"./operators.js\";\n\n/**\n * combine (alias `combineLatest`): emit a tuple of every dep's latest value whenever ANY dep\n * delivers, once ALL deps have delivered at least one value. `partial:true`; the all-delivered gate\n * is `depLatest(ctx, i) !== undefined` per dep. Completes when ALL deps complete (default\n * completeWhenDepsComplete); any dep ERROR propagates (default errorWhenDepsError). Emits a fresh\n * tuple per wave (D49 — no dedup; compose `distinctUntilChanged` to suppress unchanged tuples).\n */\nexport function combine<T extends readonly unknown[]>(): Operator<unknown, T> {\n\treturn {\n\t\tfactory: \"combine\",\n\t\topts: { partial: true },\n\t\tbody: (ctx) => {\n\t\t\tconst vals = Array.from({ length: depCount(ctx) }, (_, i) => depLatest(ctx, i));\n\t\t\tif (vals.some((v) => v === undefined)) return; // not all deps delivered → undirty RESOLVED\n\t\t\tctx.down([[\"DATA\", vals as unknown as T]]);\n\t\t},\n\t};\n}\n\n/** combineLatest: RxJS-named alias of {@link combine}. */\nexport const combineLatest = combine;\n\n/**\n * withLatestFrom: on each PRIMARY (dep 0) value, emit `[primary, latestSecondary]`; a secondary-only\n * (dep 1) wave updates the cached secondary but emits nothing. Uses the DEFAULT first-run gate\n * (`partial:false`), NOT partial — the frozen reference's Phase 10.5 W1 fix: with `partial:true` the\n * primary's push-on-subscribe fires the fn BEFORE the secondary has delivered, so the initial pair\n * is dropped. The gate holds the first run until BOTH deps settle, then fires once with both\n * populated; subsequent waves are gate-free and fire on primary-alone. Completes when the PRIMARY\n * completes (not the secondary) — `completeWhenDepsComplete:false + terminalAsRealInput:true` with a\n * primary-terminal check; a secondary terminal is ignored (its last value persists).\n */\nexport function withLatestFrom<A, B>(): Operator<unknown, readonly [A, B]> {\n\treturn {\n\t\tfactory: \"withLatestFrom\",\n\t\topts: { completeWhenDepsComplete: false, terminalAsRealInput: true },\n\t\tbody: (ctx) => {\n\t\t\tif (isTerminalComplete(depTerminal(ctx, 0))) {\n\t\t\t\tctx.down([[\"COMPLETE\"]]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst b0 = depBatch(ctx, 0);\n\t\t\tif (!b0 || b0.length === 0) return; // secondary-only wave → quiet\n\t\t\tconst sec = depLatest(ctx, 1) as B | undefined;\n\t\t\tif (sec === undefined) return; // secondary never delivered → quiet\n\t\t\tfor (const v of b0) ctx.down([[\"DATA\", [v, sec] as readonly [A, B]]]);\n\t\t},\n\t};\n}\n\n/** Internal: per-dep FIFO queues for {@link zip}. */\ninterface ZipState {\n\tqueues: unknown[][];\n\tterminal: boolean[];\n}\n\n/**\n * zip: combine one value from EACH dep, in lockstep, into a tuple — buffering per-dep queues until\n * every dep has at least one queued value, then shifting one from each. `partial:true` +\n * `ctx.state` queues. Completes as soon as ANY dep is terminal AND its queue is empty (no further\n * tuple can form) — `completeWhenDepsComplete:false + terminalAsRealInput:true`. Any dep ERROR\n * propagates (default errorWhenDepsError).\n */\nexport function zip<T extends readonly unknown[]>(): Operator<unknown, T> {\n\treturn {\n\t\tfactory: \"zip\",\n\t\topts: { partial: true, completeWhenDepsComplete: false, terminalAsRealInput: true },\n\t\tbody: (ctx) => {\n\t\t\tconst n = depCount(ctx);\n\t\t\tif (n === 0) {\n\t\t\t\tctx.down([[\"COMPLETE\"]]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst st = ctx.state.get<ZipState>() ?? {\n\t\t\t\tqueues: Array.from({ length: n }, () => [] as unknown[]),\n\t\t\t\tterminal: new Array(n).fill(false),\n\t\t\t};\n\t\t\tfor (let i = 0; i < n; i++) {\n\t\t\t\tconst b = depBatch(ctx, i);\n\t\t\t\tif (b) for (const v of b) st.queues[i].push(v);\n\t\t\t\tif (isTerminalComplete(depTerminal(ctx, i))) st.terminal[i] = true;\n\t\t\t}\n\t\t\twhile (st.queues.every((q) => q.length > 0)) {\n\t\t\t\tctx.down([[\"DATA\", st.queues.map((q) => q.shift()) as unknown as T]]);\n\t\t\t}\n\t\t\tctx.state.set(st);\n\t\t\t// A terminal dep whose queue is now drained can never contribute another tuple → COMPLETE.\n\t\t\tfor (let i = 0; i < n; i++) {\n\t\t\t\tif (st.terminal[i] && st.queues[i].length === 0) {\n\t\t\t\t\tctx.down([[\"COMPLETE\"]]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t};\n}\n\n/** Internal: phase + buffered second-source values for {@link concat}. */\ninterface ConcatState<S> {\n\tphase: 0 | 1;\n\tpending: S[];\n\tsecondDone: boolean;\n}\n\n/**\n * concat: play ALL of dep 0, then ALL of dep 1. Dep-1 DATA arriving during phase 0 is buffered and\n * flushed at the handoff (dep 0 COMPLETE). `partial:true` + `ctx.state` phase. Completes when dep 1\n * completes (or when dep 0 completes and dep 1 already had). `completeWhenDepsComplete:false +\n * terminalAsRealInput:true`; any dep ERROR propagates (default errorWhenDepsError).\n */\nexport function concat<S>(): Operator<S, S> {\n\treturn {\n\t\tfactory: \"concat\",\n\t\topts: { partial: true, completeWhenDepsComplete: false, terminalAsRealInput: true },\n\t\tbody: (ctx) => {\n\t\t\tconst firstBatch = depBatch(ctx, 0);\n\t\t\tconst secondBatch = depBatch(ctx, 1);\n\t\t\tconst firstTerminal = depTerminal(ctx, 0);\n\t\t\tconst secondTerminal = depTerminal(ctx, 1);\n\t\t\tconst st: ConcatState<S> = ctx.state.get<ConcatState<S>>() ?? {\n\t\t\t\tphase: 0,\n\t\t\t\tpending: [],\n\t\t\t\tsecondDone: false,\n\t\t\t};\n\t\t\tif (st.phase === 0) {\n\t\t\t\tif (firstBatch) for (const v of firstBatch) ctx.down([[\"DATA\", v]]);\n\t\t\t\tif (secondBatch) for (const v of secondBatch) st.pending.push(v as S);\n\t\t\t\tif (isTerminalComplete(secondTerminal)) st.secondDone = true;\n\t\t\t\tif (isTerminalComplete(firstTerminal)) {\n\t\t\t\t\tst.phase = 1;\n\t\t\t\t\tfor (const v of st.pending) ctx.down([[\"DATA\", v]]);\n\t\t\t\t\tst.pending = [];\n\t\t\t\t\tif (st.secondDone) ctx.down([[\"COMPLETE\"]]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (secondBatch) for (const v of secondBatch) ctx.down([[\"DATA\", v]]);\n\t\t\t\tif (isTerminalComplete(secondTerminal)) ctx.down([[\"COMPLETE\"]]);\n\t\t\t}\n\t\t\tctx.state.set(st);\n\t\t},\n\t};\n}\n\n/** Internal: which dep won the {@link race} (null until the first DATA). */\ninterface RaceState {\n\twinner: number | null;\n\tterminals: unknown[];\n}\n\n/**\n * race: the FIRST dep to deliver DATA wins; thereafter only the winner's messages flow (losers are\n * dropped, including their terminals). `partial:true` + `ctx.state` winner. `errorWhenDepsError:false`\n * (a LOSER's error must not error the race — only the winner's) + `completeWhenDepsComplete:false +\n * terminalAsRealInput:true`. If every dep terminates before any DATA, COMPLETE.\n */\nexport function race<S>(): Operator<S, S> {\n\treturn {\n\t\tfactory: \"race\",\n\t\topts: {\n\t\t\tpartial: true,\n\t\t\terrorWhenDepsError: false,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\tterminalAsRealInput: true,\n\t\t},\n\t\tbody: (ctx) => {\n\t\t\tconst n = depCount(ctx);\n\t\t\tconst st: RaceState = ctx.state.get<RaceState>() ?? {\n\t\t\t\twinner: null,\n\t\t\t\tterminals: new Array(n).fill(false),\n\t\t\t};\n\t\t\tfor (let i = 0; i < n; i++) {\n\t\t\t\tconst terminal = depTerminal(ctx, i);\n\t\t\t\tif (!isTerminalNone(terminal)) st.terminals[i] = terminal;\n\t\t\t}\n\t\t\tif (st.winner === null) {\n\t\t\t\t// Find the first dep that delivered DATA this wave → it wins.\n\t\t\t\tfor (let i = 0; i < n; i++) {\n\t\t\t\t\tconst b = depBatch(ctx, i);\n\t\t\t\t\tif (b && b.length > 0) {\n\t\t\t\t\t\tst.winner = i;\n\t\t\t\t\t\tfor (const v of b) ctx.down([[\"DATA\", v]]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (st.winner === null) {\n\t\t\t\t\t// No winner yet — if EVERY dep is terminal (none ever delivered DATA), COMPLETE.\n\t\t\t\t\tif (st.terminals.every((t) => !isTerminalNone(t))) {\n\t\t\t\t\t\tctx.state.set(st);\n\t\t\t\t\t\tctx.down([[\"COMPLETE\"]]);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst b = depBatch(ctx, st.winner);\n\t\t\t\tconst terminal = depTerminal(ctx, st.winner);\n\t\t\t\tif (b) for (const v of b) ctx.down([[\"DATA\", v]]);\n\t\t\t\tif (isTerminalComplete(terminal)) {\n\t\t\t\t\tctx.state.set(st);\n\t\t\t\t\tctx.down([[\"COMPLETE\"]]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (isTerminalError(terminal)) {\n\t\t\t\t\tctx.state.set(st);\n\t\t\t\t\tctx.down([[\"ERROR\", terminalErrorValue(terminal)]]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.state.set(st);\n\t\t},\n\t};\n}\n\n// ── notifier-driven (D46 first-cut: gated on a reactive notifier dep, no wall-clock) ──\n\n/**\n * buffer: accumulate dep 0 (source) DATA; flush the buffer as an array each time dep 1 (notifier)\n * delivers DATA. `partial:true` + `ctx.state` buffer. On source COMPLETE, flush any remainder then\n * COMPLETE (`completeWhenDepsComplete:false + terminalAsRealInput:true`; a notifier terminal is\n * ignored). Source/notifier ERROR propagates (default errorWhenDepsError).\n */\nexport function buffer<S>(): Operator<unknown, S[]> {\n\treturn {\n\t\tfactory: \"buffer\",\n\t\topts: { partial: true, completeWhenDepsComplete: false, terminalAsRealInput: true },\n\t\tbody: (ctx) => {\n\t\t\tconst sourceBatch = depBatch(ctx, 0);\n\t\t\tconst notifierBatch = depBatch(ctx, 1);\n\t\t\tconst buf = ctx.state.get<S[]>() ?? [];\n\t\t\tif (sourceBatch) for (const v of sourceBatch) buf.push(v as S);\n\t\t\tif (isTerminalComplete(depTerminal(ctx, 0))) {\n\t\t\t\tif (buf.length > 0) ctx.down([[\"DATA\", [...buf]]]);\n\t\t\t\tctx.state.set([]);\n\t\t\t\tctx.down([[\"COMPLETE\"]]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (notifierBatch && notifierBatch.length > 0) {\n\t\t\t\tctx.down([[\"DATA\", [...buf]]]); // flush (may be empty) on each notifier signal\n\t\t\t\tctx.state.set([]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tctx.state.set(buf);\n\t\t},\n\t};\n}\n\n/**\n * bufferCount: batch consecutive source DATA into arrays of length `count`; the remainder flushes on\n * source COMPLETE. Single dep + `ctx.state` buffer + `completeWhenDepsComplete:false +\n * terminalAsRealInput:true`.\n */\nexport function bufferCount<S>(count: number): Operator<S, S[]> {\n\tif (!Number.isInteger(count) || count < 1) {\n\t\tthrow new RangeError(`bufferCount: count must be a positive integer (got ${count})`);\n\t}\n\treturn {\n\t\tfactory: \"bufferCount\",\n\t\topts: { completeWhenDepsComplete: false, terminalAsRealInput: true },\n\t\tbody: (ctx) => {\n\t\t\tconst b = depBatch(ctx, 0);\n\t\t\tconst buf = ctx.state.get<S[]>() ?? [];\n\t\t\tif (b) {\n\t\t\t\tfor (const v of b) {\n\t\t\t\t\tbuf.push(v as S);\n\t\t\t\t\tif (buf.length >= count) ctx.down([[\"DATA\", buf.splice(0, buf.length)]]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isTerminalComplete(depTerminal(ctx, 0))) {\n\t\t\t\tif (buf.length > 0) ctx.down([[\"DATA\", [...buf]]]);\n\t\t\t\tctx.state.set([]);\n\t\t\t\tctx.down([[\"COMPLETE\"]]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tctx.state.set(buf);\n\t\t},\n\t};\n}\n\n/** Internal: latest sampled source value + whether the source has completed, for {@link sample}. */\ninterface SampleState<S> {\n\tlast: { v: S } | undefined;\n\tsourceDone: boolean;\n}\n\n/**\n * sample: emit the source's (dep 0) most recent value each time the notifier (dep 1) delivers DATA.\n * `partial:true` + `ctx.state`. The notifier completing completes the operator; the source completing\n * stops sampling (clears the held value); an ERROR from either terminates.\n * `completeWhenDepsComplete:false + errorWhenDepsError:false + terminalAsRealInput:true` (manual\n * terminal handling). No flush of the held value on source COMPLETE (RxJS sample semantics).\n */\nexport function sample<S>(): Operator<unknown, S> {\n\treturn {\n\t\tfactory: \"sample\",\n\t\topts: {\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t\tterminalAsRealInput: true,\n\t\t},\n\t\tbody: (ctx) => {\n\t\t\tconst sourceBatch = depBatch(ctx, 0);\n\t\t\tconst notifierBatch = depBatch(ctx, 1);\n\t\t\tconst sourceTerminal = depTerminal(ctx, 0);\n\t\t\tconst notifierTerminal = depTerminal(ctx, 1);\n\t\t\tconst st: SampleState<S> = ctx.state.get<SampleState<S>>() ?? {\n\t\t\t\tlast: undefined,\n\t\t\t\tsourceDone: false,\n\t\t\t};\n\t\t\t// ERROR from either dep → terminate.\n\t\t\tif (isTerminalError(sourceTerminal)) {\n\t\t\t\tctx.down([[\"ERROR\", terminalErrorValue(sourceTerminal)]]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (isTerminalError(notifierTerminal)) {\n\t\t\t\tctx.down([[\"ERROR\", terminalErrorValue(notifierTerminal)]]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (sourceBatch) for (const v of sourceBatch) st.last = { v: v as S };\n\t\t\tif (isTerminalComplete(sourceTerminal)) {\n\t\t\t\tst.sourceDone = true;\n\t\t\t\tst.last = undefined;\n\t\t\t}\n\t\t\tif (isTerminalComplete(notifierTerminal)) {\n\t\t\t\tctx.state.set(st);\n\t\t\t\tctx.down([[\"COMPLETE\"]]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (notifierBatch && notifierBatch.length > 0 && st.last !== undefined && !st.sourceDone) {\n\t\t\t\tctx.down([[\"DATA\", st.last.v]]);\n\t\t\t}\n\t\t\tctx.state.set(st);\n\t\t},\n\t};\n}\n\n/**\n * takeUntil: forward dep 0 (source) DATA until dep 1 (notifier) delivers its first DATA, then\n * COMPLETE. `partial:true` + `completeWhenDepsComplete:false + terminalAsRealInput:true`: a source\n * COMPLETE forwards COMPLETE; a notifier DATA triggers COMPLETE. Source/notifier ERROR propagates\n * (default errorWhenDepsError).\n */\nexport function takeUntil<S>(): Operator<unknown, S> {\n\treturn {\n\t\tfactory: \"takeUntil\",\n\t\topts: { partial: true, completeWhenDepsComplete: false, terminalAsRealInput: true },\n\t\tbody: (ctx: Ctx) => {\n\t\t\tconst sourceBatch = depBatch(ctx, 0);\n\t\t\tconst notifierBatch = depBatch(ctx, 1);\n\t\t\tif (notifierBatch && notifierBatch.length > 0) {\n\t\t\t\tctx.down([[\"COMPLETE\"]]); // notifier fired → stop\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (sourceBatch) for (const v of sourceBatch) ctx.down([[\"DATA\", v]]);\n\t\t\tif (isTerminalComplete(depTerminal(ctx, 0))) ctx.down([[\"COMPLETE\"]]);\n\t\t},\n\t};\n}\n"],"mappings":"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","names":[]}