on-zero 0.4.39 → 0.4.41
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/createUseQuery.cjs +22 -5
- package/dist/cjs/createUseQuery.native.js +22 -5
- package/dist/cjs/createUseQuery.native.js.map +1 -1
- package/dist/cjs/createUseQueryDirect.cjs +15 -17
- package/dist/cjs/createUseQueryDirect.native.js +22 -20
- package/dist/cjs/createUseQueryDirect.native.js.map +1 -1
- package/dist/cjs/useQuery.empty.test.cjs +70 -0
- package/dist/cjs/useQuery.empty.test.native.js +87 -0
- package/dist/cjs/useQuery.empty.test.native.js.map +1 -0
- package/dist/esm/createUseQuery.mjs +22 -6
- package/dist/esm/createUseQuery.mjs.map +1 -1
- package/dist/esm/createUseQuery.native.js +22 -6
- package/dist/esm/createUseQuery.native.js.map +1 -1
- package/dist/esm/createUseQueryDirect.mjs +16 -18
- package/dist/esm/createUseQueryDirect.mjs.map +1 -1
- package/dist/esm/createUseQueryDirect.native.js +23 -21
- package/dist/esm/createUseQueryDirect.native.js.map +1 -1
- package/dist/esm/useQuery.empty.test.mjs +71 -0
- package/dist/esm/useQuery.empty.test.mjs.map +1 -0
- package/dist/esm/useQuery.empty.test.native.js +85 -0
- package/dist/esm/useQuery.empty.test.native.js.map +1 -0
- package/package.json +2 -2
- package/src/createUseQuery.tsx +41 -6
- package/src/createUseQueryDirect.tsx +27 -15
- package/src/useQuery.empty.test.tsx +98 -0
- package/types/createUseQuery.d.ts +3 -0
- package/types/createUseQuery.d.ts.map +1 -1
- package/types/createUseQueryDirect.d.ts.map +1 -1
- package/types/useQuery.empty.test.d.ts +5 -0
- package/types/useQuery.empty.test.d.ts.map +1 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useQuery as zeroUseQuery } from "@rocicorp/zero/react";
|
|
2
|
+
import { addContextToQuery, asQueryInternals } from "@rocicorp/zero/bindings";
|
|
2
3
|
import { useContext, useMemo, useRef } from "react";
|
|
3
4
|
import { useZeroDebug } from "./helpers/useZeroDebug.native.js";
|
|
4
5
|
import { resolveQuery } from "./resolveQuery.native.js";
|
|
@@ -7,9 +8,21 @@ function _type_of(obj) {
|
|
|
7
8
|
|
|
8
9
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
9
10
|
}
|
|
10
|
-
var
|
|
11
|
+
var EMPTY_PLURAL = Object.freeze([]);
|
|
12
|
+
var RESULT_UNKNOWN = Object.freeze({
|
|
11
13
|
type: "unknown"
|
|
12
|
-
}
|
|
14
|
+
});
|
|
15
|
+
var EMPTY_RESPONSE_PLURAL = Object.freeze([EMPTY_PLURAL, RESULT_UNKNOWN]);
|
|
16
|
+
var EMPTY_RESPONSE_SINGULAR = Object.freeze([void 0, RESULT_UNKNOWN]);
|
|
17
|
+
function emptyResponseFor(queryRequest) {
|
|
18
|
+
try {
|
|
19
|
+
var query = addContextToQuery(queryRequest, {});
|
|
20
|
+
var internals = asQueryInternals(query);
|
|
21
|
+
return internals.format.singular ? EMPTY_RESPONSE_SINGULAR : EMPTY_RESPONSE_PLURAL;
|
|
22
|
+
} catch (e) {
|
|
23
|
+
return EMPTY_RESPONSE_PLURAL;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
13
26
|
function parseUseQueryArgs(paramsOrOptions, optionsArg) {
|
|
14
27
|
var hasParams = optionsArg !== void 0 || paramsOrOptions && (typeof paramsOrOptions === "undefined" ? "undefined" : _type_of(paramsOrOptions)) === "object" && !("enabled" in paramsOrOptions) && !("ttl" in paramsOrOptions);
|
|
15
28
|
return {
|
|
@@ -24,7 +37,7 @@ function createUseQuery(param) {
|
|
|
24
37
|
} = param;
|
|
25
38
|
if (typeof window === "undefined") {
|
|
26
39
|
return function () {
|
|
27
|
-
return
|
|
40
|
+
return EMPTY_RESPONSE_PLURAL;
|
|
28
41
|
};
|
|
29
42
|
}
|
|
30
43
|
function useQuery() {
|
|
@@ -32,7 +45,7 @@ function createUseQuery(param) {
|
|
|
32
45
|
args[_key] = arguments[_key];
|
|
33
46
|
}
|
|
34
47
|
var disableMode = useContext(DisabledContext);
|
|
35
|
-
var lastRef = useRef(
|
|
48
|
+
var lastRef = useRef(EMPTY_RESPONSE_PLURAL);
|
|
36
49
|
var [fn, paramsOrOptions, optionsArg] = args;
|
|
37
50
|
var {
|
|
38
51
|
queryRequest,
|
|
@@ -65,11 +78,14 @@ function createUseQuery(param) {
|
|
|
65
78
|
return out;
|
|
66
79
|
}
|
|
67
80
|
if (disableMode === "last-value") {
|
|
81
|
+
if (lastRef.current === EMPTY_RESPONSE_PLURAL) {
|
|
82
|
+
return emptyResponseFor(queryRequest);
|
|
83
|
+
}
|
|
68
84
|
return lastRef.current;
|
|
69
85
|
}
|
|
70
|
-
return
|
|
86
|
+
return emptyResponseFor(queryRequest);
|
|
71
87
|
}
|
|
72
88
|
return useQuery;
|
|
73
89
|
}
|
|
74
|
-
export { createUseQuery, parseUseQueryArgs };
|
|
90
|
+
export { createUseQuery, emptyResponseFor, parseUseQueryArgs };
|
|
75
91
|
//# sourceMappingURL=createUseQuery.native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useQuery","zeroUseQuery","useContext","useMemo","useRef","useZeroDebug","resolveQuery","_type_of","obj","Symbol","constructor","
|
|
1
|
+
{"version":3,"names":["useQuery","zeroUseQuery","addContextToQuery","asQueryInternals","useContext","useMemo","useRef","useZeroDebug","resolveQuery","_type_of","obj","Symbol","constructor","EMPTY_PLURAL","Object","freeze","RESULT_UNKNOWN","type","EMPTY_RESPONSE_PLURAL","EMPTY_RESPONSE_SINGULAR","emptyResponseFor","queryRequest","query","internals","format","singular","e","parseUseQueryArgs","paramsOrOptions","optionsArg","hasParams","params","options","createUseQuery","param","DisabledContext","customQueries","window","_len","arguments","length","args","Array","_key","disableMode","lastRef","fn","opts","queryRequest2"],"sources":["../../src/createUseQuery.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAA,IAAYC,YAAA,QAAoB;AACzC,SAASC,iBAAA,EAAmBC,gBAAA,QAAwB;AACpD,SAASC,UAAA,EAAYC,OAAA,EAASC,MAAA,QAA4B;AAE1D,SAASC,YAAA,QAAoB;AAC7B,SAASC,YAAA,QAAuC;AAyChD,SAAMC,SAAAC,GAAe;EACrB,uBAAuB;;EACvB,OAAMA,GAAA,WAAAC,MAAA,KAAwB,WAAe,IAAAD,GAAA,CAAAE,WAAc,KAAAD,MAAe,qBAAAD,GAAA;AAC1E;AAQO,IAAAG,YAAS,GAAAC,MAAA,CAAiBC,MAAA;AAC/B,IAAAC,cAAI,GAAAF,MAAA,CAAAC,MAAA;EACFE,IAAA;AACA;AACA,IAAAC,qBAAiB,GAAOJ,MAAA,CAAAC,MAAW,EACrCF,YAAQ,EAGNG,cAAO,EACT;AACF,IAAAG,uBAAA,GAAAL,MAAA,CAAAC,MAAA,EAGO,QACLC,cAAM,CAON;AAAO,SACLI,gBAAoBA,CAAAC,YAAA;EAAkB,IACtC;IACF,IAAAC,KAAA,GAAApB,iBAAA,CAAAmB,YAAA;IACF,IAAAE,SAAA,GAAApB,gBAAA,CAAAmB,KAAA;IAEO,OAASC,SAAA,CAAAC,MAA0C,CAAAC,QAAA,GAAAN,uBAAA,GAAAD,qBAAA;EACxD,SAAAQ,CAAA;IACA,OAAAR,qBAAA;EACF;AAaE;AACE,SAAAS,iBAAcA,CAAAC,eAAA,EAAAC,UAAA;EAChB,IAAAC,SAAA,GAAAD,UAAA,eAAAD,eAAA,YAAAA,eAAA,iCAAAnB,QAAA,CAAAmB,eAAA,kCAAAA,eAAA,gBAAAA,eAAA;EAEA;IACEG,MAAM,EAAAD,SAAA,GAAcF,eAAW;IAC/BI,OAAM,EAAAF,SAAU,GAAAD,UAAY,GAAAD;EAC5B;AAEA;AACE,SAAAK,cAAgBA,CAAAC,KAAA,EAAS;EACzB;IAAAC,eAAM;IAAAC;EAAe,IAAeF,KAAA;EAEpC,WAAOG,MAAE;IACX,OAAI,YAAI;MAQR,OAAMnB,qBAAmB;IAKzB;EAEA;EACE,SAAIlB,QAAQA,CAAA,EAAI;IAEd,SAAAsC,IAAA,GAAAC,SAAa,CAAAC,MAAc,EAAAC,IAAA,GAAS,IAAGC,KAAA,CAAAJ,IAAA,GAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;MAC3CF,IAAA,CAAAE,IAAA,IAAAJ,SAAA,CAAAI,IAAA;IAEA;IACE,IAAAC,WAAQ,GAAAxC,UAAU,CAAA+B,eAAA;IAClB,IAAAU,OAAO,GAAAvC,MAAA,CAAAY,qBAAA;IACT,KAAA4B,EAAA,EAAAlB,eAAA,EAAAC,UAAA,IAAAY,IAAA;IAEA,IAAI;MAAApB,YAAA;MAAgBW;IAAA,IAAA3B,OAAc;MAIhC,IAAI;QAAA0B,MAAQ;QAAAC,OAAA,EAAAe;MAAY,IAAApB,iBAAuB,CAAAC,eAAA,EAAAC,UAAA;MAC7C,IAAAmB,aAAO,GAAAxC,YAAiB;QAC1B4B,aAAA;QACAU,EAAA;QACFf;MAEA;MACF;QAEAV,YAAO,EAAA2B,aAAA;QACThB,OAAA,EAAAe","ignoreList":[]}
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
import { addContextToQuery, asQueryInternals, DEFAULT_TTL_MS, deepClone } from "@rocicorp/zero/bindings";
|
|
2
2
|
import { useEmitterValue } from "@take-out/helpers";
|
|
3
3
|
import { useContext, useMemo, useRef, useSyncExternalStore } from "react";
|
|
4
|
-
import { parseUseQueryArgs } from "./createUseQuery.mjs";
|
|
4
|
+
import { emptyResponseFor, parseUseQueryArgs } from "./createUseQuery.mjs";
|
|
5
5
|
import { resolveQuery } from "./resolveQuery.mjs";
|
|
6
|
-
const EMPTY_RESPONSE = [null, {
|
|
7
|
-
type: "unknown"
|
|
8
|
-
}];
|
|
9
6
|
const DISABLED_SUBSCRIBE = () => () => {};
|
|
10
|
-
const DISABLED_SNAPSHOT = [void 0, {
|
|
11
|
-
type: "unknown"
|
|
12
|
-
}];
|
|
13
|
-
const getDisabledSnapshot = () => DISABLED_SNAPSHOT;
|
|
14
7
|
const emptyArray = [];
|
|
15
8
|
const resultTypeUnknown = {
|
|
16
9
|
type: "unknown"
|
|
@@ -159,12 +152,11 @@ function createUseQueryDirect({
|
|
|
159
152
|
zeroVersion
|
|
160
153
|
}) {
|
|
161
154
|
if (typeof window === "undefined") {
|
|
162
|
-
return
|
|
155
|
+
return _fn => emptyResponseFor(void 0);
|
|
163
156
|
}
|
|
164
157
|
const directViewStore = new DirectViewStore();
|
|
165
158
|
function useQueryDirect(...args) {
|
|
166
159
|
const disableMode = useContext(DisabledContext);
|
|
167
|
-
const lastRef = useRef(EMPTY_RESPONSE);
|
|
168
160
|
const [fn, paramsOrOptions, optionsArg] = args;
|
|
169
161
|
const version = useEmitterValue(zeroVersion);
|
|
170
162
|
const {
|
|
@@ -180,17 +172,23 @@ function createUseQueryDirect({
|
|
|
180
172
|
ttl = options.ttl ?? DEFAULT_TTL_MS;
|
|
181
173
|
}
|
|
182
174
|
const paramsKey = params === void 0 ? "" : JSON.stringify(params);
|
|
175
|
+
const queryRequest = useMemo(() => resolveQuery({
|
|
176
|
+
customQueries,
|
|
177
|
+
fn,
|
|
178
|
+
params
|
|
179
|
+
}),
|
|
180
|
+
// params is keyed by paramsKey
|
|
181
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
182
|
+
[fn, paramsKey]);
|
|
183
|
+
const emptyForQuery = useMemo(() => emptyResponseFor(queryRequest), [queryRequest]);
|
|
184
|
+
const lastRef = useRef(emptyForQuery);
|
|
183
185
|
const view = useMemo(() => {
|
|
184
186
|
const zero = getZero();
|
|
185
187
|
if (!zero) return null;
|
|
186
|
-
const queryRequest = resolveQuery({
|
|
187
|
-
customQueries,
|
|
188
|
-
fn,
|
|
189
|
-
params
|
|
190
|
-
});
|
|
191
188
|
return directViewStore.getView(zero, queryRequest, enabled, ttl);
|
|
192
|
-
}, [
|
|
193
|
-
const
|
|
189
|
+
}, [queryRequest, enabled, ttl, version]);
|
|
190
|
+
const getEmpty = () => emptyForQuery;
|
|
191
|
+
const out = useSyncExternalStore(view ? view.subscribe : DISABLED_SUBSCRIBE, view ? view.getSnapshot : getEmpty, view ? view.getSnapshot : getEmpty);
|
|
194
192
|
if (!disableMode) {
|
|
195
193
|
lastRef.current = out;
|
|
196
194
|
return out;
|
|
@@ -198,7 +196,7 @@ function createUseQueryDirect({
|
|
|
198
196
|
if (disableMode === "last-value") {
|
|
199
197
|
return lastRef.current;
|
|
200
198
|
}
|
|
201
|
-
return
|
|
199
|
+
return emptyForQuery;
|
|
202
200
|
}
|
|
203
201
|
return useQueryDirect;
|
|
204
202
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["addContextToQuery","asQueryInternals","DEFAULT_TTL_MS","deepClone","useEmitterValue","useContext","useMemo","useRef","useSyncExternalStore","
|
|
1
|
+
{"version":3,"names":["addContextToQuery","asQueryInternals","DEFAULT_TTL_MS","deepClone","useEmitterValue","useContext","useMemo","useRef","useSyncExternalStore","emptyResponseFor","parseUseQueryArgs","resolveQuery","DISABLED_SUBSCRIBE","emptyArray","resultTypeUnknown","type","resultTypeComplete","resultTypeError","emptySnapshotSingularUnknown","emptySnapshotSingularComplete","emptySnapshotSingularError","emptySnapshotPluralUnknown","emptySnapshotPluralComplete","emptySnapshotPluralError","getDefaultSnapshot","singular","makeError","retry","error","message","refetch","details","getSnapshot","data","resultType","Array","isArray","length","DirectViewWrapper","constructor","query","zero","ttl","onDematerialized","snapshot","materializeIfNeeded","view","listeners","Set","destroyTimer","onData","cloned","listener","destroyView","materialize","addListener","current","destroy","updateTTL","subscribe","notify","add","clearTimeout","delete","size","setTimeout","DirectViewStore","views","Map","getView","queryRequest","enabled","context","queryInternals","format","hash","clientID","get","dematerialized","set","createUseQueryDirect","DisabledContext","customQueries","getZero","zeroVersion","window","_fn","directViewStore","useQueryDirect","args","disableMode","fn","paramsOrOptions","optionsArg","version","params","options","paramsKey","JSON","stringify","emptyForQuery","lastRef","getEmpty","out"],"sources":["../../src/createUseQueryDirect.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { addContextToQuery, asQueryInternals, DEFAULT_TTL_MS, deepClone } from "@rocicorp/zero/bindings";
|
|
2
2
|
import { useEmitterValue } from "@take-out/helpers";
|
|
3
3
|
import { useContext, useMemo, useRef, useSyncExternalStore } from "react";
|
|
4
|
-
import { parseUseQueryArgs } from "./createUseQuery.native.js";
|
|
4
|
+
import { emptyResponseFor, parseUseQueryArgs } from "./createUseQuery.native.js";
|
|
5
5
|
import { resolveQuery } from "./resolveQuery.native.js";
|
|
6
6
|
function _class_call_check(instance, Constructor) {
|
|
7
7
|
if (!(instance instanceof Constructor)) {
|
|
@@ -35,18 +35,9 @@ function _define_property(obj, key, value) {
|
|
|
35
35
|
}
|
|
36
36
|
return obj;
|
|
37
37
|
}
|
|
38
|
-
var EMPTY_RESPONSE = [null, {
|
|
39
|
-
type: "unknown"
|
|
40
|
-
}];
|
|
41
38
|
var DISABLED_SUBSCRIBE = function () {
|
|
42
39
|
return function () {};
|
|
43
40
|
};
|
|
44
|
-
var DISABLED_SNAPSHOT = [void 0, {
|
|
45
|
-
type: "unknown"
|
|
46
|
-
}];
|
|
47
|
-
var getDisabledSnapshot = function () {
|
|
48
|
-
return DISABLED_SNAPSHOT;
|
|
49
|
-
};
|
|
50
41
|
var emptyArray = [];
|
|
51
42
|
var resultTypeUnknown = {
|
|
52
43
|
type: "unknown"
|
|
@@ -255,8 +246,8 @@ function createUseQueryDirect(param) {
|
|
|
255
246
|
zeroVersion
|
|
256
247
|
} = param;
|
|
257
248
|
if (typeof window === "undefined") {
|
|
258
|
-
return function () {
|
|
259
|
-
return
|
|
249
|
+
return function (_fn) {
|
|
250
|
+
return emptyResponseFor(void 0);
|
|
260
251
|
};
|
|
261
252
|
}
|
|
262
253
|
var directViewStore = new DirectViewStore();
|
|
@@ -265,7 +256,6 @@ function createUseQueryDirect(param) {
|
|
|
265
256
|
args[_key] = arguments[_key];
|
|
266
257
|
}
|
|
267
258
|
var disableMode = useContext(DisabledContext);
|
|
268
|
-
var lastRef = useRef(EMPTY_RESPONSE);
|
|
269
259
|
var [fn, paramsOrOptions, optionsArg] = args;
|
|
270
260
|
var version = useEmitterValue(zeroVersion);
|
|
271
261
|
var {
|
|
@@ -282,20 +272,32 @@ function createUseQueryDirect(param) {
|
|
|
282
272
|
ttl = (_options_ttl = options.ttl) !== null && _options_ttl !== void 0 ? _options_ttl : DEFAULT_TTL_MS;
|
|
283
273
|
}
|
|
284
274
|
var paramsKey = params === void 0 ? "" : JSON.stringify(params);
|
|
285
|
-
var
|
|
286
|
-
|
|
287
|
-
if (!zero) return null;
|
|
288
|
-
var queryRequest = resolveQuery({
|
|
275
|
+
var queryRequest = useMemo(function () {
|
|
276
|
+
return resolveQuery({
|
|
289
277
|
customQueries,
|
|
290
278
|
fn,
|
|
291
279
|
params
|
|
292
280
|
});
|
|
281
|
+
},
|
|
282
|
+
// params is keyed by paramsKey
|
|
283
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
284
|
+
[fn, paramsKey]);
|
|
285
|
+
var emptyForQuery = useMemo(function () {
|
|
286
|
+
return emptyResponseFor(queryRequest);
|
|
287
|
+
}, [queryRequest]);
|
|
288
|
+
var lastRef = useRef(emptyForQuery);
|
|
289
|
+
var view = useMemo(function () {
|
|
290
|
+
var zero = getZero();
|
|
291
|
+
if (!zero) return null;
|
|
293
292
|
return directViewStore.getView(zero, queryRequest, enabled, ttl);
|
|
294
293
|
},
|
|
295
|
-
//
|
|
294
|
+
// version re-materializes on a new zero
|
|
296
295
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
297
|
-
[
|
|
298
|
-
var
|
|
296
|
+
[queryRequest, enabled, ttl, version]);
|
|
297
|
+
var getEmpty = function () {
|
|
298
|
+
return emptyForQuery;
|
|
299
|
+
};
|
|
300
|
+
var out = useSyncExternalStore(view ? view.subscribe : DISABLED_SUBSCRIBE, view ? view.getSnapshot : getEmpty, view ? view.getSnapshot : getEmpty);
|
|
299
301
|
if (!disableMode) {
|
|
300
302
|
lastRef.current = out;
|
|
301
303
|
return out;
|
|
@@ -303,7 +305,7 @@ function createUseQueryDirect(param) {
|
|
|
303
305
|
if (disableMode === "last-value") {
|
|
304
306
|
return lastRef.current;
|
|
305
307
|
}
|
|
306
|
-
return
|
|
308
|
+
return emptyForQuery;
|
|
307
309
|
}
|
|
308
310
|
return useQueryDirect;
|
|
309
311
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["addContextToQuery","asQueryInternals","DEFAULT_TTL_MS","deepClone","useEmitterValue","useContext","useMemo","useRef","useSyncExternalStore","parseUseQueryArgs","resolveQuery","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj","value","
|
|
1
|
+
{"version":3,"names":["addContextToQuery","asQueryInternals","DEFAULT_TTL_MS","deepClone","useEmitterValue","useContext","useMemo","useRef","useSyncExternalStore","emptyResponseFor","parseUseQueryArgs","resolveQuery","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj","value","DISABLED_SUBSCRIBE","emptyArray","resultTypeUnknown","type","resultTypeComplete","resultTypeError","emptySnapshotSingularUnknown","emptySnapshotSingularComplete","emptySnapshotSingularError","emptySnapshotPluralUnknown","emptySnapshotPluralComplete","emptySnapshotPluralError","getDefaultSnapshot","singular","makeError","retry","error","_error_message","message","_error_error","refetch","details","getSnapshot","data","resultType","Array","isArray","DirectViewWrapper","DirectViewWrapper2","query","zero","ttl","onDematerialized","_this","listeners","Set","onData","cloned","snapshot","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","listener","err","return","destroyView","materializeIfNeeded","subscribe","notify","add","destroyTimer","clearTimeout","delete","size","setTimeout","view","materialize","addListener"],"sources":["../../src/createUseQueryDirect.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { createSchema, number, 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 { createZeroClient } from "./createZeroClient.mjs";
|
|
6
|
+
import { zql } from "./zql.mjs";
|
|
7
|
+
import { jsx } from "react/jsx-runtime";
|
|
8
|
+
globalThis.IS_REACT_ACT_ENVIRONMENT = true;
|
|
9
|
+
const todoTable = table("todo").columns({
|
|
10
|
+
id: string(),
|
|
11
|
+
title: string(),
|
|
12
|
+
createdAt: number()
|
|
13
|
+
}).primaryKey("id");
|
|
14
|
+
const schema = createSchema({
|
|
15
|
+
tables: [todoTable]
|
|
16
|
+
});
|
|
17
|
+
const allTodos = _args => zql.todo.orderBy("createdAt", "desc");
|
|
18
|
+
const oneTodo = args => zql.todo.where("id", args.id).one();
|
|
19
|
+
const client = createZeroClient({
|
|
20
|
+
schema,
|
|
21
|
+
models: {},
|
|
22
|
+
groupedQueries: {
|
|
23
|
+
todo: {
|
|
24
|
+
allTodos,
|
|
25
|
+
oneTodo
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
instanceName: "empty-shape-test"
|
|
29
|
+
});
|
|
30
|
+
let container;
|
|
31
|
+
let root;
|
|
32
|
+
beforeEach(() => {
|
|
33
|
+
container = document.createElement("div");
|
|
34
|
+
root = createRoot(container);
|
|
35
|
+
});
|
|
36
|
+
afterEach(() => {
|
|
37
|
+
act(() => root.unmount());
|
|
38
|
+
});
|
|
39
|
+
function renderWithDisabled(useHook) {
|
|
40
|
+
let captured;
|
|
41
|
+
const Probe = () => {
|
|
42
|
+
captured = useHook();
|
|
43
|
+
return null;
|
|
44
|
+
};
|
|
45
|
+
act(() => {
|
|
46
|
+
root.render(/* @__PURE__ */jsx(client.ProvideZero, {
|
|
47
|
+
authData: {},
|
|
48
|
+
userID: "anon",
|
|
49
|
+
disable: true,
|
|
50
|
+
children: /* @__PURE__ */jsx(Probe, {})
|
|
51
|
+
}));
|
|
52
|
+
});
|
|
53
|
+
if (captured === void 0) throw new Error("Probe did not render");
|
|
54
|
+
return captured;
|
|
55
|
+
}
|
|
56
|
+
test("useQuery returns [] (not null) for plural queries under DisabledContext", () => {
|
|
57
|
+
const [data, info] = renderWithDisabled(() => client.useQuery(allTodos));
|
|
58
|
+
expect(Array.isArray(data)).toBe(true);
|
|
59
|
+
expect(data.length).toBe(0);
|
|
60
|
+
expect(data.filter(() => true)).toEqual([]);
|
|
61
|
+
expect(data.find(() => true)).toBeUndefined();
|
|
62
|
+
expect(info?.type).toBe("unknown");
|
|
63
|
+
});
|
|
64
|
+
test("useQuery returns undefined (not null) for singular queries under DisabledContext", () => {
|
|
65
|
+
const [data, info] = renderWithDisabled(() => client.useQuery(oneTodo, {
|
|
66
|
+
id: "x"
|
|
67
|
+
}));
|
|
68
|
+
expect(data).toBeUndefined();
|
|
69
|
+
expect(info?.type).toBe("unknown");
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=useQuery.empty.test.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createSchema","number","string","table","act","createRoot","afterEach","beforeEach","expect","test","createZeroClient","zql","jsx","globalThis","IS_REACT_ACT_ENVIRONMENT","todoTable","columns","id","title","createdAt","primaryKey","schema","tables","allTodos","_args","todo","orderBy","oneTodo","args","where","one","client","models","groupedQueries","instanceName","container","root","document","createElement","unmount","renderWithDisabled","useHook","captured","Probe","render","ProvideZero","authData","userID","disable","children","Error","data","info","useQuery","Array","isArray","toBe","length","filter","toEqual","find","toBeUndefined","type"],"sources":["../../src/useQuery.empty.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createSchema, number, string, table } from "@rocicorp/zero";
|
|
3
|
+
import { act } from "react";
|
|
4
|
+
import { createRoot } from "react-dom/client";
|
|
5
|
+
import { afterEach, beforeEach, expect, test } from "vitest";
|
|
6
|
+
import { createZeroClient } from "./createZeroClient.native.js";
|
|
7
|
+
import { zql } from "./zql.native.js";
|
|
8
|
+
globalThis.IS_REACT_ACT_ENVIRONMENT = true;
|
|
9
|
+
var todoTable = table("todo").columns({
|
|
10
|
+
id: string(),
|
|
11
|
+
title: string(),
|
|
12
|
+
createdAt: number()
|
|
13
|
+
}).primaryKey("id");
|
|
14
|
+
var schema = createSchema({
|
|
15
|
+
tables: [todoTable]
|
|
16
|
+
});
|
|
17
|
+
var allTodos = function (_args) {
|
|
18
|
+
return zql.todo.orderBy("createdAt", "desc");
|
|
19
|
+
};
|
|
20
|
+
var oneTodo = function (args) {
|
|
21
|
+
return zql.todo.where("id", args.id).one();
|
|
22
|
+
};
|
|
23
|
+
var client = createZeroClient({
|
|
24
|
+
schema,
|
|
25
|
+
models: {},
|
|
26
|
+
groupedQueries: {
|
|
27
|
+
todo: {
|
|
28
|
+
allTodos,
|
|
29
|
+
oneTodo
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
instanceName: "empty-shape-test"
|
|
33
|
+
});
|
|
34
|
+
var container;
|
|
35
|
+
var root;
|
|
36
|
+
beforeEach(function () {
|
|
37
|
+
container = document.createElement("div");
|
|
38
|
+
root = createRoot(container);
|
|
39
|
+
});
|
|
40
|
+
afterEach(function () {
|
|
41
|
+
act(function () {
|
|
42
|
+
return root.unmount();
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
function renderWithDisabled(useHook) {
|
|
46
|
+
var captured;
|
|
47
|
+
var Probe = function () {
|
|
48
|
+
captured = useHook();
|
|
49
|
+
return null;
|
|
50
|
+
};
|
|
51
|
+
act(function () {
|
|
52
|
+
root.render(/* @__PURE__ */_jsx(client.ProvideZero, {
|
|
53
|
+
authData: {},
|
|
54
|
+
userID: "anon",
|
|
55
|
+
disable: true,
|
|
56
|
+
children: /* @__PURE__ */_jsx(Probe, {})
|
|
57
|
+
}));
|
|
58
|
+
});
|
|
59
|
+
if (captured === void 0) throw new Error("Probe did not render");
|
|
60
|
+
return captured;
|
|
61
|
+
}
|
|
62
|
+
test("useQuery returns [] (not null) for plural queries under DisabledContext", function () {
|
|
63
|
+
var [data, info] = renderWithDisabled(function () {
|
|
64
|
+
return client.useQuery(allTodos);
|
|
65
|
+
});
|
|
66
|
+
expect(Array.isArray(data)).toBe(true);
|
|
67
|
+
expect(data.length).toBe(0);
|
|
68
|
+
expect(data.filter(function () {
|
|
69
|
+
return true;
|
|
70
|
+
})).toEqual([]);
|
|
71
|
+
expect(data.find(function () {
|
|
72
|
+
return true;
|
|
73
|
+
})).toBeUndefined();
|
|
74
|
+
expect(info === null || info === void 0 ? void 0 : info.type).toBe("unknown");
|
|
75
|
+
});
|
|
76
|
+
test("useQuery returns undefined (not null) for singular queries under DisabledContext", function () {
|
|
77
|
+
var [data, info] = renderWithDisabled(function () {
|
|
78
|
+
return client.useQuery(oneTodo, {
|
|
79
|
+
id: "x"
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
expect(data).toBeUndefined();
|
|
83
|
+
expect(info === null || info === void 0 ? void 0 : info.type).toBe("unknown");
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=useQuery.empty.test.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["jsx","_jsx","createSchema","number","string","table","act","createRoot","afterEach","beforeEach","expect","test","createZeroClient","zql","globalThis","IS_REACT_ACT_ENVIRONMENT","todoTable","columns","id","title","createdAt","primaryKey","schema","tables","allTodos","_args","todo","orderBy","oneTodo","args","where","one","client","models","groupedQueries","instanceName","container","root","document","createElement","unmount","renderWithDisabled","useHook","captured","Probe","render","ProvideZero","authData","userID","disable","children"],"sources":["../../src/useQuery.empty.test.tsx"],"sourcesContent":[null],"mappings":"AAQA,SAASA,GAAA,IAAAC,IAAA,QAAc,mBAAgB;AACvC,SAASC,YAAW,EAAAC,MAAA,EAAAC,MAAA,EAAAC,KAAA;AACpB,SAASC,GAAA,eAA6B;AACtC,SAASC,UAAA,QAAW,kBAAoB;AAExC,SAASC,SAAA,EAAAC,UAAA,EAAAC,MAAwB,EAAAC,IAAA;AACjC,SAASC,gBAAW;AA0DZ,SAAAC,GAAA;AApDRC,UAAA,CAAWC,wBAAA,GAA2B;AAEtC,IAAAC,SAAM,GAAAX,KAAY,OAAM,EAAMY,OAC3B;EAEHC,EAAA,EAAMd,MAAA;EAINe,KAAM,EAAAf,MAAA,EAAW;EAEbgB,SAAA,EAAAjB,MAAA;AAAA,EACA,CAAAkB,UAAA;AACF,IAAAC,MAAA,GAAApB,YAAA;EACFqB,MAAM,GAKNP,SAAM;AACJ,EACA;AAAS,IACTQ,QAAA,YAAAA,CAAgBC,KAAA;EAAA,OACdZ,GAAQ,CAAAa,IAAA,CAAAC,OAAU,YAAQ;AAAA;AAC5B,IACAC,OAAA,YAAAA,CAAcC,IAAA;EACf,OAAAhB,GAAA,CAAAa,IAAA,CAAAI,KAAA,OAAAD,IAAA,CAAAX,EAAA,EAAAa,GAAA;AAED;AACA,IAAIC,MAAA,GAAApB,gBAAA;EAEJU,MAAA;EACEW,MAAA;EACAC,cAAO;IACRR,IAAA;MAEDF,QAAU;MACJI;IACL;EAED;EACEO,YAAI;AACJ;AACE,IAAAC,SAAA;AACA,IAAAC,IAAA;AAAO5B,UACT;EACA2B,SAAI,GAAME,QAAA,CAAAC,aAAA;EAIRF,IAAA,GAAK9B,UAAA,CAAA6B,SAAA;AAAA;AAGH5B,SACF;EACFF,GAAC;IACD,OAAI+B,IAAA,CAAAG,OAAa;EACjB;AACF;AAIA,SAAKC,mBAAAC,OAAA;EACH,IAAAC,QAAO;EACP,IAAAC,KAAO,YAAAA,CAAA,EAAc;IACrBD,QAAQ,GAAmBD,OAAQ;IAEnC,OAAQ,IAAmB;EAC3B;EACApC,GAAA,aAAa;IACd+B,IAAA,CAAAQ,MAAA,gBAAA5C,IAAA,CAAA+B,MAAA,CAAAc,WAAA;MAEIC,QAAA;MACHC,MAAO,QAAU;MAEjBC,OAAW,EAAE;MACbC,QAAO,EAAM,eAAWjD,IAAS,CAAA2C,KAAA;IAClC","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "on-zero",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.41",
|
|
4
4
|
"description": "A typed layer over @rocicorp/zero with queries, mutations, and permissions",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"source": "src/index.ts",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
}
|
|
84
84
|
},
|
|
85
85
|
"dependencies": {
|
|
86
|
-
"@take-out/helpers": "0.4.
|
|
86
|
+
"@take-out/helpers": "0.4.40",
|
|
87
87
|
"chokidar": "^4.0.3",
|
|
88
88
|
"citty": "^0.1.6",
|
|
89
89
|
"valibot": "^1.1.0"
|
package/src/createUseQuery.tsx
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useQuery as zeroUseQuery } from '@rocicorp/zero/react'
|
|
2
|
+
import { addContextToQuery, asQueryInternals } from '@rocicorp/zero/bindings'
|
|
2
3
|
import { useContext, useMemo, useRef, type Context } from 'react'
|
|
3
4
|
|
|
4
5
|
import { useZeroDebug } from './helpers/useZeroDebug'
|
|
@@ -11,7 +12,7 @@ import type {
|
|
|
11
12
|
Schema as ZeroSchema,
|
|
12
13
|
} from '@rocicorp/zero'
|
|
13
14
|
|
|
14
|
-
// false = enabled, 'empty' = disabled (return
|
|
15
|
+
// false = enabled, 'empty' = disabled (return empty), 'last-value' = disabled (return cached)
|
|
15
16
|
export type QueryControlMode = false | 'empty' | 'last-value'
|
|
16
17
|
|
|
17
18
|
export type UseQueryOptions = {
|
|
@@ -39,7 +40,32 @@ export type UseQueryHook<Schema extends ZeroSchema> = {
|
|
|
39
40
|
): QueryResult<TReturn>
|
|
40
41
|
}
|
|
41
42
|
|
|
42
|
-
|
|
43
|
+
// shape the "empty" / loading / disabled response to match the typed contract:
|
|
44
|
+
// plural queries get [], singular queries get undefined. returning null for a
|
|
45
|
+
// plural query (the old `EMPTY_RESPONSE` constant) broke callers that do the
|
|
46
|
+
// obvious .filter / .find / .length on the result during the first render.
|
|
47
|
+
const EMPTY_PLURAL = Object.freeze([])
|
|
48
|
+
const RESULT_UNKNOWN = Object.freeze({ type: 'unknown' as const })
|
|
49
|
+
const EMPTY_RESPONSE_PLURAL = Object.freeze([EMPTY_PLURAL, RESULT_UNKNOWN]) as never
|
|
50
|
+
const EMPTY_RESPONSE_SINGULAR = Object.freeze([undefined, RESULT_UNKNOWN]) as never
|
|
51
|
+
|
|
52
|
+
// inspect a resolved query (a Query OR a QueryRequest, i.e. what resolveQuery
|
|
53
|
+
// returns from a defineQueries-registered fn) to find its singular/plural
|
|
54
|
+
// format. QueryRequests carry a `.query.fn({args, ctx})` that materializes
|
|
55
|
+
// the underlying Query — singular vs plural is determined entirely by the
|
|
56
|
+
// user-authored query body (`.one()` vs not), so passing an empty `ctx` is
|
|
57
|
+
// safe here.
|
|
58
|
+
export function emptyResponseFor(queryRequest: unknown): readonly [unknown, { type: string }] {
|
|
59
|
+
try {
|
|
60
|
+
const query = addContextToQuery(queryRequest as any, {} as never)
|
|
61
|
+
const internals = asQueryInternals(query)
|
|
62
|
+
return internals.format.singular ? EMPTY_RESPONSE_SINGULAR : EMPTY_RESPONSE_PLURAL
|
|
63
|
+
} catch {
|
|
64
|
+
// SSG factory / no-resolved-query — default to plural so callers' iteration
|
|
65
|
+
// (.filter / .find / .length / for-of) is always safe.
|
|
66
|
+
return EMPTY_RESPONSE_PLURAL
|
|
67
|
+
}
|
|
68
|
+
}
|
|
43
69
|
|
|
44
70
|
// determine if useQuery-style args are (fn, params, options) or (fn, options)
|
|
45
71
|
export function parseUseQueryArgs(paramsOrOptions: any, optionsArg: any) {
|
|
@@ -68,14 +94,17 @@ export function createUseQuery<Schema extends ZeroSchema>({
|
|
|
68
94
|
// an empty response matches how the wrapper behaves under DisabledContext
|
|
69
95
|
// anyway, so consumers see the same shape across SSG and the disabled
|
|
70
96
|
// client path. checking here (factory-time) instead of per-call keeps
|
|
71
|
-
// hook order stable so rules-of-hooks stays happy.
|
|
97
|
+
// hook order stable so rules-of-hooks stays happy. we default to the plural
|
|
98
|
+
// shape (data = []) because most queries are plural; a singular query under
|
|
99
|
+
// SSG that depends on undefined-vs-[] is exotic enough to handle at the call
|
|
100
|
+
// site.
|
|
72
101
|
if (typeof window === 'undefined') {
|
|
73
|
-
return (() =>
|
|
102
|
+
return (() => EMPTY_RESPONSE_PLURAL) as UseQueryHook<Schema>
|
|
74
103
|
}
|
|
75
104
|
|
|
76
105
|
function useQuery(...args: any[]): any {
|
|
77
106
|
const disableMode = useContext(DisabledContext)
|
|
78
|
-
const lastRef = useRef<any>(
|
|
107
|
+
const lastRef = useRef<any>(EMPTY_RESPONSE_PLURAL)
|
|
79
108
|
const [fn, paramsOrOptions, optionsArg] = args
|
|
80
109
|
|
|
81
110
|
const { queryRequest, options } = useMemo(() => {
|
|
@@ -110,10 +139,16 @@ export function createUseQuery<Schema extends ZeroSchema>({
|
|
|
110
139
|
}
|
|
111
140
|
|
|
112
141
|
if (disableMode === 'last-value') {
|
|
142
|
+
// first render under last-value mode: lastRef is still the plural default —
|
|
143
|
+
// reshape to match this query's actual format so a singular query gets
|
|
144
|
+
// undefined instead of [].
|
|
145
|
+
if (lastRef.current === EMPTY_RESPONSE_PLURAL) {
|
|
146
|
+
return emptyResponseFor(queryRequest)
|
|
147
|
+
}
|
|
113
148
|
return lastRef.current
|
|
114
149
|
}
|
|
115
150
|
|
|
116
|
-
return
|
|
151
|
+
return emptyResponseFor(queryRequest)
|
|
117
152
|
}
|
|
118
153
|
|
|
119
154
|
return useQuery as UseQueryHook<Schema>
|