on-zero 0.4.22 → 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 +89 -12
- package/dist/cjs/createZeroClient.native.js +134 -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 +93 -16
- package/dist/esm/createZeroClient.mjs.map +1 -1
- package/dist/esm/createZeroClient.native.js +138 -47
- 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 +227 -54
- 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 +10 -4
- 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,323 @@
|
|
|
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.mjs";
|
|
5
|
+
import { createZeroClient } from "./createZeroClient.mjs";
|
|
6
|
+
import { getInstanceForNamespace, registerClientInstance } from "./instanceRegistry.mjs";
|
|
7
|
+
import { registerQuery } from "./queryRegistry.mjs";
|
|
8
|
+
import { run } from "./run.mjs";
|
|
9
|
+
import { setRunner } from "./zeroRunner.mjs";
|
|
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 makeQueryFn = () => args => args;
|
|
22
|
+
function makeClient(instanceName, namespace) {
|
|
23
|
+
const byId = makeQueryFn();
|
|
24
|
+
return {
|
|
25
|
+
byId,
|
|
26
|
+
client: createZeroClient({
|
|
27
|
+
schema,
|
|
28
|
+
models: {},
|
|
29
|
+
groupedQueries: {
|
|
30
|
+
[namespace]: {
|
|
31
|
+
byId
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
instanceName
|
|
35
|
+
})
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function fakeClient(name, namespaces, zeroStub) {
|
|
39
|
+
registerClientInstance({
|
|
40
|
+
name,
|
|
41
|
+
namespaces,
|
|
42
|
+
// boundary stub: dispatch tests never resolve queries through it
|
|
43
|
+
customQueries: {}
|
|
44
|
+
});
|
|
45
|
+
return {
|
|
46
|
+
instanceName: name,
|
|
47
|
+
useQuery: vi.fn(() => `${name}-useQuery`),
|
|
48
|
+
useQueryDirect: vi.fn(() => `${name}-useQueryDirect`),
|
|
49
|
+
usePermission: vi.fn(() => `${name}-usePermission`),
|
|
50
|
+
usePermissionDirect: vi.fn(() => `${name}-usePermissionDirect`),
|
|
51
|
+
zero: zeroStub,
|
|
52
|
+
preload: vi.fn(() => `${name}-preload`),
|
|
53
|
+
getQuery: vi.fn(() => `${name}-getQuery`),
|
|
54
|
+
zeroEvents: createEmitter(`zero:test-${name}`, null),
|
|
55
|
+
ControlQueries: ({
|
|
56
|
+
children
|
|
57
|
+
}) => children
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
describe("multi-instance namespace dispatch", () => {
|
|
61
|
+
test("run() dispatches named queries to the owning instance runner", async () => {
|
|
62
|
+
const control = makeClient("run-control", "runUser");
|
|
63
|
+
const project = makeClient("run-project", "runTask");
|
|
64
|
+
const controlRunner = vi.fn(async (..._args) => ({
|
|
65
|
+
from: "control"
|
|
66
|
+
}));
|
|
67
|
+
const projectRunner = vi.fn(async (..._args) => ({
|
|
68
|
+
from: "project"
|
|
69
|
+
}));
|
|
70
|
+
getInstanceForNamespace("runUser").runner = controlRunner;
|
|
71
|
+
getInstanceForNamespace("runTask").runner = projectRunner;
|
|
72
|
+
const ambientRunner = vi.fn(async (..._args) => ({
|
|
73
|
+
from: "ambient"
|
|
74
|
+
}));
|
|
75
|
+
setRunner(ambientRunner);
|
|
76
|
+
await expect(run(control.byId, {
|
|
77
|
+
id: "1"
|
|
78
|
+
})).resolves.toEqual({
|
|
79
|
+
from: "control"
|
|
80
|
+
});
|
|
81
|
+
await expect(run(project.byId, {
|
|
82
|
+
id: "2"
|
|
83
|
+
})).resolves.toEqual({
|
|
84
|
+
from: "project"
|
|
85
|
+
});
|
|
86
|
+
expect(ambientRunner).not.toHaveBeenCalled();
|
|
87
|
+
const request = controlRunner.mock.calls[0][0];
|
|
88
|
+
expect(request.query.queryName).toBe("runUser.byId");
|
|
89
|
+
});
|
|
90
|
+
test("a claimed namespace with an unmounted instance uses the ambient runner (server path)", async () => {
|
|
91
|
+
const {
|
|
92
|
+
byId
|
|
93
|
+
} = makeClient("srv-instance", "srvThing");
|
|
94
|
+
const ambient = vi.fn(async (..._args) => ({
|
|
95
|
+
from: "ambient"
|
|
96
|
+
}));
|
|
97
|
+
setRunner(ambient);
|
|
98
|
+
await expect(run(byId, {
|
|
99
|
+
id: "1"
|
|
100
|
+
})).resolves.toEqual({
|
|
101
|
+
from: "ambient"
|
|
102
|
+
});
|
|
103
|
+
expect(ambient).toHaveBeenCalledTimes(1);
|
|
104
|
+
});
|
|
105
|
+
test("duplicate namespace claim throws at create time", () => {
|
|
106
|
+
makeClient("dup-a", "dupNs");
|
|
107
|
+
expect(() => makeClient("dup-b", "dupNs")).toThrow(/already claimed/);
|
|
108
|
+
});
|
|
109
|
+
test("re-creating an instance under the same name re-claims without throwing (hmr)", () => {
|
|
110
|
+
makeClient("hmr", "hmrNs");
|
|
111
|
+
expect(() => makeClient("hmr", "hmrNs")).not.toThrow();
|
|
112
|
+
expect(getInstanceForNamespace("hmrNs")?.name).toBe("hmr");
|
|
113
|
+
});
|
|
114
|
+
test("model namespaces are claimed too", () => {
|
|
115
|
+
const models = {
|
|
116
|
+
mdlThing: {
|
|
117
|
+
mutate: {
|
|
118
|
+
insert: async () => {}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
createZeroClient({
|
|
123
|
+
schema,
|
|
124
|
+
models,
|
|
125
|
+
groupedQueries: {},
|
|
126
|
+
instanceName: "mdl-a"
|
|
127
|
+
});
|
|
128
|
+
expect(getInstanceForNamespace("mdlThing")?.name).toBe("mdl-a");
|
|
129
|
+
expect(() => createZeroClient({
|
|
130
|
+
schema,
|
|
131
|
+
models,
|
|
132
|
+
groupedQueries: {},
|
|
133
|
+
instanceName: "mdl-b"
|
|
134
|
+
})).toThrow(/already claimed/);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
describe("multi-instance isolation", () => {
|
|
138
|
+
test("each instance has an isolated zeroEvents emitter", () => {
|
|
139
|
+
const {
|
|
140
|
+
client: a
|
|
141
|
+
} = makeClient("emit-a", "emitA");
|
|
142
|
+
const {
|
|
143
|
+
client: b
|
|
144
|
+
} = makeClient("emit-b", "emitB");
|
|
145
|
+
expect(a.zeroEvents).not.toBe(b.zeroEvents);
|
|
146
|
+
expect(a.zeroEvents.options?.name).toBe("zero:emit-a");
|
|
147
|
+
expect(b.zeroEvents.options?.name).toBe("zero:emit-b");
|
|
148
|
+
const seenByB = [];
|
|
149
|
+
b.zeroEvents.listen(event => seenByB.push(event));
|
|
150
|
+
a.zeroEvents.emit({
|
|
151
|
+
type: "error",
|
|
152
|
+
message: "a-only"
|
|
153
|
+
});
|
|
154
|
+
expect(seenByB).toEqual([]);
|
|
155
|
+
expect(a.zeroEvents.value).toEqual({
|
|
156
|
+
type: "error",
|
|
157
|
+
message: "a-only"
|
|
158
|
+
});
|
|
159
|
+
expect(b.zeroEvents.value).toBe(null);
|
|
160
|
+
});
|
|
161
|
+
test("the default instance keeps the legacy emitter name", () => {
|
|
162
|
+
const {
|
|
163
|
+
client
|
|
164
|
+
} = makeClient("default", "defaultNs");
|
|
165
|
+
expect(client.zeroEvents.options?.name).toBe("zero");
|
|
166
|
+
});
|
|
167
|
+
test("each instance has its own unmounted zero proxy", () => {
|
|
168
|
+
const {
|
|
169
|
+
client: a
|
|
170
|
+
} = makeClient("proxy-a", "proxyA");
|
|
171
|
+
const {
|
|
172
|
+
client: b
|
|
173
|
+
} = makeClient("proxy-b", "proxyB");
|
|
174
|
+
expect(a.zero === b.zero).toBe(false);
|
|
175
|
+
expect(() => a.zero.clientID).toThrow(/not initialized/);
|
|
176
|
+
expect(() => b.zero.clientID).toThrow(/not initialized/);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
describe("combineZeroClients facade", () => {
|
|
180
|
+
test("zero.mutate dispatches by model namespace, rest forwards to primary", () => {
|
|
181
|
+
const insertSpy = vi.fn();
|
|
182
|
+
const updateSpy = vi.fn();
|
|
183
|
+
const control = fakeClient("fz-control", ["fzUser"], {
|
|
184
|
+
mutate: {
|
|
185
|
+
fzUser: {
|
|
186
|
+
insert: insertSpy
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
userID: "primary-user"
|
|
190
|
+
});
|
|
191
|
+
const project = fakeClient("fz-project", ["fzTask"], {
|
|
192
|
+
mutate: {
|
|
193
|
+
fzTask: {
|
|
194
|
+
update: updateSpy
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
userID: "project-user"
|
|
198
|
+
});
|
|
199
|
+
const combined = combineZeroClients(control, project);
|
|
200
|
+
const zero = combined.zero;
|
|
201
|
+
zero.mutate.fzUser.insert({
|
|
202
|
+
id: "1"
|
|
203
|
+
});
|
|
204
|
+
zero.mutate.fzTask.update({
|
|
205
|
+
id: "2"
|
|
206
|
+
});
|
|
207
|
+
expect(insertSpy).toHaveBeenCalledWith({
|
|
208
|
+
id: "1"
|
|
209
|
+
});
|
|
210
|
+
expect(updateSpy).toHaveBeenCalledWith({
|
|
211
|
+
id: "2"
|
|
212
|
+
});
|
|
213
|
+
expect(zero.userID).toBe("primary-user");
|
|
214
|
+
expect(zero.mutate.unknownNs).toBe(void 0);
|
|
215
|
+
});
|
|
216
|
+
test("useQuery/preload/getQuery/usePermission dispatch by namespace", () => {
|
|
217
|
+
const control = fakeClient("fq-control", ["fqUser"], {});
|
|
218
|
+
const project = fakeClient("fq-project", ["fqTask"], {});
|
|
219
|
+
const userQuery = makeQueryFn();
|
|
220
|
+
const taskQuery = makeQueryFn();
|
|
221
|
+
registerQuery(userQuery, "fqUser.byId");
|
|
222
|
+
registerQuery(taskQuery, "fqTask.byId");
|
|
223
|
+
const combined = combineZeroClients(control, project);
|
|
224
|
+
const useQuery = combined.useQuery;
|
|
225
|
+
const preload = combined.preload;
|
|
226
|
+
const getQuery = combined.getQuery;
|
|
227
|
+
const usePermission = combined.usePermission;
|
|
228
|
+
useQuery(userQuery, {
|
|
229
|
+
id: "1"
|
|
230
|
+
});
|
|
231
|
+
expect(control.useQueryDirect).toHaveBeenCalledWith(userQuery, {
|
|
232
|
+
id: "1"
|
|
233
|
+
});
|
|
234
|
+
expect(control.useQuery).not.toHaveBeenCalled();
|
|
235
|
+
expect(project.useQuery).not.toHaveBeenCalled();
|
|
236
|
+
useQuery(taskQuery, {
|
|
237
|
+
id: "2"
|
|
238
|
+
});
|
|
239
|
+
expect(project.useQuery).toHaveBeenCalledWith(taskQuery, {
|
|
240
|
+
id: "2"
|
|
241
|
+
});
|
|
242
|
+
expect(project.useQueryDirect).not.toHaveBeenCalled();
|
|
243
|
+
preload(taskQuery, {
|
|
244
|
+
id: "3"
|
|
245
|
+
});
|
|
246
|
+
expect(project.preload).toHaveBeenCalledWith(taskQuery, {
|
|
247
|
+
id: "3"
|
|
248
|
+
});
|
|
249
|
+
expect(control.preload).not.toHaveBeenCalled();
|
|
250
|
+
getQuery(userQuery, {
|
|
251
|
+
id: "4"
|
|
252
|
+
});
|
|
253
|
+
expect(control.getQuery).toHaveBeenCalledWith(userQuery, {
|
|
254
|
+
id: "4"
|
|
255
|
+
});
|
|
256
|
+
expect(project.getQuery).not.toHaveBeenCalled();
|
|
257
|
+
const anonymous = makeQueryFn();
|
|
258
|
+
useQuery(anonymous, {
|
|
259
|
+
id: "5"
|
|
260
|
+
});
|
|
261
|
+
expect(control.useQueryDirect).toHaveBeenCalledWith(anonymous, {
|
|
262
|
+
id: "5"
|
|
263
|
+
});
|
|
264
|
+
usePermission("fqTask", "row-1");
|
|
265
|
+
expect(project.usePermission).toHaveBeenCalledWith("fqTask", "row-1");
|
|
266
|
+
expect(project.usePermissionDirect).not.toHaveBeenCalled();
|
|
267
|
+
usePermission("fqUser", "row-2");
|
|
268
|
+
expect(control.usePermissionDirect).toHaveBeenCalledWith("fqUser", "row-2");
|
|
269
|
+
expect(control.usePermission).not.toHaveBeenCalled();
|
|
270
|
+
});
|
|
271
|
+
test("the inner option overrides which client uses the context path", () => {
|
|
272
|
+
const a = fakeClient("inner-a", ["innerA"], {});
|
|
273
|
+
const b = fakeClient("inner-b", ["innerB"], {});
|
|
274
|
+
const aQuery = makeQueryFn();
|
|
275
|
+
const bQuery = makeQueryFn();
|
|
276
|
+
registerQuery(aQuery, "innerA.byId");
|
|
277
|
+
registerQuery(bQuery, "innerB.byId");
|
|
278
|
+
const combined = combineZeroClients(a, b, {
|
|
279
|
+
inner: "inner-a"
|
|
280
|
+
});
|
|
281
|
+
const useQuery = combined.useQuery;
|
|
282
|
+
useQuery(aQuery, {
|
|
283
|
+
id: "1"
|
|
284
|
+
});
|
|
285
|
+
expect(a.useQuery).toHaveBeenCalledWith(aQuery, {
|
|
286
|
+
id: "1"
|
|
287
|
+
});
|
|
288
|
+
expect(a.useQueryDirect).not.toHaveBeenCalled();
|
|
289
|
+
useQuery(bQuery, {
|
|
290
|
+
id: "2"
|
|
291
|
+
});
|
|
292
|
+
expect(b.useQueryDirect).toHaveBeenCalledWith(bQuery, {
|
|
293
|
+
id: "2"
|
|
294
|
+
});
|
|
295
|
+
expect(b.useQuery).not.toHaveBeenCalled();
|
|
296
|
+
expect(() => combineZeroClients(a, b, {
|
|
297
|
+
inner: "nope"
|
|
298
|
+
})).toThrow(/not one of the passed clients/);
|
|
299
|
+
});
|
|
300
|
+
test("combined zeroEvents relays every instance", () => {
|
|
301
|
+
const {
|
|
302
|
+
client: a
|
|
303
|
+
} = makeClient("relay-a", "relayA");
|
|
304
|
+
const {
|
|
305
|
+
client: b
|
|
306
|
+
} = makeClient("relay-b", "relayB");
|
|
307
|
+
const combined = combineZeroClients(a, b);
|
|
308
|
+
const seen = [];
|
|
309
|
+
combined.zeroEvents.listen(event => seen.push(event));
|
|
310
|
+
a.zeroEvents.emit({
|
|
311
|
+
type: "error",
|
|
312
|
+
message: "from-a"
|
|
313
|
+
});
|
|
314
|
+
b.zeroEvents.emit({
|
|
315
|
+
type: "error",
|
|
316
|
+
message: "from-b"
|
|
317
|
+
});
|
|
318
|
+
expect(seen.map(event => event?.message)).toEqual(["from-a", "from-b"]);
|
|
319
|
+
expect(a.zeroEvents.value?.message).toBe("from-a");
|
|
320
|
+
expect(b.zeroEvents.value?.message).toBe("from-b");
|
|
321
|
+
});
|
|
322
|
+
});
|
|
323
|
+
//# sourceMappingURL=multiInstance.test.mjs.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","children","control","project","controlRunner","_args","from","projectRunner","runner","ambientRunner","resolves","toEqual","not","toHaveBeenCalled","request","mock","calls","query","queryName","toBe","ambient","toHaveBeenCalledTimes","toThrow","mdlThing","mutate","insert","a","b","options","seenByB","listen","event","push","emit","type","message","value","clientID","insertSpy","updateSpy","fzUser","userID","fzTask","update","combined","toHaveBeenCalledWith","unknownNs","userQuery","taskQuery","anonymous","aQuery","bQuery","inner","seen","map"],"sources":["../../src/multiInstance.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|