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/bundler/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
|
package/bundler/loro_wasm_bg.js
CHANGED
|
@@ -237,11 +237,11 @@ function makeMutClosure(arg0, arg1, dtor, f) {
|
|
|
237
237
|
CLOSURE_DTORS.register(real, state, state);
|
|
238
238
|
return real;
|
|
239
239
|
}
|
|
240
|
-
function
|
|
240
|
+
function __wbg_adapter_60(arg0, arg1, arg2) {
|
|
241
241
|
wasm.__wbindgen_export_3(arg0, arg1, addHeapObject(arg2));
|
|
242
242
|
}
|
|
243
243
|
|
|
244
|
-
function
|
|
244
|
+
function __wbg_adapter_63(arg0, arg1) {
|
|
245
245
|
wasm.__wbindgen_export_4(arg0, arg1);
|
|
246
246
|
}
|
|
247
247
|
|
|
@@ -971,9 +971,12 @@ export class LoroDoc {
|
|
|
971
971
|
wasm.lorodoc_setRecordTimestamp(this.__wbg_ptr, auto_record);
|
|
972
972
|
}
|
|
973
973
|
/**
|
|
974
|
-
* If two continuous local changes are within the interval, they will be merged into one change.
|
|
974
|
+
* If two continuous local changes are within (<=) the interval(**in seconds**), they will be merged into one change.
|
|
975
975
|
*
|
|
976
|
-
* The default value is
|
|
976
|
+
* The default value is 1_000 seconds.
|
|
977
|
+
*
|
|
978
|
+
* By default, we record timestamps in seconds for each change. So if the merge interval is 1, and changes A and B
|
|
979
|
+
* have timestamps of 3 and 4 respectively, then they will be merged into one change
|
|
977
980
|
* @param {number} interval
|
|
978
981
|
*/
|
|
979
982
|
setChangeMergeInterval(interval) {
|
|
@@ -1237,6 +1240,72 @@ export class LoroDoc {
|
|
|
1237
1240
|
}
|
|
1238
1241
|
}
|
|
1239
1242
|
/**
|
|
1243
|
+
* Find the op id spans that between the `from` version and the `to` version.
|
|
1244
|
+
*
|
|
1245
|
+
* You can combine it with `exportJsonInIdSpan` to get the changes between two versions.
|
|
1246
|
+
*
|
|
1247
|
+
* You can use it to travel all the changes from `from` to `to`. `from` and `to` are frontiers,
|
|
1248
|
+
* and they can be concurrent to each other. You can use it to find all the changes related to an event:
|
|
1249
|
+
*
|
|
1250
|
+
* @example
|
|
1251
|
+
* ```ts
|
|
1252
|
+
* import { LoroDoc } from "loro-crdt";
|
|
1253
|
+
*
|
|
1254
|
+
* const docA = new LoroDoc();
|
|
1255
|
+
* docA.setPeerId("1");
|
|
1256
|
+
* const docB = new LoroDoc();
|
|
1257
|
+
*
|
|
1258
|
+
* docA.getText("text").update("Hello");
|
|
1259
|
+
* docA.commit();
|
|
1260
|
+
* const snapshot = docA.export({ mode: "snapshot" });
|
|
1261
|
+
* let done = false;
|
|
1262
|
+
* docB.subscribe(e => {
|
|
1263
|
+
* const spans = docB.findIdSpansBetween(e.from, e.to);
|
|
1264
|
+
* const changes = docB.exportJsonInIdSpan(spans.forward[0]);
|
|
1265
|
+
* console.log(changes);
|
|
1266
|
+
* // [{
|
|
1267
|
+
* // id: "0@1",
|
|
1268
|
+
* // timestamp: expect.any(Number),
|
|
1269
|
+
* // deps: [],
|
|
1270
|
+
* // lamport: 0,
|
|
1271
|
+
* // msg: undefined,
|
|
1272
|
+
* // ops: [{
|
|
1273
|
+
* // container: "cid:root-text:Text",
|
|
1274
|
+
* // counter: 0,
|
|
1275
|
+
* // content: {
|
|
1276
|
+
* // type: "insert",
|
|
1277
|
+
* // pos: 0,
|
|
1278
|
+
* // text: "Hello"
|
|
1279
|
+
* // }
|
|
1280
|
+
* // }]
|
|
1281
|
+
* // }]
|
|
1282
|
+
* });
|
|
1283
|
+
* docB.import(snapshot);
|
|
1284
|
+
* ```
|
|
1285
|
+
* @param {({ peer: PeerID, counter: number })[]} from
|
|
1286
|
+
* @param {({ peer: PeerID, counter: number })[]} to
|
|
1287
|
+
* @returns {VersionVectorDiff}
|
|
1288
|
+
*/
|
|
1289
|
+
findIdSpansBetween(from, to) {
|
|
1290
|
+
try {
|
|
1291
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1292
|
+
const ptr0 = passArrayJsValueToWasm0(from, wasm.__wbindgen_export_0);
|
|
1293
|
+
const len0 = WASM_VECTOR_LEN;
|
|
1294
|
+
const ptr1 = passArrayJsValueToWasm0(to, wasm.__wbindgen_export_0);
|
|
1295
|
+
const len1 = WASM_VECTOR_LEN;
|
|
1296
|
+
wasm.lorodoc_findIdSpansBetween(retptr, this.__wbg_ptr, ptr0, len0, ptr1, len1);
|
|
1297
|
+
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
|
1298
|
+
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
|
1299
|
+
var r2 = getInt32Memory0()[retptr / 4 + 2];
|
|
1300
|
+
if (r2) {
|
|
1301
|
+
throw takeObject(r1);
|
|
1302
|
+
}
|
|
1303
|
+
return takeObject(r0);
|
|
1304
|
+
} finally {
|
|
1305
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1306
|
+
}
|
|
1307
|
+
}
|
|
1308
|
+
/**
|
|
1240
1309
|
* Checkout the `DocState` to a specific version.
|
|
1241
1310
|
*
|
|
1242
1311
|
* > The document becomes detached during a `checkout` operation.
|
|
@@ -1315,12 +1384,14 @@ export class LoroDoc {
|
|
|
1315
1384
|
}
|
|
1316
1385
|
}
|
|
1317
1386
|
/**
|
|
1318
|
-
* Commit the cumulative auto
|
|
1387
|
+
* Commit the cumulative auto-committed transaction.
|
|
1319
1388
|
*
|
|
1320
1389
|
* You can specify the `origin`, `timestamp`, and `message` of the commit.
|
|
1321
1390
|
*
|
|
1322
1391
|
* - The `origin` is used to mark the event
|
|
1323
1392
|
* - The `message` works like a git commit message, which will be recorded and synced to peers
|
|
1393
|
+
* - The `timestamp` is the number of seconds that have elapsed since 00:00:00 UTC on January 1, 1970.
|
|
1394
|
+
* It defaults to `Date.now() / 1000` when timestamp recording is enabled
|
|
1324
1395
|
*
|
|
1325
1396
|
* The events will be emitted after a transaction is committed. A transaction is committed when:
|
|
1326
1397
|
*
|
|
@@ -1897,12 +1968,32 @@ export class LoroDoc {
|
|
|
1897
1968
|
* Export updates in the given range in JSON format.
|
|
1898
1969
|
* @param {any} start_vv
|
|
1899
1970
|
* @param {any} end_vv
|
|
1971
|
+
* @param {boolean | undefined} [with_peer_compression]
|
|
1900
1972
|
* @returns {JsonSchema}
|
|
1901
1973
|
*/
|
|
1902
|
-
exportJsonUpdates(start_vv, end_vv) {
|
|
1974
|
+
exportJsonUpdates(start_vv, end_vv, with_peer_compression) {
|
|
1975
|
+
try {
|
|
1976
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1977
|
+
wasm.lorodoc_exportJsonUpdates(retptr, this.__wbg_ptr, addHeapObject(start_vv), addHeapObject(end_vv), isLikeNone(with_peer_compression) ? 0xFFFFFF : with_peer_compression ? 1 : 0);
|
|
1978
|
+
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
|
1979
|
+
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
|
1980
|
+
var r2 = getInt32Memory0()[retptr / 4 + 2];
|
|
1981
|
+
if (r2) {
|
|
1982
|
+
throw takeObject(r1);
|
|
1983
|
+
}
|
|
1984
|
+
return takeObject(r0);
|
|
1985
|
+
} finally {
|
|
1986
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1987
|
+
}
|
|
1988
|
+
}
|
|
1989
|
+
/**
|
|
1990
|
+
* @param {{ peer: PeerID, counter: number, length: number }} idSpan
|
|
1991
|
+
* @returns {any}
|
|
1992
|
+
*/
|
|
1993
|
+
exportJsonInIdSpan(idSpan) {
|
|
1903
1994
|
try {
|
|
1904
1995
|
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1905
|
-
wasm.
|
|
1996
|
+
wasm.lorodoc_exportJsonInIdSpan(retptr, this.__wbg_ptr, addHeapObject(idSpan));
|
|
1906
1997
|
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
|
1907
1998
|
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
|
1908
1999
|
var r2 = getInt32Memory0()[retptr / 4 + 2];
|
|
@@ -2101,7 +2192,7 @@ export class LoroDoc {
|
|
|
2101
2192
|
*
|
|
2102
2193
|
* @example
|
|
2103
2194
|
* ```ts
|
|
2104
|
-
* import { LoroDoc, LoroText } from "loro-crdt";
|
|
2195
|
+
* import { LoroDoc, LoroText, LoroMap } from "loro-crdt";
|
|
2105
2196
|
*
|
|
2106
2197
|
* const doc = new LoroDoc();
|
|
2107
2198
|
* const list = doc.getList("list");
|
|
@@ -2465,6 +2556,84 @@ export class LoroDoc {
|
|
|
2465
2556
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
2466
2557
|
}
|
|
2467
2558
|
}
|
|
2559
|
+
/**
|
|
2560
|
+
* Revert the document to the given frontiers.
|
|
2561
|
+
*
|
|
2562
|
+
* The doc will not become detached when using this method. Instead, it will generate a series
|
|
2563
|
+
* of operations to revert the document to the given version.
|
|
2564
|
+
*
|
|
2565
|
+
* @example
|
|
2566
|
+
* ```ts
|
|
2567
|
+
* const doc = new LoroDoc();
|
|
2568
|
+
* doc.setPeerId("1");
|
|
2569
|
+
* const text = doc.getText("text");
|
|
2570
|
+
* text.insert(0, "Hello");
|
|
2571
|
+
* doc.commit();
|
|
2572
|
+
* doc.revertTo([{ peer: "1", counter: 1 }]);
|
|
2573
|
+
* expect(doc.getText("text").toString()).toBe("He");
|
|
2574
|
+
* ```
|
|
2575
|
+
* @param {({ peer: PeerID, counter: number })[]} frontiers
|
|
2576
|
+
*/
|
|
2577
|
+
revertTo(frontiers) {
|
|
2578
|
+
try {
|
|
2579
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
2580
|
+
const ptr0 = passArrayJsValueToWasm0(frontiers, wasm.__wbindgen_export_0);
|
|
2581
|
+
const len0 = WASM_VECTOR_LEN;
|
|
2582
|
+
wasm.lorodoc_revertTo(retptr, this.__wbg_ptr, ptr0, len0);
|
|
2583
|
+
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
|
2584
|
+
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
|
2585
|
+
if (r1) {
|
|
2586
|
+
throw takeObject(r0);
|
|
2587
|
+
}
|
|
2588
|
+
} finally {
|
|
2589
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
2590
|
+
}
|
|
2591
|
+
}
|
|
2592
|
+
/**
|
|
2593
|
+
* Apply a diff batch to the document
|
|
2594
|
+
* @param {Record<ContainerID, Diff>} diff
|
|
2595
|
+
*/
|
|
2596
|
+
applyDiff(diff) {
|
|
2597
|
+
try {
|
|
2598
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
2599
|
+
wasm.lorodoc_applyDiff(retptr, this.__wbg_ptr, addHeapObject(diff));
|
|
2600
|
+
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
|
2601
|
+
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
|
2602
|
+
if (r1) {
|
|
2603
|
+
throw takeObject(r0);
|
|
2604
|
+
}
|
|
2605
|
+
} finally {
|
|
2606
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
2607
|
+
}
|
|
2608
|
+
}
|
|
2609
|
+
/**
|
|
2610
|
+
* Calculate the differences between two frontiers
|
|
2611
|
+
*
|
|
2612
|
+
* The entries in the returned object are sorted by causal order: the creation of a child container will be
|
|
2613
|
+
* presented before its use.
|
|
2614
|
+
* @param {({ peer: PeerID, counter: number })[]} from
|
|
2615
|
+
* @param {({ peer: PeerID, counter: number })[]} to
|
|
2616
|
+
* @returns {Record<ContainerID, Diff>}
|
|
2617
|
+
*/
|
|
2618
|
+
diff(from, to) {
|
|
2619
|
+
try {
|
|
2620
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
2621
|
+
const ptr0 = passArrayJsValueToWasm0(from, wasm.__wbindgen_export_0);
|
|
2622
|
+
const len0 = WASM_VECTOR_LEN;
|
|
2623
|
+
const ptr1 = passArrayJsValueToWasm0(to, wasm.__wbindgen_export_0);
|
|
2624
|
+
const len1 = WASM_VECTOR_LEN;
|
|
2625
|
+
wasm.lorodoc_diff(retptr, this.__wbg_ptr, ptr0, len0, ptr1, len1);
|
|
2626
|
+
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
|
2627
|
+
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
|
2628
|
+
var r2 = getInt32Memory0()[retptr / 4 + 2];
|
|
2629
|
+
if (r2) {
|
|
2630
|
+
throw takeObject(r1);
|
|
2631
|
+
}
|
|
2632
|
+
return takeObject(r0);
|
|
2633
|
+
} finally {
|
|
2634
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
2635
|
+
}
|
|
2636
|
+
}
|
|
2468
2637
|
}
|
|
2469
2638
|
|
|
2470
2639
|
const LoroListFinalization = (typeof FinalizationRegistry === 'undefined')
|
|
@@ -3362,7 +3531,7 @@ export class LoroMap {
|
|
|
3362
3531
|
*
|
|
3363
3532
|
* @example
|
|
3364
3533
|
* ```ts
|
|
3365
|
-
* import { LoroDoc } from "loro-crdt";
|
|
3534
|
+
* import { LoroDoc, LoroText } from "loro-crdt";
|
|
3366
3535
|
*
|
|
3367
3536
|
* const doc = new LoroDoc();
|
|
3368
3537
|
* doc.setPeerId("1");
|
|
@@ -5535,6 +5704,7 @@ export class UndoManager {
|
|
|
5535
5704
|
}
|
|
5536
5705
|
/**
|
|
5537
5706
|
* Set the merge interval (in ms).
|
|
5707
|
+
*
|
|
5538
5708
|
* If the interval is set to 0, the undo steps will not be merged.
|
|
5539
5709
|
* Otherwise, the undo steps will be merged if the interval between the two steps is less than the given interval.
|
|
5540
5710
|
* @param {number} interval
|
|
@@ -5808,28 +5978,28 @@ export function __wbindgen_object_drop_ref(arg0) {
|
|
|
5808
5978
|
takeObject(arg0);
|
|
5809
5979
|
};
|
|
5810
5980
|
|
|
5811
|
-
export function
|
|
5812
|
-
const ret =
|
|
5981
|
+
export function __wbg_lorolist_new(arg0) {
|
|
5982
|
+
const ret = LoroList.__wrap(arg0);
|
|
5813
5983
|
return addHeapObject(ret);
|
|
5814
5984
|
};
|
|
5815
5985
|
|
|
5816
|
-
export function
|
|
5817
|
-
const ret =
|
|
5986
|
+
export function __wbg_lorocounter_new(arg0) {
|
|
5987
|
+
const ret = LoroCounter.__wrap(arg0);
|
|
5818
5988
|
return addHeapObject(ret);
|
|
5819
5989
|
};
|
|
5820
5990
|
|
|
5821
|
-
export function
|
|
5822
|
-
const ret =
|
|
5991
|
+
export function __wbg_loromap_new(arg0) {
|
|
5992
|
+
const ret = LoroMap.__wrap(arg0);
|
|
5823
5993
|
return addHeapObject(ret);
|
|
5824
5994
|
};
|
|
5825
5995
|
|
|
5826
|
-
export function
|
|
5827
|
-
const ret =
|
|
5996
|
+
export function __wbg_lorotreenode_new(arg0) {
|
|
5997
|
+
const ret = LoroTreeNode.__wrap(arg0);
|
|
5828
5998
|
return addHeapObject(ret);
|
|
5829
5999
|
};
|
|
5830
6000
|
|
|
5831
|
-
export function
|
|
5832
|
-
const ret =
|
|
6001
|
+
export function __wbg_lorotree_new(arg0) {
|
|
6002
|
+
const ret = LoroTree.__wrap(arg0);
|
|
5833
6003
|
return addHeapObject(ret);
|
|
5834
6004
|
};
|
|
5835
6005
|
|
|
@@ -5838,13 +6008,13 @@ export function __wbg_loromovablelist_new(arg0) {
|
|
|
5838
6008
|
return addHeapObject(ret);
|
|
5839
6009
|
};
|
|
5840
6010
|
|
|
5841
|
-
export function
|
|
5842
|
-
const ret =
|
|
6011
|
+
export function __wbg_cursor_new(arg0) {
|
|
6012
|
+
const ret = Cursor.__wrap(arg0);
|
|
5843
6013
|
return addHeapObject(ret);
|
|
5844
6014
|
};
|
|
5845
6015
|
|
|
5846
|
-
export function
|
|
5847
|
-
const ret =
|
|
6016
|
+
export function __wbg_lorotext_new(arg0) {
|
|
6017
|
+
const ret = LoroText.__wrap(arg0);
|
|
5848
6018
|
return addHeapObject(ret);
|
|
5849
6019
|
};
|
|
5850
6020
|
|
|
@@ -5961,6 +6131,11 @@ export function __wbindgen_number_new(arg0) {
|
|
|
5961
6131
|
return addHeapObject(ret);
|
|
5962
6132
|
};
|
|
5963
6133
|
|
|
6134
|
+
export function __wbindgen_is_array(arg0) {
|
|
6135
|
+
const ret = Array.isArray(getObject(arg0));
|
|
6136
|
+
return ret;
|
|
6137
|
+
};
|
|
6138
|
+
|
|
5964
6139
|
export function __wbindgen_typeof(arg0) {
|
|
5965
6140
|
const ret = typeof getObject(arg0);
|
|
5966
6141
|
return addHeapObject(ret);
|
|
@@ -6071,7 +6246,7 @@ export function __wbg_error_f851667af71bcfc6(arg0, arg1) {
|
|
|
6071
6246
|
}
|
|
6072
6247
|
};
|
|
6073
6248
|
|
|
6074
|
-
export const
|
|
6249
|
+
export const __wbg_now_15d99db1ebc1f0b2 = typeof Date.now == 'function' ? Date.now : notDefined('Date.now');
|
|
6075
6250
|
|
|
6076
6251
|
export function __wbg_crypto_1d1f22824a6a080c(arg0) {
|
|
6077
6252
|
const ret = getObject(arg0).crypto;
|
|
@@ -6205,6 +6380,11 @@ export function __wbg_set_d4638f722068f043(arg0, arg1, arg2) {
|
|
|
6205
6380
|
getObject(arg0)[arg1 >>> 0] = takeObject(arg2);
|
|
6206
6381
|
};
|
|
6207
6382
|
|
|
6383
|
+
export function __wbg_from_89e3fc3ba5e6fb48(arg0) {
|
|
6384
|
+
const ret = Array.from(getObject(arg0));
|
|
6385
|
+
return addHeapObject(ret);
|
|
6386
|
+
};
|
|
6387
|
+
|
|
6208
6388
|
export function __wbg_isArray_2ab64d95e09ea0ae(arg0) {
|
|
6209
6389
|
const ret = Array.isArray(getObject(arg0));
|
|
6210
6390
|
return ret;
|
|
@@ -6390,13 +6570,13 @@ export function __wbindgen_memory() {
|
|
|
6390
6570
|
return addHeapObject(ret);
|
|
6391
6571
|
};
|
|
6392
6572
|
|
|
6393
|
-
export function
|
|
6394
|
-
const ret = makeMutClosure(arg0, arg1, 9,
|
|
6573
|
+
export function __wbindgen_closure_wrapper491(arg0, arg1, arg2) {
|
|
6574
|
+
const ret = makeMutClosure(arg0, arg1, 9, __wbg_adapter_60);
|
|
6395
6575
|
return addHeapObject(ret);
|
|
6396
6576
|
};
|
|
6397
6577
|
|
|
6398
|
-
export function
|
|
6399
|
-
const ret = makeMutClosure(arg0, arg1, 11,
|
|
6578
|
+
export function __wbindgen_closure_wrapper494(arg0, arg1, arg2) {
|
|
6579
|
+
const ret = makeMutClosure(arg0, arg1, 11, __wbg_adapter_63);
|
|
6400
6580
|
return addHeapObject(ret);
|
|
6401
6581
|
};
|
|
6402
6582
|
|
|
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;
|