fromEvent.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { __read } from "tslib";
  2. import { innerFrom } from '../observable/innerFrom';
  3. import { Observable } from '../Observable';
  4. import { mergeMap } from '../operators/mergeMap';
  5. import { isArrayLike } from '../util/isArrayLike';
  6. import { isFunction } from '../util/isFunction';
  7. import { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';
  8. var nodeEventEmitterMethods = ['addListener', 'removeListener'];
  9. var eventTargetMethods = ['addEventListener', 'removeEventListener'];
  10. var jqueryMethods = ['on', 'off'];
  11. export function fromEvent(target, eventName, options, resultSelector) {
  12. if (isFunction(options)) {
  13. resultSelector = options;
  14. options = undefined;
  15. }
  16. if (resultSelector) {
  17. return fromEvent(target, eventName, options).pipe(mapOneOrManyArgs(resultSelector));
  18. }
  19. var _a = __read(isEventTarget(target)
  20. ? eventTargetMethods.map(function (methodName) { return function (handler) { return target[methodName](eventName, handler, options); }; })
  21. :
  22. isNodeStyleEventEmitter(target)
  23. ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName))
  24. : isJQueryStyleEventEmitter(target)
  25. ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName))
  26. : [], 2), add = _a[0], remove = _a[1];
  27. if (!add) {
  28. if (isArrayLike(target)) {
  29. return mergeMap(function (subTarget) { return fromEvent(subTarget, eventName, options); })(innerFrom(target));
  30. }
  31. }
  32. if (!add) {
  33. throw new TypeError('Invalid event target');
  34. }
  35. return new Observable(function (subscriber) {
  36. var handler = function () {
  37. var args = [];
  38. for (var _i = 0; _i < arguments.length; _i++) {
  39. args[_i] = arguments[_i];
  40. }
  41. return subscriber.next(1 < args.length ? args : args[0]);
  42. };
  43. add(handler);
  44. return function () { return remove(handler); };
  45. });
  46. }
  47. function toCommonHandlerRegistry(target, eventName) {
  48. return function (methodName) { return function (handler) { return target[methodName](eventName, handler); }; };
  49. }
  50. function isNodeStyleEventEmitter(target) {
  51. return isFunction(target.addListener) && isFunction(target.removeListener);
  52. }
  53. function isJQueryStyleEventEmitter(target) {
  54. return isFunction(target.on) && isFunction(target.off);
  55. }
  56. function isEventTarget(target) {
  57. return isFunction(target.addEventListener) && isFunction(target.removeEventListener);
  58. }
  59. //# sourceMappingURL=fromEvent.js.map