62 lines
2.0 KiB
JavaScript
62 lines
2.0 KiB
JavaScript
'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);
|
|
} |