UNPKG

luminati-proxy-stripped

Version:

A configurable local proxy for luminati.io

218 lines (187 loc) 5.49 kB
/*jslint skip_file:true*/ (function(){ var define; var is_node = typeof module=='object' && module.exports && module.children; var is_rn = (typeof global=='object' && !!global.nativeRequire) || (typeof navigator=='object' && navigator.product=='ReactNative'); if (!is_node && !is_rn) define = self.define; else define = require('./require_node.js').define(module, '../'); define([], function(){ /** * Minimal EventEmitter interface that is molded against the Node.js * EventEmitter interface. * * @constructor * @api public */ function EventEmitter() { this._events = {}; } /** * Return a list of assigned event listeners. * * @param {String} event The events that should be listed. * @returns {Array} * @api public */ EventEmitter.prototype.listeners = function listeners(event) { return Array.apply(this, this._events[event] || []); }; /** * Emit an event to all registered event listeners. * * @param {String} event The name of the event. * @returns {Boolean} Indication if we've emitted an event. * @api public */ EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) { if (!this._events || !this._events[event]) return false; var listeners = this._events[event] , length = listeners.length , len = arguments.length , fn = listeners[0] , args , i; if (1 === length) { switch (len) { case 1: fn.call(fn.__EE3_context || this); break; case 2: fn.call(fn.__EE3_context || this, a1); break; case 3: fn.call(fn.__EE3_context || this, a1, a2); break; case 4: fn.call(fn.__EE3_context || this, a1, a2, a3); break; case 5: fn.call(fn.__EE3_context || this, a1, a2, a3, a4); break; case 6: fn.call(fn.__EE3_context || this, a1, a2, a3, a4, a5); break; default: for (i = 1, args = new Array(len -1); i < len; i++) { args[i - 1] = arguments[i]; } fn.apply(fn.__EE3_context || this, args); } if (fn.__EE3_once) this.removeListener(event, fn); } else { for (i = 1, args = new Array(len -1); i < len; i++) { args[i - 1] = arguments[i]; } for (i = 0; i < length; fn = listeners[++i]) { fn.apply(fn.__EE3_context || this, args); if (fn.__EE3_once) this.removeListener(event, fn); } } return true; }; function _addListener(event, fn, context, prepend) { if (!this._events) this._events = {}; if (!this._events[event]) this._events[event] = []; fn.__EE3_context = context; if (prepend) this._events[event].unshift(fn); else this._events[event].push(fn); return this; } /** * Register a new EventListener for the given event. * * @param {String} event Name of the event. * @param {Functon} fn Callback function. * @param {Mixed} context The context of the function. * @api public */ EventEmitter.prototype.on = function on(event, fn, context) { return _addListener.apply(this, [event, fn, context]); }; /** * Add an EventListener that's only called once. * * @param {String} event Name of the event. * @param {Function} fn Callback function. * @param {Mixed} context The context of the function. * @api public */ EventEmitter.prototype.once = function once(event, fn, context) { fn.__EE3_once = true; return this.on(event, fn, context); }; EventEmitter.prototype.prependListener = function prependListener(event, fn, context) { return _addListener.apply(this, [event, fn, context, true]); }; EventEmitter.prototype.prependOnceListener = function prependOnceListener( event, fn, context) { fn.__EE3_once = true; return this.prependListener(event, fn, context); }; /** * Remove event listeners. * * @param {String} event The event we want to remove. * @param {Function} fn The listener that we need to find. * @api public */ EventEmitter.prototype.removeListener = function removeListener(event, fn) { if (!this._events || !this._events[event]) return this; var listeners = this._events[event] , events = []; for (var i = 0, length = listeners.length; i < length; i++) { if (fn && listeners[i] !== fn) { events.push(listeners[i]); } } // // Reset the array, or remove it completely if we have no more listeners. // if (events.length) this._events[event] = events; else this._events[event] = null; return this; }; /** * Remove all listeners or only the listeners for the specified event. * * @param {String} event The event want to remove all listeners for. * @api public */ EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) { if (!this._events) return this; if (event) this._events[event] = null; else this._events = {}; return this; }; // // Alias methods names because people roll like that. // EventEmitter.prototype.off = EventEmitter.prototype.removeListener; EventEmitter.prototype.addListener = EventEmitter.prototype.on; // // This function doesn't apply anymore. // EventEmitter.prototype.setMaxListeners = function setMaxListeners() { return this; }; EventEmitter.prototype.eventNames = function eventNames(){ var _this = this; return Object.keys(this._events).filter(function(e){ return _this._events[e]!==null; }); } // // Expose the module. // EventEmitter.EventEmitter = EventEmitter; EventEmitter.EventEmitter2 = EventEmitter; EventEmitter.EventEmitter3 = EventEmitter; return EventEmitter; }); })();