rxtutils 1.0.8 → 1.0.9

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.
@@ -7,14 +7,21 @@ var moment = require('moment');
7
7
  var indexDB = require('./indexDB.cjs');
8
8
  var defaultEquals = require('../defaultEquals.cjs');
9
9
 
10
+ /** 存储类型映射表 */
10
11
  var StorageMap = {
11
12
  localStorage: localStorage,
12
13
  sessionStorage: sessionStorage,
13
14
  };
15
+ /**
16
+ * 缓存类
17
+ * @template Param 缓存参数类型
18
+ * @template Data 缓存数据类型
19
+ */
14
20
  var Cache = /** @class */ (function () {
15
21
  function Cache(cacheType, cacheKey, cacheTime, indexDBName, cacheKeyEquals) {
16
22
  if (indexDBName === void 0) { indexDBName = '__apiCacheDatabase__'; }
17
23
  if (cacheKeyEquals === void 0) { cacheKeyEquals = defaultEquals; }
24
+ /** 内存中的缓存数组 */
18
25
  this.cache = [];
19
26
  this.cacheOptions = {
20
27
  storageType: cacheType,
@@ -31,6 +38,11 @@ var Cache = /** @class */ (function () {
31
38
  }
32
39
  this._init();
33
40
  }
41
+ /**
42
+ * 初始化缓存
43
+ * 从存储中加载已保存的缓存数据,并进行解析和过期处理
44
+ * @private
45
+ */
34
46
  Cache.prototype._init = function () {
35
47
  return tslib_es6_js.__awaiter(this, void 0, void 0, function () {
36
48
  var _a, cacheType, cacheKey, _b, _c, _d;
@@ -68,20 +80,33 @@ var Cache = /** @class */ (function () {
68
80
  }
69
81
  });
70
82
  });
71
- };
83
+ }; /**
84
+ * 过滤掉已过期的缓存项
85
+ * 通过比较当前时间和过期时间,移除过期的缓存项
86
+ * @private
87
+ */
72
88
  Cache.prototype._filterExpired = function () {
73
89
  var newCache = this.cache.filter(function (item) {
74
90
  return moment(item.expireTime).isAfter(moment());
75
91
  });
76
92
  this.cache = newCache;
77
- };
93
+ }; /**
94
+ * 将当前缓存数据保存到存储中
95
+ * 如果设置了缓存键名且存储实例存在,则将缓存数据序列化后保存
96
+ * @private
97
+ */
78
98
  Cache.prototype._saveToStorage = function () {
79
99
  if (this.storage) {
80
100
  if (typeof this.cacheOptions.cacheKey === 'string') {
81
101
  this.storage.setItem(this.cacheOptions.cacheKey, JSON.stringify(this.cache));
82
102
  }
83
103
  }
84
- };
104
+ }; /**
105
+ * 设置缓存数据
106
+ * @param params 缓存的参数
107
+ * @param data 要缓存的数据
108
+ * @param cacheOptions 可选的缓存配置,可以覆盖默认的缓存时间
109
+ */
85
110
  Cache.prototype.setCache = function (params, data, cacheOptions) {
86
111
  var _a = tslib_es6_js.__assign(tslib_es6_js.__assign({}, this.cacheOptions), cacheOptions), cacheTime = _a.cacheTime, _b = _a.cacheKeyEquals, cacheKeyEquals = _b === void 0 ? defaultEquals : _b;
87
112
  var cacheItemIndex = this.cache.findIndex(function (item) {
@@ -96,10 +121,13 @@ var Cache = /** @class */ (function () {
96
121
  expireTime: moment().add(cacheTime, 'seconds').toJSON(),
97
122
  });
98
123
  this._saveToStorage();
99
- };
124
+ }; /**
125
+ * 获取缓存数据
126
+ * @param params 查询参数
127
+ * @returns 如果找到有效的缓存数据则返回数据,否则返回 null
128
+ */
100
129
  Cache.prototype.getCache = function (params) {
101
130
  var _this = this;
102
- // debugger;
103
131
  var itemIndex = this.cache.findIndex(function (item) {
104
132
  return _this.cacheOptions.cacheKeyEquals(item.params, params);
105
133
  });
@@ -114,7 +142,10 @@ var Cache = /** @class */ (function () {
114
142
  }
115
143
  }
116
144
  return null;
117
- };
145
+ }; /**
146
+ * 清空所有缓存数据
147
+ * 清空内存中的缓存数组并同步到存储中
148
+ */
118
149
  Cache.prototype.clear = function () {
119
150
  this.cache = [];
120
151
  this._saveToStorage();
@@ -1,13 +1,27 @@
1
1
  'use strict';
2
2
 
3
- // IndexedDB的简易封装类
3
+ /**
4
+ * IndexedDB 存储类
5
+ * 提供了对 IndexedDB 数据库操作的简单封装
6
+ */
4
7
  var IndexedDBStorage = /** @class */ (function () {
8
+ /**
9
+ * 构造函数
10
+ * @param dbName 数据库名称
11
+ * @param storeName 存储对象名称
12
+ */
5
13
  function IndexedDBStorage(dbName, storeName) {
14
+ /** 数据库连接实例 */
6
15
  this.db = null;
7
16
  this.dbName = dbName;
8
17
  this.storeName = storeName;
9
18
  }
10
- // 打开数据库连接
19
+ /**
20
+ * 打开数据库连接
21
+ * 如果数据库不存在则创建新的数据库和存储对象
22
+ * @private
23
+ * @returns Promise<IDBDatabase> 数据库连接实例
24
+ */
11
25
  IndexedDBStorage.prototype._open = function () {
12
26
  var _this = this;
13
27
  return new Promise(function (resolve, reject) {
@@ -30,7 +44,14 @@ var IndexedDBStorage = /** @class */ (function () {
30
44
  };
31
45
  });
32
46
  };
33
- // 获取存储对象
47
+ /**
48
+ * 获取存储对象
49
+ * @param mode 事务模式,默认为只读模式
50
+ * - readonly: 只读模式
51
+ * - readwrite: 读写模式
52
+ * @private
53
+ * @returns Promise<IDBObjectStore> 存储对象实例
54
+ */
34
55
  IndexedDBStorage.prototype._getStore = function (mode) {
35
56
  var _this = this;
36
57
  if (mode === void 0) { mode = 'readonly'; }
@@ -39,7 +60,13 @@ var IndexedDBStorage = /** @class */ (function () {
39
60
  return transaction.objectStore(_this.storeName);
40
61
  });
41
62
  };
42
- // 设置键值对
63
+ /**
64
+ * 设置键值对
65
+ * @param key 键名
66
+ * @param value 要存储的值
67
+ * @returns Promise<void> 存储操作的结果
68
+ * @throws 当存储操作失败时抛出错误
69
+ */
43
70
  IndexedDBStorage.prototype.setItem = function (key, value) {
44
71
  return this._getStore('readwrite').then(function (store) {
45
72
  return new Promise(function (resolve, reject) {
@@ -49,7 +76,13 @@ var IndexedDBStorage = /** @class */ (function () {
49
76
  });
50
77
  });
51
78
  };
52
- // 获取键对应的值
79
+ /**
80
+ * 获取键对应的值
81
+ * @param key 要获取的键名
82
+ * @returns Promise<T> 返回存储的值,如果不存在则返回 undefined
83
+ * @throws 当获取操作失败时抛出错误
84
+ * @template T 存储值的类型,默认为 any
85
+ */
53
86
  IndexedDBStorage.prototype.getItem = function (key) {
54
87
  return this._getStore().then(function (store) {
55
88
  return new Promise(function (resolve, reject) {
@@ -12,12 +12,33 @@ function resolveHookState(nextState, currentState) {
12
12
  }
13
13
  return nextState;
14
14
  }
15
+ /** 判断当前环境是否为浏览器 */
15
16
  var isBrowser = typeof window !== 'undefined';
17
+ /**
18
+ * 只执行一次的 useEffect hook
19
+ * @param effect 要执行的副作用函数
20
+ */
16
21
  var useEffectOnce = function (effect) {
17
22
  react.useEffect(effect, []);
18
23
  };
24
+ /**
25
+ * 同构的 useLayoutEffect
26
+ * 在服务端渲染时使用 useEffect,在浏览器环境使用 useLayoutEffect
27
+ */
19
28
  var useIsomorphicLayoutEffect = isBrowser ? react.useLayoutEffect : react.useEffect;
29
+ /**
30
+ * 创建状态存储
31
+ * 提供一个简单的状态管理解决方案,支持组件间状态共享
32
+ *
33
+ * @template S 状态类型
34
+ * @param initialState 初始状态值或初始化函数
35
+ * @returns 包含状态操作方法的对象
36
+ */
20
37
  function createStateStore(initialState) {
38
+ /**
39
+ * 状态存储对象
40
+ * 包含当前状态、设置状态的方法、状态更新器和监听器列表
41
+ */
21
42
  var store = {
22
43
  state: initialState instanceof Function ? initialState() : initialState,
23
44
  setState: function (nextState) {
@@ -28,11 +49,20 @@ function createStateStore(initialState) {
28
49
  setters: [],
29
50
  watchers: [],
30
51
  };
52
+ /**
53
+ * 使用状态的 Hook
54
+ * 返回当前状态和更新状态的函数
55
+ *
56
+ * @returns [当前状态, 状态更新函数]
57
+ */
31
58
  var use = function () {
59
+ // 使用 React 的 useState 创建组件本地状态
32
60
  var _a = react.useState(store.state), globalState = _a[0], stateSetter = _a[1];
61
+ // 组件卸载时清理状态更新器
33
62
  useEffectOnce(function () { return function () {
34
63
  store.setters = store.setters.filter(function (setter) { return setter !== stateSetter; });
35
64
  }; });
65
+ // 在组件挂载和更新时注册状态更新器
36
66
  useIsomorphicLayoutEffect(function () {
37
67
  if (!store.setters.includes(stateSetter)) {
38
68
  store.setters.push(stateSetter);
@@ -40,8 +70,15 @@ function createStateStore(initialState) {
40
70
  });
41
71
  return [globalState, store.setState];
42
72
  };
73
+ /** 获取当前状态值 */
43
74
  var get = function () { return store.state; };
75
+ /** 设置状态的函数引用 */
44
76
  var set = store.setState;
77
+ /**
78
+ * 监听状态变化
79
+ * @param callback 状态变化时的回调函数
80
+ * @returns 取消监听的函数
81
+ */
45
82
  var watch = function (callback) {
46
83
  store.watchers.push(callback);
47
84
  var close = function () {
@@ -1,5 +1,19 @@
1
1
  'use strict';
2
2
 
3
+ /**
4
+ * 默认的相等性比较函数
5
+ * 通过将两个值序列化为 JSON 字符串来比较它们是否相等
6
+ *
7
+ * @template Param 比较值的类型,默认为 any
8
+ * @param prev 前一个值
9
+ * @param next 后一个值
10
+ * @returns {boolean} 如果两个值相等则返回 true,否则返回 false
11
+ *
12
+ * @remarks
13
+ * - 这个函数通过 JSON.stringify 进行比较,适用于大多数简单的数据结构
14
+ * - 不适用于包含函数、undefined、Symbol 等无法序列化的值
15
+ * - 对于循环引用的对象会抛出错误
16
+ */
3
17
  function defaultEquals(prev, next) {
4
18
  return JSON.stringify(prev) === JSON.stringify(next);
5
19
  }
@@ -1,11 +1,32 @@
1
1
  'use strict';
2
2
 
3
+ /**
4
+ * 默认业务错误码处理函数
5
+ * 用于处理业务错误码的默认行为
6
+ *
7
+ * @param defaultMessageShower 消息展示函数
8
+ * @param code 业务错误码
9
+ */
3
10
  function _defaultErrorCodeHandler(defaultMessageShower, code) {
4
11
  defaultMessageShower("\u8BF7\u6C42\u51FA\u9519\uFF0C\u9519\u8BEF\u7801\uFF1A".concat(code, "\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5"));
5
12
  }
13
+ /**
14
+ * 默认 HTTP 错误码处理函数
15
+ * 用于处理 HTTP 状态码错误的默认行为
16
+ *
17
+ * @param defaultMessageShower 消息展示函数
18
+ * @param code HTTP 状态码
19
+ */
6
20
  function _defaultHttpErrorCodeHandler(defaultMessageShower, code) {
7
21
  defaultMessageShower("\u670D\u52A1\u7AEF\u8BF7\u6C42\u51FA\u9519\uFF0CHttp\u9519\u8BEF\u7801\uFF1A".concat(String(code), "\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5"));
8
22
  }
23
+ /**
24
+ * 默认其他错误处理函数
25
+ * 用于处理未知错误或非标准错误的默认行为
26
+ *
27
+ * @param defaultMessageShower 消息展示函数
28
+ * @param error 错误对象
29
+ */
9
30
  function _defaultOtherErrorCodeHandler(defaultMessageShower, error) {
10
31
  defaultMessageShower("\u672A\u77E5\u8BF7\u6C42\u51FA\u9519\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5");
11
32
  }
@@ -2,8 +2,21 @@
2
2
 
3
3
  var tslib_es6_js = require('C:\\Users\\ruixutong\\code\\RUtils\\node_modules\\tslib\\tslib.es6.js');
4
4
 
5
+ /**
6
+ * 请求错误类
7
+ * 用于统一处理请求过程中的各种错误
8
+ *
9
+ * @template Data 错误数据类型
10
+ * @extends Error
11
+ */
5
12
  var RequestError = /** @class */ (function (_super) {
6
13
  tslib_es6_js.__extends(RequestError, _super);
14
+ /**
15
+ * 构造函数
16
+ * @param message 错误消息
17
+ * @param type 错误类型
18
+ * @param data 错误相关的数据
19
+ */
7
20
  function RequestError(message, type, data) {
8
21
  var _this = _super.call(this, message) || this;
9
22
  _this.name = 'RequestError';
@@ -8,23 +8,40 @@ var defaultEquals = require('../defaultEquals.cjs');
8
8
  var index = require('../cache/index.cjs');
9
9
  var error = require('./error.cjs');
10
10
 
11
+ /**
12
+ * 创建基础请求实例
13
+ * @param baseOptions 基础配置选项
14
+ * @returns 请求创建函数
15
+ */
11
16
  function createBaseRequest(baseOptions) {
12
17
  var baseURL = Object(baseOptions).baseURL;
13
- // 创建新的 Axios 实例
18
+ // 创建新的 Axios 实例并配置基础URL和跨域凭证
14
19
  var instance = axios.create({
15
20
  baseURL: baseURL,
16
21
  withCredentials: true,
17
22
  });
23
+ /**
24
+ * 创建请求函数
25
+ * @template Param 请求参数类型
26
+ * @template Data 响应数据类型,必须是对象类型
27
+ * @param requestOptions 请求配置
28
+ * @param createOptions 创建选项(覆盖基础配置)
29
+ * @returns 发送请求的函数
30
+ */
18
31
  return function createRequest(requestOptions, createOptions) {
19
32
  var _a = tslib_es6_js.__assign({}, requestOptions), method = _a.method, url = _a.url;
20
33
  var _b = tslib_es6_js.__assign(tslib_es6_js.__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;
21
34
  var cache = new index.default(cacheDataInStorage, cacheDataKey, cacheTime, indexDBName, cacheKeyEquals);
22
35
  function request(requestParam, options) {
23
36
  var _a = tslib_es6_js.__assign(tslib_es6_js.__assign({}, requestOptions), requestParam), method = _a.method, url = _a.url, _b = _a.data, data = _b === void 0 ? {} : _b, _c = _a.params, params = _c === void 0 ? {} : _c;
37
+ var requestDataOrParams = params;
38
+ if (method.toLowerCase() === 'post') {
39
+ requestDataOrParams = data;
40
+ }
24
41
  var _d = tslib_es6_js.__assign(tslib_es6_js.__assign(tslib_es6_js.__assign({}, baseOptions), createOptions), options).defaultMessageShower, defaultMessageShower = _d === void 0 ? alert : _d;
25
42
  var _e = tslib_es6_js.__assign(tslib_es6_js.__assign(tslib_es6_js.__assign({}, baseOptions), createOptions), options), _f = _e.enableCache, enableCache = _f === void 0 ? false : _f, _g = _e.cacheData, cacheData = _g === void 0 ? false : _g, _h = _e.defaultErrorCodeHandler, defaultErrorCodeHandler = _h === void 0 ? defaultHandlers._defaultErrorCodeHandler.bind(null, defaultMessageShower) : _h, _j = _e.defaultHttpErrorCodeHandler, defaultHttpErrorCodeHandler = _j === void 0 ? defaultHandlers._defaultHttpErrorCodeHandler.bind(null, defaultMessageShower) : _j, _k = _e.otherErrorHandler, otherErrorHandler = _k === void 0 ? defaultHandlers._defaultOtherErrorCodeHandler.bind(null, defaultMessageShower) : _k, _l = _e.errorCodePath, errorCodePath = _l === void 0 ? 'code' : _l, _m = _e.cacheTime, cacheTime = _m === void 0 ? 60 : _m, _o = _e.errorCodeMap, errorCodeMap = _o === void 0 ? {} : _o, _p = _e.successCodes, successCodes = _p === void 0 ? ['0', '200'] : _p, _q = _e.httpErrorCodeMap, httpErrorCodeMap = _q === void 0 ? {} : _q, _r = _e.axiosOptions, axiosOptions = _r === void 0 ? {} : _r, _s = _e.throwError, throwError = _s === void 0 ? true : _s;
26
43
  if (enableCache) {
27
- var cacheItem = cache.getCache(params);
44
+ var cacheItem = cache.getCache(requestDataOrParams);
28
45
  if (cacheItem) {
29
46
  return Promise.resolve(cacheItem);
30
47
  }
@@ -35,7 +52,7 @@ function createBaseRequest(baseOptions) {
35
52
  var errorCode = String(lodash.at(res.data, errorCodePath));
36
53
  if (successCodes.includes(errorCode)) {
37
54
  if (cacheData) {
38
- cache.setCache(params, res.data, { cacheTime: cacheTime });
55
+ cache.setCache(requestDataOrParams, res.data, { cacheTime: cacheTime });
39
56
  }
40
57
  return res.data;
41
58
  }
@@ -3,14 +3,21 @@ import moment from 'moment';
3
3
  import { IndexedDBStorage } from './indexDB.mjs';
4
4
  import defaultEquals from '../defaultEquals.mjs';
5
5
 
6
+ /** 存储类型映射表 */
6
7
  var StorageMap = {
7
8
  localStorage: localStorage,
8
9
  sessionStorage: sessionStorage,
9
10
  };
11
+ /**
12
+ * 缓存类
13
+ * @template Param 缓存参数类型
14
+ * @template Data 缓存数据类型
15
+ */
10
16
  var Cache = /** @class */ (function () {
11
17
  function Cache(cacheType, cacheKey, cacheTime, indexDBName, cacheKeyEquals) {
12
18
  if (indexDBName === void 0) { indexDBName = '__apiCacheDatabase__'; }
13
19
  if (cacheKeyEquals === void 0) { cacheKeyEquals = defaultEquals; }
20
+ /** 内存中的缓存数组 */
14
21
  this.cache = [];
15
22
  this.cacheOptions = {
16
23
  storageType: cacheType,
@@ -27,6 +34,11 @@ var Cache = /** @class */ (function () {
27
34
  }
28
35
  this._init();
29
36
  }
37
+ /**
38
+ * 初始化缓存
39
+ * 从存储中加载已保存的缓存数据,并进行解析和过期处理
40
+ * @private
41
+ */
30
42
  Cache.prototype._init = function () {
31
43
  return __awaiter(this, void 0, void 0, function () {
32
44
  var _a, cacheType, cacheKey, _b, _c, _d;
@@ -64,20 +76,33 @@ var Cache = /** @class */ (function () {
64
76
  }
65
77
  });
66
78
  });
67
- };
79
+ }; /**
80
+ * 过滤掉已过期的缓存项
81
+ * 通过比较当前时间和过期时间,移除过期的缓存项
82
+ * @private
83
+ */
68
84
  Cache.prototype._filterExpired = function () {
69
85
  var newCache = this.cache.filter(function (item) {
70
86
  return moment(item.expireTime).isAfter(moment());
71
87
  });
72
88
  this.cache = newCache;
73
- };
89
+ }; /**
90
+ * 将当前缓存数据保存到存储中
91
+ * 如果设置了缓存键名且存储实例存在,则将缓存数据序列化后保存
92
+ * @private
93
+ */
74
94
  Cache.prototype._saveToStorage = function () {
75
95
  if (this.storage) {
76
96
  if (typeof this.cacheOptions.cacheKey === 'string') {
77
97
  this.storage.setItem(this.cacheOptions.cacheKey, JSON.stringify(this.cache));
78
98
  }
79
99
  }
80
- };
100
+ }; /**
101
+ * 设置缓存数据
102
+ * @param params 缓存的参数
103
+ * @param data 要缓存的数据
104
+ * @param cacheOptions 可选的缓存配置,可以覆盖默认的缓存时间
105
+ */
81
106
  Cache.prototype.setCache = function (params, data, cacheOptions) {
82
107
  var _a = __assign(__assign({}, this.cacheOptions), cacheOptions), cacheTime = _a.cacheTime, _b = _a.cacheKeyEquals, cacheKeyEquals = _b === void 0 ? defaultEquals : _b;
83
108
  var cacheItemIndex = this.cache.findIndex(function (item) {
@@ -92,10 +117,13 @@ var Cache = /** @class */ (function () {
92
117
  expireTime: moment().add(cacheTime, 'seconds').toJSON(),
93
118
  });
94
119
  this._saveToStorage();
95
- };
120
+ }; /**
121
+ * 获取缓存数据
122
+ * @param params 查询参数
123
+ * @returns 如果找到有效的缓存数据则返回数据,否则返回 null
124
+ */
96
125
  Cache.prototype.getCache = function (params) {
97
126
  var _this = this;
98
- // debugger;
99
127
  var itemIndex = this.cache.findIndex(function (item) {
100
128
  return _this.cacheOptions.cacheKeyEquals(item.params, params);
101
129
  });
@@ -110,7 +138,10 @@ var Cache = /** @class */ (function () {
110
138
  }
111
139
  }
112
140
  return null;
113
- };
141
+ }; /**
142
+ * 清空所有缓存数据
143
+ * 清空内存中的缓存数组并同步到存储中
144
+ */
114
145
  Cache.prototype.clear = function () {
115
146
  this.cache = [];
116
147
  this._saveToStorage();
@@ -1,11 +1,25 @@
1
- // IndexedDB的简易封装类
1
+ /**
2
+ * IndexedDB 存储类
3
+ * 提供了对 IndexedDB 数据库操作的简单封装
4
+ */
2
5
  var IndexedDBStorage = /** @class */ (function () {
6
+ /**
7
+ * 构造函数
8
+ * @param dbName 数据库名称
9
+ * @param storeName 存储对象名称
10
+ */
3
11
  function IndexedDBStorage(dbName, storeName) {
12
+ /** 数据库连接实例 */
4
13
  this.db = null;
5
14
  this.dbName = dbName;
6
15
  this.storeName = storeName;
7
16
  }
8
- // 打开数据库连接
17
+ /**
18
+ * 打开数据库连接
19
+ * 如果数据库不存在则创建新的数据库和存储对象
20
+ * @private
21
+ * @returns Promise<IDBDatabase> 数据库连接实例
22
+ */
9
23
  IndexedDBStorage.prototype._open = function () {
10
24
  var _this = this;
11
25
  return new Promise(function (resolve, reject) {
@@ -28,7 +42,14 @@ var IndexedDBStorage = /** @class */ (function () {
28
42
  };
29
43
  });
30
44
  };
31
- // 获取存储对象
45
+ /**
46
+ * 获取存储对象
47
+ * @param mode 事务模式,默认为只读模式
48
+ * - readonly: 只读模式
49
+ * - readwrite: 读写模式
50
+ * @private
51
+ * @returns Promise<IDBObjectStore> 存储对象实例
52
+ */
32
53
  IndexedDBStorage.prototype._getStore = function (mode) {
33
54
  var _this = this;
34
55
  if (mode === void 0) { mode = 'readonly'; }
@@ -37,7 +58,13 @@ var IndexedDBStorage = /** @class */ (function () {
37
58
  return transaction.objectStore(_this.storeName);
38
59
  });
39
60
  };
40
- // 设置键值对
61
+ /**
62
+ * 设置键值对
63
+ * @param key 键名
64
+ * @param value 要存储的值
65
+ * @returns Promise<void> 存储操作的结果
66
+ * @throws 当存储操作失败时抛出错误
67
+ */
41
68
  IndexedDBStorage.prototype.setItem = function (key, value) {
42
69
  return this._getStore('readwrite').then(function (store) {
43
70
  return new Promise(function (resolve, reject) {
@@ -47,7 +74,13 @@ var IndexedDBStorage = /** @class */ (function () {
47
74
  });
48
75
  });
49
76
  };
50
- // 获取键对应的值
77
+ /**
78
+ * 获取键对应的值
79
+ * @param key 要获取的键名
80
+ * @returns Promise<T> 返回存储的值,如果不存在则返回 undefined
81
+ * @throws 当获取操作失败时抛出错误
82
+ * @template T 存储值的类型,默认为 any
83
+ */
51
84
  IndexedDBStorage.prototype.getItem = function (key) {
52
85
  return this._getStore().then(function (store) {
53
86
  return new Promise(function (resolve, reject) {
@@ -8,12 +8,33 @@ function resolveHookState(nextState, currentState) {
8
8
  }
9
9
  return nextState;
10
10
  }
11
+ /** 判断当前环境是否为浏览器 */
11
12
  var isBrowser = typeof window !== 'undefined';
13
+ /**
14
+ * 只执行一次的 useEffect hook
15
+ * @param effect 要执行的副作用函数
16
+ */
12
17
  var useEffectOnce = function (effect) {
13
18
  useEffect(effect, []);
14
19
  };
20
+ /**
21
+ * 同构的 useLayoutEffect
22
+ * 在服务端渲染时使用 useEffect,在浏览器环境使用 useLayoutEffect
23
+ */
15
24
  var useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;
25
+ /**
26
+ * 创建状态存储
27
+ * 提供一个简单的状态管理解决方案,支持组件间状态共享
28
+ *
29
+ * @template S 状态类型
30
+ * @param initialState 初始状态值或初始化函数
31
+ * @returns 包含状态操作方法的对象
32
+ */
16
33
  function createStateStore(initialState) {
34
+ /**
35
+ * 状态存储对象
36
+ * 包含当前状态、设置状态的方法、状态更新器和监听器列表
37
+ */
17
38
  var store = {
18
39
  state: initialState instanceof Function ? initialState() : initialState,
19
40
  setState: function (nextState) {
@@ -24,11 +45,20 @@ function createStateStore(initialState) {
24
45
  setters: [],
25
46
  watchers: [],
26
47
  };
48
+ /**
49
+ * 使用状态的 Hook
50
+ * 返回当前状态和更新状态的函数
51
+ *
52
+ * @returns [当前状态, 状态更新函数]
53
+ */
27
54
  var use = function () {
55
+ // 使用 React 的 useState 创建组件本地状态
28
56
  var _a = useState(store.state), globalState = _a[0], stateSetter = _a[1];
57
+ // 组件卸载时清理状态更新器
29
58
  useEffectOnce(function () { return function () {
30
59
  store.setters = store.setters.filter(function (setter) { return setter !== stateSetter; });
31
60
  }; });
61
+ // 在组件挂载和更新时注册状态更新器
32
62
  useIsomorphicLayoutEffect(function () {
33
63
  if (!store.setters.includes(stateSetter)) {
34
64
  store.setters.push(stateSetter);
@@ -36,8 +66,15 @@ function createStateStore(initialState) {
36
66
  });
37
67
  return [globalState, store.setState];
38
68
  };
69
+ /** 获取当前状态值 */
39
70
  var get = function () { return store.state; };
71
+ /** 设置状态的函数引用 */
40
72
  var set = store.setState;
73
+ /**
74
+ * 监听状态变化
75
+ * @param callback 状态变化时的回调函数
76
+ * @returns 取消监听的函数
77
+ */
41
78
  var watch = function (callback) {
42
79
  store.watchers.push(callback);
43
80
  var close = function () {
@@ -1,3 +1,17 @@
1
+ /**
2
+ * 默认的相等性比较函数
3
+ * 通过将两个值序列化为 JSON 字符串来比较它们是否相等
4
+ *
5
+ * @template Param 比较值的类型,默认为 any
6
+ * @param prev 前一个值
7
+ * @param next 后一个值
8
+ * @returns {boolean} 如果两个值相等则返回 true,否则返回 false
9
+ *
10
+ * @remarks
11
+ * - 这个函数通过 JSON.stringify 进行比较,适用于大多数简单的数据结构
12
+ * - 不适用于包含函数、undefined、Symbol 等无法序列化的值
13
+ * - 对于循环引用的对象会抛出错误
14
+ */
1
15
  function defaultEquals(prev, next) {
2
16
  return JSON.stringify(prev) === JSON.stringify(next);
3
17
  }
@@ -1,9 +1,30 @@
1
+ /**
2
+ * 默认业务错误码处理函数
3
+ * 用于处理业务错误码的默认行为
4
+ *
5
+ * @param defaultMessageShower 消息展示函数
6
+ * @param code 业务错误码
7
+ */
1
8
  function _defaultErrorCodeHandler(defaultMessageShower, code) {
2
9
  defaultMessageShower("\u8BF7\u6C42\u51FA\u9519\uFF0C\u9519\u8BEF\u7801\uFF1A".concat(code, "\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5"));
3
10
  }
11
+ /**
12
+ * 默认 HTTP 错误码处理函数
13
+ * 用于处理 HTTP 状态码错误的默认行为
14
+ *
15
+ * @param defaultMessageShower 消息展示函数
16
+ * @param code HTTP 状态码
17
+ */
4
18
  function _defaultHttpErrorCodeHandler(defaultMessageShower, code) {
5
19
  defaultMessageShower("\u670D\u52A1\u7AEF\u8BF7\u6C42\u51FA\u9519\uFF0CHttp\u9519\u8BEF\u7801\uFF1A".concat(String(code), "\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5"));
6
20
  }
21
+ /**
22
+ * 默认其他错误处理函数
23
+ * 用于处理未知错误或非标准错误的默认行为
24
+ *
25
+ * @param defaultMessageShower 消息展示函数
26
+ * @param error 错误对象
27
+ */
7
28
  function _defaultOtherErrorCodeHandler(defaultMessageShower, error) {
8
29
  defaultMessageShower("\u672A\u77E5\u8BF7\u6C42\u51FA\u9519\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5");
9
30
  }
@@ -1,7 +1,20 @@
1
1
  import { __extends } from 'C:\\Users\\ruixutong\\code\\RUtils\\node_modules\\tslib\\tslib.es6.js';
2
2
 
3
+ /**
4
+ * 请求错误类
5
+ * 用于统一处理请求过程中的各种错误
6
+ *
7
+ * @template Data 错误数据类型
8
+ * @extends Error
9
+ */
3
10
  var RequestError = /** @class */ (function (_super) {
4
11
  __extends(RequestError, _super);
12
+ /**
13
+ * 构造函数
14
+ * @param message 错误消息
15
+ * @param type 错误类型
16
+ * @param data 错误相关的数据
17
+ */
5
18
  function RequestError(message, type, data) {
6
19
  var _this = _super.call(this, message) || this;
7
20
  _this.name = 'RequestError';
@@ -6,23 +6,40 @@ import defaultEquals from '../defaultEquals.mjs';
6
6
  import Cache from '../cache/index.mjs';
7
7
  import RequestError from './error.mjs';
8
8
 
9
+ /**
10
+ * 创建基础请求实例
11
+ * @param baseOptions 基础配置选项
12
+ * @returns 请求创建函数
13
+ */
9
14
  function createBaseRequest(baseOptions) {
10
15
  var baseURL = Object(baseOptions).baseURL;
11
- // 创建新的 Axios 实例
16
+ // 创建新的 Axios 实例并配置基础URL和跨域凭证
12
17
  var instance = axios.create({
13
18
  baseURL: baseURL,
14
19
  withCredentials: true,
15
20
  });
21
+ /**
22
+ * 创建请求函数
23
+ * @template Param 请求参数类型
24
+ * @template Data 响应数据类型,必须是对象类型
25
+ * @param requestOptions 请求配置
26
+ * @param createOptions 创建选项(覆盖基础配置)
27
+ * @returns 发送请求的函数
28
+ */
16
29
  return function createRequest(requestOptions, createOptions) {
17
30
  var _a = __assign({}, requestOptions), method = _a.method, url = _a.url;
18
31
  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;
19
32
  var cache = new Cache(cacheDataInStorage, cacheDataKey, cacheTime, indexDBName, cacheKeyEquals);
20
33
  function request(requestParam, options) {
21
34
  var _a = __assign(__assign({}, requestOptions), requestParam), method = _a.method, url = _a.url, _b = _a.data, data = _b === void 0 ? {} : _b, _c = _a.params, params = _c === void 0 ? {} : _c;
35
+ var requestDataOrParams = params;
36
+ if (method.toLowerCase() === 'post') {
37
+ requestDataOrParams = data;
38
+ }
22
39
  var _d = __assign(__assign(__assign({}, baseOptions), createOptions), options).defaultMessageShower, defaultMessageShower = _d === void 0 ? alert : _d;
23
40
  var _e = __assign(__assign(__assign({}, baseOptions), createOptions), options), _f = _e.enableCache, enableCache = _f === void 0 ? false : _f, _g = _e.cacheData, cacheData = _g === void 0 ? false : _g, _h = _e.defaultErrorCodeHandler, defaultErrorCodeHandler = _h === void 0 ? _defaultErrorCodeHandler.bind(null, defaultMessageShower) : _h, _j = _e.defaultHttpErrorCodeHandler, defaultHttpErrorCodeHandler = _j === void 0 ? _defaultHttpErrorCodeHandler.bind(null, defaultMessageShower) : _j, _k = _e.otherErrorHandler, otherErrorHandler = _k === void 0 ? _defaultOtherErrorCodeHandler.bind(null, defaultMessageShower) : _k, _l = _e.errorCodePath, errorCodePath = _l === void 0 ? 'code' : _l, _m = _e.cacheTime, cacheTime = _m === void 0 ? 60 : _m, _o = _e.errorCodeMap, errorCodeMap = _o === void 0 ? {} : _o, _p = _e.successCodes, successCodes = _p === void 0 ? ['0', '200'] : _p, _q = _e.httpErrorCodeMap, httpErrorCodeMap = _q === void 0 ? {} : _q, _r = _e.axiosOptions, axiosOptions = _r === void 0 ? {} : _r, _s = _e.throwError, throwError = _s === void 0 ? true : _s;
24
41
  if (enableCache) {
25
- var cacheItem = cache.getCache(params);
42
+ var cacheItem = cache.getCache(requestDataOrParams);
26
43
  if (cacheItem) {
27
44
  return Promise.resolve(cacheItem);
28
45
  }
@@ -33,7 +50,7 @@ function createBaseRequest(baseOptions) {
33
50
  var errorCode = String(at(res.data, errorCodePath));
34
51
  if (successCodes.includes(errorCode)) {
35
52
  if (cacheData) {
36
- cache.setCache(params, res.data, { cacheTime: cacheTime });
53
+ cache.setCache(requestDataOrParams, res.data, { cacheTime: cacheTime });
37
54
  }
38
55
  return res.data;
39
56
  }
@@ -1,29 +1,133 @@
1
1
  import { IndexedDBStorage } from './indexDB.js';
2
2
 
3
+ /**
4
+ * 缓存存储类型
5
+ * - sessionStorage: 会话存储,浏览器关闭后清除
6
+ * - localStorage: 本地存储,永久保存
7
+ * - indexedDB: IndexedDB 数据库存储
8
+ */
3
9
  type StorageType = 'sessionStorage' | 'localStorage' | 'indexedDB';
10
+ /**
11
+ * 缓存项接口定义
12
+ * 定义了单个缓存项的数据结构
13
+ *
14
+ * @template Param 缓存参数类型
15
+ * @template Data 缓存数据类型
16
+ */
4
17
  interface ICache<Param, Data> {
18
+ /**
19
+ * 缓存的参数
20
+ * 用于标识和查找缓存项
21
+ */
5
22
  params: Param;
23
+ /**
24
+ * 缓存的数据
25
+ * 实际存储的内容
26
+ */
6
27
  data: Data;
28
+ /**
29
+ * 过期时间
30
+ * - ISO 8601 格式的字符串
31
+ * - 由 moment().add(cacheTime, 'seconds').toJSON() 生成
32
+ * - 示例:'2025-06-12T10:30:00.000Z'
33
+ */
7
34
  expireTime: string;
8
35
  }
36
+ /**
37
+ * 缓存选项接口
38
+ * @template Param 缓存参数类型
39
+ */
9
40
  interface ICacheOptions<Param> {
41
+ /**
42
+ * 存储类型
43
+ * - 'sessionStorage': 会话存储,浏览器关闭后清除
44
+ * - 'localStorage': 本地存储,永久保存
45
+ * - 'indexedDB': IndexedDB 数据库存储
46
+ * - undefined: 仅在内存中缓存(默认值)
47
+ */
10
48
  storageType?: StorageType;
49
+ /**
50
+ * 缓存键名
51
+ * - 当使用 localStorage/sessionStorage 时必须提供
52
+ * - 用于在存储中标识不同的缓存数据
53
+ * @default undefined 不使用持久化存储
54
+ */
11
55
  cacheKey?: string;
56
+ /**
57
+ * 缓存时间(秒)
58
+ * - 超过这个时间的缓存项会被自动清除
59
+ * @default 60 一分钟
60
+ */
12
61
  cacheTime?: number;
62
+ /**
63
+ * 缓存键比较函数
64
+ * - 用于判断两个缓存参数是否相等
65
+ * - 相等则认为是同一个缓存项
66
+ * @param prev 前一个参数
67
+ * @param next 后一个参数
68
+ * @returns 是否相等
69
+ * @default defaultEquals 使用 JSON.stringify 进行比较
70
+ */
13
71
  cacheKeyEquals: (prev: Param, next: Param) => boolean;
72
+ /**
73
+ * IndexedDB 数据库名称
74
+ * - 仅在 storageType 为 'indexedDB' 时使用
75
+ * @default '__apiCacheDatabase__'
76
+ */
14
77
  indexDBName?: string;
15
78
  }
79
+ /** 存储类型映射表 */
16
80
  declare const StorageMap: Record<StorageType | string, Storage>;
81
+ /**
82
+ * 缓存类
83
+ * @template Param 缓存参数类型
84
+ * @template Data 缓存数据类型
85
+ */
17
86
  declare class Cache<Param, Data> {
87
+ /** 内存中的缓存数组 */
18
88
  cache: ICache<Param, Data>[];
89
+ /** 缓存选项 */
19
90
  private cacheOptions;
20
- storage?: Storage | IndexedDBStorage;
91
+ /** 存储实例 */
92
+ storage?: Storage | IndexedDBStorage; /**
93
+ * 构造函数
94
+ * @param cacheType 存储类型
95
+ * @param cacheKey 缓存键名
96
+ * @param cacheTime 缓存时间(秒)
97
+ * @param indexDBName IndexedDB 数据库名称,默认值为 '__apiCacheDatabase__'
98
+ * @param cacheKeyEquals 缓存键比较函数,默认使用 defaultEquals
99
+ */
21
100
  constructor(cacheType?: StorageType, cacheKey?: string, cacheTime?: number, indexDBName?: string, cacheKeyEquals?: (prev: Param, next: Param) => boolean);
22
- private _init;
23
- private _filterExpired;
24
- private _saveToStorage;
25
- setCache(params: Param, data: Data, cacheOptions?: Omit<ICacheOptions<Param>, 'storageType' | 'cacheKey' | 'cacheKeyEquals'>): void;
26
- getCache(params: Param): Data;
101
+ /**
102
+ * 初始化缓存
103
+ * 从存储中加载已保存的缓存数据,并进行解析和过期处理
104
+ * @private
105
+ */
106
+ private _init; /**
107
+ * 过滤掉已过期的缓存项
108
+ * 通过比较当前时间和过期时间,移除过期的缓存项
109
+ * @private
110
+ */
111
+ private _filterExpired; /**
112
+ * 将当前缓存数据保存到存储中
113
+ * 如果设置了缓存键名且存储实例存在,则将缓存数据序列化后保存
114
+ * @private
115
+ */
116
+ private _saveToStorage; /**
117
+ * 设置缓存数据
118
+ * @param params 缓存的参数
119
+ * @param data 要缓存的数据
120
+ * @param cacheOptions 可选的缓存配置,可以覆盖默认的缓存时间
121
+ */
122
+ setCache(params: Param, data: Data, cacheOptions?: Omit<ICacheOptions<Param>, 'storageType' | 'cacheKey' | 'cacheKeyEquals'>): void; /**
123
+ * 获取缓存数据
124
+ * @param params 查询参数
125
+ * @returns 如果找到有效的缓存数据则返回数据,否则返回 null
126
+ */
127
+ getCache(params: Param): Data; /**
128
+ * 清空所有缓存数据
129
+ * 清空内存中的缓存数组并同步到存储中
130
+ */
27
131
  clear(): void;
28
132
  }
29
133
 
@@ -1,11 +1,51 @@
1
+ /**
2
+ * IndexedDB 存储类
3
+ * 提供了对 IndexedDB 数据库操作的简单封装
4
+ */
1
5
  declare class IndexedDBStorage {
6
+ /** 数据库名称 */
2
7
  private dbName;
8
+ /** 存储对象名称 */
3
9
  private storeName;
10
+ /** 数据库连接实例 */
4
11
  private db;
12
+ /**
13
+ * 构造函数
14
+ * @param dbName 数据库名称
15
+ * @param storeName 存储对象名称
16
+ */
5
17
  constructor(dbName: string, storeName: string);
18
+ /**
19
+ * 打开数据库连接
20
+ * 如果数据库不存在则创建新的数据库和存储对象
21
+ * @private
22
+ * @returns Promise<IDBDatabase> 数据库连接实例
23
+ */
6
24
  private _open;
25
+ /**
26
+ * 获取存储对象
27
+ * @param mode 事务模式,默认为只读模式
28
+ * - readonly: 只读模式
29
+ * - readwrite: 读写模式
30
+ * @private
31
+ * @returns Promise<IDBObjectStore> 存储对象实例
32
+ */
7
33
  private _getStore;
34
+ /**
35
+ * 设置键值对
36
+ * @param key 键名
37
+ * @param value 要存储的值
38
+ * @returns Promise<void> 存储操作的结果
39
+ * @throws 当存储操作失败时抛出错误
40
+ */
8
41
  setItem<T>(key: string, value: T): Promise<void>;
42
+ /**
43
+ * 获取键对应的值
44
+ * @param key 要获取的键名
45
+ * @returns Promise<T> 返回存储的值,如果不存在则返回 undefined
46
+ * @throws 当获取操作失败时抛出错误
47
+ * @template T 存储值的类型,默认为 any
48
+ */
9
49
  getItem<T = any>(key: string): Promise<T>;
10
50
  }
11
51
 
@@ -1,8 +1,36 @@
1
+ /**
2
+ * 状态初始化设置器类型
3
+ * 用于延迟初始化状态的函数类型
4
+ */
1
5
  type IHookStateInitialSetter<S> = () => S;
6
+ /**
7
+ * 状态初始化动作类型
8
+ * 可以是直接的状态值或初始化设置器
9
+ */
2
10
  type IHookStateInitAction<S> = S | IHookStateInitialSetter<S>;
11
+ /**
12
+ * 状态设置器类型
13
+ * 可以是接收前一个状态的函数或无参数的函数
14
+ */
3
15
  type IHookStateSetter<S> = ((prevState: S) => S) | (() => S);
16
+ /**
17
+ * 状态设置动作类型
18
+ * 可以是直接的状态值或状态设置器
19
+ */
4
20
  type IHookStateSetAction<S> = S | IHookStateSetter<S>;
21
+ /**
22
+ * 可解析的状态类型
23
+ * 包含所有可能的状态值或状态设置函数
24
+ */
5
25
  type IHookStateResolvable<S> = S | IHookStateInitialSetter<S> | IHookStateSetter<S>;
26
+ /**
27
+ * 创建状态存储
28
+ * 提供一个简单的状态管理解决方案,支持组件间状态共享
29
+ *
30
+ * @template S 状态类型
31
+ * @param initialState 初始状态值或初始化函数
32
+ * @returns 包含状态操作方法的对象
33
+ */
6
34
  declare function createStateStore<S>(initialState?: S): {
7
35
  use: () => [S, (state: IHookStateSetAction<S>) => void];
8
36
  get: () => S;
@@ -1,8 +1,29 @@
1
+ /**
2
+ * 请求错误类型
3
+ * - server: 服务端业务错误
4
+ * - http: HTTP 网络错误
5
+ */
1
6
  type RequestErrorType = 'server' | 'http';
7
+ /**
8
+ * 请求错误类
9
+ * 用于统一处理请求过程中的各种错误
10
+ *
11
+ * @template Data 错误数据类型
12
+ * @extends Error
13
+ */
2
14
  declare class RequestError<Data = any> extends Error {
15
+ /** 错误码 */
3
16
  code: string;
17
+ /** 错误类型 */
4
18
  type: RequestErrorType;
19
+ /** 错误相关的数据 */
5
20
  data?: Data;
21
+ /**
22
+ * 构造函数
23
+ * @param message 错误消息
24
+ * @param type 错误类型
25
+ * @param data 错误相关的数据
26
+ */
6
27
  constructor(message: string, type: RequestErrorType, data?: Data);
7
28
  }
8
29
 
@@ -1,36 +1,132 @@
1
1
  import { AxiosResponse, Method, AxiosRequestConfig } from 'axios';
2
2
  import { StorageType } from '../cache/index.js';
3
3
 
4
+ /**
5
+ * 错误处理器返回类型
6
+ * @template D 响应数据类型
7
+ */
4
8
  type ErrorHandlerReturnType<D> = {
9
+ /** 替换响应数据 */
5
10
  replaceResData?: D;
11
+ /**
12
+ * 是否抛出错误
13
+ * - true: 强制抛出错误
14
+ * - false: 不抛出错误
15
+ * - 'default': 使用默认错误处理逻辑
16
+ */
6
17
  throwError?: boolean | 'default';
7
18
  };
19
+ /**
20
+ * 请求配置选项接口
21
+ * @template Params 请求参数类型
22
+ * @template Data 响应数据类型
23
+ */
8
24
  interface Options<Params = any, Data = any> {
25
+ /** 请求基础URL,默认为空字符串 */
9
26
  baseURL?: string;
27
+ /**
28
+ * 是否抛出错误
29
+ * @default true
30
+ */
10
31
  throwError?: boolean;
32
+ /**
33
+ * 默认的消息展示函数
34
+ * @default window.alert
35
+ */
11
36
  defaultMessageShower?: (message: string) => void;
37
+ /**
38
+ * 是否启用缓存功能
39
+ * @default false
40
+ */
12
41
  enableCache?: boolean;
42
+ /**
43
+ * 缓存键比较函数
44
+ * @default defaultEquals 使用 JSON.stringify 进行比较
45
+ */
13
46
  cacheKeyEquals?: (prev: Params, next: Params) => boolean;
47
+ /**
48
+ * 是否将响应数据存入缓存
49
+ * @default false
50
+ */
14
51
  cacheData?: boolean;
15
- cacheTime?: number;
52
+ /**
53
+ * 缓存时间(秒)
54
+ * @default 60
55
+ */
56
+ cacheTime?: number; /**
57
+ * 缓存数据的存储类型
58
+ * - localStorage: 使用浏览器本地存储,数据永久保存
59
+ * - sessionStorage: 使用会话存储,关闭浏览器后清除
60
+ * - indexedDB: 使用 IndexedDB 数据库存储
61
+ * - 不填则仅在内存中缓存,页面刷新后清除
62
+ */
16
63
  cacheDataInStorage?: StorageType;
64
+ /**
65
+ * 缓存数据的键名
66
+ * @default `${method}:${baseURL}${url}` 默认使用请求方法、基础URL和请求路径组合
67
+ */
17
68
  cacheDataKey?: string;
69
+ /**
70
+ * IndexedDB 数据库名称
71
+ * @default '__apiCacheDatabase__'
72
+ */
18
73
  indexDBName?: string;
19
- errorCodePath?: string;
74
+ /**
75
+ * 错误码在响应数据中的路径
76
+ * @default 'code'
77
+ */
78
+ errorCodePath?: string; /**
79
+ * 错误码映射表
80
+ * 可以配置错误码对应的错误信息或处理函数
81
+ * @default {} 空对象,使用默认处理函数
82
+ */
20
83
  errorCodeMap?: Record<string, string | ((code: string, data: Data, res: AxiosResponse<Data>, requestParam: RequestOptions<Params>) => ErrorHandlerReturnType<Data> | void)>;
21
- defaultErrorCodeHandler?: (code: string, data: Data, res: AxiosResponse<Data>) => ErrorHandlerReturnType<Data> | void;
84
+ /**
85
+ * 默认错误码处理函数
86
+ * 当错误码不在 errorCodeMap 中时调用
87
+ */
88
+ defaultErrorCodeHandler?: (code: string, data: Data, res: AxiosResponse<Data>) => ErrorHandlerReturnType<Data> | void; /**
89
+ * 成功状态的错误码列表
90
+ * @default ['0', '200']
91
+ */
22
92
  successCodes?: string[];
93
+ /**
94
+ * HTTP 错误码映射表
95
+ * 可以配置 HTTP 状态码对应的错误信息或处理函数
96
+ * @default {} 空对象,使用默认处理函数
97
+ */
23
98
  httpErrorCodeMap?: Record<string, string | ((code: number, res: AxiosResponse<Data>, requestParam: RequestOptions<Params>) => ErrorHandlerReturnType<Data> | void)>;
99
+ /**
100
+ * 默认 HTTP 错误码处理函数
101
+ * 当 HTTP 状态码不在 httpErrorCodeMap 中时调用
102
+ */
24
103
  defaultHttpErrorCodeHandler?: (code: number, error: any) => ErrorHandlerReturnType<Data> | void;
104
+ /**
105
+ * 其他错误处理函数
106
+ * 处理非 HTTP 错误和非业务错误码的错误
107
+ */
25
108
  otherErrorHandler?: (error: any) => ErrorHandlerReturnType<Data> | void;
26
109
  axiosOptions?: Omit<AxiosRequestConfig<Params>, 'method' | 'url' | 'params' | 'data'>;
27
110
  }
111
+ /**
112
+ * 请求参数接口
113
+ * @template Param 请求参数类型
114
+ */
28
115
  interface RequestOptions<Param> {
116
+ /** HTTP 请求方法 */
29
117
  method: Method;
118
+ /** 请求URL */
30
119
  url: string;
120
+ /** POST/PUT 等请求的数据 */
31
121
  data?: Param;
122
+ /** URL 查询参数 */
32
123
  params?: Param;
33
124
  }
125
+ /**
126
+ * 创建基础请求实例
127
+ * @param baseOptions 基础配置选项
128
+ * @returns 请求创建函数
129
+ */
34
130
  declare function createBaseRequest(baseOptions?: Options): <Param, Data extends Record<any, any>>(requestOptions: RequestOptions<Param>, createOptions?: Omit<Options<Param, Data>, "baseURL">) => {
35
131
  (requestParam?: Omit<RequestOptions<Param>, "url" | "method">, options?: Omit<Options<Param, Data>, "baseURL" | "cacheDataKey" | "cacheDataInStorage" | "cacheKeyEquals">): Promise<Data>;
36
132
  clearCache(): void;
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "rxtutils",
3
- "version": "1.0.8",
3
+ "version": "1.0.9",
4
+ "type": "module",
4
5
  "main": "dist/cjs/index.cjs",
5
6
  "module": "dist/es/index.mjs",
6
7
  "types": "dist/types/index.d.ts",
@@ -29,4 +30,4 @@
29
30
  "lodash": "^4.17.21",
30
31
  "moment": "^2.30.1"
31
32
  }
32
- }
33
+ }