react-diff-view
Version:
A git diff component to consume the git unified diff output.
43 lines • 1.31 kB
JavaScript
export function clone(path) {
return path.map(node => ({ ...node }));
}
export function replace(path, leaf) {
return [...clone(path.slice(0, -1)), leaf];
}
export function wrap(path, parent) {
return [parent, ...clone(path)];
}
function isTextNode(node) {
return node.type === 'text';
}
export function leafOf(path) {
const last = path[path.length - 1];
if (isTextNode(last)) {
return last;
}
throw new Error(`Invalid token path with leaf of type ${last.type}`);
}
export function split(path, splitStart, splitEnd, wrapSplitNode) {
const parents = path.slice(0, -1);
const leaf = leafOf(path);
const output = [];
if (splitEnd <= 0 || splitStart >= leaf?.value.length) {
return [path];
}
const split = (start, end) => {
const value = leaf.value.slice(start, end);
return [...parents, { ...leaf, value }];
};
if (splitStart > 0) {
const head = split(0, splitStart);
output.push(clone(head));
}
const body = split(Math.max(splitStart, 0), splitEnd);
output.push(wrapSplitNode ? wrap(body, wrapSplitNode) : clone(body));
if (splitEnd < leaf.value.length) {
const tail = split(splitEnd);
output.push(clone(tail));
}
return output;
}
//# sourceMappingURL=utils.js.map