UNPKG

json-joy

Version:

Collection of libraries for building collaborative editing apps.

165 lines (164 loc) 7.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.compactToPredicateOp = exports.compactToOp = void 0; exports.decode = decode; const OpAdd_1 = require("../../op/OpAdd"); const OpRemove_1 = require("../../op/OpRemove"); const OpReplace_1 = require("../../op/OpReplace"); const OpMove_1 = require("../../op/OpMove"); const OpCopy_1 = require("../../op/OpCopy"); const OpTest_1 = require("../../op/OpTest"); const OpFlip_1 = require("../../op/OpFlip"); const OpInc_1 = require("../../op/OpInc"); const OpStrIns_1 = require("../../op/OpStrIns"); const OpStrDel_1 = require("../../op/OpStrDel"); const OpSplit_1 = require("../../op/OpSplit"); const OpMerge_1 = require("../../op/OpMerge"); const OpExtend_1 = require("../../op/OpExtend"); const OpDefined_1 = require("../../op/OpDefined"); const OpUndefined_1 = require("../../op/OpUndefined"); const OpTestType_1 = require("../../op/OpTestType"); const OpTestString_1 = require("../../op/OpTestString"); const OpTestStringLen_1 = require("../../op/OpTestStringLen"); const OpContains_1 = require("../../op/OpContains"); const OpEnds_1 = require("../../op/OpEnds"); const OpStarts_1 = require("../../op/OpStarts"); const OpIn_1 = require("../../op/OpIn"); const OpLess_1 = require("../../op/OpLess"); const OpMore_1 = require("../../op/OpMore"); const OpAnd_1 = require("../../op/OpAnd"); const OpOr_1 = require("../../op/OpOr"); const OpNot_1 = require("../../op/OpNot"); const OpMatches_1 = require("../../op/OpMatches"); const OpType_1 = require("../../op/OpType"); const json_pointer_1 = require("@jsonjoy.com/json-pointer"); const constants_1 = require("../../constants"); const util_1 = require("../../util"); const compactToOp = (op, options) => { switch (op[0]) { case constants_1.OPCODE.add: case 'add': return new OpAdd_1.OpAdd((0, json_pointer_1.toPath)(op[1]), op[2]); case constants_1.OPCODE.remove: case 'remove': return new OpRemove_1.OpRemove((0, json_pointer_1.toPath)(op[1]), op[2]); case constants_1.OPCODE.replace: case 'replace': return new OpReplace_1.OpReplace((0, json_pointer_1.toPath)(op[1]), op[2], op[3]); case constants_1.OPCODE.move: case 'move': return new OpMove_1.OpMove((0, json_pointer_1.toPath)(op[1]), (0, json_pointer_1.toPath)(op[2])); case constants_1.OPCODE.copy: case 'copy': return new OpCopy_1.OpCopy((0, json_pointer_1.toPath)(op[1]), (0, json_pointer_1.toPath)(op[2])); case constants_1.OPCODE.flip: case 'flip': return new OpFlip_1.OpFlip((0, json_pointer_1.toPath)(op[1])); case constants_1.OPCODE.inc: case 'inc': return new OpInc_1.OpInc((0, json_pointer_1.toPath)(op[1]), op[2]); case constants_1.OPCODE.str_ins: case 'str_ins': return new OpStrIns_1.OpStrIns((0, json_pointer_1.toPath)(op[1]), op[2], op[3]); case constants_1.OPCODE.str_del: case 'str_del': return new OpStrDel_1.OpStrDel((0, json_pointer_1.toPath)(op[1]), op[2], op[3] || undefined, op[4]); case constants_1.OPCODE.split: case 'split': return new OpSplit_1.OpSplit((0, json_pointer_1.toPath)(op[1]), op[2], op[3] || null); case constants_1.OPCODE.merge: case 'merge': return new OpMerge_1.OpMerge((0, json_pointer_1.toPath)(op[1]), op[2], op[3] || null); case constants_1.OPCODE.extend: case 'extend': return new OpExtend_1.OpExtend((0, json_pointer_1.toPath)(op[1]), op[2], !!op[3]); default: return (0, exports.compactToPredicateOp)(op, options); } }; exports.compactToOp = compactToOp; const compactToPredicateOp = (op, options) => { switch (op[0]) { case constants_1.OPCODE.test: case 'test': return new OpTest_1.OpTest((0, json_pointer_1.toPath)(op[1]), op[2], !!op[3]); case constants_1.OPCODE.defined: case 'defined': return new OpDefined_1.OpDefined((0, json_pointer_1.toPath)(op[1])); case constants_1.OPCODE.undefined: case 'undefined': return new OpUndefined_1.OpUndefined((0, json_pointer_1.toPath)(op[1])); case constants_1.OPCODE.type: case 'type': return new OpType_1.OpType((0, json_pointer_1.toPath)(op[1]), op[2]); case constants_1.OPCODE.test_type: case 'test_type': return new OpTestType_1.OpTestType((0, json_pointer_1.toPath)(op[1]), op[2]); case constants_1.OPCODE.test_string: case 'test_string': return new OpTestString_1.OpTestString((0, json_pointer_1.toPath)(op[1]), op[2], op[3], !!op[4]); case constants_1.OPCODE.test_string_len: case 'test_string_len': return new OpTestStringLen_1.OpTestStringLen((0, json_pointer_1.toPath)(op[1]), op[2], !!op[3]); case constants_1.OPCODE.contains: case 'contains': return new OpContains_1.OpContains((0, json_pointer_1.toPath)(op[1]), op[2], !!op[3]); case constants_1.OPCODE.ends: case 'ends': return new OpEnds_1.OpEnds((0, json_pointer_1.toPath)(op[1]), op[2], !!op[3]); case constants_1.OPCODE.starts: case 'starts': return new OpStarts_1.OpStarts((0, json_pointer_1.toPath)(op[1]), op[2], !!op[3]); case constants_1.OPCODE.matches: case 'matches': return new OpMatches_1.OpMatches((0, json_pointer_1.toPath)(op[1]), op[2], !!op[3], options.createMatcher || util_1.createMatcherDefault); case constants_1.OPCODE.in: case 'in': return new OpIn_1.OpIn((0, json_pointer_1.toPath)(op[1]), op[2]); case constants_1.OPCODE.less: case 'less': return new OpLess_1.OpLess((0, json_pointer_1.toPath)(op[1]), op[2]); case constants_1.OPCODE.more: case 'more': return new OpMore_1.OpMore((0, json_pointer_1.toPath)(op[1]), op[2]); case constants_1.OPCODE.and: case 'and': { const path = (0, json_pointer_1.toPath)(op[1]); return new OpAnd_1.OpAnd(path, op[2].map((x) => { const copy = [...x]; copy[1] = [...path, ...(0, json_pointer_1.toPath)(x[1])]; return (0, exports.compactToPredicateOp)(copy, options); })); } case constants_1.OPCODE.or: case 'or': { const path = (0, json_pointer_1.toPath)(op[1]); return new OpOr_1.OpOr(path, op[2].map((x) => { const copy = [...x]; copy[1] = [...path, ...(0, json_pointer_1.toPath)(x[1])]; return (0, exports.compactToPredicateOp)(copy, options); })); } case constants_1.OPCODE.not: case 'not': { const path = (0, json_pointer_1.toPath)(op[1]); return new OpNot_1.OpNot(path, op[2].map((x) => { const copy = [...x]; copy[1] = [...path, ...(0, json_pointer_1.toPath)(x[1])]; return (0, exports.compactToPredicateOp)(copy, options); })); } default: throw new Error('OP_UNKNOWN'); } }; exports.compactToPredicateOp = compactToPredicateOp; function decode(patch, options) { const ops = []; const length = patch.length; for (let i = 0; i < length; i++) { const op = (0, exports.compactToOp)(patch[i], options); ops.push(op); } return ops; }