Skip to content

Commit ea7d7fe

Browse files
authored
Merge pull request #374 from TypeCellOS/staging
fix: server reflistener for child document_relations
2 parents 343d59c + 92e81d4 commit ea7d7fe

File tree

2 files changed

+26
-19
lines changed

2 files changed

+26
-19
lines changed

packages/server/src/hocuspocus/extension-supabase/SupabaseHocuspocus.ts

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,13 @@ export class SupabaseHocuspocus extends Database {
8181
.from("documents")
8282
.update(
8383
{ data: "\\x" + data.state.toString("hex") }, // add \x for postgres binary data
84-
{ count: "exact" }
84+
{ count: "exact" },
8585
)
8686
.eq("nano_id", data.documentName)
8787
.select();
8888
if (ret.data?.length !== 1) {
8989
throw new Error(
90-
"unexpected: not found when storing " + data.documentName
90+
"unexpected: not found when storing " + data.documentName,
9191
);
9292
}
9393
},
@@ -164,7 +164,7 @@ export class SupabaseHocuspocus extends Database {
164164
socketId: string,
165165
documentId: string,
166166
event: Y.YEvent<any>[],
167-
tr: Y.Transaction
167+
tr: Y.Transaction,
168168
) => {
169169
const supabase = this.supabaseMap.get(socketId);
170170
if (!supabase) {
@@ -191,9 +191,15 @@ export class SupabaseHocuspocus extends Database {
191191
.filter(
192192
(r) =>
193193
r.namespace === ChildReference.namespace &&
194-
r.type === ChildReference.type
194+
r.type === ChildReference.type,
195195
)
196-
.map((r) => r.target as string);
196+
.map((r) => {
197+
const target = r.target as string;
198+
if (!target.startsWith("typecell:typecell.org/")) {
199+
console.error("invalid target", target);
200+
}
201+
return target.split("/", 2)[1];
202+
});
197203

198204
const refsIds = await serviceClient
199205
.from("documents")
@@ -229,19 +235,20 @@ export class SupabaseHocuspocus extends Database {
229235

230236
if (ret.error) {
231237
throw new Error(
232-
"error executing supabase request (remove) " + ret.error.message
238+
"error executing supabase request (remove) " + ret.error.message,
233239
);
234240
}
235241
}
236242

237243
if (toAdd.length) {
238-
const ret = await supabase
239-
.from("document_relations")
240-
.insert(toAdd.map((e) => ({ parent_id: documentId, child_id: e })));
244+
const ret = await supabase.from("document_relations").upsert(
245+
toAdd.map((e) => ({ parent_id: documentId, child_id: e })),
246+
{ ignoreDuplicates: true },
247+
);
241248

242249
if (ret.error) {
243250
throw new Error(
244-
"error executing supabase request (add) " + ret.error.message
251+
"error executing supabase request (add) " + ret.error.message,
245252
);
246253
}
247254
}
@@ -259,7 +266,7 @@ export class SupabaseHocuspocus extends Database {
259266
data.socketId,
260267
documentIdByDocument.get(data.document)!,
261268
event,
262-
tr
269+
tr,
263270
);
264271

265272
data.document.getMap("refs").observeDeep(refListener);

packages/server/src/hocuspocus/extension-supabase/hocuspocus.test.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ describe("SupabaseHocuspocus", () => {
5353
docId,
5454
ydoc,
5555
alice.session?.access_token + "$" + alice.session?.refresh_token,
56-
wsProvider
56+
wsProvider,
5757
);
5858

5959
ydoc.getMap("mymap").set("hello", "world");
@@ -75,7 +75,7 @@ describe("SupabaseHocuspocus", () => {
7575
docId,
7676
ydoc2,
7777
alice.session?.access_token + "$" + alice.session?.refresh_token,
78-
wsProvider
78+
wsProvider,
7979
);
8080

8181
await async.timeout(100);
@@ -92,7 +92,7 @@ describe("SupabaseHocuspocus", () => {
9292
docId,
9393
ydoc,
9494
alice.session?.access_token + "$" + alice.session?.refresh_token,
95-
wsProvider
95+
wsProvider,
9696
);
9797

9898
ydoc.getMap("mymap").set("hello", "world");
@@ -102,7 +102,7 @@ describe("SupabaseHocuspocus", () => {
102102
docId,
103103
ydoc2,
104104
alice.session?.access_token + "$" + alice.session?.refresh_token,
105-
wsProvider
105+
wsProvider,
106106
);
107107

108108
ydoc2.getMap("anothermap").set("hello", "world");
@@ -122,7 +122,7 @@ describe("SupabaseHocuspocus", () => {
122122
docId,
123123
ydoc,
124124
alice.session?.access_token + "$" + alice.session?.refresh_token,
125-
wsProvider
125+
wsProvider,
126126
);
127127

128128
ydoc.getMap("mymap").set("hello", "world");
@@ -132,7 +132,7 @@ describe("SupabaseHocuspocus", () => {
132132
docId,
133133
ydoc2,
134134
bob.session?.access_token + "", // TODO
135-
wsProvider
135+
wsProvider,
136136
);
137137
ydoc2.getMap("anothermap").set("hello", "world");
138138
await async.timeout(100);
@@ -184,7 +184,7 @@ describe("SupabaseHocuspocus", () => {
184184
const docB = createDocument(bob.user!.id, "", "no-access");
185185
const retB = await bob.supabase.from("documents").insert(docB).select();
186186
expect(retB.error).toBeNull();
187-
docBId = retB.data![0].nano_id;
187+
docBId = "typecell:typecell.org/" + retB.data![0].nano_id;
188188
docBDbID = retB.data![0].id;
189189
});
190190

@@ -197,7 +197,7 @@ describe("SupabaseHocuspocus", () => {
197197
docId,
198198
ydoc,
199199
alice.session?.access_token + "$" + alice.session?.refresh_token,
200-
wsProvider
200+
wsProvider,
201201
);
202202

203203
ydoc.getMap("refs").set("fakekey", {

0 commit comments

Comments
 (0)