loro-crdt 1.2.7 → 1.3.1
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 +126 -0
- package/README.md +1 -3
- package/base64/index.js +213 -33
- package/base64/loro_wasm.d.ts +128 -7
- package/base64/loro_wasm_bg-b0221709.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/web/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
|
|
@@ -3503,6 +3624,7 @@ export interface InitOutput {
|
|
|
3503
3624
|
readonly lorodoc_forkAt: (a: number, b: number, c: number, d: number) => void;
|
|
3504
3625
|
readonly lorodoc_checkoutToLatest: (a: number, b: number) => void;
|
|
3505
3626
|
readonly lorodoc_travelChangeAncestors: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
3627
|
+
readonly lorodoc_findIdSpansBetween: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
|
|
3506
3628
|
readonly lorodoc_checkout: (a: number, b: number, c: number, d: number) => void;
|
|
3507
3629
|
readonly lorodoc_peerId: (a: number) => number;
|
|
3508
3630
|
readonly lorodoc_peerIdStr: (a: number) => number;
|
|
@@ -3532,7 +3654,8 @@ export interface InitOutput {
|
|
|
3532
3654
|
readonly lorodoc_exportSnapshot: (a: number, b: number) => void;
|
|
3533
3655
|
readonly lorodoc_exportFrom: (a: number, b: number, c: number) => void;
|
|
3534
3656
|
readonly lorodoc_export: (a: number, b: number, c: number) => void;
|
|
3535
|
-
readonly lorodoc_exportJsonUpdates: (a: number, b: number, c: number, d: number) => void;
|
|
3657
|
+
readonly lorodoc_exportJsonUpdates: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
3658
|
+
readonly lorodoc_exportJsonInIdSpan: (a: number, b: number, c: number) => void;
|
|
3536
3659
|
readonly lorodoc_importJsonUpdates: (a: number, b: number, c: number) => void;
|
|
3537
3660
|
readonly lorodoc_import: (a: number, b: number, c: number, d: number) => void;
|
|
3538
3661
|
readonly lorodoc_importUpdateBatch: (a: number, b: number, c: number) => void;
|
|
@@ -3553,6 +3676,9 @@ export interface InitOutput {
|
|
|
3553
3676
|
readonly lorodoc_getByPath: (a: number, b: number, c: number) => number;
|
|
3554
3677
|
readonly lorodoc_getCursorPos: (a: number, b: number, c: number) => void;
|
|
3555
3678
|
readonly lorodoc_getChangedContainersIn: (a: number, b: number, c: number, d: number) => void;
|
|
3679
|
+
readonly lorodoc_revertTo: (a: number, b: number, c: number, d: number) => void;
|
|
3680
|
+
readonly lorodoc_applyDiff: (a: number, b: number, c: number) => void;
|
|
3681
|
+
readonly lorodoc_diff: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
|
|
3556
3682
|
readonly __wbg_lorotext_free: (a: number) => void;
|
|
3557
3683
|
readonly lorotext_new: () => number;
|
|
3558
3684
|
readonly lorotext_kind: (a: number) => number;
|
package/web/loro_wasm.js
CHANGED
|
@@ -229,11 +229,11 @@ function makeMutClosure(arg0, arg1, dtor, f) {
|
|
|
229
229
|
CLOSURE_DTORS.register(real, state, state);
|
|
230
230
|
return real;
|
|
231
231
|
}
|
|
232
|
-
function
|
|
232
|
+
function __wbg_adapter_60(arg0, arg1, arg2) {
|
|
233
233
|
wasm.__wbindgen_export_3(arg0, arg1, addHeapObject(arg2));
|
|
234
234
|
}
|
|
235
235
|
|
|
236
|
-
function
|
|
236
|
+
function __wbg_adapter_63(arg0, arg1) {
|
|
237
237
|
wasm.__wbindgen_export_4(arg0, arg1);
|
|
238
238
|
}
|
|
239
239
|
|
|
@@ -963,9 +963,12 @@ export class LoroDoc {
|
|
|
963
963
|
wasm.lorodoc_setRecordTimestamp(this.__wbg_ptr, auto_record);
|
|
964
964
|
}
|
|
965
965
|
/**
|
|
966
|
-
* If two continuous local changes are within the interval, they will be merged into one change.
|
|
966
|
+
* If two continuous local changes are within (<=) the interval(**in seconds**), they will be merged into one change.
|
|
967
967
|
*
|
|
968
|
-
* The default value is
|
|
968
|
+
* The default value is 1_000 seconds.
|
|
969
|
+
*
|
|
970
|
+
* By default, we record timestamps in seconds for each change. So if the merge interval is 1, and changes A and B
|
|
971
|
+
* have timestamps of 3 and 4 respectively, then they will be merged into one change
|
|
969
972
|
* @param {number} interval
|
|
970
973
|
*/
|
|
971
974
|
setChangeMergeInterval(interval) {
|
|
@@ -1229,6 +1232,72 @@ export class LoroDoc {
|
|
|
1229
1232
|
}
|
|
1230
1233
|
}
|
|
1231
1234
|
/**
|
|
1235
|
+
* Find the op id spans that between the `from` version and the `to` version.
|
|
1236
|
+
*
|
|
1237
|
+
* You can combine it with `exportJsonInIdSpan` to get the changes between two versions.
|
|
1238
|
+
*
|
|
1239
|
+
* You can use it to travel all the changes from `from` to `to`. `from` and `to` are frontiers,
|
|
1240
|
+
* and they can be concurrent to each other. You can use it to find all the changes related to an event:
|
|
1241
|
+
*
|
|
1242
|
+
* @example
|
|
1243
|
+
* ```ts
|
|
1244
|
+
* import { LoroDoc } from "loro-crdt";
|
|
1245
|
+
*
|
|
1246
|
+
* const docA = new LoroDoc();
|
|
1247
|
+
* docA.setPeerId("1");
|
|
1248
|
+
* const docB = new LoroDoc();
|
|
1249
|
+
*
|
|
1250
|
+
* docA.getText("text").update("Hello");
|
|
1251
|
+
* docA.commit();
|
|
1252
|
+
* const snapshot = docA.export({ mode: "snapshot" });
|
|
1253
|
+
* let done = false;
|
|
1254
|
+
* docB.subscribe(e => {
|
|
1255
|
+
* const spans = docB.findIdSpansBetween(e.from, e.to);
|
|
1256
|
+
* const changes = docB.exportJsonInIdSpan(spans.forward[0]);
|
|
1257
|
+
* console.log(changes);
|
|
1258
|
+
* // [{
|
|
1259
|
+
* // id: "0@1",
|
|
1260
|
+
* // timestamp: expect.any(Number),
|
|
1261
|
+
* // deps: [],
|
|
1262
|
+
* // lamport: 0,
|
|
1263
|
+
* // msg: undefined,
|
|
1264
|
+
* // ops: [{
|
|
1265
|
+
* // container: "cid:root-text:Text",
|
|
1266
|
+
* // counter: 0,
|
|
1267
|
+
* // content: {
|
|
1268
|
+
* // type: "insert",
|
|
1269
|
+
* // pos: 0,
|
|
1270
|
+
* // text: "Hello"
|
|
1271
|
+
* // }
|
|
1272
|
+
* // }]
|
|
1273
|
+
* // }]
|
|
1274
|
+
* });
|
|
1275
|
+
* docB.import(snapshot);
|
|
1276
|
+
* ```
|
|
1277
|
+
* @param {({ peer: PeerID, counter: number })[]} from
|
|
1278
|
+
* @param {({ peer: PeerID, counter: number })[]} to
|
|
1279
|
+
* @returns {VersionVectorDiff}
|
|
1280
|
+
*/
|
|
1281
|
+
findIdSpansBetween(from, to) {
|
|
1282
|
+
try {
|
|
1283
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1284
|
+
const ptr0 = passArrayJsValueToWasm0(from, wasm.__wbindgen_export_0);
|
|
1285
|
+
const len0 = WASM_VECTOR_LEN;
|
|
1286
|
+
const ptr1 = passArrayJsValueToWasm0(to, wasm.__wbindgen_export_0);
|
|
1287
|
+
const len1 = WASM_VECTOR_LEN;
|
|
1288
|
+
wasm.lorodoc_findIdSpansBetween(retptr, this.__wbg_ptr, ptr0, len0, ptr1, len1);
|
|
1289
|
+
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
|
1290
|
+
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
|
1291
|
+
var r2 = getInt32Memory0()[retptr / 4 + 2];
|
|
1292
|
+
if (r2) {
|
|
1293
|
+
throw takeObject(r1);
|
|
1294
|
+
}
|
|
1295
|
+
return takeObject(r0);
|
|
1296
|
+
} finally {
|
|
1297
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1298
|
+
}
|
|
1299
|
+
}
|
|
1300
|
+
/**
|
|
1232
1301
|
* Checkout the `DocState` to a specific version.
|
|
1233
1302
|
*
|
|
1234
1303
|
* > The document becomes detached during a `checkout` operation.
|
|
@@ -1307,12 +1376,14 @@ export class LoroDoc {
|
|
|
1307
1376
|
}
|
|
1308
1377
|
}
|
|
1309
1378
|
/**
|
|
1310
|
-
* Commit the cumulative auto
|
|
1379
|
+
* Commit the cumulative auto-committed transaction.
|
|
1311
1380
|
*
|
|
1312
1381
|
* You can specify the `origin`, `timestamp`, and `message` of the commit.
|
|
1313
1382
|
*
|
|
1314
1383
|
* - The `origin` is used to mark the event
|
|
1315
1384
|
* - The `message` works like a git commit message, which will be recorded and synced to peers
|
|
1385
|
+
* - The `timestamp` is the number of seconds that have elapsed since 00:00:00 UTC on January 1, 1970.
|
|
1386
|
+
* It defaults to `Date.now() / 1000` when timestamp recording is enabled
|
|
1316
1387
|
*
|
|
1317
1388
|
* The events will be emitted after a transaction is committed. A transaction is committed when:
|
|
1318
1389
|
*
|
|
@@ -1889,12 +1960,32 @@ export class LoroDoc {
|
|
|
1889
1960
|
* Export updates in the given range in JSON format.
|
|
1890
1961
|
* @param {any} start_vv
|
|
1891
1962
|
* @param {any} end_vv
|
|
1963
|
+
* @param {boolean | undefined} [with_peer_compression]
|
|
1892
1964
|
* @returns {JsonSchema}
|
|
1893
1965
|
*/
|
|
1894
|
-
exportJsonUpdates(start_vv, end_vv) {
|
|
1966
|
+
exportJsonUpdates(start_vv, end_vv, with_peer_compression) {
|
|
1895
1967
|
try {
|
|
1896
1968
|
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1897
|
-
wasm.lorodoc_exportJsonUpdates(retptr, this.__wbg_ptr, addHeapObject(start_vv), addHeapObject(end_vv));
|
|
1969
|
+
wasm.lorodoc_exportJsonUpdates(retptr, this.__wbg_ptr, addHeapObject(start_vv), addHeapObject(end_vv), isLikeNone(with_peer_compression) ? 0xFFFFFF : with_peer_compression ? 1 : 0);
|
|
1970
|
+
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
|
1971
|
+
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
|
1972
|
+
var r2 = getInt32Memory0()[retptr / 4 + 2];
|
|
1973
|
+
if (r2) {
|
|
1974
|
+
throw takeObject(r1);
|
|
1975
|
+
}
|
|
1976
|
+
return takeObject(r0);
|
|
1977
|
+
} finally {
|
|
1978
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1979
|
+
}
|
|
1980
|
+
}
|
|
1981
|
+
/**
|
|
1982
|
+
* @param {{ peer: PeerID, counter: number, length: number }} idSpan
|
|
1983
|
+
* @returns {any}
|
|
1984
|
+
*/
|
|
1985
|
+
exportJsonInIdSpan(idSpan) {
|
|
1986
|
+
try {
|
|
1987
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1988
|
+
wasm.lorodoc_exportJsonInIdSpan(retptr, this.__wbg_ptr, addHeapObject(idSpan));
|
|
1898
1989
|
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
|
1899
1990
|
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
|
1900
1991
|
var r2 = getInt32Memory0()[retptr / 4 + 2];
|
|
@@ -2093,7 +2184,7 @@ export class LoroDoc {
|
|
|
2093
2184
|
*
|
|
2094
2185
|
* @example
|
|
2095
2186
|
* ```ts
|
|
2096
|
-
* import { LoroDoc, LoroText } from "loro-crdt";
|
|
2187
|
+
* import { LoroDoc, LoroText, LoroMap } from "loro-crdt";
|
|
2097
2188
|
*
|
|
2098
2189
|
* const doc = new LoroDoc();
|
|
2099
2190
|
* const list = doc.getList("list");
|
|
@@ -2457,6 +2548,84 @@ export class LoroDoc {
|
|
|
2457
2548
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
2458
2549
|
}
|
|
2459
2550
|
}
|
|
2551
|
+
/**
|
|
2552
|
+
* Revert the document to the given frontiers.
|
|
2553
|
+
*
|
|
2554
|
+
* The doc will not become detached when using this method. Instead, it will generate a series
|
|
2555
|
+
* of operations to revert the document to the given version.
|
|
2556
|
+
*
|
|
2557
|
+
* @example
|
|
2558
|
+
* ```ts
|
|
2559
|
+
* const doc = new LoroDoc();
|
|
2560
|
+
* doc.setPeerId("1");
|
|
2561
|
+
* const text = doc.getText("text");
|
|
2562
|
+
* text.insert(0, "Hello");
|
|
2563
|
+
* doc.commit();
|
|
2564
|
+
* doc.revertTo([{ peer: "1", counter: 1 }]);
|
|
2565
|
+
* expect(doc.getText("text").toString()).toBe("He");
|
|
2566
|
+
* ```
|
|
2567
|
+
* @param {({ peer: PeerID, counter: number })[]} frontiers
|
|
2568
|
+
*/
|
|
2569
|
+
revertTo(frontiers) {
|
|
2570
|
+
try {
|
|
2571
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
2572
|
+
const ptr0 = passArrayJsValueToWasm0(frontiers, wasm.__wbindgen_export_0);
|
|
2573
|
+
const len0 = WASM_VECTOR_LEN;
|
|
2574
|
+
wasm.lorodoc_revertTo(retptr, this.__wbg_ptr, ptr0, len0);
|
|
2575
|
+
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
|
2576
|
+
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
|
2577
|
+
if (r1) {
|
|
2578
|
+
throw takeObject(r0);
|
|
2579
|
+
}
|
|
2580
|
+
} finally {
|
|
2581
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
2582
|
+
}
|
|
2583
|
+
}
|
|
2584
|
+
/**
|
|
2585
|
+
* Apply a diff batch to the document
|
|
2586
|
+
* @param {Record<ContainerID, Diff>} diff
|
|
2587
|
+
*/
|
|
2588
|
+
applyDiff(diff) {
|
|
2589
|
+
try {
|
|
2590
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
2591
|
+
wasm.lorodoc_applyDiff(retptr, this.__wbg_ptr, addHeapObject(diff));
|
|
2592
|
+
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
|
2593
|
+
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
|
2594
|
+
if (r1) {
|
|
2595
|
+
throw takeObject(r0);
|
|
2596
|
+
}
|
|
2597
|
+
} finally {
|
|
2598
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
2599
|
+
}
|
|
2600
|
+
}
|
|
2601
|
+
/**
|
|
2602
|
+
* Calculate the differences between two frontiers
|
|
2603
|
+
*
|
|
2604
|
+
* The entries in the returned object are sorted by causal order: the creation of a child container will be
|
|
2605
|
+
* presented before its use.
|
|
2606
|
+
* @param {({ peer: PeerID, counter: number })[]} from
|
|
2607
|
+
* @param {({ peer: PeerID, counter: number })[]} to
|
|
2608
|
+
* @returns {Record<ContainerID, Diff>}
|
|
2609
|
+
*/
|
|
2610
|
+
diff(from, to) {
|
|
2611
|
+
try {
|
|
2612
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
2613
|
+
const ptr0 = passArrayJsValueToWasm0(from, wasm.__wbindgen_export_0);
|
|
2614
|
+
const len0 = WASM_VECTOR_LEN;
|
|
2615
|
+
const ptr1 = passArrayJsValueToWasm0(to, wasm.__wbindgen_export_0);
|
|
2616
|
+
const len1 = WASM_VECTOR_LEN;
|
|
2617
|
+
wasm.lorodoc_diff(retptr, this.__wbg_ptr, ptr0, len0, ptr1, len1);
|
|
2618
|
+
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
|
2619
|
+
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
|
2620
|
+
var r2 = getInt32Memory0()[retptr / 4 + 2];
|
|
2621
|
+
if (r2) {
|
|
2622
|
+
throw takeObject(r1);
|
|
2623
|
+
}
|
|
2624
|
+
return takeObject(r0);
|
|
2625
|
+
} finally {
|
|
2626
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
2627
|
+
}
|
|
2628
|
+
}
|
|
2460
2629
|
}
|
|
2461
2630
|
|
|
2462
2631
|
const LoroListFinalization = (typeof FinalizationRegistry === 'undefined')
|
|
@@ -3354,7 +3523,7 @@ export class LoroMap {
|
|
|
3354
3523
|
*
|
|
3355
3524
|
* @example
|
|
3356
3525
|
* ```ts
|
|
3357
|
-
* import { LoroDoc } from "loro-crdt";
|
|
3526
|
+
* import { LoroDoc, LoroText } from "loro-crdt";
|
|
3358
3527
|
*
|
|
3359
3528
|
* const doc = new LoroDoc();
|
|
3360
3529
|
* doc.setPeerId("1");
|
|
@@ -5527,6 +5696,7 @@ export class UndoManager {
|
|
|
5527
5696
|
}
|
|
5528
5697
|
/**
|
|
5529
5698
|
* Set the merge interval (in ms).
|
|
5699
|
+
*
|
|
5530
5700
|
* If the interval is set to 0, the undo steps will not be merged.
|
|
5531
5701
|
* Otherwise, the undo steps will be merged if the interval between the two steps is less than the given interval.
|
|
5532
5702
|
* @param {number} interval
|
|
@@ -5833,36 +6003,36 @@ function __wbg_get_imports() {
|
|
|
5833
6003
|
imports.wbg.__wbindgen_object_drop_ref = function(arg0) {
|
|
5834
6004
|
takeObject(arg0);
|
|
5835
6005
|
};
|
|
5836
|
-
imports.wbg.
|
|
5837
|
-
const ret =
|
|
6006
|
+
imports.wbg.__wbg_lorolist_new = function(arg0) {
|
|
6007
|
+
const ret = LoroList.__wrap(arg0);
|
|
5838
6008
|
return addHeapObject(ret);
|
|
5839
6009
|
};
|
|
5840
|
-
imports.wbg.
|
|
5841
|
-
const ret =
|
|
6010
|
+
imports.wbg.__wbg_lorocounter_new = function(arg0) {
|
|
6011
|
+
const ret = LoroCounter.__wrap(arg0);
|
|
5842
6012
|
return addHeapObject(ret);
|
|
5843
6013
|
};
|
|
5844
|
-
imports.wbg.
|
|
5845
|
-
const ret =
|
|
6014
|
+
imports.wbg.__wbg_loromap_new = function(arg0) {
|
|
6015
|
+
const ret = LoroMap.__wrap(arg0);
|
|
5846
6016
|
return addHeapObject(ret);
|
|
5847
6017
|
};
|
|
5848
|
-
imports.wbg.
|
|
5849
|
-
const ret =
|
|
6018
|
+
imports.wbg.__wbg_lorotreenode_new = function(arg0) {
|
|
6019
|
+
const ret = LoroTreeNode.__wrap(arg0);
|
|
5850
6020
|
return addHeapObject(ret);
|
|
5851
6021
|
};
|
|
5852
|
-
imports.wbg.
|
|
5853
|
-
const ret =
|
|
6022
|
+
imports.wbg.__wbg_lorotree_new = function(arg0) {
|
|
6023
|
+
const ret = LoroTree.__wrap(arg0);
|
|
5854
6024
|
return addHeapObject(ret);
|
|
5855
6025
|
};
|
|
5856
6026
|
imports.wbg.__wbg_loromovablelist_new = function(arg0) {
|
|
5857
6027
|
const ret = LoroMovableList.__wrap(arg0);
|
|
5858
6028
|
return addHeapObject(ret);
|
|
5859
6029
|
};
|
|
5860
|
-
imports.wbg.
|
|
5861
|
-
const ret =
|
|
6030
|
+
imports.wbg.__wbg_cursor_new = function(arg0) {
|
|
6031
|
+
const ret = Cursor.__wrap(arg0);
|
|
5862
6032
|
return addHeapObject(ret);
|
|
5863
6033
|
};
|
|
5864
|
-
imports.wbg.
|
|
5865
|
-
const ret =
|
|
6034
|
+
imports.wbg.__wbg_lorotext_new = function(arg0) {
|
|
6035
|
+
const ret = LoroText.__wrap(arg0);
|
|
5866
6036
|
return addHeapObject(ret);
|
|
5867
6037
|
};
|
|
5868
6038
|
imports.wbg.__wbg_versionvector_new = function(arg0) {
|
|
@@ -5958,6 +6128,10 @@ function __wbg_get_imports() {
|
|
|
5958
6128
|
const ret = arg0;
|
|
5959
6129
|
return addHeapObject(ret);
|
|
5960
6130
|
};
|
|
6131
|
+
imports.wbg.__wbindgen_is_array = function(arg0) {
|
|
6132
|
+
const ret = Array.isArray(getObject(arg0));
|
|
6133
|
+
return ret;
|
|
6134
|
+
};
|
|
5961
6135
|
imports.wbg.__wbindgen_typeof = function(arg0) {
|
|
5962
6136
|
const ret = typeof getObject(arg0);
|
|
5963
6137
|
return addHeapObject(ret);
|
|
@@ -6053,7 +6227,7 @@ function __wbg_get_imports() {
|
|
|
6053
6227
|
wasm.__wbindgen_export_5(deferred0_0, deferred0_1, 1);
|
|
6054
6228
|
}
|
|
6055
6229
|
};
|
|
6056
|
-
imports.wbg.
|
|
6230
|
+
imports.wbg.__wbg_now_15d99db1ebc1f0b2 = typeof Date.now == 'function' ? Date.now : notDefined('Date.now');
|
|
6057
6231
|
imports.wbg.__wbg_crypto_1d1f22824a6a080c = function(arg0) {
|
|
6058
6232
|
const ret = getObject(arg0).crypto;
|
|
6059
6233
|
return addHeapObject(ret);
|
|
@@ -6159,6 +6333,10 @@ function __wbg_get_imports() {
|
|
|
6159
6333
|
imports.wbg.__wbg_set_d4638f722068f043 = function(arg0, arg1, arg2) {
|
|
6160
6334
|
getObject(arg0)[arg1 >>> 0] = takeObject(arg2);
|
|
6161
6335
|
};
|
|
6336
|
+
imports.wbg.__wbg_from_89e3fc3ba5e6fb48 = function(arg0) {
|
|
6337
|
+
const ret = Array.from(getObject(arg0));
|
|
6338
|
+
return addHeapObject(ret);
|
|
6339
|
+
};
|
|
6162
6340
|
imports.wbg.__wbg_isArray_2ab64d95e09ea0ae = function(arg0) {
|
|
6163
6341
|
const ret = Array.isArray(getObject(arg0));
|
|
6164
6342
|
return ret;
|
|
@@ -6312,12 +6490,12 @@ function __wbg_get_imports() {
|
|
|
6312
6490
|
const ret = wasm.memory;
|
|
6313
6491
|
return addHeapObject(ret);
|
|
6314
6492
|
};
|
|
6315
|
-
imports.wbg.
|
|
6316
|
-
const ret = makeMutClosure(arg0, arg1, 9,
|
|
6493
|
+
imports.wbg.__wbindgen_closure_wrapper491 = function(arg0, arg1, arg2) {
|
|
6494
|
+
const ret = makeMutClosure(arg0, arg1, 9, __wbg_adapter_60);
|
|
6317
6495
|
return addHeapObject(ret);
|
|
6318
6496
|
};
|
|
6319
|
-
imports.wbg.
|
|
6320
|
-
const ret = makeMutClosure(arg0, arg1, 11,
|
|
6497
|
+
imports.wbg.__wbindgen_closure_wrapper494 = function(arg0, arg1, arg2) {
|
|
6498
|
+
const ret = makeMutClosure(arg0, arg1, 11, __wbg_adapter_63);
|
|
6321
6499
|
return addHeapObject(ret);
|
|
6322
6500
|
};
|
|
6323
6501
|
|
package/web/loro_wasm_bg.wasm
CHANGED
|
Binary file
|
|
@@ -44,6 +44,7 @@ export function lorodoc_fork(a: number): number;
|
|
|
44
44
|
export function lorodoc_forkAt(a: number, b: number, c: number, d: number): void;
|
|
45
45
|
export function lorodoc_checkoutToLatest(a: number, b: number): void;
|
|
46
46
|
export function lorodoc_travelChangeAncestors(a: number, b: number, c: number, d: number, e: number): void;
|
|
47
|
+
export function lorodoc_findIdSpansBetween(a: number, b: number, c: number, d: number, e: number, f: number): void;
|
|
47
48
|
export function lorodoc_checkout(a: number, b: number, c: number, d: number): void;
|
|
48
49
|
export function lorodoc_peerId(a: number): number;
|
|
49
50
|
export function lorodoc_peerIdStr(a: number): number;
|
|
@@ -73,7 +74,8 @@ export function lorodoc_cmpFrontiers(a: number, b: number, c: number, d: number,
|
|
|
73
74
|
export function lorodoc_exportSnapshot(a: number, b: number): void;
|
|
74
75
|
export function lorodoc_exportFrom(a: number, b: number, c: number): void;
|
|
75
76
|
export function lorodoc_export(a: number, b: number, c: number): void;
|
|
76
|
-
export function lorodoc_exportJsonUpdates(a: number, b: number, c: number, d: number): void;
|
|
77
|
+
export function lorodoc_exportJsonUpdates(a: number, b: number, c: number, d: number, e: number): void;
|
|
78
|
+
export function lorodoc_exportJsonInIdSpan(a: number, b: number, c: number): void;
|
|
77
79
|
export function lorodoc_importJsonUpdates(a: number, b: number, c: number): void;
|
|
78
80
|
export function lorodoc_import(a: number, b: number, c: number, d: number): void;
|
|
79
81
|
export function lorodoc_importUpdateBatch(a: number, b: number, c: number): void;
|
|
@@ -94,6 +96,9 @@ export function lorodoc_vvToFrontiers(a: number, b: number, c: number): void;
|
|
|
94
96
|
export function lorodoc_getByPath(a: number, b: number, c: number): number;
|
|
95
97
|
export function lorodoc_getCursorPos(a: number, b: number, c: number): void;
|
|
96
98
|
export function lorodoc_getChangedContainersIn(a: number, b: number, c: number, d: number): void;
|
|
99
|
+
export function lorodoc_revertTo(a: number, b: number, c: number, d: number): void;
|
|
100
|
+
export function lorodoc_applyDiff(a: number, b: number, c: number): void;
|
|
101
|
+
export function lorodoc_diff(a: number, b: number, c: number, d: number, e: number, f: number): void;
|
|
97
102
|
export function __wbg_lorotext_free(a: number): void;
|
|
98
103
|
export function lorotext_new(): number;
|
|
99
104
|
export function lorotext_kind(a: number): number;
|