evnty 5.0.0 → 5.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.
- package/README.md +28 -28
- package/build/async.cjs +101 -0
- package/build/async.cjs.map +1 -0
- package/build/async.d.ts +37 -0
- package/build/async.js +83 -0
- package/build/async.js.map +1 -0
- package/build/broadcast.cjs +205 -0
- package/build/broadcast.cjs.map +1 -0
- package/build/broadcast.d.ts +164 -0
- package/build/broadcast.js +184 -0
- package/build/broadcast.js.map +1 -0
- package/build/dispatch-result.cjs +154 -0
- package/build/dispatch-result.cjs.map +1 -0
- package/build/dispatch-result.d.ts +49 -0
- package/build/dispatch-result.js +127 -0
- package/build/dispatch-result.js.map +1 -0
- package/build/event.cjs +92 -127
- package/build/event.cjs.map +1 -1
- package/build/event.d.ts +92 -167
- package/build/event.js +90 -122
- package/build/event.js.map +1 -1
- package/build/index.cjs +3 -1
- package/build/index.cjs.map +1 -1
- package/build/index.d.ts +3 -1
- package/build/index.js +3 -1
- package/build/index.js.map +1 -1
- package/build/iterator.cjs +578 -91
- package/build/iterator.cjs.map +1 -1
- package/build/iterator.d.ts +178 -7
- package/build/iterator.js +579 -92
- package/build/iterator.js.map +1 -1
- package/build/listener-registry.cjs +114 -0
- package/build/listener-registry.cjs.map +1 -0
- package/build/listener-registry.d.ts +54 -0
- package/build/listener-registry.js +104 -0
- package/build/listener-registry.js.map +1 -0
- package/build/ring-buffer.cjs +171 -0
- package/build/ring-buffer.cjs.map +1 -0
- package/build/ring-buffer.d.ts +80 -0
- package/build/ring-buffer.js +161 -0
- package/build/ring-buffer.js.map +1 -0
- package/build/sequence.cjs +34 -35
- package/build/sequence.cjs.map +1 -1
- package/build/sequence.d.ts +38 -24
- package/build/sequence.js +34 -35
- package/build/sequence.js.map +1 -1
- package/build/signal.cjs +26 -35
- package/build/signal.cjs.map +1 -1
- package/build/signal.d.ts +36 -39
- package/build/signal.js +26 -35
- package/build/signal.js.map +1 -1
- package/build/types.cjs +0 -11
- package/build/types.cjs.map +1 -1
- package/build/types.d.ts +86 -9
- package/build/types.js +1 -5
- package/build/types.js.map +1 -1
- package/build/utils.cjs +202 -22
- package/build/utils.cjs.map +1 -1
- package/build/utils.d.ts +85 -26
- package/build/utils.js +181 -22
- package/build/utils.js.map +1 -1
- package/package.json +27 -25
- package/src/__tests__/example.js +19 -24
- package/src/index.ts +3 -1
- package/build/callable.cjs +0 -72
- package/build/callable.cjs.map +0 -1
- package/build/callable.d.ts +0 -34
- package/build/callable.js +0 -51
- package/build/callable.js.map +0 -1
package/build/iterator.cjs
CHANGED
|
@@ -9,131 +9,618 @@ Object.defineProperty(exports, "AsyncIteratorObject", {
|
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
11
|
const _utilscjs = require("./utils.cjs");
|
|
12
|
-
|
|
12
|
+
class OpState {
|
|
13
|
+
index;
|
|
14
|
+
remaining;
|
|
15
|
+
dropping;
|
|
16
|
+
value;
|
|
17
|
+
initialized = false;
|
|
18
|
+
constructor(index, remaining, dropping, value){
|
|
19
|
+
this.index = index;
|
|
20
|
+
this.remaining = remaining;
|
|
21
|
+
this.dropping = dropping;
|
|
22
|
+
this.value = value;
|
|
23
|
+
}
|
|
24
|
+
static from(op) {
|
|
25
|
+
switch(op.kind){
|
|
26
|
+
case 5:
|
|
27
|
+
return new OpState(op.start, 0, false, undefined);
|
|
28
|
+
case 6:
|
|
29
|
+
return new OpState(0, op.limit, false, undefined);
|
|
30
|
+
case 7:
|
|
31
|
+
return new OpState(0, op.count, false, undefined);
|
|
32
|
+
case 9:
|
|
33
|
+
return new OpState(0, 0, true, undefined);
|
|
34
|
+
case 10:
|
|
35
|
+
return new OpState(0, 0, false, op.init);
|
|
36
|
+
default:
|
|
37
|
+
return new OpState(0, 0, false, undefined);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
class ProcessResult {
|
|
42
|
+
value;
|
|
43
|
+
shouldYield;
|
|
44
|
+
done;
|
|
45
|
+
expandIterator;
|
|
46
|
+
expandOpIndex;
|
|
47
|
+
flatMapIterator;
|
|
48
|
+
flatMapOpIndex;
|
|
49
|
+
constructor(value, shouldYield, done, expandIterator, expandOpIndex, flatMapIterator, flatMapOpIndex){
|
|
50
|
+
this.value = value;
|
|
51
|
+
this.shouldYield = shouldYield;
|
|
52
|
+
this.done = done;
|
|
53
|
+
this.expandIterator = expandIterator;
|
|
54
|
+
this.expandOpIndex = expandOpIndex;
|
|
55
|
+
this.flatMapIterator = flatMapIterator;
|
|
56
|
+
this.flatMapOpIndex = flatMapOpIndex;
|
|
57
|
+
}
|
|
58
|
+
static continue() {
|
|
59
|
+
return new ProcessResult(undefined, false, false, null, -1, null, -1);
|
|
60
|
+
}
|
|
61
|
+
static yield(value) {
|
|
62
|
+
return new ProcessResult(value, true, false, null, -1, null, -1);
|
|
63
|
+
}
|
|
64
|
+
static done() {
|
|
65
|
+
return new ProcessResult(undefined, false, true, null, -1, null, -1);
|
|
66
|
+
}
|
|
67
|
+
static expand(iterator, opIndex) {
|
|
68
|
+
return new ProcessResult(undefined, false, false, iterator, opIndex, null, -1);
|
|
69
|
+
}
|
|
70
|
+
static flatMap(iterator, opIndex) {
|
|
71
|
+
return new ProcessResult(undefined, false, false, null, -1, iterator, opIndex);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function findTakeStates(ops, opStates) {
|
|
75
|
+
const takeStates = [];
|
|
76
|
+
for(let i = 0; i < ops.length; i++){
|
|
77
|
+
if (ops[i].kind === 6) takeStates.push(opStates[i]);
|
|
78
|
+
}
|
|
79
|
+
return takeStates;
|
|
80
|
+
}
|
|
81
|
+
function hasExpandingOps(ops) {
|
|
82
|
+
for(let i = 0; i < ops.length; i++){
|
|
83
|
+
const kind = ops[i].kind;
|
|
84
|
+
if (kind === 11 || kind === 12) return true;
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
function checkTakeExhausted(takeStates) {
|
|
89
|
+
for(let i = 0; i < takeStates.length; i++){
|
|
90
|
+
if (takeStates[i].remaining <= 0) return true;
|
|
91
|
+
}
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
async function processOps(inputValue, ops, opStates, startIndex) {
|
|
95
|
+
let value = inputValue;
|
|
96
|
+
for(let i = startIndex; i < ops.length; i++){
|
|
97
|
+
const op = ops[i];
|
|
98
|
+
const state = opStates[i];
|
|
99
|
+
switch(op.kind){
|
|
100
|
+
case 0:
|
|
101
|
+
value = op.fn(value, state.index++);
|
|
102
|
+
break;
|
|
103
|
+
case 1:
|
|
104
|
+
{
|
|
105
|
+
const result = op.fn(value, state.index++);
|
|
106
|
+
const passed = (0, _utilscjs.isThenable)(result) ? await result : result;
|
|
107
|
+
if (!passed) return ProcessResult.continue();
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
case 2:
|
|
111
|
+
{
|
|
112
|
+
const result = op.fn(value, state.index++);
|
|
113
|
+
const resolved = (0, _utilscjs.isThenable)(result) ? await result : result;
|
|
114
|
+
if (resolved === undefined) return ProcessResult.continue();
|
|
115
|
+
value = resolved;
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
case 3:
|
|
119
|
+
value = await value;
|
|
120
|
+
break;
|
|
121
|
+
case 4:
|
|
122
|
+
{
|
|
123
|
+
const result = op.fn(value, state.index++);
|
|
124
|
+
if ((0, _utilscjs.isThenable)(result)) await result;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
case 5:
|
|
128
|
+
value = [
|
|
129
|
+
state.index++,
|
|
130
|
+
value
|
|
131
|
+
];
|
|
132
|
+
break;
|
|
133
|
+
case 6:
|
|
134
|
+
if (state.remaining <= 0) return ProcessResult.done();
|
|
135
|
+
state.remaining--;
|
|
136
|
+
break;
|
|
137
|
+
case 8:
|
|
138
|
+
{
|
|
139
|
+
const result = op.fn(value, state.index++);
|
|
140
|
+
const passed = (0, _utilscjs.isThenable)(result) ? await result : result;
|
|
141
|
+
if (!passed) return ProcessResult.done();
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
case 7:
|
|
145
|
+
if (state.remaining > 0) {
|
|
146
|
+
state.remaining--;
|
|
147
|
+
return ProcessResult.continue();
|
|
148
|
+
}
|
|
149
|
+
break;
|
|
150
|
+
case 9:
|
|
151
|
+
if (state.dropping) {
|
|
152
|
+
const result = op.fn(value, state.index++);
|
|
153
|
+
const passed = (0, _utilscjs.isThenable)(result) ? await result : result;
|
|
154
|
+
if (passed) return ProcessResult.continue();
|
|
155
|
+
state.dropping = false;
|
|
156
|
+
}
|
|
157
|
+
break;
|
|
158
|
+
case 10:
|
|
159
|
+
{
|
|
160
|
+
if (!state.initialized) {
|
|
161
|
+
state.initialized = true;
|
|
162
|
+
if (op.hasInit) {
|
|
163
|
+
const result = op.fn(state.value, value, state.index++);
|
|
164
|
+
state.value = (0, _utilscjs.isThenable)(result) ? await result : result;
|
|
165
|
+
value = state.value;
|
|
166
|
+
} else {
|
|
167
|
+
state.value = value;
|
|
168
|
+
return ProcessResult.continue();
|
|
169
|
+
}
|
|
170
|
+
} else {
|
|
171
|
+
const result = op.fn(state.value, value, state.index++);
|
|
172
|
+
state.value = (0, _utilscjs.isThenable)(result) ? await result : result;
|
|
173
|
+
value = state.value;
|
|
174
|
+
}
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
case 11:
|
|
178
|
+
{
|
|
179
|
+
const iterable = op.fn(value, state.index++);
|
|
180
|
+
return ProcessResult.flatMap(iterable[Symbol.asyncIterator](), i);
|
|
181
|
+
}
|
|
182
|
+
case 12:
|
|
183
|
+
{
|
|
184
|
+
const result = op.fn(value, state.index++);
|
|
185
|
+
const expanded = (0, _utilscjs.isThenable)(result) ? await result : result;
|
|
186
|
+
return ProcessResult.expand(expanded[Symbol.iterator](), i);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return ProcessResult.yield(value);
|
|
191
|
+
}
|
|
192
|
+
async function processOpsSimple(inputValue, ops, opStates) {
|
|
193
|
+
let value = inputValue;
|
|
194
|
+
for(let i = 0; i < ops.length; i++){
|
|
195
|
+
const op = ops[i];
|
|
196
|
+
const state = opStates[i];
|
|
197
|
+
switch(op.kind){
|
|
198
|
+
case 0:
|
|
199
|
+
value = op.fn(value, state.index++);
|
|
200
|
+
break;
|
|
201
|
+
case 1:
|
|
202
|
+
{
|
|
203
|
+
const result = op.fn(value, state.index++);
|
|
204
|
+
const passed = (0, _utilscjs.isThenable)(result) ? await result : result;
|
|
205
|
+
if (!passed) return {
|
|
206
|
+
value: undefined,
|
|
207
|
+
shouldYield: false,
|
|
208
|
+
done: false
|
|
209
|
+
};
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
case 2:
|
|
213
|
+
{
|
|
214
|
+
const result = op.fn(value, state.index++);
|
|
215
|
+
const resolved = (0, _utilscjs.isThenable)(result) ? await result : result;
|
|
216
|
+
if (resolved === undefined) return {
|
|
217
|
+
value: undefined,
|
|
218
|
+
shouldYield: false,
|
|
219
|
+
done: false
|
|
220
|
+
};
|
|
221
|
+
value = resolved;
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
case 3:
|
|
225
|
+
value = await value;
|
|
226
|
+
break;
|
|
227
|
+
case 4:
|
|
228
|
+
{
|
|
229
|
+
const result = op.fn(value, state.index++);
|
|
230
|
+
if ((0, _utilscjs.isThenable)(result)) await result;
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
case 5:
|
|
234
|
+
value = [
|
|
235
|
+
state.index++,
|
|
236
|
+
value
|
|
237
|
+
];
|
|
238
|
+
break;
|
|
239
|
+
case 6:
|
|
240
|
+
state.remaining--;
|
|
241
|
+
break;
|
|
242
|
+
case 8:
|
|
243
|
+
{
|
|
244
|
+
const result = op.fn(value, state.index++);
|
|
245
|
+
const passed = (0, _utilscjs.isThenable)(result) ? await result : result;
|
|
246
|
+
if (!passed) return {
|
|
247
|
+
value: undefined,
|
|
248
|
+
shouldYield: false,
|
|
249
|
+
done: true
|
|
250
|
+
};
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
case 7:
|
|
254
|
+
if (state.remaining > 0) {
|
|
255
|
+
state.remaining--;
|
|
256
|
+
return {
|
|
257
|
+
value: undefined,
|
|
258
|
+
shouldYield: false,
|
|
259
|
+
done: false
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
break;
|
|
263
|
+
case 9:
|
|
264
|
+
if (state.dropping) {
|
|
265
|
+
const result = op.fn(value, state.index++);
|
|
266
|
+
const passed = (0, _utilscjs.isThenable)(result) ? await result : result;
|
|
267
|
+
if (passed) return {
|
|
268
|
+
value: undefined,
|
|
269
|
+
shouldYield: false,
|
|
270
|
+
done: false
|
|
271
|
+
};
|
|
272
|
+
state.dropping = false;
|
|
273
|
+
}
|
|
274
|
+
break;
|
|
275
|
+
case 10:
|
|
276
|
+
{
|
|
277
|
+
if (!state.initialized) {
|
|
278
|
+
state.initialized = true;
|
|
279
|
+
if (op.hasInit) {
|
|
280
|
+
const result = op.fn(state.value, value, state.index++);
|
|
281
|
+
state.value = (0, _utilscjs.isThenable)(result) ? await result : result;
|
|
282
|
+
value = state.value;
|
|
283
|
+
} else {
|
|
284
|
+
state.value = value;
|
|
285
|
+
return {
|
|
286
|
+
value: undefined,
|
|
287
|
+
shouldYield: false,
|
|
288
|
+
done: false
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
} else {
|
|
292
|
+
const result = op.fn(state.value, value, state.index++);
|
|
293
|
+
state.value = (0, _utilscjs.isThenable)(result) ? await result : result;
|
|
294
|
+
value = state.value;
|
|
295
|
+
}
|
|
296
|
+
break;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return {
|
|
301
|
+
value,
|
|
302
|
+
shouldYield: true,
|
|
303
|
+
done: false
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
function collectOps(iter) {
|
|
307
|
+
const ops = [];
|
|
308
|
+
let current = iter;
|
|
309
|
+
while(current){
|
|
310
|
+
const op = current.op;
|
|
311
|
+
if (op) ops.push(op);
|
|
312
|
+
current = current.parent;
|
|
313
|
+
}
|
|
314
|
+
ops.reverse();
|
|
315
|
+
return ops;
|
|
316
|
+
}
|
|
317
|
+
function getSource(iter) {
|
|
318
|
+
let current = iter;
|
|
319
|
+
while(current.parent){
|
|
320
|
+
current = current.parent;
|
|
321
|
+
}
|
|
322
|
+
return current.iterable;
|
|
323
|
+
}
|
|
324
|
+
function createSimpleIterable(source, ops) {
|
|
325
|
+
return {
|
|
326
|
+
[Symbol.asyncIterator]: ()=>{
|
|
327
|
+
const iterator = source[Symbol.asyncIterator]();
|
|
328
|
+
const opStates = ops.map(OpState.from);
|
|
329
|
+
const takeStates = findTakeStates(ops, opStates);
|
|
330
|
+
let done = false;
|
|
331
|
+
return {
|
|
332
|
+
async next () {
|
|
333
|
+
while(!done){
|
|
334
|
+
if (checkTakeExhausted(takeStates)) {
|
|
335
|
+
done = true;
|
|
336
|
+
await iterator.return?.();
|
|
337
|
+
return {
|
|
338
|
+
value: undefined,
|
|
339
|
+
done: true
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
const sourceResult = await iterator.next();
|
|
343
|
+
if (sourceResult.done) {
|
|
344
|
+
done = true;
|
|
345
|
+
return {
|
|
346
|
+
value: undefined,
|
|
347
|
+
done: true
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
const result = await processOpsSimple(sourceResult.value, ops, opStates);
|
|
351
|
+
if (result.done) {
|
|
352
|
+
done = true;
|
|
353
|
+
await iterator.return?.();
|
|
354
|
+
return {
|
|
355
|
+
value: undefined,
|
|
356
|
+
done: true
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
if (result.shouldYield) return {
|
|
360
|
+
value: result.value,
|
|
361
|
+
done: false
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
return {
|
|
365
|
+
value: undefined,
|
|
366
|
+
done: true
|
|
367
|
+
};
|
|
368
|
+
},
|
|
369
|
+
async return (returnValue) {
|
|
370
|
+
done = true;
|
|
371
|
+
await iterator.return?.(returnValue);
|
|
372
|
+
return {
|
|
373
|
+
value: undefined,
|
|
374
|
+
done: true
|
|
375
|
+
};
|
|
376
|
+
},
|
|
377
|
+
async throw (error) {
|
|
378
|
+
done = true;
|
|
379
|
+
if (iterator.throw) {
|
|
380
|
+
await iterator.throw(error);
|
|
381
|
+
}
|
|
382
|
+
throw error;
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
function createExpandingIterable(source, ops) {
|
|
389
|
+
return {
|
|
390
|
+
[Symbol.asyncIterator]: ()=>{
|
|
391
|
+
const iterator = source[Symbol.asyncIterator]();
|
|
392
|
+
const opStates = ops.map(OpState.from);
|
|
393
|
+
const takeStates = findTakeStates(ops, opStates);
|
|
394
|
+
let done = false;
|
|
395
|
+
const innerStack = [];
|
|
396
|
+
const closeInnerIterators = async ()=>{
|
|
397
|
+
for (const frame of innerStack){
|
|
398
|
+
if (frame.type === 'flatMap') {
|
|
399
|
+
await frame.iterator.return?.();
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
innerStack.length = 0;
|
|
403
|
+
};
|
|
404
|
+
const handleResult = async (result)=>{
|
|
405
|
+
if (result.done) {
|
|
406
|
+
done = true;
|
|
407
|
+
await closeInnerIterators();
|
|
408
|
+
await iterator.return?.();
|
|
409
|
+
return {
|
|
410
|
+
value: undefined,
|
|
411
|
+
done: true
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
if (result.expandIterator) {
|
|
415
|
+
innerStack.push({
|
|
416
|
+
type: 'expand',
|
|
417
|
+
iterator: result.expandIterator,
|
|
418
|
+
opIndex: result.expandOpIndex
|
|
419
|
+
});
|
|
420
|
+
return null;
|
|
421
|
+
}
|
|
422
|
+
if (result.flatMapIterator) {
|
|
423
|
+
innerStack.push({
|
|
424
|
+
type: 'flatMap',
|
|
425
|
+
iterator: result.flatMapIterator,
|
|
426
|
+
opIndex: result.flatMapOpIndex
|
|
427
|
+
});
|
|
428
|
+
return null;
|
|
429
|
+
}
|
|
430
|
+
if (result.shouldYield) {
|
|
431
|
+
return {
|
|
432
|
+
value: result.value,
|
|
433
|
+
done: false
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
return null;
|
|
437
|
+
};
|
|
438
|
+
return {
|
|
439
|
+
async next () {
|
|
440
|
+
while(!done){
|
|
441
|
+
if (innerStack.length > 0) {
|
|
442
|
+
const frame = innerStack[innerStack.length - 1];
|
|
443
|
+
if (frame.type === 'expand') {
|
|
444
|
+
const expandResult = frame.iterator.next();
|
|
445
|
+
if (!expandResult.done) {
|
|
446
|
+
const result = await processOps(expandResult.value, ops, opStates, frame.opIndex + 1);
|
|
447
|
+
const handled = await handleResult(result);
|
|
448
|
+
if (handled) return handled;
|
|
449
|
+
continue;
|
|
450
|
+
}
|
|
451
|
+
innerStack.pop();
|
|
452
|
+
continue;
|
|
453
|
+
} else {
|
|
454
|
+
const flatMapResult = await frame.iterator.next();
|
|
455
|
+
if (!flatMapResult.done) {
|
|
456
|
+
const result = await processOps(flatMapResult.value, ops, opStates, frame.opIndex + 1);
|
|
457
|
+
const handled = await handleResult(result);
|
|
458
|
+
if (handled) return handled;
|
|
459
|
+
continue;
|
|
460
|
+
}
|
|
461
|
+
innerStack.pop();
|
|
462
|
+
continue;
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
if (checkTakeExhausted(takeStates)) {
|
|
466
|
+
done = true;
|
|
467
|
+
await iterator.return?.();
|
|
468
|
+
return {
|
|
469
|
+
value: undefined,
|
|
470
|
+
done: true
|
|
471
|
+
};
|
|
472
|
+
}
|
|
473
|
+
const sourceResult = await iterator.next();
|
|
474
|
+
if (sourceResult.done) {
|
|
475
|
+
done = true;
|
|
476
|
+
return {
|
|
477
|
+
value: undefined,
|
|
478
|
+
done: true
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
const result = await processOps(sourceResult.value, ops, opStates, 0);
|
|
482
|
+
const handled = await handleResult(result);
|
|
483
|
+
if (handled) return handled;
|
|
484
|
+
}
|
|
485
|
+
return {
|
|
486
|
+
value: undefined,
|
|
487
|
+
done: true
|
|
488
|
+
};
|
|
489
|
+
},
|
|
490
|
+
async return (returnValue) {
|
|
491
|
+
done = true;
|
|
492
|
+
await closeInnerIterators();
|
|
493
|
+
await iterator.return?.(returnValue);
|
|
494
|
+
return {
|
|
495
|
+
value: undefined,
|
|
496
|
+
done: true
|
|
497
|
+
};
|
|
498
|
+
},
|
|
499
|
+
async throw (error) {
|
|
500
|
+
done = true;
|
|
501
|
+
await closeInnerIterators();
|
|
502
|
+
if (iterator.throw) {
|
|
503
|
+
await iterator.throw(error);
|
|
504
|
+
}
|
|
505
|
+
throw error;
|
|
506
|
+
}
|
|
507
|
+
};
|
|
508
|
+
}
|
|
509
|
+
};
|
|
510
|
+
}
|
|
511
|
+
function createFusedIterable(iter) {
|
|
512
|
+
const source = getSource(iter);
|
|
513
|
+
const ops = iter.cachedOps ?? (iter.cachedOps = collectOps(iter));
|
|
514
|
+
if (ops.length === 0) {
|
|
515
|
+
return source;
|
|
516
|
+
}
|
|
517
|
+
return hasExpandingOps(ops) ? createExpandingIterable(source, ops) : createSimpleIterable(source, ops);
|
|
518
|
+
}
|
|
13
519
|
class AsyncIteratorObject {
|
|
14
520
|
static from(iterable) {
|
|
15
521
|
const asyncIterable = (0, _utilscjs.toAsyncIterable)(iterable);
|
|
16
522
|
return new AsyncIteratorObject(asyncIterable);
|
|
17
523
|
}
|
|
18
524
|
static merge(...iterables) {
|
|
19
|
-
return new AsyncIteratorObject(
|
|
20
|
-
[Symbol.asyncIterator] () {
|
|
21
|
-
const ctrl = new AbortController();
|
|
22
|
-
const sequence = new _sequencecjs.Sequence(ctrl.signal);
|
|
23
|
-
let counter = iterables.length;
|
|
24
|
-
for (const iterable of iterables){
|
|
25
|
-
queueMicrotask(async ()=>{
|
|
26
|
-
for await (const value of iterable){
|
|
27
|
-
sequence(value);
|
|
28
|
-
}
|
|
29
|
-
if (--counter === 0) {
|
|
30
|
-
ctrl.abort();
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
return sequence[Symbol.asyncIterator]();
|
|
35
|
-
}
|
|
36
|
-
});
|
|
525
|
+
return new AsyncIteratorObject((0, _utilscjs.mergeIterables)(...iterables));
|
|
37
526
|
}
|
|
38
|
-
|
|
527
|
+
iterable;
|
|
528
|
+
parent;
|
|
529
|
+
op;
|
|
530
|
+
cachedOps = null;
|
|
39
531
|
[Symbol.toStringTag] = 'AsyncIteratorObject';
|
|
40
|
-
constructor(iterable){
|
|
41
|
-
this
|
|
532
|
+
constructor(iterable, parent = null, op = null){
|
|
533
|
+
this.iterable = iterable;
|
|
534
|
+
this.parent = parent;
|
|
535
|
+
this.op = op;
|
|
42
536
|
}
|
|
43
537
|
pipe(generatorFactory, signal) {
|
|
44
|
-
const
|
|
538
|
+
const materialized = createFusedIterable(this);
|
|
539
|
+
const generator = (0, _utilscjs.pipe)(materialized, generatorFactory, signal);
|
|
45
540
|
return new AsyncIteratorObject(generator);
|
|
46
541
|
}
|
|
542
|
+
awaited() {
|
|
543
|
+
return new AsyncIteratorObject(this.iterable, this, {
|
|
544
|
+
kind: 3
|
|
545
|
+
});
|
|
546
|
+
}
|
|
47
547
|
map(callbackfn) {
|
|
48
|
-
return this.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
yield await callbackfn(value, index++);
|
|
52
|
-
};
|
|
548
|
+
return new AsyncIteratorObject(this.iterable, this, {
|
|
549
|
+
kind: 0,
|
|
550
|
+
fn: callbackfn
|
|
53
551
|
});
|
|
54
552
|
}
|
|
55
553
|
filter(predicate) {
|
|
56
|
-
return this.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
554
|
+
return new AsyncIteratorObject(this.iterable, this, {
|
|
555
|
+
kind: 1,
|
|
556
|
+
fn: predicate
|
|
557
|
+
});
|
|
558
|
+
}
|
|
559
|
+
filterMap(callbackfn) {
|
|
560
|
+
return new AsyncIteratorObject(this.iterable, this, {
|
|
561
|
+
kind: 2,
|
|
562
|
+
fn: callbackfn
|
|
563
|
+
});
|
|
564
|
+
}
|
|
565
|
+
inspect(callbackfn) {
|
|
566
|
+
return new AsyncIteratorObject(this.iterable, this, {
|
|
567
|
+
kind: 4,
|
|
568
|
+
fn: callbackfn
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
enumerate(start = 0) {
|
|
572
|
+
return new AsyncIteratorObject(this.iterable, this, {
|
|
573
|
+
kind: 5,
|
|
574
|
+
start
|
|
63
575
|
});
|
|
64
576
|
}
|
|
65
577
|
take(limit) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}, ctrl.signal);
|
|
578
|
+
return new AsyncIteratorObject(this.iterable, this, {
|
|
579
|
+
kind: 6,
|
|
580
|
+
limit
|
|
581
|
+
});
|
|
582
|
+
}
|
|
583
|
+
takeWhile(predicate) {
|
|
584
|
+
return new AsyncIteratorObject(this.iterable, this, {
|
|
585
|
+
kind: 8,
|
|
586
|
+
fn: predicate
|
|
587
|
+
});
|
|
77
588
|
}
|
|
78
589
|
drop(count) {
|
|
79
|
-
return this.
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
590
|
+
return new AsyncIteratorObject(this.iterable, this, {
|
|
591
|
+
kind: 7,
|
|
592
|
+
count
|
|
593
|
+
});
|
|
594
|
+
}
|
|
595
|
+
dropWhile(predicate) {
|
|
596
|
+
return new AsyncIteratorObject(this.iterable, this, {
|
|
597
|
+
kind: 9,
|
|
598
|
+
fn: predicate
|
|
86
599
|
});
|
|
87
600
|
}
|
|
88
601
|
flatMap(callback) {
|
|
89
|
-
return this.
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
for await (const flat of callback(value, index++)){
|
|
93
|
-
yield flat;
|
|
94
|
-
}
|
|
95
|
-
};
|
|
602
|
+
return new AsyncIteratorObject(this.iterable, this, {
|
|
603
|
+
kind: 11,
|
|
604
|
+
fn: callback
|
|
96
605
|
});
|
|
97
606
|
}
|
|
98
607
|
reduce(callbackfn, ...args) {
|
|
99
608
|
const hasInit = args.length > 0;
|
|
100
|
-
return this.
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
};
|
|
106
|
-
return async function*(value) {
|
|
107
|
-
if (!state.initialized) {
|
|
108
|
-
state.initialized = true;
|
|
109
|
-
if (hasInit) {
|
|
110
|
-
state.value = args[0];
|
|
111
|
-
state.value = await callbackfn(state.value, value, index);
|
|
112
|
-
yield state.value;
|
|
113
|
-
} else {
|
|
114
|
-
state.value = value;
|
|
115
|
-
}
|
|
116
|
-
} else {
|
|
117
|
-
state.value = await callbackfn(state.value, value, index);
|
|
118
|
-
yield state.value;
|
|
119
|
-
}
|
|
120
|
-
index++;
|
|
121
|
-
};
|
|
609
|
+
return new AsyncIteratorObject(this.iterable, this, {
|
|
610
|
+
kind: 10,
|
|
611
|
+
fn: callbackfn,
|
|
612
|
+
init: args[0],
|
|
613
|
+
hasInit
|
|
122
614
|
});
|
|
123
615
|
}
|
|
124
616
|
expand(callbackfn) {
|
|
125
|
-
return this.
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
const values = await callbackfn(value, index++);
|
|
129
|
-
for await (const expanded of values){
|
|
130
|
-
yield expanded;
|
|
131
|
-
}
|
|
132
|
-
};
|
|
617
|
+
return new AsyncIteratorObject(this.iterable, this, {
|
|
618
|
+
kind: 12,
|
|
619
|
+
fn: callbackfn
|
|
133
620
|
});
|
|
134
621
|
}
|
|
135
622
|
[Symbol.asyncIterator]() {
|
|
136
|
-
return this
|
|
623
|
+
return createFusedIterable(this)[Symbol.asyncIterator]();
|
|
137
624
|
}
|
|
138
625
|
}
|
|
139
626
|
|