on-zero 0.12.21 → 0.13.0
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/README.md +3 -0
- package/dist/cjs/cli.native.js.map +1 -1
- package/dist/cjs/combineZeroClients.native.js.map +1 -1
- package/dist/cjs/config.native.js.map +1 -1
- package/dist/cjs/createPermissions.native.js.map +1 -1
- package/dist/cjs/createSchemaFromDrizzle.native.js.map +1 -1
- package/dist/cjs/createUseQuery.native.js.map +1 -1
- package/dist/cjs/createUseQueryDirect.native.js.map +1 -1
- package/dist/cjs/createZeroClient.authData.test.native.js.map +1 -1
- package/dist/cjs/createZeroClient.cjs +24 -6
- package/dist/cjs/createZeroClient.connection.test.native.js.map +1 -1
- package/dist/cjs/createZeroClient.headless.test.cjs +55 -0
- package/dist/cjs/createZeroClient.headless.test.native.js +64 -0
- package/dist/cjs/createZeroClient.headless.test.native.js.map +1 -1
- package/dist/cjs/createZeroClient.native.js +22 -4
- package/dist/cjs/createZeroClient.native.js.map +1 -1
- package/dist/cjs/createZeroClient.recovery.test.native.js.map +1 -1
- package/dist/cjs/generate-helpers.cjs +17 -0
- package/dist/cjs/generate-helpers.native.js +23 -0
- package/dist/cjs/generate-helpers.native.js.map +1 -1
- package/dist/cjs/generate-helpers.test.native.js.map +1 -1
- package/dist/cjs/generate-layout.cjs +47 -4
- package/dist/cjs/generate-layout.native.js +191 -81
- package/dist/cjs/generate-layout.native.js.map +1 -1
- package/dist/cjs/generate-lite.cjs +25 -5
- package/dist/cjs/generate-lite.native.js +205 -163
- package/dist/cjs/generate-lite.native.js.map +1 -1
- package/dist/cjs/generate-lite.test.cjs +58 -0
- package/dist/cjs/generate-lite.test.native.js +59 -0
- package/dist/cjs/generate-lite.test.native.js.map +1 -1
- package/dist/cjs/generate.cjs +9 -1
- package/dist/cjs/generate.native.js +13 -1
- package/dist/cjs/generate.native.js.map +1 -1
- package/dist/cjs/generate.test.cjs +16 -0
- package/dist/cjs/generate.test.native.js +16 -0
- package/dist/cjs/generate.test.native.js.map +1 -1
- package/dist/cjs/helpers/NullToOptional.native.js.map +1 -1
- package/dist/cjs/helpers/asyncContext.hostStorage.test.native.js.map +1 -1
- package/dist/cjs/helpers/batchQuery.native.js.map +1 -1
- package/dist/cjs/helpers/clearZeroClientData.native.js.map +1 -1
- package/dist/cjs/helpers/createMutators.cjs +3 -3
- package/dist/cjs/helpers/createMutators.native.js +3 -3
- package/dist/cjs/helpers/createMutators.native.js.map +1 -1
- package/dist/cjs/helpers/createMutators.test.cjs +6 -6
- package/dist/cjs/helpers/createMutators.test.native.js +6 -6
- package/dist/cjs/helpers/createMutators.test.native.js.map +1 -1
- package/dist/cjs/helpers/ellipsis.native.js.map +1 -1
- package/dist/cjs/helpers/emitter.native.js.map +1 -1
- package/dist/cjs/helpers/ensure.native.js.map +1 -1
- package/dist/cjs/helpers/ensureLoggedIn.native.js.map +1 -1
- package/dist/cjs/helpers/errors.native.js.map +1 -1
- package/dist/cjs/helpers/getAuth.native.js.map +1 -1
- package/dist/cjs/helpers/getCurrentComponentStack.native.js.map +1 -1
- package/dist/cjs/helpers/globalValue.native.js.map +1 -1
- package/dist/cjs/helpers/hostStorageScope.native.js.map +1 -1
- package/dist/cjs/helpers/mapObject.native.js.map +1 -1
- package/dist/cjs/helpers/mutationLifecycle.native.js.map +1 -1
- package/dist/cjs/helpers/mutationLifecycle.test.native.js.map +1 -1
- package/dist/cjs/helpers/mutatorContext.native.js.map +1 -1
- package/dist/cjs/helpers/mutatorContext.test.native.js.map +1 -1
- package/dist/cjs/helpers/prettyFormatZeroQuery.native.js.map +1 -1
- package/dist/cjs/helpers/queryContext.native.js.map +1 -1
- package/dist/cjs/helpers/recoverZeroClient.cjs +27 -3
- package/dist/cjs/helpers/recoverZeroClient.native.js +28 -4
- package/dist/cjs/helpers/recoverZeroClient.native.js.map +1 -1
- package/dist/cjs/helpers/recoverZeroClient.test.cjs +32 -2
- package/dist/cjs/helpers/recoverZeroClient.test.native.js +38 -2
- package/dist/cjs/helpers/recoverZeroClient.test.native.js.map +1 -1
- package/dist/cjs/helpers/showZeroClientError.native.js.map +1 -1
- package/dist/cjs/helpers/sleep.native.js.map +1 -1
- package/dist/cjs/helpers/time.native.js.map +1 -1
- package/dist/cjs/helpers/tuple.native.js.map +1 -1
- package/dist/cjs/helpers/useMutation.cjs +27 -2
- package/dist/cjs/helpers/useMutation.native.js +71 -6
- package/dist/cjs/helpers/useMutation.native.js.map +1 -1
- package/dist/cjs/helpers/useMutation.test.cjs +16 -0
- package/dist/cjs/helpers/useMutation.test.native.js +18 -0
- package/dist/cjs/helpers/useMutation.test.native.js.map +1 -1
- package/dist/cjs/helpers/useZeroDebug.native.js.map +1 -1
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/instanceRegistry.native.js.map +1 -1
- package/dist/cjs/modelRegistry.native.js.map +1 -1
- package/dist/cjs/multi.cjs +1 -1
- package/dist/cjs/multi.native.js +1 -1
- package/dist/cjs/multi.native.js.map +1 -1
- package/dist/cjs/multiInstance.test.native.js.map +1 -1
- package/dist/cjs/multiInstanceNested.test.native.js.map +1 -1
- package/dist/cjs/multiPartition.test.native.js.map +1 -1
- package/dist/cjs/mutations.native.js.map +1 -1
- package/dist/cjs/mutations.test.native.js.map +1 -1
- package/dist/cjs/provideZero.hydration.test.native.js.map +1 -1
- package/dist/cjs/queryRegistry.native.js.map +1 -1
- package/dist/cjs/resolveQuery.native.js.map +1 -1
- package/dist/cjs/run.native.js.map +1 -1
- package/dist/cjs/server.native.js.map +1 -1
- package/dist/cjs/server.test.native.js.map +1 -1
- package/dist/cjs/serverWhere.native.js.map +1 -1
- package/dist/cjs/serverWhere.test.native.js.map +1 -1
- package/dist/cjs/state.native.js.map +1 -1
- package/dist/cjs/streaming.native.js.map +1 -1
- package/dist/cjs/testSetup.native.js.map +1 -1
- package/dist/cjs/types.native.js.map +1 -1
- package/dist/cjs/usePermission.test.native.js.map +1 -1
- package/dist/cjs/useQuery.empty.test.native.js.map +1 -1
- package/dist/cjs/useQuery.ssr.test.native.js.map +1 -1
- package/dist/cjs/useStreamingField.loop.test.native.js.map +1 -1
- package/dist/cjs/useStreamingField.native.js.map +1 -1
- package/dist/cjs/vite-plugin.native.js.map +1 -1
- package/dist/cjs/where.native.js.map +1 -1
- package/dist/cjs/zeroRunner.native.js.map +1 -1
- package/dist/cjs/zql.native.js.map +1 -1
- package/dist/esm/createZeroClient.headless.test.mjs +55 -0
- package/dist/esm/createZeroClient.headless.test.mjs.map +1 -1
- package/dist/esm/createZeroClient.headless.test.native.js +64 -0
- package/dist/esm/createZeroClient.headless.test.native.js.map +1 -1
- package/dist/esm/createZeroClient.mjs +24 -6
- package/dist/esm/createZeroClient.mjs.map +1 -1
- package/dist/esm/createZeroClient.native.js +22 -4
- package/dist/esm/createZeroClient.native.js.map +1 -1
- package/dist/esm/generate-helpers.mjs +17 -1
- package/dist/esm/generate-helpers.mjs.map +1 -1
- package/dist/esm/generate-helpers.native.js +23 -1
- package/dist/esm/generate-helpers.native.js.map +1 -1
- package/dist/esm/generate-layout.mjs +47 -4
- package/dist/esm/generate-layout.mjs.map +1 -1
- package/dist/esm/generate-layout.native.js +191 -81
- package/dist/esm/generate-layout.native.js.map +1 -1
- package/dist/esm/generate-lite.mjs +26 -6
- package/dist/esm/generate-lite.mjs.map +1 -1
- package/dist/esm/generate-lite.native.js +206 -164
- package/dist/esm/generate-lite.native.js.map +1 -1
- package/dist/esm/generate-lite.test.mjs +58 -0
- package/dist/esm/generate-lite.test.mjs.map +1 -1
- package/dist/esm/generate-lite.test.native.js +59 -0
- package/dist/esm/generate-lite.test.native.js.map +1 -1
- package/dist/esm/generate.mjs +10 -2
- package/dist/esm/generate.mjs.map +1 -1
- package/dist/esm/generate.native.js +14 -2
- package/dist/esm/generate.native.js.map +1 -1
- package/dist/esm/generate.test.mjs +16 -0
- package/dist/esm/generate.test.mjs.map +1 -1
- package/dist/esm/generate.test.native.js +16 -0
- package/dist/esm/generate.test.native.js.map +1 -1
- package/dist/esm/helpers/createMutators.mjs +3 -3
- package/dist/esm/helpers/createMutators.mjs.map +1 -1
- package/dist/esm/helpers/createMutators.native.js +3 -3
- package/dist/esm/helpers/createMutators.native.js.map +1 -1
- package/dist/esm/helpers/createMutators.test.mjs +5 -5
- package/dist/esm/helpers/createMutators.test.mjs.map +1 -1
- package/dist/esm/helpers/createMutators.test.native.js +5 -5
- package/dist/esm/helpers/createMutators.test.native.js.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.mjs +27 -3
- package/dist/esm/helpers/recoverZeroClient.mjs.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.native.js +28 -4
- package/dist/esm/helpers/recoverZeroClient.native.js.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.test.mjs +32 -2
- package/dist/esm/helpers/recoverZeroClient.test.mjs.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.test.native.js +38 -2
- package/dist/esm/helpers/recoverZeroClient.test.native.js.map +1 -1
- package/dist/esm/helpers/useMutation.mjs +27 -3
- package/dist/esm/helpers/useMutation.mjs.map +1 -1
- package/dist/esm/helpers/useMutation.native.js +71 -7
- package/dist/esm/helpers/useMutation.native.js.map +1 -1
- package/dist/esm/helpers/useMutation.test.mjs +16 -0
- package/dist/esm/helpers/useMutation.test.mjs.map +1 -1
- package/dist/esm/helpers/useMutation.test.native.js +18 -0
- package/dist/esm/helpers/useMutation.test.native.js.map +1 -1
- package/dist/esm/multi.mjs +1 -1
- package/dist/esm/multi.mjs.map +1 -1
- package/dist/esm/multi.native.js +1 -1
- package/dist/esm/multi.native.js.map +1 -1
- package/package.json +2 -2
- package/src/createZeroClient.headless.test.tsx +58 -0
- package/src/createZeroClient.tsx +28 -7
- package/src/generate-helpers.ts +29 -0
- package/src/generate-layout.ts +80 -11
- package/src/generate-lite.test.ts +56 -0
- package/src/generate-lite.ts +38 -9
- package/src/generate.test.ts +19 -0
- package/src/generate.ts +19 -2
- package/src/helpers/createMutators.test.ts +5 -5
- package/src/helpers/createMutators.ts +7 -5
- package/src/helpers/recoverZeroClient.test.ts +34 -5
- package/src/helpers/recoverZeroClient.ts +38 -8
- package/src/helpers/useMutation.test.ts +15 -0
- package/src/helpers/useMutation.tsx +41 -2
- package/src/multi.ts +3 -3
- package/types/createZeroClient.d.ts +3 -3
- package/types/createZeroClient.d.ts.map +1 -1
- package/types/generate-helpers.d.ts +4 -0
- package/types/generate-helpers.d.ts.map +1 -1
- package/types/generate-layout.d.ts +2 -0
- package/types/generate-layout.d.ts.map +1 -1
- package/types/generate-lite.d.ts.map +1 -1
- package/types/generate.d.ts.map +1 -1
- package/types/helpers/createMutators.d.ts +3 -3
- package/types/helpers/createMutators.d.ts.map +1 -1
- package/types/helpers/recoverZeroClient.d.ts +2 -1
- package/types/helpers/recoverZeroClient.d.ts.map +1 -1
- package/types/helpers/useMutation.d.ts +1 -0
- package/types/helpers/useMutation.d.ts.map +1 -1
- package/types/multi.d.ts +2 -2
- package/types/multi.d.ts.map +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
2
2
|
const mutationErrorListeners = /* @__PURE__ */new Set();
|
|
3
|
+
const mutationObservations = /* @__PURE__ */new WeakMap();
|
|
3
4
|
function onMutationError(cb) {
|
|
4
5
|
mutationErrorListeners.add(cb);
|
|
5
6
|
return () => {
|
|
@@ -33,11 +34,30 @@ function rejectionToError(scope, e) {
|
|
|
33
34
|
message: e instanceof Error ? e.message : String(e)
|
|
34
35
|
};
|
|
35
36
|
}
|
|
37
|
+
function reportMutationInvocationError(error) {
|
|
38
|
+
emitMutationError(rejectionToError("client", error));
|
|
39
|
+
}
|
|
36
40
|
function observeMutation(result, onError) {
|
|
41
|
+
const existing = mutationObservations.get(result);
|
|
42
|
+
if (existing) {
|
|
43
|
+
if (onError) {
|
|
44
|
+
for (const error of existing.errors) onError(error);
|
|
45
|
+
if (!existing.settled) existing.listeners.add(onError);
|
|
46
|
+
}
|
|
47
|
+
return existing.done;
|
|
48
|
+
}
|
|
49
|
+
const observation = {
|
|
50
|
+
done: Promise.resolve(),
|
|
51
|
+
errors: [],
|
|
52
|
+
listeners: new Set(onError ? [onError] : []),
|
|
53
|
+
settled: false
|
|
54
|
+
};
|
|
55
|
+
mutationObservations.set(result, observation);
|
|
37
56
|
let reportedGlobal = false;
|
|
38
57
|
const report = err => {
|
|
39
58
|
if (!err) return;
|
|
40
|
-
|
|
59
|
+
observation.errors.push(err);
|
|
60
|
+
for (const listener of observation.listeners) listener(err);
|
|
41
61
|
if (!reportedGlobal) {
|
|
42
62
|
reportedGlobal = true;
|
|
43
63
|
emitMutationError(err);
|
|
@@ -45,7 +65,11 @@ function observeMutation(result, onError) {
|
|
|
45
65
|
};
|
|
46
66
|
const client = result.client.then(d => report(toMutationError("client", d))).catch(e => report(rejectionToError("client", e)));
|
|
47
67
|
const server = result.server.then(d => report(toMutationError("server", d))).catch(e => report(rejectionToError("server", e)));
|
|
48
|
-
|
|
68
|
+
observation.done = Promise.all([client, server]).then(() => {
|
|
69
|
+
observation.settled = true;
|
|
70
|
+
observation.listeners.clear();
|
|
71
|
+
});
|
|
72
|
+
return observation.done;
|
|
49
73
|
}
|
|
50
74
|
function useMutation(mutator) {
|
|
51
75
|
const [pending, setPending] = useState(false);
|
|
@@ -83,5 +107,5 @@ function useMutation(mutator) {
|
|
|
83
107
|
reset
|
|
84
108
|
}];
|
|
85
109
|
}
|
|
86
|
-
export { observeMutation, onMutationError, useMutation };
|
|
110
|
+
export { observeMutation, onMutationError, reportMutationInvocationError, useMutation };
|
|
87
111
|
//# sourceMappingURL=useMutation.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useRef","useState","mutationErrorListeners","Set","onMutationError","cb","add","delete","emitMutationError","error","size","process","env","NODE_ENV","console","toMutationError","scope","details","d","type","kind","message","rejectionToError","e","Error","String","observeMutation","result","onError","reportedGlobal","report","err","client","then","catch","server","
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useRef","useState","mutationErrorListeners","Set","mutationObservations","WeakMap","onMutationError","cb","add","delete","emitMutationError","error","size","process","env","NODE_ENV","console","toMutationError","scope","details","d","type","kind","message","rejectionToError","e","Error","String","reportMutationInvocationError","observeMutation","result","onError","existing","get","errors","settled","listeners","done","observation","Promise","resolve","set","reportedGlobal","report","err","push","listener","client","then","catch","server","all","clear","useMutation","mutator","pending","setPending","setError","seqRef","mountedRef","mutatorRef","current","reset","run","args","seq","isCurrent","finally"],"sources":["../../../src/helpers/useMutation.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -12,6 +12,7 @@ function _type_of(obj) {
|
|
|
12
12
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
13
13
|
}
|
|
14
14
|
var mutationErrorListeners = /* @__PURE__ */new Set();
|
|
15
|
+
var mutationObservations = /* @__PURE__ */new WeakMap();
|
|
15
16
|
function onMutationError(cb) {
|
|
16
17
|
mutationErrorListeners.add(cb);
|
|
17
18
|
return function () {
|
|
@@ -67,14 +68,75 @@ function rejectionToError(scope, e) {
|
|
|
67
68
|
message: _instanceof(e, Error) ? e.message : String(e)
|
|
68
69
|
};
|
|
69
70
|
}
|
|
71
|
+
function reportMutationInvocationError(error) {
|
|
72
|
+
emitMutationError(rejectionToError("client", error));
|
|
73
|
+
}
|
|
70
74
|
function observeMutation(result, onError) {
|
|
75
|
+
var existing = mutationObservations.get(result);
|
|
76
|
+
if (existing) {
|
|
77
|
+
if (onError) {
|
|
78
|
+
var _iteratorNormalCompletion = true,
|
|
79
|
+
_didIteratorError = false,
|
|
80
|
+
_iteratorError = void 0;
|
|
81
|
+
try {
|
|
82
|
+
for (var _iterator = existing.errors[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
83
|
+
var error = _step.value;
|
|
84
|
+
onError(error);
|
|
85
|
+
}
|
|
86
|
+
} catch (err) {
|
|
87
|
+
_didIteratorError = true;
|
|
88
|
+
_iteratorError = err;
|
|
89
|
+
} finally {
|
|
90
|
+
try {
|
|
91
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
92
|
+
_iterator.return();
|
|
93
|
+
}
|
|
94
|
+
} finally {
|
|
95
|
+
if (_didIteratorError) {
|
|
96
|
+
throw _iteratorError;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (!existing.settled) existing.listeners.add(onError);
|
|
101
|
+
}
|
|
102
|
+
return existing.done;
|
|
103
|
+
}
|
|
104
|
+
var observation = {
|
|
105
|
+
done: Promise.resolve(),
|
|
106
|
+
errors: [],
|
|
107
|
+
listeners: new Set(onError ? [onError] : []),
|
|
108
|
+
settled: false
|
|
109
|
+
};
|
|
110
|
+
mutationObservations.set(result, observation);
|
|
71
111
|
var reportedGlobal = false;
|
|
72
|
-
var report = function report2(
|
|
73
|
-
if (!
|
|
74
|
-
|
|
112
|
+
var report = function report2(err1) {
|
|
113
|
+
if (!err1) return;
|
|
114
|
+
observation.errors.push(err1);
|
|
115
|
+
var _iteratorNormalCompletion2 = true,
|
|
116
|
+
_didIteratorError2 = false,
|
|
117
|
+
_iteratorError2 = void 0;
|
|
118
|
+
try {
|
|
119
|
+
for (var _iterator2 = observation.listeners[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
120
|
+
var listener = _step2.value;
|
|
121
|
+
listener(err1);
|
|
122
|
+
}
|
|
123
|
+
} catch (err) {
|
|
124
|
+
_didIteratorError2 = true;
|
|
125
|
+
_iteratorError2 = err;
|
|
126
|
+
} finally {
|
|
127
|
+
try {
|
|
128
|
+
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
129
|
+
_iterator2.return();
|
|
130
|
+
}
|
|
131
|
+
} finally {
|
|
132
|
+
if (_didIteratorError2) {
|
|
133
|
+
throw _iteratorError2;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
75
137
|
if (!reportedGlobal) {
|
|
76
138
|
reportedGlobal = true;
|
|
77
|
-
emitMutationError(
|
|
139
|
+
emitMutationError(err1);
|
|
78
140
|
}
|
|
79
141
|
};
|
|
80
142
|
var client = result.client.then(function (d) {
|
|
@@ -87,9 +149,11 @@ function observeMutation(result, onError) {
|
|
|
87
149
|
}).catch(function (e) {
|
|
88
150
|
return report(rejectionToError("server", e));
|
|
89
151
|
});
|
|
90
|
-
|
|
91
|
-
|
|
152
|
+
observation.done = Promise.all([client, server]).then(function () {
|
|
153
|
+
observation.settled = true;
|
|
154
|
+
observation.listeners.clear();
|
|
92
155
|
});
|
|
156
|
+
return observation.done;
|
|
93
157
|
}
|
|
94
158
|
function useMutation(mutator) {
|
|
95
159
|
var [pending, setPending] = useState(false);
|
|
@@ -132,5 +196,5 @@ function useMutation(mutator) {
|
|
|
132
196
|
reset
|
|
133
197
|
}];
|
|
134
198
|
}
|
|
135
|
-
export { observeMutation, onMutationError, useMutation };
|
|
199
|
+
export { observeMutation, onMutationError, reportMutationInvocationError, useMutation };
|
|
136
200
|
//# sourceMappingURL=useMutation.native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useRef","useState","_instanceof","left","right","Symbol","hasInstance","_type_of","obj","constructor","mutationErrorListeners","Set","onMutationError","cb","add","delete","emitMutationError","error","size","process","env","NODE_ENV","console","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","iterator","_step","next","done","value","err","return","toMutationError","scope","details","_d_error","_d_error1","_d_error2","d","type","kind","message","rejectionToError","e","Error","String","observeMutation","result","onError","
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useRef","useState","_instanceof","left","right","Symbol","hasInstance","_type_of","obj","constructor","mutationErrorListeners","Set","mutationObservations","WeakMap","onMutationError","cb","add","delete","emitMutationError","error","size","process","env","NODE_ENV","console","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","iterator","_step","next","done","value","err","return","toMutationError","scope","details","_d_error","_d_error1","_d_error2","d","type","kind","message","rejectionToError","e","Error","String","reportMutationInvocationError","observeMutation","result","onError","existing","get","errors","settled","listeners","observation","Promise","resolve"],"sources":["../../../src/helpers/useMutation.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,WAAA,EAAaC,SAAA,EAAWC,MAAA,EAAQC,QAAA,QAAgB;AAkCzD,SAAMC,YAAAC,IAAA,EAAAC,KAAyB;EAa/B,2BAA6B;;EAEtB,IAAAA,KAAS,mBAAgEC,MAAA,oBAAAD,KAAA,CAAAC,MAAA,CAAAC,WAAA;IAC9E,SAAAF,KAAA,CAAAC,MAAuB,CAAAC,WAAM,EAAAH,IAAA;EAC7B,OAAO,OAAMA,IAAA,YAAAC,KAAA;AACX;AAAgC,SAClCG,SAAAC,GAAA;EACF;;EAEA,OAASA,GAAA,WAAAH,MAAkB,KAA4B,eAAAG,GAAA,CAAAC,WAAA,KAAAJ,MAAA,qBAAAG,GAAA;AACrD;AACE,IAAAE,sBAAgB,kBAAa,IAAcC,GAAA;AACzC,IAAAC,oBAAc,sBAAAC,OAAA;AAA2C,SAC3DC,gBAAAC,EAAA;EACAL,sBAAA,CAAAM,GAAA,CAAAD,EAAA;EACF;IACAL,sBAAiB,CAAAO,MAAA,CAAAF,EAAA;EACnB;AAEA;AAIE,SAAKG,iBAAkBA,CAAAC,KAAA;EACvB,IAAAT,sBAAU,CAAAU,IAAA;IAIV,IAAMC,OAAA,CAAAC,GAAS,CAAAC,QAAS,KAAO;MAC/BC,OAAO,CAAAL,KAAA,uCAAAA,KAAA;IACL;IACA;EAAwC;EACX,IAC7BM,yBAAkB;IAAAC,iBAAA;IAAAC,cAAA;EACpB;IACF,SAAAC,SAAA,GAAAlB,sBAAA,CAAAL,MAAA,CAAAwB,QAAA,KAAAC,KAAA,IAAAL,yBAAA,IAAAK,KAAA,GAAAF,SAAA,CAAAG,IAAA,IAAAC,IAAA,GAAAP,yBAAA;MAEA,IAASV,EAAA,GAAAe,KAAA,CAAAG,KAAiB;MACxBlB,EAAA,CAAOI,KAAA;IACL;EAAA,EACA,OAAMe,GAAA;IACNR,iBAAS,OAAa;IACxBC,cAAA,GAAAO,GAAA;EACF;IAEO;MACL,KAAAT,yBAAkB,IAAiBG,SAAU,CAAAO,MAAM;QACrDP,SAAA,CAAAO,MAAA;MAaO;IAIL,UAAM;MACF,IAAAT,iBAAU;QACR,MAAAC,cAAS;MACX;IACA;EAAqD;AAEvD;AAAgB,SAClBS,gBAAAC,KAAA,EAAAC,OAAA;EAEA,IAAAC,QAAM,EAAAC,SAAmC,EAAAC,SAAA;EAAA,IACvC,CAAAH,OAAM,IAAQ,QAAQA,OAAA,iCAAA/B,QAAA,CAAA+B,OAAA;EAAA,IACtBI,CAAA,GAAAJ,OAAS;EAAA,IACTI,CAAA,CAAAC,IAAA,KAAW,OAAQ,SAAU,IAAC;EAAa,OAC3C;IACFN,KAAA;IACAO,IAAA,IAAAL,QAAA,GAAqBG,CAAA,CAAAvB,KAAI,MAAQ,QAAAoB,QAAW,uBAAAA,QAAA,CAAAI,IAAA;IAE5CE,OAAI,IAAAL,SAAiB,GAAAE,CAAA,CAAAvB,KAAA,cAAAqB,SAAA,uBAAAA,SAAA,CAAAK,OAAA;IACrBP,OAAM,GAAAG,SAAU,GAA8BC,CAAA,CAAAvB,KAAA,cAAAsB,SAAA,uBAAAA,SAAA,CAAAH;EAC5C;AACA;AACA,SAAAQ,gBAAWA,CAAAT,KAAY,EAAAU,CAAA;EAEvB,OAAK;IACHV,KAAA;IACAO,IAAA;IACFC,OAAA,EAAA3C,WAAA,CAAA6C,CAAA,EAAAC,KAAA,IAAAD,CAAA,CAAAF,OAAA,GAAAI,MAAA,CAAAF,CAAA;EACF;AACA;AAGA,SAAMG,6BACGA,CAAA/B,KAAM;EAEfD,iBAAY,CAAA4B,gBAAoB,SAAQ,EAAA3B,KAAS;AAC/C;AACA,SAAAgC,eAAYA,CAAAC,MAAU,EAAMC,OAAA;EAC9B,IAACC,QAAA,GAAA1C,oBAAA,CAAA2C,GAAA,CAAAH,MAAA;EACD,IAAAE,QAAO;IACT,IAAAD,OAAA;MAkBO,IAAS5B,yBAEO;QAAAC,iBAAA;QAAAC,cAAA;MACrB,IAAO;QACD,KAAC,IAAOC,SAAQ,GAAI0B,QAA+B,CAAAE,MAAI,CAAAnD,MAAA,CAAAwB,QAAA,KAAAC,KAAA,IAAAL,yBAAA,IAAAK,KAAA,GAAAF,SAAA,CAAAG,IAAA,IAAAC,IAAA,GAAAP,yBAAA;UACvD,IAAAN,KAAS,GAAAW,KAAQ,CAAAG,KAAA;UACjBoB,OAAA,CAAAlC,KAAa;QACb;MACN,SAAWe,GAAA;QAEXR,iBAAgB;QACdC,cAAW,GAAUO,GAAA;MACrB,UAAO;QACL;UACF,KAAAT,yBAAA,IAAAG,SAAA,CAAAO,MAAA;YACGP,SAAA,CAAAO,MAAA;UAEC;QACJ,UAAa;UACb,IAAAT,iBAAgB;YACb,MAAAC,cAAA;UAEC;QACJ;MACA;MACA,KAAA2B,QAAe,CAAAG,OAAA,EAAAH,QAAA,CAAAI,SAAA,CAAA1C,GAAA,CAAAqC,OAAA;IACf;IAGA,OAAMC,QAAA,CAAAtB,IAAY;EAClB;EACE,IAAA2B,WAAI,GAAU;IAChB3B,IAAG,EAAA4B,OAAQ,CAAAC,OAAM;IACfL,MAAI;IACNE,SAAC,MAAA/C,GAAA,CAAA0C,OAAA,IAEDA,OAAO,CACN,GAAE;IAELI,OAAQ;EACV","ignoreList":[]}
|
|
@@ -106,6 +106,22 @@ describe("observeMutation", () => {
|
|
|
106
106
|
server.reject(new Error("x"));
|
|
107
107
|
await expect(observeMutation(result)).resolves.toBeUndefined();
|
|
108
108
|
});
|
|
109
|
+
test("observing the same result twice emits globally once", async () => {
|
|
110
|
+
const {
|
|
111
|
+
result,
|
|
112
|
+
client,
|
|
113
|
+
server
|
|
114
|
+
} = fakeResult();
|
|
115
|
+
const global = [];
|
|
116
|
+
const dispose = onMutationError(e => global.push(e));
|
|
117
|
+
const first = observeMutation(result);
|
|
118
|
+
const second = observeMutation(result);
|
|
119
|
+
client.resolve(SUCCESS);
|
|
120
|
+
server.resolve(appError("denied"));
|
|
121
|
+
await Promise.all([first, second]);
|
|
122
|
+
expect(global).toHaveLength(1);
|
|
123
|
+
dispose();
|
|
124
|
+
});
|
|
109
125
|
test("with no listener registered it falls back to console.error in dev", async () => {
|
|
110
126
|
const spy = vi.spyOn(console, "error").mockImplementation(() => {});
|
|
111
127
|
const {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["afterEach","describe","expect","test","vi","observeMutation","onMutationError","deferred","resolve","reject","promise","Promise","res","rej","fakeResult","client","server","result","SUCCESS","type","appError","message","error","restoreAllMocks","errors","dispose","e","push","done","toEqual","local","global","scope","kind","details","Error","toHaveLength","toMatchObject","resolves","toBeUndefined","spy","spyOn","console","mockImplementation","toHaveBeenCalledTimes","seen"],"sources":["../../../src/helpers/useMutation.test.ts"],"sourcesContent":[null],"mappings":"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
|
|
1
|
+
{"version":3,"names":["afterEach","describe","expect","test","vi","observeMutation","onMutationError","deferred","resolve","reject","promise","Promise","res","rej","fakeResult","client","server","result","SUCCESS","type","appError","message","error","restoreAllMocks","errors","dispose","e","push","done","toEqual","local","global","scope","kind","details","Error","toHaveLength","toMatchObject","resolves","toBeUndefined","first","second","all","spy","spyOn","console","mockImplementation","toHaveBeenCalledTimes","seen"],"sources":["../../../src/helpers/useMutation.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -118,6 +118,24 @@ describe("observeMutation", function () {
|
|
|
118
118
|
server.reject(new Error("x"));
|
|
119
119
|
await expect(observeMutation(result)).resolves.toBeUndefined();
|
|
120
120
|
});
|
|
121
|
+
test("observing the same result twice emits globally once", async function () {
|
|
122
|
+
var {
|
|
123
|
+
result,
|
|
124
|
+
client,
|
|
125
|
+
server
|
|
126
|
+
} = fakeResult();
|
|
127
|
+
var global = [];
|
|
128
|
+
var dispose = onMutationError(function (e) {
|
|
129
|
+
return global.push(e);
|
|
130
|
+
});
|
|
131
|
+
var first = observeMutation(result);
|
|
132
|
+
var second = observeMutation(result);
|
|
133
|
+
client.resolve(SUCCESS);
|
|
134
|
+
server.resolve(appError("denied"));
|
|
135
|
+
await Promise.all([first, second]);
|
|
136
|
+
expect(global).toHaveLength(1);
|
|
137
|
+
dispose();
|
|
138
|
+
});
|
|
121
139
|
test("with no listener registered it falls back to console.error in dev", async function () {
|
|
122
140
|
var spy = vi.spyOn(console, "error").mockImplementation(function () {});
|
|
123
141
|
var {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["afterEach","describe","expect","test","vi","observeMutation","onMutationError","deferred","resolve","reject","promise","Promise","res","rej","fakeResult","client","server","result","SUCCESS","type","appError","appError2","message","error","restoreAllMocks","errors","dispose","e","push","done","toEqual","local","global","scope","kind","details","Error","toHaveLength","toMatchObject"],"sources":["../../../src/helpers/useMutation.test.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,EAAWC,QAAA,EAAUC,MAAA,EAAQC,IAAA,EAAMC,EAAA,QAAU;AAEtD,SAASC,eAAA,EAAiBC,eAAA,QAA2C;AAGrE,SAASC,SAAA,EAAc;EACrB,IAAIC,OAAA;EACJ,IAAIC,MAAA;EACJ,IAAAC,OAAM,OAAUC,OAAI,WAAiBC,GAAA,EAAAC,GAAQ;IAC3CL,OAAA,GAAUI,GAAA;IACVH,MAAA,GAASI,GAAA;EACX,CAAC;EACD,OAAO;IACTH,OAAA;IAEAF,OAAS;IACPC;EACA;AACA;AAAO,SACLK,UAAUA,CAAA,EAAQ;EAAuC,IACzDC,MAAA,GAAAR,QAAA;EAAA,IACAS,MAAA,GAAAT,QAAA;EACF;IACFU,MAAA;MAEMF,MAAA,EAAAA,MAAY,CAAAL,OAAM;MAClBM,MAAA,EAAAA,MAAY,CAAAN;IAChB;IACAK,MAAO;IACTC;EAEA;AACE;AACF,IAACE,OAAA;EAEDC,IAAA;AACE;AACE,IAAAC,QAAQ,YAAQC,SAAQA,CAAAC,OAAW;EACnC;IACAH,IAAA,EAAM;IAENI,KAAA,EAAM;MACNJ,IAAA,EAAO;MACPG;IACA;EAEA;AACA;AAAQtB,SACT;EAEDI,EAAA,CAAAoB,eAAK;AACH;AACAvB,QAAA,kBAAgC;EAChCE,IAAA,yCAAiC;IACjC;MAAMc,MAAA;MAAAF,MAAU;MAAAC;IAAA,IAAiBF,UAAM;IAEvC,IAAAW,MAAM,GAAO;IAEb,IAAAC,OAAO,GAAApB,eAAe,WAAAqB,CAAA;MACtB,OAAOF,MAAQ,CAAAG,IAAA,CAAAD,CAAA;IACf;IAEA,IAAAE,IAAO,GAAAxB,eAAe,CAAAY,MAAA,YAAAU,CAAA;MACpB,OAAAF,MAAA,CAAAG,IAAA,CAAAD,CAAA;IAAA;IACSZ,MACP,CAAAP,OAAM,CAAAU,OAAA;IAAAF,MACN,CAAAR,OAAS,CAAAU,OAAA;IAAA,MACTW,IAAA;IAAS3B,MACX,CAAAuB,MAAA,EAAAK,OAAA;IACFJ,OAAC;EACD;EACAvB,IAAA,sEAAQ;IACT;MAAAc,MAAA;MAAAF,MAAA;MAAAC;IAAA,IAAAF,UAAA;IAED,IAAKiB,KAAA;IACH,IAAAC,MAAQ;IACR,IAAAN,OAAM,GAAApB,eAA2B,WAAAqB,CAAA;MACjC,OAAMK,MAAA,CAAUJ,IAAA,CAAAD,CAAA;IAGhB;IACA,IAAAE,IAAO,GAAAxB,eAAiB,CAAAY,MAAO,YAAAU,CAAA;MAC/B,OAAOI,KAAO,CAAAH,IAAI,CAAAD,CAAA;IAClB;IAEAZ,MAAA,CAAOP,OAAM,CAAEU,OAAA;IACfF,MAAA,CAAOR,OAAO,CAACY,QAAG,yBAAuB;IACzC,MAAAS,IAAQ;IACT3B,MAAA,CAAA6B,KAAA,EAAAD,OAAA,EAED;MACEG,KAAQ,UAAQ;MAChBC,IAAO,OAAO;MACdZ,OAAO,0BAAqB;MAC5Ba,OAAM,EAAO;IACd,EAED;IACEjC,MAAM,CAAA8B,
|
|
1
|
+
{"version":3,"names":["afterEach","describe","expect","test","vi","observeMutation","onMutationError","deferred","resolve","reject","promise","Promise","res","rej","fakeResult","client","server","result","SUCCESS","type","appError","appError2","message","error","restoreAllMocks","errors","dispose","e","push","done","toEqual","local","global","scope","kind","details","Error","toHaveLength","toMatchObject","resolves","toBeUndefined","first","second"],"sources":["../../../src/helpers/useMutation.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/esm/multi.mjs
CHANGED
|
@@ -29,7 +29,7 @@ function createZeroClients(instances) {
|
|
|
29
29
|
models: instance.models,
|
|
30
30
|
groupedQueries: instance.queries,
|
|
31
31
|
instanceName: name,
|
|
32
|
-
|
|
32
|
+
aggregates: instance.aggregates
|
|
33
33
|
};
|
|
34
34
|
clients[name] = name === innerName ? createZeroClientInternal(options) : createZeroClientWithDirectQueries(options);
|
|
35
35
|
}
|
package/dist/esm/multi.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["combineZeroClients","createUseQueryDirect","createZeroClientInternal","releaseClientInstances","createZeroClientWithDirectQueries","options","createDirectUseQuery","createZeroClients","instances","names","Object","keys","length","Error","includes","splice","indexOf","unshift","innerName","clients","name","reverse","instance","schema","models","groupedQueries","queries","instanceName","
|
|
1
|
+
{"version":3,"names":["combineZeroClients","createUseQueryDirect","createZeroClientInternal","releaseClientInstances","createZeroClientWithDirectQueries","options","createDirectUseQuery","createZeroClients","instances","names","Object","keys","length","Error","includes","splice","indexOf","unshift","innerName","clients","name","reverse","instance","schema","models","groupedQueries","queries","instanceName","aggregates","typedClients","orderedClients","map","providers","fromEntries","ProvideZero","combined"],"sources":["../../src/multi.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,kBAAA,QAA0B;AACnC,SAASC,oBAAA,QAA4B;AACrC,SACEC,wBAAA,QAGK;AACP,SAASC,sBAAA,QAA8B;AAMvC,cAAc;AAEP,SAASC,kCAIdC,OAAA,EAC6D;EAC7D,MAAMC,oBAAA,GAAmDL,oBAAA;EACzD,OAAOC,wBAAA,CAAyC;IAC9C,GAAGG,OAAA;IACHC;EACF,CAAC;AACH;AA6BO,SAASC,kBAEdC,SAAA,EAAsB;EACtB,MAAMC,KAAA,GAAQC,MAAA,CAAOC,IAAA,CAAKH,SAAS;EACnC,IAAIC,KAAA,CAAMG,MAAA,KAAW,GAAG;IACtB,MAAM,IAAIC,KAAA,CAAM,4DAA4D;EAC9E;EACA,IAAIJ,KAAA,CAAMK,QAAA,CAAS,SAAS,GAAG;IAC7BL,KAAA,CAAMM,MAAA,CAAON,KAAA,CAAMO,OAAA,CAAQ,SAAS,GAAG,CAAC;IACxCP,KAAA,CAAMQ,OAAA,CAAQ,SAAS;EACzB;EAEA,MAAMC,SAAA,GAAYT,KAAA,CAAMA,KAAA,CAAMG,MAAA,GAAS,CAAC;EACxC,MAAMO,OAAA,GAAuE,CAAC;EAI9EhB,sBAAA,CAAuBM,KAAK;EAC5B,WAAWW,IAAA,IAAQ,CAAC,GAAGX,KAAK,EAAEY,OAAA,CAAQ,GAAG;IACvC,MAAMC,QAAA,GAAWd,SAAA,CAAUY,IAAI;IAC/B,MAAMf,OAAA,GAAU;MACdkB,MAAA,EAAQD,QAAA,CAASC,MAAA;MACjBC,MAAA,EAAQF,QAAA,CAASE,MAAA;MACjBC,cAAA,EAAgBH,QAAA,CAASI,OAAA;MACzBC,YAAA,EAAcP,IAAA;MACdQ,UAAA,EAAYN,QAAA,CAASM;IACvB;IACAT,OAAA,CAAQC,IAAI,IACVA,IAAA,KAASF,SAAA,GACLhB,wBAAA,CAAyBG,OAAO,IAChCD,iCAAA,CAAkCC,OAAO;EACjD;EAEA,MAAMwB,YAAA,GAAeV,OAAA;EAGrB,MAAMW,cAAA,GAAiBrB,KAAA,CAAMsB,GAAA,CAC1BX,IAAA,IAASS,YAAA,CAAaT,IAAuB,CAChD;EACA,MAAMY,SAAA,GAAYtB,MAAA,CAAOuB,WAAA,CACvBxB,KAAA,CAAMsB,GAAA,CAAKX,IAAA,IAAS,CAACA,IAAA,EAAMD,OAAA,CAAQC,IAAI,EAAGc,WAAW,CAAC,CACxD;EAEA,OAAO;IACLf,OAAA,EAASU,YAAA;IACTG,SAAA;IACAG,QAAA,EAAUnC,kBAAA,CAAmB,GAAG8B,cAAc;EAChD;AACF","ignoreList":[]}
|
package/dist/esm/multi.native.js
CHANGED
|
@@ -34,7 +34,7 @@ function createZeroClients(instances) {
|
|
|
34
34
|
models: instance.models,
|
|
35
35
|
groupedQueries: instance.queries,
|
|
36
36
|
instanceName: name,
|
|
37
|
-
|
|
37
|
+
aggregates: instance.aggregates
|
|
38
38
|
};
|
|
39
39
|
clients[name] = name === innerName ? createZeroClientInternal(options) : createZeroClientWithDirectQueries(options);
|
|
40
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["combineZeroClients","createUseQueryDirect","createZeroClientInternal","releaseClientInstances","createZeroClientWithDirectQueries","options","createDirectUseQuery","createZeroClients","instances","names","Object","keys","length","Error","includes","splice","indexOf","unshift","innerName","clients","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","reverse","Symbol","iterator","_step","next","done","name","value","instance","schema","models","groupedQueries","queries","instanceName","
|
|
1
|
+
{"version":3,"names":["combineZeroClients","createUseQueryDirect","createZeroClientInternal","releaseClientInstances","createZeroClientWithDirectQueries","options","createDirectUseQuery","createZeroClients","instances","names","Object","keys","length","Error","includes","splice","indexOf","unshift","innerName","clients","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","reverse","Symbol","iterator","_step","next","done","name","value","instance","schema","models","groupedQueries","queries","instanceName","aggregates","err","return"],"sources":["../../src/multi.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,kBAAA,QAA0B;AACnC,SAASC,oBAAA,QAA4B;AACrC,SAAAC,wBAAA;AAAA,SACEC,sBAAA;AAAA,cAGK;AACP,SAASC,iCAA8BA,CAAAC,OAAA;EAMvC,IAAAC,oBAAc,GAAAL,oBAAA;EAEP,OAASC,wBAAA;IAMd,GAAAG,OAAM;IACNC;EAAgD,EAC9C;AAAG;AACH,SACDC,kBAAAC,SAAA;EACH,IAAAC,KAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAH,SAAA;EA6BO,IAAAC,KAAS,CAAAG,MAAA;IAGd,MAAM,IAAAC,KAAQ,6DAAqB;EACnC;EACE,IAAAJ,KAAM,CAAAK,QAAU;IAClBL,KAAA,CAAAM,MAAA,CAAAN,KAAA,CAAAO,OAAA;IACAP,KAAI,CAAAQ,OAAM,UAAS;EACjB;EACA,IAAAC,SAAM,GAAQT,KAAA,CAAAA,KAAS,CAAAG,MAAA;EACzB,IAAAO,OAAA;EAEAhB,sBAAkB,CAAAM,KAAM;EACxB,IAAAW,yBAA8E;IAAAC,iBAAA;IAAAC,cAAA;EAI9E;IACA,SAAWC,SAAS,GAAG,CACrB,GAAAd,KAAM,CACN,CAAAe,OAAM,GAAAC,MAAU,CAAAC,QAAA,KAAAC,KAAA,IAAAP,yBAAA,IAAAO,KAAA,GAAAJ,SAAA,CAAAK,IAAA,IAAAC,IAAA,GAAAT,yBAAA;MACd,IAAAU,IAAQ,GAAAH,KAAA,CAASI,KAAA;MACjB,IAAAC,QAAQ,GAAAxB,SAAS,CAAAsB,IAAA;MACjB,IAAAzB,OAAA;QACA4B,MAAA,EAAAD,QAAc,CAAAC,MAAA;QACdC,MAAA,EAAAF,QAAY,CAAAE,MAAS;QACvBC,cAAA,EAAAH,QAAA,CAAAI,OAAA;QACAC,YACE,EAAAP,IAAA;QAGJQ,UAAA,EAAAN,QAAA,CAAAM;MAEA;MAGAnB,OAAM,CAAAW,IAAA,IAAAA,IAAiB,KAAMZ,SAAA,GAAAhB,wBAAA,CAAAG,OAAA,IAAAD,iCAAA,CAAAC,OAAA;IAC3B;EACF,SAAAkC,GAAA;IACAlB,iBAAkB,OAAO;IACvBC,cAAW,GAAAiB,GAAS;EACtB;IAEA;MACE,KAAAnB,yBAAS,IAAAG,SAAA,CAAAiB,MAAA;QACTjB,SAAA,CAAAiB,MAAA;MACA;IACF;MACF,IAAAnB,iBAAA","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "on-zero",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"description": "A typed layer over @rocicorp/zero with queries, mutations, and permissions",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"files": [
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
"chokidar": "^4.0.3",
|
|
106
106
|
"citty": "^0.1.6",
|
|
107
107
|
"dequal": "^2.0.3",
|
|
108
|
-
"orez-lite": "0.
|
|
108
|
+
"orez-lite": "0.13.0",
|
|
109
109
|
"valibot": "^1.1.0"
|
|
110
110
|
},
|
|
111
111
|
"peerDependencies": {
|
|
@@ -4,6 +4,7 @@ import { createSchema, string, table } from '@rocicorp/zero'
|
|
|
4
4
|
import { expect, test } from 'vitest'
|
|
5
5
|
|
|
6
6
|
import { createZeroClient } from './createZeroClient'
|
|
7
|
+
import { onMutationError, type MutationError } from './helpers/useMutation'
|
|
7
8
|
|
|
8
9
|
import type { Query } from '@rocicorp/zero'
|
|
9
10
|
|
|
@@ -72,3 +73,60 @@ test('a hot-recreated client resolves the mounted same-name instance', async ()
|
|
|
72
73
|
await connection.close()
|
|
73
74
|
expect(() => refreshed.zero.clientID).toThrow(/not initialized/)
|
|
74
75
|
})
|
|
76
|
+
|
|
77
|
+
test('direct facade mutations surface client failures without explicit observation', async () => {
|
|
78
|
+
const client = createZeroClient({
|
|
79
|
+
schema,
|
|
80
|
+
models: {
|
|
81
|
+
user: {
|
|
82
|
+
mutate: {
|
|
83
|
+
insert: async () => {
|
|
84
|
+
throw new Error('optimistic mutation failed')
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
} as never,
|
|
89
|
+
groupedQueries: { headlessObservedMutationTest: { byId } },
|
|
90
|
+
instanceName: 'headless-observed-mutation-test',
|
|
91
|
+
})
|
|
92
|
+
const connection = client.connectHeadless({
|
|
93
|
+
userID: 'user-headless-observed-mutation',
|
|
94
|
+
kvStore: 'mem',
|
|
95
|
+
storageKey: 'headless-observed-mutation-test',
|
|
96
|
+
})
|
|
97
|
+
const errors: MutationError[] = []
|
|
98
|
+
const dispose = onMutationError((error) => errors.push(error))
|
|
99
|
+
|
|
100
|
+
const mutate = Reflect.get(client.zero, 'mutate')
|
|
101
|
+
const user = Reflect.get(mutate, 'user')
|
|
102
|
+
const insert = Reflect.get(user, 'insert')
|
|
103
|
+
const result = Reflect.apply(insert, null, [{ id: 'u1', name: 'Ada' }])
|
|
104
|
+
if (result === null || typeof result !== 'object') {
|
|
105
|
+
throw new Error('mutation did not return client/server promises')
|
|
106
|
+
}
|
|
107
|
+
await Promise.all([Reflect.get(result, 'client'), Reflect.get(result, 'server')])
|
|
108
|
+
await Promise.resolve()
|
|
109
|
+
|
|
110
|
+
expect(errors).toHaveLength(1)
|
|
111
|
+
expect(errors[0]).toMatchObject({
|
|
112
|
+
kind: 'app',
|
|
113
|
+
message: 'optimistic mutation failed',
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
errors.length = 0
|
|
117
|
+
const missing = Reflect.get(user, 'createdAfterClientConstruction')
|
|
118
|
+
expect(() => Reflect.apply(missing, null, [{}])).toThrow(
|
|
119
|
+
"mutation 'user.createdAfterClientConstruction' is not registered"
|
|
120
|
+
)
|
|
121
|
+
expect(errors).toEqual([
|
|
122
|
+
{
|
|
123
|
+
scope: 'client',
|
|
124
|
+
kind: 'zero',
|
|
125
|
+
message:
|
|
126
|
+
"[on-zero] mutation 'user.createdAfterClientConstruction' is not registered on the active Zero client.",
|
|
127
|
+
},
|
|
128
|
+
])
|
|
129
|
+
|
|
130
|
+
dispose()
|
|
131
|
+
await connection.close()
|
|
132
|
+
})
|
package/src/createZeroClient.tsx
CHANGED
|
@@ -45,6 +45,7 @@ import {
|
|
|
45
45
|
type ZeroLogPattern,
|
|
46
46
|
type ZeroRecoveryDeps,
|
|
47
47
|
} from './helpers/recoverZeroClient'
|
|
48
|
+
import { observeMutation, reportMutationInvocationError } from './helpers/useMutation'
|
|
48
49
|
import { registerClientInstance } from './instanceRegistry'
|
|
49
50
|
import { getAllMutationsPermissions, getMutationsPermissions } from './modelRegistry'
|
|
50
51
|
import { registerQuery } from './queryRegistry'
|
|
@@ -71,7 +72,7 @@ import type {
|
|
|
71
72
|
ZeroOptions,
|
|
72
73
|
Schema as ZeroSchema,
|
|
73
74
|
} from '@rocicorp/zero'
|
|
74
|
-
import type {
|
|
75
|
+
import type { AggregateSet } from 'orez-lite/aggregate'
|
|
75
76
|
|
|
76
77
|
type PreloadOptions = { ttl?: 'always' | 'never' | number | undefined }
|
|
77
78
|
|
|
@@ -101,7 +102,7 @@ export type CreateZeroClientOptions<
|
|
|
101
102
|
schema: Schema
|
|
102
103
|
models: Models
|
|
103
104
|
groupedQueries: GroupedQueries
|
|
104
|
-
|
|
105
|
+
aggregates?: AggregateSet<Schema>
|
|
105
106
|
permissionStrategy?: PermissionStrategy
|
|
106
107
|
// repeated server acknowledgement timeouts reconnect with the existing local
|
|
107
108
|
// state. one timeout remains a normal slow-server failure.
|
|
@@ -161,7 +162,7 @@ export function createZeroClientInternal<
|
|
|
161
162
|
schema,
|
|
162
163
|
models,
|
|
163
164
|
groupedQueries,
|
|
164
|
-
|
|
165
|
+
aggregates,
|
|
165
166
|
permissionStrategy = 'optimistic',
|
|
166
167
|
instanceName = 'default',
|
|
167
168
|
serverAckTimeoutRecoveryThreshold = 2,
|
|
@@ -309,7 +310,7 @@ export function createZeroClientInternal<
|
|
|
309
310
|
environment: 'client',
|
|
310
311
|
authData: null,
|
|
311
312
|
bindCan: permissionsHelpers.bindCan,
|
|
312
|
-
|
|
313
|
+
aggregates,
|
|
313
314
|
})
|
|
314
315
|
return clientMutators
|
|
315
316
|
}
|
|
@@ -362,6 +363,7 @@ export function createZeroClientInternal<
|
|
|
362
363
|
...(benignLogPatterns ?? []),
|
|
363
364
|
],
|
|
364
365
|
onRecovery: () => mutationLifecycle.fence(),
|
|
366
|
+
recoverInPlace: () => remint({ dropLocalState: false }),
|
|
365
367
|
}
|
|
366
368
|
const recovery = makeZeroRecovery(recoveryDeps)
|
|
367
369
|
const createdInstance = new ZeroClient<Schema, ZeroMutators>({
|
|
@@ -442,7 +444,16 @@ export function createZeroClientInternal<
|
|
|
442
444
|
)
|
|
443
445
|
}
|
|
444
446
|
let target: any = zeroRuntime.zero.mutate
|
|
445
|
-
for (const key of path)
|
|
447
|
+
for (const key of path) {
|
|
448
|
+
if (target == null) break
|
|
449
|
+
target = target[key]
|
|
450
|
+
}
|
|
451
|
+
if (typeof target !== 'function') {
|
|
452
|
+
const label = path.length > 0 ? path.join('.') : '<callable mutation>'
|
|
453
|
+
throw new Error(
|
|
454
|
+
`[on-zero] mutation '${label}' is not registered on the active Zero client.`
|
|
455
|
+
)
|
|
456
|
+
}
|
|
446
457
|
return target
|
|
447
458
|
}
|
|
448
459
|
return new Proxy(function lazyMutator() {} as any, {
|
|
@@ -451,7 +462,14 @@ export function createZeroClientInternal<
|
|
|
451
462
|
return lazyMutatePath([...path, key])
|
|
452
463
|
},
|
|
453
464
|
apply(_, __, args) {
|
|
454
|
-
|
|
465
|
+
try {
|
|
466
|
+
const result = resolve()(...args)
|
|
467
|
+
void observeMutation(result)
|
|
468
|
+
return result
|
|
469
|
+
} catch (error) {
|
|
470
|
+
reportMutationInvocationError(error)
|
|
471
|
+
throw error
|
|
472
|
+
}
|
|
455
473
|
},
|
|
456
474
|
})
|
|
457
475
|
}
|
|
@@ -460,8 +478,11 @@ export function createZeroClientInternal<
|
|
|
460
478
|
// Ideally rocicorp/zero would support .setAuth() natively, but for now we swap instances.
|
|
461
479
|
const zero: ZeroInstance = new Proxy({} as never, {
|
|
462
480
|
get(_, key) {
|
|
481
|
+
// Always resolve mutation paths at call time. Besides surviving auth
|
|
482
|
+
// rotations, this is the one boundary that can observe raw
|
|
483
|
+
// fire-and-forget calls before callers discard Zero's result promises.
|
|
484
|
+
if (key === 'mutate') return lazyMutatePath([])
|
|
463
485
|
if (zeroRuntime.zero === null) {
|
|
464
|
-
if (key === 'mutate') return lazyMutatePath([])
|
|
465
486
|
throw new Error(
|
|
466
487
|
`Zero instance not initialized. Ensure ZeroProvider is mounted before accessing 'zero'.`
|
|
467
488
|
)
|
package/src/generate-helpers.ts
CHANGED
|
@@ -421,6 +421,7 @@ this folder is auto-generated by on-zero. do not edit files here directly.
|
|
|
421
421
|
- \`syncedQueries.ts\` - namespaced syncedQuery wrappers for server setup
|
|
422
422
|
- \`syncedMutations.ts\` - valibot validators for mutation args (server auto-validation)
|
|
423
423
|
- \`instances.ts\` - generated client partitions, sync tables, and server-only support tables
|
|
424
|
+
- \`aggregates.ts\` - every namespace's aggregate declarations compiled into one set
|
|
424
425
|
|
|
425
426
|
## usage guidelines
|
|
426
427
|
|
|
@@ -555,6 +556,34 @@ ${entries}
|
|
|
555
556
|
`
|
|
556
557
|
}
|
|
557
558
|
|
|
559
|
+
// every namespace's `aggregates.ts` declares definitions only; this is the one
|
|
560
|
+
// place they get compiled. a single defineAggregates call over the union is what
|
|
561
|
+
// makes the cross-namespace checks possible — two namespaces writing the same
|
|
562
|
+
// target column is a real conflict, and only the whole set can see it.
|
|
563
|
+
export function generateAggregatesFile(
|
|
564
|
+
namespaces: Array<{ name: string; importPath: string }>
|
|
565
|
+
): string {
|
|
566
|
+
const sorted = [...namespaces].sort((a, b) => a.name.localeCompare(b.name))
|
|
567
|
+
const imports = sorted
|
|
568
|
+
.map(
|
|
569
|
+
(namespace) =>
|
|
570
|
+
`import { aggregates as ${namespace.name}Aggregates } from '${namespace.importPath}'`
|
|
571
|
+
)
|
|
572
|
+
.join('\n')
|
|
573
|
+
const merged = sorted.map((namespace) => `${namespace.name}Aggregates`).join(', ')
|
|
574
|
+
|
|
575
|
+
return `// auto-generated by: on-zero generate
|
|
576
|
+
import { defineAggregates, mergeAggregateDefinitions } from 'orez-lite/aggregate'
|
|
577
|
+
${imports}
|
|
578
|
+
import { schema } from './schema'
|
|
579
|
+
|
|
580
|
+
export const aggregates = defineAggregates(
|
|
581
|
+
schema,
|
|
582
|
+
mergeAggregateDefinitions(${merged}),
|
|
583
|
+
)
|
|
584
|
+
`
|
|
585
|
+
}
|
|
586
|
+
|
|
558
587
|
export function generateSyncedQueriesFile(
|
|
559
588
|
queries: Array<{
|
|
560
589
|
name: string
|