loro-crdt 1.2.7 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +120 -0
- package/base64/index.js +213 -33
- package/base64/loro_wasm.d.ts +128 -7
- package/base64/loro_wasm_bg-faa2e3e4.js +64 -0
- package/bundler/loro_wasm.d.ts +128 -7
- package/bundler/loro_wasm_bg.js +208 -28
- package/bundler/loro_wasm_bg.wasm +0 -0
- package/bundler/loro_wasm_bg.wasm.d.ts +6 -1
- package/nodejs/loro_wasm.d.ts +128 -7
- package/nodejs/loro_wasm.js +208 -28
- package/nodejs/loro_wasm_bg.wasm +0 -0
- package/nodejs/loro_wasm_bg.wasm.d.ts +6 -1
- package/package.json +1 -1
- package/web/loro_wasm.d.ts +134 -8
- package/web/loro_wasm.js +206 -28
- package/web/loro_wasm_bg.wasm +0 -0
- package/web/loro_wasm_bg.wasm.d.ts +6 -1
- package/base64/loro_wasm_bg-68a6c103.js +0 -64
package/base64/loro_wasm.d.ts
CHANGED
|
@@ -172,7 +172,7 @@ interface LoroDoc {
|
|
|
172
172
|
* const doc = new LoroDoc();
|
|
173
173
|
* const text = doc.getText("text");
|
|
174
174
|
* text.insert(0, "Hello");
|
|
175
|
-
* text.mark(0, 2,
|
|
175
|
+
* text.mark({ start: 0, end: 2 }, "bold", true);
|
|
176
176
|
*
|
|
177
177
|
* // Use delta to represent text
|
|
178
178
|
* const json = doc.toJsonWithReplacer((key, value) => {
|
|
@@ -264,6 +264,27 @@ export type Value =
|
|
|
264
264
|
| Value[]
|
|
265
265
|
| undefined;
|
|
266
266
|
|
|
267
|
+
export type IdSpan = {
|
|
268
|
+
peer: PeerID,
|
|
269
|
+
counter: number,
|
|
270
|
+
length: number,
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
export type VersionVectorDiff = {
|
|
274
|
+
/**
|
|
275
|
+
* The spans that the `from` side needs to retreat to reach the `to` side
|
|
276
|
+
*
|
|
277
|
+
* These spans are included in the `from`, but not in the `to`
|
|
278
|
+
*/
|
|
279
|
+
retreat: IdSpan[],
|
|
280
|
+
/**
|
|
281
|
+
* The spans that the `from` side needs to forward to reach the `to` side
|
|
282
|
+
*
|
|
283
|
+
* These spans are included in the `to`, but not in the `from`
|
|
284
|
+
*/
|
|
285
|
+
forward: IdSpan[],
|
|
286
|
+
}
|
|
287
|
+
|
|
267
288
|
export type UndoConfig = {
|
|
268
289
|
mergeInterval?: number,
|
|
269
290
|
maxUndoSteps?: number,
|
|
@@ -627,6 +648,8 @@ export interface LoroEventBatch {
|
|
|
627
648
|
*/
|
|
628
649
|
currentTarget?: ContainerID;
|
|
629
650
|
events: LoroEvent[];
|
|
651
|
+
from: Frontiers;
|
|
652
|
+
to: Frontiers;
|
|
630
653
|
}
|
|
631
654
|
|
|
632
655
|
/**
|
|
@@ -793,9 +816,19 @@ interface LoroDoc<T extends Record<string, Container> = Record<string, Container
|
|
|
793
816
|
*
|
|
794
817
|
* @param start - The start version vector.
|
|
795
818
|
* @param end - The end version vector.
|
|
819
|
+
* @param withPeerCompression - Whether to compress the peer IDs in the updates. Defaults to true. If you want to process the operations in application code, set this to false.
|
|
796
820
|
* @returns The updates in the given range.
|
|
797
821
|
*/
|
|
798
|
-
exportJsonUpdates(start?: VersionVector, end?: VersionVector): JsonSchema;
|
|
822
|
+
exportJsonUpdates(start?: VersionVector, end?: VersionVector, withPeerCompression?: boolean): JsonSchema;
|
|
823
|
+
/**
|
|
824
|
+
* Export the readable [`Change`]s in the given [`IdSpan`].
|
|
825
|
+
*
|
|
826
|
+
* The peers are not compressed in the returned changes.
|
|
827
|
+
*
|
|
828
|
+
* @param idSpan - The id span to export.
|
|
829
|
+
* @returns The changes in the given id span.
|
|
830
|
+
*/
|
|
831
|
+
exportJsonInIdSpan(idSpan: IdSpan): JsonChange[];
|
|
799
832
|
}
|
|
800
833
|
interface LoroList<T = unknown> {
|
|
801
834
|
new(): LoroList<T>;
|
|
@@ -1469,9 +1502,12 @@ export class LoroDoc {
|
|
|
1469
1502
|
*/
|
|
1470
1503
|
setRecordTimestamp(auto_record: boolean): void;
|
|
1471
1504
|
/**
|
|
1472
|
-
* If two continuous local changes are within the interval, they will be merged into one change.
|
|
1505
|
+
* If two continuous local changes are within (<=) the interval(**in seconds**), they will be merged into one change.
|
|
1506
|
+
*
|
|
1507
|
+
* The default value is 1_000 seconds.
|
|
1473
1508
|
*
|
|
1474
|
-
*
|
|
1509
|
+
* By default, we record timestamps in seconds for each change. So if the merge interval is 1, and changes A and B
|
|
1510
|
+
* have timestamps of 3 and 4 respectively, then they will be merged into one change
|
|
1475
1511
|
* @param {number} interval
|
|
1476
1512
|
*/
|
|
1477
1513
|
setChangeMergeInterval(interval: number): void;
|
|
@@ -1653,6 +1689,54 @@ export class LoroDoc {
|
|
|
1653
1689
|
*/
|
|
1654
1690
|
travelChangeAncestors(ids: ({ peer: PeerID, counter: number })[], f: (change: Change) => boolean): void;
|
|
1655
1691
|
/**
|
|
1692
|
+
* Find the op id spans that between the `from` version and the `to` version.
|
|
1693
|
+
*
|
|
1694
|
+
* You can combine it with `exportJsonInIdSpan` to get the changes between two versions.
|
|
1695
|
+
*
|
|
1696
|
+
* You can use it to travel all the changes from `from` to `to`. `from` and `to` are frontiers,
|
|
1697
|
+
* and they can be concurrent to each other. You can use it to find all the changes related to an event:
|
|
1698
|
+
*
|
|
1699
|
+
* @example
|
|
1700
|
+
* ```ts
|
|
1701
|
+
* import { LoroDoc } from "loro-crdt";
|
|
1702
|
+
*
|
|
1703
|
+
* const docA = new LoroDoc();
|
|
1704
|
+
* docA.setPeerId("1");
|
|
1705
|
+
* const docB = new LoroDoc();
|
|
1706
|
+
*
|
|
1707
|
+
* docA.getText("text").update("Hello");
|
|
1708
|
+
* docA.commit();
|
|
1709
|
+
* const snapshot = docA.export({ mode: "snapshot" });
|
|
1710
|
+
* let done = false;
|
|
1711
|
+
* docB.subscribe(e => {
|
|
1712
|
+
* const spans = docB.findIdSpansBetween(e.from, e.to);
|
|
1713
|
+
* const changes = docB.exportJsonInIdSpan(spans.forward[0]);
|
|
1714
|
+
* console.log(changes);
|
|
1715
|
+
* // [{
|
|
1716
|
+
* // id: "0@1",
|
|
1717
|
+
* // timestamp: expect.any(Number),
|
|
1718
|
+
* // deps: [],
|
|
1719
|
+
* // lamport: 0,
|
|
1720
|
+
* // msg: undefined,
|
|
1721
|
+
* // ops: [{
|
|
1722
|
+
* // container: "cid:root-text:Text",
|
|
1723
|
+
* // counter: 0,
|
|
1724
|
+
* // content: {
|
|
1725
|
+
* // type: "insert",
|
|
1726
|
+
* // pos: 0,
|
|
1727
|
+
* // text: "Hello"
|
|
1728
|
+
* // }
|
|
1729
|
+
* // }]
|
|
1730
|
+
* // }]
|
|
1731
|
+
* });
|
|
1732
|
+
* docB.import(snapshot);
|
|
1733
|
+
* ```
|
|
1734
|
+
* @param {({ peer: PeerID, counter: number })[]} from
|
|
1735
|
+
* @param {({ peer: PeerID, counter: number })[]} to
|
|
1736
|
+
* @returns {VersionVectorDiff}
|
|
1737
|
+
*/
|
|
1738
|
+
findIdSpansBetween(from: ({ peer: PeerID, counter: number })[], to: ({ peer: PeerID, counter: number })[]): VersionVectorDiff;
|
|
1739
|
+
/**
|
|
1656
1740
|
* Checkout the `DocState` to a specific version.
|
|
1657
1741
|
*
|
|
1658
1742
|
* > The document becomes detached during a `checkout` operation.
|
|
@@ -1689,12 +1773,14 @@ export class LoroDoc {
|
|
|
1689
1773
|
*/
|
|
1690
1774
|
setPeerId(peer_id: number | bigint | `${number}`): void;
|
|
1691
1775
|
/**
|
|
1692
|
-
* Commit the cumulative auto
|
|
1776
|
+
* Commit the cumulative auto-committed transaction.
|
|
1693
1777
|
*
|
|
1694
1778
|
* You can specify the `origin`, `timestamp`, and `message` of the commit.
|
|
1695
1779
|
*
|
|
1696
1780
|
* - The `origin` is used to mark the event
|
|
1697
1781
|
* - The `message` works like a git commit message, which will be recorded and synced to peers
|
|
1782
|
+
* - The `timestamp` is the number of seconds that have elapsed since 00:00:00 UTC on January 1, 1970.
|
|
1783
|
+
* It defaults to `Date.now() / 1000` when timestamp recording is enabled
|
|
1698
1784
|
*
|
|
1699
1785
|
* The events will be emitted after a transaction is committed. A transaction is committed when:
|
|
1700
1786
|
*
|
|
@@ -2014,7 +2100,7 @@ export class LoroDoc {
|
|
|
2014
2100
|
*
|
|
2015
2101
|
* @example
|
|
2016
2102
|
* ```ts
|
|
2017
|
-
* import { LoroDoc, LoroText } from "loro-crdt";
|
|
2103
|
+
* import { LoroDoc, LoroText, LoroMap } from "loro-crdt";
|
|
2018
2104
|
*
|
|
2019
2105
|
* const doc = new LoroDoc();
|
|
2020
2106
|
* const list = doc.getList("list");
|
|
@@ -2195,6 +2281,40 @@ export class LoroDoc {
|
|
|
2195
2281
|
*/
|
|
2196
2282
|
getChangedContainersIn(id: { peer: PeerID, counter: number }, len: number): (ContainerID)[];
|
|
2197
2283
|
/**
|
|
2284
|
+
* Revert the document to the given frontiers.
|
|
2285
|
+
*
|
|
2286
|
+
* The doc will not become detached when using this method. Instead, it will generate a series
|
|
2287
|
+
* of operations to revert the document to the given version.
|
|
2288
|
+
*
|
|
2289
|
+
* @example
|
|
2290
|
+
* ```ts
|
|
2291
|
+
* const doc = new LoroDoc();
|
|
2292
|
+
* doc.setPeerId("1");
|
|
2293
|
+
* const text = doc.getText("text");
|
|
2294
|
+
* text.insert(0, "Hello");
|
|
2295
|
+
* doc.commit();
|
|
2296
|
+
* doc.revertTo([{ peer: "1", counter: 1 }]);
|
|
2297
|
+
* expect(doc.getText("text").toString()).toBe("He");
|
|
2298
|
+
* ```
|
|
2299
|
+
* @param {({ peer: PeerID, counter: number })[]} frontiers
|
|
2300
|
+
*/
|
|
2301
|
+
revertTo(frontiers: ({ peer: PeerID, counter: number })[]): void;
|
|
2302
|
+
/**
|
|
2303
|
+
* Apply a diff batch to the document
|
|
2304
|
+
* @param {Record<ContainerID, Diff>} diff
|
|
2305
|
+
*/
|
|
2306
|
+
applyDiff(diff: Record<ContainerID, Diff>): void;
|
|
2307
|
+
/**
|
|
2308
|
+
* Calculate the differences between two frontiers
|
|
2309
|
+
*
|
|
2310
|
+
* The entries in the returned object are sorted by causal order: the creation of a child container will be
|
|
2311
|
+
* presented before its use.
|
|
2312
|
+
* @param {({ peer: PeerID, counter: number })[]} from
|
|
2313
|
+
* @param {({ peer: PeerID, counter: number })[]} to
|
|
2314
|
+
* @returns {Record<ContainerID, Diff>}
|
|
2315
|
+
*/
|
|
2316
|
+
diff(from: ({ peer: PeerID, counter: number })[], to: ({ peer: PeerID, counter: number })[]): Record<ContainerID, Diff>;
|
|
2317
|
+
/**
|
|
2198
2318
|
* Peer ID of the current writer.
|
|
2199
2319
|
*/
|
|
2200
2320
|
readonly peerId: bigint;
|
|
@@ -2488,7 +2608,7 @@ export class LoroMap {
|
|
|
2488
2608
|
*
|
|
2489
2609
|
* @example
|
|
2490
2610
|
* ```ts
|
|
2491
|
-
* import { LoroDoc } from "loro-crdt";
|
|
2611
|
+
* import { LoroDoc, LoroText } from "loro-crdt";
|
|
2492
2612
|
*
|
|
2493
2613
|
* const doc = new LoroDoc();
|
|
2494
2614
|
* doc.setPeerId("1");
|
|
@@ -3365,6 +3485,7 @@ export class UndoManager {
|
|
|
3365
3485
|
setMaxUndoSteps(steps: number): void;
|
|
3366
3486
|
/**
|
|
3367
3487
|
* Set the merge interval (in ms).
|
|
3488
|
+
*
|
|
3368
3489
|
* If the interval is set to 0, the undo steps will not be merged.
|
|
3369
3490
|
* Otherwise, the undo steps will be merged if the interval between the two steps is less than the given interval.
|
|
3370
3491
|
* @param {number} interval
|