@pixotope/query 0.8.0 → 0.10.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/.turbo/turbo-build.log +10 -10
- package/.turbo/turbo-check-types.log +1 -1
- package/.turbo/turbo-test.log +10 -10
- package/CHANGELOG.md +13 -0
- package/dist/index.cjs +45 -86
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -5
- package/dist/index.d.ts +8 -5
- package/dist/index.js +45 -96
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/factories.test.ts +1 -1
- package/src/factories.ts +8 -4
- package/src/useQuery.test.ts +13 -0
- package/src/useQuery.ts +2 -2
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @pixotope/query@0.
|
|
2
|
+
> @pixotope/query@0.10.0 build /home/circleci/project/packages/query
|
|
3
3
|
> tsup src/index.ts --format cjs,esm --dts --sourcemap
|
|
4
4
|
|
|
5
5
|
[34mCLI[39m Building entry: src/index.ts
|
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
[34mCLI[39m Target: es6
|
|
9
9
|
[34mCJS[39m Build start
|
|
10
10
|
[34mESM[39m Build start
|
|
11
|
-
[32mCJS[39m [1mdist/index.cjs [22m[
|
|
12
|
-
[32mCJS[39m [1mdist/index.cjs.map [22m[
|
|
13
|
-
[32mCJS[39m ⚡️ Build success in
|
|
14
|
-
[32mESM[39m [1mdist/index.js [22m[
|
|
15
|
-
[32mESM[39m [1mdist/index.js.map [22m[
|
|
16
|
-
[32mESM[39m ⚡️ Build success in
|
|
11
|
+
[32mCJS[39m [1mdist/index.cjs [22m[32m20.65 KB[39m
|
|
12
|
+
[32mCJS[39m [1mdist/index.cjs.map [22m[32m40.26 KB[39m
|
|
13
|
+
[32mCJS[39m ⚡️ Build success in 59ms
|
|
14
|
+
[32mESM[39m [1mdist/index.js [22m[32m18.85 KB[39m
|
|
15
|
+
[32mESM[39m [1mdist/index.js.map [22m[32m40.20 KB[39m
|
|
16
|
+
[32mESM[39m ⚡️ Build success in 58ms
|
|
17
17
|
[34mDTS[39m Build start
|
|
18
|
-
[32mDTS[39m ⚡️ Build success in
|
|
19
|
-
[32mDTS[39m [1mdist/index.d.cts [22m[32m12.
|
|
20
|
-
[32mDTS[39m [1mdist/index.d.ts [22m[32m12.
|
|
18
|
+
[32mDTS[39m ⚡️ Build success in 2120ms
|
|
19
|
+
[32mDTS[39m [1mdist/index.d.cts [22m[32m12.86 KB[39m
|
|
20
|
+
[32mDTS[39m [1mdist/index.d.ts [22m[32m12.86 KB[39m
|
package/.turbo/turbo-test.log
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
|
|
2
|
-
> @pixotope/query@0.
|
|
2
|
+
> @pixotope/query@0.10.0 test /home/circleci/project/packages/query
|
|
3
3
|
> vitest
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
[1m[46m RUN [49m[22m [36mv3.2.4 [39m[90m/home/circleci/project/packages/query[39m
|
|
7
7
|
|
|
8
|
-
[32m✓[39m src/proxyBinders.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m
|
|
9
|
-
[32m✓[39m src/useSubscription.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m
|
|
10
|
-
[32m✓[39m src/useSubscriptionCore.test.ts [2m([22m[2m21 tests[22m[2m)[22m[32m
|
|
11
|
-
[32m✓[39m src/factories.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m
|
|
12
|
-
[32m✓[39m src/useMutation.test.ts [2m([22m[2m11 tests[22m[2m)[22m[33m
|
|
13
|
-
[32m✓[39m src/useQuery.test.ts [2m([22m[
|
|
8
|
+
[32m✓[39m src/proxyBinders.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 9[2mms[22m[39m
|
|
9
|
+
[32m✓[39m src/useSubscription.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 110[2mms[22m[39m
|
|
10
|
+
[32m✓[39m src/useSubscriptionCore.test.ts [2m([22m[2m21 tests[22m[2m)[22m[32m 200[2mms[22m[39m
|
|
11
|
+
[32m✓[39m src/factories.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 104[2mms[22m[39m
|
|
12
|
+
[32m✓[39m src/useMutation.test.ts [2m([22m[2m11 tests[22m[2m)[22m[33m 681[2mms[22m[39m
|
|
13
|
+
[32m✓[39m src/useQuery.test.ts [2m([22m[2m18 tests[22m[2m)[22m[33m 1297[2mms[22m[39m
|
|
14
14
|
|
|
15
15
|
[2m Test Files [22m [1m[32m6 passed[39m[22m[90m (6)[39m
|
|
16
|
-
[2m Tests [22m [1m[
|
|
17
|
-
[2m Start at [22m
|
|
18
|
-
[2m Duration [22m 7.
|
|
16
|
+
[2m Tests [22m [1m[32m60 passed[39m[22m[90m (60)[39m
|
|
17
|
+
[2m Start at [22m 00:45:15
|
|
18
|
+
[2m Duration [22m 7.70s[2m (transform 920ms, setup 1.98s, collect 4.53s, tests 2.40s, environment 10.79s, prepare 5.12s)[22m
|
|
19
19
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @pixotope/query
|
|
2
2
|
|
|
3
|
+
## 0.10.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 6f9fcff: pass more types to underlying query hook
|
|
8
|
+
|
|
9
|
+
## 0.9.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- baa9a61: - added new `event-bus` package
|
|
14
|
+
- in `packages/query` update to pass more info to `queryFn`
|
|
15
|
+
|
|
3
16
|
## 0.8.0
|
|
4
17
|
|
|
5
18
|
### Minor Changes
|
package/dist/index.cjs
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __defProps = Object.defineProperties;
|
|
5
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
5
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
7
6
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
7
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
9
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
10
8
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
11
9
|
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
12
10
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
@@ -34,9 +32,6 @@ var __objRest = (source, exclude) => {
|
|
|
34
32
|
}
|
|
35
33
|
return target;
|
|
36
34
|
};
|
|
37
|
-
var __commonJS = (cb, mod) => function __require() {
|
|
38
|
-
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
39
|
-
};
|
|
40
35
|
var __export = (target, all) => {
|
|
41
36
|
for (var name in all)
|
|
42
37
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -49,14 +44,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
49
44
|
}
|
|
50
45
|
return to;
|
|
51
46
|
};
|
|
52
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
53
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
54
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
55
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
56
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
57
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
58
|
-
mod
|
|
59
|
-
));
|
|
60
47
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
61
48
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
62
49
|
var __async = (__this, __arguments, generator) => {
|
|
@@ -80,71 +67,6 @@ var __async = (__this, __arguments, generator) => {
|
|
|
80
67
|
});
|
|
81
68
|
};
|
|
82
69
|
|
|
83
|
-
// ../utils/dist/comparison/index.js
|
|
84
|
-
var require_comparison = __commonJS({
|
|
85
|
-
"../utils/dist/comparison/index.js"(exports2, module2) {
|
|
86
|
-
"use strict";
|
|
87
|
-
var __defProp2 = Object.defineProperty;
|
|
88
|
-
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
|
|
89
|
-
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
|
90
|
-
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
91
|
-
var __export2 = (target, all) => {
|
|
92
|
-
for (var name in all)
|
|
93
|
-
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
94
|
-
};
|
|
95
|
-
var __copyProps2 = (to, from, except, desc) => {
|
|
96
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
97
|
-
for (let key of __getOwnPropNames2(from))
|
|
98
|
-
if (!__hasOwnProp2.call(to, key) && key !== except)
|
|
99
|
-
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
|
|
100
|
-
}
|
|
101
|
-
return to;
|
|
102
|
-
};
|
|
103
|
-
var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
|
|
104
|
-
var comparison_exports = {};
|
|
105
|
-
__export2(comparison_exports, {
|
|
106
|
-
shallowEqual: () => shallowEqual2
|
|
107
|
-
});
|
|
108
|
-
module2.exports = __toCommonJS2(comparison_exports);
|
|
109
|
-
function shallowEqual2(objA, objB) {
|
|
110
|
-
if (Object.is(objA, objB)) {
|
|
111
|
-
return true;
|
|
112
|
-
}
|
|
113
|
-
if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
|
|
114
|
-
return false;
|
|
115
|
-
}
|
|
116
|
-
if (objA instanceof Map && objB instanceof Map) {
|
|
117
|
-
if (objA.size !== objB.size) return false;
|
|
118
|
-
for (const [key, value] of objA) {
|
|
119
|
-
if (!Object.is(value, objB.get(key))) {
|
|
120
|
-
return false;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return true;
|
|
124
|
-
}
|
|
125
|
-
if (objA instanceof Set && objB instanceof Set) {
|
|
126
|
-
if (objA.size !== objB.size) return false;
|
|
127
|
-
for (const value of objA) {
|
|
128
|
-
if (!objB.has(value)) {
|
|
129
|
-
return false;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return true;
|
|
133
|
-
}
|
|
134
|
-
const keysA = Object.keys(objA);
|
|
135
|
-
if (keysA.length !== Object.keys(objB).length) {
|
|
136
|
-
return false;
|
|
137
|
-
}
|
|
138
|
-
for (let i = 0; i < keysA.length; i++) {
|
|
139
|
-
if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {
|
|
140
|
-
return false;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
return true;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
|
|
148
70
|
// src/index.ts
|
|
149
71
|
var index_exports = {};
|
|
150
72
|
__export(index_exports, {
|
|
@@ -366,7 +288,7 @@ var useQuery = (_a) => {
|
|
|
366
288
|
}, []);
|
|
367
289
|
const refetch = (0, import_react2.useCallback)(
|
|
368
290
|
(params = void 0) => __async(null, null, function* () {
|
|
369
|
-
var _a2, _b2, _c, _d, _e, _f, _g, _h;
|
|
291
|
+
var _a2, _b2, _c, _d, _e, _f, _g, _h, _i;
|
|
370
292
|
const requestId = getRandomUUID();
|
|
371
293
|
requestIdRef.current = requestId;
|
|
372
294
|
if (!internalOptionsRef.current.enabled) {
|
|
@@ -376,7 +298,7 @@ var useQuery = (_a) => {
|
|
|
376
298
|
setError(null);
|
|
377
299
|
try {
|
|
378
300
|
const promises = [
|
|
379
|
-
queryFnRef.current(params),
|
|
301
|
+
queryFnRef.current(params, { key: queryKeyPassed, lastFetchedAt: (_a2 = lastFetchedAt.current) != null ? _a2 : void 0 }),
|
|
380
302
|
...internalOptionsRef.current.timeout ? [
|
|
381
303
|
new Promise(
|
|
382
304
|
(resolve) => setTimeout(
|
|
@@ -399,13 +321,13 @@ var useQuery = (_a) => {
|
|
|
399
321
|
}
|
|
400
322
|
setStatus("success");
|
|
401
323
|
lastFetchedAt.current = (/* @__PURE__ */ new Date()).getTime();
|
|
402
|
-
(
|
|
403
|
-
(
|
|
324
|
+
(_c = (_b2 = internalCallbackRef.current).onSuccess) == null ? void 0 : _c.call(_b2, res);
|
|
325
|
+
(_e = (_d = internalCallbackRef.current).onSettled) == null ? void 0 : _e.call(_d, res, void 0);
|
|
404
326
|
} catch (error2) {
|
|
405
327
|
setError(error2);
|
|
406
328
|
setStatus("error");
|
|
407
|
-
(
|
|
408
|
-
(
|
|
329
|
+
(_g = (_f = internalCallbackRef.current).onError) == null ? void 0 : _g.call(_f, error2);
|
|
330
|
+
(_i = (_h = internalCallbackRef.current).onSettled) == null ? void 0 : _i.call(_h, void 0, error2);
|
|
409
331
|
}
|
|
410
332
|
}),
|
|
411
333
|
[handleSetData]
|
|
@@ -531,8 +453,45 @@ function buildQueryHook(promiseFunction, getTargetService) {
|
|
|
531
453
|
};
|
|
532
454
|
}
|
|
533
455
|
|
|
456
|
+
// ../utils/dist/chunk-5QIHMQPV.js
|
|
457
|
+
function shallowEqual(objA, objB) {
|
|
458
|
+
if (Object.is(objA, objB)) {
|
|
459
|
+
return true;
|
|
460
|
+
}
|
|
461
|
+
if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
|
|
462
|
+
return false;
|
|
463
|
+
}
|
|
464
|
+
if (objA instanceof Map && objB instanceof Map) {
|
|
465
|
+
if (objA.size !== objB.size) return false;
|
|
466
|
+
for (const [key, value] of objA) {
|
|
467
|
+
if (!Object.is(value, objB.get(key))) {
|
|
468
|
+
return false;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
return true;
|
|
472
|
+
}
|
|
473
|
+
if (objA instanceof Set && objB instanceof Set) {
|
|
474
|
+
if (objA.size !== objB.size) return false;
|
|
475
|
+
for (const value of objA) {
|
|
476
|
+
if (!objB.has(value)) {
|
|
477
|
+
return false;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
return true;
|
|
481
|
+
}
|
|
482
|
+
const keysA = Object.keys(objA);
|
|
483
|
+
if (keysA.length !== Object.keys(objB).length) {
|
|
484
|
+
return false;
|
|
485
|
+
}
|
|
486
|
+
for (let i = 0; i < keysA.length; i++) {
|
|
487
|
+
if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {
|
|
488
|
+
return false;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
return true;
|
|
492
|
+
}
|
|
493
|
+
|
|
534
494
|
// src/useSubscriptionCore.ts
|
|
535
|
-
var import_comparison = __toESM(require_comparison(), 1);
|
|
536
495
|
var import_react4 = require("react");
|
|
537
496
|
function useSubscriptionCore(options) {
|
|
538
497
|
const {
|
|
@@ -545,7 +504,7 @@ function useSubscriptionCore(options) {
|
|
|
545
504
|
onMessage,
|
|
546
505
|
onError,
|
|
547
506
|
select,
|
|
548
|
-
isEqual =
|
|
507
|
+
isEqual = shallowEqual
|
|
549
508
|
} = options;
|
|
550
509
|
const [status, setStatus] = (0, import_react4.useState)("idle");
|
|
551
510
|
const [data, setData] = (0, import_react4.useState)(initialState);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../utils/dist/comparison/index.js","../src/index.ts","../src/factories.ts","../src/useMutation.ts","../src/useQuery.ts","../src/useSubscriptionCore.ts","../src/useSubscription.ts","../src/proxyBinders.ts"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/comparison/index.ts\nvar comparison_exports = {};\n__export(comparison_exports, {\n shallowEqual: () => shallowEqual\n});\nmodule.exports = __toCommonJS(comparison_exports);\n\n// src/comparison/shallowEqual.ts\nfunction shallowEqual(objA, objB) {\n if (Object.is(objA, objB)) {\n return true;\n }\n if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n return false;\n }\n if (objA instanceof Map && objB instanceof Map) {\n if (objA.size !== objB.size) return false;\n for (const [key, value] of objA) {\n if (!Object.is(value, objB.get(key))) {\n return false;\n }\n }\n return true;\n }\n if (objA instanceof Set && objB instanceof Set) {\n if (objA.size !== objB.size) return false;\n for (const value of objA) {\n if (!objB.has(value)) {\n return false;\n }\n }\n return true;\n }\n const keysA = Object.keys(objA);\n if (keysA.length !== Object.keys(objB).length) {\n return false;\n }\n for (let i = 0; i < keysA.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n return true;\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n shallowEqual\n});\n","export * from \"./factories\";\nexport * from \"./useSubscription\";\nexport * from \"./useQuery\";\nexport * from \"./useMutation\";\nexport * from \"./useSubscriptionCore\";\nexport * from \"./proxyBinders\";\n","import type { TSocketServerCallOptions, ZMQClient } from \"@pixotope/zmq-client\";\nimport { useCallback, useMemo } from \"react\";\nimport { MutationOptions, useMutation } from \"./useMutation\";\nimport { QueryOptions, useQuery } from \"./useQuery\";\n\nexport type MutationInfo<TData, TError, TParams> = {\n data: TData;\n error: TError;\n params: TParams;\n};\n\ntype FnToParamsBase = Record<string, MutationInfo<unknown, unknown, unknown>>;\n\nexport type TPromiseFunction<TResponse, TParams, TExtraParams> = (\n args: Omit<\n ZMQClient.Call<\n TResponse,\n {\n functionName: string;\n parameters: TParams;\n options?: Omit<TSocketServerCallOptions, \"toCallIfNoResponse\">;\n }\n >,\n \"id\"\n > & {\n meta?: TExtraParams;\n }\n) => Promise<TResponse>;\n\nconst useCallMutationBase = <\n TFnToParams extends FnToParamsBase,\n TData = unknown,\n TError = unknown,\n TParams = unknown,\n TMetadata = unknown,\n>(\n promiseFunc: TPromiseFunction<TData, TParams, TMetadata>,\n functionName: keyof TFnToParams,\n service: (meta?: TMetadata) => string,\n options?: Omit<\n MutationOptions<TData, TError, TParams, TMetadata>,\n \"mutationFn\"\n >\n) => {\n const timeout = options?.timeout;\n const { ...rest } = useMemo(() => options ?? {}, [options]);\n const mutationFn = useCallback(\n async (parameters: TParams, meta?: TMetadata) => {\n try {\n return await promiseFunc({\n service: service(meta),\n functionName: functionName.toString(),\n parameters,\n options: {\n avoidTimeout: !timeout,\n customTimeout: timeout,\n },\n meta,\n });\n } catch (e) {\n if (e instanceof Error) {\n throw e;\n }\n throw new Error(e as string);\n }\n },\n [functionName, service, timeout]\n );\n\n return useMutation<TData, TError, TParams, TMetadata>({\n mutationFn,\n ...rest,\n });\n};\n\nexport function buildMutationHook<\n TFnToParams extends FnToParamsBase,\n TMetadata = unknown,\n>(\n promiseFunc: TPromiseFunction<unknown, unknown, unknown>,\n genTargetService: (meta?: TMetadata) => string\n) {\n return function useCallMutationBuilder<TFn extends keyof TFnToParams>(\n func: TFn,\n options?: Parameters<\n typeof useCallMutationBase<\n TFnToParams,\n TFnToParams[TFn][\"data\"],\n TFnToParams[TFn][\"error\"],\n TFnToParams[TFn][\"params\"],\n TMetadata\n >\n >[3]\n ) {\n return useCallMutationBase<\n TFnToParams,\n TFnToParams[TFn][\"data\"],\n TFnToParams[TFn][\"error\"],\n TFnToParams[TFn][\"params\"],\n TMetadata\n >(promiseFunc, func, genTargetService, options);\n };\n}\n\nconst useCallQueryBase = <\n TFnToParams extends FnToParamsBase,\n TData = unknown,\n TError = unknown,\n TParams = unknown,\n TSelect = TData,\n TMetadata = unknown,\n>(\n promiseFunction: TPromiseFunction<TData, TParams, TMetadata>,\n functionName: keyof TFnToParams,\n params: TParams,\n service: (meta?: TMetadata) => string,\n options?: Omit<QueryOptions<TData, TError, TParams, TSelect>, \"queryFn\"> & {\n meta?: TMetadata;\n }\n) => {\n const timeout = options?.timeout;\n const { ...rest } = useMemo(() => options ?? {}, [options]);\n const queryFn = useCallback(\n async (refetchParams: TParams | void) => {\n try {\n return await promiseFunction({\n service: service(options?.meta),\n functionName: functionName.toString(),\n parameters: refetchParams ?? params,\n options: {\n avoidTimeout: !timeout,\n customTimeout: timeout,\n },\n meta: options?.meta,\n });\n } catch (e) {\n if (e instanceof Error) {\n throw e;\n }\n throw new Error(e as string);\n }\n },\n [functionName, service, params, timeout]\n );\n\n return useQuery<TData, TError, TParams, TSelect>({\n queryFn,\n ...rest,\n });\n};\n\nexport function buildQueryHook<\n TFnToParams extends FnToParamsBase,\n TMetadata = unknown,\n>(\n promiseFunction: TPromiseFunction<unknown, unknown, unknown>,\n getTargetService: (meta?: TMetadata) => string\n) {\n return function useCallQueryBuilder<\n TFn extends keyof TFnToParams,\n TSelect = TFnToParams[TFn][\"data\"],\n >(\n func: TFn,\n params: TFnToParams[TFn][\"params\"],\n options?: Parameters<\n typeof useCallQueryBase<\n TFnToParams,\n TFnToParams[TFn][\"data\"],\n TFnToParams[TFn][\"error\"],\n TFnToParams[TFn][\"params\"],\n TSelect,\n TMetadata\n >\n >[4] & { meta?: TMetadata }\n ) {\n return useCallQueryBase<\n TFnToParams,\n TFnToParams[TFn][\"data\"],\n TFnToParams[TFn][\"error\"],\n TFnToParams[TFn][\"params\"],\n TSelect,\n TMetadata\n >(promiseFunction, func, params, getTargetService, options);\n };\n}\n","import { useCallback, useRef, useState } from \"react\";\n\nexport type MutationFunction<\n TData = unknown,\n TParams = unknown,\n TMetadata = unknown,\n> = (params: TParams, meta?: TMetadata) => Promise<TData>;\n\nexport interface MutationOptions<\n TData = unknown,\n TError = unknown,\n TParams = void,\n TMetadata = unknown,\n> {\n mutationFn: MutationFunction<TData, TParams, TMetadata>;\n params?: TParams;\n onSuccess?: (\n data: TData,\n variables: TParams,\n meta?: TMetadata\n ) => Promise<unknown> | unknown;\n onError?: (\n error: TMutationError<TError>,\n variables: TParams,\n meta?: TMetadata\n ) => Promise<unknown> | unknown;\n onSettled?: (\n data: TData | undefined,\n error: TMutationError<TError> | null,\n variables: TParams,\n meta?: TMetadata\n ) => Promise<unknown> | unknown;\n compareOrThrow?: (result: TData | TError) => boolean;\n timeout?: number;\n prepareParams?: (\n variables: TParams,\n defaults?: TParams,\n meta?: TMetadata\n ) => TParams;\n}\n\ntype TMutationError<TError> = TError | Error | null;\n\nexport interface MutateOptions<\n TData = unknown,\n TError = unknown,\n TParams = void,\n TMetadata = unknown,\n> {\n onSuccess?: (data: TData, variables: TParams, meta?: TMetadata) => void;\n onError?: (\n error: TMutationError<TError>,\n variables: TParams,\n meta?: TMetadata\n ) => void;\n onSettled?: (\n data: TData | undefined,\n error: TMutationError<TError> | null,\n variables: TParams,\n meta?: TMetadata\n ) => void;\n}\n\ntype MutationStatus = \"idle\" | \"loading\" | \"success\" | \"error\";\ntype RaceErrorReason = \"timeout\";\ntype RacePromises<T> = Promise<T | RaceErrorReason>;\n\nexport class ComparisonFailError<TPayload = unknown> extends Error {\n public readonly payload: TPayload;\n\n constructor(message: string, payload: TPayload) {\n super(message);\n this.name = this.constructor.name;\n this.payload = payload;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ComparisonFailError);\n }\n }\n}\n\nexport const useMutation = <\n TData = unknown,\n TError = TMutationError<unknown>,\n TParams = void,\n TMetadata = unknown,\n>(\n options: MutationOptions<TData, TError, TParams, TMetadata>\n) => {\n const {\n mutationFn,\n compareOrThrow,\n onError,\n onSettled,\n onSuccess,\n prepareParams,\n params,\n timeout,\n } = options;\n const [status, setStatus] = useState<MutationStatus>(\"idle\");\n const [error, setError] = useState<TMutationError<TError>>(null);\n const [result, setResult] = useState<TData | undefined>(undefined);\n const mutationFnRef = useRef(mutationFn);\n const internalOptionsRef = useRef({\n params,\n timeout,\n });\n const internalCallbackRefistry = <const>{\n onSuccess,\n onError,\n onSettled,\n compareOrThrow,\n prepareParams,\n };\n const internalCallbackRef = useRef(internalCallbackRefistry);\n internalCallbackRef.current = internalCallbackRefistry;\n\n const mutateAsync = useCallback(async (params: TParams, meta?: TMetadata) => {\n setStatus(\"loading\");\n setError(null);\n\n try {\n const promises: RacePromises<TData>[] = [\n mutationFnRef.current(\n internalCallbackRef.current.prepareParams\n ? internalCallbackRef.current.prepareParams(\n params,\n internalOptionsRef.current.params,\n meta\n )\n : params,\n meta\n ),\n ...(internalOptionsRef.current.timeout\n ? [\n new Promise<RaceErrorReason>((resolve) =>\n setTimeout(\n () => resolve(\"timeout\"),\n internalOptionsRef.current.timeout\n )\n ),\n ]\n : []),\n ];\n\n const res = await Promise.race(promises);\n\n if (res === \"timeout\") {\n throw new Error(\"timeout\");\n }\n\n if (internalCallbackRef.current.compareOrThrow?.(res)) {\n throw new ComparisonFailError(JSON.stringify(res), res);\n }\n\n setResult(res);\n setStatus(\"success\");\n\n internalCallbackRef.current.onSuccess?.(res, params, meta);\n internalCallbackRef.current.onSettled?.(res, null, params, meta);\n\n return res;\n } catch (error: any) {\n setError(error);\n setStatus(\"error\");\n\n internalCallbackRef.current.onError?.(error, params, meta);\n internalCallbackRef.current.onSettled?.(undefined, error, params, meta);\n\n throw error;\n }\n }, []);\n\n const mutate = useCallback(\n (\n variables: TParams,\n options?: MutateOptions<TData, TError, TParams, TMetadata> & {\n meta?: TMetadata;\n }\n ) => {\n mutateAsync(variables, options?.meta).then(\n (data) => {\n options?.onSuccess?.(data, variables, options?.meta);\n options?.onSettled?.(data, null, variables, options?.meta);\n },\n (error) => {\n options?.onError?.(error, variables, options?.meta);\n options?.onSettled?.(undefined, error, variables, options?.meta);\n }\n );\n },\n [mutateAsync]\n );\n\n return {\n mutateAsync,\n status,\n result,\n mutate,\n reset: () => {\n setStatus(\"idle\");\n setError(null);\n setResult(undefined);\n },\n error,\n };\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport interface QueryOptions<\n TData = unknown,\n TError = unknown,\n TParams = void,\n TSelectData = TData,\n Stateless extends true | undefined = undefined,\n> {\n queryFn: (params: TParams | undefined | void) => Promise<TData>;\n onSuccess?: (data: TData) => Promise<void> | void;\n onError?: (error: TQueryError<TError>) => Promise<void> | void;\n onSettled?: (\n data: TData | undefined,\n error: TQueryError<TError> | undefined\n ) => Promise<void> | void;\n timeout?: number;\n enabled?: boolean;\n initialData?: TData | Functionize<TData>;\n select?: (data: TData) => TSelectData;\n refetchOnWindowFocus?: boolean;\n refetchInterval?: number;\n compareOrThrow?: (data: TData) => boolean;\n stateless?: Stateless;\n key?: TQueryKey;\n}\n\ntype Functionize<T> = () => T;\ntype QueryStatus = \"idle\" | \"loading\" | \"success\" | \"error\" | \"timeout\";\ntype RaceErrorReason = \"timeout\";\ntype RacePromises<T> = Promise<T | RaceErrorReason>;\ntype WithData<TData> = { data: TData | undefined };\ntype TQueryKey = readonly any[];\n\ntype TQueryError<TError> = TError | Error | null;\n\nexport type UseQueryResult<\n TData = unknown,\n TError = unknown,\n TParams = void,\n TSelectData = TData,\n Stateless extends true | undefined = undefined,\n> = {\n error: TQueryError<TError>;\n status: QueryStatus;\n refetch: (params: TParams | void | undefined) => Promise<void>;\n reset: () => void;\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n} & (Stateless extends true ? {} : WithData<TSelectData>);\n\nfunction normalizeQueryKey(queryKey: TQueryKey): string {\n return JSON.stringify(queryKey);\n}\n\ntype TInternalCallbackRef<TData, TError, TSelectData> = {\n onError?: (error: TQueryError<TError>) => Promise<void> | void;\n onSuccess?: (data: TData) => Promise<void> | void;\n onSettled?: (\n data: TData | undefined,\n error: TQueryError<TError> | undefined\n ) => Promise<void> | void;\n compareOrThrow?: (data: TData) => boolean;\n select?: (data: TData) => TSelectData;\n};\n\ntype TInternalOptionsRef<TData> = {\n timeout?: number;\n enabled: boolean;\n refetchOnWindowFocus: boolean;\n refetchInterval: number;\n compareOrThrow?: (data: TData) => boolean;\n stateless?: boolean;\n};\n\nconst getRandomUUID = () => Math.random().toString(36).substring(2, 15);\n\nexport const useQuery = <\n TData = unknown,\n TError = TQueryError<unknown>,\n TParams = void,\n TSelected = TData,\n Stateless extends true | undefined = undefined,\n>({\n queryFn,\n ...options\n}: QueryOptions<TData, TError, TParams, TSelected, Stateless>): UseQueryResult<\n TSelected,\n TError,\n TParams,\n TSelected,\n Stateless\n> => {\n const {\n enabled = true,\n refetchOnWindowFocus = false,\n refetchInterval = 0,\n initialData,\n select,\n onError,\n onSuccess,\n onSettled,\n timeout,\n compareOrThrow,\n stateless,\n key: queryKeyPassed,\n } = options;\n const queryKey = normalizeQueryKey(queryKeyPassed ?? []);\n const lastFetchedAt = useRef<number | null>(null);\n const lastQueryKey = useRef<string | undefined>(undefined);\n const queryFnRef = useRef(queryFn);\n queryFnRef.current = queryFn;\n const internalCallbackRef = useRef<\n TInternalCallbackRef<TData, TError, TSelected>\n >({});\n internalCallbackRef.current = {\n onError,\n onSuccess,\n onSettled,\n compareOrThrow,\n select,\n };\n const internalOptionsRef = useRef<TInternalOptionsRef<TData>>({\n enabled,\n refetchOnWindowFocus,\n refetchInterval,\n compareOrThrow,\n stateless,\n timeout,\n });\n internalOptionsRef.current = {\n enabled,\n refetchOnWindowFocus,\n refetchInterval,\n compareOrThrow,\n stateless,\n timeout,\n };\n const requestIdRef = useRef(getRandomUUID());\n\n const [status, setStatus] = useState<QueryStatus>(() => {\n return \"idle\";\n });\n const [error, setError] = useState<TQueryError<TError>>(null);\n const [data, setData] = useState<TData | undefined>(() => {\n if (initialData !== undefined) {\n if (typeof initialData === \"function\") {\n return (initialData as Functionize<TData>)();\n }\n\n return initialData as TData;\n }\n\n return undefined;\n });\n\n const handleSetData = useCallback((data: TData) => {\n if (internalOptionsRef.current.stateless) {\n return;\n }\n\n setData(data);\n }, []);\n\n const shouldRefetch = useCallback(() => {\n if (!internalOptionsRef.current.enabled) {\n return false;\n }\n\n if (lastFetchedAt.current === null) {\n return true;\n }\n\n return (\n new Date().getTime() - lastFetchedAt.current >\n internalOptionsRef.current?.refetchInterval\n );\n }, []);\n\n const refetch = useCallback(\n async (params: TParams | void | undefined = undefined) => {\n const requestId = getRandomUUID();\n requestIdRef.current = requestId;\n if (!internalOptionsRef.current.enabled) {\n return;\n }\n\n setStatus(\"loading\");\n setError(null);\n\n try {\n const promises: RacePromises<TData>[] = [\n queryFnRef.current(params),\n ...(internalOptionsRef.current.timeout\n ? [\n new Promise<RaceErrorReason>((resolve) =>\n setTimeout(\n () => resolve(\"timeout\"),\n internalOptionsRef.current.timeout\n )\n ),\n ]\n : []),\n ];\n\n const res = await Promise.race(promises);\n if (requestIdRef.current !== requestId) {\n return;\n }\n\n if (res === \"timeout\") {\n throw new Error(\"timeout\");\n }\n\n handleSetData(res);\n\n if (\n internalCallbackRef.current.compareOrThrow &&\n internalCallbackRef.current.compareOrThrow(res) === true\n ) {\n throw new Error(\"failedComparison\");\n }\n\n setStatus(\"success\");\n lastFetchedAt.current = new Date().getTime();\n internalCallbackRef.current.onSuccess?.(res);\n internalCallbackRef.current.onSettled?.(res, undefined);\n } catch (error: any) {\n setError(error);\n setStatus(\"error\");\n internalCallbackRef.current.onError?.(error);\n internalCallbackRef.current.onSettled?.(undefined, error);\n }\n },\n [handleSetData]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setStatus(\"idle\");\n setError(null);\n refetch();\n }, [refetch]);\n\n useEffect(() => {\n const cleanups: (() => void)[] = [];\n\n // If the query should be refetched on window focus, add a listener\n if (refetchOnWindowFocus) {\n const queryHandleFocus = () => {\n refetch();\n };\n\n window.addEventListener(\"focus\", queryHandleFocus);\n\n cleanups.push(() => {\n window.removeEventListener(\"focus\", queryHandleFocus);\n });\n }\n\n // If the query should be refetched on an interval, add an interval\n if (refetchInterval > 0) {\n const interval = setInterval(() => {\n if (shouldRefetch()) {\n refetch();\n }\n }, refetchInterval);\n\n cleanups.push(() => {\n clearInterval(interval);\n });\n }\n\n // If the query key has changed, refetch\n if (\n lastQueryKey.current === undefined ||\n queryKey !== lastQueryKey.current\n ) {\n lastQueryKey.current = queryKey;\n refetch();\n }\n\n return () => {\n cleanups.forEach((cleanup) => cleanup());\n };\n }, [\n queryKey,\n enabled,\n refetchOnWindowFocus,\n refetchInterval,\n shouldRefetch,\n refetch,\n ]);\n\n return {\n data:\n select && data !== undefined\n ? select(data as TData)\n : (data as unknown as TSelected),\n error,\n status,\n refetch,\n reset,\n };\n};\n","/**\n * @fileoverview useSubscriptionCore\n * @name useSubscriptionCore.ts\n * @description useSubscriptionCore | This hook handle core subscription logic\n * and provides a way to subscribe and unsubscribe to a topic via any callback\n */\n\nimport { shallowEqual } from \"@pixotope/utils/comparison\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\ntype SubscriptionState = \"idle\" | \"subscribed\" | \"subscribing\" | \"error\";\n\nexport type MessageHandler<TMessage> = (message: TMessage) => void;\nexport type Connection = {\n acknowledge: () => void;\n};\nexport type SubscriptionCoreOptions<\n TData,\n TMessage = TData,\n Stateless extends true | undefined = undefined,\n> = {\n /**\n * @description Function that will be called when the message is received.\n */\n onMessage?: (message: TMessage) => void;\n /**\n * @description Function that will be called when the subscription is created.\n */\n onSubscribed?: (message: TMessage) => void;\n /**\n * @description Function that will be called when the subscription is created.\n */\n onError?: (error: TMessage) => void;\n /**\n * @description Whether the subscription is enabled.\n * @default true\n */\n enabled?: boolean;\n /**\n * @description Function that will be called before the message is processed.\n * Returning `true` will cause the message to not be set to state and call {@link onError} if provided.\n * Status will be set to `error`.\n */\n compareOrThrow?: (data: TMessage) => boolean;\n /**\n * @description Function that will be called to select the data from the message.\n */\n select?: (data: TMessage) => TData;\n /**\n * @description Initial state of the subscription.\n * @default undefined\n */\n initialState?: TData;\n /**\n * @description Function that will be called when the subscription is created.\n */\n subscriberFn: (\n handler: MessageHandler<TMessage>,\n connection: Connection\n ) => () => void /** unsubscribe Fn */;\n /**\n * @description Whether the subscription is stateless. Data will not be\n * stored by the hook internally.\n * @default false\n */\n stateless?: Stateless;\n /**\n * @description Custom equality function for comparing data.\n * @default shallowEqual\n */\n isEqual?: <T = TData>(a: T, b: T) => boolean;\n};\n\ntype WithStatus = {\n status: SubscriptionState;\n};\n\ntype WithData<TData> = {\n data: TData;\n};\n\nexport type SubscriptionCoreReturnType<\n TData,\n Stateless extends true | undefined,\n> = {\n reSubscribe: () => void;\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n} & (Stateless extends true ? {} : WithStatus & WithData<TData>);\n\n/**\n * @description `useSubscriptionCore` | This hook handle core subscription logic\n * and provides a way to subscribe and unsubscribe to a topic via any callback.\n * The hook expose a handler function. All the consumer code need to do is to\n * call this handler function with the message received from the topic or pass\n * it directly to the callback function that is passed to the subscriberFn.\n * - `status` - current status of the subscription\n * - `data` - the data after the select function is applied to the message\n * - `reSubscribe` - function that can be called to re-subscribe to the topic\n *\n * An example how this hook works can be found in {@link ./useSubscription.ts}\n */\nexport function useSubscriptionCore<\n TData = unknown,\n TMessage = TData,\n Stateless extends true | undefined = undefined,\n>(\n options: SubscriptionCoreOptions<TData, TMessage, Stateless>\n): SubscriptionCoreReturnType<TData, Stateless> {\n const {\n enabled = true,\n initialState = undefined,\n onSubscribed,\n stateless,\n compareOrThrow,\n subscriberFn,\n onMessage,\n onError,\n select,\n isEqual = shallowEqual,\n } = options;\n const [status, setStatus] = useState<SubscriptionState>(\"idle\");\n const [data, setData] = useState<TData | undefined>(initialState);\n const unsubcribeRef = useRef<() => void | undefined>(undefined);\n const initialStateRef = useRef(initialState);\n const subscriberFnRef = useRef(subscriberFn);\n const callbackRefRegistry = <const>{\n onMessage,\n onError,\n select,\n compareOrThrow,\n onSubscribed,\n isEqual,\n };\n const internalCallbacksRef = useRef(callbackRefRegistry);\n internalCallbacksRef.current = callbackRefRegistry;\n\n const updateStatus = useCallback(\n (newStatus: SubscriptionState, message?: TMessage) => {\n if (stateless) {\n return;\n }\n\n setStatus((prev) => {\n if (prev === newStatus) {\n return prev;\n }\n\n if (newStatus === \"subscribed\" && message) {\n internalCallbacksRef.current.onSubscribed?.(message);\n }\n\n return newStatus;\n });\n },\n [stateless]\n );\n\n const connection: Connection = useMemo(\n () => ({\n acknowledge: () => {\n updateStatus(\"subscribed\");\n },\n }),\n [updateStatus]\n );\n\n const handler = useCallback(\n async (message: TMessage) => {\n if (internalCallbacksRef.current.compareOrThrow?.(message)) {\n updateStatus(\"error\");\n internalCallbacksRef.current.onError?.(message);\n\n return;\n }\n\n const selectedMessage = <TData>(\n (internalCallbacksRef.current.select?.(message) ?? message)\n );\n\n if (!stateless) {\n setData((prev) => {\n if (isEqual(prev, selectedMessage)) {\n return prev;\n }\n\n return selectedMessage;\n });\n }\n\n updateStatus(\"subscribed\", message);\n internalCallbacksRef.current.onMessage?.(message);\n },\n [stateless, updateStatus]\n );\n\n const unsubscribe = useCallback(() => {\n updateStatus(\"idle\");\n unsubcribeRef.current?.();\n unsubcribeRef.current = undefined;\n }, [updateStatus]);\n\n const subscribe = useCallback(() => {\n unsubcribeRef.current?.();\n updateStatus(\"subscribing\");\n setData(initialStateRef.current);\n unsubcribeRef.current = subscriberFnRef.current(handler, connection);\n }, [connection, handler, updateStatus]);\n\n useEffect(() => {\n if (enabled) {\n subscribe();\n } else {\n unsubscribe();\n }\n\n return () => {\n unsubscribe();\n };\n }, [enabled, subscribe, unsubscribe]);\n\n return {\n status,\n data,\n reSubscribe: subscribe,\n } as unknown as any;\n}\n","import {\n SubscriptionCoreOptions,\n useSubscriptionCore,\n} from \"./useSubscriptionCore\";\n\nexport type SubscriptionOptions<\n TData,\n TMessage = unknown,\n Stateless extends true | undefined = undefined,\n TMetadata extends {} = {},\n> = Omit<\n SubscriptionCoreOptions<TData, TMessage, Stateless>,\n \"subscriberFn\"\n> & {\n service: string;\n topic: string;\n maxDownwardDepth?: number;\n} & {\n meta?: TMetadata;\n};\n\nexport type TSubscriptionHandlerFunction<\n TMessage,\n TMetadata extends {} = {},\n> = (\n opts: {\n service: string;\n name: string;\n callback: (message: TMessage) => void;\n maxDownwardDepth?: number;\n } & { meta?: TMetadata }\n) => () => void;\n\nexport function useSubscription<\n TData = unknown,\n TMessage = TData,\n Stateless extends true | undefined = undefined,\n TMetadata extends {} = {},\n>(\n subscriptionHandler: TSubscriptionHandlerFunction<TMessage, TMetadata>,\n options: SubscriptionOptions<TData, TMessage, Stateless, TMetadata>\n) {\n const { topic, service, maxDownwardDepth = 1000, meta, ...rest } = options;\n\n return useSubscriptionCore<TData, TMessage, Stateless>({\n ...rest,\n subscriberFn: (handler) => {\n const unsubscribe = subscriptionHandler({\n service,\n name: topic,\n callback: (message: TMessage) => {\n handler(message);\n },\n maxDownwardDepth,\n meta,\n });\n\n return unsubscribe;\n },\n });\n}\n\nexport function buildServiceSubscriptionHook<TMetadata extends {} = {}>(\n subscriptionHandler: TSubscriptionHandlerFunction<unknown, TMetadata>,\n targetMachine: (machine: string | undefined) => string\n) {\n return function useSubscriptionBuilder<\n TData,\n TMessage = TData,\n Stateless extends true | undefined = undefined,\n >(\n options: Omit<\n SubscriptionOptions<TData, TMessage, Stateless, TMetadata>,\n \"service\"\n > & {\n machine?: string;\n }\n ) {\n const targetService = targetMachine(options.machine);\n return useSubscription<TData, TMessage, Stateless>(\n <TSubscriptionHandlerFunction<TMessage>>subscriptionHandler,\n {\n service: targetService,\n ...options,\n }\n );\n };\n}\n","import type { ZMQProxyWSClient } from \"@pixotope/zmq-client\";\nimport type { TPromiseFunction } from \"./factories\";\nimport type { buildServiceSubscriptionHook } from \"./useSubscription\";\n\nexport type TProxySubscriptionHandlerParams<TMetadata extends {} = {}> =\n Parameters<Parameters<typeof buildServiceSubscriptionHook<TMetadata>>[0]>[0];\n\nexport function bindClientSocketProxy(socketClientProxy: ZMQProxyWSClient) {\n return (args: TProxySubscriptionHandlerParams) => {\n const { callback: cbHook, ...rest } = args;\n return socketClientProxy.mirror({\n ...rest,\n callback: (message) => {\n cbHook(message.message);\n },\n })[0];\n };\n}\n\nexport function bindPromiseFunction(clientSocketProxy: ZMQProxyWSClient) {\n return async (\n ...args: Parameters<TPromiseFunction<unknown, unknown, unknown>>\n ) => {\n const res = await clientSocketProxy.callAsync(...args);\n return res.message.Result;\n };\n}\n"],"mappings":"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","names":["exports","module","__defProp","__getOwnPropDesc","__getOwnPropNames","__hasOwnProp","__export","__copyProps","__toCommonJS","shallowEqual","import_react","params","error","options","import_react","data","_a","_b","error","import_react"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/factories.ts","../src/useMutation.ts","../src/useQuery.ts","../../utils/dist/chunk-5QIHMQPV.js","../src/useSubscriptionCore.ts","../src/useSubscription.ts","../src/proxyBinders.ts"],"sourcesContent":["export * from \"./factories\";\nexport * from \"./useSubscription\";\nexport * from \"./useQuery\";\nexport * from \"./useMutation\";\nexport * from \"./useSubscriptionCore\";\nexport * from \"./proxyBinders\";\n","import type { TSocketServerCallOptions, ZMQClient } from \"@pixotope/zmq-client\";\nimport { useCallback, useMemo } from \"react\";\nimport { MutationOptions, useMutation } from \"./useMutation\";\nimport { QueryOptions, useQuery } from \"./useQuery\";\n\nexport type MutationInfo<TData, TError, TParams> = {\n data: TData;\n error: TError;\n params: TParams;\n};\n\ntype FnToParamsBase = Record<string, MutationInfo<unknown, unknown, unknown>>;\n\nexport type TPromiseFunction<TResponse, TParams, TExtraParams> = (\n args: Omit<\n ZMQClient.Call<\n TResponse,\n {\n functionName: string;\n parameters: TParams;\n options?: Omit<TSocketServerCallOptions, \"toCallIfNoResponse\">;\n }\n >,\n \"id\"\n > & {\n meta?: TExtraParams;\n }\n) => Promise<TResponse>;\n\nconst useCallMutationBase = <\n TFnToParams extends FnToParamsBase,\n TData = unknown,\n TError = unknown,\n TParams = unknown,\n TMetadata = unknown,\n>(\n promiseFunc: TPromiseFunction<TData, TParams, TMetadata>,\n functionName: keyof TFnToParams,\n service: (meta?: TMetadata) => string,\n options?: Omit<\n MutationOptions<TData, TError, TParams, TMetadata>,\n \"mutationFn\"\n >\n) => {\n const timeout = options?.timeout;\n const { ...rest } = useMemo(() => options ?? {}, [options]);\n const mutationFn = useCallback(\n async (parameters: TParams, meta?: TMetadata) => {\n try {\n return await promiseFunc({\n service: service(meta),\n functionName: functionName.toString(),\n parameters,\n options: {\n avoidTimeout: !timeout,\n customTimeout: timeout,\n },\n meta,\n });\n } catch (e) {\n if (e instanceof Error) {\n throw e;\n }\n throw new Error(e as string);\n }\n },\n [functionName, service, timeout]\n );\n\n return useMutation<TData, TError, TParams, TMetadata>({\n mutationFn,\n ...rest,\n });\n};\n\nexport function buildMutationHook<\n TFnToParams extends FnToParamsBase,\n TMetadata = unknown,\n>(\n promiseFunc: TPromiseFunction<unknown, unknown, unknown>,\n genTargetService: (meta?: TMetadata) => string\n) {\n return function useCallMutationBuilder<TFn extends keyof TFnToParams>(\n func: TFn,\n options?: Parameters<\n typeof useCallMutationBase<\n TFnToParams,\n TFnToParams[TFn][\"data\"],\n TFnToParams[TFn][\"error\"],\n TFnToParams[TFn][\"params\"],\n TMetadata\n >\n >[3]\n ) {\n return useCallMutationBase<\n TFnToParams,\n TFnToParams[TFn][\"data\"],\n TFnToParams[TFn][\"error\"],\n TFnToParams[TFn][\"params\"],\n TMetadata\n >(promiseFunc, func, genTargetService, options);\n };\n}\n\nconst useCallQueryBase = <\n TFnToParams extends FnToParamsBase,\n TData = unknown,\n TError = unknown,\n TParams = unknown,\n TSelect = TData,\n TMetadata = unknown,\n TStateless extends true | undefined = undefined,\n>(\n promiseFunction: TPromiseFunction<TData, TParams, TMetadata>,\n functionName: keyof TFnToParams,\n params: TParams,\n service: (meta?: TMetadata) => string,\n options?: Omit<QueryOptions<TData, TError, TParams, TSelect, TStateless>, \"queryFn\"> & {\n meta?: TMetadata;\n }\n) => {\n const timeout = options?.timeout;\n const { ...rest } = useMemo(() => options ?? {}, [options]);\n const queryFn = useCallback(\n async (refetchParams: TParams | void) => {\n try {\n return await promiseFunction({\n service: service(options?.meta),\n functionName: functionName.toString(),\n parameters: refetchParams ?? params,\n options: {\n avoidTimeout: !timeout,\n customTimeout: timeout,\n },\n meta: options?.meta,\n });\n } catch (e) {\n if (e instanceof Error) {\n throw e;\n }\n throw new Error(e as string);\n }\n },\n [functionName, service, params, timeout]\n );\n\n return useQuery<TData, TError, TParams, TSelect, TStateless>({\n queryFn,\n ...rest,\n });\n};\n\nexport function buildQueryHook<\n TFnToParams extends FnToParamsBase,\n TMetadata = unknown,\n>(\n promiseFunction: TPromiseFunction<unknown, unknown, unknown>,\n getTargetService: (meta?: TMetadata) => string\n) {\n return function useCallQueryBuilder<\n TFn extends keyof TFnToParams,\n TSelect = TFnToParams[TFn][\"data\"],\n TStateless extends true | undefined = undefined,\n >(\n func: TFn,\n params: TFnToParams[TFn][\"params\"],\n options?: Parameters<\n typeof useCallQueryBase<\n TFnToParams,\n TFnToParams[TFn][\"data\"],\n TFnToParams[TFn][\"error\"],\n TFnToParams[TFn][\"params\"],\n TSelect,\n TMetadata,\n TStateless\n >\n >[4] & { meta?: TMetadata }\n ) {\n return useCallQueryBase<\n TFnToParams,\n TFnToParams[TFn][\"data\"],\n TFnToParams[TFn][\"error\"],\n TFnToParams[TFn][\"params\"],\n TSelect,\n TMetadata,\n TStateless\n >(promiseFunction, func, params, getTargetService, options);\n };\n}\n","import { useCallback, useRef, useState } from \"react\";\n\nexport type MutationFunction<\n TData = unknown,\n TParams = unknown,\n TMetadata = unknown,\n> = (params: TParams, meta?: TMetadata) => Promise<TData>;\n\nexport interface MutationOptions<\n TData = unknown,\n TError = unknown,\n TParams = void,\n TMetadata = unknown,\n> {\n mutationFn: MutationFunction<TData, TParams, TMetadata>;\n params?: TParams;\n onSuccess?: (\n data: TData,\n variables: TParams,\n meta?: TMetadata\n ) => Promise<unknown> | unknown;\n onError?: (\n error: TMutationError<TError>,\n variables: TParams,\n meta?: TMetadata\n ) => Promise<unknown> | unknown;\n onSettled?: (\n data: TData | undefined,\n error: TMutationError<TError> | null,\n variables: TParams,\n meta?: TMetadata\n ) => Promise<unknown> | unknown;\n compareOrThrow?: (result: TData | TError) => boolean;\n timeout?: number;\n prepareParams?: (\n variables: TParams,\n defaults?: TParams,\n meta?: TMetadata\n ) => TParams;\n}\n\ntype TMutationError<TError> = TError | Error | null;\n\nexport interface MutateOptions<\n TData = unknown,\n TError = unknown,\n TParams = void,\n TMetadata = unknown,\n> {\n onSuccess?: (data: TData, variables: TParams, meta?: TMetadata) => void;\n onError?: (\n error: TMutationError<TError>,\n variables: TParams,\n meta?: TMetadata\n ) => void;\n onSettled?: (\n data: TData | undefined,\n error: TMutationError<TError> | null,\n variables: TParams,\n meta?: TMetadata\n ) => void;\n}\n\ntype MutationStatus = \"idle\" | \"loading\" | \"success\" | \"error\";\ntype RaceErrorReason = \"timeout\";\ntype RacePromises<T> = Promise<T | RaceErrorReason>;\n\nexport class ComparisonFailError<TPayload = unknown> extends Error {\n public readonly payload: TPayload;\n\n constructor(message: string, payload: TPayload) {\n super(message);\n this.name = this.constructor.name;\n this.payload = payload;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ComparisonFailError);\n }\n }\n}\n\nexport const useMutation = <\n TData = unknown,\n TError = TMutationError<unknown>,\n TParams = void,\n TMetadata = unknown,\n>(\n options: MutationOptions<TData, TError, TParams, TMetadata>\n) => {\n const {\n mutationFn,\n compareOrThrow,\n onError,\n onSettled,\n onSuccess,\n prepareParams,\n params,\n timeout,\n } = options;\n const [status, setStatus] = useState<MutationStatus>(\"idle\");\n const [error, setError] = useState<TMutationError<TError>>(null);\n const [result, setResult] = useState<TData | undefined>(undefined);\n const mutationFnRef = useRef(mutationFn);\n const internalOptionsRef = useRef({\n params,\n timeout,\n });\n const internalCallbackRefistry = <const>{\n onSuccess,\n onError,\n onSettled,\n compareOrThrow,\n prepareParams,\n };\n const internalCallbackRef = useRef(internalCallbackRefistry);\n internalCallbackRef.current = internalCallbackRefistry;\n\n const mutateAsync = useCallback(async (params: TParams, meta?: TMetadata) => {\n setStatus(\"loading\");\n setError(null);\n\n try {\n const promises: RacePromises<TData>[] = [\n mutationFnRef.current(\n internalCallbackRef.current.prepareParams\n ? internalCallbackRef.current.prepareParams(\n params,\n internalOptionsRef.current.params,\n meta\n )\n : params,\n meta\n ),\n ...(internalOptionsRef.current.timeout\n ? [\n new Promise<RaceErrorReason>((resolve) =>\n setTimeout(\n () => resolve(\"timeout\"),\n internalOptionsRef.current.timeout\n )\n ),\n ]\n : []),\n ];\n\n const res = await Promise.race(promises);\n\n if (res === \"timeout\") {\n throw new Error(\"timeout\");\n }\n\n if (internalCallbackRef.current.compareOrThrow?.(res)) {\n throw new ComparisonFailError(JSON.stringify(res), res);\n }\n\n setResult(res);\n setStatus(\"success\");\n\n internalCallbackRef.current.onSuccess?.(res, params, meta);\n internalCallbackRef.current.onSettled?.(res, null, params, meta);\n\n return res;\n } catch (error: any) {\n setError(error);\n setStatus(\"error\");\n\n internalCallbackRef.current.onError?.(error, params, meta);\n internalCallbackRef.current.onSettled?.(undefined, error, params, meta);\n\n throw error;\n }\n }, []);\n\n const mutate = useCallback(\n (\n variables: TParams,\n options?: MutateOptions<TData, TError, TParams, TMetadata> & {\n meta?: TMetadata;\n }\n ) => {\n mutateAsync(variables, options?.meta).then(\n (data) => {\n options?.onSuccess?.(data, variables, options?.meta);\n options?.onSettled?.(data, null, variables, options?.meta);\n },\n (error) => {\n options?.onError?.(error, variables, options?.meta);\n options?.onSettled?.(undefined, error, variables, options?.meta);\n }\n );\n },\n [mutateAsync]\n );\n\n return {\n mutateAsync,\n status,\n result,\n mutate,\n reset: () => {\n setStatus(\"idle\");\n setError(null);\n setResult(undefined);\n },\n error,\n };\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport interface QueryOptions<\n TData = unknown,\n TError = unknown,\n TParams = void,\n TSelectData = TData,\n Stateless extends true | undefined = undefined,\n> {\n queryFn: (params: TParams | undefined | void, queryInfo: {key: TQueryKey | undefined, lastFetchedAt: number | undefined}) => Promise<TData>;\n onSuccess?: (data: TData) => Promise<void> | void;\n onError?: (error: TQueryError<TError>) => Promise<void> | void;\n onSettled?: (\n data: TData | undefined,\n error: TQueryError<TError> | undefined\n ) => Promise<void> | void;\n timeout?: number;\n enabled?: boolean;\n initialData?: TData | Functionize<TData>;\n select?: (data: TData) => TSelectData;\n refetchOnWindowFocus?: boolean;\n refetchInterval?: number;\n compareOrThrow?: (data: TData) => boolean;\n stateless?: Stateless;\n key?: TQueryKey;\n}\n\ntype Functionize<T> = () => T;\ntype QueryStatus = \"idle\" | \"loading\" | \"success\" | \"error\" | \"timeout\";\ntype RaceErrorReason = \"timeout\";\ntype RacePromises<T> = Promise<T | RaceErrorReason>;\ntype WithData<TData> = { data: TData | undefined };\ntype TQueryKey = readonly any[];\n\ntype TQueryError<TError> = TError | Error | null;\n\nexport type UseQueryResult<\n TData = unknown,\n TError = unknown,\n TParams = void,\n TSelectData = TData,\n Stateless extends true | undefined = undefined,\n> = {\n error: TQueryError<TError>;\n status: QueryStatus;\n refetch: (params: TParams | void | undefined) => Promise<void>;\n reset: () => void;\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n} & (Stateless extends true ? {} : WithData<TSelectData>);\n\nfunction normalizeQueryKey(queryKey: TQueryKey): string {\n return JSON.stringify(queryKey);\n}\n\ntype TInternalCallbackRef<TData, TError, TSelectData> = {\n onError?: (error: TQueryError<TError>) => Promise<void> | void;\n onSuccess?: (data: TData) => Promise<void> | void;\n onSettled?: (\n data: TData | undefined,\n error: TQueryError<TError> | undefined\n ) => Promise<void> | void;\n compareOrThrow?: (data: TData) => boolean;\n select?: (data: TData) => TSelectData;\n};\n\ntype TInternalOptionsRef<TData> = {\n timeout?: number;\n enabled: boolean;\n refetchOnWindowFocus: boolean;\n refetchInterval: number;\n compareOrThrow?: (data: TData) => boolean;\n stateless?: boolean;\n};\n\nconst getRandomUUID = () => Math.random().toString(36).substring(2, 15);\n\nexport const useQuery = <\n TData = unknown,\n TError = TQueryError<unknown>,\n TParams = void,\n TSelected = TData,\n Stateless extends true | undefined = undefined,\n>({\n queryFn,\n ...options\n}: QueryOptions<TData, TError, TParams, TSelected, Stateless>): UseQueryResult<\n TSelected,\n TError,\n TParams,\n TSelected,\n Stateless\n> => {\n const {\n enabled = true,\n refetchOnWindowFocus = false,\n refetchInterval = 0,\n initialData,\n select,\n onError,\n onSuccess,\n onSettled,\n timeout,\n compareOrThrow,\n stateless,\n key: queryKeyPassed,\n } = options;\n const queryKey = normalizeQueryKey(queryKeyPassed ?? []);\n const lastFetchedAt = useRef<number | null>(null);\n const lastQueryKey = useRef<string | undefined>(undefined);\n const queryFnRef = useRef(queryFn);\n queryFnRef.current = queryFn;\n const internalCallbackRef = useRef<\n TInternalCallbackRef<TData, TError, TSelected>\n >({});\n internalCallbackRef.current = {\n onError,\n onSuccess,\n onSettled,\n compareOrThrow,\n select,\n };\n const internalOptionsRef = useRef<TInternalOptionsRef<TData>>({\n enabled,\n refetchOnWindowFocus,\n refetchInterval,\n compareOrThrow,\n stateless,\n timeout,\n });\n internalOptionsRef.current = {\n enabled,\n refetchOnWindowFocus,\n refetchInterval,\n compareOrThrow,\n stateless,\n timeout,\n };\n const requestIdRef = useRef(getRandomUUID());\n\n const [status, setStatus] = useState<QueryStatus>(() => {\n return \"idle\";\n });\n const [error, setError] = useState<TQueryError<TError>>(null);\n const [data, setData] = useState<TData | undefined>(() => {\n if (initialData !== undefined) {\n if (typeof initialData === \"function\") {\n return (initialData as Functionize<TData>)();\n }\n\n return initialData as TData;\n }\n\n return undefined;\n });\n\n const handleSetData = useCallback((data: TData) => {\n if (internalOptionsRef.current.stateless) {\n return;\n }\n\n setData(data);\n }, []);\n\n const shouldRefetch = useCallback(() => {\n if (!internalOptionsRef.current.enabled) {\n return false;\n }\n\n if (lastFetchedAt.current === null) {\n return true;\n }\n\n return (\n new Date().getTime() - lastFetchedAt.current >\n internalOptionsRef.current?.refetchInterval\n );\n }, []);\n\n const refetch = useCallback(\n async (params: TParams | void | undefined = undefined) => {\n const requestId = getRandomUUID();\n requestIdRef.current = requestId;\n if (!internalOptionsRef.current.enabled) {\n return;\n }\n\n setStatus(\"loading\");\n setError(null);\n\n try {\n const promises: RacePromises<TData>[] = [\n queryFnRef.current(params, { key: queryKeyPassed, lastFetchedAt: lastFetchedAt.current ?? undefined }),\n ...(internalOptionsRef.current.timeout\n ? [\n new Promise<RaceErrorReason>((resolve) =>\n setTimeout(\n () => resolve(\"timeout\"),\n internalOptionsRef.current.timeout\n )\n ),\n ]\n : []),\n ];\n\n const res = await Promise.race(promises);\n if (requestIdRef.current !== requestId) {\n return;\n }\n\n if (res === \"timeout\") {\n throw new Error(\"timeout\");\n }\n\n handleSetData(res);\n\n if (\n internalCallbackRef.current.compareOrThrow &&\n internalCallbackRef.current.compareOrThrow(res) === true\n ) {\n throw new Error(\"failedComparison\");\n }\n\n setStatus(\"success\");\n lastFetchedAt.current = new Date().getTime();\n internalCallbackRef.current.onSuccess?.(res);\n internalCallbackRef.current.onSettled?.(res, undefined);\n } catch (error: any) {\n setError(error);\n setStatus(\"error\");\n internalCallbackRef.current.onError?.(error);\n internalCallbackRef.current.onSettled?.(undefined, error);\n }\n },\n [handleSetData]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setStatus(\"idle\");\n setError(null);\n refetch();\n }, [refetch]);\n\n useEffect(() => {\n const cleanups: (() => void)[] = [];\n\n // If the query should be refetched on window focus, add a listener\n if (refetchOnWindowFocus) {\n const queryHandleFocus = () => {\n refetch();\n };\n\n window.addEventListener(\"focus\", queryHandleFocus);\n\n cleanups.push(() => {\n window.removeEventListener(\"focus\", queryHandleFocus);\n });\n }\n\n // If the query should be refetched on an interval, add an interval\n if (refetchInterval > 0) {\n const interval = setInterval(() => {\n if (shouldRefetch()) {\n refetch();\n }\n }, refetchInterval);\n\n cleanups.push(() => {\n clearInterval(interval);\n });\n }\n\n // If the query key has changed, refetch\n if (\n lastQueryKey.current === undefined ||\n queryKey !== lastQueryKey.current\n ) {\n lastQueryKey.current = queryKey;\n refetch();\n }\n\n return () => {\n cleanups.forEach((cleanup) => cleanup());\n };\n }, [\n queryKey,\n enabled,\n refetchOnWindowFocus,\n refetchInterval,\n shouldRefetch,\n refetch,\n ]);\n\n return {\n data:\n select && data !== undefined\n ? select(data as TData)\n : (data as unknown as TSelected),\n error,\n status,\n refetch,\n reset,\n };\n};\n","// src/comparison/shallowEqual.ts\nfunction shallowEqual(objA, objB) {\n if (Object.is(objA, objB)) {\n return true;\n }\n if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n return false;\n }\n if (objA instanceof Map && objB instanceof Map) {\n if (objA.size !== objB.size) return false;\n for (const [key, value] of objA) {\n if (!Object.is(value, objB.get(key))) {\n return false;\n }\n }\n return true;\n }\n if (objA instanceof Set && objB instanceof Set) {\n if (objA.size !== objB.size) return false;\n for (const value of objA) {\n if (!objB.has(value)) {\n return false;\n }\n }\n return true;\n }\n const keysA = Object.keys(objA);\n if (keysA.length !== Object.keys(objB).length) {\n return false;\n }\n for (let i = 0; i < keysA.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n return true;\n}\n\nexport {\n shallowEqual\n};\n","/**\n * @fileoverview useSubscriptionCore\n * @name useSubscriptionCore.ts\n * @description useSubscriptionCore | This hook handle core subscription logic\n * and provides a way to subscribe and unsubscribe to a topic via any callback\n */\n\nimport { shallowEqual } from \"@pixotope/utils/comparison\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\ntype SubscriptionState = \"idle\" | \"subscribed\" | \"subscribing\" | \"error\";\n\nexport type MessageHandler<TMessage> = (message: TMessage) => void;\nexport type Connection = {\n acknowledge: () => void;\n};\nexport type SubscriptionCoreOptions<\n TData,\n TMessage = TData,\n Stateless extends true | undefined = undefined,\n> = {\n /**\n * @description Function that will be called when the message is received.\n */\n onMessage?: (message: TMessage) => void;\n /**\n * @description Function that will be called when the subscription is created.\n */\n onSubscribed?: (message: TMessage) => void;\n /**\n * @description Function that will be called when the subscription is created.\n */\n onError?: (error: TMessage) => void;\n /**\n * @description Whether the subscription is enabled.\n * @default true\n */\n enabled?: boolean;\n /**\n * @description Function that will be called before the message is processed.\n * Returning `true` will cause the message to not be set to state and call {@link onError} if provided.\n * Status will be set to `error`.\n */\n compareOrThrow?: (data: TMessage) => boolean;\n /**\n * @description Function that will be called to select the data from the message.\n */\n select?: (data: TMessage) => TData;\n /**\n * @description Initial state of the subscription.\n * @default undefined\n */\n initialState?: TData;\n /**\n * @description Function that will be called when the subscription is created.\n */\n subscriberFn: (\n handler: MessageHandler<TMessage>,\n connection: Connection\n ) => () => void /** unsubscribe Fn */;\n /**\n * @description Whether the subscription is stateless. Data will not be\n * stored by the hook internally.\n * @default false\n */\n stateless?: Stateless;\n /**\n * @description Custom equality function for comparing data.\n * @default shallowEqual\n */\n isEqual?: <T = TData>(a: T, b: T) => boolean;\n};\n\ntype WithStatus = {\n status: SubscriptionState;\n};\n\ntype WithData<TData> = {\n data: TData;\n};\n\nexport type SubscriptionCoreReturnType<\n TData,\n Stateless extends true | undefined,\n> = {\n reSubscribe: () => void;\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n} & (Stateless extends true ? {} : WithStatus & WithData<TData>);\n\n/**\n * @description `useSubscriptionCore` | This hook handle core subscription logic\n * and provides a way to subscribe and unsubscribe to a topic via any callback.\n * The hook expose a handler function. All the consumer code need to do is to\n * call this handler function with the message received from the topic or pass\n * it directly to the callback function that is passed to the subscriberFn.\n * - `status` - current status of the subscription\n * - `data` - the data after the select function is applied to the message\n * - `reSubscribe` - function that can be called to re-subscribe to the topic\n *\n * An example how this hook works can be found in {@link ./useSubscription.ts}\n */\nexport function useSubscriptionCore<\n TData = unknown,\n TMessage = TData,\n Stateless extends true | undefined = undefined,\n>(\n options: SubscriptionCoreOptions<TData, TMessage, Stateless>\n): SubscriptionCoreReturnType<TData, Stateless> {\n const {\n enabled = true,\n initialState = undefined,\n onSubscribed,\n stateless,\n compareOrThrow,\n subscriberFn,\n onMessage,\n onError,\n select,\n isEqual = shallowEqual,\n } = options;\n const [status, setStatus] = useState<SubscriptionState>(\"idle\");\n const [data, setData] = useState<TData | undefined>(initialState);\n const unsubcribeRef = useRef<() => void | undefined>(undefined);\n const initialStateRef = useRef(initialState);\n const subscriberFnRef = useRef(subscriberFn);\n const callbackRefRegistry = <const>{\n onMessage,\n onError,\n select,\n compareOrThrow,\n onSubscribed,\n isEqual,\n };\n const internalCallbacksRef = useRef(callbackRefRegistry);\n internalCallbacksRef.current = callbackRefRegistry;\n\n const updateStatus = useCallback(\n (newStatus: SubscriptionState, message?: TMessage) => {\n if (stateless) {\n return;\n }\n\n setStatus((prev) => {\n if (prev === newStatus) {\n return prev;\n }\n\n if (newStatus === \"subscribed\" && message) {\n internalCallbacksRef.current.onSubscribed?.(message);\n }\n\n return newStatus;\n });\n },\n [stateless]\n );\n\n const connection: Connection = useMemo(\n () => ({\n acknowledge: () => {\n updateStatus(\"subscribed\");\n },\n }),\n [updateStatus]\n );\n\n const handler = useCallback(\n async (message: TMessage) => {\n if (internalCallbacksRef.current.compareOrThrow?.(message)) {\n updateStatus(\"error\");\n internalCallbacksRef.current.onError?.(message);\n\n return;\n }\n\n const selectedMessage = <TData>(\n (internalCallbacksRef.current.select?.(message) ?? message)\n );\n\n if (!stateless) {\n setData((prev) => {\n if (isEqual(prev, selectedMessage)) {\n return prev;\n }\n\n return selectedMessage;\n });\n }\n\n updateStatus(\"subscribed\", message);\n internalCallbacksRef.current.onMessage?.(message);\n },\n [stateless, updateStatus]\n );\n\n const unsubscribe = useCallback(() => {\n updateStatus(\"idle\");\n unsubcribeRef.current?.();\n unsubcribeRef.current = undefined;\n }, [updateStatus]);\n\n const subscribe = useCallback(() => {\n unsubcribeRef.current?.();\n updateStatus(\"subscribing\");\n setData(initialStateRef.current);\n unsubcribeRef.current = subscriberFnRef.current(handler, connection);\n }, [connection, handler, updateStatus]);\n\n useEffect(() => {\n if (enabled) {\n subscribe();\n } else {\n unsubscribe();\n }\n\n return () => {\n unsubscribe();\n };\n }, [enabled, subscribe, unsubscribe]);\n\n return {\n status,\n data,\n reSubscribe: subscribe,\n } as unknown as any;\n}\n","import {\n SubscriptionCoreOptions,\n useSubscriptionCore,\n} from \"./useSubscriptionCore\";\n\nexport type SubscriptionOptions<\n TData,\n TMessage = unknown,\n Stateless extends true | undefined = undefined,\n TMetadata extends {} = {},\n> = Omit<\n SubscriptionCoreOptions<TData, TMessage, Stateless>,\n \"subscriberFn\"\n> & {\n service: string;\n topic: string;\n maxDownwardDepth?: number;\n} & {\n meta?: TMetadata;\n};\n\nexport type TSubscriptionHandlerFunction<\n TMessage,\n TMetadata extends {} = {},\n> = (\n opts: {\n service: string;\n name: string;\n callback: (message: TMessage) => void;\n maxDownwardDepth?: number;\n } & { meta?: TMetadata }\n) => () => void;\n\nexport function useSubscription<\n TData = unknown,\n TMessage = TData,\n Stateless extends true | undefined = undefined,\n TMetadata extends {} = {},\n>(\n subscriptionHandler: TSubscriptionHandlerFunction<TMessage, TMetadata>,\n options: SubscriptionOptions<TData, TMessage, Stateless, TMetadata>\n) {\n const { topic, service, maxDownwardDepth = 1000, meta, ...rest } = options;\n\n return useSubscriptionCore<TData, TMessage, Stateless>({\n ...rest,\n subscriberFn: (handler) => {\n const unsubscribe = subscriptionHandler({\n service,\n name: topic,\n callback: (message: TMessage) => {\n handler(message);\n },\n maxDownwardDepth,\n meta,\n });\n\n return unsubscribe;\n },\n });\n}\n\nexport function buildServiceSubscriptionHook<TMetadata extends {} = {}>(\n subscriptionHandler: TSubscriptionHandlerFunction<unknown, TMetadata>,\n targetMachine: (machine: string | undefined) => string\n) {\n return function useSubscriptionBuilder<\n TData,\n TMessage = TData,\n Stateless extends true | undefined = undefined,\n >(\n options: Omit<\n SubscriptionOptions<TData, TMessage, Stateless, TMetadata>,\n \"service\"\n > & {\n machine?: string;\n }\n ) {\n const targetService = targetMachine(options.machine);\n return useSubscription<TData, TMessage, Stateless>(\n <TSubscriptionHandlerFunction<TMessage>>subscriptionHandler,\n {\n service: targetService,\n ...options,\n }\n );\n };\n}\n","import type { ZMQProxyWSClient } from \"@pixotope/zmq-client\";\nimport type { TPromiseFunction } from \"./factories\";\nimport type { buildServiceSubscriptionHook } from \"./useSubscription\";\n\nexport type TProxySubscriptionHandlerParams<TMetadata extends {} = {}> =\n Parameters<Parameters<typeof buildServiceSubscriptionHook<TMetadata>>[0]>[0];\n\nexport function bindClientSocketProxy(socketClientProxy: ZMQProxyWSClient) {\n return (args: TProxySubscriptionHandlerParams) => {\n const { callback: cbHook, ...rest } = args;\n return socketClientProxy.mirror({\n ...rest,\n callback: (message) => {\n cbHook(message.message);\n },\n })[0];\n };\n}\n\nexport function bindPromiseFunction(clientSocketProxy: ZMQProxyWSClient) {\n return async (\n ...args: Parameters<TPromiseFunction<unknown, unknown, unknown>>\n ) => {\n const res = await clientSocketProxy.callAsync(...args);\n return res.message.Result;\n };\n}\n"],"mappings":"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","names":["import_react","params","error","options","import_react","data","_a","_b","error","import_react"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -2,7 +2,10 @@ import * as _pixotope_zmq_client from '@pixotope/zmq-client';
|
|
|
2
2
|
import { ZMQClient, TSocketServerCallOptions, ZMQProxyWSClient } from '@pixotope/zmq-client';
|
|
3
3
|
|
|
4
4
|
interface QueryOptions<TData = unknown, TError = unknown, TParams = void, TSelectData = TData, Stateless extends true | undefined = undefined> {
|
|
5
|
-
queryFn: (params: TParams | undefined | void
|
|
5
|
+
queryFn: (params: TParams | undefined | void, queryInfo: {
|
|
6
|
+
key: TQueryKey | undefined;
|
|
7
|
+
lastFetchedAt: number | undefined;
|
|
8
|
+
}) => Promise<TData>;
|
|
6
9
|
onSuccess?: (data: TData) => Promise<void> | void;
|
|
7
10
|
onError?: (error: TQueryError<TError>) => Promise<void> | void;
|
|
8
11
|
onSettled?: (data: TData | undefined, error: TQueryError<TError> | undefined) => Promise<void> | void;
|
|
@@ -97,12 +100,12 @@ declare function buildMutationHook<TFnToParams extends FnToParamsBase, TMetadata
|
|
|
97
100
|
reset: () => void;
|
|
98
101
|
error: Error | TFnToParams[TFn]["error"] | null;
|
|
99
102
|
};
|
|
100
|
-
declare const useCallQueryBase: <TFnToParams extends FnToParamsBase, TData = unknown, TError = unknown, TParams = unknown, TSelect = TData, TMetadata = unknown>(promiseFunction: TPromiseFunction<TData, TParams, TMetadata>, functionName: keyof TFnToParams, params: TParams, service: (meta?: TMetadata) => string, options?: Omit<QueryOptions<TData, TError, TParams, TSelect>, "queryFn"> & {
|
|
103
|
+
declare const useCallQueryBase: <TFnToParams extends FnToParamsBase, TData = unknown, TError = unknown, TParams = unknown, TSelect = TData, TMetadata = unknown, TStateless extends true | undefined = undefined>(promiseFunction: TPromiseFunction<TData, TParams, TMetadata>, functionName: keyof TFnToParams, params: TParams, service: (meta?: TMetadata) => string, options?: Omit<QueryOptions<TData, TError, TParams, TSelect, TStateless>, "queryFn"> & {
|
|
101
104
|
meta?: TMetadata;
|
|
102
|
-
}) => UseQueryResult<TSelect, TError, TParams, TSelect,
|
|
103
|
-
declare function buildQueryHook<TFnToParams extends FnToParamsBase, TMetadata = unknown>(promiseFunction: TPromiseFunction<unknown, unknown, unknown>, getTargetService: (meta?: TMetadata) => string): <TFn extends keyof TFnToParams, TSelect = TFnToParams[TFn]["data"]>(func: TFn, params: TFnToParams[TFn]["params"], options?: Parameters<typeof useCallQueryBase<TFnToParams, TFnToParams[TFn]["data"], TFnToParams[TFn]["error"], TFnToParams[TFn]["params"], TSelect, TMetadata>>[4] & {
|
|
105
|
+
}) => UseQueryResult<TSelect, TError, TParams, TSelect, TStateless>;
|
|
106
|
+
declare function buildQueryHook<TFnToParams extends FnToParamsBase, TMetadata = unknown>(promiseFunction: TPromiseFunction<unknown, unknown, unknown>, getTargetService: (meta?: TMetadata) => string): <TFn extends keyof TFnToParams, TSelect = TFnToParams[TFn]["data"], TStateless extends true | undefined = undefined>(func: TFn, params: TFnToParams[TFn]["params"], options?: Parameters<typeof useCallQueryBase<TFnToParams, TFnToParams[TFn]["data"], TFnToParams[TFn]["error"], TFnToParams[TFn]["params"], TSelect, TMetadata, TStateless>>[4] & {
|
|
104
107
|
meta?: TMetadata;
|
|
105
|
-
}) => UseQueryResult<TSelect, TFnToParams[TFn]["error"], TFnToParams[TFn]["params"], TSelect,
|
|
108
|
+
}) => UseQueryResult<TSelect, TFnToParams[TFn]["error"], TFnToParams[TFn]["params"], TSelect, TStateless>;
|
|
106
109
|
|
|
107
110
|
/**
|
|
108
111
|
* @fileoverview useSubscriptionCore
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,10 @@ import * as _pixotope_zmq_client from '@pixotope/zmq-client';
|
|
|
2
2
|
import { ZMQClient, TSocketServerCallOptions, ZMQProxyWSClient } from '@pixotope/zmq-client';
|
|
3
3
|
|
|
4
4
|
interface QueryOptions<TData = unknown, TError = unknown, TParams = void, TSelectData = TData, Stateless extends true | undefined = undefined> {
|
|
5
|
-
queryFn: (params: TParams | undefined | void
|
|
5
|
+
queryFn: (params: TParams | undefined | void, queryInfo: {
|
|
6
|
+
key: TQueryKey | undefined;
|
|
7
|
+
lastFetchedAt: number | undefined;
|
|
8
|
+
}) => Promise<TData>;
|
|
6
9
|
onSuccess?: (data: TData) => Promise<void> | void;
|
|
7
10
|
onError?: (error: TQueryError<TError>) => Promise<void> | void;
|
|
8
11
|
onSettled?: (data: TData | undefined, error: TQueryError<TError> | undefined) => Promise<void> | void;
|
|
@@ -97,12 +100,12 @@ declare function buildMutationHook<TFnToParams extends FnToParamsBase, TMetadata
|
|
|
97
100
|
reset: () => void;
|
|
98
101
|
error: Error | TFnToParams[TFn]["error"] | null;
|
|
99
102
|
};
|
|
100
|
-
declare const useCallQueryBase: <TFnToParams extends FnToParamsBase, TData = unknown, TError = unknown, TParams = unknown, TSelect = TData, TMetadata = unknown>(promiseFunction: TPromiseFunction<TData, TParams, TMetadata>, functionName: keyof TFnToParams, params: TParams, service: (meta?: TMetadata) => string, options?: Omit<QueryOptions<TData, TError, TParams, TSelect>, "queryFn"> & {
|
|
103
|
+
declare const useCallQueryBase: <TFnToParams extends FnToParamsBase, TData = unknown, TError = unknown, TParams = unknown, TSelect = TData, TMetadata = unknown, TStateless extends true | undefined = undefined>(promiseFunction: TPromiseFunction<TData, TParams, TMetadata>, functionName: keyof TFnToParams, params: TParams, service: (meta?: TMetadata) => string, options?: Omit<QueryOptions<TData, TError, TParams, TSelect, TStateless>, "queryFn"> & {
|
|
101
104
|
meta?: TMetadata;
|
|
102
|
-
}) => UseQueryResult<TSelect, TError, TParams, TSelect,
|
|
103
|
-
declare function buildQueryHook<TFnToParams extends FnToParamsBase, TMetadata = unknown>(promiseFunction: TPromiseFunction<unknown, unknown, unknown>, getTargetService: (meta?: TMetadata) => string): <TFn extends keyof TFnToParams, TSelect = TFnToParams[TFn]["data"]>(func: TFn, params: TFnToParams[TFn]["params"], options?: Parameters<typeof useCallQueryBase<TFnToParams, TFnToParams[TFn]["data"], TFnToParams[TFn]["error"], TFnToParams[TFn]["params"], TSelect, TMetadata>>[4] & {
|
|
105
|
+
}) => UseQueryResult<TSelect, TError, TParams, TSelect, TStateless>;
|
|
106
|
+
declare function buildQueryHook<TFnToParams extends FnToParamsBase, TMetadata = unknown>(promiseFunction: TPromiseFunction<unknown, unknown, unknown>, getTargetService: (meta?: TMetadata) => string): <TFn extends keyof TFnToParams, TSelect = TFnToParams[TFn]["data"], TStateless extends true | undefined = undefined>(func: TFn, params: TFnToParams[TFn]["params"], options?: Parameters<typeof useCallQueryBase<TFnToParams, TFnToParams[TFn]["data"], TFnToParams[TFn]["error"], TFnToParams[TFn]["params"], TSelect, TMetadata, TStateless>>[4] & {
|
|
104
107
|
meta?: TMetadata;
|
|
105
|
-
}) => UseQueryResult<TSelect, TFnToParams[TFn]["error"], TFnToParams[TFn]["params"], TSelect,
|
|
108
|
+
}) => UseQueryResult<TSelect, TFnToParams[TFn]["error"], TFnToParams[TFn]["params"], TSelect, TStateless>;
|
|
106
109
|
|
|
107
110
|
/**
|
|
108
111
|
* @fileoverview useSubscriptionCore
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
var __create = Object.create;
|
|
2
1
|
var __defProp = Object.defineProperty;
|
|
3
2
|
var __defProps = Object.defineProperties;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
3
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
6
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
4
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
8
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
9
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
6
|
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
11
7
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
@@ -33,25 +29,6 @@ var __objRest = (source, exclude) => {
|
|
|
33
29
|
}
|
|
34
30
|
return target;
|
|
35
31
|
};
|
|
36
|
-
var __commonJS = (cb, mod) => function __require() {
|
|
37
|
-
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
38
|
-
};
|
|
39
|
-
var __copyProps = (to, from, except, desc) => {
|
|
40
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
41
|
-
for (let key of __getOwnPropNames(from))
|
|
42
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
43
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
44
|
-
}
|
|
45
|
-
return to;
|
|
46
|
-
};
|
|
47
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
48
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
49
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
50
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
51
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
52
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
53
|
-
mod
|
|
54
|
-
));
|
|
55
32
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
56
33
|
var __async = (__this, __arguments, generator) => {
|
|
57
34
|
return new Promise((resolve, reject) => {
|
|
@@ -74,71 +51,6 @@ var __async = (__this, __arguments, generator) => {
|
|
|
74
51
|
});
|
|
75
52
|
};
|
|
76
53
|
|
|
77
|
-
// ../utils/dist/comparison/index.js
|
|
78
|
-
var require_comparison = __commonJS({
|
|
79
|
-
"../utils/dist/comparison/index.js"(exports, module) {
|
|
80
|
-
"use strict";
|
|
81
|
-
var __defProp2 = Object.defineProperty;
|
|
82
|
-
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
|
|
83
|
-
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
|
84
|
-
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
85
|
-
var __export = (target, all) => {
|
|
86
|
-
for (var name in all)
|
|
87
|
-
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
88
|
-
};
|
|
89
|
-
var __copyProps2 = (to, from, except, desc) => {
|
|
90
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
91
|
-
for (let key of __getOwnPropNames2(from))
|
|
92
|
-
if (!__hasOwnProp2.call(to, key) && key !== except)
|
|
93
|
-
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
|
|
94
|
-
}
|
|
95
|
-
return to;
|
|
96
|
-
};
|
|
97
|
-
var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
|
|
98
|
-
var comparison_exports = {};
|
|
99
|
-
__export(comparison_exports, {
|
|
100
|
-
shallowEqual: () => shallowEqual2
|
|
101
|
-
});
|
|
102
|
-
module.exports = __toCommonJS(comparison_exports);
|
|
103
|
-
function shallowEqual2(objA, objB) {
|
|
104
|
-
if (Object.is(objA, objB)) {
|
|
105
|
-
return true;
|
|
106
|
-
}
|
|
107
|
-
if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
|
|
108
|
-
return false;
|
|
109
|
-
}
|
|
110
|
-
if (objA instanceof Map && objB instanceof Map) {
|
|
111
|
-
if (objA.size !== objB.size) return false;
|
|
112
|
-
for (const [key, value] of objA) {
|
|
113
|
-
if (!Object.is(value, objB.get(key))) {
|
|
114
|
-
return false;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
return true;
|
|
118
|
-
}
|
|
119
|
-
if (objA instanceof Set && objB instanceof Set) {
|
|
120
|
-
if (objA.size !== objB.size) return false;
|
|
121
|
-
for (const value of objA) {
|
|
122
|
-
if (!objB.has(value)) {
|
|
123
|
-
return false;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
return true;
|
|
127
|
-
}
|
|
128
|
-
const keysA = Object.keys(objA);
|
|
129
|
-
if (keysA.length !== Object.keys(objB).length) {
|
|
130
|
-
return false;
|
|
131
|
-
}
|
|
132
|
-
for (let i = 0; i < keysA.length; i++) {
|
|
133
|
-
if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {
|
|
134
|
-
return false;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
return true;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
|
|
142
54
|
// src/factories.ts
|
|
143
55
|
import { useCallback as useCallback3, useMemo } from "react";
|
|
144
56
|
|
|
@@ -344,7 +256,7 @@ var useQuery = (_a) => {
|
|
|
344
256
|
}, []);
|
|
345
257
|
const refetch = useCallback2(
|
|
346
258
|
(params = void 0) => __async(null, null, function* () {
|
|
347
|
-
var _a2, _b2, _c, _d, _e, _f, _g, _h;
|
|
259
|
+
var _a2, _b2, _c, _d, _e, _f, _g, _h, _i;
|
|
348
260
|
const requestId = getRandomUUID();
|
|
349
261
|
requestIdRef.current = requestId;
|
|
350
262
|
if (!internalOptionsRef.current.enabled) {
|
|
@@ -354,7 +266,7 @@ var useQuery = (_a) => {
|
|
|
354
266
|
setError(null);
|
|
355
267
|
try {
|
|
356
268
|
const promises = [
|
|
357
|
-
queryFnRef.current(params),
|
|
269
|
+
queryFnRef.current(params, { key: queryKeyPassed, lastFetchedAt: (_a2 = lastFetchedAt.current) != null ? _a2 : void 0 }),
|
|
358
270
|
...internalOptionsRef.current.timeout ? [
|
|
359
271
|
new Promise(
|
|
360
272
|
(resolve) => setTimeout(
|
|
@@ -377,13 +289,13 @@ var useQuery = (_a) => {
|
|
|
377
289
|
}
|
|
378
290
|
setStatus("success");
|
|
379
291
|
lastFetchedAt.current = (/* @__PURE__ */ new Date()).getTime();
|
|
380
|
-
(
|
|
381
|
-
(
|
|
292
|
+
(_c = (_b2 = internalCallbackRef.current).onSuccess) == null ? void 0 : _c.call(_b2, res);
|
|
293
|
+
(_e = (_d = internalCallbackRef.current).onSettled) == null ? void 0 : _e.call(_d, res, void 0);
|
|
382
294
|
} catch (error2) {
|
|
383
295
|
setError(error2);
|
|
384
296
|
setStatus("error");
|
|
385
|
-
(
|
|
386
|
-
(
|
|
297
|
+
(_g = (_f = internalCallbackRef.current).onError) == null ? void 0 : _g.call(_f, error2);
|
|
298
|
+
(_i = (_h = internalCallbackRef.current).onSettled) == null ? void 0 : _i.call(_h, void 0, error2);
|
|
387
299
|
}
|
|
388
300
|
}),
|
|
389
301
|
[handleSetData]
|
|
@@ -509,8 +421,45 @@ function buildQueryHook(promiseFunction, getTargetService) {
|
|
|
509
421
|
};
|
|
510
422
|
}
|
|
511
423
|
|
|
424
|
+
// ../utils/dist/chunk-5QIHMQPV.js
|
|
425
|
+
function shallowEqual(objA, objB) {
|
|
426
|
+
if (Object.is(objA, objB)) {
|
|
427
|
+
return true;
|
|
428
|
+
}
|
|
429
|
+
if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
|
|
430
|
+
return false;
|
|
431
|
+
}
|
|
432
|
+
if (objA instanceof Map && objB instanceof Map) {
|
|
433
|
+
if (objA.size !== objB.size) return false;
|
|
434
|
+
for (const [key, value] of objA) {
|
|
435
|
+
if (!Object.is(value, objB.get(key))) {
|
|
436
|
+
return false;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
return true;
|
|
440
|
+
}
|
|
441
|
+
if (objA instanceof Set && objB instanceof Set) {
|
|
442
|
+
if (objA.size !== objB.size) return false;
|
|
443
|
+
for (const value of objA) {
|
|
444
|
+
if (!objB.has(value)) {
|
|
445
|
+
return false;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
return true;
|
|
449
|
+
}
|
|
450
|
+
const keysA = Object.keys(objA);
|
|
451
|
+
if (keysA.length !== Object.keys(objB).length) {
|
|
452
|
+
return false;
|
|
453
|
+
}
|
|
454
|
+
for (let i = 0; i < keysA.length; i++) {
|
|
455
|
+
if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {
|
|
456
|
+
return false;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
return true;
|
|
460
|
+
}
|
|
461
|
+
|
|
512
462
|
// src/useSubscriptionCore.ts
|
|
513
|
-
var import_comparison = __toESM(require_comparison(), 1);
|
|
514
463
|
import { useCallback as useCallback4, useEffect as useEffect2, useMemo as useMemo2, useRef as useRef3, useState as useState3 } from "react";
|
|
515
464
|
function useSubscriptionCore(options) {
|
|
516
465
|
const {
|
|
@@ -523,7 +472,7 @@ function useSubscriptionCore(options) {
|
|
|
523
472
|
onMessage,
|
|
524
473
|
onError,
|
|
525
474
|
select,
|
|
526
|
-
isEqual =
|
|
475
|
+
isEqual = shallowEqual
|
|
527
476
|
} = options;
|
|
528
477
|
const [status, setStatus] = useState3("idle");
|
|
529
478
|
const [data, setData] = useState3(initialState);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../utils/dist/comparison/index.js","../src/factories.ts","../src/useMutation.ts","../src/useQuery.ts","../src/useSubscriptionCore.ts","../src/useSubscription.ts","../src/proxyBinders.ts"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/comparison/index.ts\nvar comparison_exports = {};\n__export(comparison_exports, {\n shallowEqual: () => shallowEqual\n});\nmodule.exports = __toCommonJS(comparison_exports);\n\n// src/comparison/shallowEqual.ts\nfunction shallowEqual(objA, objB) {\n if (Object.is(objA, objB)) {\n return true;\n }\n if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n return false;\n }\n if (objA instanceof Map && objB instanceof Map) {\n if (objA.size !== objB.size) return false;\n for (const [key, value] of objA) {\n if (!Object.is(value, objB.get(key))) {\n return false;\n }\n }\n return true;\n }\n if (objA instanceof Set && objB instanceof Set) {\n if (objA.size !== objB.size) return false;\n for (const value of objA) {\n if (!objB.has(value)) {\n return false;\n }\n }\n return true;\n }\n const keysA = Object.keys(objA);\n if (keysA.length !== Object.keys(objB).length) {\n return false;\n }\n for (let i = 0; i < keysA.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n return true;\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n shallowEqual\n});\n","import type { TSocketServerCallOptions, ZMQClient } from \"@pixotope/zmq-client\";\nimport { useCallback, useMemo } from \"react\";\nimport { MutationOptions, useMutation } from \"./useMutation\";\nimport { QueryOptions, useQuery } from \"./useQuery\";\n\nexport type MutationInfo<TData, TError, TParams> = {\n data: TData;\n error: TError;\n params: TParams;\n};\n\ntype FnToParamsBase = Record<string, MutationInfo<unknown, unknown, unknown>>;\n\nexport type TPromiseFunction<TResponse, TParams, TExtraParams> = (\n args: Omit<\n ZMQClient.Call<\n TResponse,\n {\n functionName: string;\n parameters: TParams;\n options?: Omit<TSocketServerCallOptions, \"toCallIfNoResponse\">;\n }\n >,\n \"id\"\n > & {\n meta?: TExtraParams;\n }\n) => Promise<TResponse>;\n\nconst useCallMutationBase = <\n TFnToParams extends FnToParamsBase,\n TData = unknown,\n TError = unknown,\n TParams = unknown,\n TMetadata = unknown,\n>(\n promiseFunc: TPromiseFunction<TData, TParams, TMetadata>,\n functionName: keyof TFnToParams,\n service: (meta?: TMetadata) => string,\n options?: Omit<\n MutationOptions<TData, TError, TParams, TMetadata>,\n \"mutationFn\"\n >\n) => {\n const timeout = options?.timeout;\n const { ...rest } = useMemo(() => options ?? {}, [options]);\n const mutationFn = useCallback(\n async (parameters: TParams, meta?: TMetadata) => {\n try {\n return await promiseFunc({\n service: service(meta),\n functionName: functionName.toString(),\n parameters,\n options: {\n avoidTimeout: !timeout,\n customTimeout: timeout,\n },\n meta,\n });\n } catch (e) {\n if (e instanceof Error) {\n throw e;\n }\n throw new Error(e as string);\n }\n },\n [functionName, service, timeout]\n );\n\n return useMutation<TData, TError, TParams, TMetadata>({\n mutationFn,\n ...rest,\n });\n};\n\nexport function buildMutationHook<\n TFnToParams extends FnToParamsBase,\n TMetadata = unknown,\n>(\n promiseFunc: TPromiseFunction<unknown, unknown, unknown>,\n genTargetService: (meta?: TMetadata) => string\n) {\n return function useCallMutationBuilder<TFn extends keyof TFnToParams>(\n func: TFn,\n options?: Parameters<\n typeof useCallMutationBase<\n TFnToParams,\n TFnToParams[TFn][\"data\"],\n TFnToParams[TFn][\"error\"],\n TFnToParams[TFn][\"params\"],\n TMetadata\n >\n >[3]\n ) {\n return useCallMutationBase<\n TFnToParams,\n TFnToParams[TFn][\"data\"],\n TFnToParams[TFn][\"error\"],\n TFnToParams[TFn][\"params\"],\n TMetadata\n >(promiseFunc, func, genTargetService, options);\n };\n}\n\nconst useCallQueryBase = <\n TFnToParams extends FnToParamsBase,\n TData = unknown,\n TError = unknown,\n TParams = unknown,\n TSelect = TData,\n TMetadata = unknown,\n>(\n promiseFunction: TPromiseFunction<TData, TParams, TMetadata>,\n functionName: keyof TFnToParams,\n params: TParams,\n service: (meta?: TMetadata) => string,\n options?: Omit<QueryOptions<TData, TError, TParams, TSelect>, \"queryFn\"> & {\n meta?: TMetadata;\n }\n) => {\n const timeout = options?.timeout;\n const { ...rest } = useMemo(() => options ?? {}, [options]);\n const queryFn = useCallback(\n async (refetchParams: TParams | void) => {\n try {\n return await promiseFunction({\n service: service(options?.meta),\n functionName: functionName.toString(),\n parameters: refetchParams ?? params,\n options: {\n avoidTimeout: !timeout,\n customTimeout: timeout,\n },\n meta: options?.meta,\n });\n } catch (e) {\n if (e instanceof Error) {\n throw e;\n }\n throw new Error(e as string);\n }\n },\n [functionName, service, params, timeout]\n );\n\n return useQuery<TData, TError, TParams, TSelect>({\n queryFn,\n ...rest,\n });\n};\n\nexport function buildQueryHook<\n TFnToParams extends FnToParamsBase,\n TMetadata = unknown,\n>(\n promiseFunction: TPromiseFunction<unknown, unknown, unknown>,\n getTargetService: (meta?: TMetadata) => string\n) {\n return function useCallQueryBuilder<\n TFn extends keyof TFnToParams,\n TSelect = TFnToParams[TFn][\"data\"],\n >(\n func: TFn,\n params: TFnToParams[TFn][\"params\"],\n options?: Parameters<\n typeof useCallQueryBase<\n TFnToParams,\n TFnToParams[TFn][\"data\"],\n TFnToParams[TFn][\"error\"],\n TFnToParams[TFn][\"params\"],\n TSelect,\n TMetadata\n >\n >[4] & { meta?: TMetadata }\n ) {\n return useCallQueryBase<\n TFnToParams,\n TFnToParams[TFn][\"data\"],\n TFnToParams[TFn][\"error\"],\n TFnToParams[TFn][\"params\"],\n TSelect,\n TMetadata\n >(promiseFunction, func, params, getTargetService, options);\n };\n}\n","import { useCallback, useRef, useState } from \"react\";\n\nexport type MutationFunction<\n TData = unknown,\n TParams = unknown,\n TMetadata = unknown,\n> = (params: TParams, meta?: TMetadata) => Promise<TData>;\n\nexport interface MutationOptions<\n TData = unknown,\n TError = unknown,\n TParams = void,\n TMetadata = unknown,\n> {\n mutationFn: MutationFunction<TData, TParams, TMetadata>;\n params?: TParams;\n onSuccess?: (\n data: TData,\n variables: TParams,\n meta?: TMetadata\n ) => Promise<unknown> | unknown;\n onError?: (\n error: TMutationError<TError>,\n variables: TParams,\n meta?: TMetadata\n ) => Promise<unknown> | unknown;\n onSettled?: (\n data: TData | undefined,\n error: TMutationError<TError> | null,\n variables: TParams,\n meta?: TMetadata\n ) => Promise<unknown> | unknown;\n compareOrThrow?: (result: TData | TError) => boolean;\n timeout?: number;\n prepareParams?: (\n variables: TParams,\n defaults?: TParams,\n meta?: TMetadata\n ) => TParams;\n}\n\ntype TMutationError<TError> = TError | Error | null;\n\nexport interface MutateOptions<\n TData = unknown,\n TError = unknown,\n TParams = void,\n TMetadata = unknown,\n> {\n onSuccess?: (data: TData, variables: TParams, meta?: TMetadata) => void;\n onError?: (\n error: TMutationError<TError>,\n variables: TParams,\n meta?: TMetadata\n ) => void;\n onSettled?: (\n data: TData | undefined,\n error: TMutationError<TError> | null,\n variables: TParams,\n meta?: TMetadata\n ) => void;\n}\n\ntype MutationStatus = \"idle\" | \"loading\" | \"success\" | \"error\";\ntype RaceErrorReason = \"timeout\";\ntype RacePromises<T> = Promise<T | RaceErrorReason>;\n\nexport class ComparisonFailError<TPayload = unknown> extends Error {\n public readonly payload: TPayload;\n\n constructor(message: string, payload: TPayload) {\n super(message);\n this.name = this.constructor.name;\n this.payload = payload;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ComparisonFailError);\n }\n }\n}\n\nexport const useMutation = <\n TData = unknown,\n TError = TMutationError<unknown>,\n TParams = void,\n TMetadata = unknown,\n>(\n options: MutationOptions<TData, TError, TParams, TMetadata>\n) => {\n const {\n mutationFn,\n compareOrThrow,\n onError,\n onSettled,\n onSuccess,\n prepareParams,\n params,\n timeout,\n } = options;\n const [status, setStatus] = useState<MutationStatus>(\"idle\");\n const [error, setError] = useState<TMutationError<TError>>(null);\n const [result, setResult] = useState<TData | undefined>(undefined);\n const mutationFnRef = useRef(mutationFn);\n const internalOptionsRef = useRef({\n params,\n timeout,\n });\n const internalCallbackRefistry = <const>{\n onSuccess,\n onError,\n onSettled,\n compareOrThrow,\n prepareParams,\n };\n const internalCallbackRef = useRef(internalCallbackRefistry);\n internalCallbackRef.current = internalCallbackRefistry;\n\n const mutateAsync = useCallback(async (params: TParams, meta?: TMetadata) => {\n setStatus(\"loading\");\n setError(null);\n\n try {\n const promises: RacePromises<TData>[] = [\n mutationFnRef.current(\n internalCallbackRef.current.prepareParams\n ? internalCallbackRef.current.prepareParams(\n params,\n internalOptionsRef.current.params,\n meta\n )\n : params,\n meta\n ),\n ...(internalOptionsRef.current.timeout\n ? [\n new Promise<RaceErrorReason>((resolve) =>\n setTimeout(\n () => resolve(\"timeout\"),\n internalOptionsRef.current.timeout\n )\n ),\n ]\n : []),\n ];\n\n const res = await Promise.race(promises);\n\n if (res === \"timeout\") {\n throw new Error(\"timeout\");\n }\n\n if (internalCallbackRef.current.compareOrThrow?.(res)) {\n throw new ComparisonFailError(JSON.stringify(res), res);\n }\n\n setResult(res);\n setStatus(\"success\");\n\n internalCallbackRef.current.onSuccess?.(res, params, meta);\n internalCallbackRef.current.onSettled?.(res, null, params, meta);\n\n return res;\n } catch (error: any) {\n setError(error);\n setStatus(\"error\");\n\n internalCallbackRef.current.onError?.(error, params, meta);\n internalCallbackRef.current.onSettled?.(undefined, error, params, meta);\n\n throw error;\n }\n }, []);\n\n const mutate = useCallback(\n (\n variables: TParams,\n options?: MutateOptions<TData, TError, TParams, TMetadata> & {\n meta?: TMetadata;\n }\n ) => {\n mutateAsync(variables, options?.meta).then(\n (data) => {\n options?.onSuccess?.(data, variables, options?.meta);\n options?.onSettled?.(data, null, variables, options?.meta);\n },\n (error) => {\n options?.onError?.(error, variables, options?.meta);\n options?.onSettled?.(undefined, error, variables, options?.meta);\n }\n );\n },\n [mutateAsync]\n );\n\n return {\n mutateAsync,\n status,\n result,\n mutate,\n reset: () => {\n setStatus(\"idle\");\n setError(null);\n setResult(undefined);\n },\n error,\n };\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport interface QueryOptions<\n TData = unknown,\n TError = unknown,\n TParams = void,\n TSelectData = TData,\n Stateless extends true | undefined = undefined,\n> {\n queryFn: (params: TParams | undefined | void) => Promise<TData>;\n onSuccess?: (data: TData) => Promise<void> | void;\n onError?: (error: TQueryError<TError>) => Promise<void> | void;\n onSettled?: (\n data: TData | undefined,\n error: TQueryError<TError> | undefined\n ) => Promise<void> | void;\n timeout?: number;\n enabled?: boolean;\n initialData?: TData | Functionize<TData>;\n select?: (data: TData) => TSelectData;\n refetchOnWindowFocus?: boolean;\n refetchInterval?: number;\n compareOrThrow?: (data: TData) => boolean;\n stateless?: Stateless;\n key?: TQueryKey;\n}\n\ntype Functionize<T> = () => T;\ntype QueryStatus = \"idle\" | \"loading\" | \"success\" | \"error\" | \"timeout\";\ntype RaceErrorReason = \"timeout\";\ntype RacePromises<T> = Promise<T | RaceErrorReason>;\ntype WithData<TData> = { data: TData | undefined };\ntype TQueryKey = readonly any[];\n\ntype TQueryError<TError> = TError | Error | null;\n\nexport type UseQueryResult<\n TData = unknown,\n TError = unknown,\n TParams = void,\n TSelectData = TData,\n Stateless extends true | undefined = undefined,\n> = {\n error: TQueryError<TError>;\n status: QueryStatus;\n refetch: (params: TParams | void | undefined) => Promise<void>;\n reset: () => void;\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n} & (Stateless extends true ? {} : WithData<TSelectData>);\n\nfunction normalizeQueryKey(queryKey: TQueryKey): string {\n return JSON.stringify(queryKey);\n}\n\ntype TInternalCallbackRef<TData, TError, TSelectData> = {\n onError?: (error: TQueryError<TError>) => Promise<void> | void;\n onSuccess?: (data: TData) => Promise<void> | void;\n onSettled?: (\n data: TData | undefined,\n error: TQueryError<TError> | undefined\n ) => Promise<void> | void;\n compareOrThrow?: (data: TData) => boolean;\n select?: (data: TData) => TSelectData;\n};\n\ntype TInternalOptionsRef<TData> = {\n timeout?: number;\n enabled: boolean;\n refetchOnWindowFocus: boolean;\n refetchInterval: number;\n compareOrThrow?: (data: TData) => boolean;\n stateless?: boolean;\n};\n\nconst getRandomUUID = () => Math.random().toString(36).substring(2, 15);\n\nexport const useQuery = <\n TData = unknown,\n TError = TQueryError<unknown>,\n TParams = void,\n TSelected = TData,\n Stateless extends true | undefined = undefined,\n>({\n queryFn,\n ...options\n}: QueryOptions<TData, TError, TParams, TSelected, Stateless>): UseQueryResult<\n TSelected,\n TError,\n TParams,\n TSelected,\n Stateless\n> => {\n const {\n enabled = true,\n refetchOnWindowFocus = false,\n refetchInterval = 0,\n initialData,\n select,\n onError,\n onSuccess,\n onSettled,\n timeout,\n compareOrThrow,\n stateless,\n key: queryKeyPassed,\n } = options;\n const queryKey = normalizeQueryKey(queryKeyPassed ?? []);\n const lastFetchedAt = useRef<number | null>(null);\n const lastQueryKey = useRef<string | undefined>(undefined);\n const queryFnRef = useRef(queryFn);\n queryFnRef.current = queryFn;\n const internalCallbackRef = useRef<\n TInternalCallbackRef<TData, TError, TSelected>\n >({});\n internalCallbackRef.current = {\n onError,\n onSuccess,\n onSettled,\n compareOrThrow,\n select,\n };\n const internalOptionsRef = useRef<TInternalOptionsRef<TData>>({\n enabled,\n refetchOnWindowFocus,\n refetchInterval,\n compareOrThrow,\n stateless,\n timeout,\n });\n internalOptionsRef.current = {\n enabled,\n refetchOnWindowFocus,\n refetchInterval,\n compareOrThrow,\n stateless,\n timeout,\n };\n const requestIdRef = useRef(getRandomUUID());\n\n const [status, setStatus] = useState<QueryStatus>(() => {\n return \"idle\";\n });\n const [error, setError] = useState<TQueryError<TError>>(null);\n const [data, setData] = useState<TData | undefined>(() => {\n if (initialData !== undefined) {\n if (typeof initialData === \"function\") {\n return (initialData as Functionize<TData>)();\n }\n\n return initialData as TData;\n }\n\n return undefined;\n });\n\n const handleSetData = useCallback((data: TData) => {\n if (internalOptionsRef.current.stateless) {\n return;\n }\n\n setData(data);\n }, []);\n\n const shouldRefetch = useCallback(() => {\n if (!internalOptionsRef.current.enabled) {\n return false;\n }\n\n if (lastFetchedAt.current === null) {\n return true;\n }\n\n return (\n new Date().getTime() - lastFetchedAt.current >\n internalOptionsRef.current?.refetchInterval\n );\n }, []);\n\n const refetch = useCallback(\n async (params: TParams | void | undefined = undefined) => {\n const requestId = getRandomUUID();\n requestIdRef.current = requestId;\n if (!internalOptionsRef.current.enabled) {\n return;\n }\n\n setStatus(\"loading\");\n setError(null);\n\n try {\n const promises: RacePromises<TData>[] = [\n queryFnRef.current(params),\n ...(internalOptionsRef.current.timeout\n ? [\n new Promise<RaceErrorReason>((resolve) =>\n setTimeout(\n () => resolve(\"timeout\"),\n internalOptionsRef.current.timeout\n )\n ),\n ]\n : []),\n ];\n\n const res = await Promise.race(promises);\n if (requestIdRef.current !== requestId) {\n return;\n }\n\n if (res === \"timeout\") {\n throw new Error(\"timeout\");\n }\n\n handleSetData(res);\n\n if (\n internalCallbackRef.current.compareOrThrow &&\n internalCallbackRef.current.compareOrThrow(res) === true\n ) {\n throw new Error(\"failedComparison\");\n }\n\n setStatus(\"success\");\n lastFetchedAt.current = new Date().getTime();\n internalCallbackRef.current.onSuccess?.(res);\n internalCallbackRef.current.onSettled?.(res, undefined);\n } catch (error: any) {\n setError(error);\n setStatus(\"error\");\n internalCallbackRef.current.onError?.(error);\n internalCallbackRef.current.onSettled?.(undefined, error);\n }\n },\n [handleSetData]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setStatus(\"idle\");\n setError(null);\n refetch();\n }, [refetch]);\n\n useEffect(() => {\n const cleanups: (() => void)[] = [];\n\n // If the query should be refetched on window focus, add a listener\n if (refetchOnWindowFocus) {\n const queryHandleFocus = () => {\n refetch();\n };\n\n window.addEventListener(\"focus\", queryHandleFocus);\n\n cleanups.push(() => {\n window.removeEventListener(\"focus\", queryHandleFocus);\n });\n }\n\n // If the query should be refetched on an interval, add an interval\n if (refetchInterval > 0) {\n const interval = setInterval(() => {\n if (shouldRefetch()) {\n refetch();\n }\n }, refetchInterval);\n\n cleanups.push(() => {\n clearInterval(interval);\n });\n }\n\n // If the query key has changed, refetch\n if (\n lastQueryKey.current === undefined ||\n queryKey !== lastQueryKey.current\n ) {\n lastQueryKey.current = queryKey;\n refetch();\n }\n\n return () => {\n cleanups.forEach((cleanup) => cleanup());\n };\n }, [\n queryKey,\n enabled,\n refetchOnWindowFocus,\n refetchInterval,\n shouldRefetch,\n refetch,\n ]);\n\n return {\n data:\n select && data !== undefined\n ? select(data as TData)\n : (data as unknown as TSelected),\n error,\n status,\n refetch,\n reset,\n };\n};\n","/**\n * @fileoverview useSubscriptionCore\n * @name useSubscriptionCore.ts\n * @description useSubscriptionCore | This hook handle core subscription logic\n * and provides a way to subscribe and unsubscribe to a topic via any callback\n */\n\nimport { shallowEqual } from \"@pixotope/utils/comparison\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\ntype SubscriptionState = \"idle\" | \"subscribed\" | \"subscribing\" | \"error\";\n\nexport type MessageHandler<TMessage> = (message: TMessage) => void;\nexport type Connection = {\n acknowledge: () => void;\n};\nexport type SubscriptionCoreOptions<\n TData,\n TMessage = TData,\n Stateless extends true | undefined = undefined,\n> = {\n /**\n * @description Function that will be called when the message is received.\n */\n onMessage?: (message: TMessage) => void;\n /**\n * @description Function that will be called when the subscription is created.\n */\n onSubscribed?: (message: TMessage) => void;\n /**\n * @description Function that will be called when the subscription is created.\n */\n onError?: (error: TMessage) => void;\n /**\n * @description Whether the subscription is enabled.\n * @default true\n */\n enabled?: boolean;\n /**\n * @description Function that will be called before the message is processed.\n * Returning `true` will cause the message to not be set to state and call {@link onError} if provided.\n * Status will be set to `error`.\n */\n compareOrThrow?: (data: TMessage) => boolean;\n /**\n * @description Function that will be called to select the data from the message.\n */\n select?: (data: TMessage) => TData;\n /**\n * @description Initial state of the subscription.\n * @default undefined\n */\n initialState?: TData;\n /**\n * @description Function that will be called when the subscription is created.\n */\n subscriberFn: (\n handler: MessageHandler<TMessage>,\n connection: Connection\n ) => () => void /** unsubscribe Fn */;\n /**\n * @description Whether the subscription is stateless. Data will not be\n * stored by the hook internally.\n * @default false\n */\n stateless?: Stateless;\n /**\n * @description Custom equality function for comparing data.\n * @default shallowEqual\n */\n isEqual?: <T = TData>(a: T, b: T) => boolean;\n};\n\ntype WithStatus = {\n status: SubscriptionState;\n};\n\ntype WithData<TData> = {\n data: TData;\n};\n\nexport type SubscriptionCoreReturnType<\n TData,\n Stateless extends true | undefined,\n> = {\n reSubscribe: () => void;\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n} & (Stateless extends true ? {} : WithStatus & WithData<TData>);\n\n/**\n * @description `useSubscriptionCore` | This hook handle core subscription logic\n * and provides a way to subscribe and unsubscribe to a topic via any callback.\n * The hook expose a handler function. All the consumer code need to do is to\n * call this handler function with the message received from the topic or pass\n * it directly to the callback function that is passed to the subscriberFn.\n * - `status` - current status of the subscription\n * - `data` - the data after the select function is applied to the message\n * - `reSubscribe` - function that can be called to re-subscribe to the topic\n *\n * An example how this hook works can be found in {@link ./useSubscription.ts}\n */\nexport function useSubscriptionCore<\n TData = unknown,\n TMessage = TData,\n Stateless extends true | undefined = undefined,\n>(\n options: SubscriptionCoreOptions<TData, TMessage, Stateless>\n): SubscriptionCoreReturnType<TData, Stateless> {\n const {\n enabled = true,\n initialState = undefined,\n onSubscribed,\n stateless,\n compareOrThrow,\n subscriberFn,\n onMessage,\n onError,\n select,\n isEqual = shallowEqual,\n } = options;\n const [status, setStatus] = useState<SubscriptionState>(\"idle\");\n const [data, setData] = useState<TData | undefined>(initialState);\n const unsubcribeRef = useRef<() => void | undefined>(undefined);\n const initialStateRef = useRef(initialState);\n const subscriberFnRef = useRef(subscriberFn);\n const callbackRefRegistry = <const>{\n onMessage,\n onError,\n select,\n compareOrThrow,\n onSubscribed,\n isEqual,\n };\n const internalCallbacksRef = useRef(callbackRefRegistry);\n internalCallbacksRef.current = callbackRefRegistry;\n\n const updateStatus = useCallback(\n (newStatus: SubscriptionState, message?: TMessage) => {\n if (stateless) {\n return;\n }\n\n setStatus((prev) => {\n if (prev === newStatus) {\n return prev;\n }\n\n if (newStatus === \"subscribed\" && message) {\n internalCallbacksRef.current.onSubscribed?.(message);\n }\n\n return newStatus;\n });\n },\n [stateless]\n );\n\n const connection: Connection = useMemo(\n () => ({\n acknowledge: () => {\n updateStatus(\"subscribed\");\n },\n }),\n [updateStatus]\n );\n\n const handler = useCallback(\n async (message: TMessage) => {\n if (internalCallbacksRef.current.compareOrThrow?.(message)) {\n updateStatus(\"error\");\n internalCallbacksRef.current.onError?.(message);\n\n return;\n }\n\n const selectedMessage = <TData>(\n (internalCallbacksRef.current.select?.(message) ?? message)\n );\n\n if (!stateless) {\n setData((prev) => {\n if (isEqual(prev, selectedMessage)) {\n return prev;\n }\n\n return selectedMessage;\n });\n }\n\n updateStatus(\"subscribed\", message);\n internalCallbacksRef.current.onMessage?.(message);\n },\n [stateless, updateStatus]\n );\n\n const unsubscribe = useCallback(() => {\n updateStatus(\"idle\");\n unsubcribeRef.current?.();\n unsubcribeRef.current = undefined;\n }, [updateStatus]);\n\n const subscribe = useCallback(() => {\n unsubcribeRef.current?.();\n updateStatus(\"subscribing\");\n setData(initialStateRef.current);\n unsubcribeRef.current = subscriberFnRef.current(handler, connection);\n }, [connection, handler, updateStatus]);\n\n useEffect(() => {\n if (enabled) {\n subscribe();\n } else {\n unsubscribe();\n }\n\n return () => {\n unsubscribe();\n };\n }, [enabled, subscribe, unsubscribe]);\n\n return {\n status,\n data,\n reSubscribe: subscribe,\n } as unknown as any;\n}\n","import {\n SubscriptionCoreOptions,\n useSubscriptionCore,\n} from \"./useSubscriptionCore\";\n\nexport type SubscriptionOptions<\n TData,\n TMessage = unknown,\n Stateless extends true | undefined = undefined,\n TMetadata extends {} = {},\n> = Omit<\n SubscriptionCoreOptions<TData, TMessage, Stateless>,\n \"subscriberFn\"\n> & {\n service: string;\n topic: string;\n maxDownwardDepth?: number;\n} & {\n meta?: TMetadata;\n};\n\nexport type TSubscriptionHandlerFunction<\n TMessage,\n TMetadata extends {} = {},\n> = (\n opts: {\n service: string;\n name: string;\n callback: (message: TMessage) => void;\n maxDownwardDepth?: number;\n } & { meta?: TMetadata }\n) => () => void;\n\nexport function useSubscription<\n TData = unknown,\n TMessage = TData,\n Stateless extends true | undefined = undefined,\n TMetadata extends {} = {},\n>(\n subscriptionHandler: TSubscriptionHandlerFunction<TMessage, TMetadata>,\n options: SubscriptionOptions<TData, TMessage, Stateless, TMetadata>\n) {\n const { topic, service, maxDownwardDepth = 1000, meta, ...rest } = options;\n\n return useSubscriptionCore<TData, TMessage, Stateless>({\n ...rest,\n subscriberFn: (handler) => {\n const unsubscribe = subscriptionHandler({\n service,\n name: topic,\n callback: (message: TMessage) => {\n handler(message);\n },\n maxDownwardDepth,\n meta,\n });\n\n return unsubscribe;\n },\n });\n}\n\nexport function buildServiceSubscriptionHook<TMetadata extends {} = {}>(\n subscriptionHandler: TSubscriptionHandlerFunction<unknown, TMetadata>,\n targetMachine: (machine: string | undefined) => string\n) {\n return function useSubscriptionBuilder<\n TData,\n TMessage = TData,\n Stateless extends true | undefined = undefined,\n >(\n options: Omit<\n SubscriptionOptions<TData, TMessage, Stateless, TMetadata>,\n \"service\"\n > & {\n machine?: string;\n }\n ) {\n const targetService = targetMachine(options.machine);\n return useSubscription<TData, TMessage, Stateless>(\n <TSubscriptionHandlerFunction<TMessage>>subscriptionHandler,\n {\n service: targetService,\n ...options,\n }\n );\n };\n}\n","import type { ZMQProxyWSClient } from \"@pixotope/zmq-client\";\nimport type { TPromiseFunction } from \"./factories\";\nimport type { buildServiceSubscriptionHook } from \"./useSubscription\";\n\nexport type TProxySubscriptionHandlerParams<TMetadata extends {} = {}> =\n Parameters<Parameters<typeof buildServiceSubscriptionHook<TMetadata>>[0]>[0];\n\nexport function bindClientSocketProxy(socketClientProxy: ZMQProxyWSClient) {\n return (args: TProxySubscriptionHandlerParams) => {\n const { callback: cbHook, ...rest } = args;\n return socketClientProxy.mirror({\n ...rest,\n callback: (message) => {\n cbHook(message.message);\n },\n })[0];\n };\n}\n\nexport function bindPromiseFunction(clientSocketProxy: ZMQProxyWSClient) {\n return async (\n ...args: Parameters<TPromiseFunction<unknown, unknown, unknown>>\n ) => {\n const res = await clientSocketProxy.callAsync(...args);\n return res.message.Result;\n };\n}\n"],"mappings":"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","names":["__defProp","__getOwnPropDesc","__getOwnPropNames","__hasOwnProp","__copyProps","shallowEqual","useCallback","params","error","options","useCallback","useRef","useState","useRef","useState","useCallback","data","_a","_b","error","useCallback","useCallback","useEffect","useMemo","useRef","useState","useState","useRef","useCallback","useMemo","useEffect"]}
|
|
1
|
+
{"version":3,"sources":["../src/factories.ts","../src/useMutation.ts","../src/useQuery.ts","../../utils/dist/chunk-5QIHMQPV.js","../src/useSubscriptionCore.ts","../src/useSubscription.ts","../src/proxyBinders.ts"],"sourcesContent":["import type { TSocketServerCallOptions, ZMQClient } from \"@pixotope/zmq-client\";\nimport { useCallback, useMemo } from \"react\";\nimport { MutationOptions, useMutation } from \"./useMutation\";\nimport { QueryOptions, useQuery } from \"./useQuery\";\n\nexport type MutationInfo<TData, TError, TParams> = {\n data: TData;\n error: TError;\n params: TParams;\n};\n\ntype FnToParamsBase = Record<string, MutationInfo<unknown, unknown, unknown>>;\n\nexport type TPromiseFunction<TResponse, TParams, TExtraParams> = (\n args: Omit<\n ZMQClient.Call<\n TResponse,\n {\n functionName: string;\n parameters: TParams;\n options?: Omit<TSocketServerCallOptions, \"toCallIfNoResponse\">;\n }\n >,\n \"id\"\n > & {\n meta?: TExtraParams;\n }\n) => Promise<TResponse>;\n\nconst useCallMutationBase = <\n TFnToParams extends FnToParamsBase,\n TData = unknown,\n TError = unknown,\n TParams = unknown,\n TMetadata = unknown,\n>(\n promiseFunc: TPromiseFunction<TData, TParams, TMetadata>,\n functionName: keyof TFnToParams,\n service: (meta?: TMetadata) => string,\n options?: Omit<\n MutationOptions<TData, TError, TParams, TMetadata>,\n \"mutationFn\"\n >\n) => {\n const timeout = options?.timeout;\n const { ...rest } = useMemo(() => options ?? {}, [options]);\n const mutationFn = useCallback(\n async (parameters: TParams, meta?: TMetadata) => {\n try {\n return await promiseFunc({\n service: service(meta),\n functionName: functionName.toString(),\n parameters,\n options: {\n avoidTimeout: !timeout,\n customTimeout: timeout,\n },\n meta,\n });\n } catch (e) {\n if (e instanceof Error) {\n throw e;\n }\n throw new Error(e as string);\n }\n },\n [functionName, service, timeout]\n );\n\n return useMutation<TData, TError, TParams, TMetadata>({\n mutationFn,\n ...rest,\n });\n};\n\nexport function buildMutationHook<\n TFnToParams extends FnToParamsBase,\n TMetadata = unknown,\n>(\n promiseFunc: TPromiseFunction<unknown, unknown, unknown>,\n genTargetService: (meta?: TMetadata) => string\n) {\n return function useCallMutationBuilder<TFn extends keyof TFnToParams>(\n func: TFn,\n options?: Parameters<\n typeof useCallMutationBase<\n TFnToParams,\n TFnToParams[TFn][\"data\"],\n TFnToParams[TFn][\"error\"],\n TFnToParams[TFn][\"params\"],\n TMetadata\n >\n >[3]\n ) {\n return useCallMutationBase<\n TFnToParams,\n TFnToParams[TFn][\"data\"],\n TFnToParams[TFn][\"error\"],\n TFnToParams[TFn][\"params\"],\n TMetadata\n >(promiseFunc, func, genTargetService, options);\n };\n}\n\nconst useCallQueryBase = <\n TFnToParams extends FnToParamsBase,\n TData = unknown,\n TError = unknown,\n TParams = unknown,\n TSelect = TData,\n TMetadata = unknown,\n TStateless extends true | undefined = undefined,\n>(\n promiseFunction: TPromiseFunction<TData, TParams, TMetadata>,\n functionName: keyof TFnToParams,\n params: TParams,\n service: (meta?: TMetadata) => string,\n options?: Omit<QueryOptions<TData, TError, TParams, TSelect, TStateless>, \"queryFn\"> & {\n meta?: TMetadata;\n }\n) => {\n const timeout = options?.timeout;\n const { ...rest } = useMemo(() => options ?? {}, [options]);\n const queryFn = useCallback(\n async (refetchParams: TParams | void) => {\n try {\n return await promiseFunction({\n service: service(options?.meta),\n functionName: functionName.toString(),\n parameters: refetchParams ?? params,\n options: {\n avoidTimeout: !timeout,\n customTimeout: timeout,\n },\n meta: options?.meta,\n });\n } catch (e) {\n if (e instanceof Error) {\n throw e;\n }\n throw new Error(e as string);\n }\n },\n [functionName, service, params, timeout]\n );\n\n return useQuery<TData, TError, TParams, TSelect, TStateless>({\n queryFn,\n ...rest,\n });\n};\n\nexport function buildQueryHook<\n TFnToParams extends FnToParamsBase,\n TMetadata = unknown,\n>(\n promiseFunction: TPromiseFunction<unknown, unknown, unknown>,\n getTargetService: (meta?: TMetadata) => string\n) {\n return function useCallQueryBuilder<\n TFn extends keyof TFnToParams,\n TSelect = TFnToParams[TFn][\"data\"],\n TStateless extends true | undefined = undefined,\n >(\n func: TFn,\n params: TFnToParams[TFn][\"params\"],\n options?: Parameters<\n typeof useCallQueryBase<\n TFnToParams,\n TFnToParams[TFn][\"data\"],\n TFnToParams[TFn][\"error\"],\n TFnToParams[TFn][\"params\"],\n TSelect,\n TMetadata,\n TStateless\n >\n >[4] & { meta?: TMetadata }\n ) {\n return useCallQueryBase<\n TFnToParams,\n TFnToParams[TFn][\"data\"],\n TFnToParams[TFn][\"error\"],\n TFnToParams[TFn][\"params\"],\n TSelect,\n TMetadata,\n TStateless\n >(promiseFunction, func, params, getTargetService, options);\n };\n}\n","import { useCallback, useRef, useState } from \"react\";\n\nexport type MutationFunction<\n TData = unknown,\n TParams = unknown,\n TMetadata = unknown,\n> = (params: TParams, meta?: TMetadata) => Promise<TData>;\n\nexport interface MutationOptions<\n TData = unknown,\n TError = unknown,\n TParams = void,\n TMetadata = unknown,\n> {\n mutationFn: MutationFunction<TData, TParams, TMetadata>;\n params?: TParams;\n onSuccess?: (\n data: TData,\n variables: TParams,\n meta?: TMetadata\n ) => Promise<unknown> | unknown;\n onError?: (\n error: TMutationError<TError>,\n variables: TParams,\n meta?: TMetadata\n ) => Promise<unknown> | unknown;\n onSettled?: (\n data: TData | undefined,\n error: TMutationError<TError> | null,\n variables: TParams,\n meta?: TMetadata\n ) => Promise<unknown> | unknown;\n compareOrThrow?: (result: TData | TError) => boolean;\n timeout?: number;\n prepareParams?: (\n variables: TParams,\n defaults?: TParams,\n meta?: TMetadata\n ) => TParams;\n}\n\ntype TMutationError<TError> = TError | Error | null;\n\nexport interface MutateOptions<\n TData = unknown,\n TError = unknown,\n TParams = void,\n TMetadata = unknown,\n> {\n onSuccess?: (data: TData, variables: TParams, meta?: TMetadata) => void;\n onError?: (\n error: TMutationError<TError>,\n variables: TParams,\n meta?: TMetadata\n ) => void;\n onSettled?: (\n data: TData | undefined,\n error: TMutationError<TError> | null,\n variables: TParams,\n meta?: TMetadata\n ) => void;\n}\n\ntype MutationStatus = \"idle\" | \"loading\" | \"success\" | \"error\";\ntype RaceErrorReason = \"timeout\";\ntype RacePromises<T> = Promise<T | RaceErrorReason>;\n\nexport class ComparisonFailError<TPayload = unknown> extends Error {\n public readonly payload: TPayload;\n\n constructor(message: string, payload: TPayload) {\n super(message);\n this.name = this.constructor.name;\n this.payload = payload;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ComparisonFailError);\n }\n }\n}\n\nexport const useMutation = <\n TData = unknown,\n TError = TMutationError<unknown>,\n TParams = void,\n TMetadata = unknown,\n>(\n options: MutationOptions<TData, TError, TParams, TMetadata>\n) => {\n const {\n mutationFn,\n compareOrThrow,\n onError,\n onSettled,\n onSuccess,\n prepareParams,\n params,\n timeout,\n } = options;\n const [status, setStatus] = useState<MutationStatus>(\"idle\");\n const [error, setError] = useState<TMutationError<TError>>(null);\n const [result, setResult] = useState<TData | undefined>(undefined);\n const mutationFnRef = useRef(mutationFn);\n const internalOptionsRef = useRef({\n params,\n timeout,\n });\n const internalCallbackRefistry = <const>{\n onSuccess,\n onError,\n onSettled,\n compareOrThrow,\n prepareParams,\n };\n const internalCallbackRef = useRef(internalCallbackRefistry);\n internalCallbackRef.current = internalCallbackRefistry;\n\n const mutateAsync = useCallback(async (params: TParams, meta?: TMetadata) => {\n setStatus(\"loading\");\n setError(null);\n\n try {\n const promises: RacePromises<TData>[] = [\n mutationFnRef.current(\n internalCallbackRef.current.prepareParams\n ? internalCallbackRef.current.prepareParams(\n params,\n internalOptionsRef.current.params,\n meta\n )\n : params,\n meta\n ),\n ...(internalOptionsRef.current.timeout\n ? [\n new Promise<RaceErrorReason>((resolve) =>\n setTimeout(\n () => resolve(\"timeout\"),\n internalOptionsRef.current.timeout\n )\n ),\n ]\n : []),\n ];\n\n const res = await Promise.race(promises);\n\n if (res === \"timeout\") {\n throw new Error(\"timeout\");\n }\n\n if (internalCallbackRef.current.compareOrThrow?.(res)) {\n throw new ComparisonFailError(JSON.stringify(res), res);\n }\n\n setResult(res);\n setStatus(\"success\");\n\n internalCallbackRef.current.onSuccess?.(res, params, meta);\n internalCallbackRef.current.onSettled?.(res, null, params, meta);\n\n return res;\n } catch (error: any) {\n setError(error);\n setStatus(\"error\");\n\n internalCallbackRef.current.onError?.(error, params, meta);\n internalCallbackRef.current.onSettled?.(undefined, error, params, meta);\n\n throw error;\n }\n }, []);\n\n const mutate = useCallback(\n (\n variables: TParams,\n options?: MutateOptions<TData, TError, TParams, TMetadata> & {\n meta?: TMetadata;\n }\n ) => {\n mutateAsync(variables, options?.meta).then(\n (data) => {\n options?.onSuccess?.(data, variables, options?.meta);\n options?.onSettled?.(data, null, variables, options?.meta);\n },\n (error) => {\n options?.onError?.(error, variables, options?.meta);\n options?.onSettled?.(undefined, error, variables, options?.meta);\n }\n );\n },\n [mutateAsync]\n );\n\n return {\n mutateAsync,\n status,\n result,\n mutate,\n reset: () => {\n setStatus(\"idle\");\n setError(null);\n setResult(undefined);\n },\n error,\n };\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport interface QueryOptions<\n TData = unknown,\n TError = unknown,\n TParams = void,\n TSelectData = TData,\n Stateless extends true | undefined = undefined,\n> {\n queryFn: (params: TParams | undefined | void, queryInfo: {key: TQueryKey | undefined, lastFetchedAt: number | undefined}) => Promise<TData>;\n onSuccess?: (data: TData) => Promise<void> | void;\n onError?: (error: TQueryError<TError>) => Promise<void> | void;\n onSettled?: (\n data: TData | undefined,\n error: TQueryError<TError> | undefined\n ) => Promise<void> | void;\n timeout?: number;\n enabled?: boolean;\n initialData?: TData | Functionize<TData>;\n select?: (data: TData) => TSelectData;\n refetchOnWindowFocus?: boolean;\n refetchInterval?: number;\n compareOrThrow?: (data: TData) => boolean;\n stateless?: Stateless;\n key?: TQueryKey;\n}\n\ntype Functionize<T> = () => T;\ntype QueryStatus = \"idle\" | \"loading\" | \"success\" | \"error\" | \"timeout\";\ntype RaceErrorReason = \"timeout\";\ntype RacePromises<T> = Promise<T | RaceErrorReason>;\ntype WithData<TData> = { data: TData | undefined };\ntype TQueryKey = readonly any[];\n\ntype TQueryError<TError> = TError | Error | null;\n\nexport type UseQueryResult<\n TData = unknown,\n TError = unknown,\n TParams = void,\n TSelectData = TData,\n Stateless extends true | undefined = undefined,\n> = {\n error: TQueryError<TError>;\n status: QueryStatus;\n refetch: (params: TParams | void | undefined) => Promise<void>;\n reset: () => void;\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n} & (Stateless extends true ? {} : WithData<TSelectData>);\n\nfunction normalizeQueryKey(queryKey: TQueryKey): string {\n return JSON.stringify(queryKey);\n}\n\ntype TInternalCallbackRef<TData, TError, TSelectData> = {\n onError?: (error: TQueryError<TError>) => Promise<void> | void;\n onSuccess?: (data: TData) => Promise<void> | void;\n onSettled?: (\n data: TData | undefined,\n error: TQueryError<TError> | undefined\n ) => Promise<void> | void;\n compareOrThrow?: (data: TData) => boolean;\n select?: (data: TData) => TSelectData;\n};\n\ntype TInternalOptionsRef<TData> = {\n timeout?: number;\n enabled: boolean;\n refetchOnWindowFocus: boolean;\n refetchInterval: number;\n compareOrThrow?: (data: TData) => boolean;\n stateless?: boolean;\n};\n\nconst getRandomUUID = () => Math.random().toString(36).substring(2, 15);\n\nexport const useQuery = <\n TData = unknown,\n TError = TQueryError<unknown>,\n TParams = void,\n TSelected = TData,\n Stateless extends true | undefined = undefined,\n>({\n queryFn,\n ...options\n}: QueryOptions<TData, TError, TParams, TSelected, Stateless>): UseQueryResult<\n TSelected,\n TError,\n TParams,\n TSelected,\n Stateless\n> => {\n const {\n enabled = true,\n refetchOnWindowFocus = false,\n refetchInterval = 0,\n initialData,\n select,\n onError,\n onSuccess,\n onSettled,\n timeout,\n compareOrThrow,\n stateless,\n key: queryKeyPassed,\n } = options;\n const queryKey = normalizeQueryKey(queryKeyPassed ?? []);\n const lastFetchedAt = useRef<number | null>(null);\n const lastQueryKey = useRef<string | undefined>(undefined);\n const queryFnRef = useRef(queryFn);\n queryFnRef.current = queryFn;\n const internalCallbackRef = useRef<\n TInternalCallbackRef<TData, TError, TSelected>\n >({});\n internalCallbackRef.current = {\n onError,\n onSuccess,\n onSettled,\n compareOrThrow,\n select,\n };\n const internalOptionsRef = useRef<TInternalOptionsRef<TData>>({\n enabled,\n refetchOnWindowFocus,\n refetchInterval,\n compareOrThrow,\n stateless,\n timeout,\n });\n internalOptionsRef.current = {\n enabled,\n refetchOnWindowFocus,\n refetchInterval,\n compareOrThrow,\n stateless,\n timeout,\n };\n const requestIdRef = useRef(getRandomUUID());\n\n const [status, setStatus] = useState<QueryStatus>(() => {\n return \"idle\";\n });\n const [error, setError] = useState<TQueryError<TError>>(null);\n const [data, setData] = useState<TData | undefined>(() => {\n if (initialData !== undefined) {\n if (typeof initialData === \"function\") {\n return (initialData as Functionize<TData>)();\n }\n\n return initialData as TData;\n }\n\n return undefined;\n });\n\n const handleSetData = useCallback((data: TData) => {\n if (internalOptionsRef.current.stateless) {\n return;\n }\n\n setData(data);\n }, []);\n\n const shouldRefetch = useCallback(() => {\n if (!internalOptionsRef.current.enabled) {\n return false;\n }\n\n if (lastFetchedAt.current === null) {\n return true;\n }\n\n return (\n new Date().getTime() - lastFetchedAt.current >\n internalOptionsRef.current?.refetchInterval\n );\n }, []);\n\n const refetch = useCallback(\n async (params: TParams | void | undefined = undefined) => {\n const requestId = getRandomUUID();\n requestIdRef.current = requestId;\n if (!internalOptionsRef.current.enabled) {\n return;\n }\n\n setStatus(\"loading\");\n setError(null);\n\n try {\n const promises: RacePromises<TData>[] = [\n queryFnRef.current(params, { key: queryKeyPassed, lastFetchedAt: lastFetchedAt.current ?? undefined }),\n ...(internalOptionsRef.current.timeout\n ? [\n new Promise<RaceErrorReason>((resolve) =>\n setTimeout(\n () => resolve(\"timeout\"),\n internalOptionsRef.current.timeout\n )\n ),\n ]\n : []),\n ];\n\n const res = await Promise.race(promises);\n if (requestIdRef.current !== requestId) {\n return;\n }\n\n if (res === \"timeout\") {\n throw new Error(\"timeout\");\n }\n\n handleSetData(res);\n\n if (\n internalCallbackRef.current.compareOrThrow &&\n internalCallbackRef.current.compareOrThrow(res) === true\n ) {\n throw new Error(\"failedComparison\");\n }\n\n setStatus(\"success\");\n lastFetchedAt.current = new Date().getTime();\n internalCallbackRef.current.onSuccess?.(res);\n internalCallbackRef.current.onSettled?.(res, undefined);\n } catch (error: any) {\n setError(error);\n setStatus(\"error\");\n internalCallbackRef.current.onError?.(error);\n internalCallbackRef.current.onSettled?.(undefined, error);\n }\n },\n [handleSetData]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setStatus(\"idle\");\n setError(null);\n refetch();\n }, [refetch]);\n\n useEffect(() => {\n const cleanups: (() => void)[] = [];\n\n // If the query should be refetched on window focus, add a listener\n if (refetchOnWindowFocus) {\n const queryHandleFocus = () => {\n refetch();\n };\n\n window.addEventListener(\"focus\", queryHandleFocus);\n\n cleanups.push(() => {\n window.removeEventListener(\"focus\", queryHandleFocus);\n });\n }\n\n // If the query should be refetched on an interval, add an interval\n if (refetchInterval > 0) {\n const interval = setInterval(() => {\n if (shouldRefetch()) {\n refetch();\n }\n }, refetchInterval);\n\n cleanups.push(() => {\n clearInterval(interval);\n });\n }\n\n // If the query key has changed, refetch\n if (\n lastQueryKey.current === undefined ||\n queryKey !== lastQueryKey.current\n ) {\n lastQueryKey.current = queryKey;\n refetch();\n }\n\n return () => {\n cleanups.forEach((cleanup) => cleanup());\n };\n }, [\n queryKey,\n enabled,\n refetchOnWindowFocus,\n refetchInterval,\n shouldRefetch,\n refetch,\n ]);\n\n return {\n data:\n select && data !== undefined\n ? select(data as TData)\n : (data as unknown as TSelected),\n error,\n status,\n refetch,\n reset,\n };\n};\n","// src/comparison/shallowEqual.ts\nfunction shallowEqual(objA, objB) {\n if (Object.is(objA, objB)) {\n return true;\n }\n if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n return false;\n }\n if (objA instanceof Map && objB instanceof Map) {\n if (objA.size !== objB.size) return false;\n for (const [key, value] of objA) {\n if (!Object.is(value, objB.get(key))) {\n return false;\n }\n }\n return true;\n }\n if (objA instanceof Set && objB instanceof Set) {\n if (objA.size !== objB.size) return false;\n for (const value of objA) {\n if (!objB.has(value)) {\n return false;\n }\n }\n return true;\n }\n const keysA = Object.keys(objA);\n if (keysA.length !== Object.keys(objB).length) {\n return false;\n }\n for (let i = 0; i < keysA.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n return true;\n}\n\nexport {\n shallowEqual\n};\n","/**\n * @fileoverview useSubscriptionCore\n * @name useSubscriptionCore.ts\n * @description useSubscriptionCore | This hook handle core subscription logic\n * and provides a way to subscribe and unsubscribe to a topic via any callback\n */\n\nimport { shallowEqual } from \"@pixotope/utils/comparison\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\ntype SubscriptionState = \"idle\" | \"subscribed\" | \"subscribing\" | \"error\";\n\nexport type MessageHandler<TMessage> = (message: TMessage) => void;\nexport type Connection = {\n acknowledge: () => void;\n};\nexport type SubscriptionCoreOptions<\n TData,\n TMessage = TData,\n Stateless extends true | undefined = undefined,\n> = {\n /**\n * @description Function that will be called when the message is received.\n */\n onMessage?: (message: TMessage) => void;\n /**\n * @description Function that will be called when the subscription is created.\n */\n onSubscribed?: (message: TMessage) => void;\n /**\n * @description Function that will be called when the subscription is created.\n */\n onError?: (error: TMessage) => void;\n /**\n * @description Whether the subscription is enabled.\n * @default true\n */\n enabled?: boolean;\n /**\n * @description Function that will be called before the message is processed.\n * Returning `true` will cause the message to not be set to state and call {@link onError} if provided.\n * Status will be set to `error`.\n */\n compareOrThrow?: (data: TMessage) => boolean;\n /**\n * @description Function that will be called to select the data from the message.\n */\n select?: (data: TMessage) => TData;\n /**\n * @description Initial state of the subscription.\n * @default undefined\n */\n initialState?: TData;\n /**\n * @description Function that will be called when the subscription is created.\n */\n subscriberFn: (\n handler: MessageHandler<TMessage>,\n connection: Connection\n ) => () => void /** unsubscribe Fn */;\n /**\n * @description Whether the subscription is stateless. Data will not be\n * stored by the hook internally.\n * @default false\n */\n stateless?: Stateless;\n /**\n * @description Custom equality function for comparing data.\n * @default shallowEqual\n */\n isEqual?: <T = TData>(a: T, b: T) => boolean;\n};\n\ntype WithStatus = {\n status: SubscriptionState;\n};\n\ntype WithData<TData> = {\n data: TData;\n};\n\nexport type SubscriptionCoreReturnType<\n TData,\n Stateless extends true | undefined,\n> = {\n reSubscribe: () => void;\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n} & (Stateless extends true ? {} : WithStatus & WithData<TData>);\n\n/**\n * @description `useSubscriptionCore` | This hook handle core subscription logic\n * and provides a way to subscribe and unsubscribe to a topic via any callback.\n * The hook expose a handler function. All the consumer code need to do is to\n * call this handler function with the message received from the topic or pass\n * it directly to the callback function that is passed to the subscriberFn.\n * - `status` - current status of the subscription\n * - `data` - the data after the select function is applied to the message\n * - `reSubscribe` - function that can be called to re-subscribe to the topic\n *\n * An example how this hook works can be found in {@link ./useSubscription.ts}\n */\nexport function useSubscriptionCore<\n TData = unknown,\n TMessage = TData,\n Stateless extends true | undefined = undefined,\n>(\n options: SubscriptionCoreOptions<TData, TMessage, Stateless>\n): SubscriptionCoreReturnType<TData, Stateless> {\n const {\n enabled = true,\n initialState = undefined,\n onSubscribed,\n stateless,\n compareOrThrow,\n subscriberFn,\n onMessage,\n onError,\n select,\n isEqual = shallowEqual,\n } = options;\n const [status, setStatus] = useState<SubscriptionState>(\"idle\");\n const [data, setData] = useState<TData | undefined>(initialState);\n const unsubcribeRef = useRef<() => void | undefined>(undefined);\n const initialStateRef = useRef(initialState);\n const subscriberFnRef = useRef(subscriberFn);\n const callbackRefRegistry = <const>{\n onMessage,\n onError,\n select,\n compareOrThrow,\n onSubscribed,\n isEqual,\n };\n const internalCallbacksRef = useRef(callbackRefRegistry);\n internalCallbacksRef.current = callbackRefRegistry;\n\n const updateStatus = useCallback(\n (newStatus: SubscriptionState, message?: TMessage) => {\n if (stateless) {\n return;\n }\n\n setStatus((prev) => {\n if (prev === newStatus) {\n return prev;\n }\n\n if (newStatus === \"subscribed\" && message) {\n internalCallbacksRef.current.onSubscribed?.(message);\n }\n\n return newStatus;\n });\n },\n [stateless]\n );\n\n const connection: Connection = useMemo(\n () => ({\n acknowledge: () => {\n updateStatus(\"subscribed\");\n },\n }),\n [updateStatus]\n );\n\n const handler = useCallback(\n async (message: TMessage) => {\n if (internalCallbacksRef.current.compareOrThrow?.(message)) {\n updateStatus(\"error\");\n internalCallbacksRef.current.onError?.(message);\n\n return;\n }\n\n const selectedMessage = <TData>(\n (internalCallbacksRef.current.select?.(message) ?? message)\n );\n\n if (!stateless) {\n setData((prev) => {\n if (isEqual(prev, selectedMessage)) {\n return prev;\n }\n\n return selectedMessage;\n });\n }\n\n updateStatus(\"subscribed\", message);\n internalCallbacksRef.current.onMessage?.(message);\n },\n [stateless, updateStatus]\n );\n\n const unsubscribe = useCallback(() => {\n updateStatus(\"idle\");\n unsubcribeRef.current?.();\n unsubcribeRef.current = undefined;\n }, [updateStatus]);\n\n const subscribe = useCallback(() => {\n unsubcribeRef.current?.();\n updateStatus(\"subscribing\");\n setData(initialStateRef.current);\n unsubcribeRef.current = subscriberFnRef.current(handler, connection);\n }, [connection, handler, updateStatus]);\n\n useEffect(() => {\n if (enabled) {\n subscribe();\n } else {\n unsubscribe();\n }\n\n return () => {\n unsubscribe();\n };\n }, [enabled, subscribe, unsubscribe]);\n\n return {\n status,\n data,\n reSubscribe: subscribe,\n } as unknown as any;\n}\n","import {\n SubscriptionCoreOptions,\n useSubscriptionCore,\n} from \"./useSubscriptionCore\";\n\nexport type SubscriptionOptions<\n TData,\n TMessage = unknown,\n Stateless extends true | undefined = undefined,\n TMetadata extends {} = {},\n> = Omit<\n SubscriptionCoreOptions<TData, TMessage, Stateless>,\n \"subscriberFn\"\n> & {\n service: string;\n topic: string;\n maxDownwardDepth?: number;\n} & {\n meta?: TMetadata;\n};\n\nexport type TSubscriptionHandlerFunction<\n TMessage,\n TMetadata extends {} = {},\n> = (\n opts: {\n service: string;\n name: string;\n callback: (message: TMessage) => void;\n maxDownwardDepth?: number;\n } & { meta?: TMetadata }\n) => () => void;\n\nexport function useSubscription<\n TData = unknown,\n TMessage = TData,\n Stateless extends true | undefined = undefined,\n TMetadata extends {} = {},\n>(\n subscriptionHandler: TSubscriptionHandlerFunction<TMessage, TMetadata>,\n options: SubscriptionOptions<TData, TMessage, Stateless, TMetadata>\n) {\n const { topic, service, maxDownwardDepth = 1000, meta, ...rest } = options;\n\n return useSubscriptionCore<TData, TMessage, Stateless>({\n ...rest,\n subscriberFn: (handler) => {\n const unsubscribe = subscriptionHandler({\n service,\n name: topic,\n callback: (message: TMessage) => {\n handler(message);\n },\n maxDownwardDepth,\n meta,\n });\n\n return unsubscribe;\n },\n });\n}\n\nexport function buildServiceSubscriptionHook<TMetadata extends {} = {}>(\n subscriptionHandler: TSubscriptionHandlerFunction<unknown, TMetadata>,\n targetMachine: (machine: string | undefined) => string\n) {\n return function useSubscriptionBuilder<\n TData,\n TMessage = TData,\n Stateless extends true | undefined = undefined,\n >(\n options: Omit<\n SubscriptionOptions<TData, TMessage, Stateless, TMetadata>,\n \"service\"\n > & {\n machine?: string;\n }\n ) {\n const targetService = targetMachine(options.machine);\n return useSubscription<TData, TMessage, Stateless>(\n <TSubscriptionHandlerFunction<TMessage>>subscriptionHandler,\n {\n service: targetService,\n ...options,\n }\n );\n };\n}\n","import type { ZMQProxyWSClient } from \"@pixotope/zmq-client\";\nimport type { TPromiseFunction } from \"./factories\";\nimport type { buildServiceSubscriptionHook } from \"./useSubscription\";\n\nexport type TProxySubscriptionHandlerParams<TMetadata extends {} = {}> =\n Parameters<Parameters<typeof buildServiceSubscriptionHook<TMetadata>>[0]>[0];\n\nexport function bindClientSocketProxy(socketClientProxy: ZMQProxyWSClient) {\n return (args: TProxySubscriptionHandlerParams) => {\n const { callback: cbHook, ...rest } = args;\n return socketClientProxy.mirror({\n ...rest,\n callback: (message) => {\n cbHook(message.message);\n },\n })[0];\n };\n}\n\nexport function bindPromiseFunction(clientSocketProxy: ZMQProxyWSClient) {\n return async (\n ...args: Parameters<TPromiseFunction<unknown, unknown, unknown>>\n ) => {\n const res = await clientSocketProxy.callAsync(...args);\n return res.message.Result;\n };\n}\n"],"mappings":"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","names":["useCallback","params","error","options","useCallback","useRef","useState","useRef","useState","useCallback","data","_a","_b","error","useCallback","useCallback","useEffect","useMemo","useRef","useState","useState","useRef","useCallback","useMemo","useEffect"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pixotope/query",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"private": false,
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
"tsup": "^8.5.0",
|
|
21
21
|
"typescript": "^5.7.2",
|
|
22
22
|
"vitest": "^3.2.4",
|
|
23
|
-
"@pixotope/utils": "0.
|
|
24
|
-
"@pixotope/zmq-client": "0.9.
|
|
23
|
+
"@pixotope/utils": "0.3.0",
|
|
24
|
+
"@pixotope/zmq-client": "0.9.2"
|
|
25
25
|
},
|
|
26
26
|
"peerDependencies": {
|
|
27
27
|
"react": ">=17.0.0"
|
package/src/factories.test.ts
CHANGED
package/src/factories.ts
CHANGED
|
@@ -109,12 +109,13 @@ const useCallQueryBase = <
|
|
|
109
109
|
TParams = unknown,
|
|
110
110
|
TSelect = TData,
|
|
111
111
|
TMetadata = unknown,
|
|
112
|
+
TStateless extends true | undefined = undefined,
|
|
112
113
|
>(
|
|
113
114
|
promiseFunction: TPromiseFunction<TData, TParams, TMetadata>,
|
|
114
115
|
functionName: keyof TFnToParams,
|
|
115
116
|
params: TParams,
|
|
116
117
|
service: (meta?: TMetadata) => string,
|
|
117
|
-
options?: Omit<QueryOptions<TData, TError, TParams, TSelect>, "queryFn"> & {
|
|
118
|
+
options?: Omit<QueryOptions<TData, TError, TParams, TSelect, TStateless>, "queryFn"> & {
|
|
118
119
|
meta?: TMetadata;
|
|
119
120
|
}
|
|
120
121
|
) => {
|
|
@@ -143,7 +144,7 @@ const useCallQueryBase = <
|
|
|
143
144
|
[functionName, service, params, timeout]
|
|
144
145
|
);
|
|
145
146
|
|
|
146
|
-
return useQuery<TData, TError, TParams, TSelect>({
|
|
147
|
+
return useQuery<TData, TError, TParams, TSelect, TStateless>({
|
|
147
148
|
queryFn,
|
|
148
149
|
...rest,
|
|
149
150
|
});
|
|
@@ -159,6 +160,7 @@ export function buildQueryHook<
|
|
|
159
160
|
return function useCallQueryBuilder<
|
|
160
161
|
TFn extends keyof TFnToParams,
|
|
161
162
|
TSelect = TFnToParams[TFn]["data"],
|
|
163
|
+
TStateless extends true | undefined = undefined,
|
|
162
164
|
>(
|
|
163
165
|
func: TFn,
|
|
164
166
|
params: TFnToParams[TFn]["params"],
|
|
@@ -169,7 +171,8 @@ export function buildQueryHook<
|
|
|
169
171
|
TFnToParams[TFn]["error"],
|
|
170
172
|
TFnToParams[TFn]["params"],
|
|
171
173
|
TSelect,
|
|
172
|
-
TMetadata
|
|
174
|
+
TMetadata,
|
|
175
|
+
TStateless
|
|
173
176
|
>
|
|
174
177
|
>[4] & { meta?: TMetadata }
|
|
175
178
|
) {
|
|
@@ -179,7 +182,8 @@ export function buildQueryHook<
|
|
|
179
182
|
TFnToParams[TFn]["error"],
|
|
180
183
|
TFnToParams[TFn]["params"],
|
|
181
184
|
TSelect,
|
|
182
|
-
TMetadata
|
|
185
|
+
TMetadata,
|
|
186
|
+
TStateless
|
|
183
187
|
>(promiseFunction, func, params, getTargetService, options);
|
|
184
188
|
};
|
|
185
189
|
}
|
package/src/useQuery.test.ts
CHANGED
|
@@ -18,6 +18,19 @@ describe("useQuery", () => {
|
|
|
18
18
|
);
|
|
19
19
|
expect(mockFunction).toBeCalledTimes(1);
|
|
20
20
|
});
|
|
21
|
+
it("should call queryFn with the correct arguments", async () => {
|
|
22
|
+
const mockFunction = vi.fn();
|
|
23
|
+
const { result } = renderHook(() =>
|
|
24
|
+
useQuery({
|
|
25
|
+
queryFn: mockFunction,
|
|
26
|
+
key: mockQueryKey,
|
|
27
|
+
})
|
|
28
|
+
);
|
|
29
|
+
await waitFor(() => expect(result.current.status).toBe("success"));
|
|
30
|
+
expect(mockFunction).toBeCalledWith(undefined, {key: mockQueryKey, lastFetchedAt: undefined});
|
|
31
|
+
await act(async () => result.current.refetch(undefined));
|
|
32
|
+
expect(mockFunction).toBeCalledWith(undefined, {key: mockQueryKey, lastFetchedAt: expect.any(Number)});
|
|
33
|
+
});
|
|
21
34
|
it("should be in loading state on mount", async () => {
|
|
22
35
|
const { result } = renderHook(() =>
|
|
23
36
|
useQuery({
|
package/src/useQuery.ts
CHANGED
|
@@ -7,7 +7,7 @@ export interface QueryOptions<
|
|
|
7
7
|
TSelectData = TData,
|
|
8
8
|
Stateless extends true | undefined = undefined,
|
|
9
9
|
> {
|
|
10
|
-
queryFn: (params: TParams | undefined | void) => Promise<TData>;
|
|
10
|
+
queryFn: (params: TParams | undefined | void, queryInfo: {key: TQueryKey | undefined, lastFetchedAt: number | undefined}) => Promise<TData>;
|
|
11
11
|
onSuccess?: (data: TData) => Promise<void> | void;
|
|
12
12
|
onError?: (error: TQueryError<TError>) => Promise<void> | void;
|
|
13
13
|
onSettled?: (
|
|
@@ -189,7 +189,7 @@ export const useQuery = <
|
|
|
189
189
|
|
|
190
190
|
try {
|
|
191
191
|
const promises: RacePromises<TData>[] = [
|
|
192
|
-
queryFnRef.current(params),
|
|
192
|
+
queryFnRef.current(params, { key: queryKeyPassed, lastFetchedAt: lastFetchedAt.current ?? undefined }),
|
|
193
193
|
...(internalOptionsRef.current.timeout
|
|
194
194
|
? [
|
|
195
195
|
new Promise<RaceErrorReason>((resolve) =>
|