function splitRange(seedRange, transformRanges) {
let remainingRange = [...seedRange];
let splitRanges = [];
for (const transform of transformRanges) {
if (remainingRange[0] > transform.range[1]) {
continue;
}
if (remainingRange[1] < transform.range[0]) {
splitRanges.push(remainingRange);
return splitRanges;
}
if (remainingRange[0] < transform.range[0]) {
splitRanges.push([remainingRange[0], transform.range[0] - 1]);
remainingRange[0] = transform.range[0];
}
if (remainingRange[1] > transform.range[1]) {
splitRanges.push([remainingRange[0], transform.range[1], transform]);
remainingRange[0] = transform.range[1] + 1;
continue;
}
splitRanges.push([...remainingRange, transform]);
return splitRanges;
}
splitRanges.push(remainingRange);
return splitRanges;
}