@vielzeug/flux 2.3.2 → 2.4.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 (64) hide show
  1. package/README.md +1 -1
  2. package/dist/_subscription.cjs +1 -1
  3. package/dist/_subscription.cjs.map +1 -1
  4. package/dist/_subscription.d.ts.map +1 -1
  5. package/dist/_subscription.js +1 -1
  6. package/dist/_subscription.js.map +1 -1
  7. package/dist/adapters/courier.cjs.map +1 -1
  8. package/dist/adapters/courier.d.ts +2 -29
  9. package/dist/adapters/courier.d.ts.map +1 -1
  10. package/dist/adapters/courier.js.map +1 -1
  11. package/dist/adapters/ripple.cjs +1 -1
  12. package/dist/adapters/ripple.cjs.map +1 -1
  13. package/dist/adapters/ripple.js +27 -24
  14. package/dist/adapters/ripple.js.map +1 -1
  15. package/dist/channel.cjs +1 -1
  16. package/dist/channel.cjs.map +1 -1
  17. package/dist/channel.d.ts.map +1 -1
  18. package/dist/channel.js +13 -5
  19. package/dist/channel.js.map +1 -1
  20. package/dist/errors.cjs +1 -1
  21. package/dist/errors.cjs.map +1 -1
  22. package/dist/errors.d.ts +10 -0
  23. package/dist/errors.d.ts.map +1 -1
  24. package/dist/errors.js +10 -1
  25. package/dist/errors.js.map +1 -1
  26. package/dist/flux.cjs +1 -1
  27. package/dist/flux.cjs.map +1 -1
  28. package/dist/flux.iife.js +1 -1
  29. package/dist/flux.iife.js.map +1 -1
  30. package/dist/flux.js +1 -1
  31. package/dist/flux.js.map +1 -1
  32. package/dist/index.cjs +1 -1
  33. package/dist/index.d.ts +3 -4
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +8 -8
  36. package/dist/operators/creation.cjs +1 -1
  37. package/dist/operators/creation.cjs.map +1 -1
  38. package/dist/operators/creation.d.ts +1 -4
  39. package/dist/operators/creation.d.ts.map +1 -1
  40. package/dist/operators/creation.js +2 -2
  41. package/dist/operators/creation.js.map +1 -1
  42. package/dist/operators/filtering.cjs +1 -1
  43. package/dist/operators/filtering.cjs.map +1 -1
  44. package/dist/operators/filtering.d.ts +2 -8
  45. package/dist/operators/filtering.d.ts.map +1 -1
  46. package/dist/operators/filtering.js +4 -4
  47. package/dist/operators/filtering.js.map +1 -1
  48. package/dist/operators/transformation.cjs +1 -1
  49. package/dist/operators/transformation.cjs.map +1 -1
  50. package/dist/operators/transformation.d.ts +6 -3
  51. package/dist/operators/transformation.d.ts.map +1 -1
  52. package/dist/operators/transformation.js +42 -52
  53. package/dist/operators/transformation.js.map +1 -1
  54. package/dist/operators/utility.cjs +1 -1
  55. package/dist/operators/utility.cjs.map +1 -1
  56. package/dist/operators/utility.d.ts +3 -1
  57. package/dist/operators/utility.d.ts.map +1 -1
  58. package/dist/operators/utility.js +44 -37
  59. package/dist/operators/utility.js.map +1 -1
  60. package/package.json +10 -9
  61. package/dist/_dev.cjs +0 -2
  62. package/dist/_dev.cjs.map +0 -1
  63. package/dist/_dev.js +0 -6
  64. package/dist/_dev.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"transformation.cjs","names":[],"sources":["../../src/operators/transformation.ts"],"sourcesContent":["import { link } from '../_link';\nimport { assertPositiveInteger } from '../_numeric';\nimport { tryCall } from '../_safe';\nimport { stream } from '../core';\nimport type { Operator, Stream, Subscription } from '../types';\n\nexport type ConcatMapOptions = {\n capacity: number;\n};\n\nexport function map<A, B>(project: (value: A) => B): Operator<A, B> {\n return (source) =>\n stream(\n (sink, signal) =>\n link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n tryCall(() => sink.next(project(value)), sink.error);\n },\n },\n signal,\n ).unsubscribe,\n );\n}\n\nexport function filter<T>(predicate: (value: T) => boolean): Operator<T, T> {\n return (source) =>\n stream(\n (sink, signal) =>\n link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n tryCall(() => {\n if (predicate(value)) sink.next(value);\n }, sink.error);\n },\n },\n signal,\n ).unsubscribe,\n );\n}\n\nexport function scan<T, A>(reducer: (state: A, value: T) => A, initial: A): Operator<T, A> {\n return (source) =>\n stream((sink, signal) => {\n let state = initial;\n\n return link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n tryCall(() => {\n state = reducer(state, value);\n sink.next(state);\n }, sink.error);\n },\n },\n signal,\n ).unsubscribe;\n });\n}\n\nexport function switchMap<A, B>(project: (value: A) => Stream<B>): Operator<A, B> {\n return (source) =>\n stream((sink, signal) => {\n let outerComplete = false;\n let inner: Subscription | undefined;\n\n const finish = (): void => {\n if (outerComplete && !inner) sink.complete();\n };\n\n const outer = link(\n source,\n {\n complete() {\n outerComplete = true;\n finish();\n },\n error: sink.error,\n next(value) {\n inner?.unsubscribe();\n inner = undefined;\n\n tryCall(() => {\n const subscription = link(\n project(value),\n {\n complete() {\n inner = undefined;\n finish();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n inner = subscription.closed ? undefined : subscription;\n }, sink.error);\n },\n },\n signal,\n );\n\n return () => {\n outer.unsubscribe();\n inner?.unsubscribe();\n };\n });\n}\n\nexport function mergeMap<A, B>(project: (value: A) => Stream<B>): Operator<A, B> {\n return (source) =>\n stream((sink, signal) => {\n let outerComplete = false;\n const inners = new Set<Subscription>();\n\n const finish = (): void => {\n if (outerComplete && inners.size === 0) sink.complete();\n };\n\n const outer = link(\n source,\n {\n complete() {\n outerComplete = true;\n finish();\n },\n error: sink.error,\n next(value) {\n tryCall(() => {\n const innerRef: { current?: Subscription } = {};\n\n innerRef.current = link(\n project(value),\n {\n complete() {\n if (innerRef.current) inners.delete(innerRef.current);\n\n finish();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n if (!innerRef.current.closed) inners.add(innerRef.current);\n }, sink.error);\n },\n },\n signal,\n );\n\n return () => {\n outer.unsubscribe();\n for (const inner of inners) inner.unsubscribe();\n };\n });\n}\n\nexport function concatMap<A, B>(project: (value: A) => Stream<B>, options: ConcatMapOptions): Operator<A, B> {\n assertPositiveInteger(options.capacity, 'concatMap capacity');\n\n return (source) =>\n stream((sink, signal) => {\n const queue: A[] = [];\n let outerComplete = false;\n let inner: Subscription | undefined;\n const outerRef: { current?: Subscription } = {};\n\n const next = (): void => {\n if (inner || queue.length === 0) {\n if (outerComplete && !inner && queue.length === 0) sink.complete();\n\n return;\n }\n\n const value = queue.shift()!;\n\n tryCall(() => {\n const subscription = link(\n project(value),\n {\n complete() {\n inner = undefined;\n next();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n inner = subscription.closed ? undefined : subscription;\n\n if (!inner) next();\n }, sink.error);\n };\n\n outerRef.current = link(\n source,\n {\n complete() {\n outerComplete = true;\n next();\n },\n error: sink.error,\n next(value) {\n if (queue.length === options.capacity) {\n outerRef.current?.unsubscribe();\n sink.error(new RangeError('concatMap buffer capacity exceeded'));\n\n return;\n }\n\n queue.push(value);\n next();\n },\n },\n signal,\n );\n\n return () => {\n outerRef.current?.unsubscribe();\n inner?.unsubscribe();\n queue.length = 0;\n };\n });\n}\n"],"mappings":"gHAUA,SAAgB,EAAU,EAA0C,CAClE,MAAQ,IACN,EAAA,QACG,EAAM,IACL,EAAA,KACE,EACA,CACE,SAAU,EAAK,SACf,MAAO,EAAK,MACZ,KAAK,EAAO,CACV,EAAA,YAAc,EAAK,KAAK,EAAQ,CAAK,CAAC,EAAG,EAAK,KAAK,CACrD,CACF,EACA,CACF,CAAC,CAAC,WACN,CACJ,CAEA,SAAgB,EAAU,EAAkD,CAC1E,MAAQ,IACN,EAAA,QACG,EAAM,IACL,EAAA,KACE,EACA,CACE,SAAU,EAAK,SACf,MAAO,EAAK,MACZ,KAAK,EAAO,CACV,EAAA,YAAc,CACR,EAAU,CAAK,GAAG,EAAK,KAAK,CAAK,CACvC,EAAG,EAAK,KAAK,CACf,CACF,EACA,CACF,CAAC,CAAC,WACN,CACJ,CAEA,SAAgB,EAAW,EAAoC,EAA4B,CACzF,MAAQ,IACN,EAAA,QAAQ,EAAM,IAAW,CACvB,IAAI,EAAQ,EAEZ,OAAO,EAAA,KACL,EACA,CACE,SAAU,EAAK,SACf,MAAO,EAAK,MACZ,KAAK,EAAO,CACV,EAAA,YAAc,CACZ,EAAQ,EAAQ,EAAO,CAAK,EAC5B,EAAK,KAAK,CAAK,CACjB,EAAG,EAAK,KAAK,CACf,CACF,EACA,CACF,CAAC,CAAC,WACJ,CAAC,CACL,CAEA,SAAgB,EAAgB,EAAkD,CAChF,MAAQ,IACN,EAAA,QAAQ,EAAM,IAAW,CACvB,IAAI,EAAgB,GAChB,EAEE,MAAqB,CACrB,GAAiB,CAAC,GAAO,EAAK,SAAS,CAC7C,EAEM,EAAQ,EAAA,KACZ,EACA,CACE,UAAW,CACT,EAAgB,GAChB,EAAO,CACT,EACA,MAAO,EAAK,MACZ,KAAK,EAAO,CACV,GAAO,YAAY,EACnB,EAAQ,IAAA,GAER,EAAA,YAAc,CACZ,IAAM,EAAe,EAAA,KACnB,EAAQ,CAAK,EACb,CACE,UAAW,CACT,EAAQ,IAAA,GACR,EAAO,CACT,EACA,MAAO,EAAK,MACZ,KAAM,EAAK,IACb,EACA,CACF,EAEA,EAAQ,EAAa,OAAS,IAAA,GAAY,CAC5C,EAAG,EAAK,KAAK,CACf,CACF,EACA,CACF,EAEA,UAAa,CACX,EAAM,YAAY,EAClB,GAAO,YAAY,CACrB,CACF,CAAC,CACL,CAEA,SAAgB,EAAe,EAAkD,CAC/E,MAAQ,IACN,EAAA,QAAQ,EAAM,IAAW,CACvB,IAAI,EAAgB,GACd,EAAS,IAAI,IAEb,MAAqB,CACrB,GAAiB,EAAO,OAAS,GAAG,EAAK,SAAS,CACxD,EAEM,EAAQ,EAAA,KACZ,EACA,CACE,UAAW,CACT,EAAgB,GAChB,EAAO,CACT,EACA,MAAO,EAAK,MACZ,KAAK,EAAO,CACV,EAAA,YAAc,CACZ,IAAM,EAAuC,CAAC,EAE9C,EAAS,QAAU,EAAA,KACjB,EAAQ,CAAK,EACb,CACE,UAAW,CACL,EAAS,SAAS,EAAO,OAAO,EAAS,OAAO,EAEpD,EAAO,CACT,EACA,MAAO,EAAK,MACZ,KAAM,EAAK,IACb,EACA,CACF,EAEK,EAAS,QAAQ,QAAQ,EAAO,IAAI,EAAS,OAAO,CAC3D,EAAG,EAAK,KAAK,CACf,CACF,EACA,CACF,EAEA,UAAa,CACX,EAAM,YAAY,EAClB,IAAK,IAAM,KAAS,EAAQ,EAAM,YAAY,CAChD,CACF,CAAC,CACL,CAEA,SAAgB,EAAgB,EAAkC,EAA2C,CAG3G,OAFA,EAAA,sBAAsB,EAAQ,SAAU,oBAAoB,EAEpD,GACN,EAAA,QAAQ,EAAM,IAAW,CACvB,IAAM,EAAa,CAAC,EAChB,EAAgB,GAChB,EACE,EAAuC,CAAC,EAExC,MAAmB,CACvB,GAAI,GAAS,EAAM,SAAW,EAAG,CAC3B,GAAiB,CAAC,GAAS,EAAM,SAAW,GAAG,EAAK,SAAS,EAEjE,MACF,CAEA,IAAM,EAAQ,EAAM,MAAM,EAE1B,EAAA,YAAc,CACZ,IAAM,EAAe,EAAA,KACnB,EAAQ,CAAK,EACb,CACE,UAAW,CACT,EAAQ,IAAA,GACR,EAAK,CACP,EACA,MAAO,EAAK,MACZ,KAAM,EAAK,IACb,EACA,CACF,EAEA,EAAQ,EAAa,OAAS,IAAA,GAAY,EAErC,GAAO,EAAK,CACnB,EAAG,EAAK,KAAK,CACf,EAyBA,MAvBA,GAAS,QAAU,EAAA,KACjB,EACA,CACE,UAAW,CACT,EAAgB,GAChB,EAAK,CACP,EACA,MAAO,EAAK,MACZ,KAAK,EAAO,CACV,GAAI,EAAM,SAAW,EAAQ,SAAU,CACrC,EAAS,SAAS,YAAY,EAC9B,EAAK,MAAU,WAAW,oCAAoC,CAAC,EAE/D,MACF,CAEA,EAAM,KAAK,CAAK,EAChB,EAAK,CACP,CACF,EACA,CACF,MAEa,CACX,EAAS,SAAS,YAAY,EAC9B,GAAO,YAAY,EACnB,EAAM,OAAS,CACjB,CACF,CAAC,CACL"}
1
+ {"version":3,"file":"transformation.cjs","names":[],"sources":["../../src/operators/transformation.ts"],"sourcesContent":["import { link } from '../_link';\nimport { assertPositiveInteger } from '../_numeric';\nimport { tryCall } from '../_safe';\nimport { stream } from '../core';\nimport { FluxCapacityError } from '../errors';\nimport type { Operator, Stream, Subscription } from '../types';\n\nexport type FlattenOptions = {\n /** Maximum concurrently active inner subscriptions. Use `Infinity` for unbounded concurrency. */\n concurrency: number;\n /** Maximum queued outer values waiting for an inner subscription slot. Required when `concurrency` is finite. */\n capacity: number;\n};\n\nexport function map<A, B>(project: (value: A) => B): Operator<A, B> {\n return (source) =>\n stream(\n (sink, signal) =>\n link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n tryCall(() => sink.next(project(value)), sink.error);\n },\n },\n signal,\n ).unsubscribe,\n );\n}\n\nexport function filter<T>(predicate: (value: T) => boolean): Operator<T, T> {\n return (source) =>\n stream(\n (sink, signal) =>\n link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n tryCall(() => {\n if (predicate(value)) sink.next(value);\n }, sink.error);\n },\n },\n signal,\n ).unsubscribe,\n );\n}\n\nexport function scan<T, A>(reducer: (state: A, value: T) => A, initial: A): Operator<T, A> {\n return (source) =>\n stream((sink, signal) => {\n let state = initial;\n\n return link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n tryCall(() => {\n state = reducer(state, value);\n sink.next(state);\n }, sink.error);\n },\n },\n signal,\n ).unsubscribe;\n });\n}\n\nexport function switchMap<A, B>(project: (value: A) => Stream<B>): Operator<A, B> {\n return (source) =>\n stream((sink, signal) => {\n let outerComplete = false;\n let inner: Subscription | undefined;\n\n const finish = (): void => {\n if (outerComplete && !inner) sink.complete();\n };\n\n const outer = link(\n source,\n {\n complete() {\n outerComplete = true;\n finish();\n },\n error: sink.error,\n next(value) {\n inner?.unsubscribe();\n inner = undefined;\n\n tryCall(() => {\n const subscription = link(\n project(value),\n {\n complete() {\n inner = undefined;\n finish();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n inner = subscription.closed ? undefined : subscription;\n }, sink.error);\n },\n },\n signal,\n );\n\n return () => {\n outer.unsubscribe();\n inner?.unsubscribe();\n };\n });\n}\n\nfunction flatten<A, B>(project: (value: A) => Stream<B>, options: FlattenOptions): Operator<A, B> {\n const unbounded = options.concurrency === Infinity;\n\n if (!unbounded) {\n assertPositiveInteger(options.concurrency, 'mergeMap concurrency');\n assertPositiveInteger(options.capacity, 'mergeMap capacity');\n }\n\n return (source) =>\n stream((sink, signal) => {\n const queue: A[] = [];\n const inners = new Set<Subscription>();\n let outerComplete = false;\n const outerRef: { current?: Subscription } = {};\n\n const finish = (): void => {\n if (outerComplete && inners.size === 0 && queue.length === 0) sink.complete();\n };\n\n const startInner = (value: A): void => {\n tryCall(() => {\n const innerRef: { current?: Subscription } = {};\n\n innerRef.current = link(\n project(value),\n {\n complete() {\n if (innerRef.current) inners.delete(innerRef.current);\n\n drain();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n if (!innerRef.current.closed) inners.add(innerRef.current);\n else drain();\n }, sink.error);\n };\n\n const drain = (): void => {\n if (signal.aborted) return;\n\n while (queue.length > 0 && (unbounded || inners.size < options.concurrency)) {\n const value = queue.shift()!;\n\n startInner(value);\n }\n\n finish();\n };\n\n outerRef.current = link(\n source,\n {\n complete() {\n outerComplete = true;\n finish();\n },\n error: sink.error,\n next(value) {\n if (!unbounded && queue.length >= options.capacity) {\n outerRef.current?.unsubscribe();\n sink.error(new FluxCapacityError(options.capacity, 'mergeMap buffer capacity exceeded'));\n\n return;\n }\n\n queue.push(value);\n drain();\n },\n },\n signal,\n );\n\n return () => {\n outerRef.current?.unsubscribe();\n for (const inner of inners) inner.unsubscribe();\n queue.length = 0;\n };\n });\n}\n\nexport function mergeMap<A, B>(project: (value: A) => Stream<B>, options: FlattenOptions): Operator<A, B> {\n return flatten(project, options);\n}\n\nexport function concatMap<A, B>(\n project: (value: A) => Stream<B>,\n options: Omit<FlattenOptions, 'concurrency'>,\n): Operator<A, B> {\n return flatten(project, { capacity: options.capacity, concurrency: 1 });\n}\n"],"mappings":"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"}
@@ -1,11 +1,14 @@
1
1
  import type { Operator, Stream } from '../types';
2
- export type ConcatMapOptions = {
2
+ export type FlattenOptions = {
3
+ /** Maximum concurrently active inner subscriptions. Use `Infinity` for unbounded concurrency. */
4
+ concurrency: number;
5
+ /** Maximum queued outer values waiting for an inner subscription slot. Required when `concurrency` is finite. */
3
6
  capacity: number;
4
7
  };
5
8
  export declare function map<A, B>(project: (value: A) => B): Operator<A, B>;
6
9
  export declare function filter<T>(predicate: (value: T) => boolean): Operator<T, T>;
7
10
  export declare function scan<T, A>(reducer: (state: A, value: T) => A, initial: A): Operator<T, A>;
8
11
  export declare function switchMap<A, B>(project: (value: A) => Stream<B>): Operator<A, B>;
9
- export declare function mergeMap<A, B>(project: (value: A) => Stream<B>): Operator<A, B>;
10
- export declare function concatMap<A, B>(project: (value: A) => Stream<B>, options: ConcatMapOptions): Operator<A, B>;
12
+ export declare function mergeMap<A, B>(project: (value: A) => Stream<B>, options: FlattenOptions): Operator<A, B>;
13
+ export declare function concatMap<A, B>(project: (value: A) => Stream<B>, options: Omit<FlattenOptions, 'concurrency'>): Operator<A, B>;
11
14
  //# sourceMappingURL=transformation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transformation.d.ts","sourceRoot":"","sources":["../../src/operators/transformation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAgB,MAAM,UAAU,CAAC;AAE/D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAgBlE;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAkB1E;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAoBzF;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAgDhF;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAgD/E;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAoE3G"}
1
+ {"version":3,"file":"transformation.d.ts","sourceRoot":"","sources":["../../src/operators/transformation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAgB,MAAM,UAAU,CAAC;AAE/D,MAAM,MAAM,cAAc,GAAG;IAC3B,iGAAiG;IACjG,WAAW,EAAE,MAAM,CAAC;IACpB,iHAAiH;IACjH,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAgBlE;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAkB1E;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAoBzF;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAgDhF;AAuFD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAExG;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAC5B,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAChC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,GAC3C,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAEhB"}
@@ -2,8 +2,9 @@ import { assertPositiveInteger as e } from "../_numeric.js";
2
2
  import { stream as t } from "../core.js";
3
3
  import { link as n } from "../_link.js";
4
4
  import { tryCall as r } from "../_safe.js";
5
+ import { FluxCapacityError as i } from "../errors.js";
5
6
  //#region src/operators/transformation.ts
6
- function i(e) {
7
+ function a(e) {
7
8
  return (i) => t((t, a) => n(i, {
8
9
  complete: t.complete,
9
10
  error: t.error,
@@ -12,7 +13,7 @@ function i(e) {
12
13
  }
13
14
  }, a).unsubscribe);
14
15
  }
15
- function a(e) {
16
+ function o(e) {
16
17
  return (i) => t((t, a) => n(i, {
17
18
  complete: t.complete,
18
19
  error: t.error,
@@ -23,7 +24,7 @@ function a(e) {
23
24
  }
24
25
  }, a).unsubscribe);
25
26
  }
26
- function o(e, i) {
27
+ function s(e, i) {
27
28
  return (a) => t((t, o) => {
28
29
  let s = i;
29
30
  return n(a, {
@@ -37,7 +38,7 @@ function o(e, i) {
37
38
  }, o).unsubscribe;
38
39
  });
39
40
  }
40
- function s(e) {
41
+ function c(e) {
41
42
  return (i) => t((t, a) => {
42
43
  let o = !1, s, c = () => {
43
44
  o && !s && t.complete();
@@ -64,71 +65,60 @@ function s(e) {
64
65
  };
65
66
  });
66
67
  }
67
- function c(e) {
68
- return (i) => t((t, a) => {
69
- let o = !1, s = /* @__PURE__ */ new Set(), c = () => {
70
- o && s.size === 0 && t.complete();
71
- }, l = n(i, {
72
- complete() {
73
- o = !0, c();
74
- },
75
- error: t.error,
76
- next(i) {
77
- r(() => {
78
- let r = {};
79
- r.current = n(e(i), {
80
- complete() {
81
- r.current && s.delete(r.current), c();
82
- },
83
- error: t.error,
84
- next: t.next
85
- }, a), r.current.closed || s.add(r.current);
86
- }, t.error);
87
- }
88
- }, a);
89
- return () => {
90
- l.unsubscribe();
91
- for (let e of s) e.unsubscribe();
92
- };
93
- });
94
- }
95
- function l(i, a) {
96
- return e(a.capacity, "concatMap capacity"), (e) => t((t, o) => {
97
- let s = [], c = !1, l, u = {}, d = () => {
98
- if (l || s.length === 0) {
99
- c && !l && s.length === 0 && t.complete();
100
- return;
101
- }
102
- let e = s.shift();
68
+ function l(a, o) {
69
+ let s = o.concurrency === Infinity;
70
+ return s || (e(o.concurrency, "mergeMap concurrency"), e(o.capacity, "mergeMap capacity")), (e) => t((t, c) => {
71
+ let l = [], u = /* @__PURE__ */ new Set(), d = !1, f = {}, p = () => {
72
+ d && u.size === 0 && l.length === 0 && t.complete();
73
+ }, m = (e) => {
103
74
  r(() => {
104
- let r = n(i(e), {
75
+ let r = {};
76
+ r.current = n(a(e), {
105
77
  complete() {
106
- l = void 0, d();
78
+ r.current && u.delete(r.current), h();
107
79
  },
108
80
  error: t.error,
109
81
  next: t.next
110
- }, o);
111
- l = r.closed ? void 0 : r, l || d();
82
+ }, c), r.current.closed ? h() : u.add(r.current);
112
83
  }, t.error);
84
+ }, h = () => {
85
+ if (!c.aborted) {
86
+ for (; l.length > 0 && (s || u.size < o.concurrency);) {
87
+ let e = l.shift();
88
+ m(e);
89
+ }
90
+ p();
91
+ }
113
92
  };
114
- return u.current = n(e, {
93
+ return f.current = n(e, {
115
94
  complete() {
116
- c = !0, d();
95
+ d = !0, p();
117
96
  },
118
97
  error: t.error,
119
98
  next(e) {
120
- if (s.length === a.capacity) {
121
- u.current?.unsubscribe(), t.error(/* @__PURE__ */ RangeError("concatMap buffer capacity exceeded"));
99
+ if (!s && l.length >= o.capacity) {
100
+ f.current?.unsubscribe(), t.error(new i(o.capacity, "mergeMap buffer capacity exceeded"));
122
101
  return;
123
102
  }
124
- s.push(e), d();
103
+ l.push(e), h();
125
104
  }
126
- }, o), () => {
127
- u.current?.unsubscribe(), l?.unsubscribe(), s.length = 0;
105
+ }, c), () => {
106
+ f.current?.unsubscribe();
107
+ for (let e of u) e.unsubscribe();
108
+ l.length = 0;
128
109
  };
129
110
  });
130
111
  }
112
+ function u(e, t) {
113
+ return l(e, t);
114
+ }
115
+ function d(e, t) {
116
+ return l(e, {
117
+ capacity: t.capacity,
118
+ concurrency: 1
119
+ });
120
+ }
131
121
  //#endregion
132
- export { l as concatMap, a as filter, i as map, c as mergeMap, o as scan, s as switchMap };
122
+ export { d as concatMap, o as filter, a as map, u as mergeMap, s as scan, c as switchMap };
133
123
 
134
124
  //# sourceMappingURL=transformation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transformation.js","names":[],"sources":["../../src/operators/transformation.ts"],"sourcesContent":["import { link } from '../_link';\nimport { assertPositiveInteger } from '../_numeric';\nimport { tryCall } from '../_safe';\nimport { stream } from '../core';\nimport type { Operator, Stream, Subscription } from '../types';\n\nexport type ConcatMapOptions = {\n capacity: number;\n};\n\nexport function map<A, B>(project: (value: A) => B): Operator<A, B> {\n return (source) =>\n stream(\n (sink, signal) =>\n link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n tryCall(() => sink.next(project(value)), sink.error);\n },\n },\n signal,\n ).unsubscribe,\n );\n}\n\nexport function filter<T>(predicate: (value: T) => boolean): Operator<T, T> {\n return (source) =>\n stream(\n (sink, signal) =>\n link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n tryCall(() => {\n if (predicate(value)) sink.next(value);\n }, sink.error);\n },\n },\n signal,\n ).unsubscribe,\n );\n}\n\nexport function scan<T, A>(reducer: (state: A, value: T) => A, initial: A): Operator<T, A> {\n return (source) =>\n stream((sink, signal) => {\n let state = initial;\n\n return link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n tryCall(() => {\n state = reducer(state, value);\n sink.next(state);\n }, sink.error);\n },\n },\n signal,\n ).unsubscribe;\n });\n}\n\nexport function switchMap<A, B>(project: (value: A) => Stream<B>): Operator<A, B> {\n return (source) =>\n stream((sink, signal) => {\n let outerComplete = false;\n let inner: Subscription | undefined;\n\n const finish = (): void => {\n if (outerComplete && !inner) sink.complete();\n };\n\n const outer = link(\n source,\n {\n complete() {\n outerComplete = true;\n finish();\n },\n error: sink.error,\n next(value) {\n inner?.unsubscribe();\n inner = undefined;\n\n tryCall(() => {\n const subscription = link(\n project(value),\n {\n complete() {\n inner = undefined;\n finish();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n inner = subscription.closed ? undefined : subscription;\n }, sink.error);\n },\n },\n signal,\n );\n\n return () => {\n outer.unsubscribe();\n inner?.unsubscribe();\n };\n });\n}\n\nexport function mergeMap<A, B>(project: (value: A) => Stream<B>): Operator<A, B> {\n return (source) =>\n stream((sink, signal) => {\n let outerComplete = false;\n const inners = new Set<Subscription>();\n\n const finish = (): void => {\n if (outerComplete && inners.size === 0) sink.complete();\n };\n\n const outer = link(\n source,\n {\n complete() {\n outerComplete = true;\n finish();\n },\n error: sink.error,\n next(value) {\n tryCall(() => {\n const innerRef: { current?: Subscription } = {};\n\n innerRef.current = link(\n project(value),\n {\n complete() {\n if (innerRef.current) inners.delete(innerRef.current);\n\n finish();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n if (!innerRef.current.closed) inners.add(innerRef.current);\n }, sink.error);\n },\n },\n signal,\n );\n\n return () => {\n outer.unsubscribe();\n for (const inner of inners) inner.unsubscribe();\n };\n });\n}\n\nexport function concatMap<A, B>(project: (value: A) => Stream<B>, options: ConcatMapOptions): Operator<A, B> {\n assertPositiveInteger(options.capacity, 'concatMap capacity');\n\n return (source) =>\n stream((sink, signal) => {\n const queue: A[] = [];\n let outerComplete = false;\n let inner: Subscription | undefined;\n const outerRef: { current?: Subscription } = {};\n\n const next = (): void => {\n if (inner || queue.length === 0) {\n if (outerComplete && !inner && queue.length === 0) sink.complete();\n\n return;\n }\n\n const value = queue.shift()!;\n\n tryCall(() => {\n const subscription = link(\n project(value),\n {\n complete() {\n inner = undefined;\n next();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n inner = subscription.closed ? undefined : subscription;\n\n if (!inner) next();\n }, sink.error);\n };\n\n outerRef.current = link(\n source,\n {\n complete() {\n outerComplete = true;\n next();\n },\n error: sink.error,\n next(value) {\n if (queue.length === options.capacity) {\n outerRef.current?.unsubscribe();\n sink.error(new RangeError('concatMap buffer capacity exceeded'));\n\n return;\n }\n\n queue.push(value);\n next();\n },\n },\n signal,\n );\n\n return () => {\n outerRef.current?.unsubscribe();\n inner?.unsubscribe();\n queue.length = 0;\n };\n });\n}\n"],"mappings":";;;;;AAUA,SAAgB,EAAU,GAA0C;CAClE,QAAQ,MACN,GACG,GAAM,MACL,EACE,GACA;EACE,UAAU,EAAK;EACf,OAAO,EAAK;EACZ,KAAK,GAAO;GACV,QAAc,EAAK,KAAK,EAAQ,CAAK,CAAC,GAAG,EAAK,KAAK;EACrD;CACF,GACA,CACF,CAAC,CAAC,WACN;AACJ;AAEA,SAAgB,EAAU,GAAkD;CAC1E,QAAQ,MACN,GACG,GAAM,MACL,EACE,GACA;EACE,UAAU,EAAK;EACf,OAAO,EAAK;EACZ,KAAK,GAAO;GACV,QAAc;IACZ,AAAI,EAAU,CAAK,KAAG,EAAK,KAAK,CAAK;GACvC,GAAG,EAAK,KAAK;EACf;CACF,GACA,CACF,CAAC,CAAC,WACN;AACJ;AAEA,SAAgB,EAAW,GAAoC,GAA4B;CACzF,QAAQ,MACN,GAAQ,GAAM,MAAW;EACvB,IAAI,IAAQ;EAEZ,OAAO,EACL,GACA;GACE,UAAU,EAAK;GACf,OAAO,EAAK;GACZ,KAAK,GAAO;IACV,QAAc;KAEZ,AADA,IAAQ,EAAQ,GAAO,CAAK,GAC5B,EAAK,KAAK,CAAK;IACjB,GAAG,EAAK,KAAK;GACf;EACF,GACA,CACF,CAAC,CAAC;CACJ,CAAC;AACL;AAEA,SAAgB,EAAgB,GAAkD;CAChF,QAAQ,MACN,GAAQ,GAAM,MAAW;EACvB,IAAI,IAAgB,IAChB,GAEE,UAAqB;GACzB,AAAI,KAAiB,CAAC,KAAO,EAAK,SAAS;EAC7C,GAEM,IAAQ,EACZ,GACA;GACE,WAAW;IAET,AADA,IAAgB,IAChB,EAAO;GACT;GACA,OAAO,EAAK;GACZ,KAAK,GAAO;IAIV,AAHA,GAAO,YAAY,GACnB,IAAQ,KAAA,GAER,QAAc;KACZ,IAAM,IAAe,EACnB,EAAQ,CAAK,GACb;MACE,WAAW;OAET,AADA,IAAQ,KAAA,GACR,EAAO;MACT;MACA,OAAO,EAAK;MACZ,MAAM,EAAK;KACb,GACA,CACF;KAEA,IAAQ,EAAa,SAAS,KAAA,IAAY;IAC5C,GAAG,EAAK,KAAK;GACf;EACF,GACA,CACF;EAEA,aAAa;GAEX,AADA,EAAM,YAAY,GAClB,GAAO,YAAY;EACrB;CACF,CAAC;AACL;AAEA,SAAgB,EAAe,GAAkD;CAC/E,QAAQ,MACN,GAAQ,GAAM,MAAW;EACvB,IAAI,IAAgB,IACd,oBAAS,IAAI,IAAkB,GAE/B,UAAqB;GACzB,AAAI,KAAiB,EAAO,SAAS,KAAG,EAAK,SAAS;EACxD,GAEM,IAAQ,EACZ,GACA;GACE,WAAW;IAET,AADA,IAAgB,IAChB,EAAO;GACT;GACA,OAAO,EAAK;GACZ,KAAK,GAAO;IACV,QAAc;KACZ,IAAM,IAAuC,CAAC;KAgB9C,AAdA,EAAS,UAAU,EACjB,EAAQ,CAAK,GACb;MACE,WAAW;OAGT,AAFI,EAAS,WAAS,EAAO,OAAO,EAAS,OAAO,GAEpD,EAAO;MACT;MACA,OAAO,EAAK;MACZ,MAAM,EAAK;KACb,GACA,CACF,GAEK,EAAS,QAAQ,UAAQ,EAAO,IAAI,EAAS,OAAO;IAC3D,GAAG,EAAK,KAAK;GACf;EACF,GACA,CACF;EAEA,aAAa;GACX,EAAM,YAAY;GAClB,KAAK,IAAM,KAAS,GAAQ,EAAM,YAAY;EAChD;CACF,CAAC;AACL;AAEA,SAAgB,EAAgB,GAAkC,GAA2C;CAG3G,OAFA,EAAsB,EAAQ,UAAU,oBAAoB,IAEpD,MACN,GAAQ,GAAM,MAAW;EACvB,IAAM,IAAa,CAAC,GAChB,IAAgB,IAChB,GACE,IAAuC,CAAC,GAExC,UAAmB;GACvB,IAAI,KAAS,EAAM,WAAW,GAAG;IAC/B,AAAI,KAAiB,CAAC,KAAS,EAAM,WAAW,KAAG,EAAK,SAAS;IAEjE;GACF;GAEA,IAAM,IAAQ,EAAM,MAAM;GAE1B,QAAc;IACZ,IAAM,IAAe,EACnB,EAAQ,CAAK,GACb;KACE,WAAW;MAET,AADA,IAAQ,KAAA,GACR,EAAK;KACP;KACA,OAAO,EAAK;KACZ,MAAM,EAAK;IACb,GACA,CACF;IAIA,AAFA,IAAQ,EAAa,SAAS,KAAA,IAAY,GAErC,KAAO,EAAK;GACnB,GAAG,EAAK,KAAK;EACf;EAyBA,OAvBA,EAAS,UAAU,EACjB,GACA;GACE,WAAW;IAET,AADA,IAAgB,IAChB,EAAK;GACP;GACA,OAAO,EAAK;GACZ,KAAK,GAAO;IACV,IAAI,EAAM,WAAW,EAAQ,UAAU;KAErC,AADA,EAAS,SAAS,YAAY,GAC9B,EAAK,MAAM,gBAAI,WAAW,oCAAoC,CAAC;KAE/D;IACF;IAGA,AADA,EAAM,KAAK,CAAK,GAChB,EAAK;GACP;EACF,GACA,CACF,SAEa;GAGX,AAFA,EAAS,SAAS,YAAY,GAC9B,GAAO,YAAY,GACnB,EAAM,SAAS;EACjB;CACF,CAAC;AACL"}
1
+ {"version":3,"file":"transformation.js","names":[],"sources":["../../src/operators/transformation.ts"],"sourcesContent":["import { link } from '../_link';\nimport { assertPositiveInteger } from '../_numeric';\nimport { tryCall } from '../_safe';\nimport { stream } from '../core';\nimport { FluxCapacityError } from '../errors';\nimport type { Operator, Stream, Subscription } from '../types';\n\nexport type FlattenOptions = {\n /** Maximum concurrently active inner subscriptions. Use `Infinity` for unbounded concurrency. */\n concurrency: number;\n /** Maximum queued outer values waiting for an inner subscription slot. Required when `concurrency` is finite. */\n capacity: number;\n};\n\nexport function map<A, B>(project: (value: A) => B): Operator<A, B> {\n return (source) =>\n stream(\n (sink, signal) =>\n link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n tryCall(() => sink.next(project(value)), sink.error);\n },\n },\n signal,\n ).unsubscribe,\n );\n}\n\nexport function filter<T>(predicate: (value: T) => boolean): Operator<T, T> {\n return (source) =>\n stream(\n (sink, signal) =>\n link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n tryCall(() => {\n if (predicate(value)) sink.next(value);\n }, sink.error);\n },\n },\n signal,\n ).unsubscribe,\n );\n}\n\nexport function scan<T, A>(reducer: (state: A, value: T) => A, initial: A): Operator<T, A> {\n return (source) =>\n stream((sink, signal) => {\n let state = initial;\n\n return link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n tryCall(() => {\n state = reducer(state, value);\n sink.next(state);\n }, sink.error);\n },\n },\n signal,\n ).unsubscribe;\n });\n}\n\nexport function switchMap<A, B>(project: (value: A) => Stream<B>): Operator<A, B> {\n return (source) =>\n stream((sink, signal) => {\n let outerComplete = false;\n let inner: Subscription | undefined;\n\n const finish = (): void => {\n if (outerComplete && !inner) sink.complete();\n };\n\n const outer = link(\n source,\n {\n complete() {\n outerComplete = true;\n finish();\n },\n error: sink.error,\n next(value) {\n inner?.unsubscribe();\n inner = undefined;\n\n tryCall(() => {\n const subscription = link(\n project(value),\n {\n complete() {\n inner = undefined;\n finish();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n inner = subscription.closed ? undefined : subscription;\n }, sink.error);\n },\n },\n signal,\n );\n\n return () => {\n outer.unsubscribe();\n inner?.unsubscribe();\n };\n });\n}\n\nfunction flatten<A, B>(project: (value: A) => Stream<B>, options: FlattenOptions): Operator<A, B> {\n const unbounded = options.concurrency === Infinity;\n\n if (!unbounded) {\n assertPositiveInteger(options.concurrency, 'mergeMap concurrency');\n assertPositiveInteger(options.capacity, 'mergeMap capacity');\n }\n\n return (source) =>\n stream((sink, signal) => {\n const queue: A[] = [];\n const inners = new Set<Subscription>();\n let outerComplete = false;\n const outerRef: { current?: Subscription } = {};\n\n const finish = (): void => {\n if (outerComplete && inners.size === 0 && queue.length === 0) sink.complete();\n };\n\n const startInner = (value: A): void => {\n tryCall(() => {\n const innerRef: { current?: Subscription } = {};\n\n innerRef.current = link(\n project(value),\n {\n complete() {\n if (innerRef.current) inners.delete(innerRef.current);\n\n drain();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n if (!innerRef.current.closed) inners.add(innerRef.current);\n else drain();\n }, sink.error);\n };\n\n const drain = (): void => {\n if (signal.aborted) return;\n\n while (queue.length > 0 && (unbounded || inners.size < options.concurrency)) {\n const value = queue.shift()!;\n\n startInner(value);\n }\n\n finish();\n };\n\n outerRef.current = link(\n source,\n {\n complete() {\n outerComplete = true;\n finish();\n },\n error: sink.error,\n next(value) {\n if (!unbounded && queue.length >= options.capacity) {\n outerRef.current?.unsubscribe();\n sink.error(new FluxCapacityError(options.capacity, 'mergeMap buffer capacity exceeded'));\n\n return;\n }\n\n queue.push(value);\n drain();\n },\n },\n signal,\n );\n\n return () => {\n outerRef.current?.unsubscribe();\n for (const inner of inners) inner.unsubscribe();\n queue.length = 0;\n };\n });\n}\n\nexport function mergeMap<A, B>(project: (value: A) => Stream<B>, options: FlattenOptions): Operator<A, B> {\n return flatten(project, options);\n}\n\nexport function concatMap<A, B>(\n project: (value: A) => Stream<B>,\n options: Omit<FlattenOptions, 'concurrency'>,\n): Operator<A, B> {\n return flatten(project, { capacity: options.capacity, concurrency: 1 });\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- const e=require("../_numeric.cjs"),t=require("../core.cjs"),n=require("../_link.cjs"),r=require("../_safe.cjs"),i=require("../_scheduler.cjs");function a(){return new DOMException(`Stream consumption aborted`,`AbortError`)}function o(a){return e.assertNonNegativeInteger(a.attempts,`retry attempts`),e=>t.stream((t,o)=>{let s=0,c,l,u=()=>{if(o.aborted)return;let d=n.link(e,{complete:t.complete,error(e){if(s===a.attempts){t.error(e);return}let n=s++,c;if(r.tryCall(()=>{c=typeof a.delay==`function`?a.delay(n):a.delay},t.error),!o.aborted){if(c!==void 0&&(!Number.isFinite(c)||c<0)){t.error(RangeError(`retry delay must be a finite number greater than or equal to zero`));return}c===void 0||c===0?queueMicrotask(u):l=i.defaultScheduler.delay(u,c)}},next:t.next},o);d.closed||(c=d)};return u(),()=>{l?.(),c?.unsubscribe()}})}function s(e,t){return new Promise((r,i)=>{let o=new AbortController,s=()=>{o.abort(),i(a())};if(t?.signal?.aborted){s();return}t?.signal?.addEventListener(`abort`,s,{once:!0}),n.link(e,{error(e){t?.signal?.removeEventListener(`abort`,s),i(e)},next(e){t?.signal?.removeEventListener(`abort`,s),o.abort(),r(e)}},o.signal)})}function c(e,t){return new Promise((r,i)=>{let o=()=>i(a()),s;if(t?.signal?.aborted){o();return}t?.signal?.addEventListener(`abort`,o,{once:!0}),n.link(e,{complete(){t?.signal?.removeEventListener(`abort`,o),r(s)},error(e){t?.signal?.removeEventListener(`abort`,o),i(e)},next(e){s=e}},t?.signal??new AbortController().signal)})}function l(t,r){return e.assertNonNegativeInteger(r.maxItems,`toArray maxItems`),new Promise((e,i)=>{let o=new AbortController,s=[],c=()=>{o.abort(),i(a())};if(r.signal?.aborted){c();return}r.signal?.addEventListener(`abort`,c,{once:!0}),n.link(t,{complete(){r.signal?.removeEventListener(`abort`,c),e(s)},error(e){r.signal?.removeEventListener(`abort`,c),i(e)},next(e){if(s.length===r.maxItems){r.signal?.removeEventListener(`abort`,c),o.abort(),i(RangeError(`toArray maxItems exceeded`));return}s.push(e)}},o.signal)})}exports.first=s,exports.last=c,exports.retry=o,exports.toArray=l;
1
+ const e=require("../_numeric.cjs"),t=require("../core.cjs"),n=require("../_link.cjs"),r=require("../_safe.cjs"),i=require("../errors.cjs"),a=require("../_scheduler.cjs");function o(){return new DOMException(`Stream consumption aborted`,`AbortError`)}function s(i){return e.assertNonNegativeInteger(i.attempts,`retry attempts`),e=>t.stream((t,o)=>{let s=0,c,l,u=()=>{if(o.aborted)return;let d=n.link(e,{complete:t.complete,error(e){if(s===i.attempts){t.error(e);return}let n=s++,c;if(r.tryCall(()=>{c=typeof i.delay==`function`?i.delay(n):i.delay},t.error),!o.aborted){if(c!==void 0&&(!Number.isFinite(c)||c<0)){t.error(RangeError(`retry delay must be a finite number greater than or equal to zero`));return}c===void 0||c===0?queueMicrotask(u):l=a.defaultScheduler.delay(u,c)}},next:t.next},o);d.closed||(c=d)};return u(),()=>{l?.(),c?.unsubscribe()}})}function c(e,t){return new Promise((r,a)=>{let s=new AbortController,c=()=>{s.abort(),a(o())};if(t?.signal?.aborted){c();return}t?.signal?.addEventListener(`abort`,c,{once:!0}),n.link(e,{complete(){t?.signal?.removeEventListener(`abort`,c),`defaultValue`in(t??{})?r(t.defaultValue):a(new i.FluxEmptyError)},error(e){t?.signal?.removeEventListener(`abort`,c),a(e)},next(e){t?.signal?.removeEventListener(`abort`,c),s.abort(),r(e)}},s.signal)})}function l(e,t){return new Promise((r,a)=>{let s=new AbortController,c=()=>{s.abort(),a(o())};if(t?.signal?.aborted){c();return}let l=!1,u;t?.signal?.addEventListener(`abort`,c,{once:!0}),n.link(e,{complete(){t?.signal?.removeEventListener(`abort`,c),l?r(u):`defaultValue`in(t??{})?r(t.defaultValue):a(new i.FluxEmptyError)},error(e){t?.signal?.removeEventListener(`abort`,c),a(e)},next(e){l=!0,u=e}},s.signal)})}function u(t,r){return e.assertNonNegativeInteger(r.maxItems,`toArray maxItems`),new Promise((e,a)=>{let s=new AbortController,c=[],l=()=>{s.abort(),a(o())};if(r.signal?.aborted){l();return}r.signal?.addEventListener(`abort`,l,{once:!0}),n.link(t,{complete(){r.signal?.removeEventListener(`abort`,l),e(c)},error(e){r.signal?.removeEventListener(`abort`,l),a(e)},next(e){if(c.length===r.maxItems){r.signal?.removeEventListener(`abort`,l),s.abort(),a(new i.FluxCapacityError(r.maxItems,`toArray maxItems exceeded`));return}c.push(e)}},s.signal)})}exports.first=c,exports.last=l,exports.retry=s,exports.toArray=u;
2
2
  //# sourceMappingURL=utility.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"utility.cjs","names":[],"sources":["../../src/operators/utility.ts"],"sourcesContent":["import { link } from '../_link';\nimport { assertNonNegativeInteger } from '../_numeric';\nimport { tryCall } from '../_safe';\nimport { defaultScheduler } from '../_scheduler';\nimport { stream } from '../core';\nimport type { Operator, Stream, Subscription } from '../types';\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 assertNonNegativeInteger(options.attempts, 'retry attempts');\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 assertNonNegativeInteger(options.maxItems, 'toArray maxItems');\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
+ {"version":3,"file":"utility.cjs","names":[],"sources":["../../src/operators/utility.ts"],"sourcesContent":["import { link } from '../_link';\nimport { assertNonNegativeInteger } from '../_numeric';\nimport { tryCall } from '../_safe';\nimport { defaultScheduler } from '../_scheduler';\nimport { stream } from '../core';\nimport { FluxCapacityError, FluxEmptyError } from '../errors';\nimport type { Operator, Stream, Subscription } from '../types';\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 /** Resolved when the source completes empty instead of rejecting with `FluxEmptyError`. */\n defaultValue?: unknown;\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 assertNonNegativeInteger(options.attempts, 'retry attempts');\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 complete() {\n options?.signal?.removeEventListener('abort', abort);\n\n if ('defaultValue' in (options ?? {})) resolve(options!.defaultValue as T);\n else reject(new FluxEmptyError());\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> {\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 let emitted = false;\n let latest: T | undefined;\n\n options?.signal?.addEventListener('abort', abort, { once: true });\n link(\n source,\n {\n complete() {\n options?.signal?.removeEventListener('abort', abort);\n\n if (emitted) resolve(latest as T);\n else if ('defaultValue' in (options ?? {})) resolve(options!.defaultValue as T);\n else reject(new FluxEmptyError());\n },\n error(reason) {\n options?.signal?.removeEventListener('abort', abort);\n reject(reason);\n },\n next(value) {\n emitted = true;\n latest = value;\n },\n },\n controller.signal,\n );\n });\n}\n\nexport function toArray<T>(source: Stream<T>, options: ToArrayOptions): Promise<T[]> {\n assertNonNegativeInteger(options.maxItems, 'toArray maxItems');\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 FluxCapacityError(options.maxItems, '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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"}
@@ -9,9 +9,11 @@ export type ToArrayOptions = {
9
9
  };
10
10
  export type ValueOptions = {
11
11
  signal?: AbortSignal;
12
+ /** Resolved when the source completes empty instead of rejecting with `FluxEmptyError`. */
13
+ defaultValue?: unknown;
12
14
  };
13
15
  export declare function retry<T>(options: RetryOptions): Operator<T, T>;
14
16
  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>;
17
+ export declare function last<T>(source: Stream<T>, options?: ValueOptions): Promise<T>;
16
18
  export declare function toArray<T>(source: Stream<T>, options: ToArrayOptions): Promise<T[]>;
17
19
  //# sourceMappingURL=utility.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utility.d.ts","sourceRoot":"","sources":["../../src/operators/utility.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAgB,MAAM,UAAU,CAAC;AAE/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,CA2D9D;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,CA4CnF"}
1
+ {"version":3,"file":"utility.d.ts","sourceRoot":"","sources":["../../src/operators/utility.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAgB,MAAM,UAAU,CAAC;AAE/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;IACrB,2FAA2F;IAC3F,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAMF,wBAAgB,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CA2D9D;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAqC9E;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAwC7E;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CA4CnF"}
@@ -2,35 +2,36 @@ import { assertNonNegativeInteger as e } from "../_numeric.js";
2
2
  import { stream as t } from "../core.js";
3
3
  import { link as n } from "../_link.js";
4
4
  import { tryCall as r } from "../_safe.js";
5
- import { defaultScheduler as i } from "../_scheduler.js";
5
+ import { FluxCapacityError as i, FluxEmptyError as a } from "../errors.js";
6
+ import { defaultScheduler as o } from "../_scheduler.js";
6
7
  //#region src/operators/utility.ts
7
- function a() {
8
+ function s() {
8
9
  return new DOMException("Stream consumption aborted", "AbortError");
9
10
  }
10
- function o(a) {
11
- return e(a.attempts, "retry attempts"), (e) => t((t, o) => {
11
+ function c(i) {
12
+ return e(i.attempts, "retry attempts"), (e) => t((t, a) => {
12
13
  let s = 0, c, l, u = () => {
13
- if (o.aborted) return;
14
+ if (a.aborted) return;
14
15
  let d = n(e, {
15
16
  complete: t.complete,
16
17
  error(e) {
17
- if (s === a.attempts) {
18
+ if (s === i.attempts) {
18
19
  t.error(e);
19
20
  return;
20
21
  }
21
22
  let n = s++, c;
22
23
  if (r(() => {
23
- c = typeof a.delay == "function" ? a.delay(n) : a.delay;
24
- }, t.error), !o.aborted) {
24
+ c = typeof i.delay == "function" ? i.delay(n) : i.delay;
25
+ }, t.error), !a.aborted) {
25
26
  if (c !== void 0 && (!Number.isFinite(c) || c < 0)) {
26
27
  t.error(/* @__PURE__ */ RangeError("retry delay must be a finite number greater than or equal to zero"));
27
28
  return;
28
29
  }
29
- c === void 0 || c === 0 ? queueMicrotask(u) : l = i.delay(u, c);
30
+ c === void 0 || c === 0 ? queueMicrotask(u) : l = o.delay(u, c);
30
31
  }
31
32
  },
32
33
  next: t.next
33
- }, o);
34
+ }, a);
34
35
  d.closed || (c = d);
35
36
  };
36
37
  return u(), () => {
@@ -38,72 +39,78 @@ function o(a) {
38
39
  };
39
40
  });
40
41
  }
41
- function s(e, t) {
42
+ function l(e, t) {
42
43
  return new Promise((r, i) => {
43
- let o = new AbortController(), s = () => {
44
- o.abort(), i(a());
44
+ let o = new AbortController(), c = () => {
45
+ o.abort(), i(s());
45
46
  };
46
47
  if (t?.signal?.aborted) {
47
- s();
48
+ c();
48
49
  return;
49
50
  }
50
- t?.signal?.addEventListener("abort", s, { once: !0 }), n(e, {
51
+ t?.signal?.addEventListener("abort", c, { once: !0 }), n(e, {
52
+ complete() {
53
+ t?.signal?.removeEventListener("abort", c), "defaultValue" in (t ?? {}) ? r(t.defaultValue) : i(new a());
54
+ },
51
55
  error(e) {
52
- t?.signal?.removeEventListener("abort", s), i(e);
56
+ t?.signal?.removeEventListener("abort", c), i(e);
53
57
  },
54
58
  next(e) {
55
- t?.signal?.removeEventListener("abort", s), o.abort(), r(e);
59
+ t?.signal?.removeEventListener("abort", c), o.abort(), r(e);
56
60
  }
57
61
  }, o.signal);
58
62
  });
59
63
  }
60
- function c(e, t) {
64
+ function u(e, t) {
61
65
  return new Promise((r, i) => {
62
- let o = () => i(a()), s;
66
+ let o = new AbortController(), c = () => {
67
+ o.abort(), i(s());
68
+ };
63
69
  if (t?.signal?.aborted) {
64
- o();
70
+ c();
65
71
  return;
66
72
  }
67
- t?.signal?.addEventListener("abort", o, { once: !0 }), n(e, {
73
+ let l = !1, u;
74
+ t?.signal?.addEventListener("abort", c, { once: !0 }), n(e, {
68
75
  complete() {
69
- t?.signal?.removeEventListener("abort", o), r(s);
76
+ t?.signal?.removeEventListener("abort", c), l ? r(u) : "defaultValue" in (t ?? {}) ? r(t.defaultValue) : i(new a());
70
77
  },
71
78
  error(e) {
72
- t?.signal?.removeEventListener("abort", o), i(e);
79
+ t?.signal?.removeEventListener("abort", c), i(e);
73
80
  },
74
81
  next(e) {
75
- s = e;
82
+ l = !0, u = e;
76
83
  }
77
- }, t?.signal ?? new AbortController().signal);
84
+ }, o.signal);
78
85
  });
79
86
  }
80
- function l(t, r) {
81
- return e(r.maxItems, "toArray maxItems"), new Promise((e, i) => {
82
- let o = new AbortController(), s = [], c = () => {
83
- o.abort(), i(a());
87
+ function d(t, r) {
88
+ return e(r.maxItems, "toArray maxItems"), new Promise((e, a) => {
89
+ let o = new AbortController(), c = [], l = () => {
90
+ o.abort(), a(s());
84
91
  };
85
92
  if (r.signal?.aborted) {
86
- c();
93
+ l();
87
94
  return;
88
95
  }
89
- r.signal?.addEventListener("abort", c, { once: !0 }), n(t, {
96
+ r.signal?.addEventListener("abort", l, { once: !0 }), n(t, {
90
97
  complete() {
91
- r.signal?.removeEventListener("abort", c), e(s);
98
+ r.signal?.removeEventListener("abort", l), e(c);
92
99
  },
93
100
  error(e) {
94
- r.signal?.removeEventListener("abort", c), i(e);
101
+ r.signal?.removeEventListener("abort", l), a(e);
95
102
  },
96
103
  next(e) {
97
- if (s.length === r.maxItems) {
98
- r.signal?.removeEventListener("abort", c), o.abort(), i(/* @__PURE__ */ RangeError("toArray maxItems exceeded"));
104
+ if (c.length === r.maxItems) {
105
+ r.signal?.removeEventListener("abort", l), o.abort(), a(new i(r.maxItems, "toArray maxItems exceeded"));
99
106
  return;
100
107
  }
101
- s.push(e);
108
+ c.push(e);
102
109
  }
103
110
  }, o.signal);
104
111
  });
105
112
  }
106
113
  //#endregion
107
- export { s as first, c as last, o as retry, l as toArray };
114
+ export { l as first, u as last, c as retry, d as toArray };
108
115
 
109
116
  //# sourceMappingURL=utility.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utility.js","names":[],"sources":["../../src/operators/utility.ts"],"sourcesContent":["import { link } from '../_link';\nimport { assertNonNegativeInteger } from '../_numeric';\nimport { tryCall } from '../_safe';\nimport { defaultScheduler } from '../_scheduler';\nimport { stream } from '../core';\nimport type { Operator, Stream, Subscription } from '../types';\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 assertNonNegativeInteger(options.attempts, 'retry attempts');\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 assertNonNegativeInteger(options.maxItems, 'toArray maxItems');\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
+ {"version":3,"file":"utility.js","names":[],"sources":["../../src/operators/utility.ts"],"sourcesContent":["import { link } from '../_link';\nimport { assertNonNegativeInteger } from '../_numeric';\nimport { tryCall } from '../_safe';\nimport { defaultScheduler } from '../_scheduler';\nimport { stream } from '../core';\nimport { FluxCapacityError, FluxEmptyError } from '../errors';\nimport type { Operator, Stream, Subscription } from '../types';\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 /** Resolved when the source completes empty instead of rejecting with `FluxEmptyError`. */\n defaultValue?: unknown;\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 assertNonNegativeInteger(options.attempts, 'retry attempts');\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 complete() {\n options?.signal?.removeEventListener('abort', abort);\n\n if ('defaultValue' in (options ?? {})) resolve(options!.defaultValue as T);\n else reject(new FluxEmptyError());\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> {\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 let emitted = false;\n let latest: T | undefined;\n\n options?.signal?.addEventListener('abort', abort, { once: true });\n link(\n source,\n {\n complete() {\n options?.signal?.removeEventListener('abort', abort);\n\n if (emitted) resolve(latest as T);\n else if ('defaultValue' in (options ?? {})) resolve(options!.defaultValue as T);\n else reject(new FluxEmptyError());\n },\n error(reason) {\n options?.signal?.removeEventListener('abort', abort);\n reject(reason);\n },\n next(value) {\n emitted = true;\n latest = value;\n },\n },\n controller.signal,\n );\n });\n}\n\nexport function toArray<T>(source: Stream<T>, options: ToArrayOptions): Promise<T[]> {\n assertNonNegativeInteger(options.maxItems, 'toArray maxItems');\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 FluxCapacityError(options.maxItems, '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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vielzeug/flux",
3
- "version": "2.3.2",
3
+ "version": "2.4.0",
4
4
  "description": "Minimal push streams with explicit ownership, buffering, and ecosystem adapters",
5
5
  "repository": {
6
6
  "type": "git",
@@ -76,6 +76,7 @@
76
76
  ]
77
77
  }
78
78
  },
79
+ "sideEffects": false,
79
80
  "publishConfig": {
80
81
  "access": "public",
81
82
  "registry": "https://registry.npmjs.org/"
@@ -91,10 +92,10 @@
91
92
  "verify:exports": "node scripts/verify-exports.mjs && node scripts/verify-package-exports.mjs"
92
93
  },
93
94
  "peerDependencies": {
94
- "@vielzeug/courier": "2.2.2",
95
- "@vielzeug/herald": "2.1.0",
96
- "@vielzeug/pulse": "2.2.2",
97
- "@vielzeug/ripple": "2.2.3"
95
+ "@vielzeug/courier": "2.3.1",
96
+ "@vielzeug/herald": "2.3.0",
97
+ "@vielzeug/pulse": "2.4.0",
98
+ "@vielzeug/ripple": "2.3.0"
98
99
  },
99
100
  "peerDependenciesMeta": {
100
101
  "@vielzeug/courier": {
@@ -112,10 +113,10 @@
112
113
  },
113
114
  "devDependencies": {
114
115
  "@types/node": "^26.2.0",
115
- "@vielzeug/courier": "2.2.2",
116
- "@vielzeug/herald": "2.1.0",
117
- "@vielzeug/pulse": "2.2.2",
118
- "@vielzeug/ripple": "2.2.3",
116
+ "@vielzeug/courier": "2.3.1",
117
+ "@vielzeug/herald": "2.3.0",
118
+ "@vielzeug/pulse": "2.4.0",
119
+ "@vielzeug/ripple": "2.3.0",
119
120
  "typescript": "^6.0.3",
120
121
  "vite": "^8.2.1",
121
122
  "vitest": "^4.1.10"
package/dist/_dev.cjs DELETED
@@ -1,2 +0,0 @@
1
- function e(e,...t){}exports.error=e;
2
- //# sourceMappingURL=_dev.cjs.map
package/dist/_dev.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"_dev.cjs","names":[],"sources":["../src/_dev.ts"],"sourcesContent":["/**\n * Set to `true` by the Vite `define` config in production builds so that all\n * dev-only `warn()` / `error()` calls are eliminated by the bundler.\n * When running tests or without a bundler the flag is absent and warnings fire.\n */\nconst isDev = !(globalThis as { __FLUX_PROD__?: boolean }).__FLUX_PROD__;\n\n/** @internal @security Messages may include user data. */\nexport function warn(msg: string): void {\n if (isDev) console.warn(`[@vielzeug/flux] ${msg}`);\n}\n\n/** @internal @security Messages and args may include user data. */\nexport function error(msg: string, ...args: unknown[]): void {\n if (isDev) console.error(`[@vielzeug/flux] ${msg}`, ...args);\n}\n"],"mappings":"AAaA,SAAgB,EAAM,EAAa,GAAG,EAAuB,CAE7D"}
package/dist/_dev.js DELETED
@@ -1,6 +0,0 @@
1
- //#region src/_dev.ts
2
- function e(e, ...t) {}
3
- //#endregion
4
- export { e as error };
5
-
6
- //# sourceMappingURL=_dev.js.map
package/dist/_dev.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"_dev.js","names":[],"sources":["../src/_dev.ts"],"sourcesContent":["/**\n * Set to `true` by the Vite `define` config in production builds so that all\n * dev-only `warn()` / `error()` calls are eliminated by the bundler.\n * When running tests or without a bundler the flag is absent and warnings fire.\n */\nconst isDev = !(globalThis as { __FLUX_PROD__?: boolean }).__FLUX_PROD__;\n\n/** @internal @security Messages may include user data. */\nexport function warn(msg: string): void {\n if (isDev) console.warn(`[@vielzeug/flux] ${msg}`);\n}\n\n/** @internal @security Messages and args may include user data. */\nexport function error(msg: string, ...args: unknown[]): void {\n if (isDev) console.error(`[@vielzeug/flux] ${msg}`, ...args);\n}\n"],"mappings":";AAaA,SAAgB,EAAM,GAAa,GAAG,GAAuB,CAE7D"}