UNPKG

iter-tools-es

Version:
52 lines (42 loc) 1.15 kB
const { AsyncPartsIterator, AsyncPartIterator } = require('./async-parts-iterator.js'); const { split } = require('./symbols.js'); class AsyncGroupsIterator extends AsyncPartsIterator { async next() { if (!this.initialized) await this.init(); const { spliterator } = this; if (this.currentPart !== null) { if (spliterator.value !== split || spliterator.current === this.splitStep) { this.currentPart.inactive = true; while (!spliterator.done && spliterator.value !== split) { await spliterator.advance(); } } } if (spliterator.done) { return { value: undefined, done: true }; } await spliterator.advance(); if (spliterator.done || spliterator.value === split) { throw new Error('Unexpected empty group'); } const key = spliterator.value; await spliterator.advance(); this.splitStep = spliterator.current; this.currentPart = new AsyncPartIterator(this); return { value: [key, this.currentPart], done: false }; } } exports.AsyncGroupsIterator = AsyncGroupsIterator;