rxtutils 1.1.4-beta.9 → 1.1.6

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.
Files changed (64) hide show
  1. package/README.md +117 -49
  2. package/cjs/_utils/defaultEquals.cjs +4 -19
  3. package/cjs/cache/index.cjs +130 -163
  4. package/cjs/cache/indexDB.cjs +86 -99
  5. package/cjs/downloadBlob.cjs +14 -0
  6. package/cjs/hooks/index.cjs +3 -6
  7. package/cjs/hooks/useCombineControlValue.cjs +33 -41
  8. package/cjs/index.cjs +16 -17
  9. package/cjs/request/defaultHandlers.cjs +5 -27
  10. package/cjs/request/error.cjs +18 -30
  11. package/cjs/request/index.cjs +194 -174
  12. package/cjs/store/createGetter/index.cjs +26 -40
  13. package/cjs/store/createStateStore/index.cjs +47 -90
  14. package/cjs/store/index.cjs +4 -7
  15. package/cjs/validator/decorators.cjs +71 -228
  16. package/cjs/validator/index.cjs +4 -7
  17. package/cjs/validator/validator.cjs +101 -177
  18. package/es/_utils/defaultEquals.mjs +4 -17
  19. package/es/cache/index.d.ts +9 -13
  20. package/es/cache/index.mjs +132 -160
  21. package/es/cache/indexDB.d.ts +1 -3
  22. package/es/cache/indexDB.mjs +87 -98
  23. package/es/downloadBlob.d.ts +8 -0
  24. package/es/downloadBlob.mjs +14 -0
  25. package/es/hooks/index.d.ts +1 -1
  26. package/es/hooks/index.mjs +4 -1
  27. package/es/hooks/useCombineControlValue.d.ts +5 -8
  28. package/es/hooks/useCombineControlValue.mjs +34 -40
  29. package/es/index.d.ts +28 -8
  30. package/es/index.mjs +29 -7
  31. package/es/request/defaultHandlers.d.ts +24 -0
  32. package/es/request/defaultHandlers.mjs +8 -26
  33. package/es/request/error.d.ts +3 -6
  34. package/es/request/error.mjs +18 -28
  35. package/es/request/index.d.ts +32 -20
  36. package/es/request/index.mjs +194 -172
  37. package/es/store/createGetter/index.d.ts +6 -10
  38. package/es/store/createGetter/index.mjs +28 -39
  39. package/es/store/createStateStore/index.d.ts +9 -9
  40. package/es/store/createStateStore/index.mjs +49 -87
  41. package/es/store/index.d.ts +4 -2
  42. package/es/store/index.mjs +7 -2
  43. package/es/validator/decorators.d.ts +12 -21
  44. package/es/validator/decorators.mjs +81 -226
  45. package/es/validator/index.d.ts +2 -2
  46. package/es/validator/index.mjs +16 -2
  47. package/es/validator/validator.d.ts +5 -6
  48. package/es/validator/validator.mjs +102 -176
  49. package/package.json +85 -15
  50. package/cjs/_utils/deepAssign.cjs +0 -25
  51. package/cjs/cache/index.d.ts +0 -141
  52. package/cjs/cache/indexDB.d.ts +0 -52
  53. package/cjs/hooks/index.d.ts +0 -1
  54. package/cjs/hooks/useCombineControlValue.d.ts +0 -21
  55. package/cjs/index.d.ts +0 -8
  56. package/cjs/request/error.d.ts +0 -31
  57. package/cjs/request/index.d.ts +0 -147
  58. package/cjs/store/createGetter/index.d.ts +0 -30
  59. package/cjs/store/createStateStore/index.d.ts +0 -42
  60. package/cjs/store/index.d.ts +0 -2
  61. package/cjs/validator/decorators.d.ts +0 -159
  62. package/cjs/validator/index.d.ts +0 -2
  63. package/cjs/validator/validator.d.ts +0 -84
  64. package/es/_utils/deepAssign.mjs +0 -23
@@ -1,176 +1,198 @@
1
- import { __assign, __awaiter, __generator } from 'tslib';
2
- import axios from 'axios';
3
- import at from 'lodash-es/at';
4
- import { _defaultErrorCodeHandler, _defaultHttpErrorCodeHandler, _defaultOtherErrorCodeHandler } from './defaultHandlers.mjs';
5
- import defaultEquals from '../_utils/defaultEquals.mjs';
6
- import Cache from '../cache/index.mjs';
7
- import RequestError from './error.mjs';
8
- import { deepAssign } from '../_utils/deepAssign.mjs';
9
-
10
- /**
11
- * 创建基础请求实例
12
- * @param baseOptions 基础配置选项
13
- * @returns 请求创建函数
14
- */
1
+ import axios from "axios";
2
+ import at from "lodash-es/at";
3
+ import { _defaultErrorCodeHandler, _defaultHttpErrorCodeHandler, _defaultOtherErrorCodeHandler } from "./defaultHandlers.mjs";
4
+ import defaultEquals from "../_utils/defaultEquals.mjs";
5
+ import Cache from "../cache/index.mjs";
6
+ import RequestError from "./error.mjs";
15
7
  function createBaseRequest(baseOptions) {
16
- var baseURL = Object(baseOptions).baseURL;
17
- // 创建新的 Axios 实例并配置基础URL和跨域凭证
18
- var instance = axios.create({
19
- baseURL: baseURL,
20
- withCredentials: true,
21
- });
22
- /**
23
- * 创建请求函数
24
- * @template Param 请求参数类型
25
- * @template Data 响应数据类型,必须是对象类型
26
- * @param requestOptions 请求配置
27
- * @param createOptions 创建选项(覆盖基础配置)
28
- * @returns 发送请求的函数
29
- */
30
- return function createRequest(requestOptions, createOptions) {
31
- var _a = __assign({}, requestOptions), method = _a.method, url = _a.url;
32
- var _b = __assign(__assign({}, baseOptions), createOptions), baseURL = _b.baseURL, _c = _b.cacheDataKey, cacheDataKey = _c === void 0 ? "".concat(method, ":").concat(baseURL).concat(url) : _c, cacheDataInStorage = _b.cacheDataInStorage, _d = _b.cacheKeyEquals, cacheKeyEquals = _d === void 0 ? defaultEquals : _d, cacheTime = _b.cacheTime, _e = _b.indexDBName, indexDBName = _e === void 0 ? "__apiCacheDatabase__" : _e;
33
- var cache = new Cache(cacheDataInStorage, cacheDataKey, cacheTime, indexDBName, cacheKeyEquals);
34
- function request(requestParam, options) {
35
- return __awaiter(this, void 0, void 0, function () {
36
- var _a, _b, requestMiddlewares, _c, finalAxiosOptions, finalRequestOptions, _i, requestMiddlewares_1, middleware, _d, nextAxiosOptions, nextRequestOptions, method, url, _e, data, _f, params, requestDataOrParams, _g, defaultMessageShower, _h, _j, enableCache, _k, cacheData, _l, defaultErrorCodeHandler, _m, defaultHttpErrorCodeHandler, _o, otherErrorHandler, _p, errorCodePath, _q, cacheTime, _r, errorCodeMap, _s, successCodes, _t, httpErrorCodeMap, _u,
37
- // axiosOptions = {},
38
- throwError, cacheItem;
39
- var _this = this;
40
- return __generator(this, function (_v) {
41
- switch (_v.label) {
42
- case 0:
43
- _a = __assign(__assign(__assign({}, baseOptions), createOptions), options), _b = _a.requestMiddlewares, requestMiddlewares = _b === void 0 ? [] : _b, _c = _a.axiosOptions, finalAxiosOptions = _c === void 0 ? {} : _c;
44
- finalRequestOptions = __assign(__assign({}, requestOptions), requestParam);
45
- _i = 0, requestMiddlewares_1 = requestMiddlewares;
46
- _v.label = 1;
47
- case 1:
48
- if (!(_i < requestMiddlewares_1.length)) return [3 /*break*/, 4];
49
- middleware = requestMiddlewares_1[_i];
50
- return [4 /*yield*/, middleware(finalAxiosOptions, finalRequestOptions)];
51
- case 2:
52
- _d = _v.sent(), nextAxiosOptions = _d.axiosOptions, nextRequestOptions = _d.requestOptions;
53
- deepAssign({}, finalAxiosOptions, nextAxiosOptions);
54
- deepAssign({}, finalRequestOptions, nextRequestOptions);
55
- _v.label = 3;
56
- case 3:
57
- _i++;
58
- return [3 /*break*/, 1];
59
- case 4:
60
- method = finalRequestOptions.method, url = finalRequestOptions.url, _e = finalRequestOptions.data, data = _e === void 0 ? {} : _e, _f = finalRequestOptions.params, params = _f === void 0 ? {} : _f;
61
- requestDataOrParams = params;
62
- if (method.toLowerCase() === "post") {
63
- requestDataOrParams = data;
64
- }
65
- _g = __assign(__assign(__assign({}, baseOptions), createOptions), options).defaultMessageShower, defaultMessageShower = _g === void 0 ? console.error : _g;
66
- _h = __assign(__assign(__assign({}, baseOptions), createOptions), options), _j = _h.enableCache, enableCache = _j === void 0 ? false : _j, _k = _h.cacheData, cacheData = _k === void 0 ? false : _k, _l = _h.defaultErrorCodeHandler, defaultErrorCodeHandler = _l === void 0 ? _defaultErrorCodeHandler.bind(null, defaultMessageShower) : _l, _m = _h.defaultHttpErrorCodeHandler, defaultHttpErrorCodeHandler = _m === void 0 ? _defaultHttpErrorCodeHandler.bind(null, defaultMessageShower) : _m, _o = _h.otherErrorHandler, otherErrorHandler = _o === void 0 ? _defaultOtherErrorCodeHandler.bind(null, defaultMessageShower) : _o, _p = _h.errorCodePath, errorCodePath = _p === void 0 ? "code" : _p, _q = _h.cacheTime, cacheTime = _q === void 0 ? 60 : _q, _r = _h.errorCodeMap, errorCodeMap = _r === void 0 ? {} : _r, _s = _h.successCodes, successCodes = _s === void 0 ? ["0", "200"] : _s, _t = _h.httpErrorCodeMap, httpErrorCodeMap = _t === void 0 ? {} : _t, _u = _h.throwError, throwError = _u === void 0 ? true : _u;
67
- if (enableCache) {
68
- cacheItem = cache.getCache(requestDataOrParams);
69
- if (cacheItem) {
70
- return [2 /*return*/, Promise.resolve(cacheItem)];
71
- }
72
- }
73
- return [2 /*return*/, instance
74
- .request(__assign({ method: method, url: url, data: data, params: params }, finalAxiosOptions))
75
- .then(function (res) { return __awaiter(_this, void 0, void 0, function () {
76
- var errorCode, _a, _b, _c, customHandler, err, _d, _e, replaceResData, _f, handlerThrowError, _g;
77
- return __generator(this, function (_h) {
78
- switch (_h.label) {
79
- case 0:
80
- errorCode = String(at(res.data, errorCodePath));
81
- if (successCodes.includes(errorCode)) {
82
- if (cacheData) {
83
- cache.setCache(requestDataOrParams, res.data, { cacheTime: cacheTime });
84
- }
85
- return [2 /*return*/, res.data];
86
- }
87
- _a = errorCodeMap, _b = errorCode, _c = _a[_b], customHandler = _c === void 0 ? defaultErrorCodeHandler : _c;
88
- err = new RequestError("服务端错误", "server", res);
89
- if (!(typeof customHandler === "string")) return [3 /*break*/, 1];
90
- defaultMessageShower(customHandler);
91
- return [3 /*break*/, 3];
92
- case 1:
93
- _g = Object;
94
- return [4 /*yield*/, customHandler(errorCode, res.data, res, __assign(__assign({}, requestOptions), requestParam))];
95
- case 2:
96
- _d = _g.apply(void 0, [(_h.sent())]), _e = _d.replaceResData, replaceResData = _e === void 0 ? res.data : _e, _f = _d.throwError, handlerThrowError = _f === void 0 ? "default" : _f;
97
- res.data = replaceResData;
98
- switch (handlerThrowError) {
99
- case true:
100
- throw err;
101
- case false:
102
- return [2 /*return*/, res.data];
103
- }
104
- _h.label = 3;
105
- case 3:
106
- if (throwError) {
107
- throw err;
108
- }
109
- return [2 /*return*/, res.data];
110
- }
111
- });
112
- }); }, function (error) { return __awaiter(_this, void 0, void 0, function () {
113
- var resData, _a, _b, _c, customHandler, err, _d, _e, replaceResData, _f, handlerThrowError, _g, resData, err, _h, _j, replaceResData, _k, handlerThrowError, _l;
114
- return __generator(this, function (_m) {
115
- switch (_m.label) {
116
- case 0:
117
- if (!error.response) return [3 /*break*/, 4];
118
- resData = error;
119
- _a = httpErrorCodeMap, _b = error.response.status, _c = _a[_b], customHandler = _c === void 0 ? defaultHttpErrorCodeHandler : _c;
120
- err = new RequestError("服务端错误", "http", error);
121
- if (!(typeof customHandler === "string")) return [3 /*break*/, 1];
122
- defaultMessageShower(customHandler);
123
- return [3 /*break*/, 3];
124
- case 1:
125
- _g = Object;
126
- return [4 /*yield*/, customHandler(error.response.status, error, __assign(__assign({}, requestOptions), requestParam))];
127
- case 2:
128
- _d = _g.apply(void 0, [(_m.sent())]), _e = _d.replaceResData, replaceResData = _e === void 0 ? error : _e, _f = _d.throwError, handlerThrowError = _f === void 0 ? "default" : _f;
129
- resData = replaceResData;
130
- switch (handlerThrowError) {
131
- case true:
132
- throw err;
133
- case false:
134
- return [2 /*return*/, resData];
135
- }
136
- _m.label = 3;
137
- case 3:
138
- if (throwError) {
139
- throw err;
140
- }
141
- return [2 /*return*/, resData];
142
- case 4:
143
- resData = error;
144
- err = new RequestError("服务端错误", "http", error);
145
- err.type = "http";
146
- err.data = error;
147
- _l = Object;
148
- return [4 /*yield*/, otherErrorHandler(error)];
149
- case 5:
150
- _h = (_l.apply(void 0, [(_m.sent())])), _j = _h.replaceResData, replaceResData = _j === void 0 ? error : _j, _k = _h.throwError, handlerThrowError = _k === void 0 ? "default" : _k;
151
- resData = replaceResData;
152
- switch (handlerThrowError) {
153
- case true:
154
- throw err;
155
- case false:
156
- return [2 /*return*/, resData];
157
- }
158
- if (throwError) {
159
- throw err;
160
- }
161
- return [2 /*return*/, resData];
162
- }
163
- });
164
- }); })];
165
- }
166
- });
167
- });
8
+ const { baseURL } = Object(baseOptions);
9
+ const instance = axios.create({
10
+ baseURL
11
+ });
12
+ return function createRequest(requestOptions, createOptions) {
13
+ const { method, url } = { ...requestOptions };
14
+ const {
15
+ baseURL: baseURL2,
16
+ cacheDataKey = `${method}:${baseURL2}${url}`,
17
+ cacheDataInStorage,
18
+ cacheKeyEquals = defaultEquals,
19
+ cacheTime,
20
+ indexDBName = "__apiCacheDatabase__"
21
+ } = {
22
+ ...baseOptions,
23
+ ...createOptions
24
+ };
25
+ const cache = new Cache(
26
+ cacheDataInStorage,
27
+ cacheDataKey,
28
+ cacheTime,
29
+ indexDBName,
30
+ cacheKeyEquals
31
+ );
32
+ async function request(requestParam, options) {
33
+ const mergedOptions = {
34
+ ...baseOptions,
35
+ ...createOptions,
36
+ ...options
37
+ };
38
+ let {
39
+ requestMiddlewares = [],
40
+ axiosOptions: finalAxiosOptions = {},
41
+ requestParamsOrDataTransfer,
42
+ responseTransfer
43
+ } = mergedOptions;
44
+ let finalRequestOptions = { ...requestOptions, ...requestParam };
45
+ for (const middleware of requestMiddlewares) {
46
+ const {
47
+ axiosOptions: nextAxiosOptions = finalAxiosOptions,
48
+ requestOptions: nextRequestOptions = finalRequestOptions
49
+ } = await middleware(
50
+ { ...mergedOptions, axiosOptions: finalAxiosOptions },
51
+ finalRequestOptions
52
+ );
53
+ finalAxiosOptions = nextAxiosOptions;
54
+ finalRequestOptions = nextRequestOptions;
55
+ }
56
+ const { method: method2, url: url2, data = {}, params = {} } = finalRequestOptions;
57
+ let requestDataOrParams = params;
58
+ if (method2.toLowerCase() === "post") {
59
+ requestDataOrParams = data;
60
+ }
61
+ const { defaultMessageShower = console.error } = {
62
+ ...baseOptions,
63
+ ...createOptions,
64
+ ...options
65
+ };
66
+ const {
67
+ enableCache = false,
68
+ cacheData = false,
69
+ defaultErrorCodeHandler = _defaultErrorCodeHandler.bind(null, defaultMessageShower),
70
+ defaultHttpErrorCodeHandler = _defaultHttpErrorCodeHandler.bind(null, defaultMessageShower),
71
+ otherErrorHandler = _defaultOtherErrorCodeHandler.bind(null, defaultMessageShower),
72
+ errorCodePath = "code",
73
+ cacheTime: cacheTime2 = 60,
74
+ errorCodeMap = {},
75
+ successCodes = ["0", "200"],
76
+ httpErrorCodeMap = {},
77
+ // axiosOptions = {},
78
+ throwError = true,
79
+ retryTimes = 0
80
+ } = { ...baseOptions, ...createOptions, ...options };
81
+ if (enableCache) {
82
+ const cacheItem = cache.getCache(requestDataOrParams);
83
+ if (cacheItem) {
84
+ return Promise.resolve(cacheItem);
85
+ }
86
+ }
87
+ function retry() {
88
+ if (retryTimes > 0) {
89
+ return request(requestParam, { ...options, retryTimes: retryTimes - 1 });
90
+ }
91
+ return null;
92
+ }
93
+ return instance.request({
94
+ method: method2,
95
+ url: url2,
96
+ data: requestParamsOrDataTransfer ? requestParamsOrDataTransfer(data) : data,
97
+ params: requestParamsOrDataTransfer ? requestParamsOrDataTransfer(params) : params,
98
+ ...finalAxiosOptions
99
+ }).then(
100
+ async (res) => {
101
+ const errorCode = String(at(res.data, errorCodePath));
102
+ let finalData = responseTransfer ? responseTransfer(res.data) : res.data;
103
+ if (successCodes.includes(errorCode)) {
104
+ if (cacheData) {
105
+ cache.setCache(requestDataOrParams, finalData, { cacheTime: cacheTime2 });
106
+ }
107
+ return finalData;
108
+ }
109
+ const { [errorCode]: customHandler = defaultErrorCodeHandler } = errorCodeMap;
110
+ const err = new RequestError("服务端错误", "server", res);
111
+ if (typeof customHandler === "string") {
112
+ defaultMessageShower(customHandler);
113
+ const retryTask = retry();
114
+ if (retryTask) return retryTask;
115
+ } else {
116
+ const { replaceResData = res.data, throwError: handlerThrowError = "default" } = Object(
117
+ await customHandler(errorCode, res.data, res, {
118
+ ...requestOptions,
119
+ ...requestParam
120
+ })
121
+ );
122
+ const retryTask = retry();
123
+ if (retryTask) return retryTask;
124
+ res.data = replaceResData;
125
+ switch (handlerThrowError) {
126
+ case true:
127
+ throw err;
128
+ case false:
129
+ return res.data;
130
+ }
131
+ }
132
+ if (throwError) {
133
+ throw err;
134
+ }
135
+ return res.data;
136
+ },
137
+ async (error) => {
138
+ if (error.response) {
139
+ let resData = error;
140
+ const { [error.response.status]: customHandler = defaultHttpErrorCodeHandler } = httpErrorCodeMap;
141
+ const err = new RequestError("服务端错误", "http", error);
142
+ if (typeof customHandler === "string") {
143
+ defaultMessageShower(customHandler);
144
+ const retryTask = retry();
145
+ if (retryTask) return retryTask;
146
+ } else {
147
+ const { replaceResData = error, throwError: handlerThrowError = "default" } = Object(
148
+ await customHandler(error.response.status, error, {
149
+ ...requestOptions,
150
+ ...requestParam
151
+ })
152
+ );
153
+ const retryTask = retry();
154
+ if (retryTask) return retryTask;
155
+ resData = replaceResData;
156
+ switch (handlerThrowError) {
157
+ case true:
158
+ throw err;
159
+ case false:
160
+ return resData;
161
+ }
162
+ }
163
+ if (throwError) {
164
+ throw err;
165
+ }
166
+ return resData;
167
+ } else {
168
+ let resData = error;
169
+ const err = new RequestError("服务端错误", "http", error);
170
+ err.type = "http";
171
+ err.data = error;
172
+ const { replaceResData = error, throwError: handlerThrowError = "default" } = Object(await otherErrorHandler(error));
173
+ const retryTask = retry();
174
+ if (retryTask) return retryTask;
175
+ resData = replaceResData;
176
+ switch (handlerThrowError) {
177
+ case true:
178
+ throw err;
179
+ case false:
180
+ return resData;
181
+ }
182
+ if (throwError) {
183
+ throw err;
184
+ }
185
+ return resData;
186
+ }
168
187
  }
169
- request.clearCache = function () {
170
- cache.clear();
171
- };
172
- return request;
188
+ );
189
+ }
190
+ request.clearCache = () => {
191
+ cache.clear();
173
192
  };
193
+ return request;
194
+ };
174
195
  }
175
-
176
- export { createBaseRequest as default };
196
+ export {
197
+ createBaseRequest as default
198
+ };
@@ -1,12 +1,11 @@
1
- import createStateStore from '../createStateStore/index.js';
2
-
3
- type StoreGetter<S = any> = {
1
+ import { default as createStateStore } from '../createStateStore';
2
+ export type StoreGetter<S = any> = {
4
3
  [K in string]: (store: S) => any;
5
4
  };
6
- type GetterNameMap<G extends StoreGetter<any>> = {
5
+ export type GetterNameMap<G extends StoreGetter<any>> = {
7
6
  [K in keyof G]: string;
8
7
  };
9
- type ReducedData<G extends StoreGetter<any>, M extends GetterNameMap<G>> = {
8
+ export type ReducedData<G extends StoreGetter<any>, M extends GetterNameMap<G>> = {
10
9
  [K in keyof M as M[K]]: G[K extends keyof G ? K : never] extends (store: any) => infer R ? R : never;
11
10
  };
12
11
  /**
@@ -16,7 +15,7 @@ type ReducedData<G extends StoreGetter<any>, M extends GetterNameMap<G>> = {
16
15
  * @param getterNameMaps 将 getter 函数和 getter 名称一一映射
17
16
  * @returns getter object
18
17
  */
19
- declare const createStoreGetter: <S, G extends StoreGetter<S>, M extends GetterNameMap<G>>(store: ReturnType<typeof createStateStore<S>>, getters: G, getterNameMaps: M) => ReducedData<G, M>;
18
+ export declare const createStoreGetter: <S, G extends StoreGetter<S>, M extends GetterNameMap<G>>(store: ReturnType<typeof createStateStore<S>>, getters: G, getterNameMaps: M) => ReducedData<G, M>;
20
19
  /**
21
20
  *
22
21
  * @param store store实例
@@ -24,7 +23,4 @@ declare const createStoreGetter: <S, G extends StoreGetter<S>, M extends GetterN
24
23
  * @param getterNameMaps 将 getter 函数和 getter 名称一一映射
25
24
  * @returns getter memo hook
26
25
  */
27
- declare const createStoreGetterMemo: <S, G extends StoreGetter<S>, M extends GetterNameMap<G>>(store: ReturnType<typeof createStateStore<S>>, getters: G, getterNameMaps: M) => () => ReducedData<G, M>;
28
-
29
- export { createStoreGetter, createStoreGetterMemo };
30
- export type { GetterNameMap, ReducedData, StoreGetter };
26
+ export declare const createStoreGetterMemo: <S, G extends StoreGetter<S>, M extends GetterNameMap<G>>(store: ReturnType<typeof createStateStore<S>>, getters: G, getterNameMaps: M) => () => ReducedData<G, M>;
@@ -1,42 +1,31 @@
1
- import { useMemo } from 'react';
2
-
3
- /**
4
- * 创建 store getter
5
- * @param store store实例
6
- * @param getters getter函数
7
- * @param getterNameMaps 将 getter 函数和 getter 名称一一映射
8
- * @returns getter object
9
- */
10
- var createStoreGetter = function (store, getters, getterNameMaps) {
11
- var gettersObj = {};
12
- Object.keys(getters).forEach(function (key) {
13
- Object.defineProperty(gettersObj, getterNameMaps[key], {
14
- get: function () { return getters[key](store.get()); }
15
- });
1
+ import { useMemo } from "react";
2
+ const createStoreGetter = (store, getters, getterNameMaps) => {
3
+ const gettersObj = {};
4
+ Object.keys(getters).forEach((key) => {
5
+ Object.defineProperty(gettersObj, getterNameMaps[key], {
6
+ get: () => getters[key](store.get())
16
7
  });
17
- return gettersObj;
8
+ });
9
+ return gettersObj;
18
10
  };
19
- /**
20
- *
21
- * @param store store实例
22
- * @param getters getter函数
23
- * @param getterNameMaps 将 getter 函数和 getter 名称一一映射
24
- * @returns getter memo hook
25
- */
26
- var createStoreGetterMemo = function (store, getters, getterNameMaps) {
27
- // 创建缓存数据 hook
28
- return function () {
29
- var storeData = store.use()[0];
30
- var reducedData = useMemo(function () {
31
- return Object.keys(getters).reduce(function (acc, key) {
32
- var mappedKey = getterNameMaps[key];
33
- var getterValue = getters[key](storeData);
34
- acc[mappedKey] = getterValue;
35
- return acc;
36
- }, {});
37
- }, [storeData]);
38
- return reducedData;
39
- };
11
+ const createStoreGetterMemo = (store, getters, getterNameMaps) => {
12
+ return () => {
13
+ const [storeData] = store.use();
14
+ const reducedData = useMemo(() => {
15
+ return Object.keys(getters).reduce(
16
+ (acc, key) => {
17
+ const mappedKey = getterNameMaps[key];
18
+ const getterValue = getters[key](storeData);
19
+ acc[mappedKey] = getterValue;
20
+ return acc;
21
+ },
22
+ {}
23
+ );
24
+ }, [storeData]);
25
+ return reducedData;
26
+ };
27
+ };
28
+ export {
29
+ createStoreGetter,
30
+ createStoreGetterMemo
40
31
  };
41
-
42
- export { createStoreGetter, createStoreGetterMemo };
@@ -2,27 +2,30 @@
2
2
  * 状态初始化设置器类型
3
3
  * 用于延迟初始化状态的函数类型
4
4
  */
5
- type IHookStateInitialSetter<S> = () => S;
5
+ export type IHookStateInitialSetter<S> = () => S;
6
6
  /**
7
7
  * 状态初始化动作类型
8
8
  * 可以是直接的状态值或初始化设置器
9
9
  */
10
- type IHookStateInitAction<S> = S | IHookStateInitialSetter<S>;
10
+ export type IHookStateInitAction<S> = S | IHookStateInitialSetter<S>;
11
11
  /**
12
12
  * 状态设置器类型
13
13
  * 可以是接收前一个状态的函数或无参数的函数
14
14
  */
15
- type IHookStateSetter<S> = ((prevState: S) => S) | (() => S);
15
+ export type IHookStateSetter<S> = ((prevState: S) => S) | (() => S);
16
16
  /**
17
17
  * 状态设置动作类型
18
18
  * 可以是直接的状态值或状态设置器
19
19
  */
20
- type IHookStateSetAction<S> = S | IHookStateSetter<S>;
20
+ export type IHookStateSetAction<S> = S | IHookStateSetter<S>;
21
21
  /**
22
22
  * 可解析的状态类型
23
23
  * 包含所有可能的状态值或状态设置函数
24
24
  */
25
- type IHookStateResolvable<S> = S | IHookStateInitialSetter<S> | IHookStateSetter<S>;
25
+ export type IHookStateResolvable<S> = S | IHookStateInitialSetter<S> | IHookStateSetter<S>;
26
+ export declare function resolveHookState<S>(nextState: IHookStateInitAction<S>): S;
27
+ export declare function resolveHookState<S, C extends S>(nextState: IHookStateSetAction<S>, currentState: C): S;
28
+ export declare function resolveHookState<S, C extends S>(nextState: IHookStateResolvable<S>, currentState: C): S;
26
29
  /**
27
30
  * 创建状态存储
28
31
  * 提供一个简单的状态管理解决方案,支持组件间状态共享
@@ -31,12 +34,9 @@ type IHookStateResolvable<S> = S | IHookStateInitialSetter<S> | IHookStateSetter
31
34
  * @param initialState 初始状态值或初始化函数
32
35
  * @returns 包含状态操作方法的对象
33
36
  */
34
- declare function createStateStore<S>(initialState?: S): {
37
+ export default function createStateStore<S>(initialState?: S): {
35
38
  use: () => [S, (state: IHookStateSetAction<S>) => void];
36
39
  get: () => S;
37
40
  set: (state: IHookStateSetAction<S>) => void;
38
41
  watch: (callback: (state: S) => S | void) => () => void;
39
42
  };
40
-
41
- export { createStateStore as default };
42
- export type { IHookStateInitAction, IHookStateInitialSetter, IHookStateResolvable, IHookStateSetAction, IHookStateSetter };