util-helpers 4.21.7 → 4.22.1

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.
@@ -0,0 +1,40 @@
1
+ import { __assign } from 'tslib';
2
+ import { Cache } from 'cache2';
3
+ import { isString, uniqueId } from 'ut2';
4
+
5
+ var AsyncMemo = (function () {
6
+ function AsyncMemo(options) {
7
+ this.promiseCache = {};
8
+ this.cache = new Cache(uniqueId('uh_async_memo'), options);
9
+ }
10
+ AsyncMemo.prototype.run = function (asyncFn, key, options) {
11
+ var _this = this;
12
+ if (!isString(key)) {
13
+ return asyncFn();
14
+ }
15
+ var opts = __assign({ persisted: true }, options);
16
+ if (opts.persisted) {
17
+ var data = this.cache.get(key);
18
+ if (data) {
19
+ return Promise.resolve(data);
20
+ }
21
+ }
22
+ if (!this.promiseCache[key]) {
23
+ this.promiseCache[key] = asyncFn()
24
+ .then(function (res) {
25
+ delete _this.promiseCache[key];
26
+ _this.cache.set(key, res, opts.ttl);
27
+ return res;
28
+ })
29
+ .catch(function (err) {
30
+ delete _this.promiseCache[key];
31
+ return Promise.reject(err);
32
+ });
33
+ }
34
+ return this.promiseCache[key];
35
+ };
36
+ return AsyncMemo;
37
+ }());
38
+ var AsyncMemo$1 = AsyncMemo;
39
+
40
+ export { AsyncMemo$1 as default };
package/esm/VERSION.js CHANGED
@@ -1,4 +1,4 @@
1
- var VERSION = "4.21.7";
1
+ var VERSION = "4.22.1";
2
2
  var VERSION$1 = VERSION;
3
3
 
4
4
  export { VERSION$1 as default };
package/esm/index.js CHANGED
@@ -63,7 +63,8 @@ export { default as findTreeNodes } from './findTreeNodes.js';
63
63
  export { default as findTreeSelect } from './findTreeSelect.js';
64
64
  export { setDisableWarning } from './utils/config.js';
65
65
  export { default as VERSION } from './VERSION.js';
66
+ export { default as AsyncMemo } from './AsyncMemo.js';
66
67
 
67
- var version = "4.21.7";
68
+ var version = "4.22.1";
68
69
 
69
70
  export { version };
@@ -1,5 +1,5 @@
1
1
  import { __extends, __assign } from 'tslib';
2
- import EmitterPro from '../node_modules/.pnpm/emitter-pro@1.2.1/node_modules/emitter-pro/dist/emitter-pro.esm.js';
2
+ import Emitter from 'emitter-pro';
3
3
  import { forEach } from 'ut2';
4
4
 
5
5
  var Cache = (function (_super) {
@@ -41,7 +41,7 @@ var Cache = (function (_super) {
41
41
  }
42
42
  };
43
43
  return Cache;
44
- }(EmitterPro));
44
+ }(Emitter));
45
45
  var Cache$1 = Cache;
46
46
 
47
47
  export { Cache$1 as default };
@@ -0,0 +1,42 @@
1
+ 'use strict';
2
+
3
+ var tslib = require('tslib');
4
+ var cache2 = require('cache2');
5
+ var ut2 = require('ut2');
6
+
7
+ var AsyncMemo = (function () {
8
+ function AsyncMemo(options) {
9
+ this.promiseCache = {};
10
+ this.cache = new cache2.Cache(ut2.uniqueId('uh_async_memo'), options);
11
+ }
12
+ AsyncMemo.prototype.run = function (asyncFn, key, options) {
13
+ var _this = this;
14
+ if (!ut2.isString(key)) {
15
+ return asyncFn();
16
+ }
17
+ var opts = tslib.__assign({ persisted: true }, options);
18
+ if (opts.persisted) {
19
+ var data = this.cache.get(key);
20
+ if (data) {
21
+ return Promise.resolve(data);
22
+ }
23
+ }
24
+ if (!this.promiseCache[key]) {
25
+ this.promiseCache[key] = asyncFn()
26
+ .then(function (res) {
27
+ delete _this.promiseCache[key];
28
+ _this.cache.set(key, res, opts.ttl);
29
+ return res;
30
+ })
31
+ .catch(function (err) {
32
+ delete _this.promiseCache[key];
33
+ return Promise.reject(err);
34
+ });
35
+ }
36
+ return this.promiseCache[key];
37
+ };
38
+ return AsyncMemo;
39
+ }());
40
+ var AsyncMemo$1 = AsyncMemo;
41
+
42
+ module.exports = AsyncMemo$1;
package/lib/VERSION.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var VERSION = "4.21.7";
3
+ var VERSION = "4.22.1";
4
4
  var VERSION$1 = VERSION;
5
5
 
6
6
  module.exports = VERSION$1;
package/lib/index.js CHANGED
@@ -65,8 +65,9 @@ var findTreeNodes = require('./findTreeNodes.js');
65
65
  var findTreeSelect = require('./findTreeSelect.js');
66
66
  var config = require('./utils/config.js');
67
67
  var VERSION = require('./VERSION.js');
68
+ var AsyncMemo = require('./AsyncMemo.js');
68
69
 
69
- exports.version = "4.21.7";
70
+ exports.version = "4.22.1";
70
71
 
71
72
  exports.isMobile = isMobile;
72
73
  exports.isTelephone = isTelephone;
@@ -133,3 +134,4 @@ exports.findTreeNodes = findTreeNodes;
133
134
  exports.findTreeSelect = findTreeSelect;
134
135
  exports.setDisableWarning = config.setDisableWarning;
135
136
  exports.VERSION = VERSION;
137
+ exports.AsyncMemo = AsyncMemo;
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var tslib = require('tslib');
4
- var emitterPro_esm = require('../node_modules/.pnpm/emitter-pro@1.2.1/node_modules/emitter-pro/dist/emitter-pro.esm.js');
4
+ var Emitter = require('emitter-pro');
5
5
  var ut2 = require('ut2');
6
6
 
7
7
  var Cache = (function (_super) {
@@ -43,7 +43,7 @@ var Cache = (function (_super) {
43
43
  }
44
44
  };
45
45
  return Cache;
46
- }(emitterPro_esm));
46
+ }(Emitter));
47
47
  var Cache$1 = Cache;
48
48
 
49
49
  module.exports = Cache$1;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "util-helpers",
3
- "version": "4.21.7",
3
+ "version": "4.22.1",
4
4
  "description": "一个基于业务场景的工具方法库",
5
5
  "main": "lib/index.js",
6
6
  "module": "esm/index.js",
@@ -16,7 +16,7 @@
16
16
  "build:dist": "rm -rf dist && rollup -c rollup.umd.config.mjs",
17
17
  "build:types": "rm -rf types && tsc -p tsconfig.build.json -d --outDir types --emitDeclarationOnly",
18
18
  "build:doc": "npm run doc",
19
- "doc": "rm -rf docs && rm -rf docs-src && tsc -p tsconfig.build.json --outDir docs-src && jsdoc -c conf.json && rm -rf docs-src",
19
+ "doc": "rm -rf docs && rm -rf docs-src && tsc -p tsconfig.build.json -t esnext --outDir docs-src && jsdoc -c conf.json && rm -rf docs-src",
20
20
  "doc:open": "open ./docs/index.html",
21
21
  "prettier": "prettier --write 'src/**/*.ts' && prettier --write 'test/**/*.ts'",
22
22
  "lint": "eslint src --ext .ts",
@@ -51,8 +51,8 @@
51
51
  },
52
52
  "homepage": "https://doly-dev.github.io/util-helpers/index.html",
53
53
  "devDependencies": {
54
- "@babel/core": "^7.24.4",
55
- "@babel/preset-env": "^7.24.4",
54
+ "@babel/core": "^7.24.5",
55
+ "@babel/preset-env": "^7.24.5",
56
56
  "@babel/preset-typescript": "^7.24.1",
57
57
  "@commitlint/cli": "^17.8.1",
58
58
  "@commitlint/config-conventional": "^17.8.1",
@@ -63,8 +63,8 @@
63
63
  "@rollup/plugin-terser": "^0.4.4",
64
64
  "@rollup/plugin-typescript": "^11.1.6",
65
65
  "@types/jest": "^29.5.12",
66
- "@typescript-eslint/eslint-plugin": "^7.7.0",
67
- "@typescript-eslint/parser": "^7.7.0",
66
+ "@typescript-eslint/eslint-plugin": "^7.9.0",
67
+ "@typescript-eslint/parser": "^7.9.0",
68
68
  "babel-jest": "^29.7.0",
69
69
  "babel-plugin-minify-replace": "^0.5.0",
70
70
  "commitizen": "^4.3.0",
@@ -76,10 +76,10 @@
76
76
  "jest": "^29.7.0",
77
77
  "jest-canvas-mock": "^2.5.2",
78
78
  "jest-environment-jsdom": "^29.7.0",
79
- "jsdoc": "^4.0.2",
79
+ "jsdoc": "^4.0.3",
80
80
  "lint-staged": "^13.3.0",
81
81
  "prettier": "^3.2.5",
82
- "rollup": "^4.14.3",
82
+ "rollup": "^4.17.2",
83
83
  "typescript": "^5.4.5"
84
84
  },
85
85
  "lint-staged": {
@@ -92,9 +92,10 @@
92
92
  }
93
93
  },
94
94
  "dependencies": {
95
+ "cache2": "^2.0.5",
95
96
  "emitter-pro": "^1.2.1",
96
97
  "tslib": "^2.6.2",
97
- "ut2": "^1.7.1"
98
+ "ut2": "^1.9.1"
98
99
  },
99
100
  "publishConfig": {
100
101
  "registry": "https://registry.npmjs.org/"
@@ -0,0 +1,33 @@
1
+ import { Cache, CacheOptions } from 'cache2';
2
+ /**
3
+ * 异步缓存
4
+ *
5
+ * @class
6
+ * @see {@link https://www.npmjs.com/package/cache2 | cache2}
7
+ * @param {Object} [options] 缓存配置项,更多配置项可参考 [`cache2`](https://www.npmjs.com/package/cache2)
8
+ * @param {number} [options.max] 最大缓存数量
9
+ * @param {'replaced' | 'limited'} [options.maxStrategy] 缓存策略
10
+ */
11
+ declare class AsyncMemo<DataType = any> {
12
+ private promiseCache;
13
+ /**
14
+ * cache2 实例,用于管理缓存
15
+ */
16
+ cache: Cache<DataType>;
17
+ constructor(options?: Partial<CacheOptions>);
18
+ /**
19
+ * 执行异步方法
20
+ *
21
+ * @param {Function} asyncFn 异步方法
22
+ * @param {string} [key] 缓存键,如果没有该值将直接执行异步方法。
23
+ * @param {Object} [options] 配置项
24
+ * @param {number} [options.ttl] 数据存活时间
25
+ * @param {boolean} [options.persisted=true] 数据持久化,如果存在缓存数据,直接返回缓存数据,不再执行异步方法。<br/>即使不开启该配置,不影响在异步执行成功后缓存数据。
26
+ * @returns {Promise<*>} 异步结果
27
+ */
28
+ run(asyncFn: (...args: any[]) => Promise<DataType>, key?: string, options?: {
29
+ ttl?: number;
30
+ persisted?: boolean;
31
+ }): Promise<any>;
32
+ }
33
+ export default AsyncMemo;
package/types/ajax.d.ts CHANGED
@@ -30,7 +30,7 @@ type AjaxOptions = {
30
30
  * @property {number} [timeout] 请求超时的毫秒数
31
31
  * @property {boolean} [withCredentials=false] 跨域请求时是否需要使用凭证
32
32
  * @property {*} [data=null] 请求体被发送的数据
33
- * @property {function} [options.onReadyStateChange] 当 readyState 属性发生变化时触发
33
+ * @property {function} [onReadyStateChange] 当 readyState 属性发生变化时触发
34
34
  * @property {function} [onLoadStart] 接收到响应数据时触发
35
35
  * @property {function} [onProgress] 请求接收到更多数据时,周期性地触发
36
36
  * @property {function} [onAbort] 当 request 被停止时触发,例如当程序调用 XMLHttpRequest.abort() 时
@@ -22,11 +22,11 @@ type DownloadOptions = {
22
22
  */
23
23
  /**
24
24
  * @typedef {Object} DownloadOptions 下载配置项
25
- * @property {string} [options.fileName] 文件名称
26
- * @property {string} [options.type] MIME 类型
27
- * @property {'url'|'text'} [options.dataType] 手动设置数据类型,默认会根据传入的数据判断类型,主要是为了区分 url 和 text 。<br/>如果你要下载的文本是 url ,请设置 'text' ;如果你要下载的 url 是绝对/相对路径,请设置 'url' 。
28
- * @property {TransformRequest} [options.transformRequest] 请求前触发,XHR 对象或配置调整
29
- * @property {TransformResponse} [options.transformResponse] 请求成功后触发,在传递给 then/catch 前,允许修改响应数据
25
+ * @property {string} [fileName] 文件名称
26
+ * @property {string} [type] MIME 类型
27
+ * @property {'url'|'text'} [dataType] 手动设置数据类型,默认会根据传入的数据判断类型,主要是为了区分 url 和 text 。<br/>如果你要下载的文本是 url ,请设置 'text' ;如果你要下载的 url 是绝对/相对路径,请设置 'url' 。
28
+ * @property {TransformRequest} [transformRequest] 请求前触发,XHR 对象或配置调整
29
+ * @property {TransformResponse} [transformResponse] 请求成功后触发,在传递给 then/catch 前,允许修改响应数据
30
30
  */
31
31
  /**
32
32
  * 下载
package/types/index.d.ts CHANGED
@@ -138,3 +138,4 @@ export { VERSION };
138
138
  * @deprecated 即将废弃,请使用 `VERSION`
139
139
  */
140
140
  export declare const version: string;
141
+ export { default as AsyncMemo } from './AsyncMemo';
@@ -17,6 +17,7 @@ type Options = {
17
17
  * @static
18
18
  * @alias module:Processor.numberToChinese
19
19
  * @since 1.2.0
20
+ * @see {@link https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=F5DAC3377DA99C8D78AE66735B6359C7 | 出版物上数字用法}
20
21
  * @param {number} num 数字
21
22
  * @param {Object} [options] 配置项
22
23
  * @param {boolean} [options.big5=false] 繁体
@@ -1,98 +0,0 @@
1
- var EmitterPro = /** @class */ (function () {
2
- function EmitterPro() {
3
- this.handlers = {};
4
- }
5
- EmitterPro.prototype.eventNames = function () {
6
- var _a;
7
- var symbols = ((_a = Object.getOwnPropertySymbols) === null || _a === void 0 ? void 0 : _a.call(Object, this.handlers)) || [];
8
- var keys = Object.keys(this.handlers);
9
- return keys.concat(symbols);
10
- };
11
- EmitterPro.prototype.rawListeners = function (eventName) {
12
- var handler = this.handlers[eventName];
13
- return handler ? handler.map(function (item) { return item.raw; }) : [];
14
- };
15
- EmitterPro.prototype.listeners = function (eventName) {
16
- var handler = this.handlers[eventName];
17
- return handler ? handler.map(function (item) { return item.wrap; }) : [];
18
- };
19
- EmitterPro.prototype.hasListener = function (eventName, listener) {
20
- return this.rawListeners(eventName).some(function (item) { return item === listener; });
21
- };
22
- EmitterPro.prototype._on = function (eventName, raw, wrap, context, dir) {
23
- if (context === void 0) { context = null; }
24
- if (dir === void 0) { dir = 1; }
25
- var currentListener = { raw: raw, wrap: wrap, context: context };
26
- if (!this.handlers[eventName]) {
27
- this.handlers[eventName] = [currentListener];
28
- }
29
- else {
30
- var appendMethod = dir === 1 ? 'push' : 'unshift';
31
- this.handlers[eventName][appendMethod](currentListener);
32
- }
33
- return this;
34
- };
35
- EmitterPro.prototype.prependListener = function (eventName, listener, context) {
36
- return this._on(eventName, listener, listener, context, 0);
37
- };
38
- EmitterPro.prototype.on = function (eventName, listener, context) {
39
- return this._on(eventName, listener, listener, context);
40
- };
41
- EmitterPro.prototype._wrapOnce = function (eventName, listener, context) {
42
- var _this = this;
43
- if (context === void 0) { context = null; }
44
- var wrap = (function () {
45
- var args = [];
46
- for (var _i = 0; _i < arguments.length; _i++) {
47
- args[_i] = arguments[_i];
48
- }
49
- listener.apply(context, args);
50
- _this.off(eventName, wrap);
51
- });
52
- return wrap;
53
- };
54
- EmitterPro.prototype.once = function (eventName, listener, context) {
55
- var wrap = this._wrapOnce(eventName, listener, context);
56
- return this._on(eventName, listener, wrap, context);
57
- };
58
- EmitterPro.prototype.prependOnceListener = function (eventName, listener, context) {
59
- var wrap = this._wrapOnce(eventName, listener, context);
60
- return this._on(eventName, listener, wrap, context, 0);
61
- };
62
- EmitterPro.prototype.off = function (eventName, listener) {
63
- var handler = this.handlers[eventName];
64
- if (handler) {
65
- if (listener) {
66
- var index = handler.findIndex(function (item) { return item.wrap === listener || item.raw === listener; });
67
- if (index !== -1) {
68
- handler.splice(index, 1);
69
- }
70
- }
71
- else {
72
- delete this.handlers[eventName];
73
- }
74
- }
75
- return this;
76
- };
77
- EmitterPro.prototype.offAll = function () {
78
- this.handlers = {};
79
- return this;
80
- };
81
- EmitterPro.prototype.emit = function (eventName) {
82
- var args = [];
83
- for (var _i = 1; _i < arguments.length; _i++) {
84
- args[_i - 1] = arguments[_i];
85
- }
86
- var handler = this.handlers[eventName];
87
- if (handler && handler.length > 0) {
88
- handler.forEach(function (listener) {
89
- listener.wrap.apply(listener.context, args);
90
- });
91
- return true;
92
- }
93
- return false;
94
- };
95
- return EmitterPro;
96
- }());
97
-
98
- export { EmitterPro as default };
@@ -1,100 +0,0 @@
1
- 'use strict';
2
-
3
- exports.default = /** @class */ (function () {
4
- function EmitterPro() {
5
- this.handlers = {};
6
- }
7
- EmitterPro.prototype.eventNames = function () {
8
- var _a;
9
- var symbols = ((_a = Object.getOwnPropertySymbols) === null || _a === void 0 ? void 0 : _a.call(Object, this.handlers)) || [];
10
- var keys = Object.keys(this.handlers);
11
- return keys.concat(symbols);
12
- };
13
- EmitterPro.prototype.rawListeners = function (eventName) {
14
- var handler = this.handlers[eventName];
15
- return handler ? handler.map(function (item) { return item.raw; }) : [];
16
- };
17
- EmitterPro.prototype.listeners = function (eventName) {
18
- var handler = this.handlers[eventName];
19
- return handler ? handler.map(function (item) { return item.wrap; }) : [];
20
- };
21
- EmitterPro.prototype.hasListener = function (eventName, listener) {
22
- return this.rawListeners(eventName).some(function (item) { return item === listener; });
23
- };
24
- EmitterPro.prototype._on = function (eventName, raw, wrap, context, dir) {
25
- if (context === void 0) { context = null; }
26
- if (dir === void 0) { dir = 1; }
27
- var currentListener = { raw: raw, wrap: wrap, context: context };
28
- if (!this.handlers[eventName]) {
29
- this.handlers[eventName] = [currentListener];
30
- }
31
- else {
32
- var appendMethod = dir === 1 ? 'push' : 'unshift';
33
- this.handlers[eventName][appendMethod](currentListener);
34
- }
35
- return this;
36
- };
37
- EmitterPro.prototype.prependListener = function (eventName, listener, context) {
38
- return this._on(eventName, listener, listener, context, 0);
39
- };
40
- EmitterPro.prototype.on = function (eventName, listener, context) {
41
- return this._on(eventName, listener, listener, context);
42
- };
43
- EmitterPro.prototype._wrapOnce = function (eventName, listener, context) {
44
- var _this = this;
45
- if (context === void 0) { context = null; }
46
- var wrap = (function () {
47
- var args = [];
48
- for (var _i = 0; _i < arguments.length; _i++) {
49
- args[_i] = arguments[_i];
50
- }
51
- listener.apply(context, args);
52
- _this.off(eventName, wrap);
53
- });
54
- return wrap;
55
- };
56
- EmitterPro.prototype.once = function (eventName, listener, context) {
57
- var wrap = this._wrapOnce(eventName, listener, context);
58
- return this._on(eventName, listener, wrap, context);
59
- };
60
- EmitterPro.prototype.prependOnceListener = function (eventName, listener, context) {
61
- var wrap = this._wrapOnce(eventName, listener, context);
62
- return this._on(eventName, listener, wrap, context, 0);
63
- };
64
- EmitterPro.prototype.off = function (eventName, listener) {
65
- var handler = this.handlers[eventName];
66
- if (handler) {
67
- if (listener) {
68
- var index = handler.findIndex(function (item) { return item.wrap === listener || item.raw === listener; });
69
- if (index !== -1) {
70
- handler.splice(index, 1);
71
- }
72
- }
73
- else {
74
- delete this.handlers[eventName];
75
- }
76
- }
77
- return this;
78
- };
79
- EmitterPro.prototype.offAll = function () {
80
- this.handlers = {};
81
- return this;
82
- };
83
- EmitterPro.prototype.emit = function (eventName) {
84
- var args = [];
85
- for (var _i = 1; _i < arguments.length; _i++) {
86
- args[_i - 1] = arguments[_i];
87
- }
88
- var handler = this.handlers[eventName];
89
- if (handler && handler.length > 0) {
90
- handler.forEach(function (listener) {
91
- listener.wrap.apply(listener.context, args);
92
- });
93
- return true;
94
- }
95
- return false;
96
- };
97
- return EmitterPro;
98
- }());
99
-
100
- module.exports = exports.default;