UNPKG

listen-events

Version:

EventBus 是一个简单的 WEB 端事件侦听器,提供了一种将事件分派给订阅的事件侦听器的机制。

148 lines 5.2 kB
"use strict"; exports.__esModule = true; exports.EventBus = void 0; var EventBus = /** @class */ (function () { function EventBus(listeners) { this._listeners = listeners || {}; } EventBus.prototype.emitSync = function (name) { var _this = this; var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } name = name.toString(); var vals = []; if (this.has(name)) { var _e = this.listeners(name); if (_e.length === 1) { _e.map(function (f) { var v = f.apply(f, args); f.once && _this.offs(name); vals.push(v); }); } else { _e = _e.map(function (f) { if (f.length === args.length) { var v = f.apply(f, args); vals.push(v); if (f.once) return null; } return f; }).filter(function (f) { return f != null; }); _e.length > 0 ? (this._listeners[name] = _e) : this.offs(name); } } return Promise.all(vals); }; EventBus.prototype.emit = function (name) { var _this = this; var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } name = name.toString(); if (this.has(name)) { var _e = this.listeners(name); if (_e.length === 1) { _e.map(function (f) { f.apply(f, args), f.once && _this.offs(name); }); } else { _e = _e.map(function (f) { if (f.length === args.length) { f.apply(f, args); if (f.once) return null; } return f; }).filter(function (f) { return f != null; }); _e.length > 0 ? (this._listeners[name] = _e) : this.offs(name); } } return this; }; EventBus.prototype.emitAll = function (name) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } name = name.toString(); if (this.has(name)) { var _e = this.listeners(name).map(function (f) { return f === null || f === void 0 ? void 0 : f.apply(f, args), f; }).filter(function (f) { return !f.once; }); _e.length > 0 ? (this._listeners[name] = _e) : this.offs(name); } return this; }; EventBus.prototype.on = function (name, listener) { name = name.toString(); var i = this._findIndex(name, listener); if (i === -1) { if (!this._listeners[name]) this._listeners[name] = []; this._listeners[name].push(listener); } return this; }; EventBus.prototype.once = function (name, listener) { // @ts-ignore return listener.once = 1, this.on(name, listener); }; EventBus.prototype.off = function (name, listener) { name = name.toString(); var i = this._findIndex(name, listener); if (i > -1) { var c = this.count(name); if (c === 1) { this.offs(name); } else { this._listeners[name].splice(i, 1); } } return this; }; EventBus.prototype.offs = function () { var _this = this; var names = []; for (var _i = 0; _i < arguments.length; _i++) { names[_i] = arguments[_i]; } names.map(function (name) { _this._listeners[name.toString()] && delete _this._listeners[name.toString()]; }); return this; }; EventBus.prototype.listeners = function (name) { var _e = this._listeners[name]; return _e ? _e : []; }; EventBus.prototype.has = function (name) { return this.listeners(name).length > 0; }; EventBus.prototype.count = function (name) { return this.listeners(name).length; }; EventBus.prototype._findIndex = function (name, listener) { if (this.has(name) === false) return -1; if (!listener) return 0; var _e = this.listeners(name); for (var i = 0; i < _e.length; i++) { var f = _e[i]; if (!f) continue; if ((f.name === listener.name && f.length === listener.length) || f.toString() === listener.toString()) return i; } return -1; }; EventBus.prototype._reflectApply = function (target, receiver, args) { return Function.prototype.apply.call(target, receiver, args); }; return EventBus; }()); exports.EventBus = EventBus; var eventBus = new EventBus(); // @ts-ignore //if (typeof window !== "undefined") window.eventBus = eventBus; exports["default"] = eventBus; //# sourceMappingURL=event-bus.js.map