UNPKG

iter-tools-es

Version:
48 lines (38 loc) 929 B
const { iterableCurry } = require('../../internal/iterable.js'); const { __spliterateGrouped } = require('../$spliterate-grouped/spliterate-grouped.js'); const { __peekerate } = require('../$peekerate/peekerate.js'); const initialKey = Symbol('initial group key'); function* groupingSpliterator(split, { getKey }, source) { const peekr = __peekerate(source); let key = initialKey; let idx = 0; while (!peekr.done) { const lastKey = key; key = getKey(peekr.value, idx++); if (lastKey !== key) { yield split; yield key; } yield peekr.value; peekr.advance(); } } function __splitGroups(source, getKey = value => value) { return __spliterateGrouped(source, groupingSpliterator, { getKey }); } exports.__splitGroups = __splitGroups; const splitGroups = /*#__PURE__*/iterableCurry(__splitGroups, { minArgs: 0, maxArgs: 1 }); exports.splitGroups = splitGroups;