@constructor-io/constructorio-client-javascript 2.37.0 → 2.37.1
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/lib/constructorio.js +36 -60
- package/lib/modules/autocomplete.js +40 -55
- package/lib/modules/browse.js +86 -130
- package/lib/modules/quizzes.js +39 -60
- package/lib/modules/recommendations.js +38 -52
- package/lib/modules/search.js +66 -91
- package/lib/modules/tracker.js +430 -656
- package/lib/utils/botlist.js +1 -1
- package/lib/utils/event-dispatcher.js +14 -20
- package/lib/utils/events.js +29 -95
- package/lib/utils/helpers.js +7 -29
- package/lib/utils/humanity-check.js +10 -19
- package/lib/utils/request-queue.js +28 -48
- package/lib/utils/store.js +2 -3
- package/lib/utils/store.overflow.js +6 -27
- package/package.json +1 -1
package/lib/utils/botlist.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
/* eslint-disable no-useless-escape */
|
|
4
|
-
|
|
5
4
|
/* cspell:disable */
|
|
5
|
+
|
|
6
6
|
module.exports = ['Googlebot\/', 'Googlebot-Mobile', 'Googlebot-Image', 'Googlebot-News', 'Googlebot-Video', 'AdsBot-Google([^-]|$)', 'AdsBot-Google-Mobile', 'Feedfetcher-Google', 'Mediapartners-Google', 'Mediapartners \\(Googlebot\\)', 'APIs-Google', 'bingbot', 'Slurp', '[wW]get', 'curl', 'LinkedInBot', 'Python-urllib', 'python-requests', 'libwww', 'httpunit', 'nutch', 'Go-http-client', 'phpcrawl', 'msnbot', 'jyxobot', 'FAST-WebCrawler', 'FAST Enterprise Crawler', 'BIGLOTRON', 'Teoma', 'convera', 'seekbot', 'Gigabot', 'Gigablast', 'exabot', 'ia_archiver', 'GingerCrawler', 'webmon ', 'HTTrack', 'grub\\.org', 'UsineNouvelleCrawler', 'antibot', 'netresearchserver', 'speedy', 'fluffy', 'bibnum\\.bnf', 'findlink', 'msrbot', 'panscient', 'yacybot', 'AISearchBot', 'ips-agent', 'tagoobot', 'MJ12bot', 'woriobot', 'yanga', 'buzzbot', 'mlbot', 'YandexBot', 'yandex\\.com\/bots', 'purebot', 'Linguee Bot', 'CyberPatrol', 'voilabot', 'Baiduspider', 'citeseerxbot', 'spbot', 'twengabot', 'postrank', 'turnitinbot', 'scribdbot', 'page2rss', 'sitebot', 'linkdex', 'Adidxbot', 'blekkobot', 'ezooms', 'dotbot', 'Mail\\.RU_Bot', 'discobot', 'heritrix', 'findthatfile', 'europarchive\\.org', 'NerdByNature\\.Bot', 'sistrix crawler', 'Ahrefs(Bot|SiteAudit)', 'fuelbot', 'CrunchBot', 'centurybot9', 'IndeedBot', 'mappydata', 'woobot', 'ZoominfoBot', 'PrivacyAwareBot', 'Multiviewbot', 'SWIMGBot', 'Grobbot', 'eright', 'Apercite', 'semanticbot', 'Aboundex', 'domaincrawler', 'wbsearchbot', 'summify', 'CCBot', 'edisterbot', 'seznambot', 'ec2linkfinder', 'gslfbot', 'aiHitBot', 'intelium_bot', 'facebookexternalhit', 'Yeti', 'RetrevoPageAnalyzer', 'lb-spider', 'Sogou', 'lssbot', 'careerbot', 'wotbox', 'wocbot', 'ichiro', 'DuckDuckBot', 'lssrocketcrawler', 'drupact', 'webcompanycrawler', 'acoonbot', 'openindexspider', 'gnam gnam spider', 'web-archive-net\\.com\\.bot', 'backlinkcrawler', 'coccoc', 'integromedb', 'content crawler spider', 'toplistbot', 'it2media-domain-crawler', 'ip-web-crawler\\.com', 'siteexplorer\\.info', 'elisabot', 'proximic', 'changedetection', 'arabot', 'WeSEE:Search', 'niki-bot', 'CrystalSemanticsBot', 'rogerbot', '360Spider', 'psbot', 'InterfaxScanBot', 'CC Metadata Scaper', 'g00g1e\\.net', 'GrapeshotCrawler', 'urlappendbot', 'brainobot', 'fr-crawler', 'binlar', 'SimpleCrawler', 'Twitterbot', 'cXensebot', 'smtbot', 'bnf\\.fr_bot', 'A6-Indexer', 'ADmantX', 'Facebot', 'OrangeBot\/', 'memorybot', 'AdvBot', 'MegaIndex', 'SemanticScholarBot', 'ltx71', 'nerdybot', 'xovibot', 'BUbiNG', 'Qwantify', 'archive\\.org_bot', 'Applebot', 'TweetmemeBot', 'crawler4j', 'findxbot', 'S[eE][mM]rushBot', 'yoozBot', 'lipperhey', 'Y!J', 'Domain Re-Animator Bot', 'AddThis', 'Screaming Frog SEO Spider', 'MetaURI', 'Scrapy', 'Livelap[bB]ot', 'OpenHoseBot', 'CapsuleChecker', 'collection@infegy\\.com', 'IstellaBot', 'DeuSu\/', 'betaBot', 'Cliqzbot\/', 'MojeekBot\/', 'netEstate NE Crawler', 'SafeSearch microdata crawler', 'Gluten Free Crawler\/', 'Sonic', 'Sysomos', 'Trove', 'deadlinkchecker', 'Slack-ImgProxy', 'Embedly', 'RankActiveLinkBot', 'iskanie', 'SafeDNSBot', 'SkypeUriPreview', 'Veoozbot', 'Slackbot', 'redditbot', 'datagnionbot', 'Google-Adwords-Instant', 'adbeat_bot', 'WhatsApp', 'contxbot', 'pinterest', 'electricmonk', 'GarlikCrawler', 'BingPreview\/', 'vebidoobot', 'FemtosearchBot', 'Yahoo Link Preview', 'MetaJobBot', 'DomainStatsBot', 'mindUpBot', 'Daum\/', 'Jugendschutzprogramm-Crawler', 'Xenu Link Sleuth', 'Pcore-HTTP', 'moatbot', 'KosmioBot', 'pingdom', 'PhantomJS', 'Gowikibot', 'PiplBot', 'Discordbot', 'TelegramBot', 'Jetslide', 'newsharecounts', 'James BOT', 'Barkrowler', 'TinEye', 'SocialRankIOBot', 'trendictionbot', 'Ocarinabot', 'epicbot', 'Primalbot', 'DuckDuckGo-Favicons-Bot', 'GnowitNewsbot', 'Leikibot', 'LinkArchiver', 'YaK\/', 'PaperLiBot', 'Digg Deeper', 'dcrawl', 'Snacktory', 'AndersPinkBot', 'Fyrebot', 'EveryoneSocialBot', 'Mediatoolkitbot', 'Luminator-robots', 'ExtLinksBot', 'SurveyBot', 'NING\/', 'okhttp', 'Nuzzel', 'omgili', 'PocketParser', 'YisouSpider', 'um-LN', 'ToutiaoSpider', 'MuckRack', "Jamie's Spider", 'AHC\/', 'NetcraftSurveyAgent', 'Laserlikebot', 'Apache-HttpClient', 'AppEngine-Google', 'Jetty', 'Upflow', 'Thinklab', 'Traackr\\.com', 'Twurly', 'Mastodon', 'http_get', 'DnyzBot', 'botify', '007ac9 Crawler', 'BehloolBot', 'BrandVerity', 'check_http', 'BDCbot', 'ZumBot', 'EZID', 'ICC-Crawler', 'ArchiveBot', '^LCC ', 'filterdb\\.iss\\.net\/crawler', 'BLP_bbot', 'BomboraBot', 'Buck\/', 'Companybook-Crawler', 'Genieo', 'magpie-crawler', 'MeltwaterNews', 'Moreover', 'newspaper\/', 'ScoutJet', '(^| )sentry\/', 'StorygizeBot', 'UptimeRobot', 'OutclicksBot', 'seoscanners', 'Hatena', 'Google Web Preview', 'MauiBot', 'AlphaBot', 'SBL-BOT', 'IAS crawler', 'adscanner', 'Netvibes', 'acapbot', 'Baidu-YunGuanCe', 'bitlybot', 'blogmuraBot', 'Bot\\.AraTurka\\.com', 'bot-pge\\.chlooe\\.com', 'BoxcarBot', 'BTWebClient', 'ContextAd Bot', 'Digincore bot', 'Disqus', 'Feedly', 'Fetch\/', 'Fever', 'Flamingo_SearchEngine', 'FlipboardProxy', 'g2reader-bot', 'imrbot', 'K7MLWCBot', 'Kemvibot', 'Landau-Media-Spider', 'linkapediabot', 'vkShare', 'Siteimprove\\.com', 'BLEXBot\/', 'DareBoost', 'ZuperlistBot\/', 'Miniflux\/', 'Feedspotbot\/', 'Diffbot\/', 'SEOkicks', 'tracemyfile', 'Nimbostratus-Bot', 'Bytespider'];
|
|
@@ -1,54 +1,49 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
6
|
-
|
|
7
5
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
8
|
-
|
|
9
6
|
/* eslint-disable no-unneeded-ternary */
|
|
10
7
|
var helpers = require('./helpers');
|
|
11
|
-
|
|
12
8
|
var EventDispatcher = /*#__PURE__*/function () {
|
|
13
9
|
function EventDispatcher(options) {
|
|
14
10
|
var _this = this;
|
|
15
|
-
|
|
16
11
|
(0, _classCallCheck2["default"])(this, EventDispatcher);
|
|
17
12
|
this.events = [];
|
|
18
13
|
this.enabled = options && options.enabled === false ? false : true; // Defaults to 'true'
|
|
19
|
-
|
|
20
14
|
this.waitForBeacon = options && options.waitForBeacon === false ? false : true; // Defaults to 'true'
|
|
15
|
+
|
|
21
16
|
// `enabled` is a supplied option
|
|
22
17
|
// - if false, events will never be dispatched
|
|
23
18
|
// `active` is a variable determining if events will be dispatched
|
|
24
19
|
// - if `waitForBeacon` is set to true, `active` will be false until beacon event is received
|
|
20
|
+
this.active = this.enabled;
|
|
25
21
|
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
// If `waitForBeacon` option is set, only enable event dispatching once event is received from beacon
|
|
28
23
|
if (this.waitForBeacon) {
|
|
29
|
-
this.active = false;
|
|
30
|
-
// - Important for the case where the beacon has loaded before client library instantiated
|
|
24
|
+
this.active = false;
|
|
31
25
|
|
|
26
|
+
// Check browser environment to determine if beacon has been loaded
|
|
27
|
+
// - Important for the case where the beacon has loaded before client library instantiated
|
|
32
28
|
if (helpers.canUseDOM() && (window.ConstructorioAutocomplete || window.ConstructorioBeacon || window.ConstructorioTracker)) {
|
|
33
29
|
if (this.enabled) {
|
|
34
30
|
this.active = true;
|
|
35
31
|
this.dispatchEvents();
|
|
36
32
|
}
|
|
37
|
-
}
|
|
38
|
-
// - Important for the case where client library instantiated before beacon has loaded
|
|
39
|
-
|
|
33
|
+
}
|
|
40
34
|
|
|
35
|
+
// Bind listener to beacon loaded event
|
|
36
|
+
// - Important for the case where client library instantiated before beacon has loaded
|
|
41
37
|
helpers.addEventListener('cio.beacon.loaded', function () {
|
|
42
38
|
if (_this.enabled) {
|
|
43
39
|
_this.active = true;
|
|
44
|
-
|
|
45
40
|
_this.dispatchEvents();
|
|
46
41
|
}
|
|
47
42
|
});
|
|
48
43
|
}
|
|
49
|
-
}
|
|
50
|
-
|
|
44
|
+
}
|
|
51
45
|
|
|
46
|
+
// Push event data to queue
|
|
52
47
|
(0, _createClass2["default"])(EventDispatcher, [{
|
|
53
48
|
key: "queue",
|
|
54
49
|
value: function queue(name, data) {
|
|
@@ -56,19 +51,19 @@ var EventDispatcher = /*#__PURE__*/function () {
|
|
|
56
51
|
name: name,
|
|
57
52
|
data: data
|
|
58
53
|
});
|
|
59
|
-
|
|
60
54
|
if (this.active) {
|
|
61
55
|
this.dispatchEvents();
|
|
62
56
|
}
|
|
63
|
-
}
|
|
57
|
+
}
|
|
64
58
|
|
|
59
|
+
// Dispatch all custom events within queue on `window` of supplied name with data
|
|
65
60
|
}, {
|
|
66
61
|
key: "dispatchEvents",
|
|
67
62
|
value: function dispatchEvents() {
|
|
68
63
|
while (this.events.length) {
|
|
69
64
|
var item = this.events.shift();
|
|
70
65
|
var name = item.name,
|
|
71
|
-
|
|
66
|
+
data = item.data;
|
|
72
67
|
var eventName = "cio.client.".concat(name);
|
|
73
68
|
helpers.dispatchEvent(helpers.createCustomEvent(eventName, data));
|
|
74
69
|
}
|
|
@@ -76,5 +71,4 @@ var EventDispatcher = /*#__PURE__*/function () {
|
|
|
76
71
|
}]);
|
|
77
72
|
return EventDispatcher;
|
|
78
73
|
}();
|
|
79
|
-
|
|
80
74
|
module.exports = EventDispatcher;
|
package/lib/utils/events.js
CHANGED
|
@@ -18,21 +18,20 @@
|
|
|
18
18
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
19
19
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
20
20
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
21
|
+
|
|
21
22
|
// Version 3.3.0
|
|
22
23
|
|
|
23
24
|
/* eslint-disable */
|
|
25
|
+
|
|
24
26
|
'use strict';
|
|
25
27
|
|
|
26
28
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
27
|
-
|
|
28
29
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
29
|
-
|
|
30
30
|
var R = (typeof Reflect === "undefined" ? "undefined" : (0, _typeof2["default"])(Reflect)) === 'object' ? Reflect : null;
|
|
31
31
|
var ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) {
|
|
32
32
|
return Function.prototype.apply.call(target, receiver, args);
|
|
33
33
|
};
|
|
34
34
|
var ReflectOwnKeys;
|
|
35
|
-
|
|
36
35
|
if (R && typeof R.ownKeys === 'function') {
|
|
37
36
|
ReflectOwnKeys = R.ownKeys;
|
|
38
37
|
} else if (Object.getOwnPropertySymbols) {
|
|
@@ -44,36 +43,32 @@ if (R && typeof R.ownKeys === 'function') {
|
|
|
44
43
|
return Object.getOwnPropertyNames(target);
|
|
45
44
|
};
|
|
46
45
|
}
|
|
47
|
-
|
|
48
46
|
function ProcessEmitWarning(warning) {
|
|
49
47
|
if (console && console.warn) console.warn(warning);
|
|
50
48
|
}
|
|
51
|
-
|
|
52
49
|
var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {
|
|
53
50
|
return value !== value;
|
|
54
51
|
};
|
|
55
|
-
|
|
56
52
|
function EventEmitter() {
|
|
57
53
|
EventEmitter.init.call(this);
|
|
58
54
|
}
|
|
59
|
-
|
|
60
55
|
module.exports = EventEmitter;
|
|
61
|
-
module.exports.once = once;
|
|
56
|
+
module.exports.once = once;
|
|
62
57
|
|
|
58
|
+
// Backwards-compat with node 0.10.x
|
|
63
59
|
EventEmitter.EventEmitter = EventEmitter;
|
|
64
60
|
EventEmitter.prototype._events = undefined;
|
|
65
61
|
EventEmitter.prototype._eventsCount = 0;
|
|
66
|
-
EventEmitter.prototype._maxListeners = undefined;
|
|
67
|
-
// added to it. This is a useful default which helps finding memory leaks.
|
|
62
|
+
EventEmitter.prototype._maxListeners = undefined;
|
|
68
63
|
|
|
64
|
+
// By default EventEmitters will print a warning if more than 10 listeners are
|
|
65
|
+
// added to it. This is a useful default which helps finding memory leaks.
|
|
69
66
|
var defaultMaxListeners = 10;
|
|
70
|
-
|
|
71
67
|
function checkListener(listener) {
|
|
72
68
|
if (typeof listener !== 'function') {
|
|
73
69
|
throw new TypeError('The "listener" argument must be of type Function. Received type ' + (0, _typeof2["default"])(listener));
|
|
74
70
|
}
|
|
75
71
|
}
|
|
76
|
-
|
|
77
72
|
Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
|
|
78
73
|
enumerable: true,
|
|
79
74
|
get: function get() {
|
|
@@ -83,62 +78,52 @@ Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
|
|
|
83
78
|
if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {
|
|
84
79
|
throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.');
|
|
85
80
|
}
|
|
86
|
-
|
|
87
81
|
defaultMaxListeners = arg;
|
|
88
82
|
}
|
|
89
83
|
});
|
|
90
|
-
|
|
91
84
|
EventEmitter.init = function () {
|
|
92
85
|
if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) {
|
|
93
86
|
this._events = Object.create(null);
|
|
94
87
|
this._eventsCount = 0;
|
|
95
88
|
}
|
|
96
|
-
|
|
97
89
|
this._maxListeners = this._maxListeners || undefined;
|
|
98
|
-
};
|
|
99
|
-
// that to be increased. Set to zero for unlimited.
|
|
100
|
-
|
|
90
|
+
};
|
|
101
91
|
|
|
92
|
+
// Obviously not all Emitters should be limited to 10. This function allows
|
|
93
|
+
// that to be increased. Set to zero for unlimited.
|
|
102
94
|
EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
|
|
103
95
|
if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {
|
|
104
96
|
throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.');
|
|
105
97
|
}
|
|
106
|
-
|
|
107
98
|
this._maxListeners = n;
|
|
108
99
|
return this;
|
|
109
100
|
};
|
|
110
|
-
|
|
111
101
|
function _getMaxListeners(that) {
|
|
112
102
|
if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners;
|
|
113
103
|
return that._maxListeners;
|
|
114
104
|
}
|
|
115
|
-
|
|
116
105
|
EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
|
|
117
106
|
return _getMaxListeners(this);
|
|
118
107
|
};
|
|
119
|
-
|
|
120
108
|
EventEmitter.prototype.emit = function emit(type) {
|
|
121
109
|
var args = [];
|
|
122
|
-
|
|
123
110
|
for (var i = 1; i < arguments.length; i++) {
|
|
124
111
|
args.push(arguments[i]);
|
|
125
112
|
}
|
|
126
|
-
|
|
127
113
|
var doError = type === 'error';
|
|
128
114
|
var events = this._events;
|
|
129
|
-
if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false;
|
|
115
|
+
if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false;
|
|
130
116
|
|
|
117
|
+
// If there is no 'error' event listener then throw.
|
|
131
118
|
if (doError) {
|
|
132
119
|
var er;
|
|
133
120
|
if (args.length > 0) er = args[0];
|
|
134
|
-
|
|
135
121
|
if (er instanceof Error) {
|
|
136
122
|
// Note: The comments on the `throw` lines are intentional, they show
|
|
137
123
|
// up in Node's output if this results in an unhandled exception.
|
|
138
124
|
throw er; // Unhandled 'error' event
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
|
|
125
|
+
}
|
|
126
|
+
// At least give some kind of context to the user
|
|
142
127
|
var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));
|
|
143
128
|
err.context = er;
|
|
144
129
|
throw err; // Unhandled 'error' event
|
|
@@ -146,28 +131,23 @@ EventEmitter.prototype.emit = function emit(type) {
|
|
|
146
131
|
|
|
147
132
|
var handler = events[type];
|
|
148
133
|
if (handler === undefined) return false;
|
|
149
|
-
|
|
150
134
|
if (typeof handler === 'function') {
|
|
151
135
|
ReflectApply(handler, this, args);
|
|
152
136
|
} else {
|
|
153
137
|
var len = handler.length;
|
|
154
138
|
var listeners = arrayClone(handler, len);
|
|
155
|
-
|
|
156
139
|
for (var i = 0; i < len; ++i) {
|
|
157
140
|
ReflectApply(listeners[i], this, args);
|
|
158
141
|
}
|
|
159
142
|
}
|
|
160
|
-
|
|
161
143
|
return true;
|
|
162
144
|
};
|
|
163
|
-
|
|
164
145
|
function _addListener(target, type, listener, prepend) {
|
|
165
146
|
var m;
|
|
166
147
|
var events;
|
|
167
148
|
var existing;
|
|
168
149
|
checkListener(listener);
|
|
169
150
|
events = target._events;
|
|
170
|
-
|
|
171
151
|
if (events === undefined) {
|
|
172
152
|
events = target._events = Object.create(null);
|
|
173
153
|
target._eventsCount = 0;
|
|
@@ -175,15 +155,14 @@ function _addListener(target, type, listener, prepend) {
|
|
|
175
155
|
// To avoid recursion in the case that type === "newListener"! Before
|
|
176
156
|
// adding it to the listeners, first emit "newListener".
|
|
177
157
|
if (events.newListener !== undefined) {
|
|
178
|
-
target.emit('newListener', type, listener.listener ? listener.listener : listener);
|
|
179
|
-
// this._events to be assigned to a new object
|
|
158
|
+
target.emit('newListener', type, listener.listener ? listener.listener : listener);
|
|
180
159
|
|
|
160
|
+
// Re-assign `events` because a newListener handler could have caused the
|
|
161
|
+
// this._events to be assigned to a new object
|
|
181
162
|
events = target._events;
|
|
182
163
|
}
|
|
183
|
-
|
|
184
164
|
existing = events[type];
|
|
185
165
|
}
|
|
186
|
-
|
|
187
166
|
if (existing === undefined) {
|
|
188
167
|
// Optimize the case of one listener. Don't need the extra array object.
|
|
189
168
|
existing = events[type] = listener;
|
|
@@ -191,20 +170,20 @@ function _addListener(target, type, listener, prepend) {
|
|
|
191
170
|
} else {
|
|
192
171
|
if (typeof existing === 'function') {
|
|
193
172
|
// Adding the second element, need to change to array.
|
|
194
|
-
existing = events[type] = prepend ? [listener, existing] : [existing, listener];
|
|
173
|
+
existing = events[type] = prepend ? [listener, existing] : [existing, listener];
|
|
174
|
+
// If we've already got an array, just append.
|
|
195
175
|
} else if (prepend) {
|
|
196
176
|
existing.unshift(listener);
|
|
197
177
|
} else {
|
|
198
178
|
existing.push(listener);
|
|
199
|
-
}
|
|
200
|
-
|
|
179
|
+
}
|
|
201
180
|
|
|
181
|
+
// Check for listener leak
|
|
202
182
|
m = _getMaxListeners(target);
|
|
203
|
-
|
|
204
183
|
if (m > 0 && existing.length > m && !existing.warned) {
|
|
205
|
-
existing.warned = true;
|
|
184
|
+
existing.warned = true;
|
|
185
|
+
// No error code for this since it is a Warning
|
|
206
186
|
// eslint-disable-next-line no-restricted-syntax
|
|
207
|
-
|
|
208
187
|
var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit');
|
|
209
188
|
w.name = 'MaxListenersExceededWarning';
|
|
210
189
|
w.emitter = target;
|
|
@@ -213,20 +192,15 @@ function _addListener(target, type, listener, prepend) {
|
|
|
213
192
|
ProcessEmitWarning(w);
|
|
214
193
|
}
|
|
215
194
|
}
|
|
216
|
-
|
|
217
195
|
return target;
|
|
218
196
|
}
|
|
219
|
-
|
|
220
197
|
EventEmitter.prototype.addListener = function addListener(type, listener) {
|
|
221
198
|
return _addListener(this, type, listener, false);
|
|
222
199
|
};
|
|
223
|
-
|
|
224
200
|
EventEmitter.prototype.on = EventEmitter.prototype.addListener;
|
|
225
|
-
|
|
226
201
|
EventEmitter.prototype.prependListener = function prependListener(type, listener) {
|
|
227
202
|
return _addListener(this, type, listener, true);
|
|
228
203
|
};
|
|
229
|
-
|
|
230
204
|
function onceWrapper() {
|
|
231
205
|
if (!this.fired) {
|
|
232
206
|
this.target.removeListener(this.type, this.wrapFn);
|
|
@@ -235,7 +209,6 @@ function onceWrapper() {
|
|
|
235
209
|
return this.listener.apply(this.target, arguments);
|
|
236
210
|
}
|
|
237
211
|
}
|
|
238
|
-
|
|
239
212
|
function _onceWrap(target, type, listener) {
|
|
240
213
|
var state = {
|
|
241
214
|
fired: false,
|
|
@@ -249,20 +222,18 @@ function _onceWrap(target, type, listener) {
|
|
|
249
222
|
state.wrapFn = wrapped;
|
|
250
223
|
return wrapped;
|
|
251
224
|
}
|
|
252
|
-
|
|
253
225
|
EventEmitter.prototype.once = function once(type, listener) {
|
|
254
226
|
checkListener(listener);
|
|
255
227
|
this.on(type, _onceWrap(this, type, listener));
|
|
256
228
|
return this;
|
|
257
229
|
};
|
|
258
|
-
|
|
259
230
|
EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {
|
|
260
231
|
checkListener(listener);
|
|
261
232
|
this.prependListener(type, _onceWrap(this, type, listener));
|
|
262
233
|
return this;
|
|
263
|
-
};
|
|
264
|
-
|
|
234
|
+
};
|
|
265
235
|
|
|
236
|
+
// Emits a 'removeListener' event if and only if the listener was removed.
|
|
266
237
|
EventEmitter.prototype.removeListener = function removeListener(type, listener) {
|
|
267
238
|
var list, events, position, i, originalListener;
|
|
268
239
|
checkListener(listener);
|
|
@@ -270,7 +241,6 @@ EventEmitter.prototype.removeListener = function removeListener(type, listener)
|
|
|
270
241
|
if (events === undefined) return this;
|
|
271
242
|
list = events[type];
|
|
272
243
|
if (list === undefined) return this;
|
|
273
|
-
|
|
274
244
|
if (list === listener || list.listener === listener) {
|
|
275
245
|
if (--this._eventsCount === 0) this._events = Object.create(null);else {
|
|
276
246
|
delete events[type];
|
|
@@ -278,7 +248,6 @@ EventEmitter.prototype.removeListener = function removeListener(type, listener)
|
|
|
278
248
|
}
|
|
279
249
|
} else if (typeof list !== 'function') {
|
|
280
250
|
position = -1;
|
|
281
|
-
|
|
282
251
|
for (i = list.length - 1; i >= 0; i--) {
|
|
283
252
|
if (list[i] === listener || list[i].listener === listener) {
|
|
284
253
|
originalListener = list[i].listener;
|
|
@@ -286,7 +255,6 @@ EventEmitter.prototype.removeListener = function removeListener(type, listener)
|
|
|
286
255
|
break;
|
|
287
256
|
}
|
|
288
257
|
}
|
|
289
|
-
|
|
290
258
|
if (position < 0) return this;
|
|
291
259
|
if (position === 0) list.shift();else {
|
|
292
260
|
spliceOne(list, position);
|
|
@@ -294,17 +262,15 @@ EventEmitter.prototype.removeListener = function removeListener(type, listener)
|
|
|
294
262
|
if (list.length === 1) events[type] = list[0];
|
|
295
263
|
if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener);
|
|
296
264
|
}
|
|
297
|
-
|
|
298
265
|
return this;
|
|
299
266
|
};
|
|
300
|
-
|
|
301
267
|
EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
|
|
302
|
-
|
|
303
268
|
EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {
|
|
304
269
|
var listeners, events, i;
|
|
305
270
|
events = this._events;
|
|
306
|
-
if (events === undefined) return this;
|
|
271
|
+
if (events === undefined) return this;
|
|
307
272
|
|
|
273
|
+
// not listening for removeListener, no need to emit
|
|
308
274
|
if (events.removeListener === undefined) {
|
|
309
275
|
if (arguments.length === 0) {
|
|
310
276
|
this._events = Object.create(null);
|
|
@@ -312,29 +278,24 @@ EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {
|
|
|
312
278
|
} else if (events[type] !== undefined) {
|
|
313
279
|
if (--this._eventsCount === 0) this._events = Object.create(null);else delete events[type];
|
|
314
280
|
}
|
|
315
|
-
|
|
316
281
|
return this;
|
|
317
|
-
}
|
|
318
|
-
|
|
282
|
+
}
|
|
319
283
|
|
|
284
|
+
// emit removeListener for all listeners on all events
|
|
320
285
|
if (arguments.length === 0) {
|
|
321
286
|
var keys = Object.keys(events);
|
|
322
287
|
var key;
|
|
323
|
-
|
|
324
288
|
for (i = 0; i < keys.length; ++i) {
|
|
325
289
|
key = keys[i];
|
|
326
290
|
if (key === 'removeListener') continue;
|
|
327
291
|
this.removeAllListeners(key);
|
|
328
292
|
}
|
|
329
|
-
|
|
330
293
|
this.removeAllListeners('removeListener');
|
|
331
294
|
this._events = Object.create(null);
|
|
332
295
|
this._eventsCount = 0;
|
|
333
296
|
return this;
|
|
334
297
|
}
|
|
335
|
-
|
|
336
298
|
listeners = events[type];
|
|
337
|
-
|
|
338
299
|
if (typeof listeners === 'function') {
|
|
339
300
|
this.removeListener(type, listeners);
|
|
340
301
|
} else if (listeners !== undefined) {
|
|
@@ -343,10 +304,8 @@ EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {
|
|
|
343
304
|
this.removeListener(type, listeners[i]);
|
|
344
305
|
}
|
|
345
306
|
}
|
|
346
|
-
|
|
347
307
|
return this;
|
|
348
308
|
};
|
|
349
|
-
|
|
350
309
|
function _listeners(target, type, unwrap) {
|
|
351
310
|
var events = target._events;
|
|
352
311
|
if (events === undefined) return [];
|
|
@@ -355,15 +314,12 @@ function _listeners(target, type, unwrap) {
|
|
|
355
314
|
if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener];
|
|
356
315
|
return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
|
|
357
316
|
}
|
|
358
|
-
|
|
359
317
|
EventEmitter.prototype.listeners = function listeners(type) {
|
|
360
318
|
return _listeners(this, type, true);
|
|
361
319
|
};
|
|
362
|
-
|
|
363
320
|
EventEmitter.prototype.rawListeners = function rawListeners(type) {
|
|
364
321
|
return _listeners(this, type, false);
|
|
365
322
|
};
|
|
366
|
-
|
|
367
323
|
EventEmitter.listenerCount = function (emitter, type) {
|
|
368
324
|
if (typeof emitter.listenerCount === 'function') {
|
|
369
325
|
return emitter.listenerCount(type);
|
|
@@ -371,77 +327,58 @@ EventEmitter.listenerCount = function (emitter, type) {
|
|
|
371
327
|
return listenerCount.call(emitter, type);
|
|
372
328
|
}
|
|
373
329
|
};
|
|
374
|
-
|
|
375
330
|
EventEmitter.prototype.listenerCount = listenerCount;
|
|
376
|
-
|
|
377
331
|
function listenerCount(type) {
|
|
378
332
|
var events = this._events;
|
|
379
|
-
|
|
380
333
|
if (events !== undefined) {
|
|
381
334
|
var evlistener = events[type];
|
|
382
|
-
|
|
383
335
|
if (typeof evlistener === 'function') {
|
|
384
336
|
return 1;
|
|
385
337
|
} else if (evlistener !== undefined) {
|
|
386
338
|
return evlistener.length;
|
|
387
339
|
}
|
|
388
340
|
}
|
|
389
|
-
|
|
390
341
|
return 0;
|
|
391
342
|
}
|
|
392
|
-
|
|
393
343
|
EventEmitter.prototype.eventNames = function eventNames() {
|
|
394
344
|
return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
|
|
395
345
|
};
|
|
396
|
-
|
|
397
346
|
function arrayClone(arr, n) {
|
|
398
347
|
var copy = new Array(n);
|
|
399
|
-
|
|
400
348
|
for (var i = 0; i < n; ++i) {
|
|
401
349
|
copy[i] = arr[i];
|
|
402
350
|
}
|
|
403
|
-
|
|
404
351
|
return copy;
|
|
405
352
|
}
|
|
406
|
-
|
|
407
353
|
function spliceOne(list, index) {
|
|
408
354
|
for (; index + 1 < list.length; index++) {
|
|
409
355
|
list[index] = list[index + 1];
|
|
410
356
|
}
|
|
411
|
-
|
|
412
357
|
list.pop();
|
|
413
358
|
}
|
|
414
|
-
|
|
415
359
|
function unwrapListeners(arr) {
|
|
416
360
|
var ret = new Array(arr.length);
|
|
417
|
-
|
|
418
361
|
for (var i = 0; i < ret.length; ++i) {
|
|
419
362
|
ret[i] = arr[i].listener || arr[i];
|
|
420
363
|
}
|
|
421
|
-
|
|
422
364
|
return ret;
|
|
423
365
|
}
|
|
424
|
-
|
|
425
366
|
function once(emitter, name) {
|
|
426
367
|
return new Promise(function (resolve, reject) {
|
|
427
368
|
function errorListener(err) {
|
|
428
369
|
emitter.removeListener(name, resolver);
|
|
429
370
|
reject(err);
|
|
430
371
|
}
|
|
431
|
-
|
|
432
372
|
function resolver() {
|
|
433
373
|
if (typeof emitter.removeListener === 'function') {
|
|
434
374
|
emitter.removeListener('error', errorListener);
|
|
435
375
|
}
|
|
436
|
-
|
|
437
376
|
resolve([].slice.call(arguments));
|
|
438
377
|
}
|
|
439
|
-
|
|
440
378
|
;
|
|
441
379
|
eventTargetAgnosticAddListener(emitter, name, resolver, {
|
|
442
380
|
once: true
|
|
443
381
|
});
|
|
444
|
-
|
|
445
382
|
if (name !== 'error') {
|
|
446
383
|
addErrorHandlerIfEventEmitter(emitter, errorListener, {
|
|
447
384
|
once: true
|
|
@@ -449,13 +386,11 @@ function once(emitter, name) {
|
|
|
449
386
|
}
|
|
450
387
|
});
|
|
451
388
|
}
|
|
452
|
-
|
|
453
389
|
function addErrorHandlerIfEventEmitter(emitter, handler, flags) {
|
|
454
390
|
if (typeof emitter.on === 'function') {
|
|
455
391
|
eventTargetAgnosticAddListener(emitter, 'error', handler, flags);
|
|
456
392
|
}
|
|
457
393
|
}
|
|
458
|
-
|
|
459
394
|
function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
|
|
460
395
|
if (typeof emitter.on === 'function') {
|
|
461
396
|
if (flags.once) {
|
|
@@ -472,7 +407,6 @@ function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
|
|
|
472
407
|
if (flags.once) {
|
|
473
408
|
emitter.removeEventListener(name, wrapListener);
|
|
474
409
|
}
|
|
475
|
-
|
|
476
410
|
listener(arg);
|
|
477
411
|
});
|
|
478
412
|
} else {
|