@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
@@ -0,0 +1,353 @@
1
+ /**
2
+ * Combinators for live values and events: merge several async sources,
3
+ * combine their latest values, sample one by another, and conflate a fast
4
+ * source down to its newest value.
5
+ *
6
+ * Every combinator here:
7
+ * - accepts async or sync iterables as inputs;
8
+ * - takes an optional `{ signal }`; on abort it rejects with the signal's
9
+ * reason (an "AbortError" DOMException by default);
10
+ * - closes (`return()`) every input that has not ended when it finishes,
11
+ * when an input errors, when the signal aborts, and when the consumer
12
+ * exits early (`break`, or calling `return()` on it). An input with a
13
+ * `next()` still pending is closed without waiting for that `next()`.
14
+ *
15
+ * The "latest value" combinators (combineLatestAsync, withLatestFromAsync,
16
+ * latestAsync, sampleAsync) drain some inputs eagerly: they keep pulling
17
+ * from them whether or not the consumer is reading, and keep only the
18
+ * newest value. Like every generator in this library they start when the
19
+ * consumer first calls `next()`.
20
+ */
21
+ import { throwIfAborted } from "./abort.js";
22
+ import { closeAll, createFailure, entryOf, listenAbort, pull, Wakeup, } from "./internal.js";
23
+ const isOptions = (value) => typeof value === "object" &&
24
+ value !== null &&
25
+ !(Symbol.iterator in value) &&
26
+ !(Symbol.asyncIterator in value);
27
+ /**
28
+ * Pull from an entry eagerly until it ends, errors, or `isStopped()`:
29
+ * `onValue` gets each value, `onEnd` runs once it ends, and an error fails
30
+ * the whole combinator.
31
+ */
32
+ const pump = async (entry, isStopped, onValue, onEnd, failure) => {
33
+ try {
34
+ while (!isStopped()) {
35
+ const result = await pull(entry);
36
+ if (isStopped())
37
+ return;
38
+ if (result.done) {
39
+ onEnd();
40
+ return;
41
+ }
42
+ onValue(result.value);
43
+ }
44
+ }
45
+ catch (error) {
46
+ failure.fail(error);
47
+ }
48
+ };
49
+ /** Split an array-or-record of inputs into keys and iterables. */
50
+ const shapeOf = (inputs) => {
51
+ if (Array.isArray(inputs)) {
52
+ return { isArray: true, keys: inputs.map((_, i) => String(i)), iterables: [...inputs] };
53
+ }
54
+ const keys = Object.keys(inputs);
55
+ return {
56
+ isArray: false,
57
+ keys,
58
+ iterables: keys.map((key) => inputs[key]),
59
+ };
60
+ };
61
+ const snapshotOf = (isArray, keys, values) => {
62
+ if (isArray)
63
+ return values.slice();
64
+ const out = {};
65
+ keys.forEach((key, i) => {
66
+ out[key] = values[i];
67
+ });
68
+ return out;
69
+ };
70
+ export function mergeAsync(...args) {
71
+ const last = args[args.length - 1];
72
+ const options = isOptions(last) ? args.pop() : {};
73
+ return mergeImpl(args, options);
74
+ }
75
+ const mergeImpl = async function* (inputs, { signal }) {
76
+ throwIfAborted(signal);
77
+ const entries = inputs.map((input) => entryOf(input));
78
+ const failure = createFailure();
79
+ const unlisten = listenAbort(signal, (reason) => failure.fail(reason));
80
+ // The outstanding next() of each input, tagged with its index.
81
+ const pending = new Map();
82
+ const request = (i) => {
83
+ const tagged = pull(entries[i]).then((result) => [i, result]);
84
+ tagged.catch(() => { }); // rejections are observed through the race below
85
+ pending.set(i, tagged);
86
+ };
87
+ try {
88
+ entries.forEach((_, i) => {
89
+ request(i);
90
+ });
91
+ let lastWinner = -1;
92
+ while (pending.size > 0) {
93
+ if (failure.failed)
94
+ throw failure.error;
95
+ // Rotate the race so the input after the last winner goes first:
96
+ // Promise.race favours the earliest already-settled promise.
97
+ const rank = (k) => (k - lastWinner - 1 + entries.length) % entries.length;
98
+ const order = [...pending.keys()].sort((a, b) => rank(a) - rank(b));
99
+ const [i, result] = await Promise.race([...order.map((k) => pending.get(k)), failure.promise]);
100
+ pending.delete(i);
101
+ lastWinner = i;
102
+ if (result.done)
103
+ continue;
104
+ yield result.value;
105
+ request(i);
106
+ }
107
+ if (failure.failed)
108
+ throw failure.error;
109
+ }
110
+ finally {
111
+ unlisten();
112
+ await closeAll(entries);
113
+ }
114
+ };
115
+ /**
116
+ * Combine the latest values of several inputs. `inputs` is an array or a
117
+ * record of (async or sync) iterables; each output is a snapshot of the
118
+ * same shape holding every input's latest value. A snapshot is emitted
119
+ * whenever an input yields, once every input has a value (from the input
120
+ * itself or from `initial`).
121
+ *
122
+ * Latest-wins: inputs are drained eagerly, and while the consumer is busy
123
+ * the snapshots that would have been emitted coalesce into one, holding
124
+ * the newest values. Every snapshot is a fresh object.
125
+ *
126
+ * An input error closes the others and is rethrown (a pending snapshot is
127
+ * dropped). Consumer exit or abort closes every input.
128
+ * @kind function
129
+ * @name combineLatestAsync
130
+ * @example
131
+ * ```javascript
132
+ * for await (const { x, y } of combineLatestAsync({ x: xs, y: ys })) { ... }
133
+ * ```
134
+ */
135
+ export const combineLatestAsync = async function* (inputs, { signal, initial, endOn = "all" } = {}) {
136
+ throwIfAborted(signal);
137
+ const { isArray, keys, iterables } = shapeOf(inputs);
138
+ const n = keys.length;
139
+ const values = new Array(n);
140
+ const has = new Array(n).fill(false);
141
+ if (initial) {
142
+ keys.forEach((key, i) => {
143
+ if (Object.hasOwn(initial, key)) {
144
+ values[i] = initial[key];
145
+ has[i] = true;
146
+ }
147
+ });
148
+ }
149
+ const entries = iterables.map((iterable) => entryOf(iterable));
150
+ const failure = createFailure();
151
+ const wakeup = new Wakeup();
152
+ const unlisten = listenAbort(signal, (reason) => {
153
+ failure.fail(reason);
154
+ wakeup.wake();
155
+ });
156
+ let stopped = false;
157
+ let dirty = false;
158
+ let ended = n === 0;
159
+ try {
160
+ entries.forEach((entry, i) => {
161
+ void pump(entry, () => stopped, (value) => {
162
+ values[i] = value;
163
+ has[i] = true;
164
+ dirty = true;
165
+ wakeup.wake();
166
+ }, () => {
167
+ if (endOn === "any" || !has[i] || entries.every((e) => e.done))
168
+ ended = true;
169
+ wakeup.wake();
170
+ }, failure);
171
+ });
172
+ while (true) {
173
+ if (failure.failed)
174
+ throw failure.error;
175
+ if (dirty && has.every(Boolean)) {
176
+ dirty = false;
177
+ yield snapshotOf(isArray, keys, values);
178
+ continue;
179
+ }
180
+ if (ended)
181
+ return;
182
+ await Promise.race([wakeup.wait(), failure.promise]);
183
+ }
184
+ }
185
+ finally {
186
+ stopped = true;
187
+ unlisten();
188
+ await closeAll(entries);
189
+ }
190
+ };
191
+ /**
192
+ * Pair each value of `source` with the latest value of each of `others`
193
+ * (an array or a record of iterables): yields `[value, snapshot]`, where
194
+ * `snapshot` has the same shape as `others`. This is the "an event samples
195
+ * values" pattern.
196
+ *
197
+ * `source` is pulled lazily, as the consumer reads; `others` are drained
198
+ * eagerly. Source values that arrive before every one of `others` has a
199
+ * value are dropped. An input in `others` that ends keeps its last value.
200
+ * Ends when `source` ends. An error from any input closes the rest and is
201
+ * rethrown; consumer exit or abort closes every input.
202
+ * @kind function
203
+ * @name withLatestFromAsync
204
+ * @example
205
+ * ```javascript
206
+ * for await (const [click, { price }] of withLatestFromAsync(clicks, { price: prices })) { ... }
207
+ * ```
208
+ */
209
+ export const withLatestFromAsync = async function* (source, others, { signal } = {}) {
210
+ throwIfAborted(signal);
211
+ const { isArray, keys, iterables } = shapeOf(others);
212
+ const values = new Array(keys.length);
213
+ const has = new Array(keys.length).fill(false);
214
+ const src = entryOf(source);
215
+ const entries = iterables.map((iterable) => entryOf(iterable));
216
+ const failure = createFailure();
217
+ const unlisten = listenAbort(signal, (reason) => failure.fail(reason));
218
+ let stopped = false;
219
+ try {
220
+ entries.forEach((entry, i) => {
221
+ void pump(entry, () => stopped, (value) => {
222
+ values[i] = value;
223
+ has[i] = true;
224
+ }, () => { }, failure);
225
+ });
226
+ while (true) {
227
+ if (failure.failed)
228
+ throw failure.error;
229
+ const result = await Promise.race([pull(src), failure.promise]);
230
+ if (result.done)
231
+ return;
232
+ if (failure.failed)
233
+ throw failure.error;
234
+ if (has.every(Boolean))
235
+ yield [result.value, snapshotOf(isArray, keys, values)];
236
+ }
237
+ }
238
+ finally {
239
+ stopped = true;
240
+ unlisten();
241
+ await closeAll([src, ...entries]);
242
+ }
243
+ };
244
+ /**
245
+ * Conflate a source down to its newest value. The source is drained
246
+ * eagerly; only the newest value not yet read is kept. Each `next()`
247
+ * returns that value, or waits for the next one. A value is returned at
248
+ * most once.
249
+ *
250
+ * Ends once the source has ended and its last value has been read. A source
251
+ * error is rethrown on the next read (an unread value is dropped). Closing
252
+ * the result, or aborting, closes the source.
253
+ * @kind function
254
+ * @name latestAsync
255
+ * @example
256
+ * ```javascript
257
+ * for await (const position of latestAsync(pointerMoves)) {
258
+ * await render(position); // never falls behind: stale positions are skipped
259
+ * }
260
+ * ```
261
+ */
262
+ export const latestAsync = async function* (iterable, { signal } = {}) {
263
+ throwIfAborted(signal);
264
+ const entry = entryOf(iterable);
265
+ const failure = createFailure();
266
+ const wakeup = new Wakeup();
267
+ const unlisten = listenAbort(signal, (reason) => {
268
+ failure.fail(reason);
269
+ wakeup.wake();
270
+ });
271
+ let stopped = false;
272
+ let fresh = false;
273
+ let ended = false;
274
+ let latest;
275
+ try {
276
+ void pump(entry, () => stopped, (value) => {
277
+ latest = value;
278
+ fresh = true;
279
+ wakeup.wake();
280
+ }, () => {
281
+ ended = true;
282
+ wakeup.wake();
283
+ }, failure);
284
+ while (true) {
285
+ if (failure.failed)
286
+ throw failure.error;
287
+ if (fresh) {
288
+ const value = latest;
289
+ fresh = false;
290
+ latest = undefined; // don't retain a value that has been handed out
291
+ yield value;
292
+ continue;
293
+ }
294
+ if (ended)
295
+ return;
296
+ await Promise.race([wakeup.wait(), failure.promise]);
297
+ }
298
+ }
299
+ finally {
300
+ stopped = true;
301
+ unlisten();
302
+ await closeAll([entry]);
303
+ }
304
+ };
305
+ /**
306
+ * On each value from `trigger`, yield the latest value of `source`, if it
307
+ * has produced one yet. The same source value is yielded again on every
308
+ * trigger until the source produces a new one.
309
+ *
310
+ * `source` is drained eagerly; `trigger` is pulled lazily, as the consumer
311
+ * reads. Ends when `trigger` ends (a source that ends keeps its last
312
+ * value). An error from either closes the other and is rethrown; consumer
313
+ * exit or abort closes both.
314
+ * @kind function
315
+ * @name sampleAsync
316
+ * @example
317
+ * ```javascript
318
+ * for await (const position of sampleAsync(pointerMoves, animationFrames)) { ... }
319
+ * ```
320
+ */
321
+ export const sampleAsync = async function* (source, trigger, { signal } = {}) {
322
+ throwIfAborted(signal);
323
+ const src = entryOf(source);
324
+ const trig = entryOf(trigger);
325
+ const failure = createFailure();
326
+ const unlisten = listenAbort(signal, (reason) => failure.fail(reason));
327
+ let stopped = false;
328
+ let has = false;
329
+ let latest;
330
+ try {
331
+ void pump(src, () => stopped, (value) => {
332
+ latest = value;
333
+ has = true;
334
+ }, () => { }, failure);
335
+ while (true) {
336
+ if (failure.failed)
337
+ throw failure.error;
338
+ const result = await Promise.race([pull(trig), failure.promise]);
339
+ if (result.done)
340
+ return;
341
+ if (failure.failed)
342
+ throw failure.error;
343
+ if (has)
344
+ yield latest;
345
+ }
346
+ }
347
+ finally {
348
+ stopped = true;
349
+ unlisten();
350
+ await closeAll([src, trig]);
351
+ }
352
+ };
353
+ //# sourceMappingURL=combine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combine.js","sourceRoot":"","sources":["../src/combine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAsB,cAAc,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAEL,QAAQ,EACR,aAAa,EAEb,OAAO,EAEP,WAAW,EACX,IAAI,EACJ,MAAM,GACP,MAAM,eAAe,CAAC;AAWvB,MAAM,SAAS,GAAG,CAAC,KAAc,EAAW,EAAE,CAC5C,OAAO,KAAK,KAAK,QAAQ;IACzB,KAAK,KAAK,IAAI;IACd,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC;IAC3B,CAAC,CAAC,MAAM,CAAC,aAAa,IAAK,KAAgB,CAAC,CAAC;AAE/C;;;;GAIG;AACH,MAAM,IAAI,GAAG,KAAK,EAChB,KAAe,EACf,SAAwB,EACxB,OAA2B,EAC3B,KAAiB,EACjB,OAAgB,EACD,EAAE;IACjB,IAAI,CAAC;QACH,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,SAAS,EAAE;gBAAE,OAAO;YACxB,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChB,KAAK,EAAE,CAAC;gBACR,OAAO;YACT,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC,CAAC;AAEF,kEAAkE;AAClE,MAAM,OAAO,GAAG,CAAC,MAAqB,EAA2E,EAAE;IACjH,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1F,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO;QACL,OAAO,EAAE,KAAK;QACd,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAE,MAA+C,CAAC,GAAG,CAAyB,CAAC;KAC5G,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,OAAgB,EAAE,IAAc,EAAE,MAAiB,EAAO,EAAE;IAC9E,IAAI,OAAO;QAAE,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;IACnC,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACtB,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAuBF,MAAM,UAAU,UAAU,CAAI,GAAG,IAA2C;IAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,GAAG,EAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,OAAO,SAAS,CAAC,IAA6B,EAAE,OAAO,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,SAAS,GAAG,KAAK,SAAS,CAAC,EAAK,MAA6B,EAAE,EAAE,MAAM,EAAiB;IAC5F,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,+DAA+D;IAC/D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgD,CAAC;IACxE,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAa,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAA+B,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACvG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,iDAAiD;QACzE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC;IACF,IAAI,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACvB,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;QACH,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;QACpB,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,OAAO,CAAC,MAAM;gBAAE,MAAM,OAAO,CAAC,KAAK,CAAC;YACxC,iEAAiE;YACjE,6DAA6D;YAC7D,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;YACnF,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACpE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YAChG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAClB,UAAU,GAAG,CAAC,CAAC;YACf,IAAI,MAAM,CAAC,IAAI;gBAAE,SAAS;YAC1B,MAAM,MAAM,CAAC,KAAK,CAAC;YACnB,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC;QACD,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,OAAO,CAAC,KAAK,CAAC;IAC1C,CAAC;YAAS,CAAC;QACT,QAAQ,EAAE,CAAC;QACX,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CAAC;AAmBF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,SAAS,CAAC,EAC/C,MAAS,EACT,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,GAAG,KAAK,KAA8B,EAAE;IAEhE,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,MAAM,MAAM,GAAc,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,GAAG,GAAc,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YACtB,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,CAAC,CAAC,GAAI,OAAmC,CAAC,GAAG,CAAC,CAAC;gBACtD,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QAC9C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3B,KAAK,IAAI,CACP,KAAK,EACL,GAAG,EAAE,CAAC,OAAO,EACb,CAAC,KAAK,EAAE,EAAE;gBACR,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;gBAClB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;gBACd,KAAK,GAAG,IAAI,CAAC;gBACb,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,CAAC,EACD,GAAG,EAAE;gBACH,IAAI,KAAK,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;oBAAE,KAAK,GAAG,IAAI,CAAC;gBAC7E,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,CAAC,EACD,OAAO,CACR,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,MAAM;gBAAE,MAAM,OAAO,CAAC,KAAK,CAAC;YACxC,IAAI,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChC,KAAK,GAAG,KAAK,CAAC;gBACd,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;gBACxC,SAAS;YACX,CAAC;YACD,IAAI,KAAK;gBAAE,OAAO;YAClB,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,GAAG,IAAI,CAAC;QACf,QAAQ,EAAE,CAAC;QACX,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,SAAS,CAAC,EAChD,MAAsB,EACtB,MAAS,EACT,EAAE,MAAM,KAAoB,EAAE;IAE9B,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,MAAM,GAAc,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,GAAG,GAAc,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3B,KAAK,IAAI,CACP,KAAK,EACL,GAAG,EAAE,CAAC,OAAO,EACb,CAAC,KAAK,EAAE,EAAE;gBACR,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;gBAClB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YAChB,CAAC,EACD,GAAG,EAAE,GAAE,CAAC,EACR,OAAO,CACR,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,MAAM;gBAAE,MAAM,OAAO,CAAC,KAAK,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YAChE,IAAI,MAAM,CAAC,IAAI;gBAAE,OAAO;YACxB,IAAI,OAAO,CAAC,MAAM;gBAAE,MAAM,OAAO,CAAC,KAAK,CAAC;YACxC,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;gBAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,GAAG,IAAI,CAAC;QACf,QAAQ,EAAE,CAAC;QACX,MAAM,QAAQ,CAAC,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IACpC,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,SAAS,CAAC,EACxC,QAAwB,EACxB,EAAE,MAAM,KAAoB,EAAE;IAE9B,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QAC9C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,MAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,KAAK,IAAI,CACP,KAAK,EACL,GAAG,EAAE,CAAC,OAAO,EACb,CAAC,KAAK,EAAE,EAAE;YACR,MAAM,GAAG,KAAK,CAAC;YACf,KAAK,GAAG,IAAI,CAAC;YACb,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,CAAC,EACD,GAAG,EAAE;YACH,KAAK,GAAG,IAAI,CAAC;YACb,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,CAAC,EACD,OAAO,CACR,CAAC;QACF,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,MAAM;gBAAE,MAAM,OAAO,CAAC,KAAK,CAAC;YACxC,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,KAAK,GAAG,MAAW,CAAC;gBAC1B,KAAK,GAAG,KAAK,CAAC;gBACd,MAAM,GAAG,SAAS,CAAC,CAAC,gDAAgD;gBACpE,MAAM,KAAK,CAAC;gBACZ,SAAS;YACX,CAAC;YACD,IAAI,KAAK;gBAAE,OAAO;YAClB,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,GAAG,IAAI,CAAC;QACf,QAAQ,EAAE,CAAC;QACX,MAAM,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,SAAS,CAAC,EACxC,MAAsB,EACtB,OAA6B,EAC7B,EAAE,MAAM,KAAoB,EAAE;IAE9B,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,IAAI,MAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,KAAK,IAAI,CACP,GAAG,EACH,GAAG,EAAE,CAAC,OAAO,EACb,CAAC,KAAK,EAAE,EAAE;YACR,MAAM,GAAG,KAAK,CAAC;YACf,GAAG,GAAG,IAAI,CAAC;QACb,CAAC,EACD,GAAG,EAAE,GAAE,CAAC,EACR,OAAO,CACR,CAAC;QACF,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,MAAM;gBAAE,MAAM,OAAO,CAAC,KAAK,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YACjE,IAAI,MAAM,CAAC,IAAI;gBAAE,OAAO;YACxB,IAAI,OAAO,CAAC,MAAM;gBAAE,MAAM,OAAO,CAAC,KAAK,CAAC;YACxC,IAAI,GAAG;gBAAE,MAAM,MAAW,CAAC;QAC7B,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,GAAG,IAAI,CAAC;QACf,QAAQ,EAAE,CAAC;QACX,MAAM,QAAQ,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./abort.ts";
2
2
  export * from "./async-channel.ts";
3
+ export * from "./combine.ts";
3
4
  export * from "./concurrency.ts";
4
5
  export * from "./consumers.ts";
5
6
  export * from "./count.ts";
@@ -9,6 +10,7 @@ export * from "./is-iterator.ts";
9
10
  export * from "./iterator-tools.ts";
10
11
  export * from "./itertools.ts";
11
12
  export * from "./tee.ts";
13
+ export * from "./time.ts";
12
14
  export * from "./transduce.ts";
13
15
  import * as channelDecorators from "./channel-decorators.ts";
14
16
  import * as transducers from "./transducers.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAE/B,OAAO,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAE/B,OAAO,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./abort.js";
2
2
  export * from "./async-channel.js";
3
+ export * from "./combine.js";
3
4
  export * from "./concurrency.js";
4
5
  export * from "./consumers.js";
5
6
  export * from "./count.js";
@@ -9,6 +10,7 @@ export * from "./is-iterator.js";
9
10
  export * from "./iterator-tools.js";
10
11
  export * from "./itertools.js";
11
12
  export * from "./tee.js";
13
+ export * from "./time.js";
12
14
  export * from "./transduce.js";
13
15
  import * as channelDecorators from "./channel-decorators.js";
14
16
  import * as transducers from "./transducers.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAE/B,OAAO,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAE/B,OAAO,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Internal plumbing shared by combine.ts, time.ts and the zip fixes.
3
+ * Not re-exported from index.ts and not in the package `exports` map.
4
+ * @ignore
5
+ */
6
+ export type AnyIterable<T> = AsyncIterable<T> | Iterable<T>;
7
+ export type AnyIterator<T> = AsyncIterator<T> | Iterator<T>;
8
+ /** Get an iterator from an async or sync iterable (async preferred). */
9
+ export declare const getIterator: <T>(iterable: AnyIterable<T>) => AnyIterator<T>;
10
+ /** The reason an aborted signal carries ("AbortError" DOMException by default). */
11
+ export declare const abortReason: (signal: AbortSignal) => unknown;
12
+ /**
13
+ * Call `onAbort(reason)` once when `signal` aborts (immediately if it
14
+ * already has). Returns a function that removes the listener.
15
+ */
16
+ export declare const listenAbort: (signal: AbortSignal | undefined, onAbort: (reason: unknown) => void) => (() => void);
17
+ /**
18
+ * A one-shot failure latch: `fail(error)` records the first error and
19
+ * rejects `promise` with it. `promise` is pre-handled, so it never surfaces
20
+ * as an unhandled rejection; race it against a pending read to wake up on
21
+ * failure.
22
+ */
23
+ export interface Failure {
24
+ failed: boolean;
25
+ error: unknown;
26
+ promise: Promise<never>;
27
+ fail(error: unknown): void;
28
+ }
29
+ export declare const createFailure: () => Failure;
30
+ /** A reusable wake-up: `wait()` resolves on the next `wake()`. */
31
+ export declare class Wakeup {
32
+ #private;
33
+ wait(): Promise<void>;
34
+ wake(): void;
35
+ }
36
+ /** An input iterator plus the state needed to close it correctly. */
37
+ export interface Entry<T> {
38
+ it: AnyIterator<T>;
39
+ /** Ended, errored, or already closed: never call return() on it. */
40
+ done: boolean;
41
+ /** A next() call is outstanding. */
42
+ inFlight: boolean;
43
+ }
44
+ export declare const entryOf: <T>(iterable: AnyIterable<T>) => Entry<T>;
45
+ /**
46
+ * Call `next()` on an entry, tracking `inFlight`/`done`. A synchronous
47
+ * throw from `next()` becomes a rejection. An input whose `next()` rejects
48
+ * or throws is marked done (the iterator protocol does not call return()
49
+ * on an iterator that threw).
50
+ */
51
+ export declare const pull: <T>(entry: Entry<T>) => Promise<IteratorResult<T>>;
52
+ /**
53
+ * Close (`return()`) every entry that has not ended. Entries with no
54
+ * outstanding `next()` are awaited, so their cleanup has finished when
55
+ * this resolves. Entries with a `next()` still in flight are closed
56
+ * fire-and-forget: an async generator queues `return()` behind its pending
57
+ * `next()`, so awaiting it would hang on a stalled source (the case that
58
+ * aborting is for). Errors from `return()` are swallowed.
59
+ */
60
+ export declare const closeAll: (entries: Iterable<Entry<unknown>>) => Promise<void>;
61
+ /** Synchronous counterpart of closeAll, for sync iterators. */
62
+ export declare const closeAllSync: (entries: Iterable<{
63
+ it: Iterator<unknown>;
64
+ done: boolean;
65
+ }>) => void;
66
+ //# sourceMappingURL=internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5D,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAI5D,wEAAwE;AACxE,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,UAAU,WAAW,CAAC,CAAC,CAAC,KAAG,WAAW,CAAC,CAAC,CAGrB,CAAC;AAEnD,mFAAmF;AACnF,eAAO,MAAM,WAAW,GAAI,QAAQ,WAAW,KAAG,OAC6B,CAAC;AAEhF;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,WAAW,GAAG,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,KAAG,CAAC,MAAM,IAAI,CAS5G,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B;AAED,eAAO,MAAM,aAAa,QAAO,OAkBhC,CAAC;AAEF,kEAAkE;AAClE,qBAAa,MAAM;;IAGjB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrB,IAAI,IAAI,IAAI;CAMb;AAED,qEAAqE;AACrE,MAAM,WAAW,KAAK,CAAC,CAAC;IACtB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACnB,oEAAoE;IACpE,IAAI,EAAE,OAAO,CAAC;IACd,oCAAoC;IACpC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,UAAU,WAAW,CAAC,CAAC,CAAC,KAAG,KAAK,CAAC,CAAC,CAI3D,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAclE,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,GAAU,SAAS,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,CAgB9E,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,YAAY,GAAI,SAAS,QAAQ,CAAC;IAAE,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,KAAG,IAU1F,CAAC"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Internal plumbing shared by combine.ts, time.ts and the zip fixes.
3
+ * Not re-exported from index.ts and not in the package `exports` map.
4
+ * @ignore
5
+ */
6
+ const noop = () => { };
7
+ /** Get an iterator from an async or sync iterable (async preferred). */
8
+ export const getIterator = (iterable) => Symbol.asyncIterator in Object(iterable)
9
+ ? iterable[Symbol.asyncIterator]()
10
+ : iterable[Symbol.iterator]();
11
+ /** The reason an aborted signal carries ("AbortError" DOMException by default). */
12
+ export const abortReason = (signal) => signal.reason ?? new DOMException("This operation was aborted", "AbortError");
13
+ /**
14
+ * Call `onAbort(reason)` once when `signal` aborts (immediately if it
15
+ * already has). Returns a function that removes the listener.
16
+ */
17
+ export const listenAbort = (signal, onAbort) => {
18
+ if (!signal)
19
+ return noop;
20
+ if (signal.aborted) {
21
+ onAbort(abortReason(signal));
22
+ return noop;
23
+ }
24
+ const listener = () => onAbort(abortReason(signal));
25
+ signal.addEventListener("abort", listener, { once: true });
26
+ return () => signal.removeEventListener("abort", listener);
27
+ };
28
+ export const createFailure = () => {
29
+ let reject;
30
+ const promise = new Promise((_, r) => {
31
+ reject = r;
32
+ });
33
+ promise.catch(noop);
34
+ const failure = {
35
+ failed: false,
36
+ error: undefined,
37
+ promise,
38
+ fail(error) {
39
+ if (failure.failed)
40
+ return;
41
+ failure.failed = true;
42
+ failure.error = error;
43
+ reject(error);
44
+ },
45
+ };
46
+ return failure;
47
+ };
48
+ /** A reusable wake-up: `wait()` resolves on the next `wake()`. */
49
+ export class Wakeup {
50
+ #promise;
51
+ #resolve;
52
+ wait() {
53
+ if (!this.#promise) {
54
+ this.#promise = new Promise((resolve) => {
55
+ this.#resolve = resolve;
56
+ });
57
+ }
58
+ return this.#promise;
59
+ }
60
+ wake() {
61
+ const resolve = this.#resolve;
62
+ this.#promise = undefined;
63
+ this.#resolve = undefined;
64
+ resolve?.();
65
+ }
66
+ }
67
+ export const entryOf = (iterable) => ({
68
+ it: getIterator(iterable),
69
+ done: false,
70
+ inFlight: false,
71
+ });
72
+ /**
73
+ * Call `next()` on an entry, tracking `inFlight`/`done`. A synchronous
74
+ * throw from `next()` becomes a rejection. An input whose `next()` rejects
75
+ * or throws is marked done (the iterator protocol does not call return()
76
+ * on an iterator that threw).
77
+ */
78
+ export const pull = (entry) => {
79
+ entry.inFlight = true;
80
+ return new Promise((resolve) => resolve(entry.it.next())).then((result) => {
81
+ entry.inFlight = false;
82
+ if (result.done)
83
+ entry.done = true;
84
+ return result;
85
+ }, (error) => {
86
+ entry.inFlight = false;
87
+ entry.done = true;
88
+ throw error;
89
+ });
90
+ };
91
+ /**
92
+ * Close (`return()`) every entry that has not ended. Entries with no
93
+ * outstanding `next()` are awaited, so their cleanup has finished when
94
+ * this resolves. Entries with a `next()` still in flight are closed
95
+ * fire-and-forget: an async generator queues `return()` behind its pending
96
+ * `next()`, so awaiting it would hang on a stalled source (the case that
97
+ * aborting is for). Errors from `return()` are swallowed.
98
+ */
99
+ export const closeAll = async (entries) => {
100
+ const waits = [];
101
+ for (const entry of entries) {
102
+ if (entry.done)
103
+ continue;
104
+ entry.done = true;
105
+ if (typeof entry.it.return !== "function")
106
+ continue;
107
+ let result;
108
+ try {
109
+ result = entry.it.return();
110
+ }
111
+ catch {
112
+ continue;
113
+ }
114
+ const settled = Promise.resolve(result).then(noop, noop);
115
+ if (!entry.inFlight)
116
+ waits.push(settled);
117
+ }
118
+ await Promise.all(waits);
119
+ };
120
+ /** Synchronous counterpart of closeAll, for sync iterators. */
121
+ export const closeAllSync = (entries) => {
122
+ for (const entry of entries) {
123
+ if (entry.done)
124
+ continue;
125
+ entry.done = true;
126
+ try {
127
+ entry.it.return?.();
128
+ }
129
+ catch {
130
+ // Cleanup is best-effort; the original completion (or error) wins.
131
+ }
132
+ }
133
+ };
134
+ //# sourceMappingURL=internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,19 @@ export { HALT as HAULT };
24
24
  export interface ReducerStep<in In> {
25
25
  (buffer: unknown[], item: In, iterator?: Iterable<In> | AsyncIterable<In>): unknown[] | Halt;
26
26
  complete?: (buffer: unknown[]) => unknown[];
27
+ /**
28
+ * What this step (and the steps after it) keep between calls: a half-full
29
+ * `group`, `partitionBy`'s open run, `accumulate`'s running value,
30
+ * `dedupe`'s last key. Steps that keep nothing omit it. Cascades like
31
+ * `complete`.
32
+ */
33
+ held?: () => unknown[];
34
+ /**
35
+ * Let go of the held items for which `predicate` is true, and return how
36
+ * many were let go. It never emits, and never changes what is later
37
+ * emitted beyond leaving the dropped items out. Cascades like `complete`.
38
+ */
39
+ drop?: (predicate: (held: unknown) => boolean) => number;
27
40
  }
28
41
  /**
29
42
  * A transducer: transforms a step that consumes `Out` items into a step
@@ -1 +1 @@
1
- {"version":3,"file":"iterator-tools.d.ts","sourceRoot":"","sources":["../src/iterator-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"iterator-tools.d.ts","sourceRoot":"","sources":["../src/iterator-tools.ts"],"names":[],"mappings":"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"}