@webex/common
Version:
Common utilities for Cisco Webex
71 lines (65 loc) • 2.21 kB
JavaScript
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
_Object$defineProperty(exports, "__esModule", {
value: true
});
exports.proxyEvents = proxyEvents;
exports.transferEvents = transferEvents;
var _apply = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/apply"));
var _lodash = require("lodash");
/*!
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
*/
/**
* Proxies the event binding methods of emitter onto proxy
* @param {EventEmitter|EventEmitterProxy} emitter
* @param {mixed} proxy (probably a promise)
* @returns {EventEmitter} Returns the source emitter to ease use in promise chains
*/
function proxyEvents(emitter, proxy) {
['on', 'once'].forEach(function (key) {
proxy[key] = function () {
emitter[key].apply(emitter, arguments);
return proxy;
};
});
return emitter;
}
/**
* Given a list of events, fires them on drain when they're emitted from source
* @param {Array|string} events
* @param {EventEmitter} source
* @param {EventEmitter} drain
* @returns {undefined}
*/
function transferEvents(events, source, drain) {
events = (0, _lodash.isArray)(events) ? events : [events];
events.forEach(function (event) {
if (source.on) {
source.on(event, function () {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return emit.apply(void 0, [drain, event].concat(args));
});
}
});
}
/**
* Emits an event
* @param {EventEmitter} target The EventEmitter from which to emit an event
* @returns {mixed}
*/
function emit(target) {
var method = target.trigger || target.emit;
/* istanbul ignore if */
if (!method) {
throw new Error('count not determine emit method');
}
for (var _len2 = arguments.length, rest = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
rest[_key2 - 1] = arguments[_key2];
}
return (0, _apply.default)(method, target, rest);
}
//# sourceMappingURL=events.js.map
;