strong-events
Version:
Strong Typed Event Emitter for TypeScript / JavaScript.
73 lines (72 loc) • 2.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var EventEmitter = /** @class */ (function () {
function EventEmitter() {
this.handlers = [];
}
EventEmitter.prototype.register = function (cb, once) {
if (once === void 0) { once = false; }
this.handlers.push(cb);
return this;
};
EventEmitter.prototype.invoke = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
this.handlers.forEach(function (handler) { return handler.apply(void 0, args); });
};
EventEmitter.prototype.invokeAsync = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return Promise.all(this.handlers.map(function (handler) { return handler.apply(void 0, args); }));
};
EventEmitter.prototype.remove = function (cb) {
var index = this.handlers.indexOf(cb);
this.handlers[index] = this.handlers[this.handlers.length - 1];
this.handlers.pop();
};
EventEmitter.prototype.clear = function () {
this.handlers = [];
};
return EventEmitter;
}());
exports.EventEmitter = EventEmitter;
function createSignal() {
var emitter = new EventEmitter();
function register(cb) {
return emitter.register(cb, this === null);
}
;
register.once = function (cb) {
var callback = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
cb.apply(void 0, args);
emitter.remove(callback);
};
emitter.register(callback);
};
register.remove = function (cb) { return emitter.remove(cb); };
register.invoke = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return emitter.invoke.apply(emitter, args);
};
register.invokeAsync = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return emitter.invokeAsync.apply(emitter, args);
};
register.clear = function () { return emitter.clear(); };
return register;
}
exports.createSignal = createSignal;