on-zero 0.4.36 → 0.4.38
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.native.js.map +1 -1
- package/dist/cjs/createUseQuery.cjs +7 -97
- package/dist/cjs/createUseQuery.native.js +7 -133
- package/dist/cjs/createUseQuery.native.js.map +1 -1
- package/dist/cjs/createUseQueryDirect.cjs +229 -0
- package/dist/cjs/createUseQueryDirect.native.js +335 -0
- package/dist/cjs/createUseQueryDirect.native.js.map +1 -0
- package/dist/cjs/createZeroClient.cjs +61 -17
- package/dist/cjs/createZeroClient.native.js +65 -17
- package/dist/cjs/createZeroClient.native.js.map +1 -1
- package/dist/cjs/helpers/recoverZeroClient.test.native.js.map +1 -1
- package/dist/cjs/index.cjs +2 -2
- package/dist/cjs/index.native.js +2 -2
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/multi.cjs +38 -0
- package/dist/cjs/multi.native.js +41 -0
- package/dist/cjs/multi.native.js.map +1 -0
- package/dist/cjs/multiInstanceNested.test.cjs +92 -12
- package/dist/cjs/multiInstanceNested.test.native.js +108 -12
- package/dist/cjs/multiInstanceNested.test.native.js.map +1 -1
- package/dist/cjs/testSetup.cjs +26 -0
- package/dist/cjs/testSetup.native.js +32 -0
- package/dist/cjs/testSetup.native.js.map +1 -0
- package/dist/esm/combineZeroClients.mjs.map +1 -1
- package/dist/esm/combineZeroClients.native.js.map +1 -1
- package/dist/esm/createUseQuery.mjs +8 -98
- package/dist/esm/createUseQuery.mjs.map +1 -1
- package/dist/esm/createUseQuery.native.js +8 -134
- package/dist/esm/createUseQuery.native.js.map +1 -1
- package/dist/esm/createUseQueryDirect.mjs +204 -0
- package/dist/esm/createUseQueryDirect.mjs.map +1 -0
- package/dist/esm/createUseQueryDirect.native.js +307 -0
- package/dist/esm/createUseQueryDirect.native.js.map +1 -0
- package/dist/esm/createZeroClient.mjs +62 -19
- package/dist/esm/createZeroClient.mjs.map +1 -1
- package/dist/esm/createZeroClient.native.js +66 -19
- package/dist/esm/createZeroClient.native.js.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.test.mjs.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.test.native.js.map +1 -1
- package/dist/esm/index.js +2 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs +2 -3
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +2 -3
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/multi.mjs +12 -0
- package/dist/esm/multi.mjs.map +1 -0
- package/dist/esm/multi.native.js +12 -0
- package/dist/esm/multi.native.js.map +1 -0
- package/dist/esm/multiInstanceNested.test.mjs +85 -5
- package/dist/esm/multiInstanceNested.test.mjs.map +1 -1
- package/dist/esm/multiInstanceNested.test.native.js +101 -5
- package/dist/esm/multiInstanceNested.test.native.js.map +1 -1
- package/dist/esm/testSetup.mjs +27 -0
- package/dist/esm/testSetup.mjs.map +1 -0
- package/dist/esm/testSetup.native.js +30 -0
- package/dist/esm/testSetup.native.js.map +1 -0
- package/package.json +9 -3
- package/readme.md +10 -8
- package/src/combineZeroClients.tsx +4 -6
- package/src/createUseQuery.tsx +20 -190
- package/src/createUseQueryDirect.tsx +309 -0
- package/src/createZeroClient.tsx +158 -54
- package/src/helpers/recoverZeroClient.test.ts +8 -2
- package/src/index.ts +6 -2
- package/src/multi.ts +24 -0
- package/src/multiInstanceNested.test.tsx +79 -4
- package/src/testSetup.ts +26 -0
- package/types/combineZeroClients.d.ts.map +1 -1
- package/types/createUseQuery.d.ts +4 -15
- package/types/createUseQuery.d.ts.map +1 -1
- package/types/createUseQueryDirect.d.ts +29 -0
- package/types/createUseQueryDirect.d.ts.map +1 -0
- package/types/createZeroClient.d.ts +53 -7
- package/types/createZeroClient.d.ts.map +1 -1
- package/types/index.d.ts +1 -2
- package/types/index.d.ts.map +1 -1
- package/types/multi.d.ts +6 -0
- package/types/multi.d.ts.map +1 -0
- package/types/multiInstanceNested.test.d.ts.map +1 -1
- package/types/testSetup.d.ts +1 -0
- package/types/testSetup.d.ts.map +1 -0
- package/vitest.config.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createSchema","string","table","act","StrictMode","createRoot","afterEach","beforeEach","expect","test","combineZeroClients","
|
|
1
|
+
{"version":3,"names":["createSchema","string","table","useZero","act","StrictMode","createRoot","afterEach","beforeEach","expect","test","createZeroClient","combineZeroClients","createZeroClientWithDirectQueries","zql","Fragment","jsx","jsxs","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","Promise","resolve","setTimeout","remove","render","ui","waitFor","condition","what","i","Error","probe","data","renders","materializeProbe","materializeTtls","updateTtls","destroys","ControlUserProbe","ttl","useQuery","MaterializeProbe","zero","__onZeroMaterializeProbe","materialize","bind","push","view","updateTTL","destroy","seedControl","client","seedProject","ProvideZero","server","userID","children","toBe","App","showInner","showSubscribers","toEqual"],"sources":["../../src/multiInstanceNested.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { createSchema, string, table } from "@rocicorp/zero";
|
|
3
|
+
import { useZero } from "@rocicorp/zero/react";
|
|
3
4
|
import { act, StrictMode } from "react";
|
|
4
5
|
import { createRoot } from "react-dom/client";
|
|
5
6
|
import { afterEach, beforeEach, expect, test } from "vitest";
|
|
6
|
-
import { combineZeroClients } from "./combineZeroClients.native.js";
|
|
7
7
|
import { createZeroClient } from "./createZeroClient.native.js";
|
|
8
|
+
import { combineZeroClients, createZeroClientWithDirectQueries } from "./multi.native.js";
|
|
8
9
|
import { zql } from "./zql.native.js";
|
|
9
10
|
globalThis.IS_REACT_ACT_ENVIRONMENT = true;
|
|
10
11
|
var userTable = table("user").columns({
|
|
@@ -30,7 +31,7 @@ var controlModels = {
|
|
|
30
31
|
var ctlUserById = function (args) {
|
|
31
32
|
return zql.user.where("id", args.id).one();
|
|
32
33
|
};
|
|
33
|
-
var control =
|
|
34
|
+
var control = createZeroClientWithDirectQueries({
|
|
34
35
|
schema,
|
|
35
36
|
models: controlModels,
|
|
36
37
|
groupedQueries: {
|
|
@@ -75,6 +76,11 @@ afterEach(async function () {
|
|
|
75
76
|
await act(async function () {
|
|
76
77
|
return root.unmount();
|
|
77
78
|
});
|
|
79
|
+
await act(async function () {
|
|
80
|
+
await new Promise(function (resolve) {
|
|
81
|
+
return setTimeout(resolve, 20);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
78
84
|
container.remove();
|
|
79
85
|
});
|
|
80
86
|
var render = function (ui) {
|
|
@@ -97,21 +103,61 @@ var probe = {
|
|
|
97
103
|
data: void 0,
|
|
98
104
|
renders: 0
|
|
99
105
|
};
|
|
106
|
+
var materializeProbe = {
|
|
107
|
+
materializeTtls: [],
|
|
108
|
+
updateTtls: [],
|
|
109
|
+
destroys: 0
|
|
110
|
+
};
|
|
100
111
|
function resetProbe() {
|
|
101
112
|
probe.data = void 0;
|
|
102
113
|
probe.renders = 0;
|
|
114
|
+
materializeProbe.materializeTtls = [];
|
|
115
|
+
materializeProbe.updateTtls = [];
|
|
116
|
+
materializeProbe.destroys = 0;
|
|
103
117
|
}
|
|
104
118
|
function ControlUserProbe(param) {
|
|
105
119
|
var {
|
|
106
|
-
id
|
|
120
|
+
id,
|
|
121
|
+
ttl
|
|
107
122
|
} = param;
|
|
108
|
-
var [data] = combined.useQuery(ctlUserById, {
|
|
123
|
+
var [data] = ttl === void 0 ? combined.useQuery(ctlUserById, {
|
|
124
|
+
id
|
|
125
|
+
}) : combined.useQuery(ctlUserById, {
|
|
109
126
|
id
|
|
127
|
+
}, {
|
|
128
|
+
ttl
|
|
110
129
|
});
|
|
111
130
|
probe.data = data !== null && data !== void 0 ? data : void 0;
|
|
112
131
|
probe.renders++;
|
|
113
132
|
return null;
|
|
114
133
|
}
|
|
134
|
+
function MaterializeProbe() {
|
|
135
|
+
var zero = useZero();
|
|
136
|
+
if (!zero.__onZeroMaterializeProbe) {
|
|
137
|
+
zero.__onZeroMaterializeProbe = true;
|
|
138
|
+
var materialize = zero.materialize.bind(zero);
|
|
139
|
+
zero.materialize = function () {
|
|
140
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
141
|
+
args[_key] = arguments[_key];
|
|
142
|
+
}
|
|
143
|
+
var _args_;
|
|
144
|
+
materializeProbe.materializeTtls.push((_args_ = args[1]) === null || _args_ === void 0 ? void 0 : _args_.ttl);
|
|
145
|
+
var view = materialize(...args);
|
|
146
|
+
var updateTTL = view.updateTTL.bind(view);
|
|
147
|
+
view.updateTTL = function (ttl) {
|
|
148
|
+
materializeProbe.updateTtls.push(ttl);
|
|
149
|
+
return updateTTL(ttl);
|
|
150
|
+
};
|
|
151
|
+
var destroy = view.destroy.bind(view);
|
|
152
|
+
view.destroy = function () {
|
|
153
|
+
materializeProbe.destroys++;
|
|
154
|
+
return destroy();
|
|
155
|
+
};
|
|
156
|
+
return view;
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
115
161
|
var seedControl = async function (row) {
|
|
116
162
|
await act(async function () {
|
|
117
163
|
await control.zero.mutate.user.seed(row).client;
|
|
@@ -241,6 +287,56 @@ test("StrictMode: direct views survive the effect double-invoke", async function
|
|
|
241
287
|
return ((_probe_data = probe.data) === null || _probe_data === void 0 ? void 0 : _probe_data.name) === "strict-v2";
|
|
242
288
|
}, "second update still live");
|
|
243
289
|
});
|
|
290
|
+
test("direct-path subscribers share one materialized view", async function () {
|
|
291
|
+
var App = function (param) {
|
|
292
|
+
var {
|
|
293
|
+
showSubscribers
|
|
294
|
+
} = param;
|
|
295
|
+
return /* @__PURE__ */_jsxs(control.ProvideZero, {
|
|
296
|
+
server: null,
|
|
297
|
+
userID: "t5-ctl",
|
|
298
|
+
children: [/* @__PURE__ */_jsx(MaterializeProbe, {}), /* @__PURE__ */_jsx(project.ProvideZero, {
|
|
299
|
+
server: null,
|
|
300
|
+
userID: "t5-prj",
|
|
301
|
+
children: showSubscribers ? /* @__PURE__ */_jsxs(_Fragment, {
|
|
302
|
+
children: [/* @__PURE__ */_jsx(ControlUserProbe, {
|
|
303
|
+
id: "u5",
|
|
304
|
+
ttl: 1e3
|
|
305
|
+
}), /* @__PURE__ */_jsx(ControlUserProbe, {
|
|
306
|
+
id: "u5",
|
|
307
|
+
ttl: 2e3
|
|
308
|
+
})]
|
|
309
|
+
}) : null
|
|
310
|
+
})]
|
|
311
|
+
});
|
|
312
|
+
};
|
|
313
|
+
await render(/* @__PURE__ */_jsx(App, {
|
|
314
|
+
showSubscribers: true
|
|
315
|
+
}));
|
|
316
|
+
await waitFor(function () {
|
|
317
|
+
return probe.renders >= 2;
|
|
318
|
+
}, "both probes mount");
|
|
319
|
+
expect(materializeProbe.materializeTtls).toEqual([1e3]);
|
|
320
|
+
expect(materializeProbe.updateTtls).toEqual([2e3]);
|
|
321
|
+
await seedControl({
|
|
322
|
+
id: "u5",
|
|
323
|
+
name: "shared-v1"
|
|
324
|
+
});
|
|
325
|
+
await waitFor(function () {
|
|
326
|
+
var _probe_data;
|
|
327
|
+
return ((_probe_data = probe.data) === null || _probe_data === void 0 ? void 0 : _probe_data.name) === "shared-v1";
|
|
328
|
+
}, "shared view update visible");
|
|
329
|
+
expect(materializeProbe.materializeTtls).toEqual([1e3]);
|
|
330
|
+
await render(/* @__PURE__ */_jsx(App, {
|
|
331
|
+
showSubscribers: false
|
|
332
|
+
}));
|
|
333
|
+
await act(async function () {
|
|
334
|
+
await new Promise(function (resolve) {
|
|
335
|
+
return setTimeout(resolve, 20);
|
|
336
|
+
});
|
|
337
|
+
});
|
|
338
|
+
expect(materializeProbe.destroys).toBe(1);
|
|
339
|
+
});
|
|
244
340
|
test("direct-path views re-materialize when the owning instance rotates", async function () {
|
|
245
341
|
var App = function (param) {
|
|
246
342
|
var {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["jsx","_jsx","createSchema","string","table","act","StrictMode","createRoot","afterEach","beforeEach","expect","test","combineZeroClients","
|
|
1
|
+
{"version":3,"names":["jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","createSchema","string","table","useZero","act","StrictMode","createRoot","afterEach","beforeEach","expect","test","createZeroClient","combineZeroClients","createZeroClientWithDirectQueries","zql","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","Promise","resolve","setTimeout","remove","render","ui","waitFor","condition","what","i","Error","probe","data","renders","materializeProbe","materializeTtls","updateTtls","destroys","ControlUserProbe","param","ttl","useQuery","MaterializeProbe","zero","__onZeroMaterializeProbe","materialize","bind","_len","arguments","length","Array","_key","_args_","push","view","updateTTL","destroy","seedControl","client","seedProject","_probe_data","ProvideZero","server","userID","children"],"sources":["../../src/multiInstanceNested.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
if (typeof globalThis.localStorage?.getItem !== "function") {
|
|
2
|
+
const store = /* @__PURE__ */new Map();
|
|
3
|
+
Object.defineProperty(globalThis, "localStorage", {
|
|
4
|
+
configurable: true,
|
|
5
|
+
value: {
|
|
6
|
+
get length() {
|
|
7
|
+
return store.size;
|
|
8
|
+
},
|
|
9
|
+
clear() {
|
|
10
|
+
store.clear();
|
|
11
|
+
},
|
|
12
|
+
getItem(key) {
|
|
13
|
+
return store.get(String(key)) ?? null;
|
|
14
|
+
},
|
|
15
|
+
key(index) {
|
|
16
|
+
return Array.from(store.keys())[index] ?? null;
|
|
17
|
+
},
|
|
18
|
+
removeItem(key) {
|
|
19
|
+
store.delete(String(key));
|
|
20
|
+
},
|
|
21
|
+
setItem(key, value) {
|
|
22
|
+
store.set(String(key), String(value));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=testSetup.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["globalThis","localStorage","getItem","store","Map","Object","defineProperty","configurable","value","length","size","clear","key","get","String","index","Array","from","keys","removeItem","delete","setItem","set"],"sources":["../../src/testSetup.ts"],"sourcesContent":[null],"mappings":"AAAA,IAAI,OAAOA,UAAA,CAAWC,YAAA,EAAcC,OAAA,KAAY,YAAY;EAC1D,MAAMC,KAAA,GAAQ,mBAAIC,GAAA,CAAoB;EACtCC,MAAA,CAAOC,cAAA,CAAeN,UAAA,EAAY,gBAAgB;IAChDO,YAAA,EAAc;IACdC,KAAA,EAAO;MACL,IAAIC,OAAA,EAAS;QACX,OAAON,KAAA,CAAMO,IAAA;MACf;MACAC,MAAA,EAAQ;QACNR,KAAA,CAAMQ,KAAA,CAAM;MACd;MACAT,QAAQU,GAAA,EAAa;QACnB,OAAOT,KAAA,CAAMU,GAAA,CAAIC,MAAA,CAAOF,GAAG,CAAC,KAAK;MACnC;MACAA,IAAIG,KAAA,EAAe;QACjB,OAAOC,KAAA,CAAMC,IAAA,CAAKd,KAAA,CAAMe,IAAA,CAAK,CAAC,EAAEH,KAAK,KAAK;MAC5C;MACAI,WAAWP,GAAA,EAAa;QACtBT,KAAA,CAAMiB,MAAA,CAAON,MAAA,CAAOF,GAAG,CAAC;MAC1B;MACAS,QAAQT,GAAA,EAAaJ,KAAA,EAAe;QAClCL,KAAA,CAAMmB,GAAA,CAAIR,MAAA,CAAOF,GAAG,GAAGE,MAAA,CAAON,KAAK,CAAC;MACtC;IACF;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
var _globalThis_localStorage;
|
|
2
|
+
if (typeof ((_globalThis_localStorage = globalThis.localStorage) === null || _globalThis_localStorage === void 0 ? void 0 : _globalThis_localStorage.getItem) !== "function") {
|
|
3
|
+
var store = /* @__PURE__ */new Map();
|
|
4
|
+
Object.defineProperty(globalThis, "localStorage", {
|
|
5
|
+
configurable: true,
|
|
6
|
+
value: {
|
|
7
|
+
get length() {
|
|
8
|
+
return store.size;
|
|
9
|
+
},
|
|
10
|
+
clear() {
|
|
11
|
+
store.clear();
|
|
12
|
+
},
|
|
13
|
+
getItem(key) {
|
|
14
|
+
var _store_get;
|
|
15
|
+
return (_store_get = store.get(String(key))) !== null && _store_get !== void 0 ? _store_get : null;
|
|
16
|
+
},
|
|
17
|
+
key(index) {
|
|
18
|
+
var _Array_from_index;
|
|
19
|
+
return (_Array_from_index = Array.from(store.keys())[index]) !== null && _Array_from_index !== void 0 ? _Array_from_index : null;
|
|
20
|
+
},
|
|
21
|
+
removeItem(key) {
|
|
22
|
+
store.delete(String(key));
|
|
23
|
+
},
|
|
24
|
+
setItem(key, value) {
|
|
25
|
+
store.set(String(key), String(value));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=testSetup.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_globalThis_localStorage","globalThis","localStorage","getItem","store","Map","Object","defineProperty","configurable","value","length","size","clear","key","_store_get","get","String","index","_Array_from_index","Array","from","keys","removeItem","delete","setItem","set"],"sources":["../../src/testSetup.ts"],"sourcesContent":[null],"mappings":"AAAA,IAAIA,wBAAkB;AACpB,YAAM,CAAAA,wBAAY,GAAoBC,UAAA,CAAAC,YAAA,cAAAF,wBAAA,uBAAAA,wBAAA,CAAAG,OAAA;EACtC,IAAAC,KAAO,kBAAe,IAAAC,GAAY;EAAgBC,MAChD,CAAAC,cAAc,CAAAN,UAAA;IACdO,YAAO;IAAAC,KACL,EAAI;MACF,IAAAC,MAAOA,CAAA;QACT,OAAAN,KAAA,CAAAO,IAAA;MACA;MACEC,MAAA,EAAM;QACRR,KAAA,CAAAQ,KAAA;MACA;MACET,QAAAU,GAAO;QACT,IAAAC,UAAA;QACA,OAAI,CAAAA,UAAe,GAAAV,KAAA,CAAAW,GAAA,CAAAC,MAAA,CAAAH,GAAA,gBAAAC,UAAA,cAAAA,UAAA;MACjB;MACFD,IAAAI,KAAA;QACA,IAAAC,iBAAwB;QACtB,OAAM,CAAAA,iBAAkB,GAAAC,KAAA,CAAAC,IAAA,CAAAhB,KAAA,CAAAiB,IAAA,IAAAJ,KAAA,eAAAC,iBAAA,cAAAA,iBAAA;MAC1B;MACAI,UAAQA,CAAAT,GAAa;QACnBT,KAAA,CAAMmB,MAAI,CAAAP,MAAO,CAAGH,GAAG;MACzB;MACFW,QAAAX,GAAA,EAAAJ,KAAA;QACDL,KAAA,CAAAqB,GAAA,CAAAT,MAAA,CAAAH,GAAA,GAAAG,MAAA,CAAAP,KAAA;MACH","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "on-zero",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.38",
|
|
4
4
|
"description": "A typed layer over @rocicorp/zero with queries, mutations, and permissions",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"source": "src/index.ts",
|
|
@@ -65,6 +65,12 @@
|
|
|
65
65
|
"import": "./dist/esm/vite-plugin.mjs",
|
|
66
66
|
"require": "./dist/cjs/vite-plugin.cjs"
|
|
67
67
|
},
|
|
68
|
+
"./multi": {
|
|
69
|
+
"react-native": "./dist/esm/multi.native.js",
|
|
70
|
+
"types": "./types/multi.d.ts",
|
|
71
|
+
"import": "./dist/esm/multi.mjs",
|
|
72
|
+
"require": "./dist/cjs/multi.cjs"
|
|
73
|
+
},
|
|
68
74
|
"./drizzle": {
|
|
69
75
|
"types": "./types/createSchemaFromDrizzle.d.ts",
|
|
70
76
|
"import": "./dist/esm/createSchemaFromDrizzle.mjs",
|
|
@@ -77,7 +83,7 @@
|
|
|
77
83
|
}
|
|
78
84
|
},
|
|
79
85
|
"dependencies": {
|
|
80
|
-
"@take-out/helpers": "0.4.
|
|
86
|
+
"@take-out/helpers": "0.4.38",
|
|
81
87
|
"chokidar": "^4.0.3",
|
|
82
88
|
"citty": "^0.1.6",
|
|
83
89
|
"valibot": "^1.1.0"
|
|
@@ -105,7 +111,7 @@
|
|
|
105
111
|
}
|
|
106
112
|
},
|
|
107
113
|
"devDependencies": {
|
|
108
|
-
"@tamagui/build": "2.3.
|
|
114
|
+
"@tamagui/build": "2.3.1",
|
|
109
115
|
"@types/node": "25.2.0",
|
|
110
116
|
"@types/pg": "^8.11.10",
|
|
111
117
|
"@types/react": "^19.0.0",
|
package/readme.md
CHANGED
|
@@ -526,9 +526,10 @@ exactly one instance — duplicate claims throw at create time. then combine
|
|
|
526
526
|
them into one consumer surface:
|
|
527
527
|
|
|
528
528
|
```tsx
|
|
529
|
-
import {
|
|
529
|
+
import { createZeroClient } from 'on-zero'
|
|
530
|
+
import { combineZeroClients, createZeroClientWithDirectQueries } from 'on-zero/multi'
|
|
530
531
|
|
|
531
|
-
const control =
|
|
532
|
+
const control = createZeroClientWithDirectQueries({
|
|
532
533
|
schema,
|
|
533
534
|
models: controlModels,
|
|
534
535
|
groupedQueries: controlQueries,
|
|
@@ -551,8 +552,8 @@ export const { useQuery, zero, run, preload, getQuery, zeroEvents } =
|
|
|
551
552
|
// client passed to combineZeroClients (or the `inner` option) must be the
|
|
552
553
|
// INNERMOST provider — zero-react's useQuery resolves the nearest provider's
|
|
553
554
|
// instance from context, so only the inner instance rides that path. all
|
|
554
|
-
// other instances
|
|
555
|
-
//
|
|
555
|
+
// other instances must opt into the context-free direct adapter through
|
|
556
|
+
// createZeroClientWithDirectQueries.
|
|
556
557
|
;<control.ProvideZero server={controlUrl} userID={user.id}>
|
|
557
558
|
<project.ProvideZero server={projectUrl} userID={`${user.id}:${projectId}`}>
|
|
558
559
|
<App />
|
|
@@ -565,11 +566,12 @@ constraints:
|
|
|
565
566
|
- each instance needs its own client-group identity (separate `userID` /
|
|
566
567
|
storage key / server url) — never swap the backing namespace under a live
|
|
567
568
|
instance.
|
|
569
|
+
- most apps should use plain `createZeroClient`; the `on-zero/multi` entrypoint
|
|
570
|
+
is only for this nested-provider edge case.
|
|
568
571
|
- give the INNER slot to the instance owning the bulk of the subscriptions —
|
|
569
|
-
inner queries
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
queries (current user, settings, directories).
|
|
572
|
+
inner queries use zero-react's native context path. outer instances use the
|
|
573
|
+
direct adapter on their own mounted zero, so keep those instances on bounded,
|
|
574
|
+
low-fanout queries (current user, settings, directories).
|
|
573
575
|
- a mutator may only read/write tables owned by its own instance. its
|
|
574
576
|
transaction runs on that instance alone; cross-instance writes are not
|
|
575
577
|
detectable at registration and will silently miss the other store.
|
|
@@ -19,12 +19,10 @@ import type { ReactNode } from 'react'
|
|
|
19
19
|
// provider is mounted INNERMOST — may use the upstream context path. by
|
|
20
20
|
// default that is the LAST client passed here (override via the `inner`
|
|
21
21
|
// option); the first client is primary and its provider is expected OUTER.
|
|
22
|
-
// the inner instance's queries ride zero-react's useQuery unchanged
|
|
23
|
-
//
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
// on the owning instance but skip view dedup — keep those instances on
|
|
27
|
-
// bounded, tiny queries.
|
|
22
|
+
// the inner instance's queries ride zero-react's useQuery unchanged. every
|
|
23
|
+
// other instance must be created through `createZeroClientWithDirectQueries`
|
|
24
|
+
// from `on-zero/multi`, which opts into the context-free adapter for this
|
|
25
|
+
// nested-provider edge case. keep those non-inner instances bounded.
|
|
28
26
|
|
|
29
27
|
type ControlQueriesProps = {
|
|
30
28
|
children: ReactNode
|
package/src/createUseQuery.tsx
CHANGED
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
import { useQuery as zeroUseQuery } from '@rocicorp/zero/react'
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
useContext,
|
|
5
|
-
useEffect,
|
|
6
|
-
useMemo,
|
|
7
|
-
useRef,
|
|
8
|
-
useSyncExternalStore,
|
|
9
|
-
type Context,
|
|
10
|
-
} from 'react'
|
|
2
|
+
import { useContext, useMemo, useRef, type Context } from 'react'
|
|
11
3
|
|
|
12
4
|
import { useZeroDebug } from './helpers/useZeroDebug'
|
|
13
5
|
import { resolveQuery, type PlainQueryFn } from './resolveQuery'
|
|
@@ -50,7 +42,7 @@ export type UseQueryHook<Schema extends ZeroSchema> = {
|
|
|
50
42
|
const EMPTY_RESPONSE = [null, { type: 'unknown' }] as never
|
|
51
43
|
|
|
52
44
|
// determine if useQuery-style args are (fn, params, options) or (fn, options)
|
|
53
|
-
function parseUseQueryArgs(paramsOrOptions: any, optionsArg: any) {
|
|
45
|
+
export function parseUseQueryArgs(paramsOrOptions: any, optionsArg: any) {
|
|
54
46
|
const hasParams =
|
|
55
47
|
optionsArg !== undefined ||
|
|
56
48
|
(paramsOrOptions &&
|
|
@@ -72,6 +64,12 @@ export function createUseQuery<Schema extends ZeroSchema>({
|
|
|
72
64
|
customQueries: AnyQueryRegistry
|
|
73
65
|
}): UseQueryHook<Schema> {
|
|
74
66
|
function useQuery(...args: any[]): any {
|
|
67
|
+
// SSG: skip every hook below. on-zero's bundled React copy isn't the same
|
|
68
|
+
// one the SSG build's renderer initialises, so hook dispatch returns null.
|
|
69
|
+
// an empty response matches how the wrapper behaves under DisabledContext
|
|
70
|
+
// anyway, so consumers see the same shape across SSG and the disabled
|
|
71
|
+
// client path.
|
|
72
|
+
if (typeof window === 'undefined') return EMPTY_RESPONSE
|
|
75
73
|
const disableMode = useContext(DisabledContext)
|
|
76
74
|
const lastRef = useRef<any>(EMPTY_RESPONSE)
|
|
77
75
|
const [fn, paramsOrOptions, optionsArg] = args
|
|
@@ -83,7 +81,18 @@ export function createUseQuery<Schema extends ZeroSchema>({
|
|
|
83
81
|
return { queryRequest, options: opts }
|
|
84
82
|
}, [fn, paramsOrOptions, optionsArg])
|
|
85
83
|
|
|
86
|
-
|
|
84
|
+
// when disabled, force enabled=false through to zero's useQuery so its
|
|
85
|
+
// viewStore returns a disabled view (no zero.clientID read, no view
|
|
86
|
+
// subscription) and the stub Zero handed in by ProvideZero stays inert.
|
|
87
|
+
// we still call zeroUseQuery unconditionally so hook order stays stable
|
|
88
|
+
// across DisabledContext changes — the disable check after only affects
|
|
89
|
+
// the return value.
|
|
90
|
+
const effectiveOptions = disableMode
|
|
91
|
+
? typeof options === 'boolean'
|
|
92
|
+
? false
|
|
93
|
+
: { ...(options ?? {}), enabled: false }
|
|
94
|
+
: options
|
|
95
|
+
const out = zeroUseQuery(queryRequest, effectiveOptions)
|
|
87
96
|
|
|
88
97
|
if (process.env.NODE_ENV === 'development') {
|
|
89
98
|
if (process.env.DEBUG_ZERO_QUERIES === '1')
|
|
@@ -105,182 +114,3 @@ export function createUseQuery<Schema extends ZeroSchema>({
|
|
|
105
114
|
|
|
106
115
|
return useQuery as UseQueryHook<Schema>
|
|
107
116
|
}
|
|
108
|
-
|
|
109
|
-
// --- direct (context-free) query path -------------------------------------
|
|
110
|
-
|
|
111
|
-
// zero-react's useQuery resolves its zero instance via useZero() → react
|
|
112
|
-
// context, i.e. the NEAREST mounted ZeroProvider. with multiple client
|
|
113
|
-
// instances nested on one page, every context-path query would materialize
|
|
114
|
-
// against the innermost provider's instance regardless of which instance owns
|
|
115
|
-
// the query. this hook is the context-free counterpart: it materializes the
|
|
116
|
-
// resolved query directly on the owning instance's mounted zero.
|
|
117
|
-
//
|
|
118
|
-
// tradeoffs vs the context path (acceptable for the bounded, tiny queries the
|
|
119
|
-
// non-inner instances own — see combineZeroClients):
|
|
120
|
-
// - no cross-component view dedup (zero-react's viewStore): each hook
|
|
121
|
-
// instance materializes its own view.
|
|
122
|
-
// - no strict-mode double-render protection: a discarded render's view is
|
|
123
|
-
// not destroyed until the owning zero closes.
|
|
124
|
-
|
|
125
|
-
const DISABLED_SUBSCRIBE = () => () => {}
|
|
126
|
-
// upstream zero-react returns [undefined, {type:'unknown'}] when disabled
|
|
127
|
-
const DISABLED_SNAPSHOT: readonly [undefined, { type: 'unknown' }] = [
|
|
128
|
-
undefined,
|
|
129
|
-
{ type: 'unknown' },
|
|
130
|
-
]
|
|
131
|
-
const getDisabledSnapshot = () => DISABLED_SNAPSHOT
|
|
132
|
-
|
|
133
|
-
type DirectView = {
|
|
134
|
-
subscribe: (notify: () => void) => () => void
|
|
135
|
-
getSnapshot: () => readonly [unknown, { type: string }]
|
|
136
|
-
destroy: () => void
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// method syntax for bivariant param checks — the real Zero['materialize']
|
|
140
|
-
// generic signature must remain assignable to this structural slice. ttl is
|
|
141
|
-
// untyped pass-through here, matching the context path (zeroUseQuery's
|
|
142
|
-
// options are equally unchecked against upstream's TTL type).
|
|
143
|
-
type MaterializableZero = {
|
|
144
|
-
materialize(
|
|
145
|
-
query: any,
|
|
146
|
-
options?: { ttl?: any },
|
|
147
|
-
): {
|
|
148
|
-
addListener(cb: (data: any, resultType: string) => void): void
|
|
149
|
-
destroy(): void
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
function createDirectView(
|
|
154
|
-
getZero: () => MaterializableZero | null,
|
|
155
|
-
queryRequest: unknown,
|
|
156
|
-
ttl: UseQueryOptions['ttl'],
|
|
157
|
-
): DirectView {
|
|
158
|
-
let snapshot: readonly [unknown, { type: string }] = DISABLED_SNAPSHOT
|
|
159
|
-
const listeners = new Set<() => void>()
|
|
160
|
-
let view: { destroy(): void } | null = null
|
|
161
|
-
|
|
162
|
-
const materialize = () => {
|
|
163
|
-
const zero = getZero()
|
|
164
|
-
if (!zero) return
|
|
165
|
-
// zero.materialize accepts a QueryRequest (it applies the instance context
|
|
166
|
-
// itself) — the same public api the upstream ViewWrapper uses
|
|
167
|
-
const next = zero.materialize(queryRequest, ttl === undefined ? undefined : { ttl })
|
|
168
|
-
view = next
|
|
169
|
-
|
|
170
|
-
// addListener fires immediately with current data, so the snapshot is
|
|
171
|
-
// populated before react's first getSnapshot. data must be cloned: the
|
|
172
|
-
// underlying view mutates it in place, and useSyncExternalStore requires
|
|
173
|
-
// immutable snapshots to detect changes.
|
|
174
|
-
next.addListener((data, resultType) => {
|
|
175
|
-
snapshot = [
|
|
176
|
-
data === undefined ? undefined : structuredClone(data),
|
|
177
|
-
{ type: resultType },
|
|
178
|
-
]
|
|
179
|
-
for (const listener of listeners) {
|
|
180
|
-
listener()
|
|
181
|
-
}
|
|
182
|
-
})
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
// eager: snapshot is warm before react's first getSnapshot
|
|
186
|
-
materialize()
|
|
187
|
-
|
|
188
|
-
return {
|
|
189
|
-
subscribe: (notify) => {
|
|
190
|
-
listeners.add(notify)
|
|
191
|
-
// react runs effect cleanup + re-setup with unchanged deps under
|
|
192
|
-
// StrictMode double-invoke and suspense hide/reveal — the cleanup
|
|
193
|
-
// destroyed the view while this memoized store survived, so the
|
|
194
|
-
// resubscribe must re-materialize or the snapshot freezes forever
|
|
195
|
-
if (view === null) {
|
|
196
|
-
materialize()
|
|
197
|
-
}
|
|
198
|
-
return () => listeners.delete(notify)
|
|
199
|
-
},
|
|
200
|
-
getSnapshot: () => snapshot,
|
|
201
|
-
destroy: () => {
|
|
202
|
-
const current = view
|
|
203
|
-
view = null
|
|
204
|
-
if (!current) return
|
|
205
|
-
// identity rotation closes the owning zero before react runs this
|
|
206
|
-
// cleanup (the version bump that swaps the view is post-commit) — the
|
|
207
|
-
// closed instance already removed the view's ttl connection record, so
|
|
208
|
-
// zero's destroy asserts ("Connection not found"). destroy-after-close
|
|
209
|
-
// is semantically a no-op; swallow it instead of killing the route.
|
|
210
|
-
try {
|
|
211
|
-
current.destroy()
|
|
212
|
-
} catch {
|
|
213
|
-
// instance closed first — nothing left to tear down
|
|
214
|
-
}
|
|
215
|
-
},
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
export function createUseQueryDirect<Schema extends ZeroSchema>({
|
|
220
|
-
DisabledContext,
|
|
221
|
-
customQueries,
|
|
222
|
-
getZero,
|
|
223
|
-
zeroVersion,
|
|
224
|
-
}: {
|
|
225
|
-
DisabledContext: Context<QueryControlMode>
|
|
226
|
-
customQueries: AnyQueryRegistry
|
|
227
|
-
// the owning instance's mounted zero (null before its provider mounts)
|
|
228
|
-
getZero: () => MaterializableZero | null
|
|
229
|
-
// bumps after commit whenever the mounted zero changes (mount, rotation)
|
|
230
|
-
zeroVersion: Emitter<number>
|
|
231
|
-
}): UseQueryHook<Schema> {
|
|
232
|
-
function useQueryDirect(...args: any[]): any {
|
|
233
|
-
const disableMode = useContext(DisabledContext)
|
|
234
|
-
const lastRef = useRef<any>(EMPTY_RESPONSE)
|
|
235
|
-
const [fn, paramsOrOptions, optionsArg] = args
|
|
236
|
-
|
|
237
|
-
const version = useEmitterValue(zeroVersion)
|
|
238
|
-
const { params, options } = parseUseQueryArgs(paramsOrOptions, optionsArg)
|
|
239
|
-
|
|
240
|
-
let enabled = true
|
|
241
|
-
let ttl: UseQueryOptions['ttl']
|
|
242
|
-
if (typeof options === 'boolean') {
|
|
243
|
-
enabled = options
|
|
244
|
-
} else if (options) {
|
|
245
|
-
enabled = options.enabled !== false
|
|
246
|
-
ttl = options.ttl
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
// key the view by VALUE (serialized params), not params object identity —
|
|
250
|
-
// there is no view dedup on this path, so an unstable inline params object
|
|
251
|
-
// must not re-materialize every render
|
|
252
|
-
const paramsKey = params === undefined ? '' : JSON.stringify(params)
|
|
253
|
-
|
|
254
|
-
const view = useMemo((): DirectView | null => {
|
|
255
|
-
if (!enabled || !getZero()) return null
|
|
256
|
-
const queryRequest = resolveQuery({ customQueries, fn, params })
|
|
257
|
-
return createDirectView(getZero, queryRequest, ttl)
|
|
258
|
-
// params is keyed by paramsKey; version re-materializes on a new zero
|
|
259
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
260
|
-
}, [fn, paramsKey, enabled, ttl, version])
|
|
261
|
-
|
|
262
|
-
useEffect(() => {
|
|
263
|
-
if (!view) return
|
|
264
|
-
return () => view.destroy()
|
|
265
|
-
}, [view])
|
|
266
|
-
|
|
267
|
-
const out = useSyncExternalStore(
|
|
268
|
-
view ? view.subscribe : DISABLED_SUBSCRIBE,
|
|
269
|
-
view ? view.getSnapshot : getDisabledSnapshot,
|
|
270
|
-
view ? view.getSnapshot : getDisabledSnapshot,
|
|
271
|
-
)
|
|
272
|
-
|
|
273
|
-
if (!disableMode) {
|
|
274
|
-
lastRef.current = out
|
|
275
|
-
return out
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
if (disableMode === 'last-value') {
|
|
279
|
-
return lastRef.current
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
return EMPTY_RESPONSE
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
return useQueryDirect as UseQueryHook<Schema>
|
|
286
|
-
}
|