on-zero 0.4.24 → 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 +32 -16
- package/dist/cjs/createUseQuery.native.js +44 -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 +32 -16
- package/dist/esm/createUseQuery.mjs.map +1 -1
- package/dist/esm/createUseQuery.native.js +44 -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 +51 -22
- package/src/multiInstanceNested.test.tsx +25 -1
- package/types/createUseQuery.d.ts.map +1 -1
|
@@ -87,27 +87,44 @@ 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
|
-
destroy: () =>
|
|
120
|
+
destroy: () => {
|
|
121
|
+
const current = view;
|
|
122
|
+
view = null;
|
|
123
|
+
if (!current) return;
|
|
124
|
+
try {
|
|
125
|
+
current.destroy();
|
|
126
|
+
} catch {}
|
|
127
|
+
}
|
|
111
128
|
};
|
|
112
129
|
}
|
|
113
130
|
function createUseQueryDirect({
|
|
@@ -135,14 +152,13 @@ function createUseQueryDirect({
|
|
|
135
152
|
}
|
|
136
153
|
const paramsKey = params === void 0 ? "" : JSON.stringify(params);
|
|
137
154
|
const view = (0, import_react2.useMemo)(() => {
|
|
138
|
-
|
|
139
|
-
if (!enabled || !zero) return null;
|
|
155
|
+
if (!enabled || !getZero()) return null;
|
|
140
156
|
const queryRequest = (0, import_resolveQuery.resolveQuery)({
|
|
141
157
|
customQueries,
|
|
142
158
|
fn,
|
|
143
159
|
params
|
|
144
160
|
});
|
|
145
|
-
return createDirectView(
|
|
161
|
+
return createDirectView(getZero, queryRequest, ttl);
|
|
146
162
|
}, [fn, paramsKey, enabled, ttl, version]);
|
|
147
163
|
(0, import_react2.useEffect)(() => {
|
|
148
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,7 +156,12 @@ function createDirectView(zero, queryRequest, ttl) {
|
|
|
146
156
|
return snapshot;
|
|
147
157
|
},
|
|
148
158
|
destroy: function () {
|
|
149
|
-
|
|
159
|
+
var current = view;
|
|
160
|
+
view = null;
|
|
161
|
+
if (!current) return;
|
|
162
|
+
try {
|
|
163
|
+
current.destroy();
|
|
164
|
+
} catch (e) {}
|
|
150
165
|
}
|
|
151
166
|
};
|
|
152
167
|
}
|
|
@@ -179,14 +194,13 @@ function createUseQueryDirect(param) {
|
|
|
179
194
|
}
|
|
180
195
|
var paramsKey = params === void 0 ? "" : JSON.stringify(params);
|
|
181
196
|
var view = (0, import_react2.useMemo)(function () {
|
|
182
|
-
|
|
183
|
-
if (!enabled || !zero) return null;
|
|
197
|
+
if (!enabled || !getZero()) return null;
|
|
184
198
|
var queryRequest = (0, import_resolveQuery.resolveQuery)({
|
|
185
199
|
customQueries,
|
|
186
200
|
fn,
|
|
187
201
|
params
|
|
188
202
|
});
|
|
189
|
-
return createDirectView(
|
|
203
|
+
return createDirectView(getZero, queryRequest, ttl);
|
|
190
204
|
},
|
|
191
205
|
// params is keyed by paramsKey; version re-materializes on a new zero
|
|
192
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,27 +59,44 @@ 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
|
-
destroy: () =>
|
|
92
|
+
destroy: () => {
|
|
93
|
+
const current = view;
|
|
94
|
+
view = null;
|
|
95
|
+
if (!current) return;
|
|
96
|
+
try {
|
|
97
|
+
current.destroy();
|
|
98
|
+
} catch {}
|
|
99
|
+
}
|
|
83
100
|
};
|
|
84
101
|
}
|
|
85
102
|
function createUseQueryDirect({
|
|
@@ -107,14 +124,13 @@ function createUseQueryDirect({
|
|
|
107
124
|
}
|
|
108
125
|
const paramsKey = params === void 0 ? "" : JSON.stringify(params);
|
|
109
126
|
const view = useMemo(() => {
|
|
110
|
-
|
|
111
|
-
if (!enabled || !zero) return null;
|
|
127
|
+
if (!enabled || !getZero()) return null;
|
|
112
128
|
const queryRequest = resolveQuery({
|
|
113
129
|
customQueries,
|
|
114
130
|
fn,
|
|
115
131
|
params
|
|
116
132
|
});
|
|
117
|
-
return createDirectView(
|
|
133
|
+
return createDirectView(getZero, queryRequest, ttl);
|
|
118
134
|
}, [fn, paramsKey, enabled, ttl, version]);
|
|
119
135
|
useEffect(() => {
|
|
120
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,7 +126,12 @@ function createDirectView(zero, queryRequest, ttl) {
|
|
|
116
126
|
return snapshot;
|
|
117
127
|
},
|
|
118
128
|
destroy: function () {
|
|
119
|
-
|
|
129
|
+
var current = view;
|
|
130
|
+
view = null;
|
|
131
|
+
if (!current) return;
|
|
132
|
+
try {
|
|
133
|
+
current.destroy();
|
|
134
|
+
} catch (e) {}
|
|
120
135
|
}
|
|
121
136
|
};
|
|
122
137
|
}
|
|
@@ -149,14 +164,13 @@ function createUseQueryDirect(param) {
|
|
|
149
164
|
}
|
|
150
165
|
var paramsKey = params === void 0 ? "" : JSON.stringify(params);
|
|
151
166
|
var view = useMemo(function () {
|
|
152
|
-
|
|
153
|
-
if (!enabled || !zero) return null;
|
|
167
|
+
if (!enabled || !getZero()) return null;
|
|
154
168
|
var queryRequest = resolveQuery({
|
|
155
169
|
customQueries,
|
|
156
170
|
fn,
|
|
157
171
|
params
|
|
158
172
|
});
|
|
159
|
-
return createDirectView(
|
|
173
|
+
return createDirectView(getZero, queryRequest, ttl);
|
|
160
174
|
},
|
|
161
175
|
// params is keyed by paramsKey; version re-materializes on a new zero
|
|
162
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,38 +151,68 @@ 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
|
-
destroy: () =>
|
|
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
|
+
},
|
|
186
216
|
}
|
|
187
217
|
}
|
|
188
218
|
|
|
@@ -222,10 +252,9 @@ export function createUseQueryDirect<Schema extends ZeroSchema>({
|
|
|
222
252
|
const paramsKey = params === undefined ? '' : JSON.stringify(params)
|
|
223
253
|
|
|
224
254
|
const view = useMemo((): DirectView | null => {
|
|
225
|
-
|
|
226
|
-
if (!enabled || !zero) return null
|
|
255
|
+
if (!enabled || !getZero()) return null
|
|
227
256
|
const queryRequest = resolveQuery({ customQueries, fn, params })
|
|
228
|
-
return createDirectView(
|
|
257
|
+
return createDirectView(getZero, queryRequest, ttl)
|
|
229
258
|
// params is keyed by paramsKey; version re-materializes on a new zero
|
|
230
259
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
231
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"}
|