'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = EventEmitterSource; var _DeferredSink = require('../sink/DeferredSink'); var _DeferredSink2 = _interopRequireDefault(_DeferredSink); var _dispose = require('../disposable/dispose'); var dispose = _interopRequireWildcard(_dispose); var _tryEvent = require('./tryEvent'); var tryEvent = _interopRequireWildcard(_tryEvent); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function EventEmitterSource(event, source) { this.event = event; this.source = source; } /** @license MIT License (c) copyright 2010-2016 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ EventEmitterSource.prototype.run = function (sink, scheduler) { // NOTE: Because EventEmitter allows events in the same call stack as // a listener is added, use a DeferredSink to buffer events // until the stack clears, then propagate. This maintains most.js's // invariant that no event will be delivered in the same call stack // as an observer begins observing. var dsink = new _DeferredSink2.default(sink); function addEventVariadic(a) { var arguments$1 = arguments; var l = arguments.length; if (l > 1) { var arr = new Array(l); for (var i = 0; i < l; ++i) { arr[i] = arguments$1[i]; } tryEvent.tryEvent(scheduler.now(), arr, dsink); } else { tryEvent.tryEvent(scheduler.now(), a, dsink); } } this.source.addListener(this.event, addEventVariadic); return dispose.create(disposeEventEmitter, { target: this, addEvent: addEventVariadic }); }; function disposeEventEmitter(info) { var target = info.target; target.source.removeListener(target.event, info.addEvent); }