@vielzeug/flux 1.0.3

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 (122) hide show
  1. package/README.md +50 -0
  2. package/dist/_dev.cjs +2 -0
  3. package/dist/_dev.cjs.map +1 -0
  4. package/dist/_dev.d.ts +2 -0
  5. package/dist/_dev.d.ts.map +1 -0
  6. package/dist/_dev.js +12 -0
  7. package/dist/_dev.js.map +1 -0
  8. package/dist/_iterator.cjs +2 -0
  9. package/dist/_iterator.cjs.map +1 -0
  10. package/dist/_iterator.d.ts +2 -0
  11. package/dist/_iterator.d.ts.map +1 -0
  12. package/dist/_iterator.js +53 -0
  13. package/dist/_iterator.js.map +1 -0
  14. package/dist/_numeric.cjs +2 -0
  15. package/dist/_numeric.cjs.map +1 -0
  16. package/dist/_numeric.d.ts +2 -0
  17. package/dist/_numeric.d.ts.map +1 -0
  18. package/dist/_numeric.js +12 -0
  19. package/dist/_numeric.js.map +1 -0
  20. package/dist/_pipe.cjs +2 -0
  21. package/dist/_pipe.cjs.map +1 -0
  22. package/dist/_pipe.d.ts +2 -0
  23. package/dist/_pipe.d.ts.map +1 -0
  24. package/dist/_pipe.js +8 -0
  25. package/dist/_pipe.js.map +1 -0
  26. package/dist/_safe.cjs +2 -0
  27. package/dist/_safe.cjs.map +1 -0
  28. package/dist/_safe.d.ts +2 -0
  29. package/dist/_safe.d.ts.map +1 -0
  30. package/dist/_safe.js +12 -0
  31. package/dist/_safe.js.map +1 -0
  32. package/dist/_scheduler.cjs +2 -0
  33. package/dist/_scheduler.cjs.map +1 -0
  34. package/dist/_scheduler.d.ts +3 -0
  35. package/dist/_scheduler.d.ts.map +1 -0
  36. package/dist/_scheduler.js +15 -0
  37. package/dist/_scheduler.js.map +1 -0
  38. package/dist/adapters/courier.cjs +2 -0
  39. package/dist/adapters/courier.cjs.map +1 -0
  40. package/dist/adapters/courier.d.ts +22 -0
  41. package/dist/adapters/courier.d.ts.map +1 -0
  42. package/dist/adapters/courier.js +14 -0
  43. package/dist/adapters/courier.js.map +1 -0
  44. package/dist/adapters/herald.cjs +2 -0
  45. package/dist/adapters/herald.cjs.map +1 -0
  46. package/dist/adapters/herald.d.ts +19 -0
  47. package/dist/adapters/herald.d.ts.map +1 -0
  48. package/dist/adapters/herald.js +18 -0
  49. package/dist/adapters/herald.js.map +1 -0
  50. package/dist/adapters/pulse.cjs +2 -0
  51. package/dist/adapters/pulse.cjs.map +1 -0
  52. package/dist/adapters/pulse.d.ts +22 -0
  53. package/dist/adapters/pulse.d.ts.map +1 -0
  54. package/dist/adapters/pulse.js +22 -0
  55. package/dist/adapters/pulse.js.map +1 -0
  56. package/dist/adapters/ripple.cjs +2 -0
  57. package/dist/adapters/ripple.cjs.map +1 -0
  58. package/dist/adapters/ripple.d.ts +53 -0
  59. package/dist/adapters/ripple.d.ts.map +1 -0
  60. package/dist/adapters/ripple.js +47 -0
  61. package/dist/adapters/ripple.js.map +1 -0
  62. package/dist/core.cjs +2 -0
  63. package/dist/core.cjs.map +1 -0
  64. package/dist/core.d.ts +17 -0
  65. package/dist/core.d.ts.map +1 -0
  66. package/dist/core.js +87 -0
  67. package/dist/core.js.map +1 -0
  68. package/dist/errors.cjs +2 -0
  69. package/dist/errors.cjs.map +1 -0
  70. package/dist/errors.d.ts +10 -0
  71. package/dist/errors.d.ts.map +1 -0
  72. package/dist/errors.js +18 -0
  73. package/dist/errors.js.map +1 -0
  74. package/dist/flux.cjs +2 -0
  75. package/dist/flux.cjs.map +1 -0
  76. package/dist/flux.iife.js +2 -0
  77. package/dist/flux.iife.js.map +1 -0
  78. package/dist/flux.js +2 -0
  79. package/dist/flux.js.map +1 -0
  80. package/dist/index.cjs +1 -0
  81. package/dist/index.d.ts +17 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +14 -0
  84. package/dist/operators/combination.cjs +2 -0
  85. package/dist/operators/combination.cjs.map +1 -0
  86. package/dist/operators/combination.d.ts +65 -0
  87. package/dist/operators/combination.d.ts.map +1 -0
  88. package/dist/operators/combination.js +187 -0
  89. package/dist/operators/combination.js.map +1 -0
  90. package/dist/operators/creation.cjs +2 -0
  91. package/dist/operators/creation.cjs.map +1 -0
  92. package/dist/operators/creation.d.ts +50 -0
  93. package/dist/operators/creation.d.ts.map +1 -0
  94. package/dist/operators/creation.js +90 -0
  95. package/dist/operators/creation.js.map +1 -0
  96. package/dist/operators/filtering.cjs +2 -0
  97. package/dist/operators/filtering.cjs.map +1 -0
  98. package/dist/operators/filtering.d.ts +62 -0
  99. package/dist/operators/filtering.d.ts.map +1 -0
  100. package/dist/operators/filtering.js +140 -0
  101. package/dist/operators/filtering.js.map +1 -0
  102. package/dist/operators/transformation.cjs +2 -0
  103. package/dist/operators/transformation.cjs.map +1 -0
  104. package/dist/operators/transformation.d.ts +64 -0
  105. package/dist/operators/transformation.d.ts.map +1 -0
  106. package/dist/operators/transformation.js +185 -0
  107. package/dist/operators/transformation.js.map +1 -0
  108. package/dist/operators/utility.cjs +2 -0
  109. package/dist/operators/utility.cjs.map +1 -0
  110. package/dist/operators/utility.d.ts +98 -0
  111. package/dist/operators/utility.d.ts.map +1 -0
  112. package/dist/operators/utility.js +226 -0
  113. package/dist/operators/utility.js.map +1 -0
  114. package/dist/subject.cjs +2 -0
  115. package/dist/subject.cjs.map +1 -0
  116. package/dist/subject.d.ts +67 -0
  117. package/dist/subject.d.ts.map +1 -0
  118. package/dist/subject.js +181 -0
  119. package/dist/subject.js.map +1 -0
  120. package/dist/types.d.ts +86 -0
  121. package/dist/types.d.ts.map +1 -0
  122. package/package.json +61 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combination.cjs","names":[],"sources":["../../src/operators/combination.ts"],"sourcesContent":["import type { Flux, Operator, Unsubscribe } from '../types';\n\nimport { flux } from '../core';\n\n/**\n * Merge multiple `Flux` streams into one, emitting values as they arrive.\n *\n * @example\n * merge(clicks$, keydowns$).subscribe(console.log);\n */\nexport function merge<T>(...sources: Flux<T>[]): Flux<T> {\n return flux<T>((observer) => {\n if (sources.length === 0) {\n observer.complete?.();\n\n return;\n }\n\n let completedCount = 0;\n const unsubs: Unsubscribe[] = [];\n\n for (const source of sources) {\n unsubs.push(\n source.subscribe({\n complete() {\n completedCount++;\n\n if (completedCount === sources.length) observer.complete?.();\n },\n error: observer.error,\n next: observer.next,\n }),\n );\n }\n\n return () => {\n for (const u of unsubs) u();\n };\n });\n}\n\n/**\n * Subscribe to each source sequentially — the next source only starts after\n * the previous one completes.\n *\n * @example\n * concat(of(1, 2), of(3, 4)); // emits 1, 2, 3, 4\n */\nexport function concat<T>(...sources: Flux<T>[]): Flux<T> {\n return flux<T>((observer) => {\n let index = 0;\n let currentUnsub: Unsubscribe | undefined;\n\n function subscribeNext(): void {\n if (index >= sources.length) {\n observer.complete?.();\n\n return;\n }\n\n currentUnsub = sources[index++]!.subscribe({\n complete() {\n currentUnsub = undefined;\n subscribeNext();\n },\n error: observer.error,\n next: observer.next,\n });\n }\n\n subscribeNext();\n\n return () => currentUnsub?.();\n });\n}\n\n/**\n * Combine the latest values from all sources into a tuple whenever any source emits.\n * Waits until all sources have emitted at least once before emitting.\n *\n * @example\n * combineLatest(a$, b$).subscribe(([a, b]) => console.log(a, b));\n */\nexport function combineLatest<T extends Flux<unknown>[]>(\n ...sources: T\n): Flux<{ [K in keyof T]: T[K] extends Flux<infer V> ? V : never }> {\n type Out = { [K in keyof T]: T[K] extends Flux<infer V> ? V : never };\n\n return flux<Out>((observer) => {\n if (sources.length === 0) {\n observer.complete?.();\n\n return;\n }\n\n const latests = new Array(sources.length) as Out;\n const hasValue = new Array<boolean>(sources.length).fill(false);\n let completedCount = 0;\n const unsubs: Unsubscribe[] = [];\n\n sources.forEach((source, i) => {\n unsubs.push(\n source.subscribe({\n complete() {\n completedCount++;\n\n if (completedCount === sources.length) observer.complete?.();\n },\n error: observer.error,\n next(v) {\n latests[i] = v as Out[typeof i];\n hasValue[i] = true;\n\n if (hasValue.every(Boolean)) observer.next([...latests] as Out);\n },\n }),\n );\n });\n\n return () => {\n for (const u of unsubs) u();\n };\n });\n}\n\n/**\n * Emit from `source` combined with the latest values from `others` as a tuple.\n * Does not wait for others to emit — emits whenever `source` emits (if others have a value).\n *\n * @example\n * a$.pipe(withLatestFrom(b$)).subscribe(([a, b]) => console.log(a, b));\n */\nexport function withLatestFrom<T, U extends Flux<unknown>[]>(\n ...others: U\n): Operator<T, [T, ...{ [K in keyof U]: U[K] extends Flux<infer V> ? V : never }]> {\n type Rest = { [K in keyof U]: U[K] extends Flux<infer V> ? V : never };\n type Out = [T, ...Rest];\n\n return (source) =>\n flux<Out>((observer) => {\n const latests = new Array(others.length) as Rest;\n const hasValue = new Array<boolean>(others.length).fill(false);\n const otherUnsubs: Unsubscribe[] = [];\n\n others.forEach((other, i) => {\n otherUnsubs.push(\n other.subscribe({\n error: observer.error,\n next(v) {\n latests[i] = v as Rest[typeof i];\n hasValue[i] = true;\n },\n }),\n );\n });\n\n const sourceUnsub = source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n if (hasValue.every(Boolean)) {\n observer.next([v, ...latests] as Out);\n }\n },\n });\n\n return () => {\n sourceUnsub();\n\n for (const u of otherUnsubs) u();\n };\n });\n}\n\n/**\n * Subscribe to all sources; emit the first value from whichever source emits first,\n * then unsubscribe from all others.\n *\n * @example\n * race(timedOut$, userClicked$).subscribe(console.log);\n */\nexport function race<T>(...sources: Flux<T>[]): Flux<T> {\n return flux<T>((observer) => {\n if (sources.length === 0) {\n observer.complete?.();\n\n return;\n }\n\n let winner = false;\n const unsubs: Unsubscribe[] = [];\n\n for (const source of sources) {\n unsubs.push(\n source.subscribe({\n complete() {\n if (!winner) {\n winner = true;\n observer.complete?.();\n\n for (const u of unsubs) u();\n }\n },\n error(err) {\n if (!winner) {\n winner = true;\n observer.error?.(err);\n\n for (const u of unsubs) u();\n }\n },\n next(v) {\n if (!winner) {\n winner = true;\n observer.next(v);\n\n for (const u of unsubs) u();\n }\n },\n }),\n );\n }\n\n return () => {\n for (const u of unsubs) u();\n };\n });\n}\n\n/**\n * Pair emissions by index across all sources. Emits a tuple when all sources\n * have each emitted their N-th value. Completes when any source completes.\n *\n * @example\n * zip(of(1, 2), of('a', 'b')); // emits [1,'a'], [2,'b']\n */\nexport function zip<T extends Flux<unknown>[]>(\n ...sources: T\n): Flux<{ [K in keyof T]: T[K] extends Flux<infer V> ? V : never }> {\n type Out = { [K in keyof T]: T[K] extends Flux<infer V> ? V : never };\n\n return flux<Out>((observer) => {\n if (sources.length === 0) {\n observer.complete?.();\n\n return;\n }\n\n const buffers = sources.map(() => [] as unknown[]);\n const completed = new Array<boolean>(sources.length).fill(false);\n const unsubs: Unsubscribe[] = [];\n let done = false;\n\n function checkAndEmit(): void {\n if (done) return;\n\n while (buffers.every((b) => b.length > 0)) {\n const tuple = buffers.map((b) => b.shift()) as Out;\n\n observer.next(tuple);\n }\n\n if (buffers.some((b, i) => completed[i] && b.length === 0)) {\n done = true;\n observer.complete?.();\n\n for (const u of unsubs) u();\n }\n }\n\n sources.forEach((source, i) => {\n unsubs.push(\n source.subscribe({\n complete() {\n completed[i] = true;\n checkAndEmit();\n },\n error(err) {\n done = true;\n observer.error?.(err);\n\n for (const u of unsubs) u();\n },\n next(v) {\n buffers[i]!.push(v);\n checkAndEmit();\n },\n }),\n );\n });\n\n return () => {\n for (const u of unsubs) u();\n };\n });\n}\n\n/**\n * Wait for all sources to complete, then emit a single tuple of last values.\n * Similar to `Promise.all`.\n *\n * @example\n * forkJoin(fetch1$, fetch2$).subscribe(([r1, r2]) => console.log(r1, r2));\n */\nexport function forkJoin<T extends Flux<unknown>[]>(\n ...sources: T\n): Flux<{ [K in keyof T]: T[K] extends Flux<infer V> ? V : never }> {\n type Out = { [K in keyof T]: T[K] extends Flux<infer V> ? V : never };\n\n return flux<Out>((observer) => {\n if (sources.length === 0) {\n observer.complete?.();\n\n return;\n }\n\n const results = new Array(sources.length) as Out;\n const completed = new Array<boolean>(sources.length).fill(false);\n const unsubs: Unsubscribe[] = [];\n\n sources.forEach((source, i) => {\n let lastValue: unknown;\n let hasValue = false;\n\n unsubs.push(\n source.subscribe({\n complete() {\n completed[i] = true;\n\n if (!hasValue) {\n observer.complete?.();\n\n for (const u of unsubs) u();\n\n return;\n }\n\n results[i] = lastValue as Out[typeof i];\n\n if (completed.every(Boolean)) {\n observer.next([...results] as Out);\n observer.complete?.();\n }\n },\n error: observer.error,\n next(v) {\n lastValue = v;\n hasValue = true;\n },\n }),\n );\n });\n\n return () => {\n for (const u of unsubs) u();\n };\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import type { Flux, Operator } from '../types';
2
+ /**
3
+ * Merge multiple `Flux` streams into one, emitting values as they arrive.
4
+ *
5
+ * @example
6
+ * merge(clicks$, keydowns$).subscribe(console.log);
7
+ */
8
+ export declare function merge<T>(...sources: Flux<T>[]): Flux<T>;
9
+ /**
10
+ * Subscribe to each source sequentially — the next source only starts after
11
+ * the previous one completes.
12
+ *
13
+ * @example
14
+ * concat(of(1, 2), of(3, 4)); // emits 1, 2, 3, 4
15
+ */
16
+ export declare function concat<T>(...sources: Flux<T>[]): Flux<T>;
17
+ /**
18
+ * Combine the latest values from all sources into a tuple whenever any source emits.
19
+ * Waits until all sources have emitted at least once before emitting.
20
+ *
21
+ * @example
22
+ * combineLatest(a$, b$).subscribe(([a, b]) => console.log(a, b));
23
+ */
24
+ export declare function combineLatest<T extends Flux<unknown>[]>(...sources: T): Flux<{
25
+ [K in keyof T]: T[K] extends Flux<infer V> ? V : never;
26
+ }>;
27
+ /**
28
+ * Emit from `source` combined with the latest values from `others` as a tuple.
29
+ * Does not wait for others to emit — emits whenever `source` emits (if others have a value).
30
+ *
31
+ * @example
32
+ * a$.pipe(withLatestFrom(b$)).subscribe(([a, b]) => console.log(a, b));
33
+ */
34
+ export declare function withLatestFrom<T, U extends Flux<unknown>[]>(...others: U): Operator<T, [T, ...{
35
+ [K in keyof U]: U[K] extends Flux<infer V> ? V : never;
36
+ }]>;
37
+ /**
38
+ * Subscribe to all sources; emit the first value from whichever source emits first,
39
+ * then unsubscribe from all others.
40
+ *
41
+ * @example
42
+ * race(timedOut$, userClicked$).subscribe(console.log);
43
+ */
44
+ export declare function race<T>(...sources: Flux<T>[]): Flux<T>;
45
+ /**
46
+ * Pair emissions by index across all sources. Emits a tuple when all sources
47
+ * have each emitted their N-th value. Completes when any source completes.
48
+ *
49
+ * @example
50
+ * zip(of(1, 2), of('a', 'b')); // emits [1,'a'], [2,'b']
51
+ */
52
+ export declare function zip<T extends Flux<unknown>[]>(...sources: T): Flux<{
53
+ [K in keyof T]: T[K] extends Flux<infer V> ? V : never;
54
+ }>;
55
+ /**
56
+ * Wait for all sources to complete, then emit a single tuple of last values.
57
+ * Similar to `Promise.all`.
58
+ *
59
+ * @example
60
+ * forkJoin(fetch1$, fetch2$).subscribe(([r1, r2]) => console.log(r1, r2));
61
+ */
62
+ export declare function forkJoin<T extends Flux<unknown>[]>(...sources: T): Flux<{
63
+ [K in keyof T]: T[K] extends Flux<infer V> ? V : never;
64
+ }>;
65
+ //# sourceMappingURL=combination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combination.d.ts","sourceRoot":"","sources":["../../src/operators/combination.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAe,MAAM,UAAU,CAAC;AAI5D;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CA6BvD;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CA0BxD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,EAAE,EACrD,GAAG,OAAO,EAAE,CAAC,GACZ,IAAI,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CAAE,CAAC,CAsClE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,EAAE,EACzD,GAAG,MAAM,EAAE,CAAC,GACX,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CAAE,CAAC,CAAC,CAsCjF;AAED;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CA8CtD;AAED;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,EAAE,EAC3C,GAAG,OAAO,EAAE,CAAC,GACZ,IAAI,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CAAE,CAAC,CAyDlE;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,EAAE,EAChD,GAAG,OAAO,EAAE,CAAC,GACZ,IAAI,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CAAE,CAAC,CAmDlE"}
@@ -0,0 +1,187 @@
1
+ import { flux as e } from "../core.js";
2
+ //#region src/operators/combination.ts
3
+ function t(...t) {
4
+ return e((e) => {
5
+ if (t.length === 0) {
6
+ e.complete?.();
7
+ return;
8
+ }
9
+ let n = 0, r = [];
10
+ for (let i of t) r.push(i.subscribe({
11
+ complete() {
12
+ n++, n === t.length && e.complete?.();
13
+ },
14
+ error: e.error,
15
+ next: e.next
16
+ }));
17
+ return () => {
18
+ for (let e of r) e();
19
+ };
20
+ });
21
+ }
22
+ function n(...t) {
23
+ return e((e) => {
24
+ let n = 0, r;
25
+ function i() {
26
+ if (n >= t.length) {
27
+ e.complete?.();
28
+ return;
29
+ }
30
+ r = t[n++].subscribe({
31
+ complete() {
32
+ r = void 0, i();
33
+ },
34
+ error: e.error,
35
+ next: e.next
36
+ });
37
+ }
38
+ return i(), () => r?.();
39
+ });
40
+ }
41
+ function r(...t) {
42
+ return e((e) => {
43
+ if (t.length === 0) {
44
+ e.complete?.();
45
+ return;
46
+ }
47
+ let n = Array(t.length), r = Array(t.length).fill(!1), i = 0, a = [];
48
+ return t.forEach((o, s) => {
49
+ a.push(o.subscribe({
50
+ complete() {
51
+ i++, i === t.length && e.complete?.();
52
+ },
53
+ error: e.error,
54
+ next(t) {
55
+ n[s] = t, r[s] = !0, r.every(Boolean) && e.next([...n]);
56
+ }
57
+ }));
58
+ }), () => {
59
+ for (let e of a) e();
60
+ };
61
+ });
62
+ }
63
+ function i(...t) {
64
+ return (n) => e((e) => {
65
+ let r = Array(t.length), i = Array(t.length).fill(!1), a = [];
66
+ t.forEach((t, n) => {
67
+ a.push(t.subscribe({
68
+ error: e.error,
69
+ next(e) {
70
+ r[n] = e, i[n] = !0;
71
+ }
72
+ }));
73
+ });
74
+ let o = n.subscribe({
75
+ complete: e.complete,
76
+ error: e.error,
77
+ next(t) {
78
+ i.every(Boolean) && e.next([t, ...r]);
79
+ }
80
+ });
81
+ return () => {
82
+ o();
83
+ for (let e of a) e();
84
+ };
85
+ });
86
+ }
87
+ function a(...t) {
88
+ return e((e) => {
89
+ if (t.length === 0) {
90
+ e.complete?.();
91
+ return;
92
+ }
93
+ let n = !1, r = [];
94
+ for (let i of t) r.push(i.subscribe({
95
+ complete() {
96
+ if (!n) {
97
+ n = !0, e.complete?.();
98
+ for (let e of r) e();
99
+ }
100
+ },
101
+ error(t) {
102
+ if (!n) {
103
+ n = !0, e.error?.(t);
104
+ for (let e of r) e();
105
+ }
106
+ },
107
+ next(t) {
108
+ if (!n) {
109
+ n = !0, e.next(t);
110
+ for (let e of r) e();
111
+ }
112
+ }
113
+ }));
114
+ return () => {
115
+ for (let e of r) e();
116
+ };
117
+ });
118
+ }
119
+ function o(...t) {
120
+ return e((e) => {
121
+ if (t.length === 0) {
122
+ e.complete?.();
123
+ return;
124
+ }
125
+ let n = t.map(() => []), r = Array(t.length).fill(!1), i = [], a = !1;
126
+ function o() {
127
+ if (!a) {
128
+ for (; n.every((e) => e.length > 0);) {
129
+ let t = n.map((e) => e.shift());
130
+ e.next(t);
131
+ }
132
+ if (n.some((e, t) => r[t] && e.length === 0)) {
133
+ a = !0, e.complete?.();
134
+ for (let e of i) e();
135
+ }
136
+ }
137
+ }
138
+ return t.forEach((t, s) => {
139
+ i.push(t.subscribe({
140
+ complete() {
141
+ r[s] = !0, o();
142
+ },
143
+ error(t) {
144
+ a = !0, e.error?.(t);
145
+ for (let e of i) e();
146
+ },
147
+ next(e) {
148
+ n[s].push(e), o();
149
+ }
150
+ }));
151
+ }), () => {
152
+ for (let e of i) e();
153
+ };
154
+ });
155
+ }
156
+ function s(...t) {
157
+ return e((e) => {
158
+ if (t.length === 0) {
159
+ e.complete?.();
160
+ return;
161
+ }
162
+ let n = Array(t.length), r = Array(t.length).fill(!1), i = [];
163
+ return t.forEach((t, a) => {
164
+ let o, s = !1;
165
+ i.push(t.subscribe({
166
+ complete() {
167
+ if (r[a] = !0, !s) {
168
+ e.complete?.();
169
+ for (let e of i) e();
170
+ return;
171
+ }
172
+ n[a] = o, r.every(Boolean) && (e.next([...n]), e.complete?.());
173
+ },
174
+ error: e.error,
175
+ next(e) {
176
+ o = e, s = !0;
177
+ }
178
+ }));
179
+ }), () => {
180
+ for (let e of i) e();
181
+ };
182
+ });
183
+ }
184
+ //#endregion
185
+ export { r as combineLatest, n as concat, s as forkJoin, t as merge, a as race, i as withLatestFrom, o as zip };
186
+
187
+ //# sourceMappingURL=combination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combination.js","names":[],"sources":["../../src/operators/combination.ts"],"sourcesContent":["import type { Flux, Operator, Unsubscribe } from '../types';\n\nimport { flux } from '../core';\n\n/**\n * Merge multiple `Flux` streams into one, emitting values as they arrive.\n *\n * @example\n * merge(clicks$, keydowns$).subscribe(console.log);\n */\nexport function merge<T>(...sources: Flux<T>[]): Flux<T> {\n return flux<T>((observer) => {\n if (sources.length === 0) {\n observer.complete?.();\n\n return;\n }\n\n let completedCount = 0;\n const unsubs: Unsubscribe[] = [];\n\n for (const source of sources) {\n unsubs.push(\n source.subscribe({\n complete() {\n completedCount++;\n\n if (completedCount === sources.length) observer.complete?.();\n },\n error: observer.error,\n next: observer.next,\n }),\n );\n }\n\n return () => {\n for (const u of unsubs) u();\n };\n });\n}\n\n/**\n * Subscribe to each source sequentially — the next source only starts after\n * the previous one completes.\n *\n * @example\n * concat(of(1, 2), of(3, 4)); // emits 1, 2, 3, 4\n */\nexport function concat<T>(...sources: Flux<T>[]): Flux<T> {\n return flux<T>((observer) => {\n let index = 0;\n let currentUnsub: Unsubscribe | undefined;\n\n function subscribeNext(): void {\n if (index >= sources.length) {\n observer.complete?.();\n\n return;\n }\n\n currentUnsub = sources[index++]!.subscribe({\n complete() {\n currentUnsub = undefined;\n subscribeNext();\n },\n error: observer.error,\n next: observer.next,\n });\n }\n\n subscribeNext();\n\n return () => currentUnsub?.();\n });\n}\n\n/**\n * Combine the latest values from all sources into a tuple whenever any source emits.\n * Waits until all sources have emitted at least once before emitting.\n *\n * @example\n * combineLatest(a$, b$).subscribe(([a, b]) => console.log(a, b));\n */\nexport function combineLatest<T extends Flux<unknown>[]>(\n ...sources: T\n): Flux<{ [K in keyof T]: T[K] extends Flux<infer V> ? V : never }> {\n type Out = { [K in keyof T]: T[K] extends Flux<infer V> ? V : never };\n\n return flux<Out>((observer) => {\n if (sources.length === 0) {\n observer.complete?.();\n\n return;\n }\n\n const latests = new Array(sources.length) as Out;\n const hasValue = new Array<boolean>(sources.length).fill(false);\n let completedCount = 0;\n const unsubs: Unsubscribe[] = [];\n\n sources.forEach((source, i) => {\n unsubs.push(\n source.subscribe({\n complete() {\n completedCount++;\n\n if (completedCount === sources.length) observer.complete?.();\n },\n error: observer.error,\n next(v) {\n latests[i] = v as Out[typeof i];\n hasValue[i] = true;\n\n if (hasValue.every(Boolean)) observer.next([...latests] as Out);\n },\n }),\n );\n });\n\n return () => {\n for (const u of unsubs) u();\n };\n });\n}\n\n/**\n * Emit from `source` combined with the latest values from `others` as a tuple.\n * Does not wait for others to emit — emits whenever `source` emits (if others have a value).\n *\n * @example\n * a$.pipe(withLatestFrom(b$)).subscribe(([a, b]) => console.log(a, b));\n */\nexport function withLatestFrom<T, U extends Flux<unknown>[]>(\n ...others: U\n): Operator<T, [T, ...{ [K in keyof U]: U[K] extends Flux<infer V> ? V : never }]> {\n type Rest = { [K in keyof U]: U[K] extends Flux<infer V> ? V : never };\n type Out = [T, ...Rest];\n\n return (source) =>\n flux<Out>((observer) => {\n const latests = new Array(others.length) as Rest;\n const hasValue = new Array<boolean>(others.length).fill(false);\n const otherUnsubs: Unsubscribe[] = [];\n\n others.forEach((other, i) => {\n otherUnsubs.push(\n other.subscribe({\n error: observer.error,\n next(v) {\n latests[i] = v as Rest[typeof i];\n hasValue[i] = true;\n },\n }),\n );\n });\n\n const sourceUnsub = source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n if (hasValue.every(Boolean)) {\n observer.next([v, ...latests] as Out);\n }\n },\n });\n\n return () => {\n sourceUnsub();\n\n for (const u of otherUnsubs) u();\n };\n });\n}\n\n/**\n * Subscribe to all sources; emit the first value from whichever source emits first,\n * then unsubscribe from all others.\n *\n * @example\n * race(timedOut$, userClicked$).subscribe(console.log);\n */\nexport function race<T>(...sources: Flux<T>[]): Flux<T> {\n return flux<T>((observer) => {\n if (sources.length === 0) {\n observer.complete?.();\n\n return;\n }\n\n let winner = false;\n const unsubs: Unsubscribe[] = [];\n\n for (const source of sources) {\n unsubs.push(\n source.subscribe({\n complete() {\n if (!winner) {\n winner = true;\n observer.complete?.();\n\n for (const u of unsubs) u();\n }\n },\n error(err) {\n if (!winner) {\n winner = true;\n observer.error?.(err);\n\n for (const u of unsubs) u();\n }\n },\n next(v) {\n if (!winner) {\n winner = true;\n observer.next(v);\n\n for (const u of unsubs) u();\n }\n },\n }),\n );\n }\n\n return () => {\n for (const u of unsubs) u();\n };\n });\n}\n\n/**\n * Pair emissions by index across all sources. Emits a tuple when all sources\n * have each emitted their N-th value. Completes when any source completes.\n *\n * @example\n * zip(of(1, 2), of('a', 'b')); // emits [1,'a'], [2,'b']\n */\nexport function zip<T extends Flux<unknown>[]>(\n ...sources: T\n): Flux<{ [K in keyof T]: T[K] extends Flux<infer V> ? V : never }> {\n type Out = { [K in keyof T]: T[K] extends Flux<infer V> ? V : never };\n\n return flux<Out>((observer) => {\n if (sources.length === 0) {\n observer.complete?.();\n\n return;\n }\n\n const buffers = sources.map(() => [] as unknown[]);\n const completed = new Array<boolean>(sources.length).fill(false);\n const unsubs: Unsubscribe[] = [];\n let done = false;\n\n function checkAndEmit(): void {\n if (done) return;\n\n while (buffers.every((b) => b.length > 0)) {\n const tuple = buffers.map((b) => b.shift()) as Out;\n\n observer.next(tuple);\n }\n\n if (buffers.some((b, i) => completed[i] && b.length === 0)) {\n done = true;\n observer.complete?.();\n\n for (const u of unsubs) u();\n }\n }\n\n sources.forEach((source, i) => {\n unsubs.push(\n source.subscribe({\n complete() {\n completed[i] = true;\n checkAndEmit();\n },\n error(err) {\n done = true;\n observer.error?.(err);\n\n for (const u of unsubs) u();\n },\n next(v) {\n buffers[i]!.push(v);\n checkAndEmit();\n },\n }),\n );\n });\n\n return () => {\n for (const u of unsubs) u();\n };\n });\n}\n\n/**\n * Wait for all sources to complete, then emit a single tuple of last values.\n * Similar to `Promise.all`.\n *\n * @example\n * forkJoin(fetch1$, fetch2$).subscribe(([r1, r2]) => console.log(r1, r2));\n */\nexport function forkJoin<T extends Flux<unknown>[]>(\n ...sources: T\n): Flux<{ [K in keyof T]: T[K] extends Flux<infer V> ? V : never }> {\n type Out = { [K in keyof T]: T[K] extends Flux<infer V> ? V : never };\n\n return flux<Out>((observer) => {\n if (sources.length === 0) {\n observer.complete?.();\n\n return;\n }\n\n const results = new Array(sources.length) as Out;\n const completed = new Array<boolean>(sources.length).fill(false);\n const unsubs: Unsubscribe[] = [];\n\n sources.forEach((source, i) => {\n let lastValue: unknown;\n let hasValue = false;\n\n unsubs.push(\n source.subscribe({\n complete() {\n completed[i] = true;\n\n if (!hasValue) {\n observer.complete?.();\n\n for (const u of unsubs) u();\n\n return;\n }\n\n results[i] = lastValue as Out[typeof i];\n\n if (completed.every(Boolean)) {\n observer.next([...results] as Out);\n observer.complete?.();\n }\n },\n error: observer.error,\n next(v) {\n lastValue = v;\n hasValue = true;\n },\n }),\n );\n });\n\n return () => {\n for (const u of unsubs) u();\n };\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require("../core.cjs"),t=require("../_scheduler.cjs");function n(...t){return e.flux(e=>{for(let n of t)e.next(n);e.complete?.()})}function r(t){if(t instanceof Promise)return e.flux(e=>{let n=!1;return t.then(t=>{n||(e.next(t),e.complete?.())}).catch(t=>{n||e.error?.(t)}),()=>{n=!0}});if(Symbol.asyncIterator in t){let n=t;return e.flux(e=>{let t=!1,r=n[Symbol.asyncIterator]();return(async()=>{try{for(;;){let{done:n,value:i}=await r.next();if(t||n)break;e.next(i)}t||e.complete?.()}catch(n){t||e.error?.(n)}})(),()=>{t=!0,r.return?.()}})}let n=t;return e.flux(e=>{try{for(let t of n)e.next(t);e.complete?.()}catch(t){e.error?.(t)}})}function i(n,r=t.DEFAULT_SCHEDULER){return e.flux(e=>{let t=0;return r.repeat(()=>e.next(t++),n)})}function a(n,r,i=t.DEFAULT_SCHEDULER){return e.flux(e=>{let t=0,a,o=i.delay(()=>{e.next(t++),r===void 0?e.complete?.():a=i.repeat(()=>e.next(t++),r)},n);return()=>{o(),a?.()}})}function o(){return e.flux(e=>{e.complete?.()})}function s(){return e.flux(()=>{})}function c(t){return e.flux(e=>{let n=typeof t==`function`?t():t;e.error?.(n)})}function l(t,n){return e.flux(e=>{let r=t=>e.next(t);return t.addEventListener(n,r),()=>t.removeEventListener(n,r)})}exports.empty=o,exports.from=r,exports.fromEvent=l,exports.interval=i,exports.never=s,exports.of=n,exports.throwError=c,exports.timer=a;
2
+ //# sourceMappingURL=creation.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creation.cjs","names":[],"sources":["../../src/operators/creation.ts"],"sourcesContent":["import type { Flux, Scheduler } from '../types';\n\nimport { DEFAULT_SCHEDULER } from '../_scheduler';\nimport { flux } from '../core';\n\n/**\n * Creates a `Flux` that emits each argument in order, then completes.\n *\n * @example\n * of(1, 2, 3).subscribe(console.log); // 1, 2, 3\n */\nexport function of<T>(...values: T[]): Flux<T> {\n return flux<T>((observer) => {\n for (const v of values) {\n observer.next(v);\n }\n\n observer.complete?.();\n });\n}\n\n/**\n * Converts an `Iterable`, `AsyncIterable`, or `Promise` into a `Flux`.\n *\n * @example\n * from([1, 2, 3]).subscribe(console.log);\n * from(fetch('/api/data').then((r) => r.json())).subscribe(console.log);\n */\nexport function from<T>(source: AsyncIterable<T> | Iterable<T> | Promise<T>): Flux<T> {\n if (source instanceof Promise) {\n return flux<T>((observer) => {\n let cancelled = false;\n\n source\n .then((v) => {\n if (!cancelled) {\n observer.next(v);\n observer.complete?.();\n }\n })\n .catch((err) => {\n if (!cancelled) observer.error?.(err);\n });\n\n return () => {\n cancelled = true;\n };\n });\n }\n\n if (Symbol.asyncIterator in source) {\n const asyncSrc = source as AsyncIterable<T>;\n\n return flux<T>((observer) => {\n let cancelled = false;\n const iter = asyncSrc[Symbol.asyncIterator]();\n\n (async () => {\n try {\n while (true) {\n const { done, value } = await iter.next();\n\n if (cancelled || done) break;\n\n observer.next(value);\n }\n\n if (!cancelled) observer.complete?.();\n } catch (err) {\n if (!cancelled) observer.error?.(err);\n }\n })();\n\n return () => {\n cancelled = true;\n iter.return?.();\n };\n });\n }\n\n const iterSrc = source as Iterable<T>;\n\n return flux<T>((observer) => {\n try {\n for (const v of iterSrc) {\n observer.next(v);\n }\n\n observer.complete?.();\n } catch (err) {\n observer.error?.(err);\n }\n });\n}\n\n/**\n * Emits an incrementing integer (starting at 0) every `ms` milliseconds.\n *\n * @example\n * const ticks = interval(1000); // 0, 1, 2, ... every second\n */\nexport function interval(ms: number, scheduler: Scheduler = DEFAULT_SCHEDULER): Flux<number> {\n return flux<number>((observer) => {\n let i = 0;\n\n return scheduler.repeat(() => observer.next(i++), ms);\n });\n}\n\n/**\n * After an initial `delay` ms, emits `0`, then (if `intervalMs` is provided)\n * emits incrementing values every `intervalMs` ms.\n *\n * @example\n * timer(1000).subscribe(console.log); // emits 0 after 1s, then completes\n * timer(1000, 500).subscribe(console.log); // emits 0 after 1s, then 1, 2, 3... every 500ms\n */\nexport function timer(delay: number, intervalMs?: number, scheduler: Scheduler = DEFAULT_SCHEDULER): Flux<number> {\n return flux<number>((observer) => {\n let count = 0;\n let cancelRepeat: (() => void) | undefined;\n\n const cancelDelay = scheduler.delay(() => {\n observer.next(count++);\n\n if (intervalMs !== undefined) {\n cancelRepeat = scheduler.repeat(() => observer.next(count++), intervalMs);\n } else {\n observer.complete?.();\n }\n }, delay);\n\n return () => {\n cancelDelay();\n cancelRepeat?.();\n };\n });\n}\n\n/** A `Flux` that completes immediately without emitting any values. */\nexport function empty<T = never>(): Flux<T> {\n return flux<T>((observer) => {\n observer.complete?.();\n });\n}\n\n/** A `Flux` that never emits, errors, or completes. */\nexport function never<T = never>(): Flux<T> {\n return flux<T>(() => {});\n}\n\n/** A `Flux` that immediately errors with the given value. */\nexport function throwError<T = never>(errorFactory: (() => unknown) | unknown): Flux<T> {\n return flux<T>((observer) => {\n const err = typeof errorFactory === 'function' ? (errorFactory as () => unknown)() : errorFactory;\n\n observer.error?.(err);\n });\n}\n\n/**\n * Creates a `Flux` from a DOM `EventTarget` or Node.js `EventEmitter`-like\n * object, emitting each time the named event fires.\n *\n * @example\n * fromEvent(document, 'click').subscribe((e) => console.log(e));\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 eventName: string,\n): Flux<T> {\n return flux<T>((observer) => {\n const handler = (event: T): void => observer.next(event);\n\n target.addEventListener(eventName, handler);\n\n return () => target.removeEventListener(eventName, handler);\n });\n}\n"],"mappings":"8DAWA,SAAgB,EAAM,GAAG,EAAsB,CAC7C,OAAO,EAAA,KAAS,GAAa,CAC3B,IAAK,IAAM,KAAK,EACd,EAAS,KAAK,CAAC,EAGjB,EAAS,WAAW,CACtB,CAAC,CACH,CASA,SAAgB,EAAQ,EAA8D,CACpF,GAAI,aAAkB,QACpB,OAAO,EAAA,KAAS,GAAa,CAC3B,IAAI,EAAY,GAahB,OAXA,EACG,KAAM,GAAM,CACN,IACH,EAAS,KAAK,CAAC,EACf,EAAS,WAAW,EAExB,CAAC,CAAC,CACD,MAAO,GAAQ,CACT,GAAW,EAAS,QAAQ,CAAG,CACtC,CAAC,MAEU,CACX,EAAY,EACd,CACF,CAAC,EAGH,GAAI,OAAO,iBAAiB,EAAQ,CAClC,IAAM,EAAW,EAEjB,OAAO,EAAA,KAAS,GAAa,CAC3B,IAAI,EAAY,GACV,EAAO,EAAS,OAAO,cAAc,CAAC,EAkB5C,OAhBC,SAAY,CACX,GAAI,CACF,OAAa,CACX,GAAM,CAAE,OAAM,SAAU,MAAM,EAAK,KAAK,EAExC,GAAI,GAAa,EAAM,MAEvB,EAAS,KAAK,CAAK,CACrB,CAEK,GAAW,EAAS,WAAW,CACtC,OAAS,EAAK,CACP,GAAW,EAAS,QAAQ,CAAG,CACtC,CACF,EAAA,CAAG,MAEU,CACX,EAAY,GACZ,EAAK,SAAS,CAChB,CACF,CAAC,CACH,CAEA,IAAM,EAAU,EAEhB,OAAO,EAAA,KAAS,GAAa,CAC3B,GAAI,CACF,IAAK,IAAM,KAAK,EACd,EAAS,KAAK,CAAC,EAGjB,EAAS,WAAW,CACtB,OAAS,EAAK,CACZ,EAAS,QAAQ,CAAG,CACtB,CACF,CAAC,CACH,CAQA,SAAgB,EAAS,EAAY,EAAuB,EAAA,kBAAiC,CAC3F,OAAO,EAAA,KAAc,GAAa,CAChC,IAAI,EAAI,EAER,OAAO,EAAU,WAAa,EAAS,KAAK,GAAG,EAAG,CAAE,CACtD,CAAC,CACH,CAUA,SAAgB,EAAM,EAAe,EAAqB,EAAuB,EAAA,kBAAiC,CAChH,OAAO,EAAA,KAAc,GAAa,CAChC,IAAI,EAAQ,EACR,EAEE,EAAc,EAAU,UAAY,CACxC,EAAS,KAAK,GAAO,EAEjB,IAAe,IAAA,GAGjB,EAAS,WAAW,EAFpB,EAAe,EAAU,WAAa,EAAS,KAAK,GAAO,EAAG,CAAU,CAI5E,EAAG,CAAK,EAER,UAAa,CACX,EAAY,EACZ,IAAe,CACjB,CACF,CAAC,CACH,CAGA,SAAgB,GAA4B,CAC1C,OAAO,EAAA,KAAS,GAAa,CAC3B,EAAS,WAAW,CACtB,CAAC,CACH,CAGA,SAAgB,GAA4B,CAC1C,OAAO,EAAA,SAAc,CAAC,CAAC,CACzB,CAGA,SAAgB,EAAsB,EAAkD,CACtF,OAAO,EAAA,KAAS,GAAa,CAC3B,IAAM,EAAM,OAAO,GAAiB,WAAc,EAA+B,EAAI,EAErF,EAAS,QAAQ,CAAG,CACtB,CAAC,CACH,CASA,SAAgB,EACd,EAIA,EACS,CACT,OAAO,EAAA,KAAS,GAAa,CAC3B,IAAM,EAAW,GAAmB,EAAS,KAAK,CAAK,EAIvD,OAFA,EAAO,iBAAiB,EAAW,CAAO,MAE7B,EAAO,oBAAoB,EAAW,CAAO,CAC5D,CAAC,CACH"}
@@ -0,0 +1,50 @@
1
+ import type { Flux, Scheduler } from '../types';
2
+ /**
3
+ * Creates a `Flux` that emits each argument in order, then completes.
4
+ *
5
+ * @example
6
+ * of(1, 2, 3).subscribe(console.log); // 1, 2, 3
7
+ */
8
+ export declare function of<T>(...values: T[]): Flux<T>;
9
+ /**
10
+ * Converts an `Iterable`, `AsyncIterable`, or `Promise` into a `Flux`.
11
+ *
12
+ * @example
13
+ * from([1, 2, 3]).subscribe(console.log);
14
+ * from(fetch('/api/data').then((r) => r.json())).subscribe(console.log);
15
+ */
16
+ export declare function from<T>(source: AsyncIterable<T> | Iterable<T> | Promise<T>): Flux<T>;
17
+ /**
18
+ * Emits an incrementing integer (starting at 0) every `ms` milliseconds.
19
+ *
20
+ * @example
21
+ * const ticks = interval(1000); // 0, 1, 2, ... every second
22
+ */
23
+ export declare function interval(ms: number, scheduler?: Scheduler): Flux<number>;
24
+ /**
25
+ * After an initial `delay` ms, emits `0`, then (if `intervalMs` is provided)
26
+ * emits incrementing values every `intervalMs` ms.
27
+ *
28
+ * @example
29
+ * timer(1000).subscribe(console.log); // emits 0 after 1s, then completes
30
+ * timer(1000, 500).subscribe(console.log); // emits 0 after 1s, then 1, 2, 3... every 500ms
31
+ */
32
+ export declare function timer(delay: number, intervalMs?: number, scheduler?: Scheduler): Flux<number>;
33
+ /** A `Flux` that completes immediately without emitting any values. */
34
+ export declare function empty<T = never>(): Flux<T>;
35
+ /** A `Flux` that never emits, errors, or completes. */
36
+ export declare function never<T = never>(): Flux<T>;
37
+ /** A `Flux` that immediately errors with the given value. */
38
+ export declare function throwError<T = never>(errorFactory: (() => unknown) | unknown): Flux<T>;
39
+ /**
40
+ * Creates a `Flux` from a DOM `EventTarget` or Node.js `EventEmitter`-like
41
+ * object, emitting each time the named event fires.
42
+ *
43
+ * @example
44
+ * fromEvent(document, 'click').subscribe((e) => console.log(e));
45
+ */
46
+ export declare function fromEvent<T = Event>(target: {
47
+ addEventListener(type: string, listener: (event: T) => void): void;
48
+ removeEventListener(type: string, listener: (event: T) => void): void;
49
+ }, eventName: string): Flux<T>;
50
+ //# sourceMappingURL=creation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creation.d.ts","sourceRoot":"","sources":["../../src/operators/creation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAKhD;;;;;GAKG;AACH,wBAAgB,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAQ7C;AAED;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAiEpF;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,GAAE,SAA6B,GAAG,IAAI,CAAC,MAAM,CAAC,CAM3F;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,SAA6B,GAAG,IAAI,CAAC,MAAM,CAAC,CAoBhH;AAED,uEAAuE;AACvE,wBAAgB,KAAK,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAI1C;AAED,uDAAuD;AACvD,wBAAgB,KAAK,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAE1C;AAED,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,CAAC,GAAG,KAAK,EAAE,YAAY,EAAE,CAAC,MAAM,OAAO,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAMtF;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,CAAC,GAAG,KAAK,EACjC,MAAM,EAAE;IACN,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACnE,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;CACvE,EACD,SAAS,EAAE,MAAM,GAChB,IAAI,CAAC,CAAC,CAAC,CAQT"}
@@ -0,0 +1,90 @@
1
+ import { flux as e } from "../core.js";
2
+ import { DEFAULT_SCHEDULER as t } from "../_scheduler.js";
3
+ //#region src/operators/creation.ts
4
+ function n(...t) {
5
+ return e((e) => {
6
+ for (let n of t) e.next(n);
7
+ e.complete?.();
8
+ });
9
+ }
10
+ function r(t) {
11
+ if (t instanceof Promise) return e((e) => {
12
+ let n = !1;
13
+ return t.then((t) => {
14
+ n || (e.next(t), e.complete?.());
15
+ }).catch((t) => {
16
+ n || e.error?.(t);
17
+ }), () => {
18
+ n = !0;
19
+ };
20
+ });
21
+ if (Symbol.asyncIterator in t) {
22
+ let n = t;
23
+ return e((e) => {
24
+ let t = !1, r = n[Symbol.asyncIterator]();
25
+ return (async () => {
26
+ try {
27
+ for (;;) {
28
+ let { done: n, value: i } = await r.next();
29
+ if (t || n) break;
30
+ e.next(i);
31
+ }
32
+ t || e.complete?.();
33
+ } catch (n) {
34
+ t || e.error?.(n);
35
+ }
36
+ })(), () => {
37
+ t = !0, r.return?.();
38
+ };
39
+ });
40
+ }
41
+ let n = t;
42
+ return e((e) => {
43
+ try {
44
+ for (let t of n) e.next(t);
45
+ e.complete?.();
46
+ } catch (t) {
47
+ e.error?.(t);
48
+ }
49
+ });
50
+ }
51
+ function i(n, r = t) {
52
+ return e((e) => {
53
+ let t = 0;
54
+ return r.repeat(() => e.next(t++), n);
55
+ });
56
+ }
57
+ function a(n, r, i = t) {
58
+ return e((e) => {
59
+ let t = 0, a, o = i.delay(() => {
60
+ e.next(t++), r === void 0 ? e.complete?.() : a = i.repeat(() => e.next(t++), r);
61
+ }, n);
62
+ return () => {
63
+ o(), a?.();
64
+ };
65
+ });
66
+ }
67
+ function o() {
68
+ return e((e) => {
69
+ e.complete?.();
70
+ });
71
+ }
72
+ function s() {
73
+ return e(() => {});
74
+ }
75
+ function c(t) {
76
+ return e((e) => {
77
+ let n = typeof t == "function" ? t() : t;
78
+ e.error?.(n);
79
+ });
80
+ }
81
+ function l(t, n) {
82
+ return e((e) => {
83
+ let r = (t) => e.next(t);
84
+ return t.addEventListener(n, r), () => t.removeEventListener(n, r);
85
+ });
86
+ }
87
+ //#endregion
88
+ export { o as empty, r as from, l as fromEvent, i as interval, s as never, n as of, c as throwError, a as timer };
89
+
90
+ //# sourceMappingURL=creation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creation.js","names":[],"sources":["../../src/operators/creation.ts"],"sourcesContent":["import type { Flux, Scheduler } from '../types';\n\nimport { DEFAULT_SCHEDULER } from '../_scheduler';\nimport { flux } from '../core';\n\n/**\n * Creates a `Flux` that emits each argument in order, then completes.\n *\n * @example\n * of(1, 2, 3).subscribe(console.log); // 1, 2, 3\n */\nexport function of<T>(...values: T[]): Flux<T> {\n return flux<T>((observer) => {\n for (const v of values) {\n observer.next(v);\n }\n\n observer.complete?.();\n });\n}\n\n/**\n * Converts an `Iterable`, `AsyncIterable`, or `Promise` into a `Flux`.\n *\n * @example\n * from([1, 2, 3]).subscribe(console.log);\n * from(fetch('/api/data').then((r) => r.json())).subscribe(console.log);\n */\nexport function from<T>(source: AsyncIterable<T> | Iterable<T> | Promise<T>): Flux<T> {\n if (source instanceof Promise) {\n return flux<T>((observer) => {\n let cancelled = false;\n\n source\n .then((v) => {\n if (!cancelled) {\n observer.next(v);\n observer.complete?.();\n }\n })\n .catch((err) => {\n if (!cancelled) observer.error?.(err);\n });\n\n return () => {\n cancelled = true;\n };\n });\n }\n\n if (Symbol.asyncIterator in source) {\n const asyncSrc = source as AsyncIterable<T>;\n\n return flux<T>((observer) => {\n let cancelled = false;\n const iter = asyncSrc[Symbol.asyncIterator]();\n\n (async () => {\n try {\n while (true) {\n const { done, value } = await iter.next();\n\n if (cancelled || done) break;\n\n observer.next(value);\n }\n\n if (!cancelled) observer.complete?.();\n } catch (err) {\n if (!cancelled) observer.error?.(err);\n }\n })();\n\n return () => {\n cancelled = true;\n iter.return?.();\n };\n });\n }\n\n const iterSrc = source as Iterable<T>;\n\n return flux<T>((observer) => {\n try {\n for (const v of iterSrc) {\n observer.next(v);\n }\n\n observer.complete?.();\n } catch (err) {\n observer.error?.(err);\n }\n });\n}\n\n/**\n * Emits an incrementing integer (starting at 0) every `ms` milliseconds.\n *\n * @example\n * const ticks = interval(1000); // 0, 1, 2, ... every second\n */\nexport function interval(ms: number, scheduler: Scheduler = DEFAULT_SCHEDULER): Flux<number> {\n return flux<number>((observer) => {\n let i = 0;\n\n return scheduler.repeat(() => observer.next(i++), ms);\n });\n}\n\n/**\n * After an initial `delay` ms, emits `0`, then (if `intervalMs` is provided)\n * emits incrementing values every `intervalMs` ms.\n *\n * @example\n * timer(1000).subscribe(console.log); // emits 0 after 1s, then completes\n * timer(1000, 500).subscribe(console.log); // emits 0 after 1s, then 1, 2, 3... every 500ms\n */\nexport function timer(delay: number, intervalMs?: number, scheduler: Scheduler = DEFAULT_SCHEDULER): Flux<number> {\n return flux<number>((observer) => {\n let count = 0;\n let cancelRepeat: (() => void) | undefined;\n\n const cancelDelay = scheduler.delay(() => {\n observer.next(count++);\n\n if (intervalMs !== undefined) {\n cancelRepeat = scheduler.repeat(() => observer.next(count++), intervalMs);\n } else {\n observer.complete?.();\n }\n }, delay);\n\n return () => {\n cancelDelay();\n cancelRepeat?.();\n };\n });\n}\n\n/** A `Flux` that completes immediately without emitting any values. */\nexport function empty<T = never>(): Flux<T> {\n return flux<T>((observer) => {\n observer.complete?.();\n });\n}\n\n/** A `Flux` that never emits, errors, or completes. */\nexport function never<T = never>(): Flux<T> {\n return flux<T>(() => {});\n}\n\n/** A `Flux` that immediately errors with the given value. */\nexport function throwError<T = never>(errorFactory: (() => unknown) | unknown): Flux<T> {\n return flux<T>((observer) => {\n const err = typeof errorFactory === 'function' ? (errorFactory as () => unknown)() : errorFactory;\n\n observer.error?.(err);\n });\n}\n\n/**\n * Creates a `Flux` from a DOM `EventTarget` or Node.js `EventEmitter`-like\n * object, emitting each time the named event fires.\n *\n * @example\n * fromEvent(document, 'click').subscribe((e) => console.log(e));\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 eventName: string,\n): Flux<T> {\n return flux<T>((observer) => {\n const handler = (event: T): void => observer.next(event);\n\n target.addEventListener(eventName, handler);\n\n return () => target.removeEventListener(eventName, handler);\n });\n}\n"],"mappings":";;;AAWA,SAAgB,EAAM,GAAG,GAAsB;CAC7C,OAAO,GAAS,MAAa;EAC3B,KAAK,IAAM,KAAK,GACd,EAAS,KAAK,CAAC;EAGjB,EAAS,WAAW;CACtB,CAAC;AACH;AASA,SAAgB,EAAQ,GAA8D;CACpF,IAAI,aAAkB,SACpB,OAAO,GAAS,MAAa;EAC3B,IAAI,IAAY;EAahB,OAXA,EACG,MAAM,MAAM;GACX,AAAK,MACH,EAAS,KAAK,CAAC,GACf,EAAS,WAAW;EAExB,CAAC,CAAC,CACD,OAAO,MAAQ;GACd,AAAK,KAAW,EAAS,QAAQ,CAAG;EACtC,CAAC,SAEU;GACX,IAAY;EACd;CACF,CAAC;CAGH,IAAI,OAAO,iBAAiB,GAAQ;EAClC,IAAM,IAAW;EAEjB,OAAO,GAAS,MAAa;GAC3B,IAAI,IAAY,IACV,IAAO,EAAS,OAAO,cAAc,CAAC;GAkB5C,QAhBC,YAAY;IACX,IAAI;KACF,SAAa;MACX,IAAM,EAAE,SAAM,aAAU,MAAM,EAAK,KAAK;MAExC,IAAI,KAAa,GAAM;MAEvB,EAAS,KAAK,CAAK;KACrB;KAEA,AAAK,KAAW,EAAS,WAAW;IACtC,SAAS,GAAK;KACZ,AAAK,KAAW,EAAS,QAAQ,CAAG;IACtC;GACF,EAAA,CAAG,SAEU;IAEX,AADA,IAAY,IACZ,EAAK,SAAS;GAChB;EACF,CAAC;CACH;CAEA,IAAM,IAAU;CAEhB,OAAO,GAAS,MAAa;EAC3B,IAAI;GACF,KAAK,IAAM,KAAK,GACd,EAAS,KAAK,CAAC;GAGjB,EAAS,WAAW;EACtB,SAAS,GAAK;GACZ,EAAS,QAAQ,CAAG;EACtB;CACF,CAAC;AACH;AAQA,SAAgB,EAAS,GAAY,IAAuB,GAAiC;CAC3F,OAAO,GAAc,MAAa;EAChC,IAAI,IAAI;EAER,OAAO,EAAU,aAAa,EAAS,KAAK,GAAG,GAAG,CAAE;CACtD,CAAC;AACH;AAUA,SAAgB,EAAM,GAAe,GAAqB,IAAuB,GAAiC;CAChH,OAAO,GAAc,MAAa;EAChC,IAAI,IAAQ,GACR,GAEE,IAAc,EAAU,YAAY;GAGxC,AAFA,EAAS,KAAK,GAAO,GAEjB,MAAe,KAAA,IAGjB,EAAS,WAAW,IAFpB,IAAe,EAAU,aAAa,EAAS,KAAK,GAAO,GAAG,CAAU;EAI5E,GAAG,CAAK;EAER,aAAa;GAEX,AADA,EAAY,GACZ,IAAe;EACjB;CACF,CAAC;AACH;AAGA,SAAgB,IAA4B;CAC1C,OAAO,GAAS,MAAa;EAC3B,EAAS,WAAW;CACtB,CAAC;AACH;AAGA,SAAgB,IAA4B;CAC1C,OAAO,QAAc,CAAC,CAAC;AACzB;AAGA,SAAgB,EAAsB,GAAkD;CACtF,OAAO,GAAS,MAAa;EAC3B,IAAM,IAAM,OAAO,KAAiB,aAAc,EAA+B,IAAI;EAErF,EAAS,QAAQ,CAAG;CACtB,CAAC;AACH;AASA,SAAgB,EACd,GAIA,GACS;CACT,OAAO,GAAS,MAAa;EAC3B,IAAM,KAAW,MAAmB,EAAS,KAAK,CAAK;EAIvD,OAFA,EAAO,iBAAiB,GAAW,CAAO,SAE7B,EAAO,oBAAoB,GAAW,CAAO;CAC5D,CAAC;AACH"}
@@ -0,0 +1,2 @@
1
+ const e=require("../core.cjs"),t=require("../_scheduler.cjs"),n=require("../_safe.cjs");function r(t){return n=>e.flux(e=>{if(t<=0){e.complete?.();return}let r=0,i=()=>{};return i=n.subscribe({complete:e.complete,error:e.error,next(n){e.next(n),r++,r>=t&&(e.complete?.(),i())}}),i})}function i(t){return n=>e.flux(e=>{let r=0;return n.subscribe({complete:e.complete,error:e.error,next(n){r<t?r++:e.next(n)}})})}function a(t){return n=>e.flux(e=>{let r=!1,i=()=>{r||(r=!0,e.complete?.(),a(),o?.())},a;if(t instanceof AbortSignal){if(t.aborted){e.complete?.();return}t.addEventListener(`abort`,i,{once:!0}),a=()=>t.removeEventListener(`abort`,i)}else a=t.subscribe({next:i});let o=n.subscribe({complete(){r=!0,a(),e.complete?.()},error(t){r=!0,a(),e.error?.(t)},next:e.next});return()=>{a(),o()}})}function o(t){return r=>e.flux(e=>{let i=()=>{};return i=r.subscribe({complete:e.complete,error:e.error,next(r){n.guard(()=>{t(r)?e.next(r):(e.complete?.(),i())},e.error)}}),i})}function s(n,r=t.DEFAULT_SCHEDULER){return t=>e.flux(e=>{let i,a=t.subscribe({complete(){i?.(),e.complete?.()},error(t){i?.(),e.error?.(t)},next(t){i?.(),i=r.delay(()=>e.next(t),n)}});return()=>{i?.(),a()}})}function c(t,n=Date.now){return r=>e.flux(e=>{let i=-1/0;return r.subscribe({complete:e.complete,error:e.error,next(r){let a=n();a-i>=t&&(i=a,e.next(r))}})})}function l(t){return n=>e.flux(e=>{let r,i=!1,a=n.subscribe({complete:e.complete,error:e.error,next(e){r=e,i=!0}}),o=t.subscribe({next(){i&&e.next(r)}});return()=>{a(),o()}})}function u(){return r(1)}function d(){return t=>e.flux(e=>{let n,r=!1;return t.subscribe({complete(){r&&e.next(n),e.complete?.()},error:e.error,next(e){n=e,r=!0}})})}exports.debounce=s,exports.first=u,exports.last=d,exports.sample=l,exports.skip=i,exports.take=r,exports.takeUntil=a,exports.takeWhile=o,exports.throttle=c;
2
+ //# sourceMappingURL=filtering.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filtering.cjs","names":[],"sources":["../../src/operators/filtering.ts"],"sourcesContent":["import type { Flux, Operator, Scheduler, Unsubscribe } from '../types';\n\nimport { guard } from '../_safe';\nimport { DEFAULT_SCHEDULER } from '../_scheduler';\nimport { flux } from '../core';\n\n/**\n * Emit only the first `count` values, then complete.\n *\n * @example\n * interval(100).pipe(take(3)); // emits 0, 1, 2 then completes\n */\nexport function take<T>(count: number): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n if (count <= 0) {\n observer.complete?.();\n\n return;\n }\n\n let seen = 0;\n let unsub: Unsubscribe = () => {};\n\n unsub = source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n observer.next(v);\n seen++;\n\n if (seen >= count) {\n observer.complete?.();\n unsub();\n }\n },\n });\n\n return unsub;\n });\n}\n\n/** Skip the first `count` values, then emit the rest. */\nexport function skip<T>(count: number): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let skipped = 0;\n\n return source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n if (skipped < count) {\n skipped++;\n } else {\n observer.next(v);\n }\n },\n });\n });\n}\n\n/**\n * Complete when either `notifier` emits its first value or an `AbortSignal` aborts.\n *\n * @example\n * source$.pipe(takeUntil(stop$));\n * source$.pipe(takeUntil(abortController.signal));\n */\nexport function takeUntil<T>(notifier: AbortSignal | Flux<unknown>): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let done = false;\n\n const finish = (): void => {\n if (done) return;\n\n done = true;\n observer.complete?.();\n notifierUnsub();\n sourceUnsub?.();\n };\n\n let notifierUnsub: () => void;\n\n if (notifier instanceof AbortSignal) {\n if (notifier.aborted) {\n observer.complete?.();\n\n return;\n }\n\n notifier.addEventListener('abort', finish, { once: true });\n notifierUnsub = () => notifier.removeEventListener('abort', finish);\n } else {\n notifierUnsub = notifier.subscribe({ next: finish });\n }\n\n const sourceUnsub = source.subscribe({\n complete() {\n done = true;\n notifierUnsub();\n observer.complete?.();\n },\n error(err) {\n done = true;\n notifierUnsub();\n observer.error?.(err);\n },\n next: observer.next,\n });\n\n return () => {\n notifierUnsub();\n sourceUnsub();\n };\n });\n}\n\n/**\n * Emit values while `predicate` is truthy. Complete when it returns `false`.\n *\n * @example\n * of(1, 2, 3, 4).pipe(takeWhile((n) => n < 3)); // emits 1, 2\n */\nexport function takeWhile<T>(predicate: (value: T) => boolean): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let unsub: Unsubscribe = () => {};\n\n unsub = source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n guard(() => {\n if (predicate(v)) {\n observer.next(v);\n } else {\n observer.complete?.();\n unsub();\n }\n }, observer.error);\n },\n });\n\n return unsub;\n });\n}\n\n/**\n * Emit the last value after `ms` milliseconds of silence.\n * Resets the timer on every source emission.\n *\n * **Note:** if the source completes while a value is pending (timer not yet fired),\n * the pending value is dropped. Only the completion signal is forwarded.\n *\n * @example\n * fromEvent(input, 'input').pipe(debounce(300)); // wait 300ms after last keystroke\n */\nexport function debounce<T>(ms: number, scheduler: Scheduler = DEFAULT_SCHEDULER): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let cancelTimer: (() => void) | undefined;\n\n const unsub = source.subscribe({\n complete() {\n cancelTimer?.();\n observer.complete?.();\n },\n error(err) {\n cancelTimer?.();\n observer.error?.(err);\n },\n next(v) {\n cancelTimer?.();\n cancelTimer = scheduler.delay(() => observer.next(v), ms);\n },\n });\n\n return () => {\n cancelTimer?.();\n unsub();\n };\n });\n}\n\n/**\n * Emit at most once per `ms` milliseconds. Leading edge by default.\n * Pass a custom `clock` function (default: `Date.now`) to control time in tests.\n *\n * @example\n * fromEvent(window, 'scroll').pipe(throttle(100));\n */\nexport function throttle<T>(ms: number, clock: () => number = Date.now): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let lastEmit = -Infinity;\n\n return source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n const now = clock();\n\n if (now - lastEmit >= ms) {\n lastEmit = now;\n observer.next(v);\n }\n },\n });\n });\n}\n\n/**\n * When `notifier` emits, emit the latest value from `source` (if any).\n * Useful for polling-like patterns.\n *\n * @example\n * source$.pipe(sample(interval(1000))); // emit latest value every 1s\n */\nexport function sample<T>(notifier: Flux<unknown>): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let latest: T;\n let hasValue = false;\n\n const sourceUnsub = source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n latest = v;\n hasValue = true;\n },\n });\n\n const notifierUnsub = notifier.subscribe({\n next() {\n if (hasValue) observer.next(latest);\n },\n });\n\n return () => {\n sourceUnsub();\n notifierUnsub();\n };\n });\n}\n\n/** Emit only the first value, then complete. Equivalent to `take(1)`. */\nexport function first<T>(): Operator<T, T> {\n return take(1);\n}\n\n/**\n * Emit only the last value, collected when source completes.\n *\n * @example\n * of(1, 2, 3).pipe(last()); // emits 3\n */\nexport function last<T>(): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let latest: T;\n let hasValue = false;\n\n return source.subscribe({\n complete() {\n if (hasValue) observer.next(latest);\n\n observer.complete?.();\n },\n error: observer.error,\n next(v) {\n latest = v;\n hasValue = true;\n },\n });\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { Flux, Operator, Scheduler } from '../types';
2
+ /**
3
+ * Emit only the first `count` values, then complete.
4
+ *
5
+ * @example
6
+ * interval(100).pipe(take(3)); // emits 0, 1, 2 then completes
7
+ */
8
+ export declare function take<T>(count: number): Operator<T, T>;
9
+ /** Skip the first `count` values, then emit the rest. */
10
+ export declare function skip<T>(count: number): Operator<T, T>;
11
+ /**
12
+ * Complete when either `notifier` emits its first value or an `AbortSignal` aborts.
13
+ *
14
+ * @example
15
+ * source$.pipe(takeUntil(stop$));
16
+ * source$.pipe(takeUntil(abortController.signal));
17
+ */
18
+ export declare function takeUntil<T>(notifier: AbortSignal | Flux<unknown>): Operator<T, T>;
19
+ /**
20
+ * Emit values while `predicate` is truthy. Complete when it returns `false`.
21
+ *
22
+ * @example
23
+ * of(1, 2, 3, 4).pipe(takeWhile((n) => n < 3)); // emits 1, 2
24
+ */
25
+ export declare function takeWhile<T>(predicate: (value: T) => boolean): Operator<T, T>;
26
+ /**
27
+ * Emit the last value after `ms` milliseconds of silence.
28
+ * Resets the timer on every source emission.
29
+ *
30
+ * **Note:** if the source completes while a value is pending (timer not yet fired),
31
+ * the pending value is dropped. Only the completion signal is forwarded.
32
+ *
33
+ * @example
34
+ * fromEvent(input, 'input').pipe(debounce(300)); // wait 300ms after last keystroke
35
+ */
36
+ export declare function debounce<T>(ms: number, scheduler?: Scheduler): Operator<T, T>;
37
+ /**
38
+ * Emit at most once per `ms` milliseconds. Leading edge by default.
39
+ * Pass a custom `clock` function (default: `Date.now`) to control time in tests.
40
+ *
41
+ * @example
42
+ * fromEvent(window, 'scroll').pipe(throttle(100));
43
+ */
44
+ export declare function throttle<T>(ms: number, clock?: () => number): Operator<T, T>;
45
+ /**
46
+ * When `notifier` emits, emit the latest value from `source` (if any).
47
+ * Useful for polling-like patterns.
48
+ *
49
+ * @example
50
+ * source$.pipe(sample(interval(1000))); // emit latest value every 1s
51
+ */
52
+ export declare function sample<T>(notifier: Flux<unknown>): Operator<T, T>;
53
+ /** Emit only the first value, then complete. Equivalent to `take(1)`. */
54
+ export declare function first<T>(): Operator<T, T>;
55
+ /**
56
+ * Emit only the last value, collected when source completes.
57
+ *
58
+ * @example
59
+ * of(1, 2, 3).pipe(last()); // emits 3
60
+ */
61
+ export declare function last<T>(): Operator<T, T>;
62
+ //# sourceMappingURL=filtering.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filtering.d.ts","sourceRoot":"","sources":["../../src/operators/filtering.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAe,MAAM,UAAU,CAAC;AAMvE;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CA4BrD;AAED,yDAAyD;AACzD,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAiBrD;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAgDlF;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAsB7E;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,GAAE,SAA6B,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAyBhG;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,MAAiB,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAkBtF;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CA0BjE;AAED,yEAAyE;AACzE,wBAAgB,KAAK,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAEzC;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAmBxC"}