@splitsoftware/splitio 10.17.3-rc.2 → 10.17.3-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/es/factory/browser.js +41 -33
  2. package/es/factory/node.js +41 -36
  3. package/es/index.js +16 -1
  4. package/es/platform/EventEmitter.js +300 -326
  5. package/es/platform/browser.js +4 -4
  6. package/es/platform/getEventSource/browser.js +2 -2
  7. package/es/platform/getEventSource/node.js +13 -12
  8. package/es/platform/getFetch/browser.js +2 -2
  9. package/es/platform/getFetch/node.js +13 -13
  10. package/es/platform/node.js +5 -5
  11. package/es/platform/request/options/node.js +6 -21
  12. package/es/settings/browser.js +9 -9
  13. package/es/settings/defaults/browser.js +13 -13
  14. package/es/settings/defaults/node.js +22 -22
  15. package/es/settings/defaults/version.js +1 -1
  16. package/es/settings/integrations/browser.js +3 -3
  17. package/es/settings/node.js +9 -12
  18. package/es/settings/storage/browser.js +31 -59
  19. package/es/settings/storage/node.js +62 -91
  20. package/es/umd.js +3 -3
  21. package/lib/factory/browser.js +61 -70
  22. package/lib/factory/node.js +59 -69
  23. package/lib/index.js +16 -4
  24. package/lib/platform/EventEmitter.js +303 -330
  25. package/lib/platform/browser.js +10 -18
  26. package/lib/platform/getEventSource/browser.js +5 -6
  27. package/lib/platform/getEventSource/node.js +18 -19
  28. package/lib/platform/getFetch/browser.js +7 -10
  29. package/lib/platform/getFetch/node.js +17 -18
  30. package/lib/platform/node.js +13 -23
  31. package/lib/platform/request/options/node.js +12 -31
  32. package/lib/settings/browser.js +18 -26
  33. package/lib/settings/defaults/browser.js +15 -19
  34. package/lib/settings/defaults/node.js +24 -28
  35. package/lib/settings/defaults/version.js +2 -4
  36. package/lib/settings/integrations/browser.js +7 -12
  37. package/lib/settings/node.js +17 -29
  38. package/lib/settings/storage/browser.js +36 -68
  39. package/lib/settings/storage/node.js +66 -97
  40. package/lib/umd.js +3 -8
  41. package/package.json +23 -28
  42. package/src/factory/browser.js +10 -1
  43. package/src/factory/node.js +10 -1
  44. package/src/index.js +16 -0
  45. package/src/platform/request/options/node.js +0 -15
  46. package/src/settings/.DS_Store +0 -0
  47. package/src/settings/browser.js +2 -0
  48. package/src/settings/defaults/version.js +1 -1
  49. package/src/settings/integrations/browser.js +2 -2
  50. package/src/settings/node.js +2 -3
  51. package/src/settings/storage/browser.js +0 -16
  52. package/src/settings/storage/node.js +0 -15
  53. package/es/settings/integrations/node.js +0 -5
  54. package/es/settings/runtime/node.js +0 -35
  55. package/lib/settings/integrations/node.js +0 -12
  56. package/lib/settings/runtime/node.js +0 -45
  57. package/src/settings/integrations/node.js +0 -5
  58. package/src/settings/runtime/node.js +0 -37
@@ -1,7 +1,4 @@
1
1
  "use strict";
2
-
3
- exports.__esModule = true;
4
- exports.EventEmitter = EventEmitter;
5
2
  // Copyright Joyent, Inc. and other Node contributors.
6
3
  //
7
4
  // Permission is hereby granted, free of charge, to any person obtaining a
@@ -22,396 +19,372 @@ exports.EventEmitter = EventEmitter;
22
19
  // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23
20
  // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24
21
  // USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.EventEmitter = void 0;
25
24
  // Adaptation of "events" library (https://www.npmjs.com/package/events)
26
25
  // exported as an ES module instead of CommonJS, to avoid extra configuration steps when using
27
26
  // the ESM build of the SDK with tools that doesn't support CommonJS by default (e.g. Rollup).
28
27
  var R = typeof Reflect === 'object' ? Reflect : null;
29
- var ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) {
30
- return Function.prototype.apply.call(target, receiver, args);
31
- };
28
+ var ReflectApply = R && typeof R.apply === 'function'
29
+ ? R.apply
30
+ : function ReflectApply(target, receiver, args) {
31
+ return Function.prototype.apply.call(target, receiver, args);
32
+ };
32
33
  var ReflectOwnKeys;
33
-
34
34
  if (R && typeof R.ownKeys === 'function') {
35
- ReflectOwnKeys = R.ownKeys;
36
- } else if (Object.getOwnPropertySymbols) {
37
- ReflectOwnKeys = function ReflectOwnKeys(target) {
38
- return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));
39
- };
40
- } else {
41
- ReflectOwnKeys = function ReflectOwnKeys(target) {
42
- return Object.getOwnPropertyNames(target);
43
- };
35
+ ReflectOwnKeys = R.ownKeys;
36
+ }
37
+ else if (Object.getOwnPropertySymbols) {
38
+ ReflectOwnKeys = function ReflectOwnKeys(target) {
39
+ return Object.getOwnPropertyNames(target)
40
+ .concat(Object.getOwnPropertySymbols(target));
41
+ };
42
+ }
43
+ else {
44
+ ReflectOwnKeys = function ReflectOwnKeys(target) {
45
+ return Object.getOwnPropertyNames(target);
46
+ };
44
47
  }
45
-
46
48
  function ProcessEmitWarning(warning) {
47
- if (console && console.warn) console.warn(warning);
49
+ if (console && console.warn)
50
+ console.warn(warning);
48
51
  }
49
-
50
52
  var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {
51
- return value !== value;
53
+ return value !== value;
52
54
  };
53
-
54
55
  function EventEmitter() {
55
- EventEmitter.init.call(this);
56
+ EventEmitter.init.call(this);
56
57
  }
57
-
58
+ exports.EventEmitter = EventEmitter;
58
59
  EventEmitter.prototype._events = undefined;
59
60
  EventEmitter.prototype._eventsCount = 0;
60
- EventEmitter.prototype._maxListeners = undefined; // By default EventEmitters will print a warning if more than 10 listeners are
61
+ EventEmitter.prototype._maxListeners = undefined;
62
+ // By default EventEmitters will print a warning if more than 10 listeners are
61
63
  // added to it. This is a useful default which helps finding memory leaks.
62
-
63
64
  var defaultMaxListeners = 10;
64
-
65
65
  function checkListener(listener) {
66
- if (typeof listener !== 'function') {
67
- throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
68
- }
66
+ if (typeof listener !== 'function') {
67
+ throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
68
+ }
69
69
  }
70
-
71
70
  Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
72
- enumerable: true,
73
- get: function get() {
74
- return defaultMaxListeners;
75
- },
76
- set: function set(arg) {
77
- if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {
78
- throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.');
71
+ enumerable: true,
72
+ get: function () {
73
+ return defaultMaxListeners;
74
+ },
75
+ set: function (arg) {
76
+ if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {
77
+ throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.');
78
+ }
79
+ defaultMaxListeners = arg;
79
80
  }
80
-
81
- defaultMaxListeners = arg;
82
- }
83
81
  });
84
-
85
82
  EventEmitter.init = function () {
86
- if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) {
87
- this._events = Object.create(null);
88
- this._eventsCount = 0;
89
- }
90
-
91
- this._maxListeners = this._maxListeners || undefined;
92
- }; // Obviously not all Emitters should be limited to 10. This function allows
83
+ if (this._events === undefined ||
84
+ this._events === Object.getPrototypeOf(this)._events) {
85
+ this._events = Object.create(null);
86
+ this._eventsCount = 0;
87
+ }
88
+ this._maxListeners = this._maxListeners || undefined;
89
+ };
90
+ // Obviously not all Emitters should be limited to 10. This function allows
93
91
  // that to be increased. Set to zero for unlimited.
94
-
95
-
96
92
  EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
97
- if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {
98
- throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.');
99
- }
100
-
101
- this._maxListeners = n;
102
- return this;
93
+ if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {
94
+ throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.');
95
+ }
96
+ this._maxListeners = n;
97
+ return this;
103
98
  };
104
-
105
99
  function _getMaxListeners(that) {
106
- if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners;
107
- return that._maxListeners;
100
+ if (that._maxListeners === undefined)
101
+ return EventEmitter.defaultMaxListeners;
102
+ return that._maxListeners;
108
103
  }
109
-
110
104
  EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
111
- return _getMaxListeners(this);
105
+ return _getMaxListeners(this);
112
106
  };
113
-
114
107
  EventEmitter.prototype.emit = function emit(type) {
115
- var args = [];
116
-
117
- for (var i = 1; i < arguments.length; i++) {
118
- args.push(arguments[i]);
119
- }
120
-
121
- var doError = type === 'error';
122
- var events = this._events;
123
- if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false; // If there is no 'error' event listener then throw.
124
-
125
- if (doError) {
126
- var er;
127
- if (args.length > 0) er = args[0];
128
-
129
- if (er instanceof Error) {
130
- // Note: The comments on the `throw` lines are intentional, they show
131
- // up in Node's output if this results in an unhandled exception.
132
- throw er; // Unhandled 'error' event
133
- } // At least give some kind of context to the user
134
-
135
-
136
- var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));
137
- err.context = er;
138
- throw err; // Unhandled 'error' event
139
- }
140
-
141
- var handler = events[type];
142
- if (handler === undefined) return false;
143
-
144
- if (typeof handler === 'function') {
145
- ReflectApply(handler, this, args);
146
- } else {
147
- var len = handler.length;
148
- var listeners = arrayClone(handler, len); // eslint-disable-next-line no-redeclare
149
-
150
- for (var i = 0; i < len; ++i) {
151
- ReflectApply(listeners[i], this, args);
108
+ var args = [];
109
+ for (var i = 1; i < arguments.length; i++)
110
+ args.push(arguments[i]);
111
+ var doError = (type === 'error');
112
+ var events = this._events;
113
+ if (events !== undefined)
114
+ doError = (doError && events.error === undefined);
115
+ else if (!doError)
116
+ return false;
117
+ // If there is no 'error' event listener then throw.
118
+ if (doError) {
119
+ var er;
120
+ if (args.length > 0)
121
+ er = args[0];
122
+ if (er instanceof Error) {
123
+ // Note: The comments on the `throw` lines are intentional, they show
124
+ // up in Node's output if this results in an unhandled exception.
125
+ throw er; // Unhandled 'error' event
126
+ }
127
+ // At least give some kind of context to the user
128
+ var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));
129
+ err.context = er;
130
+ throw err; // Unhandled 'error' event
131
+ }
132
+ var handler = events[type];
133
+ if (handler === undefined)
134
+ return false;
135
+ if (typeof handler === 'function') {
136
+ ReflectApply(handler, this, args);
152
137
  }
153
- }
154
-
155
- return true;
138
+ else {
139
+ var len = handler.length;
140
+ var listeners = arrayClone(handler, len); // eslint-disable-next-line no-redeclare
141
+ for (var i = 0; i < len; ++i)
142
+ ReflectApply(listeners[i], this, args);
143
+ }
144
+ return true;
156
145
  };
157
-
158
146
  function _addListener(target, type, listener, prepend) {
159
- var m;
160
- var events;
161
- var existing;
162
- checkListener(listener);
163
- events = target._events;
164
-
165
- if (events === undefined) {
166
- events = target._events = Object.create(null);
167
- target._eventsCount = 0;
168
- } else {
169
- // To avoid recursion in the case that type === "newListener"! Before
170
- // adding it to the listeners, first emit "newListener".
171
- if (events.newListener !== undefined) {
172
- target.emit('newListener', type, listener.listener ? listener.listener : listener); // Re-assign `events` because a newListener handler could have caused the
173
- // this._events to be assigned to a new object
174
-
175
- events = target._events;
147
+ var m;
148
+ var events;
149
+ var existing;
150
+ checkListener(listener);
151
+ events = target._events;
152
+ if (events === undefined) {
153
+ events = target._events = Object.create(null);
154
+ target._eventsCount = 0;
155
+ }
156
+ else {
157
+ // To avoid recursion in the case that type === "newListener"! Before
158
+ // adding it to the listeners, first emit "newListener".
159
+ if (events.newListener !== undefined) {
160
+ target.emit('newListener', type, listener.listener ? listener.listener : listener);
161
+ // Re-assign `events` because a newListener handler could have caused the
162
+ // this._events to be assigned to a new object
163
+ events = target._events;
164
+ }
165
+ existing = events[type];
176
166
  }
177
-
178
- existing = events[type];
179
- }
180
-
181
- if (existing === undefined) {
182
- // Optimize the case of one listener. Don't need the extra array object.
183
- existing = events[type] = listener;
184
- ++target._eventsCount;
185
- } else {
186
- if (typeof existing === 'function') {
187
- // Adding the second element, need to change to array.
188
- existing = events[type] = prepend ? [listener, existing] : [existing, listener]; // If we've already got an array, just append.
189
- } else if (prepend) {
190
- existing.unshift(listener);
191
- } else {
192
- existing.push(listener);
193
- } // Check for listener leak
194
-
195
-
196
- m = _getMaxListeners(target);
197
-
198
- if (m > 0 && existing.length > m && !existing.warned) {
199
- existing.warned = true; // No error code for this since it is a Warning
200
- // eslint-disable-next-line no-restricted-syntax
201
-
202
- var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit');
203
- w.name = 'MaxListenersExceededWarning';
204
- w.emitter = target;
205
- w.type = type;
206
- w.count = existing.length;
207
- ProcessEmitWarning(w);
167
+ if (existing === undefined) {
168
+ // Optimize the case of one listener. Don't need the extra array object.
169
+ existing = events[type] = listener;
170
+ ++target._eventsCount;
208
171
  }
209
- }
210
-
211
- return target;
172
+ else {
173
+ if (typeof existing === 'function') {
174
+ // Adding the second element, need to change to array.
175
+ existing = events[type] =
176
+ prepend ? [listener, existing] : [existing, listener];
177
+ // If we've already got an array, just append.
178
+ }
179
+ else if (prepend) {
180
+ existing.unshift(listener);
181
+ }
182
+ else {
183
+ existing.push(listener);
184
+ }
185
+ // Check for listener leak
186
+ m = _getMaxListeners(target);
187
+ if (m > 0 && existing.length > m && !existing.warned) {
188
+ existing.warned = true;
189
+ // No error code for this since it is a Warning
190
+ // eslint-disable-next-line no-restricted-syntax
191
+ var w = new Error('Possible EventEmitter memory leak detected. ' +
192
+ existing.length + ' ' + String(type) + ' listeners ' +
193
+ 'added. Use emitter.setMaxListeners() to ' +
194
+ 'increase limit');
195
+ w.name = 'MaxListenersExceededWarning';
196
+ w.emitter = target;
197
+ w.type = type;
198
+ w.count = existing.length;
199
+ ProcessEmitWarning(w);
200
+ }
201
+ }
202
+ return target;
212
203
  }
213
-
214
204
  EventEmitter.prototype.addListener = function addListener(type, listener) {
215
- return _addListener(this, type, listener, false);
205
+ return _addListener(this, type, listener, false);
216
206
  };
217
-
218
207
  EventEmitter.prototype.on = EventEmitter.prototype.addListener;
219
-
220
- EventEmitter.prototype.prependListener = function prependListener(type, listener) {
221
- return _addListener(this, type, listener, true);
222
- };
223
-
208
+ EventEmitter.prototype.prependListener =
209
+ function prependListener(type, listener) {
210
+ return _addListener(this, type, listener, true);
211
+ };
224
212
  function onceWrapper() {
225
- if (!this.fired) {
226
- this.target.removeListener(this.type, this.wrapFn);
227
- this.fired = true;
228
- if (arguments.length === 0) return this.listener.call(this.target);
229
- return this.listener.apply(this.target, arguments);
230
- }
213
+ if (!this.fired) {
214
+ this.target.removeListener(this.type, this.wrapFn);
215
+ this.fired = true;
216
+ if (arguments.length === 0)
217
+ return this.listener.call(this.target);
218
+ return this.listener.apply(this.target, arguments);
219
+ }
231
220
  }
232
-
233
221
  function _onceWrap(target, type, listener) {
234
- var state = {
235
- fired: false,
236
- wrapFn: undefined,
237
- target: target,
238
- type: type,
239
- listener: listener
240
- };
241
- var wrapped = onceWrapper.bind(state);
242
- wrapped.listener = listener;
243
- state.wrapFn = wrapped;
244
- return wrapped;
222
+ var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };
223
+ var wrapped = onceWrapper.bind(state);
224
+ wrapped.listener = listener;
225
+ state.wrapFn = wrapped;
226
+ return wrapped;
245
227
  }
246
-
247
228
  EventEmitter.prototype.once = function once(type, listener) {
248
- checkListener(listener);
249
- this.on(type, _onceWrap(this, type, listener));
250
- return this;
251
- };
252
-
253
- EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {
254
- checkListener(listener);
255
- this.prependListener(type, _onceWrap(this, type, listener));
256
- return this;
257
- }; // Emits a 'removeListener' event if and only if the listener was removed.
258
-
259
-
260
- EventEmitter.prototype.removeListener = function removeListener(type, listener) {
261
- var list, events, position, i, originalListener;
262
- checkListener(listener);
263
- events = this._events;
264
- if (events === undefined) return this;
265
- list = events[type];
266
- if (list === undefined) return this;
267
-
268
- if (list === listener || list.listener === listener) {
269
- if (--this._eventsCount === 0) this._events = Object.create(null);else {
270
- delete events[type];
271
- if (events.removeListener) this.emit('removeListener', type, list.listener || listener);
272
- }
273
- } else if (typeof list !== 'function') {
274
- position = -1;
275
-
276
- for (i = list.length - 1; i >= 0; i--) {
277
- if (list[i] === listener || list[i].listener === listener) {
278
- originalListener = list[i].listener;
279
- position = i;
280
- break;
281
- }
282
- }
283
-
284
- if (position < 0) return this;
285
- if (position === 0) list.shift();else {
286
- spliceOne(list, position);
287
- }
288
- if (list.length === 1) events[type] = list[0];
289
- if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener);
290
- }
291
-
292
- return this;
293
- };
294
-
295
- EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
296
-
297
- EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {
298
- var listeners, events, i;
299
- events = this._events;
300
- if (events === undefined) return this; // not listening for removeListener, no need to emit
301
-
302
- if (events.removeListener === undefined) {
303
- if (arguments.length === 0) {
304
- this._events = Object.create(null);
305
- this._eventsCount = 0;
306
- } else if (events[type] !== undefined) {
307
- if (--this._eventsCount === 0) this._events = Object.create(null);else delete events[type];
308
- }
309
-
310
- return this;
311
- } // emit removeListener for all listeners on all events
312
-
313
-
314
- if (arguments.length === 0) {
315
- var keys = Object.keys(events);
316
- var key;
317
-
318
- for (i = 0; i < keys.length; ++i) {
319
- key = keys[i];
320
- if (key === 'removeListener') continue;
321
- this.removeAllListeners(key);
322
- }
323
-
324
- this.removeAllListeners('removeListener');
325
- this._events = Object.create(null);
326
- this._eventsCount = 0;
229
+ checkListener(listener);
230
+ this.on(type, _onceWrap(this, type, listener));
327
231
  return this;
328
- }
329
-
330
- listeners = events[type];
331
-
332
- if (typeof listeners === 'function') {
333
- this.removeListener(type, listeners);
334
- } else if (listeners !== undefined) {
335
- // LIFO order
336
- for (i = listeners.length - 1; i >= 0; i--) {
337
- this.removeListener(type, listeners[i]);
338
- }
339
- }
340
-
341
- return this;
342
232
  };
343
-
233
+ EventEmitter.prototype.prependOnceListener =
234
+ function prependOnceListener(type, listener) {
235
+ checkListener(listener);
236
+ this.prependListener(type, _onceWrap(this, type, listener));
237
+ return this;
238
+ };
239
+ // Emits a 'removeListener' event if and only if the listener was removed.
240
+ EventEmitter.prototype.removeListener =
241
+ function removeListener(type, listener) {
242
+ var list, events, position, i, originalListener;
243
+ checkListener(listener);
244
+ events = this._events;
245
+ if (events === undefined)
246
+ return this;
247
+ list = events[type];
248
+ if (list === undefined)
249
+ return this;
250
+ if (list === listener || list.listener === listener) {
251
+ if (--this._eventsCount === 0)
252
+ this._events = Object.create(null);
253
+ else {
254
+ delete events[type];
255
+ if (events.removeListener)
256
+ this.emit('removeListener', type, list.listener || listener);
257
+ }
258
+ }
259
+ else if (typeof list !== 'function') {
260
+ position = -1;
261
+ for (i = list.length - 1; i >= 0; i--) {
262
+ if (list[i] === listener || list[i].listener === listener) {
263
+ originalListener = list[i].listener;
264
+ position = i;
265
+ break;
266
+ }
267
+ }
268
+ if (position < 0)
269
+ return this;
270
+ if (position === 0)
271
+ list.shift();
272
+ else {
273
+ spliceOne(list, position);
274
+ }
275
+ if (list.length === 1)
276
+ events[type] = list[0];
277
+ if (events.removeListener !== undefined)
278
+ this.emit('removeListener', type, originalListener || listener);
279
+ }
280
+ return this;
281
+ };
282
+ EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
283
+ EventEmitter.prototype.removeAllListeners =
284
+ function removeAllListeners(type) {
285
+ var listeners, events, i;
286
+ events = this._events;
287
+ if (events === undefined)
288
+ return this;
289
+ // not listening for removeListener, no need to emit
290
+ if (events.removeListener === undefined) {
291
+ if (arguments.length === 0) {
292
+ this._events = Object.create(null);
293
+ this._eventsCount = 0;
294
+ }
295
+ else if (events[type] !== undefined) {
296
+ if (--this._eventsCount === 0)
297
+ this._events = Object.create(null);
298
+ else
299
+ delete events[type];
300
+ }
301
+ return this;
302
+ }
303
+ // emit removeListener for all listeners on all events
304
+ if (arguments.length === 0) {
305
+ var keys = Object.keys(events);
306
+ var key;
307
+ for (i = 0; i < keys.length; ++i) {
308
+ key = keys[i];
309
+ if (key === 'removeListener')
310
+ continue;
311
+ this.removeAllListeners(key);
312
+ }
313
+ this.removeAllListeners('removeListener');
314
+ this._events = Object.create(null);
315
+ this._eventsCount = 0;
316
+ return this;
317
+ }
318
+ listeners = events[type];
319
+ if (typeof listeners === 'function') {
320
+ this.removeListener(type, listeners);
321
+ }
322
+ else if (listeners !== undefined) {
323
+ // LIFO order
324
+ for (i = listeners.length - 1; i >= 0; i--) {
325
+ this.removeListener(type, listeners[i]);
326
+ }
327
+ }
328
+ return this;
329
+ };
344
330
  function _listeners(target, type, unwrap) {
345
- var events = target._events;
346
- if (events === undefined) return [];
347
- var evlistener = events[type];
348
- if (evlistener === undefined) return [];
349
- if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener];
350
- return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
331
+ var events = target._events;
332
+ if (events === undefined)
333
+ return [];
334
+ var evlistener = events[type];
335
+ if (evlistener === undefined)
336
+ return [];
337
+ if (typeof evlistener === 'function')
338
+ return unwrap ? [evlistener.listener || evlistener] : [evlistener];
339
+ return unwrap ?
340
+ unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
351
341
  }
352
-
353
342
  EventEmitter.prototype.listeners = function listeners(type) {
354
- return _listeners(this, type, true);
343
+ return _listeners(this, type, true);
355
344
  };
356
-
357
345
  EventEmitter.prototype.rawListeners = function rawListeners(type) {
358
- return _listeners(this, type, false);
346
+ return _listeners(this, type, false);
359
347
  };
360
-
361
348
  EventEmitter.listenerCount = function (emitter, type) {
362
- if (typeof emitter.listenerCount === 'function') {
363
- return emitter.listenerCount(type);
364
- } else {
365
- return listenerCount.call(emitter, type);
366
- }
349
+ if (typeof emitter.listenerCount === 'function') {
350
+ return emitter.listenerCount(type);
351
+ }
352
+ else {
353
+ return listenerCount.call(emitter, type);
354
+ }
367
355
  };
368
-
369
356
  EventEmitter.prototype.listenerCount = listenerCount;
370
-
371
357
  function listenerCount(type) {
372
- var events = this._events;
373
-
374
- if (events !== undefined) {
375
- var evlistener = events[type];
376
-
377
- if (typeof evlistener === 'function') {
378
- return 1;
379
- } else if (evlistener !== undefined) {
380
- return evlistener.length;
358
+ var events = this._events;
359
+ if (events !== undefined) {
360
+ var evlistener = events[type];
361
+ if (typeof evlistener === 'function') {
362
+ return 1;
363
+ }
364
+ else if (evlistener !== undefined) {
365
+ return evlistener.length;
366
+ }
381
367
  }
382
- }
383
-
384
- return 0;
368
+ return 0;
385
369
  }
386
-
387
370
  EventEmitter.prototype.eventNames = function eventNames() {
388
- return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
371
+ return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
389
372
  };
390
-
391
373
  function arrayClone(arr, n) {
392
- var copy = new Array(n);
393
-
394
- for (var i = 0; i < n; ++i) {
395
- copy[i] = arr[i];
396
- }
397
-
398
- return copy;
374
+ var copy = new Array(n);
375
+ for (var i = 0; i < n; ++i)
376
+ copy[i] = arr[i];
377
+ return copy;
399
378
  }
400
-
401
379
  function spliceOne(list, index) {
402
- for (; index + 1 < list.length; index++) {
403
- list[index] = list[index + 1];
404
- }
405
-
406
- list.pop();
380
+ for (; index + 1 < list.length; index++)
381
+ list[index] = list[index + 1];
382
+ list.pop();
407
383
  }
408
-
409
384
  function unwrapListeners(arr) {
410
- var ret = new Array(arr.length);
411
-
412
- for (var i = 0; i < ret.length; ++i) {
413
- ret[i] = arr[i].listener || arr[i];
414
- }
415
-
416
- return ret;
417
- }
385
+ var ret = new Array(arr.length);
386
+ for (var i = 0; i < ret.length; ++i) {
387
+ ret[i] = arr[i].listener || arr[i];
388
+ }
389
+ return ret;
390
+ }