@slate-sheikah/bridge
Version:
slate-sheikah bridge: Bridge components for slate-sheikah. Slate + Automerge + Sockets
133 lines (108 loc) • 13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _utils = require("../utils");
var _path = require("../path");
var _set = require("./set");
const removeTextOp = op => (map, doc) => {
try {
var _node, _node$text;
const {
index,
path,
obj
} = op;
const slatePath = (0, _utils.toSlatePath)(path).slice(0, path === null || path === void 0 ? void 0 : path.length);
let node = map[obj];
try {
node = (0, _path.getTarget)(doc, slatePath);
} catch (e) {
console.error(e, slatePath, op, map, (0, _utils.toJS)(doc));
}
if (typeof index !== 'number') return;
const text = ((_node = node) === null || _node === void 0 ? void 0 : (_node$text = _node.text) === null || _node$text === void 0 ? void 0 : _node$text[index]) || '*';
if (node) {
var _node2;
node.text = ((_node2 = node) === null || _node2 === void 0 ? void 0 : _node2.text) ? node.text.slice(0, index) + node.text.slice(index + 1) : '';
}
return {
type: 'remove_text',
path: slatePath,
offset: index,
text,
marks: []
};
} catch (e) {
console.error(e, op, map, (0, _utils.toJS)(doc));
}
};
const removeNodeOp = op => (map, doc) => {
try {
var _parent$children, _parent$children2;
const {
index,
obj,
path
} = op;
const slatePath = (0, _utils.toSlatePath)(path);
const parent = (0, _path.getTarget)(doc, slatePath);
const target = (parent === null || parent === void 0 ? void 0 : (_parent$children = parent.children) === null || _parent$children === void 0 ? void 0 : _parent$children[index]) || (parent === null || parent === void 0 ? void 0 : parent[index]) || {
children: []
};
if (!target) {
throw new TypeError('Target is not found!');
}
if (!index || !Number.isInteger(index)) {
throw new TypeError('Index is not a number');
}
if (parent === null || parent === void 0 ? void 0 : (_parent$children2 = parent.children) === null || _parent$children2 === void 0 ? void 0 : _parent$children2[index]) {
parent.children.splice(index, 1);
map[obj] = parent === null || parent === void 0 ? void 0 : parent.children;
} else if (parent === null || parent === void 0 ? void 0 : parent[index]) {
parent.splice(index, 1);
map[obj] = parent;
}
return {
type: 'remove_node',
path: slatePath.length ? slatePath.concat(index) : [index],
node: target
};
} catch (e) {
console.error(e, op, map, (0, _utils.toJS)(doc));
}
};
const opRemove = (op, _ref, doc, tmpDoc) => {
let [map, ops] = _ref;
try {
var _map$obj;
const {
index,
path,
obj,
type
} = op;
if (type === 'map' && path) {
// remove a key from map, mapping to slate set a key's value to undefined.
if (path[0] === 'children') {
ops.push((0, _set.setDataOp)(op, doc)(map, tmpDoc));
}
return [map, ops];
}
if (map.hasOwnProperty(obj) && typeof map[obj] !== 'string' && type !== 'text' && (map === null || map === void 0 ? void 0 : (_map$obj = map.obj) === null || _map$obj === void 0 ? void 0 : _map$obj.length)) {
map[obj].splice(index, 1);
return [map, ops];
}
if (!path) return [map, ops];
const key = path[path.length - 1];
const fn = key === 'text' ? removeTextOp : removeNodeOp;
return [map, [...ops, fn(op)(map, tmpDoc)]];
} catch (e) {
console.error(e, op, (0, _utils.toJS)(map));
return [map, ops];
}
};
var _default = opRemove;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb252ZXJ0L3JlbW92ZS50cyJdLCJuYW1lcyI6WyJyZW1vdmVUZXh0T3AiLCJvcCIsIm1hcCIsImRvYyIsImluZGV4IiwicGF0aCIsIm9iaiIsInNsYXRlUGF0aCIsInNsaWNlIiwibGVuZ3RoIiwibm9kZSIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJ0ZXh0IiwidHlwZSIsIm9mZnNldCIsIm1hcmtzIiwicmVtb3ZlTm9kZU9wIiwicGFyZW50IiwidGFyZ2V0IiwiY2hpbGRyZW4iLCJUeXBlRXJyb3IiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJzcGxpY2UiLCJjb25jYXQiLCJvcFJlbW92ZSIsInRtcERvYyIsIm9wcyIsInB1c2giLCJoYXNPd25Qcm9wZXJ0eSIsImtleSIsImZuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsWUFBWSxHQUFJQyxFQUFELElBQXdCLENBQUNDLEdBQUQsRUFBV0MsR0FBWCxLQUE0QjtBQUN2RSxNQUFJO0FBQUE7O0FBQ0YsVUFBTTtBQUFFQyxNQUFBQSxLQUFGO0FBQVNDLE1BQUFBLElBQVQ7QUFBZUMsTUFBQUE7QUFBZixRQUF1QkwsRUFBN0I7QUFFQSxVQUFNTSxTQUFTLEdBQUcsd0JBQVlGLElBQVosRUFBa0JHLEtBQWxCLENBQXdCLENBQXhCLEVBQTJCSCxJQUEzQixhQUEyQkEsSUFBM0IsdUJBQTJCQSxJQUFJLENBQUVJLE1BQWpDLENBQWxCO0FBRUEsUUFBSUMsSUFBSSxHQUFHUixHQUFHLENBQUNJLEdBQUQsQ0FBZDs7QUFFQSxRQUFJO0FBQ0ZJLE1BQUFBLElBQUksR0FBRyxxQkFBVVAsR0FBVixFQUFlSSxTQUFmLENBQVA7QUFDRCxLQUZELENBRUUsT0FBT0ksQ0FBUCxFQUFVO0FBQ1ZDLE1BQUFBLE9BQU8sQ0FBQ0MsS0FBUixDQUFjRixDQUFkLEVBQWlCSixTQUFqQixFQUE0Qk4sRUFBNUIsRUFBZ0NDLEdBQWhDLEVBQXFDLGlCQUFLQyxHQUFMLENB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LENBQVA7QUFDRDs7QUFFRCxRQUFJLENBQUN4QixJQUFMLEVBQVcsT0FBTyxDQUFDSCxHQUFELEVBQU0yQixHQUFOLENBQVA7QUFFWCxVQUFNRyxHQUFHLEdBQUczQixJQUFJLENBQUNBLElBQUksQ0FBQ0ksTUFBTCxHQUFjLENBQWYsQ0FBaEI7QUFFQSxVQUFNd0IsRUFBRSxHQUFHRCxHQUFHLEtBQUssTUFBUixHQUFpQmhDLFlBQWpCLEdBQWdDa0IsWUFBM0M7QUFFQSxXQUFPLENBQUNoQixHQUFELEVBQU0sQ0FBQyxHQUFHMkIsR0FBSixFQUFTSSxFQUFFLENBQUNoQyxFQUFELENBQUYsQ0FBT0MsR0FBUCxFQUFZMEIsTUFBWixDQUFULENBQU4sQ0FBUDtBQUNELEdBN0JELENBNkJFLE9BQU9qQixDQUFQLEVBQVU7QUFDVkMsSUFBQUEsT0FBTyxDQUFDQyxLQUFSLENBQWNGLENBQWQsRUFBaUJWLEVBQWpCLEVBQXFCLGlCQUFLQyxHQUFMLENBQXJCO0FBRUEsV0FBTyxDQUFDQSxHQUFELEVBQU0yQixHQUFOLENBQVA7QUFDRDtBQUNGLENBeENEOztlQTBDZUYsUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEF1dG9tZXJnZSBmcm9tICdhdXRvbWVyZ2UnXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSAnc2xhdGUnXG5cbmltcG9ydCB7IHRvU2xhdGVQYXRoLCB0b0pTIH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgeyBnZXRUYXJnZXQgfSBmcm9tICcuLi9wYXRoJ1xuaW1wb3J0IHsgc2V0RGF0YU9wIH0gZnJvbSAnLi9zZXQnXG5cbmNvbnN0IHJlbW92ZVRleHRPcCA9IChvcDogQXV0b21lcmdlLkRpZmYpID0+IChtYXA6IGFueSwgZG9jOiBFbGVtZW50KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBpbmRleCwgcGF0aCwgb2JqIH0gPSBvcFxuXG4gICAgY29uc3Qgc2xhdGVQYXRoID0gdG9TbGF0ZVBhdGgocGF0aCkuc2xpY2UoMCwgcGF0aD8ubGVuZ3RoKVxuXG4gICAgbGV0IG5vZGUgPSBtYXBbb2JqXVxuXG4gICAgdHJ5IHtcbiAgICAgIG5vZGUgPSBnZXRUYXJnZXQoZG9jLCBzbGF0ZVBhdGgpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlLCBzbGF0ZVBhdGgsIG9wLCBtYXAsIHRvSlMoZG9jKSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluZGV4ICE9PSAnbnVtYmVyJykgcmV0dXJuXG5cbiAgICBjb25zdCB0ZXh0ID0gbm9kZT8udGV4dD8uW2luZGV4XSB8fCAnKidcblxuICAgIGlmIChub2RlKSB7XG4gICAgICBub2RlLnRleHQgPSBub2RlPy50ZXh0XG4gICAgICAgID8gbm9kZS50ZXh0LnNsaWNlKDAsIGluZGV4KSArIG5vZGUudGV4dC5zbGljZShpbmRleCArIDEpXG4gICAgICAgIDogJydcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ3JlbW92ZV90ZXh0JyxcbiAgICAgIHBhdGg6IHNsYXRlUGF0aCxcbiAgICAgIG9mZnNldDogaW5kZXgsXG4gICAgICB0ZXh0LFxuICAgICAgbWFya3M6IFtdXG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihlLCBvcCwgbWFwLCB0b0pTKGRvYykpXG4gIH1cbn1cblxuY29uc3QgcmVtb3ZlTm9kZU9wID0gKG9wOiBBdXRvbWVyZ2UuRGlmZikgPT4gKG1hcDogYW55LCBkb2M6IEVsZW1lbnQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IGluZGV4LCBvYmosIHBhdGggfSA9IG9wXG5cbiAgICBjb25zdCBzbGF0ZVBhdGggPSB0b1NsYXRlUGF0aChwYXRoKVxuXG4gICAgY29uc3QgcGFyZW50ID0gZ2V0VGFyZ2V0KGRvYywgc2xhdGVQYXRoKVxuICAgIGNvbnN0IHRhcmdldCA9IHBhcmVudD8uY2hpbGRyZW4/LltpbmRleCBhcyBudW1iZXJdIHx8XG4gICAgICBwYXJlbnQ/LltpbmRleCBhcyBudW1iZXJdIHx8IHsgY2hpbGRyZW46IFtdIH1cblxuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUYXJnZXQgaXMgbm90IGZvdW5kIScpXG4gICAgfVxuXG4gICAgaWYgKCFpbmRleCB8fCAhTnVtYmVyLmlzSW50ZWdlcihpbmRleCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luZGV4IGlzIG5vdCBhIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKHBhcmVudD8uY2hpbGRyZW4/LltpbmRleCBhcyBudW1iZXJdKSB7XG4gICAgICBwYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKVxuICAgICAgbWFwW29ial0gPSBwYXJlbnQ/LmNoaWxkcmVuXG4gICAgfSBlbHNlIGlmIChwYXJlbnQ/LltpbmRleCBhcyBudW1iZXJdKSB7XG4gICAgICBwYXJlbnQuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgbWFwW29ial0gPSBwYXJlbnRcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ3JlbW92ZV9ub2RlJyxcbiAgICAgIHBhdGg6IHNsYXRlUGF0aC5sZW5ndGggPyBzbGF0ZVBhdGguY29uY2F0KGluZGV4KSA6IFtpbmRleF0sXG4gICAgICBub2RlOiB0YXJnZXRcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGUsIG9wLCBtYXAsIHRvSlMoZG9jKSlcbiAgfVxufVxuXG5jb25zdCBvcFJlbW92ZSA9IChcbiAgb3A6IEF1dG9tZXJnZS5EaWZmLFxuICBbbWFwLCBvcHNdOiBhbnksXG4gIGRvYzogYW55LFxuICB0bXBEb2M6IEVsZW1lbnRcbikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHsgaW5kZXgsIHBhdGgsIG9iaiwgdHlwZSB9ID0gb3BcblxuICAgIGlmICh0eXBlID09PSAnbWFwJyAmJiBwYXRoKSB7XG4gICAgICAvLyByZW1vdmUgYSBrZXkgZnJvbSBtYXAsIG1hcHBpbmcgdG8gc2xhdGUgc2V0IGEga2V5J3MgdmFsdWUgdG8gdW5kZWZpbmVkLlxuICAgICAgaWYgKHBhdGhbMF0gPT09ICdjaGlsZHJlbicpIHtcbiAgICAgICAgb3BzLnB1c2goc2V0RGF0YU9wKG9wLCBkb2MpKG1hcCwgdG1wRG9jKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBbbWFwLCBvcHNdXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgbWFwLmhhc093blByb3BlcnR5KG9iaikgJiZcbiAgICAgIHR5cGVvZiBtYXBbb2JqXSAhPT0gJ3N0cmluZycgJiZcbiAgICAgIHR5cGUgIT09ICd0ZXh0JyAmJlxuICAgICAgbWFwPy5vYmo/Lmxlbmd0aFxuICAgICkge1xuICAgICAgbWFwW29ial0uc3BsaWNlKGluZGV4LCAxKVxuXG4gICAgICByZXR1cm4gW21hcCwgb3BzXVxuICAgIH1cblxuICAgIGlmICghcGF0aCkgcmV0dXJuIFttYXAsIG9wc11cblxuICAgIGNvbnN0IGtleSA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXVxuXG4gICAgY29uc3QgZm4gPSBrZXkgPT09ICd0ZXh0JyA/IHJlbW92ZVRleHRPcCA6IHJlbW92ZU5vZGVPcFxuXG4gICAgcmV0dXJuIFttYXAsIFsuLi5vcHMsIGZuKG9wKShtYXAsIHRtcERvYyldXVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihlLCBvcCwgdG9KUyhtYXApKVxuXG4gICAgcmV0dXJuIFttYXAsIG9wc11cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBvcFJlbW92ZVxuIl19