UNPKG

@morjs/runtime-base

Version:
97 lines 2.55 kB
"use strict"; /* eslint-disable @typescript-eslint/no-non-null-assertion */ Object.defineProperty(exports, "__esModule", { value: true }); exports.event = exports.getAllEvents = exports.createEvent = void 0; // 搜集所有创建的 Emitter 实例 // 主要用于 调试或检查 var EVENT_EMITTER_INSTANCES = {}; /** * 创建 Emitter 实例 * @param reason - 事件创建原因, 用于统计 * @param all - 自定义 Map 用于存储事件名称和事件处理函数 * @returns Emitter */ 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; } exports.createEvent = createEvent; /** * 获取所有 event 实例 */ function getAllEvents() { return EVENT_EMITTER_INSTANCES; } exports.getAllEvents = getAllEvents; /** * 全局默认 Event */ exports.event = createEvent('default'); //# sourceMappingURL=event.js.map