From 820898cf5eca1de808466451ed1ae644e10c3745 Mon Sep 17 00:00:00 2001 From: David Lee Date: Tue, 21 Jan 2025 10:13:16 -0800 Subject: [PATCH] feat(crdt-yjs): 1s merge interval (#859) --- .changeset/proud-apricots-serve.md | 5 +++++ packages/crdt-loro/src/doc/CrdtLoroDoc.ts | 7 +++++-- packages/crdt-yjs/src/doc/CrdtYjsDoc.ts | 4 +++- 3 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 .changeset/proud-apricots-serve.md diff --git a/.changeset/proud-apricots-serve.md b/.changeset/proud-apricots-serve.md new file mode 100644 index 000000000..beeea187e --- /dev/null +++ b/.changeset/proud-apricots-serve.md @@ -0,0 +1,5 @@ +--- +"@pluv/crdt-yjs": patch +--- + +Increase undo/redo merge interval from 0s to 1s. diff --git a/packages/crdt-loro/src/doc/CrdtLoroDoc.ts b/packages/crdt-loro/src/doc/CrdtLoroDoc.ts index d6c91e44a..0cdcc7427 100644 --- a/packages/crdt-loro/src/doc/CrdtLoroDoc.ts +++ b/packages/crdt-loro/src/doc/CrdtLoroDoc.ts @@ -5,6 +5,9 @@ import type { Container } from "loro-crdt"; import { LoroDoc, LoroEventBatch, LoroList, LoroMap, LoroText, UndoManager, isContainer } from "loro-crdt"; import type { LoroType } from "../types"; +const MAX_UNDO_STEPS = 100; +const MERGE_INTERVAL_MS = 1_000; + export class CrdtLoroDoc>> extends AbstractCrdtDoc { public value: LoroDoc = new LoroDoc(); @@ -190,8 +193,8 @@ export class CrdtLoroDoc>> ex } this._undoManager = new UndoManager(this.value, { - maxUndoSteps: 100, - mergeInterval: 1_000, // 1_000ms, + maxUndoSteps: MAX_UNDO_STEPS, + mergeInterval: MERGE_INTERVAL_MS, }); return this; diff --git a/packages/crdt-yjs/src/doc/CrdtYjsDoc.ts b/packages/crdt-yjs/src/doc/CrdtYjsDoc.ts index fed0429f0..245b7939e 100644 --- a/packages/crdt-yjs/src/doc/CrdtYjsDoc.ts +++ b/packages/crdt-yjs/src/doc/CrdtYjsDoc.ts @@ -22,6 +22,8 @@ import type { YjsType } from "../types"; import { YjsXmlElement } from "../xmlElement/YjsXmlElement"; import { YjsXmlText } from "../xmlText/YjsXmlText"; +const MERGE_INTERVAL_MS = 1_000; + export class CrdtYjsDoc>> extends AbstractCrdtDoc { public value: YDoc = new YDoc(); @@ -205,7 +207,7 @@ export class CrdtYjsDoc>> exte return this; } - this._undoManager = new UndoManager(sharedTypes, { captureTimeout: 0 }); + this._undoManager = new UndoManager(sharedTypes, { captureTimeout: MERGE_INTERVAL_MS }); return this; }