UNPKG

sub-events

Version:

Lightweight, strongly-typed events, with monitored subscriptions.

56 lines (55 loc) 1.74 kB
"use strict"; 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; }