@automerge/automerge-repo 2.0.0-alpha.7 → 2.0.0-collectionsync-alpha.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/dist/CollectionHandle.d.ts +14 -0
- package/dist/CollectionHandle.d.ts.map +1 -0
- package/dist/CollectionHandle.js +37 -0
- package/dist/DocHandle.d.ts +37 -6
- package/dist/DocHandle.d.ts.map +1 -1
- package/dist/DocHandle.js +64 -6
- package/dist/DocUrl.d.ts +47 -0
- package/dist/DocUrl.d.ts.map +1 -0
- package/dist/DocUrl.js +72 -0
- package/dist/EphemeralData.d.ts +20 -0
- package/dist/EphemeralData.d.ts.map +1 -0
- package/dist/EphemeralData.js +1 -0
- package/dist/Repo.d.ts +28 -7
- package/dist/Repo.d.ts.map +1 -1
- package/dist/Repo.js +142 -143
- package/dist/ferigan.d.ts +51 -0
- package/dist/ferigan.d.ts.map +1 -0
- package/dist/ferigan.js +98 -0
- package/dist/helpers/tests/storage-adapter-tests.d.ts +2 -2
- package/dist/helpers/tests/storage-adapter-tests.d.ts.map +1 -1
- package/dist/helpers/tests/storage-adapter-tests.js +19 -39
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/network/NetworkSubsystem.d.ts +1 -0
- package/dist/network/NetworkSubsystem.d.ts.map +1 -1
- package/dist/network/NetworkSubsystem.js +3 -0
- package/dist/network/messages.d.ts +7 -1
- package/dist/network/messages.d.ts.map +1 -1
- package/dist/network/messages.js +2 -1
- package/dist/src/DocHandle.d.ts +182 -0
- package/dist/src/DocHandle.d.ts.map +1 -0
- package/dist/src/DocHandle.js +405 -0
- package/dist/src/DocUrl.d.ts +49 -0
- package/dist/src/DocUrl.d.ts.map +1 -0
- package/dist/src/DocUrl.js +72 -0
- package/dist/src/EphemeralData.d.ts +19 -0
- package/dist/src/EphemeralData.d.ts.map +1 -0
- package/dist/src/EphemeralData.js +1 -0
- package/dist/src/Repo.d.ts +74 -0
- package/dist/src/Repo.d.ts.map +1 -0
- package/dist/src/Repo.js +208 -0
- package/dist/src/helpers/arraysAreEqual.d.ts +2 -0
- package/dist/src/helpers/arraysAreEqual.d.ts.map +1 -0
- package/dist/src/helpers/arraysAreEqual.js +2 -0
- package/dist/src/helpers/cbor.d.ts +4 -0
- package/dist/src/helpers/cbor.d.ts.map +1 -0
- package/dist/src/helpers/cbor.js +8 -0
- package/dist/src/helpers/eventPromise.d.ts +11 -0
- package/dist/src/helpers/eventPromise.d.ts.map +1 -0
- package/dist/src/helpers/eventPromise.js +7 -0
- package/dist/src/helpers/headsAreSame.d.ts +2 -0
- package/dist/src/helpers/headsAreSame.d.ts.map +1 -0
- package/dist/src/helpers/headsAreSame.js +4 -0
- package/dist/src/helpers/mergeArrays.d.ts +2 -0
- package/dist/src/helpers/mergeArrays.d.ts.map +1 -0
- package/dist/src/helpers/mergeArrays.js +15 -0
- package/dist/src/helpers/pause.d.ts +6 -0
- package/dist/src/helpers/pause.d.ts.map +1 -0
- package/dist/src/helpers/pause.js +10 -0
- package/dist/src/helpers/tests/network-adapter-tests.d.ts +21 -0
- package/dist/src/helpers/tests/network-adapter-tests.d.ts.map +1 -0
- package/dist/src/helpers/tests/network-adapter-tests.js +122 -0
- package/dist/src/helpers/withTimeout.d.ts +12 -0
- package/dist/src/helpers/withTimeout.d.ts.map +1 -0
- package/dist/src/helpers/withTimeout.js +24 -0
- package/dist/src/index.d.ts +53 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +40 -0
- package/dist/src/network/NetworkAdapter.d.ts +26 -0
- package/dist/src/network/NetworkAdapter.d.ts.map +1 -0
- package/dist/src/network/NetworkAdapter.js +4 -0
- package/dist/src/network/NetworkSubsystem.d.ts +23 -0
- package/dist/src/network/NetworkSubsystem.d.ts.map +1 -0
- package/dist/src/network/NetworkSubsystem.js +120 -0
- package/dist/src/network/messages.d.ts +85 -0
- package/dist/src/network/messages.d.ts.map +1 -0
- package/dist/src/network/messages.js +23 -0
- package/dist/src/storage/StorageAdapter.d.ts +14 -0
- package/dist/src/storage/StorageAdapter.d.ts.map +1 -0
- package/dist/src/storage/StorageAdapter.js +1 -0
- package/dist/src/storage/StorageSubsystem.d.ts +12 -0
- package/dist/src/storage/StorageSubsystem.d.ts.map +1 -0
- package/dist/src/storage/StorageSubsystem.js +145 -0
- package/dist/src/synchronizer/CollectionSynchronizer.d.ts +25 -0
- package/dist/src/synchronizer/CollectionSynchronizer.d.ts.map +1 -0
- package/dist/src/synchronizer/CollectionSynchronizer.js +106 -0
- package/dist/src/synchronizer/DocSynchronizer.d.ts +29 -0
- package/dist/src/synchronizer/DocSynchronizer.d.ts.map +1 -0
- package/dist/src/synchronizer/DocSynchronizer.js +263 -0
- package/dist/src/synchronizer/Synchronizer.d.ts +9 -0
- package/dist/src/synchronizer/Synchronizer.d.ts.map +1 -0
- package/dist/src/synchronizer/Synchronizer.js +2 -0
- package/dist/src/types.d.ts +16 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +1 -0
- package/dist/storage/StorageAdapter.d.ts +9 -0
- package/dist/storage/StorageAdapter.d.ts.map +1 -1
- package/dist/storage/StorageAdapter.js +33 -0
- package/dist/storage/StorageSubsystem.d.ts +12 -2
- package/dist/storage/StorageSubsystem.d.ts.map +1 -1
- package/dist/storage/StorageSubsystem.js +42 -100
- package/dist/synchronizer/CollectionSynchronizer.d.ts +4 -2
- package/dist/synchronizer/CollectionSynchronizer.d.ts.map +1 -1
- package/dist/synchronizer/CollectionSynchronizer.js +28 -15
- package/dist/synchronizer/DocSynchronizer.d.ts +6 -5
- package/dist/synchronizer/DocSynchronizer.d.ts.map +1 -1
- package/dist/synchronizer/DocSynchronizer.js +76 -178
- package/dist/synchronizer/Synchronizer.d.ts +11 -0
- package/dist/synchronizer/Synchronizer.d.ts.map +1 -1
- package/dist/test/CollectionSynchronizer.test.d.ts +2 -0
- package/dist/test/CollectionSynchronizer.test.d.ts.map +1 -0
- package/dist/test/CollectionSynchronizer.test.js +57 -0
- package/dist/test/DocHandle.test.d.ts +2 -0
- package/dist/test/DocHandle.test.d.ts.map +1 -0
- package/dist/test/DocHandle.test.js +238 -0
- package/dist/test/DocSynchronizer.test.d.ts +2 -0
- package/dist/test/DocSynchronizer.test.d.ts.map +1 -0
- package/dist/test/DocSynchronizer.test.js +111 -0
- package/dist/test/Network.test.d.ts +2 -0
- package/dist/test/Network.test.d.ts.map +1 -0
- package/dist/test/Network.test.js +11 -0
- package/dist/test/Repo.test.d.ts +2 -0
- package/dist/test/Repo.test.d.ts.map +1 -0
- package/dist/test/Repo.test.js +568 -0
- package/dist/test/StorageSubsystem.test.d.ts +2 -0
- package/dist/test/StorageSubsystem.test.d.ts.map +1 -0
- package/dist/test/StorageSubsystem.test.js +56 -0
- package/dist/test/helpers/DummyNetworkAdapter.d.ts +9 -0
- package/dist/test/helpers/DummyNetworkAdapter.d.ts.map +1 -0
- package/dist/test/helpers/DummyNetworkAdapter.js +15 -0
- package/dist/test/helpers/DummyStorageAdapter.d.ts +16 -0
- package/dist/test/helpers/DummyStorageAdapter.d.ts.map +1 -0
- package/dist/test/helpers/DummyStorageAdapter.js +33 -0
- package/dist/test/helpers/generate-large-object.d.ts +5 -0
- package/dist/test/helpers/generate-large-object.d.ts.map +1 -0
- package/dist/test/helpers/generate-large-object.js +9 -0
- package/dist/test/helpers/getRandomItem.d.ts +2 -0
- package/dist/test/helpers/getRandomItem.d.ts.map +1 -0
- package/dist/test/helpers/getRandomItem.js +4 -0
- package/dist/test/types.d.ts +4 -0
- package/dist/test/types.d.ts.map +1 -0
- package/dist/test/types.js +1 -0
- package/package.json +3 -3
- package/src/CollectionHandle.ts +54 -0
- package/src/DocHandle.ts +80 -8
- package/src/Repo.ts +192 -183
- package/src/ferigan.ts +184 -0
- package/src/helpers/tests/storage-adapter-tests.ts +31 -62
- package/src/index.ts +2 -0
- package/src/network/NetworkSubsystem.ts +4 -0
- package/src/network/messages.ts +11 -2
- package/src/storage/StorageAdapter.ts +42 -0
- package/src/storage/StorageSubsystem.ts +59 -119
- package/src/synchronizer/CollectionSynchronizer.ts +34 -26
- package/src/synchronizer/DocSynchronizer.ts +84 -231
- package/src/synchronizer/Synchronizer.ts +14 -0
- package/test/CollectionSynchronizer.test.ts +4 -2
- package/test/DocHandle.test.ts +72 -13
- package/test/DocSynchronizer.test.ts +6 -1
- package/test/RemoteHeadsSubscriptions.test.ts +1 -1
- package/test/Repo.test.ts +225 -117
- package/test/StorageSubsystem.test.ts +20 -16
- package/test/remoteHeads.test.ts +1 -1
|
@@ -1,55 +1,46 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
1
|
+
import { describe, expect, beforeEach, it as _it } from "vitest";
|
|
2
2
|
const PAYLOAD_A = () => new Uint8Array([0, 1, 127, 99, 154, 235]);
|
|
3
3
|
const PAYLOAD_B = () => new Uint8Array([1, 76, 160, 53, 57, 10, 230]);
|
|
4
4
|
const PAYLOAD_C = () => new Uint8Array([2, 111, 74, 131, 236, 96, 142, 193]);
|
|
5
5
|
const LARGE_PAYLOAD = new Uint8Array(100000).map(() => Math.random() * 256);
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
const it = (_it);
|
|
7
|
+
export function runStorageAdapterTests(setup, title) {
|
|
8
|
+
beforeEach(async (ctx) => {
|
|
9
|
+
const { adapter, teardown = NO_OP } = await setup();
|
|
10
|
+
ctx.adapter = adapter;
|
|
11
|
+
return teardown;
|
|
12
|
+
});
|
|
11
13
|
describe(`Storage adapter acceptance tests ${title ? `(${title})` : ""}`, () => {
|
|
12
14
|
describe("load", () => {
|
|
13
|
-
it("should return undefined if there is no data", async () => {
|
|
14
|
-
const { adapter, teardown } = await setup();
|
|
15
|
+
it("should return undefined if there is no data", async ({ adapter }) => {
|
|
15
16
|
const actual = await adapter.load(["AAAAA", "sync-state", "xxxxx"]);
|
|
16
17
|
expect(actual).toBeUndefined();
|
|
17
|
-
teardown();
|
|
18
18
|
});
|
|
19
19
|
});
|
|
20
20
|
describe("save and load", () => {
|
|
21
|
-
it("should return data that was saved", async () => {
|
|
22
|
-
const { adapter, teardown } = await setup();
|
|
21
|
+
it("should return data that was saved", async ({ adapter }) => {
|
|
23
22
|
await adapter.save(["storage-adapter-id"], PAYLOAD_A());
|
|
24
23
|
const actual = await adapter.load(["storage-adapter-id"]);
|
|
25
24
|
expect(actual).toStrictEqual(PAYLOAD_A());
|
|
26
|
-
teardown();
|
|
27
25
|
});
|
|
28
|
-
it("should work with composite keys", async () => {
|
|
29
|
-
const { adapter, teardown } = await setup();
|
|
26
|
+
it("should work with composite keys", async ({ adapter }) => {
|
|
30
27
|
await adapter.save(["AAAAA", "sync-state", "xxxxx"], PAYLOAD_A());
|
|
31
28
|
const actual = await adapter.load(["AAAAA", "sync-state", "xxxxx"]);
|
|
32
29
|
expect(actual).toStrictEqual(PAYLOAD_A());
|
|
33
|
-
teardown();
|
|
34
30
|
});
|
|
35
|
-
it("should work with a large payload", async () => {
|
|
36
|
-
const { adapter, teardown } = await setup();
|
|
31
|
+
it("should work with a large payload", async ({ adapter }) => {
|
|
37
32
|
await adapter.save(["AAAAA", "sync-state", "xxxxx"], LARGE_PAYLOAD);
|
|
38
33
|
const actual = await adapter.load(["AAAAA", "sync-state", "xxxxx"]);
|
|
39
34
|
expect(actual).toStrictEqual(LARGE_PAYLOAD);
|
|
40
|
-
teardown();
|
|
41
35
|
});
|
|
42
36
|
});
|
|
43
37
|
describe("loadRange", () => {
|
|
44
|
-
it("should return an empty array if there is no data", async () => {
|
|
45
|
-
const { adapter, teardown } = await setup();
|
|
38
|
+
it("should return an empty array if there is no data", async ({ adapter, }) => {
|
|
46
39
|
expect(await adapter.loadRange(["AAAAA"])).toStrictEqual([]);
|
|
47
|
-
teardown();
|
|
48
40
|
});
|
|
49
41
|
});
|
|
50
42
|
describe("save and loadRange", () => {
|
|
51
|
-
it("should return all the data that matches the key", async () => {
|
|
52
|
-
const { adapter, teardown } = await setup();
|
|
43
|
+
it("should return all the data that matches the key", async ({ adapter, }) => {
|
|
53
44
|
await adapter.save(["AAAAA", "sync-state", "xxxxx"], PAYLOAD_A());
|
|
54
45
|
await adapter.save(["AAAAA", "snapshot", "yyyyy"], PAYLOAD_B());
|
|
55
46
|
await adapter.save(["AAAAA", "sync-state", "zzzzz"], PAYLOAD_C());
|
|
@@ -62,10 +53,8 @@ export function runStorageAdapterTests(_setup, title) {
|
|
|
62
53
|
{ key: ["AAAAA", "sync-state", "xxxxx"], data: PAYLOAD_A() },
|
|
63
54
|
{ key: ["AAAAA", "sync-state", "zzzzz"], data: PAYLOAD_C() },
|
|
64
55
|
]));
|
|
65
|
-
teardown();
|
|
66
56
|
});
|
|
67
|
-
it("should only load values that match they key", async () => {
|
|
68
|
-
const { adapter, teardown } = await setup();
|
|
57
|
+
it("should only load values that match they key", async ({ adapter }) => {
|
|
69
58
|
await adapter.save(["AAAAA", "sync-state", "xxxxx"], PAYLOAD_A());
|
|
70
59
|
await adapter.save(["BBBBB", "sync-state", "zzzzz"], PAYLOAD_C());
|
|
71
60
|
const actual = await adapter.loadRange(["AAAAA"]);
|
|
@@ -75,33 +64,27 @@ export function runStorageAdapterTests(_setup, title) {
|
|
|
75
64
|
expect(actual).toStrictEqual(expect.not.arrayContaining([
|
|
76
65
|
{ key: ["BBBBB", "sync-state", "zzzzz"], data: PAYLOAD_C() },
|
|
77
66
|
]));
|
|
78
|
-
teardown();
|
|
79
67
|
});
|
|
80
68
|
});
|
|
81
69
|
describe("save and remove", () => {
|
|
82
|
-
it("after removing, should be empty", async () => {
|
|
83
|
-
const { adapter, teardown } = await setup();
|
|
70
|
+
it("after removing, should be empty", async ({ adapter }) => {
|
|
84
71
|
await adapter.save(["AAAAA", "snapshot", "xxxxx"], PAYLOAD_A());
|
|
85
72
|
await adapter.remove(["AAAAA", "snapshot", "xxxxx"]);
|
|
86
73
|
expect(await adapter.loadRange(["AAAAA"])).toStrictEqual([]);
|
|
87
74
|
expect(await adapter.load(["AAAAA", "snapshot", "xxxxx"])).toBeUndefined();
|
|
88
|
-
teardown();
|
|
89
75
|
});
|
|
90
76
|
});
|
|
91
77
|
describe("save and save", () => {
|
|
92
|
-
it("should overwrite data saved with the same key", async () => {
|
|
93
|
-
const { adapter, teardown } = await setup();
|
|
78
|
+
it("should overwrite data saved with the same key", async ({ adapter, }) => {
|
|
94
79
|
await adapter.save(["AAAAA", "sync-state", "xxxxx"], PAYLOAD_A());
|
|
95
80
|
await adapter.save(["AAAAA", "sync-state", "xxxxx"], PAYLOAD_B());
|
|
96
81
|
expect(await adapter.loadRange(["AAAAA", "sync-state"])).toStrictEqual([
|
|
97
82
|
{ key: ["AAAAA", "sync-state", "xxxxx"], data: PAYLOAD_B() },
|
|
98
83
|
]);
|
|
99
|
-
teardown();
|
|
100
84
|
});
|
|
101
85
|
});
|
|
102
86
|
describe("removeRange", () => {
|
|
103
|
-
it("should remove a range of records", async () => {
|
|
104
|
-
const { adapter, teardown } = await setup();
|
|
87
|
+
it("should remove a range of records", async ({ adapter }) => {
|
|
105
88
|
await adapter.save(["AAAAA", "sync-state", "xxxxx"], PAYLOAD_A());
|
|
106
89
|
await adapter.save(["AAAAA", "snapshot", "yyyyy"], PAYLOAD_B());
|
|
107
90
|
await adapter.save(["AAAAA", "sync-state", "zzzzz"], PAYLOAD_C());
|
|
@@ -109,10 +92,8 @@ export function runStorageAdapterTests(_setup, title) {
|
|
|
109
92
|
expect(await adapter.loadRange(["AAAAA"])).toStrictEqual([
|
|
110
93
|
{ key: ["AAAAA", "snapshot", "yyyyy"], data: PAYLOAD_B() },
|
|
111
94
|
]);
|
|
112
|
-
teardown();
|
|
113
95
|
});
|
|
114
|
-
it("should not remove records that don't match", async () => {
|
|
115
|
-
const { adapter, teardown } = await setup();
|
|
96
|
+
it("should not remove records that don't match", async ({ adapter }) => {
|
|
116
97
|
await adapter.save(["AAAAA", "sync-state", "xxxxx"], PAYLOAD_A());
|
|
117
98
|
await adapter.save(["BBBBB", "sync-state", "zzzzz"], PAYLOAD_B());
|
|
118
99
|
await adapter.removeRange(["AAAAA"]);
|
|
@@ -120,7 +101,6 @@ export function runStorageAdapterTests(_setup, title) {
|
|
|
120
101
|
expect(actual).toStrictEqual([
|
|
121
102
|
{ key: ["BBBBB", "sync-state", "zzzzz"], data: PAYLOAD_B() },
|
|
122
103
|
]);
|
|
123
|
-
teardown();
|
|
124
104
|
});
|
|
125
105
|
});
|
|
126
106
|
});
|
package/dist/index.d.ts
CHANGED
|
@@ -33,6 +33,8 @@ export type { NetworkAdapterInterface } from "./network/NetworkAdapterInterface.
|
|
|
33
33
|
export { isRepoMessage } from "./network/messages.js";
|
|
34
34
|
export { StorageAdapter } from "./storage/StorageAdapter.js";
|
|
35
35
|
export type { StorageAdapterInterface } from "./storage/StorageAdapterInterface.js";
|
|
36
|
+
export type { Index, Progress } from "./ferigan.js";
|
|
37
|
+
export { CollectionHandle } from "./CollectionHandle.js";
|
|
36
38
|
/** @hidden **/
|
|
37
39
|
export * as cbor from "./helpers/cbor.js";
|
|
38
40
|
export type { DocHandleChangePayload, DocHandleDeletePayload, DocHandleEncodedChangePayload, DocHandleEphemeralMessagePayload, DocHandleRemoteHeadsPayload, DocHandleEvents, DocHandleOptions, DocHandleOutboundEphemeralMessagePayload, HandleState, } from "./DocHandle.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAA;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAA;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAA;AACnF,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD,eAAe;AACf,OAAO,KAAK,IAAI,MAAM,mBAAmB,CAAA;AAIzC,YAAY,EACV,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,gCAAgC,EAChC,2BAA2B,EAC3B,eAAe,EACf,gBAAgB,EAChB,wCAAwC,EACxC,WAAW,GACZ,MAAM,gBAAgB,CAAA;AAEvB,YAAY,EACV,qBAAqB,EACrB,eAAe,EACf,UAAU,EACV,UAAU,EACV,WAAW,GACZ,MAAM,WAAW,CAAA;AAElB,YAAY,EACV,oBAAoB,EACpB,WAAW,EACX,oBAAoB,EACpB,uBAAuB,EACvB,YAAY,GACb,MAAM,sCAAsC,CAAA;AAE7C,YAAY,EACV,0BAA0B,EAC1B,gBAAgB,EAChB,OAAO,EACP,WAAW,EACX,cAAc,EACd,WAAW,GACZ,MAAM,uBAAuB,CAAA;AAE9B,YAAY,EACV,KAAK,EACL,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,GACV,MAAM,oBAAoB,CAAA;AAE3B,cAAc,YAAY,CAAA;AAG1B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAGnE,YAAY,EACV,GAAG,EACH,KAAK,EACL,KAAK,EACL,aAAa,EACb,IAAI,EACJ,OAAO,EACP,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,SAAS,EACT,SAAS,EACT,MAAM,GACP,MAAM,gCAAgC,CAAA;AAIvC,OAAO,EACL,UAAU,EACV,aAAa,EACb,YAAY,EACZ,IAAI,EACJ,YAAY,GACb,MAAM,gCAAgC,CAAA;AAKvC,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,MAAM,EACN,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,MAAM,GACP,MAAM,gCAAgC,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -31,6 +31,7 @@ export { Repo } from "./Repo.js";
|
|
|
31
31
|
export { NetworkAdapter } from "./network/NetworkAdapter.js";
|
|
32
32
|
export { isRepoMessage } from "./network/messages.js";
|
|
33
33
|
export { StorageAdapter } from "./storage/StorageAdapter.js";
|
|
34
|
+
export { CollectionHandle } from "./CollectionHandle.js";
|
|
34
35
|
/** @hidden **/
|
|
35
36
|
export * as cbor from "./helpers/cbor.js";
|
|
36
37
|
export * from "./types.js";
|
|
@@ -8,6 +8,7 @@ export declare class NetworkSubsystem extends EventEmitter<NetworkSubsystemEvent
|
|
|
8
8
|
private peerMetadata;
|
|
9
9
|
adapters: NetworkAdapterInterface[];
|
|
10
10
|
constructor(adapters: NetworkAdapterInterface[], peerId: PeerId, peerMetadata: Promise<PeerMetadata>);
|
|
11
|
+
get peers(): PeerId[];
|
|
11
12
|
disconnect(): void;
|
|
12
13
|
reconnect(): void;
|
|
13
14
|
addNetworkAdapter(networkAdapter: NetworkAdapterInterface): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkSubsystem.d.ts","sourceRoot":"","sources":["../../src/network/NetworkSubsystem.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAa,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EACvB,YAAY,EACb,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAEL,eAAe,EACf,WAAW,EAGZ,MAAM,eAAe,CAAA;AAOtB,qBAAa,gBAAiB,SAAQ,YAAY,CAAC,sBAAsB,CAAC;;IAW/D,MAAM,EAAE,MAAM;IACrB,OAAO,CAAC,YAAY;IALtB,QAAQ,EAAE,uBAAuB,EAAE,CAAK;gBAGtC,QAAQ,EAAE,uBAAuB,EAAE,EAC5B,MAAM,EAAE,MAAM,EACb,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC;IAO7C,UAAU;IAIV,SAAS;IAIT,iBAAiB,CAAC,cAAc,EAAE,uBAAuB;IAqEzD,oBAAoB,CAAC,cAAc,EAAE,uBAAuB;IAK5D,IAAI,CAAC,OAAO,EAAE,eAAe;IAsC7B,OAAO,gBAEN;IAED,SAAS,wBAER;CACF;AAID,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAA;IACpC,mBAAmB,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAA;IAC/D,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAA;CACxC;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,YAAY,CAAA;CAC3B"}
|
|
1
|
+
{"version":3,"file":"NetworkSubsystem.d.ts","sourceRoot":"","sources":["../../src/network/NetworkSubsystem.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAa,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EACvB,YAAY,EACb,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAEL,eAAe,EACf,WAAW,EAGZ,MAAM,eAAe,CAAA;AAOtB,qBAAa,gBAAiB,SAAQ,YAAY,CAAC,sBAAsB,CAAC;;IAW/D,MAAM,EAAE,MAAM;IACrB,OAAO,CAAC,YAAY;IALtB,QAAQ,EAAE,uBAAuB,EAAE,CAAK;gBAGtC,QAAQ,EAAE,uBAAuB,EAAE,EAC5B,MAAM,EAAE,MAAM,EACb,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC;IAO7C,IAAI,KAAK,IAAI,MAAM,EAAE,CAEpB;IAED,UAAU;IAIV,SAAS;IAIT,iBAAiB,CAAC,cAAc,EAAE,uBAAuB;IAqEzD,oBAAoB,CAAC,cAAc,EAAE,uBAAuB;IAK5D,IAAI,CAAC,OAAO,EAAE,eAAe;IAsC7B,OAAO,gBAEN;IAED,SAAS,wBAER;CACF;AAID,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAA;IACpC,mBAAmB,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAA;IAC/D,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAA;CACxC;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,YAAY,CAAA;CAC3B"}
|
|
@@ -18,6 +18,9 @@ export class NetworkSubsystem extends EventEmitter {
|
|
|
18
18
|
this.#log = debug(`automerge-repo:network:${this.peerId}`);
|
|
19
19
|
adapters.forEach(a => this.addNetworkAdapter(a));
|
|
20
20
|
}
|
|
21
|
+
get peers() {
|
|
22
|
+
return Array.from(Object.keys(this.#adaptersByPeer));
|
|
23
|
+
}
|
|
21
24
|
disconnect() {
|
|
22
25
|
this.adapters.forEach(a => a.disconnect());
|
|
23
26
|
}
|
|
@@ -103,7 +103,13 @@ export type RemoteHeadsChanged = {
|
|
|
103
103
|
};
|
|
104
104
|
};
|
|
105
105
|
/** These are message types that a {@link NetworkAdapter} surfaces to a {@link Repo}. */
|
|
106
|
-
export type RepoMessage = SyncMessage | EphemeralMessage | RequestMessage | DocumentUnavailableMessage | RemoteSubscriptionControlMessage | RemoteHeadsChanged;
|
|
106
|
+
export type RepoMessage = SyncMessage | EphemeralMessage | RequestMessage | DocumentUnavailableMessage | RemoteSubscriptionControlMessage | RemoteHeadsChanged | BeelayMessage;
|
|
107
|
+
export type BeelayMessage = {
|
|
108
|
+
type: "beelay";
|
|
109
|
+
senderId: PeerId;
|
|
110
|
+
targetId: PeerId;
|
|
111
|
+
message: Uint8Array;
|
|
112
|
+
};
|
|
107
113
|
/** These are message types that are handled by the {@link CollectionSynchronizer}.*/
|
|
108
114
|
export type DocMessage = SyncMessage | EphemeralMessage | RequestMessage | DocumentUnavailableMessage;
|
|
109
115
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/network/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE3D,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,CAAA;IAEZ,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAA;IAEhB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAA;IAEhB,IAAI,CAAC,EAAE,UAAU,CAAA;IAEjB,UAAU,CAAC,EAAE,UAAU,CAAA;CACxB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAEhB,iCAAiC;IACjC,IAAI,EAAE,UAAU,CAAA;IAEhB,0DAA0D;IAC1D,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AAED;;;;;;;;;;KAUK;AACL,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAEhB,sFAAsF;IACtF,KAAK,EAAE,MAAM,CAAA;IAEb,+GAA+G;IAC/G,SAAS,EAAE,SAAS,CAAA;IAEpB,gDAAgD;IAChD,UAAU,EAAE,UAAU,CAAA;IAEtB,sCAAsC;IACtC,IAAI,EAAE,UAAU,CAAA;CACjB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,iBAAiB,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAEhB,yDAAyD;IACzD,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AAED;;;;;;KAMK;AACL,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,SAAS,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAEhB,iCAAiC;IACjC,IAAI,EAAE,UAAU,CAAA;IAEhB,0DAA0D;IAC1D,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,gCAAgC,GAAG;IAC7C,IAAI,EAAE,4BAA4B,CAAA;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAEhB,iDAAiD;IACjD,GAAG,CAAC,EAAE,SAAS,EAAE,CAAA;IAEjB,sDAAsD;IACtD,MAAM,CAAC,EAAE,SAAS,EAAE,CAAA;CACrB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,sBAAsB,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAEhB,uDAAuD;IACvD,UAAU,EAAE,UAAU,CAAA;IAEtB,+BAA+B;IAC/B,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,SAAS,GAAG;YAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CACvE,CAAA;AAED,wFAAwF;AACxF,MAAM,MAAM,WAAW,GACnB,WAAW,GACX,gBAAgB,GAChB,cAAc,GACd,0BAA0B,GAC1B,gCAAgC,GAChC,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/network/messages.ts"],"names":[],"mappings":"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"}
|
package/dist/network/messages.js
CHANGED
|
@@ -4,7 +4,8 @@ export const isRepoMessage = (message) => isSyncMessage(message) ||
|
|
|
4
4
|
isRequestMessage(message) ||
|
|
5
5
|
isDocumentUnavailableMessage(message) ||
|
|
6
6
|
isRemoteSubscriptionControlMessage(message) ||
|
|
7
|
-
isRemoteHeadsChanged(message)
|
|
7
|
+
isRemoteHeadsChanged(message) ||
|
|
8
|
+
true;
|
|
8
9
|
// prettier-ignore
|
|
9
10
|
export const isDocumentUnavailableMessage = (msg) => msg.type === "doc-unavailable";
|
|
10
11
|
export const isRequestMessage = (msg) => msg.type === "request";
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import * as A from "@automerge/automerge/next"
|
|
2
|
+
import { EventEmitter } from "eventemitter3"
|
|
3
|
+
import { StateValue } from "xstate"
|
|
4
|
+
import type { DocumentId, PeerId, AutomergeUrl } from "./types.js"
|
|
5
|
+
/** DocHandle is a wrapper around a single Automerge document that lets us
|
|
6
|
+
* listen for changes and notify the network and storage of new changes.
|
|
7
|
+
*
|
|
8
|
+
* @remarks
|
|
9
|
+
* A `DocHandle` represents a document which is being managed by a {@link Repo}.
|
|
10
|
+
* To obtain `DocHandle` use {@link Repo.find} or {@link Repo.create}.
|
|
11
|
+
*
|
|
12
|
+
* To modify the underlying document use either {@link DocHandle.change} or
|
|
13
|
+
* {@link DocHandle.changeAt}. These methods will notify the `Repo` that some
|
|
14
|
+
* change has occured and the `Repo` will save any new changes to the
|
|
15
|
+
* attached {@link StorageAdapter} and send sync messages to connected peers.
|
|
16
|
+
* */
|
|
17
|
+
export declare class DocHandle<T> //
|
|
18
|
+
extends EventEmitter<DocHandleEvents<T>>
|
|
19
|
+
{
|
|
20
|
+
#private
|
|
21
|
+
documentId: DocumentId
|
|
22
|
+
/** The URL of this document
|
|
23
|
+
*
|
|
24
|
+
* @remarks
|
|
25
|
+
* This can be used to request the document from an instance of {@link Repo}
|
|
26
|
+
*/
|
|
27
|
+
get url(): AutomergeUrl
|
|
28
|
+
/** @hidden */
|
|
29
|
+
constructor(
|
|
30
|
+
documentId: DocumentId,
|
|
31
|
+
{ isNew, timeoutDelay }?: DocHandleOptions
|
|
32
|
+
)
|
|
33
|
+
/**
|
|
34
|
+
* Checks if the document is ready for accessing or changes.
|
|
35
|
+
* Note that for documents already stored locally this occurs before synchronization
|
|
36
|
+
* with any peers. We do not currently have an equivalent `whenSynced()`.
|
|
37
|
+
*/
|
|
38
|
+
isReady: () => boolean
|
|
39
|
+
/**
|
|
40
|
+
* Checks if this document has been marked as deleted.
|
|
41
|
+
* Deleted documents are removed from local storage and the sync process.
|
|
42
|
+
* It's not currently possible at runtime to undelete a document.
|
|
43
|
+
* @returns true if the document has been marked as deleted
|
|
44
|
+
*/
|
|
45
|
+
isDeleted: () => boolean
|
|
46
|
+
isUnavailable: () => boolean
|
|
47
|
+
inState: (states: HandleState[]) => boolean
|
|
48
|
+
/** @hidden */
|
|
49
|
+
get state(): StateValue
|
|
50
|
+
/**
|
|
51
|
+
* Use this to block until the document handle has finished loading.
|
|
52
|
+
* The async equivalent to checking `inState()`.
|
|
53
|
+
* @param awaitStates = [READY]
|
|
54
|
+
* @returns
|
|
55
|
+
*/
|
|
56
|
+
whenReady(awaitStates?: HandleState[]): Promise<void>
|
|
57
|
+
/**
|
|
58
|
+
* Returns the current state of the Automerge document this handle manages.
|
|
59
|
+
* Note that this waits for the handle to be ready if necessary, and currently, if
|
|
60
|
+
* loading (or synchronization) fails, will never resolve.
|
|
61
|
+
*
|
|
62
|
+
* @param {awaitStates=[READY]} optional states to wait for, such as "LOADING". mostly for internal use.
|
|
63
|
+
*/
|
|
64
|
+
doc(awaitStates?: HandleState[]): Promise<A.Doc<T> | undefined>
|
|
65
|
+
/**
|
|
66
|
+
* Returns the current state of the Automerge document this handle manages, or undefined.
|
|
67
|
+
* Useful in a synchronous context. Consider using `await handle.doc()` instead, check `isReady()`,
|
|
68
|
+
* or use `whenReady()` if you want to make sure loading is complete first.
|
|
69
|
+
*
|
|
70
|
+
* Do not confuse this with the SyncState of the document, which describes the state of the synchronization process.
|
|
71
|
+
*
|
|
72
|
+
* Note that `undefined` is not a valid Automerge document so the return from this function is unambigous.
|
|
73
|
+
* @returns the current document, or undefined if the document is not ready
|
|
74
|
+
*/
|
|
75
|
+
docSync(): A.Doc<T> | undefined
|
|
76
|
+
/** `update` is called by the repo when we receive changes from the network
|
|
77
|
+
* @hidden
|
|
78
|
+
* */
|
|
79
|
+
update(callback: (doc: A.Doc<T>) => A.Doc<T>): void
|
|
80
|
+
/** `change` is called by the repo when the document is changed locally */
|
|
81
|
+
change(callback: A.ChangeFn<T>, options?: A.ChangeOptions<T>): void
|
|
82
|
+
/** Make a change as if the document were at `heads`
|
|
83
|
+
*
|
|
84
|
+
* @returns A set of heads representing the concurrent change that was made.
|
|
85
|
+
*/
|
|
86
|
+
changeAt(
|
|
87
|
+
heads: A.Heads,
|
|
88
|
+
callback: A.ChangeFn<T>,
|
|
89
|
+
options?: A.ChangeOptions<T>
|
|
90
|
+
): string[] | undefined
|
|
91
|
+
unavailable(): void
|
|
92
|
+
/** `request` is called by the repo when the document is not found in storage
|
|
93
|
+
* @hidden
|
|
94
|
+
* */
|
|
95
|
+
request(): void
|
|
96
|
+
/** @hidden */
|
|
97
|
+
awaitNetwork(): void
|
|
98
|
+
/** @hidden */
|
|
99
|
+
networkReady(): void
|
|
100
|
+
/** `delete` is called by the repo when the document is deleted */
|
|
101
|
+
delete(): void
|
|
102
|
+
/** `broadcast` sends an arbitrary ephemeral message out to all reachable peers who would receive sync messages from you
|
|
103
|
+
* it has no guarantee of delivery, and is not persisted to the underlying automerge doc in any way.
|
|
104
|
+
* messages will have a sending PeerId but this is *not* a useful user identifier.
|
|
105
|
+
* a user could have multiple tabs open and would appear as multiple PeerIds.
|
|
106
|
+
* every message source must have a unique PeerId.
|
|
107
|
+
*/
|
|
108
|
+
broadcast(message: any): void
|
|
109
|
+
}
|
|
110
|
+
export interface DocHandleOptions {
|
|
111
|
+
isNew?: boolean
|
|
112
|
+
timeoutDelay?: number
|
|
113
|
+
}
|
|
114
|
+
export interface DocHandleMessagePayload {
|
|
115
|
+
destinationId: PeerId
|
|
116
|
+
documentId: DocumentId
|
|
117
|
+
data: Uint8Array
|
|
118
|
+
}
|
|
119
|
+
export interface DocHandleEncodedChangePayload<T> {
|
|
120
|
+
handle: DocHandle<T>
|
|
121
|
+
doc: A.Doc<T>
|
|
122
|
+
}
|
|
123
|
+
export interface DocHandleDeletePayload<T> {
|
|
124
|
+
handle: DocHandle<T>
|
|
125
|
+
}
|
|
126
|
+
export interface DocHandleChangePayload<T> {
|
|
127
|
+
handle: DocHandle<T>
|
|
128
|
+
doc: A.Doc<T>
|
|
129
|
+
patches: A.Patch[]
|
|
130
|
+
patchInfo: A.PatchInfo<T>
|
|
131
|
+
}
|
|
132
|
+
export interface DocHandleEphemeralMessagePayload {
|
|
133
|
+
handle: DocHandle<any>
|
|
134
|
+
senderId: PeerId
|
|
135
|
+
message: unknown
|
|
136
|
+
}
|
|
137
|
+
export interface DocHandleOutboundEphemeralMessagePayload {
|
|
138
|
+
handle: DocHandle<any>
|
|
139
|
+
data: Uint8Array
|
|
140
|
+
}
|
|
141
|
+
export interface DocHandleEvents<T> {
|
|
142
|
+
"heads-changed": (payload: DocHandleEncodedChangePayload<T>) => void
|
|
143
|
+
change: (payload: DocHandleChangePayload<T>) => void
|
|
144
|
+
delete: (payload: DocHandleDeletePayload<T>) => void
|
|
145
|
+
unavailable: (payload: DocHandleDeletePayload<T>) => void
|
|
146
|
+
"ephemeral-message": (payload: DocHandleEphemeralMessagePayload) => void
|
|
147
|
+
"ephemeral-message-outbound": (
|
|
148
|
+
payload: DocHandleOutboundEphemeralMessagePayload
|
|
149
|
+
) => void
|
|
150
|
+
}
|
|
151
|
+
export declare const HandleState: {
|
|
152
|
+
readonly IDLE: "idle"
|
|
153
|
+
readonly LOADING: "loading"
|
|
154
|
+
readonly AWAITING_NETWORK: "awaitingNetwork"
|
|
155
|
+
readonly REQUESTING: "requesting"
|
|
156
|
+
readonly READY: "ready"
|
|
157
|
+
readonly FAILED: "failed"
|
|
158
|
+
readonly DELETED: "deleted"
|
|
159
|
+
readonly UNAVAILABLE: "unavailable"
|
|
160
|
+
}
|
|
161
|
+
export type HandleState = (typeof HandleState)[keyof typeof HandleState]
|
|
162
|
+
export declare const Event: {
|
|
163
|
+
readonly CREATE: "CREATE"
|
|
164
|
+
readonly FIND: "FIND"
|
|
165
|
+
readonly REQUEST: "REQUEST"
|
|
166
|
+
readonly REQUEST_COMPLETE: "REQUEST_COMPLETE"
|
|
167
|
+
readonly AWAIT_NETWORK: "AWAIT_NETWORK"
|
|
168
|
+
readonly NETWORK_READY: "NETWORK_READY"
|
|
169
|
+
readonly UPDATE: "UPDATE"
|
|
170
|
+
readonly TIMEOUT: "TIMEOUT"
|
|
171
|
+
readonly DELETE: "DELETE"
|
|
172
|
+
readonly MARK_UNAVAILABLE: "MARK_UNAVAILABLE"
|
|
173
|
+
}
|
|
174
|
+
export declare const IDLE: "idle",
|
|
175
|
+
LOADING: "loading",
|
|
176
|
+
AWAITING_NETWORK: "awaitingNetwork",
|
|
177
|
+
REQUESTING: "requesting",
|
|
178
|
+
READY: "ready",
|
|
179
|
+
FAILED: "failed",
|
|
180
|
+
DELETED: "deleted",
|
|
181
|
+
UNAVAILABLE: "unavailable"
|
|
182
|
+
//# sourceMappingURL=DocHandle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocHandle.d.ts","sourceRoot":"","sources":["../../src/DocHandle.ts"],"names":[],"mappings":"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"}
|