iter-tools-es
Version:
The iterable toolbox
52 lines (42 loc) • 1.07 kB
JavaScript
const {
PartsIterator,
PartIterator
} = require('./parts-iterator.js');
const {
split
} = require('./symbols.js');
class GroupsIterator extends PartsIterator {
next() {
if (!this.initialized) 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) {
spliterator.advance();
}
}
}
if (spliterator.done) {
return {
value: undefined,
done: true
};
}
spliterator.advance();
if (spliterator.done || spliterator.value === split) {
throw new Error('Unexpected empty group');
}
const key = spliterator.value;
spliterator.advance();
this.splitStep = spliterator.current;
this.currentPart = new PartIterator(this);
return {
value: [key, this.currentPart],
done: false
};
}
}
exports.GroupsIterator = GroupsIterator;