@automerge/automerge-repo 1.0.5 → 1.0.7

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.
Files changed (65) hide show
  1. package/.eslintrc +1 -1
  2. package/dist/DocHandle.d.ts +20 -7
  3. package/dist/DocHandle.d.ts.map +1 -1
  4. package/dist/DocHandle.js +27 -7
  5. package/dist/EphemeralData.d.ts +2 -2
  6. package/dist/EphemeralData.d.ts.map +1 -1
  7. package/dist/Repo.d.ts +16 -0
  8. package/dist/Repo.d.ts.map +1 -1
  9. package/dist/Repo.js +38 -10
  10. package/dist/helpers/cbor.d.ts +2 -2
  11. package/dist/helpers/cbor.d.ts.map +1 -1
  12. package/dist/helpers/cbor.js +1 -1
  13. package/dist/helpers/pause.d.ts.map +1 -1
  14. package/dist/helpers/pause.js +3 -1
  15. package/dist/helpers/tests/network-adapter-tests.d.ts.map +1 -1
  16. package/dist/helpers/tests/network-adapter-tests.js +2 -2
  17. package/dist/index.d.ts +11 -9
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +4 -4
  20. package/dist/network/NetworkAdapter.d.ts +3 -3
  21. package/dist/network/NetworkAdapter.d.ts.map +1 -1
  22. package/dist/network/NetworkSubsystem.d.ts +2 -2
  23. package/dist/network/NetworkSubsystem.d.ts.map +1 -1
  24. package/dist/network/NetworkSubsystem.js +30 -18
  25. package/dist/network/messages.d.ts +38 -68
  26. package/dist/network/messages.d.ts.map +1 -1
  27. package/dist/network/messages.js +13 -21
  28. package/dist/storage/StorageSubsystem.js +7 -7
  29. package/dist/synchronizer/CollectionSynchronizer.d.ts +3 -3
  30. package/dist/synchronizer/CollectionSynchronizer.d.ts.map +1 -1
  31. package/dist/synchronizer/CollectionSynchronizer.js +2 -2
  32. package/dist/synchronizer/DocSynchronizer.d.ts +3 -3
  33. package/dist/synchronizer/DocSynchronizer.d.ts.map +1 -1
  34. package/dist/synchronizer/DocSynchronizer.js +22 -29
  35. package/dist/synchronizer/Synchronizer.d.ts +2 -2
  36. package/dist/synchronizer/Synchronizer.d.ts.map +1 -1
  37. package/dist/types.d.ts +5 -1
  38. package/dist/types.d.ts.map +1 -1
  39. package/package.json +5 -13
  40. package/src/DocHandle.ts +38 -14
  41. package/src/EphemeralData.ts +2 -2
  42. package/src/Repo.ts +46 -12
  43. package/src/helpers/cbor.ts +4 -4
  44. package/src/helpers/pause.ts +7 -2
  45. package/src/helpers/tests/network-adapter-tests.ts +3 -3
  46. package/src/helpers/withTimeout.ts +2 -2
  47. package/src/index.ts +36 -29
  48. package/src/network/NetworkAdapter.ts +7 -3
  49. package/src/network/NetworkSubsystem.ts +31 -23
  50. package/src/network/messages.ts +88 -151
  51. package/src/storage/StorageSubsystem.ts +8 -8
  52. package/src/synchronizer/CollectionSynchronizer.ts +6 -15
  53. package/src/synchronizer/DocSynchronizer.ts +34 -48
  54. package/src/synchronizer/Synchronizer.ts +2 -2
  55. package/src/types.ts +8 -3
  56. package/test/CollectionSynchronizer.test.ts +58 -53
  57. package/test/DocHandle.test.ts +35 -36
  58. package/test/DocSynchronizer.test.ts +9 -8
  59. package/test/Network.test.ts +1 -0
  60. package/test/Repo.test.ts +273 -88
  61. package/test/StorageSubsystem.test.ts +6 -9
  62. package/test/tsconfig.json +8 -0
  63. package/test/types.ts +2 -0
  64. package/typedoc.json +3 -3
  65. package/.mocharc.json +0 -5
@@ -1,5 +1,5 @@
1
1
  import assert from "assert"
2
- import { beforeEach } from "mocha"
2
+ import { describe, it, beforeEach } from "vitest"
3
3
  import { PeerId, Repo } from "../src/index.js"
4
4
  import { CollectionSynchronizer } from "../src/synchronizer/CollectionSynchronizer.js"
5
5
 
@@ -18,56 +18,61 @@ describe("CollectionSynchronizer", () => {
18
18
  assert(synchronizer !== null)
19
19
  })
20
20
 
21
- it("starts synchronizing a document to peers when added", done => {
22
- const handle = repo.create()
23
- synchronizer.addPeer("peer1" as PeerId)
24
-
25
- synchronizer.once("message", event => {
26
- assert(event.targetId === "peer1")
27
- assert(event.documentId === handle.documentId)
28
- done()
29
- })
30
-
31
- synchronizer.addDocument(handle.documentId)
32
- })
33
-
34
- it("starts synchronizing existing documents when a peer is added", done => {
35
- const handle = repo.create()
36
- synchronizer.addDocument(handle.documentId)
37
- synchronizer.once("message", event => {
38
- assert(event.targetId === "peer1")
39
- assert(event.documentId === handle.documentId)
40
- done()
41
- })
42
- synchronizer.addPeer("peer1" as PeerId)
43
- })
44
-
45
- it("should not synchronize to a peer which is excluded from the share policy", done => {
46
- const handle = repo.create()
47
-
48
- repo.sharePolicy = async (peerId: PeerId) => peerId !== "peer1"
49
-
50
- synchronizer.addDocument(handle.documentId)
51
- synchronizer.once("message", () => {
52
- done(new Error("Should not have sent a message"))
53
- })
54
- synchronizer.addPeer("peer1" as PeerId)
55
-
56
- setTimeout(done)
57
- })
58
-
59
- it("should not synchronize a document which is excluded from the share policy", done => {
60
- const handle = repo.create()
61
- repo.sharePolicy = async (_, documentId) => documentId !== handle.documentId
62
-
63
- synchronizer.addPeer("peer2" as PeerId)
64
-
65
- synchronizer.once("message", () => {
66
- done(new Error("Should not have sent a message"))
67
- })
68
-
69
- synchronizer.addDocument(handle.documentId)
70
-
71
- setTimeout(done)
72
- })
21
+ it("starts synchronizing a document to peers when added", () =>
22
+ new Promise<void>(done => {
23
+ const handle = repo.create()
24
+ synchronizer.addPeer("peer1" as PeerId)
25
+
26
+ synchronizer.once("message", event => {
27
+ assert(event.targetId === "peer1")
28
+ assert(event.documentId === handle.documentId)
29
+ done()
30
+ })
31
+
32
+ synchronizer.addDocument(handle.documentId)
33
+ }))
34
+
35
+ it("starts synchronizing existing documents when a peer is added", () =>
36
+ new Promise<void>(done => {
37
+ const handle = repo.create()
38
+ synchronizer.addDocument(handle.documentId)
39
+ synchronizer.once("message", event => {
40
+ assert(event.targetId === "peer1")
41
+ assert(event.documentId === handle.documentId)
42
+ done()
43
+ })
44
+ synchronizer.addPeer("peer1" as PeerId)
45
+ }))
46
+
47
+ it("should not synchronize to a peer which is excluded from the share policy", () =>
48
+ new Promise<void>((done, reject) => {
49
+ const handle = repo.create()
50
+
51
+ repo.sharePolicy = async (peerId: PeerId) => peerId !== "peer1"
52
+
53
+ synchronizer.addDocument(handle.documentId)
54
+ synchronizer.once("message", () => {
55
+ reject(new Error("Should not have sent a message"))
56
+ })
57
+ synchronizer.addPeer("peer1" as PeerId)
58
+
59
+ setTimeout(done)
60
+ }))
61
+
62
+ it("should not synchronize a document which is excluded from the share policy", () =>
63
+ new Promise<void>((done, reject) => {
64
+ const handle = repo.create()
65
+ repo.sharePolicy = async (_, documentId) =>
66
+ documentId !== handle.documentId
67
+
68
+ synchronizer.addPeer("peer2" as PeerId)
69
+
70
+ synchronizer.once("message", () => {
71
+ reject(new Error("Should not have sent a message"))
72
+ })
73
+
74
+ synchronizer.addDocument(handle.documentId)
75
+
76
+ setTimeout(done)
77
+ }))
73
78
  })
@@ -1,16 +1,15 @@
1
1
  import * as A from "@automerge/automerge/next"
2
+ import { decode } from "cbor-x"
2
3
  import assert from "assert"
3
- import { it } from "mocha"
4
- import { DocHandle, DocHandleChangePayload } from "../src/index.js"
5
- import { pause } from "../src/helpers/pause.js"
6
- import { TestDoc } from "./types.js"
4
+ import { describe, it } from "vitest"
7
5
  import { generateAutomergeUrl, parseAutomergeUrl } from "../src/DocUrl.js"
8
6
  import { eventPromise } from "../src/helpers/eventPromise.js"
9
- import { decode } from "cbor-x"
7
+ import { pause } from "../src/helpers/pause.js"
8
+ import { DocHandle, DocHandleChangePayload } from "../src/index.js"
9
+ import { TestDoc } from "./types.js"
10
10
 
11
11
  describe("DocHandle", () => {
12
12
  const TEST_ID = parseAutomergeUrl(generateAutomergeUrl()).documentId
13
- const BOGUS_ID = parseAutomergeUrl(generateAutomergeUrl()).documentId
14
13
 
15
14
  const docFromMockStorage = (doc: A.Doc<{ foo: string }>) => {
16
15
  return A.change<{ foo: string }>(doc, d => (d.foo = "bar"))
@@ -90,7 +89,7 @@ describe("DocHandle", () => {
90
89
 
91
90
  assert.equal(handle.docSync(), undefined)
92
91
  assert.equal(handle.isReady(), false)
93
- assert.throws(() => handle.change(_ => { }))
92
+ assert.throws(() => handle.change(_ => {}))
94
93
  })
95
94
 
96
95
  it("should become ready if the document is updated by the network", async () => {
@@ -128,16 +127,17 @@ describe("DocHandle", () => {
128
127
  assert.deepStrictEqual(changePayload.handle, handle)
129
128
  })
130
129
 
131
- it("should not emit a change message if no change happens via update", done => {
132
- const handle = new DocHandle<TestDoc>(TEST_ID, { isNew: true })
133
- handle.once("change", () => {
134
- done(new Error("shouldn't have changed"))
135
- })
136
- handle.update(d => {
137
- setTimeout(done, 0)
138
- return d
139
- })
140
- })
130
+ it("should not emit a change message if no change happens via update", () =>
131
+ new Promise<void>((done, reject) => {
132
+ const handle = new DocHandle<TestDoc>(TEST_ID, { isNew: true })
133
+ handle.once("change", () => {
134
+ reject(new Error("shouldn't have changed"))
135
+ })
136
+ handle.update(d => {
137
+ setTimeout(done, 0)
138
+ return d
139
+ })
140
+ }))
141
141
 
142
142
  it("should update the internal doc prior to emitting the change message", async () => {
143
143
  const handle = new DocHandle<TestDoc>(TEST_ID, { isNew: true })
@@ -200,28 +200,27 @@ describe("DocHandle", () => {
200
200
  assert.equal(doc?.foo, "bar")
201
201
  })
202
202
 
203
- it("should not emit a patch message if no change happens", done => {
204
- const handle = new DocHandle<TestDoc>(TEST_ID, { isNew: true })
205
- handle.on("change", () => {
206
- done(new Error("shouldn't have changed"))
207
- })
208
- handle.change(_doc => {
209
- // do nothing
210
- setTimeout(done, 0)
211
- })
212
- })
203
+ it("should not emit a patch message if no change happens", () =>
204
+ new Promise<void>((done, reject) => {
205
+ const handle = new DocHandle<TestDoc>(TEST_ID, { isNew: true })
206
+ handle.on("change", () => {
207
+ reject(new Error("shouldn't have changed"))
208
+ })
209
+ handle.change(_doc => {
210
+ // do nothing
211
+ setTimeout(done, 0)
212
+ })
213
+ }))
213
214
 
214
- it("should time out if the document is not loaded", async () => {
215
+ it("should be undefined if loading the document times out", async () => {
215
216
  // set docHandle time out after 5 ms
216
217
  const handle = new DocHandle<TestDoc>(TEST_ID, { timeoutDelay: 5 })
217
218
 
218
- // we're not going to load
219
- await pause(10)
219
+ const doc = await handle.doc()
220
220
 
221
- assert.equal(handle.state, "failed")
221
+ assert.equal(doc, undefined)
222
222
 
223
- // so it should time out
224
- return assert.rejects(handle.doc, "DocHandle timed out")
223
+ assert.equal(handle.state, "failed")
225
224
  })
226
225
 
227
226
  it("should not time out if the document is loaded in time", async () => {
@@ -236,7 +235,7 @@ describe("DocHandle", () => {
236
235
  assert.equal(doc?.foo, "bar")
237
236
  })
238
237
 
239
- it("should time out if the document is not updated from the network", async () => {
238
+ it("should be undefined if loading from the network times out", async () => {
240
239
  // set docHandle time out after 5 ms
241
240
  const handle = new DocHandle<TestDoc>(TEST_ID, { timeoutDelay: 5 })
242
241
 
@@ -246,8 +245,8 @@ describe("DocHandle", () => {
246
245
  // there's no update
247
246
  await pause(10)
248
247
 
249
- // so it should time out
250
- return assert.rejects(handle.doc, "DocHandle timed out")
248
+ const doc = await handle.doc()
249
+ assert.equal(doc, undefined)
251
250
  })
252
251
 
253
252
  it("should not time out if the document is updated in time", async () => {
@@ -1,18 +1,19 @@
1
1
  import assert from "assert"
2
- import { BinaryDocumentId, PeerId } from "../src/types.js"
2
+ import { describe, it } from "vitest"
3
3
  import { DocHandle } from "../src/DocHandle.js"
4
- import { DocSynchronizer } from "../src/synchronizer/DocSynchronizer.js"
4
+ import { generateAutomergeUrl, parseAutomergeUrl } from "../src/DocUrl.js"
5
+ import { generateAutomergeUrl, parseAutomergeUrl } from "../src/DocUrl.js"
5
6
  import { eventPromise } from "../src/helpers/eventPromise.js"
6
- import { TestDoc } from "./types.js"
7
- import { parseAutomergeUrl, generateAutomergeUrl } from "../src/DocUrl.js"
8
- import { SyncMessage } from "../src/index.js"
9
7
  import {
10
8
  DocumentUnavailableMessage,
11
- DocumentUnavailableMessageContents,
12
9
  MessageContents,
13
- RequestMessageContents,
14
- SyncMessageContents,
15
10
  } from "../src/network/messages.js"
11
+ import { DocSynchronizer } from "../src/synchronizer/DocSynchronizer.js"
12
+ import { PeerId } from "../src/types.js"
13
+ import { TestDoc } from "./types.js"
14
+ import { DocSynchronizer } from "../src/synchronizer/DocSynchronizer.js"
15
+ import { PeerId } from "../src/types.js"
16
+ import { TestDoc } from "./types.js"
16
17
 
17
18
  const alice = "alice" as PeerId
18
19
  const bob = "bob" as PeerId
@@ -1,4 +1,5 @@
1
1
  import assert from "assert"
2
+ import { describe, it } from "vitest"
2
3
  import { NetworkSubsystem } from "../src/network/NetworkSubsystem.js"
3
4
 
4
5
  // Note: The sync tests in `Repo.test.ts` exercise the network subsystem, and the suite in