sockethub 4.0.0 → 5.0.0-alpha.0

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 (140) hide show
  1. package/README.md +3 -3
  2. package/bin/sockethub +23 -19
  3. package/coverage/tmp/coverage-15699-1646422276150-0.json +1 -0
  4. package/dist/bootstrap/init.js +14 -4
  5. package/dist/bootstrap/init.js.map +1 -1
  6. package/dist/bootstrap/platforms.js +81 -69
  7. package/dist/common.js +10 -12
  8. package/dist/common.js.map +1 -1
  9. package/dist/config.js +4 -22
  10. package/dist/config.js.map +1 -1
  11. package/dist/crypto.js +7 -8
  12. package/dist/crypto.js.map +1 -1
  13. package/dist/janitor.js +14 -9
  14. package/dist/janitor.js.map +1 -1
  15. package/dist/middleware/create-activity-object.js +19 -0
  16. package/dist/middleware/create-activity-object.js.map +1 -0
  17. package/dist/middleware/expand-activity-stream.js +33 -0
  18. package/dist/middleware/expand-activity-stream.js.map +1 -0
  19. package/dist/middleware/expand-activity-stream.test.data.js +360 -0
  20. package/dist/middleware/expand-activity-stream.test.data.js.map +1 -0
  21. package/dist/middleware/store-credentials.js +19 -0
  22. package/dist/middleware/store-credentials.js.map +1 -0
  23. package/dist/middleware/validate.js +77 -0
  24. package/dist/middleware/validate.js.map +1 -0
  25. package/dist/middleware/validate.test.data.js +321 -0
  26. package/dist/middleware/validate.test.data.js.map +1 -0
  27. package/dist/middleware.js +47 -49
  28. package/dist/middleware.js.map +1 -1
  29. package/dist/platform-instance.js +84 -66
  30. package/dist/platform-instance.js.map +1 -1
  31. package/dist/platform.js +50 -25
  32. package/dist/platform.js.map +1 -1
  33. package/dist/process-manager.js +7 -4
  34. package/dist/process-manager.js.map +1 -1
  35. package/dist/routes.js +9 -7
  36. package/dist/routes.js.map +1 -1
  37. package/dist/serve.js +3 -3
  38. package/dist/serve.js.map +1 -1
  39. package/dist/sockethub-client.js +2604 -0
  40. package/dist/sockethub-client.js.map +1 -0
  41. package/dist/sockethub-client.min.js +2 -0
  42. package/dist/sockethub-client.min.js.LICENSE.txt +24 -0
  43. package/dist/sockethub.js +75 -58
  44. package/dist/sockethub.js.map +1 -1
  45. package/dist/store.js +17 -0
  46. package/dist/store.js.map +1 -0
  47. package/package.json +48 -44
  48. package/src/bootstrap/init.ts +16 -2
  49. package/src/bootstrap/platforms.js +14 -18
  50. package/src/common.test.ts +44 -33
  51. package/src/common.ts +9 -17
  52. package/src/config.test.ts +16 -38
  53. package/src/config.ts +1 -23
  54. package/src/crypto.test.ts +15 -17
  55. package/src/crypto.ts +4 -5
  56. package/src/janitor.ts +19 -12
  57. package/src/middleware/create-activity-object.test.ts +10 -0
  58. package/src/middleware/create-activity-object.ts +13 -0
  59. package/src/middleware/expand-activity-stream.test.data.ts +365 -0
  60. package/src/middleware/expand-activity-stream.test.ts +78 -0
  61. package/src/middleware/expand-activity-stream.ts +27 -0
  62. package/src/middleware/store-credentials.test.ts +72 -0
  63. package/src/middleware/store-credentials.ts +16 -0
  64. package/src/{validate.d.ts → middleware/validate.d.ts} +0 -0
  65. package/src/middleware/validate.test.data.ts +320 -0
  66. package/src/middleware/validate.test.ts +47 -0
  67. package/src/middleware/validate.ts +49 -0
  68. package/src/middleware.test.ts +148 -0
  69. package/src/middleware.ts +46 -51
  70. package/src/platform-instance.test.ts +224 -196
  71. package/src/platform-instance.ts +74 -58
  72. package/src/platform.ts +44 -24
  73. package/src/process-manager.ts +7 -4
  74. package/src/routes.test.ts +32 -17
  75. package/src/routes.ts +8 -6
  76. package/src/serve.ts +1 -1
  77. package/src/sockethub-client.test.ts +235 -0
  78. package/src/sockethub-client.ts +164 -0
  79. package/src/sockethub.ts +96 -93
  80. package/src/store.test.ts +26 -0
  81. package/src/store.ts +17 -0
  82. package/tsconfig.json +8 -8
  83. package/views/examples/dummy.ejs +7 -7
  84. package/views/examples/feeds.ejs +10 -10
  85. package/views/examples/irc.ejs +65 -59
  86. package/views/examples/shared.js +31 -29
  87. package/views/examples/xmpp.ejs +49 -58
  88. package/webpack.minified.config.js +14 -0
  89. package/webpack.normal.config.js +14 -0
  90. package/coverage/clover.xml +0 -190
  91. package/coverage/coverage-final.json +0 -6
  92. package/coverage/lcov-report/base.css +0 -224
  93. package/coverage/lcov-report/block-navigation.js +0 -79
  94. package/coverage/lcov-report/common.ts.html +0 -143
  95. package/coverage/lcov-report/config.ts.html +0 -359
  96. package/coverage/lcov-report/crypto.ts.html +0 -203
  97. package/coverage/lcov-report/favicon.png +0 -0
  98. package/coverage/lcov-report/index.html +0 -171
  99. package/coverage/lcov-report/platform-instance.ts.html +0 -740
  100. package/coverage/lcov-report/prettify.css +0 -1
  101. package/coverage/lcov-report/prettify.js +0 -2
  102. package/coverage/lcov-report/routes.ts.html +0 -353
  103. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  104. package/coverage/lcov-report/sorter.js +0 -170
  105. package/coverage/lcov-report/src/common.ts.html +0 -143
  106. package/coverage/lcov-report/src/config.ts.html +0 -359
  107. package/coverage/lcov-report/src/crypto.ts.html +0 -182
  108. package/coverage/lcov-report/src/index.html +0 -156
  109. package/coverage/lcov-report/src/platform-instance.ts.html +0 -740
  110. package/coverage/lcov-report/src/routes/base.ts.html +0 -359
  111. package/coverage/lcov-report/src/routes/examples.ts.html +0 -311
  112. package/coverage/lcov-report/src/routes/index.html +0 -111
  113. package/coverage/lcov-report/src/services/http.ts.html +0 -239
  114. package/coverage/lcov-report/src/services/index.html +0 -111
  115. package/coverage/lcov-report/src/services/redis.ts.html +0 -140
  116. package/coverage/lcov-report/src/shared-resources.ts.html +0 -104
  117. package/coverage/lcov.info +0 -336
  118. package/coverage/tmp/coverage-70996-1620314182345-0.json +0 -1
  119. package/dist/bootstrap/platforms.js.map +0 -1
  120. package/dist/js/client.js +0 -177
  121. package/dist/js/client.js.map +0 -1
  122. package/dist/resource-manager.js +0 -66
  123. package/dist/resource-manager.js.map +0 -1
  124. package/dist/routes/base.js +0 -92
  125. package/dist/routes/base.js.map +0 -1
  126. package/dist/routes/examples.js +0 -93
  127. package/dist/routes/examples.js.map +0 -1
  128. package/dist/services/http.js +0 -68
  129. package/dist/services/http.js.map +0 -1
  130. package/dist/services/redis.js +0 -1
  131. package/dist/services/redis.js.map +0 -1
  132. package/dist/shared-resources.js +0 -11
  133. package/dist/shared-resources.js.map +0 -1
  134. package/dist/validate.js +0 -157
  135. package/dist/validate.js.map +0 -1
  136. package/jest.config.js +0 -18
  137. package/src/js/client.js +0 -190
  138. package/src/validate.ts +0 -147
  139. package/test/middleware-suite.js +0 -101
  140. package/test/validate-suite.js +0 -338
@@ -0,0 +1,2604 @@
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
+ getByType: function (type) {
744
+ // TODO not implemented
745
+ }
746
+ };
747
+
748
+
749
+ function ASFactory(opts = {}) {
750
+ specialObjs = opts.specialObjs || [];
751
+ failOnUnknownObjectProperties = typeof opts.failOnUnknownObjectProperties === 'boolean' ? opts.failOnUnknownObjectProperties : false;
752
+ for (let propName of Object.keys(opts.customProps || {})) {
753
+ if (typeof opts.customProps[propName] === 'object') {
754
+ customProps[propName] = opts.customProps[propName];
755
+ }
756
+ }
757
+
758
+ return {
759
+ Stream: Stream,
760
+ Object: _Object,
761
+ on: function (event, func) {
762
+ return ee.on(event, func);
763
+ },
764
+ once: function (event, func) {
765
+ return ee.once(event, func);
766
+ },
767
+ off: function (event, funcName) {
768
+ return ee.off(event, funcName);
769
+ }
770
+ };
771
+ }
772
+
773
+ if ( true && module.exports) {
774
+ module.exports = ASFactory
775
+ }
776
+ if (typeof window === 'object') {
777
+ window.ASFactory = ASFactory;
778
+ }
779
+
780
+
781
+ /***/ }),
782
+
783
+ /***/ 650:
784
+ /***/ (function(module, exports, __webpack_require__) {
785
+
786
+ "use strict";
787
+
788
+ var __importDefault = (this && this.__importDefault) || function (mod) {
789
+ return (mod && mod.__esModule) ? mod : { "default": mod };
790
+ };
791
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
792
+ const eventemitter2_1 = __webpack_require__(387);
793
+ const activity_streams_1 = __importDefault(__webpack_require__(744));
794
+ class SockethubClient {
795
+ constructor(socket) {
796
+ this.events = {
797
+ 'credentials': new Map(),
798
+ 'activity-object': new Map(),
799
+ 'connect': new Map(),
800
+ 'join': new Map()
801
+ };
802
+ this.online = false;
803
+ this.debug = true;
804
+ if (!socket) {
805
+ throw new Error('SockethubClient requires a socket.io instance');
806
+ }
807
+ this._socket = socket;
808
+ // @ts-ignore
809
+ this.ActivityStreams = (0, activity_streams_1.default)({ specialObjs: ['credentials'] });
810
+ this.socket = this.createPublicEmitter();
811
+ this.registerSocketIOHandlers();
812
+ this.ActivityStreams.on('activity-object-create', (obj) => {
813
+ socket.emit('activity-object', obj, (err) => {
814
+ if (err) {
815
+ console.error('failed to create activity-object ', err);
816
+ }
817
+ else {
818
+ this.eventActivityObject(obj);
819
+ }
820
+ });
821
+ });
822
+ socket.on('activity-object', (obj) => {
823
+ this.ActivityStreams.Object.create(obj);
824
+ });
825
+ }
826
+ createPublicEmitter() {
827
+ let socket = new eventemitter2_1.EventEmitter2({
828
+ wildcard: true,
829
+ verboseMemoryLeak: false
830
+ });
831
+ // @ts-ignore
832
+ socket._emit = socket.emit;
833
+ socket.emit = (event, content, callback) => {
834
+ if (event === 'credentials') {
835
+ this.eventCredentials(content);
836
+ }
837
+ else if (event === 'activity-object') {
838
+ this.eventActivityObject(content);
839
+ }
840
+ else if (event === 'message') {
841
+ this.eventMessage(content);
842
+ }
843
+ this._socket.emit(event, content, callback);
844
+ };
845
+ return socket;
846
+ }
847
+ eventActivityObject(content) {
848
+ if (content.id) {
849
+ this.events['activity-object'].set(content.id, content);
850
+ }
851
+ }
852
+ eventCredentials(content) {
853
+ if ((content.object) && (content.object.type === 'credentials')) {
854
+ this.events['credentials'].set(content.actor.id || content.actor, content);
855
+ }
856
+ }
857
+ eventMessage(content) {
858
+ if (!this.online) {
859
+ return;
860
+ }
861
+ // either store or delete the specified content onto the storedJoins map,
862
+ // for reply once we're back online.
863
+ const key = SockethubClient.getKey(content);
864
+ if (content.type === 'join' || content.type === 'connect') {
865
+ this.events[content.type].set(key, content);
866
+ }
867
+ else if (content.type === 'leave') {
868
+ this.events['join'].delete(key);
869
+ }
870
+ else if (content.type === 'disconnect') {
871
+ this.events['connect'].delete(key);
872
+ }
873
+ }
874
+ static getKey(content) {
875
+ var _a;
876
+ let actor = ((_a = content.actor) === null || _a === void 0 ? void 0 : _a.id) || content.actor;
877
+ if (!actor) {
878
+ throw new Error("actor property not present for message type: " + (content === null || content === void 0 ? void 0 : content.type));
879
+ }
880
+ let target = content.target ? content.target.id || content.target : '';
881
+ return actor + '-' + target;
882
+ }
883
+ log(msg, obj) {
884
+ if (this.debug) {
885
+ // eslint-disable-next-line security-node/detect-crlf
886
+ console.log(msg, obj);
887
+ }
888
+ }
889
+ registerSocketIOHandlers() {
890
+ // middleware for events which don't deal in AS objects
891
+ const callHandler = (event) => {
892
+ return (obj, cb) => {
893
+ if (event === 'connect') {
894
+ this.online = true;
895
+ this.replay('activity-object', this.events['activity-object']);
896
+ this.replay('credentials', this.events['credentials']);
897
+ this.replay('message', this.events['connect']);
898
+ this.replay('message', this.events['join']);
899
+ }
900
+ else if (event === 'disconnect') {
901
+ this.online = false;
902
+ }
903
+ this.socket._emit(event, obj, cb);
904
+ };
905
+ };
906
+ // register for events that give us information on connection status
907
+ this._socket.on('connect', callHandler('connect'));
908
+ this._socket.on('connect_error', callHandler('connect_error'));
909
+ this._socket.on('disconnect', callHandler('disconnect'));
910
+ // use as a middleware to receive incoming Sockethub messages and unpack them
911
+ // using the ActivityStreams library before passing them along to the app.
912
+ this._socket.on('message', (obj, cb) => {
913
+ this.socket._emit('message', this.ActivityStreams.Stream(obj), cb);
914
+ });
915
+ }
916
+ replay(name, asMap) {
917
+ asMap.forEach((obj) => {
918
+ this.log(`replaying ${name}`, obj);
919
+ this._socket.emit(name, obj);
920
+ });
921
+ }
922
+ ;
923
+ }
924
+ if ( true && module.exports) {
925
+ module.exports = SockethubClient;
926
+ }
927
+ if (true) {
928
+ exports = SockethubClient; // lgtm [js/useless-assignment-to-local]
929
+ }
930
+ // @ts-ignore
931
+ if (typeof window === 'object') {
932
+ // @ts-ignore
933
+ window.SockethubClient = SockethubClient;
934
+ }
935
+ //# sourceMappingURL=/sockethub-client.js.map
936
+
937
+ /***/ }),
938
+
939
+ /***/ 387:
940
+ /***/ ((module, exports, __webpack_require__) => {
941
+
942
+ var __WEBPACK_AMD_DEFINE_RESULT__;/*!
943
+ * EventEmitter2
944
+ * https://github.com/hij1nx/EventEmitter2
945
+ *
946
+ * Copyright (c) 2013 hij1nx
947
+ * Licensed under the MIT license.
948
+ */
949
+ ;!function(undefined) {
950
+ var hasOwnProperty= Object.hasOwnProperty;
951
+ var isArray = Array.isArray ? Array.isArray : function _isArray(obj) {
952
+ return Object.prototype.toString.call(obj) === "[object Array]";
953
+ };
954
+ var defaultMaxListeners = 10;
955
+ var nextTickSupported= typeof process=='object' && typeof process.nextTick=='function';
956
+ var symbolsSupported= typeof Symbol==='function';
957
+ var reflectSupported= typeof Reflect === 'object';
958
+ var setImmediateSupported= typeof setImmediate === 'function';
959
+ var _setImmediate= setImmediateSupported ? setImmediate : setTimeout;
960
+ var ownKeys= symbolsSupported? (reflectSupported && typeof Reflect.ownKeys==='function'? Reflect.ownKeys : function(obj){
961
+ var arr= Object.getOwnPropertyNames(obj);
962
+ arr.push.apply(arr, Object.getOwnPropertySymbols(obj));
963
+ return arr;
964
+ }) : Object.keys;
965
+
966
+ function init() {
967
+ this._events = {};
968
+ if (this._conf) {
969
+ configure.call(this, this._conf);
970
+ }
971
+ }
972
+
973
+ function configure(conf) {
974
+ if (conf) {
975
+ this._conf = conf;
976
+
977
+ conf.delimiter && (this.delimiter = conf.delimiter);
978
+
979
+ if(conf.maxListeners!==undefined){
980
+ this._maxListeners= conf.maxListeners;
981
+ }
982
+
983
+ conf.wildcard && (this.wildcard = conf.wildcard);
984
+ conf.newListener && (this._newListener = conf.newListener);
985
+ conf.removeListener && (this._removeListener = conf.removeListener);
986
+ conf.verboseMemoryLeak && (this.verboseMemoryLeak = conf.verboseMemoryLeak);
987
+ conf.ignoreErrors && (this.ignoreErrors = conf.ignoreErrors);
988
+
989
+ if (this.wildcard) {
990
+ this.listenerTree = {};
991
+ }
992
+ }
993
+ }
994
+
995
+ function logPossibleMemoryLeak(count, eventName) {
996
+ var errorMsg = '(node) warning: possible EventEmitter memory ' +
997
+ 'leak detected. ' + count + ' listeners added. ' +
998
+ 'Use emitter.setMaxListeners() to increase limit.';
999
+
1000
+ if(this.verboseMemoryLeak){
1001
+ errorMsg += ' Event name: ' + eventName + '.';
1002
+ }
1003
+
1004
+ if(typeof process !== 'undefined' && process.emitWarning){
1005
+ var e = new Error(errorMsg);
1006
+ e.name = 'MaxListenersExceededWarning';
1007
+ e.emitter = this;
1008
+ e.count = count;
1009
+ process.emitWarning(e);
1010
+ } else {
1011
+ console.error(errorMsg);
1012
+
1013
+ if (console.trace){
1014
+ console.trace();
1015
+ }
1016
+ }
1017
+ }
1018
+
1019
+ var toArray = function (a, b, c) {
1020
+ var n = arguments.length;
1021
+ switch (n) {
1022
+ case 0:
1023
+ return [];
1024
+ case 1:
1025
+ return [a];
1026
+ case 2:
1027
+ return [a, b];
1028
+ case 3:
1029
+ return [a, b, c];
1030
+ default:
1031
+ var arr = new Array(n);
1032
+ while (n--) {
1033
+ arr[n] = arguments[n];
1034
+ }
1035
+ return arr;
1036
+ }
1037
+ };
1038
+
1039
+ function toObject(keys, values) {
1040
+ var obj = {};
1041
+ var key;
1042
+ var len = keys.length;
1043
+ var valuesCount = values ? value.length : 0;
1044
+ for (var i = 0; i < len; i++) {
1045
+ key = keys[i];
1046
+ obj[key] = i < valuesCount ? values[i] : undefined;
1047
+ }
1048
+ return obj;
1049
+ }
1050
+
1051
+ function TargetObserver(emitter, target, options) {
1052
+ this._emitter = emitter;
1053
+ this._target = target;
1054
+ this._listeners = {};
1055
+ this._listenersCount = 0;
1056
+
1057
+ var on, off;
1058
+
1059
+ if (options.on || options.off) {
1060
+ on = options.on;
1061
+ off = options.off;
1062
+ }
1063
+
1064
+ if (target.addEventListener) {
1065
+ on = target.addEventListener;
1066
+ off = target.removeEventListener;
1067
+ } else if (target.addListener) {
1068
+ on = target.addListener;
1069
+ off = target.removeListener;
1070
+ } else if (target.on) {
1071
+ on = target.on;
1072
+ off = target.off;
1073
+ }
1074
+
1075
+ if (!on && !off) {
1076
+ throw Error('target does not implement any known event API');
1077
+ }
1078
+
1079
+ if (typeof on !== 'function') {
1080
+ throw TypeError('on method must be a function');
1081
+ }
1082
+
1083
+ if (typeof off !== 'function') {
1084
+ throw TypeError('off method must be a function');
1085
+ }
1086
+
1087
+ this._on = on;
1088
+ this._off = off;
1089
+
1090
+ var _observers= emitter._observers;
1091
+ if(_observers){
1092
+ _observers.push(this);
1093
+ }else{
1094
+ emitter._observers= [this];
1095
+ }
1096
+ }
1097
+
1098
+ Object.assign(TargetObserver.prototype, {
1099
+ subscribe: function(event, localEvent, reducer){
1100
+ var observer= this;
1101
+ var target= this._target;
1102
+ var emitter= this._emitter;
1103
+ var listeners= this._listeners;
1104
+ var handler= function(){
1105
+ var args= toArray.apply(null, arguments);
1106
+ var eventObj= {
1107
+ data: args,
1108
+ name: localEvent,
1109
+ original: event
1110
+ };
1111
+ if(reducer){
1112
+ var result= reducer.call(target, eventObj);
1113
+ if(result!==false){
1114
+ emitter.emit.apply(emitter, [eventObj.name].concat(args))
1115
+ }
1116
+ return;
1117
+ }
1118
+ emitter.emit.apply(emitter, [localEvent].concat(args));
1119
+ };
1120
+
1121
+
1122
+ if(listeners[event]){
1123
+ throw Error('Event \'' + event + '\' is already listening');
1124
+ }
1125
+
1126
+ this._listenersCount++;
1127
+
1128
+ if(emitter._newListener && emitter._removeListener && !observer._onNewListener){
1129
+
1130
+ this._onNewListener = function (_event) {
1131
+ if (_event === localEvent && listeners[event] === null) {
1132
+ listeners[event] = handler;
1133
+ observer._on.call(target, event, handler);
1134
+ }
1135
+ };
1136
+
1137
+ emitter.on('newListener', this._onNewListener);
1138
+
1139
+ this._onRemoveListener= function(_event){
1140
+ if(_event === localEvent && !emitter.hasListeners(_event) && listeners[event]){
1141
+ listeners[event]= null;
1142
+ observer._off.call(target, event, handler);
1143
+ }
1144
+ };
1145
+
1146
+ listeners[event]= null;
1147
+
1148
+ emitter.on('removeListener', this._onRemoveListener);
1149
+ }else{
1150
+ listeners[event]= handler;
1151
+ observer._on.call(target, event, handler);
1152
+ }
1153
+ },
1154
+
1155
+ unsubscribe: function(event){
1156
+ var observer= this;
1157
+ var listeners= this._listeners;
1158
+ var emitter= this._emitter;
1159
+ var handler;
1160
+ var events;
1161
+ var off= this._off;
1162
+ var target= this._target;
1163
+ var i;
1164
+
1165
+ if(event && typeof event!=='string'){
1166
+ throw TypeError('event must be a string');
1167
+ }
1168
+
1169
+ function clearRefs(){
1170
+ if(observer._onNewListener){
1171
+ emitter.off('newListener', observer._onNewListener);
1172
+ emitter.off('removeListener', observer._onRemoveListener);
1173
+ observer._onNewListener= null;
1174
+ observer._onRemoveListener= null;
1175
+ }
1176
+ var index= findTargetIndex.call(emitter, observer);
1177
+ emitter._observers.splice(index, 1);
1178
+ }
1179
+
1180
+ if(event){
1181
+ handler= listeners[event];
1182
+ if(!handler) return;
1183
+ off.call(target, event, handler);
1184
+ delete listeners[event];
1185
+ if(!--this._listenersCount){
1186
+ clearRefs();
1187
+ }
1188
+ }else{
1189
+ events= ownKeys(listeners);
1190
+ i= events.length;
1191
+ while(i-->0){
1192
+ event= events[i];
1193
+ off.call(target, event, listeners[event]);
1194
+ }
1195
+ this._listeners= {};
1196
+ this._listenersCount= 0;
1197
+ clearRefs();
1198
+ }
1199
+ }
1200
+ });
1201
+
1202
+ function resolveOptions(options, schema, reducers, allowUnknown) {
1203
+ var computedOptions = Object.assign({}, schema);
1204
+
1205
+ if (!options) return computedOptions;
1206
+
1207
+ if (typeof options !== 'object') {
1208
+ throw TypeError('options must be an object')
1209
+ }
1210
+
1211
+ var keys = Object.keys(options);
1212
+ var length = keys.length;
1213
+ var option, value;
1214
+ var reducer;
1215
+
1216
+ function reject(reason) {
1217
+ throw Error('Invalid "' + option + '" option value' + (reason ? '. Reason: ' + reason : ''))
1218
+ }
1219
+
1220
+ for (var i = 0; i < length; i++) {
1221
+ option = keys[i];
1222
+ if (!allowUnknown && !hasOwnProperty.call(schema, option)) {
1223
+ throw Error('Unknown "' + option + '" option');
1224
+ }
1225
+ value = options[option];
1226
+ if (value !== undefined) {
1227
+ reducer = reducers[option];
1228
+ computedOptions[option] = reducer ? reducer(value, reject) : value;
1229
+ }
1230
+ }
1231
+ return computedOptions;
1232
+ }
1233
+
1234
+ function constructorReducer(value, reject) {
1235
+ if (typeof value !== 'function' || !value.hasOwnProperty('prototype')) {
1236
+ reject('value must be a constructor');
1237
+ }
1238
+ return value;
1239
+ }
1240
+
1241
+ function makeTypeReducer(types) {
1242
+ var message= 'value must be type of ' + types.join('|');
1243
+ var len= types.length;
1244
+ var firstType= types[0];
1245
+ var secondType= types[1];
1246
+
1247
+ if (len === 1) {
1248
+ return function (v, reject) {
1249
+ if (typeof v === firstType) {
1250
+ return v;
1251
+ }
1252
+ reject(message);
1253
+ }
1254
+ }
1255
+
1256
+ if (len === 2) {
1257
+ return function (v, reject) {
1258
+ var kind= typeof v;
1259
+ if (kind === firstType || kind === secondType) return v;
1260
+ reject(message);
1261
+ }
1262
+ }
1263
+
1264
+ return function (v, reject) {
1265
+ var kind = typeof v;
1266
+ var i = len;
1267
+ while (i-- > 0) {
1268
+ if (kind === types[i]) return v;
1269
+ }
1270
+ reject(message);
1271
+ }
1272
+ }
1273
+
1274
+ var functionReducer= makeTypeReducer(['function']);
1275
+
1276
+ var objectFunctionReducer= makeTypeReducer(['object', 'function']);
1277
+
1278
+ function makeCancelablePromise(Promise, executor, options) {
1279
+ var isCancelable;
1280
+ var callbacks;
1281
+ var timer= 0;
1282
+ var subscriptionClosed;
1283
+
1284
+ var promise = new Promise(function (resolve, reject, onCancel) {
1285
+ options= resolveOptions(options, {
1286
+ timeout: 0,
1287
+ overload: false
1288
+ }, {
1289
+ timeout: function(value, reject){
1290
+ value*= 1;
1291
+ if (typeof value !== 'number' || value < 0 || !Number.isFinite(value)) {
1292
+ reject('timeout must be a positive number');
1293
+ }
1294
+ return value;
1295
+ }
1296
+ });
1297
+
1298
+ isCancelable = !options.overload && typeof Promise.prototype.cancel === 'function' && typeof onCancel === 'function';
1299
+
1300
+ function cleanup() {
1301
+ if (callbacks) {
1302
+ callbacks = null;
1303
+ }
1304
+ if (timer) {
1305
+ clearTimeout(timer);
1306
+ timer = 0;
1307
+ }
1308
+ }
1309
+
1310
+ var _resolve= function(value){
1311
+ cleanup();
1312
+ resolve(value);
1313
+ };
1314
+
1315
+ var _reject= function(err){
1316
+ cleanup();
1317
+ reject(err);
1318
+ };
1319
+
1320
+ if (isCancelable) {
1321
+ executor(_resolve, _reject, onCancel);
1322
+ } else {
1323
+ callbacks = [function(reason){
1324
+ _reject(reason || Error('canceled'));
1325
+ }];
1326
+ executor(_resolve, _reject, function (cb) {
1327
+ if (subscriptionClosed) {
1328
+ throw Error('Unable to subscribe on cancel event asynchronously')
1329
+ }
1330
+ if (typeof cb !== 'function') {
1331
+ throw TypeError('onCancel callback must be a function');
1332
+ }
1333
+ callbacks.push(cb);
1334
+ });
1335
+ subscriptionClosed= true;
1336
+ }
1337
+
1338
+ if (options.timeout > 0) {
1339
+ timer= setTimeout(function(){
1340
+ var reason= Error('timeout');
1341
+ reason.code = 'ETIMEDOUT'
1342
+ timer= 0;
1343
+ promise.cancel(reason);
1344
+ reject(reason);
1345
+ }, options.timeout);
1346
+ }
1347
+ });
1348
+
1349
+ if (!isCancelable) {
1350
+ promise.cancel = function (reason) {
1351
+ if (!callbacks) {
1352
+ return;
1353
+ }
1354
+ var length = callbacks.length;
1355
+ for (var i = 1; i < length; i++) {
1356
+ callbacks[i](reason);
1357
+ }
1358
+ // internal callback to reject the promise
1359
+ callbacks[0](reason);
1360
+ callbacks = null;
1361
+ };
1362
+ }
1363
+
1364
+ return promise;
1365
+ }
1366
+
1367
+ function findTargetIndex(observer) {
1368
+ var observers = this._observers;
1369
+ if(!observers){
1370
+ return -1;
1371
+ }
1372
+ var len = observers.length;
1373
+ for (var i = 0; i < len; i++) {
1374
+ if (observers[i]._target === observer) return i;
1375
+ }
1376
+ return -1;
1377
+ }
1378
+
1379
+ // Attention, function return type now is array, always !
1380
+ // It has zero elements if no any matches found and one or more
1381
+ // elements (leafs) if there are matches
1382
+ //
1383
+ function searchListenerTree(handlers, type, tree, i, typeLength) {
1384
+ if (!tree) {
1385
+ return null;
1386
+ }
1387
+
1388
+ if (i === 0) {
1389
+ var kind = typeof type;
1390
+ if (kind === 'string') {
1391
+ var ns, n, l = 0, j = 0, delimiter = this.delimiter, dl = delimiter.length;
1392
+ if ((n = type.indexOf(delimiter)) !== -1) {
1393
+ ns = new Array(5);
1394
+ do {
1395
+ ns[l++] = type.slice(j, n);
1396
+ j = n + dl;
1397
+ } while ((n = type.indexOf(delimiter, j)) !== -1);
1398
+
1399
+ ns[l++] = type.slice(j);
1400
+ type = ns;
1401
+ typeLength = l;
1402
+ } else {
1403
+ type = [type];
1404
+ typeLength = 1;
1405
+ }
1406
+ } else if (kind === 'object') {
1407
+ typeLength = type.length;
1408
+ } else {
1409
+ type = [type];
1410
+ typeLength = 1;
1411
+ }
1412
+ }
1413
+
1414
+ var listeners= null, branch, xTree, xxTree, isolatedBranch, endReached, currentType = type[i],
1415
+ nextType = type[i + 1], branches, _listeners;
1416
+
1417
+ if (i === typeLength) {
1418
+ //
1419
+ // If at the end of the event(s) list and the tree has listeners
1420
+ // invoke those listeners.
1421
+ //
1422
+
1423
+ if(tree._listeners) {
1424
+ if (typeof tree._listeners === 'function') {
1425
+ handlers && handlers.push(tree._listeners);
1426
+ listeners = [tree];
1427
+ } else {
1428
+ handlers && handlers.push.apply(handlers, tree._listeners);
1429
+ listeners = [tree];
1430
+ }
1431
+ }
1432
+ } else {
1433
+
1434
+ if (currentType === '*') {
1435
+ //
1436
+ // If the event emitted is '*' at this part
1437
+ // or there is a concrete match at this patch
1438
+ //
1439
+ branches = ownKeys(tree);
1440
+ n = branches.length;
1441
+ while (n-- > 0) {
1442
+ branch = branches[n];
1443
+ if (branch !== '_listeners') {
1444
+ _listeners = searchListenerTree(handlers, type, tree[branch], i + 1, typeLength);
1445
+ if (_listeners) {
1446
+ if (listeners) {
1447
+ listeners.push.apply(listeners, _listeners);
1448
+ } else {
1449
+ listeners = _listeners;
1450
+ }
1451
+ }
1452
+ }
1453
+ }
1454
+ return listeners;
1455
+ } else if (currentType === '**') {
1456
+ endReached = (i + 1 === typeLength || (i + 2 === typeLength && nextType === '*'));
1457
+ if (endReached && tree._listeners) {
1458
+ // The next element has a _listeners, add it to the handlers.
1459
+ listeners = searchListenerTree(handlers, type, tree, typeLength, typeLength);
1460
+ }
1461
+
1462
+ branches = ownKeys(tree);
1463
+ n = branches.length;
1464
+ while (n-- > 0) {
1465
+ branch = branches[n];
1466
+ if (branch !== '_listeners') {
1467
+ if (branch === '*' || branch === '**') {
1468
+ if (tree[branch]._listeners && !endReached) {
1469
+ _listeners = searchListenerTree(handlers, type, tree[branch], typeLength, typeLength);
1470
+ if (_listeners) {
1471
+ if (listeners) {
1472
+ listeners.push.apply(listeners, _listeners);
1473
+ } else {
1474
+ listeners = _listeners;
1475
+ }
1476
+ }
1477
+ }
1478
+ _listeners = searchListenerTree(handlers, type, tree[branch], i, typeLength);
1479
+ } else if (branch === nextType) {
1480
+ _listeners = searchListenerTree(handlers, type, tree[branch], i + 2, typeLength);
1481
+ } else {
1482
+ // No match on this one, shift into the tree but not in the type array.
1483
+ _listeners = searchListenerTree(handlers, type, tree[branch], i, typeLength);
1484
+ }
1485
+ if (_listeners) {
1486
+ if (listeners) {
1487
+ listeners.push.apply(listeners, _listeners);
1488
+ } else {
1489
+ listeners = _listeners;
1490
+ }
1491
+ }
1492
+ }
1493
+ }
1494
+ return listeners;
1495
+ } else if (tree[currentType]) {
1496
+ listeners = searchListenerTree(handlers, type, tree[currentType], i + 1, typeLength);
1497
+ }
1498
+ }
1499
+
1500
+ xTree = tree['*'];
1501
+ if (xTree) {
1502
+ //
1503
+ // If the listener tree will allow any match for this part,
1504
+ // then recursively explore all branches of the tree
1505
+ //
1506
+ searchListenerTree(handlers, type, xTree, i + 1, typeLength);
1507
+ }
1508
+
1509
+ xxTree = tree['**'];
1510
+ if (xxTree) {
1511
+ if (i < typeLength) {
1512
+ if (xxTree._listeners) {
1513
+ // If we have a listener on a '**', it will catch all, so add its handler.
1514
+ searchListenerTree(handlers, type, xxTree, typeLength, typeLength);
1515
+ }
1516
+
1517
+ // Build arrays of matching next branches and others.
1518
+ branches= ownKeys(xxTree);
1519
+ n= branches.length;
1520
+ while(n-->0){
1521
+ branch= branches[n];
1522
+ if (branch !== '_listeners') {
1523
+ if (branch === nextType) {
1524
+ // We know the next element will match, so jump twice.
1525
+ searchListenerTree(handlers, type, xxTree[branch], i + 2, typeLength);
1526
+ } else if (branch === currentType) {
1527
+ // Current node matches, move into the tree.
1528
+ searchListenerTree(handlers, type, xxTree[branch], i + 1, typeLength);
1529
+ } else {
1530
+ isolatedBranch = {};
1531
+ isolatedBranch[branch] = xxTree[branch];
1532
+ searchListenerTree(handlers, type, {'**': isolatedBranch}, i + 1, typeLength);
1533
+ }
1534
+ }
1535
+ }
1536
+ } else if (xxTree._listeners) {
1537
+ // We have reached the end and still on a '**'
1538
+ searchListenerTree(handlers, type, xxTree, typeLength, typeLength);
1539
+ } else if (xxTree['*'] && xxTree['*']._listeners) {
1540
+ searchListenerTree(handlers, type, xxTree['*'], typeLength, typeLength);
1541
+ }
1542
+ }
1543
+
1544
+ return listeners;
1545
+ }
1546
+
1547
+ function growListenerTree(type, listener, prepend) {
1548
+ var len = 0, j = 0, i, delimiter = this.delimiter, dl= delimiter.length, ns;
1549
+
1550
+ if(typeof type==='string') {
1551
+ if ((i = type.indexOf(delimiter)) !== -1) {
1552
+ ns = new Array(5);
1553
+ do {
1554
+ ns[len++] = type.slice(j, i);
1555
+ j = i + dl;
1556
+ } while ((i = type.indexOf(delimiter, j)) !== -1);
1557
+
1558
+ ns[len++] = type.slice(j);
1559
+ }else{
1560
+ ns= [type];
1561
+ len= 1;
1562
+ }
1563
+ }else{
1564
+ ns= type;
1565
+ len= type.length;
1566
+ }
1567
+
1568
+ //
1569
+ // Looks for two consecutive '**', if so, don't add the event at all.
1570
+ //
1571
+ if (len > 1) {
1572
+ for (i = 0; i + 1 < len; i++) {
1573
+ if (ns[i] === '**' && ns[i + 1] === '**') {
1574
+ return;
1575
+ }
1576
+ }
1577
+ }
1578
+
1579
+
1580
+
1581
+ var tree = this.listenerTree, name;
1582
+
1583
+ for (i = 0; i < len; i++) {
1584
+ name = ns[i];
1585
+
1586
+ tree = tree[name] || (tree[name] = {});
1587
+
1588
+ if (i === len - 1) {
1589
+ if (!tree._listeners) {
1590
+ tree._listeners = listener;
1591
+ } else {
1592
+ if (typeof tree._listeners === 'function') {
1593
+ tree._listeners = [tree._listeners];
1594
+ }
1595
+
1596
+ if (prepend) {
1597
+ tree._listeners.unshift(listener);
1598
+ } else {
1599
+ tree._listeners.push(listener);
1600
+ }
1601
+
1602
+ if (
1603
+ !tree._listeners.warned &&
1604
+ this._maxListeners > 0 &&
1605
+ tree._listeners.length > this._maxListeners
1606
+ ) {
1607
+ tree._listeners.warned = true;
1608
+ logPossibleMemoryLeak.call(this, tree._listeners.length, name);
1609
+ }
1610
+ }
1611
+ return true;
1612
+ }
1613
+ }
1614
+
1615
+ return true;
1616
+ }
1617
+
1618
+ function collectTreeEvents(tree, events, root, asArray){
1619
+ var branches= ownKeys(tree);
1620
+ var i= branches.length;
1621
+ var branch, branchName, path;
1622
+ var hasListeners= tree['_listeners'];
1623
+ var isArrayPath;
1624
+
1625
+ while(i-->0){
1626
+ branchName= branches[i];
1627
+
1628
+ branch= tree[branchName];
1629
+
1630
+ if(branchName==='_listeners'){
1631
+ path= root;
1632
+ }else {
1633
+ path = root ? root.concat(branchName) : [branchName];
1634
+ }
1635
+
1636
+ isArrayPath= asArray || typeof branchName==='symbol';
1637
+
1638
+ hasListeners && events.push(isArrayPath? path : path.join(this.delimiter));
1639
+
1640
+ if(typeof branch==='object'){
1641
+ collectTreeEvents.call(this, branch, events, path, isArrayPath);
1642
+ }
1643
+ }
1644
+
1645
+ return events;
1646
+ }
1647
+
1648
+ function recursivelyGarbageCollect(root) {
1649
+ var keys = ownKeys(root);
1650
+ var i= keys.length;
1651
+ var obj, key, flag;
1652
+ while(i-->0){
1653
+ key = keys[i];
1654
+ obj = root[key];
1655
+
1656
+ if(obj){
1657
+ flag= true;
1658
+ if(key !== '_listeners' && !recursivelyGarbageCollect(obj)){
1659
+ delete root[key];
1660
+ }
1661
+ }
1662
+ }
1663
+
1664
+ return flag;
1665
+ }
1666
+
1667
+ function Listener(emitter, event, listener){
1668
+ this.emitter= emitter;
1669
+ this.event= event;
1670
+ this.listener= listener;
1671
+ }
1672
+
1673
+ Listener.prototype.off= function(){
1674
+ this.emitter.off(this.event, this.listener);
1675
+ return this;
1676
+ };
1677
+
1678
+ function setupListener(event, listener, options){
1679
+ if (options === true) {
1680
+ promisify = true;
1681
+ } else if (options === false) {
1682
+ async = true;
1683
+ } else {
1684
+ if (!options || typeof options !== 'object') {
1685
+ throw TypeError('options should be an object or true');
1686
+ }
1687
+ var async = options.async;
1688
+ var promisify = options.promisify;
1689
+ var nextTick = options.nextTick;
1690
+ var objectify = options.objectify;
1691
+ }
1692
+
1693
+ if (async || nextTick || promisify) {
1694
+ var _listener = listener;
1695
+ var _origin = listener._origin || listener;
1696
+
1697
+ if (nextTick && !nextTickSupported) {
1698
+ throw Error('process.nextTick is not supported');
1699
+ }
1700
+
1701
+ if (promisify === undefined) {
1702
+ promisify = listener.constructor.name === 'AsyncFunction';
1703
+ }
1704
+
1705
+ listener = function () {
1706
+ var args = arguments;
1707
+ var context = this;
1708
+ var event = this.event;
1709
+
1710
+ return promisify ? (nextTick ? Promise.resolve() : new Promise(function (resolve) {
1711
+ _setImmediate(resolve);
1712
+ }).then(function () {
1713
+ context.event = event;
1714
+ return _listener.apply(context, args)
1715
+ })) : (nextTick ? process.nextTick : _setImmediate)(function () {
1716
+ context.event = event;
1717
+ _listener.apply(context, args)
1718
+ });
1719
+ };
1720
+
1721
+ listener._async = true;
1722
+ listener._origin = _origin;
1723
+ }
1724
+
1725
+ return [listener, objectify? new Listener(this, event, listener): this];
1726
+ }
1727
+
1728
+ function EventEmitter(conf) {
1729
+ this._events = {};
1730
+ this._newListener = false;
1731
+ this._removeListener = false;
1732
+ this.verboseMemoryLeak = false;
1733
+ configure.call(this, conf);
1734
+ }
1735
+
1736
+ EventEmitter.EventEmitter2 = EventEmitter; // backwards compatibility for exporting EventEmitter property
1737
+
1738
+ EventEmitter.prototype.listenTo= function(target, events, options){
1739
+ if(typeof target!=='object'){
1740
+ throw TypeError('target musts be an object');
1741
+ }
1742
+
1743
+ var emitter= this;
1744
+
1745
+ options = resolveOptions(options, {
1746
+ on: undefined,
1747
+ off: undefined,
1748
+ reducers: undefined
1749
+ }, {
1750
+ on: functionReducer,
1751
+ off: functionReducer,
1752
+ reducers: objectFunctionReducer
1753
+ });
1754
+
1755
+ function listen(events){
1756
+ if(typeof events!=='object'){
1757
+ throw TypeError('events must be an object');
1758
+ }
1759
+
1760
+ var reducers= options.reducers;
1761
+ var index= findTargetIndex.call(emitter, target);
1762
+ var observer;
1763
+
1764
+ if(index===-1){
1765
+ observer= new TargetObserver(emitter, target, options);
1766
+ }else{
1767
+ observer= emitter._observers[index];
1768
+ }
1769
+
1770
+ var keys= ownKeys(events);
1771
+ var len= keys.length;
1772
+ var event;
1773
+ var isSingleReducer= typeof reducers==='function';
1774
+
1775
+ for(var i=0; i<len; i++){
1776
+ event= keys[i];
1777
+ observer.subscribe(
1778
+ event,
1779
+ events[event] || event,
1780
+ isSingleReducer ? reducers : reducers && reducers[event]
1781
+ );
1782
+ }
1783
+ }
1784
+
1785
+ isArray(events)?
1786
+ listen(toObject(events)) :
1787
+ (typeof events==='string'? listen(toObject(events.split(/\s+/))): listen(events));
1788
+
1789
+ return this;
1790
+ };
1791
+
1792
+ EventEmitter.prototype.stopListeningTo = function (target, event) {
1793
+ var observers = this._observers;
1794
+
1795
+ if(!observers){
1796
+ return false;
1797
+ }
1798
+
1799
+ var i = observers.length;
1800
+ var observer;
1801
+ var matched= false;
1802
+
1803
+ if(target && typeof target!=='object'){
1804
+ throw TypeError('target should be an object');
1805
+ }
1806
+
1807
+ while (i-- > 0) {
1808
+ observer = observers[i];
1809
+ if (!target || observer._target === target) {
1810
+ observer.unsubscribe(event);
1811
+ matched= true;
1812
+ }
1813
+ }
1814
+
1815
+ return matched;
1816
+ };
1817
+
1818
+ // By default EventEmitters will print a warning if more than
1819
+ // 10 listeners are added to it. This is a useful default which
1820
+ // helps finding memory leaks.
1821
+ //
1822
+ // Obviously not all Emitters should be limited to 10. This function allows
1823
+ // that to be increased. Set to zero for unlimited.
1824
+
1825
+ EventEmitter.prototype.delimiter = '.';
1826
+
1827
+ EventEmitter.prototype.setMaxListeners = function(n) {
1828
+ if (n !== undefined) {
1829
+ this._maxListeners = n;
1830
+ if (!this._conf) this._conf = {};
1831
+ this._conf.maxListeners = n;
1832
+ }
1833
+ };
1834
+
1835
+ EventEmitter.prototype.getMaxListeners = function() {
1836
+ return this._maxListeners;
1837
+ };
1838
+
1839
+ EventEmitter.prototype.event = '';
1840
+
1841
+ EventEmitter.prototype.once = function(event, fn, options) {
1842
+ return this._once(event, fn, false, options);
1843
+ };
1844
+
1845
+ EventEmitter.prototype.prependOnceListener = function(event, fn, options) {
1846
+ return this._once(event, fn, true, options);
1847
+ };
1848
+
1849
+ EventEmitter.prototype._once = function(event, fn, prepend, options) {
1850
+ return this._many(event, 1, fn, prepend, options);
1851
+ };
1852
+
1853
+ EventEmitter.prototype.many = function(event, ttl, fn, options) {
1854
+ return this._many(event, ttl, fn, false, options);
1855
+ };
1856
+
1857
+ EventEmitter.prototype.prependMany = function(event, ttl, fn, options) {
1858
+ return this._many(event, ttl, fn, true, options);
1859
+ };
1860
+
1861
+ EventEmitter.prototype._many = function(event, ttl, fn, prepend, options) {
1862
+ var self = this;
1863
+
1864
+ if (typeof fn !== 'function') {
1865
+ throw new Error('many only accepts instances of Function');
1866
+ }
1867
+
1868
+ function listener() {
1869
+ if (--ttl === 0) {
1870
+ self.off(event, listener);
1871
+ }
1872
+ return fn.apply(this, arguments);
1873
+ }
1874
+
1875
+ listener._origin = fn;
1876
+
1877
+ return this._on(event, listener, prepend, options);
1878
+ };
1879
+
1880
+ EventEmitter.prototype.emit = function() {
1881
+ if (!this._events && !this._all) {
1882
+ return false;
1883
+ }
1884
+
1885
+ this._events || init.call(this);
1886
+
1887
+ var type = arguments[0], ns, wildcard= this.wildcard;
1888
+ var args,l,i,j, containsSymbol;
1889
+
1890
+ if (type === 'newListener' && !this._newListener) {
1891
+ if (!this._events.newListener) {
1892
+ return false;
1893
+ }
1894
+ }
1895
+
1896
+ if (wildcard) {
1897
+ ns= type;
1898
+ if(type!=='newListener' && type!=='removeListener'){
1899
+ if (typeof type === 'object') {
1900
+ l = type.length;
1901
+ if (symbolsSupported) {
1902
+ for (i = 0; i < l; i++) {
1903
+ if (typeof type[i] === 'symbol') {
1904
+ containsSymbol = true;
1905
+ break;
1906
+ }
1907
+ }
1908
+ }
1909
+ if (!containsSymbol) {
1910
+ type = type.join(this.delimiter);
1911
+ }
1912
+ }
1913
+ }
1914
+ }
1915
+
1916
+ var al = arguments.length;
1917
+ var handler;
1918
+
1919
+ if (this._all && this._all.length) {
1920
+ handler = this._all.slice();
1921
+
1922
+ for (i = 0, l = handler.length; i < l; i++) {
1923
+ this.event = type;
1924
+ switch (al) {
1925
+ case 1:
1926
+ handler[i].call(this, type);
1927
+ break;
1928
+ case 2:
1929
+ handler[i].call(this, type, arguments[1]);
1930
+ break;
1931
+ case 3:
1932
+ handler[i].call(this, type, arguments[1], arguments[2]);
1933
+ break;
1934
+ default:
1935
+ handler[i].apply(this, arguments);
1936
+ }
1937
+ }
1938
+ }
1939
+
1940
+ if (wildcard) {
1941
+ handler = [];
1942
+ searchListenerTree.call(this, handler, ns, this.listenerTree, 0, l);
1943
+ } else {
1944
+ handler = this._events[type];
1945
+ if (typeof handler === 'function') {
1946
+ this.event = type;
1947
+ switch (al) {
1948
+ case 1:
1949
+ handler.call(this);
1950
+ break;
1951
+ case 2:
1952
+ handler.call(this, arguments[1]);
1953
+ break;
1954
+ case 3:
1955
+ handler.call(this, arguments[1], arguments[2]);
1956
+ break;
1957
+ default:
1958
+ args = new Array(al - 1);
1959
+ for (j = 1; j < al; j++) args[j - 1] = arguments[j];
1960
+ handler.apply(this, args);
1961
+ }
1962
+ return true;
1963
+ } else if (handler) {
1964
+ // need to make copy of handlers because list can change in the middle
1965
+ // of emit call
1966
+ handler = handler.slice();
1967
+ }
1968
+ }
1969
+
1970
+ if (handler && handler.length) {
1971
+ if (al > 3) {
1972
+ args = new Array(al - 1);
1973
+ for (j = 1; j < al; j++) args[j - 1] = arguments[j];
1974
+ }
1975
+ for (i = 0, l = handler.length; i < l; i++) {
1976
+ this.event = type;
1977
+ switch (al) {
1978
+ case 1:
1979
+ handler[i].call(this);
1980
+ break;
1981
+ case 2:
1982
+ handler[i].call(this, arguments[1]);
1983
+ break;
1984
+ case 3:
1985
+ handler[i].call(this, arguments[1], arguments[2]);
1986
+ break;
1987
+ default:
1988
+ handler[i].apply(this, args);
1989
+ }
1990
+ }
1991
+ return true;
1992
+ } else if (!this.ignoreErrors && !this._all && type === 'error') {
1993
+ if (arguments[1] instanceof Error) {
1994
+ throw arguments[1]; // Unhandled 'error' event
1995
+ } else {
1996
+ throw new Error("Uncaught, unspecified 'error' event.");
1997
+ }
1998
+ }
1999
+
2000
+ return !!this._all;
2001
+ };
2002
+
2003
+ EventEmitter.prototype.emitAsync = function() {
2004
+ if (!this._events && !this._all) {
2005
+ return false;
2006
+ }
2007
+
2008
+ this._events || init.call(this);
2009
+
2010
+ var type = arguments[0], wildcard= this.wildcard, ns, containsSymbol;
2011
+ var args,l,i,j;
2012
+
2013
+ if (type === 'newListener' && !this._newListener) {
2014
+ if (!this._events.newListener) { return Promise.resolve([false]); }
2015
+ }
2016
+
2017
+ if (wildcard) {
2018
+ ns= type;
2019
+ if(type!=='newListener' && type!=='removeListener'){
2020
+ if (typeof type === 'object') {
2021
+ l = type.length;
2022
+ if (symbolsSupported) {
2023
+ for (i = 0; i < l; i++) {
2024
+ if (typeof type[i] === 'symbol') {
2025
+ containsSymbol = true;
2026
+ break;
2027
+ }
2028
+ }
2029
+ }
2030
+ if (!containsSymbol) {
2031
+ type = type.join(this.delimiter);
2032
+ }
2033
+ }
2034
+ }
2035
+ }
2036
+
2037
+ var promises= [];
2038
+
2039
+ var al = arguments.length;
2040
+ var handler;
2041
+
2042
+ if (this._all) {
2043
+ for (i = 0, l = this._all.length; i < l; i++) {
2044
+ this.event = type;
2045
+ switch (al) {
2046
+ case 1:
2047
+ promises.push(this._all[i].call(this, type));
2048
+ break;
2049
+ case 2:
2050
+ promises.push(this._all[i].call(this, type, arguments[1]));
2051
+ break;
2052
+ case 3:
2053
+ promises.push(this._all[i].call(this, type, arguments[1], arguments[2]));
2054
+ break;
2055
+ default:
2056
+ promises.push(this._all[i].apply(this, arguments));
2057
+ }
2058
+ }
2059
+ }
2060
+
2061
+ if (wildcard) {
2062
+ handler = [];
2063
+ searchListenerTree.call(this, handler, ns, this.listenerTree, 0);
2064
+ } else {
2065
+ handler = this._events[type];
2066
+ }
2067
+
2068
+ if (typeof handler === 'function') {
2069
+ this.event = type;
2070
+ switch (al) {
2071
+ case 1:
2072
+ promises.push(handler.call(this));
2073
+ break;
2074
+ case 2:
2075
+ promises.push(handler.call(this, arguments[1]));
2076
+ break;
2077
+ case 3:
2078
+ promises.push(handler.call(this, arguments[1], arguments[2]));
2079
+ break;
2080
+ default:
2081
+ args = new Array(al - 1);
2082
+ for (j = 1; j < al; j++) args[j - 1] = arguments[j];
2083
+ promises.push(handler.apply(this, args));
2084
+ }
2085
+ } else if (handler && handler.length) {
2086
+ handler = handler.slice();
2087
+ if (al > 3) {
2088
+ args = new Array(al - 1);
2089
+ for (j = 1; j < al; j++) args[j - 1] = arguments[j];
2090
+ }
2091
+ for (i = 0, l = handler.length; i < l; i++) {
2092
+ this.event = type;
2093
+ switch (al) {
2094
+ case 1:
2095
+ promises.push(handler[i].call(this));
2096
+ break;
2097
+ case 2:
2098
+ promises.push(handler[i].call(this, arguments[1]));
2099
+ break;
2100
+ case 3:
2101
+ promises.push(handler[i].call(this, arguments[1], arguments[2]));
2102
+ break;
2103
+ default:
2104
+ promises.push(handler[i].apply(this, args));
2105
+ }
2106
+ }
2107
+ } else if (!this.ignoreErrors && !this._all && type === 'error') {
2108
+ if (arguments[1] instanceof Error) {
2109
+ return Promise.reject(arguments[1]); // Unhandled 'error' event
2110
+ } else {
2111
+ return Promise.reject("Uncaught, unspecified 'error' event.");
2112
+ }
2113
+ }
2114
+
2115
+ return Promise.all(promises);
2116
+ };
2117
+
2118
+ EventEmitter.prototype.on = function(type, listener, options) {
2119
+ return this._on(type, listener, false, options);
2120
+ };
2121
+
2122
+ EventEmitter.prototype.prependListener = function(type, listener, options) {
2123
+ return this._on(type, listener, true, options);
2124
+ };
2125
+
2126
+ EventEmitter.prototype.onAny = function(fn) {
2127
+ return this._onAny(fn, false);
2128
+ };
2129
+
2130
+ EventEmitter.prototype.prependAny = function(fn) {
2131
+ return this._onAny(fn, true);
2132
+ };
2133
+
2134
+ EventEmitter.prototype.addListener = EventEmitter.prototype.on;
2135
+
2136
+ EventEmitter.prototype._onAny = function(fn, prepend){
2137
+ if (typeof fn !== 'function') {
2138
+ throw new Error('onAny only accepts instances of Function');
2139
+ }
2140
+
2141
+ if (!this._all) {
2142
+ this._all = [];
2143
+ }
2144
+
2145
+ // Add the function to the event listener collection.
2146
+ if(prepend){
2147
+ this._all.unshift(fn);
2148
+ }else{
2149
+ this._all.push(fn);
2150
+ }
2151
+
2152
+ return this;
2153
+ };
2154
+
2155
+ EventEmitter.prototype._on = function(type, listener, prepend, options) {
2156
+ if (typeof type === 'function') {
2157
+ this._onAny(type, listener);
2158
+ return this;
2159
+ }
2160
+
2161
+ if (typeof listener !== 'function') {
2162
+ throw new Error('on only accepts instances of Function');
2163
+ }
2164
+ this._events || init.call(this);
2165
+
2166
+ var returnValue= this, temp;
2167
+
2168
+ if (options !== undefined) {
2169
+ temp = setupListener.call(this, type, listener, options);
2170
+ listener = temp[0];
2171
+ returnValue = temp[1];
2172
+ }
2173
+
2174
+ // To avoid recursion in the case that type == "newListeners"! Before
2175
+ // adding it to the listeners, first emit "newListeners".
2176
+ if (this._newListener) {
2177
+ this.emit('newListener', type, listener);
2178
+ }
2179
+
2180
+ if (this.wildcard) {
2181
+ growListenerTree.call(this, type, listener, prepend);
2182
+ return returnValue;
2183
+ }
2184
+
2185
+ if (!this._events[type]) {
2186
+ // Optimize the case of one listener. Don't need the extra array object.
2187
+ this._events[type] = listener;
2188
+ } else {
2189
+ if (typeof this._events[type] === 'function') {
2190
+ // Change to array.
2191
+ this._events[type] = [this._events[type]];
2192
+ }
2193
+
2194
+ // If we've already got an array, just add
2195
+ if(prepend){
2196
+ this._events[type].unshift(listener);
2197
+ }else{
2198
+ this._events[type].push(listener);
2199
+ }
2200
+
2201
+ // Check for listener leak
2202
+ if (
2203
+ !this._events[type].warned &&
2204
+ this._maxListeners > 0 &&
2205
+ this._events[type].length > this._maxListeners
2206
+ ) {
2207
+ this._events[type].warned = true;
2208
+ logPossibleMemoryLeak.call(this, this._events[type].length, type);
2209
+ }
2210
+ }
2211
+
2212
+ return returnValue;
2213
+ };
2214
+
2215
+ EventEmitter.prototype.off = function(type, listener) {
2216
+ if (typeof listener !== 'function') {
2217
+ throw new Error('removeListener only takes instances of Function');
2218
+ }
2219
+
2220
+ var handlers,leafs=[];
2221
+
2222
+ if(this.wildcard) {
2223
+ var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();
2224
+ leafs = searchListenerTree.call(this, null, ns, this.listenerTree, 0);
2225
+ if(!leafs) return this;
2226
+ } else {
2227
+ // does not use listeners(), so no side effect of creating _events[type]
2228
+ if (!this._events[type]) return this;
2229
+ handlers = this._events[type];
2230
+ leafs.push({_listeners:handlers});
2231
+ }
2232
+
2233
+ for (var iLeaf=0; iLeaf<leafs.length; iLeaf++) {
2234
+ var leaf = leafs[iLeaf];
2235
+ handlers = leaf._listeners;
2236
+ if (isArray(handlers)) {
2237
+
2238
+ var position = -1;
2239
+
2240
+ for (var i = 0, length = handlers.length; i < length; i++) {
2241
+ if (handlers[i] === listener ||
2242
+ (handlers[i].listener && handlers[i].listener === listener) ||
2243
+ (handlers[i]._origin && handlers[i]._origin === listener)) {
2244
+ position = i;
2245
+ break;
2246
+ }
2247
+ }
2248
+
2249
+ if (position < 0) {
2250
+ continue;
2251
+ }
2252
+
2253
+ if(this.wildcard) {
2254
+ leaf._listeners.splice(position, 1);
2255
+ }
2256
+ else {
2257
+ this._events[type].splice(position, 1);
2258
+ }
2259
+
2260
+ if (handlers.length === 0) {
2261
+ if(this.wildcard) {
2262
+ delete leaf._listeners;
2263
+ }
2264
+ else {
2265
+ delete this._events[type];
2266
+ }
2267
+ }
2268
+ if (this._removeListener)
2269
+ this.emit("removeListener", type, listener);
2270
+
2271
+ return this;
2272
+ }
2273
+ else if (handlers === listener ||
2274
+ (handlers.listener && handlers.listener === listener) ||
2275
+ (handlers._origin && handlers._origin === listener)) {
2276
+ if(this.wildcard) {
2277
+ delete leaf._listeners;
2278
+ }
2279
+ else {
2280
+ delete this._events[type];
2281
+ }
2282
+ if (this._removeListener)
2283
+ this.emit("removeListener", type, listener);
2284
+ }
2285
+ }
2286
+
2287
+ this.listenerTree && recursivelyGarbageCollect(this.listenerTree);
2288
+
2289
+ return this;
2290
+ };
2291
+
2292
+ EventEmitter.prototype.offAny = function(fn) {
2293
+ var i = 0, l = 0, fns;
2294
+ if (fn && this._all && this._all.length > 0) {
2295
+ fns = this._all;
2296
+ for(i = 0, l = fns.length; i < l; i++) {
2297
+ if(fn === fns[i]) {
2298
+ fns.splice(i, 1);
2299
+ if (this._removeListener)
2300
+ this.emit("removeListenerAny", fn);
2301
+ return this;
2302
+ }
2303
+ }
2304
+ } else {
2305
+ fns = this._all;
2306
+ if (this._removeListener) {
2307
+ for(i = 0, l = fns.length; i < l; i++)
2308
+ this.emit("removeListenerAny", fns[i]);
2309
+ }
2310
+ this._all = [];
2311
+ }
2312
+ return this;
2313
+ };
2314
+
2315
+ EventEmitter.prototype.removeListener = EventEmitter.prototype.off;
2316
+
2317
+ EventEmitter.prototype.removeAllListeners = function (type) {
2318
+ if (type === undefined) {
2319
+ !this._events || init.call(this);
2320
+ return this;
2321
+ }
2322
+
2323
+ if (this.wildcard) {
2324
+ var leafs = searchListenerTree.call(this, null, type, this.listenerTree, 0), leaf, i;
2325
+ if (!leafs) return this;
2326
+ for (i = 0; i < leafs.length; i++) {
2327
+ leaf = leafs[i];
2328
+ leaf._listeners = null;
2329
+ }
2330
+ this.listenerTree && recursivelyGarbageCollect(this.listenerTree);
2331
+ } else if (this._events) {
2332
+ this._events[type] = null;
2333
+ }
2334
+ return this;
2335
+ };
2336
+
2337
+ EventEmitter.prototype.listeners = function (type) {
2338
+ var _events = this._events;
2339
+ var keys, listeners, allListeners;
2340
+ var i;
2341
+ var listenerTree;
2342
+
2343
+ if (type === undefined) {
2344
+ if (this.wildcard) {
2345
+ throw Error('event name required for wildcard emitter');
2346
+ }
2347
+
2348
+ if (!_events) {
2349
+ return [];
2350
+ }
2351
+
2352
+ keys = ownKeys(_events);
2353
+ i = keys.length;
2354
+ allListeners = [];
2355
+ while (i-- > 0) {
2356
+ listeners = _events[keys[i]];
2357
+ if (typeof listeners === 'function') {
2358
+ allListeners.push(listeners);
2359
+ } else {
2360
+ allListeners.push.apply(allListeners, listeners);
2361
+ }
2362
+ }
2363
+ return allListeners;
2364
+ } else {
2365
+ if (this.wildcard) {
2366
+ listenerTree= this.listenerTree;
2367
+ if(!listenerTree) return [];
2368
+ var handlers = [];
2369
+ var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();
2370
+ searchListenerTree.call(this, handlers, ns, listenerTree, 0);
2371
+ return handlers;
2372
+ }
2373
+
2374
+ if (!_events) {
2375
+ return [];
2376
+ }
2377
+
2378
+ listeners = _events[type];
2379
+
2380
+ if (!listeners) {
2381
+ return [];
2382
+ }
2383
+ return typeof listeners === 'function' ? [listeners] : listeners;
2384
+ }
2385
+ };
2386
+
2387
+ EventEmitter.prototype.eventNames = function(nsAsArray){
2388
+ var _events= this._events;
2389
+ return this.wildcard? collectTreeEvents.call(this, this.listenerTree, [], null, nsAsArray) : (_events? ownKeys(_events) : []);
2390
+ };
2391
+
2392
+ EventEmitter.prototype.listenerCount = function(type) {
2393
+ return this.listeners(type).length;
2394
+ };
2395
+
2396
+ EventEmitter.prototype.hasListeners = function (type) {
2397
+ if (this.wildcard) {
2398
+ var handlers = [];
2399
+ var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();
2400
+ searchListenerTree.call(this, handlers, ns, this.listenerTree, 0);
2401
+ return handlers.length > 0;
2402
+ }
2403
+
2404
+ var _events = this._events;
2405
+ var _all = this._all;
2406
+
2407
+ return !!(_all && _all.length || _events && (type === undefined ? ownKeys(_events).length : _events[type]));
2408
+ };
2409
+
2410
+ EventEmitter.prototype.listenersAny = function() {
2411
+
2412
+ if(this._all) {
2413
+ return this._all;
2414
+ }
2415
+ else {
2416
+ return [];
2417
+ }
2418
+
2419
+ };
2420
+
2421
+ EventEmitter.prototype.waitFor = function (event, options) {
2422
+ var self = this;
2423
+ var type = typeof options;
2424
+ if (type === 'number') {
2425
+ options = {timeout: options};
2426
+ } else if (type === 'function') {
2427
+ options = {filter: options};
2428
+ }
2429
+
2430
+ options= resolveOptions(options, {
2431
+ timeout: 0,
2432
+ filter: undefined,
2433
+ handleError: false,
2434
+ Promise: Promise,
2435
+ overload: false
2436
+ }, {
2437
+ filter: functionReducer,
2438
+ Promise: constructorReducer
2439
+ });
2440
+
2441
+ return makeCancelablePromise(options.Promise, function (resolve, reject, onCancel) {
2442
+ function listener() {
2443
+ var filter= options.filter;
2444
+ if (filter && !filter.apply(self, arguments)) {
2445
+ return;
2446
+ }
2447
+ self.off(event, listener);
2448
+ if (options.handleError) {
2449
+ var err = arguments[0];
2450
+ err ? reject(err) : resolve(toArray.apply(null, arguments).slice(1));
2451
+ } else {
2452
+ resolve(toArray.apply(null, arguments));
2453
+ }
2454
+ }
2455
+
2456
+ onCancel(function(){
2457
+ self.off(event, listener);
2458
+ });
2459
+
2460
+ self._on(event, listener, false);
2461
+ }, {
2462
+ timeout: options.timeout,
2463
+ overload: options.overload
2464
+ })
2465
+ };
2466
+
2467
+ function once(emitter, name, options) {
2468
+ options= resolveOptions(options, {
2469
+ Promise: Promise,
2470
+ timeout: 0,
2471
+ overload: false
2472
+ }, {
2473
+ Promise: constructorReducer
2474
+ });
2475
+
2476
+ var _Promise= options.Promise;
2477
+
2478
+ return makeCancelablePromise(_Promise, function(resolve, reject, onCancel){
2479
+ var handler;
2480
+ if (typeof emitter.addEventListener === 'function') {
2481
+ handler= function () {
2482
+ resolve(toArray.apply(null, arguments));
2483
+ };
2484
+
2485
+ onCancel(function(){
2486
+ emitter.removeEventListener(name, handler);
2487
+ });
2488
+
2489
+ emitter.addEventListener(
2490
+ name,
2491
+ handler,
2492
+ {once: true}
2493
+ );
2494
+ return;
2495
+ }
2496
+
2497
+ var eventListener = function(){
2498
+ errorListener && emitter.removeListener('error', errorListener);
2499
+ resolve(toArray.apply(null, arguments));
2500
+ };
2501
+
2502
+ var errorListener;
2503
+
2504
+ if (name !== 'error') {
2505
+ errorListener = function (err){
2506
+ emitter.removeListener(name, eventListener);
2507
+ reject(err);
2508
+ };
2509
+
2510
+ emitter.once('error', errorListener);
2511
+ }
2512
+
2513
+ onCancel(function(){
2514
+ errorListener && emitter.removeListener('error', errorListener);
2515
+ emitter.removeListener(name, eventListener);
2516
+ });
2517
+
2518
+ emitter.once(name, eventListener);
2519
+ }, {
2520
+ timeout: options.timeout,
2521
+ overload: options.overload
2522
+ });
2523
+ }
2524
+
2525
+ var prototype= EventEmitter.prototype;
2526
+
2527
+ Object.defineProperties(EventEmitter, {
2528
+ defaultMaxListeners: {
2529
+ get: function () {
2530
+ return prototype._maxListeners;
2531
+ },
2532
+ set: function (n) {
2533
+ if (typeof n !== 'number' || n < 0 || Number.isNaN(n)) {
2534
+ throw TypeError('n must be a non-negative number')
2535
+ }
2536
+ prototype._maxListeners = n;
2537
+ },
2538
+ enumerable: true
2539
+ },
2540
+ once: {
2541
+ value: once,
2542
+ writable: true,
2543
+ configurable: true
2544
+ }
2545
+ });
2546
+
2547
+ Object.defineProperties(prototype, {
2548
+ _maxListeners: {
2549
+ value: defaultMaxListeners,
2550
+ writable: true,
2551
+ configurable: true
2552
+ },
2553
+ _observers: {value: null, writable: true, configurable: true}
2554
+ });
2555
+
2556
+ if (true) {
2557
+ // AMD. Register as an anonymous module.
2558
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
2559
+ return EventEmitter;
2560
+ }).call(exports, __webpack_require__, exports, module),
2561
+ __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
2562
+ } else { var _global; }
2563
+ }();
2564
+
2565
+
2566
+ /***/ })
2567
+
2568
+ /******/ });
2569
+ /************************************************************************/
2570
+ /******/ // The module cache
2571
+ /******/ var __webpack_module_cache__ = {};
2572
+ /******/
2573
+ /******/ // The require function
2574
+ /******/ function __webpack_require__(moduleId) {
2575
+ /******/ // Check if module is in cache
2576
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
2577
+ /******/ if (cachedModule !== undefined) {
2578
+ /******/ return cachedModule.exports;
2579
+ /******/ }
2580
+ /******/ // Create a new module (and put it into the cache)
2581
+ /******/ var module = __webpack_module_cache__[moduleId] = {
2582
+ /******/ // no module.id needed
2583
+ /******/ // no module.loaded needed
2584
+ /******/ exports: {}
2585
+ /******/ };
2586
+ /******/
2587
+ /******/ // Execute the module function
2588
+ /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
2589
+ /******/
2590
+ /******/ // Return the exports of the module
2591
+ /******/ return module.exports;
2592
+ /******/ }
2593
+ /******/
2594
+ /************************************************************************/
2595
+ /******/
2596
+ /******/ // startup
2597
+ /******/ // Load entry module and return exports
2598
+ /******/ // This entry module is referenced by other modules so it can't be inlined
2599
+ /******/ var __webpack_exports__ = __webpack_require__(650);
2600
+ /******/
2601
+ /******/ return __webpack_exports__;
2602
+ /******/ })()
2603
+ ;
2604
+ });