@vielzeug/flux 1.0.7 → 2.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 (160) hide show
  1. package/README.md +22 -25
  2. package/dist/_dev.cjs +1 -1
  3. package/dist/_dev.cjs.map +1 -1
  4. package/dist/_dev.js +2 -8
  5. package/dist/_dev.js.map +1 -1
  6. package/dist/_iterator.cjs +1 -1
  7. package/dist/_iterator.cjs.map +1 -1
  8. package/dist/_iterator.d.ts +3 -1
  9. package/dist/_iterator.d.ts.map +1 -1
  10. package/dist/_iterator.js +57 -35
  11. package/dist/_iterator.js.map +1 -1
  12. package/dist/_link.cjs +2 -0
  13. package/dist/_link.cjs.map +1 -0
  14. package/dist/_link.d.ts +4 -0
  15. package/dist/_link.d.ts.map +1 -0
  16. package/dist/_link.js +8 -0
  17. package/dist/_link.js.map +1 -0
  18. package/dist/_numeric.cjs +1 -1
  19. package/dist/_numeric.cjs.map +1 -1
  20. package/dist/_numeric.d.ts +2 -1
  21. package/dist/_numeric.d.ts.map +1 -1
  22. package/dist/_numeric.js +3 -7
  23. package/dist/_numeric.js.map +1 -1
  24. package/dist/_pipe.cjs +1 -1
  25. package/dist/_pipe.cjs.map +1 -1
  26. package/dist/_pipe.d.ts +2 -1
  27. package/dist/_pipe.d.ts.map +1 -1
  28. package/dist/_pipe.js +3 -3
  29. package/dist/_pipe.js.map +1 -1
  30. package/dist/_safe.cjs +1 -1
  31. package/dist/_safe.cjs.map +1 -1
  32. package/dist/_safe.d.ts +1 -1
  33. package/dist/_safe.d.ts.map +1 -1
  34. package/dist/_safe.js +2 -2
  35. package/dist/_safe.js.map +1 -1
  36. package/dist/_scheduler.cjs +1 -1
  37. package/dist/_scheduler.cjs.map +1 -1
  38. package/dist/_scheduler.d.ts +5 -2
  39. package/dist/_scheduler.d.ts.map +1 -1
  40. package/dist/_scheduler.js +1 -1
  41. package/dist/_scheduler.js.map +1 -1
  42. package/dist/_subscription.cjs +2 -0
  43. package/dist/_subscription.cjs.map +1 -0
  44. package/dist/_subscription.d.ts +8 -0
  45. package/dist/_subscription.d.ts.map +1 -0
  46. package/dist/_subscription.js +80 -0
  47. package/dist/_subscription.js.map +1 -0
  48. package/dist/adapters/courier.cjs +1 -1
  49. package/dist/adapters/courier.cjs.map +1 -1
  50. package/dist/adapters/courier.d.ts +35 -21
  51. package/dist/adapters/courier.d.ts.map +1 -1
  52. package/dist/adapters/courier.js +25 -6
  53. package/dist/adapters/courier.js.map +1 -1
  54. package/dist/adapters/herald.cjs +1 -1
  55. package/dist/adapters/herald.cjs.map +1 -1
  56. package/dist/adapters/herald.d.ts +2 -16
  57. package/dist/adapters/herald.d.ts.map +1 -1
  58. package/dist/adapters/herald.js +12 -8
  59. package/dist/adapters/herald.js.map +1 -1
  60. package/dist/adapters/pulse.cjs +1 -1
  61. package/dist/adapters/pulse.cjs.map +1 -1
  62. package/dist/adapters/pulse.d.ts +3 -20
  63. package/dist/adapters/pulse.d.ts.map +1 -1
  64. package/dist/adapters/pulse.js +2 -6
  65. package/dist/adapters/pulse.js.map +1 -1
  66. package/dist/adapters/ripple.cjs +1 -1
  67. package/dist/adapters/ripple.cjs.map +1 -1
  68. package/dist/adapters/ripple.d.ts +3 -39
  69. package/dist/adapters/ripple.d.ts.map +1 -1
  70. package/dist/adapters/ripple.js +22 -29
  71. package/dist/adapters/ripple.js.map +1 -1
  72. package/dist/async.cjs +2 -0
  73. package/dist/async.cjs.map +1 -0
  74. package/dist/async.d.ts +4 -0
  75. package/dist/async.d.ts.map +1 -0
  76. package/dist/async.js +11 -0
  77. package/dist/async.js.map +1 -0
  78. package/dist/core.cjs +1 -1
  79. package/dist/core.cjs.map +1 -1
  80. package/dist/core.d.ts +3 -16
  81. package/dist/core.d.ts.map +1 -1
  82. package/dist/core.js +12 -81
  83. package/dist/core.js.map +1 -1
  84. package/dist/courier.cjs +1 -0
  85. package/dist/courier.d.ts +2 -0
  86. package/dist/courier.d.ts.map +1 -0
  87. package/dist/courier.js +2 -0
  88. package/dist/errors.cjs.map +1 -1
  89. package/dist/errors.js.map +1 -1
  90. package/dist/flux.cjs +1 -1
  91. package/dist/flux.cjs.map +1 -1
  92. package/dist/flux.iife.js +1 -1
  93. package/dist/flux.iife.js.map +1 -1
  94. package/dist/flux.js +1 -1
  95. package/dist/flux.js.map +1 -1
  96. package/dist/herald.cjs +1 -0
  97. package/dist/herald.d.ts +2 -0
  98. package/dist/herald.d.ts.map +1 -0
  99. package/dist/herald.js +2 -0
  100. package/dist/index.cjs +1 -1
  101. package/dist/index.d.ts +13 -15
  102. package/dist/index.d.ts.map +1 -1
  103. package/dist/index.js +10 -14
  104. package/dist/operators/combination.cjs +1 -1
  105. package/dist/operators/combination.cjs.map +1 -1
  106. package/dist/operators/combination.d.ts +9 -64
  107. package/dist/operators/combination.d.ts.map +1 -1
  108. package/dist/operators/combination.js +46 -160
  109. package/dist/operators/combination.js.map +1 -1
  110. package/dist/operators/creation.cjs +1 -1
  111. package/dist/operators/creation.cjs.map +1 -1
  112. package/dist/operators/creation.d.ts +13 -46
  113. package/dist/operators/creation.d.ts.map +1 -1
  114. package/dist/operators/creation.js +61 -65
  115. package/dist/operators/creation.js.map +1 -1
  116. package/dist/operators/filtering.cjs +1 -1
  117. package/dist/operators/filtering.cjs.map +1 -1
  118. package/dist/operators/filtering.d.ts +10 -60
  119. package/dist/operators/filtering.d.ts.map +1 -1
  120. package/dist/operators/filtering.js +62 -109
  121. package/dist/operators/filtering.js.map +1 -1
  122. package/dist/operators/transformation.cjs +1 -1
  123. package/dist/operators/transformation.cjs.map +1 -1
  124. package/dist/operators/transformation.d.ts +9 -62
  125. package/dist/operators/transformation.d.ts.map +1 -1
  126. package/dist/operators/transformation.js +91 -142
  127. package/dist/operators/transformation.js.map +1 -1
  128. package/dist/operators/utility.cjs +1 -1
  129. package/dist/operators/utility.cjs.map +1 -1
  130. package/dist/operators/utility.d.ts +16 -97
  131. package/dist/operators/utility.d.ts.map +1 -1
  132. package/dist/operators/utility.js +75 -191
  133. package/dist/operators/utility.js.map +1 -1
  134. package/dist/pipe.cjs +2 -0
  135. package/dist/pipe.cjs.map +1 -0
  136. package/dist/pipe.d.ts +15 -0
  137. package/dist/pipe.d.ts.map +1 -0
  138. package/dist/pipe.js +9 -0
  139. package/dist/pipe.js.map +1 -0
  140. package/dist/pulse.cjs +1 -0
  141. package/dist/pulse.d.ts +2 -0
  142. package/dist/pulse.d.ts.map +1 -0
  143. package/dist/pulse.js +2 -0
  144. package/dist/ripple.cjs +1 -0
  145. package/dist/ripple.d.ts +3 -0
  146. package/dist/ripple.d.ts.map +1 -0
  147. package/dist/ripple.js +2 -0
  148. package/dist/subject.cjs +1 -1
  149. package/dist/subject.cjs.map +1 -1
  150. package/dist/subject.d.ts +14 -65
  151. package/dist/subject.d.ts.map +1 -1
  152. package/dist/subject.js +31 -166
  153. package/dist/subject.js.map +1 -1
  154. package/dist/subjects.cjs +1 -0
  155. package/dist/subjects.d.ts +3 -0
  156. package/dist/subjects.d.ts.map +1 -0
  157. package/dist/subjects.js +2 -0
  158. package/dist/types.d.ts +32 -79
  159. package/dist/types.d.ts.map +1 -1
  160. package/package.json +54 -15
@@ -1 +1 @@
1
- {"version":3,"file":"utility.cjs","names":[],"sources":["../../src/operators/utility.ts"],"sourcesContent":["import type { Flux, Operator, Scheduler, Unsubscribe } from '../types';\n\nimport { error, warn } from '../_dev';\nimport { clampPositiveInt } from '../_numeric';\nimport { guard } from '../_safe';\nimport { DEFAULT_SCHEDULER } from '../_scheduler';\nimport { flux } from '../core';\nimport { FluxTimeoutError } from '../errors';\n\ntype SharedEntry<T> = { complete?: () => void; error?: (e: unknown) => void; next: (v: T) => void };\n\nfunction makeMulticast<T>(source: Flux<T>, maxBuffer: number): Flux<T> {\n const subscribers = new Set<SharedEntry<T>>();\n const buffer: T[] = [];\n let sourceUnsub: Unsubscribe | undefined;\n let sourceDone = false;\n let sourceError: unknown;\n let hasError = false;\n\n return flux<T>((observer) => {\n if (hasError) {\n observer.error?.(sourceError);\n\n return;\n }\n\n for (const v of buffer) observer.next(v);\n\n if (sourceDone) {\n observer.complete?.();\n\n return;\n }\n\n const entry: SharedEntry<T> = {\n complete: observer.complete,\n error: observer.error,\n next: observer.next,\n };\n\n subscribers.add(entry);\n\n if (subscribers.size === 1) {\n sourceUnsub = source.subscribe({\n complete() {\n sourceDone = true;\n for (const s of [...subscribers]) s.complete?.();\n subscribers.clear();\n },\n error(err) {\n hasError = true;\n sourceError = err;\n for (const s of [...subscribers]) s.error?.(err);\n subscribers.clear();\n },\n next(v) {\n if (maxBuffer > 0) {\n if (buffer.length >= maxBuffer) buffer.shift();\n\n buffer.push(v);\n }\n\n for (const s of [...subscribers]) s.next(v);\n },\n });\n }\n\n return () => {\n subscribers.delete(entry);\n\n if (subscribers.size === 0) {\n sourceUnsub?.();\n sourceUnsub = undefined;\n }\n };\n });\n}\n\n/**\n * Multicast a cold `Flux` to multiple subscribers. The first subscriber starts\n * the source; the last to unsubscribe stops it.\n *\n * @example\n * const hot$ = cold$.pipe(share()); // one source, many subscribers\n */\nexport function share<T>(): Operator<T, T> {\n return (source) => makeMulticast(source, 0);\n}\n\n/**\n * Multicast a cold `Flux` and replay the last `bufferSize` values (default: 1)\n * to any new subscriber.\n *\n * @example\n * const hot$ = cold$.pipe(shareReplay(1)); // last value replayed to late subs\n */\nexport function shareReplay<T>(bufferSize = 1): Operator<T, T> {\n const { clamped, value: safeSize } = clampPositiveInt(bufferSize);\n\n if (clamped) {\n warn(`shareReplay: bufferSize must be a finite integer >= 1, got ${bufferSize} — clamped to ${safeSize}`);\n }\n\n return (source) => makeMulticast(source, safeSize);\n}\n\n/** Run a side effect on each emission without modifying the value. */\nexport function tap<T>(fn: (value: T) => void): Operator<T, T> {\n return (source) =>\n flux<T>((observer) =>\n source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n guard(() => {\n fn(v);\n observer.next(v);\n }, observer.error);\n },\n }),\n );\n}\n\n/** Delay each emission by `ms` milliseconds. Pass a custom `scheduler` to control time in tests. */\nexport function delay<T>(ms: number, scheduler: Scheduler = DEFAULT_SCHEDULER): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n const cancels: Array<() => void> = [];\n\n const unsub = source.subscribe({\n complete() {\n cancels.push(scheduler.delay(() => observer.complete?.(), ms));\n },\n error: observer.error,\n next(v) {\n cancels.push(scheduler.delay(() => observer.next(v), ms));\n },\n });\n\n return () => {\n unsub();\n for (const cancel of cancels) cancel();\n };\n });\n}\n\n/**\n * Error if no value is emitted within `ms` milliseconds since the last emission\n * (or since subscription, for the first value). The timer resets on each emission —\n * this is an inactivity timeout, not a time-to-first-value or total-duration timeout.\n * Pass a custom `scheduler` to control time in tests.\n *\n * @example\n * source$.pipe(timeout(5000)); // throws FluxTimeoutError after 5s of silence\n */\nexport function timeout<T>(ms: number, scheduler: Scheduler = DEFAULT_SCHEDULER): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let cancelTimer!: () => void;\n\n const startTimer = (): void => {\n cancelTimer = scheduler.delay(() => {\n observer.error?.(new FluxTimeoutError(ms));\n }, ms);\n };\n\n startTimer();\n\n const unsub = source.subscribe({\n complete() {\n cancelTimer();\n observer.complete?.();\n },\n error(err) {\n cancelTimer();\n observer.error?.(err);\n },\n next(v) {\n cancelTimer();\n startTimer();\n observer.next(v);\n },\n });\n\n return () => {\n cancelTimer();\n unsub();\n };\n });\n}\n\n/**\n * Recover from an error by returning a new `Flux` to continue with.\n *\n * @example\n * source$.pipe(catchError((err) => of('fallback')));\n */\nexport function catchError<T>(handler: (err: unknown) => Flux<T>): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let fallbackUnsub: Unsubscribe | undefined;\n\n const sourceUnsub = source.subscribe({\n complete: observer.complete,\n error(err) {\n guard(() => {\n fallbackUnsub = handler(err).subscribe({\n complete: observer.complete,\n error: observer.error,\n next: observer.next,\n });\n }, observer.error);\n },\n next: observer.next,\n });\n\n return () => {\n sourceUnsub();\n fallbackUnsub?.();\n };\n });\n}\n\n/**\n * Re-subscribe to the source up to `count` times on error.\n * Pass `delayMs` as a fixed number or `(attempt) => number` function for backoff.\n * Pass a custom `scheduler` to control time in tests.\n *\n * @example\n * fetchStream$.pipe(retry(3));\n * fetchStream$.pipe(retry(3, (n) => Math.min(1000 * 2 ** n, 30_000))); // exponential backoff\n */\nexport function retry<T>(\n count: number,\n delayMs?: number | ((attempt: number) => number),\n scheduler: Scheduler = DEFAULT_SCHEDULER,\n): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let attempts = 0;\n let currentUnsub: Unsubscribe | undefined;\n let cancelDelay: (() => void) | undefined;\n\n function attempt(): void {\n currentUnsub = source.subscribe({\n complete: observer.complete,\n error(err) {\n if (attempts < count) {\n const n = attempts++;\n\n if (delayMs !== undefined) {\n guard(() => {\n const ms = typeof delayMs === 'function' ? delayMs(n) : delayMs;\n\n cancelDelay = scheduler.delay(attempt, Math.max(0, ms));\n }, observer.error);\n } else {\n attempt();\n }\n } else {\n observer.error?.(err);\n }\n },\n next: observer.next,\n });\n }\n\n attempt();\n\n return () => {\n cancelDelay?.();\n currentUnsub?.();\n };\n });\n}\n\n/**\n * Run `fn` when the stream ends — whether by completion, error, or unsubscription.\n *\n * @example\n * source$.pipe(finalize(() => console.log('stream ended')));\n */\nexport function finalize<T>(fn: () => void): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let called = false;\n\n const call = (): void => {\n if (called) return;\n\n called = true;\n\n try {\n fn();\n } catch (err) {\n error('finalize: cleanup callback threw', err);\n }\n };\n\n const unsub = source.subscribe({\n complete() {\n call();\n observer.complete?.();\n },\n error(err) {\n call();\n observer.error?.(err);\n },\n next: observer.next,\n });\n\n return () => {\n call();\n unsub();\n };\n });\n}\n\n/** Reject value used when `signal` aborts a pending `toPromise()`/`toArray()`. */\nfunction abortError(signal: AbortSignal): unknown {\n return signal.reason ?? new DOMException('Aborted', 'AbortError');\n}\n\n/**\n * Convert a `Flux` to a `Promise` that resolves with the last emitted value\n * when the source completes, or rejects on error.\n * Pass `signal` to unsubscribe and reject early if the caller loses interest\n * before the source completes (e.g. a component unmounting).\n *\n * @example\n * const result = await toPromise(source$);\n * const cancellable = await toPromise(source$, controller.signal);\n */\nexport function toPromise<T>(source: Flux<T>, signal?: AbortSignal): Promise<T | undefined> {\n return new Promise<T | undefined>((resolve, reject) => {\n if (signal?.aborted) {\n reject(abortError(signal));\n\n return;\n }\n\n let last: T | undefined;\n let unsub: Unsubscribe = () => {};\n\n const onAbort = (): void => {\n unsub();\n reject(abortError(signal!));\n };\n\n // Add the listener before subscribing — the source may complete/error synchronously\n // during subscribe(), and the complete/error handlers below need it already registered\n // to remove it (otherwise it leaks on `signal` until the signal itself is GC'd).\n signal?.addEventListener('abort', onAbort, { once: true });\n\n unsub = source.subscribe({\n complete() {\n signal?.removeEventListener('abort', onAbort);\n resolve(last);\n },\n error(err) {\n signal?.removeEventListener('abort', onAbort);\n reject(err);\n },\n next(v) {\n last = v;\n },\n });\n });\n}\n\n/**\n * Collect all emitted values into an array resolved when the source completes.\n * Pass `signal` to stop early and resolve with the values collected so far\n * (rather than reject) if the caller loses interest before completion.\n *\n * @example\n * const all = await toArray(of(1, 2, 3));\n * const partial = await toArray(source$, controller.signal);\n */\nexport function toArray<T>(source: Flux<T>, signal?: AbortSignal): Promise<T[]> {\n return new Promise<T[]>((resolve, reject) => {\n const results: T[] = [];\n\n if (signal?.aborted) {\n resolve(results);\n\n return;\n }\n\n let unsub: Unsubscribe = () => {};\n\n const onAbort = (): void => {\n unsub();\n resolve(results);\n };\n\n // See toPromise() above for why the listener is added before subscribing.\n signal?.addEventListener('abort', onAbort, { once: true });\n\n unsub = source.subscribe({\n complete() {\n signal?.removeEventListener('abort', onAbort);\n resolve(results);\n },\n error(err) {\n signal?.removeEventListener('abort', onAbort);\n reject(err);\n },\n next(v) {\n results.push(v);\n },\n });\n });\n}\n\n/**\n * Compose multiple operators into a single reusable operator.\n * Provides full type safety at any pipeline depth — use instead of\n * `pipe()` overloads when chaining more than 4 operators.\n *\n * @example\n * const pipeline = flow(\n * filter((n) => n % 2 === 0),\n * map((n) => n * 10),\n * take(5),\n * );\n * source$.pipe(pipeline).subscribe(console.log);\n */\nexport function flow<A, B>(op1: Operator<A, B>): Operator<A, B>;\nexport function flow<A, B, C>(op1: Operator<A, B>, op2: Operator<B, C>): Operator<A, C>;\nexport function flow<A, B, C, D>(op1: Operator<A, B>, op2: Operator<B, C>, op3: Operator<C, D>): Operator<A, D>;\nexport function flow<A, B, C, D, E>(\n op1: Operator<A, B>,\n op2: Operator<B, C>,\n op3: Operator<C, D>,\n op4: Operator<D, E>,\n): Operator<A, E>;\nexport function flow<A, B, C, D, E, F>(\n op1: Operator<A, B>,\n op2: Operator<B, C>,\n op3: Operator<C, D>,\n op4: Operator<D, E>,\n op5: Operator<E, F>,\n): Operator<A, F>;\nexport function flow<A, B, C, D, E, F, G>(\n op1: Operator<A, B>,\n op2: Operator<B, C>,\n op3: Operator<C, D>,\n op4: Operator<D, E>,\n op5: Operator<E, F>,\n op6: Operator<F, G>,\n): Operator<A, G>;\nexport function flow<A, B, C, D, E, F, G, H>(\n op1: Operator<A, B>,\n op2: Operator<B, C>,\n op3: Operator<C, D>,\n op4: Operator<D, E>,\n op5: Operator<E, F>,\n op6: Operator<F, G>,\n op7: Operator<G, H>,\n): Operator<A, H>;\nexport function flow<A, B, C, D, E, F, G, H, I>(\n op1: Operator<A, B>,\n op2: Operator<B, C>,\n op3: Operator<C, D>,\n op4: Operator<D, E>,\n op5: Operator<E, F>,\n op6: Operator<F, G>,\n op7: Operator<G, H>,\n op8: Operator<H, I>,\n): Operator<A, I>;\nexport function flow(...ops: Operator[]): Operator {\n return (source: Flux<unknown>) => ops.reduce((f: Flux<unknown>, op) => op(f), source);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"utility.cjs","names":[],"sources":["../../src/operators/utility.ts"],"sourcesContent":["import type { Operator, Stream, Subscription } from '../types';\n\nimport { link } from '../_link';\nimport { tryCall } from '../_safe';\nimport { defaultScheduler } from '../_scheduler';\nimport { stream } from '../core';\n\nexport type RetryOptions = {\n attempts: number;\n delay?: number | ((attempt: number) => number);\n};\n\nexport type ToArrayOptions = {\n maxItems: number;\n signal?: AbortSignal;\n};\n\nexport type ValueOptions = {\n signal?: AbortSignal;\n};\n\nfunction abortError(): DOMException {\n return new DOMException('Stream consumption aborted', 'AbortError');\n}\n\nexport function retry<T>(options: RetryOptions): Operator<T, T> {\n if (!Number.isInteger(options.attempts) || options.attempts < 0) {\n throw new RangeError('retry attempts must be a non-negative integer');\n }\n\n return (source) =>\n stream((sink, signal) => {\n let attempts = 0;\n let current: Subscription | undefined;\n let cancelDelay: (() => void) | undefined;\n\n const start = (): void => {\n if (signal.aborted) return;\n\n const subscription = link(\n source,\n {\n complete: sink.complete,\n error(reason) {\n if (attempts === options.attempts) {\n sink.error(reason);\n\n return;\n }\n\n const attempt = attempts++;\n let delay: number | undefined;\n\n tryCall(() => {\n delay = typeof options.delay === 'function' ? options.delay(attempt) : options.delay;\n }, sink.error);\n\n if (signal.aborted) return;\n\n if (delay !== undefined && (!Number.isFinite(delay) || delay < 0)) {\n sink.error(new RangeError('retry delay must be a finite number greater than or equal to zero'));\n\n return;\n }\n\n if (delay === undefined || delay === 0) {\n queueMicrotask(start);\n } else {\n cancelDelay = defaultScheduler.delay(start, delay);\n }\n },\n next: sink.next,\n },\n signal,\n );\n\n if (!subscription.closed) current = subscription;\n };\n\n start();\n\n return () => {\n cancelDelay?.();\n current?.unsubscribe();\n };\n });\n}\n\nexport function first<T>(source: Stream<T>, options?: ValueOptions): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const controller = new AbortController();\n const abort = (): void => {\n controller.abort();\n reject(abortError());\n };\n\n if (options?.signal?.aborted) {\n abort();\n\n return;\n }\n\n options?.signal?.addEventListener('abort', abort, { once: true });\n link(\n source,\n {\n error(reason) {\n options?.signal?.removeEventListener('abort', abort);\n reject(reason);\n },\n next(value) {\n options?.signal?.removeEventListener('abort', abort);\n controller.abort();\n resolve(value);\n },\n },\n controller.signal,\n );\n });\n}\n\nexport function last<T>(source: Stream<T>, options?: ValueOptions): Promise<T | undefined> {\n return new Promise<T | undefined>((resolve, reject) => {\n const abort = (): void => reject(abortError());\n let latest: T | undefined;\n\n if (options?.signal?.aborted) {\n abort();\n\n return;\n }\n\n options?.signal?.addEventListener('abort', abort, { once: true });\n link(\n source,\n {\n complete() {\n options?.signal?.removeEventListener('abort', abort);\n resolve(latest);\n },\n error(reason) {\n options?.signal?.removeEventListener('abort', abort);\n reject(reason);\n },\n next(value) {\n latest = value;\n },\n },\n options?.signal ?? new AbortController().signal,\n );\n });\n}\n\nexport function toArray<T>(source: Stream<T>, options: ToArrayOptions): Promise<T[]> {\n if (!Number.isInteger(options.maxItems) || options.maxItems < 0) {\n throw new RangeError('toArray maxItems must be a non-negative integer');\n }\n\n return new Promise<T[]>((resolve, reject) => {\n const controller = new AbortController();\n const values: T[] = [];\n const abort = (): void => {\n controller.abort();\n reject(abortError());\n };\n\n if (options.signal?.aborted) {\n abort();\n\n return;\n }\n\n options.signal?.addEventListener('abort', abort, { once: true });\n link(\n source,\n {\n complete() {\n options.signal?.removeEventListener('abort', abort);\n resolve(values);\n },\n error(reason) {\n options.signal?.removeEventListener('abort', abort);\n reject(reason);\n },\n next(value) {\n if (values.length === options.maxItems) {\n options.signal?.removeEventListener('abort', abort);\n controller.abort();\n reject(new RangeError('toArray maxItems exceeded'));\n\n return;\n }\n\n values.push(value);\n },\n },\n controller.signal,\n );\n });\n}\n"],"mappings":"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"}
@@ -1,98 +1,17 @@
1
- import type { Flux, Operator, Scheduler } from '../types';
2
- /**
3
- * Multicast a cold `Flux` to multiple subscribers. The first subscriber starts
4
- * the source; the last to unsubscribe stops it.
5
- *
6
- * @example
7
- * const hot$ = cold$.pipe(share()); // one source, many subscribers
8
- */
9
- export declare function share<T>(): Operator<T, T>;
10
- /**
11
- * Multicast a cold `Flux` and replay the last `bufferSize` values (default: 1)
12
- * to any new subscriber.
13
- *
14
- * @example
15
- * const hot$ = cold$.pipe(shareReplay(1)); // last value replayed to late subs
16
- */
17
- export declare function shareReplay<T>(bufferSize?: number): Operator<T, T>;
18
- /** Run a side effect on each emission without modifying the value. */
19
- export declare function tap<T>(fn: (value: T) => void): Operator<T, T>;
20
- /** Delay each emission by `ms` milliseconds. Pass a custom `scheduler` to control time in tests. */
21
- export declare function delay<T>(ms: number, scheduler?: Scheduler): Operator<T, T>;
22
- /**
23
- * Error if no value is emitted within `ms` milliseconds since the last emission
24
- * (or since subscription, for the first value). The timer resets on each emission —
25
- * this is an inactivity timeout, not a time-to-first-value or total-duration timeout.
26
- * Pass a custom `scheduler` to control time in tests.
27
- *
28
- * @example
29
- * source$.pipe(timeout(5000)); // throws FluxTimeoutError after 5s of silence
30
- */
31
- export declare function timeout<T>(ms: number, scheduler?: Scheduler): Operator<T, T>;
32
- /**
33
- * Recover from an error by returning a new `Flux` to continue with.
34
- *
35
- * @example
36
- * source$.pipe(catchError((err) => of('fallback')));
37
- */
38
- export declare function catchError<T>(handler: (err: unknown) => Flux<T>): Operator<T, T>;
39
- /**
40
- * Re-subscribe to the source up to `count` times on error.
41
- * Pass `delayMs` as a fixed number or `(attempt) => number` function for backoff.
42
- * Pass a custom `scheduler` to control time in tests.
43
- *
44
- * @example
45
- * fetchStream$.pipe(retry(3));
46
- * fetchStream$.pipe(retry(3, (n) => Math.min(1000 * 2 ** n, 30_000))); // exponential backoff
47
- */
48
- export declare function retry<T>(count: number, delayMs?: number | ((attempt: number) => number), scheduler?: Scheduler): Operator<T, T>;
49
- /**
50
- * Run `fn` when the stream ends — whether by completion, error, or unsubscription.
51
- *
52
- * @example
53
- * source$.pipe(finalize(() => console.log('stream ended')));
54
- */
55
- export declare function finalize<T>(fn: () => void): Operator<T, T>;
56
- /**
57
- * Convert a `Flux` to a `Promise` that resolves with the last emitted value
58
- * when the source completes, or rejects on error.
59
- * Pass `signal` to unsubscribe and reject early if the caller loses interest
60
- * before the source completes (e.g. a component unmounting).
61
- *
62
- * @example
63
- * const result = await toPromise(source$);
64
- * const cancellable = await toPromise(source$, controller.signal);
65
- */
66
- export declare function toPromise<T>(source: Flux<T>, signal?: AbortSignal): Promise<T | undefined>;
67
- /**
68
- * Collect all emitted values into an array resolved when the source completes.
69
- * Pass `signal` to stop early and resolve with the values collected so far
70
- * (rather than reject) if the caller loses interest before completion.
71
- *
72
- * @example
73
- * const all = await toArray(of(1, 2, 3));
74
- * const partial = await toArray(source$, controller.signal);
75
- */
76
- export declare function toArray<T>(source: Flux<T>, signal?: AbortSignal): Promise<T[]>;
77
- /**
78
- * Compose multiple operators into a single reusable operator.
79
- * Provides full type safety at any pipeline depth — use instead of
80
- * `pipe()` overloads when chaining more than 4 operators.
81
- *
82
- * @example
83
- * const pipeline = flow(
84
- * filter((n) => n % 2 === 0),
85
- * map((n) => n * 10),
86
- * take(5),
87
- * );
88
- * source$.pipe(pipeline).subscribe(console.log);
89
- */
90
- export declare function flow<A, B>(op1: Operator<A, B>): Operator<A, B>;
91
- export declare function flow<A, B, C>(op1: Operator<A, B>, op2: Operator<B, C>): Operator<A, C>;
92
- export declare function flow<A, B, C, D>(op1: Operator<A, B>, op2: Operator<B, C>, op3: Operator<C, D>): Operator<A, D>;
93
- export declare function flow<A, B, C, D, E>(op1: Operator<A, B>, op2: Operator<B, C>, op3: Operator<C, D>, op4: Operator<D, E>): Operator<A, E>;
94
- export declare function flow<A, B, C, D, E, F>(op1: Operator<A, B>, op2: Operator<B, C>, op3: Operator<C, D>, op4: Operator<D, E>, op5: Operator<E, F>): Operator<A, F>;
95
- export declare function flow<A, B, C, D, E, F, G>(op1: Operator<A, B>, op2: Operator<B, C>, op3: Operator<C, D>, op4: Operator<D, E>, op5: Operator<E, F>, op6: Operator<F, G>): Operator<A, G>;
96
- export declare function flow<A, B, C, D, E, F, G, H>(op1: Operator<A, B>, op2: Operator<B, C>, op3: Operator<C, D>, op4: Operator<D, E>, op5: Operator<E, F>, op6: Operator<F, G>, op7: Operator<G, H>): Operator<A, H>;
97
- export declare function flow<A, B, C, D, E, F, G, H, I>(op1: Operator<A, B>, op2: Operator<B, C>, op3: Operator<C, D>, op4: Operator<D, E>, op5: Operator<E, F>, op6: Operator<F, G>, op7: Operator<G, H>, op8: Operator<H, I>): Operator<A, I>;
1
+ import type { Operator, Stream } from '../types';
2
+ export type RetryOptions = {
3
+ attempts: number;
4
+ delay?: number | ((attempt: number) => number);
5
+ };
6
+ export type ToArrayOptions = {
7
+ maxItems: number;
8
+ signal?: AbortSignal;
9
+ };
10
+ export type ValueOptions = {
11
+ signal?: AbortSignal;
12
+ };
13
+ export declare function retry<T>(options: RetryOptions): Operator<T, T>;
14
+ export declare function first<T>(source: Stream<T>, options?: ValueOptions): Promise<T>;
15
+ export declare function last<T>(source: Stream<T>, options?: ValueOptions): Promise<T | undefined>;
16
+ export declare function toArray<T>(source: Stream<T>, options: ToArrayOptions): Promise<T[]>;
98
17
  //# sourceMappingURL=utility.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utility.d.ts","sourceRoot":"","sources":["../../src/operators/utility.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utility.d.ts","sourceRoot":"","sources":["../../src/operators/utility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAgB,MAAM,UAAU,CAAC;AAO/D,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAMF,wBAAgB,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CA6D9D;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CA+B9E;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CA8BzF;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CA8CnF"}
@@ -1,226 +1,110 @@
1
- import { error as e, warn as t } from "../_dev.js";
2
- import { flux as n } from "../core.js";
3
- import { DEFAULT_SCHEDULER as r } from "../_scheduler.js";
4
- import { FluxTimeoutError as i } from "../errors.js";
5
- import { guard as a } from "../_safe.js";
6
- import { clampPositiveInt as o } from "../_numeric.js";
1
+ import { stream as e } from "../core.js";
2
+ import { link as t } from "../_link.js";
3
+ import { tryCall as n } from "../_safe.js";
4
+ import { defaultScheduler as r } from "../_scheduler.js";
7
5
  //#region src/operators/utility.ts
8
- function s(e, t) {
9
- let r = /* @__PURE__ */ new Set(), i = [], a, o = !1, s, c = !1;
10
- return n((n) => {
11
- if (c) {
12
- n.error?.(s);
13
- return;
14
- }
15
- for (let e of i) n.next(e);
16
- if (o) {
17
- n.complete?.();
18
- return;
19
- }
20
- let l = {
21
- complete: n.complete,
22
- error: n.error,
23
- next: n.next
24
- };
25
- return r.add(l), r.size === 1 && (a = e.subscribe({
26
- complete() {
27
- o = !0;
28
- for (let e of [...r]) e.complete?.();
29
- r.clear();
30
- },
31
- error(e) {
32
- c = !0, s = e;
33
- for (let t of [...r]) t.error?.(e);
34
- r.clear();
35
- },
36
- next(e) {
37
- t > 0 && (i.length >= t && i.shift(), i.push(e));
38
- for (let t of [...r]) t.next(e);
39
- }
40
- })), () => {
41
- r.delete(l), r.size === 0 && (a?.(), a = void 0);
42
- };
43
- });
6
+ function i() {
7
+ return new DOMException("Stream consumption aborted", "AbortError");
44
8
  }
45
- function c() {
46
- return (e) => s(e, 0);
47
- }
48
- function l(e = 1) {
49
- let { clamped: n, value: r } = o(e);
50
- return n && t(`shareReplay: bufferSize must be a finite integer >= 1, got ${e} — clamped to ${r}`), (e) => s(e, r);
51
- }
52
- function u(e) {
53
- return (t) => n((n) => t.subscribe({
54
- complete: n.complete,
55
- error: n.error,
56
- next(t) {
57
- a(() => {
58
- e(t), n.next(t);
59
- }, n.error);
60
- }
61
- }));
62
- }
63
- function d(e, t = r) {
64
- return (r) => n((n) => {
65
- let i = [], a = r.subscribe({
66
- complete() {
67
- i.push(t.delay(() => n.complete?.(), e));
68
- },
69
- error: n.error,
70
- next(r) {
71
- i.push(t.delay(() => n.next(r), e));
72
- }
73
- });
74
- return () => {
75
- a();
76
- for (let e of i) e();
9
+ function a(i) {
10
+ if (!Number.isInteger(i.attempts) || i.attempts < 0) throw RangeError("retry attempts must be a non-negative integer");
11
+ return (a) => e((e, o) => {
12
+ let s = 0, c, l, u = () => {
13
+ if (o.aborted) return;
14
+ let d = t(a, {
15
+ complete: e.complete,
16
+ error(t) {
17
+ if (s === i.attempts) {
18
+ e.error(t);
19
+ return;
20
+ }
21
+ let a = s++, c;
22
+ if (n(() => {
23
+ c = typeof i.delay == "function" ? i.delay(a) : i.delay;
24
+ }, e.error), !o.aborted) {
25
+ if (c !== void 0 && (!Number.isFinite(c) || c < 0)) {
26
+ e.error(/* @__PURE__ */ RangeError("retry delay must be a finite number greater than or equal to zero"));
27
+ return;
28
+ }
29
+ c === void 0 || c === 0 ? queueMicrotask(u) : l = r.delay(u, c);
30
+ }
31
+ },
32
+ next: e.next
33
+ }, o);
34
+ d.closed || (c = d);
77
35
  };
78
- });
79
- }
80
- function f(e, t = r) {
81
- return (r) => n((n) => {
82
- let a, o = () => {
83
- a = t.delay(() => {
84
- n.error?.(new i(e));
85
- }, e);
86
- };
87
- o();
88
- let s = r.subscribe({
89
- complete() {
90
- a(), n.complete?.();
91
- },
92
- error(e) {
93
- a(), n.error?.(e);
94
- },
95
- next(e) {
96
- a(), o(), n.next(e);
97
- }
98
- });
99
- return () => {
100
- a(), s();
36
+ return u(), () => {
37
+ l?.(), c?.unsubscribe();
101
38
  };
102
39
  });
103
40
  }
104
- function p(e) {
105
- return (t) => n((n) => {
106
- let r, i = t.subscribe({
107
- complete: n.complete,
108
- error(t) {
109
- a(() => {
110
- r = e(t).subscribe({
111
- complete: n.complete,
112
- error: n.error,
113
- next: n.next
114
- });
115
- }, n.error);
116
- },
117
- next: n.next
118
- });
119
- return () => {
120
- i(), r?.();
41
+ function o(e, n) {
42
+ return new Promise((r, a) => {
43
+ let o = new AbortController(), s = () => {
44
+ o.abort(), a(i());
121
45
  };
122
- });
123
- }
124
- function m(e, t, i = r) {
125
- return (r) => n((n) => {
126
- let o = 0, s, c;
127
- function l() {
128
- s = r.subscribe({
129
- complete: n.complete,
130
- error(r) {
131
- if (o < e) {
132
- let e = o++;
133
- t === void 0 ? l() : a(() => {
134
- let n = typeof t == "function" ? t(e) : t;
135
- c = i.delay(l, Math.max(0, n));
136
- }, n.error);
137
- } else n.error?.(r);
138
- },
139
- next: n.next
140
- });
46
+ if (n?.signal?.aborted) {
47
+ s();
48
+ return;
141
49
  }
142
- return l(), () => {
143
- c?.(), s?.();
144
- };
145
- });
146
- }
147
- function h(t) {
148
- return (r) => n((n) => {
149
- let i = !1, a = () => {
150
- if (!i) {
151
- i = !0;
152
- try {
153
- t();
154
- } catch (t) {
155
- e("finalize: cleanup callback threw", t);
156
- }
157
- }
158
- }, o = r.subscribe({
159
- complete() {
160
- a(), n.complete?.();
161
- },
50
+ n?.signal?.addEventListener("abort", s, { once: !0 }), t(e, {
162
51
  error(e) {
163
- a(), n.error?.(e);
52
+ n?.signal?.removeEventListener("abort", s), a(e);
164
53
  },
165
- next: n.next
166
- });
167
- return () => {
168
- a(), o();
169
- };
54
+ next(e) {
55
+ n?.signal?.removeEventListener("abort", s), o.abort(), r(e);
56
+ }
57
+ }, o.signal);
170
58
  });
171
59
  }
172
- function g(e) {
173
- return e.reason ?? new DOMException("Aborted", "AbortError");
174
- }
175
- function _(e, t) {
176
- return new Promise((n, r) => {
177
- if (t?.aborted) {
178
- r(g(t));
60
+ function s(e, n) {
61
+ return new Promise((r, a) => {
62
+ let o = () => a(i()), s;
63
+ if (n?.signal?.aborted) {
64
+ o();
179
65
  return;
180
66
  }
181
- let i, a = () => {}, o = () => {
182
- a(), r(g(t));
183
- };
184
- t?.addEventListener("abort", o, { once: !0 }), a = e.subscribe({
67
+ n?.signal?.addEventListener("abort", o, { once: !0 }), t(e, {
185
68
  complete() {
186
- t?.removeEventListener("abort", o), n(i);
69
+ n?.signal?.removeEventListener("abort", o), r(s);
187
70
  },
188
71
  error(e) {
189
- t?.removeEventListener("abort", o), r(e);
72
+ n?.signal?.removeEventListener("abort", o), a(e);
190
73
  },
191
74
  next(e) {
192
- i = e;
75
+ s = e;
193
76
  }
194
- });
77
+ }, n?.signal ?? new AbortController().signal);
195
78
  });
196
79
  }
197
- function v(e, t) {
198
- return new Promise((n, r) => {
199
- let i = [];
200
- if (t?.aborted) {
201
- n(i);
80
+ function c(e, n) {
81
+ if (!Number.isInteger(n.maxItems) || n.maxItems < 0) throw RangeError("toArray maxItems must be a non-negative integer");
82
+ return new Promise((r, a) => {
83
+ let o = new AbortController(), s = [], c = () => {
84
+ o.abort(), a(i());
85
+ };
86
+ if (n.signal?.aborted) {
87
+ c();
202
88
  return;
203
89
  }
204
- let a = () => {}, o = () => {
205
- a(), n(i);
206
- };
207
- t?.addEventListener("abort", o, { once: !0 }), a = e.subscribe({
90
+ n.signal?.addEventListener("abort", c, { once: !0 }), t(e, {
208
91
  complete() {
209
- t?.removeEventListener("abort", o), n(i);
92
+ n.signal?.removeEventListener("abort", c), r(s);
210
93
  },
211
94
  error(e) {
212
- t?.removeEventListener("abort", o), r(e);
95
+ n.signal?.removeEventListener("abort", c), a(e);
213
96
  },
214
97
  next(e) {
215
- i.push(e);
98
+ if (s.length === n.maxItems) {
99
+ n.signal?.removeEventListener("abort", c), o.abort(), a(/* @__PURE__ */ RangeError("toArray maxItems exceeded"));
100
+ return;
101
+ }
102
+ s.push(e);
216
103
  }
217
- });
104
+ }, o.signal);
218
105
  });
219
106
  }
220
- function y(...e) {
221
- return (t) => e.reduce((e, t) => t(e), t);
222
- }
223
107
  //#endregion
224
- export { p as catchError, d as delay, h as finalize, y as flow, m as retry, c as share, l as shareReplay, u as tap, f as timeout, v as toArray, _ as toPromise };
108
+ export { o as first, s as last, a as retry, c as toArray };
225
109
 
226
110
  //# sourceMappingURL=utility.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utility.js","names":[],"sources":["../../src/operators/utility.ts"],"sourcesContent":["import type { Flux, Operator, Scheduler, Unsubscribe } from '../types';\n\nimport { error, warn } from '../_dev';\nimport { clampPositiveInt } from '../_numeric';\nimport { guard } from '../_safe';\nimport { DEFAULT_SCHEDULER } from '../_scheduler';\nimport { flux } from '../core';\nimport { FluxTimeoutError } from '../errors';\n\ntype SharedEntry<T> = { complete?: () => void; error?: (e: unknown) => void; next: (v: T) => void };\n\nfunction makeMulticast<T>(source: Flux<T>, maxBuffer: number): Flux<T> {\n const subscribers = new Set<SharedEntry<T>>();\n const buffer: T[] = [];\n let sourceUnsub: Unsubscribe | undefined;\n let sourceDone = false;\n let sourceError: unknown;\n let hasError = false;\n\n return flux<T>((observer) => {\n if (hasError) {\n observer.error?.(sourceError);\n\n return;\n }\n\n for (const v of buffer) observer.next(v);\n\n if (sourceDone) {\n observer.complete?.();\n\n return;\n }\n\n const entry: SharedEntry<T> = {\n complete: observer.complete,\n error: observer.error,\n next: observer.next,\n };\n\n subscribers.add(entry);\n\n if (subscribers.size === 1) {\n sourceUnsub = source.subscribe({\n complete() {\n sourceDone = true;\n for (const s of [...subscribers]) s.complete?.();\n subscribers.clear();\n },\n error(err) {\n hasError = true;\n sourceError = err;\n for (const s of [...subscribers]) s.error?.(err);\n subscribers.clear();\n },\n next(v) {\n if (maxBuffer > 0) {\n if (buffer.length >= maxBuffer) buffer.shift();\n\n buffer.push(v);\n }\n\n for (const s of [...subscribers]) s.next(v);\n },\n });\n }\n\n return () => {\n subscribers.delete(entry);\n\n if (subscribers.size === 0) {\n sourceUnsub?.();\n sourceUnsub = undefined;\n }\n };\n });\n}\n\n/**\n * Multicast a cold `Flux` to multiple subscribers. The first subscriber starts\n * the source; the last to unsubscribe stops it.\n *\n * @example\n * const hot$ = cold$.pipe(share()); // one source, many subscribers\n */\nexport function share<T>(): Operator<T, T> {\n return (source) => makeMulticast(source, 0);\n}\n\n/**\n * Multicast a cold `Flux` and replay the last `bufferSize` values (default: 1)\n * to any new subscriber.\n *\n * @example\n * const hot$ = cold$.pipe(shareReplay(1)); // last value replayed to late subs\n */\nexport function shareReplay<T>(bufferSize = 1): Operator<T, T> {\n const { clamped, value: safeSize } = clampPositiveInt(bufferSize);\n\n if (clamped) {\n warn(`shareReplay: bufferSize must be a finite integer >= 1, got ${bufferSize} — clamped to ${safeSize}`);\n }\n\n return (source) => makeMulticast(source, safeSize);\n}\n\n/** Run a side effect on each emission without modifying the value. */\nexport function tap<T>(fn: (value: T) => void): Operator<T, T> {\n return (source) =>\n flux<T>((observer) =>\n source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n guard(() => {\n fn(v);\n observer.next(v);\n }, observer.error);\n },\n }),\n );\n}\n\n/** Delay each emission by `ms` milliseconds. Pass a custom `scheduler` to control time in tests. */\nexport function delay<T>(ms: number, scheduler: Scheduler = DEFAULT_SCHEDULER): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n const cancels: Array<() => void> = [];\n\n const unsub = source.subscribe({\n complete() {\n cancels.push(scheduler.delay(() => observer.complete?.(), ms));\n },\n error: observer.error,\n next(v) {\n cancels.push(scheduler.delay(() => observer.next(v), ms));\n },\n });\n\n return () => {\n unsub();\n for (const cancel of cancels) cancel();\n };\n });\n}\n\n/**\n * Error if no value is emitted within `ms` milliseconds since the last emission\n * (or since subscription, for the first value). The timer resets on each emission —\n * this is an inactivity timeout, not a time-to-first-value or total-duration timeout.\n * Pass a custom `scheduler` to control time in tests.\n *\n * @example\n * source$.pipe(timeout(5000)); // throws FluxTimeoutError after 5s of silence\n */\nexport function timeout<T>(ms: number, scheduler: Scheduler = DEFAULT_SCHEDULER): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let cancelTimer!: () => void;\n\n const startTimer = (): void => {\n cancelTimer = scheduler.delay(() => {\n observer.error?.(new FluxTimeoutError(ms));\n }, ms);\n };\n\n startTimer();\n\n const unsub = source.subscribe({\n complete() {\n cancelTimer();\n observer.complete?.();\n },\n error(err) {\n cancelTimer();\n observer.error?.(err);\n },\n next(v) {\n cancelTimer();\n startTimer();\n observer.next(v);\n },\n });\n\n return () => {\n cancelTimer();\n unsub();\n };\n });\n}\n\n/**\n * Recover from an error by returning a new `Flux` to continue with.\n *\n * @example\n * source$.pipe(catchError((err) => of('fallback')));\n */\nexport function catchError<T>(handler: (err: unknown) => Flux<T>): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let fallbackUnsub: Unsubscribe | undefined;\n\n const sourceUnsub = source.subscribe({\n complete: observer.complete,\n error(err) {\n guard(() => {\n fallbackUnsub = handler(err).subscribe({\n complete: observer.complete,\n error: observer.error,\n next: observer.next,\n });\n }, observer.error);\n },\n next: observer.next,\n });\n\n return () => {\n sourceUnsub();\n fallbackUnsub?.();\n };\n });\n}\n\n/**\n * Re-subscribe to the source up to `count` times on error.\n * Pass `delayMs` as a fixed number or `(attempt) => number` function for backoff.\n * Pass a custom `scheduler` to control time in tests.\n *\n * @example\n * fetchStream$.pipe(retry(3));\n * fetchStream$.pipe(retry(3, (n) => Math.min(1000 * 2 ** n, 30_000))); // exponential backoff\n */\nexport function retry<T>(\n count: number,\n delayMs?: number | ((attempt: number) => number),\n scheduler: Scheduler = DEFAULT_SCHEDULER,\n): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let attempts = 0;\n let currentUnsub: Unsubscribe | undefined;\n let cancelDelay: (() => void) | undefined;\n\n function attempt(): void {\n currentUnsub = source.subscribe({\n complete: observer.complete,\n error(err) {\n if (attempts < count) {\n const n = attempts++;\n\n if (delayMs !== undefined) {\n guard(() => {\n const ms = typeof delayMs === 'function' ? delayMs(n) : delayMs;\n\n cancelDelay = scheduler.delay(attempt, Math.max(0, ms));\n }, observer.error);\n } else {\n attempt();\n }\n } else {\n observer.error?.(err);\n }\n },\n next: observer.next,\n });\n }\n\n attempt();\n\n return () => {\n cancelDelay?.();\n currentUnsub?.();\n };\n });\n}\n\n/**\n * Run `fn` when the stream ends — whether by completion, error, or unsubscription.\n *\n * @example\n * source$.pipe(finalize(() => console.log('stream ended')));\n */\nexport function finalize<T>(fn: () => void): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let called = false;\n\n const call = (): void => {\n if (called) return;\n\n called = true;\n\n try {\n fn();\n } catch (err) {\n error('finalize: cleanup callback threw', err);\n }\n };\n\n const unsub = source.subscribe({\n complete() {\n call();\n observer.complete?.();\n },\n error(err) {\n call();\n observer.error?.(err);\n },\n next: observer.next,\n });\n\n return () => {\n call();\n unsub();\n };\n });\n}\n\n/** Reject value used when `signal` aborts a pending `toPromise()`/`toArray()`. */\nfunction abortError(signal: AbortSignal): unknown {\n return signal.reason ?? new DOMException('Aborted', 'AbortError');\n}\n\n/**\n * Convert a `Flux` to a `Promise` that resolves with the last emitted value\n * when the source completes, or rejects on error.\n * Pass `signal` to unsubscribe and reject early if the caller loses interest\n * before the source completes (e.g. a component unmounting).\n *\n * @example\n * const result = await toPromise(source$);\n * const cancellable = await toPromise(source$, controller.signal);\n */\nexport function toPromise<T>(source: Flux<T>, signal?: AbortSignal): Promise<T | undefined> {\n return new Promise<T | undefined>((resolve, reject) => {\n if (signal?.aborted) {\n reject(abortError(signal));\n\n return;\n }\n\n let last: T | undefined;\n let unsub: Unsubscribe = () => {};\n\n const onAbort = (): void => {\n unsub();\n reject(abortError(signal!));\n };\n\n // Add the listener before subscribing — the source may complete/error synchronously\n // during subscribe(), and the complete/error handlers below need it already registered\n // to remove it (otherwise it leaks on `signal` until the signal itself is GC'd).\n signal?.addEventListener('abort', onAbort, { once: true });\n\n unsub = source.subscribe({\n complete() {\n signal?.removeEventListener('abort', onAbort);\n resolve(last);\n },\n error(err) {\n signal?.removeEventListener('abort', onAbort);\n reject(err);\n },\n next(v) {\n last = v;\n },\n });\n });\n}\n\n/**\n * Collect all emitted values into an array resolved when the source completes.\n * Pass `signal` to stop early and resolve with the values collected so far\n * (rather than reject) if the caller loses interest before completion.\n *\n * @example\n * const all = await toArray(of(1, 2, 3));\n * const partial = await toArray(source$, controller.signal);\n */\nexport function toArray<T>(source: Flux<T>, signal?: AbortSignal): Promise<T[]> {\n return new Promise<T[]>((resolve, reject) => {\n const results: T[] = [];\n\n if (signal?.aborted) {\n resolve(results);\n\n return;\n }\n\n let unsub: Unsubscribe = () => {};\n\n const onAbort = (): void => {\n unsub();\n resolve(results);\n };\n\n // See toPromise() above for why the listener is added before subscribing.\n signal?.addEventListener('abort', onAbort, { once: true });\n\n unsub = source.subscribe({\n complete() {\n signal?.removeEventListener('abort', onAbort);\n resolve(results);\n },\n error(err) {\n signal?.removeEventListener('abort', onAbort);\n reject(err);\n },\n next(v) {\n results.push(v);\n },\n });\n });\n}\n\n/**\n * Compose multiple operators into a single reusable operator.\n * Provides full type safety at any pipeline depth — use instead of\n * `pipe()` overloads when chaining more than 4 operators.\n *\n * @example\n * const pipeline = flow(\n * filter((n) => n % 2 === 0),\n * map((n) => n * 10),\n * take(5),\n * );\n * source$.pipe(pipeline).subscribe(console.log);\n */\nexport function flow<A, B>(op1: Operator<A, B>): Operator<A, B>;\nexport function flow<A, B, C>(op1: Operator<A, B>, op2: Operator<B, C>): Operator<A, C>;\nexport function flow<A, B, C, D>(op1: Operator<A, B>, op2: Operator<B, C>, op3: Operator<C, D>): Operator<A, D>;\nexport function flow<A, B, C, D, E>(\n op1: Operator<A, B>,\n op2: Operator<B, C>,\n op3: Operator<C, D>,\n op4: Operator<D, E>,\n): Operator<A, E>;\nexport function flow<A, B, C, D, E, F>(\n op1: Operator<A, B>,\n op2: Operator<B, C>,\n op3: Operator<C, D>,\n op4: Operator<D, E>,\n op5: Operator<E, F>,\n): Operator<A, F>;\nexport function flow<A, B, C, D, E, F, G>(\n op1: Operator<A, B>,\n op2: Operator<B, C>,\n op3: Operator<C, D>,\n op4: Operator<D, E>,\n op5: Operator<E, F>,\n op6: Operator<F, G>,\n): Operator<A, G>;\nexport function flow<A, B, C, D, E, F, G, H>(\n op1: Operator<A, B>,\n op2: Operator<B, C>,\n op3: Operator<C, D>,\n op4: Operator<D, E>,\n op5: Operator<E, F>,\n op6: Operator<F, G>,\n op7: Operator<G, H>,\n): Operator<A, H>;\nexport function flow<A, B, C, D, E, F, G, H, I>(\n op1: Operator<A, B>,\n op2: Operator<B, C>,\n op3: Operator<C, D>,\n op4: Operator<D, E>,\n op5: Operator<E, F>,\n op6: Operator<F, G>,\n op7: Operator<G, H>,\n op8: Operator<H, I>,\n): Operator<A, I>;\nexport function flow(...ops: Operator[]): Operator {\n return (source: Flux<unknown>) => ops.reduce((f: Flux<unknown>, op) => op(f), source);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"utility.js","names":[],"sources":["../../src/operators/utility.ts"],"sourcesContent":["import type { Operator, Stream, Subscription } from '../types';\n\nimport { link } from '../_link';\nimport { tryCall } from '../_safe';\nimport { defaultScheduler } from '../_scheduler';\nimport { stream } from '../core';\n\nexport type RetryOptions = {\n attempts: number;\n delay?: number | ((attempt: number) => number);\n};\n\nexport type ToArrayOptions = {\n maxItems: number;\n signal?: AbortSignal;\n};\n\nexport type ValueOptions = {\n signal?: AbortSignal;\n};\n\nfunction abortError(): DOMException {\n return new DOMException('Stream consumption aborted', 'AbortError');\n}\n\nexport function retry<T>(options: RetryOptions): Operator<T, T> {\n if (!Number.isInteger(options.attempts) || options.attempts < 0) {\n throw new RangeError('retry attempts must be a non-negative integer');\n }\n\n return (source) =>\n stream((sink, signal) => {\n let attempts = 0;\n let current: Subscription | undefined;\n let cancelDelay: (() => void) | undefined;\n\n const start = (): void => {\n if (signal.aborted) return;\n\n const subscription = link(\n source,\n {\n complete: sink.complete,\n error(reason) {\n if (attempts === options.attempts) {\n sink.error(reason);\n\n return;\n }\n\n const attempt = attempts++;\n let delay: number | undefined;\n\n tryCall(() => {\n delay = typeof options.delay === 'function' ? options.delay(attempt) : options.delay;\n }, sink.error);\n\n if (signal.aborted) return;\n\n if (delay !== undefined && (!Number.isFinite(delay) || delay < 0)) {\n sink.error(new RangeError('retry delay must be a finite number greater than or equal to zero'));\n\n return;\n }\n\n if (delay === undefined || delay === 0) {\n queueMicrotask(start);\n } else {\n cancelDelay = defaultScheduler.delay(start, delay);\n }\n },\n next: sink.next,\n },\n signal,\n );\n\n if (!subscription.closed) current = subscription;\n };\n\n start();\n\n return () => {\n cancelDelay?.();\n current?.unsubscribe();\n };\n });\n}\n\nexport function first<T>(source: Stream<T>, options?: ValueOptions): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const controller = new AbortController();\n const abort = (): void => {\n controller.abort();\n reject(abortError());\n };\n\n if (options?.signal?.aborted) {\n abort();\n\n return;\n }\n\n options?.signal?.addEventListener('abort', abort, { once: true });\n link(\n source,\n {\n error(reason) {\n options?.signal?.removeEventListener('abort', abort);\n reject(reason);\n },\n next(value) {\n options?.signal?.removeEventListener('abort', abort);\n controller.abort();\n resolve(value);\n },\n },\n controller.signal,\n );\n });\n}\n\nexport function last<T>(source: Stream<T>, options?: ValueOptions): Promise<T | undefined> {\n return new Promise<T | undefined>((resolve, reject) => {\n const abort = (): void => reject(abortError());\n let latest: T | undefined;\n\n if (options?.signal?.aborted) {\n abort();\n\n return;\n }\n\n options?.signal?.addEventListener('abort', abort, { once: true });\n link(\n source,\n {\n complete() {\n options?.signal?.removeEventListener('abort', abort);\n resolve(latest);\n },\n error(reason) {\n options?.signal?.removeEventListener('abort', abort);\n reject(reason);\n },\n next(value) {\n latest = value;\n },\n },\n options?.signal ?? new AbortController().signal,\n );\n });\n}\n\nexport function toArray<T>(source: Stream<T>, options: ToArrayOptions): Promise<T[]> {\n if (!Number.isInteger(options.maxItems) || options.maxItems < 0) {\n throw new RangeError('toArray maxItems must be a non-negative integer');\n }\n\n return new Promise<T[]>((resolve, reject) => {\n const controller = new AbortController();\n const values: T[] = [];\n const abort = (): void => {\n controller.abort();\n reject(abortError());\n };\n\n if (options.signal?.aborted) {\n abort();\n\n return;\n }\n\n options.signal?.addEventListener('abort', abort, { once: true });\n link(\n source,\n {\n complete() {\n options.signal?.removeEventListener('abort', abort);\n resolve(values);\n },\n error(reason) {\n options.signal?.removeEventListener('abort', abort);\n reject(reason);\n },\n next(value) {\n if (values.length === options.maxItems) {\n options.signal?.removeEventListener('abort', abort);\n controller.abort();\n reject(new RangeError('toArray maxItems exceeded'));\n\n return;\n }\n\n values.push(value);\n },\n },\n controller.signal,\n );\n });\n}\n"],"mappings":"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"}
package/dist/pipe.cjs ADDED
@@ -0,0 +1,2 @@
1
+ const e=require("./_pipe.cjs");function t(t,...n){return e.applyOperators(t,n)}exports.pipe=t;
2
+ //# sourceMappingURL=pipe.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe.cjs","names":[],"sources":["../src/pipe.ts"],"sourcesContent":["import type { Operator, PipedStream, Stream, ValidPipe } from './types';\n\nimport { applyOperators } from './_pipe';\n\n/** Standalone composition preserves contextual types for inline generic operators. */\nexport function pipe<Input>(source: Stream<Input>): Stream<Input>;\nexport function pipe<Input, A>(source: Stream<Input>, operator1: Operator<Input, A>): Stream<A>;\nexport function pipe<Input, A, B>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n): Stream<B>;\nexport function pipe<Input, A, B, C>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n): Stream<C>;\nexport function pipe<Input, A, B, C, D>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n): Stream<D>;\nexport function pipe<Input, A, B, C, D, E>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n): Stream<E>;\nexport function pipe<Input, A, B, C, D, E, F>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n): Stream<F>;\nexport function pipe<Input, A, B, C, D, E, F, G>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n operator7: Operator<F, G>,\n): Stream<G>;\nexport function pipe<Input, A, B, C, D, E, F, G, H>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n operator7: Operator<F, G>,\n operator8: Operator<G, H>,\n): Stream<H>;\nexport function pipe<Input, A, B, C, D, E, F, G, H, I>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n operator7: Operator<F, G>,\n operator8: Operator<G, H>,\n operator9: Operator<H, I>,\n): Stream<I>;\nexport function pipe<Input, A, B, C, D, E, F, G, H, I, J>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n operator7: Operator<F, G>,\n operator8: Operator<G, H>,\n operator9: Operator<H, I>,\n operator10: Operator<I, J>,\n): Stream<J>;\nexport function pipe<Input, const Operators extends readonly unknown[]>(\n source: Stream<Input>,\n ...operators: Operators & ValidPipe<Input, Operators>\n): PipedStream<Input, Operators>;\nexport function pipe<Input, const Operators extends readonly unknown[]>(\n source: Stream<Input>,\n ...operators: Operators & ValidPipe<Input, Operators>\n): PipedStream<Input, Operators> {\n return applyOperators(source as Stream<unknown>, operators) as PipedStream<Input, Operators>;\n}\n"],"mappings":"+BA4FA,SAAgB,EACd,EACA,GAAG,EAC4B,CAC/B,OAAO,EAAA,eAAe,EAA2B,CAAS,CAC5D"}
package/dist/pipe.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ import type { Operator, PipedStream, Stream, ValidPipe } from './types';
2
+ /** Standalone composition preserves contextual types for inline generic operators. */
3
+ export declare function pipe<Input>(source: Stream<Input>): Stream<Input>;
4
+ export declare function pipe<Input, A>(source: Stream<Input>, operator1: Operator<Input, A>): Stream<A>;
5
+ export declare function pipe<Input, A, B>(source: Stream<Input>, operator1: Operator<Input, A>, operator2: Operator<A, B>): Stream<B>;
6
+ export declare function pipe<Input, A, B, C>(source: Stream<Input>, operator1: Operator<Input, A>, operator2: Operator<A, B>, operator3: Operator<B, C>): Stream<C>;
7
+ export declare function pipe<Input, A, B, C, D>(source: Stream<Input>, operator1: Operator<Input, A>, operator2: Operator<A, B>, operator3: Operator<B, C>, operator4: Operator<C, D>): Stream<D>;
8
+ export declare function pipe<Input, A, B, C, D, E>(source: Stream<Input>, operator1: Operator<Input, A>, operator2: Operator<A, B>, operator3: Operator<B, C>, operator4: Operator<C, D>, operator5: Operator<D, E>): Stream<E>;
9
+ export declare function pipe<Input, A, B, C, D, E, F>(source: Stream<Input>, operator1: Operator<Input, A>, operator2: Operator<A, B>, operator3: Operator<B, C>, operator4: Operator<C, D>, operator5: Operator<D, E>, operator6: Operator<E, F>): Stream<F>;
10
+ export declare function pipe<Input, A, B, C, D, E, F, G>(source: Stream<Input>, operator1: Operator<Input, A>, operator2: Operator<A, B>, operator3: Operator<B, C>, operator4: Operator<C, D>, operator5: Operator<D, E>, operator6: Operator<E, F>, operator7: Operator<F, G>): Stream<G>;
11
+ export declare function pipe<Input, A, B, C, D, E, F, G, H>(source: Stream<Input>, operator1: Operator<Input, A>, operator2: Operator<A, B>, operator3: Operator<B, C>, operator4: Operator<C, D>, operator5: Operator<D, E>, operator6: Operator<E, F>, operator7: Operator<F, G>, operator8: Operator<G, H>): Stream<H>;
12
+ export declare function pipe<Input, A, B, C, D, E, F, G, H, I>(source: Stream<Input>, operator1: Operator<Input, A>, operator2: Operator<A, B>, operator3: Operator<B, C>, operator4: Operator<C, D>, operator5: Operator<D, E>, operator6: Operator<E, F>, operator7: Operator<F, G>, operator8: Operator<G, H>, operator9: Operator<H, I>): Stream<I>;
13
+ export declare function pipe<Input, A, B, C, D, E, F, G, H, I, J>(source: Stream<Input>, operator1: Operator<Input, A>, operator2: Operator<A, B>, operator3: Operator<B, C>, operator4: Operator<C, D>, operator5: Operator<D, E>, operator6: Operator<E, F>, operator7: Operator<F, G>, operator8: Operator<G, H>, operator9: Operator<H, I>, operator10: Operator<I, J>): Stream<J>;
14
+ export declare function pipe<Input, const Operators extends readonly unknown[]>(source: Stream<Input>, ...operators: Operators & ValidPipe<Input, Operators>): PipedStream<Input, Operators>;
15
+ //# sourceMappingURL=pipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe.d.ts","sourceRoot":"","sources":["../src/pipe.ts"],"names":[],"mappings":"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"}
package/dist/pipe.js ADDED
@@ -0,0 +1,9 @@
1
+ import { applyOperators as e } from "./_pipe.js";
2
+ //#region src/pipe.ts
3
+ function t(t, ...n) {
4
+ return e(t, n);
5
+ }
6
+ //#endregion
7
+ export { t as pipe };
8
+
9
+ //# sourceMappingURL=pipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe.js","names":[],"sources":["../src/pipe.ts"],"sourcesContent":["import type { Operator, PipedStream, Stream, ValidPipe } from './types';\n\nimport { applyOperators } from './_pipe';\n\n/** Standalone composition preserves contextual types for inline generic operators. */\nexport function pipe<Input>(source: Stream<Input>): Stream<Input>;\nexport function pipe<Input, A>(source: Stream<Input>, operator1: Operator<Input, A>): Stream<A>;\nexport function pipe<Input, A, B>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n): Stream<B>;\nexport function pipe<Input, A, B, C>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n): Stream<C>;\nexport function pipe<Input, A, B, C, D>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n): Stream<D>;\nexport function pipe<Input, A, B, C, D, E>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n): Stream<E>;\nexport function pipe<Input, A, B, C, D, E, F>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n): Stream<F>;\nexport function pipe<Input, A, B, C, D, E, F, G>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n operator7: Operator<F, G>,\n): Stream<G>;\nexport function pipe<Input, A, B, C, D, E, F, G, H>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n operator7: Operator<F, G>,\n operator8: Operator<G, H>,\n): Stream<H>;\nexport function pipe<Input, A, B, C, D, E, F, G, H, I>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n operator7: Operator<F, G>,\n operator8: Operator<G, H>,\n operator9: Operator<H, I>,\n): Stream<I>;\nexport function pipe<Input, A, B, C, D, E, F, G, H, I, J>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n operator7: Operator<F, G>,\n operator8: Operator<G, H>,\n operator9: Operator<H, I>,\n operator10: Operator<I, J>,\n): Stream<J>;\nexport function pipe<Input, const Operators extends readonly unknown[]>(\n source: Stream<Input>,\n ...operators: Operators & ValidPipe<Input, Operators>\n): PipedStream<Input, Operators>;\nexport function pipe<Input, const Operators extends readonly unknown[]>(\n source: Stream<Input>,\n ...operators: Operators & ValidPipe<Input, Operators>\n): PipedStream<Input, Operators> {\n return applyOperators(source as Stream<unknown>, operators) as PipedStream<Input, Operators>;\n}\n"],"mappings":";;AA4FA,SAAgB,EACd,GACA,GAAG,GAC4B;CAC/B,OAAO,EAAe,GAA2B,CAAS;AAC5D"}