(collection, predicate, context, useKeys)
| 544 | } |
| 545 | |
| 546 | export function skipWhileFactory(collection, predicate, context, useKeys) { |
| 547 | const skipSequence = makeSequence(collection); |
| 548 | skipSequence.__iterateUncached = function (fn, reverse) { |
| 549 | if (reverse) { |
| 550 | return this.cacheResult().__iterate(fn, reverse); |
| 551 | } |
| 552 | let isSkipping = true; |
| 553 | let iterations = 0; |
| 554 | collection.__iterate((v, k, c) => { |
| 555 | if (!(isSkipping && (isSkipping = predicate.call(context, v, k, c)))) { |
| 556 | iterations++; |
| 557 | return fn(v, useKeys ? k : iterations - 1, this); |
| 558 | } |
| 559 | }); |
| 560 | return iterations; |
| 561 | }; |
| 562 | skipSequence.__iteratorUncached = function (type, reverse) { |
| 563 | if (reverse) { |
| 564 | return this.cacheResult().__iterator(type, reverse); |
| 565 | } |
| 566 | const iterator = collection.__iterator(ITERATE_ENTRIES, reverse); |
| 567 | let skipping = true; |
| 568 | let iterations = 0; |
| 569 | return new Iterator(() => { |
| 570 | let step; |
| 571 | let k; |
| 572 | let v; |
| 573 | do { |
| 574 | step = iterator.next(); |
| 575 | if (step.done) { |
| 576 | if (useKeys || type === ITERATE_VALUES) { |
| 577 | return step; |
| 578 | } |
| 579 | if (type === ITERATE_KEYS) { |
| 580 | return iteratorValue(type, iterations++, undefined, step); |
| 581 | } |
| 582 | return iteratorValue(type, iterations++, step.value[1], step); |
| 583 | } |
| 584 | const entry = step.value; |
| 585 | k = entry[0]; |
| 586 | v = entry[1]; |
| 587 | // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here |
| 588 | skipping && (skipping = predicate.call(context, v, k, this)); |
| 589 | } while (skipping); |
| 590 | return type === ITERATE_ENTRIES ? step : iteratorValue(type, k, v, step); |
| 591 | }); |
| 592 | }; |
| 593 | return skipSequence; |
| 594 | } |
| 595 | |
| 596 | class ConcatSeq extends Seq { |
| 597 | constructor(iterables) { |
no test coverage detected