@vielzeug/flux 2.4.0 → 26.10.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 (142) hide show
  1. package/README.md +12 -22
  2. package/dist/_iterator.cjs +1 -1
  3. package/dist/_iterator.cjs.map +1 -1
  4. package/dist/_iterator.d.ts +1 -1
  5. package/dist/_iterator.d.ts.map +1 -1
  6. package/dist/_iterator.js +1 -72
  7. package/dist/_iterator.js.map +1 -1
  8. package/dist/_link.cjs +1 -1
  9. package/dist/_link.cjs.map +1 -1
  10. package/dist/_link.d.ts +1 -1
  11. package/dist/_link.d.ts.map +1 -1
  12. package/dist/_link.js +1 -7
  13. package/dist/_link.js.map +1 -1
  14. package/dist/_numeric.cjs +1 -1
  15. package/dist/_numeric.cjs.map +1 -1
  16. package/dist/_numeric.js +1 -13
  17. package/dist/_numeric.js.map +1 -1
  18. package/dist/_safe.cjs +1 -1
  19. package/dist/_safe.cjs.map +1 -1
  20. package/dist/_safe.js +1 -11
  21. package/dist/_safe.js.map +1 -1
  22. package/dist/_scheduler.js +1 -14
  23. package/dist/_scheduler.js.map +1 -1
  24. package/dist/_subscription.cjs +1 -1
  25. package/dist/_subscription.cjs.map +1 -1
  26. package/dist/_subscription.d.ts +1 -1
  27. package/dist/_subscription.d.ts.map +1 -1
  28. package/dist/_subscription.js +1 -79
  29. package/dist/_subscription.js.map +1 -1
  30. package/dist/async.cjs +1 -1
  31. package/dist/async.cjs.map +1 -1
  32. package/dist/async.d.ts +1 -1
  33. package/dist/async.d.ts.map +1 -1
  34. package/dist/async.js +1 -10
  35. package/dist/async.js.map +1 -1
  36. package/dist/channel.cjs +1 -1
  37. package/dist/channel.cjs.map +1 -1
  38. package/dist/channel.d.ts +1 -1
  39. package/dist/channel.d.ts.map +1 -1
  40. package/dist/channel.js +1 -54
  41. package/dist/channel.js.map +1 -1
  42. package/dist/core.cjs +1 -1
  43. package/dist/core.cjs.map +1 -1
  44. package/dist/core.d.ts +8 -1
  45. package/dist/core.d.ts.map +1 -1
  46. package/dist/core.js +1 -17
  47. package/dist/core.js.map +1 -1
  48. package/dist/errors.cjs +1 -1
  49. package/dist/errors.cjs.map +1 -1
  50. package/dist/errors.js +1 -23
  51. package/dist/errors.js.map +1 -1
  52. package/dist/flux.cjs +1 -1
  53. package/dist/flux.cjs.map +1 -1
  54. package/dist/flux.iife.js +1 -1
  55. package/dist/flux.iife.js.map +1 -1
  56. package/dist/flux.js +1 -1
  57. package/dist/flux.js.map +1 -1
  58. package/dist/index.cjs +1 -1
  59. package/dist/index.d.ts +15 -13
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +1 -10
  62. package/dist/operators/combination.cjs +1 -1
  63. package/dist/operators/combination.cjs.map +1 -1
  64. package/dist/operators/combination.d.ts +1 -1
  65. package/dist/operators/combination.d.ts.map +1 -1
  66. package/dist/operators/combination.js +1 -76
  67. package/dist/operators/combination.js.map +1 -1
  68. package/dist/operators/creation.cjs +1 -1
  69. package/dist/operators/creation.cjs.map +1 -1
  70. package/dist/operators/creation.d.ts +1 -1
  71. package/dist/operators/creation.d.ts.map +1 -1
  72. package/dist/operators/creation.js +1 -83
  73. package/dist/operators/creation.js.map +1 -1
  74. package/dist/operators/filtering.cjs +1 -1
  75. package/dist/operators/filtering.cjs.map +1 -1
  76. package/dist/operators/filtering.d.ts +1 -1
  77. package/dist/operators/filtering.d.ts.map +1 -1
  78. package/dist/operators/filtering.js +1 -89
  79. package/dist/operators/filtering.js.map +1 -1
  80. package/dist/operators/transformation.cjs +1 -1
  81. package/dist/operators/transformation.cjs.map +1 -1
  82. package/dist/operators/transformation.d.ts +1 -1
  83. package/dist/operators/transformation.d.ts.map +1 -1
  84. package/dist/operators/transformation.js +1 -123
  85. package/dist/operators/transformation.js.map +1 -1
  86. package/dist/operators/utility.cjs +1 -1
  87. package/dist/operators/utility.cjs.map +1 -1
  88. package/dist/operators/utility.d.ts +6 -6
  89. package/dist/operators/utility.d.ts.map +1 -1
  90. package/dist/operators/utility.js +1 -115
  91. package/dist/operators/utility.js.map +1 -1
  92. package/dist/pipe.cjs +1 -1
  93. package/dist/pipe.cjs.map +1 -1
  94. package/dist/pipe.d.ts +1 -1
  95. package/dist/pipe.d.ts.map +1 -1
  96. package/dist/pipe.js +1 -7
  97. package/dist/pipe.js.map +1 -1
  98. package/dist/subjects.d.ts +1 -2
  99. package/dist/subjects.d.ts.map +1 -1
  100. package/package.json +10 -70
  101. package/dist/adapters/courier.cjs +0 -2
  102. package/dist/adapters/courier.cjs.map +0 -1
  103. package/dist/adapters/courier.d.ts +0 -4
  104. package/dist/adapters/courier.d.ts.map +0 -1
  105. package/dist/adapters/courier.js +0 -12
  106. package/dist/adapters/courier.js.map +0 -1
  107. package/dist/adapters/herald.cjs +0 -2
  108. package/dist/adapters/herald.cjs.map +0 -1
  109. package/dist/adapters/herald.d.ts +0 -5
  110. package/dist/adapters/herald.d.ts.map +0 -1
  111. package/dist/adapters/herald.js +0 -22
  112. package/dist/adapters/herald.js.map +0 -1
  113. package/dist/adapters/pulse.cjs +0 -2
  114. package/dist/adapters/pulse.cjs.map +0 -1
  115. package/dist/adapters/pulse.d.ts +0 -5
  116. package/dist/adapters/pulse.d.ts.map +0 -1
  117. package/dist/adapters/pulse.js +0 -18
  118. package/dist/adapters/pulse.js.map +0 -1
  119. package/dist/adapters/ripple.cjs +0 -2
  120. package/dist/adapters/ripple.cjs.map +0 -1
  121. package/dist/adapters/ripple.d.ts +0 -19
  122. package/dist/adapters/ripple.d.ts.map +0 -1
  123. package/dist/adapters/ripple.js +0 -46
  124. package/dist/adapters/ripple.js.map +0 -1
  125. package/dist/courier.cjs +0 -1
  126. package/dist/courier.d.ts +0 -2
  127. package/dist/courier.d.ts.map +0 -1
  128. package/dist/courier.js +0 -2
  129. package/dist/herald.cjs +0 -1
  130. package/dist/herald.d.ts +0 -2
  131. package/dist/herald.d.ts.map +0 -1
  132. package/dist/herald.js +0 -2
  133. package/dist/pulse.cjs +0 -1
  134. package/dist/pulse.d.ts +0 -2
  135. package/dist/pulse.d.ts.map +0 -1
  136. package/dist/pulse.js +0 -2
  137. package/dist/ripple.cjs +0 -1
  138. package/dist/ripple.d.ts +0 -3
  139. package/dist/ripple.d.ts.map +0 -1
  140. package/dist/ripple.js +0 -2
  141. package/dist/subjects.cjs +0 -1
  142. package/dist/subjects.js +0 -2
@@ -1,84 +1,2 @@
1
- import { assertDuration as e } from "../_numeric.js";
2
- import { stream as t } from "../core.js";
3
- import { defaultScheduler as n } from "../_scheduler.js";
4
- //#region src/operators/creation.ts
5
- function r(...e) {
6
- return t((t) => {
7
- for (let n of e) t.next(n);
8
- t.complete();
9
- });
10
- }
11
- function i(e) {
12
- return Symbol.asyncIterator in Object(e) ? t((t, n) => {
13
- let r = e[Symbol.asyncIterator]();
14
- return (async () => {
15
- try {
16
- for (; !n.aborted;) {
17
- let e = await r.next();
18
- if (e.done) {
19
- t.complete();
20
- return;
21
- }
22
- t.next(e.value);
23
- }
24
- } catch (e) {
25
- n.aborted || t.error(e);
26
- }
27
- })(), () => {
28
- r.return?.();
29
- };
30
- }) : typeof e.then == "function" ? t((t, n) => {
31
- e.then((e) => {
32
- n.aborted || (t.next(e), t.complete());
33
- }, (e) => {
34
- n.aborted || t.error(e);
35
- });
36
- }) : t((t, n) => {
37
- let r = e[Symbol.iterator]();
38
- try {
39
- for (; !n.aborted;) {
40
- let e = r.next();
41
- if (e.done) {
42
- t.complete();
43
- return;
44
- }
45
- t.next(e.value);
46
- }
47
- } catch (e) {
48
- t.error(e);
49
- }
50
- return () => {
51
- r.return?.();
52
- };
53
- });
54
- }
55
- function a(e, n) {
56
- return t((t) => {
57
- let r = (e) => t.next(e);
58
- return e.addEventListener(n, r), () => e.removeEventListener(n, r);
59
- });
60
- }
61
- function o(r) {
62
- return e(r, "Interval duration"), t((e) => {
63
- let t = 0;
64
- return n.repeat(() => e.next(t++), r);
65
- });
66
- }
67
- function s(r) {
68
- return e(r.delay, "Timer delay"), r.interval !== void 0 && e(r.interval, "Timer interval"), t((e) => {
69
- let t = 0, i, a = n.delay(() => {
70
- if (e.next(t++), r.interval === void 0) {
71
- e.complete();
72
- return;
73
- }
74
- i = n.repeat(() => e.next(t++), r.interval);
75
- }, r.delay);
76
- return () => {
77
- a(), i?.();
78
- };
79
- });
80
- }
81
- //#endregion
82
- export { i as from, a as fromEvent, o as interval, r as of, s as timer };
83
-
1
+ import{assertDuration as e}from"../_numeric.js";import{reportUnhandledError as t}from"../_subscription.js";import{stream as n}from"../core.js";import{defaultScheduler as r}from"../_scheduler.js";function of(...e){return n(t=>{for(let n of e)t.next(n);t.complete()})}function from(e){return Symbol.asyncIterator in Object(e)?n((n,r)=>{let i=e[Symbol.asyncIterator]();return(async()=>{try{for(;!r.aborted;){let e=await i.next();if(e.done){n.complete();return}n.next(e.value)}}catch(e){r.aborted||n.error(e)}})(),()=>{try{let e=i.return?.();e&&e.catch(t)}catch(e){t(e)}}}):typeof e.then==`function`?n((t,n)=>{e.then(e=>{n.aborted||(t.next(e),t.complete())},e=>{n.aborted||t.error(e)})}):n((t,n)=>{let r=e[Symbol.iterator]();try{for(;!n.aborted;){let e=r.next();if(e.done){t.complete();return}t.next(e.value)}}catch(e){t.error(e)}return()=>{r.return?.()}})}function fromEvent(e,t){return n(n=>{let listener=e=>n.next(e);return e.addEventListener(t,listener),()=>e.removeEventListener(t,listener)})}function interval(t){return e(t,`Interval duration`),n(e=>{let n=0;return r.repeat(()=>e.next(n++),t)})}function timer(t){return e(t.delay,`Timer delay`),t.interval!==void 0&&e(t.interval,`Timer interval`),n(e=>{let n=0,i,a=r.delay(()=>{if(e.next(n++),t.interval===void 0){e.complete();return}i=r.repeat(()=>e.next(n++),t.interval)},t.delay);return()=>{a(),i?.()}})}export{from,fromEvent,interval,of,timer};
84
2
  //# sourceMappingURL=creation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"creation.js","names":[],"sources":["../../src/operators/creation.ts"],"sourcesContent":["import { assertDuration } from '../_numeric';\nimport { defaultScheduler } from '../_scheduler';\nimport { stream } from '../core';\nimport type { Stream } from '../types';\n\nexport type TimerOptions = {\n delay: number;\n interval?: number;\n};\n\nexport function of<T>(...values: T[]): Stream<T> {\n return stream((sink) => {\n for (const value of values) sink.next(value);\n sink.complete();\n });\n}\n\nexport function from<T>(source: AsyncIterable<T> | Iterable<T> | Promise<T>): Stream<T> {\n if (Symbol.asyncIterator in Object(source)) {\n return stream((sink, signal) => {\n const iterator = (source as AsyncIterable<T>)[Symbol.asyncIterator]();\n\n void (async () => {\n try {\n while (!signal.aborted) {\n const result = await iterator.next();\n\n if (result.done) {\n sink.complete();\n\n return;\n }\n\n sink.next(result.value);\n }\n } catch (reason) {\n if (!signal.aborted) sink.error(reason);\n }\n })();\n\n return () => {\n void iterator.return?.();\n };\n });\n }\n\n if (typeof (source as Promise<T>).then === 'function') {\n return stream((sink, signal) => {\n void (source as Promise<T>).then(\n (value) => {\n if (!signal.aborted) {\n sink.next(value);\n sink.complete();\n }\n },\n (reason: unknown) => {\n if (!signal.aborted) sink.error(reason);\n },\n );\n });\n }\n\n return stream((sink, signal) => {\n const iterator = (source as Iterable<T>)[Symbol.iterator]();\n\n try {\n while (!signal.aborted) {\n const result = iterator.next();\n\n if (result.done) {\n sink.complete();\n\n return;\n }\n\n sink.next(result.value);\n }\n } catch (reason) {\n sink.error(reason);\n }\n\n return () => {\n iterator.return?.();\n };\n });\n}\n\nexport function fromEvent<T = Event>(\n target: {\n addEventListener(type: string, listener: (event: T) => void): void;\n removeEventListener(type: string, listener: (event: T) => void): void;\n },\n type: string,\n): Stream<T> {\n return stream((sink) => {\n const listener = (event: T): void => sink.next(event);\n\n target.addEventListener(type, listener);\n\n return () => target.removeEventListener(type, listener);\n });\n}\n\nexport function interval(every: number): Stream<number> {\n assertDuration(every, 'Interval duration');\n\n return stream((sink) => {\n let index = 0;\n\n return defaultScheduler.repeat(() => sink.next(index++), every);\n });\n}\n\nexport function timer(options: TimerOptions): Stream<number> {\n assertDuration(options.delay, 'Timer delay');\n\n if (options.interval !== undefined) assertDuration(options.interval, 'Timer interval');\n\n return stream((sink) => {\n let index = 0;\n let cancelInterval: (() => void) | undefined;\n const cancelDelay = defaultScheduler.delay(() => {\n sink.next(index++);\n\n if (options.interval === undefined) {\n sink.complete();\n\n return;\n }\n\n cancelInterval = defaultScheduler.repeat(() => sink.next(index++), options.interval);\n }, options.delay);\n\n return () => {\n cancelDelay();\n cancelInterval?.();\n };\n });\n}\n"],"mappings":";;;;AAUA,SAAgB,EAAM,GAAG,GAAwB;CAC/C,OAAO,GAAQ,MAAS;EACtB,KAAK,IAAM,KAAS,GAAQ,EAAK,KAAK,CAAK;EAC3C,EAAK,SAAS;CAChB,CAAC;AACH;AAEA,SAAgB,EAAQ,GAAgE;CA6CtF,OA5CI,OAAO,iBAAiB,OAAO,CAAM,IAChC,GAAQ,GAAM,MAAW;EAC9B,IAAM,IAAY,EAA4B,OAAO,cAAc,CAAC;EAoBpE,QAlBM,YAAY;GAChB,IAAI;IACF,OAAO,CAAC,EAAO,UAAS;KACtB,IAAM,IAAS,MAAM,EAAS,KAAK;KAEnC,IAAI,EAAO,MAAM;MACf,EAAK,SAAS;MAEd;KACF;KAEA,EAAK,KAAK,EAAO,KAAK;IACxB;GACF,SAAS,GAAQ;IACf,AAAK,EAAO,WAAS,EAAK,MAAM,CAAM;GACxC;EACF,EAAA,CAAG,SAEU;GACX,EAAc,SAAS;EACzB;CACF,CAAC,IAGC,OAAQ,EAAsB,QAAS,aAClC,GAAQ,GAAM,MAAW;EAC9B,EAA4B,MACzB,MAAU;GACT,AAAK,EAAO,YACV,EAAK,KAAK,CAAK,GACf,EAAK,SAAS;EAElB,IACC,MAAoB;GACnB,AAAK,EAAO,WAAS,EAAK,MAAM,CAAM;EACxC,CACF;CACF,CAAC,IAGI,GAAQ,GAAM,MAAW;EAC9B,IAAM,IAAY,EAAuB,OAAO,SAAS,CAAC;EAE1D,IAAI;GACF,OAAO,CAAC,EAAO,UAAS;IACtB,IAAM,IAAS,EAAS,KAAK;IAE7B,IAAI,EAAO,MAAM;KACf,EAAK,SAAS;KAEd;IACF;IAEA,EAAK,KAAK,EAAO,KAAK;GACxB;EACF,SAAS,GAAQ;GACf,EAAK,MAAM,CAAM;EACnB;EAEA,aAAa;GACX,EAAS,SAAS;EACpB;CACF,CAAC;AACH;AAEA,SAAgB,EACd,GAIA,GACW;CACX,OAAO,GAAQ,MAAS;EACtB,IAAM,KAAY,MAAmB,EAAK,KAAK,CAAK;EAIpD,OAFA,EAAO,iBAAiB,GAAM,CAAQ,SAEzB,EAAO,oBAAoB,GAAM,CAAQ;CACxD,CAAC;AACH;AAEA,SAAgB,EAAS,GAA+B;CAGtD,OAFA,EAAe,GAAO,mBAAmB,GAElC,GAAQ,MAAS;EACtB,IAAI,IAAQ;EAEZ,OAAO,EAAiB,aAAa,EAAK,KAAK,GAAO,GAAG,CAAK;CAChE,CAAC;AACH;AAEA,SAAgB,EAAM,GAAuC;CAK3D,OAJA,EAAe,EAAQ,OAAO,aAAa,GAEvC,EAAQ,aAAa,KAAA,KAAW,EAAe,EAAQ,UAAU,gBAAgB,GAE9E,GAAQ,MAAS;EACtB,IAAI,IAAQ,GACR,GACE,IAAc,EAAiB,YAAY;GAG/C,IAFA,EAAK,KAAK,GAAO,GAEb,EAAQ,aAAa,KAAA,GAAW;IAClC,EAAK,SAAS;IAEd;GACF;GAEA,IAAiB,EAAiB,aAAa,EAAK,KAAK,GAAO,GAAG,EAAQ,QAAQ;EACrF,GAAG,EAAQ,KAAK;EAEhB,aAAa;GAEX,AADA,EAAY,GACZ,IAAiB;EACnB;CACF,CAAC;AACH"}
1
+ {"version":3,"file":"creation.js","names":[],"sources":["../../src/operators/creation.ts"],"sourcesContent":["import { assertDuration } from '../_numeric.js';\nimport { defaultScheduler } from '../_scheduler.js';\nimport { reportUnhandledError } from '../_subscription.js';\nimport { stream } from '../core.js';\nimport type { Stream } from '../types.js';\n\nexport type TimerOptions = {\n delay: number;\n interval?: number;\n};\n\nexport function of<T>(...values: T[]): Stream<T> {\n return stream((sink) => {\n for (const value of values) sink.next(value);\n sink.complete();\n });\n}\n\nexport function from<T>(source: AsyncIterable<T> | Iterable<T> | Promise<T>): Stream<T> {\n if (Symbol.asyncIterator in Object(source)) {\n return stream((sink, signal) => {\n const iterator = (source as AsyncIterable<T>)[Symbol.asyncIterator]();\n\n void (async () => {\n try {\n while (!signal.aborted) {\n const result = await iterator.next();\n\n if (result.done) {\n sink.complete();\n\n return;\n }\n\n sink.next(result.value);\n }\n } catch (reason) {\n if (!signal.aborted) sink.error(reason);\n }\n })();\n\n return () => {\n try {\n const returned = iterator.return?.();\n if (returned) void returned.catch(reportUnhandledError);\n } catch (reason) {\n reportUnhandledError(reason);\n }\n };\n });\n }\n\n if (typeof (source as Promise<T>).then === 'function') {\n return stream((sink, signal) => {\n void (source as Promise<T>).then(\n (value) => {\n if (!signal.aborted) {\n sink.next(value);\n sink.complete();\n }\n },\n (reason: unknown) => {\n if (!signal.aborted) sink.error(reason);\n },\n );\n });\n }\n\n return stream((sink, signal) => {\n const iterator = (source as Iterable<T>)[Symbol.iterator]();\n\n try {\n while (!signal.aborted) {\n const result = iterator.next();\n\n if (result.done) {\n sink.complete();\n\n return;\n }\n\n sink.next(result.value);\n }\n } catch (reason) {\n sink.error(reason);\n }\n\n return () => {\n iterator.return?.();\n };\n });\n}\n\nexport function fromEvent<T = Event>(\n target: {\n addEventListener(type: string, listener: (event: T) => void): void;\n removeEventListener(type: string, listener: (event: T) => void): void;\n },\n type: string,\n): Stream<T> {\n return stream((sink) => {\n const listener = (event: T): void => sink.next(event);\n\n target.addEventListener(type, listener);\n\n return () => target.removeEventListener(type, listener);\n });\n}\n\nexport function interval(every: number): Stream<number> {\n assertDuration(every, 'Interval duration');\n\n return stream((sink) => {\n let index = 0;\n\n return defaultScheduler.repeat(() => sink.next(index++), every);\n });\n}\n\nexport function timer(options: TimerOptions): Stream<number> {\n assertDuration(options.delay, 'Timer delay');\n\n if (options.interval !== undefined) assertDuration(options.interval, 'Timer interval');\n\n return stream((sink) => {\n let index = 0;\n let cancelInterval: (() => void) | undefined;\n const cancelDelay = defaultScheduler.delay(() => {\n sink.next(index++);\n\n if (options.interval === undefined) {\n sink.complete();\n\n return;\n }\n\n cancelInterval = defaultScheduler.repeat(() => sink.next(index++), options.interval);\n }, options.delay);\n\n return () => {\n cancelDelay();\n cancelInterval?.();\n };\n });\n}\n"],"mappings":"mMAWA,SAAgB,GAAM,GAAG,EAAwB,CAC/C,OAAO,EAAQ,GAAS,CACtB,IAAK,IAAM,KAAS,EAAQ,EAAK,KAAK,CAAK,EAC3C,EAAK,SAAS,CAChB,CAAC,CACH,CAEA,SAAgB,KAAQ,EAAgE,CAkDtF,OAjDI,OAAO,iBAAiB,OAAO,CAAM,EAChC,GAAQ,EAAM,IAAW,CAC9B,IAAM,EAAY,EAA4B,OAAO,cAAc,CAAC,EAoBpE,OAlBM,SAAY,CAChB,GAAI,CACF,KAAO,CAAC,EAAO,SAAS,CACtB,IAAM,EAAS,MAAM,EAAS,KAAK,EAEnC,GAAI,EAAO,KAAM,CACf,EAAK,SAAS,EAEd,MACF,CAEA,EAAK,KAAK,EAAO,KAAK,CACxB,CACF,OAAS,EAAQ,CACV,EAAO,SAAS,EAAK,MAAM,CAAM,CACxC,CACF,EAAA,CAAG,MAEU,CACX,GAAI,CACF,IAAM,EAAW,EAAS,SAAS,EAC/B,GAAU,EAAc,MAAM,CAAoB,CACxD,OAAS,EAAQ,CACf,EAAqB,CAAM,CAC7B,CACF,CACF,CAAC,EAGC,OAAQ,EAAsB,MAAS,WAClC,GAAQ,EAAM,IAAW,CAC9B,EAA4B,KACzB,GAAU,CACJ,EAAO,UACV,EAAK,KAAK,CAAK,EACf,EAAK,SAAS,EAElB,EACC,GAAoB,CACd,EAAO,SAAS,EAAK,MAAM,CAAM,CACxC,CACF,CACF,CAAC,EAGI,GAAQ,EAAM,IAAW,CAC9B,IAAM,EAAY,EAAuB,OAAO,SAAS,CAAC,EAE1D,GAAI,CACF,KAAO,CAAC,EAAO,SAAS,CACtB,IAAM,EAAS,EAAS,KAAK,EAE7B,GAAI,EAAO,KAAM,CACf,EAAK,SAAS,EAEd,MACF,CAEA,EAAK,KAAK,EAAO,KAAK,CACxB,CACF,OAAS,EAAQ,CACf,EAAK,MAAM,CAAM,CACnB,CAEA,UAAa,CACX,EAAS,SAAS,CACpB,CACF,CAAC,CACH,CAEA,SAAgB,UACd,EAIA,EACW,CACX,OAAO,EAAQ,GAAS,CACtB,IAAM,SAAY,GAAmB,EAAK,KAAK,CAAK,EAIpD,OAFA,EAAO,iBAAiB,EAAM,QAAQ,MAEzB,EAAO,oBAAoB,EAAM,QAAQ,CACxD,CAAC,CACH,CAEA,SAAgB,SAAS,EAA+B,CAGtD,OAFA,EAAe,EAAO,mBAAmB,EAElC,EAAQ,GAAS,CACtB,IAAI,EAAQ,EAEZ,OAAO,EAAiB,WAAa,EAAK,KAAK,GAAO,EAAG,CAAK,CAChE,CAAC,CACH,CAEA,SAAgB,MAAM,EAAuC,CAK3D,OAJA,EAAe,EAAQ,MAAO,aAAa,EAEvC,EAAQ,WAAa,IAAA,IAAW,EAAe,EAAQ,SAAU,gBAAgB,EAE9E,EAAQ,GAAS,CACtB,IAAI,EAAQ,EACR,EACE,EAAc,EAAiB,UAAY,CAG/C,GAFA,EAAK,KAAK,GAAO,EAEb,EAAQ,WAAa,IAAA,GAAW,CAClC,EAAK,SAAS,EAEd,MACF,CAEA,EAAiB,EAAiB,WAAa,EAAK,KAAK,GAAO,EAAG,EAAQ,QAAQ,CACrF,EAAG,EAAQ,KAAK,EAEhB,UAAa,CACX,EAAY,EACZ,IAAiB,CACnB,CACF,CAAC,CACH"}
@@ -1,2 +1,2 @@
1
- const e=require("../_numeric.cjs"),t=require("../core.cjs"),n=require("../_link.cjs"),r=require("../errors.cjs"),i=require("../_scheduler.cjs");function a(r){return e.assertNonNegativeInteger(r,`take count`),e=>t.stream((t,i)=>{if(r===0){t.complete();return}let a=0,o={};return o.current=n.link(e,{complete:t.complete,error:t.error,next(e){t.next(e),a++,a===r&&(t.complete(),o.current?.unsubscribe())}},i),()=>o.current?.unsubscribe()})}function o(e){return r=>t.stream((t,i)=>{let a,o,s=()=>{},c=()=>{a?.unsubscribe(),o?.unsubscribe(),t.complete()};if(e instanceof AbortSignal){if(e.aborted){t.complete();return}e.addEventListener(`abort`,c,{once:!0}),s=()=>e.removeEventListener(`abort`,c)}else o=n.link(e,{error:t.error,next:c},i);return i.aborted||(a=n.link(r,{complete:t.complete,error:t.error,next:t.next},i)),()=>{s(),a?.unsubscribe(),o?.unsubscribe()}})}function s(r){return e.assertDuration(r,`Debounce duration`),e=>t.stream((t,a)=>{let o,s,c=!1,l=()=>{o=void 0,c&&(c=!1,t.next(s))},u=n.link(e,{complete(){o?.(),l(),t.complete()},error:t.error,next(e){s=e,c=!0,o?.(),o=i.defaultScheduler.delay(l,r)}},a);return()=>{o?.(),u.unsubscribe()}})}function c(a){return e.assertDuration(a,`Timeout duration`),e=>t.stream((t,o)=>{let s,c=()=>{s=i.defaultScheduler.delay(()=>t.error(new r.FluxTimeoutError(a)),a)};c();let l=n.link(e,{complete(){s(),t.complete()},error(e){s(),t.error(e)},next(e){s(),c(),t.next(e)}},o);return()=>{s(),l.unsubscribe()}})}exports.debounce=s,exports.take=a,exports.takeUntil=o,exports.timeout=c;
1
+ const e=require("../_numeric.cjs"),t=require("../errors.cjs"),n=require("../core.cjs"),r=require("../_link.cjs"),i=require("../_scheduler.cjs");function take(t){return e.assertNonNegativeInteger(t,`take count`),e=>n.stream((n,i)=>{if(t===0){n.complete();return}let a=0,o={};return o.current=r.link(e,{complete:n.complete,error:n.error,next(e){n.next(e),a++,a===t&&(n.complete(),o.current?.unsubscribe())}},i),()=>o.current?.unsubscribe()})}function isAbortSignal(e){return typeof e.aborted==`boolean`&&typeof e.addEventListener==`function`&&typeof e.removeEventListener==`function`}function takeUntil(e){return t=>n.stream((n,i)=>{let a,o,removeNotifier=()=>{},complete=()=>{a?.unsubscribe(),o?.unsubscribe(),n.complete()};if(isAbortSignal(e)){if(e.aborted){n.complete();return}e.addEventListener(`abort`,complete,{once:!0}),removeNotifier=()=>e.removeEventListener(`abort`,complete)}else o=r.link(e,{error:n.error,next:complete},i);return i.aborted||(a=r.link(t,{complete:n.complete,error:n.error,next:n.next},i)),()=>{removeNotifier(),a?.unsubscribe(),o?.unsubscribe()}})}function debounce(t){return e.assertDuration(t,`Debounce duration`),e=>n.stream((n,a)=>{let o,s,c=!1,flush=()=>{o=void 0,c&&(c=!1,n.next(s))},l=r.link(e,{complete(){o?.(),flush(),n.complete()},error:n.error,next(e){s=e,c=!0,o?.(),o=i.defaultScheduler.delay(flush,t)}},a);return()=>{o?.(),l.unsubscribe()}})}function timeout(a){return e.assertDuration(a,`Timeout duration`),e=>n.stream((n,o)=>{let s,start=()=>{s=i.defaultScheduler.delay(()=>n.error(new t.FluxTimeoutError(a)),a)};start();let c=r.link(e,{complete(){s(),n.complete()},error(e){s(),n.error(e)},next(e){s(),start(),n.next(e)}},o);return()=>{s(),c.unsubscribe()}})}exports.debounce=debounce,exports.take=take,exports.takeUntil=takeUntil,exports.timeout=timeout;
2
2
  //# sourceMappingURL=filtering.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"filtering.cjs","names":[],"sources":["../../src/operators/filtering.ts"],"sourcesContent":["import { link } from '../_link';\nimport { assertDuration, assertNonNegativeInteger } from '../_numeric';\nimport { defaultScheduler } from '../_scheduler';\nimport { stream } from '../core';\nimport { FluxTimeoutError } from '../errors';\nimport type { Operator, Stream, Subscription } from '../types';\n\nexport function take<T>(count: number): Operator<T, T> {\n assertNonNegativeInteger(count, 'take count');\n\n return (source) =>\n stream((sink, signal) => {\n if (count === 0) {\n sink.complete();\n\n return;\n }\n\n let seen = 0;\n const subscriptionRef: { current?: Subscription } = {};\n\n subscriptionRef.current = link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n sink.next(value);\n seen++;\n\n if (seen === count) {\n sink.complete();\n subscriptionRef.current?.unsubscribe();\n }\n },\n },\n signal,\n );\n\n return () => subscriptionRef.current?.unsubscribe();\n });\n}\n\nexport function takeUntil<T>(notifier: AbortSignal | Stream<unknown>): Operator<T, T> {\n return (source) =>\n stream((sink, signal) => {\n let sourceSubscription: Subscription | undefined;\n let notifierSubscription: Subscription | undefined;\n let removeNotifier = (): void => {};\n\n const complete = (): void => {\n sourceSubscription?.unsubscribe();\n notifierSubscription?.unsubscribe();\n sink.complete();\n };\n\n if (notifier instanceof AbortSignal) {\n if (notifier.aborted) {\n sink.complete();\n\n return;\n }\n\n notifier.addEventListener('abort', complete, { once: true });\n removeNotifier = (): void => notifier.removeEventListener('abort', complete);\n } else {\n notifierSubscription = link(notifier, { error: sink.error, next: complete }, signal);\n }\n\n if (!signal.aborted) {\n sourceSubscription = link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n }\n\n return () => {\n removeNotifier();\n sourceSubscription?.unsubscribe();\n notifierSubscription?.unsubscribe();\n };\n });\n}\n\nexport function debounce<T>(duration: number): Operator<T, T> {\n assertDuration(duration, 'Debounce duration');\n\n return (source) =>\n stream((sink, signal) => {\n let cancel: (() => void) | undefined;\n let pending: T | undefined;\n let hasPending = false;\n\n const flush = (): void => {\n cancel = undefined;\n\n if (!hasPending) return;\n\n hasPending = false;\n sink.next(pending as T);\n };\n\n const subscription = link(\n source,\n {\n complete() {\n cancel?.();\n flush();\n sink.complete();\n },\n error: sink.error,\n next(value) {\n pending = value;\n hasPending = true;\n cancel?.();\n cancel = defaultScheduler.delay(flush, duration);\n },\n },\n signal,\n );\n\n return () => {\n cancel?.();\n subscription.unsubscribe();\n };\n });\n}\n\nexport function timeout<T>(duration: number): Operator<T, T> {\n assertDuration(duration, 'Timeout duration');\n\n return (source) =>\n stream((sink, signal) => {\n let cancel: () => void;\n\n const start = (): void => {\n cancel = defaultScheduler.delay(() => sink.error(new FluxTimeoutError(duration)), duration);\n };\n\n start();\n\n const subscription = link(\n source,\n {\n complete() {\n cancel();\n sink.complete();\n },\n error(reason) {\n cancel();\n sink.error(reason);\n },\n next(value) {\n cancel();\n start();\n sink.next(value);\n },\n },\n signal,\n );\n\n return () => {\n cancel();\n subscription.unsubscribe();\n };\n });\n}\n"],"mappings":"gJAOA,SAAgB,EAAQ,EAA+B,CAGrD,OAFA,EAAA,yBAAyB,EAAO,YAAY,EAEpC,GACN,EAAA,QAAQ,EAAM,IAAW,CACvB,GAAI,IAAU,EAAG,CACf,EAAK,SAAS,EAEd,MACF,CAEA,IAAI,EAAO,EACL,EAA8C,CAAC,EAoBrD,MAlBA,GAAgB,QAAU,EAAA,KACxB,EACA,CACE,SAAU,EAAK,SACf,MAAO,EAAK,MACZ,KAAK,EAAO,CACV,EAAK,KAAK,CAAK,EACf,IAEI,IAAS,IACX,EAAK,SAAS,EACd,EAAgB,SAAS,YAAY,EAEzC,CACF,EACA,CACF,MAEa,EAAgB,SAAS,YAAY,CACpD,CAAC,CACL,CAEA,SAAgB,EAAa,EAAyD,CACpF,MAAQ,IACN,EAAA,QAAQ,EAAM,IAAW,CACvB,IAAI,EACA,EACA,MAA6B,CAAC,EAE5B,MAAuB,CAC3B,GAAoB,YAAY,EAChC,GAAsB,YAAY,EAClC,EAAK,SAAS,CAChB,EAEA,GAAI,aAAoB,YAAa,CACnC,GAAI,EAAS,QAAS,CACpB,EAAK,SAAS,EAEd,MACF,CAEA,EAAS,iBAAiB,QAAS,EAAU,CAAE,KAAM,EAAK,CAAC,EAC3D,MAA6B,EAAS,oBAAoB,QAAS,CAAQ,CAC7E,KACE,GAAuB,EAAA,KAAK,EAAU,CAAE,MAAO,EAAK,MAAO,KAAM,CAAS,EAAG,CAAM,EAerF,OAZK,EAAO,UACV,EAAqB,EAAA,KACnB,EACA,CACE,SAAU,EAAK,SACf,MAAO,EAAK,MACZ,KAAM,EAAK,IACb,EACA,CACF,OAGW,CACX,EAAe,EACf,GAAoB,YAAY,EAChC,GAAsB,YAAY,CACpC,CACF,CAAC,CACL,CAEA,SAAgB,EAAY,EAAkC,CAG5D,OAFA,EAAA,eAAe,EAAU,mBAAmB,EAEpC,GACN,EAAA,QAAQ,EAAM,IAAW,CACvB,IAAI,EACA,EACA,EAAa,GAEX,MAAoB,CACxB,EAAS,IAAA,GAEJ,IAEL,EAAa,GACb,EAAK,KAAK,CAAY,EACxB,EAEM,EAAe,EAAA,KACnB,EACA,CACE,UAAW,CACT,IAAS,EACT,EAAM,EACN,EAAK,SAAS,CAChB,EACA,MAAO,EAAK,MACZ,KAAK,EAAO,CACV,EAAU,EACV,EAAa,GACb,IAAS,EACT,EAAS,EAAA,iBAAiB,MAAM,EAAO,CAAQ,CACjD,CACF,EACA,CACF,EAEA,UAAa,CACX,IAAS,EACT,EAAa,YAAY,CAC3B,CACF,CAAC,CACL,CAEA,SAAgB,EAAW,EAAkC,CAG3D,OAFA,EAAA,eAAe,EAAU,kBAAkB,EAEnC,GACN,EAAA,QAAQ,EAAM,IAAW,CACvB,IAAI,EAEE,MAAoB,CACxB,EAAS,EAAA,iBAAiB,UAAY,EAAK,MAAM,IAAI,EAAA,iBAAiB,CAAQ,CAAC,EAAG,CAAQ,CAC5F,EAEA,EAAM,EAEN,IAAM,EAAe,EAAA,KACnB,EACA,CACE,UAAW,CACT,EAAO,EACP,EAAK,SAAS,CAChB,EACA,MAAM,EAAQ,CACZ,EAAO,EACP,EAAK,MAAM,CAAM,CACnB,EACA,KAAK,EAAO,CACV,EAAO,EACP,EAAM,EACN,EAAK,KAAK,CAAK,CACjB,CACF,EACA,CACF,EAEA,UAAa,CACX,EAAO,EACP,EAAa,YAAY,CAC3B,CACF,CAAC,CACL"}
1
+ {"version":3,"file":"filtering.cjs","names":[],"sources":["../../src/operators/filtering.ts"],"sourcesContent":["import { link } from '../_link.js';\nimport { assertDuration, assertNonNegativeInteger } from '../_numeric.js';\nimport { defaultScheduler } from '../_scheduler.js';\nimport { stream } from '../core.js';\nimport { FluxTimeoutError } from '../errors.js';\nimport type { Operator, Stream, Subscription } from '../types.js';\n\nexport function take<T>(count: number): Operator<T, T> {\n assertNonNegativeInteger(count, 'take count');\n\n return (source) =>\n stream((sink, signal) => {\n if (count === 0) {\n sink.complete();\n\n return;\n }\n\n let seen = 0;\n const subscriptionRef: { current?: Subscription } = {};\n\n subscriptionRef.current = link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n sink.next(value);\n seen++;\n\n if (seen === count) {\n sink.complete();\n subscriptionRef.current?.unsubscribe();\n }\n },\n },\n signal,\n );\n\n return () => subscriptionRef.current?.unsubscribe();\n });\n}\n\nfunction isAbortSignal(value: AbortSignal | Stream<unknown>): value is AbortSignal {\n return (\n typeof (value as AbortSignal).aborted === 'boolean' &&\n typeof (value as AbortSignal).addEventListener === 'function' &&\n typeof (value as AbortSignal).removeEventListener === 'function'\n );\n}\n\nexport function takeUntil<T>(notifier: AbortSignal | Stream<unknown>): Operator<T, T> {\n return (source) =>\n stream((sink, signal) => {\n let sourceSubscription: Subscription | undefined;\n let notifierSubscription: Subscription | undefined;\n let removeNotifier = (): void => {};\n\n const complete = (): void => {\n sourceSubscription?.unsubscribe();\n notifierSubscription?.unsubscribe();\n sink.complete();\n };\n\n if (isAbortSignal(notifier)) {\n if (notifier.aborted) {\n sink.complete();\n\n return;\n }\n\n notifier.addEventListener('abort', complete, { once: true });\n removeNotifier = (): void => notifier.removeEventListener('abort', complete);\n } else {\n notifierSubscription = link(notifier, { error: sink.error, next: complete }, signal);\n }\n\n if (!signal.aborted) {\n sourceSubscription = link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n }\n\n return () => {\n removeNotifier();\n sourceSubscription?.unsubscribe();\n notifierSubscription?.unsubscribe();\n };\n });\n}\n\nexport function debounce<T>(duration: number): Operator<T, T> {\n assertDuration(duration, 'Debounce duration');\n\n return (source) =>\n stream((sink, signal) => {\n let cancel: (() => void) | undefined;\n let pending: T | undefined;\n let hasPending = false;\n\n const flush = (): void => {\n cancel = undefined;\n\n if (!hasPending) return;\n\n hasPending = false;\n sink.next(pending as T);\n };\n\n const subscription = link(\n source,\n {\n complete() {\n cancel?.();\n flush();\n sink.complete();\n },\n error: sink.error,\n next(value) {\n pending = value;\n hasPending = true;\n cancel?.();\n cancel = defaultScheduler.delay(flush, duration);\n },\n },\n signal,\n );\n\n return () => {\n cancel?.();\n subscription.unsubscribe();\n };\n });\n}\n\nexport function timeout<T>(duration: number): Operator<T, T> {\n assertDuration(duration, 'Timeout duration');\n\n return (source) =>\n stream((sink, signal) => {\n let cancel: () => void;\n\n const start = (): void => {\n cancel = defaultScheduler.delay(() => sink.error(new FluxTimeoutError(duration)), duration);\n };\n\n start();\n\n const subscription = link(\n source,\n {\n complete() {\n cancel();\n sink.complete();\n },\n error(reason) {\n cancel();\n sink.error(reason);\n },\n next(value) {\n cancel();\n start();\n sink.next(value);\n },\n },\n signal,\n );\n\n return () => {\n cancel();\n subscription.unsubscribe();\n };\n });\n}\n"],"mappings":"gJAOA,SAAgB,KAAQ,EAA+B,CAGrD,OAFA,EAAA,yBAAyB,EAAO,YAAY,EAEpC,GACN,EAAA,QAAQ,EAAM,IAAW,CACvB,GAAI,IAAU,EAAG,CACf,EAAK,SAAS,EAEd,MACF,CAEA,IAAI,EAAO,EACL,EAA8C,CAAC,EAoBrD,MAlBA,GAAgB,QAAU,EAAA,KACxB,EACA,CACE,SAAU,EAAK,SACf,MAAO,EAAK,MACZ,KAAK,EAAO,CACV,EAAK,KAAK,CAAK,EACf,IAEI,IAAS,IACX,EAAK,SAAS,EACd,EAAgB,SAAS,YAAY,EAEzC,CACF,EACA,CACF,MAEa,EAAgB,SAAS,YAAY,CACpD,CAAC,CACL,CAEA,SAAS,cAAc,EAA4D,CACjF,OACE,OAAQ,EAAsB,SAAY,WAC1C,OAAQ,EAAsB,kBAAqB,YACnD,OAAQ,EAAsB,qBAAwB,UAE1D,CAEA,SAAgB,UAAa,EAAyD,CACpF,MAAQ,IACN,EAAA,QAAQ,EAAM,IAAW,CACvB,IAAI,EACA,EACA,mBAA6B,CAAC,EAE5B,aAAuB,CAC3B,GAAoB,YAAY,EAChC,GAAsB,YAAY,EAClC,EAAK,SAAS,CAChB,EAEA,GAAI,cAAc,CAAQ,EAAG,CAC3B,GAAI,EAAS,QAAS,CACpB,EAAK,SAAS,EAEd,MACF,CAEA,EAAS,iBAAiB,QAAS,SAAU,CAAE,KAAM,EAAK,CAAC,EAC3D,mBAA6B,EAAS,oBAAoB,QAAS,QAAQ,CAC7E,KACE,GAAuB,EAAA,KAAK,EAAU,CAAE,MAAO,EAAK,MAAO,KAAM,QAAS,EAAG,CAAM,EAerF,OAZK,EAAO,UACV,EAAqB,EAAA,KACnB,EACA,CACE,SAAU,EAAK,SACf,MAAO,EAAK,MACZ,KAAM,EAAK,IACb,EACA,CACF,OAGW,CACX,eAAe,EACf,GAAoB,YAAY,EAChC,GAAsB,YAAY,CACpC,CACF,CAAC,CACL,CAEA,SAAgB,SAAY,EAAkC,CAG5D,OAFA,EAAA,eAAe,EAAU,mBAAmB,EAEpC,GACN,EAAA,QAAQ,EAAM,IAAW,CACvB,IAAI,EACA,EACA,EAAa,GAEX,UAAoB,CACxB,EAAS,IAAA,GAEJ,IAEL,EAAa,GACb,EAAK,KAAK,CAAY,EACxB,EAEM,EAAe,EAAA,KACnB,EACA,CACE,UAAW,CACT,IAAS,EACT,MAAM,EACN,EAAK,SAAS,CAChB,EACA,MAAO,EAAK,MACZ,KAAK,EAAO,CACV,EAAU,EACV,EAAa,GACb,IAAS,EACT,EAAS,EAAA,iBAAiB,MAAM,MAAO,CAAQ,CACjD,CACF,EACA,CACF,EAEA,UAAa,CACX,IAAS,EACT,EAAa,YAAY,CAC3B,CACF,CAAC,CACL,CAEA,SAAgB,QAAW,EAAkC,CAG3D,OAFA,EAAA,eAAe,EAAU,kBAAkB,EAEnC,GACN,EAAA,QAAQ,EAAM,IAAW,CACvB,IAAI,EAEE,UAAoB,CACxB,EAAS,EAAA,iBAAiB,UAAY,EAAK,MAAM,IAAI,EAAA,iBAAiB,CAAQ,CAAC,EAAG,CAAQ,CAC5F,EAEA,MAAM,EAEN,IAAM,EAAe,EAAA,KACnB,EACA,CACE,UAAW,CACT,EAAO,EACP,EAAK,SAAS,CAChB,EACA,MAAM,EAAQ,CACZ,EAAO,EACP,EAAK,MAAM,CAAM,CACnB,EACA,KAAK,EAAO,CACV,EAAO,EACP,MAAM,EACN,EAAK,KAAK,CAAK,CACjB,CACF,EACA,CACF,EAEA,UAAa,CACX,EAAO,EACP,EAAa,YAAY,CAC3B,CACF,CAAC,CACL"}
@@ -1,4 +1,4 @@
1
- import type { Operator, Stream } from '../types';
1
+ import type { Operator, Stream } from '../types.js';
2
2
  export declare function take<T>(count: number): Operator<T, T>;
3
3
  export declare function takeUntil<T>(notifier: AbortSignal | Stream<unknown>): Operator<T, T>;
4
4
  export declare function debounce<T>(duration: number): Operator<T, T>;
@@ -1 +1 @@
1
- {"version":3,"file":"filtering.d.ts","sourceRoot":"","sources":["../../src/operators/filtering.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAgB,MAAM,UAAU,CAAC;AAE/D,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAkCrD;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CA4CpF;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CA0C5D;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAsC3D"}
1
+ {"version":3,"file":"filtering.d.ts","sourceRoot":"","sources":["../../src/operators/filtering.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAgB,MAAM,aAAa,CAAC;AAElE,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAkCrD;AAUD,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CA4CpF;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CA0C5D;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAsC3D"}
@@ -1,90 +1,2 @@
1
- import { assertDuration as e, assertNonNegativeInteger as t } from "../_numeric.js";
2
- import { stream as n } from "../core.js";
3
- import { link as r } from "../_link.js";
4
- import { FluxTimeoutError as i } from "../errors.js";
5
- import { defaultScheduler as a } from "../_scheduler.js";
6
- //#region src/operators/filtering.ts
7
- function o(e) {
8
- return t(e, "take count"), (t) => n((n, i) => {
9
- if (e === 0) {
10
- n.complete();
11
- return;
12
- }
13
- let a = 0, o = {};
14
- return o.current = r(t, {
15
- complete: n.complete,
16
- error: n.error,
17
- next(t) {
18
- n.next(t), a++, a === e && (n.complete(), o.current?.unsubscribe());
19
- }
20
- }, i), () => o.current?.unsubscribe();
21
- });
22
- }
23
- function s(e) {
24
- return (t) => n((n, i) => {
25
- let a, o, s = () => {}, c = () => {
26
- a?.unsubscribe(), o?.unsubscribe(), n.complete();
27
- };
28
- if (e instanceof AbortSignal) {
29
- if (e.aborted) {
30
- n.complete();
31
- return;
32
- }
33
- e.addEventListener("abort", c, { once: !0 }), s = () => e.removeEventListener("abort", c);
34
- } else o = r(e, {
35
- error: n.error,
36
- next: c
37
- }, i);
38
- return i.aborted || (a = r(t, {
39
- complete: n.complete,
40
- error: n.error,
41
- next: n.next
42
- }, i)), () => {
43
- s(), a?.unsubscribe(), o?.unsubscribe();
44
- };
45
- });
46
- }
47
- function c(t) {
48
- return e(t, "Debounce duration"), (e) => n((n, i) => {
49
- let o, s, c = !1, l = () => {
50
- o = void 0, c && (c = !1, n.next(s));
51
- }, u = r(e, {
52
- complete() {
53
- o?.(), l(), n.complete();
54
- },
55
- error: n.error,
56
- next(e) {
57
- s = e, c = !0, o?.(), o = a.delay(l, t);
58
- }
59
- }, i);
60
- return () => {
61
- o?.(), u.unsubscribe();
62
- };
63
- });
64
- }
65
- function l(t) {
66
- return e(t, "Timeout duration"), (e) => n((n, o) => {
67
- let s, c = () => {
68
- s = a.delay(() => n.error(new i(t)), t);
69
- };
70
- c();
71
- let l = r(e, {
72
- complete() {
73
- s(), n.complete();
74
- },
75
- error(e) {
76
- s(), n.error(e);
77
- },
78
- next(e) {
79
- s(), c(), n.next(e);
80
- }
81
- }, o);
82
- return () => {
83
- s(), l.unsubscribe();
84
- };
85
- });
86
- }
87
- //#endregion
88
- export { c as debounce, o as take, s as takeUntil, l as timeout };
89
-
1
+ import{assertDuration as e,assertNonNegativeInteger as t}from"../_numeric.js";import{FluxTimeoutError as n}from"../errors.js";import{stream as r}from"../core.js";import{link as i}from"../_link.js";import{defaultScheduler as a}from"../_scheduler.js";function take(e){return t(e,`take count`),t=>r((n,r)=>{if(e===0){n.complete();return}let a=0,o={};return o.current=i(t,{complete:n.complete,error:n.error,next(t){n.next(t),a++,a===e&&(n.complete(),o.current?.unsubscribe())}},r),()=>o.current?.unsubscribe()})}function isAbortSignal(e){return typeof e.aborted==`boolean`&&typeof e.addEventListener==`function`&&typeof e.removeEventListener==`function`}function takeUntil(e){return t=>r((n,r)=>{let a,o,removeNotifier=()=>{},complete=()=>{a?.unsubscribe(),o?.unsubscribe(),n.complete()};if(isAbortSignal(e)){if(e.aborted){n.complete();return}e.addEventListener(`abort`,complete,{once:!0}),removeNotifier=()=>e.removeEventListener(`abort`,complete)}else o=i(e,{error:n.error,next:complete},r);return r.aborted||(a=i(t,{complete:n.complete,error:n.error,next:n.next},r)),()=>{removeNotifier(),a?.unsubscribe(),o?.unsubscribe()}})}function debounce(t){return e(t,`Debounce duration`),e=>r((n,r)=>{let o,s,c=!1,flush=()=>{o=void 0,c&&(c=!1,n.next(s))},l=i(e,{complete(){o?.(),flush(),n.complete()},error:n.error,next(e){s=e,c=!0,o?.(),o=a.delay(flush,t)}},r);return()=>{o?.(),l.unsubscribe()}})}function timeout(t){return e(t,`Timeout duration`),e=>r((r,o)=>{let s,start=()=>{s=a.delay(()=>r.error(new n(t)),t)};start();let c=i(e,{complete(){s(),r.complete()},error(e){s(),r.error(e)},next(e){s(),start(),r.next(e)}},o);return()=>{s(),c.unsubscribe()}})}export{debounce,take,takeUntil,timeout};
90
2
  //# sourceMappingURL=filtering.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filtering.js","names":[],"sources":["../../src/operators/filtering.ts"],"sourcesContent":["import { link } from '../_link';\nimport { assertDuration, assertNonNegativeInteger } from '../_numeric';\nimport { defaultScheduler } from '../_scheduler';\nimport { stream } from '../core';\nimport { FluxTimeoutError } from '../errors';\nimport type { Operator, Stream, Subscription } from '../types';\n\nexport function take<T>(count: number): Operator<T, T> {\n assertNonNegativeInteger(count, 'take count');\n\n return (source) =>\n stream((sink, signal) => {\n if (count === 0) {\n sink.complete();\n\n return;\n }\n\n let seen = 0;\n const subscriptionRef: { current?: Subscription } = {};\n\n subscriptionRef.current = link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n sink.next(value);\n seen++;\n\n if (seen === count) {\n sink.complete();\n subscriptionRef.current?.unsubscribe();\n }\n },\n },\n signal,\n );\n\n return () => subscriptionRef.current?.unsubscribe();\n });\n}\n\nexport function takeUntil<T>(notifier: AbortSignal | Stream<unknown>): Operator<T, T> {\n return (source) =>\n stream((sink, signal) => {\n let sourceSubscription: Subscription | undefined;\n let notifierSubscription: Subscription | undefined;\n let removeNotifier = (): void => {};\n\n const complete = (): void => {\n sourceSubscription?.unsubscribe();\n notifierSubscription?.unsubscribe();\n sink.complete();\n };\n\n if (notifier instanceof AbortSignal) {\n if (notifier.aborted) {\n sink.complete();\n\n return;\n }\n\n notifier.addEventListener('abort', complete, { once: true });\n removeNotifier = (): void => notifier.removeEventListener('abort', complete);\n } else {\n notifierSubscription = link(notifier, { error: sink.error, next: complete }, signal);\n }\n\n if (!signal.aborted) {\n sourceSubscription = link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n }\n\n return () => {\n removeNotifier();\n sourceSubscription?.unsubscribe();\n notifierSubscription?.unsubscribe();\n };\n });\n}\n\nexport function debounce<T>(duration: number): Operator<T, T> {\n assertDuration(duration, 'Debounce duration');\n\n return (source) =>\n stream((sink, signal) => {\n let cancel: (() => void) | undefined;\n let pending: T | undefined;\n let hasPending = false;\n\n const flush = (): void => {\n cancel = undefined;\n\n if (!hasPending) return;\n\n hasPending = false;\n sink.next(pending as T);\n };\n\n const subscription = link(\n source,\n {\n complete() {\n cancel?.();\n flush();\n sink.complete();\n },\n error: sink.error,\n next(value) {\n pending = value;\n hasPending = true;\n cancel?.();\n cancel = defaultScheduler.delay(flush, duration);\n },\n },\n signal,\n );\n\n return () => {\n cancel?.();\n subscription.unsubscribe();\n };\n });\n}\n\nexport function timeout<T>(duration: number): Operator<T, T> {\n assertDuration(duration, 'Timeout duration');\n\n return (source) =>\n stream((sink, signal) => {\n let cancel: () => void;\n\n const start = (): void => {\n cancel = defaultScheduler.delay(() => sink.error(new FluxTimeoutError(duration)), duration);\n };\n\n start();\n\n const subscription = link(\n source,\n {\n complete() {\n cancel();\n sink.complete();\n },\n error(reason) {\n cancel();\n sink.error(reason);\n },\n next(value) {\n cancel();\n start();\n sink.next(value);\n },\n },\n signal,\n );\n\n return () => {\n cancel();\n subscription.unsubscribe();\n };\n });\n}\n"],"mappings":";;;;;;AAOA,SAAgB,EAAQ,GAA+B;CAGrD,OAFA,EAAyB,GAAO,YAAY,IAEpC,MACN,GAAQ,GAAM,MAAW;EACvB,IAAI,MAAU,GAAG;GACf,EAAK,SAAS;GAEd;EACF;EAEA,IAAI,IAAO,GACL,IAA8C,CAAC;EAoBrD,OAlBA,EAAgB,UAAU,EACxB,GACA;GACE,UAAU,EAAK;GACf,OAAO,EAAK;GACZ,KAAK,GAAO;IAIV,AAHA,EAAK,KAAK,CAAK,GACf,KAEI,MAAS,MACX,EAAK,SAAS,GACd,EAAgB,SAAS,YAAY;GAEzC;EACF,GACA,CACF,SAEa,EAAgB,SAAS,YAAY;CACpD,CAAC;AACL;AAEA,SAAgB,EAAa,GAAyD;CACpF,QAAQ,MACN,GAAQ,GAAM,MAAW;EACvB,IAAI,GACA,GACA,UAA6B,CAAC,GAE5B,UAAuB;GAG3B,AAFA,GAAoB,YAAY,GAChC,GAAsB,YAAY,GAClC,EAAK,SAAS;EAChB;EAEA,IAAI,aAAoB,aAAa;GACnC,IAAI,EAAS,SAAS;IACpB,EAAK,SAAS;IAEd;GACF;GAGA,AADA,EAAS,iBAAiB,SAAS,GAAU,EAAE,MAAM,GAAK,CAAC,GAC3D,UAA6B,EAAS,oBAAoB,SAAS,CAAQ;EAC7E,OACE,IAAuB,EAAK,GAAU;GAAE,OAAO,EAAK;GAAO,MAAM;EAAS,GAAG,CAAM;EAerF,OAZK,EAAO,YACV,IAAqB,EACnB,GACA;GACE,UAAU,EAAK;GACf,OAAO,EAAK;GACZ,MAAM,EAAK;EACb,GACA,CACF,UAGW;GAGX,AAFA,EAAe,GACf,GAAoB,YAAY,GAChC,GAAsB,YAAY;EACpC;CACF,CAAC;AACL;AAEA,SAAgB,EAAY,GAAkC;CAG5D,OAFA,EAAe,GAAU,mBAAmB,IAEpC,MACN,GAAQ,GAAM,MAAW;EACvB,IAAI,GACA,GACA,IAAa,IAEX,UAAoB;GACxB,IAAS,KAAA,GAEJ,MAEL,IAAa,IACb,EAAK,KAAK,CAAY;EACxB,GAEM,IAAe,EACnB,GACA;GACE,WAAW;IAGT,AAFA,IAAS,GACT,EAAM,GACN,EAAK,SAAS;GAChB;GACA,OAAO,EAAK;GACZ,KAAK,GAAO;IAIV,AAHA,IAAU,GACV,IAAa,IACb,IAAS,GACT,IAAS,EAAiB,MAAM,GAAO,CAAQ;GACjD;EACF,GACA,CACF;EAEA,aAAa;GAEX,AADA,IAAS,GACT,EAAa,YAAY;EAC3B;CACF,CAAC;AACL;AAEA,SAAgB,EAAW,GAAkC;CAG3D,OAFA,EAAe,GAAU,kBAAkB,IAEnC,MACN,GAAQ,GAAM,MAAW;EACvB,IAAI,GAEE,UAAoB;GACxB,IAAS,EAAiB,YAAY,EAAK,MAAM,IAAI,EAAiB,CAAQ,CAAC,GAAG,CAAQ;EAC5F;EAEA,EAAM;EAEN,IAAM,IAAe,EACnB,GACA;GACE,WAAW;IAET,AADA,EAAO,GACP,EAAK,SAAS;GAChB;GACA,MAAM,GAAQ;IAEZ,AADA,EAAO,GACP,EAAK,MAAM,CAAM;GACnB;GACA,KAAK,GAAO;IAGV,AAFA,EAAO,GACP,EAAM,GACN,EAAK,KAAK,CAAK;GACjB;EACF,GACA,CACF;EAEA,aAAa;GAEX,AADA,EAAO,GACP,EAAa,YAAY;EAC3B;CACF,CAAC;AACL"}
1
+ {"version":3,"file":"filtering.js","names":[],"sources":["../../src/operators/filtering.ts"],"sourcesContent":["import { link } from '../_link.js';\nimport { assertDuration, assertNonNegativeInteger } from '../_numeric.js';\nimport { defaultScheduler } from '../_scheduler.js';\nimport { stream } from '../core.js';\nimport { FluxTimeoutError } from '../errors.js';\nimport type { Operator, Stream, Subscription } from '../types.js';\n\nexport function take<T>(count: number): Operator<T, T> {\n assertNonNegativeInteger(count, 'take count');\n\n return (source) =>\n stream((sink, signal) => {\n if (count === 0) {\n sink.complete();\n\n return;\n }\n\n let seen = 0;\n const subscriptionRef: { current?: Subscription } = {};\n\n subscriptionRef.current = link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n sink.next(value);\n seen++;\n\n if (seen === count) {\n sink.complete();\n subscriptionRef.current?.unsubscribe();\n }\n },\n },\n signal,\n );\n\n return () => subscriptionRef.current?.unsubscribe();\n });\n}\n\nfunction isAbortSignal(value: AbortSignal | Stream<unknown>): value is AbortSignal {\n return (\n typeof (value as AbortSignal).aborted === 'boolean' &&\n typeof (value as AbortSignal).addEventListener === 'function' &&\n typeof (value as AbortSignal).removeEventListener === 'function'\n );\n}\n\nexport function takeUntil<T>(notifier: AbortSignal | Stream<unknown>): Operator<T, T> {\n return (source) =>\n stream((sink, signal) => {\n let sourceSubscription: Subscription | undefined;\n let notifierSubscription: Subscription | undefined;\n let removeNotifier = (): void => {};\n\n const complete = (): void => {\n sourceSubscription?.unsubscribe();\n notifierSubscription?.unsubscribe();\n sink.complete();\n };\n\n if (isAbortSignal(notifier)) {\n if (notifier.aborted) {\n sink.complete();\n\n return;\n }\n\n notifier.addEventListener('abort', complete, { once: true });\n removeNotifier = (): void => notifier.removeEventListener('abort', complete);\n } else {\n notifierSubscription = link(notifier, { error: sink.error, next: complete }, signal);\n }\n\n if (!signal.aborted) {\n sourceSubscription = link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n }\n\n return () => {\n removeNotifier();\n sourceSubscription?.unsubscribe();\n notifierSubscription?.unsubscribe();\n };\n });\n}\n\nexport function debounce<T>(duration: number): Operator<T, T> {\n assertDuration(duration, 'Debounce duration');\n\n return (source) =>\n stream((sink, signal) => {\n let cancel: (() => void) | undefined;\n let pending: T | undefined;\n let hasPending = false;\n\n const flush = (): void => {\n cancel = undefined;\n\n if (!hasPending) return;\n\n hasPending = false;\n sink.next(pending as T);\n };\n\n const subscription = link(\n source,\n {\n complete() {\n cancel?.();\n flush();\n sink.complete();\n },\n error: sink.error,\n next(value) {\n pending = value;\n hasPending = true;\n cancel?.();\n cancel = defaultScheduler.delay(flush, duration);\n },\n },\n signal,\n );\n\n return () => {\n cancel?.();\n subscription.unsubscribe();\n };\n });\n}\n\nexport function timeout<T>(duration: number): Operator<T, T> {\n assertDuration(duration, 'Timeout duration');\n\n return (source) =>\n stream((sink, signal) => {\n let cancel: () => void;\n\n const start = (): void => {\n cancel = defaultScheduler.delay(() => sink.error(new FluxTimeoutError(duration)), duration);\n };\n\n start();\n\n const subscription = link(\n source,\n {\n complete() {\n cancel();\n sink.complete();\n },\n error(reason) {\n cancel();\n sink.error(reason);\n },\n next(value) {\n cancel();\n start();\n sink.next(value);\n },\n },\n signal,\n );\n\n return () => {\n cancel();\n subscription.unsubscribe();\n };\n });\n}\n"],"mappings":"yPAOA,SAAgB,KAAQ,EAA+B,CAGrD,OAFA,EAAyB,EAAO,YAAY,EAEpC,GACN,GAAQ,EAAM,IAAW,CACvB,GAAI,IAAU,EAAG,CACf,EAAK,SAAS,EAEd,MACF,CAEA,IAAI,EAAO,EACL,EAA8C,CAAC,EAoBrD,MAlBA,GAAgB,QAAU,EACxB,EACA,CACE,SAAU,EAAK,SACf,MAAO,EAAK,MACZ,KAAK,EAAO,CACV,EAAK,KAAK,CAAK,EACf,IAEI,IAAS,IACX,EAAK,SAAS,EACd,EAAgB,SAAS,YAAY,EAEzC,CACF,EACA,CACF,MAEa,EAAgB,SAAS,YAAY,CACpD,CAAC,CACL,CAEA,SAAS,cAAc,EAA4D,CACjF,OACE,OAAQ,EAAsB,SAAY,WAC1C,OAAQ,EAAsB,kBAAqB,YACnD,OAAQ,EAAsB,qBAAwB,UAE1D,CAEA,SAAgB,UAAa,EAAyD,CACpF,MAAQ,IACN,GAAQ,EAAM,IAAW,CACvB,IAAI,EACA,EACA,mBAA6B,CAAC,EAE5B,aAAuB,CAC3B,GAAoB,YAAY,EAChC,GAAsB,YAAY,EAClC,EAAK,SAAS,CAChB,EAEA,GAAI,cAAc,CAAQ,EAAG,CAC3B,GAAI,EAAS,QAAS,CACpB,EAAK,SAAS,EAEd,MACF,CAEA,EAAS,iBAAiB,QAAS,SAAU,CAAE,KAAM,EAAK,CAAC,EAC3D,mBAA6B,EAAS,oBAAoB,QAAS,QAAQ,CAC7E,KACE,GAAuB,EAAK,EAAU,CAAE,MAAO,EAAK,MAAO,KAAM,QAAS,EAAG,CAAM,EAerF,OAZK,EAAO,UACV,EAAqB,EACnB,EACA,CACE,SAAU,EAAK,SACf,MAAO,EAAK,MACZ,KAAM,EAAK,IACb,EACA,CACF,OAGW,CACX,eAAe,EACf,GAAoB,YAAY,EAChC,GAAsB,YAAY,CACpC,CACF,CAAC,CACL,CAEA,SAAgB,SAAY,EAAkC,CAG5D,OAFA,EAAe,EAAU,mBAAmB,EAEpC,GACN,GAAQ,EAAM,IAAW,CACvB,IAAI,EACA,EACA,EAAa,GAEX,UAAoB,CACxB,EAAS,IAAA,GAEJ,IAEL,EAAa,GACb,EAAK,KAAK,CAAY,EACxB,EAEM,EAAe,EACnB,EACA,CACE,UAAW,CACT,IAAS,EACT,MAAM,EACN,EAAK,SAAS,CAChB,EACA,MAAO,EAAK,MACZ,KAAK,EAAO,CACV,EAAU,EACV,EAAa,GACb,IAAS,EACT,EAAS,EAAiB,MAAM,MAAO,CAAQ,CACjD,CACF,EACA,CACF,EAEA,UAAa,CACX,IAAS,EACT,EAAa,YAAY,CAC3B,CACF,CAAC,CACL,CAEA,SAAgB,QAAW,EAAkC,CAG3D,OAFA,EAAe,EAAU,kBAAkB,EAEnC,GACN,GAAQ,EAAM,IAAW,CACvB,IAAI,EAEE,UAAoB,CACxB,EAAS,EAAiB,UAAY,EAAK,MAAM,IAAI,EAAiB,CAAQ,CAAC,EAAG,CAAQ,CAC5F,EAEA,MAAM,EAEN,IAAM,EAAe,EACnB,EACA,CACE,UAAW,CACT,EAAO,EACP,EAAK,SAAS,CAChB,EACA,MAAM,EAAQ,CACZ,EAAO,EACP,EAAK,MAAM,CAAM,CACnB,EACA,KAAK,EAAO,CACV,EAAO,EACP,MAAM,EACN,EAAK,KAAK,CAAK,CACjB,CACF,EACA,CACF,EAEA,UAAa,CACX,EAAO,EACP,EAAa,YAAY,CAC3B,CACF,CAAC,CACL"}
@@ -1,2 +1,2 @@
1
- const e=require("../_numeric.cjs"),t=require("../core.cjs"),n=require("../_link.cjs"),r=require("../_safe.cjs"),i=require("../errors.cjs");function a(e){return i=>t.stream((t,a)=>n.link(i,{complete:t.complete,error:t.error,next(n){r.tryCall(()=>t.next(e(n)),t.error)}},a).unsubscribe)}function o(e){return i=>t.stream((t,a)=>n.link(i,{complete:t.complete,error:t.error,next(n){r.tryCall(()=>{e(n)&&t.next(n)},t.error)}},a).unsubscribe)}function s(e,i){return a=>t.stream((t,o)=>{let s=i;return n.link(a,{complete:t.complete,error:t.error,next(n){r.tryCall(()=>{s=e(s,n),t.next(s)},t.error)}},o).unsubscribe})}function c(e){return i=>t.stream((t,a)=>{let o=!1,s,c=()=>{o&&!s&&t.complete()},l=n.link(i,{complete(){o=!0,c()},error:t.error,next(i){s?.unsubscribe(),s=void 0,r.tryCall(()=>{let r=n.link(e(i),{complete(){s=void 0,c()},error:t.error,next:t.next},a);s=r.closed?void 0:r},t.error)}},a);return()=>{l.unsubscribe(),s?.unsubscribe()}})}function l(a,o){let s=o.concurrency===1/0;return s||(e.assertPositiveInteger(o.concurrency,`mergeMap concurrency`),e.assertPositiveInteger(o.capacity,`mergeMap capacity`)),e=>t.stream((t,c)=>{let l=[],u=new Set,d=!1,f={},p=()=>{d&&u.size===0&&l.length===0&&t.complete()},m=e=>{r.tryCall(()=>{let r={};r.current=n.link(a(e),{complete(){r.current&&u.delete(r.current),h()},error:t.error,next:t.next},c),r.current.closed?h():u.add(r.current)},t.error)},h=()=>{if(!c.aborted){for(;l.length>0&&(s||u.size<o.concurrency);){let e=l.shift();m(e)}p()}};return f.current=n.link(e,{complete(){d=!0,p()},error:t.error,next(e){if(!s&&l.length>=o.capacity){f.current?.unsubscribe(),t.error(new i.FluxCapacityError(o.capacity,`mergeMap buffer capacity exceeded`));return}l.push(e),h()}},c),()=>{f.current?.unsubscribe();for(let e of u)e.unsubscribe();l.length=0}})}function u(e,t){return l(e,t)}function d(e,t){return l(e,{capacity:t.capacity,concurrency:1})}exports.concatMap=d,exports.filter=o,exports.map=a,exports.mergeMap=u,exports.scan=s,exports.switchMap=c;
1
+ const e=require("../_numeric.cjs"),t=require("../errors.cjs"),n=require("../core.cjs"),r=require("../_link.cjs"),i=require("../_safe.cjs");function map(e){return t=>n.stream((n,a)=>r.link(t,{complete:n.complete,error:n.error,next(t){i.tryCall(()=>n.next(e(t)),n.error)}},a).unsubscribe)}function filter(e){return t=>n.stream((n,a)=>r.link(t,{complete:n.complete,error:n.error,next(t){i.tryCall(()=>{e(t)&&n.next(t)},n.error)}},a).unsubscribe)}function scan(e,t){return a=>n.stream((n,o)=>{let s=t;return r.link(a,{complete:n.complete,error:n.error,next(t){i.tryCall(()=>{s=e(s,t),n.next(s)},n.error)}},o).unsubscribe})}function switchMap(e){return t=>n.stream((n,a)=>{let o=!1,s,finish=()=>{o&&!s&&n.complete()},c=r.link(t,{complete(){o=!0,finish()},error:n.error,next(t){s?.unsubscribe(),s=void 0,i.tryCall(()=>{let i=r.link(e(t),{complete(){s=void 0,finish()},error:n.error,next:n.next},a);s=i.closed?void 0:i},n.error)}},a);return()=>{c.unsubscribe(),s?.unsubscribe()}})}function flatten(a,o){let s=o.concurrency===1/0;return s||(e.assertPositiveInteger(o.concurrency,`mergeMap concurrency`),e.assertPositiveInteger(o.capacity,`mergeMap capacity`)),e=>n.stream((n,c)=>{let l=[],u=new Set,d=!1,f={},finish=()=>{d&&u.size===0&&l.length===0&&n.complete()},startInner=e=>{i.tryCall(()=>{let t={};t.current=r.link(a(e),{complete(){t.current&&u.delete(t.current),drain()},error:n.error,next:n.next},c),t.current.closed?drain():u.add(t.current)},n.error)},drain=()=>{if(!c.aborted){for(;l.length>0&&(s||u.size<o.concurrency);){let e=l.shift();startInner(e)}finish()}};return f.current=r.link(e,{complete(){d=!0,finish()},error:n.error,next(e){if(!s&&l.length>=o.capacity){f.current?.unsubscribe(),n.error(new t.FluxCapacityError(o.capacity,`mergeMap buffer capacity exceeded`));return}l.push(e),drain()}},c),()=>{f.current?.unsubscribe();for(let e of u)e.unsubscribe();l.length=0}})}function mergeMap(e,t){return flatten(e,t)}function concatMap(e,t){return flatten(e,{capacity:t.capacity,concurrency:1})}exports.concatMap=concatMap,exports.filter=filter,exports.map=map,exports.mergeMap=mergeMap,exports.scan=scan,exports.switchMap=switchMap;
2
2
  //# sourceMappingURL=transformation.cjs.map
@@ -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 { 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
+ {"version":3,"file":"transformation.cjs","names":[],"sources":["../../src/operators/transformation.ts"],"sourcesContent":["import { link } from '../_link.js';\nimport { assertPositiveInteger } from '../_numeric.js';\nimport { tryCall } from '../_safe.js';\nimport { stream } from '../core.js';\nimport { FluxCapacityError } from '../errors.js';\nimport type { Operator, Stream, Subscription } from '../types.js';\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":"2IAcA,SAAgB,IAAU,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,OAAU,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,KAAW,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,UAAgB,EAAkD,CAChF,MAAQ,IACN,EAAA,QAAQ,EAAM,IAAW,CACvB,IAAI,EAAgB,GAChB,EAEE,WAAqB,CACrB,GAAiB,CAAC,GAAO,EAAK,SAAS,CAC7C,EAEM,EAAQ,EAAA,KACZ,EACA,CACE,UAAW,CACT,EAAgB,GAChB,OAAO,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,OAAO,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,SAAS,QAAc,EAAkC,EAAyC,CAChG,IAAM,EAAY,EAAQ,cAAgB,IAO1C,OALK,IACH,EAAA,sBAAsB,EAAQ,YAAa,sBAAsB,EACjE,EAAA,sBAAsB,EAAQ,SAAU,mBAAmB,GAGrD,GACN,EAAA,QAAQ,EAAM,IAAW,CACvB,IAAM,EAAa,CAAC,EACd,EAAS,IAAI,IACf,EAAgB,GACd,EAAuC,CAAC,EAExC,WAAqB,CACrB,GAAiB,EAAO,OAAS,GAAK,EAAM,SAAW,GAAG,EAAK,SAAS,CAC9E,EAEM,WAAc,GAAmB,CACrC,EAAA,YAAc,CACZ,IAAM,EAAuC,CAAC,EAE9C,EAAS,QAAU,EAAA,KACjB,EAAQ,CAAK,EACb,CACE,UAAW,CACL,EAAS,SAAS,EAAO,OAAO,EAAS,OAAO,EAEpD,MAAM,CACR,EACA,MAAO,EAAK,MACZ,KAAM,EAAK,IACb,EACA,CACF,EAEK,EAAS,QAAQ,OACjB,MAAM,EADmB,EAAO,IAAI,EAAS,OAAO,CAE3D,EAAG,EAAK,KAAK,CACf,EAEM,UAAoB,CACpB,MAAO,QAEX,MAAO,EAAM,OAAS,IAAM,GAAa,EAAO,KAAO,EAAQ,cAAc,CAC3E,IAAM,EAAQ,EAAM,MAAM,EAE1B,WAAW,CAAK,CAClB,CAEA,OAAO,CAFP,CAGF,EAyBA,MAvBA,GAAS,QAAU,EAAA,KACjB,EACA,CACE,UAAW,CACT,EAAgB,GAChB,OAAO,CACT,EACA,MAAO,EAAK,MACZ,KAAK,EAAO,CACV,GAAI,CAAC,GAAa,EAAM,QAAU,EAAQ,SAAU,CAClD,EAAS,SAAS,YAAY,EAC9B,EAAK,MAAM,IAAI,EAAA,kBAAkB,EAAQ,SAAU,mCAAmC,CAAC,EAEvF,MACF,CAEA,EAAM,KAAK,CAAK,EAChB,MAAM,CACR,CACF,EACA,CACF,MAEa,CACX,EAAS,SAAS,YAAY,EAC9B,IAAK,IAAM,KAAS,EAAQ,EAAM,YAAY,EAC9C,EAAM,OAAS,CACjB,CACF,CAAC,CACL,CAEA,SAAgB,SAAe,EAAkC,EAAyC,CACxG,OAAO,QAAQ,EAAS,CAAO,CACjC,CAEA,SAAgB,UACd,EACA,EACgB,CAChB,OAAO,QAAQ,EAAS,CAAE,SAAU,EAAQ,SAAU,YAAa,CAAE,CAAC,CACxE"}
@@ -1,4 +1,4 @@
1
- import type { Operator, Stream } from '../types';
1
+ import type { Operator, Stream } from '../types.js';
2
2
  export type FlattenOptions = {
3
3
  /** Maximum concurrently active inner subscriptions. Use `Infinity` for unbounded concurrency. */
4
4
  concurrency: number;
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"transformation.d.ts","sourceRoot":"","sources":["../../src/operators/transformation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAgB,MAAM,aAAa,CAAC;AAElE,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"}
@@ -1,124 +1,2 @@
1
- import { assertPositiveInteger as e } from "../_numeric.js";
2
- import { stream as t } from "../core.js";
3
- import { link as n } from "../_link.js";
4
- import { tryCall as r } from "../_safe.js";
5
- import { FluxCapacityError as i } from "../errors.js";
6
- //#region src/operators/transformation.ts
7
- function a(e) {
8
- return (i) => t((t, a) => n(i, {
9
- complete: t.complete,
10
- error: t.error,
11
- next(n) {
12
- r(() => t.next(e(n)), t.error);
13
- }
14
- }, a).unsubscribe);
15
- }
16
- function o(e) {
17
- return (i) => t((t, a) => n(i, {
18
- complete: t.complete,
19
- error: t.error,
20
- next(n) {
21
- r(() => {
22
- e(n) && t.next(n);
23
- }, t.error);
24
- }
25
- }, a).unsubscribe);
26
- }
27
- function s(e, i) {
28
- return (a) => t((t, o) => {
29
- let s = i;
30
- return n(a, {
31
- complete: t.complete,
32
- error: t.error,
33
- next(n) {
34
- r(() => {
35
- s = e(s, n), t.next(s);
36
- }, t.error);
37
- }
38
- }, o).unsubscribe;
39
- });
40
- }
41
- function c(e) {
42
- return (i) => t((t, a) => {
43
- let o = !1, s, c = () => {
44
- o && !s && t.complete();
45
- }, l = n(i, {
46
- complete() {
47
- o = !0, c();
48
- },
49
- error: t.error,
50
- next(i) {
51
- s?.unsubscribe(), s = void 0, r(() => {
52
- let r = n(e(i), {
53
- complete() {
54
- s = void 0, c();
55
- },
56
- error: t.error,
57
- next: t.next
58
- }, a);
59
- s = r.closed ? void 0 : r;
60
- }, t.error);
61
- }
62
- }, a);
63
- return () => {
64
- l.unsubscribe(), s?.unsubscribe();
65
- };
66
- });
67
- }
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) => {
74
- r(() => {
75
- let r = {};
76
- r.current = n(a(e), {
77
- complete() {
78
- r.current && u.delete(r.current), h();
79
- },
80
- error: t.error,
81
- next: t.next
82
- }, c), r.current.closed ? h() : u.add(r.current);
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
- }
92
- };
93
- return f.current = n(e, {
94
- complete() {
95
- d = !0, p();
96
- },
97
- error: t.error,
98
- next(e) {
99
- if (!s && l.length >= o.capacity) {
100
- f.current?.unsubscribe(), t.error(new i(o.capacity, "mergeMap buffer capacity exceeded"));
101
- return;
102
- }
103
- l.push(e), h();
104
- }
105
- }, c), () => {
106
- f.current?.unsubscribe();
107
- for (let e of u) e.unsubscribe();
108
- l.length = 0;
109
- };
110
- });
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
- }
121
- //#endregion
122
- export { d as concatMap, o as filter, a as map, u as mergeMap, s as scan, c as switchMap };
123
-
1
+ import{assertPositiveInteger as e}from"../_numeric.js";import{FluxCapacityError as t}from"../errors.js";import{stream as n}from"../core.js";import{link as r}from"../_link.js";import{tryCall as i}from"../_safe.js";function map(e){return t=>n((n,a)=>r(t,{complete:n.complete,error:n.error,next(t){i(()=>n.next(e(t)),n.error)}},a).unsubscribe)}function filter(e){return t=>n((n,a)=>r(t,{complete:n.complete,error:n.error,next(t){i(()=>{e(t)&&n.next(t)},n.error)}},a).unsubscribe)}function scan(e,t){return a=>n((n,o)=>{let s=t;return r(a,{complete:n.complete,error:n.error,next(t){i(()=>{s=e(s,t),n.next(s)},n.error)}},o).unsubscribe})}function switchMap(e){return t=>n((n,a)=>{let o=!1,s,finish=()=>{o&&!s&&n.complete()},c=r(t,{complete(){o=!0,finish()},error:n.error,next(t){s?.unsubscribe(),s=void 0,i(()=>{let i=r(e(t),{complete(){s=void 0,finish()},error:n.error,next:n.next},a);s=i.closed?void 0:i},n.error)}},a);return()=>{c.unsubscribe(),s?.unsubscribe()}})}function flatten(a,o){let s=o.concurrency===1/0;return s||(e(o.concurrency,`mergeMap concurrency`),e(o.capacity,`mergeMap capacity`)),e=>n((n,c)=>{let l=[],u=new Set,d=!1,f={},finish=()=>{d&&u.size===0&&l.length===0&&n.complete()},startInner=e=>{i(()=>{let t={};t.current=r(a(e),{complete(){t.current&&u.delete(t.current),drain()},error:n.error,next:n.next},c),t.current.closed?drain():u.add(t.current)},n.error)},drain=()=>{if(!c.aborted){for(;l.length>0&&(s||u.size<o.concurrency);){let e=l.shift();startInner(e)}finish()}};return f.current=r(e,{complete(){d=!0,finish()},error:n.error,next(e){if(!s&&l.length>=o.capacity){f.current?.unsubscribe(),n.error(new t(o.capacity,`mergeMap buffer capacity exceeded`));return}l.push(e),drain()}},c),()=>{f.current?.unsubscribe();for(let e of u)e.unsubscribe();l.length=0}})}function mergeMap(e,t){return flatten(e,t)}function concatMap(e,t){return flatten(e,{capacity:t.capacity,concurrency:1})}export{concatMap,filter,map,mergeMap,scan,switchMap};
124
2
  //# 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 { 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
+ {"version":3,"file":"transformation.js","names":[],"sources":["../../src/operators/transformation.ts"],"sourcesContent":["import { link } from '../_link.js';\nimport { assertPositiveInteger } from '../_numeric.js';\nimport { tryCall } from '../_safe.js';\nimport { stream } from '../core.js';\nimport { FluxCapacityError } from '../errors.js';\nimport type { Operator, Stream, Subscription } from '../types.js';\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("../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;
1
+ const e=require("../_numeric.cjs"),t=require("../errors.cjs"),n=require("../core.cjs"),r=require("../_link.cjs"),i=require("../_scheduler.cjs"),a=require("../_safe.cjs");let o=require("@vielzeug/arsenal");function retry(t){return e.assertNonNegativeInteger(t.times,`retry times`),o=>n.stream((n,s)=>{let c=0,l,u,start=()=>{if(s.aborted)return;let d=r.link(o,{complete:n.complete,error(r){if(c===t.times){n.error(r);return}let o=c++,l;if(a.tryCall(()=>{l=typeof t.delay==`function`?t.delay(o):t.delay},n.error),!s.aborted){if(l!==void 0)try{e.assertDuration(l,`Retry delay`)}catch(e){n.error(e);return}l===void 0||l===0?queueMicrotask(start):u=i.defaultScheduler.delay(start,l)}},next:n.next},s);d.closed||(l=d)};return start(),()=>{u?.(),l?.unsubscribe()}})}function first(e,n){return new Promise((i,a)=>{let s=new AbortController,abort=()=>{s.abort(),a((0,o.abortError)(n?.signal,`Stream consumption aborted`))};if(n?.signal?.aborted){abort();return}n?.signal?.addEventListener(`abort`,abort,{once:!0}),r.link(e,{complete(){n?.signal?.removeEventListener(`abort`,abort),`defaultValue`in(n??{})?i(n.defaultValue):a(new t.FluxEmptyError)},error(e){n?.signal?.removeEventListener(`abort`,abort),a(e)},next(e){n?.signal?.removeEventListener(`abort`,abort),s.abort(),i(e)}},s.signal)})}function last(e,n){return new Promise((i,a)=>{let s=new AbortController,abort=()=>{s.abort(),a((0,o.abortError)(n?.signal,`Stream consumption aborted`))};if(n?.signal?.aborted){abort();return}let c=!1,l;n?.signal?.addEventListener(`abort`,abort,{once:!0}),r.link(e,{complete(){n?.signal?.removeEventListener(`abort`,abort),c?i(l):`defaultValue`in(n??{})?i(n.defaultValue):a(new t.FluxEmptyError)},error(e){n?.signal?.removeEventListener(`abort`,abort),a(e)},next(e){c=!0,l=e}},s.signal)})}function toArray(n,i){return e.assertNonNegativeInteger(i.maxItems,`toArray maxItems`),new Promise((e,a)=>{let s=new AbortController,c=[],abort=()=>{s.abort(),a((0,o.abortError)(i?.signal,`Stream consumption aborted`))};if(i.signal?.aborted){abort();return}i.signal?.addEventListener(`abort`,abort,{once:!0}),r.link(n,{complete(){i.signal?.removeEventListener(`abort`,abort),e(c)},error(e){i.signal?.removeEventListener(`abort`,abort),a(e)},next(e){if(c.length===i.maxItems){i.signal?.removeEventListener(`abort`,abort),s.abort(),a(new t.FluxCapacityError(i.maxItems,`toArray maxItems exceeded`));return}c.push(e)}},s.signal)})}exports.first=first,exports.last=last,exports.retry=retry,exports.toArray=toArray;
2
2
  //# sourceMappingURL=utility.cjs.map