@automerge/automerge-repo 2.2.0 → 2.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/dist/DocHandle.d.ts.map +1 -1
- package/dist/DocHandle.js +7 -1
- package/dist/Repo.d.ts +15 -1
- package/dist/Repo.d.ts.map +1 -1
- package/dist/Repo.js +43 -11
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +2 -2
- package/src/DocHandle.ts +10 -1
- package/src/Repo.ts +45 -13
- package/src/index.ts +1 -0
- package/test/Repo.test.ts +79 -4
package/dist/DocHandle.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocHandle.d.ts","sourceRoot":"","sources":["../src/DocHandle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,2BAA2B,CAAA;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAU5C,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9C;;;;;;;;;;;;GAYG;AACH,qBAAa,SAAS,CAAC,CAAC,CAAE,SAAQ,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;;IAwBvD,UAAU,EAAE,UAAU;IAF/B,cAAc;gBAEL,UAAU,EAAE,UAAU,EAC7B,OAAO,GAAE,gBAAgB,CAAC,CAAC,CAAM;IAsMnC;OACG;IACH,IAAI,GAAG,IAAI,YAAY,CAKtB;IAED;;;;;OAKG;IACH,OAAO,gBAAgC;IAEvC;;;;;OAKG;IACH,UAAU,gBAAmC;IAE7C;;;;;OAKG;IACH,SAAS,gBAAkC;IAE3C;;;;OAIG;IACH,aAAa,gBAAsC;IAEnD;;OAEG;IACH,OAAO,GAAI,QAAQ,WAAW,EAAE,aAC0B;IAE1D,cAAc;IACd,IAAI,KAAK,yFAER;IAED;;;;;;OAMG;IACG,SAAS,CAAC,WAAW,GAAE,WAAW,EAAc;
|
|
1
|
+
{"version":3,"file":"DocHandle.d.ts","sourceRoot":"","sources":["../src/DocHandle.ts"],"names":[],"mappings":"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"}
|
package/dist/DocHandle.js
CHANGED
|
@@ -261,7 +261,13 @@ export class DocHandle extends EventEmitter {
|
|
|
261
261
|
* checking `inState()`.
|
|
262
262
|
*/
|
|
263
263
|
async whenReady(awaitStates = ["ready"]) {
|
|
264
|
-
|
|
264
|
+
try {
|
|
265
|
+
await withTimeout(this.#statePromise(awaitStates), this.#timeoutDelay);
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
console.log(`error waiting for ${this.documentId} to be in one of states: ${awaitStates.join(", ")}`);
|
|
269
|
+
throw error;
|
|
270
|
+
}
|
|
265
271
|
}
|
|
266
272
|
/**
|
|
267
273
|
* Returns the current state of the Automerge document this handle manages.
|
package/dist/Repo.d.ts
CHANGED
|
@@ -91,8 +91,22 @@ export declare class Repo extends EventEmitter<RepoEvents> {
|
|
|
91
91
|
/**
|
|
92
92
|
* Imports document binary into the repo.
|
|
93
93
|
* @param binary - The binary to import
|
|
94
|
+
* @param args - Optional argument specifying what document ID to import into,
|
|
95
|
+
* if at all possible avoid using this, see the remarks below
|
|
96
|
+
*
|
|
97
|
+
* @remarks
|
|
98
|
+
* If no document ID is provided, a new document will be created. When
|
|
99
|
+
* specifying the document ID it is important to ensure that two documents using
|
|
100
|
+
* the same ID share the same history - i.e. don't create a document with the
|
|
101
|
+
* same ID on unrelated processes that have never communicated with each
|
|
102
|
+
* other. If you need to ship around a bunch of documents with their IDs
|
|
103
|
+
* consider using the `automerge-repo-bundles` package which provides a
|
|
104
|
+
* serialization format for documents and IDs and handles the boilerplate of
|
|
105
|
+
* importing and exporting these bundles.
|
|
94
106
|
*/
|
|
95
|
-
import<T>(binary: Uint8Array
|
|
107
|
+
import<T>(binary: Uint8Array, args?: {
|
|
108
|
+
docId?: DocumentId;
|
|
109
|
+
}): DocHandle<T>;
|
|
96
110
|
subscribeToRemotes: (remotes: StorageId[]) => void;
|
|
97
111
|
storageId: () => Promise<StorageId | undefined>;
|
|
98
112
|
/**
|
package/dist/Repo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Repo.d.ts","sourceRoot":"","sources":["../src/Repo.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAQ5C,OAAO,EAEL,SAAS,EAKV,MAAM,gBAAgB,CAAA;AAIvB,OAAO,EACL,uBAAuB,EACvB,KAAK,YAAY,EAClB,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAEhE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAA;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAA;AACjF,OAAO,EACL,cAAc,EAEf,MAAM,gCAAgC,CAAA;AACvC,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,UAAU,EACV,MAAM,EACP,MAAM,YAAY,CAAA;AACnB,OAAO,EAAa,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG;IACzD,UAAU,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IAChE,IAAI,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,CAAA;IAC3B,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,MAAM,IAAI,CAAA;CACzE,CAAA;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAC9B,IAAI,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,CAAA;IAC3B,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,MAAM,IAAI,CAAA;IACxE,UAAU,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;CACjE,CAAA;AAMD,8FAA8F;AAC9F;;;;;;GAMG;AACH,qBAAa,IAAK,SAAQ,YAAY,CAAC,UAAU,CAAC;;IAGhD,cAAc;IACd,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,cAAc;IACd,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IAUnC,cAAc;IACd,YAAY,EAAE,sBAAsB,CAAA;IAEpC,sDAAsD;IACtD,cAAc;IACd,WAAW,EAAE,WAAW,CAAmB;IAE3C,8GAA8G;IAC9G,cAAc;IACd,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAK;
|
|
1
|
+
{"version":3,"file":"Repo.d.ts","sourceRoot":"","sources":["../src/Repo.ts"],"names":[],"mappings":"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"}
|
package/dist/Repo.js
CHANGED
|
@@ -43,6 +43,7 @@ export class Repo extends EventEmitter {
|
|
|
43
43
|
#remoteHeadsSubscriptions = new RemoteHeadsSubscriptions();
|
|
44
44
|
#remoteHeadsGossipingEnabled = false;
|
|
45
45
|
#progressCache = {};
|
|
46
|
+
#saveFns = {};
|
|
46
47
|
constructor({ storage, network = [], peerId = randomPeerId(), sharePolicy, isEphemeral = storage === undefined, enableRemoteHeadsGossiping = false, denylist = [], saveDebounceRate = 100, } = {}) {
|
|
47
48
|
super();
|
|
48
49
|
this.#remoteHeadsGossipingEnabled = enableRemoteHeadsGossiping;
|
|
@@ -80,11 +81,17 @@ export class Repo extends EventEmitter {
|
|
|
80
81
|
this.storageSubsystem = storageSubsystem;
|
|
81
82
|
this.#saveDebounceRate = saveDebounceRate;
|
|
82
83
|
if (this.storageSubsystem) {
|
|
83
|
-
const saveFn = ({ handle, doc }) => {
|
|
84
|
-
void this.storageSubsystem.saveDoc(handle.documentId, doc);
|
|
85
|
-
};
|
|
86
84
|
// Save no more often than saveDebounceRate.
|
|
87
|
-
this.#saveFn =
|
|
85
|
+
this.#saveFn = ({ handle, doc }) => {
|
|
86
|
+
let fn = this.#saveFns[handle.documentId];
|
|
87
|
+
if (!fn) {
|
|
88
|
+
fn = throttle(() => {
|
|
89
|
+
void this.storageSubsystem.saveDoc(handle.documentId, doc);
|
|
90
|
+
}, this.#saveDebounceRate);
|
|
91
|
+
this.#saveFns[handle.documentId] = fn;
|
|
92
|
+
}
|
|
93
|
+
fn({ handle, doc });
|
|
94
|
+
};
|
|
88
95
|
}
|
|
89
96
|
else {
|
|
90
97
|
this.#saveFn = () => { };
|
|
@@ -531,6 +538,7 @@ export class Repo extends EventEmitter {
|
|
|
531
538
|
handle.delete();
|
|
532
539
|
delete this.#handleCache[documentId];
|
|
533
540
|
delete this.#progressCache[documentId];
|
|
541
|
+
delete this.#saveFns[documentId];
|
|
534
542
|
this.emit("delete-document", { documentId });
|
|
535
543
|
}
|
|
536
544
|
/**
|
|
@@ -549,14 +557,37 @@ export class Repo extends EventEmitter {
|
|
|
549
557
|
/**
|
|
550
558
|
* Imports document binary into the repo.
|
|
551
559
|
* @param binary - The binary to import
|
|
560
|
+
* @param args - Optional argument specifying what document ID to import into,
|
|
561
|
+
* if at all possible avoid using this, see the remarks below
|
|
562
|
+
*
|
|
563
|
+
* @remarks
|
|
564
|
+
* If no document ID is provided, a new document will be created. When
|
|
565
|
+
* specifying the document ID it is important to ensure that two documents using
|
|
566
|
+
* the same ID share the same history - i.e. don't create a document with the
|
|
567
|
+
* same ID on unrelated processes that have never communicated with each
|
|
568
|
+
* other. If you need to ship around a bunch of documents with their IDs
|
|
569
|
+
* consider using the `automerge-repo-bundles` package which provides a
|
|
570
|
+
* serialization format for documents and IDs and handles the boilerplate of
|
|
571
|
+
* importing and exporting these bundles.
|
|
552
572
|
*/
|
|
553
|
-
import(binary) {
|
|
554
|
-
const
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
573
|
+
import(binary, args) {
|
|
574
|
+
const docId = args?.docId;
|
|
575
|
+
if (docId != null) {
|
|
576
|
+
const handle = this.#getHandle({ documentId: docId });
|
|
577
|
+
handle.update(doc => {
|
|
578
|
+
return Automerge.loadIncremental(doc, binary);
|
|
579
|
+
});
|
|
580
|
+
this.#registerHandleWithSubsystems(handle);
|
|
581
|
+
return handle;
|
|
582
|
+
}
|
|
583
|
+
else {
|
|
584
|
+
const doc = Automerge.load(binary);
|
|
585
|
+
const handle = this.create();
|
|
586
|
+
handle.update(() => {
|
|
587
|
+
return Automerge.clone(doc);
|
|
588
|
+
});
|
|
589
|
+
return handle;
|
|
590
|
+
}
|
|
560
591
|
}
|
|
561
592
|
subscribeToRemotes = (remotes) => {
|
|
562
593
|
if (this.#remoteHeadsGossipingEnabled) {
|
|
@@ -616,6 +647,7 @@ export class Repo extends EventEmitter {
|
|
|
616
647
|
}
|
|
617
648
|
delete this.#handleCache[documentId];
|
|
618
649
|
delete this.#progressCache[documentId];
|
|
650
|
+
delete this.#saveFns[documentId];
|
|
619
651
|
this.synchronizer.removeDocument(documentId);
|
|
620
652
|
}
|
|
621
653
|
else {
|
package/dist/index.d.ts
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* ```
|
|
27
27
|
*/
|
|
28
28
|
export { DocHandle } from "./DocHandle.js";
|
|
29
|
-
export { isValidAutomergeUrl, isValidDocumentId, parseAutomergeUrl, stringifyAutomergeUrl, interpretAsDocumentId, generateAutomergeUrl, encodeHeads, decodeHeads, } from "./AutomergeUrl.js";
|
|
29
|
+
export { isValidAutomergeUrl, isValidDocumentId, parseAutomergeUrl, stringifyAutomergeUrl, interpretAsDocumentId, documentIdToBinary, generateAutomergeUrl, encodeHeads, decodeHeads, } from "./AutomergeUrl.js";
|
|
30
30
|
export { Repo } from "./Repo.js";
|
|
31
31
|
export { NetworkAdapter } from "./network/NetworkAdapter.js";
|
|
32
32
|
export type { NetworkAdapterInterface } from "./network/NetworkAdapterInterface.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* ```
|
|
27
27
|
*/
|
|
28
28
|
export { DocHandle } from "./DocHandle.js";
|
|
29
|
-
export { isValidAutomergeUrl, isValidDocumentId, parseAutomergeUrl, stringifyAutomergeUrl, interpretAsDocumentId, generateAutomergeUrl, encodeHeads, decodeHeads, } from "./AutomergeUrl.js";
|
|
29
|
+
export { isValidAutomergeUrl, isValidDocumentId, parseAutomergeUrl, stringifyAutomergeUrl, interpretAsDocumentId, documentIdToBinary, generateAutomergeUrl, encodeHeads, decodeHeads, } from "./AutomergeUrl.js";
|
|
30
30
|
export { Repo } from "./Repo.js";
|
|
31
31
|
export { NetworkAdapter } from "./network/NetworkAdapter.js";
|
|
32
32
|
export { isRepoMessage } from "./network/messages.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@automerge/automerge-repo",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "A repository object to manage a collection of automerge documents",
|
|
5
5
|
"repository": "https://github.com/automerge/automerge-repo/tree/master/packages/automerge-repo",
|
|
6
6
|
"author": "Peter van Hardenberg <pvh@pvh.ca>",
|
|
@@ -59,5 +59,5 @@
|
|
|
59
59
|
"publishConfig": {
|
|
60
60
|
"access": "public"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "024b98b64a6add14dca52219e92acdfdb5bed230"
|
|
63
63
|
}
|
package/src/DocHandle.ts
CHANGED
|
@@ -308,7 +308,16 @@ export class DocHandle<T> extends EventEmitter<DocHandleEvents<T>> {
|
|
|
308
308
|
* checking `inState()`.
|
|
309
309
|
*/
|
|
310
310
|
async whenReady(awaitStates: HandleState[] = ["ready"]) {
|
|
311
|
-
|
|
311
|
+
try {
|
|
312
|
+
await withTimeout(this.#statePromise(awaitStates), this.#timeoutDelay)
|
|
313
|
+
} catch (error) {
|
|
314
|
+
console.log(
|
|
315
|
+
`error waiting for ${
|
|
316
|
+
this.documentId
|
|
317
|
+
} to be in one of states: ${awaitStates.join(", ")}`
|
|
318
|
+
)
|
|
319
|
+
throw error
|
|
320
|
+
}
|
|
312
321
|
}
|
|
313
322
|
|
|
314
323
|
/**
|
package/src/Repo.ts
CHANGED
|
@@ -96,6 +96,10 @@ export class Repo extends EventEmitter<RepoEvents> {
|
|
|
96
96
|
#remoteHeadsSubscriptions = new RemoteHeadsSubscriptions()
|
|
97
97
|
#remoteHeadsGossipingEnabled = false
|
|
98
98
|
#progressCache: Record<DocumentId, FindProgress<any>> = {}
|
|
99
|
+
#saveFns: Record<
|
|
100
|
+
DocumentId,
|
|
101
|
+
(payload: DocHandleEncodedChangePayload<any>) => void
|
|
102
|
+
> = {}
|
|
99
103
|
|
|
100
104
|
constructor({
|
|
101
105
|
storage,
|
|
@@ -155,11 +159,17 @@ export class Repo extends EventEmitter<RepoEvents> {
|
|
|
155
159
|
this.#saveDebounceRate = saveDebounceRate
|
|
156
160
|
|
|
157
161
|
if (this.storageSubsystem) {
|
|
158
|
-
const saveFn = ({ handle, doc }: DocHandleEncodedChangePayload<any>) => {
|
|
159
|
-
void this.storageSubsystem!.saveDoc(handle.documentId, doc)
|
|
160
|
-
}
|
|
161
162
|
// Save no more often than saveDebounceRate.
|
|
162
|
-
this.#saveFn =
|
|
163
|
+
this.#saveFn = ({ handle, doc }: DocHandleEncodedChangePayload<any>) => {
|
|
164
|
+
let fn = this.#saveFns[handle.documentId]
|
|
165
|
+
if (!fn) {
|
|
166
|
+
fn = throttle(() => {
|
|
167
|
+
void this.storageSubsystem!.saveDoc(handle.documentId, doc)
|
|
168
|
+
}, this.#saveDebounceRate)
|
|
169
|
+
this.#saveFns[handle.documentId] = fn
|
|
170
|
+
}
|
|
171
|
+
fn({ handle, doc })
|
|
172
|
+
}
|
|
163
173
|
} else {
|
|
164
174
|
this.#saveFn = () => {}
|
|
165
175
|
}
|
|
@@ -725,6 +735,7 @@ export class Repo extends EventEmitter<RepoEvents> {
|
|
|
725
735
|
|
|
726
736
|
delete this.#handleCache[documentId]
|
|
727
737
|
delete this.#progressCache[documentId]
|
|
738
|
+
delete this.#saveFns[documentId]
|
|
728
739
|
this.emit("delete-document", { documentId })
|
|
729
740
|
}
|
|
730
741
|
|
|
@@ -746,17 +757,37 @@ export class Repo extends EventEmitter<RepoEvents> {
|
|
|
746
757
|
/**
|
|
747
758
|
* Imports document binary into the repo.
|
|
748
759
|
* @param binary - The binary to import
|
|
760
|
+
* @param args - Optional argument specifying what document ID to import into,
|
|
761
|
+
* if at all possible avoid using this, see the remarks below
|
|
762
|
+
*
|
|
763
|
+
* @remarks
|
|
764
|
+
* If no document ID is provided, a new document will be created. When
|
|
765
|
+
* specifying the document ID it is important to ensure that two documents using
|
|
766
|
+
* the same ID share the same history - i.e. don't create a document with the
|
|
767
|
+
* same ID on unrelated processes that have never communicated with each
|
|
768
|
+
* other. If you need to ship around a bunch of documents with their IDs
|
|
769
|
+
* consider using the `automerge-repo-bundles` package which provides a
|
|
770
|
+
* serialization format for documents and IDs and handles the boilerplate of
|
|
771
|
+
* importing and exporting these bundles.
|
|
749
772
|
*/
|
|
750
|
-
import<T>(binary: Uint8Array) {
|
|
751
|
-
const
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
773
|
+
import<T>(binary: Uint8Array, args?: { docId?: DocumentId }): DocHandle<T> {
|
|
774
|
+
const docId = args?.docId
|
|
775
|
+
if (docId != null) {
|
|
776
|
+
const handle = this.#getHandle<T>({ documentId: docId })
|
|
777
|
+
handle.update(doc => {
|
|
778
|
+
return Automerge.loadIncremental(doc, binary)
|
|
779
|
+
})
|
|
780
|
+
this.#registerHandleWithSubsystems(handle)
|
|
781
|
+
return handle
|
|
782
|
+
} else {
|
|
783
|
+
const doc = Automerge.load<T>(binary)
|
|
784
|
+
const handle = this.create<T>()
|
|
785
|
+
handle.update(() => {
|
|
786
|
+
return Automerge.clone(doc)
|
|
787
|
+
})
|
|
758
788
|
|
|
759
|
-
|
|
789
|
+
return handle
|
|
790
|
+
}
|
|
760
791
|
}
|
|
761
792
|
|
|
762
793
|
subscribeToRemotes = (remotes: StorageId[]) => {
|
|
@@ -825,6 +856,7 @@ export class Repo extends EventEmitter<RepoEvents> {
|
|
|
825
856
|
}
|
|
826
857
|
delete this.#handleCache[documentId]
|
|
827
858
|
delete this.#progressCache[documentId]
|
|
859
|
+
delete this.#saveFns[documentId]
|
|
828
860
|
this.synchronizer.removeDocument(documentId)
|
|
829
861
|
} else {
|
|
830
862
|
this.#log(
|
package/src/index.ts
CHANGED
package/test/Repo.test.ts
CHANGED
|
@@ -33,7 +33,6 @@ import {
|
|
|
33
33
|
import { getRandomItem } from "./helpers/getRandomItem.js"
|
|
34
34
|
import { TestDoc } from "./types.js"
|
|
35
35
|
import { StorageId, StorageKey } from "../src/storage/types.js"
|
|
36
|
-
import { chunkTypeFromKey } from "../src/storage/chunkTypeFromKey.js"
|
|
37
36
|
|
|
38
37
|
describe("Repo", () => {
|
|
39
38
|
describe("constructor", () => {
|
|
@@ -47,13 +46,13 @@ describe("Repo", () => {
|
|
|
47
46
|
const setup = ({ startReady = true } = {}) => {
|
|
48
47
|
const storageAdapter = new DummyStorageAdapter()
|
|
49
48
|
const networkAdapter = new DummyNetworkAdapter({ startReady })
|
|
50
|
-
|
|
49
|
+
const saveDebounceRate = 1
|
|
51
50
|
const repo = new Repo({
|
|
52
51
|
storage: storageAdapter,
|
|
53
52
|
network: [networkAdapter],
|
|
54
|
-
saveDebounceRate
|
|
53
|
+
saveDebounceRate,
|
|
55
54
|
})
|
|
56
|
-
return { repo, storageAdapter, networkAdapter }
|
|
55
|
+
return { repo, storageAdapter, networkAdapter, saveDebounceRate }
|
|
57
56
|
}
|
|
58
57
|
|
|
59
58
|
it("can instantiate a Repo", () => {
|
|
@@ -340,6 +339,32 @@ describe("Repo", () => {
|
|
|
340
339
|
assert.equal(v?.foo, "bar")
|
|
341
340
|
})
|
|
342
341
|
|
|
342
|
+
it("can save several documents in quick succession", async () => {
|
|
343
|
+
// See https://github.com/automerge/automerge-repo/pull/471
|
|
344
|
+
const { repo, storageAdapter, saveDebounceRate } = setup()
|
|
345
|
+
const a = repo.create<TestDoc>()
|
|
346
|
+
const b = repo.create<TestDoc>()
|
|
347
|
+
const c = repo.create<TestDoc>()
|
|
348
|
+
|
|
349
|
+
a.change(doc => (doc.foo = "a"))
|
|
350
|
+
b.change(doc => (doc.foo = "b"))
|
|
351
|
+
c.change(doc => (doc.foo = "c"))
|
|
352
|
+
|
|
353
|
+
await pause(saveDebounceRate)
|
|
354
|
+
|
|
355
|
+
const repo2 = new Repo({
|
|
356
|
+
storage: storageAdapter,
|
|
357
|
+
})
|
|
358
|
+
|
|
359
|
+
const a2 = await repo2.find<TestDoc>(a.url)
|
|
360
|
+
const b2 = await repo2.find<TestDoc>(b.url)
|
|
361
|
+
const c2 = await repo2.find<TestDoc>(c.url)
|
|
362
|
+
|
|
363
|
+
assert.deepEqual(a2?.doc(), { foo: "a" })
|
|
364
|
+
assert.deepEqual(b2?.doc(), { foo: "b" })
|
|
365
|
+
assert.deepEqual(c2?.doc(), { foo: "c" })
|
|
366
|
+
})
|
|
367
|
+
|
|
343
368
|
it("can delete an existing document", async () => {
|
|
344
369
|
const { repo } = setup()
|
|
345
370
|
const handle = repo.create<TestDoc>()
|
|
@@ -1309,6 +1334,56 @@ describe("Repo", () => {
|
|
|
1309
1334
|
teardown()
|
|
1310
1335
|
})
|
|
1311
1336
|
|
|
1337
|
+
it("should actively sync imported documents with id", async () => {
|
|
1338
|
+
const repo = new Repo()
|
|
1339
|
+
const handle = repo.create<TestDoc>()
|
|
1340
|
+
handle.change(d => {
|
|
1341
|
+
d.foo = "bar"
|
|
1342
|
+
})
|
|
1343
|
+
const binary = A.save(handle.doc())
|
|
1344
|
+
|
|
1345
|
+
const { bobRepo, teardown, aliceRepo } = await setup({
|
|
1346
|
+
connectAlice: true,
|
|
1347
|
+
})
|
|
1348
|
+
|
|
1349
|
+
const aliceHandle = aliceRepo.import(binary, { docId: handle.documentId })
|
|
1350
|
+
await aliceHandle.whenReady()
|
|
1351
|
+
assert.deepStrictEqual(aliceHandle.doc(), { foo: "bar" })
|
|
1352
|
+
|
|
1353
|
+
await pause(200)
|
|
1354
|
+
|
|
1355
|
+
const bobHandle = bobRepo.handles[handle.documentId]
|
|
1356
|
+
await bobHandle.whenReady()
|
|
1357
|
+
assert.deepStrictEqual(bobHandle.doc(), { foo: "bar" })
|
|
1358
|
+
|
|
1359
|
+
teardown()
|
|
1360
|
+
})
|
|
1361
|
+
|
|
1362
|
+
it("should actively sync imported documents", async () => {
|
|
1363
|
+
const repo = new Repo()
|
|
1364
|
+
const handle = repo.create<TestDoc>()
|
|
1365
|
+
handle.change(d => {
|
|
1366
|
+
d.foo = "bar"
|
|
1367
|
+
})
|
|
1368
|
+
const binary = A.save(handle.doc())
|
|
1369
|
+
|
|
1370
|
+
const { bobRepo, teardown, aliceRepo } = await setup({
|
|
1371
|
+
connectAlice: true,
|
|
1372
|
+
})
|
|
1373
|
+
|
|
1374
|
+
const aliceHandle = aliceRepo.import(binary)
|
|
1375
|
+
await aliceHandle.whenReady()
|
|
1376
|
+
assert.deepStrictEqual(aliceHandle.doc(), { foo: "bar" })
|
|
1377
|
+
|
|
1378
|
+
await pause(200)
|
|
1379
|
+
|
|
1380
|
+
const bobHandle = bobRepo.handles[aliceHandle.documentId]
|
|
1381
|
+
await bobHandle.whenReady()
|
|
1382
|
+
assert.deepStrictEqual(bobHandle.doc(), { foo: "bar" })
|
|
1383
|
+
|
|
1384
|
+
teardown()
|
|
1385
|
+
})
|
|
1386
|
+
|
|
1312
1387
|
it("should not save sync state of ephemeral peers", async () => {
|
|
1313
1388
|
const { bobRepo, teardown, charlieRepo } = await setup({
|
|
1314
1389
|
connectAlice: false,
|