@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.
- package/dist/async-channel.d.ts +24 -4
- package/dist/async-channel.d.ts.map +1 -1
- package/dist/async-channel.js +41 -38
- package/dist/async-channel.js.map +1 -1
- package/dist/combine.d.ts +146 -0
- package/dist/combine.d.ts.map +1 -0
- package/dist/combine.js +353 -0
- package/dist/combine.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +66 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +134 -0
- package/dist/internal.js.map +1 -0
- package/dist/iterator-tools.d.ts.map +1 -1
- package/dist/iterator-tools.js +38 -18
- package/dist/iterator-tools.js.map +1 -1
- package/dist/itertools.d.ts.map +1 -1
- package/dist/itertools.js +42 -24
- package/dist/itertools.js.map +1 -1
- package/dist/tee.d.ts +24 -2
- package/dist/tee.d.ts.map +1 -1
- package/dist/tee.js +175 -2
- package/dist/tee.js.map +1 -1
- package/dist/time.d.ts +69 -0
- package/dist/time.d.ts.map +1 -0
- package/dist/time.js +234 -0
- package/dist/time.js.map +1 -0
- package/dist/transduce.d.ts +49 -0
- package/dist/transduce.d.ts.map +1 -1
- package/dist/transduce.js +27 -1
- package/dist/transduce.js.map +1 -1
- package/dist/transducers.d.ts.map +1 -1
- package/dist/transducers.js +32 -14
- package/dist/transducers.js.map +1 -1
- package/package.json +10 -2
- package/readme.md +304 -14
- package/src/async-channel.ts +63 -47
- package/src/combine.ts +441 -0
- package/src/index.ts +2 -0
- package/src/internal.ts +164 -0
- package/src/iterator-tools.ts +35 -20
- package/src/itertools.ts +36 -23
- package/src/tee.ts +202 -2
- package/src/time.ts +262 -0
- package/src/transduce.ts +91 -1
- 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
|
package/dist/time.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.js","sourceRoot":"","sources":["../src/time.ts"],"names":[],"mappings":"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"}
|
package/dist/transduce.d.ts
CHANGED
|
@@ -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
|
package/dist/transduce.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transduce.d.ts","sourceRoot":"","sources":["../src/transduce.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,
|
|
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
|
package/dist/transduce.js.map
CHANGED
|
@@ -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;
|
|
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;
|
|
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"}
|
package/dist/transducers.js
CHANGED
|
@@ -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
|
-
|
|
49
|
-
|
|
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
|
package/dist/transducers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transducers.js","sourceRoot":"","sources":["../src/transducers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAqC,MAAM,qBAAqB,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,GAAG,GACd,CAAU,SAA4B,EAAuB,EAAE,CAC/D,CAAC,OAAO,EAAE,EAAE,
|
|
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": ">=
|
|
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.
|
|
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",
|