iter-tools-es
Version:
The iterable toolbox
40 lines (33 loc) • 1.06 kB
JavaScript
const {
asyncIterableCurry
} = require('../../internal/async-iterable.js');
const {
asyncSeqsToArray
} = require('../../internal/async-any-seq.js');
const {
__asyncWindowAhead
} = require('../$window-ahead/async-window-ahead.js');
const {
__startsWithAnySeq
} = require('../$starts-with-any-seq/starts-with-any-seq.js');
async function __asyncIncludesAnySeq(iterable, seqs, same = Object.is) {
const seqsArr = await asyncSeqsToArray(seqs);
if (!seqsArr.length) return false;
if (seqsArr.find(seq => !seq.length)) return true;
const maxMatchLength = seqsArr.reduce((max, {
length
}) => Math.max(max, length), 1);
for await (const buffer of __asyncWindowAhead(iterable, maxMatchLength)) {
if (__startsWithAnySeq(buffer, seqsArr, same)) {
return true;
}
}
return false;
}
exports.__asyncIncludesAnySeq = __asyncIncludesAnySeq;
const asyncIncludesAnySeq = /*#__PURE__*/asyncIterableCurry(__asyncIncludesAnySeq, {
minArgs: 1,
maxArgs: 2,
reduces: true
});
exports.asyncIncludesAnySeq = asyncIncludesAnySeq;