@automerge/automerge-repo 2.4.0-alpha.1 → 2.4.0-alpha.2
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/Repo.d.ts +13 -1
- package/dist/Repo.d.ts.map +1 -1
- package/dist/Repo.js +35 -1
- package/package.json +2 -2
- package/src/Repo.ts +41 -4
- package/test/Repo.test.ts +3 -3
package/dist/Repo.d.ts
CHANGED
|
@@ -61,6 +61,18 @@ export declare class Repo extends EventEmitter<RepoEvents> {
|
|
|
61
61
|
* system. we emit a `document` event to advertise interest in the document.
|
|
62
62
|
*/
|
|
63
63
|
create<T>(initialValue?: T): DocHandle<T>;
|
|
64
|
+
/**
|
|
65
|
+
* Creates a new document and returns a handle to it. The initial value of the
|
|
66
|
+
* document is an empty object `{}` unless an initial value is provided. The
|
|
67
|
+
* main difference between this and Repo.create is that if an `idGenerator`
|
|
68
|
+
* was provided at repo construction, that idGenerator will be used to
|
|
69
|
+
* generate the document ID of the document returned by this method.
|
|
70
|
+
*
|
|
71
|
+
* This is a hidden, experimental API which is subject to change or removal without notice.
|
|
72
|
+
* @hidden
|
|
73
|
+
* @experimental
|
|
74
|
+
*/
|
|
75
|
+
create2<T>(initialValue?: T): Promise<DocHandle<T>>;
|
|
64
76
|
/** Create a new DocHandle by cloning the history of an existing DocHandle.
|
|
65
77
|
*
|
|
66
78
|
* @param clonedHandle - The handle to clone
|
|
@@ -179,7 +191,7 @@ export interface RepoConfig {
|
|
|
179
191
|
/**
|
|
180
192
|
* @hidden
|
|
181
193
|
*/
|
|
182
|
-
idFactory?: (initialHeads: Heads) => Uint8Array
|
|
194
|
+
idFactory?: (initialHeads: Heads) => Promise<Uint8Array>;
|
|
183
195
|
}
|
|
184
196
|
/** A function that determines whether we should share a document with a peer
|
|
185
197
|
*
|
package/dist/Repo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Repo.d.ts","sourceRoot":"","sources":["../src/Repo.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Repo.d.ts","sourceRoot":"","sources":["../src/Repo.ts"],"names":[],"mappings":"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"}
|
package/dist/Repo.js
CHANGED
|
@@ -310,9 +310,43 @@ export class Repo extends EventEmitter {
|
|
|
310
310
|
initialDoc = Automerge.emptyChange(Automerge.init());
|
|
311
311
|
}
|
|
312
312
|
// Generate a new UUID and store it in the buffer
|
|
313
|
+
const { documentId } = parseAutomergeUrl(generateAutomergeUrl());
|
|
314
|
+
const handle = this.#getHandle({
|
|
315
|
+
documentId,
|
|
316
|
+
});
|
|
317
|
+
this.#registerHandleWithSubsystems(handle);
|
|
318
|
+
handle.update(() => {
|
|
319
|
+
return initialDoc;
|
|
320
|
+
});
|
|
321
|
+
handle.doneLoading();
|
|
322
|
+
return handle;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Creates a new document and returns a handle to it. The initial value of the
|
|
326
|
+
* document is an empty object `{}` unless an initial value is provided. The
|
|
327
|
+
* main difference between this and Repo.create is that if an `idGenerator`
|
|
328
|
+
* was provided at repo construction, that idGenerator will be used to
|
|
329
|
+
* generate the document ID of the document returned by this method.
|
|
330
|
+
*
|
|
331
|
+
* This is a hidden, experimental API which is subject to change or removal without notice.
|
|
332
|
+
* @hidden
|
|
333
|
+
* @experimental
|
|
334
|
+
*/
|
|
335
|
+
async create2(initialValue) {
|
|
336
|
+
// Note that the reason this method is hidden and experimental is because it is async,
|
|
337
|
+
// and it is async because we want to be able to call the #idGenerator, which is async.
|
|
338
|
+
// This is all really in service of wiring up keyhive and we probably need to find a
|
|
339
|
+
// nicer way to achieve this.
|
|
340
|
+
let initialDoc;
|
|
341
|
+
if (initialValue) {
|
|
342
|
+
initialDoc = Automerge.from(initialValue);
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
initialDoc = Automerge.emptyChange(Automerge.init());
|
|
346
|
+
}
|
|
313
347
|
let { documentId } = parseAutomergeUrl(generateAutomergeUrl());
|
|
314
348
|
if (this.#idFactory) {
|
|
315
|
-
const rawDocId = this.#idFactory(Automerge.getHeads(initialDoc));
|
|
349
|
+
const rawDocId = await this.#idFactory(Automerge.getHeads(initialDoc));
|
|
316
350
|
documentId = binaryToDocumentId(rawDocId);
|
|
317
351
|
}
|
|
318
352
|
const handle = this.#getHandle({
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@automerge/automerge-repo",
|
|
3
|
-
"version": "2.4.0-alpha.
|
|
3
|
+
"version": "2.4.0-alpha.2",
|
|
4
4
|
"description": "A repository object to manage a collection of automerge documents",
|
|
5
5
|
"repository": "https://github.com/automerge/automerge-repo/tree/master/packages/automerge-repo",
|
|
6
6
|
"author": "Peter van Hardenberg <pvh@pvh.ca>",
|
|
@@ -59,5 +59,5 @@
|
|
|
59
59
|
"publishConfig": {
|
|
60
60
|
"access": "public"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "f963f3a1a36292ac0ea417c1c17d180fd8e78ac5"
|
|
63
63
|
}
|
package/src/Repo.ts
CHANGED
|
@@ -103,7 +103,7 @@ export class Repo extends EventEmitter<RepoEvents> {
|
|
|
103
103
|
DocumentId,
|
|
104
104
|
(payload: DocHandleEncodedChangePayload<any>) => void
|
|
105
105
|
> = {}
|
|
106
|
-
#idFactory: ((initialHeads: Heads) => Uint8Array) | null
|
|
106
|
+
#idFactory: ((initialHeads: Heads) => Promise<Uint8Array>) | null
|
|
107
107
|
|
|
108
108
|
constructor({
|
|
109
109
|
storage,
|
|
@@ -459,9 +459,47 @@ export class Repo extends EventEmitter<RepoEvents> {
|
|
|
459
459
|
}
|
|
460
460
|
|
|
461
461
|
// Generate a new UUID and store it in the buffer
|
|
462
|
+
const { documentId } = parseAutomergeUrl(generateAutomergeUrl())
|
|
463
|
+
const handle = this.#getHandle<T>({
|
|
464
|
+
documentId,
|
|
465
|
+
}) as DocHandle<T>
|
|
466
|
+
|
|
467
|
+
this.#registerHandleWithSubsystems(handle)
|
|
468
|
+
|
|
469
|
+
handle.update(() => {
|
|
470
|
+
return initialDoc
|
|
471
|
+
})
|
|
472
|
+
|
|
473
|
+
handle.doneLoading()
|
|
474
|
+
return handle
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
/**
|
|
478
|
+
* Creates a new document and returns a handle to it. The initial value of the
|
|
479
|
+
* document is an empty object `{}` unless an initial value is provided. The
|
|
480
|
+
* main difference between this and Repo.create is that if an `idGenerator`
|
|
481
|
+
* was provided at repo construction, that idGenerator will be used to
|
|
482
|
+
* generate the document ID of the document returned by this method.
|
|
483
|
+
*
|
|
484
|
+
* This is a hidden, experimental API which is subject to change or removal without notice.
|
|
485
|
+
* @hidden
|
|
486
|
+
* @experimental
|
|
487
|
+
*/
|
|
488
|
+
async create2<T>(initialValue?: T): Promise<DocHandle<T>> {
|
|
489
|
+
// Note that the reason this method is hidden and experimental is because it is async,
|
|
490
|
+
// and it is async because we want to be able to call the #idGenerator, which is async.
|
|
491
|
+
// This is all really in service of wiring up keyhive and we probably need to find a
|
|
492
|
+
// nicer way to achieve this.
|
|
493
|
+
let initialDoc: Automerge.Doc<T>
|
|
494
|
+
if (initialValue) {
|
|
495
|
+
initialDoc = Automerge.from(initialValue)
|
|
496
|
+
} else {
|
|
497
|
+
initialDoc = Automerge.emptyChange(Automerge.init())
|
|
498
|
+
}
|
|
499
|
+
|
|
462
500
|
let { documentId } = parseAutomergeUrl(generateAutomergeUrl())
|
|
463
501
|
if (this.#idFactory) {
|
|
464
|
-
const rawDocId = this.#idFactory(Automerge.getHeads(initialDoc))
|
|
502
|
+
const rawDocId = await this.#idFactory(Automerge.getHeads(initialDoc))
|
|
465
503
|
documentId = binaryToDocumentId(rawDocId as BinaryDocumentId)
|
|
466
504
|
}
|
|
467
505
|
const handle = this.#getHandle<T>({
|
|
@@ -477,7 +515,6 @@ export class Repo extends EventEmitter<RepoEvents> {
|
|
|
477
515
|
handle.doneLoading()
|
|
478
516
|
return handle
|
|
479
517
|
}
|
|
480
|
-
|
|
481
518
|
/** Create a new DocHandle by cloning the history of an existing DocHandle.
|
|
482
519
|
*
|
|
483
520
|
* @param clonedHandle - The handle to clone
|
|
@@ -983,7 +1020,7 @@ export interface RepoConfig {
|
|
|
983
1020
|
/**
|
|
984
1021
|
* @hidden
|
|
985
1022
|
*/
|
|
986
|
-
idFactory?: (initialHeads: Heads) => Uint8Array
|
|
1023
|
+
idFactory?: (initialHeads: Heads) => Promise<Uint8Array>
|
|
987
1024
|
}
|
|
988
1025
|
|
|
989
1026
|
/** A function that determines whether we should share a document with a peer
|
package/test/Repo.test.ts
CHANGED
|
@@ -2034,7 +2034,7 @@ describe("Repo.find() abort behavior", () => {
|
|
|
2034
2034
|
const repo = new Repo({
|
|
2035
2035
|
idFactory: () => id,
|
|
2036
2036
|
})
|
|
2037
|
-
const handle = repo.
|
|
2037
|
+
const handle = await repo.create2()
|
|
2038
2038
|
expect(handle.documentId).toBe("9HUp4wuzRMx9MRvN4x")
|
|
2039
2039
|
})
|
|
2040
2040
|
|
|
@@ -2047,7 +2047,7 @@ describe("Repo.find() abort behavior", () => {
|
|
|
2047
2047
|
return id
|
|
2048
2048
|
},
|
|
2049
2049
|
})
|
|
2050
|
-
const handle = repo.
|
|
2050
|
+
const handle = await repo.create2()
|
|
2051
2051
|
const actualHeads = A.getHeads(handle.doc())
|
|
2052
2052
|
assert.deepStrictEqual(actualHeads, calledHeads)
|
|
2053
2053
|
})
|
|
@@ -2066,7 +2066,7 @@ describe("Repo.find() abort behavior", () => {
|
|
|
2066
2066
|
|
|
2067
2067
|
await pause(50)
|
|
2068
2068
|
|
|
2069
|
-
const handle = alice.
|
|
2069
|
+
const handle = await alice.create2({ foo: "bar" })
|
|
2070
2070
|
const bobHandle = await bob.find(handle.url)
|
|
2071
2071
|
assert.deepStrictEqual(bobHandle.doc(), { foo: "bar" })
|
|
2072
2072
|
})
|