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.
- package/dist/util-helpers.js +425 -37
- package/dist/util-helpers.js.map +1 -1
- package/dist/util-helpers.min.js +1 -1
- package/dist/util-helpers.min.js.map +1 -1
- package/esm/AsyncMemo.js +40 -0
- package/esm/VERSION.js +1 -1
- package/esm/index.js +2 -1
- package/esm/utils/Cache.js +2 -2
- package/lib/AsyncMemo.js +42 -0
- package/lib/VERSION.js +1 -1
- package/lib/index.js +3 -1
- package/lib/utils/Cache.js +2 -2
- package/package.json +10 -9
- package/types/AsyncMemo.d.ts +33 -0
- package/types/ajax.d.ts +1 -1
- package/types/download.d.ts +5 -5
- package/types/index.d.ts +1 -0
- package/types/numberToChinese.d.ts +1 -0
- package/esm/node_modules/.pnpm/emitter-pro@1.2.1/node_modules/emitter-pro/dist/emitter-pro.esm.js +0 -98
- package/lib/node_modules/.pnpm/emitter-pro@1.2.1/node_modules/emitter-pro/dist/emitter-pro.esm.js +0 -100
package/esm/AsyncMemo.js
ADDED
|
@@ -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
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.
|
|
68
|
+
var version = "4.22.1";
|
|
68
69
|
|
|
69
70
|
export { version };
|
package/esm/utils/Cache.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __extends, __assign } from 'tslib';
|
|
2
|
-
import
|
|
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
|
-
}(
|
|
44
|
+
}(Emitter));
|
|
45
45
|
var Cache$1 = Cache;
|
|
46
46
|
|
|
47
47
|
export { Cache$1 as default };
|
package/lib/AsyncMemo.js
ADDED
|
@@ -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
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.
|
|
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;
|
package/lib/utils/Cache.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var tslib = require('tslib');
|
|
4
|
-
var
|
|
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
|
-
}(
|
|
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.
|
|
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.
|
|
55
|
-
"@babel/preset-env": "^7.24.
|
|
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.
|
|
67
|
-
"@typescript-eslint/parser": "^7.
|
|
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.
|
|
79
|
+
"jsdoc": "^4.0.3",
|
|
80
80
|
"lint-staged": "^13.3.0",
|
|
81
81
|
"prettier": "^3.2.5",
|
|
82
|
-
"rollup": "^4.
|
|
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.
|
|
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} [
|
|
33
|
+
* @property {function} [onReadyStateChange] 当 readyState 属性发生变化时触发
|
|
34
34
|
* @property {function} [onLoadStart] 接收到响应数据时触发
|
|
35
35
|
* @property {function} [onProgress] 请求接收到更多数据时,周期性地触发
|
|
36
36
|
* @property {function} [onAbort] 当 request 被停止时触发,例如当程序调用 XMLHttpRequest.abort() 时
|
package/types/download.d.ts
CHANGED
|
@@ -22,11 +22,11 @@ type DownloadOptions = {
|
|
|
22
22
|
*/
|
|
23
23
|
/**
|
|
24
24
|
* @typedef {Object} DownloadOptions 下载配置项
|
|
25
|
-
* @property {string} [
|
|
26
|
-
* @property {string} [
|
|
27
|
-
* @property {'url'|'text'} [
|
|
28
|
-
* @property {TransformRequest} [
|
|
29
|
-
* @property {TransformResponse} [
|
|
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
|
@@ -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] 繁体
|
package/esm/node_modules/.pnpm/emitter-pro@1.2.1/node_modules/emitter-pro/dist/emitter-pro.esm.js
DELETED
|
@@ -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 };
|
package/lib/node_modules/.pnpm/emitter-pro@1.2.1/node_modules/emitter-pro/dist/emitter-pro.esm.js
DELETED
|
@@ -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;
|