UNPKG

fast-array-diff

Version:

Implementation of paper 'An O(ND) Difference Algorithm and Its Variations' on array

62 lines (61 loc) 2.01 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getPatch = void 0; var lcs_1 = __importDefault(require("./lcs")); function getPatch(a, b, compareFunc) { if (compareFunc === void 0) { compareFunc = function (ia, ib) { return ia === ib; }; } var patch = []; var lastAdd = null; var lastRemove = null; function pushChange(type, oldArr, oldStart, oldEnd, newArr, newStart, newEnd) { if (type === 'same') { if (lastRemove) { patch.push(lastRemove); } if (lastAdd) { patch.push(lastAdd); } lastRemove = null; lastAdd = null; } else if (type === 'remove') { if (!lastRemove) { lastRemove = { type: 'remove', oldPos: oldStart, newPos: newStart, items: [], }; } for (var i = oldStart; i < oldEnd; ++i) { lastRemove.items.push(oldArr[i]); } if (lastAdd) { lastAdd.oldPos += oldEnd - oldStart; if (lastRemove.oldPos === oldStart) { lastRemove.newPos -= oldEnd - oldStart; } } } else if (type === 'add') { if (!lastAdd) { lastAdd = { type: 'add', oldPos: oldStart, newPos: newStart, items: [], }; } for (var i = newStart; i < newEnd; ++i) { lastAdd.items.push(newArr[i]); } } } (0, lcs_1.default)(a, b, compareFunc, pushChange); pushChange('same', [], 0, 0, [], 0, 0); return patch; } exports.getPatch = getPatch;