"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function firstIndexOf(haystack, needles, byteOffset) { return needles.reduce((prevBest, needle, needleIndex) => { const index = haystack.indexOf(needle, byteOffset); if (index >= 0 && (!prevBest || index < prevBest.index)) return { index, needle, needleIndex }; else return prevBest; }, null); } exports.firstIndexOf = firstIndexOf; const namedDelimiters = { cr: [Buffer.from([13])], crlf: [Buffer.from([13, 10])], eol: [], lf: [Buffer.from([10])], nul: [Buffer.from([0])], tab: [Buffer.from([9])] }; namedDelimiters.eol = [...namedDelimiters.crlf, ...namedDelimiters.cr, ...namedDelimiters.lf]; function bufferSplitMulti(buffer, delimiters, includeDelimiters = false) { const binaryDelimiters = []; for (const delimiter of delimiters) { if (typeof delimiter === "string") binaryDelimiters.push(...namedDelimiters[delimiter]); else binaryDelimiters.push(delimiter); } const ret = []; let pos = 0; const max = buffer.length; while (pos < max) { const next = firstIndexOf(buffer, binaryDelimiters, pos); if (next === null) { ret.push(buffer.slice(pos)); break; } else { ret.push(buffer.slice(pos, next.index)); if (includeDelimiters) { // Don't return next.needle; it's internal mutable data that must not leak. ret.push(buffer.slice(next.index, next.needle.length)); } pos = next.index + next.needle.length; } } return ret; } exports.bufferSplitMulti = bufferSplitMulti; //# sourceMappingURL=buffer-split.js.map