rxtutils 1.1.4-beta.15 → 1.1.4-beta.17
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/cjs/cache/index.cjs +48 -66
- package/cjs/cache/index.d.ts +1 -1
- package/cjs/cache/indexDB.cjs +36 -43
- package/cjs/hooks/useCombineControlValue.cjs +9 -14
- package/cjs/request/defaultHandlers.cjs +3 -3
- package/cjs/request/error.cjs +7 -12
- package/cjs/request/index.cjs +145 -160
- package/cjs/request/index.d.ts +14 -0
- package/cjs/store/createGetter/index.cjs +11 -11
- package/cjs/store/createStateStore/index.cjs +22 -22
- package/cjs/validator/decorators.cjs +44 -55
- package/cjs/validator/validator.cjs +83 -93
- package/es/cache/index.d.ts +1 -1
- package/es/cache/index.mjs +48 -66
- package/es/cache/indexDB.mjs +36 -43
- package/es/hooks/useCombineControlValue.mjs +9 -14
- package/es/request/defaultHandlers.mjs +3 -3
- package/es/request/error.mjs +7 -12
- package/es/request/index.d.ts +14 -0
- package/es/request/index.mjs +145 -160
- package/es/store/createGetter/index.mjs +11 -11
- package/es/store/createStateStore/index.mjs +22 -22
- package/es/validator/decorators.mjs +44 -55
- package/es/validator/validator.mjs +83 -93
- package/package.json +7 -2
package/es/cache/indexDB.mjs
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
* IndexedDB 存储类
|
|
3
3
|
* 提供了对 IndexedDB 数据库操作的简单封装
|
|
4
4
|
*/
|
|
5
|
-
|
|
5
|
+
class IndexedDBStorage {
|
|
6
6
|
/**
|
|
7
7
|
* 构造函数
|
|
8
8
|
* @param dbName 数据库名称
|
|
9
9
|
* @param storeName 存储对象名称
|
|
10
10
|
*/
|
|
11
|
-
|
|
11
|
+
constructor(dbName, storeName) {
|
|
12
12
|
/** 数据库连接实例 */
|
|
13
13
|
this.db = null;
|
|
14
14
|
this.dbName = dbName;
|
|
@@ -20,28 +20,26 @@ var IndexedDBStorage = /** @class */ (function () {
|
|
|
20
20
|
* @private
|
|
21
21
|
* @returns Promise<IDBDatabase> 数据库连接实例
|
|
22
22
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
resolve(_this.db);
|
|
23
|
+
_open() {
|
|
24
|
+
return new Promise((resolve, reject) => {
|
|
25
|
+
if (this.db) {
|
|
26
|
+
resolve(this.db);
|
|
28
27
|
return;
|
|
29
28
|
}
|
|
30
|
-
|
|
31
|
-
request.onupgradeneeded =
|
|
32
|
-
|
|
33
|
-
db.createObjectStore(
|
|
29
|
+
const request = indexedDB.open(this.dbName);
|
|
30
|
+
request.onupgradeneeded = (event) => {
|
|
31
|
+
const db = event.target.result;
|
|
32
|
+
db.createObjectStore(this.storeName, { keyPath: 'key' });
|
|
34
33
|
};
|
|
35
|
-
request.onerror =
|
|
36
|
-
|
|
37
|
-
reject("IndexedDB open request error: ".concat((_a = request.error) === null || _a === void 0 ? void 0 : _a.message));
|
|
34
|
+
request.onerror = () => {
|
|
35
|
+
reject(`IndexedDB open request error: ${request.error?.message}`);
|
|
38
36
|
};
|
|
39
|
-
request.onsuccess =
|
|
40
|
-
|
|
41
|
-
resolve(
|
|
37
|
+
request.onsuccess = (event) => {
|
|
38
|
+
this.db = event.target.result;
|
|
39
|
+
resolve(this.db);
|
|
42
40
|
};
|
|
43
41
|
});
|
|
44
|
-
}
|
|
42
|
+
}
|
|
45
43
|
/**
|
|
46
44
|
* 获取存储对象
|
|
47
45
|
* @param mode 事务模式,默认为只读模式
|
|
@@ -50,14 +48,12 @@ var IndexedDBStorage = /** @class */ (function () {
|
|
|
50
48
|
* @private
|
|
51
49
|
* @returns Promise<IDBObjectStore> 存储对象实例
|
|
52
50
|
*/
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
var transaction = db.transaction(_this.storeName, mode);
|
|
58
|
-
return transaction.objectStore(_this.storeName);
|
|
51
|
+
_getStore(mode = 'readonly') {
|
|
52
|
+
return this._open().then((db) => {
|
|
53
|
+
const transaction = db.transaction(this.storeName, mode);
|
|
54
|
+
return transaction.objectStore(this.storeName);
|
|
59
55
|
});
|
|
60
|
-
}
|
|
56
|
+
}
|
|
61
57
|
/**
|
|
62
58
|
* 设置键值对
|
|
63
59
|
* @param key 键名
|
|
@@ -65,15 +61,15 @@ var IndexedDBStorage = /** @class */ (function () {
|
|
|
65
61
|
* @returns Promise<void> 存储操作的结果
|
|
66
62
|
* @throws 当存储操作失败时抛出错误
|
|
67
63
|
*/
|
|
68
|
-
|
|
69
|
-
return this._getStore('readwrite').then(
|
|
70
|
-
return new Promise(
|
|
71
|
-
|
|
72
|
-
request.onsuccess =
|
|
73
|
-
request.onerror =
|
|
64
|
+
setItem(key, value) {
|
|
65
|
+
return this._getStore('readwrite').then((store) => {
|
|
66
|
+
return new Promise((resolve, reject) => {
|
|
67
|
+
const request = store.put({ key, value });
|
|
68
|
+
request.onsuccess = () => resolve();
|
|
69
|
+
request.onerror = () => reject(`Could not set the item: ${request.error?.message}`);
|
|
74
70
|
});
|
|
75
71
|
});
|
|
76
|
-
}
|
|
72
|
+
}
|
|
77
73
|
/**
|
|
78
74
|
* 获取键对应的值
|
|
79
75
|
* @param key 要获取的键名
|
|
@@ -81,18 +77,15 @@ var IndexedDBStorage = /** @class */ (function () {
|
|
|
81
77
|
* @throws 当获取操作失败时抛出错误
|
|
82
78
|
* @template T 存储值的类型,默认为 any
|
|
83
79
|
*/
|
|
84
|
-
|
|
85
|
-
return this._getStore().then(
|
|
86
|
-
return new Promise(
|
|
87
|
-
|
|
88
|
-
request.onsuccess =
|
|
89
|
-
|
|
90
|
-
};
|
|
91
|
-
request.onerror = function () { var _a; return reject("Could not get the item: ".concat((_a = request.error) === null || _a === void 0 ? void 0 : _a.message)); };
|
|
80
|
+
getItem(key) {
|
|
81
|
+
return this._getStore().then((store) => {
|
|
82
|
+
return new Promise((resolve, reject) => {
|
|
83
|
+
const request = store.get(key);
|
|
84
|
+
request.onsuccess = () => resolve(request.result ? request.result.value : undefined);
|
|
85
|
+
request.onerror = () => reject(`Could not get the item: ${request.error?.message}`);
|
|
92
86
|
});
|
|
93
87
|
});
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
}());
|
|
88
|
+
}
|
|
89
|
+
}
|
|
97
90
|
|
|
98
91
|
export { IndexedDBStorage };
|
|
@@ -7,27 +7,22 @@ import { useState, useCallback, useMemo } from 'react';
|
|
|
7
7
|
* @param param onChange 值改变时的回调
|
|
8
8
|
* @returns value: 组件应该采用的值,onChange:值改变时的回调,处理非受控值与向父组件传递值的逻辑
|
|
9
9
|
*/
|
|
10
|
-
function useCombineControlValue(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
var params = [];
|
|
17
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
18
|
-
params[_i] = arguments[_i];
|
|
19
|
-
}
|
|
20
|
-
var realNextVal;
|
|
10
|
+
function useCombineControlValue({ props, valueKey = 'value', defaultValue, onChange }, resolveFn) {
|
|
11
|
+
const { [valueKey]: value } = props;
|
|
12
|
+
const hasValue = Object.prototype.hasOwnProperty.call(props, valueKey);
|
|
13
|
+
const [internalValue, setInternalValue] = useState(value ?? defaultValue);
|
|
14
|
+
const handleChange = useCallback((...params) => {
|
|
15
|
+
let realNextVal;
|
|
21
16
|
if (typeof resolveFn === 'function') {
|
|
22
|
-
realNextVal = resolveFn
|
|
17
|
+
realNextVal = resolveFn(...params);
|
|
23
18
|
}
|
|
24
19
|
else {
|
|
25
20
|
realNextVal = params[0];
|
|
26
21
|
}
|
|
27
22
|
setInternalValue(realNextVal);
|
|
28
|
-
onChange
|
|
23
|
+
onChange?.(...params);
|
|
29
24
|
}, [onChange, resolveFn]);
|
|
30
|
-
|
|
25
|
+
const finalValue = useMemo(() => {
|
|
31
26
|
if (hasValue)
|
|
32
27
|
return value;
|
|
33
28
|
return internalValue;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* @param code 业务错误码
|
|
7
7
|
*/
|
|
8
8
|
function _defaultErrorCodeHandler(defaultMessageShower, code) {
|
|
9
|
-
defaultMessageShower(
|
|
9
|
+
defaultMessageShower(`请求出错,错误码:${code},请稍后再试`);
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
12
|
* 默认 HTTP 错误码处理函数
|
|
@@ -16,7 +16,7 @@ function _defaultErrorCodeHandler(defaultMessageShower, code) {
|
|
|
16
16
|
* @param code HTTP 状态码
|
|
17
17
|
*/
|
|
18
18
|
function _defaultHttpErrorCodeHandler(defaultMessageShower, code) {
|
|
19
|
-
defaultMessageShower(
|
|
19
|
+
defaultMessageShower(`服务端请求出错,Http错误码:${String(code)},请稍后再试`);
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
22
|
* 默认其他错误处理函数
|
|
@@ -26,7 +26,7 @@ function _defaultHttpErrorCodeHandler(defaultMessageShower, code) {
|
|
|
26
26
|
* @param error 错误对象
|
|
27
27
|
*/
|
|
28
28
|
function _defaultOtherErrorCodeHandler(defaultMessageShower, error) {
|
|
29
|
-
defaultMessageShower(
|
|
29
|
+
defaultMessageShower(`未知请求出错,请稍后再试`);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
export { _defaultErrorCodeHandler, _defaultHttpErrorCodeHandler, _defaultOtherErrorCodeHandler };
|
package/es/request/error.mjs
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { __extends } from 'tslib';
|
|
2
|
-
|
|
3
1
|
/**
|
|
4
2
|
* 请求错误类
|
|
5
3
|
* 用于统一处理请求过程中的各种错误
|
|
@@ -7,22 +5,19 @@ import { __extends } from 'tslib';
|
|
|
7
5
|
* @template Data 错误数据类型
|
|
8
6
|
* @extends Error
|
|
9
7
|
*/
|
|
10
|
-
|
|
11
|
-
__extends(RequestError, _super);
|
|
8
|
+
class RequestError extends Error {
|
|
12
9
|
/**
|
|
13
10
|
* 构造函数
|
|
14
11
|
* @param message 错误消息
|
|
15
12
|
* @param type 错误类型
|
|
16
13
|
* @param data 错误相关的数据
|
|
17
14
|
*/
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return _this;
|
|
15
|
+
constructor(message, type, data) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.name = 'RequestError';
|
|
18
|
+
this.type = type;
|
|
19
|
+
this.data = data;
|
|
24
20
|
}
|
|
25
|
-
|
|
26
|
-
}(Error));
|
|
21
|
+
}
|
|
27
22
|
|
|
28
23
|
export { RequestError as default };
|
package/es/request/index.d.ts
CHANGED
|
@@ -119,6 +119,20 @@ interface Options<Params = any, Data = any> {
|
|
|
119
119
|
requestOptions?: RequestOptions<Params>;
|
|
120
120
|
})[];
|
|
121
121
|
retryTimes?: number;
|
|
122
|
+
/**
|
|
123
|
+
* 请求参数或数据转换函数
|
|
124
|
+
* 可以在发送请求前对参数或数据进行处理
|
|
125
|
+
* @param paramsOrData 请求参数或数据
|
|
126
|
+
* @returns 处理后的参数或数据
|
|
127
|
+
*/
|
|
128
|
+
requestParamsOrDataTransfer?: (paramsOrData: Params) => any;
|
|
129
|
+
/**
|
|
130
|
+
* 响应数据转换函数
|
|
131
|
+
* 可以在接收响应数据后对数据进行处理
|
|
132
|
+
* @param data 响应数据
|
|
133
|
+
* @returns 处理后的响应数据
|
|
134
|
+
*/
|
|
135
|
+
responseTransfer?: (data: any) => Data;
|
|
122
136
|
}
|
|
123
137
|
/**
|
|
124
138
|
* 请求参数接口
|
package/es/request/index.mjs
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __assign, __awaiter, __generator } from 'tslib';
|
|
2
1
|
import axios from 'axios';
|
|
3
2
|
import at from 'lodash-es/at';
|
|
4
3
|
import { _defaultErrorCodeHandler, _defaultHttpErrorCodeHandler, _defaultOtherErrorCodeHandler } from './defaultHandlers.mjs';
|
|
@@ -12,11 +11,10 @@ import RequestError from './error.mjs';
|
|
|
12
11
|
* @returns 请求创建函数
|
|
13
12
|
*/
|
|
14
13
|
function createBaseRequest(baseOptions) {
|
|
15
|
-
|
|
16
|
-
// 创建新的 Axios 实例并配置基础URL
|
|
17
|
-
|
|
14
|
+
const { baseURL } = Object(baseOptions);
|
|
15
|
+
// 创建新的 Axios 实例并配置基础URL
|
|
16
|
+
const instance = axios.create({
|
|
18
17
|
baseURL: baseURL,
|
|
19
|
-
withCredentials: true,
|
|
20
18
|
});
|
|
21
19
|
/**
|
|
22
20
|
* 创建请求函数
|
|
@@ -27,166 +25,153 @@ function createBaseRequest(baseOptions) {
|
|
|
27
25
|
* @returns 发送请求的函数
|
|
28
26
|
*/
|
|
29
27
|
return function createRequest(requestOptions, createOptions) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
28
|
+
const { method, url } = { ...requestOptions };
|
|
29
|
+
const { baseURL, cacheDataKey = `${method}:${baseURL}${url}`, cacheDataInStorage, cacheKeyEquals = defaultEquals, cacheTime, indexDBName = "__apiCacheDatabase__", } = {
|
|
30
|
+
...baseOptions,
|
|
31
|
+
...createOptions,
|
|
32
|
+
};
|
|
33
|
+
const cache = new Cache(cacheDataInStorage, cacheDataKey, cacheTime, indexDBName, cacheKeyEquals);
|
|
34
|
+
async function request(requestParam, options) {
|
|
35
|
+
const mergedOptions = {
|
|
36
|
+
...baseOptions,
|
|
37
|
+
...createOptions,
|
|
38
|
+
...options,
|
|
39
|
+
};
|
|
40
|
+
let { requestMiddlewares = [], axiosOptions: finalAxiosOptions = {}, requestParamsOrDataTransfer, responseTransfer } = mergedOptions;
|
|
41
|
+
let finalRequestOptions = { ...requestOptions, ...requestParam };
|
|
42
|
+
for (const middleware of requestMiddlewares) {
|
|
43
|
+
const { axiosOptions: nextAxiosOptions = finalAxiosOptions, requestOptions: nextRequestOptions = finalRequestOptions } = await middleware({ ...mergedOptions, axiosOptions: finalAxiosOptions }, finalRequestOptions);
|
|
44
|
+
finalAxiosOptions = nextAxiosOptions;
|
|
45
|
+
finalRequestOptions = nextRequestOptions;
|
|
46
|
+
}
|
|
47
|
+
const { method, url, data = {}, params = {}, } = finalRequestOptions;
|
|
48
|
+
let requestDataOrParams = params;
|
|
49
|
+
if (method.toLowerCase() === "post") {
|
|
50
|
+
requestDataOrParams = data;
|
|
51
|
+
}
|
|
52
|
+
const { defaultMessageShower = console.error } = {
|
|
53
|
+
...baseOptions,
|
|
54
|
+
...createOptions,
|
|
55
|
+
...options,
|
|
56
|
+
};
|
|
57
|
+
const { enableCache = false, cacheData = false, defaultErrorCodeHandler = _defaultErrorCodeHandler.bind(null, defaultMessageShower), defaultHttpErrorCodeHandler = _defaultHttpErrorCodeHandler.bind(null, defaultMessageShower), otherErrorHandler = _defaultOtherErrorCodeHandler.bind(null, defaultMessageShower), errorCodePath = "code", cacheTime = 60, errorCodeMap = {}, successCodes = ["0", "200"], httpErrorCodeMap = {},
|
|
58
|
+
// axiosOptions = {},
|
|
59
|
+
throwError = true, retryTimes = 0 } = { ...baseOptions, ...createOptions, ...options };
|
|
60
|
+
if (enableCache) {
|
|
61
|
+
const cacheItem = cache.getCache(requestDataOrParams);
|
|
62
|
+
if (cacheItem) {
|
|
63
|
+
return Promise.resolve(cacheItem);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function retry() {
|
|
67
|
+
if (retryTimes > 0) {
|
|
68
|
+
return request(requestParam, { ...options, retryTimes: retryTimes - 1 });
|
|
69
|
+
}
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
return instance
|
|
73
|
+
.request({
|
|
74
|
+
method,
|
|
75
|
+
url,
|
|
76
|
+
data: data ?? (requestParamsOrDataTransfer ? requestParamsOrDataTransfer(data) : data),
|
|
77
|
+
params: params ?? (requestParamsOrDataTransfer ? requestParamsOrDataTransfer(params) : params),
|
|
78
|
+
...finalAxiosOptions,
|
|
79
|
+
})
|
|
80
|
+
.then(async (res) => {
|
|
81
|
+
const errorCode = String(at(res.data, errorCodePath));
|
|
82
|
+
let finalData = responseTransfer ? responseTransfer(res.data) : res.data;
|
|
83
|
+
if (successCodes.includes(errorCode)) {
|
|
84
|
+
if (cacheData) {
|
|
85
|
+
cache.setCache(requestDataOrParams, finalData, { cacheTime });
|
|
38
86
|
}
|
|
39
|
-
return
|
|
87
|
+
return finalData;
|
|
88
|
+
}
|
|
89
|
+
// 不在成功 code 中,意味着请求失败
|
|
90
|
+
const { [errorCode]: customHandler = defaultErrorCodeHandler } = errorCodeMap;
|
|
91
|
+
const err = new RequestError("服务端错误", "server", res);
|
|
92
|
+
if (typeof customHandler === "string") {
|
|
93
|
+
defaultMessageShower(customHandler);
|
|
94
|
+
const retryTask = retry();
|
|
95
|
+
if (retryTask)
|
|
96
|
+
return retryTask;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
const { replaceResData = res.data, throwError: handlerThrowError = "default", } = Object((await customHandler(errorCode, res.data, res, {
|
|
100
|
+
...requestOptions,
|
|
101
|
+
...requestParam,
|
|
102
|
+
})));
|
|
103
|
+
const retryTask = retry();
|
|
104
|
+
if (retryTask)
|
|
105
|
+
return retryTask;
|
|
106
|
+
res.data = replaceResData;
|
|
107
|
+
switch (handlerThrowError) {
|
|
108
|
+
case true:
|
|
109
|
+
throw err;
|
|
110
|
+
case false:
|
|
111
|
+
return res.data;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (throwError) {
|
|
115
|
+
throw err;
|
|
40
116
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (!(_i < requestMiddlewares_1.length)) return [3 /*break*/, 4];
|
|
54
|
-
middleware = requestMiddlewares_1[_i];
|
|
55
|
-
return [4 /*yield*/, middleware(finalAxiosOptions, finalRequestOptions)];
|
|
56
|
-
case 2:
|
|
57
|
-
_d = _y.sent(), _e = _d.axiosOptions, nextAxiosOptions = _e === void 0 ? finalAxiosOptions : _e, _f = _d.requestOptions, nextRequestOptions = _f === void 0 ? finalRequestOptions : _f;
|
|
58
|
-
finalAxiosOptions = nextAxiosOptions;
|
|
59
|
-
finalRequestOptions = nextRequestOptions;
|
|
60
|
-
_y.label = 3;
|
|
61
|
-
case 3:
|
|
62
|
-
_i++;
|
|
63
|
-
return [3 /*break*/, 1];
|
|
64
|
-
case 4:
|
|
65
|
-
method = finalRequestOptions.method, url = finalRequestOptions.url, _g = finalRequestOptions.data, data = _g === void 0 ? {} : _g, _h = finalRequestOptions.params, params = _h === void 0 ? {} : _h;
|
|
66
|
-
requestDataOrParams = params;
|
|
67
|
-
if (method.toLowerCase() === "post") {
|
|
68
|
-
requestDataOrParams = data;
|
|
69
|
-
}
|
|
70
|
-
_j = __assign(__assign(__assign({}, baseOptions), createOptions), options).defaultMessageShower, defaultMessageShower = _j === void 0 ? console.error : _j;
|
|
71
|
-
_k = __assign(__assign(__assign({}, baseOptions), createOptions), options), _l = _k.enableCache, enableCache = _l === void 0 ? false : _l, _m = _k.cacheData, cacheData = _m === void 0 ? false : _m, _o = _k.defaultErrorCodeHandler, defaultErrorCodeHandler = _o === void 0 ? _defaultErrorCodeHandler.bind(null, defaultMessageShower) : _o, _p = _k.defaultHttpErrorCodeHandler, defaultHttpErrorCodeHandler = _p === void 0 ? _defaultHttpErrorCodeHandler.bind(null, defaultMessageShower) : _p, _q = _k.otherErrorHandler, otherErrorHandler = _q === void 0 ? _defaultOtherErrorCodeHandler.bind(null, defaultMessageShower) : _q, _r = _k.errorCodePath, errorCodePath = _r === void 0 ? "code" : _r, _s = _k.cacheTime, cacheTime = _s === void 0 ? 60 : _s, _t = _k.errorCodeMap, errorCodeMap = _t === void 0 ? {} : _t, _u = _k.successCodes, successCodes = _u === void 0 ? ["0", "200"] : _u, _v = _k.httpErrorCodeMap, httpErrorCodeMap = _v === void 0 ? {} : _v, _w = _k.throwError, throwError = _w === void 0 ? true : _w, _x = _k.retryTimes, retryTimes = _x === void 0 ? 0 : _x;
|
|
72
|
-
if (enableCache) {
|
|
73
|
-
cacheItem = cache.getCache(requestDataOrParams);
|
|
74
|
-
if (cacheItem) {
|
|
75
|
-
return [2 /*return*/, Promise.resolve(cacheItem)];
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
return [2 /*return*/, instance
|
|
79
|
-
.request(__assign({ method: method, url: url, data: data, params: params }, finalAxiosOptions))
|
|
80
|
-
.then(function (res) { return __awaiter(_this, void 0, void 0, function () {
|
|
81
|
-
var errorCode, _a, _b, _c, customHandler, err, retryTask, _d, _e, replaceResData, _f, handlerThrowError, _g, retryTask;
|
|
82
|
-
return __generator(this, function (_h) {
|
|
83
|
-
switch (_h.label) {
|
|
84
|
-
case 0:
|
|
85
|
-
errorCode = String(at(res.data, errorCodePath));
|
|
86
|
-
if (successCodes.includes(errorCode)) {
|
|
87
|
-
if (cacheData) {
|
|
88
|
-
cache.setCache(requestDataOrParams, res.data, { cacheTime: cacheTime });
|
|
89
|
-
}
|
|
90
|
-
return [2 /*return*/, res.data];
|
|
91
|
-
}
|
|
92
|
-
_a = errorCodeMap, _b = errorCode, _c = _a[_b], customHandler = _c === void 0 ? defaultErrorCodeHandler : _c;
|
|
93
|
-
err = new RequestError("服务端错误", "server", res);
|
|
94
|
-
if (!(typeof customHandler === "string")) return [3 /*break*/, 1];
|
|
95
|
-
defaultMessageShower(customHandler);
|
|
96
|
-
retryTask = retry();
|
|
97
|
-
if (retryTask)
|
|
98
|
-
return [2 /*return*/, retryTask];
|
|
99
|
-
return [3 /*break*/, 3];
|
|
100
|
-
case 1:
|
|
101
|
-
_g = Object;
|
|
102
|
-
return [4 /*yield*/, customHandler(errorCode, res.data, res, __assign(__assign({}, requestOptions), requestParam))];
|
|
103
|
-
case 2:
|
|
104
|
-
_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;
|
|
105
|
-
retryTask = retry();
|
|
106
|
-
if (retryTask)
|
|
107
|
-
return [2 /*return*/, retryTask];
|
|
108
|
-
res.data = replaceResData;
|
|
109
|
-
switch (handlerThrowError) {
|
|
110
|
-
case true:
|
|
111
|
-
throw err;
|
|
112
|
-
case false:
|
|
113
|
-
return [2 /*return*/, res.data];
|
|
114
|
-
}
|
|
115
|
-
_h.label = 3;
|
|
116
|
-
case 3:
|
|
117
|
-
if (throwError) {
|
|
118
|
-
throw err;
|
|
119
|
-
}
|
|
120
|
-
return [2 /*return*/, res.data];
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
}); }, function (error) { return __awaiter(_this, void 0, void 0, function () {
|
|
124
|
-
var resData, _a, _b, _c, customHandler, err, retryTask, _d, _e, replaceResData, _f, handlerThrowError, _g, retryTask, resData, err, _h, _j, replaceResData, _k, handlerThrowError, _l, retryTask;
|
|
125
|
-
return __generator(this, function (_m) {
|
|
126
|
-
switch (_m.label) {
|
|
127
|
-
case 0:
|
|
128
|
-
if (!error.response) return [3 /*break*/, 4];
|
|
129
|
-
resData = error;
|
|
130
|
-
_a = httpErrorCodeMap, _b = error.response.status, _c = _a[_b], customHandler = _c === void 0 ? defaultHttpErrorCodeHandler : _c;
|
|
131
|
-
err = new RequestError("服务端错误", "http", error);
|
|
132
|
-
if (!(typeof customHandler === "string")) return [3 /*break*/, 1];
|
|
133
|
-
defaultMessageShower(customHandler);
|
|
134
|
-
retryTask = retry();
|
|
135
|
-
if (retryTask)
|
|
136
|
-
return [2 /*return*/, retryTask];
|
|
137
|
-
return [3 /*break*/, 3];
|
|
138
|
-
case 1:
|
|
139
|
-
_g = Object;
|
|
140
|
-
return [4 /*yield*/, customHandler(error.response.status, error, __assign(__assign({}, requestOptions), requestParam))];
|
|
141
|
-
case 2:
|
|
142
|
-
_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;
|
|
143
|
-
retryTask = retry();
|
|
144
|
-
if (retryTask)
|
|
145
|
-
return [2 /*return*/, retryTask];
|
|
146
|
-
resData = replaceResData;
|
|
147
|
-
switch (handlerThrowError) {
|
|
148
|
-
case true:
|
|
149
|
-
throw err;
|
|
150
|
-
case false:
|
|
151
|
-
return [2 /*return*/, resData];
|
|
152
|
-
}
|
|
153
|
-
_m.label = 3;
|
|
154
|
-
case 3:
|
|
155
|
-
if (throwError) {
|
|
156
|
-
throw err;
|
|
157
|
-
}
|
|
158
|
-
return [2 /*return*/, resData];
|
|
159
|
-
case 4:
|
|
160
|
-
resData = error;
|
|
161
|
-
err = new RequestError("服务端错误", "http", error);
|
|
162
|
-
err.type = "http";
|
|
163
|
-
err.data = error;
|
|
164
|
-
_l = Object;
|
|
165
|
-
return [4 /*yield*/, otherErrorHandler(error)];
|
|
166
|
-
case 5:
|
|
167
|
-
_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;
|
|
168
|
-
retryTask = retry();
|
|
169
|
-
if (retryTask)
|
|
170
|
-
return [2 /*return*/, retryTask];
|
|
171
|
-
resData = replaceResData;
|
|
172
|
-
switch (handlerThrowError) {
|
|
173
|
-
case true:
|
|
174
|
-
throw err;
|
|
175
|
-
case false:
|
|
176
|
-
return [2 /*return*/, resData];
|
|
177
|
-
}
|
|
178
|
-
if (throwError) {
|
|
179
|
-
throw err;
|
|
180
|
-
}
|
|
181
|
-
return [2 /*return*/, resData];
|
|
182
|
-
}
|
|
183
|
-
});
|
|
184
|
-
}); })];
|
|
117
|
+
return res.data;
|
|
118
|
+
}, async (error) => {
|
|
119
|
+
if (error.response) {
|
|
120
|
+
// 请求成功发出且服务器也响应了状态码,但状态代码超出了 2xx 的范围
|
|
121
|
+
let resData = error;
|
|
122
|
+
const { [error.response.status]: customHandler = defaultHttpErrorCodeHandler, } = httpErrorCodeMap;
|
|
123
|
+
const err = new RequestError("服务端错误", "http", error);
|
|
124
|
+
if (typeof customHandler === "string") {
|
|
125
|
+
defaultMessageShower(customHandler);
|
|
126
|
+
const retryTask = retry();
|
|
127
|
+
if (retryTask)
|
|
128
|
+
return retryTask;
|
|
185
129
|
}
|
|
186
|
-
|
|
130
|
+
else {
|
|
131
|
+
const { replaceResData = error, throwError: handlerThrowError = "default", } = Object((await customHandler(error.response.status, error, {
|
|
132
|
+
...requestOptions,
|
|
133
|
+
...requestParam,
|
|
134
|
+
})));
|
|
135
|
+
const retryTask = retry();
|
|
136
|
+
if (retryTask)
|
|
137
|
+
return retryTask;
|
|
138
|
+
resData = replaceResData;
|
|
139
|
+
switch (handlerThrowError) {
|
|
140
|
+
case true:
|
|
141
|
+
throw err;
|
|
142
|
+
case false:
|
|
143
|
+
return resData;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (throwError) {
|
|
147
|
+
throw err;
|
|
148
|
+
}
|
|
149
|
+
return resData;
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
let resData = error;
|
|
153
|
+
const err = new RequestError("服务端错误", "http", error);
|
|
154
|
+
err.type = "http";
|
|
155
|
+
err.data = error;
|
|
156
|
+
const { replaceResData = error, throwError: handlerThrowError = "default", } = (Object((await otherErrorHandler(error))));
|
|
157
|
+
const retryTask = retry();
|
|
158
|
+
if (retryTask)
|
|
159
|
+
return retryTask;
|
|
160
|
+
resData = replaceResData;
|
|
161
|
+
switch (handlerThrowError) {
|
|
162
|
+
case true:
|
|
163
|
+
throw err;
|
|
164
|
+
case false:
|
|
165
|
+
return resData;
|
|
166
|
+
}
|
|
167
|
+
if (throwError) {
|
|
168
|
+
throw err;
|
|
169
|
+
}
|
|
170
|
+
return resData;
|
|
171
|
+
}
|
|
187
172
|
});
|
|
188
173
|
}
|
|
189
|
-
request.clearCache =
|
|
174
|
+
request.clearCache = () => {
|
|
190
175
|
cache.clear();
|
|
191
176
|
};
|
|
192
177
|
return request;
|
|
@@ -7,11 +7,11 @@ import { useMemo } from 'react';
|
|
|
7
7
|
* @param getterNameMaps 将 getter 函数和 getter 名称一一映射
|
|
8
8
|
* @returns getter object
|
|
9
9
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
Object.keys(getters).forEach(
|
|
10
|
+
const createStoreGetter = (store, getters, getterNameMaps) => {
|
|
11
|
+
const gettersObj = {};
|
|
12
|
+
Object.keys(getters).forEach((key) => {
|
|
13
13
|
Object.defineProperty(gettersObj, getterNameMaps[key], {
|
|
14
|
-
get:
|
|
14
|
+
get: () => getters[key](store.get())
|
|
15
15
|
});
|
|
16
16
|
});
|
|
17
17
|
return gettersObj;
|
|
@@ -23,14 +23,14 @@ var createStoreGetter = function (store, getters, getterNameMaps) {
|
|
|
23
23
|
* @param getterNameMaps 将 getter 函数和 getter 名称一一映射
|
|
24
24
|
* @returns getter memo hook
|
|
25
25
|
*/
|
|
26
|
-
|
|
26
|
+
const createStoreGetterMemo = (store, getters, getterNameMaps) => {
|
|
27
27
|
// 创建缓存数据 hook
|
|
28
|
-
return
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return Object.keys(getters).reduce(
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
return () => {
|
|
29
|
+
const [storeData] = store.use();
|
|
30
|
+
const reducedData = useMemo(() => {
|
|
31
|
+
return Object.keys(getters).reduce((acc, key) => {
|
|
32
|
+
const mappedKey = getterNameMaps[key];
|
|
33
|
+
const getterValue = getters[key](storeData);
|
|
34
34
|
acc[mappedKey] = getterValue;
|
|
35
35
|
return acc;
|
|
36
36
|
}, {});
|