Comparing version 0.3.0 to 0.4.0-beta
291
dist/cli.js
@@ -8,21 +8,45 @@ "use strict"; | ||
var _command = _interopRequireDefault(require("./command")); | ||
var _command = _interopRequireDefault(require("./parser/command")); | ||
var _context = _interopRequireDefault(require("./context")); | ||
var _context = _interopRequireDefault(require("./parser/context")); | ||
var _debug2 = _interopRequireDefault(require("./debug")); | ||
var _debug2 = _interopRequireDefault(require("./lib/debug")); | ||
var _errors = _interopRequireDefault(require("./errors")); | ||
var _errors = _interopRequireDefault(require("./lib/errors")); | ||
var _util = require("./util"); | ||
var _extension = _interopRequireDefault(require("./parser/extension")); | ||
var _help = _interopRequireDefault(require("./commands/help")); | ||
var _parser = _interopRequireDefault(require("./parser/parser")); | ||
var _outputStream = _interopRequireDefault(require("./render/output-stream")); | ||
var _console = require("console"); | ||
var _util = require("./lib/util"); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } | ||
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } | ||
function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } | ||
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } | ||
const _debug = (0, _debug2.default)('cli-kit:cli'), | ||
log = _debug.log; | ||
error = _debug.error, | ||
log = _debug.log, | ||
warn = _debug.warn; | ||
const highlight = _debug2.default.styles.highlight; | ||
const pluralize = _debug2.default.pluralize; | ||
/** | ||
* Defines a CLI context and is responsible for parsing the command line arguments. | ||
* | ||
* @extends {Context} | ||
*/ | ||
class CLI extends _context.default { | ||
@@ -37,12 +61,19 @@ /** | ||
* @param {Boolean} [params.defaultCommand] - The default command to execute. | ||
* @param {Boolean} [params.errorIfUnknownCommand=true] - When `true`, `help` is enabled, and | ||
* the parser didn't find a command, but it did find an unknown argument, it will show the help | ||
* screen with an unknown command error. | ||
* @param {Boolean} [params.help=false] - When `true`, enables the built-in help command. | ||
* @param {Number} [params.helpExitCode] - The exit code to return when the help command is | ||
* finished. | ||
* @param {Boolean} [params.hideNoBannerOption=false] - When `true` and a `banner` is specified, | ||
* it does not add the `--no-banner` option. | ||
* @param {Boolean} [params.hideNoColorOption=false] - When `true` and `colors` is enabled, it | ||
* does not add the `--no-color` option. | ||
* @param {String} [params.name] - The name of the program. | ||
* @param {Boolean} [params.hideNoBannerOption=false] - When `true` and a `banner` is specified, it | ||
* does not add the `--no-banner` option. | ||
* @param {Boolean} [params.hideNoColorOption=false] - When `true` and `colors` is enabled, it does | ||
* not add the `--no-color` option. | ||
* @param {Object|Writable} [params.out=process.stdout] - A stream to write output such as the | ||
* help screen or an object with a `write()` method. | ||
* @param {Object} [params.renderOpts] - Various render options to control the output stream | ||
* such as the display width. | ||
* @param {Object|stream.Writable} [params.stdout=process.stdout] - A stream or an object with a | ||
* `write()` method to write output such as the help screen to. | ||
* @param {Object|stream.Writable} [params.stderr=process.stderr] - A stream or an object with a | ||
* `write()` method to write error messages to. | ||
* @param {Boolean} [params.showHelpOnError=true] - If an error occurs and `help` is enabled, | ||
@@ -52,4 +83,2 @@ * then display the error before the help information. | ||
* @param {String} [params.version] - The program version. | ||
* @param {Number} [params.width] - The number of characters to wrap long descriptions. Defaults | ||
* to `process.stdout.columns` if exists, otherwise `100`. Must be at least `40`. | ||
* @access public | ||
@@ -60,3 +89,3 @@ */ | ||
if (typeof params !== 'object' || Array.isArray(params)) { | ||
if (!params || typeof params !== 'object' || Array.isArray(params)) { | ||
throw _errors.default.INVALID_ARGUMENT('Expected CLI parameters to be an object or Context', { | ||
@@ -69,13 +98,21 @@ name: 'params', | ||
if (params.out && (typeof params.out !== 'object' || typeof params.out.write !== 'function')) { | ||
throw _errors.default.INVALID_ARGUMENT('Expected output stream to be a writable stream', { | ||
name: 'params.out', | ||
if (params.banner !== undefined && typeof params.banner !== 'string' && typeof params.banner !== 'function') { | ||
throw _errors.default.INVALID_ARGUMENT('Expected banner to be a string or function', { | ||
name: 'banner', | ||
scope: 'CLI.constructor', | ||
value: params.out | ||
value: params.banner | ||
}); | ||
} | ||
if (params.extensions && typeof params.extensions !== 'object') { | ||
throw _errors.default.INVALID_ARGUMENT('Expected extensions to be an array of extension paths or an object of names to extension paths', { | ||
name: 'extensions', | ||
scope: 'CLI.constructor', | ||
value: params.extensions | ||
}); | ||
} | ||
if (params.helpExitCode !== undefined && typeof params.helpExitCode !== 'number') { | ||
throw _errors.default.INVALID_ARGUMENT('Expected help exit code to be a number', { | ||
name: 'params.helpExitCode', | ||
name: 'helpExitCode', | ||
scope: 'CLI.constructor', | ||
@@ -86,30 +123,47 @@ value: params.helpExitCode | ||
if (params.width !== undefined && typeof params.width !== 'number') { | ||
throw _errors.default.INVALID_ARGUMENT('Expected width to be a number', { | ||
name: 'params.width', | ||
if (params.stdout && (typeof params.stdout !== 'object' || typeof params.stdout.write !== 'function')) { | ||
throw _errors.default.INVALID_ARGUMENT('Expected stdout stream to be a writable stream', { | ||
name: 'stdout', | ||
scope: 'CLI.constructor', | ||
value: params.width | ||
value: params.stdout | ||
}); | ||
} | ||
if (params.banner !== undefined && typeof params.banner !== 'string' && typeof params.banner !== 'function') { | ||
throw _errors.default.INVALID_ARGUMENT('Expected banner to be a string or function', { | ||
name: 'params.banner', | ||
if (params.stderr && (typeof params.stderr !== 'object' || typeof params.stderr.write !== 'function')) { | ||
throw _errors.default.INVALID_ARGUMENT('Expected stderr stream to be a writable stream', { | ||
name: 'stderr', | ||
scope: 'CLI.constructor', | ||
value: params.banner | ||
value: params.stderr | ||
}); | ||
} | ||
params.colors = params.colors !== false; | ||
params.name || (params.name = 'program'); | ||
params.title || (params.title = 'Global'); // extract params that we don't want mixed in | ||
super({ | ||
args: params.args, | ||
camelCase: params.camelCase, | ||
commands: params.commands, | ||
desc: params.desc, | ||
name: params.name || 'program', | ||
options: params.options, | ||
title: params.title || 'Global', | ||
treatUnknownOptionsAsArguments: params.treatUnknownOptionsAsArguments | ||
}); | ||
(0, _util.declareCLIKitClass)(this, 'CLI'); | ||
this.banner = params.banner; | ||
this.colors = params.colors !== false; | ||
this.errorIfUnknownCommand = params.errorIfUnknownCommand !== false; | ||
this.helpExitCode = params.helpExitCode; | ||
this.warnings = []; | ||
const renderOpts = Object.assign({ | ||
markdown: true | ||
}, params.renderOpts); // init the output streams | ||
const extensions = params.extensions, | ||
hideNoBannerOption = params.hideNoBannerOption, | ||
hideNoColorOption = params.hideNoColorOption; | ||
delete params.extensions; | ||
delete params.hideNoBannerOption; | ||
delete params.hideNoColorOption; | ||
super(params); | ||
(0, _util.declareCLIKitClass)(this, 'CLI'); // set the default command | ||
this.stdout = new _outputStream.default(renderOpts); | ||
this.stdout.pipe(params.stdout || process.stdout); | ||
this.stderr = new _outputStream.default(renderOpts); | ||
this.stderr.pipe(params.stderr || process.stderr); | ||
process.on('exit', () => { | ||
this.stdout.end(); | ||
this.stderr.end(); | ||
}); | ||
this.console = new _console.Console(this.stdout, this.stderr); // set the default command | ||
@@ -123,21 +177,6 @@ this.defaultCommand = params.defaultCommand; // add the built-in help | ||
this.defaultCommand = 'help'; | ||
} | ||
} // note: we must clone the help command params since the object gets modified | ||
this.command('help', { | ||
hidden: true, | ||
async action(_ref) { | ||
let contexts = _ref.contexts, | ||
err = _ref.err; | ||
// the first context is the help command, so just skip to the second context | ||
await contexts[1].renderHelp({ | ||
err | ||
}); // istanbul ignore if | ||
if (params.helpExitCode !== undefined) { | ||
process.exit(params.helpExitCode); | ||
} | ||
} | ||
}); | ||
this.command('help', Object.assign({}, _help.default)); | ||
this.option('-h, --help', 'displays the help screen'); | ||
@@ -147,8 +186,4 @@ } // add the --no-banner flag | ||
if (this.banner && !hideNoBannerOption) { | ||
this.showBanner = true; | ||
if (this.banner && !params.hideNoBannerOption) { | ||
this.option('--no-banner', { | ||
callback: value => { | ||
this.showBanner = value; | ||
}, | ||
desc: 'suppress the banner' | ||
@@ -159,3 +194,3 @@ }); | ||
if (this.colors && !hideNoColorOption) { | ||
if (this.colors && !params.hideNoColorOption) { | ||
this.option('--no-color', { | ||
@@ -170,6 +205,6 @@ aliases: ['--no-colors'], | ||
this.option('-v, --version', { | ||
callback: () => { | ||
this.showBanner = false; | ||
const out = this.get('out', process.stdout); | ||
out.write(`${params.version}\n`); | ||
callback: async (_ref) => { | ||
let next = _ref.next; | ||
await next(); | ||
this.get('stdout').write(`${params.version}\n`); | ||
process.exit(0); | ||
@@ -182,10 +217,27 @@ }, | ||
if (Array.isArray(extensions)) { | ||
for (const extensionPath of extensions) { | ||
this.extension(extensionPath); | ||
if (params.extensions) { | ||
if (Array.isArray(params.extensions)) { | ||
for (const ext of params.extensions) { | ||
try { | ||
this.extension(ext); | ||
} catch (e) { | ||
this.warnings.push(e); | ||
warn(e); | ||
} | ||
} | ||
} else { | ||
for (const _ref2 of Object.entries(params.extensions)) { | ||
var _ref3 = _slicedToArray(_ref2, 2); | ||
const name = _ref3[0]; | ||
const ext = _ref3[1]; | ||
try { | ||
this.extension(ext, name); | ||
} catch (e) { | ||
this.warnings.push(e); | ||
warn(e); | ||
} | ||
} | ||
} | ||
} else if (typeof extensions === 'object') { | ||
for (const name of Object.keys(extensions)) { | ||
this.extension(extensions[name], name); | ||
} | ||
} | ||
@@ -212,62 +264,64 @@ } | ||
let banner = this.get('banner'); | ||
banner = banner && String(typeof banner === 'function' ? await banner() : banner).trim(); | ||
const out = this.get('out', process.stdout); | ||
const originalWrite = out.write; // if we have a banner, then override write() so we can immediately write the banner | ||
const parser = new _parser.default(); | ||
if (banner) { | ||
const dataRegExp = /^\s*[<{]/; | ||
try { | ||
const _ref4 = await parser.parse(unparsedArgs || process.argv.slice(2), this), | ||
_ = _ref4._, | ||
argv = _ref4.argv, | ||
contexts = _ref4.contexts, | ||
unknown = _ref4.unknown; | ||
out.write = (chunk, encoding, cb) => { | ||
if (typeof encoding === 'function') { | ||
cb = encoding; | ||
encoding = null; | ||
} | ||
let cmd = contexts[0]; | ||
log('Parsing complete: ' + `${pluralize('option', Object.keys(argv).length, true)}, ` + `${pluralize('unknown option', Object.keys(unknown).length, true)}, ` + `${pluralize('arg', _.length, true)}, ` + `${pluralize('context', contexts.length, true)}`); // wire up the banner | ||
if (typeof cb !== 'function') { | ||
cb = () => {}; | ||
} // restore the original write; | ||
let banner = this.get('banner'); | ||
if (banner && argv.banner) { | ||
banner = String(typeof banner === 'function' ? await banner() : banner).trim(); | ||
out.write = originalWrite; | ||
const showBanner = write => { | ||
banner && write(`${banner}\n\n`); | ||
banner = null; | ||
}; | ||
if (encoding === 'base64' || encoding === 'binary' || encoding === 'hex') {// noop | ||
} else if (this.get('showBanner', true) && !dataRegExp.test(chunk)) { | ||
originalWrite.call(out, `${banner}\n\n`); | ||
} | ||
this.stdout.on('start', showBanner); | ||
this.stderr.on('start', showBanner); | ||
} | ||
return originalWrite.call(out, chunk, encoding, cb); | ||
}; | ||
} | ||
const results = { | ||
_, | ||
argv, | ||
console: this.console, | ||
contexts, | ||
unknown, | ||
warnings: this.warnings | ||
}; // determine the command to run | ||
let $args; | ||
try { | ||
$args = await this.parse(unparsedArgs ? unparsedArgs.slice() : process.argv.slice(2)); | ||
let cmd = $args.contexts[0]; | ||
if (this.help && $args.argv.help) { | ||
if (this.help && argv.help && (!(cmd instanceof _extension.default) || cmd.isCLIKitExtension)) { | ||
log('Selected help command'); | ||
cmd = this.commands.help; | ||
$args.contexts.unshift(cmd); | ||
} else if (!(cmd instanceof _command.default) && this.defaultCommand && this.commands[this.defaultCommand] instanceof _command.default) { | ||
cmd = this.commands.get('help'); | ||
parser.contexts.unshift(cmd); | ||
} else if (!(cmd instanceof _command.default) && this.defaultCommand && this.commands.has(this.defaultCommand)) { | ||
log(`Selected default command: ${this.defaultCommand}`); | ||
cmd = this.commands[this.defaultCommand]; | ||
$args.contexts.unshift(cmd); | ||
} | ||
cmd = this.commands.get(this.defaultCommand); | ||
parser.contexts.unshift(cmd); | ||
} // execute the command | ||
let result; // execute the command | ||
if (cmd && typeof cmd.action === 'function') { | ||
result = await cmd.action.call(this, $args); | ||
log(`Executing command: ${highlight(cmd.name)}`); | ||
return await cmd.action(results); | ||
} | ||
return result || $args; | ||
log('No command to execute, returning parsed arguments'); | ||
return results; | ||
} catch (err) { | ||
const help = this.help && this.showHelpOnError !== false && this.commands.help; | ||
error(err); | ||
const help = this.help && this.showHelpOnError !== false && this.commands.get('help'); | ||
if (help) { | ||
return await help.action({ | ||
contexts: [help, ...(err.contexts || $args && $args.contexts || [this])], | ||
err | ||
contexts: err.contexts || parser.contexts || [this], | ||
err, | ||
warnings: this.warnings | ||
}); | ||
@@ -278,5 +332,4 @@ } | ||
} finally { | ||
if (banner) { | ||
out.write = originalWrite; | ||
} | ||
this.stdout.end(); | ||
this.stderr.end(); | ||
} | ||
@@ -288,2 +341,2 @@ } | ||
exports.default = CLI; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNsaS5qcyJdLCJuYW1lcyI6WyJsb2ciLCJDTEkiLCJjb25zdHJ1Y3RvciIsInBhcmFtcyIsIkFycmF5IiwiaXNBcnJheSIsIklOVkFMSURfQVJHVU1FTlQiLCJuYW1lIiwic2NvcGUiLCJ2YWx1ZSIsIm91dCIsIndyaXRlIiwiaGVscEV4aXRDb2RlIiwidW5kZWZpbmVkIiwid2lkdGgiLCJiYW5uZXIiLCJjb2xvcnMiLCJ0aXRsZSIsImV4dGVuc2lvbnMiLCJoaWRlTm9CYW5uZXJPcHRpb24iLCJoaWRlTm9Db2xvck9wdGlvbiIsImRlZmF1bHRDb21tYW5kIiwiaGVscCIsImNvbW1hbmQiLCJoaWRkZW4iLCJhY3Rpb24iLCJjb250ZXh0cyIsImVyciIsInJlbmRlckhlbHAiLCJwcm9jZXNzIiwiZXhpdCIsIm9wdGlvbiIsInNob3dCYW5uZXIiLCJjYWxsYmFjayIsImRlc2MiLCJhbGlhc2VzIiwidmVyc2lvbiIsImxvb2t1cCIsInNob3J0IiwidiIsImxvbmciLCJnZXQiLCJzdGRvdXQiLCJleHRlbnNpb25QYXRoIiwiZXh0ZW5zaW9uIiwiT2JqZWN0Iiwia2V5cyIsImV4ZWMiLCJ1bnBhcnNlZEFyZ3MiLCJTdHJpbmciLCJ0cmltIiwib3JpZ2luYWxXcml0ZSIsImRhdGFSZWdFeHAiLCJjaHVuayIsImVuY29kaW5nIiwiY2IiLCJ0ZXN0IiwiY2FsbCIsIiRhcmdzIiwicGFyc2UiLCJzbGljZSIsImFyZ3YiLCJjbWQiLCJjb21tYW5kcyIsInVuc2hpZnQiLCJyZXN1bHQiLCJzaG93SGVscE9uRXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7OztlQUVnQixxQkFBTSxhQUFOLEM7TUFBUkEsRyxVQUFBQSxHO0FBRVI7Ozs7O0FBR2UsTUFBTUMsR0FBTiwwQkFBMEI7QUFDeEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEJBQyxnQkFBeUI7QUFBQSxRQUFiQyxNQUFhLHVFQUFKLEVBQUk7O0FBQ3hC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QTtBQUNEO0FBQ0Q7O0FBMU51QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tYW5kIGZyb20gJy4vY29tbWFuZCc7XG5pbXBvcnQgQ29udGV4dCBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IGRlYnVnIGZyb20gJy4vZGVidWcnO1xuaW1wb3J0IEUgZnJvbSAnLi9lcnJvcnMnO1xuXG5pbXBvcnQgeyBkZWNsYXJlQ0xJS2l0Q2xhc3MgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCB7IGxvZyB9ID0gZGVidWcoJ2NsaS1raXQ6Y2xpJyk7XG5cbi8qKlxuICogRGVmaW5lcyBhIENMSSBjb250ZXh0IGFuZCBpcyByZXNwb25zaWJsZSBmb3IgcGFyc2luZyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ0xJIGV4dGVuZHMgQ29udGV4dCB7XG5cdC8qKlxuXHQgKiBDcmVhdGVkIGEgQ0xJIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBbcGFyYW1zLmJhbm5lcl0gLSBBIGJhbm5lciBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgYmFubmVyXG5cdCAqIHRvIGJlIGRpc3BsYXllZCBiZWZvcmUgZWFjaCBjb21tYW5kLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtwYXJhbXMuY29sb3JzPXRydWVdIC0gRW5hYmxlcyBjb2xvcnMsIHNwZWNpZmljYWxseSBvbiB0aGUgaGVscCBzY3JlZW4uXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW3BhcmFtcy5kZWZhdWx0Q29tbWFuZF0gLSBUaGUgZGVmYXVsdCBjb21tYW5kIHRvIGV4ZWN1dGUuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW3BhcmFtcy5oZWxwPWZhbHNlXSAtIFdoZW4gYHRydWVgLCBlbmFibGVzIHRoZSBidWlsdC1pbiBoZWxwIGNvbW1hbmQuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbcGFyYW1zLmhlbHBFeGl0Q29kZV0gLSBUaGUgZXhpdCBjb2RlIHRvIHJldHVybiB3aGVuIHRoZSBoZWxwIGNvbW1hbmQgaXNcblx0ICogZmluaXNoZWQuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbcGFyYW1zLm5hbWVdIC0gVGhlIG5hbWUgb2YgdGhlIHByb2dyYW0uXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW3BhcmFtcy5oaWRlTm9CYW5uZXJPcHRpb249ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAgYW5kIGEgYGJhbm5lcmAgaXMgc3BlY2lmaWVkLCBpdFxuXHQgKiBkb2VzIG5vdCBhZGQgdGhlIGAtLW5vLWJhbm5lcmAgb3B0aW9uLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtwYXJhbXMuaGlkZU5vQ29sb3JPcHRpb249ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAgYW5kIGBjb2xvcnNgIGlzIGVuYWJsZWQsIGl0IGRvZXNcblx0ICogbm90IGFkZCB0aGUgYC0tbm8tY29sb3JgIG9wdGlvbi5cblx0ICogQHBhcmFtIHtPYmplY3R8V3JpdGFibGV9IFtwYXJhbXMub3V0PXByb2Nlc3Muc3Rkb3V0XSAtIEEgc3RyZWFtIHRvIHdyaXRlIG91dHB1dCBzdWNoIGFzIHRoZVxuXHQgKiBoZWxwIHNjcmVlbiBvciBhbiBvYmplY3Qgd2l0aCBhIGB3cml0ZSgpYCBtZXRob2QuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW3BhcmFtcy5zaG93SGVscE9uRXJyb3I9dHJ1ZV0gLSBJZiBhbiBlcnJvciBvY2N1cnMgYW5kIGBoZWxwYCBpcyBlbmFibGVkLFxuXHQgKiB0aGVuIGRpc3BsYXkgdGhlIGVycm9yIGJlZm9yZSB0aGUgaGVscCBpbmZvcm1hdGlvbi5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtwYXJhbXMudGl0bGU9J0dsb2JhbCddIC0gVGhlIHRpdGxlIGZvciB0aGUgZ2xvYmFsIGNvbnRleHQuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbcGFyYW1zLnZlcnNpb25dIC0gVGhlIHByb2dyYW0gdmVyc2lvbi5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtwYXJhbXMud2lkdGhdIC0gVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHdyYXAgbG9uZyBkZXNjcmlwdGlvbnMuIERlZmF1bHRzXG5cdCAqIHRvIGBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zYCBpZiBleGlzdHMsIG90aGVyd2lzZSBgMTAwYC4gTXVzdCBiZSBhdCBsZWFzdCBgNDBgLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zID0ge30pIHtcblx0XHRpZiAodHlwZW9mIHBhcmFtcyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXJhbXMpKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIENMSSBwYXJhbWV0ZXJzIHRvIGJlIGFuIG9iamVjdCBvciBDb250ZXh0JywgeyBuYW1lOiAncGFyYW1zJywgc2NvcGU6ICdDTEkuY29uc3RydWN0b3InLCB2YWx1ZTogcGFyYW1zIH0pO1xuXHRcdH1cblxuXHRcdGlmIChwYXJhbXMub3V0ICYmICh0eXBlb2YgcGFyYW1zLm91dCAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHBhcmFtcy5vdXQud3JpdGUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIG91dHB1dCBzdHJlYW0gdG8gYmUgYSB3cml0YWJsZSBzdHJlYW0nLCB7IG5hbWU6ICdwYXJhbXMub3V0Jywgc2NvcGU6ICdDTEkuY29uc3RydWN0b3InLCB2YWx1ZTogcGFyYW1zLm91dCB9KTtcblx0XHR9XG5cblx0XHRpZiAocGFyYW1zLmhlbHBFeGl0Q29kZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBwYXJhbXMuaGVscEV4aXRDb2RlICE9PSAnbnVtYmVyJykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBoZWxwIGV4aXQgY29kZSB0byBiZSBhIG51bWJlcicsIHsgbmFtZTogJ3BhcmFtcy5oZWxwRXhpdENvZGUnLCBzY29wZTogJ0NMSS5jb25zdHJ1Y3RvcicsIHZhbHVlOiBwYXJhbXMuaGVscEV4aXRDb2RlIH0pO1xuXHRcdH1cblxuXHRcdGlmIChwYXJhbXMud2lkdGggIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcGFyYW1zLndpZHRoICE9PSAnbnVtYmVyJykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCB3aWR0aCB0byBiZSBhIG51bWJlcicsIHsgbmFtZTogJ3BhcmFtcy53aWR0aCcsIHNjb3BlOiAnQ0xJLmNvbnN0cnVjdG9yJywgdmFsdWU6IHBhcmFtcy53aWR0aCB9KTtcblx0XHR9XG5cblx0XHRpZiAocGFyYW1zLmJhbm5lciAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBwYXJhbXMuYmFubmVyICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgcGFyYW1zLmJhbm5lciAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBiYW5uZXIgdG8gYmUgYSBzdHJpbmcgb3IgZnVuY3Rpb24nLCB7IG5hbWU6ICdwYXJhbXMuYmFubmVyJywgc2NvcGU6ICdDTEkuY29uc3RydWN0b3InLCB2YWx1ZTogcGFyYW1zLmJhbm5lciB9KTtcblx0XHR9XG5cblx0XHRwYXJhbXMuY29sb3JzID0gcGFyYW1zLmNvbG9ycyAhPT0gZmFsc2U7XG5cdFx0cGFyYW1zLm5hbWUgfHwgKHBhcmFtcy5uYW1lID0gJ3Byb2dyYW0nKTtcblx0XHRwYXJhbXMudGl0bGUgfHwgKHBhcmFtcy50aXRsZSA9ICdHbG9iYWwnKTtcblxuXHRcdC8vIGV4dHJhY3QgcGFyYW1zIHRoYXQgd2UgZG9uJ3Qgd2FudCBtaXhlZCBpblxuXHRcdGNvbnN0IHsgZXh0ZW5zaW9ucywgaGlkZU5vQmFubmVyT3B0aW9uLCBoaWRlTm9Db2xvck9wdGlvbiB9ID0gcGFyYW1zO1xuXHRcdGRlbGV0ZSBwYXJhbXMuZXh0ZW5zaW9ucztcblx0XHRkZWxldGUgcGFyYW1zLmhpZGVOb0Jhbm5lck9wdGlvbjtcblx0XHRkZWxldGUgcGFyYW1zLmhpZGVOb0NvbG9yT3B0aW9uO1xuXG5cdFx0c3VwZXIocGFyYW1zKTtcblx0XHRkZWNsYXJlQ0xJS2l0Q2xhc3ModGhpcywgJ0NMSScpO1xuXG5cdFx0Ly8gc2V0IHRoZSBkZWZhdWx0IGNvbW1hbmRcblx0XHR0aGlzLmRlZmF1bHRDb21tYW5kID0gcGFyYW1zLmRlZmF1bHRDb21tYW5kO1xuXG5cdFx0Ly8gYWRkIHRoZSBidWlsdC1pbiBoZWxwXG5cdFx0dGhpcy5oZWxwID0gISFwYXJhbXMuaGVscDtcblx0XHRpZiAodGhpcy5oZWxwKSB7XG5cdFx0XHRpZiAodGhpcy5kZWZhdWx0Q29tbWFuZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMuZGVmYXVsdENvbW1hbmQgPSAnaGVscCc7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuY29tbWFuZCgnaGVscCcsIHtcblx0XHRcdFx0aGlkZGVuOiB0cnVlLFxuXHRcdFx0XHRhc3luYyBhY3Rpb24oeyBjb250ZXh0cywgZXJyIH0pIHtcblx0XHRcdFx0XHQvLyB0aGUgZmlyc3QgY29udGV4dCBpcyB0aGUgaGVscCBjb21tYW5kLCBzbyBqdXN0IHNraXAgdG8gdGhlIHNlY29uZCBjb250ZXh0XG5cdFx0XHRcdFx0YXdhaXQgY29udGV4dHNbMV0ucmVuZGVySGVscCh7IGVyciB9KTtcblxuXHRcdFx0XHRcdC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuXHRcdFx0XHRcdGlmIChwYXJhbXMuaGVscEV4aXRDb2RlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdHByb2Nlc3MuZXhpdChwYXJhbXMuaGVscEV4aXRDb2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLm9wdGlvbignLWgsIC0taGVscCcsICdkaXNwbGF5cyB0aGUgaGVscCBzY3JlZW4nKTtcblx0XHR9XG5cblx0XHQvLyBhZGQgdGhlIC0tbm8tYmFubmVyIGZsYWdcblx0XHRpZiAodGhpcy5iYW5uZXIgJiYgIWhpZGVOb0Jhbm5lck9wdGlvbikge1xuXHRcdFx0dGhpcy5zaG93QmFubmVyID0gdHJ1ZTtcblxuXHRcdFx0dGhpcy5vcHRpb24oJy0tbm8tYmFubmVyJywge1xuXHRcdFx0XHRjYWxsYmFjazogdmFsdWUgPT4ge1xuXHRcdFx0XHRcdHRoaXMuc2hvd0Jhbm5lciA9IHZhbHVlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRkZXNjOiAnc3VwcHJlc3MgdGhlIGJhbm5lcidcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8vIGFkZCB0aGUgLS1uby1jb2xvcnMgZmxhZ1xuXHRcdGlmICh0aGlzLmNvbG9ycyAmJiAhaGlkZU5vQ29sb3JPcHRpb24pIHtcblx0XHRcdHRoaXMub3B0aW9uKCctLW5vLWNvbG9yJywge1xuXHRcdFx0XHRhbGlhc2VzOiBbICctLW5vLWNvbG9ycycgXSxcblx0XHRcdFx0ZGVzYzogJ2Rpc2FibGUgY29sb3JzJ1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gYWRkIHRoZSAtLXZlcnNpb24gZmxhZ1xuXHRcdGlmIChwYXJhbXMudmVyc2lvbiAmJiAhdGhpcy5sb29rdXAuc2hvcnQudiAmJiAhdGhpcy5sb29rdXAubG9uZy52ZXJzaW9uKSB7XG5cdFx0XHR0aGlzLm9wdGlvbignLXYsIC0tdmVyc2lvbicsIHtcblx0XHRcdFx0Y2FsbGJhY2s6ICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLnNob3dCYW5uZXIgPSBmYWxzZTtcblx0XHRcdFx0XHRjb25zdCBvdXQgPSB0aGlzLmdldCgnb3V0JywgcHJvY2Vzcy5zdGRvdXQpO1xuXHRcdFx0XHRcdG91dC53cml0ZShgJHtwYXJhbXMudmVyc2lvbn1cXG5gKTtcblx0XHRcdFx0XHRwcm9jZXNzLmV4aXQoMCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGRlc2M6ICdvdXRwdXRzIHRoZSB2ZXJzaW9uJ1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gYWRkIHRoZSBleHRlbnNpb25zIG5vdyB0aGF0IHRoZSBhdXRvLWdlbmVyYXRlZCBvcHRpb25zIGV4aXN0XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoZXh0ZW5zaW9ucykpIHtcblx0XHRcdGZvciAoY29uc3QgZXh0ZW5zaW9uUGF0aCBvZiBleHRlbnNpb25zKSB7XG5cdFx0XHRcdHRoaXMuZXh0ZW5zaW9uKGV4dGVuc2lvblBhdGgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIGV4dGVuc2lvbnMgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoZXh0ZW5zaW9ucykpIHtcblx0XHRcdFx0dGhpcy5leHRlbnNpb24oZXh0ZW5zaW9uc1tuYW1lXSwgbmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFBhcnNlcyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhbmQgcnVucyB0aGUgY29tbWFuZC5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0gW3VucGFyc2VkQXJnc10gLSBBbiBhcnJheSBvZiBhcmd1bWVudHMgdG8gcGFyc2UuIElmIG5vdCBzcGVjaWZpZWQsIGl0XG5cdCAqIGRlZmF1bHRzIHRvIHRoZSBgcHJvY2Vzcy5hcmd2YCBzdGFydGluZyB3aXRoIHRoZSAzcmQgYXJndW1lbnQuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlLjxBcmd1bWVudHM+fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgZXhlYyh1bnBhcnNlZEFyZ3MpIHtcblx0XHRpZiAodW5wYXJzZWRBcmdzICYmICFBcnJheS5pc0FycmF5KHVucGFyc2VkQXJncykpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgYXJndW1lbnRzIHRvIGJlIGFuIGFycmF5JywgeyBuYW1lOiAnYXJncycsIHNjb3BlOiAnQ0xJLmV4ZWMnLCB2YWx1ZTogdW5wYXJzZWRBcmdzIH0pO1xuXHRcdH1cblxuXHRcdGxldCBiYW5uZXIgPSB0aGlzLmdldCgnYmFubmVyJyk7XG5cdFx0YmFubmVyID0gYmFubmVyICYmIFN0cmluZyh0eXBlb2YgYmFubmVyID09PSAnZnVuY3Rpb24nID8gYXdhaXQgYmFubmVyKCkgOiBiYW5uZXIpLnRyaW0oKTtcblx0XHRjb25zdCBvdXQgPSB0aGlzLmdldCgnb3V0JywgcHJvY2Vzcy5zdGRvdXQpO1xuXHRcdGNvbnN0IG9yaWdpbmFsV3JpdGUgPSBvdXQud3JpdGU7XG5cblx0XHQvLyBpZiB3ZSBoYXZlIGEgYmFubmVyLCB0aGVuIG92ZXJyaWRlIHdyaXRlKCkgc28gd2UgY2FuIGltbWVkaWF0ZWx5IHdyaXRlIHRoZSBiYW5uZXJcblx0XHRpZiAoYmFubmVyKSB7XG5cdFx0XHRjb25zdCBkYXRhUmVnRXhwID0gL15cXHMqWzx7XS87XG5cblx0XHRcdG91dC53cml0ZSA9IChjaHVuaywgZW5jb2RpbmcsIGNiKSA9PiB7XG5cdFx0XHRcdGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRjYiA9IGVuY29kaW5nO1xuXHRcdFx0XHRcdGVuY29kaW5nID0gbnVsbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRjYiA9ICgpID0+IHt9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgd3JpdGU7XG5cdFx0XHRcdG91dC53cml0ZSA9IG9yaWdpbmFsV3JpdGU7XG5cblx0XHRcdFx0aWYgKGVuY29kaW5nID09PSAnYmFzZTY0JyB8fCBlbmNvZGluZyA9PT0gJ2JpbmFyeScgfHwgZW5jb2RpbmcgPT09ICdoZXgnKSB7XG5cdFx0XHRcdFx0Ly8gbm9vcFxuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuZ2V0KCdzaG93QmFubmVyJywgdHJ1ZSkgJiYgIWRhdGFSZWdFeHAudGVzdChjaHVuaykpIHtcblx0XHRcdFx0XHRvcmlnaW5hbFdyaXRlLmNhbGwob3V0LCBgJHtiYW5uZXJ9XFxuXFxuYCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxXcml0ZS5jYWxsKG91dCwgY2h1bmssIGVuY29kaW5nLCBjYik7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGxldCAkYXJncztcblxuXHRcdHRyeSB7XG5cdFx0XHQkYXJncyA9IGF3YWl0IHRoaXMucGFyc2UodW5wYXJzZWRBcmdzID8gdW5wYXJzZWRBcmdzLnNsaWNlKCkgOiBwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpO1xuXHRcdFx0bGV0IGNtZCA9ICRhcmdzLmNvbnRleHRzWzBdO1xuXG5cdFx0XHRpZiAodGhpcy5oZWxwICYmICRhcmdzLmFyZ3YuaGVscCkge1xuXHRcdFx0XHRsb2coJ1NlbGVjdGVkIGhlbHAgY29tbWFuZCcpO1xuXHRcdFx0XHRjbWQgPSB0aGlzLmNvbW1hbmRzLmhlbHA7XG5cdFx0XHRcdCRhcmdzLmNvbnRleHRzLnVuc2hpZnQoY21kKTtcblxuXHRcdFx0fSBlbHNlIGlmICghKGNtZCBpbnN0YW5jZW9mIENvbW1hbmQpICYmIHRoaXMuZGVmYXVsdENvbW1hbmQgJiYgKHRoaXMuY29tbWFuZHNbdGhpcy5kZWZhdWx0Q29tbWFuZF0gaW5zdGFuY2VvZiBDb21tYW5kKSkge1xuXHRcdFx0XHRsb2coYFNlbGVjdGVkIGRlZmF1bHQgY29tbWFuZDogJHt0aGlzLmRlZmF1bHRDb21tYW5kfWApO1xuXHRcdFx0XHRjbWQgPSB0aGlzLmNvbW1hbmRzW3RoaXMuZGVmYXVsdENvbW1hbmRdO1xuXHRcdFx0XHQkYXJncy5jb250ZXh0cy51bnNoaWZ0KGNtZCk7XG5cdFx0XHR9XG5cblx0XHRcdGxldCByZXN1bHQ7XG5cblx0XHRcdC8vIGV4ZWN1dGUgdGhlIGNvbW1hbmRcblx0XHRcdGlmIChjbWQgJiYgdHlwZW9mIGNtZC5hY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0cmVzdWx0ID0gYXdhaXQgY21kLmFjdGlvbi5jYWxsKHRoaXMsICRhcmdzKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3VsdCB8fCAkYXJncztcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGNvbnN0IGhlbHAgPSB0aGlzLmhlbHAgJiYgdGhpcy5zaG93SGVscE9uRXJyb3IgIT09IGZhbHNlICYmIHRoaXMuY29tbWFuZHMuaGVscDtcblxuXHRcdFx0aWYgKGhlbHApIHtcblx0XHRcdFx0cmV0dXJuIGF3YWl0IGhlbHAuYWN0aW9uKHtcblx0XHRcdFx0XHRjb250ZXh0czogWyBoZWxwLCAuLi4oZXJyLmNvbnRleHRzIHx8ICgkYXJncyAmJiAkYXJncy5jb250ZXh0cykgfHwgWyB0aGlzIF0pIF0sXG5cdFx0XHRcdFx0ZXJyXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBlcnI7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGlmIChiYW5uZXIpIHtcblx0XHRcdFx0b3V0LndyaXRlID0gb3JpZ2luYWxXcml0ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiJdLCJmaWxlIjoiY2xpLmpzIn0= | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNsaS5qcyJdLCJuYW1lcyI6WyJlcnJvciIsImxvZyIsIndhcm4iLCJoaWdobGlnaHQiLCJzdHlsZXMiLCJwbHVyYWxpemUiLCJDTEkiLCJjb25zdHJ1Y3RvciIsInBhcmFtcyIsIkFycmF5IiwiaXNBcnJheSIsIklOVkFMSURfQVJHVU1FTlQiLCJuYW1lIiwic2NvcGUiLCJ2YWx1ZSIsImJhbm5lciIsInVuZGVmaW5lZCIsImV4dGVuc2lvbnMiLCJoZWxwRXhpdENvZGUiLCJzdGRvdXQiLCJ3cml0ZSIsInN0ZGVyciIsImFyZ3MiLCJjYW1lbENhc2UiLCJjb21tYW5kcyIsImRlc2MiLCJvcHRpb25zIiwidGl0bGUiLCJ0cmVhdFVua25vd25PcHRpb25zQXNBcmd1bWVudHMiLCJjb2xvcnMiLCJlcnJvcklmVW5rbm93bkNvbW1hbmQiLCJ3YXJuaW5ncyIsInJlbmRlck9wdHMiLCJPYmplY3QiLCJhc3NpZ24iLCJtYXJrZG93biIsInBpcGUiLCJwcm9jZXNzIiwib24iLCJlbmQiLCJjb25zb2xlIiwiZGVmYXVsdENvbW1hbmQiLCJoZWxwIiwiY29tbWFuZCIsIm9wdGlvbiIsImhpZGVOb0Jhbm5lck9wdGlvbiIsImhpZGVOb0NvbG9yT3B0aW9uIiwiYWxpYXNlcyIsInZlcnNpb24iLCJsb29rdXAiLCJzaG9ydCIsInYiLCJsb25nIiwiY2FsbGJhY2siLCJuZXh0IiwiZ2V0IiwiZXhpdCIsImV4dCIsImV4dGVuc2lvbiIsImUiLCJwdXNoIiwiZW50cmllcyIsImV4ZWMiLCJ1bnBhcnNlZEFyZ3MiLCJwYXJzZXIiLCJwYXJzZSIsImFyZ3YiLCJzbGljZSIsIl8iLCJjb250ZXh0cyIsInVua25vd24iLCJjbWQiLCJrZXlzIiwibGVuZ3RoIiwiU3RyaW5nIiwidHJpbSIsInNob3dCYW5uZXIiLCJyZXN1bHRzIiwiaXNDTElLaXRFeHRlbnNpb24iLCJ1bnNoaWZ0IiwiaGFzIiwiYWN0aW9uIiwiZXJyIiwic2hvd0hlbHBPbkVycm9yIl0sIm1hcHBpbmdzIjoiOzs7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cERELENBb0RFLE9BQU9LLEdBQVAsRUFBWTtBQUNibEYsTUFBQUEsS0FBSyxDQUFDa0YsR0FBRCxDQUFMO0FBRUEsWUFBTXhDLElBQUksR0FBRyxLQUFLQSxJQUFMLElBQWEsS0FBS3lDLGVBQUwsS0FBeUIsS0FBdEMsSUFBK0MsS0FBSzNELFFBQUwsQ0FBYytCLEdBQWQsQ0FBa0IsTUFBbEIsQ0FBNUQ7O0FBQ0EsVUFBSWIsSUFBSixFQUFVO0FBQ1QsZUFBTyxNQUFNQSxJQUFJLENBQUN1QyxNQUFMLENBQVk7QUFDeEJaLFVBQUFBLFFBQVEsRUFBRWEsR0FBRyxDQUFDYixRQUFKLElBQWdCTCxNQUFNLENBQUNLLFFBQXZCLElBQW1DLENBQUUsSUFBRixDQURyQjtBQUV4QmEsVUFBQUEsR0FGd0I7QUFHeEJuRCxVQUFBQSxRQUFRLEVBQUUsS0FBS0E7QUFIUyxTQUFaLENBQWI7QUFLQTs7QUFFRCxZQUFNbUQsR0FBTjtBQUNBLEtBakVELFNBaUVVO0FBQ1QsV0FBSy9ELE1BQUwsQ0FBWW9CLEdBQVo7QUFDQSxXQUFLbEIsTUFBTCxDQUFZa0IsR0FBWjtBQUNBO0FBQ0Q7O0FBeFB1QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tYW5kIGZyb20gJy4vcGFyc2VyL2NvbW1hbmQnO1xuaW1wb3J0IENvbnRleHQgZnJvbSAnLi9wYXJzZXIvY29udGV4dCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnLi9saWIvZGVidWcnO1xuaW1wb3J0IEUgZnJvbSAnLi9saWIvZXJyb3JzJztcbmltcG9ydCBFeHRlbnNpb24gZnJvbSAnLi9wYXJzZXIvZXh0ZW5zaW9uJztcbmltcG9ydCBoZWxwQ29tbWFuZCBmcm9tICcuL2NvbW1hbmRzL2hlbHAnO1xuaW1wb3J0IFBhcnNlciBmcm9tICcuL3BhcnNlci9wYXJzZXInO1xuaW1wb3J0IE91dHB1dFN0cmVhbSBmcm9tICcuL3JlbmRlci9vdXRwdXQtc3RyZWFtJztcblxuaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gJ2NvbnNvbGUnO1xuaW1wb3J0IHsgZGVjbGFyZUNMSUtpdENsYXNzIH0gZnJvbSAnLi9saWIvdXRpbCc7XG5cbmNvbnN0IHsgZXJyb3IsIGxvZywgd2FybiB9ID0gZGVidWcoJ2NsaS1raXQ6Y2xpJyk7XG5jb25zdCB7IGhpZ2hsaWdodCB9ICA9IGRlYnVnLnN0eWxlcztcbmNvbnN0IHsgcGx1cmFsaXplIH0gPSBkZWJ1ZztcblxuLyoqXG4gKiBEZWZpbmVzIGEgQ0xJIGNvbnRleHQgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBwYXJzaW5nIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLlxuICpcbiAqIEBleHRlbmRzIHtDb250ZXh0fVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDTEkgZXh0ZW5kcyBDb250ZXh0IHtcblx0LyoqXG5cdCAqIENyZWF0ZWQgYSBDTEkgaW5zdGFuY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IFtwYXJhbXMuYmFubmVyXSAtIEEgYmFubmVyIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBiYW5uZXJcblx0ICogdG8gYmUgZGlzcGxheWVkIGJlZm9yZSBlYWNoIGNvbW1hbmQuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW3BhcmFtcy5jb2xvcnM9dHJ1ZV0gLSBFbmFibGVzIGNvbG9ycywgc3BlY2lmaWNhbGx5IG9uIHRoZSBoZWxwIHNjcmVlbi5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbcGFyYW1zLmRlZmF1bHRDb21tYW5kXSAtIFRoZSBkZWZhdWx0IGNvbW1hbmQgdG8gZXhlY3V0ZS5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbcGFyYW1zLmVycm9ySWZVbmtub3duQ29tbWFuZD10cnVlXSAtIFdoZW4gYHRydWVgLCBgaGVscGAgaXMgZW5hYmxlZCwgYW5kXG5cdCAqIHRoZSBwYXJzZXIgZGlkbid0IGZpbmQgYSBjb21tYW5kLCBidXQgaXQgZGlkIGZpbmQgYW4gdW5rbm93biBhcmd1bWVudCwgaXQgd2lsbCBzaG93IHRoZSBoZWxwXG5cdCAqIHNjcmVlbiB3aXRoIGFuIHVua25vd24gY29tbWFuZCBlcnJvci5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbcGFyYW1zLmhlbHA9ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAsIGVuYWJsZXMgdGhlIGJ1aWx0LWluIGhlbHAgY29tbWFuZC5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtwYXJhbXMuaGVscEV4aXRDb2RlXSAtIFRoZSBleGl0IGNvZGUgdG8gcmV0dXJuIHdoZW4gdGhlIGhlbHAgY29tbWFuZCBpc1xuXHQgKiBmaW5pc2hlZC5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbcGFyYW1zLmhpZGVOb0Jhbm5lck9wdGlvbj1mYWxzZV0gLSBXaGVuIGB0cnVlYCBhbmQgYSBgYmFubmVyYCBpcyBzcGVjaWZpZWQsXG5cdCAqIGl0IGRvZXMgbm90IGFkZCB0aGUgYC0tbm8tYmFubmVyYCBvcHRpb24uXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW3BhcmFtcy5oaWRlTm9Db2xvck9wdGlvbj1mYWxzZV0gLSBXaGVuIGB0cnVlYCBhbmQgYGNvbG9yc2AgaXMgZW5hYmxlZCwgaXRcblx0ICogZG9lcyBub3QgYWRkIHRoZSBgLS1uby1jb2xvcmAgb3B0aW9uLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW3BhcmFtcy5uYW1lXSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5yZW5kZXJPcHRzXSAtIFZhcmlvdXMgcmVuZGVyIG9wdGlvbnMgdG8gY29udHJvbCB0aGUgb3V0cHV0IHN0cmVhbVxuXHQgKiBzdWNoIGFzIHRoZSBkaXNwbGF5IHdpZHRoLlxuXHQgKiBAcGFyYW0ge09iamVjdHxzdHJlYW0uV3JpdGFibGV9IFtwYXJhbXMuc3Rkb3V0PXByb2Nlc3Muc3Rkb3V0XSAtIEEgc3RyZWFtIG9yIGFuIG9iamVjdCB3aXRoIGFcblx0ICogYHdyaXRlKClgIG1ldGhvZCB0byB3cml0ZSBvdXRwdXQgc3VjaCBhcyB0aGUgaGVscCBzY3JlZW4gdG8uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fHN0cmVhbS5Xcml0YWJsZX0gW3BhcmFtcy5zdGRlcnI9cHJvY2Vzcy5zdGRlcnJdIC0gQSBzdHJlYW0gb3IgYW4gb2JqZWN0IHdpdGggYVxuXHQgKiBgd3JpdGUoKWAgbWV0aG9kIHRvIHdyaXRlIGVycm9yIG1lc3NhZ2VzIHRvLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtwYXJhbXMuc2hvd0hlbHBPbkVycm9yPXRydWVdIC0gSWYgYW4gZXJyb3Igb2NjdXJzIGFuZCBgaGVscGAgaXMgZW5hYmxlZCxcblx0ICogdGhlbiBkaXNwbGF5IHRoZSBlcnJvciBiZWZvcmUgdGhlIGhlbHAgaW5mb3JtYXRpb24uXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbcGFyYW1zLnRpdGxlPSdHbG9iYWwnXSAtIFRoZSB0aXRsZSBmb3IgdGhlIGdsb2JhbCBjb250ZXh0LlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW3BhcmFtcy52ZXJzaW9uXSAtIFRoZSBwcm9ncmFtIHZlcnNpb24uXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMgPSB7fSkge1xuXHRcdGlmICghcGFyYW1zIHx8IHR5cGVvZiBwYXJhbXMgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGFyYW1zKSkge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBDTEkgcGFyYW1ldGVycyB0byBiZSBhbiBvYmplY3Qgb3IgQ29udGV4dCcsIHsgbmFtZTogJ3BhcmFtcycsIHNjb3BlOiAnQ0xJLmNvbnN0cnVjdG9yJywgdmFsdWU6IHBhcmFtcyB9KTtcblx0XHR9XG5cblx0XHRpZiAocGFyYW1zLmJhbm5lciAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBwYXJhbXMuYmFubmVyICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgcGFyYW1zLmJhbm5lciAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBiYW5uZXIgdG8gYmUgYSBzdHJpbmcgb3IgZnVuY3Rpb24nLCB7IG5hbWU6ICdiYW5uZXInLCBzY29wZTogJ0NMSS5jb25zdHJ1Y3RvcicsIHZhbHVlOiBwYXJhbXMuYmFubmVyIH0pO1xuXHRcdH1cblxuXHRcdGlmIChwYXJhbXMuZXh0ZW5zaW9ucyAmJiB0eXBlb2YgcGFyYW1zLmV4dGVuc2lvbnMgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoXG5cdFx0XHRcdCdFeHBlY3RlZCBleHRlbnNpb25zIHRvIGJlIGFuIGFycmF5IG9mIGV4dGVuc2lvbiBwYXRocyBvciBhbiBvYmplY3Qgb2YgbmFtZXMgdG8gZXh0ZW5zaW9uIHBhdGhzJyxcblx0XHRcdFx0eyBuYW1lOiAnZXh0ZW5zaW9ucycsIHNjb3BlOiAnQ0xJLmNvbnN0cnVjdG9yJywgdmFsdWU6IHBhcmFtcy5leHRlbnNpb25zIH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKHBhcmFtcy5oZWxwRXhpdENvZGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcGFyYW1zLmhlbHBFeGl0Q29kZSAhPT0gJ251bWJlcicpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgaGVscCBleGl0IGNvZGUgdG8gYmUgYSBudW1iZXInLCB7IG5hbWU6ICdoZWxwRXhpdENvZGUnLCBzY29wZTogJ0NMSS5jb25zdHJ1Y3RvcicsIHZhbHVlOiBwYXJhbXMuaGVscEV4aXRDb2RlIH0pO1xuXHRcdH1cblxuXHRcdGlmIChwYXJhbXMuc3Rkb3V0ICYmICh0eXBlb2YgcGFyYW1zLnN0ZG91dCAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHBhcmFtcy5zdGRvdXQud3JpdGUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIHN0ZG91dCBzdHJlYW0gdG8gYmUgYSB3cml0YWJsZSBzdHJlYW0nLCB7IG5hbWU6ICdzdGRvdXQnLCBzY29wZTogJ0NMSS5jb25zdHJ1Y3RvcicsIHZhbHVlOiBwYXJhbXMuc3Rkb3V0IH0pO1xuXHRcdH1cblxuXHRcdGlmIChwYXJhbXMuc3RkZXJyICYmICh0eXBlb2YgcGFyYW1zLnN0ZGVyciAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHBhcmFtcy5zdGRlcnIud3JpdGUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIHN0ZGVyciBzdHJlYW0gdG8gYmUgYSB3cml0YWJsZSBzdHJlYW0nLCB7IG5hbWU6ICdzdGRlcnInLCBzY29wZTogJ0NMSS5jb25zdHJ1Y3RvcicsIHZhbHVlOiBwYXJhbXMuc3RkZXJyIH0pO1xuXHRcdH1cblxuXHRcdHN1cGVyKHtcblx0XHRcdGFyZ3M6ICAgICAgIHBhcmFtcy5hcmdzLFxuXHRcdFx0Y2FtZWxDYXNlOiAgcGFyYW1zLmNhbWVsQ2FzZSxcblx0XHRcdGNvbW1hbmRzOiAgIHBhcmFtcy5jb21tYW5kcyxcblx0XHRcdGRlc2M6ICAgICAgIHBhcmFtcy5kZXNjLFxuXHRcdFx0bmFtZTogICAgICAgcGFyYW1zLm5hbWUgfHwgJ3Byb2dyYW0nLFxuXHRcdFx0b3B0aW9uczogICAgcGFyYW1zLm9wdGlvbnMsXG5cdFx0XHR0aXRsZTogICAgICBwYXJhbXMudGl0bGUgfHwgJ0dsb2JhbCcsXG5cdFx0XHR0cmVhdFVua25vd25PcHRpb25zQXNBcmd1bWVudHM6IHBhcmFtcy50cmVhdFVua25vd25PcHRpb25zQXNBcmd1bWVudHNcblx0XHR9KTtcblxuXHRcdGRlY2xhcmVDTElLaXRDbGFzcyh0aGlzLCAnQ0xJJyk7XG5cblx0XHR0aGlzLmJhbm5lciAgICAgICAgICAgICAgICA9IHBhcmFtcy5iYW5uZXI7XG5cdFx0dGhpcy5jb2xvcnMgICAgICAgICAgICAgICAgPSBwYXJhbXMuY29sb3JzICE9PSBmYWxzZTtcblx0XHR0aGlzLmVycm9ySWZVbmtub3duQ29tbWFuZCA9IHBhcmFtcy5lcnJvcklmVW5rbm93bkNvbW1hbmQgIT09IGZhbHNlO1xuXHRcdHRoaXMuaGVscEV4aXRDb2RlICAgICAgICAgID0gcGFyYW1zLmhlbHBFeGl0Q29kZTtcblx0XHR0aGlzLndhcm5pbmdzICAgICAgICAgICAgICA9IFtdO1xuXG5cdFx0Y29uc3QgcmVuZGVyT3B0cyA9IE9iamVjdC5hc3NpZ24oe1xuXHRcdFx0bWFya2Rvd246IHRydWVcblx0XHR9LCBwYXJhbXMucmVuZGVyT3B0cyk7XG5cblx0XHQvLyBpbml0IHRoZSBvdXRwdXQgc3RyZWFtc1xuXHRcdHRoaXMuc3Rkb3V0ID0gbmV3IE91dHB1dFN0cmVhbShyZW5kZXJPcHRzKTtcblx0XHR0aGlzLnN0ZG91dC5waXBlKHBhcmFtcy5zdGRvdXQgfHwgcHJvY2Vzcy5zdGRvdXQpO1xuXG5cdFx0dGhpcy5zdGRlcnIgPSBuZXcgT3V0cHV0U3RyZWFtKHJlbmRlck9wdHMpO1xuXHRcdHRoaXMuc3RkZXJyLnBpcGUocGFyYW1zLnN0ZGVyciB8fCBwcm9jZXNzLnN0ZGVycik7XG5cblx0XHRwcm9jZXNzLm9uKCdleGl0JywgKCkgPT4ge1xuXHRcdFx0dGhpcy5zdGRvdXQuZW5kKCk7XG5cdFx0XHR0aGlzLnN0ZGVyci5lbmQoKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuY29uc29sZSA9IG5ldyBDb25zb2xlKHRoaXMuc3Rkb3V0LCB0aGlzLnN0ZGVycik7XG5cblx0XHQvLyBzZXQgdGhlIGRlZmF1bHQgY29tbWFuZFxuXHRcdHRoaXMuZGVmYXVsdENvbW1hbmQgPSBwYXJhbXMuZGVmYXVsdENvbW1hbmQ7XG5cblx0XHQvLyBhZGQgdGhlIGJ1aWx0LWluIGhlbHBcblx0XHR0aGlzLmhlbHAgPSAhIXBhcmFtcy5oZWxwO1xuXHRcdGlmICh0aGlzLmhlbHApIHtcblx0XHRcdGlmICh0aGlzLmRlZmF1bHRDb21tYW5kID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhpcy5kZWZhdWx0Q29tbWFuZCA9ICdoZWxwJztcblx0XHRcdH1cblxuXHRcdFx0Ly8gbm90ZTogd2UgbXVzdCBjbG9uZSB0aGUgaGVscCBjb21tYW5kIHBhcmFtcyBzaW5jZSB0aGUgb2JqZWN0IGdldHMgbW9kaWZpZWRcblx0XHRcdHRoaXMuY29tbWFuZCgnaGVscCcsIE9iamVjdC5hc3NpZ24oe30sIGhlbHBDb21tYW5kKSk7XG5cblx0XHRcdHRoaXMub3B0aW9uKCctaCwgLS1oZWxwJywgJ2Rpc3BsYXlzIHRoZSBoZWxwIHNjcmVlbicpO1xuXHRcdH1cblxuXHRcdC8vIGFkZCB0aGUgLS1uby1iYW5uZXIgZmxhZ1xuXHRcdGlmICh0aGlzLmJhbm5lciAmJiAhcGFyYW1zLmhpZGVOb0Jhbm5lck9wdGlvbikge1xuXHRcdFx0dGhpcy5vcHRpb24oJy0tbm8tYmFubmVyJywge1xuXHRcdFx0XHRkZXNjOiAnc3VwcHJlc3MgdGhlIGJhbm5lcidcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8vIGFkZCB0aGUgLS1uby1jb2xvcnMgZmxhZ1xuXHRcdGlmICh0aGlzLmNvbG9ycyAmJiAhcGFyYW1zLmhpZGVOb0NvbG9yT3B0aW9uKSB7XG5cdFx0XHR0aGlzLm9wdGlvbignLS1uby1jb2xvcicsIHtcblx0XHRcdFx0YWxpYXNlczogWyAnLS1uby1jb2xvcnMnIF0sXG5cdFx0XHRcdGRlc2M6ICdkaXNhYmxlIGNvbG9ycydcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8vIGFkZCB0aGUgLS12ZXJzaW9uIGZsYWdcblx0XHRpZiAocGFyYW1zLnZlcnNpb24gJiYgIXRoaXMubG9va3VwLnNob3J0LnYgJiYgIXRoaXMubG9va3VwLmxvbmcudmVyc2lvbikge1xuXHRcdFx0dGhpcy5vcHRpb24oJy12LCAtLXZlcnNpb24nLCB7XG5cdFx0XHRcdGNhbGxiYWNrOiBhc3luYyAoeyBuZXh0IH0pID0+IHtcblx0XHRcdFx0XHRhd2FpdCBuZXh0KCk7XG5cdFx0XHRcdFx0dGhpcy5nZXQoJ3N0ZG91dCcpLndyaXRlKGAke3BhcmFtcy52ZXJzaW9ufVxcbmApO1xuXHRcdFx0XHRcdHByb2Nlc3MuZXhpdCgwKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZGVzYzogJ291dHB1dHMgdGhlIHZlcnNpb24nXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvLyBhZGQgdGhlIGV4dGVuc2lvbnMgbm93IHRoYXQgdGhlIGF1dG8tZ2VuZXJhdGVkIG9wdGlvbnMgZXhpc3Rcblx0XHRpZiAocGFyYW1zLmV4dGVuc2lvbnMpIHtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHBhcmFtcy5leHRlbnNpb25zKSkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGV4dCBvZiBwYXJhbXMuZXh0ZW5zaW9ucykge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHR0aGlzLmV4dGVuc2lvbihleHQpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdHRoaXMud2FybmluZ3MucHVzaChlKTtcblx0XHRcdFx0XHRcdHdhcm4oZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKGNvbnN0IFsgbmFtZSwgZXh0IF0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zLmV4dGVuc2lvbnMpKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHRoaXMuZXh0ZW5zaW9uKGV4dCwgbmFtZSk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0dGhpcy53YXJuaW5ncy5wdXNoKGUpO1xuXHRcdFx0XHRcdFx0d2FybihlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2VzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFuZCBydW5zIHRoZSBjb21tYW5kLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBbdW5wYXJzZWRBcmdzXSAtIEFuIGFycmF5IG9mIGFyZ3VtZW50cyB0byBwYXJzZS4gSWYgbm90IHNwZWNpZmllZCwgaXRcblx0ICogZGVmYXVsdHMgdG8gdGhlIGBwcm9jZXNzLmFyZ3ZgIHN0YXJ0aW5nIHdpdGggdGhlIDNyZCBhcmd1bWVudC5cblx0ICogQHJldHVybnMge1Byb21pc2UuPEFyZ3VtZW50cz59XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBleGVjKHVucGFyc2VkQXJncykge1xuXHRcdGlmICh1bnBhcnNlZEFyZ3MgJiYgIUFycmF5LmlzQXJyYXkodW5wYXJzZWRBcmdzKSkge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBhcmd1bWVudHMgdG8gYmUgYW4gYXJyYXknLCB7IG5hbWU6ICdhcmdzJywgc2NvcGU6ICdDTEkuZXhlYycsIHZhbHVlOiB1bnBhcnNlZEFyZ3MgfSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcigpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHsgXywgYXJndiwgY29udGV4dHMsIHVua25vd24gfSA9IGF3YWl0IHBhcnNlci5wYXJzZSh1bnBhcnNlZEFyZ3MgfHwgcHJvY2Vzcy5hcmd2LnNsaWNlKDIpLCB0aGlzKTtcblx0XHRcdGxldCBjbWQgPSBjb250ZXh0c1swXTtcblxuXHRcdFx0bG9nKCdQYXJzaW5nIGNvbXBsZXRlOiAnICtcblx0XHRcdFx0YCR7cGx1cmFsaXplKCdvcHRpb24nLCBPYmplY3Qua2V5cyhhcmd2KS5sZW5ndGgsIHRydWUpfSwgYCArXG5cdFx0XHRcdGAke3BsdXJhbGl6ZSgndW5rbm93biBvcHRpb24nLCBPYmplY3Qua2V5cyh1bmtub3duKS5sZW5ndGgsIHRydWUpfSwgYCArXG5cdFx0XHRcdGAke3BsdXJhbGl6ZSgnYXJnJywgXy5sZW5ndGgsIHRydWUpfSwgYCArXG5cdFx0XHRcdGAke3BsdXJhbGl6ZSgnY29udGV4dCcsIGNvbnRleHRzLmxlbmd0aCwgdHJ1ZSl9YFxuXHRcdFx0KTtcblxuXHRcdFx0Ly8gd2lyZSB1cCB0aGUgYmFubmVyXG5cdFx0XHRsZXQgYmFubmVyID0gdGhpcy5nZXQoJ2Jhbm5lcicpO1xuXHRcdFx0aWYgKGJhbm5lciAmJiBhcmd2LmJhbm5lcikge1xuXHRcdFx0XHRiYW5uZXIgPSBTdHJpbmcodHlwZW9mIGJhbm5lciA9PT0gJ2Z1bmN0aW9uJyA/IGF3YWl0IGJhbm5lcigpIDogYmFubmVyKS50cmltKCk7XG5cdFx0XHRcdGNvbnN0IHNob3dCYW5uZXIgPSB3cml0ZSA9PiB7XG5cdFx0XHRcdFx0YmFubmVyICYmIHdyaXRlKGAke2Jhbm5lcn1cXG5cXG5gKTtcblx0XHRcdFx0XHRiYW5uZXIgPSBudWxsO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR0aGlzLnN0ZG91dC5vbignc3RhcnQnLCBzaG93QmFubmVyKTtcblx0XHRcdFx0dGhpcy5zdGRlcnIub24oJ3N0YXJ0Jywgc2hvd0Jhbm5lcik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHJlc3VsdHMgPSB7XG5cdFx0XHRcdF8sXG5cdFx0XHRcdGFyZ3YsXG5cdFx0XHRcdGNvbnNvbGU6IHRoaXMuY29uc29sZSxcblx0XHRcdFx0Y29udGV4dHMsXG5cdFx0XHRcdHVua25vd24sXG5cdFx0XHRcdHdhcm5pbmdzOiB0aGlzLndhcm5pbmdzXG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBkZXRlcm1pbmUgdGhlIGNvbW1hbmQgdG8gcnVuXG5cdFx0XHRpZiAodGhpcy5oZWxwICYmIGFyZ3YuaGVscCAmJiAoIShjbWQgaW5zdGFuY2VvZiBFeHRlbnNpb24pIHx8IGNtZC5pc0NMSUtpdEV4dGVuc2lvbikpIHtcblx0XHRcdFx0bG9nKCdTZWxlY3RlZCBoZWxwIGNvbW1hbmQnKTtcblx0XHRcdFx0Y21kID0gdGhpcy5jb21tYW5kcy5nZXQoJ2hlbHAnKTtcblx0XHRcdFx0cGFyc2VyLmNvbnRleHRzLnVuc2hpZnQoY21kKTtcblxuXHRcdFx0fSBlbHNlIGlmICghKGNtZCBpbnN0YW5jZW9mIENvbW1hbmQpICYmIHRoaXMuZGVmYXVsdENvbW1hbmQgJiYgdGhpcy5jb21tYW5kcy5oYXModGhpcy5kZWZhdWx0Q29tbWFuZCkpIHtcblx0XHRcdFx0bG9nKGBTZWxlY3RlZCBkZWZhdWx0IGNvbW1hbmQ6ICR7dGhpcy5kZWZhdWx0Q29tbWFuZH1gKTtcblx0XHRcdFx0Y21kID0gdGhpcy5jb21tYW5kcy5nZXQodGhpcy5kZWZhdWx0Q29tbWFuZCk7XG5cdFx0XHRcdHBhcnNlci5jb250ZXh0cy51bnNoaWZ0KGNtZCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGV4ZWN1dGUgdGhlIGNvbW1hbmRcblx0XHRcdGlmIChjbWQgJiYgdHlwZW9mIGNtZC5hY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0bG9nKGBFeGVjdXRpbmcgY29tbWFuZDogJHtoaWdobGlnaHQoY21kLm5hbWUpfWApO1xuXHRcdFx0XHRyZXR1cm4gYXdhaXQgY21kLmFjdGlvbihyZXN1bHRzKTtcblx0XHRcdH1cblxuXHRcdFx0bG9nKCdObyBjb21tYW5kIHRvIGV4ZWN1dGUsIHJldHVybmluZyBwYXJzZWQgYXJndW1lbnRzJyk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGVycm9yKGVycik7XG5cblx0XHRcdGNvbnN0IGhlbHAgPSB0aGlzLmhlbHAgJiYgdGhpcy5zaG93SGVscE9uRXJyb3IgIT09IGZhbHNlICYmIHRoaXMuY29tbWFuZHMuZ2V0KCdoZWxwJyk7XG5cdFx0XHRpZiAoaGVscCkge1xuXHRcdFx0XHRyZXR1cm4gYXdhaXQgaGVscC5hY3Rpb24oe1xuXHRcdFx0XHRcdGNvbnRleHRzOiBlcnIuY29udGV4dHMgfHwgcGFyc2VyLmNvbnRleHRzIHx8IFsgdGhpcyBdLFxuXHRcdFx0XHRcdGVycixcblx0XHRcdFx0XHR3YXJuaW5nczogdGhpcy53YXJuaW5nc1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0aGlzLnN0ZG91dC5lbmQoKTtcblx0XHRcdHRoaXMuc3RkZXJyLmVuZCgpO1xuXHRcdH1cblx0fVxufVxuIl0sImZpbGUiOiJjbGkuanMifQ== |
@@ -6,15 +6,2 @@ "use strict"; | ||
}); | ||
var _exportNames = { | ||
chalk: true, | ||
humanize: true, | ||
moment: true, | ||
pluralize: true, | ||
symbols: true, | ||
snooplogg: true, | ||
CLI: true, | ||
Argument: true, | ||
Command: true, | ||
Option: true, | ||
Extension: true | ||
}; | ||
Object.defineProperty(exports, "snooplogg", { | ||
@@ -62,3 +49,3 @@ enumerable: true, | ||
}); | ||
exports.symbols = exports.pluralize = exports.moment = exports.humanize = exports.chalk = void 0; | ||
exports.util = exports.types = exports.template = exports.symbols = exports.pluralize = exports.moment = exports.humanize = exports.chalk = void 0; | ||
@@ -69,23 +56,24 @@ var _snooplogg = _interopRequireDefault(require("snooplogg")); | ||
var _argument = _interopRequireDefault(require("./argument")); | ||
var _argument = _interopRequireDefault(require("./parser/argument")); | ||
var _command = _interopRequireDefault(require("./command")); | ||
var _command = _interopRequireDefault(require("./parser/command")); | ||
var _option = _interopRequireDefault(require("./option")); | ||
var _option = _interopRequireDefault(require("./parser/option")); | ||
var _extension = _interopRequireDefault(require("./extension")); | ||
var _extension = _interopRequireDefault(require("./parser/extension")); | ||
var _util = require("./util"); | ||
var template = _interopRequireWildcard(require("./render/template")); | ||
Object.keys(_util).forEach(function (key) { | ||
if (key === "default" || key === "__esModule") return; | ||
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; | ||
Object.defineProperty(exports, key, { | ||
enumerable: true, | ||
get: function () { | ||
return _util[key]; | ||
} | ||
}); | ||
}); | ||
exports.template = template; | ||
var types = _interopRequireWildcard(require("./parser/types")); | ||
exports.types = types; | ||
var util = _interopRequireWildcard(require("./lib/util")); | ||
exports.util = util; | ||
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
@@ -108,2 +96,2 @@ | ||
exports.chalk = chalk; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbIkVycm9yIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJyZXF1aXJlIiwiY2hhbGsiLCJodW1hbml6ZSIsIm1vbWVudCIsInBsdXJhbGl6ZSIsInN5bWJvbHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBS0E7O0FBS0E7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7QUFuQkE7QUFDQSxJQUFJLENBQUNBLE1BQU1DLGlCQUFYLEVBQThCO0FBQzdCQyxVQUFRLDZCQUFSO0FBQ0E7O01BS2NDLEssc0JBQUFBLEs7TUFBT0MsUSxzQkFBQUEsUTtNQUFVQyxNLHNCQUFBQSxNO01BQVFDLFMsc0JBQUFBLFM7TUFBV0MsTyxzQkFBQUEsTyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKCFFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuXHRyZXF1aXJlKCdzb3VyY2UtbWFwLXN1cHBvcnQvcmVnaXN0ZXInKTtcbn1cblxuaW1wb3J0IHNub29wbG9nZyBmcm9tICdzbm9vcGxvZ2cnO1xuXG5leHBvcnQgeyBzbm9vcGxvZ2cgfTtcbmV4cG9ydCBjb25zdCB7IGNoYWxrLCBodW1hbml6ZSwgbW9tZW50LCBwbHVyYWxpemUsIHN5bWJvbHMgfSA9IHNub29wbG9nZztcblxuZXhwb3J0IHtcblx0ZGVmYXVsdCxcblx0ZGVmYXVsdCBhcyBDTElcbn0gZnJvbSAnLi9jbGknO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIEFyZ3VtZW50IH0gZnJvbSAnLi9hcmd1bWVudCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBPcHRpb24gfSBmcm9tICcuL29wdGlvbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEV4dGVuc2lvbiB9IGZyb20gJy4vZXh0ZW5zaW9uJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbCc7XG4iXSwiZmlsZSI6ImluZGV4LmpzIn0= | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbIkVycm9yIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJyZXF1aXJlIiwiY2hhbGsiLCJodW1hbml6ZSIsIm1vbWVudCIsInBsdXJhbGl6ZSIsInN5bWJvbHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLQTs7QUFLQTs7QUFLQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7OztBQUNBOzs7O0FBQ0E7Ozs7Ozs7O0FBdEJBO0FBQ0EsSUFBSSxDQUFDQSxLQUFLLENBQUNDLGlCQUFYLEVBQThCO0FBQzdCQyxFQUFBQSxPQUFPLENBQUMsNkJBQUQsQ0FBUDtBQUNBOztNQUtjQyxLLHNCQUFBQSxLO01BQU9DLFEsc0JBQUFBLFE7TUFBVUMsTSxzQkFBQUEsTTtNQUFRQyxTLHNCQUFBQSxTO01BQVdDLE8sc0JBQUFBLE8iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmICghRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcblx0cmVxdWlyZSgnc291cmNlLW1hcC1zdXBwb3J0L3JlZ2lzdGVyJyk7XG59XG5cbmltcG9ydCBzbm9vcGxvZ2cgZnJvbSAnc25vb3Bsb2dnJztcblxuZXhwb3J0IHsgc25vb3Bsb2dnIH07XG5leHBvcnQgY29uc3QgeyBjaGFsaywgaHVtYW5pemUsIG1vbWVudCwgcGx1cmFsaXplLCBzeW1ib2xzIH0gPSBzbm9vcGxvZ2c7XG5cbmV4cG9ydCB7XG5cdGRlZmF1bHQsXG5cdGRlZmF1bHQgYXMgQ0xJXG59IGZyb20gJy4vY2xpJztcblxuaW1wb3J0IEFyZ3VtZW50IGZyb20gJy4vcGFyc2VyL2FyZ3VtZW50JztcbmltcG9ydCBDb21tYW5kIGZyb20gJy4vcGFyc2VyL2NvbW1hbmQnO1xuaW1wb3J0IE9wdGlvbiBmcm9tICcuL3BhcnNlci9vcHRpb24nO1xuaW1wb3J0IEV4dGVuc2lvbiBmcm9tICcuL3BhcnNlci9leHRlbnNpb24nO1xuXG5pbXBvcnQgKiBhcyB0ZW1wbGF0ZSBmcm9tICcuL3JlbmRlci90ZW1wbGF0ZSc7XG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3BhcnNlci90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4vbGliL3V0aWwnO1xuXG5leHBvcnQge1xuXHRBcmd1bWVudCxcblx0Q29tbWFuZCxcblx0T3B0aW9uLFxuXHRFeHRlbnNpb24sXG5cdHRlbXBsYXRlLFxuXHR0eXBlcyxcblx0dXRpbFxufTtcbiJdLCJmaWxlIjoiaW5kZXguanMifQ== |
{ | ||
"name": "cli-kit", | ||
"version": "0.3.0", | ||
"version": "0.4.0-beta", | ||
"description": "Everything you need to create awesome command line interfaces", | ||
@@ -42,8 +42,11 @@ "main": "./dist/index.js", | ||
"dependencies": { | ||
"hook-emitter": "^3.0.0", | ||
"fast-levenshtein": "^2.0.6", | ||
"hook-emitter": "^3.0.2", | ||
"isexe": "^2.0.0", | ||
"kramed": "^0.5.6", | ||
"lodash.camelcase": "^4.3.0", | ||
"pkg-dir": "^2.0.0", | ||
"snooplogg": "^1.10.1", | ||
"source-map-support": "^0.5.6", | ||
"marked-terminal": "^3.0.0", | ||
"pkg-dir": "^3.0.0", | ||
"snooplogg": "^1.12.1", | ||
"source-map-support": "^0.5.9", | ||
"which": "^1.3.1" | ||
@@ -54,3 +57,3 @@ }, | ||
"@babel/register": "latest", | ||
"babel-eslint": "^8.2.3", | ||
"babel-eslint": "^8.2.6", | ||
"babel-plugin-istanbul": "^4.1.6", | ||
@@ -65,3 +68,3 @@ "babel-plugin-transform-class-properties": "next", | ||
"codeclimate-test-reporter": "^0.5.0", | ||
"coveralls": "^3.0.1", | ||
"coveralls": "^3.0.2", | ||
"esdoc": "^1.1.0", | ||
@@ -71,7 +74,7 @@ "esdoc-ecmascript-proposal-plugin": "^1.0.0", | ||
"eslint-plugin-security": "^1.4.0", | ||
"fs-extra": "^6.0.1", | ||
"fs-extra": "^7.0.0", | ||
"gulp": "^3.9.1", | ||
"gulp-babel": "next", | ||
"gulp-debug": "^3.2.0", | ||
"gulp-eslint": "^4.0.2", | ||
"gulp-debug": "^4.0.0", | ||
"gulp-eslint": "^5.0.0", | ||
"gulp-load-plugins": "^1.5.0", | ||
@@ -83,5 +86,5 @@ "gulp-plumber": "^1.2.0", | ||
"mocha": "^5.2.0", | ||
"nyc": "^11.8.0", | ||
"sinon": "^5.0.10", | ||
"sinon-chai": "^3.1.0", | ||
"nyc": "^12.0.2", | ||
"sinon": "^6.1.5", | ||
"sinon-chai": "^3.2.0", | ||
"tmp": "^0.0.33" | ||
@@ -88,0 +91,0 @@ }, |
@@ -5,2 +5,4 @@ > Note: cli-kit is under development. | ||
[](https://greenkeeper.io/) | ||
[![NPM Version][npm-image]][npm-url] | ||
@@ -21,11 +23,14 @@ [![NPM Downloads][downloads-image]][downloads-url] | ||
* Auto-generated help | ||
* CLI template engine | ||
* Markdown/kramdown rendering | ||
* Extension support (e.g. wrap external CLI's) | ||
## Installation | ||
yarn add cli-kit --save | ||
```bash | ||
yarn add cli-kit --save | ||
# or | ||
npm i cli-kit --save | ||
``` | ||
or | ||
npm i cli-kit --save | ||
## Usage | ||
@@ -286,10 +291,10 @@ | ||
| Options support | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | | | | | | | | | ||
| Option validation | Coming soon! | :white_check_mark: | | | :white_check_mark: | | | | | | | | | ||
| Option validation | :white_check_mark: | :white_check_mark: | | | :white_check_mark: | | | | | | | | | ||
| Default values | :white_check_mark: | | | | | | | | | | | | | ||
| Flags support | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :x: | | | | | | | | | ||
| Argument support | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | | | | | | | | | ||
| Argument validation | Coming soon! | :white_check_mark: | | | :white_check_mark: | | | | | | | | | ||
| Argument validation | :white_check_mark: | :white_check_mark: | | | :white_check_mark: | | | | | | | | | ||
| Dynamic command hierarchies | :white_check_mark: | | | | | | | | | | | | | ||
| Automatic parsed value data type coercion | :white_check_mark: | :white_check_mark: | Numbers only | | Numbers and Booleans | | | | | | | | | ||
| Parsed value transforming | Coming soon! | | | | | | | | | | | | | ||
| Parsed value transforming | :white_check_mark: | | | | | | | | | | | | | ||
| Auto-generated help screen | :white_check_mark: | :white_check_mark: | | | :x: | | :white_check_mark: | | | | | | | ||
@@ -303,3 +308,3 @@ | Help exits with code | :white_check_mark: | | | | | | :white_check_mark: | | | | | | | ||
| --------------------------------------------- | ------------------ | ------------------ | ------------------ | ------------------ | ------------------------------------- | ------------------ | ------------------ | | ||
| Actively maintained <br> (within last year) | :white_check_mark: | :white_check_mark: | | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | | ||
| Actively maintained <br> (within last year) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | | ||
| Open Source | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | ||
@@ -306,0 +311,0 @@ | Language | JavaScript | JavaScript | TypeScript | JavaScript | JavaScript | JavaScript | JavaScript | |
AI-detected possible typosquat
Supply chain riskAI has identified this package as a potential typosquat of a more popular package. This suggests that the package may be intentionally mimicking another package's name, description, or other metadata.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
463948
27
4965
332
10
9
4
+ Addedfast-levenshtein@^2.0.6
+ Addedkramed@^0.5.6
+ Addedmarked-terminal@^3.0.0
+ Addedansi-escapes@3.2.0(transitive)
+ Addedansicolors@0.3.2(transitive)
+ Addedcardinal@2.1.1(transitive)
+ Addedcli-table@0.3.11(transitive)
+ Addedcolors@1.0.3(transitive)
+ Addedesprima@4.0.1(transitive)
+ Addedfast-levenshtein@2.0.6(transitive)
+ Addedfind-up@3.0.0(transitive)
+ Addedhas-flag@2.0.0(transitive)
+ Addedkramed@0.5.6(transitive)
+ Addedlocate-path@3.0.0(transitive)
+ Addedlodash@4.17.21(transitive)
+ Addedmarked@0.7.0(transitive)
+ Addedmarked-terminal@3.3.0(transitive)
+ Addednode-emoji@1.11.0(transitive)
+ Addedp-limit@2.3.0(transitive)
+ Addedp-locate@3.0.0(transitive)
+ Addedp-try@2.2.0(transitive)
+ Addedpkg-dir@3.0.0(transitive)
+ Addedredeyed@2.1.1(transitive)
+ Addedsupports-hyperlinks@1.0.1(transitive)
- Removedfind-up@2.1.0(transitive)
- Removedlocate-path@2.0.0(transitive)
- Removedp-limit@1.3.0(transitive)
- Removedp-locate@2.0.0(transitive)
- Removedp-try@1.0.0(transitive)
- Removedpkg-dir@2.0.0(transitive)
Updatedhook-emitter@^3.0.2
Updatedpkg-dir@^3.0.0
Updatedsnooplogg@^1.12.1
Updatedsource-map-support@^0.5.9