@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.
Files changed (203) hide show
  1. package/README.md +8 -8
  2. package/dist/AutomergeUrl.d.ts +17 -5
  3. package/dist/AutomergeUrl.d.ts.map +1 -1
  4. package/dist/AutomergeUrl.js +71 -24
  5. package/dist/DocHandle.d.ts +33 -41
  6. package/dist/DocHandle.d.ts.map +1 -1
  7. package/dist/DocHandle.js +105 -66
  8. package/dist/FindProgress.d.ts +30 -0
  9. package/dist/FindProgress.d.ts.map +1 -0
  10. package/dist/FindProgress.js +1 -0
  11. package/dist/RemoteHeadsSubscriptions.d.ts +4 -5
  12. package/dist/RemoteHeadsSubscriptions.d.ts.map +1 -1
  13. package/dist/RemoteHeadsSubscriptions.js +4 -1
  14. package/dist/Repo.d.ts +24 -5
  15. package/dist/Repo.d.ts.map +1 -1
  16. package/dist/Repo.js +355 -169
  17. package/dist/helpers/abortable.d.ts +36 -0
  18. package/dist/helpers/abortable.d.ts.map +1 -0
  19. package/dist/helpers/abortable.js +47 -0
  20. package/dist/helpers/arraysAreEqual.d.ts.map +1 -1
  21. package/dist/helpers/bufferFromHex.d.ts +3 -0
  22. package/dist/helpers/bufferFromHex.d.ts.map +1 -0
  23. package/dist/helpers/bufferFromHex.js +13 -0
  24. package/dist/helpers/debounce.d.ts.map +1 -1
  25. package/dist/helpers/eventPromise.d.ts.map +1 -1
  26. package/dist/helpers/headsAreSame.d.ts +2 -2
  27. package/dist/helpers/headsAreSame.d.ts.map +1 -1
  28. package/dist/helpers/mergeArrays.d.ts +1 -1
  29. package/dist/helpers/mergeArrays.d.ts.map +1 -1
  30. package/dist/helpers/pause.d.ts.map +1 -1
  31. package/dist/helpers/tests/network-adapter-tests.d.ts.map +1 -1
  32. package/dist/helpers/tests/network-adapter-tests.js +13 -13
  33. package/dist/helpers/tests/storage-adapter-tests.d.ts.map +1 -1
  34. package/dist/helpers/tests/storage-adapter-tests.js +6 -9
  35. package/dist/helpers/throttle.d.ts.map +1 -1
  36. package/dist/helpers/withTimeout.d.ts.map +1 -1
  37. package/dist/index.d.ts +35 -7
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +37 -6
  40. package/dist/network/NetworkSubsystem.d.ts +0 -1
  41. package/dist/network/NetworkSubsystem.d.ts.map +1 -1
  42. package/dist/network/NetworkSubsystem.js +0 -3
  43. package/dist/network/messages.d.ts +1 -7
  44. package/dist/network/messages.d.ts.map +1 -1
  45. package/dist/network/messages.js +1 -2
  46. package/dist/storage/StorageAdapter.d.ts +0 -9
  47. package/dist/storage/StorageAdapter.d.ts.map +1 -1
  48. package/dist/storage/StorageAdapter.js +0 -33
  49. package/dist/storage/StorageSubsystem.d.ts +6 -2
  50. package/dist/storage/StorageSubsystem.d.ts.map +1 -1
  51. package/dist/storage/StorageSubsystem.js +131 -37
  52. package/dist/storage/keyHash.d.ts +1 -1
  53. package/dist/storage/keyHash.d.ts.map +1 -1
  54. package/dist/synchronizer/CollectionSynchronizer.d.ts +3 -4
  55. package/dist/synchronizer/CollectionSynchronizer.d.ts.map +1 -1
  56. package/dist/synchronizer/CollectionSynchronizer.js +32 -26
  57. package/dist/synchronizer/DocSynchronizer.d.ts +8 -8
  58. package/dist/synchronizer/DocSynchronizer.d.ts.map +1 -1
  59. package/dist/synchronizer/DocSynchronizer.js +205 -79
  60. package/dist/types.d.ts +4 -1
  61. package/dist/types.d.ts.map +1 -1
  62. package/fuzz/fuzz.ts +3 -3
  63. package/package.json +4 -5
  64. package/src/AutomergeUrl.ts +101 -26
  65. package/src/DocHandle.ts +158 -77
  66. package/src/FindProgress.ts +48 -0
  67. package/src/RemoteHeadsSubscriptions.ts +11 -9
  68. package/src/Repo.ts +465 -180
  69. package/src/helpers/abortable.ts +62 -0
  70. package/src/helpers/bufferFromHex.ts +14 -0
  71. package/src/helpers/headsAreSame.ts +2 -2
  72. package/src/helpers/tests/network-adapter-tests.ts +14 -13
  73. package/src/helpers/tests/storage-adapter-tests.ts +13 -24
  74. package/src/index.ts +57 -38
  75. package/src/network/NetworkSubsystem.ts +0 -4
  76. package/src/network/messages.ts +2 -11
  77. package/src/storage/StorageAdapter.ts +0 -42
  78. package/src/storage/StorageSubsystem.ts +155 -45
  79. package/src/storage/keyHash.ts +1 -1
  80. package/src/synchronizer/CollectionSynchronizer.ts +42 -29
  81. package/src/synchronizer/DocSynchronizer.ts +263 -89
  82. package/src/types.ts +4 -1
  83. package/test/AutomergeUrl.test.ts +130 -0
  84. package/test/CollectionSynchronizer.test.ts +6 -8
  85. package/test/DocHandle.test.ts +161 -77
  86. package/test/DocSynchronizer.test.ts +11 -9
  87. package/test/RemoteHeadsSubscriptions.test.ts +1 -1
  88. package/test/Repo.test.ts +406 -341
  89. package/test/StorageSubsystem.test.ts +95 -20
  90. package/test/remoteHeads.test.ts +28 -13
  91. package/dist/CollectionHandle.d.ts +0 -14
  92. package/dist/CollectionHandle.d.ts.map +0 -1
  93. package/dist/CollectionHandle.js +0 -37
  94. package/dist/DocUrl.d.ts +0 -47
  95. package/dist/DocUrl.d.ts.map +0 -1
  96. package/dist/DocUrl.js +0 -72
  97. package/dist/EphemeralData.d.ts +0 -20
  98. package/dist/EphemeralData.d.ts.map +0 -1
  99. package/dist/EphemeralData.js +0 -1
  100. package/dist/ferigan.d.ts +0 -51
  101. package/dist/ferigan.d.ts.map +0 -1
  102. package/dist/ferigan.js +0 -98
  103. package/dist/src/DocHandle.d.ts +0 -182
  104. package/dist/src/DocHandle.d.ts.map +0 -1
  105. package/dist/src/DocHandle.js +0 -405
  106. package/dist/src/DocUrl.d.ts +0 -49
  107. package/dist/src/DocUrl.d.ts.map +0 -1
  108. package/dist/src/DocUrl.js +0 -72
  109. package/dist/src/EphemeralData.d.ts +0 -19
  110. package/dist/src/EphemeralData.d.ts.map +0 -1
  111. package/dist/src/EphemeralData.js +0 -1
  112. package/dist/src/Repo.d.ts +0 -74
  113. package/dist/src/Repo.d.ts.map +0 -1
  114. package/dist/src/Repo.js +0 -208
  115. package/dist/src/helpers/arraysAreEqual.d.ts +0 -2
  116. package/dist/src/helpers/arraysAreEqual.d.ts.map +0 -1
  117. package/dist/src/helpers/arraysAreEqual.js +0 -2
  118. package/dist/src/helpers/cbor.d.ts +0 -4
  119. package/dist/src/helpers/cbor.d.ts.map +0 -1
  120. package/dist/src/helpers/cbor.js +0 -8
  121. package/dist/src/helpers/eventPromise.d.ts +0 -11
  122. package/dist/src/helpers/eventPromise.d.ts.map +0 -1
  123. package/dist/src/helpers/eventPromise.js +0 -7
  124. package/dist/src/helpers/headsAreSame.d.ts +0 -2
  125. package/dist/src/helpers/headsAreSame.d.ts.map +0 -1
  126. package/dist/src/helpers/headsAreSame.js +0 -4
  127. package/dist/src/helpers/mergeArrays.d.ts +0 -2
  128. package/dist/src/helpers/mergeArrays.d.ts.map +0 -1
  129. package/dist/src/helpers/mergeArrays.js +0 -15
  130. package/dist/src/helpers/pause.d.ts +0 -6
  131. package/dist/src/helpers/pause.d.ts.map +0 -1
  132. package/dist/src/helpers/pause.js +0 -10
  133. package/dist/src/helpers/tests/network-adapter-tests.d.ts +0 -21
  134. package/dist/src/helpers/tests/network-adapter-tests.d.ts.map +0 -1
  135. package/dist/src/helpers/tests/network-adapter-tests.js +0 -122
  136. package/dist/src/helpers/withTimeout.d.ts +0 -12
  137. package/dist/src/helpers/withTimeout.d.ts.map +0 -1
  138. package/dist/src/helpers/withTimeout.js +0 -24
  139. package/dist/src/index.d.ts +0 -53
  140. package/dist/src/index.d.ts.map +0 -1
  141. package/dist/src/index.js +0 -40
  142. package/dist/src/network/NetworkAdapter.d.ts +0 -26
  143. package/dist/src/network/NetworkAdapter.d.ts.map +0 -1
  144. package/dist/src/network/NetworkAdapter.js +0 -4
  145. package/dist/src/network/NetworkSubsystem.d.ts +0 -23
  146. package/dist/src/network/NetworkSubsystem.d.ts.map +0 -1
  147. package/dist/src/network/NetworkSubsystem.js +0 -120
  148. package/dist/src/network/messages.d.ts +0 -85
  149. package/dist/src/network/messages.d.ts.map +0 -1
  150. package/dist/src/network/messages.js +0 -23
  151. package/dist/src/storage/StorageAdapter.d.ts +0 -14
  152. package/dist/src/storage/StorageAdapter.d.ts.map +0 -1
  153. package/dist/src/storage/StorageAdapter.js +0 -1
  154. package/dist/src/storage/StorageSubsystem.d.ts +0 -12
  155. package/dist/src/storage/StorageSubsystem.d.ts.map +0 -1
  156. package/dist/src/storage/StorageSubsystem.js +0 -145
  157. package/dist/src/synchronizer/CollectionSynchronizer.d.ts +0 -25
  158. package/dist/src/synchronizer/CollectionSynchronizer.d.ts.map +0 -1
  159. package/dist/src/synchronizer/CollectionSynchronizer.js +0 -106
  160. package/dist/src/synchronizer/DocSynchronizer.d.ts +0 -29
  161. package/dist/src/synchronizer/DocSynchronizer.d.ts.map +0 -1
  162. package/dist/src/synchronizer/DocSynchronizer.js +0 -263
  163. package/dist/src/synchronizer/Synchronizer.d.ts +0 -9
  164. package/dist/src/synchronizer/Synchronizer.d.ts.map +0 -1
  165. package/dist/src/synchronizer/Synchronizer.js +0 -2
  166. package/dist/src/types.d.ts +0 -16
  167. package/dist/src/types.d.ts.map +0 -1
  168. package/dist/src/types.js +0 -1
  169. package/dist/test/CollectionSynchronizer.test.d.ts +0 -2
  170. package/dist/test/CollectionSynchronizer.test.d.ts.map +0 -1
  171. package/dist/test/CollectionSynchronizer.test.js +0 -57
  172. package/dist/test/DocHandle.test.d.ts +0 -2
  173. package/dist/test/DocHandle.test.d.ts.map +0 -1
  174. package/dist/test/DocHandle.test.js +0 -238
  175. package/dist/test/DocSynchronizer.test.d.ts +0 -2
  176. package/dist/test/DocSynchronizer.test.d.ts.map +0 -1
  177. package/dist/test/DocSynchronizer.test.js +0 -111
  178. package/dist/test/Network.test.d.ts +0 -2
  179. package/dist/test/Network.test.d.ts.map +0 -1
  180. package/dist/test/Network.test.js +0 -11
  181. package/dist/test/Repo.test.d.ts +0 -2
  182. package/dist/test/Repo.test.d.ts.map +0 -1
  183. package/dist/test/Repo.test.js +0 -568
  184. package/dist/test/StorageSubsystem.test.d.ts +0 -2
  185. package/dist/test/StorageSubsystem.test.d.ts.map +0 -1
  186. package/dist/test/StorageSubsystem.test.js +0 -56
  187. package/dist/test/helpers/DummyNetworkAdapter.d.ts +0 -9
  188. package/dist/test/helpers/DummyNetworkAdapter.d.ts.map +0 -1
  189. package/dist/test/helpers/DummyNetworkAdapter.js +0 -15
  190. package/dist/test/helpers/DummyStorageAdapter.d.ts +0 -16
  191. package/dist/test/helpers/DummyStorageAdapter.d.ts.map +0 -1
  192. package/dist/test/helpers/DummyStorageAdapter.js +0 -33
  193. package/dist/test/helpers/generate-large-object.d.ts +0 -5
  194. package/dist/test/helpers/generate-large-object.d.ts.map +0 -1
  195. package/dist/test/helpers/generate-large-object.js +0 -9
  196. package/dist/test/helpers/getRandomItem.d.ts +0 -2
  197. package/dist/test/helpers/getRandomItem.d.ts.map +0 -1
  198. package/dist/test/helpers/getRandomItem.js +0 -4
  199. package/dist/test/types.d.ts +0 -4
  200. package/dist/test/types.d.ts.map +0 -1
  201. package/dist/test/types.js +0 -1
  202. package/src/CollectionHandle.ts +0 -54
  203. package/src/ferigan.ts +0 -184
package/dist/DocHandle.js CHANGED
@@ -1,8 +1,8 @@
1
- import * as A from "@automerge/automerge/slim/next";
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({ documentId: this.documentId });
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
- * @returns the current state of this handle's Automerge document.
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
- async doc(
230
- /** states to wait for, such as "LOADING". mostly for internal use. */
231
- awaitStates = ["ready", "unavailable"]) {
232
- try {
233
- // wait for the document to enter one of the desired states
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
- // Return the document
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
- * @returns the current document, or undefined if the document is not ready.
255
- */
250
+ * @deprecated */
256
251
  docSync() {
257
- if (!this.isReady())
258
- return undefined;
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
- return undefined;
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
- * Creates a fixed "view" of an automerge document at the given point in time represented
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 docSync() and will return
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
- * @returns An Automerge.Doc<T> at the point in time.
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
- return undefined;
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
- return A.view(this.#doc, heads);
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 both a from/to heads or just a single comparison point, in which case
321
- * the base will be the current document heads.
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
- * @returns Automerge patches that go from one document state to the other. Use view() to get the full state.
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
- return undefined;
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
- // We allow only one set of heads to be specified, in which case we use the doc's heads
330
- const from = second ? first : this.heads() || []; // because we guard above this should always have useful data
358
+ // Otherwise treat as heads
359
+ const from = second ? first : (this.heads() || []);
331
360
  const to = second ? second : first;
332
- return A.diff(this.#doc, from, to);
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) || undefined;
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 either when a doc handle changes or we receive new remote heads.
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 || undefined;
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
- const mergingDoc = otherHandle.docSync();
446
- if (!mergingDoc) {
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
- * Used in testing to mark this document as unavailable.
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
- /** Called by the repo when the document is not found in storage.
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: A.Heads;
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: A.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: A.Heads): void;
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,IAAI,IAAI,CAAC,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAC/C,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,CAAC,CAAC,KAAK,CAAA;IACpB,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,CAAC,CAAC,KAAK,CAAA;IACd,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,CAAC,CAAC,KAAK;IAgChB,eAAe,CAAC,MAAM,EAAE,MAAM;IAwB9B,UAAU,CAAC,MAAM,EAAE,MAAM;IA2BzB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU;CAoE1D"}
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, { timestamp, heads });
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
- storageSubsystem: StorageSubsystem;
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
- find<T>(
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Repo.d.ts","sourceRoot":"","sources":["../src/Repo.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAM5C,OAAO,EAEL,SAAS,EAKV,MAAM,gBAAgB,CAAA;AAGvB,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;AAUnB,8FAA8F;AAC9F;;;;;;GAMG;AACH,qBAAa,IAAK,SAAQ,YAAY,CAAC,UAAU,CAAC;;IAGhD,cAAc;IACd,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,gBAAgB,EAAE,gBAAgB,CAAA;IAIlC,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;gBAI3C,EACV,OAAO,EACP,OAAY,EACZ,MAAuB,EACvB,WAAW,EACX,WAAmC,EACnC,0BAAkC,EAClC,QAAa,GACd,GAAE,UAAe;IA4KlB,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;IA+CzC;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;IAuBnC;;;OAGG;IACH,IAAI,CAAC,CAAC;IACJ,sDAAsD;IACtD,EAAE,EAAE,aAAa,GAChB,SAAS,CAAC,CAAC,CAAC;IA+Cf,MAAM;IACJ,oDAAoD;IACpD,EAAE,EAAE,aAAa;IAWnB;;;;;;OAMG;IACG,MAAM,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAShE;;;OAGG;IACH,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU;IAY5B,kBAAkB,YAAa,SAAS,EAAE,UAAO;IAEjD,SAAS,QAAa,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAMnD;IAED;;;;;OAKG;IACG,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBpD;;;;;OAKG;IACG,eAAe,CAAC,UAAU,EAAE,UAAU;IA2B5C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAOzB,OAAO,IAAI;QAAE,SAAS,EAAE;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;SAAE,CAAA;KAAE;CAIjD;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,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"}
1
+ {"version":3,"file":"Repo.d.ts","sourceRoot":"","sources":["../src/Repo.ts"],"names":[],"mappings":"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"}