UNPKG

@kitmi/jacaranda

Version:

JavaScript application framework

69 lines (68 loc) 1.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return _default; } }); const _utils = require("@kitmi/utils"); class AsyncEmitter { on(event, handler) { (0, _utils.pushIntoBucket)(this._handlers, event, { once: false, handler }); return this; } once(event, handler) { (0, _utils.pushIntoBucket)(this._handlers, event, { once: true, handler }); return this; } off(event, handler) { let handlers = this._handlers[event]; if (!handlers || handlers.length === 0) { return this; } if (handler) { let index = handlers.findIndex((item)=>item.handler === handler); if (index >= 0) { handlers.splice(index, 1); } } else { delete this._handlers[event]; } return this; } allOff() { this._handlers = {}; return this; } async emit_(event, ...args) { let handlers = this._handlers[event]; if (!handlers || handlers.length === 0) { return false; } const _handlers = [ ...handlers ]; const filtered = handlers.filter((item)=>!item.once); if (filtered.length === 0) { delete this._handlers[event]; } else { this._handlers[event] = filtered; } await (0, _utils.batchAsync_)(_handlers, (item)=>item.handler(...args)); return true; } constructor(){ this._handlers = {}; } } const _default = AsyncEmitter; //# sourceMappingURL=AsyncEmitter.js.map