UNPKG

@wordpress/sync

Version:
44 lines (43 loc) 1.2 kB
// packages/sync/src/utils.ts import * as Y from "yjs"; import * as buffer from "lib0/buffer"; import { CRDT_DOC_META_PERSISTENCE_KEY, CRDT_DOC_VERSION, CRDT_STATE_MAP_KEY, CRDT_STATE_VERSION_KEY } from "./config"; function createYjsDoc(documentMeta) { const metaMap = new Map( Object.entries(documentMeta) ); const ydoc = new Y.Doc({ meta: metaMap }); const stateMap = ydoc.getMap(CRDT_STATE_MAP_KEY); stateMap.set(CRDT_STATE_VERSION_KEY, CRDT_DOC_VERSION); return ydoc; } function serializeCrdtDoc(crdtDoc) { return JSON.stringify({ document: buffer.toBase64(Y.encodeStateAsUpdateV2(crdtDoc)) }); } function deserializeCrdtDoc(serializedCrdtDoc) { try { const { document } = JSON.parse(serializedCrdtDoc); const docMetaMap = /* @__PURE__ */ new Map(); docMetaMap.set(CRDT_DOC_META_PERSISTENCE_KEY, true); const ydoc = createYjsDoc({ meta: docMetaMap }); const yupdate = buffer.fromBase64(document); Y.applyUpdateV2(ydoc, yupdate); ydoc.clientID = Math.floor(Math.random() * 1e9); return ydoc; } catch (e) { return null; } } export { createYjsDoc, deserializeCrdtDoc, serializeCrdtDoc }; //# sourceMappingURL=utils.js.map