mirror of
https://github.com/loro-dev/loro.git
synced 2025-02-10 14:25:39 +00:00
8039e446a8
* feat: add a method to find id spans between frontiers * feat(wasm): expose frontiers (from&to) in event * test: fix test * chore: changeset * refactor: rename to findIdSpansBetween * test: fix test err * refactor: rename the fields of version vector diff replace `left` and `right` with `retreat` and `forward` * docs: add more details about find_id_spans_between
60 lines
2.1 KiB
TypeScript
60 lines
2.1 KiB
TypeScript
import init, { initSync, LoroDoc, LoroMap, LoroText } from "../web/index.js";
|
||
import { expect } from "npm:expect";
|
||
|
||
await init();
|
||
|
||
Deno.test("basic", () => {
|
||
const doc = new LoroDoc();
|
||
doc.getText("text").insert(0, "Hello, world!");
|
||
expect(doc.getText("text").toString()).toBe("Hello, world!");
|
||
});
|
||
|
||
Deno.test("fork when detached", () => {
|
||
const doc: LoroDoc = new LoroDoc();
|
||
doc.setPeerId("0");
|
||
doc.getText("text").insert(0, "Hello, world!");
|
||
doc.checkout([{ peer: "0", counter: 5 }]);
|
||
const newDoc = doc.fork();
|
||
newDoc.setPeerId("1");
|
||
newDoc.getText("text").insert(6, " Alice!");
|
||
// ┌───────────────┐ ┌───────────────┐
|
||
// │ Hello, │◀─┬──│ world! │
|
||
// └───────────────┘ │ └───────────────┘
|
||
// │
|
||
// │ ┌───────────────┐
|
||
// └──│ Alice! │
|
||
// └───────────────┘
|
||
doc.import(newDoc.export({ mode: "update" }));
|
||
doc.checkoutToLatest();
|
||
console.log(doc.getText("text").toString()); // "Hello, world! Alice!"
|
||
});
|
||
|
||
Deno.test("isDeleted", () => {
|
||
const doc = new LoroDoc();
|
||
const list = doc.getList("list");
|
||
expect(list.isDeleted()).toBe(false);
|
||
const tree = doc.getTree("root");
|
||
const node = tree.createNode(undefined, undefined);
|
||
const containerBefore = node.data.setContainer("container", new LoroMap());
|
||
containerBefore.set("A", "B");
|
||
tree.delete(node.id);
|
||
const containerAfter = doc.getContainerById(containerBefore.id) as LoroMap;
|
||
expect(containerAfter.isDeleted()).toBe(true);
|
||
});
|
||
|
||
Deno.test("toJsonWithReplacer", () => {
|
||
const doc = new LoroDoc();
|
||
const text = doc.getText("text");
|
||
text.insert(0, "Hello");
|
||
text.mark({ start: 0, end: 2 }, "bold", true);
|
||
|
||
// Use delta to represent text
|
||
// @ts-ignore: deno is not very clever
|
||
const json = doc.toJsonWithReplacer((key, value) => {
|
||
if (value instanceof LoroText) {
|
||
return value.toDelta();
|
||
}
|
||
|
||
return value;
|
||
});
|
||
});
|