UNPKG

slate-yjs

Version:
110 lines 7.74 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.withYjs = exports.YjsEditor = void 0; const slate_1 = require("slate"); const tiny_invariant_1 = __importDefault(require("tiny-invariant")); const applyToSlate_1 = require("../applyToSlate"); const applyToYjs_1 = __importDefault(require("../applyToYjs")); const model_1 = require("../model"); const utils_1 = require("../utils"); const IS_REMOTE = new WeakSet(); const LOCAL_OPERATIONS = new WeakMap(); const SHARED_TYPES = new WeakMap(); exports.YjsEditor = { /** * Set the editor value to the content of the to the editor bound shared type. */ synchronizeValue: (e) => { slate_1.Editor.withoutNormalizing(e, () => { e.children = utils_1.toSlateDoc(e.sharedType); e.onChange(); }); }, /** * Returns whether the editor currently is applying remote changes. */ sharedType: (editor) => { const sharedType = SHARED_TYPES.get(editor); tiny_invariant_1.default(sharedType, 'YjsEditor without attached shared type'); return sharedType; }, /** * Returns whether the editor currently is applying remote changes. */ isRemote: (editor) => { return IS_REMOTE.has(editor); }, /** * Performs an action as a remote operation. */ asRemote: (editor, fn) => { const wasRemote = exports.YjsEditor.isRemote(editor); IS_REMOTE.add(editor); fn(); if (!wasRemote) { IS_REMOTE.delete(editor); } }, /** * Unobserves the shared type. */ destroy: (editor) => { editor.destroy(); }, }; function localOperations(editor) { const operations = LOCAL_OPERATIONS.get(editor); tiny_invariant_1.default(operations, 'YjsEditor without attached local operations'); return operations; } function trackLocalOperations(editor, operation) { if (!exports.YjsEditor.isRemote(editor)) { localOperations(editor).add(operation); } } /** * Applies a slate operations to the bound shared type. */ function applyLocalOperations(editor) { const editorLocalOperations = localOperations(editor); applyToYjs_1.default(exports.YjsEditor.sharedType(editor), Array.from(editorLocalOperations), model_1.slateYjsOriginSymbol); editorLocalOperations.clear(); } /** * Apply Yjs events to slate */ function applyRemoteYjsEvents(editor, events) { slate_1.Editor.withoutNormalizing(editor, () => exports.YjsEditor.asRemote(editor, () => applyToSlate_1.applyYjsEvents(editor, events.filter((event) => event.transaction.origin !== model_1.slateYjsOriginSymbol)))); } function withYjs(editor, sharedType, { synchronizeValue = true } = {}) { const e = editor; e.sharedType = sharedType; SHARED_TYPES.set(editor, sharedType); LOCAL_OPERATIONS.set(editor, new Set()); if (synchronizeValue) { setTimeout(() => exports.YjsEditor.synchronizeValue(e), 0); } const applyEvents = (events) => applyRemoteYjsEvents(e, events); sharedType.observeDeep(applyEvents); const { apply, onChange, destroy } = e; e.apply = (op) => { trackLocalOperations(e, op); apply(op); }; e.onChange = () => { applyLocalOperations(e); onChange(); }; e.destroy = () => { sharedType.unobserveDeep(applyEvents); if (destroy) { destroy(); } }; return e; } exports.withYjs = withYjs; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWpzRWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BsdWdpbi95anNFZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsaUNBQTBDO0FBQzFDLG9FQUF1QztBQUV2QyxrREFBaUQ7QUFDakQsK0RBQTBDO0FBQzFDLG9DQUE0RDtBQUM1RCxvQ0FBc0M7QUFFdEMsTUFBTSxTQUFTLEdBQW9CLElBQUksT0FBTyxFQUFFLENBQUM7QUFDakQsTUFBTSxnQkFBZ0IsR0FBb0MsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUN4RSxNQUFNLFlBQVksR0FBZ0MsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQVFuRCxRQUFBLFNBQVMsR0FBRztJQUN2Qjs7T0FFRztJQUNILGdCQUFnQixFQUFFLENBQUMsQ0FBWSxFQUFRLEVBQUU7UUFDdkMsY0FBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUU7WUFDaEMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxrQkFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsRUFBRSxDQUFDLE1BQWlCLEVBQWMsRUFBRTtRQUM1QyxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLHdCQUFTLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLENBQUM7UUFDaEUsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUSxFQUFFLENBQUMsTUFBaUIsRUFBVyxFQUFFO1FBQ3ZDLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRLEVBQUUsQ0FBQyxNQUFpQixFQUFFLEVB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