@sockethub/client 5.0.0-alpha.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.
@@ -0,0 +1,2600 @@
1
+ (function webpackUniversalModuleDefinition(root, factory) {
2
+ if(typeof exports === 'object' && typeof module === 'object')
3
+ module.exports = factory();
4
+ else if(typeof define === 'function' && define.amd)
5
+ define([], factory);
6
+ else {
7
+ var a = factory();
8
+ for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
9
+ }
10
+ })(self, function() {
11
+ return /******/ (() => { // webpackBootstrap
12
+ /******/ var __webpack_modules__ = ({
13
+
14
+ /***/ 423:
15
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
16
+
17
+ "use strict";
18
+
19
+
20
+ var isValue = __webpack_require__(132)
21
+ , isPlainFunction = __webpack_require__(421)
22
+ , assign = __webpack_require__(240)
23
+ , normalizeOpts = __webpack_require__(343)
24
+ , contains = __webpack_require__(50);
25
+
26
+ var d = (module.exports = function (dscr, value/*, options*/) {
27
+ var c, e, w, options, desc;
28
+ if (arguments.length < 2 || typeof dscr !== "string") {
29
+ options = value;
30
+ value = dscr;
31
+ dscr = null;
32
+ } else {
33
+ options = arguments[2];
34
+ }
35
+ if (isValue(dscr)) {
36
+ c = contains.call(dscr, "c");
37
+ e = contains.call(dscr, "e");
38
+ w = contains.call(dscr, "w");
39
+ } else {
40
+ c = w = true;
41
+ e = false;
42
+ }
43
+
44
+ desc = { value: value, configurable: c, enumerable: e, writable: w };
45
+ return !options ? desc : assign(normalizeOpts(options), desc);
46
+ });
47
+
48
+ d.gs = function (dscr, get, set/*, options*/) {
49
+ var c, e, options, desc;
50
+ if (typeof dscr !== "string") {
51
+ options = set;
52
+ set = get;
53
+ get = dscr;
54
+ dscr = null;
55
+ } else {
56
+ options = arguments[3];
57
+ }
58
+ if (!isValue(get)) {
59
+ get = undefined;
60
+ } else if (!isPlainFunction(get)) {
61
+ options = get;
62
+ get = set = undefined;
63
+ } else if (!isValue(set)) {
64
+ set = undefined;
65
+ } else if (!isPlainFunction(set)) {
66
+ options = set;
67
+ set = undefined;
68
+ }
69
+ if (isValue(dscr)) {
70
+ c = contains.call(dscr, "c");
71
+ e = contains.call(dscr, "e");
72
+ } else {
73
+ c = true;
74
+ e = false;
75
+ }
76
+
77
+ desc = { get: get, set: set, configurable: c, enumerable: e };
78
+ return !options ? desc : assign(normalizeOpts(options), desc);
79
+ };
80
+
81
+
82
+ /***/ }),
83
+
84
+ /***/ 91:
85
+ /***/ ((module) => {
86
+
87
+ "use strict";
88
+
89
+
90
+ // eslint-disable-next-line no-empty-function
91
+ module.exports = function () {};
92
+
93
+
94
+ /***/ }),
95
+
96
+ /***/ 240:
97
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
98
+
99
+ "use strict";
100
+
101
+
102
+ module.exports = __webpack_require__(229)() ? Object.assign : __webpack_require__(640);
103
+
104
+
105
+ /***/ }),
106
+
107
+ /***/ 229:
108
+ /***/ ((module) => {
109
+
110
+ "use strict";
111
+
112
+
113
+ module.exports = function () {
114
+ var assign = Object.assign, obj;
115
+ if (typeof assign !== "function") return false;
116
+ obj = { foo: "raz" };
117
+ assign(obj, { bar: "dwa" }, { trzy: "trzy" });
118
+ return obj.foo + obj.bar + obj.trzy === "razdwatrzy";
119
+ };
120
+
121
+
122
+ /***/ }),
123
+
124
+ /***/ 640:
125
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
126
+
127
+ "use strict";
128
+
129
+
130
+ var keys = __webpack_require__(255)
131
+ , value = __webpack_require__(110)
132
+ , max = Math.max;
133
+
134
+ module.exports = function (dest, src/*, …srcn*/) {
135
+ var error, i, length = max(arguments.length, 2), assign;
136
+ dest = Object(value(dest));
137
+ assign = function (key) {
138
+ try {
139
+ dest[key] = src[key];
140
+ } catch (e) {
141
+ if (!error) error = e;
142
+ }
143
+ };
144
+ for (i = 1; i < length; ++i) {
145
+ src = arguments[i];
146
+ keys(src).forEach(assign);
147
+ }
148
+ if (error !== undefined) throw error;
149
+ return dest;
150
+ };
151
+
152
+
153
+ /***/ }),
154
+
155
+ /***/ 515:
156
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
157
+
158
+ "use strict";
159
+
160
+
161
+ var _undefined = __webpack_require__(91)(); // Support ES3 engines
162
+
163
+ module.exports = function (val) { return val !== _undefined && val !== null; };
164
+
165
+
166
+ /***/ }),
167
+
168
+ /***/ 255:
169
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
170
+
171
+ "use strict";
172
+
173
+
174
+ module.exports = __webpack_require__(291)() ? Object.keys : __webpack_require__(184);
175
+
176
+
177
+ /***/ }),
178
+
179
+ /***/ 291:
180
+ /***/ ((module) => {
181
+
182
+ "use strict";
183
+
184
+
185
+ module.exports = function () {
186
+ try {
187
+ Object.keys("primitive");
188
+ return true;
189
+ } catch (e) {
190
+ return false;
191
+ }
192
+ };
193
+
194
+
195
+ /***/ }),
196
+
197
+ /***/ 184:
198
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
199
+
200
+ "use strict";
201
+
202
+
203
+ var isValue = __webpack_require__(515);
204
+
205
+ var keys = Object.keys;
206
+
207
+ module.exports = function (object) { return keys(isValue(object) ? Object(object) : object); };
208
+
209
+
210
+ /***/ }),
211
+
212
+ /***/ 343:
213
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
214
+
215
+ "use strict";
216
+
217
+
218
+ var isValue = __webpack_require__(515);
219
+
220
+ var forEach = Array.prototype.forEach, create = Object.create;
221
+
222
+ var process = function (src, obj) {
223
+ var key;
224
+ for (key in src) obj[key] = src[key];
225
+ };
226
+
227
+ // eslint-disable-next-line no-unused-vars
228
+ module.exports = function (opts1/*, …options*/) {
229
+ var result = create(null);
230
+ forEach.call(arguments, function (options) {
231
+ if (!isValue(options)) return;
232
+ process(Object(options), result);
233
+ });
234
+ return result;
235
+ };
236
+
237
+
238
+ /***/ }),
239
+
240
+ /***/ 979:
241
+ /***/ ((module) => {
242
+
243
+ "use strict";
244
+
245
+
246
+ module.exports = function (fn) {
247
+ if (typeof fn !== "function") throw new TypeError(fn + " is not a function");
248
+ return fn;
249
+ };
250
+
251
+
252
+ /***/ }),
253
+
254
+ /***/ 110:
255
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
256
+
257
+ "use strict";
258
+
259
+
260
+ var isValue = __webpack_require__(515);
261
+
262
+ module.exports = function (value) {
263
+ if (!isValue(value)) throw new TypeError("Cannot use null or undefined");
264
+ return value;
265
+ };
266
+
267
+
268
+ /***/ }),
269
+
270
+ /***/ 50:
271
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
272
+
273
+ "use strict";
274
+
275
+
276
+ module.exports = __webpack_require__(459)() ? String.prototype.contains : __webpack_require__(131);
277
+
278
+
279
+ /***/ }),
280
+
281
+ /***/ 459:
282
+ /***/ ((module) => {
283
+
284
+ "use strict";
285
+
286
+
287
+ var str = "razdwatrzy";
288
+
289
+ module.exports = function () {
290
+ if (typeof str.contains !== "function") return false;
291
+ return str.contains("dwa") === true && str.contains("foo") === false;
292
+ };
293
+
294
+
295
+ /***/ }),
296
+
297
+ /***/ 131:
298
+ /***/ ((module) => {
299
+
300
+ "use strict";
301
+
302
+
303
+ var indexOf = String.prototype.indexOf;
304
+
305
+ module.exports = function (searchString/*, position*/) {
306
+ return indexOf.call(this, searchString, arguments[1]) > -1;
307
+ };
308
+
309
+
310
+ /***/ }),
311
+
312
+ /***/ 360:
313
+ /***/ ((module, exports, __webpack_require__) => {
314
+
315
+ "use strict";
316
+
317
+
318
+ var d = __webpack_require__(423)
319
+ , callable = __webpack_require__(979)
320
+
321
+ , apply = Function.prototype.apply, call = Function.prototype.call
322
+ , create = Object.create, defineProperty = Object.defineProperty
323
+ , defineProperties = Object.defineProperties
324
+ , hasOwnProperty = Object.prototype.hasOwnProperty
325
+ , descriptor = { configurable: true, enumerable: false, writable: true }
326
+
327
+ , on, once, off, emit, methods, descriptors, base;
328
+
329
+ on = function (type, listener) {
330
+ var data;
331
+
332
+ callable(listener);
333
+
334
+ if (!hasOwnProperty.call(this, '__ee__')) {
335
+ data = descriptor.value = create(null);
336
+ defineProperty(this, '__ee__', descriptor);
337
+ descriptor.value = null;
338
+ } else {
339
+ data = this.__ee__;
340
+ }
341
+ if (!data[type]) data[type] = listener;
342
+ else if (typeof data[type] === 'object') data[type].push(listener);
343
+ else data[type] = [data[type], listener];
344
+
345
+ return this;
346
+ };
347
+
348
+ once = function (type, listener) {
349
+ var once, self;
350
+
351
+ callable(listener);
352
+ self = this;
353
+ on.call(this, type, once = function () {
354
+ off.call(self, type, once);
355
+ apply.call(listener, this, arguments);
356
+ });
357
+
358
+ once.__eeOnceListener__ = listener;
359
+ return this;
360
+ };
361
+
362
+ off = function (type, listener) {
363
+ var data, listeners, candidate, i;
364
+
365
+ callable(listener);
366
+
367
+ if (!hasOwnProperty.call(this, '__ee__')) return this;
368
+ data = this.__ee__;
369
+ if (!data[type]) return this;
370
+ listeners = data[type];
371
+
372
+ if (typeof listeners === 'object') {
373
+ for (i = 0; (candidate = listeners[i]); ++i) {
374
+ if ((candidate === listener) ||
375
+ (candidate.__eeOnceListener__ === listener)) {
376
+ if (listeners.length === 2) data[type] = listeners[i ? 0 : 1];
377
+ else listeners.splice(i, 1);
378
+ }
379
+ }
380
+ } else {
381
+ if ((listeners === listener) ||
382
+ (listeners.__eeOnceListener__ === listener)) {
383
+ delete data[type];
384
+ }
385
+ }
386
+
387
+ return this;
388
+ };
389
+
390
+ emit = function (type) {
391
+ var i, l, listener, listeners, args;
392
+
393
+ if (!hasOwnProperty.call(this, '__ee__')) return;
394
+ listeners = this.__ee__[type];
395
+ if (!listeners) return;
396
+
397
+ if (typeof listeners === 'object') {
398
+ l = arguments.length;
399
+ args = new Array(l - 1);
400
+ for (i = 1; i < l; ++i) args[i - 1] = arguments[i];
401
+
402
+ listeners = listeners.slice();
403
+ for (i = 0; (listener = listeners[i]); ++i) {
404
+ apply.call(listener, this, args);
405
+ }
406
+ } else {
407
+ switch (arguments.length) {
408
+ case 1:
409
+ call.call(listeners, this);
410
+ break;
411
+ case 2:
412
+ call.call(listeners, this, arguments[1]);
413
+ break;
414
+ case 3:
415
+ call.call(listeners, this, arguments[1], arguments[2]);
416
+ break;
417
+ default:
418
+ l = arguments.length;
419
+ args = new Array(l - 1);
420
+ for (i = 1; i < l; ++i) {
421
+ args[i - 1] = arguments[i];
422
+ }
423
+ apply.call(listeners, this, args);
424
+ }
425
+ }
426
+ };
427
+
428
+ methods = {
429
+ on: on,
430
+ once: once,
431
+ off: off,
432
+ emit: emit
433
+ };
434
+
435
+ descriptors = {
436
+ on: d(on),
437
+ once: d(once),
438
+ off: d(off),
439
+ emit: d(emit)
440
+ };
441
+
442
+ base = defineProperties({}, descriptors);
443
+
444
+ module.exports = exports = function (o) {
445
+ return (o == null) ? create(base) : defineProperties(Object(o), descriptors);
446
+ };
447
+ exports.methods = methods;
448
+
449
+
450
+ /***/ }),
451
+
452
+ /***/ 414:
453
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
454
+
455
+ "use strict";
456
+
457
+
458
+ var isPrototype = __webpack_require__(670);
459
+
460
+ module.exports = function (value) {
461
+ if (typeof value !== "function") return false;
462
+
463
+ if (!hasOwnProperty.call(value, "length")) return false;
464
+
465
+ try {
466
+ if (typeof value.length !== "number") return false;
467
+ if (typeof value.call !== "function") return false;
468
+ if (typeof value.apply !== "function") return false;
469
+ } catch (error) {
470
+ return false;
471
+ }
472
+
473
+ return !isPrototype(value);
474
+ };
475
+
476
+
477
+ /***/ }),
478
+
479
+ /***/ 783:
480
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
481
+
482
+ "use strict";
483
+
484
+
485
+ var isValue = __webpack_require__(132);
486
+
487
+ // prettier-ignore
488
+ var possibleTypes = { "object": true, "function": true, "undefined": true /* document.all */ };
489
+
490
+ module.exports = function (value) {
491
+ if (!isValue(value)) return false;
492
+ return hasOwnProperty.call(possibleTypes, typeof value);
493
+ };
494
+
495
+
496
+ /***/ }),
497
+
498
+ /***/ 421:
499
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
500
+
501
+ "use strict";
502
+
503
+
504
+ var isFunction = __webpack_require__(414);
505
+
506
+ var classRe = /^\s*class[\s{/}]/, functionToString = Function.prototype.toString;
507
+
508
+ module.exports = function (value) {
509
+ if (!isFunction(value)) return false;
510
+ if (classRe.test(functionToString.call(value))) return false;
511
+ return true;
512
+ };
513
+
514
+
515
+ /***/ }),
516
+
517
+ /***/ 670:
518
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
519
+
520
+ "use strict";
521
+
522
+
523
+ var isObject = __webpack_require__(783);
524
+
525
+ module.exports = function (value) {
526
+ if (!isObject(value)) return false;
527
+ try {
528
+ if (!value.constructor) return false;
529
+ return value.constructor.prototype === value;
530
+ } catch (error) {
531
+ return false;
532
+ }
533
+ };
534
+
535
+
536
+ /***/ }),
537
+
538
+ /***/ 132:
539
+ /***/ ((module) => {
540
+
541
+ "use strict";
542
+
543
+
544
+ // ES3 safe
545
+ var _undefined = void 0;
546
+
547
+ module.exports = function (value) { return value !== _undefined && value !== null; };
548
+
549
+
550
+ /***/ }),
551
+
552
+ /***/ 744:
553
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
554
+
555
+ /*!
556
+ * activity-streams
557
+ * https://github.com/silverbucket/activity-streams
558
+ *
559
+ * Developed and Maintained by:
560
+ * Nick Jennings <nick@silverbucket.net>
561
+ *
562
+ * activity-streams is released under the MIT (see LICENSE).
563
+ *
564
+ * You don't have to do anything special to choose one license or the other
565
+ * and you don't have to notify anyone which license you are using.
566
+ * Please see the corresponding license file for details of these licenses.
567
+ * You are free to use, modify and distribute this software, but all copyright
568
+ * information must remain.
569
+ *
570
+ */
571
+
572
+
573
+ const EventEmitter = __webpack_require__(360);
574
+
575
+ const ee = EventEmitter(),
576
+ baseProps = {
577
+ stream: [
578
+ 'id', 'type', 'actor', 'target', 'object', 'context', 'context',
579
+ 'published', 'error'
580
+ ],
581
+ object: [
582
+ 'id', 'type', 'context',
583
+ 'alias', 'attachedTo', 'attachment', 'attributedTo', 'attributedWith',
584
+ 'content', 'contentMap', 'context', 'contextOf', 'name', 'endTime', 'generator',
585
+ 'generatorOf', 'group', 'icon', 'image', 'inReplyTo', 'members', 'memberOf',
586
+ 'message', 'location', 'locationOf', 'objectOf', 'originOf', 'presence',
587
+ 'preview', 'previewOf', 'provider', 'providerOf', 'published', 'rating',
588
+ 'relationship', 'resultOf', 'replies', 'role', 'scope', 'scopeOf', 'startTime',
589
+ 'status', 'summary', 'topic', 'tag', 'tagOf', 'targetOf', 'title', 'titleMap',
590
+ 'updated', 'url'
591
+ ]
592
+ },
593
+ rename = {
594
+ '@id': 'id',
595
+ '@type': 'type',
596
+ 'verb': 'type',
597
+ 'displayName': 'name',
598
+ 'objectType': 'type',
599
+ 'platform': 'context'
600
+ },
601
+ expand = {
602
+ 'actor' : {
603
+ 'primary': 'id',
604
+ 'props': baseProps
605
+ },
606
+ 'target': {
607
+ 'primary': 'id',
608
+ 'props': baseProps
609
+ },
610
+ 'object': {
611
+ 'primary': 'content',
612
+ 'props': baseProps
613
+ }
614
+ };
615
+
616
+ let objs = new Map(),
617
+ failOnUnknownObjectProperties = false,
618
+ specialObjs = [], // the objects don't get rejected for bad props
619
+ customProps = {};
620
+
621
+
622
+ function matchesCustomProp(type, key) {
623
+ return !!((typeof customProps[type] === 'object') && (customProps[type].includes(key)));
624
+ }
625
+
626
+ function renameProp(obj, key) {
627
+ obj[rename[key]] = obj[key];
628
+ delete obj[key];
629
+ return obj;
630
+ }
631
+
632
+ function validateObject(type, obj = {}) {
633
+ const unknownKeys = Object.keys(obj).filter((key) => {
634
+ if (! baseProps[type].includes(key)) {
635
+ return key;
636
+ }
637
+ });
638
+
639
+ for (let key of unknownKeys) {
640
+ if (rename[key]) {
641
+ // rename property instead of fail
642
+ obj = renameProp(obj, key)
643
+ continue;
644
+ }
645
+
646
+ if (matchesCustomProp(obj.type, key)) {
647
+ // custom property matches, continue
648
+ continue;
649
+ }
650
+
651
+ if (! specialObjs.includes(obj.type)) {
652
+ // not defined as a special prop
653
+ // don't know what to do with it, so throw error
654
+ const err = `invalid property: "${key}"`;
655
+ if (failOnUnknownObjectProperties) {
656
+ throw new Error(err);
657
+ } else {
658
+ console.warn(err);
659
+ }
660
+ }
661
+ }
662
+ }
663
+
664
+
665
+ function ensureProps(obj) {
666
+ // ensure the name property, which can general be inferred from the id
667
+ // name = obj.match(/(?(?\w+):\/\/)(?:.+@)?(.+?)(?:\/|$)/)[1]
668
+ return obj;
669
+ }
670
+
671
+ function expandStream(meta) {
672
+ let stream = {};
673
+ for (let key of Object.keys(meta)) {
674
+ if (typeof meta[key] === 'string') {
675
+ stream[key] = objs.get(meta[key]) || meta[key];
676
+ } else if (Array.isArray(meta[key])) {
677
+ stream[key] = [];
678
+ for (let entry of meta[key]) {
679
+ if (typeof entry === 'string') {
680
+ stream[key].push(objs.get(entry) || entry);
681
+ }
682
+ }
683
+ } else {
684
+ stream[key] = meta[key];
685
+ }
686
+ }
687
+
688
+ // only expand string into objects if they are in the expand list
689
+ for (let key of Object.keys(expand)) {
690
+ if (typeof stream[key] === 'string') {
691
+ const idx = expand[key].primary;
692
+ let obj = {};
693
+ obj[idx] = stream[key];
694
+ stream[key] = obj;
695
+ }
696
+ }
697
+ return stream;
698
+ }
699
+
700
+ function Stream(meta) {
701
+ validateObject('stream', meta);
702
+ if (typeof meta.object === 'object') {
703
+ validateObject('object', meta.object);
704
+ }
705
+ const stream = expandStream(meta)
706
+ ee.emit('activity-stream', stream);
707
+ return stream;
708
+ }
709
+
710
+
711
+ const _Object = {
712
+ create: function (obj) {
713
+ validateObject('object', obj);
714
+ obj = ensureProps(obj);
715
+ objs.set(obj.id, obj);
716
+ ee.emit('activity-object-create', obj);
717
+ return obj;
718
+ },
719
+
720
+ delete: function (id) {
721
+ const result = objs.delete(id);
722
+ if (result) {
723
+ ee.emit('activity-object-delete', id);
724
+ }
725
+ return result;
726
+ },
727
+
728
+ get: function (id, expand) {
729
+ let obj = objs.get(id);
730
+ if (! obj) {
731
+ if (! expand) {
732
+ return id;
733
+ }
734
+ obj = {'id': id};
735
+ }
736
+ return ensureProps(obj);
737
+ },
738
+
739
+ list: function () {
740
+ return objs.keys();
741
+ }
742
+ };
743
+
744
+
745
+ function ASFactory(opts = {}) {
746
+ specialObjs = opts.specialObjs || [];
747
+ failOnUnknownObjectProperties = typeof opts.failOnUnknownObjectProperties === 'boolean' ? opts.failOnUnknownObjectProperties : false;
748
+ for (let propName of Object.keys(opts.customProps || {})) {
749
+ if (typeof opts.customProps[propName] === 'object') {
750
+ customProps[propName] = opts.customProps[propName];
751
+ }
752
+ }
753
+
754
+ return {
755
+ Stream: Stream,
756
+ Object: _Object,
757
+ on: function (event, func) {
758
+ return ee.on(event, func);
759
+ },
760
+ once: function (event, func) {
761
+ return ee.once(event, func);
762
+ },
763
+ off: function (event, funcName) {
764
+ return ee.off(event, funcName);
765
+ }
766
+ };
767
+ }
768
+
769
+ if ( true && module.exports) {
770
+ module.exports = ASFactory
771
+ }
772
+ if (typeof window === 'object') {
773
+ window.ASFactory = ASFactory;
774
+ }
775
+
776
+
777
+ /***/ }),
778
+
779
+ /***/ 650:
780
+ /***/ (function(module, exports, __webpack_require__) {
781
+
782
+ "use strict";
783
+
784
+ var __importDefault = (this && this.__importDefault) || function (mod) {
785
+ return (mod && mod.__esModule) ? mod : { "default": mod };
786
+ };
787
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
788
+ const eventemitter2_1 = __webpack_require__(387);
789
+ const activity_streams_1 = __importDefault(__webpack_require__(744));
790
+ class SockethubClient {
791
+ constructor(socket) {
792
+ this.events = {
793
+ 'credentials': new Map(),
794
+ 'activity-object': new Map(),
795
+ 'connect': new Map(),
796
+ 'join': new Map()
797
+ };
798
+ this.online = false;
799
+ this.debug = true;
800
+ if (!socket) {
801
+ throw new Error('SockethubClient requires a socket.io instance');
802
+ }
803
+ this._socket = socket;
804
+ // @ts-ignore
805
+ this.ActivityStreams = (0, activity_streams_1.default)({ specialObjs: ['credentials'] });
806
+ this.socket = this.createPublicEmitter();
807
+ this.registerSocketIOHandlers();
808
+ this.ActivityStreams.on('activity-object-create', (obj) => {
809
+ socket.emit('activity-object', obj, (err) => {
810
+ if (err) {
811
+ console.error('failed to create activity-object ', err);
812
+ }
813
+ else {
814
+ this.eventActivityObject(obj);
815
+ }
816
+ });
817
+ });
818
+ socket.on('activity-object', (obj) => {
819
+ this.ActivityStreams.Object.create(obj);
820
+ });
821
+ }
822
+ createPublicEmitter() {
823
+ let socket = new eventemitter2_1.EventEmitter2({
824
+ wildcard: true,
825
+ verboseMemoryLeak: false
826
+ });
827
+ // @ts-ignore
828
+ socket._emit = socket.emit;
829
+ socket.emit = (event, content, callback) => {
830
+ if (event === 'credentials') {
831
+ this.eventCredentials(content);
832
+ }
833
+ else if (event === 'activity-object') {
834
+ this.eventActivityObject(content);
835
+ }
836
+ else if (event === 'message') {
837
+ this.eventMessage(content);
838
+ }
839
+ this._socket.emit(event, content, callback);
840
+ };
841
+ return socket;
842
+ }
843
+ eventActivityObject(content) {
844
+ if (content.id) {
845
+ this.events['activity-object'].set(content.id, content);
846
+ }
847
+ }
848
+ eventCredentials(content) {
849
+ if ((content.object) && (content.object.type === 'credentials')) {
850
+ this.events['credentials'].set(content.actor.id || content.actor, content);
851
+ }
852
+ }
853
+ eventMessage(content) {
854
+ if (!this.online) {
855
+ return;
856
+ }
857
+ // either store or delete the specified content onto the storedJoins map,
858
+ // for reply once we're back online.
859
+ const key = SockethubClient.getKey(content);
860
+ if (content.type === 'join' || content.type === 'connect') {
861
+ this.events[content.type].set(key, content);
862
+ }
863
+ else if (content.type === 'leave') {
864
+ this.events['join'].delete(key);
865
+ }
866
+ else if (content.type === 'disconnect') {
867
+ this.events['connect'].delete(key);
868
+ }
869
+ }
870
+ static getKey(content) {
871
+ var _a;
872
+ let actor = ((_a = content.actor) === null || _a === void 0 ? void 0 : _a.id) || content.actor;
873
+ if (!actor) {
874
+ throw new Error("actor property not present for message type: " + (content === null || content === void 0 ? void 0 : content.type));
875
+ }
876
+ let target = content.target ? content.target.id || content.target : '';
877
+ return actor + '-' + target;
878
+ }
879
+ log(msg, obj) {
880
+ if (this.debug) {
881
+ // eslint-disable-next-line security-node/detect-crlf
882
+ console.log(msg, obj);
883
+ }
884
+ }
885
+ registerSocketIOHandlers() {
886
+ // middleware for events which don't deal in AS objects
887
+ const callHandler = (event) => {
888
+ return (obj, cb) => {
889
+ if (event === 'connect') {
890
+ this.online = true;
891
+ this.replay('activity-object', this.events['activity-object']);
892
+ this.replay('credentials', this.events['credentials']);
893
+ this.replay('message', this.events['connect']);
894
+ this.replay('message', this.events['join']);
895
+ }
896
+ else if (event === 'disconnect') {
897
+ this.online = false;
898
+ }
899
+ this.socket._emit(event, obj, cb);
900
+ };
901
+ };
902
+ // register for events that give us information on connection status
903
+ this._socket.on('connect', callHandler('connect'));
904
+ this._socket.on('connect_error', callHandler('connect_error'));
905
+ this._socket.on('disconnect', callHandler('disconnect'));
906
+ // use as a middleware to receive incoming Sockethub messages and unpack them
907
+ // using the ActivityStreams library before passing them along to the app.
908
+ this._socket.on('message', (obj, cb) => {
909
+ this.socket._emit('message', this.ActivityStreams.Stream(obj), cb);
910
+ });
911
+ }
912
+ replay(name, asMap) {
913
+ asMap.forEach((obj) => {
914
+ this.log(`replaying ${name}`, obj);
915
+ this._socket.emit(name, obj);
916
+ });
917
+ }
918
+ ;
919
+ }
920
+ if ( true && module.exports) {
921
+ module.exports = SockethubClient;
922
+ }
923
+ if (true) {
924
+ exports = SockethubClient; // lgtm [js/useless-assignment-to-local]
925
+ }
926
+ // @ts-ignore
927
+ if (typeof window === 'object') {
928
+ // @ts-ignore
929
+ window.SockethubClient = SockethubClient;
930
+ }
931
+ //# sourceMappingURL=/sockethub-client.js.map
932
+
933
+ /***/ }),
934
+
935
+ /***/ 387:
936
+ /***/ ((module, exports, __webpack_require__) => {
937
+
938
+ var __WEBPACK_AMD_DEFINE_RESULT__;/*!
939
+ * EventEmitter2
940
+ * https://github.com/hij1nx/EventEmitter2
941
+ *
942
+ * Copyright (c) 2013 hij1nx
943
+ * Licensed under the MIT license.
944
+ */
945
+ ;!function(undefined) {
946
+ var hasOwnProperty= Object.hasOwnProperty;
947
+ var isArray = Array.isArray ? Array.isArray : function _isArray(obj) {
948
+ return Object.prototype.toString.call(obj) === "[object Array]";
949
+ };
950
+ var defaultMaxListeners = 10;
951
+ var nextTickSupported= typeof process=='object' && typeof process.nextTick=='function';
952
+ var symbolsSupported= typeof Symbol==='function';
953
+ var reflectSupported= typeof Reflect === 'object';
954
+ var setImmediateSupported= typeof setImmediate === 'function';
955
+ var _setImmediate= setImmediateSupported ? setImmediate : setTimeout;
956
+ var ownKeys= symbolsSupported? (reflectSupported && typeof Reflect.ownKeys==='function'? Reflect.ownKeys : function(obj){
957
+ var arr= Object.getOwnPropertyNames(obj);
958
+ arr.push.apply(arr, Object.getOwnPropertySymbols(obj));
959
+ return arr;
960
+ }) : Object.keys;
961
+
962
+ function init() {
963
+ this._events = {};
964
+ if (this._conf) {
965
+ configure.call(this, this._conf);
966
+ }
967
+ }
968
+
969
+ function configure(conf) {
970
+ if (conf) {
971
+ this._conf = conf;
972
+
973
+ conf.delimiter && (this.delimiter = conf.delimiter);
974
+
975
+ if(conf.maxListeners!==undefined){
976
+ this._maxListeners= conf.maxListeners;
977
+ }
978
+
979
+ conf.wildcard && (this.wildcard = conf.wildcard);
980
+ conf.newListener && (this._newListener = conf.newListener);
981
+ conf.removeListener && (this._removeListener = conf.removeListener);
982
+ conf.verboseMemoryLeak && (this.verboseMemoryLeak = conf.verboseMemoryLeak);
983
+ conf.ignoreErrors && (this.ignoreErrors = conf.ignoreErrors);
984
+
985
+ if (this.wildcard) {
986
+ this.listenerTree = {};
987
+ }
988
+ }
989
+ }
990
+
991
+ function logPossibleMemoryLeak(count, eventName) {
992
+ var errorMsg = '(node) warning: possible EventEmitter memory ' +
993
+ 'leak detected. ' + count + ' listeners added. ' +
994
+ 'Use emitter.setMaxListeners() to increase limit.';
995
+
996
+ if(this.verboseMemoryLeak){
997
+ errorMsg += ' Event name: ' + eventName + '.';
998
+ }
999
+
1000
+ if(typeof process !== 'undefined' && process.emitWarning){
1001
+ var e = new Error(errorMsg);
1002
+ e.name = 'MaxListenersExceededWarning';
1003
+ e.emitter = this;
1004
+ e.count = count;
1005
+ process.emitWarning(e);
1006
+ } else {
1007
+ console.error(errorMsg);
1008
+
1009
+ if (console.trace){
1010
+ console.trace();
1011
+ }
1012
+ }
1013
+ }
1014
+
1015
+ var toArray = function (a, b, c) {
1016
+ var n = arguments.length;
1017
+ switch (n) {
1018
+ case 0:
1019
+ return [];
1020
+ case 1:
1021
+ return [a];
1022
+ case 2:
1023
+ return [a, b];
1024
+ case 3:
1025
+ return [a, b, c];
1026
+ default:
1027
+ var arr = new Array(n);
1028
+ while (n--) {
1029
+ arr[n] = arguments[n];
1030
+ }
1031
+ return arr;
1032
+ }
1033
+ };
1034
+
1035
+ function toObject(keys, values) {
1036
+ var obj = {};
1037
+ var key;
1038
+ var len = keys.length;
1039
+ var valuesCount = values ? value.length : 0;
1040
+ for (var i = 0; i < len; i++) {
1041
+ key = keys[i];
1042
+ obj[key] = i < valuesCount ? values[i] : undefined;
1043
+ }
1044
+ return obj;
1045
+ }
1046
+
1047
+ function TargetObserver(emitter, target, options) {
1048
+ this._emitter = emitter;
1049
+ this._target = target;
1050
+ this._listeners = {};
1051
+ this._listenersCount = 0;
1052
+
1053
+ var on, off;
1054
+
1055
+ if (options.on || options.off) {
1056
+ on = options.on;
1057
+ off = options.off;
1058
+ }
1059
+
1060
+ if (target.addEventListener) {
1061
+ on = target.addEventListener;
1062
+ off = target.removeEventListener;
1063
+ } else if (target.addListener) {
1064
+ on = target.addListener;
1065
+ off = target.removeListener;
1066
+ } else if (target.on) {
1067
+ on = target.on;
1068
+ off = target.off;
1069
+ }
1070
+
1071
+ if (!on && !off) {
1072
+ throw Error('target does not implement any known event API');
1073
+ }
1074
+
1075
+ if (typeof on !== 'function') {
1076
+ throw TypeError('on method must be a function');
1077
+ }
1078
+
1079
+ if (typeof off !== 'function') {
1080
+ throw TypeError('off method must be a function');
1081
+ }
1082
+
1083
+ this._on = on;
1084
+ this._off = off;
1085
+
1086
+ var _observers= emitter._observers;
1087
+ if(_observers){
1088
+ _observers.push(this);
1089
+ }else{
1090
+ emitter._observers= [this];
1091
+ }
1092
+ }
1093
+
1094
+ Object.assign(TargetObserver.prototype, {
1095
+ subscribe: function(event, localEvent, reducer){
1096
+ var observer= this;
1097
+ var target= this._target;
1098
+ var emitter= this._emitter;
1099
+ var listeners= this._listeners;
1100
+ var handler= function(){
1101
+ var args= toArray.apply(null, arguments);
1102
+ var eventObj= {
1103
+ data: args,
1104
+ name: localEvent,
1105
+ original: event
1106
+ };
1107
+ if(reducer){
1108
+ var result= reducer.call(target, eventObj);
1109
+ if(result!==false){
1110
+ emitter.emit.apply(emitter, [eventObj.name].concat(args))
1111
+ }
1112
+ return;
1113
+ }
1114
+ emitter.emit.apply(emitter, [localEvent].concat(args));
1115
+ };
1116
+
1117
+
1118
+ if(listeners[event]){
1119
+ throw Error('Event \'' + event + '\' is already listening');
1120
+ }
1121
+
1122
+ this._listenersCount++;
1123
+
1124
+ if(emitter._newListener && emitter._removeListener && !observer._onNewListener){
1125
+
1126
+ this._onNewListener = function (_event) {
1127
+ if (_event === localEvent && listeners[event] === null) {
1128
+ listeners[event] = handler;
1129
+ observer._on.call(target, event, handler);
1130
+ }
1131
+ };
1132
+
1133
+ emitter.on('newListener', this._onNewListener);
1134
+
1135
+ this._onRemoveListener= function(_event){
1136
+ if(_event === localEvent && !emitter.hasListeners(_event) && listeners[event]){
1137
+ listeners[event]= null;
1138
+ observer._off.call(target, event, handler);
1139
+ }
1140
+ };
1141
+
1142
+ listeners[event]= null;
1143
+
1144
+ emitter.on('removeListener', this._onRemoveListener);
1145
+ }else{
1146
+ listeners[event]= handler;
1147
+ observer._on.call(target, event, handler);
1148
+ }
1149
+ },
1150
+
1151
+ unsubscribe: function(event){
1152
+ var observer= this;
1153
+ var listeners= this._listeners;
1154
+ var emitter= this._emitter;
1155
+ var handler;
1156
+ var events;
1157
+ var off= this._off;
1158
+ var target= this._target;
1159
+ var i;
1160
+
1161
+ if(event && typeof event!=='string'){
1162
+ throw TypeError('event must be a string');
1163
+ }
1164
+
1165
+ function clearRefs(){
1166
+ if(observer._onNewListener){
1167
+ emitter.off('newListener', observer._onNewListener);
1168
+ emitter.off('removeListener', observer._onRemoveListener);
1169
+ observer._onNewListener= null;
1170
+ observer._onRemoveListener= null;
1171
+ }
1172
+ var index= findTargetIndex.call(emitter, observer);
1173
+ emitter._observers.splice(index, 1);
1174
+ }
1175
+
1176
+ if(event){
1177
+ handler= listeners[event];
1178
+ if(!handler) return;
1179
+ off.call(target, event, handler);
1180
+ delete listeners[event];
1181
+ if(!--this._listenersCount){
1182
+ clearRefs();
1183
+ }
1184
+ }else{
1185
+ events= ownKeys(listeners);
1186
+ i= events.length;
1187
+ while(i-->0){
1188
+ event= events[i];
1189
+ off.call(target, event, listeners[event]);
1190
+ }
1191
+ this._listeners= {};
1192
+ this._listenersCount= 0;
1193
+ clearRefs();
1194
+ }
1195
+ }
1196
+ });
1197
+
1198
+ function resolveOptions(options, schema, reducers, allowUnknown) {
1199
+ var computedOptions = Object.assign({}, schema);
1200
+
1201
+ if (!options) return computedOptions;
1202
+
1203
+ if (typeof options !== 'object') {
1204
+ throw TypeError('options must be an object')
1205
+ }
1206
+
1207
+ var keys = Object.keys(options);
1208
+ var length = keys.length;
1209
+ var option, value;
1210
+ var reducer;
1211
+
1212
+ function reject(reason) {
1213
+ throw Error('Invalid "' + option + '" option value' + (reason ? '. Reason: ' + reason : ''))
1214
+ }
1215
+
1216
+ for (var i = 0; i < length; i++) {
1217
+ option = keys[i];
1218
+ if (!allowUnknown && !hasOwnProperty.call(schema, option)) {
1219
+ throw Error('Unknown "' + option + '" option');
1220
+ }
1221
+ value = options[option];
1222
+ if (value !== undefined) {
1223
+ reducer = reducers[option];
1224
+ computedOptions[option] = reducer ? reducer(value, reject) : value;
1225
+ }
1226
+ }
1227
+ return computedOptions;
1228
+ }
1229
+
1230
+ function constructorReducer(value, reject) {
1231
+ if (typeof value !== 'function' || !value.hasOwnProperty('prototype')) {
1232
+ reject('value must be a constructor');
1233
+ }
1234
+ return value;
1235
+ }
1236
+
1237
+ function makeTypeReducer(types) {
1238
+ var message= 'value must be type of ' + types.join('|');
1239
+ var len= types.length;
1240
+ var firstType= types[0];
1241
+ var secondType= types[1];
1242
+
1243
+ if (len === 1) {
1244
+ return function (v, reject) {
1245
+ if (typeof v === firstType) {
1246
+ return v;
1247
+ }
1248
+ reject(message);
1249
+ }
1250
+ }
1251
+
1252
+ if (len === 2) {
1253
+ return function (v, reject) {
1254
+ var kind= typeof v;
1255
+ if (kind === firstType || kind === secondType) return v;
1256
+ reject(message);
1257
+ }
1258
+ }
1259
+
1260
+ return function (v, reject) {
1261
+ var kind = typeof v;
1262
+ var i = len;
1263
+ while (i-- > 0) {
1264
+ if (kind === types[i]) return v;
1265
+ }
1266
+ reject(message);
1267
+ }
1268
+ }
1269
+
1270
+ var functionReducer= makeTypeReducer(['function']);
1271
+
1272
+ var objectFunctionReducer= makeTypeReducer(['object', 'function']);
1273
+
1274
+ function makeCancelablePromise(Promise, executor, options) {
1275
+ var isCancelable;
1276
+ var callbacks;
1277
+ var timer= 0;
1278
+ var subscriptionClosed;
1279
+
1280
+ var promise = new Promise(function (resolve, reject, onCancel) {
1281
+ options= resolveOptions(options, {
1282
+ timeout: 0,
1283
+ overload: false
1284
+ }, {
1285
+ timeout: function(value, reject){
1286
+ value*= 1;
1287
+ if (typeof value !== 'number' || value < 0 || !Number.isFinite(value)) {
1288
+ reject('timeout must be a positive number');
1289
+ }
1290
+ return value;
1291
+ }
1292
+ });
1293
+
1294
+ isCancelable = !options.overload && typeof Promise.prototype.cancel === 'function' && typeof onCancel === 'function';
1295
+
1296
+ function cleanup() {
1297
+ if (callbacks) {
1298
+ callbacks = null;
1299
+ }
1300
+ if (timer) {
1301
+ clearTimeout(timer);
1302
+ timer = 0;
1303
+ }
1304
+ }
1305
+
1306
+ var _resolve= function(value){
1307
+ cleanup();
1308
+ resolve(value);
1309
+ };
1310
+
1311
+ var _reject= function(err){
1312
+ cleanup();
1313
+ reject(err);
1314
+ };
1315
+
1316
+ if (isCancelable) {
1317
+ executor(_resolve, _reject, onCancel);
1318
+ } else {
1319
+ callbacks = [function(reason){
1320
+ _reject(reason || Error('canceled'));
1321
+ }];
1322
+ executor(_resolve, _reject, function (cb) {
1323
+ if (subscriptionClosed) {
1324
+ throw Error('Unable to subscribe on cancel event asynchronously')
1325
+ }
1326
+ if (typeof cb !== 'function') {
1327
+ throw TypeError('onCancel callback must be a function');
1328
+ }
1329
+ callbacks.push(cb);
1330
+ });
1331
+ subscriptionClosed= true;
1332
+ }
1333
+
1334
+ if (options.timeout > 0) {
1335
+ timer= setTimeout(function(){
1336
+ var reason= Error('timeout');
1337
+ reason.code = 'ETIMEDOUT'
1338
+ timer= 0;
1339
+ promise.cancel(reason);
1340
+ reject(reason);
1341
+ }, options.timeout);
1342
+ }
1343
+ });
1344
+
1345
+ if (!isCancelable) {
1346
+ promise.cancel = function (reason) {
1347
+ if (!callbacks) {
1348
+ return;
1349
+ }
1350
+ var length = callbacks.length;
1351
+ for (var i = 1; i < length; i++) {
1352
+ callbacks[i](reason);
1353
+ }
1354
+ // internal callback to reject the promise
1355
+ callbacks[0](reason);
1356
+ callbacks = null;
1357
+ };
1358
+ }
1359
+
1360
+ return promise;
1361
+ }
1362
+
1363
+ function findTargetIndex(observer) {
1364
+ var observers = this._observers;
1365
+ if(!observers){
1366
+ return -1;
1367
+ }
1368
+ var len = observers.length;
1369
+ for (var i = 0; i < len; i++) {
1370
+ if (observers[i]._target === observer) return i;
1371
+ }
1372
+ return -1;
1373
+ }
1374
+
1375
+ // Attention, function return type now is array, always !
1376
+ // It has zero elements if no any matches found and one or more
1377
+ // elements (leafs) if there are matches
1378
+ //
1379
+ function searchListenerTree(handlers, type, tree, i, typeLength) {
1380
+ if (!tree) {
1381
+ return null;
1382
+ }
1383
+
1384
+ if (i === 0) {
1385
+ var kind = typeof type;
1386
+ if (kind === 'string') {
1387
+ var ns, n, l = 0, j = 0, delimiter = this.delimiter, dl = delimiter.length;
1388
+ if ((n = type.indexOf(delimiter)) !== -1) {
1389
+ ns = new Array(5);
1390
+ do {
1391
+ ns[l++] = type.slice(j, n);
1392
+ j = n + dl;
1393
+ } while ((n = type.indexOf(delimiter, j)) !== -1);
1394
+
1395
+ ns[l++] = type.slice(j);
1396
+ type = ns;
1397
+ typeLength = l;
1398
+ } else {
1399
+ type = [type];
1400
+ typeLength = 1;
1401
+ }
1402
+ } else if (kind === 'object') {
1403
+ typeLength = type.length;
1404
+ } else {
1405
+ type = [type];
1406
+ typeLength = 1;
1407
+ }
1408
+ }
1409
+
1410
+ var listeners= null, branch, xTree, xxTree, isolatedBranch, endReached, currentType = type[i],
1411
+ nextType = type[i + 1], branches, _listeners;
1412
+
1413
+ if (i === typeLength) {
1414
+ //
1415
+ // If at the end of the event(s) list and the tree has listeners
1416
+ // invoke those listeners.
1417
+ //
1418
+
1419
+ if(tree._listeners) {
1420
+ if (typeof tree._listeners === 'function') {
1421
+ handlers && handlers.push(tree._listeners);
1422
+ listeners = [tree];
1423
+ } else {
1424
+ handlers && handlers.push.apply(handlers, tree._listeners);
1425
+ listeners = [tree];
1426
+ }
1427
+ }
1428
+ } else {
1429
+
1430
+ if (currentType === '*') {
1431
+ //
1432
+ // If the event emitted is '*' at this part
1433
+ // or there is a concrete match at this patch
1434
+ //
1435
+ branches = ownKeys(tree);
1436
+ n = branches.length;
1437
+ while (n-- > 0) {
1438
+ branch = branches[n];
1439
+ if (branch !== '_listeners') {
1440
+ _listeners = searchListenerTree(handlers, type, tree[branch], i + 1, typeLength);
1441
+ if (_listeners) {
1442
+ if (listeners) {
1443
+ listeners.push.apply(listeners, _listeners);
1444
+ } else {
1445
+ listeners = _listeners;
1446
+ }
1447
+ }
1448
+ }
1449
+ }
1450
+ return listeners;
1451
+ } else if (currentType === '**') {
1452
+ endReached = (i + 1 === typeLength || (i + 2 === typeLength && nextType === '*'));
1453
+ if (endReached && tree._listeners) {
1454
+ // The next element has a _listeners, add it to the handlers.
1455
+ listeners = searchListenerTree(handlers, type, tree, typeLength, typeLength);
1456
+ }
1457
+
1458
+ branches = ownKeys(tree);
1459
+ n = branches.length;
1460
+ while (n-- > 0) {
1461
+ branch = branches[n];
1462
+ if (branch !== '_listeners') {
1463
+ if (branch === '*' || branch === '**') {
1464
+ if (tree[branch]._listeners && !endReached) {
1465
+ _listeners = searchListenerTree(handlers, type, tree[branch], typeLength, typeLength);
1466
+ if (_listeners) {
1467
+ if (listeners) {
1468
+ listeners.push.apply(listeners, _listeners);
1469
+ } else {
1470
+ listeners = _listeners;
1471
+ }
1472
+ }
1473
+ }
1474
+ _listeners = searchListenerTree(handlers, type, tree[branch], i, typeLength);
1475
+ } else if (branch === nextType) {
1476
+ _listeners = searchListenerTree(handlers, type, tree[branch], i + 2, typeLength);
1477
+ } else {
1478
+ // No match on this one, shift into the tree but not in the type array.
1479
+ _listeners = searchListenerTree(handlers, type, tree[branch], i, typeLength);
1480
+ }
1481
+ if (_listeners) {
1482
+ if (listeners) {
1483
+ listeners.push.apply(listeners, _listeners);
1484
+ } else {
1485
+ listeners = _listeners;
1486
+ }
1487
+ }
1488
+ }
1489
+ }
1490
+ return listeners;
1491
+ } else if (tree[currentType]) {
1492
+ listeners = searchListenerTree(handlers, type, tree[currentType], i + 1, typeLength);
1493
+ }
1494
+ }
1495
+
1496
+ xTree = tree['*'];
1497
+ if (xTree) {
1498
+ //
1499
+ // If the listener tree will allow any match for this part,
1500
+ // then recursively explore all branches of the tree
1501
+ //
1502
+ searchListenerTree(handlers, type, xTree, i + 1, typeLength);
1503
+ }
1504
+
1505
+ xxTree = tree['**'];
1506
+ if (xxTree) {
1507
+ if (i < typeLength) {
1508
+ if (xxTree._listeners) {
1509
+ // If we have a listener on a '**', it will catch all, so add its handler.
1510
+ searchListenerTree(handlers, type, xxTree, typeLength, typeLength);
1511
+ }
1512
+
1513
+ // Build arrays of matching next branches and others.
1514
+ branches= ownKeys(xxTree);
1515
+ n= branches.length;
1516
+ while(n-->0){
1517
+ branch= branches[n];
1518
+ if (branch !== '_listeners') {
1519
+ if (branch === nextType) {
1520
+ // We know the next element will match, so jump twice.
1521
+ searchListenerTree(handlers, type, xxTree[branch], i + 2, typeLength);
1522
+ } else if (branch === currentType) {
1523
+ // Current node matches, move into the tree.
1524
+ searchListenerTree(handlers, type, xxTree[branch], i + 1, typeLength);
1525
+ } else {
1526
+ isolatedBranch = {};
1527
+ isolatedBranch[branch] = xxTree[branch];
1528
+ searchListenerTree(handlers, type, {'**': isolatedBranch}, i + 1, typeLength);
1529
+ }
1530
+ }
1531
+ }
1532
+ } else if (xxTree._listeners) {
1533
+ // We have reached the end and still on a '**'
1534
+ searchListenerTree(handlers, type, xxTree, typeLength, typeLength);
1535
+ } else if (xxTree['*'] && xxTree['*']._listeners) {
1536
+ searchListenerTree(handlers, type, xxTree['*'], typeLength, typeLength);
1537
+ }
1538
+ }
1539
+
1540
+ return listeners;
1541
+ }
1542
+
1543
+ function growListenerTree(type, listener, prepend) {
1544
+ var len = 0, j = 0, i, delimiter = this.delimiter, dl= delimiter.length, ns;
1545
+
1546
+ if(typeof type==='string') {
1547
+ if ((i = type.indexOf(delimiter)) !== -1) {
1548
+ ns = new Array(5);
1549
+ do {
1550
+ ns[len++] = type.slice(j, i);
1551
+ j = i + dl;
1552
+ } while ((i = type.indexOf(delimiter, j)) !== -1);
1553
+
1554
+ ns[len++] = type.slice(j);
1555
+ }else{
1556
+ ns= [type];
1557
+ len= 1;
1558
+ }
1559
+ }else{
1560
+ ns= type;
1561
+ len= type.length;
1562
+ }
1563
+
1564
+ //
1565
+ // Looks for two consecutive '**', if so, don't add the event at all.
1566
+ //
1567
+ if (len > 1) {
1568
+ for (i = 0; i + 1 < len; i++) {
1569
+ if (ns[i] === '**' && ns[i + 1] === '**') {
1570
+ return;
1571
+ }
1572
+ }
1573
+ }
1574
+
1575
+
1576
+
1577
+ var tree = this.listenerTree, name;
1578
+
1579
+ for (i = 0; i < len; i++) {
1580
+ name = ns[i];
1581
+
1582
+ tree = tree[name] || (tree[name] = {});
1583
+
1584
+ if (i === len - 1) {
1585
+ if (!tree._listeners) {
1586
+ tree._listeners = listener;
1587
+ } else {
1588
+ if (typeof tree._listeners === 'function') {
1589
+ tree._listeners = [tree._listeners];
1590
+ }
1591
+
1592
+ if (prepend) {
1593
+ tree._listeners.unshift(listener);
1594
+ } else {
1595
+ tree._listeners.push(listener);
1596
+ }
1597
+
1598
+ if (
1599
+ !tree._listeners.warned &&
1600
+ this._maxListeners > 0 &&
1601
+ tree._listeners.length > this._maxListeners
1602
+ ) {
1603
+ tree._listeners.warned = true;
1604
+ logPossibleMemoryLeak.call(this, tree._listeners.length, name);
1605
+ }
1606
+ }
1607
+ return true;
1608
+ }
1609
+ }
1610
+
1611
+ return true;
1612
+ }
1613
+
1614
+ function collectTreeEvents(tree, events, root, asArray){
1615
+ var branches= ownKeys(tree);
1616
+ var i= branches.length;
1617
+ var branch, branchName, path;
1618
+ var hasListeners= tree['_listeners'];
1619
+ var isArrayPath;
1620
+
1621
+ while(i-->0){
1622
+ branchName= branches[i];
1623
+
1624
+ branch= tree[branchName];
1625
+
1626
+ if(branchName==='_listeners'){
1627
+ path= root;
1628
+ }else {
1629
+ path = root ? root.concat(branchName) : [branchName];
1630
+ }
1631
+
1632
+ isArrayPath= asArray || typeof branchName==='symbol';
1633
+
1634
+ hasListeners && events.push(isArrayPath? path : path.join(this.delimiter));
1635
+
1636
+ if(typeof branch==='object'){
1637
+ collectTreeEvents.call(this, branch, events, path, isArrayPath);
1638
+ }
1639
+ }
1640
+
1641
+ return events;
1642
+ }
1643
+
1644
+ function recursivelyGarbageCollect(root) {
1645
+ var keys = ownKeys(root);
1646
+ var i= keys.length;
1647
+ var obj, key, flag;
1648
+ while(i-->0){
1649
+ key = keys[i];
1650
+ obj = root[key];
1651
+
1652
+ if(obj){
1653
+ flag= true;
1654
+ if(key !== '_listeners' && !recursivelyGarbageCollect(obj)){
1655
+ delete root[key];
1656
+ }
1657
+ }
1658
+ }
1659
+
1660
+ return flag;
1661
+ }
1662
+
1663
+ function Listener(emitter, event, listener){
1664
+ this.emitter= emitter;
1665
+ this.event= event;
1666
+ this.listener= listener;
1667
+ }
1668
+
1669
+ Listener.prototype.off= function(){
1670
+ this.emitter.off(this.event, this.listener);
1671
+ return this;
1672
+ };
1673
+
1674
+ function setupListener(event, listener, options){
1675
+ if (options === true) {
1676
+ promisify = true;
1677
+ } else if (options === false) {
1678
+ async = true;
1679
+ } else {
1680
+ if (!options || typeof options !== 'object') {
1681
+ throw TypeError('options should be an object or true');
1682
+ }
1683
+ var async = options.async;
1684
+ var promisify = options.promisify;
1685
+ var nextTick = options.nextTick;
1686
+ var objectify = options.objectify;
1687
+ }
1688
+
1689
+ if (async || nextTick || promisify) {
1690
+ var _listener = listener;
1691
+ var _origin = listener._origin || listener;
1692
+
1693
+ if (nextTick && !nextTickSupported) {
1694
+ throw Error('process.nextTick is not supported');
1695
+ }
1696
+
1697
+ if (promisify === undefined) {
1698
+ promisify = listener.constructor.name === 'AsyncFunction';
1699
+ }
1700
+
1701
+ listener = function () {
1702
+ var args = arguments;
1703
+ var context = this;
1704
+ var event = this.event;
1705
+
1706
+ return promisify ? (nextTick ? Promise.resolve() : new Promise(function (resolve) {
1707
+ _setImmediate(resolve);
1708
+ }).then(function () {
1709
+ context.event = event;
1710
+ return _listener.apply(context, args)
1711
+ })) : (nextTick ? process.nextTick : _setImmediate)(function () {
1712
+ context.event = event;
1713
+ _listener.apply(context, args)
1714
+ });
1715
+ };
1716
+
1717
+ listener._async = true;
1718
+ listener._origin = _origin;
1719
+ }
1720
+
1721
+ return [listener, objectify? new Listener(this, event, listener): this];
1722
+ }
1723
+
1724
+ function EventEmitter(conf) {
1725
+ this._events = {};
1726
+ this._newListener = false;
1727
+ this._removeListener = false;
1728
+ this.verboseMemoryLeak = false;
1729
+ configure.call(this, conf);
1730
+ }
1731
+
1732
+ EventEmitter.EventEmitter2 = EventEmitter; // backwards compatibility for exporting EventEmitter property
1733
+
1734
+ EventEmitter.prototype.listenTo= function(target, events, options){
1735
+ if(typeof target!=='object'){
1736
+ throw TypeError('target musts be an object');
1737
+ }
1738
+
1739
+ var emitter= this;
1740
+
1741
+ options = resolveOptions(options, {
1742
+ on: undefined,
1743
+ off: undefined,
1744
+ reducers: undefined
1745
+ }, {
1746
+ on: functionReducer,
1747
+ off: functionReducer,
1748
+ reducers: objectFunctionReducer
1749
+ });
1750
+
1751
+ function listen(events){
1752
+ if(typeof events!=='object'){
1753
+ throw TypeError('events must be an object');
1754
+ }
1755
+
1756
+ var reducers= options.reducers;
1757
+ var index= findTargetIndex.call(emitter, target);
1758
+ var observer;
1759
+
1760
+ if(index===-1){
1761
+ observer= new TargetObserver(emitter, target, options);
1762
+ }else{
1763
+ observer= emitter._observers[index];
1764
+ }
1765
+
1766
+ var keys= ownKeys(events);
1767
+ var len= keys.length;
1768
+ var event;
1769
+ var isSingleReducer= typeof reducers==='function';
1770
+
1771
+ for(var i=0; i<len; i++){
1772
+ event= keys[i];
1773
+ observer.subscribe(
1774
+ event,
1775
+ events[event] || event,
1776
+ isSingleReducer ? reducers : reducers && reducers[event]
1777
+ );
1778
+ }
1779
+ }
1780
+
1781
+ isArray(events)?
1782
+ listen(toObject(events)) :
1783
+ (typeof events==='string'? listen(toObject(events.split(/\s+/))): listen(events));
1784
+
1785
+ return this;
1786
+ };
1787
+
1788
+ EventEmitter.prototype.stopListeningTo = function (target, event) {
1789
+ var observers = this._observers;
1790
+
1791
+ if(!observers){
1792
+ return false;
1793
+ }
1794
+
1795
+ var i = observers.length;
1796
+ var observer;
1797
+ var matched= false;
1798
+
1799
+ if(target && typeof target!=='object'){
1800
+ throw TypeError('target should be an object');
1801
+ }
1802
+
1803
+ while (i-- > 0) {
1804
+ observer = observers[i];
1805
+ if (!target || observer._target === target) {
1806
+ observer.unsubscribe(event);
1807
+ matched= true;
1808
+ }
1809
+ }
1810
+
1811
+ return matched;
1812
+ };
1813
+
1814
+ // By default EventEmitters will print a warning if more than
1815
+ // 10 listeners are added to it. This is a useful default which
1816
+ // helps finding memory leaks.
1817
+ //
1818
+ // Obviously not all Emitters should be limited to 10. This function allows
1819
+ // that to be increased. Set to zero for unlimited.
1820
+
1821
+ EventEmitter.prototype.delimiter = '.';
1822
+
1823
+ EventEmitter.prototype.setMaxListeners = function(n) {
1824
+ if (n !== undefined) {
1825
+ this._maxListeners = n;
1826
+ if (!this._conf) this._conf = {};
1827
+ this._conf.maxListeners = n;
1828
+ }
1829
+ };
1830
+
1831
+ EventEmitter.prototype.getMaxListeners = function() {
1832
+ return this._maxListeners;
1833
+ };
1834
+
1835
+ EventEmitter.prototype.event = '';
1836
+
1837
+ EventEmitter.prototype.once = function(event, fn, options) {
1838
+ return this._once(event, fn, false, options);
1839
+ };
1840
+
1841
+ EventEmitter.prototype.prependOnceListener = function(event, fn, options) {
1842
+ return this._once(event, fn, true, options);
1843
+ };
1844
+
1845
+ EventEmitter.prototype._once = function(event, fn, prepend, options) {
1846
+ return this._many(event, 1, fn, prepend, options);
1847
+ };
1848
+
1849
+ EventEmitter.prototype.many = function(event, ttl, fn, options) {
1850
+ return this._many(event, ttl, fn, false, options);
1851
+ };
1852
+
1853
+ EventEmitter.prototype.prependMany = function(event, ttl, fn, options) {
1854
+ return this._many(event, ttl, fn, true, options);
1855
+ };
1856
+
1857
+ EventEmitter.prototype._many = function(event, ttl, fn, prepend, options) {
1858
+ var self = this;
1859
+
1860
+ if (typeof fn !== 'function') {
1861
+ throw new Error('many only accepts instances of Function');
1862
+ }
1863
+
1864
+ function listener() {
1865
+ if (--ttl === 0) {
1866
+ self.off(event, listener);
1867
+ }
1868
+ return fn.apply(this, arguments);
1869
+ }
1870
+
1871
+ listener._origin = fn;
1872
+
1873
+ return this._on(event, listener, prepend, options);
1874
+ };
1875
+
1876
+ EventEmitter.prototype.emit = function() {
1877
+ if (!this._events && !this._all) {
1878
+ return false;
1879
+ }
1880
+
1881
+ this._events || init.call(this);
1882
+
1883
+ var type = arguments[0], ns, wildcard= this.wildcard;
1884
+ var args,l,i,j, containsSymbol;
1885
+
1886
+ if (type === 'newListener' && !this._newListener) {
1887
+ if (!this._events.newListener) {
1888
+ return false;
1889
+ }
1890
+ }
1891
+
1892
+ if (wildcard) {
1893
+ ns= type;
1894
+ if(type!=='newListener' && type!=='removeListener'){
1895
+ if (typeof type === 'object') {
1896
+ l = type.length;
1897
+ if (symbolsSupported) {
1898
+ for (i = 0; i < l; i++) {
1899
+ if (typeof type[i] === 'symbol') {
1900
+ containsSymbol = true;
1901
+ break;
1902
+ }
1903
+ }
1904
+ }
1905
+ if (!containsSymbol) {
1906
+ type = type.join(this.delimiter);
1907
+ }
1908
+ }
1909
+ }
1910
+ }
1911
+
1912
+ var al = arguments.length;
1913
+ var handler;
1914
+
1915
+ if (this._all && this._all.length) {
1916
+ handler = this._all.slice();
1917
+
1918
+ for (i = 0, l = handler.length; i < l; i++) {
1919
+ this.event = type;
1920
+ switch (al) {
1921
+ case 1:
1922
+ handler[i].call(this, type);
1923
+ break;
1924
+ case 2:
1925
+ handler[i].call(this, type, arguments[1]);
1926
+ break;
1927
+ case 3:
1928
+ handler[i].call(this, type, arguments[1], arguments[2]);
1929
+ break;
1930
+ default:
1931
+ handler[i].apply(this, arguments);
1932
+ }
1933
+ }
1934
+ }
1935
+
1936
+ if (wildcard) {
1937
+ handler = [];
1938
+ searchListenerTree.call(this, handler, ns, this.listenerTree, 0, l);
1939
+ } else {
1940
+ handler = this._events[type];
1941
+ if (typeof handler === 'function') {
1942
+ this.event = type;
1943
+ switch (al) {
1944
+ case 1:
1945
+ handler.call(this);
1946
+ break;
1947
+ case 2:
1948
+ handler.call(this, arguments[1]);
1949
+ break;
1950
+ case 3:
1951
+ handler.call(this, arguments[1], arguments[2]);
1952
+ break;
1953
+ default:
1954
+ args = new Array(al - 1);
1955
+ for (j = 1; j < al; j++) args[j - 1] = arguments[j];
1956
+ handler.apply(this, args);
1957
+ }
1958
+ return true;
1959
+ } else if (handler) {
1960
+ // need to make copy of handlers because list can change in the middle
1961
+ // of emit call
1962
+ handler = handler.slice();
1963
+ }
1964
+ }
1965
+
1966
+ if (handler && handler.length) {
1967
+ if (al > 3) {
1968
+ args = new Array(al - 1);
1969
+ for (j = 1; j < al; j++) args[j - 1] = arguments[j];
1970
+ }
1971
+ for (i = 0, l = handler.length; i < l; i++) {
1972
+ this.event = type;
1973
+ switch (al) {
1974
+ case 1:
1975
+ handler[i].call(this);
1976
+ break;
1977
+ case 2:
1978
+ handler[i].call(this, arguments[1]);
1979
+ break;
1980
+ case 3:
1981
+ handler[i].call(this, arguments[1], arguments[2]);
1982
+ break;
1983
+ default:
1984
+ handler[i].apply(this, args);
1985
+ }
1986
+ }
1987
+ return true;
1988
+ } else if (!this.ignoreErrors && !this._all && type === 'error') {
1989
+ if (arguments[1] instanceof Error) {
1990
+ throw arguments[1]; // Unhandled 'error' event
1991
+ } else {
1992
+ throw new Error("Uncaught, unspecified 'error' event.");
1993
+ }
1994
+ }
1995
+
1996
+ return !!this._all;
1997
+ };
1998
+
1999
+ EventEmitter.prototype.emitAsync = function() {
2000
+ if (!this._events && !this._all) {
2001
+ return false;
2002
+ }
2003
+
2004
+ this._events || init.call(this);
2005
+
2006
+ var type = arguments[0], wildcard= this.wildcard, ns, containsSymbol;
2007
+ var args,l,i,j;
2008
+
2009
+ if (type === 'newListener' && !this._newListener) {
2010
+ if (!this._events.newListener) { return Promise.resolve([false]); }
2011
+ }
2012
+
2013
+ if (wildcard) {
2014
+ ns= type;
2015
+ if(type!=='newListener' && type!=='removeListener'){
2016
+ if (typeof type === 'object') {
2017
+ l = type.length;
2018
+ if (symbolsSupported) {
2019
+ for (i = 0; i < l; i++) {
2020
+ if (typeof type[i] === 'symbol') {
2021
+ containsSymbol = true;
2022
+ break;
2023
+ }
2024
+ }
2025
+ }
2026
+ if (!containsSymbol) {
2027
+ type = type.join(this.delimiter);
2028
+ }
2029
+ }
2030
+ }
2031
+ }
2032
+
2033
+ var promises= [];
2034
+
2035
+ var al = arguments.length;
2036
+ var handler;
2037
+
2038
+ if (this._all) {
2039
+ for (i = 0, l = this._all.length; i < l; i++) {
2040
+ this.event = type;
2041
+ switch (al) {
2042
+ case 1:
2043
+ promises.push(this._all[i].call(this, type));
2044
+ break;
2045
+ case 2:
2046
+ promises.push(this._all[i].call(this, type, arguments[1]));
2047
+ break;
2048
+ case 3:
2049
+ promises.push(this._all[i].call(this, type, arguments[1], arguments[2]));
2050
+ break;
2051
+ default:
2052
+ promises.push(this._all[i].apply(this, arguments));
2053
+ }
2054
+ }
2055
+ }
2056
+
2057
+ if (wildcard) {
2058
+ handler = [];
2059
+ searchListenerTree.call(this, handler, ns, this.listenerTree, 0);
2060
+ } else {
2061
+ handler = this._events[type];
2062
+ }
2063
+
2064
+ if (typeof handler === 'function') {
2065
+ this.event = type;
2066
+ switch (al) {
2067
+ case 1:
2068
+ promises.push(handler.call(this));
2069
+ break;
2070
+ case 2:
2071
+ promises.push(handler.call(this, arguments[1]));
2072
+ break;
2073
+ case 3:
2074
+ promises.push(handler.call(this, arguments[1], arguments[2]));
2075
+ break;
2076
+ default:
2077
+ args = new Array(al - 1);
2078
+ for (j = 1; j < al; j++) args[j - 1] = arguments[j];
2079
+ promises.push(handler.apply(this, args));
2080
+ }
2081
+ } else if (handler && handler.length) {
2082
+ handler = handler.slice();
2083
+ if (al > 3) {
2084
+ args = new Array(al - 1);
2085
+ for (j = 1; j < al; j++) args[j - 1] = arguments[j];
2086
+ }
2087
+ for (i = 0, l = handler.length; i < l; i++) {
2088
+ this.event = type;
2089
+ switch (al) {
2090
+ case 1:
2091
+ promises.push(handler[i].call(this));
2092
+ break;
2093
+ case 2:
2094
+ promises.push(handler[i].call(this, arguments[1]));
2095
+ break;
2096
+ case 3:
2097
+ promises.push(handler[i].call(this, arguments[1], arguments[2]));
2098
+ break;
2099
+ default:
2100
+ promises.push(handler[i].apply(this, args));
2101
+ }
2102
+ }
2103
+ } else if (!this.ignoreErrors && !this._all && type === 'error') {
2104
+ if (arguments[1] instanceof Error) {
2105
+ return Promise.reject(arguments[1]); // Unhandled 'error' event
2106
+ } else {
2107
+ return Promise.reject("Uncaught, unspecified 'error' event.");
2108
+ }
2109
+ }
2110
+
2111
+ return Promise.all(promises);
2112
+ };
2113
+
2114
+ EventEmitter.prototype.on = function(type, listener, options) {
2115
+ return this._on(type, listener, false, options);
2116
+ };
2117
+
2118
+ EventEmitter.prototype.prependListener = function(type, listener, options) {
2119
+ return this._on(type, listener, true, options);
2120
+ };
2121
+
2122
+ EventEmitter.prototype.onAny = function(fn) {
2123
+ return this._onAny(fn, false);
2124
+ };
2125
+
2126
+ EventEmitter.prototype.prependAny = function(fn) {
2127
+ return this._onAny(fn, true);
2128
+ };
2129
+
2130
+ EventEmitter.prototype.addListener = EventEmitter.prototype.on;
2131
+
2132
+ EventEmitter.prototype._onAny = function(fn, prepend){
2133
+ if (typeof fn !== 'function') {
2134
+ throw new Error('onAny only accepts instances of Function');
2135
+ }
2136
+
2137
+ if (!this._all) {
2138
+ this._all = [];
2139
+ }
2140
+
2141
+ // Add the function to the event listener collection.
2142
+ if(prepend){
2143
+ this._all.unshift(fn);
2144
+ }else{
2145
+ this._all.push(fn);
2146
+ }
2147
+
2148
+ return this;
2149
+ };
2150
+
2151
+ EventEmitter.prototype._on = function(type, listener, prepend, options) {
2152
+ if (typeof type === 'function') {
2153
+ this._onAny(type, listener);
2154
+ return this;
2155
+ }
2156
+
2157
+ if (typeof listener !== 'function') {
2158
+ throw new Error('on only accepts instances of Function');
2159
+ }
2160
+ this._events || init.call(this);
2161
+
2162
+ var returnValue= this, temp;
2163
+
2164
+ if (options !== undefined) {
2165
+ temp = setupListener.call(this, type, listener, options);
2166
+ listener = temp[0];
2167
+ returnValue = temp[1];
2168
+ }
2169
+
2170
+ // To avoid recursion in the case that type == "newListeners"! Before
2171
+ // adding it to the listeners, first emit "newListeners".
2172
+ if (this._newListener) {
2173
+ this.emit('newListener', type, listener);
2174
+ }
2175
+
2176
+ if (this.wildcard) {
2177
+ growListenerTree.call(this, type, listener, prepend);
2178
+ return returnValue;
2179
+ }
2180
+
2181
+ if (!this._events[type]) {
2182
+ // Optimize the case of one listener. Don't need the extra array object.
2183
+ this._events[type] = listener;
2184
+ } else {
2185
+ if (typeof this._events[type] === 'function') {
2186
+ // Change to array.
2187
+ this._events[type] = [this._events[type]];
2188
+ }
2189
+
2190
+ // If we've already got an array, just add
2191
+ if(prepend){
2192
+ this._events[type].unshift(listener);
2193
+ }else{
2194
+ this._events[type].push(listener);
2195
+ }
2196
+
2197
+ // Check for listener leak
2198
+ if (
2199
+ !this._events[type].warned &&
2200
+ this._maxListeners > 0 &&
2201
+ this._events[type].length > this._maxListeners
2202
+ ) {
2203
+ this._events[type].warned = true;
2204
+ logPossibleMemoryLeak.call(this, this._events[type].length, type);
2205
+ }
2206
+ }
2207
+
2208
+ return returnValue;
2209
+ };
2210
+
2211
+ EventEmitter.prototype.off = function(type, listener) {
2212
+ if (typeof listener !== 'function') {
2213
+ throw new Error('removeListener only takes instances of Function');
2214
+ }
2215
+
2216
+ var handlers,leafs=[];
2217
+
2218
+ if(this.wildcard) {
2219
+ var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();
2220
+ leafs = searchListenerTree.call(this, null, ns, this.listenerTree, 0);
2221
+ if(!leafs) return this;
2222
+ } else {
2223
+ // does not use listeners(), so no side effect of creating _events[type]
2224
+ if (!this._events[type]) return this;
2225
+ handlers = this._events[type];
2226
+ leafs.push({_listeners:handlers});
2227
+ }
2228
+
2229
+ for (var iLeaf=0; iLeaf<leafs.length; iLeaf++) {
2230
+ var leaf = leafs[iLeaf];
2231
+ handlers = leaf._listeners;
2232
+ if (isArray(handlers)) {
2233
+
2234
+ var position = -1;
2235
+
2236
+ for (var i = 0, length = handlers.length; i < length; i++) {
2237
+ if (handlers[i] === listener ||
2238
+ (handlers[i].listener && handlers[i].listener === listener) ||
2239
+ (handlers[i]._origin && handlers[i]._origin === listener)) {
2240
+ position = i;
2241
+ break;
2242
+ }
2243
+ }
2244
+
2245
+ if (position < 0) {
2246
+ continue;
2247
+ }
2248
+
2249
+ if(this.wildcard) {
2250
+ leaf._listeners.splice(position, 1);
2251
+ }
2252
+ else {
2253
+ this._events[type].splice(position, 1);
2254
+ }
2255
+
2256
+ if (handlers.length === 0) {
2257
+ if(this.wildcard) {
2258
+ delete leaf._listeners;
2259
+ }
2260
+ else {
2261
+ delete this._events[type];
2262
+ }
2263
+ }
2264
+ if (this._removeListener)
2265
+ this.emit("removeListener", type, listener);
2266
+
2267
+ return this;
2268
+ }
2269
+ else if (handlers === listener ||
2270
+ (handlers.listener && handlers.listener === listener) ||
2271
+ (handlers._origin && handlers._origin === listener)) {
2272
+ if(this.wildcard) {
2273
+ delete leaf._listeners;
2274
+ }
2275
+ else {
2276
+ delete this._events[type];
2277
+ }
2278
+ if (this._removeListener)
2279
+ this.emit("removeListener", type, listener);
2280
+ }
2281
+ }
2282
+
2283
+ this.listenerTree && recursivelyGarbageCollect(this.listenerTree);
2284
+
2285
+ return this;
2286
+ };
2287
+
2288
+ EventEmitter.prototype.offAny = function(fn) {
2289
+ var i = 0, l = 0, fns;
2290
+ if (fn && this._all && this._all.length > 0) {
2291
+ fns = this._all;
2292
+ for(i = 0, l = fns.length; i < l; i++) {
2293
+ if(fn === fns[i]) {
2294
+ fns.splice(i, 1);
2295
+ if (this._removeListener)
2296
+ this.emit("removeListenerAny", fn);
2297
+ return this;
2298
+ }
2299
+ }
2300
+ } else {
2301
+ fns = this._all;
2302
+ if (this._removeListener) {
2303
+ for(i = 0, l = fns.length; i < l; i++)
2304
+ this.emit("removeListenerAny", fns[i]);
2305
+ }
2306
+ this._all = [];
2307
+ }
2308
+ return this;
2309
+ };
2310
+
2311
+ EventEmitter.prototype.removeListener = EventEmitter.prototype.off;
2312
+
2313
+ EventEmitter.prototype.removeAllListeners = function (type) {
2314
+ if (type === undefined) {
2315
+ !this._events || init.call(this);
2316
+ return this;
2317
+ }
2318
+
2319
+ if (this.wildcard) {
2320
+ var leafs = searchListenerTree.call(this, null, type, this.listenerTree, 0), leaf, i;
2321
+ if (!leafs) return this;
2322
+ for (i = 0; i < leafs.length; i++) {
2323
+ leaf = leafs[i];
2324
+ leaf._listeners = null;
2325
+ }
2326
+ this.listenerTree && recursivelyGarbageCollect(this.listenerTree);
2327
+ } else if (this._events) {
2328
+ this._events[type] = null;
2329
+ }
2330
+ return this;
2331
+ };
2332
+
2333
+ EventEmitter.prototype.listeners = function (type) {
2334
+ var _events = this._events;
2335
+ var keys, listeners, allListeners;
2336
+ var i;
2337
+ var listenerTree;
2338
+
2339
+ if (type === undefined) {
2340
+ if (this.wildcard) {
2341
+ throw Error('event name required for wildcard emitter');
2342
+ }
2343
+
2344
+ if (!_events) {
2345
+ return [];
2346
+ }
2347
+
2348
+ keys = ownKeys(_events);
2349
+ i = keys.length;
2350
+ allListeners = [];
2351
+ while (i-- > 0) {
2352
+ listeners = _events[keys[i]];
2353
+ if (typeof listeners === 'function') {
2354
+ allListeners.push(listeners);
2355
+ } else {
2356
+ allListeners.push.apply(allListeners, listeners);
2357
+ }
2358
+ }
2359
+ return allListeners;
2360
+ } else {
2361
+ if (this.wildcard) {
2362
+ listenerTree= this.listenerTree;
2363
+ if(!listenerTree) return [];
2364
+ var handlers = [];
2365
+ var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();
2366
+ searchListenerTree.call(this, handlers, ns, listenerTree, 0);
2367
+ return handlers;
2368
+ }
2369
+
2370
+ if (!_events) {
2371
+ return [];
2372
+ }
2373
+
2374
+ listeners = _events[type];
2375
+
2376
+ if (!listeners) {
2377
+ return [];
2378
+ }
2379
+ return typeof listeners === 'function' ? [listeners] : listeners;
2380
+ }
2381
+ };
2382
+
2383
+ EventEmitter.prototype.eventNames = function(nsAsArray){
2384
+ var _events= this._events;
2385
+ return this.wildcard? collectTreeEvents.call(this, this.listenerTree, [], null, nsAsArray) : (_events? ownKeys(_events) : []);
2386
+ };
2387
+
2388
+ EventEmitter.prototype.listenerCount = function(type) {
2389
+ return this.listeners(type).length;
2390
+ };
2391
+
2392
+ EventEmitter.prototype.hasListeners = function (type) {
2393
+ if (this.wildcard) {
2394
+ var handlers = [];
2395
+ var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();
2396
+ searchListenerTree.call(this, handlers, ns, this.listenerTree, 0);
2397
+ return handlers.length > 0;
2398
+ }
2399
+
2400
+ var _events = this._events;
2401
+ var _all = this._all;
2402
+
2403
+ return !!(_all && _all.length || _events && (type === undefined ? ownKeys(_events).length : _events[type]));
2404
+ };
2405
+
2406
+ EventEmitter.prototype.listenersAny = function() {
2407
+
2408
+ if(this._all) {
2409
+ return this._all;
2410
+ }
2411
+ else {
2412
+ return [];
2413
+ }
2414
+
2415
+ };
2416
+
2417
+ EventEmitter.prototype.waitFor = function (event, options) {
2418
+ var self = this;
2419
+ var type = typeof options;
2420
+ if (type === 'number') {
2421
+ options = {timeout: options};
2422
+ } else if (type === 'function') {
2423
+ options = {filter: options};
2424
+ }
2425
+
2426
+ options= resolveOptions(options, {
2427
+ timeout: 0,
2428
+ filter: undefined,
2429
+ handleError: false,
2430
+ Promise: Promise,
2431
+ overload: false
2432
+ }, {
2433
+ filter: functionReducer,
2434
+ Promise: constructorReducer
2435
+ });
2436
+
2437
+ return makeCancelablePromise(options.Promise, function (resolve, reject, onCancel) {
2438
+ function listener() {
2439
+ var filter= options.filter;
2440
+ if (filter && !filter.apply(self, arguments)) {
2441
+ return;
2442
+ }
2443
+ self.off(event, listener);
2444
+ if (options.handleError) {
2445
+ var err = arguments[0];
2446
+ err ? reject(err) : resolve(toArray.apply(null, arguments).slice(1));
2447
+ } else {
2448
+ resolve(toArray.apply(null, arguments));
2449
+ }
2450
+ }
2451
+
2452
+ onCancel(function(){
2453
+ self.off(event, listener);
2454
+ });
2455
+
2456
+ self._on(event, listener, false);
2457
+ }, {
2458
+ timeout: options.timeout,
2459
+ overload: options.overload
2460
+ })
2461
+ };
2462
+
2463
+ function once(emitter, name, options) {
2464
+ options= resolveOptions(options, {
2465
+ Promise: Promise,
2466
+ timeout: 0,
2467
+ overload: false
2468
+ }, {
2469
+ Promise: constructorReducer
2470
+ });
2471
+
2472
+ var _Promise= options.Promise;
2473
+
2474
+ return makeCancelablePromise(_Promise, function(resolve, reject, onCancel){
2475
+ var handler;
2476
+ if (typeof emitter.addEventListener === 'function') {
2477
+ handler= function () {
2478
+ resolve(toArray.apply(null, arguments));
2479
+ };
2480
+
2481
+ onCancel(function(){
2482
+ emitter.removeEventListener(name, handler);
2483
+ });
2484
+
2485
+ emitter.addEventListener(
2486
+ name,
2487
+ handler,
2488
+ {once: true}
2489
+ );
2490
+ return;
2491
+ }
2492
+
2493
+ var eventListener = function(){
2494
+ errorListener && emitter.removeListener('error', errorListener);
2495
+ resolve(toArray.apply(null, arguments));
2496
+ };
2497
+
2498
+ var errorListener;
2499
+
2500
+ if (name !== 'error') {
2501
+ errorListener = function (err){
2502
+ emitter.removeListener(name, eventListener);
2503
+ reject(err);
2504
+ };
2505
+
2506
+ emitter.once('error', errorListener);
2507
+ }
2508
+
2509
+ onCancel(function(){
2510
+ errorListener && emitter.removeListener('error', errorListener);
2511
+ emitter.removeListener(name, eventListener);
2512
+ });
2513
+
2514
+ emitter.once(name, eventListener);
2515
+ }, {
2516
+ timeout: options.timeout,
2517
+ overload: options.overload
2518
+ });
2519
+ }
2520
+
2521
+ var prototype= EventEmitter.prototype;
2522
+
2523
+ Object.defineProperties(EventEmitter, {
2524
+ defaultMaxListeners: {
2525
+ get: function () {
2526
+ return prototype._maxListeners;
2527
+ },
2528
+ set: function (n) {
2529
+ if (typeof n !== 'number' || n < 0 || Number.isNaN(n)) {
2530
+ throw TypeError('n must be a non-negative number')
2531
+ }
2532
+ prototype._maxListeners = n;
2533
+ },
2534
+ enumerable: true
2535
+ },
2536
+ once: {
2537
+ value: once,
2538
+ writable: true,
2539
+ configurable: true
2540
+ }
2541
+ });
2542
+
2543
+ Object.defineProperties(prototype, {
2544
+ _maxListeners: {
2545
+ value: defaultMaxListeners,
2546
+ writable: true,
2547
+ configurable: true
2548
+ },
2549
+ _observers: {value: null, writable: true, configurable: true}
2550
+ });
2551
+
2552
+ if (true) {
2553
+ // AMD. Register as an anonymous module.
2554
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
2555
+ return EventEmitter;
2556
+ }).call(exports, __webpack_require__, exports, module),
2557
+ __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
2558
+ } else { var _global; }
2559
+ }();
2560
+
2561
+
2562
+ /***/ })
2563
+
2564
+ /******/ });
2565
+ /************************************************************************/
2566
+ /******/ // The module cache
2567
+ /******/ var __webpack_module_cache__ = {};
2568
+ /******/
2569
+ /******/ // The require function
2570
+ /******/ function __webpack_require__(moduleId) {
2571
+ /******/ // Check if module is in cache
2572
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
2573
+ /******/ if (cachedModule !== undefined) {
2574
+ /******/ return cachedModule.exports;
2575
+ /******/ }
2576
+ /******/ // Create a new module (and put it into the cache)
2577
+ /******/ var module = __webpack_module_cache__[moduleId] = {
2578
+ /******/ // no module.id needed
2579
+ /******/ // no module.loaded needed
2580
+ /******/ exports: {}
2581
+ /******/ };
2582
+ /******/
2583
+ /******/ // Execute the module function
2584
+ /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
2585
+ /******/
2586
+ /******/ // Return the exports of the module
2587
+ /******/ return module.exports;
2588
+ /******/ }
2589
+ /******/
2590
+ /************************************************************************/
2591
+ /******/
2592
+ /******/ // startup
2593
+ /******/ // Load entry module and return exports
2594
+ /******/ // This entry module is referenced by other modules so it can't be inlined
2595
+ /******/ var __webpack_exports__ = __webpack_require__(650);
2596
+ /******/
2597
+ /******/ return __webpack_exports__;
2598
+ /******/ })()
2599
+ ;
2600
+ });