@morjs/runtime-base
Version:
mor runtime base
92 lines • 2.35 kB
JavaScript
/* eslint-disable @typescript-eslint/no-non-null-assertion */
// 搜集所有创建的 Emitter 实例
// 主要用于 调试或检查
var EVENT_EMITTER_INSTANCES = {};
/**
* 创建 Emitter 实例
* @param reason - 事件创建原因, 用于统计
* @param all - 自定义 Map 用于存储事件名称和事件处理函数
* @returns Emitter
*/
export function createEvent(reason, all) {
all = all || new Map();
function on(type, handler) {
var handlers = all.get(type);
if (handlers) {
handlers.push(handler);
}
else {
all.set(type, [handler]);
}
}
function off(type, handler) {
var handlers = all.get(type);
if (handlers) {
if (handler) {
handlers.splice(handlers.indexOf(handler) >>> 0, 1);
}
else {
all.set(type, []);
}
}
}
function emit(type, evt) {
var handlers = all.get(type);
if (handlers) {
;
handlers
.slice()
.map(function (handler) {
handler(evt);
});
}
handlers = all.get('*');
if (handlers) {
;
handlers.slice().map(function (handler) {
handler(type, evt);
});
}
}
function once(type, handler) {
if (type === '*') {
var fn_1 = function (type, event) {
off(type, fn_1);
handler(type, event);
};
on(type, fn_1);
}
else {
var fn_2 = function (event) {
off(type, fn_2);
handler(event);
};
on(type, fn_2);
}
}
var emitter = {
all: all,
on: on,
off: off,
emit: emit,
once: once
};
// 记录创建的 event
EVENT_EMITTER_INSTANCES[reason] = EVENT_EMITTER_INSTANCES[reason] || [];
EVENT_EMITTER_INSTANCES[reason].push({
createdAt: +new Date(),
event: emitter
});
return emitter;
}
/**
* 获取所有 event 实例
*/
export function getAllEvents() {
return EVENT_EMITTER_INSTANCES;
}
/**
* 全局默认 Event
*/
export var event = createEvent('default');
//# sourceMappingURL=event.js.map