@johnhenry/iteration 0.0.0 → 0.1.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 (50) 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 +13 -0
  18. package/dist/iterator-tools.d.ts.map +1 -1
  19. package/dist/iterator-tools.js +38 -18
  20. package/dist/iterator-tools.js.map +1 -1
  21. package/dist/itertools.d.ts.map +1 -1
  22. package/dist/itertools.js +42 -24
  23. package/dist/itertools.js.map +1 -1
  24. package/dist/tee.d.ts +24 -2
  25. package/dist/tee.d.ts.map +1 -1
  26. package/dist/tee.js +175 -2
  27. package/dist/tee.js.map +1 -1
  28. package/dist/time.d.ts +69 -0
  29. package/dist/time.d.ts.map +1 -0
  30. package/dist/time.js +234 -0
  31. package/dist/time.js.map +1 -0
  32. package/dist/transduce.d.ts +65 -0
  33. package/dist/transduce.d.ts.map +1 -1
  34. package/dist/transduce.js +33 -1
  35. package/dist/transduce.js.map +1 -1
  36. package/dist/transducers.d.ts.map +1 -1
  37. package/dist/transducers.js +86 -16
  38. package/dist/transducers.js.map +1 -1
  39. package/package.json +10 -2
  40. package/readme.md +338 -14
  41. package/src/async-channel.ts +63 -47
  42. package/src/combine.ts +441 -0
  43. package/src/index.ts +2 -0
  44. package/src/internal.ts +164 -0
  45. package/src/iterator-tools.ts +48 -20
  46. package/src/itertools.ts +36 -23
  47. package/src/tee.ts +202 -2
  48. package/src/time.ts +262 -0
  49. package/src/transduce.ts +113 -1
  50. package/src/transducers.ts +121 -30
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,69 @@ 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
+ /**
97
+ * What the stateful transducers keep between steps, upstream first: a
98
+ * half-full `group`'s items, `partitionBy`'s open run, `accumulate`'s
99
+ * running value, `dedupe`'s last key. A copy: changing it changes nothing.
100
+ */
101
+ held(): unknown[];
102
+ /**
103
+ * Let go of the held items `predicate` matches, and return how many. For a
104
+ * caller that must stop an operator keeping something (a value removed
105
+ * elsewhere). It never emits and never changes what is later emitted
106
+ * beyond leaving the dropped items out: a `group` still waits for its full
107
+ * size, a `partitionBy` run left empty is closed without being emitted,
108
+ * `accumulate` starts again from its initial value, and `dedupe` forgets
109
+ * its key (so an equal item passes once).
110
+ */
111
+ drop(predicate: (held: unknown) => boolean): number;
112
+ /** True once a transducer returned HALT (e.g. `take(n)` saw item n + 1). */
113
+ readonly halted: boolean;
114
+ }
115
+ /**
116
+ * Drive transducers by pushing values in, with no iterator: for code that
117
+ * receives values by callback (an event handler, a wire in a dataflow
118
+ * graph). Uses the same left-to-right composition order, `.complete` flush
119
+ * protocol and HALT semantics as transduceSync:
120
+ * `transduceSync(...t)(xs)` yields exactly what pushing each `x` through
121
+ * `step` and then calling `complete()` returns.
122
+ *
123
+ * Like transduceSync, the items emitted by the step that returns HALT are
124
+ * discarded.
125
+ * @kind function
126
+ * @name transducePush
127
+ * @example
128
+ * ```javascript
129
+ * import { transducePush, transducers } from '@johnhenry/iteration';
130
+ * const { map, group } = transducers;
131
+ * const pipe = transducePush(map((x) => x * 10), group(2));
132
+ * pipe.step(1); // []
133
+ * pipe.step(2); // [[10, 20]]
134
+ * pipe.step(3); // []
135
+ * pipe.complete(); // [[30]]
136
+ * ```
137
+ */
138
+ export declare function transducePush<A, B>(t1: Transducer<A, B>): PushTransducer<A, B>;
139
+ export declare function transducePush<A, B, C>(t1: Transducer<A, B>, t2: Transducer<B, C>): PushTransducer<A, C>;
140
+ export declare function transducePush<A, B, C, D>(t1: Transducer<A, B>, t2: Transducer<B, C>, t3: Transducer<C, D>): PushTransducer<A, D>;
141
+ 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>;
142
+ 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>;
143
+ export declare function transducePush(...functions: Array<Transducer<any, any>>): PushTransducer<unknown, unknown>;
79
144
  //# 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,36 @@ 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
+ held() {
59
+ return step.held ? step.held() : [];
60
+ },
61
+ drop(predicate) {
62
+ return step.drop ? step.drop(predicate) : 0;
63
+ },
64
+ get halted() {
65
+ return halted;
66
+ },
67
+ };
68
+ }
37
69
  //# 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;AAmFD,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;YACF,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,SAAS;YACZ,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,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;AAoD9E;;;;;;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,CAqBvC,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,CAwBpB,CAAC;AAEJ;;;;;;;;;;GAUG;AACH,eAAO,MAAM,MAAM,GAChB,EAAE,EAAE,QAAO,CAAC,IAAI,EAAE,EAAE,KAAK,OAAkB,KAAG,UAAU,CAAC,EAAE,EAAE,EAAE,CAuB/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,CA0CjE,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,50 @@
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
+ if (next.held)
23
+ step.held = next.held;
24
+ if (next.drop)
25
+ step.drop = next.drop;
26
+ return step;
27
+ };
28
+ /**
29
+ * Give a stateful step `held`/`drop` over its own state, then the inner
30
+ * step's, so the hooks cascade the way `.complete` does. `own` lists the
31
+ * step's held items; `ownDrop` lets go of the ones `predicate` matches and
32
+ * returns how many.
33
+ * @ignore
34
+ */
35
+ const holding = (next, step, own, ownDrop) => {
36
+ step.held = () => [...own(), ...(next.held ? next.held() : [])];
37
+ step.drop = (predicate) => ownDrop(predicate) + (next.drop ? next.drop(predicate) : 0);
38
+ return step;
39
+ };
40
+ /** Remove, in place, the items of `list` that `predicate` matches; returns how many. */
41
+ const dropFrom = (list, predicate) => {
42
+ let kept = 0;
43
+ let dropped = 0;
44
+ for (const item of list) {
45
+ if (predicate(item))
46
+ dropped++;
47
+ else
48
+ list[kept++] = item;
49
+ }
50
+ list.length = kept;
51
+ return dropped;
52
+ };
9
53
  /**
10
54
  * Create a transducer that maps values
11
55
  * @kind function
@@ -13,7 +57,7 @@ import { HALT } from "./iterator-tools.js";
13
57
  * @param transform transformation function applied to each item
14
58
  * @returns transducer
15
59
  */
16
- export const map = (transform) => (conjoin) => (init, item) => conjoin(init, transform(item));
60
+ export const map = (transform) => (conjoin) => forwardComplete(conjoin, (init, item) => conjoin(init, transform(item)));
17
61
  /**
18
62
  * Create a transducer that filters values
19
63
  * @kind function
@@ -21,7 +65,7 @@ export const map = (transform) => (conjoin) => (init, item) => conjoin(init, tra
21
65
  * @param predicate boolean function to determine if an item is emitted
22
66
  * @returns transducer
23
67
  */
24
- export const filter = (predicate) => (conjoin) => (init, item) => predicate(item) ? conjoin(init, item) : init;
68
+ export const filter = (predicate) => (conjoin) => forwardComplete(conjoin, (init, item) => (predicate(item) ? conjoin(init, item) : init));
25
69
  /**
26
70
  * Create a transducer that halts after a given number of values
27
71
  * @kind function
@@ -32,7 +76,7 @@ export const filter = (predicate) => (conjoin) => (init, item) => predicate(item
32
76
  export const take = (limit) => (conjoin) => {
33
77
  let amount = 0;
34
78
  // biome-ignore lint/complexity/noCommaOperator: deliberate single-expression step function
35
- return (init, item) => (amount < limit ? (amount++, conjoin(init, item)) : HALT);
79
+ return forwardComplete(conjoin, (init, item) => (amount < limit ? (amount++, conjoin(init, item)) : HALT));
36
80
  };
37
81
  /**
38
82
  * Create a transducer that drops the first N values
@@ -45,8 +89,11 @@ export const take = (limit) => (conjoin) => {
45
89
  */
46
90
  export const drop = (limit) => (conjoin) => {
47
91
  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));
92
+ return forwardComplete(conjoin, (init, item) => {
93
+ const pass = amount >= limit;
94
+ amount++;
95
+ return pass ? conjoin(init, item) : init;
96
+ });
50
97
  };
51
98
  /**
52
99
  * Create a transducer that rejects values matching a predicate.
@@ -58,7 +105,7 @@ export const drop = (limit) => (conjoin) => {
58
105
  * @see filter
59
106
  * @see drop
60
107
  */
61
- export const reject = (predicate) => (conjoin) => (init, item) => predicate(item) ? init : conjoin(init, item);
108
+ export const reject = (predicate) => (conjoin) => forwardComplete(conjoin, (init, item) => (predicate(item) ? init : conjoin(init, item)));
62
109
  /**
63
110
  * Create a transducer that groups items by quantity before emitting.
64
111
  * Note: this currently returns arrays -- would sets make more sense?
@@ -84,7 +131,7 @@ export const group = (limit) => (conjoin) => {
84
131
  const buffer = out === HALT ? init : out;
85
132
  return conjoin.complete ? conjoin.complete(buffer) : buffer;
86
133
  };
87
- return step;
134
+ return holding(conjoin, step, () => [...partition], (predicate) => dropFrom(partition, predicate));
88
135
  };
89
136
  /**
90
137
  * Create a transducer that accumulates items into a result and emits them
@@ -102,10 +149,18 @@ export const accumulate = (func = (a, b) => (a + b), initial = 0) => (conjoin) =
102
149
  // directly here would carry accumulated state over into the *next*
103
150
  // transduce run that reuses this same accumulate(...) instance.
104
151
  let accumulated = initial;
105
- return (init, item) => {
152
+ let has = false;
153
+ return holding(conjoin, forwardComplete(conjoin, (init, item) => {
106
154
  accumulated = func(accumulated, item);
155
+ has = true;
107
156
  return conjoin(init, accumulated);
108
- };
157
+ }), () => (has ? [accumulated] : []), (predicate) => {
158
+ if (!has || !predicate(accumulated))
159
+ return 0;
160
+ accumulated = initial;
161
+ has = false;
162
+ return 1;
163
+ });
109
164
  };
110
165
  /**
111
166
  * Create a transducer that skips consecutive duplicate items (by key).
@@ -121,7 +176,7 @@ export const accumulate = (func = (a, b) => (a + b), initial = 0) => (conjoin) =
121
176
  export const dedupe = (keyFn = (x) => x) => (conjoin) => {
122
177
  let hasLast = false;
123
178
  let lastKey;
124
- return (init, item) => {
179
+ return holding(conjoin, forwardComplete(conjoin, (init, item) => {
125
180
  const key = keyFn(item);
126
181
  if (hasLast && Object.is(key, lastKey)) {
127
182
  return init;
@@ -129,7 +184,13 @@ export const dedupe = (keyFn = (x) => x) => (conjoin) => {
129
184
  hasLast = true;
130
185
  lastKey = key;
131
186
  return conjoin(init, item);
132
- };
187
+ }), () => (hasLast ? [lastKey] : []), (predicate) => {
188
+ if (!hasLast || !predicate(lastKey))
189
+ return 0;
190
+ hasLast = false;
191
+ lastKey = undefined;
192
+ return 1;
193
+ });
133
194
  };
134
195
  /**
135
196
  * Create a transducer that inserts `separator` between consecutive
@@ -141,7 +202,7 @@ export const dedupe = (keyFn = (x) => x) => (conjoin) => {
141
202
  */
142
203
  export const interpose = (separator) => (conjoin) => {
143
204
  let started = false;
144
- return (init, item) => {
205
+ return forwardComplete(conjoin, (init, item) => {
145
206
  if (started) {
146
207
  const out = conjoin(init, separator);
147
208
  if (out === HALT) {
@@ -151,7 +212,7 @@ export const interpose = (separator) => (conjoin) => {
151
212
  }
152
213
  started = true;
153
214
  return conjoin(init, item);
154
- };
215
+ });
155
216
  };
156
217
  /**
157
218
  * Create a transducer that groups consecutive items sharing a key into
@@ -194,7 +255,16 @@ export const partitionBy = (keyFn = (x) => x) => (conjoin) => {
194
255
  const buffer = out === HALT ? init : out;
195
256
  return conjoin.complete ? conjoin.complete(buffer) : buffer;
196
257
  };
197
- return step;
258
+ return holding(conjoin, step, () => (hasCurrent ? [...bucket] : []), (predicate) => {
259
+ const dropped = dropFrom(bucket, predicate);
260
+ if (hasCurrent && bucket.length === 0) {
261
+ // A run with nothing left isn't open: the next item starts a fresh
262
+ // one, and complete() has no empty run to flush.
263
+ hasCurrent = false;
264
+ currentKey = undefined;
265
+ }
266
+ return dropped;
267
+ });
198
268
  };
199
269
  /**
200
270
  * Create a transducer that calls `fn(item)` for its side effect and passes
@@ -205,8 +275,8 @@ export const partitionBy = (keyFn = (x) => x) => (conjoin) => {
205
275
  * @param fn called with each item, for side effects
206
276
  * @returns transducer
207
277
  */
208
- export const tap = (fn) => (conjoin) => (init, item) => {
278
+ export const tap = (fn) => (conjoin) => forwardComplete(conjoin, (init, item) => {
209
279
  fn(item);
210
280
  return conjoin(init, item);
211
- };
281
+ });
212
282
  //# 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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"}