UNPKG

json-joy

Version:

Collection of libraries for building collaborative editing apps.

48 lines (47 loc) 1.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.xStrDel = void 0; const op_1 = require("../../json-patch/op"); const xStrDel = (del, op) => { if (op instanceof op_1.OpStrIns) { const ins = op; if (ins.pos > del.pos) { const deleteLength = del.deleteLength(); return new op_1.OpStrIns(ins.path, op.pos - deleteLength, op.str); } return op; } if (op instanceof op_1.OpStrDel) { const opLen = op.deleteLength(); const delLen = del.deleteLength(); const overlapLen1 = del.pos + delLen - op.pos; const overlapLen2 = op.pos + opLen - del.pos; if (del.pos <= op.pos && overlapLen1 > 0) { const newLen = opLen - overlapLen1; if (newLen <= 0) return null; if (typeof op.str === 'string') return new op_1.OpStrDel(op.path, op.pos - (delLen - overlapLen1), op.str.substr(overlapLen1), undefined); else return new op_1.OpStrDel(op.path, op.pos - (delLen - overlapLen1), undefined, newLen); } else if (del.pos >= op.pos && overlapLen2 > 0) { const newLen = del.pos - op.pos + Math.max(0, overlapLen2 - delLen); if (newLen <= 0) return null; if (typeof op.str === 'string') return new op_1.OpStrDel(op.path, op.pos, op.str.substr(0, newLen), undefined); else return new op_1.OpStrDel(op.path, op.pos, undefined, newLen); } else if (del.pos < op.pos) { if (typeof op.str === 'string') return new op_1.OpStrDel(op.path, op.pos - delLen, op.str, undefined); else return new op_1.OpStrDel(op.path, op.pos - delLen, undefined, op.len); } return op; } return op; }; exports.xStrDel = xStrDel;