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

cli-kit

Package Overview
Dependencies
Maintainers
1
Versions
107
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

cli-kit - npm Package Compare versions

Comparing version 0.3.0 to 0.4.0-beta

dist/commands/help.js

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.

[![Greenkeeper badge](https://badges.greenkeeper.io/cb1kenobi/cli-kit.svg)](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 |

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc