@slate-sheikah/bridge
Version:
slate-sheikah bridge: Bridge components for slate-sheikah. Slate + Automerge + Sockets
131 lines (104 loc) • 13.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var Automerge = _interopRequireWildcard(require("automerge"));
var _slate = require("slate");
var _utils = require("../utils");
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
const insertTextOp = (_ref) => {
let {
index,
path,
value
} = _ref;
return (map, doc) => {
const slatePath = (0, _utils.toSlatePath)(path);
const node = _slate.Node.get(doc, slatePath);
const text = node.text;
node.text = [text.slice(0, index), value, text.slice(index)].join('');
return {
type: 'insert_text',
path: slatePath,
offset: index,
text: value,
marks: []
};
};
};
const insertNodeOp = (_ref2, doc) => {
let {
value,
obj,
index,
path
} = _ref2;
return (map, tmpDoc) => {
const ops = [];
const iterate = (_ref3, path) => {
let {
children
} = _ref3,
json = _objectWithoutProperties(_ref3, ["children"]);
const node = (0, _utils.toJS)(children ? _objectSpread(_objectSpread({}, json), {}, {
children: []
}) : json);
ops.push({
type: 'insert_node',
path,
node
}); // update the temp doc so later remove_node won't error.
const parent = _slate.Node.parent(tmpDoc, path);
const index = path[path.length - 1];
parent.children.splice(index, 0, (0, _utils.toJS)(node));
children && children.forEach((n, i) => {
const node = map[n] || Automerge.getObjectById(doc, n);
iterate(node && (0, _utils.toJS)(node) || n, [...path, i]);
});
};
const source = map[value] || (0, _utils.toJS)(map[obj] || Automerge.getObjectById(doc, value));
source && iterate(source, [...(0, _utils.toSlatePath)(path), index]);
return ops;
};
};
const insertByType = {
text: insertTextOp,
list: insertNodeOp
};
const opInsert = (op, _ref4, doc, tmpDoc) => {
let [map, ops] = _ref4;
try {
const {
link,
obj,
path,
index,
type,
value
} = op;
if (link && map.hasOwnProperty(obj)) {
map[obj].splice(index, 0, map[value] || value);
} else if ((type === 'text' || type === 'list') && !path) {
map[obj] = map[obj] ? map[obj].slice(0, index).concat(value).concat(map[obj].slice(index)) : value;
}
if (path) {
const insert = insertByType[type];
const operation = insert && insert(op, doc)(map, tmpDoc);
ops.push(operation);
}
return [map, ops];
} catch (e) {
console.error(e, op, (0, _utils.toJS)(map));
return [map, ops];
}
};
var _default = opInsert;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb252ZXJ0L2luc2VydC50cyJdLCJuYW1lcyI6WyJpbnNlcnRUZXh0T3AiLCJpbmRleCIsInBhdGgiLCJ2YWx1ZSIsIm1hcCIsImRvYyIsInNsYXRlUGF0aCIsIm5vZGUiLCJOb2RlIiwiZ2V0IiwidGV4dCIsInNsaWNlIiwiam9pbiIsInR5cGUiLCJvZmZzZXQiLCJtYXJrcyIsImluc2VydE5vZGVPcCIsIm9iaiIsInRtcERvYyIsIm9wcyIsIml0ZXJhdGUiLCJjaGlsZHJlbiIsImpzb24iLCJwdXNoIiwicGFyZW50IiwibGVuZ3RoIiwic3BsaWNlIiwiZm9yRWFjaCIsIm4iLCJpIiwiQXV0b21lcmdlIiwiZ2V0T2JqZWN0QnlJZCIsInNvdXJjZSIsImluc2VydEJ5VHlwZSIsImxpc3QiLCJvcEluc2VydCIsIm9wIiwibGluayIsImhhc093blByb3BlcnR5IiwiY29uY2F0IiwiaW5zZXJ0Iiwib3BlcmF0aW9uIiwiZSIsImNvbnNvbGUiLCJlcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7O0FBSUEsTUFBTUEsWUFBWSxHQUFHO0FBQUEsTUFBQztBQUFFQyxJQUFBQSxLQUFGO0FBQVNDLElBQUFBLElBQVQ7QUFBZUMsSUFBQUE7QUFBZixHQUFEO0FBQUEsU0FBNEMsQ0FDL0RDLEdBRCtELEVBRS9EQyxHQUYrRCxLQUc1RDtBQUNILFVBQU1DLFNBQVMsR0FBRyx3QkFBWUosSUFBWixDQUFsQjs7QUFDQSxVQUFNSyxJQUFJLEdBQUdDLFlBQUtDLEdBQUwsQ0FBU0osR0FBVCxFQUFjQyxTQUFkLENBQWI7O0FBQ0EsVUFBTUksSUFBSSxHQUFHSCxJQUFJLENBQUNHLElBQWxCO0FBQ0FILElBQUFBLElBQUksQ0FBQ0csSUFBTCxHQUFZLENBQUNBLElBQUksQ0FBQ0MsS0FBTCxDQUFXLENBQVgsRUFBY1YsS0FBZCxDQUFELEVBQXVCRSxLQUF2QixFQUE4Qk8sSUFBSSxDQUFDQyxLQUFMLENB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QUtoQyxHQUFMLENBQXJCO0FBRUEsV0FBTyxDQUFDQSxHQUFELEVBQU1lLEdBQU4sQ0FBUDtBQUNEO0FBQ0YsQ0FqQ0Q7O2VBbUNlZ0IsUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEF1dG9tZXJnZSBmcm9tICdhdXRvbWVyZ2UnXG5pbXBvcnQgeyBFbGVtZW50LCBOb2RlLCBUZXh0IH0gZnJvbSAnc2xhdGUnXG5cbmltcG9ydCB7IHRvU2xhdGVQYXRoLCB0b0pTIH0gZnJvbSAnLi4vdXRpbHMnXG5cbmltcG9ydCB7IFN5bmNEb2MgfSBmcm9tICcuLi9tb2RlbCdcblxuY29uc3QgaW5zZXJ0VGV4dE9wID0gKHsgaW5kZXgsIHBhdGgsIHZhbHVlIH06IEF1dG9tZXJnZS5EaWZmKSA9PiAoXG4gIG1hcDogYW55LFxuICBkb2M6IEVsZW1lbnRcbikgPT4ge1xuICBjb25zdCBzbGF0ZVBhdGggPSB0b1NsYXRlUGF0aChwYXRoKVxuICBjb25zdCBub2RlID0gTm9kZS5nZXQoZG9jLCBzbGF0ZVBhdGgpISBhcyBUZXh0XG4gIGNvbnN0IHRleHQgPSBub2RlLnRleHQhIGFzIHN0cmluZ1xuICBub2RlLnRleHQgPSBbdGV4dC5zbGljZSgwLCBpbmRleCksIHZhbHVlLCB0ZXh0LnNsaWNlKGluZGV4KV0uam9pbignJylcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnaW5zZXJ0X3RleHQnLFxuICAgIHBhdGg6IHNsYXRlUGF0aCxcbiAgICBvZmZzZXQ6IGluZGV4LFxuICAgIHRleHQ6IHZhbHVlLFxuICAgIG1hcmtzOiBbXVxuICB9XG59XG5cbmNvbnN0IGluc2VydE5vZGVPcCA9IChcbiAgeyB2YWx1ZSwgb2JqLCBpbmRleCwgcGF0aCB9OiBBdXRvbWVyZ2UuRGlmZixcbiAgZG9jOiBhbnlcbikgPT4gKG1hcDogYW55LCB0bXBEb2M6IEVsZW1lbnQpID0+IHtcbiAgY29uc3Qgb3BzOiBhbnkgPSBbXVxuXG4gIGNvbnN0IGl0ZXJhdGUgPSAoeyBjaGlsZHJlbiwgLi4uanNvbiB9OiBhbnksIHBhdGg6IGFueSkgPT4ge1xuICAgIGNvbnN0IG5vZGUgPSB0b0pTKGNoaWxkcmVuID8geyAuLi5qc29uLCBjaGlsZHJlbjogW10gfSA6IGpzb24pXG5cbiAgICBvcHMucHVzaCh7XG4gICAgICB0eXBlOiAnaW5zZXJ0X25vZGUnLFxuICAgICAgcGF0aCxcbiAgICAgIG5vZGVcbiAgICB9KVxuXG4gICAgLy8gdXBkYXRlIHRoZSB0ZW1wIGRvYyBzbyBsYXRlciByZW1vdmVfbm9kZSB3b24ndCBlcnJvci5cbiAgICBjb25zdCBwYXJlbnQgPSBOb2RlLnBhcmVudCh0bXBEb2MsIHBhdGgpXG4gICAgY29uc3QgaW5kZXggPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV1cbiAgICBwYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCB0b0pTKG5vZGUpKVxuXG4gICAgY2hpbGRyZW4gJiZcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goKG46IGFueSwgaTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBtYXBbbl0gfHwgQXV0b21lcmdlLmdldE9iamVjdEJ5SWQoZG9jLCBuKVxuXG4gICAgICAgIGl0ZXJhdGUoKG5vZGUgJiYgdG9KUyhub2RlKSkgfHwgbiwgWy4uLnBhdGgsIGldKVxuICAgICAgfSlcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZSA9XG4gICAgbWFwW3ZhbHVlXSB8fCB0b0pTKG1hcFtvYmpdIHx8IEF1dG9tZXJnZS5nZXRPYmplY3RCeUlkKGRvYywgdmFsdWUpKVxuXG4gIHNvdXJjZSAmJiBpdGVyYXRlKHNvdXJjZSwgWy4uLnRvU2xhdGVQYXRoKHBhdGgpLCBpbmRleF0pXG5cbiAgcmV0dXJuIG9wc1xufVxuXG5jb25zdCBpbnNlcnRCeVR5cGUgPSB7XG4gIHRleHQ6IGluc2VydFRleHRPcCxcbiAgbGlzdDogaW5zZXJ0Tm9kZU9wXG59XG5cbmNvbnN0IG9wSW5zZXJ0ID0gKFxuICBvcDogQXV0b21lcmdlLkRpZmYsXG4gIFttYXAsIG9wc106IGFueSxcbiAgZG9jOiBTeW5jRG9jLFxuICB0bXBEb2M6IEVsZW1lbnRcbikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHsgbGluaywgb2JqLCBwYXRoLCBpbmRleCwgdHlwZSwgdmFsdWUgfSA9IG9wXG5cbiAgICBpZiAobGluayAmJiBtYXAuaGFzT3duUHJvcGVydHkob2JqKSkge1xuICAgICAgbWFwW29ial0uc3BsaWNlKGluZGV4LCAwLCBtYXBbdmFsdWVdIHx8IHZhbHVlKVxuICAgIH0gZWxzZSBpZiAoKHR5cGUgPT09ICd0ZXh0JyB8fCB0eXBlID09PSAnbGlzdCcpICYmICFwYXRoKSB7XG4gICAgICBtYXBbb2JqXSA9IG1hcFtvYmpdXG4gICAgICAgID8gbWFwW29ial1cbiAgICAgICAgICAgIC5zbGljZSgwLCBpbmRleClcbiAgICAgICAgICAgIC5jb25jYXQodmFsdWUpXG4gICAgICAgICAgICAuY29uY2F0KG1hcFtvYmpdLnNsaWNlKGluZGV4KSlcbiAgICAgICAgOiB2YWx1ZVxuICAgIH1cbiAgICBpZiAocGF0aCkge1xuICAgICAgY29uc3QgaW5zZXJ0ID0gaW5zZXJ0QnlUeXBlW3R5cGVdXG5cbiAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IGluc2VydCAmJiBpbnNlcnQob3AsIGRvYykobWFwLCB0bXBEb2MpXG5cbiAgICAgIG9wcy5wdXNoKG9wZXJhdGlvbilcbiAgICB9XG5cbiAgICByZXR1cm4gW21hcCwgb3BzXVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihlLCBvcCwgdG9KUyhtYXApKVxuXG4gICAgcmV0dXJuIFttYXAsIG9wc11cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBvcEluc2VydFxuIl19