| "use strict"; | 
| Object.defineProperty(exports, "__esModule", { value: true }); | 
| var Observable_1 = require("../Observable"); | 
| var isArray_1 = require("../util/isArray"); | 
| var isFunction_1 = require("../util/isFunction"); | 
| var map_1 = require("../operators/map"); | 
| var toString = (function () { return Object.prototype.toString; })(); | 
| function fromEvent(target, eventName, options, resultSelector) { | 
|     if (isFunction_1.isFunction(options)) { | 
|         resultSelector = options; | 
|         options = undefined; | 
|     } | 
|     if (resultSelector) { | 
|         return fromEvent(target, eventName, options).pipe(map_1.map(function (args) { return isArray_1.isArray(args) ? resultSelector.apply(void 0, args) : resultSelector(args); })); | 
|     } | 
|     return new Observable_1.Observable(function (subscriber) { | 
|         function handler(e) { | 
|             if (arguments.length > 1) { | 
|                 subscriber.next(Array.prototype.slice.call(arguments)); | 
|             } | 
|             else { | 
|                 subscriber.next(e); | 
|             } | 
|         } | 
|         setupSubscription(target, eventName, handler, subscriber, options); | 
|     }); | 
| } | 
| exports.fromEvent = fromEvent; | 
| function setupSubscription(sourceObj, eventName, handler, subscriber, options) { | 
|     var unsubscribe; | 
|     if (isEventTarget(sourceObj)) { | 
|         var source_1 = sourceObj; | 
|         sourceObj.addEventListener(eventName, handler, options); | 
|         unsubscribe = function () { return source_1.removeEventListener(eventName, handler, options); }; | 
|     } | 
|     else if (isJQueryStyleEventEmitter(sourceObj)) { | 
|         var source_2 = sourceObj; | 
|         sourceObj.on(eventName, handler); | 
|         unsubscribe = function () { return source_2.off(eventName, handler); }; | 
|     } | 
|     else if (isNodeStyleEventEmitter(sourceObj)) { | 
|         var source_3 = sourceObj; | 
|         sourceObj.addListener(eventName, handler); | 
|         unsubscribe = function () { return source_3.removeListener(eventName, handler); }; | 
|     } | 
|     else if (sourceObj && sourceObj.length) { | 
|         for (var i = 0, len = sourceObj.length; i < len; i++) { | 
|             setupSubscription(sourceObj[i], eventName, handler, subscriber, options); | 
|         } | 
|     } | 
|     else { | 
|         throw new TypeError('Invalid event target'); | 
|     } | 
|     subscriber.add(unsubscribe); | 
| } | 
| function isNodeStyleEventEmitter(sourceObj) { | 
|     return sourceObj && typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function'; | 
| } | 
| function isJQueryStyleEventEmitter(sourceObj) { | 
|     return sourceObj && typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function'; | 
| } | 
| function isEventTarget(sourceObj) { | 
|     return sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function'; | 
| } | 
| //# sourceMappingURL=fromEvent.js.map |