@automerge/automerge-repo 2.0.0-collectionsync-alpha.1 → 2.0.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/README.md +8 -8
- package/dist/AutomergeUrl.d.ts +17 -5
- package/dist/AutomergeUrl.d.ts.map +1 -1
- package/dist/AutomergeUrl.js +71 -24
- package/dist/DocHandle.d.ts +33 -41
- package/dist/DocHandle.d.ts.map +1 -1
- package/dist/DocHandle.js +105 -66
- package/dist/FindProgress.d.ts +30 -0
- package/dist/FindProgress.d.ts.map +1 -0
- package/dist/FindProgress.js +1 -0
- package/dist/RemoteHeadsSubscriptions.d.ts +4 -5
- package/dist/RemoteHeadsSubscriptions.d.ts.map +1 -1
- package/dist/RemoteHeadsSubscriptions.js +4 -1
- package/dist/Repo.d.ts +24 -5
- package/dist/Repo.d.ts.map +1 -1
- package/dist/Repo.js +355 -169
- package/dist/helpers/abortable.d.ts +36 -0
- package/dist/helpers/abortable.d.ts.map +1 -0
- package/dist/helpers/abortable.js +47 -0
- package/dist/helpers/arraysAreEqual.d.ts.map +1 -1
- package/dist/helpers/bufferFromHex.d.ts +3 -0
- package/dist/helpers/bufferFromHex.d.ts.map +1 -0
- package/dist/helpers/bufferFromHex.js +13 -0
- package/dist/helpers/debounce.d.ts.map +1 -1
- package/dist/helpers/eventPromise.d.ts.map +1 -1
- package/dist/helpers/headsAreSame.d.ts +2 -2
- package/dist/helpers/headsAreSame.d.ts.map +1 -1
- package/dist/helpers/mergeArrays.d.ts +1 -1
- package/dist/helpers/mergeArrays.d.ts.map +1 -1
- package/dist/helpers/pause.d.ts.map +1 -1
- package/dist/helpers/tests/network-adapter-tests.d.ts.map +1 -1
- package/dist/helpers/tests/network-adapter-tests.js +13 -13
- package/dist/helpers/tests/storage-adapter-tests.d.ts.map +1 -1
- package/dist/helpers/tests/storage-adapter-tests.js +6 -9
- package/dist/helpers/throttle.d.ts.map +1 -1
- package/dist/helpers/withTimeout.d.ts.map +1 -1
- package/dist/index.d.ts +35 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -6
- package/dist/network/NetworkSubsystem.d.ts +0 -1
- package/dist/network/NetworkSubsystem.d.ts.map +1 -1
- package/dist/network/NetworkSubsystem.js +0 -3
- package/dist/network/messages.d.ts +1 -7
- package/dist/network/messages.d.ts.map +1 -1
- package/dist/network/messages.js +1 -2
- package/dist/storage/StorageAdapter.d.ts +0 -9
- package/dist/storage/StorageAdapter.d.ts.map +1 -1
- package/dist/storage/StorageAdapter.js +0 -33
- package/dist/storage/StorageSubsystem.d.ts +6 -2
- package/dist/storage/StorageSubsystem.d.ts.map +1 -1
- package/dist/storage/StorageSubsystem.js +131 -37
- package/dist/storage/keyHash.d.ts +1 -1
- package/dist/storage/keyHash.d.ts.map +1 -1
- package/dist/synchronizer/CollectionSynchronizer.d.ts +3 -4
- package/dist/synchronizer/CollectionSynchronizer.d.ts.map +1 -1
- package/dist/synchronizer/CollectionSynchronizer.js +32 -26
- package/dist/synchronizer/DocSynchronizer.d.ts +8 -8
- package/dist/synchronizer/DocSynchronizer.d.ts.map +1 -1
- package/dist/synchronizer/DocSynchronizer.js +205 -79
- package/dist/types.d.ts +4 -1
- package/dist/types.d.ts.map +1 -1
- package/fuzz/fuzz.ts +3 -3
- package/package.json +4 -5
- package/src/AutomergeUrl.ts +101 -26
- package/src/DocHandle.ts +158 -77
- package/src/FindProgress.ts +48 -0
- package/src/RemoteHeadsSubscriptions.ts +11 -9
- package/src/Repo.ts +465 -180
- package/src/helpers/abortable.ts +62 -0
- package/src/helpers/bufferFromHex.ts +14 -0
- package/src/helpers/headsAreSame.ts +2 -2
- package/src/helpers/tests/network-adapter-tests.ts +14 -13
- package/src/helpers/tests/storage-adapter-tests.ts +13 -24
- package/src/index.ts +57 -38
- package/src/network/NetworkSubsystem.ts +0 -4
- package/src/network/messages.ts +2 -11
- package/src/storage/StorageAdapter.ts +0 -42
- package/src/storage/StorageSubsystem.ts +155 -45
- package/src/storage/keyHash.ts +1 -1
- package/src/synchronizer/CollectionSynchronizer.ts +42 -29
- package/src/synchronizer/DocSynchronizer.ts +263 -89
- package/src/types.ts +4 -1
- package/test/AutomergeUrl.test.ts +130 -0
- package/test/CollectionSynchronizer.test.ts +6 -8
- package/test/DocHandle.test.ts +161 -77
- package/test/DocSynchronizer.test.ts +11 -9
- package/test/RemoteHeadsSubscriptions.test.ts +1 -1
- package/test/Repo.test.ts +406 -341
- package/test/StorageSubsystem.test.ts +95 -20
- package/test/remoteHeads.test.ts +28 -13
- package/dist/CollectionHandle.d.ts +0 -14
- package/dist/CollectionHandle.d.ts.map +0 -1
- package/dist/CollectionHandle.js +0 -37
- package/dist/DocUrl.d.ts +0 -47
- package/dist/DocUrl.d.ts.map +0 -1
- package/dist/DocUrl.js +0 -72
- package/dist/EphemeralData.d.ts +0 -20
- package/dist/EphemeralData.d.ts.map +0 -1
- package/dist/EphemeralData.js +0 -1
- package/dist/ferigan.d.ts +0 -51
- package/dist/ferigan.d.ts.map +0 -1
- package/dist/ferigan.js +0 -98
- package/dist/src/DocHandle.d.ts +0 -182
- package/dist/src/DocHandle.d.ts.map +0 -1
- package/dist/src/DocHandle.js +0 -405
- package/dist/src/DocUrl.d.ts +0 -49
- package/dist/src/DocUrl.d.ts.map +0 -1
- package/dist/src/DocUrl.js +0 -72
- package/dist/src/EphemeralData.d.ts +0 -19
- package/dist/src/EphemeralData.d.ts.map +0 -1
- package/dist/src/EphemeralData.js +0 -1
- package/dist/src/Repo.d.ts +0 -74
- package/dist/src/Repo.d.ts.map +0 -1
- package/dist/src/Repo.js +0 -208
- package/dist/src/helpers/arraysAreEqual.d.ts +0 -2
- package/dist/src/helpers/arraysAreEqual.d.ts.map +0 -1
- package/dist/src/helpers/arraysAreEqual.js +0 -2
- package/dist/src/helpers/cbor.d.ts +0 -4
- package/dist/src/helpers/cbor.d.ts.map +0 -1
- package/dist/src/helpers/cbor.js +0 -8
- package/dist/src/helpers/eventPromise.d.ts +0 -11
- package/dist/src/helpers/eventPromise.d.ts.map +0 -1
- package/dist/src/helpers/eventPromise.js +0 -7
- package/dist/src/helpers/headsAreSame.d.ts +0 -2
- package/dist/src/helpers/headsAreSame.d.ts.map +0 -1
- package/dist/src/helpers/headsAreSame.js +0 -4
- package/dist/src/helpers/mergeArrays.d.ts +0 -2
- package/dist/src/helpers/mergeArrays.d.ts.map +0 -1
- package/dist/src/helpers/mergeArrays.js +0 -15
- package/dist/src/helpers/pause.d.ts +0 -6
- package/dist/src/helpers/pause.d.ts.map +0 -1
- package/dist/src/helpers/pause.js +0 -10
- package/dist/src/helpers/tests/network-adapter-tests.d.ts +0 -21
- package/dist/src/helpers/tests/network-adapter-tests.d.ts.map +0 -1
- package/dist/src/helpers/tests/network-adapter-tests.js +0 -122
- package/dist/src/helpers/withTimeout.d.ts +0 -12
- package/dist/src/helpers/withTimeout.d.ts.map +0 -1
- package/dist/src/helpers/withTimeout.js +0 -24
- package/dist/src/index.d.ts +0 -53
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -40
- package/dist/src/network/NetworkAdapter.d.ts +0 -26
- package/dist/src/network/NetworkAdapter.d.ts.map +0 -1
- package/dist/src/network/NetworkAdapter.js +0 -4
- package/dist/src/network/NetworkSubsystem.d.ts +0 -23
- package/dist/src/network/NetworkSubsystem.d.ts.map +0 -1
- package/dist/src/network/NetworkSubsystem.js +0 -120
- package/dist/src/network/messages.d.ts +0 -85
- package/dist/src/network/messages.d.ts.map +0 -1
- package/dist/src/network/messages.js +0 -23
- package/dist/src/storage/StorageAdapter.d.ts +0 -14
- package/dist/src/storage/StorageAdapter.d.ts.map +0 -1
- package/dist/src/storage/StorageAdapter.js +0 -1
- package/dist/src/storage/StorageSubsystem.d.ts +0 -12
- package/dist/src/storage/StorageSubsystem.d.ts.map +0 -1
- package/dist/src/storage/StorageSubsystem.js +0 -145
- package/dist/src/synchronizer/CollectionSynchronizer.d.ts +0 -25
- package/dist/src/synchronizer/CollectionSynchronizer.d.ts.map +0 -1
- package/dist/src/synchronizer/CollectionSynchronizer.js +0 -106
- package/dist/src/synchronizer/DocSynchronizer.d.ts +0 -29
- package/dist/src/synchronizer/DocSynchronizer.d.ts.map +0 -1
- package/dist/src/synchronizer/DocSynchronizer.js +0 -263
- package/dist/src/synchronizer/Synchronizer.d.ts +0 -9
- package/dist/src/synchronizer/Synchronizer.d.ts.map +0 -1
- package/dist/src/synchronizer/Synchronizer.js +0 -2
- package/dist/src/types.d.ts +0 -16
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -1
- package/dist/test/CollectionSynchronizer.test.d.ts +0 -2
- package/dist/test/CollectionSynchronizer.test.d.ts.map +0 -1
- package/dist/test/CollectionSynchronizer.test.js +0 -57
- package/dist/test/DocHandle.test.d.ts +0 -2
- package/dist/test/DocHandle.test.d.ts.map +0 -1
- package/dist/test/DocHandle.test.js +0 -238
- package/dist/test/DocSynchronizer.test.d.ts +0 -2
- package/dist/test/DocSynchronizer.test.d.ts.map +0 -1
- package/dist/test/DocSynchronizer.test.js +0 -111
- package/dist/test/Network.test.d.ts +0 -2
- package/dist/test/Network.test.d.ts.map +0 -1
- package/dist/test/Network.test.js +0 -11
- package/dist/test/Repo.test.d.ts +0 -2
- package/dist/test/Repo.test.d.ts.map +0 -1
- package/dist/test/Repo.test.js +0 -568
- package/dist/test/StorageSubsystem.test.d.ts +0 -2
- package/dist/test/StorageSubsystem.test.d.ts.map +0 -1
- package/dist/test/StorageSubsystem.test.js +0 -56
- package/dist/test/helpers/DummyNetworkAdapter.d.ts +0 -9
- package/dist/test/helpers/DummyNetworkAdapter.d.ts.map +0 -1
- package/dist/test/helpers/DummyNetworkAdapter.js +0 -15
- package/dist/test/helpers/DummyStorageAdapter.d.ts +0 -16
- package/dist/test/helpers/DummyStorageAdapter.d.ts.map +0 -1
- package/dist/test/helpers/DummyStorageAdapter.js +0 -33
- package/dist/test/helpers/generate-large-object.d.ts +0 -5
- package/dist/test/helpers/generate-large-object.d.ts.map +0 -1
- package/dist/test/helpers/generate-large-object.js +0 -9
- package/dist/test/helpers/getRandomItem.d.ts +0 -2
- package/dist/test/helpers/getRandomItem.d.ts.map +0 -1
- package/dist/test/helpers/getRandomItem.js +0 -4
- package/dist/test/types.d.ts +0 -4
- package/dist/test/types.d.ts.map +0 -1
- package/dist/test/types.js +0 -1
- package/src/CollectionHandle.ts +0 -54
- package/src/ferigan.ts +0 -184
package/dist/DocHandle.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { next as A } from "@automerge/automerge/slim";
|
|
2
2
|
import debug from "debug";
|
|
3
3
|
import { EventEmitter } from "eventemitter3";
|
|
4
4
|
import { assertEvent, assign, createActor, setup, waitFor } from "xstate";
|
|
5
|
-
import { stringifyAutomergeUrl } from "./AutomergeUrl.js";
|
|
5
|
+
import { decodeHeads, encodeHeads, stringifyAutomergeUrl, } from "./AutomergeUrl.js";
|
|
6
6
|
import { encode } from "./helpers/cbor.js";
|
|
7
7
|
import { headsAreSame } from "./helpers/headsAreSame.js";
|
|
8
8
|
import { withTimeout } from "./helpers/withTimeout.js";
|
|
@@ -24,6 +24,8 @@ export class DocHandle extends EventEmitter {
|
|
|
24
24
|
#log;
|
|
25
25
|
/** The XState actor running our state machine. */
|
|
26
26
|
#machine;
|
|
27
|
+
/** If set, this handle will only show the document at these heads */
|
|
28
|
+
#fixedHeads;
|
|
27
29
|
/** The last known state of our document. */
|
|
28
30
|
#prevDocState = A.init();
|
|
29
31
|
/** How long to wait before giving up on a document. (Note that a document will be marked
|
|
@@ -31,6 +33,8 @@ export class DocHandle extends EventEmitter {
|
|
|
31
33
|
#timeoutDelay = 60_000;
|
|
32
34
|
/** A dictionary mapping each peer to the last heads we know they have. */
|
|
33
35
|
#remoteHeads = {};
|
|
36
|
+
/** Cache for view handles, keyed by the stringified heads */
|
|
37
|
+
#viewCache = new Map();
|
|
34
38
|
/** @hidden */
|
|
35
39
|
constructor(documentId, options = {}) {
|
|
36
40
|
super();
|
|
@@ -38,6 +42,9 @@ export class DocHandle extends EventEmitter {
|
|
|
38
42
|
if ("timeoutDelay" in options && options.timeoutDelay) {
|
|
39
43
|
this.#timeoutDelay = options.timeoutDelay;
|
|
40
44
|
}
|
|
45
|
+
if ("heads" in options) {
|
|
46
|
+
this.#fixedHeads = options.heads;
|
|
47
|
+
}
|
|
41
48
|
const doc = A.init();
|
|
42
49
|
this.#log = debug(`automerge-repo:dochandle:${this.documentId.slice(0, 5)}`);
|
|
43
50
|
const delay = this.#timeoutDelay;
|
|
@@ -59,12 +66,12 @@ export class DocHandle extends EventEmitter {
|
|
|
59
66
|
this.emit("delete", { handle: this });
|
|
60
67
|
return { doc: A.init() };
|
|
61
68
|
}),
|
|
69
|
+
onUnavailable: assign(() => {
|
|
70
|
+
return { doc: A.init() };
|
|
71
|
+
}),
|
|
62
72
|
onUnload: assign(() => {
|
|
63
73
|
return { doc: A.init() };
|
|
64
74
|
}),
|
|
65
|
-
onUnavailable: () => {
|
|
66
|
-
this.emit("unavailable", { handle: this });
|
|
67
|
-
},
|
|
68
75
|
},
|
|
69
76
|
}).createMachine({
|
|
70
77
|
/** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAYgFUAFAEQEEAVAUQG0AGAXUVAAcB7WXAC64e+TiAAeiAOwAOAKwA6ACxSAzKqks1ATjlTdAGhABPRAFolAJksKN2y1KtKAbFLla5AX09G0WPISkVAwAMgyMrBxIILz8QiJikggAjCzOijKqLEqqybJyLizaRqYIFpbJtro5Uo7J2o5S3r4YOATECrgQADZgJADCAEoM9MzsYrGCwqLRSeoyCtra8pa5adquySXmDjY5ac7JljLJeepKzSB+bYGdPX0AYgCSAHJUkRN8UwmziM7HCgqyVcUnqcmScmcMm2ZV2yiyzkOx1OalUFx8V1aAQ63R46AgBCgJGGAEUyAwAMp0D7RSbxGagJKHFgKOSWJTJGRSCosCpKaEmRCqbQKU5yXINeTaer6LwY67YogKXH4wkkKgAeX6AH1hjQqABNGncL70xKIJQ5RY5BHOJag6wwpRyEWImQVeT1aWrVSXBXtJUqgn4Ik0ADqNCedG1L3CYY1gwA0saYqbpuaEG4pKLksKpFDgcsCjDhTnxTKpTLdH6sQGFOgAO7oKYhl5gAQNngAJwA1iRY3R40ndSNDSm6enfpm5BkWAVkvy7bpuTCKq7ndZnfVeSwuTX-HWu2AAI4AVzgQhD6q12rILxoADVIyEaAAhMLjtM-RmIE4LVSQi4nLLDIGzOCWwLKA0cgyLBoFWNy+43B0R5nheaqajqepjuMtJfgyEh-FoixqMCoKqOyhzgYKCDOq6UIeuCSxHOoSGKgop74OgABuzbdOgABGvTXlho5GrhJpxJOP4pLulT6KoMhpJY2hzsWNF0QobqMV6LG+pc+A8BAcBiP6gSfFJ36EQgKksksKxrHamwwmY7gLKB85QjBzoAWxdZdL0FnfARST8ooLC7qoTnWBU4pyC5ViVMKBQaHUDQuM4fm3EGhJBWaU7-CysEAUp3LpEpWw0WYRw2LmqzgqciIsCxWUdI2zaXlAbYdt2PZ5dJ1n5jY2iJY1ikOIcMJHCyUWHC62hRZkUVNPKta3Kh56wJ1-VWUyzhFc64JWJCtQNBBzhQW4cHwbsrVKpxPF8YJgV4ZZIWIKkiKiiNSkqZYWjzCWaQ5hFh0AcCuR3QoR74qUknBRmzholpv3OkpRQNNRpTzaKTWKbIWR5FDxm9AIkA7e9skUYCWayLILBZGoLkUSKbIyIdpxHPoyTeN4QA */
|
|
@@ -150,7 +157,7 @@ export class DocHandle extends EventEmitter {
|
|
|
150
157
|
#checkForChanges(before, after) {
|
|
151
158
|
const beforeHeads = A.getHeads(before);
|
|
152
159
|
const afterHeads = A.getHeads(after);
|
|
153
|
-
const docChanged = !headsAreSame(afterHeads, beforeHeads);
|
|
160
|
+
const docChanged = !headsAreSame(encodeHeads(afterHeads), encodeHeads(beforeHeads));
|
|
154
161
|
if (docChanged) {
|
|
155
162
|
this.emit("heads-changed", { handle: this, doc: after });
|
|
156
163
|
const patches = A.diff(after, beforeHeads, afterHeads);
|
|
@@ -173,7 +180,10 @@ export class DocHandle extends EventEmitter {
|
|
|
173
180
|
/** Our documentId in Automerge URL form.
|
|
174
181
|
*/
|
|
175
182
|
get url() {
|
|
176
|
-
return stringifyAutomergeUrl({
|
|
183
|
+
return stringifyAutomergeUrl({
|
|
184
|
+
documentId: this.documentId,
|
|
185
|
+
heads: this.#fixedHeads,
|
|
186
|
+
});
|
|
177
187
|
}
|
|
178
188
|
/**
|
|
179
189
|
* @returns true if the document is ready for accessing or changes.
|
|
@@ -221,43 +231,26 @@ export class DocHandle extends EventEmitter {
|
|
|
221
231
|
await withTimeout(this.#statePromise(awaitStates), this.#timeoutDelay);
|
|
222
232
|
}
|
|
223
233
|
/**
|
|
224
|
-
*
|
|
234
|
+
* Returns the current state of the Automerge document this handle manages.
|
|
235
|
+
*
|
|
236
|
+
* @returns the current document
|
|
237
|
+
* @throws on deleted and unavailable documents
|
|
225
238
|
*
|
|
226
|
-
* This is the recommended way to access a handle's document. Note that this waits for the handle
|
|
227
|
-
* to be ready if necessary. If loading (or synchronization) fails, this will never resolve.
|
|
228
239
|
*/
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
await this.#statePromise(awaitStates);
|
|
235
|
-
}
|
|
236
|
-
catch (error) {
|
|
237
|
-
// if we timed out, return undefined
|
|
238
|
-
return undefined;
|
|
240
|
+
doc() {
|
|
241
|
+
if (!this.isReady())
|
|
242
|
+
throw new Error("DocHandle is not ready");
|
|
243
|
+
if (this.#fixedHeads) {
|
|
244
|
+
return A.view(this.#doc, decodeHeads(this.#fixedHeads));
|
|
239
245
|
}
|
|
240
|
-
|
|
241
|
-
return !this.isUnavailable() ? this.#doc : undefined;
|
|
246
|
+
return this.#doc;
|
|
242
247
|
}
|
|
243
248
|
/**
|
|
244
|
-
* Synchronously returns the current state of the Automerge document this handle manages, or
|
|
245
|
-
* undefined. Consider using `await handle.doc()` instead. Check `isReady()`, or use `whenReady()`
|
|
246
|
-
* if you want to make sure loading is complete first.
|
|
247
|
-
*
|
|
248
|
-
* Not to be confused with the SyncState of the document, which describes the state of the
|
|
249
|
-
* synchronization process.
|
|
250
|
-
*
|
|
251
|
-
* Note that `undefined` is not a valid Automerge document, so the return from this function is
|
|
252
|
-
* unambigous.
|
|
253
249
|
*
|
|
254
|
-
* @
|
|
255
|
-
*/
|
|
250
|
+
* @deprecated */
|
|
256
251
|
docSync() {
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
else
|
|
260
|
-
return this.#doc;
|
|
252
|
+
console.warn("docSync is deprecated. Use doc() instead. This function will be removed as part of the 2.0 release.");
|
|
253
|
+
return this.doc();
|
|
261
254
|
}
|
|
262
255
|
/**
|
|
263
256
|
* Returns the current "heads" of the document, akin to a git commit.
|
|
@@ -265,18 +258,18 @@ export class DocHandle extends EventEmitter {
|
|
|
265
258
|
* @returns the current document's heads, or undefined if the document is not ready
|
|
266
259
|
*/
|
|
267
260
|
heads() {
|
|
268
|
-
if (!this.isReady())
|
|
269
|
-
|
|
261
|
+
if (!this.isReady())
|
|
262
|
+
throw new Error("DocHandle is not ready");
|
|
263
|
+
if (this.#fixedHeads) {
|
|
264
|
+
return this.#fixedHeads;
|
|
270
265
|
}
|
|
271
|
-
return A.getHeads(this.#doc);
|
|
266
|
+
return encodeHeads(A.getHeads(this.#doc));
|
|
272
267
|
}
|
|
273
268
|
begin() {
|
|
274
269
|
this.#machine.send({ type: BEGIN });
|
|
275
270
|
}
|
|
276
271
|
/**
|
|
277
|
-
*
|
|
278
|
-
* by the `heads` passed in. The return value is the same type as docSync() and will return
|
|
279
|
-
* undefined if the object hasn't finished loading.
|
|
272
|
+
* Returns an array of all past "heads" for the document in topological order.
|
|
280
273
|
*
|
|
281
274
|
* @remarks
|
|
282
275
|
* A point-in-time in an automerge document is an *array* of heads since there may be
|
|
@@ -285,18 +278,18 @@ export class DocHandle extends EventEmitter {
|
|
|
285
278
|
* history views would be quite large under concurrency (every thing in each branch against each other).
|
|
286
279
|
* There might be a clever way to think about this, but we haven't found it yet, so for now at least
|
|
287
280
|
* we present a single traversable view which excludes concurrency.
|
|
288
|
-
* @returns The individual heads for every change in the document.
|
|
281
|
+
* @returns UrlHeads[] - The individual heads for every change in the document. Each item is a tagged string[1].
|
|
289
282
|
*/
|
|
290
283
|
history() {
|
|
291
284
|
if (!this.isReady()) {
|
|
292
285
|
return undefined;
|
|
293
286
|
}
|
|
294
287
|
// This just returns all the heads as individual strings.
|
|
295
|
-
return A.topoHistoryTraversal(this.#doc).map(h => [h]);
|
|
288
|
+
return A.topoHistoryTraversal(this.#doc).map(h => encodeHeads([h]));
|
|
296
289
|
}
|
|
297
290
|
/**
|
|
298
291
|
* Creates a fixed "view" of an automerge document at the given point in time represented
|
|
299
|
-
* by the `heads` passed in. The return value is the same type as
|
|
292
|
+
* by the `heads` passed in. The return value is the same type as doc() and will return
|
|
300
293
|
* undefined if the object hasn't finished loading.
|
|
301
294
|
*
|
|
302
295
|
* @remarks
|
|
@@ -304,32 +297,68 @@ export class DocHandle extends EventEmitter {
|
|
|
304
297
|
* of Automerge doesn't check types at runtime, so if you go back to an old set of heads
|
|
305
298
|
* that doesn't match the heads here, Typescript will not save you.
|
|
306
299
|
*
|
|
307
|
-
* @
|
|
300
|
+
* @argument heads - The heads to view the document at. See history().
|
|
301
|
+
* @returns DocHandle<T> at the time of `heads`
|
|
308
302
|
*/
|
|
309
303
|
view(heads) {
|
|
310
304
|
if (!this.isReady()) {
|
|
311
|
-
|
|
305
|
+
throw new Error(`DocHandle#${this.documentId} is not ready. Check \`handle.isReady()\` before calling view().`);
|
|
306
|
+
}
|
|
307
|
+
// Create a cache key from the heads
|
|
308
|
+
const cacheKey = JSON.stringify(heads);
|
|
309
|
+
// Check if we have a cached handle for these heads
|
|
310
|
+
const cachedHandle = this.#viewCache.get(cacheKey);
|
|
311
|
+
if (cachedHandle) {
|
|
312
|
+
return cachedHandle;
|
|
312
313
|
}
|
|
313
|
-
|
|
314
|
+
// Create a new handle with the same documentId but fixed heads
|
|
315
|
+
const handle = new DocHandle(this.documentId, {
|
|
316
|
+
heads,
|
|
317
|
+
timeoutDelay: this.#timeoutDelay,
|
|
318
|
+
});
|
|
319
|
+
handle.update(() => A.clone(this.#doc));
|
|
320
|
+
handle.doneLoading();
|
|
321
|
+
// Store in cache
|
|
322
|
+
this.#viewCache.set(cacheKey, handle);
|
|
323
|
+
return handle;
|
|
314
324
|
}
|
|
315
325
|
/**
|
|
316
326
|
* Returns a set of Patch operations that will move a materialized document from one state to another
|
|
317
327
|
* if applied.
|
|
318
328
|
*
|
|
319
329
|
* @remarks
|
|
320
|
-
* We allow specifying
|
|
321
|
-
*
|
|
330
|
+
* We allow specifying either:
|
|
331
|
+
* - Two sets of heads to compare directly
|
|
332
|
+
* - A single set of heads to compare against our current heads
|
|
333
|
+
* - Another DocHandle to compare against (which must share history with this document)
|
|
322
334
|
*
|
|
323
|
-
* @
|
|
335
|
+
* @throws Error if the documents don't share history or if either document is not ready
|
|
336
|
+
* @returns Automerge patches that go from one document state to the other
|
|
324
337
|
*/
|
|
325
338
|
diff(first, second) {
|
|
326
339
|
if (!this.isReady()) {
|
|
327
|
-
|
|
340
|
+
throw new Error(`DocHandle#${this.documentId} is not ready. Check \`handle.isReady()\` before calling diff().`);
|
|
341
|
+
}
|
|
342
|
+
const doc = this.#doc;
|
|
343
|
+
if (!doc)
|
|
344
|
+
throw new Error("Document not available");
|
|
345
|
+
// If first argument is a DocHandle
|
|
346
|
+
if (first instanceof DocHandle) {
|
|
347
|
+
if (!first.isReady()) {
|
|
348
|
+
throw new Error("Cannot diff against a handle that isn't ready");
|
|
349
|
+
}
|
|
350
|
+
const otherHeads = first.heads();
|
|
351
|
+
if (!otherHeads)
|
|
352
|
+
throw new Error("Other document's heads not available");
|
|
353
|
+
// Create a temporary merged doc to verify shared history and compute diff
|
|
354
|
+
const mergedDoc = A.merge(A.clone(doc), first.doc());
|
|
355
|
+
// Use the merged doc to compute the diff
|
|
356
|
+
return A.diff(mergedDoc, decodeHeads(this.heads()), decodeHeads(otherHeads));
|
|
328
357
|
}
|
|
329
|
-
//
|
|
330
|
-
const from = second ? first : this.heads() || [];
|
|
358
|
+
// Otherwise treat as heads
|
|
359
|
+
const from = second ? first : (this.heads() || []);
|
|
331
360
|
const to = second ? second : first;
|
|
332
|
-
return A.diff(
|
|
361
|
+
return A.diff(doc, decodeHeads(from), decodeHeads(to));
|
|
333
362
|
}
|
|
334
363
|
/**
|
|
335
364
|
* `metadata(head?)` allows you to look at the metadata for a change
|
|
@@ -350,7 +379,8 @@ export class DocHandle extends EventEmitter {
|
|
|
350
379
|
change = this.heads()[0];
|
|
351
380
|
}
|
|
352
381
|
// we return undefined instead of null by convention in this API
|
|
353
|
-
return A.inspectChange(this.#doc, change) ||
|
|
382
|
+
return (A.inspectChange(this.#doc, decodeHeads([change])[0]) ||
|
|
383
|
+
undefined);
|
|
354
384
|
}
|
|
355
385
|
/**
|
|
356
386
|
* `update` is called any time we have a new document state; could be
|
|
@@ -370,7 +400,7 @@ export class DocHandle extends EventEmitter {
|
|
|
370
400
|
this.#machine.send({ type: DOC_READY });
|
|
371
401
|
}
|
|
372
402
|
/**
|
|
373
|
-
* Called by the repo
|
|
403
|
+
* Called by the repo when a doc handle changes or we receive new remote heads.
|
|
374
404
|
* @hidden
|
|
375
405
|
*/
|
|
376
406
|
setRemoteHeads(storageId, heads) {
|
|
@@ -400,6 +430,9 @@ export class DocHandle extends EventEmitter {
|
|
|
400
430
|
if (!this.isReady()) {
|
|
401
431
|
throw new Error(`DocHandle#${this.documentId} is in ${this.state} and not ready. Check \`handle.isReady()\` before accessing the document.`);
|
|
402
432
|
}
|
|
433
|
+
if (this.#fixedHeads) {
|
|
434
|
+
throw new Error(`DocHandle#${this.documentId} is in view-only mode at specific heads. Use clone() to create a new document from this state.`);
|
|
435
|
+
}
|
|
403
436
|
this.#machine.send({
|
|
404
437
|
type: UPDATE,
|
|
405
438
|
payload: { callback: doc => A.change(doc, options, callback) },
|
|
@@ -414,13 +447,18 @@ export class DocHandle extends EventEmitter {
|
|
|
414
447
|
if (!this.isReady()) {
|
|
415
448
|
throw new Error(`DocHandle#${this.documentId} is not ready. Check \`handle.isReady()\` before accessing the document.`);
|
|
416
449
|
}
|
|
450
|
+
if (this.#fixedHeads) {
|
|
451
|
+
throw new Error(`DocHandle#${this.documentId} is in view-only mode at specific heads. Use clone() to create a new document from this state.`);
|
|
452
|
+
}
|
|
417
453
|
let resultHeads = undefined;
|
|
418
454
|
this.#machine.send({
|
|
419
455
|
type: UPDATE,
|
|
420
456
|
payload: {
|
|
421
457
|
callback: doc => {
|
|
422
|
-
const result = A.changeAt(doc, heads, options, callback);
|
|
423
|
-
resultHeads = result.newHeads
|
|
458
|
+
const result = A.changeAt(doc, decodeHeads(heads), options, callback);
|
|
459
|
+
resultHeads = result.newHeads
|
|
460
|
+
? encodeHeads(result.newHeads)
|
|
461
|
+
: undefined;
|
|
424
462
|
return result.newDoc;
|
|
425
463
|
},
|
|
426
464
|
},
|
|
@@ -442,22 +480,23 @@ export class DocHandle extends EventEmitter {
|
|
|
442
480
|
if (!this.isReady() || !otherHandle.isReady()) {
|
|
443
481
|
throw new Error("Both handles must be ready to merge");
|
|
444
482
|
}
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
throw new Error("The document to be merged in is falsy, aborting.");
|
|
483
|
+
if (this.#fixedHeads) {
|
|
484
|
+
throw new Error(`DocHandle#${this.documentId} is in view-only mode at specific heads. Use clone() to create a new document from this state.`);
|
|
448
485
|
}
|
|
486
|
+
const mergingDoc = otherHandle.doc();
|
|
449
487
|
this.update(doc => {
|
|
450
488
|
return A.merge(doc, mergingDoc);
|
|
451
489
|
});
|
|
452
490
|
}
|
|
453
491
|
/**
|
|
454
|
-
*
|
|
492
|
+
* Updates the internal state machine to mark the document unavailable.
|
|
455
493
|
* @hidden
|
|
456
494
|
*/
|
|
457
495
|
unavailable() {
|
|
458
496
|
this.#machine.send({ type: DOC_UNAVAILABLE });
|
|
459
497
|
}
|
|
460
|
-
/**
|
|
498
|
+
/**
|
|
499
|
+
* Called by the repo either when the document is not found in storage.
|
|
461
500
|
* @hidden
|
|
462
501
|
* */
|
|
463
502
|
request() {
|
|
@@ -486,7 +525,7 @@ export class DocHandle extends EventEmitter {
|
|
|
486
525
|
broadcast(message) {
|
|
487
526
|
this.emit("ephemeral-message-outbound", {
|
|
488
527
|
handle: this,
|
|
489
|
-
data: encode(message),
|
|
528
|
+
data: new Uint8Array(encode(message)),
|
|
490
529
|
});
|
|
491
530
|
}
|
|
492
531
|
metrics() {
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { DocHandle } from "./DocHandle.js";
|
|
2
|
+
export type FindProgressState = "loading" | "ready" | "failed" | "aborted" | "unavailable";
|
|
3
|
+
interface FindProgressBase<T> {
|
|
4
|
+
state: FindProgressState;
|
|
5
|
+
handle: DocHandle<T>;
|
|
6
|
+
}
|
|
7
|
+
interface FindProgressLoading<T> extends FindProgressBase<T> {
|
|
8
|
+
state: "loading";
|
|
9
|
+
progress: number;
|
|
10
|
+
}
|
|
11
|
+
interface FindProgressReady<T> extends FindProgressBase<T> {
|
|
12
|
+
state: "ready";
|
|
13
|
+
}
|
|
14
|
+
interface FindProgressFailed<T> extends FindProgressBase<T> {
|
|
15
|
+
state: "failed";
|
|
16
|
+
error: Error;
|
|
17
|
+
}
|
|
18
|
+
interface FindProgressUnavailable<T> extends FindProgressBase<T> {
|
|
19
|
+
state: "unavailable";
|
|
20
|
+
}
|
|
21
|
+
interface FindProgressAborted<T> extends FindProgressBase<T> {
|
|
22
|
+
state: "aborted";
|
|
23
|
+
}
|
|
24
|
+
export type FindProgress<T> = FindProgressLoading<T> | FindProgressReady<T> | FindProgressFailed<T> | FindProgressUnavailable<T> | FindProgressAborted<T>;
|
|
25
|
+
export type FindProgressWithMethods<T> = FindProgress<T> & {
|
|
26
|
+
next: () => Promise<FindProgressWithMethods<T>>;
|
|
27
|
+
untilReady: (allowableStates: string[]) => Promise<DocHandle<T>>;
|
|
28
|
+
};
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=FindProgress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FindProgress.d.ts","sourceRoot":"","sources":["../src/FindProgress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,OAAO,GACP,QAAQ,GACR,SAAS,GACT,aAAa,CAAA;AAEjB,UAAU,gBAAgB,CAAC,CAAC;IAC1B,KAAK,EAAE,iBAAiB,CAAA;IACxB,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;CACrB;AAED,UAAU,mBAAmB,CAAC,CAAC,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IAC1D,KAAK,EAAE,SAAS,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,UAAU,iBAAiB,CAAC,CAAC,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IACxD,KAAK,EAAE,OAAO,CAAA;CACf;AAED,UAAU,kBAAkB,CAAC,CAAC,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IACzD,KAAK,EAAE,QAAQ,CAAA;IACf,KAAK,EAAE,KAAK,CAAA;CACb;AAED,UAAU,uBAAuB,CAAC,CAAC,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IAC9D,KAAK,EAAE,aAAa,CAAA;CACrB;AAED,UAAU,mBAAmB,CAAC,CAAC,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IAC1D,KAAK,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,IACtB,mBAAmB,CAAC,CAAC,CAAC,GACtB,iBAAiB,CAAC,CAAC,CAAC,GACpB,kBAAkB,CAAC,CAAC,CAAC,GACrB,uBAAuB,CAAC,CAAC,CAAC,GAC1B,mBAAmB,CAAC,CAAC,CAAC,CAAA;AAE1B,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG;IACzD,IAAI,EAAE,MAAM,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAA;IAE/C,UAAU,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;CACjE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
import { next as A } from "@automerge/automerge/slim";
|
|
2
1
|
import { EventEmitter } from "eventemitter3";
|
|
3
|
-
import { DocumentId, PeerId } from "./types.js";
|
|
2
|
+
import { DocumentId, PeerId, UrlHeads } from "./types.js";
|
|
4
3
|
import { RemoteHeadsChanged, RemoteSubscriptionControlMessage } from "./network/messages.js";
|
|
5
4
|
import { StorageId } from "./index.js";
|
|
6
5
|
export type RemoteHeadsSubscriptionEventPayload = {
|
|
7
6
|
documentId: DocumentId;
|
|
8
7
|
storageId: StorageId;
|
|
9
|
-
remoteHeads:
|
|
8
|
+
remoteHeads: UrlHeads;
|
|
10
9
|
timestamp: number;
|
|
11
10
|
};
|
|
12
11
|
export type NotifyRemoteHeadsPayload = {
|
|
13
12
|
targetId: PeerId;
|
|
14
13
|
documentId: DocumentId;
|
|
15
14
|
storageId: StorageId;
|
|
16
|
-
heads:
|
|
15
|
+
heads: UrlHeads;
|
|
17
16
|
timestamp: number;
|
|
18
17
|
};
|
|
19
18
|
type RemoteHeadsSubscriptionEvents = {
|
|
@@ -33,7 +32,7 @@ export declare class RemoteHeadsSubscriptions extends EventEmitter<RemoteHeadsSu
|
|
|
33
32
|
/** A peer we are not directly connected to has changed their heads */
|
|
34
33
|
handleRemoteHeads(msg: RemoteHeadsChanged): void;
|
|
35
34
|
/** A peer we are directly connected to has updated their heads */
|
|
36
|
-
handleImmediateRemoteHeadsChanged(documentId: DocumentId, storageId: StorageId, heads:
|
|
35
|
+
handleImmediateRemoteHeadsChanged(documentId: DocumentId, storageId: StorageId, heads: UrlHeads): void;
|
|
37
36
|
addGenerousPeer(peerId: PeerId): void;
|
|
38
37
|
removePeer(peerId: PeerId): void;
|
|
39
38
|
subscribePeerToDoc(peerId: PeerId, documentId: DocumentId): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteHeadsSubscriptions.d.ts","sourceRoot":"","sources":["../src/RemoteHeadsSubscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"RemoteHeadsSubscriptions.d.ts","sourceRoot":"","sources":["../src/RemoteHeadsSubscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EACL,kBAAkB,EAClB,gCAAgC,EACjC,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAItC,MAAM,MAAM,mCAAmC,GAAG;IAChD,UAAU,EAAE,UAAU,CAAA;IACtB,SAAS,EAAE,SAAS,CAAA;IACpB,WAAW,EAAE,QAAQ,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAGD,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,UAAU,CAAA;IACtB,SAAS,EAAE,SAAS,CAAA;IACpB,KAAK,EAAE,QAAQ,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,KAAK,6BAA6B,GAAG;IACnC,sBAAsB,EAAE,CAAC,OAAO,EAAE,mCAAmC,KAAK,IAAI,CAAA;IAC9E,oBAAoB,EAAE,CAAC,OAAO,EAAE;QAC9B,KAAK,EAAE,MAAM,EAAE,CAAA;QACf,GAAG,CAAC,EAAE,SAAS,EAAE,CAAA;QACjB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAA;KACrB,KAAK,IAAI,CAAA;IACV,qBAAqB,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,IAAI,CAAA;CACnE,CAAA;AAED,qBAAa,wBAAyB,SAAQ,YAAY,CAAC,6BAA6B,CAAC;;IAcvF,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE;IAkBvC,sBAAsB,CAAC,OAAO,EAAE,SAAS,EAAE;IAsB3C,oBAAoB,CAAC,OAAO,EAAE,gCAAgC;IA0E9D,sEAAsE;IACtE,iBAAiB,CAAC,GAAG,EAAE,kBAAkB;IAgDzC,kEAAkE;IAClE,iCAAiC,CAC/B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,QAAQ;IAgCjB,eAAe,CAAC,MAAM,EAAE,MAAM;IAwB9B,UAAU,CAAC,MAAM,EAAE,MAAM;IA2BzB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU;CAuE1D"}
|
|
@@ -270,7 +270,10 @@ export class RemoteHeadsSubscriptions extends EventEmitter {
|
|
|
270
270
|
continue;
|
|
271
271
|
}
|
|
272
272
|
else {
|
|
273
|
-
remote.set(storageId, {
|
|
273
|
+
remote.set(storageId, {
|
|
274
|
+
timestamp,
|
|
275
|
+
heads: heads,
|
|
276
|
+
});
|
|
274
277
|
changedHeads.push({
|
|
275
278
|
documentId,
|
|
276
279
|
storageId: storageId,
|
package/dist/Repo.d.ts
CHANGED
|
@@ -8,6 +8,18 @@ import { StorageId } from "./storage/types.js";
|
|
|
8
8
|
import { CollectionSynchronizer } from "./synchronizer/CollectionSynchronizer.js";
|
|
9
9
|
import { DocSyncMetrics } from "./synchronizer/Synchronizer.js";
|
|
10
10
|
import type { AnyDocumentId, AutomergeUrl, DocumentId, PeerId } from "./types.js";
|
|
11
|
+
import { AbortOptions } from "./helpers/abortable.js";
|
|
12
|
+
import { FindProgress } from "./FindProgress.js";
|
|
13
|
+
export type FindProgressWithMethods<T> = FindProgress<T> & {
|
|
14
|
+
untilReady: (allowableStates: string[]) => Promise<DocHandle<T>>;
|
|
15
|
+
peek: () => FindProgress<T>;
|
|
16
|
+
subscribe: (callback: (progress: FindProgress<T>) => void) => () => void;
|
|
17
|
+
};
|
|
18
|
+
export type ProgressSignal<T> = {
|
|
19
|
+
peek: () => FindProgress<T>;
|
|
20
|
+
subscribe: (callback: (progress: FindProgress<T>) => void) => () => void;
|
|
21
|
+
untilReady: (allowableStates: string[]) => Promise<DocHandle<T>>;
|
|
22
|
+
};
|
|
11
23
|
/** A Repo is a collection of documents with networking, syncing, and storage capabilities. */
|
|
12
24
|
/** The `Repo` is the main entry point of this library
|
|
13
25
|
*
|
|
@@ -20,7 +32,11 @@ export declare class Repo extends EventEmitter<RepoEvents> {
|
|
|
20
32
|
#private;
|
|
21
33
|
/** @hidden */
|
|
22
34
|
networkSubsystem: NetworkSubsystem;
|
|
23
|
-
|
|
35
|
+
/** @hidden */
|
|
36
|
+
storageSubsystem?: StorageSubsystem;
|
|
37
|
+
/** The debounce rate is adjustable on the repo. */
|
|
38
|
+
/** @hidden */
|
|
39
|
+
saveDebounceRate: number;
|
|
24
40
|
/** @hidden */
|
|
25
41
|
synchronizer: CollectionSynchronizer;
|
|
26
42
|
/** By default, we share generously with all peers. */
|
|
@@ -53,17 +69,17 @@ export declare class Repo extends EventEmitter<RepoEvents> {
|
|
|
53
69
|
* Any peers this `Repo` is connected to for whom `sharePolicy` returns `true` will
|
|
54
70
|
* be notified of the newly created DocHandle.
|
|
55
71
|
*
|
|
56
|
-
* @throws if the cloned handle is not yet ready or if
|
|
57
|
-
* `clonedHandle.docSync()` returns `undefined` (i.e. the handle is unavailable).
|
|
58
72
|
*/
|
|
59
73
|
clone<T>(clonedHandle: DocHandle<T>): DocHandle<T>;
|
|
74
|
+
findWithProgress<T>(id: AnyDocumentId, options?: AbortOptions): FindProgressWithMethods<T> | FindProgress<T>;
|
|
75
|
+
find<T>(id: AnyDocumentId, options?: RepoFindOptions & AbortOptions): Promise<DocHandle<T>>;
|
|
60
76
|
/**
|
|
61
77
|
* Retrieves a document by id. It gets data from the local system, but also emits a `document`
|
|
62
78
|
* event to advertise interest in the document.
|
|
63
79
|
*/
|
|
64
|
-
|
|
80
|
+
findClassic<T>(
|
|
65
81
|
/** The url or documentId of the handle to retrieve */
|
|
66
|
-
id: AnyDocumentId): DocHandle<T
|
|
82
|
+
id: AnyDocumentId, options?: RepoFindOptions & AbortOptions): Promise<DocHandle<T>>;
|
|
67
83
|
delete(
|
|
68
84
|
/** The url or documentId of the handle to delete */
|
|
69
85
|
id: AnyDocumentId): void;
|
|
@@ -147,6 +163,9 @@ export interface RepoEvents {
|
|
|
147
163
|
"unavailable-document": (arg: DeleteDocumentPayload) => void;
|
|
148
164
|
"doc-metrics": (arg: DocMetrics) => void;
|
|
149
165
|
}
|
|
166
|
+
export interface RepoFindOptions {
|
|
167
|
+
allowableStates?: string[];
|
|
168
|
+
}
|
|
150
169
|
export interface DocumentPayload {
|
|
151
170
|
handle: DocHandle<any>;
|
|
152
171
|
}
|
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;
|
|
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;IAEnC,mDAAmD;IACnD,cAAc;IACd,gBAAgB,SAAM;IAItB,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;gBAM3C,EACV,OAAO,EACP,OAAY,EACZ,MAAuB,EACvB,WAAW,EACX,WAAmC,EACnC,0BAAkC,EAClC,QAAa,GACd,GAAE,UAAe;IA0PlB,8CAA8C;IAC9C,IAAI,OAAO,uCAEV;IAED,+CAA+C;IAC/C,IAAI,KAAK,IAAI,MAAM,EAAE,CAEpB;IAED,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIzD;;;;OAIG;IACH,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAuBzC;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;IAmBnC,gBAAgB,CAAC,CAAC,EAChB,EAAE,EAAE,aAAa,EACjB,OAAO,GAAE,YAAiB,GACzB,uBAAuB,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAgKzC,IAAI,CAAC,CAAC,EACV,EAAE,EAAE,aAAa,EACjB,OAAO,GAAE,eAAe,GAAG,YAAiB,GAC3C,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAoExB;;;OAGG;IACG,WAAW,CAAC,CAAC;IACjB,sDAAsD;IACtD,EAAE,EAAE,aAAa,EACjB,OAAO,GAAE,eAAe,GAAG,YAAiB,GAC3C,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAmBxB,MAAM;IACJ,oDAAoD;IACpD,EAAE,EAAE,aAAa;IAYnB;;;;;;OAMG;IACG,MAAM,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAQhE;;;OAGG;IACH,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU;IAY5B,kBAAkB,GAAI,SAAS,SAAS,EAAE,UASzC;IAED,SAAS,QAAa,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAMnD;IAED;;;;;OAKG;IACG,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAcpD;;;;;OAKG;IACG,eAAe,CAAC,UAAU,EAAE,UAAU;IA6B5C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAOzB,OAAO,IAAI;QAAE,SAAS,EAAE;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;SAAE,CAAA;KAAE;CAGjD;AAED,MAAM,WAAW,UAAU;IACzB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;8DAC0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB,gDAAgD;IAChD,OAAO,CAAC,EAAE,uBAAuB,CAAA;IAEjC,iEAAiE;IACjE,OAAO,CAAC,EAAE,uBAAuB,EAAE,CAAA;IAEnC;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAA;IAEzB;;OAEG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAA;IAEpC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAA;CAC1B;AAED;;;;;;;KAOK;AACL,MAAM,MAAM,WAAW,GAAG,CACxB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,UAAU,KACpB,OAAO,CAAC,OAAO,CAAC,CAAA;AAGrB,MAAM,WAAW,UAAU;IACzB,+CAA+C;IAC/C,QAAQ,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAA;IACxC,6BAA6B;IAC7B,iBAAiB,EAAE,CAAC,GAAG,EAAE,qBAAqB,KAAK,IAAI,CAAA;IACvD,4FAA4F;IAC5F,sBAAsB,EAAE,CAAC,GAAG,EAAE,qBAAqB,KAAK,IAAI,CAAA;IAC5D,aAAa,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAA;CACzC;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAA;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,UAAU,CAAA;CACvB;AAED,MAAM,MAAM,UAAU,GAClB,cAAc,GACd;IACE,IAAI,EAAE,YAAY,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;CACnB,GACD;IACE,IAAI,EAAE,YAAY,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA"}
|