intervalMaps = _maps.map((entries) => (intervals) => {
let newIntervals = [];
for (const [intervalStart, intervalEnd] of intervals) {
let pointer = intervalStart;
for (const [dest, srcStart, length] of entries) {
const srcEnd = srcStart + length - 1;
const intersection = findIntersection(
intervalStart,
intervalEnd,
srcStart,
srcEnd
);
if (intersection) {
const [intersectStart, intersectEnd] = intersection;
newIntervals.push([
dest + (intersectStart - srcStart),
dest + (intersectEnd - srcStart)
]);
if (intersectStart > pointer) {
newIntervals.push([pointer, intersectStart]);
}
pointer = intersectEnd + 1;
}
}
if (pointer < intervalEnd) {
newIntervals.push([pointer, intervalEnd]);
}
}
return newIntervals;
})