29 lines
1.2 KiB
Plaintext
29 lines
1.2 KiB
Plaintext
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.combineChangeRanges = void 0;
|
|
function combineChangeRanges(...changeRanges) {
|
|
let changeRange = changeRanges[0];
|
|
for (let i = 1; i < changeRanges.length; i++) {
|
|
const nextChangeRange = changeRanges[i];
|
|
changeRange = combineTwoChanges(changeRange, nextChangeRange);
|
|
}
|
|
return changeRange;
|
|
}
|
|
exports.combineChangeRanges = combineChangeRanges;
|
|
// https://tsplay.dev/mMldVN - @browsnet
|
|
function combineTwoChanges(a, b) {
|
|
const aStart = a.span.start;
|
|
const aEnd = a.span.start + a.span.length;
|
|
const aDiff = a.newLength - a.span.length;
|
|
const changeBegin = aStart + Math.min(a.span.length, a.newLength);
|
|
const rollback = (start) => start > changeBegin ? Math.max(aStart, start - aDiff) : start;
|
|
const bStart = rollback(b.span.start);
|
|
const bEnd = rollback(b.span.start + b.span.length);
|
|
const bDiff = b.newLength - b.span.length;
|
|
const start = Math.min(aStart, bStart);
|
|
const end = Math.max(aEnd, bEnd);
|
|
const length = end - start;
|
|
const newLength = aDiff + bDiff + length;
|
|
return { span: { start, length }, newLength };
|
|
}
|
|
//# sourceMappingURL=combine.js.map |