sub-events
Version:
Lightweight, strongly-typed events, with monitored subscriptions.
56 lines (55 loc) • 1.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.fromEmitter = fromEmitter;
exports.fromEmitterArgs = fromEmitterArgs;
var src_1 = require("../dist/src");
/**
* Creates a named event from emitter, for one-argument, strongly-typed events.
*
* If your event takes multiple arguments, see fromEmitterArgs below.
*/
function fromEmitter(target, event, options) {
var sec = new src_1.SubEventCount();
var handler = function (a) { return sec.emit(a, options); };
sec.onCount.subscribe(function (info) {
var start = info.prevCount === 0; // fresh start
var stop = info.newCount === 0; // no subscriptions left
if (start) {
target.addListener(event, handler);
}
else {
if (stop) {
target.removeListener(event, handler);
}
}
});
return sec;
}
/**
* Creates a named event from emitter, for multi-argument, tuple-type events.
*
* The emitted arguments are passed into the handler as a tuple array.
*/
function fromEmitterArgs(target, event, options) {
var sec = new src_1.SubEventCount();
var handler = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return sec.emit(args, options);
};
sec.onCount.subscribe(function (info) {
var start = info.prevCount === 0; // fresh start
var stop = info.newCount === 0; // no subscriptions left
if (start) {
target.addListener(event, handler);
}
else {
if (stop) {
target.removeListener(event, handler);
}
}
});
return sec;
}