Skip to content

Commit 6893959

Browse files
committed
[automerge] Upgrade to 1.x
1 parent 5a9de29 commit 6893959

File tree

11 files changed

+72
-97
lines changed

11 files changed

+72
-97
lines changed

jest.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
const esmModules = [
2-
'automerge-repo',
32
'cbor-x',
43
'electric-sql',
54
'wa-sqlite',
5+
'@automerge/automerge-repo',
66
'@sqlite\\.org/sqlite-wasm',
77
'@vlcn\\.io/crsqlite-wasm',
88
'@vlcn\\.io/wa-sqlite',

package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@
215215
},
216216
"devDependencies": {
217217
"@automerge/automerge": "^2.1.10",
218+
"@automerge/automerge-repo": "^1.0.19",
218219
"@babel/cli": "^7.23.4",
219220
"@babel/core": "^7.23.7",
220221
"@babel/preset-env": "^7.23.8",
@@ -241,7 +242,6 @@
241242
"@typescript-eslint/parser": "^6.19.0",
242243
"@vlcn.io/crsqlite-wasm": "^0.16.0",
243244
"asciichart": "^1.5.25",
244-
"automerge-repo": "^0.1.0",
245245
"babel-eslint": "^10.1.0",
246246
"babel-jest": "^29.7.0",
247247
"babel-plugin-transform-import-meta": "^2.2.1",
@@ -291,9 +291,9 @@
291291
"yjs": "^13.6.10"
292292
},
293293
"peerDependencies": {
294+
"@automerge/automerge-repo": "^1.0.19",
294295
"@sqlite.org/sqlite-wasm": "^3.44.2-build3",
295296
"@vlcn.io/crsqlite-wasm": "^0.16.0",
296-
"automerge-repo": "^0.1.0",
297297
"electric-sql": "^0.8.2",
298298
"partykit": "^0.0.72",
299299
"partysocket": "^0.0.20",
@@ -304,13 +304,13 @@
304304
"yjs": "^13.6.10"
305305
},
306306
"peerDependenciesMeta": {
307-
"@sqlite.org/sqlite-wasm": {
307+
"@automerge/automerge-repo": {
308308
"optional": true
309309
},
310-
"@vlcn.io/crsqlite-wasm": {
310+
"@sqlite.org/sqlite-wasm": {
311311
"optional": true
312312
},
313-
"automerge-repo": {
313+
"@vlcn.io/crsqlite-wasm": {
314314
"optional": true
315315
},
316316
"electric-sql": {

site/guides/10_releases.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ const automergePersister = createAutomergePersister(store, docHandler);
335335

336336
await automergePersister.save();
337337
// Store will be saved to the document.
338-
console.log(docHandler.doc);
338+
console.log(await docHandler.doc());
339339
// -> {tinybase: {t: {pets: {fido: {species: 'dog'}}}, v: {}}}
340340
automergePersister.destroy();
341341

src/persisters/persister-automerge.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
objSize,
1515
} from '../common/obj';
1616
import {ifNotUndefined, isUndefined} from '../common/other';
17-
import {DocHandle} from 'automerge-repo';
17+
import {DocHandle} from '@automerge/automerge-repo';
1818
import {Id} from '../types/common';
1919
import {PersisterListener} from '../types/persisters';
2020
import {TINYBASE} from '../common/strings';
@@ -135,18 +135,20 @@ export const createAutomergePersister = ((
135135
docObjName = TINYBASE,
136136
onIgnoredError?: (error: any) => void,
137137
): AutomergePersister => {
138-
docHandle.change((doc) => (doc[docObjName] = {}));
138+
docHandle.change((doc: any) => (doc[docObjName] = {}));
139139

140-
const getPersisted = async (): Promise<[Tables, Values] | undefined> =>
141-
objSize(docHandle.doc[docObjName]) == 2
142-
? getDocContent(docHandle.doc, docObjName)
140+
const getPersisted = async (): Promise<[Tables, Values] | undefined> => {
141+
const doc = await docHandle.doc();
142+
return objSize(doc[docObjName]) == 2
143+
? getDocContent(doc, docObjName)
143144
: undefined;
145+
};
144146

145147
const setPersisted = async (
146148
getContent: () => [Tables, Values],
147149
getTransactionChanges?: GetTransactionChanges,
148150
): Promise<void> =>
149-
docHandle.change((doc) =>
151+
docHandle.change((doc: any) =>
150152
setTransactionChangesToDoc(
151153
doc,
152154
docObjName,

src/types/docs/persisters/persister-automerge.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
* await persister.save();
7171
* // Store will be saved to the document.
7272
*
73-
* console.log(docHandler.doc);
73+
* console.log(await docHandler.doc());
7474
* // -> {tinybase: {t: {pets: {fido: {species: 'dog'}}}, v: {}}}
7575
*
7676
* persister.destroy();
@@ -86,7 +86,7 @@
8686
* network: [new BroadcastChannelNetworkAdapter()],
8787
* });
8888
* const docHandler1 = repo1.create();
89-
* await docHandler1.value();
89+
* await docHandler1.doc();
9090
* const store1 = createStore();
9191
* const persister1 = createAutomergePersister(store1, docHandler1);
9292
* await persister1.startAutoLoad();
@@ -97,7 +97,7 @@
9797
* network: [new BroadcastChannelNetworkAdapter()],
9898
* });
9999
* const docHandler2 = repo2.find(docHandler1.documentId);
100-
* await docHandler2.value();
100+
* await docHandler2.doc();
101101
* const store2 = createStore();
102102
* const persister2 = createAutomergePersister(store2, docHandler2);
103103
* await persister2.startAutoLoad();
@@ -106,9 +106,9 @@
106106
* // A function that waits briefly and then for the documents to synchronize
107107
* // with each other, merely for the purposes of sequentiality in this example.
108108
* const syncDocsWait = async () => {
109-
* await new Promise((resolve) => setTimeout(() => resolve(0), 10));
110-
* await docHandler1.value();
111-
* await docHandler2.value();
109+
* await new Promise((resolve) => setTimeout(() => resolve(0), 100));
110+
* await docHandler1.doc();
111+
* await docHandler2.doc();
112112
* };
113113
*
114114
* // Wait for the documents to synchronize in their initial state.

src/types/persisters/persister-automerge.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/// persister-automerge
22

3-
import {DocHandle} from 'automerge-repo';
3+
import {DocHandle} from '@automerge/automerge-repo';
44
import {Persister} from '../persisters';
55
import {Store} from '../store';
66

src/types/with-schemas/persisters/persister-automerge.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/// persister-automerge
22

33
import {OptionalSchemas, Store} from '../store';
4-
import {DocHandle} from 'automerge-repo';
4+
import {DocHandle} from '@automerge/automerge-repo';
55
import {Persister} from '../persisters';
66

77
/// AutomergePersister
Lines changed: 37 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,99 +1,71 @@
11
/* eslint-disable @typescript-eslint/no-non-null-assertion */
2-
import {ChannelId, NetworkAdapter, PeerId} from 'automerge-repo';
2+
import {Message, NetworkAdapter, PeerId} from '@automerge/automerge-repo';
33

4-
type NetworkEvent = {
5-
senderId: PeerId;
6-
targetId?: PeerId;
7-
type: string;
8-
channelId?: ChannelId;
9-
message?: any;
10-
broadcast?: boolean;
11-
};
4+
type ArriveMessage = {type: 'arrive'; senderId: PeerId; targetId: never};
5+
type WelcomeMessage = {type: 'welcome'; senderId: PeerId; targetId: PeerId};
6+
type BroadcastChannelMessage = ArriveMessage | WelcomeMessage | Message;
127

138
const adaptors: Set<AutomergeTestNetworkAdapter> = new Set();
149

15-
const sendEvent = (event: NetworkEvent) =>
16-
adaptors.forEach((adaptor) => adaptor.receiveEvent(event));
10+
const broadcast = (message: BroadcastChannelMessage): void =>
11+
adaptors.forEach((adaptor) => adaptor.receiveMessage(message));
1712

1813
export const resetNetwork = () => adaptors.clear();
1914

2015
export class AutomergeTestNetworkAdapter extends NetworkAdapter {
2116
connect(peerId: PeerId) {
2217
this.peerId = peerId;
2318
adaptors.add(this);
19+
broadcast({type: 'arrive', senderId: peerId} as ArriveMessage);
20+
this.emit('ready', {network: this});
2421
}
2522

26-
receiveEvent({
27-
senderId,
28-
targetId,
29-
type,
30-
channelId,
31-
message,
32-
broadcast,
33-
}: NetworkEvent) {
34-
if (targetId && targetId !== this.peerId && !broadcast) {
23+
receiveMessage(message: BroadcastChannelMessage) {
24+
const peerId: PeerId = this.peerId!;
25+
const {targetId, senderId, type} = message;
26+
if (targetId && targetId !== peerId) {
3527
return;
3628
}
3729
switch (type) {
3830
case 'arrive':
39-
sendEvent({
31+
broadcast({
4032
senderId: this.peerId!,
4133
targetId: senderId,
4234
type: 'welcome',
4335
});
44-
this.announceConnection(channelId!, senderId);
36+
this.emit('peer-candidate', {peerId: senderId});
4537
break;
4638
case 'welcome':
47-
this.announceConnection(channelId!, senderId);
48-
break;
49-
case 'message':
50-
this.emit('message', {
51-
senderId,
52-
targetId: targetId!,
53-
channelId: channelId!,
54-
message: new Uint8Array(message),
55-
broadcast: broadcast!,
56-
});
39+
this.emit('peer-candidate', {peerId: senderId});
5740
break;
5841
default:
59-
throw new Error('unhandled message from network');
42+
if (!('data' in message)) {
43+
this.emit('message', message);
44+
} else {
45+
this.emit('message', {
46+
...message,
47+
data: new Uint8Array(message.data),
48+
});
49+
}
50+
break;
6051
}
6152
}
6253

63-
announceConnection(channelId: ChannelId, peerId: PeerId) {
64-
this.emit('peer-candidate', {peerId, channelId});
65-
}
66-
67-
sendMessage(
68-
peerId: PeerId,
69-
channelId: ChannelId,
70-
uint8message: Uint8Array,
71-
broadcast: boolean,
72-
) {
73-
const message = uint8message.buffer.slice(
74-
uint8message.byteOffset,
75-
uint8message.byteOffset + uint8message.byteLength,
76-
);
77-
sendEvent({
78-
senderId: this.peerId!,
79-
targetId: peerId,
80-
type: 'message',
81-
channelId,
82-
message,
83-
broadcast,
84-
});
85-
}
86-
87-
join(joinChannelId: ChannelId) {
88-
sendEvent({
89-
senderId: this.peerId!,
90-
channelId: joinChannelId,
91-
type: 'arrive',
92-
broadcast: true,
93-
});
54+
send(message: BroadcastChannelMessage) {
55+
if ('data' in message) {
56+
broadcast({
57+
...message,
58+
data: message.data.buffer.slice(
59+
message.data.byteOffset,
60+
message.data.byteOffset + message.data.byteLength,
61+
) as any,
62+
});
63+
} else {
64+
broadcast(message);
65+
}
9466
}
9567

96-
leave() {
68+
disconnect() {
9769
adaptors.delete(this);
9870
}
9971
}

test/unit/documentation.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 'fake-indexeddb/auto';
2-
import * as AutomergeRepo from 'automerge-repo';
2+
import * as AutomergeRepo from '@automerge/automerge-repo';
33
import * as React from 'react';
44
import * as ReactDOMClient from 'react-dom/client';
55
import * as ReactDOMTestUtils from 'react-dom/test-utils';

test/unit/persisters/persister-automerge.test.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {
22
AutomergeTestNetworkAdapter,
33
resetNetwork,
44
} from '../common/automerge-adaptor';
5-
import {DocHandle, Repo} from 'automerge-repo';
5+
import {DocHandle, Repo} from '@automerge/automerge-repo';
66
import {Persister, Store, createStore} from 'tinybase/debug';
77
import {createAutomergePersister} from 'tinybase/debug/persisters/persister-automerge';
88
import {pause} from '../common/other';
@@ -24,33 +24,33 @@ test('custom name', async () => {
2424
const docHandler = repo1.create();
2525
const persister = createAutomergePersister(store1, docHandler, 'test');
2626
await persister.save();
27-
expect(docHandler.doc).toEqual({test: {t: {}, v: {}}});
27+
expect(await docHandler.doc()).toEqual({test: {t: {}, v: {}}});
2828
});
2929

3030
describe('Save to empty doc', () => {
3131
test('nothing', async () => {
3232
await persister1.save();
33-
expect(docHandler1.doc).toEqual({tinybase: {t: {}, v: {}}});
33+
expect(await docHandler1.doc()).toEqual({tinybase: {t: {}, v: {}}});
3434
});
3535

3636
test('tables', async () => {
3737
store1.setTables({t1: {r1: {c1: 1}}});
3838
await persister1.save();
39-
expect(docHandler1.doc).toEqual({
39+
expect(await docHandler1.doc()).toEqual({
4040
tinybase: {t: {t1: {r1: {c1: 1}}}, v: {}},
4141
});
4242
});
4343

4444
test('values', async () => {
4545
store1.setValues({v1: 1});
4646
await persister1.save();
47-
expect(docHandler1.doc).toEqual({tinybase: {t: {}, v: {v1: 1}}});
47+
expect(await docHandler1.doc()).toEqual({tinybase: {t: {}, v: {v1: 1}}});
4848
});
4949

5050
test('both', async () => {
5151
store1.setTables({t1: {r1: {c1: 1}}}).setValues({v1: 1});
5252
await persister1.save();
53-
expect(docHandler1.doc).toEqual({
53+
expect(await docHandler1.doc()).toEqual({
5454
tinybase: {t: {t1: {r1: {c1: 1}}}, v: {v1: 1}},
5555
});
5656
});
@@ -185,8 +185,8 @@ describe('Two stores, two docs', () => {
185185

186186
const syncDocs = async () => {
187187
await pause();
188-
await docHandler1.value();
189-
await docHandler2.value();
188+
await docHandler1.doc();
189+
await docHandler2.doc();
190190
await pause();
191191
};
192192

@@ -203,6 +203,7 @@ describe('Two stores, two docs', () => {
203203
test('manual', async () => {
204204
store1.setTables({t1: {r1: {c1: 1}}}).setValues({v1: 1});
205205
await persister1.save();
206+
206207
await syncDocs();
207208
await persister2.load();
208209
expect(store2.getContent()).toEqual([{t1: {r1: {c1: 1}}}, {v1: 1}]);

0 commit comments

Comments
 (0)