sockethub 4.1.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.
- package/bin/sockethub +23 -20
- package/coverage/tmp/coverage-15699-1646422276150-0.json +1 -0
- package/dist/bootstrap/init.js +1 -1
- package/dist/bootstrap/init.js.map +1 -1
- package/dist/bootstrap/platforms.js +14 -18
- package/dist/janitor.js +11 -5
- package/dist/janitor.js.map +1 -1
- package/dist/middleware/create-activity-object.js.map +1 -1
- package/dist/middleware/expand-activity-stream.js +33 -0
- package/dist/middleware/expand-activity-stream.js.map +1 -0
- package/dist/middleware/expand-activity-stream.test.data.js +360 -0
- package/dist/middleware/expand-activity-stream.test.data.js.map +1 -0
- package/dist/middleware/store-credentials.js +1 -1
- package/dist/middleware/store-credentials.js.map +1 -1
- package/dist/middleware/validate.js +30 -104
- package/dist/middleware/validate.js.map +1 -1
- package/dist/middleware/validate.test.data.js +151 -111
- package/dist/middleware/validate.test.data.js.map +1 -1
- package/dist/middleware.js +47 -77
- package/dist/middleware.js.map +1 -1
- package/dist/platform-instance.js +47 -54
- package/dist/platform-instance.js.map +1 -1
- package/dist/platform.js +29 -10
- package/dist/platform.js.map +1 -1
- package/dist/process-manager.js +5 -2
- package/dist/process-manager.js.map +1 -1
- package/dist/routes.js +3 -5
- package/dist/routes.js.map +1 -1
- package/dist/sockethub-client.js +2604 -0
- package/dist/sockethub-client.js.map +1 -0
- package/dist/sockethub-client.min.js +2 -0
- package/dist/sockethub-client.min.js.LICENSE.txt +24 -0
- package/dist/sockethub.js +67 -36
- package/dist/sockethub.js.map +1 -1
- package/package.json +40 -36
- package/src/bootstrap/init.ts +6 -2
- package/src/bootstrap/platforms.js +14 -18
- package/src/crypto.ts +3 -3
- package/src/janitor.ts +18 -10
- package/src/middleware/create-activity-object.ts +1 -2
- package/src/middleware/expand-activity-stream.test.data.ts +365 -0
- package/src/middleware/expand-activity-stream.test.ts +78 -0
- package/src/middleware/expand-activity-stream.ts +27 -0
- package/src/middleware/store-credentials.test.ts +12 -12
- package/src/middleware/store-credentials.ts +4 -4
- package/src/middleware/validate.test.data.ts +154 -120
- package/src/middleware/validate.test.ts +7 -10
- package/src/middleware/validate.ts +30 -123
- package/src/middleware.test.ts +59 -26
- package/src/middleware.ts +44 -76
- package/src/platform-instance.test.ts +8 -10
- package/src/platform-instance.ts +58 -57
- package/src/platform.ts +30 -14
- package/src/process-manager.ts +7 -4
- package/src/routes.ts +3 -6
- package/src/serve.ts +1 -1
- package/src/sockethub-client.test.ts +235 -0
- package/src/sockethub-client.ts +164 -0
- package/src/sockethub.ts +75 -68
- package/views/examples/dummy.ejs +6 -6
- package/views/examples/feeds.ejs +8 -8
- package/views/examples/irc.ejs +64 -58
- package/views/examples/shared.js +31 -29
- package/views/examples/xmpp.ejs +48 -57
- package/webpack.minified.config.js +14 -0
- package/webpack.normal.config.js +14 -0
- package/coverage/tmp/coverage-24546-1630615250805-0.json +0 -1
- package/dist/client/sockethub-client.js +0 -171
- package/dist/client/sockethub-client.js.map +0 -1
- package/src/client/sockethub-client.js +0 -178
- package/test/middleware-suite.js +0 -101
|
@@ -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
|
+
});
|