New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

hook-emitter

Package Overview
Dependencies
Maintainers
1
Versions
25
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

hook-emitter - npm Package Compare versions

Comparing version 3.1.2 to 4.0.0

23

dist/index.js

@@ -8,6 +8,2 @@ "use strict";

var _snooplogg = _interopRequireDefault(require("snooplogg"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/* istanbul ignore if */

@@ -17,6 +13,2 @@ if (!Error.prepareStackTrace) {

}
const {
log
} = (0, _snooplogg.default)('hook-emitter');
/**

@@ -26,2 +18,3 @@ * Emits events and hooks to synchronous and asynchronous listeners.

class HookEmitter {

@@ -269,5 +262,4 @@ /**

listeners.push(callback);
}
} // start the chain and return its promise
log(`running chain with ${listeners.length} listeners`); // start the chain and return its promise

@@ -283,3 +275,2 @@ return dispatch({

if (!listener) {
log('end of the line');
return Promise.resolve(payload);

@@ -293,3 +284,2 @@ }

if (fired) {
log('next() already fired');
return;

@@ -302,7 +292,5 @@ }

return dispatch(result || payload, i + 1).then(result => result || payload).catch(reject);
}];
log(`calling listener ${i}`); // call the listener
}]; // call the listener
let result = listener.apply(ctx, args);
log('listener returned:', result);

@@ -384,9 +372,6 @@ if (result === undefined && fired) {

};
log(`creating chain: ${event}`);
const chain = this.compose({
type: event,
callback: async function (...args) {
log('firing callback...');
this.result = await this.fn.apply(this.ctx, this.args);
log('callback result =', this.result);
return this;

@@ -452,2 +437,2 @@ },

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbIkVycm9yIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJyZXF1aXJlIiwibG9nIiwiSG9va0VtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsIl9ldmVudHMiLCJNYXAiLCJfbGlua3MiLCJldmVudHMiLCJvbiIsImV2ZW50IiwicHJpb3JpdHkiLCJsaXN0ZW5lciIsIlR5cGVFcnJvciIsInNwbGl0IiwiZXZ0Iiwic2hpZnQiLCJsaXN0ZW5lcnMiLCJnZXQiLCJzZXQiLCJwdXNoIiwib25jZSIsIndyYXBwZXIiLCJvZmYiLCJhcHBseSIsImFyZ3VtZW50cyIsImJpbmQiLCJkZWxldGUiLCJsZW4iLCJsZW5ndGgiLCJpIiwic3BsaWNlIiwiY29tcG9zZSIsInR5cGUiLCJjYWxsYmFjayIsInRyYW5zZm9ybSIsInJlc3VsdCIsInBheWxvYWQiLCJhcmdzIiwiZ2V0TGlzdGVuZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwibGlua2VkTGlzdGVuZXJzIiwibWFwIiwibGluayIsImVtaXR0ZXIiLCJwcmVmaXgiLCJjb25jYXQiLCJzb3J0IiwiYSIsImIiLCJwIiwiY3R4IiwiZGlzcGF0Y2giLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZpcmVkIiwibmV4dCIsInRoZW4iLCJjYXRjaCIsInVuZGVmaW5lZCIsImVtaXQiLCJob29rIiwiZm4iLCJkYXRhIiwiY2hhaW4iLCJ1bmxpbmsiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFLQTs7OztBQUxBO0FBQ0EsSUFBSSxDQUFDQSxLQUFLLENBQUNDLGlCQUFYLEVBQThCO0FBQzdCQyxFQUFBQSxPQUFPLENBQUMsNkJBQUQsQ0FBUDtBQUNBOztBQUlELE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFVLHdCQUFVLGNBQVYsQ0FBaEI7QUFFQTs7OztBQUdBLE1BQU1DLFdBQU4sQ0FBa0I7QUFDakI7Ozs7O0FBS0FDLEVBQUFBLFdBQVcsR0FBRztBQUNiLFNBQUtDLE9BQUwsR0FBZSxJQUFJQyxHQUFK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dCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmICghRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcblx0cmVxdWlyZSgnc291cmNlLW1hcC1zdXBwb3J0L3JlZ2lzdGVyJyk7XG59XG5cbmltcG9ydCBzbm9vcGxvZ2cgZnJvbSAnc25vb3Bsb2dnJztcblxuY29uc3QgeyBsb2cgfSA9IHNub29wbG9nZygnaG9vay1lbWl0dGVyJyk7XG5cbi8qKlxuICogRW1pdHMgZXZlbnRzIGFuZCBob29rcyB0byBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIGxpc3RlbmVycy5cbiAqL1xuY2xhc3MgSG9va0VtaXR0ZXIge1xuXHQvKipcblx0ICogQ29uc3RydWN0cyBhbiBIb29rRW1pdHRlciBvYmplY3QuXG5cdCAqXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLl9ldmVudHMgPSBuZXcgTWFwKCk7XG5cdFx0dGhpcy5fbGlua3MgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbiBpdGVyYXRvciBmb3IgcmV0dXJuaW5nIGFsbCBldmVudHMuXG5cdCAqIEB0eXBlIHtJdGVyYXRvcn1cblx0ICovXG5cdGdldCBldmVudHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2V2ZW50cztcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgLSBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgbmFtZXMgdG8gYWRkXG5cdCAqIHRoZSBsaXN0ZW5lciB0by5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtwcmlvcml0eT0wXSAtIFRoZSBwcmlvcml0eSBvZiBsaXN0ZW5lci4gVGhlIGhpZ2hlciB0aGVcblx0ICogcHJpb3JpdHksIHRoZSBzb29uZXIgaXQgd2lsbCBiZSBleGVjdXRlZC5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgLSBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZXZlbnQgaXMgZW1pdHRlZC5cblx0ICogQHJldHVybnMge0hvb2tFbWl0dGVyfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0b24oZXZlbnQsIHByaW9yaXR5ID0gMCwgbGlzdGVuZXIpIHtcblx0XHRpZiAoIWV2ZW50IHx8IHR5cGVvZiBldmVudCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGV2ZW50IG5hbWUgdG8gYmUgYSB2YWxpZCBzdHJpbmcuJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBwcmlvcml0eSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0bGlzdGVuZXIgPSBwcmlvcml0eTtcblx0XHRcdHByaW9yaXR5ID0gMDtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHByaW9yaXR5ICE9PSAnbnVtYmVyJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgcHJpb3JpdHkgdG8gYmUgYSBudW1iZXIuJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbi4nKTtcblx0XHR9XG5cblx0XHRsZXQgZXZlbnRzID0gZXZlbnQuc3BsaXQoL1xccy8pO1xuXHRcdGxldCBldnQ7XG5cblx0XHR3aGlsZSAoZXZ0ID0gZXZlbnRzLnNoaWZ0KCkpIHtcblx0XHRcdGlmIChldnQpIHtcblx0XHRcdFx0bGV0IGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50cy5nZXQoZXZ0KTtcblx0XHRcdFx0aWYgKCFsaXN0ZW5lcnMpIHtcblx0XHRcdFx0XHR0aGlzLl9ldmVudHMuc2V0KGV2dCwgbGlzdGVuZXJzID0gW10pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RlbmVycy5wdXNoKHsgbGlzdGVuZXIsIHByaW9yaXR5IH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIG9ubHkgYmUgY2FsbGVkIG9uY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCAtIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCBuYW1lcyB0byBhZGRcblx0ICogdGhlIGxpc3RlbmVyIHRvLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW3ByaW9yaXR5PTBdIC0gVGhlIHByaW9yaXR5IG9mIGxpc3RlbmVyLiBUaGUgaGlnaGVyIHRoZVxuXHQgKiBwcmlvcml0eSwgdGhlIHNvb25lciBpdCB3aWxsIGJlIGV4ZWN1dGVkLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBldmVudCBpcyBlbWl0dGVkLlxuXHQgKiBAcmV0dXJucyB7SG9va0VtaXR0ZXJ9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRvbmNlKGV2ZW50LCBwcmlvcml0eSA9IDAsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKCFldmVudCB8fCB0eXBlb2YgZXZlbnQgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBldmVudCBuYW1lIHRvIGJlIGEgdmFsaWQgc3RyaW5nLicpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgcHJpb3JpdHkgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGxpc3RlbmVyID0gcHJpb3JpdHk7XG5cdFx0XHRwcmlvcml0eSA9IDA7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgcHJpb3JpdHkgIT09ICdudW1iZXInKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBwcmlvcml0eSB0byBiZSBhIG51bWJlci4nKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLicpO1xuXHRcdH1cblxuXHRcdGxldCBldmVudHMgPSBldmVudC5zcGxpdCgvXFxzLyk7XG5cblx0XHRmb3IgKGxldCBldnQgb2YgZXZlbnRzKSB7XG5cdFx0XHRpZiAoZXZ0KSB7XG5cdFx0XHRcdGxldCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHMuZ2V0KGV2dCk7XG5cdFx0XHRcdGlmICghbGlzdGVuZXJzKSB7XG5cdFx0XHRcdFx0dGhpcy5fZXZlbnRzLnNldChldnQsIGxpc3RlbmVycyA9IFtdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgd3JhcHBlciA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHR0aGlzLm9mZihldnQsIHdyYXBwZXIpO1xuXHRcdFx0XHRcdGxpc3RlbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0XHRcdH0uYmluZCh0aGlzKTtcblx0XHRcdFx0bGlzdGVuZXJzLnB1c2goeyBsaXN0ZW5lcjogd3JhcHBlciwgcHJpb3JpdHkgfSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhbiBldmVudCBsaXN0ZW5lci5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IC0gT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IG5hbWVzIHRvIHJlbW92ZVxuXHQgKiB0aGUgbGlzdGVuZXIgZnJvbS5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW2xpc3RlbmVyXSAtIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi4gSWYgbm90IHNwZWNpZmllZCxcblx0ICogdGhlbiBhbGwgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50IGFyZSByZW1vdmVkLlxuXHQgKiBAcmV0dXJucyB7SG9va0VtaXR0ZXJ9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRvZmYoZXZlbnQsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKCFldmVudCB8fCB0eXBlb2YgZXZlbnQgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBldmVudCBuYW1lIHRvIGJlIGEgdmFsaWQgc3RyaW5nLicpO1xuXHRcdH1cblxuXHRcdGlmIChsaXN0ZW5lciAmJiB0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG5cdFx0fVxuXG5cdFx0bGV0IGV2ZW50cyA9IGV2ZW50LnNwbGl0KC9cXHMvKTtcblx0XHRsZXQgZXZ0O1xuXG5cdFx0d2hpbGUgKGV2dCA9IGV2ZW50cy5zaGlmdCgpKSB7XG5cdFx0XHRpZiAoIWxpc3RlbmVyKSB7XG5cdFx0XHRcdC8vIHJlbW92ZSB0aGVtIGFsbFxuXHRcdFx0XHR0aGlzLl9ldmVudHMuZGVsZXRlKGV2dCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzLmdldChldnQpO1xuXHRcdFx0aWYgKCFsaXN0ZW5lcnMpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7XG5cblx0XHRcdGlmIChsZW4gPT09IDEgJiYgbGlzdGVuZXJzWzBdLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuXHRcdFx0XHQvLyB0aGVyZSB3YXMgb25seSBvbmUgZXZlbnQgYW5kIHRoaXMgd2FzIGl0LCBzb1xuXHRcdFx0XHQvLyBudWtlIHRoZSBlbnRpcmUgZXZlbnQgZnJvbSB0aGUgbWFwXG5cdFx0XHRcdHRoaXMuX2V2ZW50cy5kZWxldGUoZXZ0KTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdFx0aWYgKGxpc3RlbmVyc1tpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcblx0XHRcdFx0XHRsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYW4gYXJyYXkgb2YgbGlzdGVuZXJzIGludG8gYSBwcm9taXNlIGNoYWluXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLmNhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNhbGwgYWZ0ZXJcblx0ICogYWxsIGxpc3RlbmVycyBoYXZlIGJlZW4gZmlyZWQuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLnRyYW5zZm9ybV0gLSBBbiBmdW5jdGlvbiB0aGF0IHRyYW5zZm9ybXMgYSByZXN1bHRcblx0ICogd2l0aCB0aGUgb3JpZ2luYWwgcGF5bG9hZC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnR5cGVdIC0gVGhlIGV2ZW50IHR5cGUuXG5cdCAqIEByZXR1cm5zIHtGdW5jdGlvbn1cblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqL1xuXHRjb21wb3NlKHsgdHlwZSwgY2FsbGJhY2ssIHRyYW5zZm9ybSB9KSB7XG5cdFx0aWYgKGNhbGxiYWNrICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgY2FsbGJhY2sgdG8gYmUgYSBmdW5jdGlvbi4nKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHRyYW5zZm9ybSAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Ly8gZGVmaW5lIHRoZSBkZWZhdWx0IHRyYW5zZm9ybSBmb3IgcGFzc2luZyByZXN1bHRzIHRvIHRoZSBuZXh0XG5cdFx0XHQvLyBsaXN0ZW5lciBpbiB0aGUgY2hhaW5cblx0XHRcdHRyYW5zZm9ybSA9IChyZXN1bHQsIHBheWxvYWQpID0+ICh7XG5cdFx0XHRcdHR5cGU6IHBheWxvYWQudHlwZSxcblx0XHRcdFx0YXJnczogcmVzdWx0IHx8IHBheWxvYWQuYXJnc1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gY3JlYXRlIHRoZSBmdW5jdGlvbiB0aGF0IGZldGNoZXMgdGhlIGV2ZW50cyBzaW5jZSB0aGUgbGlzdCBvZlxuXHRcdC8vIGxpc3RlbmVycyBtYXkgY2hhbmdlIGJlZm9yZSB0aGUgaG9vayBpcyBjYWxsZWRcblx0XHRjb25zdCBnZXRMaXN0ZW5lcnMgPSAoKSA9PiB7XG5cdFx0XHRjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHMuZ2V0KHR5cGUpIHx8IFtdO1xuXHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KGxpc3RlbmVycykpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbGlzdGVuZXJzIHRvIGJlIGFuIGFycmF5LicpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBsaW5rZWRMaXN0ZW5lcnMgPSB0aGlzLl9saW5rcy5tYXAobGluayA9PiB7XG5cdFx0XHRcdHJldHVybiBsaW5rLmVtaXR0ZXIuZXZlbnRzLmdldCgobGluay5wcmVmaXggfHwgJycpICsgdHlwZSkgfHwgW107XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIGxpc3RlbmVyc1xuXHRcdFx0XHQuY29uY2F0LmFwcGx5KGxpc3RlbmVycywgbGlua2VkTGlzdGVuZXJzKVxuXHRcdFx0XHQuc29ydCgoYSwgYikgPT4gYi5wcmlvcml0eSAtIGEucHJpb3JpdHkpXG5cdFx0XHRcdC5tYXAocCA9PiB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBwLmxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLicpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gcC5saXN0ZW5lcjtcblx0XHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdC8vIHJldHVybiB0aGUgd3JhcHBlZCBmdW5jdGlvblxuXHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdFx0Y29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKCk7XG5cdFx0XHRjb25zdCBjdHggPSB0aGlzO1xuXG5cdFx0XHRpZiAoY2FsbGJhY2spIHtcblx0XHRcdFx0bGlzdGVuZXJzLnB1c2goY2FsbGJhY2spO1xuXHRcdFx0fVxuXG5cdFx0XHRsb2coYHJ1bm5pbmcgY2hhaW4gd2l0aCAke2xpc3RlbmVycy5sZW5ndGh9IGxpc3RlbmVyc2ApO1xuXG5cdFx0XHQvLyBzdGFydCB0aGUgY2hhaW4gYW5kIHJldHVybiBpdHMgcHJvbWlzZVxuXHRcdFx0cmV0dXJuIGRpc3BhdGNoKHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0YXJnczogYXJnc1xuXHRcdFx0fSwgMCk7XG5cblx0XHRcdGZ1bmN0aW9uIGRpc3BhdGNoKHBheWxvYWQsIGkpIHtcblx0XHRcdFx0bGV0IGxpc3RlbmVyID0gbGlzdGVuZXJzW2ldO1xuXHRcdFx0XHRpZiAoIWxpc3RlbmVyKSB7XG5cdFx0XHRcdFx0bG9nKCdlbmQgb2YgdGhlIGxpbmUnKTtcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBheWxvYWQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0XHRsZXQgZmlyZWQgPSBmYWxzZTtcblxuXHRcdFx0XHRcdC8vIGNvbnN0cnVjdCB0aGUgYXJnc1xuXHRcdFx0XHRcdGNvbnN0IGFyZ3MgPSBbIC4uLihBcnJheS5pc0FycmF5KHBheWxvYWQuYXJncykgPyBwYXlsb2FkLmFyZ3MgOiBbIHBheWxvYWQuYXJncyBdKSwgZnVuY3Rpb24gbmV4dChyZXN1bHQpIHtcblx0XHRcdFx0XHRcdGlmIChmaXJlZCkge1xuXHRcdFx0XHRcdFx0XHRsb2coJ25leHQoKSBhbHJlYWR5IGZpcmVkJyk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0ZmlyZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0XHQvLyBpZiBzb21lYm9keSBtaXhlcyBwYXJhZGlnbXMgYW5kIGNhbGxzIG5leHQoKS50aGVuKCksXG5cdFx0XHRcdFx0XHQvLyBhdCBsZWFzdCB0aGVpciBmdW5jdGlvbiB3aWxsIHdhaXQgZm9yIHRoZSBuZXh0IGxpc3RlbmVyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlzcGF0Y2gocmVzdWx0IHx8IHBheWxvYWQsIGkgKyAxKVxuXHRcdFx0XHRcdFx0XHQudGhlbihyZXN1bHQgPT4gcmVzdWx0IHx8IHBheWxvYWQpXG5cdFx0XHRcdFx0XHRcdC5jYXRjaChyZWplY3QpO1xuXHRcdFx0XHRcdH0gXTtcblxuXHRcdFx0XHRcdGxvZyhgY2FsbGluZyBsaXN0ZW5lciAke2l9YCk7XG5cblx0XHRcdFx0XHQvLyBjYWxsIHRoZSBsaXN0ZW5lclxuXHRcdFx0XHRcdGxldCByZXN1bHQgPSBsaXN0ZW5lci5hcHBseShjdHgsIGFyZ3MpO1xuXG5cdFx0XHRcdFx0bG9nKCdsaXN0ZW5lciByZXR1cm5lZDonLCByZXN1bHQpO1xuXG5cdFx0XHRcdFx0aWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkICYmIGZpcmVkKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBpZiB3ZSBnb3QgYmFjayBhIHByb21pc2UsIHdlIGhhdmUgdG8gd2FpdFxuXHRcdFx0XHRcdGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0XG5cdFx0XHRcdFx0XHRcdC50aGVuKHJlc3VsdCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gdHJhbnNmb3JtKHJlc3VsdCwgcGF5bG9hZCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZpcmVkID8gcmVzdWx0IDogZGlzcGF0Y2gocmVzdWx0LCBpICsgMSk7XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdC50aGVuKHJlc29sdmUpXG5cdFx0XHRcdFx0XHRcdC5jYXRjaChyZWplY3QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBkaXNwYXRjaCh0cmFuc2Zvcm0ocmVzdWx0LCBwYXlsb2FkKSwgaSArIDEpXG5cdFx0XHRcdFx0XHQudGhlbihyZXNvbHZlLCByZWplY3QpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEVtaXRzIG9uZSBvciBtb3JlIGV2ZW50cy5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIGVtaXQuXG5cdCAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIC0gT25lIG9yIG1vcmUgYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gYmUgZW1pdHRlZFxuXHQgKiB3aXRoIHRoZSBldmVudC5cblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG5cdFx0aWYgKCFldmVudCB8fCB0eXBlb2YgZXZlbnQgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBldmVudCBuYW1lIHRvIGJlIGEgdmFsaWQgc3RyaW5nLicpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmNvbXBvc2Uoe1xuXHRcdFx0dHlwZTogZXZlbnRcblx0XHR9KS5hcHBseSh0aGlzLCBhcmdzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgZnVuY3Rpb24gaG9vay5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IC0gVGhlIG5hbWUgb2YgdGhlIGhvb2sncyBldmVudC5cblx0ICogQHBhcmFtIHtPYmplY3R9IFtjdHhdIC0gVGhlIGNvbnRleHQgdG8gcnVuIHRoZSBmdW5jdGlvbiBpbi4gVXNlZnVsIGlmXG5cdCAqIGBmbmAgaXMgZ29pbmcgdG8gYmUgb3ZlcndyaXR0ZW4uXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIGJlaW5nIGhvb2tlZCB1cC5cblx0ICogQHJldHVybnMge0Z1bmN0aW9ufVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0aG9vayhldmVudCwgY3R4LCBmbikge1xuXHRcdGlmICghZXZlbnQgfHwgdHlwZW9mIGV2ZW50ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgZXZlbnQgbmFtZSB0byBiZSBhIHZhbGlkIHN0cmluZy4nKTtcblx0XHR9XG5cblx0XHQvLyBzaGlmdCBhcmd1bWVudHMgaWYgbmVjZXNzYXJ5XG5cdFx0aWYgKHR5cGVvZiBjdHggPT09ICdmdW5jdGlvbicgJiYgIWZuKSB7XG5cdFx0XHRmbiA9IGN0eDtcblx0XHRcdGN0eCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKGN0eCAmJiB0eXBlb2YgY3R4ICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgY29udGV4dCB0byBiZSBhbiBvYmplY3QuJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgaG9va2VkIGZ1bmN0aW9uIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICguLi5hcmdzKSA9PiB7XG5cdFx0XHRjb25zdCBkYXRhID0ge1xuXHRcdFx0XHR0eXBlOiBldmVudCxcblx0XHRcdFx0Zm4sXG5cdFx0XHRcdGFyZ3MsXG5cdFx0XHRcdGN0eFxuXHRcdFx0fTtcblxuXHRcdFx0bG9nKGBjcmVhdGluZyBjaGFpbjogJHtldmVudH1gKTtcblxuXHRcdFx0Y29uc3QgY2hhaW4gPSB0aGlzLmNvbXBvc2Uoe1xuXHRcdFx0XHR0eXBlOiBldmVudCxcblx0XHRcdFx0Y2FsbGJhY2s6IGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzKSB7XG5cdFx0XHRcdFx0bG9nKCdmaXJpbmcgY2FsbGJhY2suLi4nKTtcblx0XHRcdFx0XHR0aGlzLnJlc3VsdCA9IGF3YWl0IHRoaXMuZm4uYXBwbHkodGhpcy5jdHgsIHRoaXMuYXJncyk7XG5cdFx0XHRcdFx0bG9nKCdjYWxsYmFjayByZXN1bHQgPScsIHRoaXMucmVzdWx0KTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblx0XHRcdFx0dHJhbnNmb3JtOiAocmVzdWx0LCBkYXRhKSA9PiByZXN1bHQgfHwgZGF0YVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBjaGFpbi5hcHBseShkYXRhLCBkYXRhLmFyZ3MpLnRoZW4oZGF0YSA9PiBkYXRhLnJlc3VsdCk7XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBMaW5rcyBhbGwgbGlzdGVuZXJzIGZyb20gYW5vdGhlciBob29rIGVtaXR0ZXIgaW50byB0aGlzIGluc3RhbmNlLiBXaGVuIGFuXG5cdCAqIGV2ZW50IGlzIGVtaXR0ZWQsIGl0IHdpbGwgbm90aWZ5IGFsbCBvZiB0aGlzIGluc3RhbmNlJ3MgbGlzdGVuZXJzLCB0aGVuXG5cdCAqIG5vdGlmeSBhbGwgbGlua2VkIGhvb2sgZW1pdHRlcidzIGxpc3RlbmVycy4gU2FtZSBhcHBsaWVzIHRvIGhvb2tlZFxuXHQgKiBmdW5jdGlvbnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7SG9va0VtaXR0ZXJ9IGVtaXR0ZXIgLSBBIGhvb2sgZW1pdHRlciB0byBsaW5rIHRvLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW3ByZWZpeF0gLSBBIHN0cmluZyB0byBwcmVmaXggdG8gYWxsIGVtaXR0ZWQgZXZlbnQgbmFtZXMuXG5cdCAqIEByZXR1cm5zIHtIb29rRW1pdHRlcn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGxpbmsoZW1pdHRlciwgcHJlZml4KSB7XG5cdFx0aWYgKCEoZW1pdHRlciBpbnN0YW5jZW9mIEhvb2tFbWl0dGVyKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYXJndW1lbnQgdG8gYmUgYSBIb29rRW1pdHRlci4nKTtcblx0XHR9XG5cblx0XHR0aGlzLl9saW5rcy5wdXNoKHsgZW1pdHRlciwgcHJlZml4IH0pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVW5saW5rcyBhbGwgbGlzdGVuZXJzIGZyb20gYW5vdGhlciBob29rIGVtaXR0ZXIgZnJvbSB0aGlzIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hvb2tFbWl0dGVyfSBlbWl0dGVyIC0gQSBob29rIGVtaXR0ZXIgdG8gdW5saW5rLlxuXHQgKiBAcmV0dXJucyB7SG9va0VtaXR0ZXJ9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHR1bmxpbmsoZW1pdHRlcikge1xuXHRcdGlmICghKGVtaXR0ZXIgaW5zdGFuY2VvZiBIb29rRW1pdHRlcikpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGFyZ3VtZW50IHRvIGJlIGEgSG9va0VtaXR0ZXIuJyk7XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9saW5rcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMuX2xpbmtzW2ldLmVtaXR0ZXIgPT09IGVtaXR0ZXIpIHtcblx0XHRcdFx0dGhpcy5fbGlua3Muc3BsaWNlKGktLSwgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuZXhwb3J0IHsgSG9va0VtaXR0ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEhvb2tFbWl0dGVyO1xuIl0sImZpbGUiOiJpbmRleC5qcyJ9
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbIkVycm9yIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJyZXF1aXJlIiwiSG9va0VtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsIl9ldmVudHMiLCJNYXAiLCJfbGlua3MiLCJldmVudHMiLCJvbiIsImV2ZW50IiwicHJpb3JpdHkiLCJsaXN0ZW5lciIsIlR5cGVFcnJvciIsInNwbGl0IiwiZXZ0Iiwic2hpZnQiLCJsaXN0ZW5lcnMiLCJnZXQiLCJzZXQiLCJwdXNoIiwib25jZSIsIndyYXBwZXIiLCJvZmYiLCJhcHBseSIsImFyZ3VtZW50cyIsImJpbmQiLCJkZWxldGUiLCJsZW4iLCJsZW5ndGgiLCJpIiwic3BsaWNlIiwiY29tcG9zZSIsInR5cGUiLCJjYWxsYmFjayIsInRyYW5zZm9ybSIsInJlc3VsdCIsInBheWxvYWQiLCJhcmdzIiwiZ2V0TGlzdGVuZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwibGlua2VkTGlzdGVuZXJzIiwibWFwIiwibGluayIsImVtaXR0ZXIiLCJwcmVmaXgiLCJjb25jYXQiLCJzb3J0IiwiYSIsImIiLCJwIiwiY3R4IiwiZGlzcGF0Y2giLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZpcmVkIiwibmV4dCIsInRoZW4iLCJjYXRjaCIsInVuZGVmaW5lZCIsImVtaXQiLCJob29rIiwiZm4iLCJkYXRhIiwiY2hhaW4iLCJ1bmxpbmsiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBLElBQUksQ0FBQ0EsS0FBSyxDQUFDQyxpQkFBWCxFQUE4QjtBQUM3QkMsRUFBQUEsT0FBTyxDQUFDLDZCQUFELENBQVA7QUFDQTtBQUVEOzs7OztBQUdPLE1BQU1DLFdBQU4sQ0FBa0I7QUFDeEI7Ozs7O0FBS0FDLEVBQUFBLFdBQVcsR0FBRztBQUNiLFNBQUtDLE9BQUwsR0FBZSxJQUFJQyxHQUFKLEVBQWY7QUFDQSxTQUFLQyxNQUFMLEdBQWMsRUFBZDtBQUNBO0FBRUQ7Ozs7OztBQUlBLE1BQUlDLE1BQUos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QUFBLE9BQUY7QUFBV0MsTUFBQUE7QUFBWCxLQUFqQjs7QUFFQSxXQUFPLElBQVA7QUFDQTtBQUVEOzs7Ozs7Ozs7QUFPQXFCLEVBQUFBLE1BQU0sQ0FBQ3RCLE9BQUQsRUFBVTtBQUNmLFFBQUksRUFBRUEsT0FBTyxZQUFZMUMsV0FBckIsQ0FBSixFQUF1QztBQUN0QyxZQUFNLElBQUlVLFNBQUosQ0FBYyx3Q0FBZCxDQUFOO0FBQ0E7O0FBRUQsU0FBSyxJQUFJaUIsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRyxLQUFLdkIsTUFBTCxDQUFZc0IsTUFBaEMsRUFBd0NDLENBQUMsRUFBekMsRUFBNkM7QUFDNUMsVUFBSSxLQUFLdkIsTUFBTCxDQUFZdUIsQ0FBWixFQUFlZSxPQUFmLEtBQTJCQSxPQUEvQixFQUF3QztBQUN2QyxhQUFLdEMsTUFBTCxDQUFZd0IsTUFBWixDQUFtQkQsQ0FBQyxFQUFwQixFQUF3QixDQUF4QjtBQUNBO0FBQ0Q7O0FBRUQsV0FBTyxJQUFQO0FBQ0E7O0FBall1Qjs7O2VBb1lWM0IsVyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKCFFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuXHRyZXF1aXJlKCdzb3VyY2UtbWFwLXN1cHBvcnQvcmVnaXN0ZXInKTtcbn1cblxuLyoqXG4gKiBFbWl0cyBldmVudHMgYW5kIGhvb2tzIHRvIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgbGlzdGVuZXJzLlxuICovXG5leHBvcnQgY2xhc3MgSG9va0VtaXR0ZXIge1xuXHQvKipcblx0ICogQ29uc3RydWN0cyBhbiBIb29rRW1pdHRlciBvYmplY3QuXG5cdCAqXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLl9ldmVudHMgPSBuZXcgTWFwKCk7XG5cdFx0dGhpcy5fbGlua3MgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbiBpdGVyYXRvciBmb3IgcmV0dXJuaW5nIGFsbCBldmVudHMuXG5cdCAqIEB0eXBlIHtJdGVyYXRvcn1cblx0ICovXG5cdGdldCBldmVudHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2V2ZW50cztcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgLSBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgbmFtZXMgdG8gYWRkXG5cdCAqIHRoZSBsaXN0ZW5lciB0by5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtwcmlvcml0eT0wXSAtIFRoZSBwcmlvcml0eSBvZiBsaXN0ZW5lci4gVGhlIGhpZ2hlciB0aGVcblx0ICogcHJpb3JpdHksIHRoZSBzb29uZXIgaXQgd2lsbCBiZSBleGVjdXRlZC5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgLSBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZXZlbnQgaXMgZW1pdHRlZC5cblx0ICogQHJldHVybnMge0hvb2tFbWl0dGVyfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0b24oZXZlbnQsIHByaW9yaXR5ID0gMCwgbGlzdGVuZXIpIHtcblx0XHRpZiAoIWV2ZW50IHx8IHR5cGVvZiBldmVudCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGV2ZW50IG5hbWUgdG8gYmUgYSB2YWxpZCBzdHJpbmcuJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBwcmlvcml0eSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0bGlzdGVuZXIgPSBwcmlvcml0eTtcblx0XHRcdHByaW9yaXR5ID0gMDtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHByaW9yaXR5ICE9PSAnbnVtYmVyJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgcHJpb3JpdHkgdG8gYmUgYSBudW1iZXIuJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbi4nKTtcblx0XHR9XG5cblx0XHRsZXQgZXZlbnRzID0gZXZlbnQuc3BsaXQoL1xccy8pO1xuXHRcdGxldCBldnQ7XG5cblx0XHR3aGlsZSAoZXZ0ID0gZXZlbnRzLnNoaWZ0KCkpIHtcblx0XHRcdGlmIChldnQpIHtcblx0XHRcdFx0bGV0IGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50cy5nZXQoZXZ0KTtcblx0XHRcdFx0aWYgKCFsaXN0ZW5lcnMpIHtcblx0XHRcdFx0XHR0aGlzLl9ldmVudHMuc2V0KGV2dCwgbGlzdGVuZXJzID0gW10pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RlbmVycy5wdXNoKHsgbGlzdGVuZXIsIHByaW9yaXR5IH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIG9ubHkgYmUgY2FsbGVkIG9uY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCAtIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCBuYW1lcyB0byBhZGRcblx0ICogdGhlIGxpc3RlbmVyIHRvLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW3ByaW9yaXR5PTBdIC0gVGhlIHByaW9yaXR5IG9mIGxpc3RlbmVyLiBUaGUgaGlnaGVyIHRoZVxuXHQgKiBwcmlvcml0eSwgdGhlIHNvb25lciBpdCB3aWxsIGJlIGV4ZWN1dGVkLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBldmVudCBpcyBlbWl0dGVkLlxuXHQgKiBAcmV0dXJucyB7SG9va0VtaXR0ZXJ9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRvbmNlKGV2ZW50LCBwcmlvcml0eSA9IDAsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKCFldmVudCB8fCB0eXBlb2YgZXZlbnQgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBldmVudCBuYW1lIHRvIGJlIGEgdmFsaWQgc3RyaW5nLicpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgcHJpb3JpdHkgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGxpc3RlbmVyID0gcHJpb3JpdHk7XG5cdFx0XHRwcmlvcml0eSA9IDA7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgcHJpb3JpdHkgIT09ICdudW1iZXInKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBwcmlvcml0eSB0byBiZSBhIG51bWJlci4nKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLicpO1xuXHRcdH1cblxuXHRcdGxldCBldmVudHMgPSBldmVudC5zcGxpdCgvXFxzLyk7XG5cblx0XHRmb3IgKGxldCBldnQgb2YgZXZlbnRzKSB7XG5cdFx0XHRpZiAoZXZ0KSB7XG5cdFx0XHRcdGxldCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHMuZ2V0KGV2dCk7XG5cdFx0XHRcdGlmICghbGlzdGVuZXJzKSB7XG5cdFx0XHRcdFx0dGhpcy5fZXZlbnRzLnNldChldnQsIGxpc3RlbmVycyA9IFtdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgd3JhcHBlciA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHR0aGlzLm9mZihldnQsIHdyYXBwZXIpO1xuXHRcdFx0XHRcdGxpc3RlbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0XHRcdH0uYmluZCh0aGlzKTtcblx0XHRcdFx0bGlzdGVuZXJzLnB1c2goeyBsaXN0ZW5lcjogd3JhcHBlciwgcHJpb3JpdHkgfSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhbiBldmVudCBsaXN0ZW5lci5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IC0gT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IG5hbWVzIHRvIHJlbW92ZVxuXHQgKiB0aGUgbGlzdGVuZXIgZnJvbS5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW2xpc3RlbmVyXSAtIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi4gSWYgbm90IHNwZWNpZmllZCxcblx0ICogdGhlbiBhbGwgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50IGFyZSByZW1vdmVkLlxuXHQgKiBAcmV0dXJucyB7SG9va0VtaXR0ZXJ9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRvZmYoZXZlbnQsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKCFldmVudCB8fCB0eXBlb2YgZXZlbnQgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBldmVudCBuYW1lIHRvIGJlIGEgdmFsaWQgc3RyaW5nLicpO1xuXHRcdH1cblxuXHRcdGlmIChsaXN0ZW5lciAmJiB0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG5cdFx0fVxuXG5cdFx0bGV0IGV2ZW50cyA9IGV2ZW50LnNwbGl0KC9cXHMvKTtcblx0XHRsZXQgZXZ0O1xuXG5cdFx0d2hpbGUgKGV2dCA9IGV2ZW50cy5zaGlmdCgpKSB7XG5cdFx0XHRpZiAoIWxpc3RlbmVyKSB7XG5cdFx0XHRcdC8vIHJlbW92ZSB0aGVtIGFsbFxuXHRcdFx0XHR0aGlzLl9ldmVudHMuZGVsZXRlKGV2dCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzLmdldChldnQpO1xuXHRcdFx0aWYgKCFsaXN0ZW5lcnMpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7XG5cblx0XHRcdGlmIChsZW4gPT09IDEgJiYgbGlzdGVuZXJzWzBdLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuXHRcdFx0XHQvLyB0aGVyZSB3YXMgb25seSBvbmUgZXZlbnQgYW5kIHRoaXMgd2FzIGl0LCBzb1xuXHRcdFx0XHQvLyBudWtlIHRoZSBlbnRpcmUgZXZlbnQgZnJvbSB0aGUgbWFwXG5cdFx0XHRcdHRoaXMuX2V2ZW50cy5kZWxldGUoZXZ0KTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdFx0aWYgKGxpc3RlbmVyc1tpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcblx0XHRcdFx0XHRsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYW4gYXJyYXkgb2YgbGlzdGVuZXJzIGludG8gYSBwcm9taXNlIGNoYWluXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLmNhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNhbGwgYWZ0ZXJcblx0ICogYWxsIGxpc3RlbmVycyBoYXZlIGJlZW4gZmlyZWQuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLnRyYW5zZm9ybV0gLSBBbiBmdW5jdGlvbiB0aGF0IHRyYW5zZm9ybXMgYSByZXN1bHRcblx0ICogd2l0aCB0aGUgb3JpZ2luYWwgcGF5bG9hZC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnR5cGVdIC0gVGhlIGV2ZW50IHR5cGUuXG5cdCAqIEByZXR1cm5zIHtGdW5jdGlvbn1cblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqL1xuXHRjb21wb3NlKHsgdHlwZSwgY2FsbGJhY2ssIHRyYW5zZm9ybSB9KSB7XG5cdFx0aWYgKGNhbGxiYWNrICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgY2FsbGJhY2sgdG8gYmUgYSBmdW5jdGlvbi4nKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHRyYW5zZm9ybSAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Ly8gZGVmaW5lIHRoZSBkZWZhdWx0IHRyYW5zZm9ybSBmb3IgcGFzc2luZyByZXN1bHRzIHRvIHRoZSBuZXh0XG5cdFx0XHQvLyBsaXN0ZW5lciBpbiB0aGUgY2hhaW5cblx0XHRcdHRyYW5zZm9ybSA9IChyZXN1bHQsIHBheWxvYWQpID0+ICh7XG5cdFx0XHRcdHR5cGU6IHBheWxvYWQudHlwZSxcblx0XHRcdFx0YXJnczogcmVzdWx0IHx8IHBheWxvYWQuYXJnc1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gY3JlYXRlIHRoZSBmdW5jdGlvbiB0aGF0IGZldGNoZXMgdGhlIGV2ZW50cyBzaW5jZSB0aGUgbGlzdCBvZlxuXHRcdC8vIGxpc3RlbmVycyBtYXkgY2hhbmdlIGJlZm9yZSB0aGUgaG9vayBpcyBjYWxsZWRcblx0XHRjb25zdCBnZXRMaXN0ZW5lcnMgPSAoKSA9PiB7XG5cdFx0XHRjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHMuZ2V0KHR5cGUpIHx8IFtdO1xuXHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KGxpc3RlbmVycykpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbGlzdGVuZXJzIHRvIGJlIGFuIGFycmF5LicpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBsaW5rZWRMaXN0ZW5lcnMgPSB0aGlzLl9saW5rcy5tYXAobGluayA9PiB7XG5cdFx0XHRcdHJldHVybiBsaW5rLmVtaXR0ZXIuZXZlbnRzLmdldCgobGluay5wcmVmaXggfHwgJycpICsgdHlwZSkgfHwgW107XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIGxpc3RlbmVyc1xuXHRcdFx0XHQuY29uY2F0LmFwcGx5KGxpc3RlbmVycywgbGlua2VkTGlzdGVuZXJzKVxuXHRcdFx0XHQuc29ydCgoYSwgYikgPT4gYi5wcmlvcml0eSAtIGEucHJpb3JpdHkpXG5cdFx0XHRcdC5tYXAocCA9PiB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBwLmxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLicpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gcC5saXN0ZW5lcjtcblx0XHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdC8vIHJldHVybiB0aGUgd3JhcHBlZCBmdW5jdGlvblxuXHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdFx0Y29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKCk7XG5cdFx0XHRjb25zdCBjdHggPSB0aGlzO1xuXG5cdFx0XHRpZiAoY2FsbGJhY2spIHtcblx0XHRcdFx0bGlzdGVuZXJzLnB1c2goY2FsbGJhY2spO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBzdGFydCB0aGUgY2hhaW4gYW5kIHJldHVybiBpdHMgcHJvbWlzZVxuXHRcdFx0cmV0dXJuIGRpc3BhdGNoKHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0YXJnczogYXJnc1xuXHRcdFx0fSwgMCk7XG5cblx0XHRcdGZ1bmN0aW9uIGRpc3BhdGNoKHBheWxvYWQsIGkpIHtcblx0XHRcdFx0bGV0IGxpc3RlbmVyID0gbGlzdGVuZXJzW2ldO1xuXHRcdFx0XHRpZiAoIWxpc3RlbmVyKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShwYXlsb2FkKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdFx0bGV0IGZpcmVkID0gZmFsc2U7XG5cblx0XHRcdFx0XHQvLyBjb25zdHJ1Y3QgdGhlIGFyZ3Ncblx0XHRcdFx0XHRjb25zdCBhcmdzID0gWyAuLi4oQXJyYXkuaXNBcnJheShwYXlsb2FkLmFyZ3MpID8gcGF5bG9hZC5hcmdzIDogWyBwYXlsb2FkLmFyZ3MgXSksIGZ1bmN0aW9uIG5leHQocmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRpZiAoZmlyZWQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRmaXJlZCA9IHRydWU7XG5cblx0XHRcdFx0XHRcdC8vIGlmIHNvbWVib2R5IG1peGVzIHBhcmFkaWdtcyBhbmQgY2FsbHMgbmV4dCgpLnRoZW4oKSxcblx0XHRcdFx0XHRcdC8vIGF0IGxlYXN0IHRoZWlyIGZ1bmN0aW9uIHdpbGwgd2FpdCBmb3IgdGhlIG5leHQgbGlzdGVuZXJcblx0XHRcdFx0XHRcdHJldHVybiBkaXNwYXRjaChyZXN1bHQgfHwgcGF5bG9hZCwgaSArIDEpXG5cdFx0XHRcdFx0XHRcdC50aGVuKHJlc3VsdCA9PiByZXN1bHQgfHwgcGF5bG9hZClcblx0XHRcdFx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0XHRcdFx0fSBdO1xuXG5cdFx0XHRcdFx0Ly8gY2FsbCB0aGUgbGlzdGVuZXJcblx0XHRcdFx0XHRsZXQgcmVzdWx0ID0gbGlzdGVuZXIuYXBwbHkoY3R4LCBhcmdzKTtcblx0XHRcdFx0XHRpZiAocmVzdWx0ID09PSB1bmRlZmluZWQgJiYgZmlyZWQpIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIGlmIHdlIGdvdCBiYWNrIGEgcHJvbWlzZSwgd2UgaGF2ZSB0byB3YWl0XG5cdFx0XHRcdFx0aWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRcblx0XHRcdFx0XHRcdFx0LnRoZW4ocmVzdWx0ID0+IHtcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHQgPSB0cmFuc2Zvcm0ocmVzdWx0LCBwYXlsb2FkKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmlyZWQgPyByZXN1bHQgOiBkaXNwYXRjaChyZXN1bHQsIGkgKyAxKTtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LnRoZW4ocmVzb2x2ZSlcblx0XHRcdFx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGRpc3BhdGNoKHRyYW5zZm9ybShyZXN1bHQsIHBheWxvYWQpLCBpICsgMSlcblx0XHRcdFx0XHRcdC50aGVuKHJlc29sdmUsIHJlamVjdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogRW1pdHMgb25lIG9yIG1vcmUgZXZlbnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gZW1pdC5cblx0ICogQHBhcmFtIHsuLi4qfSBbYXJnc10gLSBPbmUgb3IgbW9yZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBiZSBlbWl0dGVkXG5cdCAqIHdpdGggdGhlIGV2ZW50LlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcblx0XHRpZiAoIWV2ZW50IHx8IHR5cGVvZiBldmVudCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGV2ZW50IG5hbWUgdG8gYmUgYSB2YWxpZCBzdHJpbmcuJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuY29tcG9zZSh7XG5cdFx0XHR0eXBlOiBldmVudFxuXHRcdH0pLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBmdW5jdGlvbiBob29rLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgLSBUaGUgbmFtZSBvZiB0aGUgaG9vaydzIGV2ZW50LlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW2N0eF0gLSBUaGUgY29udGV4dCB0byBydW4gdGhlIGZ1bmN0aW9uIGluLiBVc2VmdWwgaWZcblx0ICogYGZuYCBpcyBnb2luZyB0byBiZSBvdmVyd3JpdHRlbi5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gYmVpbmcgaG9va2VkIHVwLlxuXHQgKiBAcmV0dXJucyB7RnVuY3Rpb259XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRob29rKGV2ZW50LCBjdHgsIGZuKSB7XG5cdFx0aWYgKCFldmVudCB8fCB0eXBlb2YgZXZlbnQgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBldmVudCBuYW1lIHRvIGJlIGEgdmFsaWQgc3RyaW5nLicpO1xuXHRcdH1cblxuXHRcdC8vIHNoaWZ0IGFyZ3VtZW50cyBpZiBuZWNlc3Nhcnlcblx0XHRpZiAodHlwZW9mIGN0eCA9PT0gJ2Z1bmN0aW9uJyAmJiAhZm4pIHtcblx0XHRcdGZuID0gY3R4O1xuXHRcdFx0Y3R4ID0gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAoY3R4ICYmIHR5cGVvZiBjdHggIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBjb250ZXh0IHRvIGJlIGFuIG9iamVjdC4nKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBob29rZWQgZnVuY3Rpb24gdG8gYmUgYSBmdW5jdGlvbi4nKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKC4uLmFyZ3MpID0+IHtcblx0XHRcdGNvbnN0IGRhdGEgPSB7XG5cdFx0XHRcdHR5cGU6IGV2ZW50LFxuXHRcdFx0XHRmbixcblx0XHRcdFx0YXJncyxcblx0XHRcdFx0Y3R4XG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBjaGFpbiA9IHRoaXMuY29tcG9zZSh7XG5cdFx0XHRcdHR5cGU6IGV2ZW50LFxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblx0XHRcdFx0XHR0aGlzLnJlc3VsdCA9IGF3YWl0IHRoaXMuZm4uYXBwbHkodGhpcy5jdHgsIHRoaXMuYXJncyk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRyYW5zZm9ybTogKHJlc3VsdCwgZGF0YSkgPT4gcmVzdWx0IHx8IGRhdGFcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gY2hhaW4uYXBwbHkoZGF0YSwgZGF0YS5hcmdzKS50aGVuKGRhdGEgPT4gZGF0YS5yZXN1bHQpO1xuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogTGlua3MgYWxsIGxpc3RlbmVycyBmcm9tIGFub3RoZXIgaG9vayBlbWl0dGVyIGludG8gdGhpcyBpbnN0YW5jZS4gV2hlbiBhblxuXHQgKiBldmVudCBpcyBlbWl0dGVkLCBpdCB3aWxsIG5vdGlmeSBhbGwgb2YgdGhpcyBpbnN0YW5jZSdzIGxpc3RlbmVycywgdGhlblxuXHQgKiBub3RpZnkgYWxsIGxpbmtlZCBob29rIGVtaXR0ZXIncyBsaXN0ZW5lcnMuIFNhbWUgYXBwbGllcyB0byBob29rZWRcblx0ICogZnVuY3Rpb25zLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hvb2tFbWl0dGVyfSBlbWl0dGVyIC0gQSBob29rIGVtaXR0ZXIgdG8gbGluayB0by5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtwcmVmaXhdIC0gQSBzdHJpbmcgdG8gcHJlZml4IHRvIGFsbCBlbWl0dGVkIGV2ZW50IG5hbWVzLlxuXHQgKiBAcmV0dXJucyB7SG9va0VtaXR0ZXJ9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRsaW5rKGVtaXR0ZXIsIHByZWZpeCkge1xuXHRcdGlmICghKGVtaXR0ZXIgaW5zdGFuY2VvZiBIb29rRW1pdHRlcikpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGFyZ3VtZW50IHRvIGJlIGEgSG9va0VtaXR0ZXIuJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fbGlua3MucHVzaCh7IGVtaXR0ZXIsIHByZWZpeCB9KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVubGlua3MgYWxsIGxpc3RlbmVycyBmcm9tIGFub3RoZXIgaG9vayBlbWl0dGVyIGZyb20gdGhpcyBpbnN0YW5jZS5cblx0ICpcblx0ICogQHBhcmFtIHtIb29rRW1pdHRlcn0gZW1pdHRlciAtIEEgaG9vayBlbWl0dGVyIHRvIHVubGluay5cblx0ICogQHJldHVybnMge0hvb2tFbWl0dGVyfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0dW5saW5rKGVtaXR0ZXIpIHtcblx0XHRpZiAoIShlbWl0dGVyIGluc3RhbmNlb2YgSG9va0VtaXR0ZXIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhcmd1bWVudCB0byBiZSBhIEhvb2tFbWl0dGVyLicpO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fbGlua3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmICh0aGlzLl9saW5rc1tpXS5lbWl0dGVyID09PSBlbWl0dGVyKSB7XG5cdFx0XHRcdHRoaXMuX2xpbmtzLnNwbGljZShpLS0sIDEpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEhvb2tFbWl0dGVyO1xuIl0sImZpbGUiOiJpbmRleC5qcyJ9

40

package.json
{
"name": "hook-emitter",
"version": "3.1.2",
"version": "4.0.0",
"description": "Event emitter with support for asynchronous handlers and a sweet function hook mechanism.",

@@ -28,33 +28,33 @@ "main": "./dist/index.js",

"dependencies": {
"snooplogg": "^2.0.0",
"source-map-support": "^0.5.9"
"source-map-support": "^0.5.12"
},
"devDependencies": {
"@babel/core": "^7.2.0",
"@babel/plugin-transform-modules-commonjs": "^7.2.0",
"@babel/register": "^7.0.0",
"ansi-colors": "^3.2.3",
"babel-eslint": "^10.0.1",
"babel-loader": "^8.0.4",
"babel-plugin-istanbul": "^5.1.0",
"@babel/core": "^7.5.4",
"@babel/plugin-transform-modules-commonjs": "^7.5.0",
"@babel/register": "^7.4.4",
"ansi-colors": "^4.1.1",
"babel-eslint": "^10.0.2",
"babel-loader": "^8.0.6",
"babel-plugin-istanbul": "^5.1.4",
"chai": "^4.2.0",
"coveralls": "^3.0.2",
"coveralls": "^3.0.4",
"esdoc": "^1.1.0",
"esdoc-ecmascript-proposal-plugin": "^1.0.0",
"esdoc-standard-plugin": "^1.0.0",
"eslint": "^5.10.0",
"eslint": "^6.0.1",
"eslint-plugin-chai-expect": "^2.0.1",
"eslint-plugin-mocha": "^5.2.0",
"eslint-plugin-mocha": "^5.3.0",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-security": "^1.4.0",
"fancy-log": "^1.3.3",
"fs-extra": "^7.0.1",
"gulp": "^4.0.0",
"fs-extra": "^8.1.0",
"gulp": "^4.0.2",
"gulp-babel": "^8.0.0",
"gulp-debug": "^4.0.0",
"gulp-eslint": "^5.0.0",
"gulp-load-plugins": "^1.5.0",
"gulp-eslint": "^6.0.0",
"gulp-load-plugins": "^2.0.0",
"gulp-plumber": "^1.2.1",
"gulp-sourcemaps": "^2.6.4",
"mocha": "^5.2.0",
"nyc": "^13.1.0"
"gulp-sourcemaps": "^2.6.5",
"mocha": "^6.1.4",
"nyc": "^14.1.1"
},

@@ -61,0 +61,0 @@ "homepage": "https://github.com/cb1kenobi/hook-emitter",

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc