UNPKG

iter-tools-es

Version:
47 lines (38 loc) 1.04 kB
const { asyncIterableCurry } = require('../../internal/async-iterable.js'); const { __asyncSpliterateGrouped } = require('../$spliterate-grouped/async-spliterate-grouped.js'); const { __asyncPeekerate } = require('../$peekerate/async-peekerate.js'); const initialKey = Symbol('initial group key'); async function* asyncGroupingSpliterator(split, { getKey }, source) { const peekr = await __asyncPeekerate(source); let key = initialKey; let idx = 0; while (!peekr.done) { const lastKey = key; key = await getKey(peekr.value, idx++); if (lastKey !== key) { yield split; yield key; } yield peekr.value; await peekr.advance(); } } function __asyncSplitGroups(source, getKey = value => value) { return __asyncSpliterateGrouped(source, asyncGroupingSpliterator, { getKey }); } exports.__asyncSplitGroups = __asyncSplitGroups; const asyncSplitGroups = /*#__PURE__*/asyncIterableCurry(__asyncSplitGroups, { minArgs: 0, maxArgs: 1 }); exports.asyncSplitGroups = asyncSplitGroups;