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