on-zero 0.4.25 → 0.4.26
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 +28 -16
- package/dist/cjs/createUseQuery.native.js +42 -30
- package/dist/cjs/createUseQuery.native.js.map +1 -1
- package/dist/cjs/multiInstanceNested.test.cjs +26 -0
- package/dist/cjs/multiInstanceNested.test.native.js +34 -0
- package/dist/cjs/multiInstanceNested.test.native.js.map +1 -1
- package/dist/esm/createUseQuery.mjs +28 -16
- package/dist/esm/createUseQuery.mjs.map +1 -1
- package/dist/esm/createUseQuery.native.js +42 -30
- package/dist/esm/createUseQuery.native.js.map +1 -1
- package/dist/esm/multiInstanceNested.test.mjs +27 -1
- package/dist/esm/multiInstanceNested.test.mjs.map +1 -1
- package/dist/esm/multiInstanceNested.test.native.js +35 -1
- package/dist/esm/multiInstanceNested.test.native.js.map +1 -1
- package/package.json +2 -2
- package/src/createUseQuery.tsx +40 -22
- package/src/multiInstanceNested.test.tsx +25 -1
- package/types/createUseQuery.d.ts.map +1 -1
|
@@ -87,29 +87,42 @@ const DISABLED_SNAPSHOT = [void 0, {
|
|
|
87
87
|
type: "unknown"
|
|
88
88
|
}];
|
|
89
89
|
const getDisabledSnapshot = () => DISABLED_SNAPSHOT;
|
|
90
|
-
function createDirectView(
|
|
90
|
+
function createDirectView(getZero, queryRequest, ttl) {
|
|
91
91
|
let snapshot = DISABLED_SNAPSHOT;
|
|
92
92
|
const listeners = /* @__PURE__ */new Set();
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
93
|
+
let view = null;
|
|
94
|
+
const materialize = () => {
|
|
95
|
+
const zero = getZero();
|
|
96
|
+
if (!zero) return;
|
|
97
|
+
const next = zero.materialize(queryRequest, ttl === void 0 ? void 0 : {
|
|
98
|
+
ttl
|
|
99
|
+
});
|
|
100
|
+
view = next;
|
|
101
|
+
next.addListener((data, resultType) => {
|
|
102
|
+
snapshot = [data === void 0 ? void 0 : structuredClone(data), {
|
|
103
|
+
type: resultType
|
|
104
|
+
}];
|
|
105
|
+
for (const listener of listeners) {
|
|
106
|
+
listener();
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
};
|
|
110
|
+
materialize();
|
|
104
111
|
return {
|
|
105
112
|
subscribe: notify => {
|
|
106
113
|
listeners.add(notify);
|
|
114
|
+
if (view === null) {
|
|
115
|
+
materialize();
|
|
116
|
+
}
|
|
107
117
|
return () => listeners.delete(notify);
|
|
108
118
|
},
|
|
109
119
|
getSnapshot: () => snapshot,
|
|
110
120
|
destroy: () => {
|
|
121
|
+
const current = view;
|
|
122
|
+
view = null;
|
|
123
|
+
if (!current) return;
|
|
111
124
|
try {
|
|
112
|
-
|
|
125
|
+
current.destroy();
|
|
113
126
|
} catch {}
|
|
114
127
|
}
|
|
115
128
|
};
|
|
@@ -139,14 +152,13 @@ function createUseQueryDirect({
|
|
|
139
152
|
}
|
|
140
153
|
const paramsKey = params === void 0 ? "" : JSON.stringify(params);
|
|
141
154
|
const view = (0, import_react2.useMemo)(() => {
|
|
142
|
-
|
|
143
|
-
if (!enabled || !zero) return null;
|
|
155
|
+
if (!enabled || !getZero()) return null;
|
|
144
156
|
const queryRequest = (0, import_resolveQuery.resolveQuery)({
|
|
145
157
|
customQueries,
|
|
146
158
|
fn,
|
|
147
159
|
params
|
|
148
160
|
});
|
|
149
|
-
return createDirectView(
|
|
161
|
+
return createDirectView(getZero, queryRequest, ttl);
|
|
150
162
|
}, [fn, paramsKey, enabled, ttl, version]);
|
|
151
163
|
(0, import_react2.useEffect)(() => {
|
|
152
164
|
if (!view) return;
|
|
@@ -102,42 +102,52 @@ var DISABLED_SNAPSHOT = [void 0, {
|
|
|
102
102
|
var getDisabledSnapshot = function () {
|
|
103
103
|
return DISABLED_SNAPSHOT;
|
|
104
104
|
};
|
|
105
|
-
function createDirectView(
|
|
105
|
+
function createDirectView(getZero, queryRequest, ttl) {
|
|
106
106
|
var snapshot = DISABLED_SNAPSHOT;
|
|
107
107
|
var listeners = /* @__PURE__ */new Set();
|
|
108
|
-
var view =
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
} catch (err) {
|
|
124
|
-
_didIteratorError = true;
|
|
125
|
-
_iteratorError = err;
|
|
126
|
-
} finally {
|
|
108
|
+
var view = null;
|
|
109
|
+
var materialize = function () {
|
|
110
|
+
var zero = getZero();
|
|
111
|
+
if (!zero) return;
|
|
112
|
+
var next = zero.materialize(queryRequest, ttl === void 0 ? void 0 : {
|
|
113
|
+
ttl
|
|
114
|
+
});
|
|
115
|
+
view = next;
|
|
116
|
+
next.addListener(function (data, resultType) {
|
|
117
|
+
snapshot = [data === void 0 ? void 0 : structuredClone(data), {
|
|
118
|
+
type: resultType
|
|
119
|
+
}];
|
|
120
|
+
var _iteratorNormalCompletion = true,
|
|
121
|
+
_didIteratorError = false,
|
|
122
|
+
_iteratorError = void 0;
|
|
127
123
|
try {
|
|
128
|
-
|
|
129
|
-
|
|
124
|
+
for (var _iterator = listeners[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
125
|
+
var listener = _step.value;
|
|
126
|
+
listener();
|
|
130
127
|
}
|
|
128
|
+
} catch (err) {
|
|
129
|
+
_didIteratorError = true;
|
|
130
|
+
_iteratorError = err;
|
|
131
131
|
} finally {
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
try {
|
|
133
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
134
|
+
_iterator.return();
|
|
135
|
+
}
|
|
136
|
+
} finally {
|
|
137
|
+
if (_didIteratorError) {
|
|
138
|
+
throw _iteratorError;
|
|
139
|
+
}
|
|
134
140
|
}
|
|
135
141
|
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
142
|
+
});
|
|
143
|
+
};
|
|
144
|
+
materialize();
|
|
138
145
|
return {
|
|
139
146
|
subscribe: function (notify) {
|
|
140
147
|
listeners.add(notify);
|
|
148
|
+
if (view === null) {
|
|
149
|
+
materialize();
|
|
150
|
+
}
|
|
141
151
|
return function () {
|
|
142
152
|
return listeners.delete(notify);
|
|
143
153
|
};
|
|
@@ -146,8 +156,11 @@ function createDirectView(zero, queryRequest, ttl) {
|
|
|
146
156
|
return snapshot;
|
|
147
157
|
},
|
|
148
158
|
destroy: function () {
|
|
159
|
+
var current = view;
|
|
160
|
+
view = null;
|
|
161
|
+
if (!current) return;
|
|
149
162
|
try {
|
|
150
|
-
|
|
163
|
+
current.destroy();
|
|
151
164
|
} catch (e) {}
|
|
152
165
|
}
|
|
153
166
|
};
|
|
@@ -181,14 +194,13 @@ function createUseQueryDirect(param) {
|
|
|
181
194
|
}
|
|
182
195
|
var paramsKey = params === void 0 ? "" : JSON.stringify(params);
|
|
183
196
|
var view = (0, import_react2.useMemo)(function () {
|
|
184
|
-
|
|
185
|
-
if (!enabled || !zero) return null;
|
|
197
|
+
if (!enabled || !getZero()) return null;
|
|
186
198
|
var queryRequest = (0, import_resolveQuery.resolveQuery)({
|
|
187
199
|
customQueries,
|
|
188
200
|
fn,
|
|
189
201
|
params
|
|
190
202
|
});
|
|
191
|
-
return createDirectView(
|
|
203
|
+
return createDirectView(getZero, queryRequest, ttl);
|
|
192
204
|
},
|
|
193
205
|
// params is keyed by paramsKey; version re-materializes on a new zero
|
|
194
206
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","createUseQuery_exports","__export","createUseQuery","createUseQueryDirect","module","exports","import_react","require","import_helpers","import_react2","import_useZeroDebug","import_resolveQuery","_type_of","obj","Symbol","constructor","EMPTY_RESPONSE","type","parseUseQueryArgs","paramsOrOptions","optionsArg","hasParams","params","options","param","DisabledContext","customQueries","useQuery","_len","arguments","length","args","Array","_key","disableMode","useContext","lastRef","useRef","fn","queryRequest","useMemo","opts","queryRequest2","resolveQuery","out","process","env","NODE_ENV","DEBUG_ZERO_QUERIES","useZeroDebug","current","DISABLED_SUBSCRIBE","DISABLED_SNAPSHOT","getDisabledSnapshot","createDirectView","
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","createUseQuery_exports","__export","createUseQuery","createUseQueryDirect","module","exports","import_react","require","import_helpers","import_react2","import_useZeroDebug","import_resolveQuery","_type_of","obj","Symbol","constructor","EMPTY_RESPONSE","type","parseUseQueryArgs","paramsOrOptions","optionsArg","hasParams","params","options","param","DisabledContext","customQueries","useQuery","_len","arguments","length","args","Array","_key","disableMode","useContext","lastRef","useRef","fn","queryRequest","useMemo","opts","queryRequest2","resolveQuery","out","process","env","NODE_ENV","DEBUG_ZERO_QUERIES","useZeroDebug","current","DISABLED_SUBSCRIBE","DISABLED_SNAPSHOT","getDisabledSnapshot","createDirectView","getZero","ttl","snapshot","listeners","Set","view","materialize","zero","next","addListener","data","resultType","structuredClone","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","iterator","_step","done","listener","err","return","subscribe","notify","add","delete","getSnapshot","destroy"],"sources":["../../src/createUseQuery.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -175,6 +175,32 @@ const seedProject = async row => {
|
|
|
175
175
|
});
|
|
176
176
|
await waitFor(() => probe.data?.name === "v3", "v3 visible after inner remount");
|
|
177
177
|
});
|
|
178
|
+
(0, import_vitest.test)("StrictMode: direct views survive the effect double-invoke", async () => {
|
|
179
|
+
await render(/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.StrictMode, {
|
|
180
|
+
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(control.ProvideZero, {
|
|
181
|
+
server: null,
|
|
182
|
+
userID: "t4-ctl",
|
|
183
|
+
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(project.ProvideZero, {
|
|
184
|
+
server: null,
|
|
185
|
+
userID: "t4-prj",
|
|
186
|
+
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(ControlUserProbe, {
|
|
187
|
+
id: "u4"
|
|
188
|
+
})
|
|
189
|
+
})
|
|
190
|
+
})
|
|
191
|
+
}));
|
|
192
|
+
await waitFor(() => probe.renders > 0, "probe mount");
|
|
193
|
+
await seedControl({
|
|
194
|
+
id: "u4",
|
|
195
|
+
name: "strict-v1"
|
|
196
|
+
});
|
|
197
|
+
await waitFor(() => probe.data?.name === "strict-v1", "update visible under StrictMode");
|
|
198
|
+
await seedControl({
|
|
199
|
+
id: "u4",
|
|
200
|
+
name: "strict-v2"
|
|
201
|
+
});
|
|
202
|
+
await waitFor(() => probe.data?.name === "strict-v2", "second update still live");
|
|
203
|
+
});
|
|
178
204
|
(0, import_vitest.test)("direct-path views re-materialize when the owning instance rotates", async () => {
|
|
179
205
|
const App = ({
|
|
180
206
|
userID
|
|
@@ -209,6 +209,40 @@ var seedProject = async function (row) {
|
|
|
209
209
|
return ((_probe_data = probe.data) === null || _probe_data === void 0 ? void 0 : _probe_data.name) === "v3";
|
|
210
210
|
}, "v3 visible after inner remount");
|
|
211
211
|
});
|
|
212
|
+
(0, import_vitest.test)("StrictMode: direct views survive the effect double-invoke", async function () {
|
|
213
|
+
await render(/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.StrictMode, {
|
|
214
|
+
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(control.ProvideZero, {
|
|
215
|
+
server: null,
|
|
216
|
+
userID: "t4-ctl",
|
|
217
|
+
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(project.ProvideZero, {
|
|
218
|
+
server: null,
|
|
219
|
+
userID: "t4-prj",
|
|
220
|
+
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(ControlUserProbe, {
|
|
221
|
+
id: "u4"
|
|
222
|
+
})
|
|
223
|
+
})
|
|
224
|
+
})
|
|
225
|
+
}));
|
|
226
|
+
await waitFor(function () {
|
|
227
|
+
return probe.renders > 0;
|
|
228
|
+
}, "probe mount");
|
|
229
|
+
await seedControl({
|
|
230
|
+
id: "u4",
|
|
231
|
+
name: "strict-v1"
|
|
232
|
+
});
|
|
233
|
+
await waitFor(function () {
|
|
234
|
+
var _probe_data;
|
|
235
|
+
return ((_probe_data = probe.data) === null || _probe_data === void 0 ? void 0 : _probe_data.name) === "strict-v1";
|
|
236
|
+
}, "update visible under StrictMode");
|
|
237
|
+
await seedControl({
|
|
238
|
+
id: "u4",
|
|
239
|
+
name: "strict-v2"
|
|
240
|
+
});
|
|
241
|
+
await waitFor(function () {
|
|
242
|
+
var _probe_data;
|
|
243
|
+
return ((_probe_data = probe.data) === null || _probe_data === void 0 ? void 0 : _probe_data.name) === "strict-v2";
|
|
244
|
+
}, "second update still live");
|
|
245
|
+
});
|
|
212
246
|
(0, import_vitest.test)("direct-path views re-materialize when the owning instance rotates", async function () {
|
|
213
247
|
var App = function (param) {
|
|
214
248
|
var {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["import_jsx_runtime","require","import_zero","import_react","import_client","import_vitest","import_combineZeroClients","import_createZeroClient","import_zql","globalThis","IS_REACT_ACT_ENVIRONMENT","userTable","table","columns","id","string","name","primaryKey","taskTable","title","schema","createSchema","tables","controlModels","user","mutate","seed","ctx","row","tx","upsert","ctlUserById","args","zql","where","one","control","createZeroClient","models","groupedQueries","ctlUser","byId","instanceName","projectModels","prjSeed","seedUser","prjTaskById","task","project","prjTask","combined","combineZeroClients","root","container","beforeEach","resetProbe","document","createElement","body","appendChild","createRoot","afterEach","act","unmount","remove","render","ui","waitFor","condition","what","i","Promise","resolve","setTimeout","Error","probe","data","renders","ControlUserProbe","param","useQuery","seedControl","zero","client","seedProject"],"sources":["../../src/multiInstanceNested.test.tsx"],"sourcesContent":[null],"mappings":"AAOA;;AACA,IAAAA,
|
|
1
|
+
{"version":3,"names":["import_jsx_runtime","require","import_zero","import_react","import_client","import_vitest","import_combineZeroClients","import_createZeroClient","import_zql","globalThis","IS_REACT_ACT_ENVIRONMENT","userTable","table","columns","id","string","name","primaryKey","taskTable","title","schema","createSchema","tables","controlModels","user","mutate","seed","ctx","row","tx","upsert","ctlUserById","args","zql","where","one","control","createZeroClient","models","groupedQueries","ctlUser","byId","instanceName","projectModels","prjSeed","seedUser","prjTaskById","task","project","prjTask","combined","combineZeroClients","root","container","beforeEach","resetProbe","document","createElement","body","appendChild","createRoot","afterEach","act","unmount","remove","render","ui","waitFor","condition","what","i","Promise","resolve","setTimeout","Error","probe","data","renders","ControlUserProbe","param","useQuery","seedControl","zero","client","seedProject","test","_probe_data","jsx","ProvideZero","server","userID","children"],"sources":["../../src/multiInstanceNested.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -59,29 +59,42 @@ const DISABLED_SNAPSHOT = [void 0, {
|
|
|
59
59
|
type: "unknown"
|
|
60
60
|
}];
|
|
61
61
|
const getDisabledSnapshot = () => DISABLED_SNAPSHOT;
|
|
62
|
-
function createDirectView(
|
|
62
|
+
function createDirectView(getZero, queryRequest, ttl) {
|
|
63
63
|
let snapshot = DISABLED_SNAPSHOT;
|
|
64
64
|
const listeners = /* @__PURE__ */new Set();
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
65
|
+
let view = null;
|
|
66
|
+
const materialize = () => {
|
|
67
|
+
const zero = getZero();
|
|
68
|
+
if (!zero) return;
|
|
69
|
+
const next = zero.materialize(queryRequest, ttl === void 0 ? void 0 : {
|
|
70
|
+
ttl
|
|
71
|
+
});
|
|
72
|
+
view = next;
|
|
73
|
+
next.addListener((data, resultType) => {
|
|
74
|
+
snapshot = [data === void 0 ? void 0 : structuredClone(data), {
|
|
75
|
+
type: resultType
|
|
76
|
+
}];
|
|
77
|
+
for (const listener of listeners) {
|
|
78
|
+
listener();
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
materialize();
|
|
76
83
|
return {
|
|
77
84
|
subscribe: notify => {
|
|
78
85
|
listeners.add(notify);
|
|
86
|
+
if (view === null) {
|
|
87
|
+
materialize();
|
|
88
|
+
}
|
|
79
89
|
return () => listeners.delete(notify);
|
|
80
90
|
},
|
|
81
91
|
getSnapshot: () => snapshot,
|
|
82
92
|
destroy: () => {
|
|
93
|
+
const current = view;
|
|
94
|
+
view = null;
|
|
95
|
+
if (!current) return;
|
|
83
96
|
try {
|
|
84
|
-
|
|
97
|
+
current.destroy();
|
|
85
98
|
} catch {}
|
|
86
99
|
}
|
|
87
100
|
};
|
|
@@ -111,14 +124,13 @@ function createUseQueryDirect({
|
|
|
111
124
|
}
|
|
112
125
|
const paramsKey = params === void 0 ? "" : JSON.stringify(params);
|
|
113
126
|
const view = useMemo(() => {
|
|
114
|
-
|
|
115
|
-
if (!enabled || !zero) return null;
|
|
127
|
+
if (!enabled || !getZero()) return null;
|
|
116
128
|
const queryRequest = resolveQuery({
|
|
117
129
|
customQueries,
|
|
118
130
|
fn,
|
|
119
131
|
params
|
|
120
132
|
});
|
|
121
|
-
return createDirectView(
|
|
133
|
+
return createDirectView(getZero, queryRequest, ttl);
|
|
122
134
|
}, [fn, paramsKey, enabled, ttl, version]);
|
|
123
135
|
useEffect(() => {
|
|
124
136
|
if (!view) return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useQuery","zeroUseQuery","useEmitterValue","useContext","useEffect","useMemo","useRef","useSyncExternalStore","useZeroDebug","resolveQuery","EMPTY_RESPONSE","type","parseUseQueryArgs","paramsOrOptions","optionsArg","hasParams","params","options","createUseQuery","DisabledContext","customQueries","args","disableMode","lastRef","fn","queryRequest","opts","queryRequest2","out","process","env","NODE_ENV","DEBUG_ZERO_QUERIES","current","DISABLED_SUBSCRIBE","DISABLED_SNAPSHOT","getDisabledSnapshot","createDirectView","
|
|
1
|
+
{"version":3,"names":["useQuery","zeroUseQuery","useEmitterValue","useContext","useEffect","useMemo","useRef","useSyncExternalStore","useZeroDebug","resolveQuery","EMPTY_RESPONSE","type","parseUseQueryArgs","paramsOrOptions","optionsArg","hasParams","params","options","createUseQuery","DisabledContext","customQueries","args","disableMode","lastRef","fn","queryRequest","opts","queryRequest2","out","process","env","NODE_ENV","DEBUG_ZERO_QUERIES","current","DISABLED_SUBSCRIBE","DISABLED_SNAPSHOT","getDisabledSnapshot","createDirectView","getZero","ttl","snapshot","listeners","Set","view","materialize","zero","next","addListener","data","resultType","structuredClone","listener","subscribe","notify","add","delete","getSnapshot","destroy","createUseQueryDirect","zeroVersion","useQueryDirect","version","enabled","paramsKey","JSON","stringify"],"sources":["../../src/createUseQuery.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -72,42 +72,52 @@ var DISABLED_SNAPSHOT = [void 0, {
|
|
|
72
72
|
var getDisabledSnapshot = function () {
|
|
73
73
|
return DISABLED_SNAPSHOT;
|
|
74
74
|
};
|
|
75
|
-
function createDirectView(
|
|
75
|
+
function createDirectView(getZero, queryRequest, ttl) {
|
|
76
76
|
var snapshot = DISABLED_SNAPSHOT;
|
|
77
77
|
var listeners = /* @__PURE__ */new Set();
|
|
78
|
-
var view =
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
} catch (err) {
|
|
94
|
-
_didIteratorError = true;
|
|
95
|
-
_iteratorError = err;
|
|
96
|
-
} finally {
|
|
78
|
+
var view = null;
|
|
79
|
+
var materialize = function () {
|
|
80
|
+
var zero = getZero();
|
|
81
|
+
if (!zero) return;
|
|
82
|
+
var next = zero.materialize(queryRequest, ttl === void 0 ? void 0 : {
|
|
83
|
+
ttl
|
|
84
|
+
});
|
|
85
|
+
view = next;
|
|
86
|
+
next.addListener(function (data, resultType) {
|
|
87
|
+
snapshot = [data === void 0 ? void 0 : structuredClone(data), {
|
|
88
|
+
type: resultType
|
|
89
|
+
}];
|
|
90
|
+
var _iteratorNormalCompletion = true,
|
|
91
|
+
_didIteratorError = false,
|
|
92
|
+
_iteratorError = void 0;
|
|
97
93
|
try {
|
|
98
|
-
|
|
99
|
-
|
|
94
|
+
for (var _iterator = listeners[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
95
|
+
var listener = _step.value;
|
|
96
|
+
listener();
|
|
100
97
|
}
|
|
98
|
+
} catch (err) {
|
|
99
|
+
_didIteratorError = true;
|
|
100
|
+
_iteratorError = err;
|
|
101
101
|
} finally {
|
|
102
|
-
|
|
103
|
-
|
|
102
|
+
try {
|
|
103
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
104
|
+
_iterator.return();
|
|
105
|
+
}
|
|
106
|
+
} finally {
|
|
107
|
+
if (_didIteratorError) {
|
|
108
|
+
throw _iteratorError;
|
|
109
|
+
}
|
|
104
110
|
}
|
|
105
111
|
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
112
|
+
});
|
|
113
|
+
};
|
|
114
|
+
materialize();
|
|
108
115
|
return {
|
|
109
116
|
subscribe: function (notify) {
|
|
110
117
|
listeners.add(notify);
|
|
118
|
+
if (view === null) {
|
|
119
|
+
materialize();
|
|
120
|
+
}
|
|
111
121
|
return function () {
|
|
112
122
|
return listeners.delete(notify);
|
|
113
123
|
};
|
|
@@ -116,8 +126,11 @@ function createDirectView(zero, queryRequest, ttl) {
|
|
|
116
126
|
return snapshot;
|
|
117
127
|
},
|
|
118
128
|
destroy: function () {
|
|
129
|
+
var current = view;
|
|
130
|
+
view = null;
|
|
131
|
+
if (!current) return;
|
|
119
132
|
try {
|
|
120
|
-
|
|
133
|
+
current.destroy();
|
|
121
134
|
} catch (e) {}
|
|
122
135
|
}
|
|
123
136
|
};
|
|
@@ -151,14 +164,13 @@ function createUseQueryDirect(param) {
|
|
|
151
164
|
}
|
|
152
165
|
var paramsKey = params === void 0 ? "" : JSON.stringify(params);
|
|
153
166
|
var view = useMemo(function () {
|
|
154
|
-
|
|
155
|
-
if (!enabled || !zero) return null;
|
|
167
|
+
if (!enabled || !getZero()) return null;
|
|
156
168
|
var queryRequest = resolveQuery({
|
|
157
169
|
customQueries,
|
|
158
170
|
fn,
|
|
159
171
|
params
|
|
160
172
|
});
|
|
161
|
-
return createDirectView(
|
|
173
|
+
return createDirectView(getZero, queryRequest, ttl);
|
|
162
174
|
},
|
|
163
175
|
// params is keyed by paramsKey; version re-materializes on a new zero
|
|
164
176
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useQuery","zeroUseQuery","useEmitterValue","useContext","useEffect","useMemo","useRef","useSyncExternalStore","useZeroDebug","resolveQuery","_type_of","obj","Symbol","constructor","EMPTY_RESPONSE","type","parseUseQueryArgs","paramsOrOptions","optionsArg","hasParams","params","options","createUseQuery","param","DisabledContext","customQueries","_len","arguments","length","args","Array","_key","disableMode","lastRef","fn","queryRequest","opts","queryRequest2","out","process","env","NODE_ENV","DEBUG_ZERO_QUERIES","current","DISABLED_SUBSCRIBE","DISABLED_SNAPSHOT","getDisabledSnapshot","createDirectView","
|
|
1
|
+
{"version":3,"names":["useQuery","zeroUseQuery","useEmitterValue","useContext","useEffect","useMemo","useRef","useSyncExternalStore","useZeroDebug","resolveQuery","_type_of","obj","Symbol","constructor","EMPTY_RESPONSE","type","parseUseQueryArgs","paramsOrOptions","optionsArg","hasParams","params","options","createUseQuery","param","DisabledContext","customQueries","_len","arguments","length","args","Array","_key","disableMode","lastRef","fn","queryRequest","opts","queryRequest2","out","process","env","NODE_ENV","DEBUG_ZERO_QUERIES","current","DISABLED_SUBSCRIBE","DISABLED_SNAPSHOT","getDisabledSnapshot","createDirectView","getZero","ttl","snapshot","listeners","Set","view","materialize","zero","next","addListener","data","resultType","structuredClone","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","iterator","_step","done","listener","value","err","return","subscribe","notify","add","delete","getSnapshot","destroy","e"],"sources":["../../src/createUseQuery.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createSchema, string, table } from "@rocicorp/zero";
|
|
2
|
-
import { act } from "react";
|
|
2
|
+
import { act, StrictMode } from "react";
|
|
3
3
|
import { createRoot } from "react-dom/client";
|
|
4
4
|
import { afterEach, beforeEach, expect, test } from "vitest";
|
|
5
5
|
import { combineZeroClients } from "./combineZeroClients.mjs";
|
|
@@ -175,6 +175,32 @@ test("inner provider unmount/remount does not break outer-instance subscriptions
|
|
|
175
175
|
});
|
|
176
176
|
await waitFor(() => probe.data?.name === "v3", "v3 visible after inner remount");
|
|
177
177
|
});
|
|
178
|
+
test("StrictMode: direct views survive the effect double-invoke", async () => {
|
|
179
|
+
await render(/* @__PURE__ */jsx(StrictMode, {
|
|
180
|
+
children: /* @__PURE__ */jsx(control.ProvideZero, {
|
|
181
|
+
server: null,
|
|
182
|
+
userID: "t4-ctl",
|
|
183
|
+
children: /* @__PURE__ */jsx(project.ProvideZero, {
|
|
184
|
+
server: null,
|
|
185
|
+
userID: "t4-prj",
|
|
186
|
+
children: /* @__PURE__ */jsx(ControlUserProbe, {
|
|
187
|
+
id: "u4"
|
|
188
|
+
})
|
|
189
|
+
})
|
|
190
|
+
})
|
|
191
|
+
}));
|
|
192
|
+
await waitFor(() => probe.renders > 0, "probe mount");
|
|
193
|
+
await seedControl({
|
|
194
|
+
id: "u4",
|
|
195
|
+
name: "strict-v1"
|
|
196
|
+
});
|
|
197
|
+
await waitFor(() => probe.data?.name === "strict-v1", "update visible under StrictMode");
|
|
198
|
+
await seedControl({
|
|
199
|
+
id: "u4",
|
|
200
|
+
name: "strict-v2"
|
|
201
|
+
});
|
|
202
|
+
await waitFor(() => probe.data?.name === "strict-v2", "second update still live");
|
|
203
|
+
});
|
|
178
204
|
test("direct-path views re-materialize when the owning instance rotates", async () => {
|
|
179
205
|
const App = ({
|
|
180
206
|
userID
|
|
@@ -1 +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":"AAOA,SAASA,YAAA,EAAcC,MAAA,EAAQC,KAAA,QAAa;AAC5C,SAASC,GAAA,
|
|
1
|
+
{"version":3,"names":["createSchema","string","table","act","StrictMode","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":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { createSchema, string, table } from "@rocicorp/zero";
|
|
3
|
-
import { act } from "react";
|
|
3
|
+
import { act, StrictMode } from "react";
|
|
4
4
|
import { createRoot } from "react-dom/client";
|
|
5
5
|
import { afterEach, beforeEach, expect, test } from "vitest";
|
|
6
6
|
import { combineZeroClients } from "./combineZeroClients.native.js";
|
|
@@ -207,6 +207,40 @@ test("inner provider unmount/remount does not break outer-instance subscriptions
|
|
|
207
207
|
return ((_probe_data = probe.data) === null || _probe_data === void 0 ? void 0 : _probe_data.name) === "v3";
|
|
208
208
|
}, "v3 visible after inner remount");
|
|
209
209
|
});
|
|
210
|
+
test("StrictMode: direct views survive the effect double-invoke", async function () {
|
|
211
|
+
await render(/* @__PURE__ */_jsx(StrictMode, {
|
|
212
|
+
children: /* @__PURE__ */_jsx(control.ProvideZero, {
|
|
213
|
+
server: null,
|
|
214
|
+
userID: "t4-ctl",
|
|
215
|
+
children: /* @__PURE__ */_jsx(project.ProvideZero, {
|
|
216
|
+
server: null,
|
|
217
|
+
userID: "t4-prj",
|
|
218
|
+
children: /* @__PURE__ */_jsx(ControlUserProbe, {
|
|
219
|
+
id: "u4"
|
|
220
|
+
})
|
|
221
|
+
})
|
|
222
|
+
})
|
|
223
|
+
}));
|
|
224
|
+
await waitFor(function () {
|
|
225
|
+
return probe.renders > 0;
|
|
226
|
+
}, "probe mount");
|
|
227
|
+
await seedControl({
|
|
228
|
+
id: "u4",
|
|
229
|
+
name: "strict-v1"
|
|
230
|
+
});
|
|
231
|
+
await waitFor(function () {
|
|
232
|
+
var _probe_data;
|
|
233
|
+
return ((_probe_data = probe.data) === null || _probe_data === void 0 ? void 0 : _probe_data.name) === "strict-v1";
|
|
234
|
+
}, "update visible under StrictMode");
|
|
235
|
+
await seedControl({
|
|
236
|
+
id: "u4",
|
|
237
|
+
name: "strict-v2"
|
|
238
|
+
});
|
|
239
|
+
await waitFor(function () {
|
|
240
|
+
var _probe_data;
|
|
241
|
+
return ((_probe_data = probe.data) === null || _probe_data === void 0 ? void 0 : _probe_data.name) === "strict-v2";
|
|
242
|
+
}, "second update still live");
|
|
243
|
+
});
|
|
210
244
|
test("direct-path views re-materialize when the owning instance rotates", async function () {
|
|
211
245
|
var App = function (param) {
|
|
212
246
|
var {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["jsx","_jsx","createSchema","string","table","act","createRoot","afterEach","beforeEach","expect","test","combineZeroClients","createZeroClient","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","remove","render","ui","waitFor","condition","what","i","Promise","resolve","setTimeout","Error","probe","data","renders","ControlUserProbe","param","useQuery","seedControl","zero","client","seedProject"],"sources":["../../src/multiInstanceNested.test.tsx"],"sourcesContent":[null],"mappings":"AAOA,SAASA,GAAA,IAAAC,IAAA,QAAc,mBAAqB;AAC5C,SAASC,
|
|
1
|
+
{"version":3,"names":["jsx","_jsx","createSchema","string","table","act","StrictMode","createRoot","afterEach","beforeEach","expect","test","combineZeroClients","createZeroClient","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","remove","render","ui","waitFor","condition","what","i","Promise","resolve","setTimeout","Error","probe","data","renders","ControlUserProbe","param","useQuery","seedControl","zero","client","seedProject","_probe_data","ProvideZero","server","userID","children"],"sources":["../../src/multiInstanceNested.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "on-zero",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.26",
|
|
4
4
|
"description": "A typed layer over @rocicorp/zero with queries, mutations, and permissions",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"source": "src/index.ts",
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
}
|
|
78
78
|
},
|
|
79
79
|
"dependencies": {
|
|
80
|
-
"@take-out/helpers": "0.4.
|
|
80
|
+
"@take-out/helpers": "0.4.26",
|
|
81
81
|
"chokidar": "^4.0.3",
|
|
82
82
|
"citty": "^0.1.6",
|
|
83
83
|
"valibot": "^1.1.0"
|
package/src/createUseQuery.tsx
CHANGED
|
@@ -151,45 +151,64 @@ type MaterializableZero = {
|
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
function createDirectView(
|
|
154
|
-
|
|
154
|
+
getZero: () => MaterializableZero | null,
|
|
155
155
|
queryRequest: unknown,
|
|
156
156
|
ttl: UseQueryOptions['ttl'],
|
|
157
157
|
): DirectView {
|
|
158
158
|
let snapshot: readonly [unknown, { type: string }] = DISABLED_SNAPSHOT
|
|
159
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
|
+
}
|
|
160
184
|
|
|
161
|
-
//
|
|
162
|
-
|
|
163
|
-
const view = zero.materialize(queryRequest, ttl === undefined ? undefined : { ttl })
|
|
164
|
-
|
|
165
|
-
// addListener fires immediately with current data, so the snapshot is
|
|
166
|
-
// populated before react's first getSnapshot. data must be cloned: the
|
|
167
|
-
// underlying view mutates it in place, and useSyncExternalStore requires
|
|
168
|
-
// immutable snapshots to detect changes.
|
|
169
|
-
view.addListener((data, resultType) => {
|
|
170
|
-
snapshot = [
|
|
171
|
-
data === undefined ? undefined : structuredClone(data),
|
|
172
|
-
{ type: resultType },
|
|
173
|
-
]
|
|
174
|
-
for (const listener of listeners) {
|
|
175
|
-
listener()
|
|
176
|
-
}
|
|
177
|
-
})
|
|
185
|
+
// eager: snapshot is warm before react's first getSnapshot
|
|
186
|
+
materialize()
|
|
178
187
|
|
|
179
188
|
return {
|
|
180
189
|
subscribe: (notify) => {
|
|
181
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
|
+
}
|
|
182
198
|
return () => listeners.delete(notify)
|
|
183
199
|
},
|
|
184
200
|
getSnapshot: () => snapshot,
|
|
185
201
|
destroy: () => {
|
|
202
|
+
const current = view
|
|
203
|
+
view = null
|
|
204
|
+
if (!current) return
|
|
186
205
|
// identity rotation closes the owning zero before react runs this
|
|
187
206
|
// cleanup (the version bump that swaps the view is post-commit) — the
|
|
188
207
|
// closed instance already removed the view's ttl connection record, so
|
|
189
208
|
// zero's destroy asserts ("Connection not found"). destroy-after-close
|
|
190
209
|
// is semantically a no-op; swallow it instead of killing the route.
|
|
191
210
|
try {
|
|
192
|
-
|
|
211
|
+
current.destroy()
|
|
193
212
|
} catch {
|
|
194
213
|
// instance closed first — nothing left to tear down
|
|
195
214
|
}
|
|
@@ -233,10 +252,9 @@ export function createUseQueryDirect<Schema extends ZeroSchema>({
|
|
|
233
252
|
const paramsKey = params === undefined ? '' : JSON.stringify(params)
|
|
234
253
|
|
|
235
254
|
const view = useMemo((): DirectView | null => {
|
|
236
|
-
|
|
237
|
-
if (!enabled || !zero) return null
|
|
255
|
+
if (!enabled || !getZero()) return null
|
|
238
256
|
const queryRequest = resolveQuery({ customQueries, fn, params })
|
|
239
|
-
return createDirectView(
|
|
257
|
+
return createDirectView(getZero, queryRequest, ttl)
|
|
240
258
|
// params is keyed by paramsKey; version re-materializes on a new zero
|
|
241
259
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
242
260
|
}, [fn, paramsKey, enabled, ttl, version])
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
// path — they must materialize directly on the owning instance.
|
|
7
7
|
|
|
8
8
|
import { createSchema, string, table } from '@rocicorp/zero'
|
|
9
|
-
import { act } from 'react'
|
|
9
|
+
import { act, StrictMode } from 'react'
|
|
10
10
|
import { createRoot, type Root } from 'react-dom/client'
|
|
11
11
|
import { afterEach, beforeEach, expect, test } from 'vitest'
|
|
12
12
|
|
|
@@ -182,6 +182,30 @@ test('inner provider unmount/remount does not break outer-instance subscriptions
|
|
|
182
182
|
await waitFor(() => probe.data?.name === 'v3', 'v3 visible after inner remount')
|
|
183
183
|
})
|
|
184
184
|
|
|
185
|
+
test('StrictMode: direct views survive the effect double-invoke', async () => {
|
|
186
|
+
// StrictMode (and any suspense hide/reveal) runs effect cleanup + re-setup
|
|
187
|
+
// with unchanged deps: the cleanup destroys the materialized view while the
|
|
188
|
+
// memoized store identity survives, so without re-materialization on
|
|
189
|
+
// resubscribe the snapshot freezes at its mount-time value forever — the
|
|
190
|
+
// "control queries strand at result type unknown" bug (soot 3e6ecd10a)
|
|
191
|
+
await render(
|
|
192
|
+
<StrictMode>
|
|
193
|
+
<control.ProvideZero server={null} userID="t4-ctl">
|
|
194
|
+
<project.ProvideZero server={null} userID="t4-prj">
|
|
195
|
+
<ControlUserProbe id="u4" />
|
|
196
|
+
</project.ProvideZero>
|
|
197
|
+
</control.ProvideZero>
|
|
198
|
+
</StrictMode>,
|
|
199
|
+
)
|
|
200
|
+
await waitFor(() => probe.renders > 0, 'probe mount')
|
|
201
|
+
|
|
202
|
+
await seedControl({ id: 'u4', name: 'strict-v1' })
|
|
203
|
+
await waitFor(() => probe.data?.name === 'strict-v1', 'update visible under StrictMode')
|
|
204
|
+
|
|
205
|
+
await seedControl({ id: 'u4', name: 'strict-v2' })
|
|
206
|
+
await waitFor(() => probe.data?.name === 'strict-v2', 'second update still live')
|
|
207
|
+
})
|
|
208
|
+
|
|
185
209
|
test('direct-path views re-materialize when the owning instance rotates', async () => {
|
|
186
210
|
const App = ({ userID }: { userID: string }) => (
|
|
187
211
|
<control.ProvideZero server={null} userID={userID}>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createUseQuery.d.ts","sourceRoot":"","sources":["../src/createUseQuery.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EAAmB,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,EAML,KAAK,OAAO,EACb,MAAM,OAAO,CAAA;AAGd,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAEhE,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,KAAK,EACL,MAAM,IAAI,UAAU,EACrB,MAAM,gBAAgB,CAAA;AAGvB,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,OAAO,GAAG,YAAY,CAAA;AAE7D,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,GAAG,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;CAC9C,CAAA;AAED,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5D,MAAM,MAAM,WAAW,CAAC,OAAO,IAAI,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAA;AAExF,YAAY,EAAE,YAAY,EAAE,CAAA;AAE5B,MAAM,MAAM,YAAY,CAAC,MAAM,SAAS,UAAU,IAAI;IAEpD,CAAC,IAAI,EAAE,MAAM,SAAS,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,OAAO,EAC5D,EAAE,EAAE,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,EACtD,MAAM,EAAE,IAAI,EACZ,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,GAClC,WAAW,CAAC,OAAO,CAAC,CAAC;IAGxB,CAAC,MAAM,SAAS,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,OAAO,EACtD,EAAE,EAAE,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,EACtD,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,GAClC,WAAW,CAAC,OAAO,CAAC,CAAA;CACxB,CAAA;AAmBD,wBAAgB,cAAc,CAAC,MAAM,SAAS,UAAU,EAAE,EACxD,eAAe,EACf,aAAa,GACd,EAAE;IACD,eAAe,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC1C,aAAa,EAAE,gBAAgB,CAAA;CAChC,GAAG,YAAY,CAAC,MAAM,CAAC,CAkCvB;AAoCD,KAAK,kBAAkB,GAAG;IACxB,WAAW,CACT,KAAK,EAAE,GAAG,EACV,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,GACtB;QACD,WAAW,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAA;QAC9D,OAAO,IAAI,IAAI,CAAA;KAChB,CAAA;CACF,CAAA;
|
|
1
|
+
{"version":3,"file":"createUseQuery.d.ts","sourceRoot":"","sources":["../src/createUseQuery.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EAAmB,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,EAML,KAAK,OAAO,EACb,MAAM,OAAO,CAAA;AAGd,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAEhE,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,KAAK,EACL,MAAM,IAAI,UAAU,EACrB,MAAM,gBAAgB,CAAA;AAGvB,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,OAAO,GAAG,YAAY,CAAA;AAE7D,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,GAAG,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;CAC9C,CAAA;AAED,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5D,MAAM,MAAM,WAAW,CAAC,OAAO,IAAI,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAA;AAExF,YAAY,EAAE,YAAY,EAAE,CAAA;AAE5B,MAAM,MAAM,YAAY,CAAC,MAAM,SAAS,UAAU,IAAI;IAEpD,CAAC,IAAI,EAAE,MAAM,SAAS,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,OAAO,EAC5D,EAAE,EAAE,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,EACtD,MAAM,EAAE,IAAI,EACZ,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,GAClC,WAAW,CAAC,OAAO,CAAC,CAAC;IAGxB,CAAC,MAAM,SAAS,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,OAAO,EACtD,EAAE,EAAE,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,EACtD,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,GAClC,WAAW,CAAC,OAAO,CAAC,CAAA;CACxB,CAAA;AAmBD,wBAAgB,cAAc,CAAC,MAAM,SAAS,UAAU,EAAE,EACxD,eAAe,EACf,aAAa,GACd,EAAE;IACD,eAAe,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC1C,aAAa,EAAE,gBAAgB,CAAA;CAChC,GAAG,YAAY,CAAC,MAAM,CAAC,CAkCvB;AAoCD,KAAK,kBAAkB,GAAG;IACxB,WAAW,CACT,KAAK,EAAE,GAAG,EACV,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,GACtB;QACD,WAAW,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAA;QAC9D,OAAO,IAAI,IAAI,CAAA;KAChB,CAAA;CACF,CAAA;AAoED,wBAAgB,oBAAoB,CAAC,MAAM,SAAS,UAAU,EAAE,EAC9D,eAAe,EACf,aAAa,EACb,OAAO,EACP,WAAW,GACZ,EAAE;IACD,eAAe,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC1C,aAAa,EAAE,gBAAgB,CAAA;IAE/B,OAAO,EAAE,MAAM,kBAAkB,GAAG,IAAI,CAAA;IAExC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;CAC7B,GAAG,YAAY,CAAC,MAAM,CAAC,CAuDvB"}
|