|
"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) { |
|
|
|
ret.push(buffer.slice(next.index, next.needle.length)); |
|
} |
|
pos = next.index + next.needle.length; |
|
} |
|
} |
|
return ret; |
|
} |
|
exports.bufferSplitMulti = bufferSplitMulti; |
|
|