diff --git a/.changeset/rotten-penguins-relate.md b/.changeset/rotten-penguins-relate.md new file mode 100644 index 000000000..962a7c0f0 --- /dev/null +++ b/.changeset/rotten-penguins-relate.md @@ -0,0 +1,5 @@ +--- +"loro-crdt": patch +--- + +Fix detach + attach error diff --git a/crates/loro-internal/src/loro.rs b/crates/loro-internal/src/loro.rs index ddc17b745..147ab9d68 100644 --- a/crates/loro-internal/src/loro.rs +++ b/crates/loro-internal/src/loro.rs @@ -282,6 +282,7 @@ impl LoroDoc { #[inline(always)] pub fn detach(&self) { + self.commit_then_stop(); self.set_detached(true); } diff --git a/crates/loro-wasm/tests/basic.test.ts b/crates/loro-wasm/tests/basic.test.ts index 64c56062a..133df50bd 100644 --- a/crates/loro-wasm/tests/basic.test.ts +++ b/crates/loro-wasm/tests/basic.test.ts @@ -984,3 +984,12 @@ it("can use version vector multiple times", () => { doc.vvToFrontiers(v); v.toJSON(); }) + +it("detach and attach on empty doc", () => { + const doc = new LoroDoc(); + expect(doc.isDetached()).toBe(false); + doc.detach(); + expect(doc.isDetached()).toBe(true); + doc.attach(); + expect(doc.isDetached()).toBe(false); +}) diff --git a/crates/loro/tests/loro_rust_test.rs b/crates/loro/tests/loro_rust_test.rs index 5510c52fa..d99df990e 100644 --- a/crates/loro/tests/loro_rust_test.rs +++ b/crates/loro/tests/loro_rust_test.rs @@ -2339,3 +2339,13 @@ fn test_get_or_create_container_with_null() { json!({ "root": { "key": {} } }) ); } + +#[test] +fn test_detach_and_attach() { + let doc = LoroDoc::new(); + assert!(!doc.is_detached()); + doc.detach(); + assert!(doc.is_detached()); + doc.attach(); + assert!(!doc.is_detached()); +}