hook-emitter
Advanced tools
Comparing version 3.0.2 to 3.1.0
@@ -8,3 +8,3 @@ "use strict"; | ||
var _snooplogg2 = _interopRequireDefault(require("snooplogg")); | ||
var _snooplogg = _interopRequireDefault(require("snooplogg")); | ||
@@ -18,4 +18,5 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
const _snooplogg = (0, _snooplogg2.default)('hook-emitter'), | ||
log = _snooplogg.log; | ||
const { | ||
log | ||
} = (0, _snooplogg.default)('hook-emitter'); | ||
/** | ||
@@ -25,3 +26,2 @@ * Emits events and hooks to synchronous and asynchronous listeners. | ||
class HookEmitter { | ||
@@ -59,6 +59,3 @@ /** | ||
on(event) { | ||
let priority = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; | ||
let listener = arguments[2]; | ||
on(event, priority = 0, listener) { | ||
if (!event || typeof event !== 'string') { | ||
@@ -114,6 +111,3 @@ throw new TypeError('Expected event name to be a valid string.'); | ||
once(event) { | ||
let priority = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; | ||
let listener = arguments[2]; | ||
once(event, priority = 0, listener) { | ||
if (!event || typeof event !== 'string') { | ||
@@ -230,7 +224,7 @@ throw new TypeError('Expected event name to be a valid string.'); | ||
compose(_ref) { | ||
let type = _ref.type, | ||
callback = _ref.callback, | ||
transform = _ref.transform; | ||
compose({ | ||
type, | ||
callback, | ||
transform | ||
}) { | ||
if (callback && typeof callback !== 'function') { | ||
@@ -272,7 +266,3 @@ throw new TypeError('Expected callback to be a function.'); | ||
return function () { | ||
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { | ||
args[_key] = arguments[_key]; | ||
} | ||
return function (...args) { | ||
const listeners = getListeners(); | ||
@@ -314,3 +304,3 @@ const ctx = this; | ||
}]; | ||
log(`calling listener ${i}`, args); // call the listener | ||
log(`calling listener ${i}`); // call the listener | ||
@@ -348,3 +338,3 @@ let result = listener.apply(ctx, args); | ||
emit(event) { | ||
emit(event, ...args) { | ||
if (!event || typeof event !== 'string') { | ||
@@ -354,6 +344,2 @@ throw new TypeError('Expected event name to be a valid string.'); | ||
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { | ||
args[_key2 - 1] = arguments[_key2]; | ||
} | ||
return this.compose({ | ||
@@ -376,4 +362,2 @@ type: event | ||
hook(event, ctx, fn) { | ||
var _this = this; | ||
if (!event || typeof event !== 'string') { | ||
@@ -397,7 +381,3 @@ throw new TypeError('Expected event name to be a valid string.'); | ||
return function () { | ||
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { | ||
args[_key3] = arguments[_key3]; | ||
} | ||
return (...args) => { | ||
const data = { | ||
@@ -409,8 +389,7 @@ type: event, | ||
}; | ||
log('creating chain', data); | ||
const chain = _this.compose({ | ||
log(`creating chain: ${event}`); | ||
const chain = this.compose({ | ||
type: event, | ||
callback: async function () { | ||
log('firing callback', this); | ||
callback: async function (...args) { | ||
log('firing callback...'); | ||
this.result = await this.fn.apply(this.ctx, this.args); | ||
@@ -422,3 +401,2 @@ log('callback result =', this.result); | ||
}); | ||
return chain.apply(data, data.args).then(data => data.result); | ||
@@ -480,2 +458,2 @@ }; | ||
exports.default = _default; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbIkVycm9yIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJyZXF1aXJlIiwibG9nIiwiSG9va0VtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsIl9ldmVudHMiLCJNYXAiLCJfbGlua3MiLCJldmVudHMiLCJvbiIsImV2ZW50IiwicHJpb3JpdHkiLCJsaXN0ZW5lciIsIlR5cGVFcnJvciIsInNwbGl0IiwiZXZ0Iiwic2hpZnQiLCJsaXN0ZW5lcnMiLCJnZXQiLCJzZXQiLCJwdXNoIiwib25jZSIsIndyYXBwZXIiLCJvZmYiLCJhcHBseSIsImFyZ3VtZW50cyIsImJpbmQiLCJkZWxldGUiLCJsZW4iLCJsZW5ndGgiLCJpIiwic3BsaWNlIiwiY29tcG9zZSIsInR5cGUiLCJjYWxsYmFjayIsInRyYW5zZm9ybSIsInJlc3VsdCIsInBheWxvYWQiLCJhcmdzIiwiZ2V0TGlzdGVuZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwibGlua2VkTGlzdGVuZXJzIiwibWFwIiwibGluayIsImVtaXR0ZXIiLCJwcmVmaXgiLCJjb25jYXQiLCJzb3J0IiwiYSIsImIiLCJwIiwiY3R4IiwiZGlzcGF0Y2giLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZpcmVkIiwibmV4dCIsInRoZW4iLCJjYXRjaCIsInVuZGVmaW5lZCIsImVtaXQiLCJob29rIiwiZm4iLCJkYXRhIiwiY2hhaW4iLCJ1bmxpbmsiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7OztBQUVBO0FBQ0EsSUFBSSxDQUFDQSxNQUFNQyxpQkFBWCxFQUE4QjtBQUM3QkMsVUFBUSw2QkFBUjtBQUNBOzttQkFFZSx5QkFBVSxjQUFWLEM7TUFBUkMsRyxjQUFBQSxHO0FBRVI7Ozs7O0FBR0EsTUFBTUMsV0FBTixDQUFrQjtBQUNqQjs7Ozs7QUFLQUMsZ0JBQWM7QUFDYixTQUFLQyxPQUFMLEdBQWUsSUFBSUMsR0FBSixFQUFmO0FBQ0EsU0FBS0MsTUFBTCxHQUFjLEVBQWQ7QUFDQTtBQUVEOzs7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Q29udGVudCI6WyJpbXBvcnQgc25vb3Bsb2dnIGZyb20gJ3Nub29wbG9nZyc7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKCFFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuXHRyZXF1aXJlKCdzb3VyY2UtbWFwLXN1cHBvcnQvcmVnaXN0ZXInKTtcbn1cblxuY29uc3QgeyBsb2cgfSA9IHNub29wbG9nZygnaG9vay1lbWl0dGVyJyk7XG5cbi8qKlxuICogRW1pdHMgZXZlbnRzIGFuZCBob29rcyB0byBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIGxpc3RlbmVycy5cbiAqL1xuY2xhc3MgSG9va0VtaXR0ZXIge1xuXHQvKipcblx0ICogQ29uc3RydWN0cyBhbiBIb29rRW1pdHRlciBvYmplY3QuXG5cdCAqXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLl9ldmVudHMgPSBuZXcgTWFwKCk7XG5cdFx0dGhpcy5fbGlua3MgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbiBpdGVyYXRvciBmb3IgcmV0dXJuaW5nIGFsbCBldmVudHMuXG5cdCAqIEB0eXBlIHtJdGVyYXRvcn1cblx0ICovXG5cdGdldCBldmVudHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2V2ZW50cztcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgLSBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgbmFtZXMgdG8gYWRkXG5cdCAqIHRoZSBsaXN0ZW5lciB0by5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtwcmlvcml0eT0wXSAtIFRoZSBwcmlvcml0eSBvZiBsaXN0ZW5lci4gVGhlIGhpZ2hlciB0aGVcblx0ICogcHJpb3JpdHksIHRoZSBzb29uZXIgaXQgd2lsbCBiZSBleGVjdXRlZC5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgLSBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZXZlbnQgaXMgZW1pdHRlZC5cblx0ICogQHJldHVybnMge0hvb2tFbWl0dGVyfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0b24oZXZlbnQsIHByaW9yaXR5ID0gMCwgbGlzdGVuZXIpIHtcblx0XHRpZiAoIWV2ZW50IHx8IHR5cGVvZiBldmVudCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGV2ZW50IG5hbWUgdG8gYmUgYSB2YWxpZCBzdHJpbmcuJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBwcmlvcml0eSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0bGlzdGVuZXIgPSBwcmlvcml0eTtcblx0XHRcdHByaW9yaXR5ID0gMDtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHByaW9yaXR5ICE9PSAnbnVtYmVyJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgcHJpb3JpdHkgdG8gYmUgYSBudW1iZXIuJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbi4nKTtcblx0XHR9XG5cblx0XHRsZXQgZXZlbnRzID0gZXZlbnQuc3BsaXQoL1xccy8pO1xuXHRcdGxldCBldnQ7XG5cblx0XHR3aGlsZSAoZXZ0ID0gZXZlbnRzLnNoaWZ0KCkpIHtcblx0XHRcdGlmIChldnQpIHtcblx0XHRcdFx0bGV0IGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50cy5nZXQoZXZ0KTtcblx0XHRcdFx0aWYgKCFsaXN0ZW5lcnMpIHtcblx0XHRcdFx0XHR0aGlzLl9ldmVudHMuc2V0KGV2dCwgbGlzdGVuZXJzID0gW10pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RlbmVycy5wdXNoKHsgbGlzdGVuZXIsIHByaW9yaXR5IH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIG9ubHkgYmUgY2FsbGVkIG9uY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCAtIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCBuYW1lcyB0byBhZGRcblx0ICogdGhlIGxpc3RlbmVyIHRvLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW3ByaW9yaXR5PTBdIC0gVGhlIHByaW9yaXR5IG9mIGxpc3RlbmVyLiBUaGUgaGlnaGVyIHRoZVxuXHQgKiBwcmlvcml0eSwgdGhlIHNvb25lciBpdCB3aWxsIGJlIGV4ZWN1dGVkLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBldmVudCBpcyBlbWl0dGVkLlxuXHQgKiBAcmV0dXJucyB7SG9va0VtaXR0ZXJ9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRvbmNlKGV2ZW50LCBwcmlvcml0eSA9IDAsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKCFldmVudCB8fCB0eXBlb2YgZXZlbnQgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBldmVudCBuYW1lIHRvIGJlIGEgdmFsaWQgc3RyaW5nLicpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgcHJpb3JpdHkgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGxpc3RlbmVyID0gcHJpb3JpdHk7XG5cdFx0XHRwcmlvcml0eSA9IDA7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgcHJpb3JpdHkgIT09ICdudW1iZXInKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBwcmlvcml0eSB0byBiZSBhIG51bWJlci4nKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLicpO1xuXHRcdH1cblxuXHRcdGxldCBldmVudHMgPSBldmVudC5zcGxpdCgvXFxzLyk7XG5cblx0XHRmb3IgKGxldCBldnQgb2YgZXZlbnRzKSB7XG5cdFx0XHRpZiAoZXZ0KSB7XG5cdFx0XHRcdGxldCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHMuZ2V0KGV2dCk7XG5cdFx0XHRcdGlmICghbGlzdGVuZXJzKSB7XG5cdFx0XHRcdFx0dGhpcy5fZXZlbnRzLnNldChldnQsIGxpc3RlbmVycyA9IFtdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgd3JhcHBlciA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHR0aGlzLm9mZihldnQsIHdyYXBwZXIpO1xuXHRcdFx0XHRcdGxpc3RlbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0XHRcdH0uYmluZCh0aGlzKTtcblx0XHRcdFx0bGlzdGVuZXJzLnB1c2goeyBsaXN0ZW5lcjogd3JhcHBlciwgcHJpb3JpdHkgfSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhbiBldmVudCBsaXN0ZW5lci5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IC0gT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IG5hbWVzIHRvIHJlbW92ZVxuXHQgKiB0aGUgbGlzdGVuZXIgZnJvbS5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW2xpc3RlbmVyXSAtIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi4gSWYgbm90IHNwZWNpZmllZCxcblx0ICogdGhlbiBhbGwgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50IGFyZSByZW1vdmVkLlxuXHQgKiBAcmV0dXJucyB7SG9va0VtaXR0ZXJ9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRvZmYoZXZlbnQsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKCFldmVudCB8fCB0eXBlb2YgZXZlbnQgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBldmVudCBuYW1lIHRvIGJlIGEgdmFsaWQgc3RyaW5nLicpO1xuXHRcdH1cblxuXHRcdGlmIChsaXN0ZW5lciAmJiB0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG5cdFx0fVxuXG5cdFx0bGV0IGV2ZW50cyA9IGV2ZW50LnNwbGl0KC9cXHMvKTtcblx0XHRsZXQgZXZ0O1xuXG5cdFx0d2hpbGUgKGV2dCA9IGV2ZW50cy5zaGlmdCgpKSB7XG5cdFx0XHRpZiAoIWxpc3RlbmVyKSB7XG5cdFx0XHRcdC8vIHJlbW92ZSB0aGVtIGFsbFxuXHRcdFx0XHR0aGlzLl9ldmVudHMuZGVsZXRlKGV2dCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzLmdldChldnQpO1xuXHRcdFx0aWYgKCFsaXN0ZW5lcnMpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7XG5cblx0XHRcdGlmIChsZW4gPT09IDEgJiYgbGlzdGVuZXJzWzBdLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuXHRcdFx0XHQvLyB0aGVyZSB3YXMgb25seSBvbmUgZXZlbnQgYW5kIHRoaXMgd2FzIGl0LCBzb1xuXHRcdFx0XHQvLyBudWtlIHRoZSBlbnRpcmUgZXZlbnQgZnJvbSB0aGUgbWFwXG5cdFx0XHRcdHRoaXMuX2V2ZW50cy5kZWxldGUoZXZ0KTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdFx0aWYgKGxpc3RlbmVyc1tpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcblx0XHRcdFx0XHRsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYW4gYXJyYXkgb2YgbGlzdGVuZXJzIGludG8gYSBwcm9taXNlIGNoYWluXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLmNhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNhbGwgYWZ0ZXJcblx0ICogYWxsIGxpc3RlbmVycyBoYXZlIGJlZW4gZmlyZWQuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLnRyYW5zZm9ybV0gLSBBbiBmdW5jdGlvbiB0aGF0IHRyYW5zZm9ybXMgYSByZXN1bHRcblx0ICogd2l0aCB0aGUgb3JpZ2luYWwgcGF5bG9hZC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnR5cGVdIC0gVGhlIGV2ZW50IHR5cGUuXG5cdCAqIEByZXR1cm5zIHtGdW5jdGlvbn1cblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqL1xuXHRjb21wb3NlKHsgdHlwZSwgY2FsbGJhY2ssIHRyYW5zZm9ybSB9KSB7XG5cdFx0aWYgKGNhbGxiYWNrICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgY2FsbGJhY2sgdG8gYmUgYSBmdW5jdGlvbi4nKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHRyYW5zZm9ybSAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Ly8gZGVmaW5lIHRoZSBkZWZhdWx0IHRyYW5zZm9ybSBmb3IgcGFzc2luZyByZXN1bHRzIHRvIHRoZSBuZXh0XG5cdFx0XHQvLyBsaXN0ZW5lciBpbiB0aGUgY2hhaW5cblx0XHRcdHRyYW5zZm9ybSA9IChyZXN1bHQsIHBheWxvYWQpID0+ICh7XG5cdFx0XHRcdHR5cGU6IHBheWxvYWQudHlwZSxcblx0XHRcdFx0YXJnczogcmVzdWx0IHx8IHBheWxvYWQuYXJnc1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gY3JlYXRlIHRoZSBmdW5jdGlvbiB0aGF0IGZldGNoZXMgdGhlIGV2ZW50cyBzaW5jZSB0aGUgbGlzdCBvZlxuXHRcdC8vIGxpc3RlbmVycyBtYXkgY2hhbmdlIGJlZm9yZSB0aGUgaG9vayBpcyBjYWxsZWRcblx0XHRjb25zdCBnZXRMaXN0ZW5lcnMgPSAoKSA9PiB7XG5cdFx0XHRjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHMuZ2V0KHR5cGUpIHx8IFtdO1xuXHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KGxpc3RlbmVycykpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbGlzdGVuZXJzIHRvIGJlIGFuIGFycmF5LicpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBsaW5rZWRMaXN0ZW5lcnMgPSB0aGlzLl9saW5rcy5tYXAobGluayA9PiB7XG5cdFx0XHRcdHJldHVybiBsaW5rLmVtaXR0ZXIuZXZlbnRzLmdldCgobGluay5wcmVmaXggfHwgJycpICsgdHlwZSkgfHwgW107XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIGxpc3RlbmVyc1xuXHRcdFx0XHQuY29uY2F0LmFwcGx5KGxpc3RlbmVycywgbGlua2VkTGlzdGVuZXJzKVxuXHRcdFx0XHQuc29ydCgoYSwgYikgPT4gYi5wcmlvcml0eSAtIGEucHJpb3JpdHkpXG5cdFx0XHRcdC5tYXAocCA9PiB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBwLmxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLicpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gcC5saXN0ZW5lcjtcblx0XHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdC8vIHJldHVybiB0aGUgd3JhcHBlZCBmdW5jdGlvblxuXHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdFx0Y29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKCk7XG5cdFx0XHRjb25zdCBjdHggPSB0aGlzO1xuXG5cdFx0XHRpZiAoY2FsbGJhY2spIHtcblx0XHRcdFx0bGlzdGVuZXJzLnB1c2goY2FsbGJhY2spO1xuXHRcdFx0fVxuXG5cdFx0XHRsb2coYHJ1bm5pbmcgY2hhaW4gd2l0aCAke2xpc3RlbmVycy5sZW5ndGh9IGxpc3RlbmVyc2ApO1xuXG5cdFx0XHQvLyBzdGFydCB0aGUgY2hhaW4gYW5kIHJldHVybiBpdHMgcHJvbWlzZVxuXHRcdFx0cmV0dXJuIGRpc3BhdGNoKHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0YXJnczogYXJnc1xuXHRcdFx0fSwgMCk7XG5cblx0XHRcdGZ1bmN0aW9uIGRpc3BhdGNoKHBheWxvYWQsIGkpIHtcblx0XHRcdFx0bGV0IGxpc3RlbmVyID0gbGlzdGVuZXJzW2ldO1xuXHRcdFx0XHRpZiAoIWxpc3RlbmVyKSB7XG5cdFx0XHRcdFx0bG9nKCdlbmQgb2YgdGhlIGxpbmUnKTtcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBheWxvYWQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0XHRsZXQgZmlyZWQgPSBmYWxzZTtcblxuXHRcdFx0XHRcdC8vIGNvbnN0cnVjdCB0aGUgYXJnc1xuXHRcdFx0XHRcdGNvbnN0IGFyZ3MgPSBbIC4uLihBcnJheS5pc0FycmF5KHBheWxvYWQuYXJncykgPyBwYXlsb2FkLmFyZ3MgOiBbIHBheWxvYWQuYXJncyBdKSwgZnVuY3Rpb24gbmV4dChyZXN1bHQpIHtcblx0XHRcdFx0XHRcdGlmIChmaXJlZCkge1xuXHRcdFx0XHRcdFx0XHRsb2coJ25leHQoKSBhbHJlYWR5IGZpcmVkJyk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0ZmlyZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0XHQvLyBpZiBzb21lYm9keSBtaXhlcyBwYXJhZGlnbXMgYW5kIGNhbGxzIG5leHQoKS50aGVuKCksXG5cdFx0XHRcdFx0XHQvLyBhdCBsZWFzdCB0aGVpciBmdW5jdGlvbiB3aWxsIHdhaXQgZm9yIHRoZSBuZXh0IGxpc3RlbmVyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlzcGF0Y2gocmVzdWx0IHx8IHBheWxvYWQsIGkgKyAxKVxuXHRcdFx0XHRcdFx0XHQudGhlbihyZXN1bHQgPT4gcmVzdWx0IHx8IHBheWxvYWQpXG5cdFx0XHRcdFx0XHRcdC5jYXRjaChyZWplY3QpO1xuXHRcdFx0XHRcdH0gXTtcblxuXHRcdFx0XHRcdGxvZyhgY2FsbGluZyBsaXN0ZW5lciAke2l9YCwgYXJncyk7XG5cblx0XHRcdFx0XHQvLyBjYWxsIHRoZSBsaXN0ZW5lclxuXHRcdFx0XHRcdGxldCByZXN1bHQgPSBsaXN0ZW5lci5hcHBseShjdHgsIGFyZ3MpO1xuXG5cdFx0XHRcdFx0bG9nKCdsaXN0ZW5lciByZXR1cm5lZDonLCByZXN1bHQpO1xuXG5cdFx0XHRcdFx0aWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkICYmIGZpcmVkKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBpZiB3ZSBnb3QgYmFjayBhIHByb21pc2UsIHdlIGhhdmUgdG8gd2FpdFxuXHRcdFx0XHRcdGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0XG5cdFx0XHRcdFx0XHRcdC50aGVuKHJlc3VsdCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gdHJhbnNmb3JtKHJlc3VsdCwgcGF5bG9hZCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZpcmVkID8gcmVzdWx0IDogZGlzcGF0Y2gocmVzdWx0LCBpICsgMSk7XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdC50aGVuKHJlc29sdmUpXG5cdFx0XHRcdFx0XHRcdC5jYXRjaChyZWplY3QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBkaXNwYXRjaCh0cmFuc2Zvcm0ocmVzdWx0LCBwYXlsb2FkKSwgaSArIDEpXG5cdFx0XHRcdFx0XHQudGhlbihyZXNvbHZlLCByZWplY3QpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEVtaXRzIG9uZSBvciBtb3JlIGV2ZW50cy5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIGVtaXQuXG5cdCAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIC0gT25lIG9yIG1vcmUgYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gYmUgZW1pdHRlZFxuXHQgKiB3aXRoIHRoZSBldmVudC5cblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG5cdFx0aWYgKCFldmVudCB8fCB0eXBlb2YgZXZlbnQgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBldmVudCBuYW1lIHRvIGJlIGEgdmFsaWQgc3RyaW5nLicpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmNvbXBvc2Uoe1xuXHRcdFx0dHlwZTogZXZlbnRcblx0XHR9KS5hcHBseSh0aGlzLCBhcmdzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgZnVuY3Rpb24gaG9vay5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IC0gVGhlIG5hbWUgb2YgdGhlIGhvb2sncyBldmVudC5cblx0ICogQHBhcmFtIHtPYmplY3R9IFtjdHhdIC0gVGhlIGNvbnRleHQgdG8gcnVuIHRoZSBmdW5jdGlvbiBpbi4gVXNlZnVsIGlmXG5cdCAqIGBmbmAgaXMgZ29pbmcgdG8gYmUgb3ZlcndyaXR0ZW4uXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIGJlaW5nIGhvb2tlZCB1cC5cblx0ICogQHJldHVybnMge0Z1bmN0aW9ufVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0aG9vayhldmVudCwgY3R4LCBmbikge1xuXHRcdGlmICghZXZlbnQgfHwgdHlwZW9mIGV2ZW50ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgZXZlbnQgbmFtZSB0byBiZSBhIHZhbGlkIHN0cmluZy4nKTtcblx0XHR9XG5cblx0XHQvLyBzaGlmdCBhcmd1bWVudHMgaWYgbmVjZXNzYXJ5XG5cdFx0aWYgKHR5cGVvZiBjdHggPT09ICdmdW5jdGlvbicgJiYgIWZuKSB7XG5cdFx0XHRmbiA9IGN0eDtcblx0XHRcdGN0eCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKGN0eCAmJiB0eXBlb2YgY3R4ICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgY29udGV4dCB0byBiZSBhbiBvYmplY3QuJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgaG9va2VkIGZ1bmN0aW9uIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICguLi5hcmdzKSA9PiB7XG5cdFx0XHRjb25zdCBkYXRhID0ge1xuXHRcdFx0XHR0eXBlOiBldmVudCxcblx0XHRcdFx0Zm4sXG5cdFx0XHRcdGFyZ3MsXG5cdFx0XHRcdGN0eFxuXHRcdFx0fTtcblxuXHRcdFx0bG9nKCdjcmVhdGluZyBjaGFpbicsIGRhdGEpO1xuXG5cdFx0XHRjb25zdCBjaGFpbiA9IHRoaXMuY29tcG9zZSh7XG5cdFx0XHRcdHR5cGU6IGV2ZW50LFxuXHRcdFx0XHRjYWxsYmFjazogYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblx0XHRcdFx0XHRsb2coJ2ZpcmluZyBjYWxsYmFjaycsIHRoaXMpO1xuXHRcdFx0XHRcdHRoaXMucmVzdWx0ID0gYXdhaXQgdGhpcy5mbi5hcHBseSh0aGlzLmN0eCwgdGhpcy5hcmdzKTtcblx0XHRcdFx0XHRsb2coJ2NhbGxiYWNrIHJlc3VsdCA9JywgdGhpcy5yZXN1bHQpO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0cmFuc2Zvcm06IChyZXN1bHQsIGRhdGEpID0+IHJlc3VsdCB8fCBkYXRhXG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIGNoYWluLmFwcGx5KGRhdGEsIGRhdGEuYXJncykudGhlbihkYXRhID0+IGRhdGEucmVzdWx0KTtcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIExpbmtzIGFsbCBsaXN0ZW5lcnMgZnJvbSBhbm90aGVyIGhvb2sgZW1pdHRlciBpbnRvIHRoaXMgaW5zdGFuY2UuIFdoZW4gYW5cblx0ICogZXZlbnQgaXMgZW1pdHRlZCwgaXQgd2lsbCBub3RpZnkgYWxsIG9mIHRoaXMgaW5zdGFuY2UncyBsaXN0ZW5lcnMsIHRoZW5cblx0ICogbm90aWZ5IGFsbCBsaW5rZWQgaG9vayBlbWl0dGVyJ3MgbGlzdGVuZXJzLiBTYW1lIGFwcGxpZXMgdG8gaG9va2VkXG5cdCAqIGZ1bmN0aW9ucy5cblx0ICpcblx0ICogQHBhcmFtIHtIb29rRW1pdHRlcn0gZW1pdHRlciAtIEEgaG9vayBlbWl0dGVyIHRvIGxpbmsgdG8uXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbcHJlZml4XSAtIEEgc3RyaW5nIHRvIHByZWZpeCB0byBhbGwgZW1pdHRlZCBldmVudCBuYW1lcy5cblx0ICogQHJldHVybnMge0hvb2tFbWl0dGVyfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0bGluayhlbWl0dGVyLCBwcmVmaXgpIHtcblx0XHRpZiAoIShlbWl0dGVyIGluc3RhbmNlb2YgSG9va0VtaXR0ZXIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhcmd1bWVudCB0byBiZSBhIEhvb2tFbWl0dGVyLicpO1xuXHRcdH1cblxuXHRcdHRoaXMuX2xpbmtzLnB1c2goeyBlbWl0dGVyLCBwcmVmaXggfSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBVbmxpbmtzIGFsbCBsaXN0ZW5lcnMgZnJvbSBhbm90aGVyIGhvb2sgZW1pdHRlciBmcm9tIHRoaXMgaW5zdGFuY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7SG9va0VtaXR0ZXJ9IGVtaXR0ZXIgLSBBIGhvb2sgZW1pdHRlciB0byB1bmxpbmsuXG5cdCAqIEByZXR1cm5zIHtIb29rRW1pdHRlcn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHVubGluayhlbWl0dGVyKSB7XG5cdFx0aWYgKCEoZW1pdHRlciBpbnN0YW5jZW9mIEhvb2tFbWl0dGVyKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYXJndW1lbnQgdG8gYmUgYSBIb29rRW1pdHRlci4nKTtcblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2xpbmtzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5fbGlua3NbaV0uZW1pdHRlciA9PT0gZW1pdHRlcikge1xuXHRcdFx0XHR0aGlzLl9saW5rcy5zcGxpY2UoaS0tLCAxKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5leHBvcnQgeyBIb29rRW1pdHRlciB9O1xuZXhwb3J0IGRlZmF1bHQgSG9va0VtaXR0ZXI7XG4iXSwiZmlsZSI6ImluZGV4LmpzIn0= | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbIkVycm9yIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJyZXF1aXJlIiwibG9nIiwiSG9va0VtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsIl9ldmVudHMiLCJNYXAiLCJfbGlua3MiLCJldmVudHMiLCJvbiIsImV2ZW50IiwicHJpb3JpdHkiLCJsaXN0ZW5lciIsIlR5cGVFcnJvciIsInNwbGl0IiwiZXZ0Iiwic2hpZnQiLCJsaXN0ZW5lcnMiLCJnZXQiLCJzZXQiLCJwdXNoIiwib25jZSIsIndyYXBwZXIiLCJvZmYiLCJhcHBseSIsImFyZ3VtZW50cyIsImJpbmQiLCJkZWxldGUiLCJsZW4iLCJsZW5ndGgiLCJpIiwic3BsaWNlIiwiY29tcG9zZSIsInR5cGUiLCJjYWxsYmFjayIsInRyYW5zZm9ybSIsInJlc3VsdCIsInBheWxvYWQiLCJhcmdzIiwiZ2V0TGlzdGVuZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwibGlua2VkTGlzdGVuZXJzIiwibWFwIiwibGluayIsImVtaXR0ZXIiLCJwcmVmaXgiLCJjb25jYXQiLCJzb3J0IiwiYSIsImIiLCJwIiwiY3R4IiwiZGlzcGF0Y2giLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZpcmVkIiwibmV4dCIsInRoZW4iLCJjYXRjaCIsInVuZGVmaW5lZCIsImVtaXQiLCJob29rIiwiZm4iLCJkYXRhIiwiY2hhaW4iLCJ1bmxpbmsiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFLQTs7OztBQUxBO0FBQ0EsSUFBSSxDQUFDQSxLQUFLLENBQUNDLGlCQUFYLEVBQThCO0FBQzdCQyxFQUFBQSxPQUFPLENBQUMsNkJBQUQsQ0FBUDtBQUNBOztBQUlELE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFVLHdCQUFVLGNBQVYsQ0FBaEI7QUFFQTs7OztBQUdBLE1BQU1DLFdBQU4sQ0FBa0I7QUFDakI7Ozs7O0FBS0FDLEVBQUFBLFdBQVcsR0FBRztBQUNiLFNBQUtDLE9BQUwsR0FBZSxJQUFJQyxHQUFK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dCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmICghRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcblx0cmVxdWlyZSgnc291cmNlLW1hcC1zdXBwb3J0L3JlZ2lzdGVyJyk7XG59XG5cbmltcG9ydCBzbm9vcGxvZ2cgZnJvbSAnc25vb3Bsb2dnJztcblxuY29uc3QgeyBsb2cgfSA9IHNub29wbG9nZygnaG9vay1lbWl0dGVyJyk7XG5cbi8qKlxuICogRW1pdHMgZXZlbnRzIGFuZCBob29rcyB0byBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIGxpc3RlbmVycy5cbiAqL1xuY2xhc3MgSG9va0VtaXR0ZXIge1xuXHQvKipcblx0ICogQ29uc3RydWN0cyBhbiBIb29rRW1pdHRlciBvYmplY3QuXG5cdCAqXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLl9ldmVudHMgPSBuZXcgTWFwKCk7XG5cdFx0dGhpcy5fbGlua3MgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbiBpdGVyYXRvciBmb3IgcmV0dXJuaW5nIGFsbCBldmVudHMuXG5cdCAqIEB0eXBlIHtJdGVyYXRvcn1cblx0ICovXG5cdGdldCBldmVudHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2V2ZW50cztcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgLSBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgbmFtZXMgdG8gYWRkXG5cdCAqIHRoZSBsaXN0ZW5lciB0by5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtwcmlvcml0eT0wXSAtIFRoZSBwcmlvcml0eSBvZiBsaXN0ZW5lci4gVGhlIGhpZ2hlciB0aGVcblx0ICogcHJpb3JpdHksIHRoZSBzb29uZXIgaXQgd2lsbCBiZSBleGVjdXRlZC5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgLSBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZXZlbnQgaXMgZW1pdHRlZC5cblx0ICogQHJldHVybnMge0hvb2tFbWl0dGVyfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0b24oZXZlbnQsIHByaW9yaXR5ID0gMCwgbGlzdGVuZXIpIHtcblx0XHRpZiAoIWV2ZW50IHx8IHR5cGVvZiBldmVudCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGV2ZW50IG5hbWUgdG8gYmUgYSB2YWxpZCBzdHJpbmcuJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBwcmlvcml0eSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0bGlzdGVuZXIgPSBwcmlvcml0eTtcblx0XHRcdHByaW9yaXR5ID0gMDtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHByaW9yaXR5ICE9PSAnbnVtYmVyJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgcHJpb3JpdHkgdG8gYmUgYSBudW1iZXIuJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbi4nKTtcblx0XHR9XG5cblx0XHRsZXQgZXZlbnRzID0gZXZlbnQuc3BsaXQoL1xccy8pO1xuXHRcdGxldCBldnQ7XG5cblx0XHR3aGlsZSAoZXZ0ID0gZXZlbnRzLnNoaWZ0KCkpIHtcblx0XHRcdGlmIChldnQpIHtcblx0XHRcdFx0bGV0IGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50cy5nZXQoZXZ0KTtcblx0XHRcdFx0aWYgKCFsaXN0ZW5lcnMpIHtcblx0XHRcdFx0XHR0aGlzLl9ldmVudHMuc2V0KGV2dCwgbGlzdGVuZXJzID0gW10pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RlbmVycy5wdXNoKHsgbGlzdGVuZXIsIHByaW9yaXR5IH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIG9ubHkgYmUgY2FsbGVkIG9uY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCAtIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCBuYW1lcyB0byBhZGRcblx0ICogdGhlIGxpc3RlbmVyIHRvLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW3ByaW9yaXR5PTBdIC0gVGhlIHByaW9yaXR5IG9mIGxpc3RlbmVyLiBUaGUgaGlnaGVyIHRoZVxuXHQgKiBwcmlvcml0eSwgdGhlIHNvb25lciBpdCB3aWxsIGJlIGV4ZWN1dGVkLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBldmVudCBpcyBlbWl0dGVkLlxuXHQgKiBAcmV0dXJucyB7SG9va0VtaXR0ZXJ9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRvbmNlKGV2ZW50LCBwcmlvcml0eSA9IDAsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKCFldmVudCB8fCB0eXBlb2YgZXZlbnQgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBldmVudCBuYW1lIHRvIGJlIGEgdmFsaWQgc3RyaW5nLicpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgcHJpb3JpdHkgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGxpc3RlbmVyID0gcHJpb3JpdHk7XG5cdFx0XHRwcmlvcml0eSA9IDA7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgcHJpb3JpdHkgIT09ICdudW1iZXInKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBwcmlvcml0eSB0byBiZSBhIG51bWJlci4nKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLicpO1xuXHRcdH1cblxuXHRcdGxldCBldmVudHMgPSBldmVudC5zcGxpdCgvXFxzLyk7XG5cblx0XHRmb3IgKGxldCBldnQgb2YgZXZlbnRzKSB7XG5cdFx0XHRpZiAoZXZ0KSB7XG5cdFx0XHRcdGxldCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHMuZ2V0KGV2dCk7XG5cdFx0XHRcdGlmICghbGlzdGVuZXJzKSB7XG5cdFx0XHRcdFx0dGhpcy5fZXZlbnRzLnNldChldnQsIGxpc3RlbmVycyA9IFtdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgd3JhcHBlciA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHR0aGlzLm9mZihldnQsIHdyYXBwZXIpO1xuXHRcdFx0XHRcdGxpc3RlbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0XHRcdH0uYmluZCh0aGlzKTtcblx0XHRcdFx0bGlzdGVuZXJzLnB1c2goeyBsaXN0ZW5lcjogd3JhcHBlciwgcHJpb3JpdHkgfSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhbiBldmVudCBsaXN0ZW5lci5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IC0gT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IG5hbWVzIHRvIHJlbW92ZVxuXHQgKiB0aGUgbGlzdGVuZXIgZnJvbS5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW2xpc3RlbmVyXSAtIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi4gSWYgbm90IHNwZWNpZmllZCxcblx0ICogdGhlbiBhbGwgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50IGFyZSByZW1vdmVkLlxuXHQgKiBAcmV0dXJucyB7SG9va0VtaXR0ZXJ9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRvZmYoZXZlbnQsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKCFldmVudCB8fCB0eXBlb2YgZXZlbnQgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBldmVudCBuYW1lIHRvIGJlIGEgdmFsaWQgc3RyaW5nLicpO1xuXHRcdH1cblxuXHRcdGlmIChsaXN0ZW5lciAmJiB0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG5cdFx0fVxuXG5cdFx0bGV0IGV2ZW50cyA9IGV2ZW50LnNwbGl0KC9cXHMvKTtcblx0XHRsZXQgZXZ0O1xuXG5cdFx0d2hpbGUgKGV2dCA9IGV2ZW50cy5zaGlmdCgpKSB7XG5cdFx0XHRpZiAoIWxpc3RlbmVyKSB7XG5cdFx0XHRcdC8vIHJlbW92ZSB0aGVtIGFsbFxuXHRcdFx0XHR0aGlzLl9ldmVudHMuZGVsZXRlKGV2dCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzLmdldChldnQpO1xuXHRcdFx0aWYgKCFsaXN0ZW5lcnMpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7XG5cblx0XHRcdGlmIChsZW4gPT09IDEgJiYgbGlzdGVuZXJzWzBdLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuXHRcdFx0XHQvLyB0aGVyZSB3YXMgb25seSBvbmUgZXZlbnQgYW5kIHRoaXMgd2FzIGl0LCBzb1xuXHRcdFx0XHQvLyBudWtlIHRoZSBlbnRpcmUgZXZlbnQgZnJvbSB0aGUgbWFwXG5cdFx0XHRcdHRoaXMuX2V2ZW50cy5kZWxldGUoZXZ0KTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdFx0aWYgKGxpc3RlbmVyc1tpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcblx0XHRcdFx0XHRsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYW4gYXJyYXkgb2YgbGlzdGVuZXJzIGludG8gYSBwcm9taXNlIGNoYWluXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLmNhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNhbGwgYWZ0ZXJcblx0ICogYWxsIGxpc3RlbmVycyBoYXZlIGJlZW4gZmlyZWQuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLnRyYW5zZm9ybV0gLSBBbiBmdW5jdGlvbiB0aGF0IHRyYW5zZm9ybXMgYSByZXN1bHRcblx0ICogd2l0aCB0aGUgb3JpZ2luYWwgcGF5bG9hZC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnR5cGVdIC0gVGhlIGV2ZW50IHR5cGUuXG5cdCAqIEByZXR1cm5zIHtGdW5jdGlvbn1cblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqL1xuXHRjb21wb3NlKHsgdHlwZSwgY2FsbGJhY2ssIHRyYW5zZm9ybSB9KSB7XG5cdFx0aWYgKGNhbGxiYWNrICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgY2FsbGJhY2sgdG8gYmUgYSBmdW5jdGlvbi4nKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHRyYW5zZm9ybSAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Ly8gZGVmaW5lIHRoZSBkZWZhdWx0IHRyYW5zZm9ybSBmb3IgcGFzc2luZyByZXN1bHRzIHRvIHRoZSBuZXh0XG5cdFx0XHQvLyBsaXN0ZW5lciBpbiB0aGUgY2hhaW5cblx0XHRcdHRyYW5zZm9ybSA9IChyZXN1bHQsIHBheWxvYWQpID0+ICh7XG5cdFx0XHRcdHR5cGU6IHBheWxvYWQudHlwZSxcblx0XHRcdFx0YXJnczogcmVzdWx0IHx8IHBheWxvYWQuYXJnc1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gY3JlYXRlIHRoZSBmdW5jdGlvbiB0aGF0IGZldGNoZXMgdGhlIGV2ZW50cyBzaW5jZSB0aGUgbGlzdCBvZlxuXHRcdC8vIGxpc3RlbmVycyBtYXkgY2hhbmdlIGJlZm9yZSB0aGUgaG9vayBpcyBjYWxsZWRcblx0XHRjb25zdCBnZXRMaXN0ZW5lcnMgPSAoKSA9PiB7XG5cdFx0XHRjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHMuZ2V0KHR5cGUpIHx8IFtdO1xuXHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KGxpc3RlbmVycykpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbGlzdGVuZXJzIHRvIGJlIGFuIGFycmF5LicpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBsaW5rZWRMaXN0ZW5lcnMgPSB0aGlzLl9saW5rcy5tYXAobGluayA9PiB7XG5cdFx0XHRcdHJldHVybiBsaW5rLmVtaXR0ZXIuZXZlbnRzLmdldCgobGluay5wcmVmaXggfHwgJycpICsgdHlwZSkgfHwgW107XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIGxpc3RlbmVyc1xuXHRcdFx0XHQuY29uY2F0LmFwcGx5KGxpc3RlbmVycywgbGlua2VkTGlzdGVuZXJzKVxuXHRcdFx0XHQuc29ydCgoYSwgYikgPT4gYi5wcmlvcml0eSAtIGEucHJpb3JpdHkpXG5cdFx0XHRcdC5tYXAocCA9PiB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBwLmxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLicpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gcC5saXN0ZW5lcjtcblx0XHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdC8vIHJldHVybiB0aGUgd3JhcHBlZCBmdW5jdGlvblxuXHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdFx0Y29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKCk7XG5cdFx0XHRjb25zdCBjdHggPSB0aGlzO1xuXG5cdFx0XHRpZiAoY2FsbGJhY2spIHtcblx0XHRcdFx0bGlzdGVuZXJzLnB1c2goY2FsbGJhY2spO1xuXHRcdFx0fVxuXG5cdFx0XHRsb2coYHJ1bm5pbmcgY2hhaW4gd2l0aCAke2xpc3RlbmVycy5sZW5ndGh9IGxpc3RlbmVyc2ApO1xuXG5cdFx0XHQvLyBzdGFydCB0aGUgY2hhaW4gYW5kIHJldHVybiBpdHMgcHJvbWlzZVxuXHRcdFx0cmV0dXJuIGRpc3BhdGNoKHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0YXJnczogYXJnc1xuXHRcdFx0fSwgMCk7XG5cblx0XHRcdGZ1bmN0aW9uIGRpc3BhdGNoKHBheWxvYWQsIGkpIHtcblx0XHRcdFx0bGV0IGxpc3RlbmVyID0gbGlzdGVuZXJzW2ldO1xuXHRcdFx0XHRpZiAoIWxpc3RlbmVyKSB7XG5cdFx0XHRcdFx0bG9nKCdlbmQgb2YgdGhlIGxpbmUnKTtcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBheWxvYWQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0XHRsZXQgZmlyZWQgPSBmYWxzZTtcblxuXHRcdFx0XHRcdC8vIGNvbnN0cnVjdCB0aGUgYXJnc1xuXHRcdFx0XHRcdGNvbnN0IGFyZ3MgPSBbIC4uLihBcnJheS5pc0FycmF5KHBheWxvYWQuYXJncykgPyBwYXlsb2FkLmFyZ3MgOiBbIHBheWxvYWQuYXJncyBdKSwgZnVuY3Rpb24gbmV4dChyZXN1bHQpIHtcblx0XHRcdFx0XHRcdGlmIChmaXJlZCkge1xuXHRcdFx0XHRcdFx0XHRsb2coJ25leHQoKSBhbHJlYWR5IGZpcmVkJyk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0ZmlyZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0XHQvLyBpZiBzb21lYm9keSBtaXhlcyBwYXJhZGlnbXMgYW5kIGNhbGxzIG5leHQoKS50aGVuKCksXG5cdFx0XHRcdFx0XHQvLyBhdCBsZWFzdCB0aGVpciBmdW5jdGlvbiB3aWxsIHdhaXQgZm9yIHRoZSBuZXh0IGxpc3RlbmVyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlzcGF0Y2gocmVzdWx0IHx8IHBheWxvYWQsIGkgKyAxKVxuXHRcdFx0XHRcdFx0XHQudGhlbihyZXN1bHQgPT4gcmVzdWx0IHx8IHBheWxvYWQpXG5cdFx0XHRcdFx0XHRcdC5jYXRjaChyZWplY3QpO1xuXHRcdFx0XHRcdH0gXTtcblxuXHRcdFx0XHRcdGxvZyhgY2FsbGluZyBsaXN0ZW5lciAke2l9YCk7XG5cblx0XHRcdFx0XHQvLyBjYWxsIHRoZSBsaXN0ZW5lclxuXHRcdFx0XHRcdGxldCByZXN1bHQgPSBsaXN0ZW5lci5hcHBseShjdHgsIGFyZ3MpO1xuXG5cdFx0XHRcdFx0bG9nKCdsaXN0ZW5lciByZXR1cm5lZDonLCByZXN1bHQpO1xuXG5cdFx0XHRcdFx0aWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkICYmIGZpcmVkKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBpZiB3ZSBnb3QgYmFjayBhIHByb21pc2UsIHdlIGhhdmUgdG8gd2FpdFxuXHRcdFx0XHRcdGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0XG5cdFx0XHRcdFx0XHRcdC50aGVuKHJlc3VsdCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gdHJhbnNmb3JtKHJlc3VsdCwgcGF5bG9hZCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZpcmVkID8gcmVzdWx0IDogZGlzcGF0Y2gocmVzdWx0LCBpICsgMSk7XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdC50aGVuKHJlc29sdmUpXG5cdFx0XHRcdFx0XHRcdC5jYXRjaChyZWplY3QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBkaXNwYXRjaCh0cmFuc2Zvcm0ocmVzdWx0LCBwYXlsb2FkKSwgaSArIDEpXG5cdFx0XHRcdFx0XHQudGhlbihyZXNvbHZlLCByZWplY3QpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEVtaXRzIG9uZSBvciBtb3JlIGV2ZW50cy5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIGVtaXQuXG5cdCAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIC0gT25lIG9yIG1vcmUgYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gYmUgZW1pdHRlZFxuXHQgKiB3aXRoIHRoZSBldmVudC5cblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG5cdFx0aWYgKCFldmVudCB8fCB0eXBlb2YgZXZlbnQgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBldmVudCBuYW1lIHRvIGJlIGEgdmFsaWQgc3RyaW5nLicpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmNvbXBvc2Uoe1xuXHRcdFx0dHlwZTogZXZlbnRcblx0XHR9KS5hcHBseSh0aGlzLCBhcmdzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgZnVuY3Rpb24gaG9vay5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IC0gVGhlIG5hbWUgb2YgdGhlIGhvb2sncyBldmVudC5cblx0ICogQHBhcmFtIHtPYmplY3R9IFtjdHhdIC0gVGhlIGNvbnRleHQgdG8gcnVuIHRoZSBmdW5jdGlvbiBpbi4gVXNlZnVsIGlmXG5cdCAqIGBmbmAgaXMgZ29pbmcgdG8gYmUgb3ZlcndyaXR0ZW4uXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIGJlaW5nIGhvb2tlZCB1cC5cblx0ICogQHJldHVybnMge0Z1bmN0aW9ufVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0aG9vayhldmVudCwgY3R4LCBmbikge1xuXHRcdGlmICghZXZlbnQgfHwgdHlwZW9mIGV2ZW50ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgZXZlbnQgbmFtZSB0byBiZSBhIHZhbGlkIHN0cmluZy4nKTtcblx0XHR9XG5cblx0XHQvLyBzaGlmdCBhcmd1bWVudHMgaWYgbmVjZXNzYXJ5XG5cdFx0aWYgKHR5cGVvZiBjdHggPT09ICdmdW5jdGlvbicgJiYgIWZuKSB7XG5cdFx0XHRmbiA9IGN0eDtcblx0XHRcdGN0eCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKGN0eCAmJiB0eXBlb2YgY3R4ICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgY29udGV4dCB0byBiZSBhbiBvYmplY3QuJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgaG9va2VkIGZ1bmN0aW9uIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICguLi5hcmdzKSA9PiB7XG5cdFx0XHRjb25zdCBkYXRhID0ge1xuXHRcdFx0XHR0eXBlOiBldmVudCxcblx0XHRcdFx0Zm4sXG5cdFx0XHRcdGFyZ3MsXG5cdFx0XHRcdGN0eFxuXHRcdFx0fTtcblxuXHRcdFx0bG9nKGBjcmVhdGluZyBjaGFpbjogJHtldmVudH1gKTtcblxuXHRcdFx0Y29uc3QgY2hhaW4gPSB0aGlzLmNvbXBvc2Uoe1xuXHRcdFx0XHR0eXBlOiBldmVudCxcblx0XHRcdFx0Y2FsbGJhY2s6IGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzKSB7XG5cdFx0XHRcdFx0bG9nKCdmaXJpbmcgY2FsbGJhY2suLi4nKTtcblx0XHRcdFx0XHR0aGlzLnJlc3VsdCA9IGF3YWl0IHRoaXMuZm4uYXBwbHkodGhpcy5jdHgsIHRoaXMuYXJncyk7XG5cdFx0XHRcdFx0bG9nKCdjYWxsYmFjayByZXN1bHQgPScsIHRoaXMucmVzdWx0KTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblx0XHRcdFx0dHJhbnNmb3JtOiAocmVzdWx0LCBkYXRhKSA9PiByZXN1bHQgfHwgZGF0YVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBjaGFpbi5hcHBseShkYXRhLCBkYXRhLmFyZ3MpLnRoZW4oZGF0YSA9PiBkYXRhLnJlc3VsdCk7XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBMaW5rcyBhbGwgbGlzdGVuZXJzIGZyb20gYW5vdGhlciBob29rIGVtaXR0ZXIgaW50byB0aGlzIGluc3RhbmNlLiBXaGVuIGFuXG5cdCAqIGV2ZW50IGlzIGVtaXR0ZWQsIGl0IHdpbGwgbm90aWZ5IGFsbCBvZiB0aGlzIGluc3RhbmNlJ3MgbGlzdGVuZXJzLCB0aGVuXG5cdCAqIG5vdGlmeSBhbGwgbGlua2VkIGhvb2sgZW1pdHRlcidzIGxpc3RlbmVycy4gU2FtZSBhcHBsaWVzIHRvIGhvb2tlZFxuXHQgKiBmdW5jdGlvbnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7SG9va0VtaXR0ZXJ9IGVtaXR0ZXIgLSBBIGhvb2sgZW1pdHRlciB0byBsaW5rIHRvLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW3ByZWZpeF0gLSBBIHN0cmluZyB0byBwcmVmaXggdG8gYWxsIGVtaXR0ZWQgZXZlbnQgbmFtZXMuXG5cdCAqIEByZXR1cm5zIHtIb29rRW1pdHRlcn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGxpbmsoZW1pdHRlciwgcHJlZml4KSB7XG5cdFx0aWYgKCEoZW1pdHRlciBpbnN0YW5jZW9mIEhvb2tFbWl0dGVyKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYXJndW1lbnQgdG8gYmUgYSBIb29rRW1pdHRlci4nKTtcblx0XHR9XG5cblx0XHR0aGlzLl9saW5rcy5wdXNoKHsgZW1pdHRlciwgcHJlZml4IH0pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVW5saW5rcyBhbGwgbGlzdGVuZXJzIGZyb20gYW5vdGhlciBob29rIGVtaXR0ZXIgZnJvbSB0aGlzIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hvb2tFbWl0dGVyfSBlbWl0dGVyIC0gQSBob29rIGVtaXR0ZXIgdG8gdW5saW5rLlxuXHQgKiBAcmV0dXJucyB7SG9va0VtaXR0ZXJ9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHR1bmxpbmsoZW1pdHRlcikge1xuXHRcdGlmICghKGVtaXR0ZXIgaW5zdGFuY2VvZiBIb29rRW1pdHRlcikpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGFyZ3VtZW50IHRvIGJlIGEgSG9va0VtaXR0ZXIuJyk7XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9saW5rcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMuX2xpbmtzW2ldLmVtaXR0ZXIgPT09IGVtaXR0ZXIpIHtcblx0XHRcdFx0dGhpcy5fbGlua3Muc3BsaWNlKGktLSwgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuZXhwb3J0IHsgSG9va0VtaXR0ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEhvb2tFbWl0dGVyO1xuIl0sImZpbGUiOiJpbmRleC5qcyJ9 |
{ | ||
"name": "hook-emitter", | ||
"version": "3.0.2", | ||
"version": "3.1.0", | ||
"description": "Event emitter with support for asynchronous handlers and a sweet function hook mechanism.", | ||
@@ -24,22 +24,18 @@ "main": "./dist/index.js", | ||
"docs": "gulp docs", | ||
"prepublish": "gulp build", | ||
"prepare": "gulp build", | ||
"test": "gulp test" | ||
}, | ||
"dependencies": { | ||
"snooplogg": "^1.12.1", | ||
"source-map-support": "^0.5.6" | ||
"snooplogg": "^1.13.1", | ||
"source-map-support": "^0.5.9" | ||
}, | ||
"devDependencies": { | ||
"@babel/core": "latest", | ||
"@babel/register": "latest", | ||
"babel-eslint": "^8.2.5", | ||
"babel-plugin-istanbul": "^4.1.6", | ||
"babel-plugin-transform-class-properties": "next", | ||
"babel-plugin-transform-es2015-destructuring": "next", | ||
"babel-plugin-transform-es2015-modules-commonjs": "next", | ||
"babel-plugin-transform-es2015-parameters": "next", | ||
"babel-plugin-transform-object-rest-spread": "next", | ||
"@babel/core": "^7.1.0", | ||
"@babel/plugin-transform-modules-commonjs": "^7.1.0", | ||
"@babel/register": "^7.0.0", | ||
"ansi-colors": "^3.0.6", | ||
"babel-eslint": "^9.0.0", | ||
"babel-loader": "^8.0.2", | ||
"babel-plugin-istanbul": "^5.0.1", | ||
"chai": "^4.1.2", | ||
"chai-as-promised": "^7.1.1", | ||
"codeclimate-test-reporter": "^0.5.0", | ||
"coveralls": "^3.0.2", | ||
@@ -49,6 +45,9 @@ "esdoc": "^1.1.0", | ||
"esdoc-standard-plugin": "^1.0.0", | ||
"eslint": "^5.6.0", | ||
"eslint-plugin-mocha": "^5.2.0", | ||
"eslint-plugin-security": "^1.4.0", | ||
"fs-extra": "^6.0.1", | ||
"fancy-log": "^1.3.2", | ||
"fs-extra": "^7.0.0", | ||
"gulp": "^3.9.1", | ||
"gulp-babel": "next", | ||
"gulp-babel": "^8.0.0", | ||
"gulp-debug": "^4.0.0", | ||
@@ -59,14 +58,8 @@ "gulp-eslint": "^5.0.0", | ||
"gulp-sourcemaps": "^2.6.4", | ||
"gulp-util": "^3.0.8", | ||
"mocha": "^5.2.0", | ||
"nyc": "^12.0.2", | ||
"sinon": "^6.1.3", | ||
"sinon-chai": "^3.2.0" | ||
"nyc": "^13.0.1" | ||
}, | ||
"homepage": "https://github.com/cb1kenobi/hook-emitter", | ||
"bugs": "https://github.com/cb1kenobi/hook-emitter/issues", | ||
"repository": { | ||
"type": "git", | ||
"url": "git://github.com/cb1kenobi/hook-emitter.git" | ||
}, | ||
"repository": "https://github.com/cb1kenobi/hook-emitter", | ||
"engines": { | ||
@@ -73,0 +66,0 @@ "node": ">=8.0.0" |
# hook-emitter | ||
[](https://greenkeeper.io/) | ||
[![NPM Version][npm-image]][npm-url] | ||
@@ -9,3 +7,3 @@ [![NPM Downloads][downloads-image]][downloads-url] | ||
[![Test Coverage][coveralls-image]][coveralls-url] | ||
[![Code Climate][codeclimate-image]][codeclimate-url] | ||
[![Greenkeeper badge][greenkeeper-image]][greenkeeper-url] | ||
[![Deps][david-image]][david-url] | ||
@@ -24,3 +22,3 @@ [![Dev Deps][david-dev-image]][david-dev-url] | ||
```javascript | ||
```js | ||
import HookEmitter from 'hook-emitter'; | ||
@@ -45,3 +43,3 @@ | ||
```javascript | ||
```js | ||
const emitter = new HookEmitter(); | ||
@@ -77,3 +75,3 @@ | ||
```javascript | ||
```js | ||
const emitter = new HookEmitter(); | ||
@@ -171,3 +169,3 @@ | ||
```javascript | ||
```js | ||
emitter.on('foo', function (x, y, next) { | ||
@@ -212,4 +210,4 @@ console.log('event type:', this.type); | ||
[coveralls-url]: https://coveralls.io/r/cb1kenobi/hook-emitter | ||
[codeclimate-image]: https://img.shields.io/codeclimate/github/cb1kenobi/hook-emitter.svg | ||
[codeclimate-url]: https://codeclimate.com/github/cb1kenobi/hook-emitter | ||
[greenkeeper-image]: https://badges.greenkeeper.io/cb1kenobi/hook-emitter.svg | ||
[greenkeeper-url]: https://greenkeeper.io/ | ||
[david-image]: https://img.shields.io/david/cb1kenobi/hook-emitter.svg | ||
@@ -216,0 +214,0 @@ [david-url]: https://david-dm.org/cb1kenobi/hook-emitter |
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
26
48343
465
211
1
Updatedsnooplogg@^1.13.1
Updatedsource-map-support@^0.5.9