on-zero 0.4.23 → 0.4.24
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/cjs/combineZeroClients.cjs +101 -0
- package/dist/cjs/combineZeroClients.native.js +150 -0
- package/dist/cjs/combineZeroClients.native.js.map +1 -0
- package/dist/cjs/createUseQuery.cjs +92 -4
- package/dist/cjs/createUseQuery.native.js +130 -4
- package/dist/cjs/createUseQuery.native.js.map +1 -1
- package/dist/cjs/createZeroClient.cjs +41 -13
- package/dist/cjs/createZeroClient.native.js +75 -43
- package/dist/cjs/createZeroClient.native.js.map +1 -1
- package/dist/cjs/index.cjs +1 -0
- package/dist/cjs/index.native.js +1 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/instanceRegistry.cjs +65 -0
- package/dist/cjs/instanceRegistry.native.js +111 -0
- package/dist/cjs/instanceRegistry.native.js.map +1 -0
- package/dist/cjs/multiInstance.test.cjs +322 -0
- package/dist/cjs/multiInstance.test.native.js +387 -0
- package/dist/cjs/multiInstance.test.native.js.map +1 -0
- package/dist/cjs/multiInstanceNested.test.cjs +206 -0
- package/dist/cjs/multiInstanceNested.test.native.js +254 -0
- package/dist/cjs/multiInstanceNested.test.native.js.map +1 -0
- package/dist/cjs/run.cjs +5 -5
- package/dist/cjs/run.native.js +6 -5
- package/dist/cjs/run.native.js.map +1 -1
- package/dist/cjs/zeroRunner.cjs +4 -1
- package/dist/cjs/zeroRunner.native.js +4 -1
- package/dist/cjs/zeroRunner.native.js.map +1 -1
- package/dist/esm/combineZeroClients.mjs +76 -0
- package/dist/esm/combineZeroClients.mjs.map +1 -0
- package/dist/esm/combineZeroClients.native.js +122 -0
- package/dist/esm/combineZeroClients.native.js.map +1 -0
- package/dist/esm/createUseQuery.mjs +92 -5
- package/dist/esm/createUseQuery.mjs.map +1 -1
- package/dist/esm/createUseQuery.native.js +130 -5
- package/dist/esm/createUseQuery.native.js.map +1 -1
- package/dist/esm/createZeroClient.mjs +42 -14
- package/dist/esm/createZeroClient.mjs.map +1 -1
- package/dist/esm/createZeroClient.native.js +76 -44
- package/dist/esm/createZeroClient.native.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs +1 -0
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +1 -0
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/instanceRegistry.mjs +38 -0
- package/dist/esm/instanceRegistry.mjs.map +1 -0
- package/dist/esm/instanceRegistry.native.js +81 -0
- package/dist/esm/instanceRegistry.native.js.map +1 -0
- package/dist/esm/multiInstance.test.mjs +323 -0
- package/dist/esm/multiInstance.test.mjs.map +1 -0
- package/dist/esm/multiInstance.test.native.js +385 -0
- package/dist/esm/multiInstance.test.native.js.map +1 -0
- package/dist/esm/multiInstanceNested.test.mjs +207 -0
- package/dist/esm/multiInstanceNested.test.mjs.map +1 -0
- package/dist/esm/multiInstanceNested.test.native.js +252 -0
- package/dist/esm/multiInstanceNested.test.native.js.map +1 -0
- package/dist/esm/run.mjs +5 -5
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/run.native.js +6 -5
- package/dist/esm/run.native.js.map +1 -1
- package/dist/esm/zeroRunner.mjs +4 -1
- package/dist/esm/zeroRunner.mjs.map +1 -1
- package/dist/esm/zeroRunner.native.js +4 -1
- package/dist/esm/zeroRunner.native.js.map +1 -1
- package/package.json +5 -3
- package/readme.md +59 -0
- package/src/combineZeroClients.tsx +186 -0
- package/src/createUseQuery.tsx +175 -12
- package/src/createZeroClient.tsx +107 -42
- package/src/index.ts +1 -0
- package/src/instanceRegistry.ts +75 -0
- package/src/multiInstance.test.tsx +284 -0
- package/src/multiInstanceNested.test.tsx +205 -0
- package/src/run.ts +7 -6
- package/src/zeroRunner.ts +7 -1
- package/types/combineZeroClients.d.ts +38 -0
- package/types/combineZeroClients.d.ts.map +1 -0
- package/types/createUseQuery.d.ts +15 -0
- package/types/createUseQuery.d.ts.map +1 -1
- package/types/createZeroClient.d.ts +7 -2
- package/types/createZeroClient.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/instanceRegistry.d.ts +15 -0
- package/types/instanceRegistry.d.ts.map +1 -0
- package/types/multiInstance.test.d.ts +2 -0
- package/types/multiInstance.test.d.ts.map +1 -0
- package/types/multiInstanceNested.test.d.ts +5 -0
- package/types/multiInstanceNested.test.d.ts.map +1 -0
- package/types/run.d.ts.map +1 -1
- package/types/zeroRunner.d.ts +3 -1
- package/types/zeroRunner.d.ts.map +1 -1
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
import { createSchema, string, table } from "@rocicorp/zero";
|
|
2
|
+
import { createEmitter } from "@take-out/helpers";
|
|
3
|
+
import { describe, expect, test, vi } from "vitest";
|
|
4
|
+
import { combineZeroClients } from "./combineZeroClients.native.js";
|
|
5
|
+
import { createZeroClient } from "./createZeroClient.native.js";
|
|
6
|
+
import { getInstanceForNamespace, registerClientInstance } from "./instanceRegistry.native.js";
|
|
7
|
+
import { registerQuery } from "./queryRegistry.native.js";
|
|
8
|
+
import { run } from "./run.native.js";
|
|
9
|
+
import { setRunner } from "./zeroRunner.native.js";
|
|
10
|
+
var userTable = table("user").columns({
|
|
11
|
+
id: string(),
|
|
12
|
+
name: string()
|
|
13
|
+
}).primaryKey("id");
|
|
14
|
+
var taskTable = table("task").columns({
|
|
15
|
+
id: string(),
|
|
16
|
+
title: string()
|
|
17
|
+
}).primaryKey("id");
|
|
18
|
+
var schema = createSchema({
|
|
19
|
+
tables: [userTable, taskTable]
|
|
20
|
+
});
|
|
21
|
+
var makeQueryFn = function () {
|
|
22
|
+
return function (args) {
|
|
23
|
+
return args;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
function makeClient(instanceName, namespace) {
|
|
27
|
+
var byId = makeQueryFn();
|
|
28
|
+
return {
|
|
29
|
+
byId,
|
|
30
|
+
client: createZeroClient({
|
|
31
|
+
schema,
|
|
32
|
+
models: {},
|
|
33
|
+
groupedQueries: {
|
|
34
|
+
[namespace]: {
|
|
35
|
+
byId
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
instanceName
|
|
39
|
+
})
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function fakeClient(name, namespaces, zeroStub) {
|
|
43
|
+
registerClientInstance({
|
|
44
|
+
name,
|
|
45
|
+
namespaces,
|
|
46
|
+
// boundary stub: dispatch tests never resolve queries through it
|
|
47
|
+
customQueries: {}
|
|
48
|
+
});
|
|
49
|
+
return {
|
|
50
|
+
instanceName: name,
|
|
51
|
+
useQuery: vi.fn(function () {
|
|
52
|
+
return `${name}-useQuery`;
|
|
53
|
+
}),
|
|
54
|
+
useQueryDirect: vi.fn(function () {
|
|
55
|
+
return `${name}-useQueryDirect`;
|
|
56
|
+
}),
|
|
57
|
+
usePermission: vi.fn(function () {
|
|
58
|
+
return `${name}-usePermission`;
|
|
59
|
+
}),
|
|
60
|
+
usePermissionDirect: vi.fn(function () {
|
|
61
|
+
return `${name}-usePermissionDirect`;
|
|
62
|
+
}),
|
|
63
|
+
zero: zeroStub,
|
|
64
|
+
preload: vi.fn(function () {
|
|
65
|
+
return `${name}-preload`;
|
|
66
|
+
}),
|
|
67
|
+
getQuery: vi.fn(function () {
|
|
68
|
+
return `${name}-getQuery`;
|
|
69
|
+
}),
|
|
70
|
+
zeroEvents: createEmitter(`zero:test-${name}`, null),
|
|
71
|
+
ControlQueries: function (param) {
|
|
72
|
+
var {
|
|
73
|
+
children
|
|
74
|
+
} = param;
|
|
75
|
+
return children;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
describe("multi-instance namespace dispatch", function () {
|
|
80
|
+
test("run() dispatches named queries to the owning instance runner", async function () {
|
|
81
|
+
var control = makeClient("run-control", "runUser");
|
|
82
|
+
var project = makeClient("run-project", "runTask");
|
|
83
|
+
var controlRunner = vi.fn(async function () {
|
|
84
|
+
for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
85
|
+
_args[_key] = arguments[_key];
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
from: "control"
|
|
89
|
+
};
|
|
90
|
+
});
|
|
91
|
+
var projectRunner = vi.fn(async function () {
|
|
92
|
+
for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
93
|
+
_args[_key] = arguments[_key];
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
from: "project"
|
|
97
|
+
};
|
|
98
|
+
});
|
|
99
|
+
getInstanceForNamespace("runUser").runner = controlRunner;
|
|
100
|
+
getInstanceForNamespace("runTask").runner = projectRunner;
|
|
101
|
+
var ambientRunner = vi.fn(async function () {
|
|
102
|
+
for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
103
|
+
_args[_key] = arguments[_key];
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
from: "ambient"
|
|
107
|
+
};
|
|
108
|
+
});
|
|
109
|
+
setRunner(ambientRunner);
|
|
110
|
+
await expect(run(control.byId, {
|
|
111
|
+
id: "1"
|
|
112
|
+
})).resolves.toEqual({
|
|
113
|
+
from: "control"
|
|
114
|
+
});
|
|
115
|
+
await expect(run(project.byId, {
|
|
116
|
+
id: "2"
|
|
117
|
+
})).resolves.toEqual({
|
|
118
|
+
from: "project"
|
|
119
|
+
});
|
|
120
|
+
expect(ambientRunner).not.toHaveBeenCalled();
|
|
121
|
+
var request = controlRunner.mock.calls[0][0];
|
|
122
|
+
expect(request.query.queryName).toBe("runUser.byId");
|
|
123
|
+
});
|
|
124
|
+
test("a claimed namespace with an unmounted instance uses the ambient runner (server path)", async function () {
|
|
125
|
+
var {
|
|
126
|
+
byId
|
|
127
|
+
} = makeClient("srv-instance", "srvThing");
|
|
128
|
+
var ambient = vi.fn(async function () {
|
|
129
|
+
for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
130
|
+
_args[_key] = arguments[_key];
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
from: "ambient"
|
|
134
|
+
};
|
|
135
|
+
});
|
|
136
|
+
setRunner(ambient);
|
|
137
|
+
await expect(run(byId, {
|
|
138
|
+
id: "1"
|
|
139
|
+
})).resolves.toEqual({
|
|
140
|
+
from: "ambient"
|
|
141
|
+
});
|
|
142
|
+
expect(ambient).toHaveBeenCalledTimes(1);
|
|
143
|
+
});
|
|
144
|
+
test("duplicate namespace claim throws at create time", function () {
|
|
145
|
+
makeClient("dup-a", "dupNs");
|
|
146
|
+
expect(function () {
|
|
147
|
+
return makeClient("dup-b", "dupNs");
|
|
148
|
+
}).toThrow(/already claimed/);
|
|
149
|
+
});
|
|
150
|
+
test("re-creating an instance under the same name re-claims without throwing (hmr)", function () {
|
|
151
|
+
var _getInstanceForNamespace;
|
|
152
|
+
makeClient("hmr", "hmrNs");
|
|
153
|
+
expect(function () {
|
|
154
|
+
return makeClient("hmr", "hmrNs");
|
|
155
|
+
}).not.toThrow();
|
|
156
|
+
expect((_getInstanceForNamespace = getInstanceForNamespace("hmrNs")) === null || _getInstanceForNamespace === void 0 ? void 0 : _getInstanceForNamespace.name).toBe("hmr");
|
|
157
|
+
});
|
|
158
|
+
test("model namespaces are claimed too", function () {
|
|
159
|
+
var _getInstanceForNamespace;
|
|
160
|
+
var models = {
|
|
161
|
+
mdlThing: {
|
|
162
|
+
mutate: {
|
|
163
|
+
insert: async function () {}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
createZeroClient({
|
|
168
|
+
schema,
|
|
169
|
+
models,
|
|
170
|
+
groupedQueries: {},
|
|
171
|
+
instanceName: "mdl-a"
|
|
172
|
+
});
|
|
173
|
+
expect((_getInstanceForNamespace = getInstanceForNamespace("mdlThing")) === null || _getInstanceForNamespace === void 0 ? void 0 : _getInstanceForNamespace.name).toBe("mdl-a");
|
|
174
|
+
expect(function () {
|
|
175
|
+
return createZeroClient({
|
|
176
|
+
schema,
|
|
177
|
+
models,
|
|
178
|
+
groupedQueries: {},
|
|
179
|
+
instanceName: "mdl-b"
|
|
180
|
+
});
|
|
181
|
+
}).toThrow(/already claimed/);
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
describe("multi-instance isolation", function () {
|
|
185
|
+
test("each instance has an isolated zeroEvents emitter", function () {
|
|
186
|
+
var _a_zeroEvents_options, _b_zeroEvents_options;
|
|
187
|
+
var {
|
|
188
|
+
client: a
|
|
189
|
+
} = makeClient("emit-a", "emitA");
|
|
190
|
+
var {
|
|
191
|
+
client: b
|
|
192
|
+
} = makeClient("emit-b", "emitB");
|
|
193
|
+
expect(a.zeroEvents).not.toBe(b.zeroEvents);
|
|
194
|
+
expect((_a_zeroEvents_options = a.zeroEvents.options) === null || _a_zeroEvents_options === void 0 ? void 0 : _a_zeroEvents_options.name).toBe("zero:emit-a");
|
|
195
|
+
expect((_b_zeroEvents_options = b.zeroEvents.options) === null || _b_zeroEvents_options === void 0 ? void 0 : _b_zeroEvents_options.name).toBe("zero:emit-b");
|
|
196
|
+
var seenByB = [];
|
|
197
|
+
b.zeroEvents.listen(function (event) {
|
|
198
|
+
return seenByB.push(event);
|
|
199
|
+
});
|
|
200
|
+
a.zeroEvents.emit({
|
|
201
|
+
type: "error",
|
|
202
|
+
message: "a-only"
|
|
203
|
+
});
|
|
204
|
+
expect(seenByB).toEqual([]);
|
|
205
|
+
expect(a.zeroEvents.value).toEqual({
|
|
206
|
+
type: "error",
|
|
207
|
+
message: "a-only"
|
|
208
|
+
});
|
|
209
|
+
expect(b.zeroEvents.value).toBe(null);
|
|
210
|
+
});
|
|
211
|
+
test("the default instance keeps the legacy emitter name", function () {
|
|
212
|
+
var _client_zeroEvents_options;
|
|
213
|
+
var {
|
|
214
|
+
client
|
|
215
|
+
} = makeClient("default", "defaultNs");
|
|
216
|
+
expect((_client_zeroEvents_options = client.zeroEvents.options) === null || _client_zeroEvents_options === void 0 ? void 0 : _client_zeroEvents_options.name).toBe("zero");
|
|
217
|
+
});
|
|
218
|
+
test("each instance has its own unmounted zero proxy", function () {
|
|
219
|
+
var {
|
|
220
|
+
client: a
|
|
221
|
+
} = makeClient("proxy-a", "proxyA");
|
|
222
|
+
var {
|
|
223
|
+
client: b
|
|
224
|
+
} = makeClient("proxy-b", "proxyB");
|
|
225
|
+
expect(a.zero === b.zero).toBe(false);
|
|
226
|
+
expect(function () {
|
|
227
|
+
return a.zero.clientID;
|
|
228
|
+
}).toThrow(/not initialized/);
|
|
229
|
+
expect(function () {
|
|
230
|
+
return b.zero.clientID;
|
|
231
|
+
}).toThrow(/not initialized/);
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
describe("combineZeroClients facade", function () {
|
|
235
|
+
test("zero.mutate dispatches by model namespace, rest forwards to primary", function () {
|
|
236
|
+
var insertSpy = vi.fn();
|
|
237
|
+
var updateSpy = vi.fn();
|
|
238
|
+
var control = fakeClient("fz-control", ["fzUser"], {
|
|
239
|
+
mutate: {
|
|
240
|
+
fzUser: {
|
|
241
|
+
insert: insertSpy
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
userID: "primary-user"
|
|
245
|
+
});
|
|
246
|
+
var project = fakeClient("fz-project", ["fzTask"], {
|
|
247
|
+
mutate: {
|
|
248
|
+
fzTask: {
|
|
249
|
+
update: updateSpy
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
userID: "project-user"
|
|
253
|
+
});
|
|
254
|
+
var combined = combineZeroClients(control, project);
|
|
255
|
+
var zero = combined.zero;
|
|
256
|
+
zero.mutate.fzUser.insert({
|
|
257
|
+
id: "1"
|
|
258
|
+
});
|
|
259
|
+
zero.mutate.fzTask.update({
|
|
260
|
+
id: "2"
|
|
261
|
+
});
|
|
262
|
+
expect(insertSpy).toHaveBeenCalledWith({
|
|
263
|
+
id: "1"
|
|
264
|
+
});
|
|
265
|
+
expect(updateSpy).toHaveBeenCalledWith({
|
|
266
|
+
id: "2"
|
|
267
|
+
});
|
|
268
|
+
expect(zero.userID).toBe("primary-user");
|
|
269
|
+
expect(zero.mutate.unknownNs).toBe(void 0);
|
|
270
|
+
});
|
|
271
|
+
test("useQuery/preload/getQuery/usePermission dispatch by namespace", function () {
|
|
272
|
+
var control = fakeClient("fq-control", ["fqUser"], {});
|
|
273
|
+
var project = fakeClient("fq-project", ["fqTask"], {});
|
|
274
|
+
var userQuery = makeQueryFn();
|
|
275
|
+
var taskQuery = makeQueryFn();
|
|
276
|
+
registerQuery(userQuery, "fqUser.byId");
|
|
277
|
+
registerQuery(taskQuery, "fqTask.byId");
|
|
278
|
+
var combined = combineZeroClients(control, project);
|
|
279
|
+
var useQuery = combined.useQuery;
|
|
280
|
+
var preload = combined.preload;
|
|
281
|
+
var getQuery = combined.getQuery;
|
|
282
|
+
var usePermission = combined.usePermission;
|
|
283
|
+
useQuery(userQuery, {
|
|
284
|
+
id: "1"
|
|
285
|
+
});
|
|
286
|
+
expect(control.useQueryDirect).toHaveBeenCalledWith(userQuery, {
|
|
287
|
+
id: "1"
|
|
288
|
+
});
|
|
289
|
+
expect(control.useQuery).not.toHaveBeenCalled();
|
|
290
|
+
expect(project.useQuery).not.toHaveBeenCalled();
|
|
291
|
+
useQuery(taskQuery, {
|
|
292
|
+
id: "2"
|
|
293
|
+
});
|
|
294
|
+
expect(project.useQuery).toHaveBeenCalledWith(taskQuery, {
|
|
295
|
+
id: "2"
|
|
296
|
+
});
|
|
297
|
+
expect(project.useQueryDirect).not.toHaveBeenCalled();
|
|
298
|
+
preload(taskQuery, {
|
|
299
|
+
id: "3"
|
|
300
|
+
});
|
|
301
|
+
expect(project.preload).toHaveBeenCalledWith(taskQuery, {
|
|
302
|
+
id: "3"
|
|
303
|
+
});
|
|
304
|
+
expect(control.preload).not.toHaveBeenCalled();
|
|
305
|
+
getQuery(userQuery, {
|
|
306
|
+
id: "4"
|
|
307
|
+
});
|
|
308
|
+
expect(control.getQuery).toHaveBeenCalledWith(userQuery, {
|
|
309
|
+
id: "4"
|
|
310
|
+
});
|
|
311
|
+
expect(project.getQuery).not.toHaveBeenCalled();
|
|
312
|
+
var anonymous = makeQueryFn();
|
|
313
|
+
useQuery(anonymous, {
|
|
314
|
+
id: "5"
|
|
315
|
+
});
|
|
316
|
+
expect(control.useQueryDirect).toHaveBeenCalledWith(anonymous, {
|
|
317
|
+
id: "5"
|
|
318
|
+
});
|
|
319
|
+
usePermission("fqTask", "row-1");
|
|
320
|
+
expect(project.usePermission).toHaveBeenCalledWith("fqTask", "row-1");
|
|
321
|
+
expect(project.usePermissionDirect).not.toHaveBeenCalled();
|
|
322
|
+
usePermission("fqUser", "row-2");
|
|
323
|
+
expect(control.usePermissionDirect).toHaveBeenCalledWith("fqUser", "row-2");
|
|
324
|
+
expect(control.usePermission).not.toHaveBeenCalled();
|
|
325
|
+
});
|
|
326
|
+
test("the inner option overrides which client uses the context path", function () {
|
|
327
|
+
var a = fakeClient("inner-a", ["innerA"], {});
|
|
328
|
+
var b = fakeClient("inner-b", ["innerB"], {});
|
|
329
|
+
var aQuery = makeQueryFn();
|
|
330
|
+
var bQuery = makeQueryFn();
|
|
331
|
+
registerQuery(aQuery, "innerA.byId");
|
|
332
|
+
registerQuery(bQuery, "innerB.byId");
|
|
333
|
+
var combined = combineZeroClients(a, b, {
|
|
334
|
+
inner: "inner-a"
|
|
335
|
+
});
|
|
336
|
+
var useQuery = combined.useQuery;
|
|
337
|
+
useQuery(aQuery, {
|
|
338
|
+
id: "1"
|
|
339
|
+
});
|
|
340
|
+
expect(a.useQuery).toHaveBeenCalledWith(aQuery, {
|
|
341
|
+
id: "1"
|
|
342
|
+
});
|
|
343
|
+
expect(a.useQueryDirect).not.toHaveBeenCalled();
|
|
344
|
+
useQuery(bQuery, {
|
|
345
|
+
id: "2"
|
|
346
|
+
});
|
|
347
|
+
expect(b.useQueryDirect).toHaveBeenCalledWith(bQuery, {
|
|
348
|
+
id: "2"
|
|
349
|
+
});
|
|
350
|
+
expect(b.useQuery).not.toHaveBeenCalled();
|
|
351
|
+
expect(function () {
|
|
352
|
+
return combineZeroClients(a, b, {
|
|
353
|
+
inner: "nope"
|
|
354
|
+
});
|
|
355
|
+
}).toThrow(/not one of the passed clients/);
|
|
356
|
+
});
|
|
357
|
+
test("combined zeroEvents relays every instance", function () {
|
|
358
|
+
var _a_zeroEvents_value, _b_zeroEvents_value;
|
|
359
|
+
var {
|
|
360
|
+
client: a
|
|
361
|
+
} = makeClient("relay-a", "relayA");
|
|
362
|
+
var {
|
|
363
|
+
client: b
|
|
364
|
+
} = makeClient("relay-b", "relayB");
|
|
365
|
+
var combined = combineZeroClients(a, b);
|
|
366
|
+
var seen = [];
|
|
367
|
+
combined.zeroEvents.listen(function (event) {
|
|
368
|
+
return seen.push(event);
|
|
369
|
+
});
|
|
370
|
+
a.zeroEvents.emit({
|
|
371
|
+
type: "error",
|
|
372
|
+
message: "from-a"
|
|
373
|
+
});
|
|
374
|
+
b.zeroEvents.emit({
|
|
375
|
+
type: "error",
|
|
376
|
+
message: "from-b"
|
|
377
|
+
});
|
|
378
|
+
expect(seen.map(function (event) {
|
|
379
|
+
return event === null || event === void 0 ? void 0 : event.message;
|
|
380
|
+
})).toEqual(["from-a", "from-b"]);
|
|
381
|
+
expect((_a_zeroEvents_value = a.zeroEvents.value) === null || _a_zeroEvents_value === void 0 ? void 0 : _a_zeroEvents_value.message).toBe("from-a");
|
|
382
|
+
expect((_b_zeroEvents_value = b.zeroEvents.value) === null || _b_zeroEvents_value === void 0 ? void 0 : _b_zeroEvents_value.message).toBe("from-b");
|
|
383
|
+
});
|
|
384
|
+
});
|
|
385
|
+
//# sourceMappingURL=multiInstance.test.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createSchema","string","table","createEmitter","describe","expect","test","vi","combineZeroClients","createZeroClient","getInstanceForNamespace","registerClientInstance","registerQuery","run","setRunner","userTable","columns","id","name","primaryKey","taskTable","title","schema","tables","makeQueryFn","args","makeClient","instanceName","namespace","byId","client","models","groupedQueries","fakeClient","namespaces","zeroStub","customQueries","useQuery","fn","useQueryDirect","usePermission","usePermissionDirect","zero","preload","getQuery","zeroEvents","ControlQueries","param","children","control","project","controlRunner","_len","arguments","length","_args","Array","_key","from","projectRunner","runner","ambientRunner","resolves","toEqual","not","toHaveBeenCalled","request","mock","calls","query","queryName","toBe","ambient","toHaveBeenCalledTimes","toThrow","_getInstanceForNamespace","mdlThing","mutate","insert","_a_zeroEvents_options","_b_zeroEvents_options","a","b","options","seenByB","listen","event","push","emit","type","message","value","_client_zeroEvents_options"],"sources":["../../src/multiInstance.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { createSchema, string, table } from "@rocicorp/zero";
|
|
2
|
+
import { act } from "react";
|
|
3
|
+
import { createRoot } from "react-dom/client";
|
|
4
|
+
import { afterEach, beforeEach, expect, test } from "vitest";
|
|
5
|
+
import { combineZeroClients } from "./combineZeroClients.mjs";
|
|
6
|
+
import { createZeroClient } from "./createZeroClient.mjs";
|
|
7
|
+
import { zql } from "./zql.mjs";
|
|
8
|
+
import { jsx } from "react/jsx-runtime";
|
|
9
|
+
globalThis.IS_REACT_ACT_ENVIRONMENT = true;
|
|
10
|
+
const userTable = table("user").columns({
|
|
11
|
+
id: string(),
|
|
12
|
+
name: string()
|
|
13
|
+
}).primaryKey("id");
|
|
14
|
+
const taskTable = table("task").columns({
|
|
15
|
+
id: string(),
|
|
16
|
+
title: string()
|
|
17
|
+
}).primaryKey("id");
|
|
18
|
+
const schema = createSchema({
|
|
19
|
+
tables: [userTable, taskTable]
|
|
20
|
+
});
|
|
21
|
+
const controlModels = {
|
|
22
|
+
user: {
|
|
23
|
+
mutate: {
|
|
24
|
+
seed: async (ctx, row) => {
|
|
25
|
+
await ctx.tx.mutate.user.upsert(row);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const ctlUserById = args => zql.user.where("id", args.id).one();
|
|
31
|
+
const control = createZeroClient({
|
|
32
|
+
schema,
|
|
33
|
+
models: controlModels,
|
|
34
|
+
groupedQueries: {
|
|
35
|
+
ctlUser: {
|
|
36
|
+
byId: ctlUserById
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
instanceName: "nested-control"
|
|
40
|
+
});
|
|
41
|
+
const projectModels = {
|
|
42
|
+
prjSeed: {
|
|
43
|
+
mutate: {
|
|
44
|
+
seedUser: async (ctx, row) => {
|
|
45
|
+
await ctx.tx.mutate.user.upsert(row);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
const prjTaskById = args => zql.task.where("id", args.id).one();
|
|
51
|
+
const project = createZeroClient({
|
|
52
|
+
schema,
|
|
53
|
+
models: projectModels,
|
|
54
|
+
groupedQueries: {
|
|
55
|
+
prjTask: {
|
|
56
|
+
byId: prjTaskById
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
instanceName: "nested-project"
|
|
60
|
+
});
|
|
61
|
+
const combined = combineZeroClients(control, project);
|
|
62
|
+
let root;
|
|
63
|
+
let container;
|
|
64
|
+
beforeEach(() => {
|
|
65
|
+
resetProbe();
|
|
66
|
+
container = document.createElement("div");
|
|
67
|
+
document.body.appendChild(container);
|
|
68
|
+
root = createRoot(container);
|
|
69
|
+
});
|
|
70
|
+
afterEach(async () => {
|
|
71
|
+
await act(async () => root.unmount());
|
|
72
|
+
container.remove();
|
|
73
|
+
});
|
|
74
|
+
const render = ui => act(async () => root.render(ui));
|
|
75
|
+
async function waitFor(condition, what) {
|
|
76
|
+
for (let i = 0; i < 200; i++) {
|
|
77
|
+
if (condition()) return;
|
|
78
|
+
await act(async () => {
|
|
79
|
+
await new Promise(resolve => setTimeout(resolve, 5));
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
throw new Error(`timed out waiting for ${what}`);
|
|
83
|
+
}
|
|
84
|
+
const probe = {
|
|
85
|
+
data: void 0,
|
|
86
|
+
renders: 0
|
|
87
|
+
};
|
|
88
|
+
function resetProbe() {
|
|
89
|
+
probe.data = void 0;
|
|
90
|
+
probe.renders = 0;
|
|
91
|
+
}
|
|
92
|
+
function ControlUserProbe({
|
|
93
|
+
id
|
|
94
|
+
}) {
|
|
95
|
+
const [data] = combined.useQuery(ctlUserById, {
|
|
96
|
+
id
|
|
97
|
+
});
|
|
98
|
+
probe.data = data ?? void 0;
|
|
99
|
+
probe.renders++;
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
const seedControl = async row => {
|
|
103
|
+
await act(async () => {
|
|
104
|
+
await control.zero.mutate.user.seed(row).client;
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
const seedProject = async row => {
|
|
108
|
+
await act(async () => {
|
|
109
|
+
await project.zero.mutate.prjSeed.seedUser(row).client;
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
test("outer-instance query reads the OUTER store under nested providers", async () => {
|
|
113
|
+
await render(/* @__PURE__ */jsx(control.ProvideZero, {
|
|
114
|
+
server: null,
|
|
115
|
+
userID: "t1-ctl",
|
|
116
|
+
children: /* @__PURE__ */jsx(project.ProvideZero, {
|
|
117
|
+
server: null,
|
|
118
|
+
userID: "t1-prj",
|
|
119
|
+
children: /* @__PURE__ */jsx(ControlUserProbe, {
|
|
120
|
+
id: "u1"
|
|
121
|
+
})
|
|
122
|
+
})
|
|
123
|
+
}));
|
|
124
|
+
await waitFor(() => probe.renders > 0, "probe mount");
|
|
125
|
+
await seedControl({
|
|
126
|
+
id: "u1",
|
|
127
|
+
name: "from-control"
|
|
128
|
+
});
|
|
129
|
+
await seedProject({
|
|
130
|
+
id: "u1",
|
|
131
|
+
name: "from-project"
|
|
132
|
+
});
|
|
133
|
+
await waitFor(() => probe.data !== void 0, "control row visible");
|
|
134
|
+
expect(probe.data?.name).toBe("from-control");
|
|
135
|
+
});
|
|
136
|
+
test("inner provider unmount/remount does not break outer-instance subscriptions", async () => {
|
|
137
|
+
const App = ({
|
|
138
|
+
showInner
|
|
139
|
+
}) => /* @__PURE__ */jsx(control.ProvideZero, {
|
|
140
|
+
server: null,
|
|
141
|
+
userID: "t2-ctl",
|
|
142
|
+
children: showInner ? /* @__PURE__ */jsx(project.ProvideZero, {
|
|
143
|
+
server: null,
|
|
144
|
+
userID: "t2-prj",
|
|
145
|
+
children: /* @__PURE__ */jsx(ControlUserProbe, {
|
|
146
|
+
id: "u2"
|
|
147
|
+
})
|
|
148
|
+
}) : /* @__PURE__ */jsx(ControlUserProbe, {
|
|
149
|
+
id: "u2"
|
|
150
|
+
})
|
|
151
|
+
});
|
|
152
|
+
await render(/* @__PURE__ */jsx(App, {
|
|
153
|
+
showInner: true
|
|
154
|
+
}));
|
|
155
|
+
await waitFor(() => probe.renders > 0, "probe mount");
|
|
156
|
+
await seedControl({
|
|
157
|
+
id: "u2",
|
|
158
|
+
name: "v1"
|
|
159
|
+
});
|
|
160
|
+
await waitFor(() => probe.data?.name === "v1", "v1 visible");
|
|
161
|
+
await render(/* @__PURE__ */jsx(App, {
|
|
162
|
+
showInner: false
|
|
163
|
+
}));
|
|
164
|
+
await seedControl({
|
|
165
|
+
id: "u2",
|
|
166
|
+
name: "v2"
|
|
167
|
+
});
|
|
168
|
+
await waitFor(() => probe.data?.name === "v2", "v2 visible after inner unmount");
|
|
169
|
+
await render(/* @__PURE__ */jsx(App, {
|
|
170
|
+
showInner: true
|
|
171
|
+
}));
|
|
172
|
+
await seedControl({
|
|
173
|
+
id: "u2",
|
|
174
|
+
name: "v3"
|
|
175
|
+
});
|
|
176
|
+
await waitFor(() => probe.data?.name === "v3", "v3 visible after inner remount");
|
|
177
|
+
});
|
|
178
|
+
test("direct-path views re-materialize when the owning instance rotates", async () => {
|
|
179
|
+
const App = ({
|
|
180
|
+
userID
|
|
181
|
+
}) => /* @__PURE__ */jsx(control.ProvideZero, {
|
|
182
|
+
server: null,
|
|
183
|
+
userID,
|
|
184
|
+
children: /* @__PURE__ */jsx(ControlUserProbe, {
|
|
185
|
+
id: "u3"
|
|
186
|
+
})
|
|
187
|
+
});
|
|
188
|
+
await render(/* @__PURE__ */jsx(App, {
|
|
189
|
+
userID: "rot-1"
|
|
190
|
+
}));
|
|
191
|
+
await waitFor(() => probe.renders > 0, "probe mount");
|
|
192
|
+
await seedControl({
|
|
193
|
+
id: "u3",
|
|
194
|
+
name: "before-rotation"
|
|
195
|
+
});
|
|
196
|
+
await waitFor(() => probe.data?.name === "before-rotation", "pre-rotation row");
|
|
197
|
+
await render(/* @__PURE__ */jsx(App, {
|
|
198
|
+
userID: "rot-2"
|
|
199
|
+
}));
|
|
200
|
+
await waitFor(() => probe.data === void 0, "view reset to the new empty store");
|
|
201
|
+
await seedControl({
|
|
202
|
+
id: "u3",
|
|
203
|
+
name: "after-rotation"
|
|
204
|
+
});
|
|
205
|
+
await waitFor(() => probe.data?.name === "after-rotation", "post-rotation row");
|
|
206
|
+
});
|
|
207
|
+
//# sourceMappingURL=multiInstanceNested.test.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createSchema","string","table","act","createRoot","afterEach","beforeEach","expect","test","combineZeroClients","createZeroClient","zql","jsx","globalThis","IS_REACT_ACT_ENVIRONMENT","userTable","columns","id","name","primaryKey","taskTable","title","schema","tables","controlModels","user","mutate","seed","ctx","row","tx","upsert","ctlUserById","args","where","one","control","models","groupedQueries","ctlUser","byId","instanceName","projectModels","prjSeed","seedUser","prjTaskById","task","project","prjTask","combined","root","container","resetProbe","document","createElement","body","appendChild","unmount","remove","render","ui","waitFor","condition","what","i","Promise","resolve","setTimeout","Error","probe","data","renders","ControlUserProbe","useQuery","seedControl","zero","client","seedProject","ProvideZero","server","userID","children","toBe","App","showInner"],"sources":["../../src/multiInstanceNested.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|