@johnhenry/iteration 0.0.0 → 0.0.1

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 (49) hide show
  1. package/dist/async-channel.d.ts +24 -4
  2. package/dist/async-channel.d.ts.map +1 -1
  3. package/dist/async-channel.js +41 -38
  4. package/dist/async-channel.js.map +1 -1
  5. package/dist/combine.d.ts +146 -0
  6. package/dist/combine.d.ts.map +1 -0
  7. package/dist/combine.js +353 -0
  8. package/dist/combine.js.map +1 -0
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +2 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/internal.d.ts +66 -0
  14. package/dist/internal.d.ts.map +1 -0
  15. package/dist/internal.js +134 -0
  16. package/dist/internal.js.map +1 -0
  17. package/dist/iterator-tools.d.ts.map +1 -1
  18. package/dist/iterator-tools.js +38 -18
  19. package/dist/iterator-tools.js.map +1 -1
  20. package/dist/itertools.d.ts.map +1 -1
  21. package/dist/itertools.js +42 -24
  22. package/dist/itertools.js.map +1 -1
  23. package/dist/tee.d.ts +24 -2
  24. package/dist/tee.d.ts.map +1 -1
  25. package/dist/tee.js +175 -2
  26. package/dist/tee.js.map +1 -1
  27. package/dist/time.d.ts +69 -0
  28. package/dist/time.d.ts.map +1 -0
  29. package/dist/time.js +234 -0
  30. package/dist/time.js.map +1 -0
  31. package/dist/transduce.d.ts +49 -0
  32. package/dist/transduce.d.ts.map +1 -1
  33. package/dist/transduce.js +27 -1
  34. package/dist/transduce.js.map +1 -1
  35. package/dist/transducers.d.ts.map +1 -1
  36. package/dist/transducers.js +32 -14
  37. package/dist/transducers.js.map +1 -1
  38. package/package.json +10 -2
  39. package/readme.md +304 -14
  40. package/src/async-channel.ts +63 -47
  41. package/src/combine.ts +441 -0
  42. package/src/index.ts +2 -0
  43. package/src/internal.ts +164 -0
  44. package/src/iterator-tools.ts +35 -20
  45. package/src/itertools.ts +36 -23
  46. package/src/tee.ts +202 -2
  47. package/src/time.ts +262 -0
  48. package/src/transduce.ts +91 -1
  49. package/src/transducers.ts +34 -19
package/dist/time.js ADDED
@@ -0,0 +1,234 @@
1
+ /**
2
+ * Time-based operators: debounceAsync and throttleAsync.
3
+ *
4
+ * Both drain their source eagerly (timing depends on when values arrive,
5
+ * not on when the consumer reads) and queue what they emit until the
6
+ * consumer reads it. Both take an injectable `clock`, so they can be driven
7
+ * by a fake clock in tests or by a host's own scheduler, and an optional
8
+ * `signal`. On abort, on a source error, and on consumer exit they clear
9
+ * their timer and close (`return()`) the source.
10
+ */
11
+ import { throwIfAborted } from "./abort.js";
12
+ import { closeAll, createFailure, entryOf, listenAbort, pull, Wakeup } from "./internal.js";
13
+ /** The host's timers. */
14
+ export const systemClock = {
15
+ setTimeout: (callback, ms) => globalThis.setTimeout(callback, ms),
16
+ clearTimeout: (handle) => globalThis.clearTimeout(handle),
17
+ now: () => (typeof globalThis.performance?.now === "function" ? globalThis.performance.now() : Date.now()),
18
+ };
19
+ const checkMs = (name, ms) => {
20
+ if (!(typeof ms === "number" && ms >= 0 && Number.isFinite(ms))) {
21
+ throw new RangeError(`${name}: ms must be a finite number >= 0`);
22
+ }
23
+ };
24
+ /**
25
+ * Run the shared machinery of a time operator: pump the source, hand each
26
+ * value and the end to `hooks`, and yield whatever they emit, in order.
27
+ */
28
+ const timed = async function* (iterable, { signal }, setup) {
29
+ throwIfAborted(signal);
30
+ const entry = entryOf(iterable);
31
+ const aborted = createFailure();
32
+ const wakeup = new Wakeup();
33
+ const queue = [];
34
+ let ended = false;
35
+ let stopped = false;
36
+ let sourceError;
37
+ const hooks = setup((value) => {
38
+ queue.push(value);
39
+ wakeup.wake();
40
+ });
41
+ const unlisten = listenAbort(signal, (reason) => {
42
+ aborted.fail(reason);
43
+ wakeup.wake();
44
+ });
45
+ const pump = async () => {
46
+ try {
47
+ while (!stopped) {
48
+ const result = await pull(entry);
49
+ if (stopped)
50
+ return;
51
+ if (result.done) {
52
+ hooks.onEnd();
53
+ ended = true;
54
+ wakeup.wake();
55
+ return;
56
+ }
57
+ hooks.onValue(result.value);
58
+ }
59
+ }
60
+ catch (error) {
61
+ hooks.dispose(); // drop a waiting value; stop the timer
62
+ sourceError = { error };
63
+ wakeup.wake();
64
+ }
65
+ };
66
+ try {
67
+ void pump();
68
+ while (true) {
69
+ // Abort wins at once; a source error comes after the values that
70
+ // were already emitted.
71
+ if (aborted.failed)
72
+ throw aborted.error;
73
+ if (queue.length > 0) {
74
+ yield queue.shift();
75
+ continue;
76
+ }
77
+ if (sourceError)
78
+ throw sourceError.error;
79
+ if (ended)
80
+ return;
81
+ await Promise.race([wakeup.wait(), aborted.promise]);
82
+ }
83
+ }
84
+ finally {
85
+ stopped = true;
86
+ hooks.dispose();
87
+ unlisten();
88
+ await closeAll([entry]);
89
+ }
90
+ };
91
+ /**
92
+ * Emit a value only after `ms` have passed with no newer value: a burst of
93
+ * values becomes its last value, emitted `ms` after the burst ends. When
94
+ * the source ends, a value still waiting is emitted at once.
95
+ *
96
+ * Emitted values queue until the consumer reads them. A source error is
97
+ * rethrown after the queued values; a value still waiting for its quiet
98
+ * period is dropped.
99
+ * @kind function
100
+ * @name debounceAsync
101
+ * @example
102
+ * ```javascript
103
+ * for await (const query of debounceAsync(250, keystrokes)) search(query);
104
+ * ```
105
+ */
106
+ export const debounceAsync = (ms, iterable, { clock = systemClock, signal } = {}) => {
107
+ checkMs("debounceAsync", ms);
108
+ return timed(iterable, { signal }, (emit) => {
109
+ let timer;
110
+ let armed = false;
111
+ let waiting = false;
112
+ let value;
113
+ let lastAt = 0;
114
+ const fire = () => {
115
+ armed = false;
116
+ if (!waiting)
117
+ return;
118
+ // Re-arm rather than reset the timer on every value: one timer per
119
+ // quiet period instead of one per value.
120
+ const elapsed = clock.now() - lastAt;
121
+ if (elapsed < ms) {
122
+ armed = true;
123
+ timer = clock.setTimeout(fire, ms - elapsed);
124
+ return;
125
+ }
126
+ const out = value;
127
+ waiting = false;
128
+ value = undefined;
129
+ emit(out);
130
+ };
131
+ return {
132
+ onValue(next) {
133
+ value = next;
134
+ waiting = true;
135
+ lastAt = clock.now();
136
+ if (!armed) {
137
+ armed = true;
138
+ timer = clock.setTimeout(fire, ms);
139
+ }
140
+ },
141
+ onEnd() {
142
+ if (armed)
143
+ clock.clearTimeout(timer);
144
+ armed = false;
145
+ if (waiting) {
146
+ waiting = false;
147
+ emit(value);
148
+ }
149
+ },
150
+ dispose() {
151
+ if (armed)
152
+ clock.clearTimeout(timer);
153
+ armed = false;
154
+ },
155
+ };
156
+ });
157
+ };
158
+ /**
159
+ * Emit at most one value per `ms` window. A value arriving while no window
160
+ * is open opens one, and is emitted at once if `leading` (default `true`).
161
+ * With `trailing` (default `true`), the newest value that arrived during a
162
+ * window is emitted when the window closes, which opens the next window.
163
+ * When the source ends, a trailing value still waiting is emitted at once.
164
+ *
165
+ * `leading` and `trailing` cannot both be false. Emitted values queue
166
+ * until the consumer reads them. A source error is rethrown after the
167
+ * queued values; a trailing value still waiting is dropped.
168
+ * @kind function
169
+ * @name throttleAsync
170
+ * @example
171
+ * ```javascript
172
+ * for await (const position of throttleAsync(16, pointerMoves)) draw(position);
173
+ * ```
174
+ */
175
+ export const throttleAsync = (ms, iterable, { leading = true, trailing = true, clock = systemClock, signal } = {}) => {
176
+ checkMs("throttleAsync", ms);
177
+ if (!leading && !trailing) {
178
+ throw new RangeError("throttleAsync: leading and trailing cannot both be false");
179
+ }
180
+ return timed(iterable, { signal }, (emit) => {
181
+ let timer;
182
+ let open = false;
183
+ let waiting = false;
184
+ let value;
185
+ const close = () => {
186
+ open = false;
187
+ if (trailing && waiting) {
188
+ const out = value;
189
+ waiting = false;
190
+ value = undefined;
191
+ emit(out);
192
+ openWindow();
193
+ }
194
+ };
195
+ const openWindow = () => {
196
+ open = true;
197
+ timer = clock.setTimeout(close, ms);
198
+ };
199
+ return {
200
+ onValue(next) {
201
+ if (open) {
202
+ if (trailing) {
203
+ value = next;
204
+ waiting = true;
205
+ }
206
+ return;
207
+ }
208
+ if (leading) {
209
+ emit(next);
210
+ }
211
+ else {
212
+ value = next;
213
+ waiting = true;
214
+ }
215
+ openWindow();
216
+ },
217
+ onEnd() {
218
+ if (open)
219
+ clock.clearTimeout(timer);
220
+ open = false;
221
+ if (trailing && waiting) {
222
+ waiting = false;
223
+ emit(value);
224
+ }
225
+ },
226
+ dispose() {
227
+ if (open)
228
+ clock.clearTimeout(timer);
229
+ open = false;
230
+ },
231
+ };
232
+ });
233
+ };
234
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../src/time.ts"],"names":[],"mappings":"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"}
@@ -76,4 +76,53 @@ export declare function transduceSync<A, B, C, D>(t1: Transducer<A, B>, t2: Tran
76
76
  export declare function transduceSync<A, B, C, D, E>(t1: Transducer<A, B>, t2: Transducer<B, C>, t3: Transducer<C, D>, t4: Transducer<D, E>): (itemCollection: Iterable<A>) => Generator<E>;
77
77
  export declare function transduceSync<A, B, C, D, E, F>(t1: Transducer<A, B>, t2: Transducer<B, C>, t3: Transducer<C, D>, t4: Transducer<D, E>, t5: Transducer<E, F>): (itemCollection: Iterable<A>) => Generator<F>;
78
78
  export declare function transduceSync(...functions: Array<Transducer<any, any>>): (itemCollection: Iterable<unknown>) => Generator<unknown>;
79
+ /**
80
+ * A push-driven transducer pipeline: feed values in one at a time with
81
+ * `step`, and flush with `complete` when the input ends.
82
+ */
83
+ export interface PushTransducer<In, Out> {
84
+ /**
85
+ * Run one value through the pipeline and return what it emitted (often
86
+ * zero or one item; `group` and friends may emit several). Returns `[]`
87
+ * once the pipeline has halted or completed.
88
+ */
89
+ step(value: In): Out[];
90
+ /**
91
+ * Flush stateful transducers (`.complete`, e.g. a trailing partial
92
+ * `group`) and return what they emitted. Call it once when the input
93
+ * ends, or after `halted` becomes true. Later calls return `[]`.
94
+ */
95
+ complete(): Out[];
96
+ /** True once a transducer returned HALT (e.g. `take(n)` saw item n + 1). */
97
+ readonly halted: boolean;
98
+ }
99
+ /**
100
+ * Drive transducers by pushing values in, with no iterator: for code that
101
+ * receives values by callback (an event handler, a wire in a dataflow
102
+ * graph). Uses the same left-to-right composition order, `.complete` flush
103
+ * protocol and HALT semantics as transduceSync:
104
+ * `transduceSync(...t)(xs)` yields exactly what pushing each `x` through
105
+ * `step` and then calling `complete()` returns.
106
+ *
107
+ * Like transduceSync, the items emitted by the step that returns HALT are
108
+ * discarded.
109
+ * @kind function
110
+ * @name transducePush
111
+ * @example
112
+ * ```javascript
113
+ * import { transducePush, transducers } from '@johnhenry/iteration';
114
+ * const { map, group } = transducers;
115
+ * const pipe = transducePush(map((x) => x * 10), group(2));
116
+ * pipe.step(1); // []
117
+ * pipe.step(2); // [[10, 20]]
118
+ * pipe.step(3); // []
119
+ * pipe.complete(); // [[30]]
120
+ * ```
121
+ */
122
+ export declare function transducePush<A, B>(t1: Transducer<A, B>): PushTransducer<A, B>;
123
+ export declare function transducePush<A, B, C>(t1: Transducer<A, B>, t2: Transducer<B, C>): PushTransducer<A, C>;
124
+ export declare function transducePush<A, B, C, D>(t1: Transducer<A, B>, t2: Transducer<B, C>, t3: Transducer<C, D>): PushTransducer<A, D>;
125
+ export declare function transducePush<A, B, C, D, E>(t1: Transducer<A, B>, t2: Transducer<B, C>, t3: Transducer<C, D>, t4: Transducer<D, E>): PushTransducer<A, E>;
126
+ export declare function transducePush<A, B, C, D, E, F>(t1: Transducer<A, B>, t2: Transducer<B, C>, t3: Transducer<C, D>, t4: Transducer<D, E>, t5: Transducer<E, F>): PushTransducer<A, F>;
127
+ export declare function transducePush(...functions: Array<Transducer<any, any>>): PushTransducer<unknown, unknown>;
79
128
  //# sourceMappingURL=transduce.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transduce.d.ts","sourceRoot":"","sources":["../src/transduce.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transduce.d.ts","sourceRoot":"","sources":["../src/transduce.ts"],"names":[],"mappings":"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"}
package/dist/transduce.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { abortable } from "./abort.js";
2
- import { reduceAsync, reduceSync } from "./iterator-tools.js";
2
+ import { HALT, reduceAsync, reduceSync } from "./iterator-tools.js";
3
3
  /**
4
4
  * The innermost reducer step ("emit"): pushes an emitted item onto the
5
5
  * pending-emission buffer (the accumulator) and returns the buffer.
@@ -34,4 +34,30 @@ export function transduceAsync(...functions) {
34
34
  export function transduceSync(...functions) {
35
35
  return (itemCollection) => reduceSync(itemCollection, composeFunctions(...functions)(emit), []);
36
36
  }
37
+ export function transducePush(...functions) {
38
+ const step = composeFunctions(...functions)(emit);
39
+ let halted = false;
40
+ let completed = false;
41
+ return {
42
+ step(value) {
43
+ if (halted || completed)
44
+ return [];
45
+ const out = step([], value);
46
+ if (out === HALT) {
47
+ halted = true;
48
+ return [];
49
+ }
50
+ return out;
51
+ },
52
+ complete() {
53
+ if (completed)
54
+ return [];
55
+ completed = true;
56
+ return step.complete ? step.complete([]) : [];
57
+ },
58
+ get halted() {
59
+ return halted;
60
+ },
61
+ };
62
+ }
37
63
  //# sourceMappingURL=transduce.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transduce.js","sourceRoot":"","sources":["../src/transduce.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAsB,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAoB,WAAW,EAAE,UAAU,EAAmB,MAAM,qBAAqB,CAAC;AAEjG;;;;;;;;GAQG;AACH,MAAM,IAAI,GAAyB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;IAClD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClB,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,cAAsB,EACtB,OAAyD,EACzD,WAA+B,EAC/B,IAAe,EACf,MAAqF,EAC7E,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,gBAAgB,GACpB,CAAC,GAAG,SAA8C,EAAE,EAAE,CACtD,CAAC,KAA2B,EAAwB,EAAE,CACpD,SAAS,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AA0D/D,MAAM,UAAU,cAAc,CAAC,GAAG,SAAsC;IACtE,OAAO,CAAC,cAA0D,EAAE,EAAE,MAAM,KAAoB,EAAE,EAAE,EAAE,CACpG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,gBAAgB,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACvH,CAAC;AAwDD,MAAM,UAAU,aAAa,CAAC,GAAG,SAAsC;IACrE,OAAO,CAAC,cAAiC,EAAE,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,gBAAgB,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACrH,CAAC"}
1
+ {"version":3,"file":"transduce.js","sourceRoot":"","sources":["../src/transduce.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAsB,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAoB,WAAW,EAAE,UAAU,EAAmB,MAAM,qBAAqB,CAAC;AAEvG;;;;;;;;GAQG;AACH,MAAM,IAAI,GAAyB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;IAClD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClB,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,cAAsB,EACtB,OAAyD,EACzD,WAA+B,EAC/B,IAAe,EACf,MAAqF,EAC7E,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,gBAAgB,GACpB,CAAC,GAAG,SAA8C,EAAE,EAAE,CACtD,CAAC,KAA2B,EAAwB,EAAE,CACpD,SAAS,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AA0D/D,MAAM,UAAU,cAAc,CAAC,GAAG,SAAsC;IACtE,OAAO,CAAC,cAA0D,EAAE,EAAE,MAAM,KAAoB,EAAE,EAAE,EAAE,CACpG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,gBAAgB,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACvH,CAAC;AAwDD,MAAM,UAAU,aAAa,CAAC,GAAG,SAAsC;IACrE,OAAO,CAAC,cAAiC,EAAE,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,gBAAgB,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACrH,CAAC;AAmED,MAAM,UAAU,aAAa,CAAC,GAAG,SAAsC;IACrE,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,OAAO;QACL,IAAI,CAAC,KAAK;YACR,IAAI,MAAM,IAAI,SAAS;gBAAE,OAAO,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC5B,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjB,MAAM,GAAG,IAAI,CAAC;gBACd,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QACD,QAAQ;YACN,IAAI,SAAS;gBAAE,OAAO,EAAE,CAAC;YACzB,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,CAAC;QACD,IAAI,MAAM;YACR,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"transducers.d.ts","sourceRoot":"","sources":["../src/transducers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE9E;;;;;;GAMG;AACH,eAAO,MAAM,GAAG,GACb,EAAE,EAAE,GAAG,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,KAAK,GAAG,KAAG,UAAU,CAAC,EAAE,EAAE,GAAG,CAG3B,CAAC;AAEnC;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,GAChB,EAAE,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,KAAK,OAAO,KAAG,UAAU,CAAC,EAAE,EAAE,EAAE,CAGX,CAAC;AAEjD;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,GACd,EAAE,EAAE,OAAO,MAAM,KAAG,UAAU,CAAC,EAAE,EAAE,EAAE,CAKrC,CAAC;AAEJ;;;;;;;;GAQG;AACH,eAAO,MAAM,IAAI,GACd,EAAE,EAAE,OAAO,MAAM,KAAG,UAAU,CAAC,EAAE,EAAE,EAAE,CAKrC,CAAC;AAEJ;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,GAChB,EAAE,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,KAAK,OAAO,KAAG,UAAU,CAAC,EAAE,EAAE,EAAE,CAGX,CAAC;AAEjD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK,GACf,EAAE,EAAE,OAAO,MAAM,KAAG,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,CAgBvC,CAAC;AAEJ;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,GACpB,EAAE,EAAE,GAAG,GAAG,EAAE,EACX,OAAM,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,GACmC,EACzE,UAAS,GAAyB,KACjC,UAAU,CAAC,EAAE,EAAE,GAAG,CAYpB,CAAC;AAEJ;;;;;;;;;;GAUG;AACH,eAAO,MAAM,MAAM,GAChB,EAAE,EAAE,QAAO,CAAC,IAAI,EAAE,EAAE,KAAK,OAAkB,KAAG,UAAU,CAAC,EAAE,EAAE,EAAE,CAa/D,CAAC;AAEJ;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GACnB,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,WAAW,GAAG,KAAG,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CActD,CAAC;AAEJ;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW,GACrB,EAAE,EAAE,QAAO,CAAC,IAAI,EAAE,EAAE,KAAK,OAAkB,KAAG,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,CA4BjE,CAAC;AAEJ;;;;;;;;GAQG;AACH,eAAO,MAAM,GAAG,GACb,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,OAAO,KAAG,UAAU,CAAC,EAAE,EAAE,EAAE,CAKjD,CAAC"}
1
+ {"version":3,"file":"transducers.d.ts","sourceRoot":"","sources":["../src/transducers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAiB9E;;;;;;GAMG;AACH,eAAO,MAAM,GAAG,GACb,EAAE,EAAE,GAAG,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,KAAK,GAAG,KAAG,UAAU,CAAC,EAAE,EAAE,GAAG,CAEe,CAAC;AAE7E;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,GAChB,EAAE,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,KAAK,OAAO,KAAG,UAAU,CAAC,EAAE,EAAE,EAAE,CAEiC,CAAC;AAE7F;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,GACd,EAAE,EAAE,OAAO,MAAM,KAAG,UAAU,CAAC,EAAE,EAAE,EAAE,CAKrC,CAAC;AAEJ;;;;;;;;GAQG;AACH,eAAO,MAAM,IAAI,GACd,EAAE,EAAE,OAAO,MAAM,KAAG,UAAU,CAAC,EAAE,EAAE,EAAE,CAQrC,CAAC;AAEJ;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,GAChB,EAAE,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,KAAK,OAAO,KAAG,UAAU,CAAC,EAAE,EAAE,EAAE,CAEiC,CAAC;AAE7F;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK,GACf,EAAE,EAAE,OAAO,MAAM,KAAG,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,CAgBvC,CAAC;AAEJ;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,GACpB,EAAE,EAAE,GAAG,GAAG,EAAE,EACX,OAAM,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,GACmC,EACzE,UAAS,GAAyB,KACjC,UAAU,CAAC,EAAE,EAAE,GAAG,CAYpB,CAAC;AAEJ;;;;;;;;;;GAUG;AACH,eAAO,MAAM,MAAM,GAChB,EAAE,EAAE,QAAO,CAAC,IAAI,EAAE,EAAE,KAAK,OAAkB,KAAG,UAAU,CAAC,EAAE,EAAE,EAAE,CAa/D,CAAC;AAEJ;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GACnB,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,WAAW,GAAG,KAAG,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CActD,CAAC;AAEJ;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW,GACrB,EAAE,EAAE,QAAO,CAAC,IAAI,EAAE,EAAE,KAAK,OAAkB,KAAG,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,CA4BjE,CAAC;AAEJ;;;;;;;;GAQG;AACH,eAAO,MAAM,GAAG,GACb,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,OAAO,KAAG,UAAU,CAAC,EAAE,EAAE,EAAE,CAK9C,CAAC"}
@@ -6,6 +6,21 @@
6
6
  * @see transduceAsync
7
7
  */
8
8
  import { HALT } from "./iterator-tools.js";
9
+ /**
10
+ * Give a stateless transducer's step the inner step's `.complete`, so the
11
+ * end-of-source flush cascades through it to a stateful transducer further
12
+ * down the pipeline (e.g. the trailing partial group in
13
+ * `transduceSync(map(f), group(2))`). A stateless step has nothing of its
14
+ * own to flush, so it forwards the inner `.complete` unchanged. Without
15
+ * this, `reduceSync`/`reduceAsync`/`transducePush` only ever saw the
16
+ * outermost step, which had no `.complete`, and the flush was lost.
17
+ * @ignore
18
+ */
19
+ const forwardComplete = (next, step) => {
20
+ if (next.complete)
21
+ step.complete = next.complete;
22
+ return step;
23
+ };
9
24
  /**
10
25
  * Create a transducer that maps values
11
26
  * @kind function
@@ -13,7 +28,7 @@ import { HALT } from "./iterator-tools.js";
13
28
  * @param transform transformation function applied to each item
14
29
  * @returns transducer
15
30
  */
16
- export const map = (transform) => (conjoin) => (init, item) => conjoin(init, transform(item));
31
+ export const map = (transform) => (conjoin) => forwardComplete(conjoin, (init, item) => conjoin(init, transform(item)));
17
32
  /**
18
33
  * Create a transducer that filters values
19
34
  * @kind function
@@ -21,7 +36,7 @@ export const map = (transform) => (conjoin) => (init, item) => conjoin(init, tra
21
36
  * @param predicate boolean function to determine if an item is emitted
22
37
  * @returns transducer
23
38
  */
24
- export const filter = (predicate) => (conjoin) => (init, item) => predicate(item) ? conjoin(init, item) : init;
39
+ export const filter = (predicate) => (conjoin) => forwardComplete(conjoin, (init, item) => (predicate(item) ? conjoin(init, item) : init));
25
40
  /**
26
41
  * Create a transducer that halts after a given number of values
27
42
  * @kind function
@@ -32,7 +47,7 @@ export const filter = (predicate) => (conjoin) => (init, item) => predicate(item
32
47
  export const take = (limit) => (conjoin) => {
33
48
  let amount = 0;
34
49
  // biome-ignore lint/complexity/noCommaOperator: deliberate single-expression step function
35
- return (init, item) => (amount < limit ? (amount++, conjoin(init, item)) : HALT);
50
+ return forwardComplete(conjoin, (init, item) => (amount < limit ? (amount++, conjoin(init, item)) : HALT));
36
51
  };
37
52
  /**
38
53
  * Create a transducer that drops the first N values
@@ -45,8 +60,11 @@ export const take = (limit) => (conjoin) => {
45
60
  */
46
61
  export const drop = (limit) => (conjoin) => {
47
62
  let amount = 0;
48
- // biome-ignore lint/complexity/noCommaOperator: deliberate single-expression step function
49
- return (init, item) => (amount >= limit ? (amount++, conjoin(init, item)) : (amount++, init));
63
+ return forwardComplete(conjoin, (init, item) => {
64
+ const pass = amount >= limit;
65
+ amount++;
66
+ return pass ? conjoin(init, item) : init;
67
+ });
50
68
  };
51
69
  /**
52
70
  * Create a transducer that rejects values matching a predicate.
@@ -58,7 +76,7 @@ export const drop = (limit) => (conjoin) => {
58
76
  * @see filter
59
77
  * @see drop
60
78
  */
61
- export const reject = (predicate) => (conjoin) => (init, item) => predicate(item) ? init : conjoin(init, item);
79
+ export const reject = (predicate) => (conjoin) => forwardComplete(conjoin, (init, item) => (predicate(item) ? init : conjoin(init, item)));
62
80
  /**
63
81
  * Create a transducer that groups items by quantity before emitting.
64
82
  * Note: this currently returns arrays -- would sets make more sense?
@@ -102,10 +120,10 @@ export const accumulate = (func = (a, b) => (a + b), initial = 0) => (conjoin) =
102
120
  // directly here would carry accumulated state over into the *next*
103
121
  // transduce run that reuses this same accumulate(...) instance.
104
122
  let accumulated = initial;
105
- return (init, item) => {
123
+ return forwardComplete(conjoin, (init, item) => {
106
124
  accumulated = func(accumulated, item);
107
125
  return conjoin(init, accumulated);
108
- };
126
+ });
109
127
  };
110
128
  /**
111
129
  * Create a transducer that skips consecutive duplicate items (by key).
@@ -121,7 +139,7 @@ export const accumulate = (func = (a, b) => (a + b), initial = 0) => (conjoin) =
121
139
  export const dedupe = (keyFn = (x) => x) => (conjoin) => {
122
140
  let hasLast = false;
123
141
  let lastKey;
124
- return (init, item) => {
142
+ return forwardComplete(conjoin, (init, item) => {
125
143
  const key = keyFn(item);
126
144
  if (hasLast && Object.is(key, lastKey)) {
127
145
  return init;
@@ -129,7 +147,7 @@ export const dedupe = (keyFn = (x) => x) => (conjoin) => {
129
147
  hasLast = true;
130
148
  lastKey = key;
131
149
  return conjoin(init, item);
132
- };
150
+ });
133
151
  };
134
152
  /**
135
153
  * Create a transducer that inserts `separator` between consecutive
@@ -141,7 +159,7 @@ export const dedupe = (keyFn = (x) => x) => (conjoin) => {
141
159
  */
142
160
  export const interpose = (separator) => (conjoin) => {
143
161
  let started = false;
144
- return (init, item) => {
162
+ return forwardComplete(conjoin, (init, item) => {
145
163
  if (started) {
146
164
  const out = conjoin(init, separator);
147
165
  if (out === HALT) {
@@ -151,7 +169,7 @@ export const interpose = (separator) => (conjoin) => {
151
169
  }
152
170
  started = true;
153
171
  return conjoin(init, item);
154
- };
172
+ });
155
173
  };
156
174
  /**
157
175
  * Create a transducer that groups consecutive items sharing a key into
@@ -205,8 +223,8 @@ export const partitionBy = (keyFn = (x) => x) => (conjoin) => {
205
223
  * @param fn called with each item, for side effects
206
224
  * @returns transducer
207
225
  */
208
- export const tap = (fn) => (conjoin) => (init, item) => {
226
+ export const tap = (fn) => (conjoin) => forwardComplete(conjoin, (init, item) => {
209
227
  fn(item);
210
228
  return conjoin(init, item);
211
- };
229
+ });
212
230
  //# sourceMappingURL=transducers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transducers.js","sourceRoot":"","sources":["../src/transducers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transducers.js","sourceRoot":"","sources":["../src/transducers.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "provenance": true
7
7
  },
8
8
  "engines": {
9
- "node": ">=22.12.0",
9
+ "node": ">=26.0.0",
10
10
  "npm": ">=8.19.2"
11
11
  },
12
12
  "exports": {
@@ -54,6 +54,10 @@
54
54
  "types": "./dist/async-channel.d.ts",
55
55
  "import": "./dist/async-channel.js"
56
56
  },
57
+ "./combine": {
58
+ "types": "./dist/combine.d.ts",
59
+ "import": "./dist/combine.js"
60
+ },
57
61
  "./abort": {
58
62
  "types": "./dist/abort.d.ts",
59
63
  "import": "./dist/abort.js"
@@ -73,6 +77,10 @@
73
77
  "./is-iterator": {
74
78
  "types": "./dist/is-iterator.d.ts",
75
79
  "import": "./dist/is-iterator.js"
80
+ },
81
+ "./time": {
82
+ "types": "./dist/time.d.ts",
83
+ "import": "./dist/time.js"
76
84
  }
77
85
  },
78
86
  "repository": {
@@ -80,7 +88,7 @@
80
88
  "url": "git+https://github.com/johnhenry/math.git",
81
89
  "directory": "packages/iteration"
82
90
  },
83
- "version": "0.0.0",
91
+ "version": "0.0.1",
84
92
  "description": "Sync + async iterator algebra for TypeScript — transducers, Python-itertools parity, terminal consumers, bounded concurrency, cancellation, and backpressure-aware channels. Zero runtime dependencies.",
85
93
  "main": "./dist/index.js",
86
94
  "types": "./dist/index.d.ts",