fromEvent.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. "use strict";
  2. var __read = (this && this.__read) || function (o, n) {
  3. var m = typeof Symbol === "function" && o[Symbol.iterator];
  4. if (!m) return o;
  5. var i = m.call(o), r, ar = [], e;
  6. try {
  7. while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
  8. }
  9. catch (error) { e = { error: error }; }
  10. finally {
  11. try {
  12. if (r && !r.done && (m = i["return"])) m.call(i);
  13. }
  14. finally { if (e) throw e.error; }
  15. }
  16. return ar;
  17. };
  18. Object.defineProperty(exports, "__esModule", { value: true });
  19. exports.fromEvent = void 0;
  20. var innerFrom_1 = require("../observable/innerFrom");
  21. var Observable_1 = require("../Observable");
  22. var mergeMap_1 = require("../operators/mergeMap");
  23. var isArrayLike_1 = require("../util/isArrayLike");
  24. var isFunction_1 = require("../util/isFunction");
  25. var mapOneOrManyArgs_1 = require("../util/mapOneOrManyArgs");
  26. var nodeEventEmitterMethods = ['addListener', 'removeListener'];
  27. var eventTargetMethods = ['addEventListener', 'removeEventListener'];
  28. var jqueryMethods = ['on', 'off'];
  29. function fromEvent(target, eventName, options, resultSelector) {
  30. if (isFunction_1.isFunction(options)) {
  31. resultSelector = options;
  32. options = undefined;
  33. }
  34. if (resultSelector) {
  35. return fromEvent(target, eventName, options).pipe(mapOneOrManyArgs_1.mapOneOrManyArgs(resultSelector));
  36. }
  37. var _a = __read(isEventTarget(target)
  38. ? eventTargetMethods.map(function (methodName) { return function (handler) { return target[methodName](eventName, handler, options); }; })
  39. :
  40. isNodeStyleEventEmitter(target)
  41. ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName))
  42. : isJQueryStyleEventEmitter(target)
  43. ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName))
  44. : [], 2), add = _a[0], remove = _a[1];
  45. if (!add) {
  46. if (isArrayLike_1.isArrayLike(target)) {
  47. return mergeMap_1.mergeMap(function (subTarget) { return fromEvent(subTarget, eventName, options); })(innerFrom_1.innerFrom(target));
  48. }
  49. }
  50. if (!add) {
  51. throw new TypeError('Invalid event target');
  52. }
  53. return new Observable_1.Observable(function (subscriber) {
  54. var handler = function () {
  55. var args = [];
  56. for (var _i = 0; _i < arguments.length; _i++) {
  57. args[_i] = arguments[_i];
  58. }
  59. return subscriber.next(1 < args.length ? args : args[0]);
  60. };
  61. add(handler);
  62. return function () { return remove(handler); };
  63. });
  64. }
  65. exports.fromEvent = fromEvent;
  66. function toCommonHandlerRegistry(target, eventName) {
  67. return function (methodName) { return function (handler) { return target[methodName](eventName, handler); }; };
  68. }
  69. function isNodeStyleEventEmitter(target) {
  70. return isFunction_1.isFunction(target.addListener) && isFunction_1.isFunction(target.removeListener);
  71. }
  72. function isJQueryStyleEventEmitter(target) {
  73. return isFunction_1.isFunction(target.on) && isFunction_1.isFunction(target.off);
  74. }
  75. function isEventTarget(target) {
  76. return isFunction_1.isFunction(target.addEventListener) && isFunction_1.isFunction(target.removeEventListener);
  77. }
  78. //# sourceMappingURL=fromEvent.js.map