Code coverage report for imgly-sdk-html5/src/js/lib/event-emitter.js

Statements: 92.77% (77 / 83)      Branches: 94.44% (34 / 36)      Functions: 82.35% (14 / 17)      Lines: 92.42% (61 / 66)      Ignored: 2 statements, 4 branches     

All files » imgly-sdk-html5/src/js/lib/ » event-emitter.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147              1         7       1819   1   1 1 3     1 1     1 1 1819   1819 1819 1819     1                             64 1     63 63 1   62   62 1   62         1 1 1 1   1         6 5     6 1 1     5 5 1     4 4 1     3 3 1     2 2         208 8     208       208 208 206     2 2     2         2 1     1       1     1 1  
/**
 * EventEmitter (ES6) from:
 * https://gist.github.com/bloodyowl/41b1de3388c626796eca
 */
 
'use strict';
 
Object.defineProperty(exports, '__esModule', {
  value: true
});
// istanbul ignore next
 
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; Eif ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { Eif (protoProps) defineProperties(Constructor.prototype, protoProps); Iif (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
 
// istanbul ignore next
 
function _classCallCheck(instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
 
var DEFAULT_MAX_LISTENERS = 12;
 
function error(message) {
  for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
    args[_key - 1] = arguments[_key];
  }
 
  console.error.apply(console, [message].concat(args));
  console.trace();
}
 
var EventEmitter = (function () {
  function EventEmitter() {
    _classCallCheck(this, EventEmitter);
 
    this._maxListeners = DEFAULT_MAX_LISTENERS;
    this._events = {};
    this._pipeDestinations = [];
  }
 
  _createClass(EventEmitter, [{
    key: 'pipeEvents',
    value: function pipeEvents(destination) {
      this._pipeDestinations.push(destination);
    }
  }, {
    key: 'unpipeEvents',
    value: function unpipeEvents(destination) {
      var i = this._pipeDestinations.indexOf(destination);
      if (i === -1) return;
      this._pipeDestinations.splice(i, 1);
    }
  }, {
    key: 'on',
    value: function on(type, listener) {
      if (typeof listener !== 'function') {
        throw new TypeError();
      }
 
      var listeners = this._events[type] || (this._events[type] = []);
      if (listeners.indexOf(listener) !== -1) {
        return this;
      }
      listeners.push(listener);
 
      if (listeners.length > this._maxListeners) {
        error('possible memory leak, added %i %s listeners,\n        use EventEmitter#setMaxListeners(number) if you\n        want to increase the limit (%i now)', listeners.length, type, this._maxListeners);
      }
      return this;
    }
  }, {
    key: 'once',
    value: function once(type, listener) {
      var eventsInstance = this;
      function onceCallback() {
        eventsInstance.off(type, onceCallback);
        listener.apply(null, arguments);
      }
      return this.on(type, onceCallback);
    }
  }, {
    key: 'off',
    value: function off(type) {
      for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
        args[_key2 - 1] = arguments[_key2];
      }
 
      if (args.length === 0) {
        this._events[type] = null;
        return this;
      }
 
      var listener = args[0];
      if (typeof listener !== 'function') {
        throw new TypeError();
      }
 
      var listeners = this._events[type];
      if (!listeners || !listeners.length) {
        return this;
      }
 
      var indexOfListener = listeners.indexOf(listener);
      if (indexOfListener === -1) {
        return this;
      }
 
      listeners.splice(indexOfListener, 1);
      return this;
    }
  }, {
    key: 'emit',
    value: function emit(type) {
      for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
        args[_key3 - 1] = arguments[_key3];
      }
 
      this._pipeDestinations.forEach(function (dest) {
        dest.emit.apply(dest, [type].concat(args));
      });
 
      var listeners = this._events[type];
      if (!listeners || !listeners.length) {
        return false;
      }
 
      listeners.forEach(function (fn) {
        return fn.apply(null, args);
      });
 
      return true;
    }
  }, {
    key: 'setMaxListeners',
    value: function setMaxListeners(newMaxListeners) {
      if (parseInt(newMaxListeners, 10) !== newMaxListeners) {
        throw new TypeError();
      }
 
      this._maxListeners = newMaxListeners;
    }
  }]);
 
  return EventEmitter;
})();
 
exports['default'] = EventEmitter;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9yb290L1NFUlZFUi9pbWdseS1zZGstaHRtbDUvc3JjL2pzL2xpYi9ldmVudC1lbWl0dGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUtBLElBQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFBOztBQUVoQyxTQUFTLEtBQUssQ0FBRSxPQUFPLEVBQVc7b0NBQU4sSUFBSTtBQUFKLFFBQUk7OztBQUM5QixTQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUNwRCxTQUFPLENBQUMsS0FBSyxFQUFFLENBQUE7Q0FDaEI7O0lBRUssWUFBWTtBQUNKLFdBRFIsWUFBWSxHQUNEOzBCQURYLFlBQVk7O0FBRWQsUUFBSSxDQUFDLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQTtBQUMxQyxRQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQTtBQUNqQixRQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFBO0dBQzVCOztlQUxHLFlBQVk7O1dBT0wsb0JBQUMsV0FBVyxFQUFFO0FBQ3ZCLFVBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7S0FDekM7OztXQUVZLHNCQUFDLFdBQVcsRUFBRTtBQUN6QixVQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0FBQ3JELFVBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU07QUFDcEIsVUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7S0FDcEM7OztXQUVFLFlBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtBQUNsQixVQUFJLE9BQU8sUUFBUSxLQUFLLFVBQVUsRUFBRTtBQUNsQyxjQUFNLElBQUksU0FBUyxFQUFFLENBQUE7T0FD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QUUsQ0FBQTtPQUN0Qjs7QUFFRCxVQUFJLENBQUMsYUFBYSxHQUFHLGVBQWUsQ0FBQTtLQUNyQzs7O1NBaEdHLFlBQVk7OztxQkFtR0gsWUFBWSIsImZpbGUiOiIvcm9vdC9TRVJWRVIvaW1nbHktc2RrLWh0bWw1L3NyYy9qcy9saWIvZXZlbnQtZW1pdHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXZlbnRFbWl0dGVyIChFUzYpIGZyb206XG4gKiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9ibG9vZHlvd2wvNDFiMWRlMzM4OGM2MjY3OTZlY2FcbiAqL1xuXG5jb25zdCBERUZBVUxUX01BWF9MSVNURU5FUlMgPSAxMlxuXG5mdW5jdGlvbiBlcnJvciAobWVzc2FnZSwgLi4uYXJncykge1xuICBjb25zb2xlLmVycm9yLmFwcGx5KGNvbnNvbGUsIFttZXNzYWdlXS5jb25jYXQoYXJncykpXG4gIGNvbnNvbGUudHJhY2UoKVxufVxuXG5jbGFzcyBFdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5fbWF4TGlzdGVuZXJzID0gREVGQVVMVF9NQVhfTElTVEVORVJTXG4gICAgdGhpcy5fZXZlbnRzID0ge31cbiAgICB0aGlzLl9waXBlRGVzdGluYXRpb25zID0gW11cbiAgfVxuXG4gIHBpcGVFdmVudHMgKGRlc3RpbmF0aW9uKSB7XG4gICAgdGhpcy5fcGlwZURlc3RpbmF0aW9ucy5wdXNoKGRlc3RpbmF0aW9uKVxuICB9XG5cbiAgdW5waXBlRXZlbnRzIChkZXN0aW5hdGlvbikge1xuICAgIGNvbnN0IGkgPSB0aGlzLl9waXBlRGVzdGluYXRpb25zLmluZGV4T2YoZGVzdGluYXRpb24pXG4gICAgaWYgKGkgPT09IC0xKSByZXR1cm5cbiAgICB0aGlzLl9waXBlRGVzdGluYXRpb25zLnNwbGljZShpLCAxKVxuICB9XG5cbiAgb24gKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpXG4gICAgfVxuXG4gICAgbGV0IGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1t0eXBlXSB8fCAodGhpcy5fZXZlbnRzW3R5cGVdID0gW10pXG4gICAgaWYgKGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKVxuXG4gICAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiB0aGlzLl9tYXhMaXN0ZW5lcnMpIHtcbiAgICAgIGVycm9yKFxuICAgICAgICBgcG9zc2libGUgbWVtb3J5IGxlYWssIGFkZGVkICVpICVzIGxpc3RlbmVycyxcbiAgICAgICAgdXNlIEV2ZW50RW1pdHRlciNzZXRNYXhMaXN0ZW5lcnMobnVtYmVyKSBpZiB5b3VcbiAgICAgICAgd2FudCB0byBpbmNyZWFzZSB0aGUgbGltaXQgKCVpIG5vdylgLFxuICAgICAgICBsaXN0ZW5lcnMubGVuZ3RoLFxuICAgICAgICB0eXBlLFxuICAgICAgICB0aGlzLl9tYXhMaXN0ZW5lcnNcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIG9uY2UgKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgbGV0IGV2ZW50c0luc3RhbmNlID0gdGhpc1xuICAgIGZ1bmN0aW9uIG9uY2VDYWxsYmFjayAoKSB7XG4gICAgICBldmVudHNJbnN0YW5jZS5vZmYodHlwZSwgb25jZUNhbGxiYWNrKVxuICAgICAgbGlzdGVuZXIuYXBwbHkobnVsbCwgYXJndW1lbnRzKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vbih0eXBlLCBvbmNlQ2FsbGJhY2spXG4gIH1cblxuICBvZmYgKHR5cGUsIC4uLmFyZ3MpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IG51bGxcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgbGV0IGxpc3RlbmVyID0gYXJnc1swXVxuICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKVxuICAgIH1cblxuICAgIGxldCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbdHlwZV1cbiAgICBpZiAoIWxpc3RlbmVycyB8fCAhbGlzdGVuZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBsZXQgaW5kZXhPZkxpc3RlbmVyID0gbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpXG4gICAgaWYgKGluZGV4T2ZMaXN0ZW5lciA9PT0gLTEpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLnNwbGljZShpbmRleE9mTGlzdGVuZXIsIDEpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGVtaXQgKHR5cGUsIC4uLmFyZ3MpIHtcbiAgICB0aGlzLl9waXBlRGVzdGluYXRpb25zLmZvckVhY2goKGRlc3QpID0+IHtcbiAgICAgIGRlc3QuZW1pdCh0eXBlLCAuLi5hcmdzKVxuICAgIH0pXG5cbiAgICBsZXQgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW3R5cGVdXG4gICAgaWYgKCFsaXN0ZW5lcnMgfHwgIWxpc3RlbmVycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGxpc3RlbmVycy5mb3JFYWNoKGZuID0+IGZuLmFwcGx5KG51bGwsIGFyZ3MpKVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHNldE1heExpc3RlbmVycyAobmV3TWF4TGlzdGVuZXJzKSB7XG4gICAgaWYgKHBhcnNlSW50KG5ld01heExpc3RlbmVycywgMTApICE9PSBuZXdNYXhMaXN0ZW5lcnMpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuX21heExpc3RlbmVycyA9IG5ld01heExpc3RlbmVyc1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEV2ZW50RW1pdHRlclxuIl19