1 import { Observable } from '../Observable';
2 import { isArray } from '../util/isArray';
3 import { isFunction } from '../util/isFunction';
4 import { map } from '../operators/map';
5 const toString = (() => Object.prototype.toString)();
6 export function fromEvent(target, eventName, options, resultSelector) {
7 if (isFunction(options)) {
8 resultSelector = options;
12 return fromEvent(target, eventName, options).pipe(map(args => isArray(args) ? resultSelector(...args) : resultSelector(args)));
14 return new Observable(subscriber => {
16 if (arguments.length > 1) {
17 subscriber.next(Array.prototype.slice.call(arguments));
23 setupSubscription(target, eventName, handler, subscriber, options);
26 function setupSubscription(sourceObj, eventName, handler, subscriber, options) {
28 if (isEventTarget(sourceObj)) {
29 const source = sourceObj;
30 sourceObj.addEventListener(eventName, handler, options);
31 unsubscribe = () => source.removeEventListener(eventName, handler, options);
33 else if (isJQueryStyleEventEmitter(sourceObj)) {
34 const source = sourceObj;
35 sourceObj.on(eventName, handler);
36 unsubscribe = () => source.off(eventName, handler);
38 else if (isNodeStyleEventEmitter(sourceObj)) {
39 const source = sourceObj;
40 sourceObj.addListener(eventName, handler);
41 unsubscribe = () => source.removeListener(eventName, handler);
43 else if (sourceObj && sourceObj.length) {
44 for (let i = 0, len = sourceObj.length; i < len; i++) {
45 setupSubscription(sourceObj[i], eventName, handler, subscriber, options);
49 throw new TypeError('Invalid event target');
51 subscriber.add(unsubscribe);
53 function isNodeStyleEventEmitter(sourceObj) {
54 return sourceObj && typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function';
56 function isJQueryStyleEventEmitter(sourceObj) {
57 return sourceObj && typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function';
59 function isEventTarget(sourceObj) {
60 return sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function';
62 //# sourceMappingURL=fromEvent.js.map