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
@@ -9,131 +9,618 @@ Object.defineProperty(exports, "AsyncIteratorObject", {
9
9
  }
10
10
  });
11
11
  const _utilscjs = require("./utils.cjs");
12
- const _sequencecjs = require("./sequence.cjs");
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
- #iterable;
527
+ iterable;
528
+ parent;
529
+ op;
530
+ cachedOps = null;
39
531
  [Symbol.toStringTag] = 'AsyncIteratorObject';
40
- constructor(iterable){
41
- this.#iterable = iterable;
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 generator = (0, _utilscjs.pipe)(this.#iterable, generatorFactory, signal);
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.pipe(()=>{
49
- let index = 0;
50
- return async function*(value) {
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.pipe(()=>{
57
- let index = 0;
58
- return async function*(value) {
59
- if (predicate(value, index++)) {
60
- yield await value;
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
- const ctrl = new AbortController();
67
- return this.pipe(()=>{
68
- let index = 0;
69
- return async function*(value) {
70
- if (index++ < limit) {
71
- yield await value;
72
- } else {
73
- ctrl.abort();
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.pipe(()=>{
80
- let index = 0;
81
- return async function*(value) {
82
- if (index++ >= count) {
83
- yield await value;
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.pipe(()=>{
90
- let index = 0;
91
- return async function*(value) {
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.pipe(()=>{
101
- let index = 0;
102
- const state = {
103
- initialized: false,
104
- value: undefined
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.pipe(()=>{
126
- let index = 0;
127
- return async function*(value) {
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.#iterable[Symbol.asyncIterator]();
623
+ return createFusedIterable(this)[Symbol.asyncIterator]();
137
624
  }
138
625
  }
139
626