Add node modules and compiled JavaScript from main (#57)
Co-authored-by: Oliver King <oking3@uncc.edu>
This commit is contained in:
parent
d893f27da9
commit
7f7e5ba5ea
6750 changed files with 1745644 additions and 10860 deletions
2
node_modules/yargs/build/lib/apply-extends.d.ts
generated
vendored
Normal file
2
node_modules/yargs/build/lib/apply-extends.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
import { Dictionary } from './common-types';
|
||||
export declare function applyExtends(config: Dictionary, cwd: string, mergeExtends?: boolean): Dictionary;
|
65
node_modules/yargs/build/lib/apply-extends.js
generated
vendored
Normal file
65
node_modules/yargs/build/lib/apply-extends.js
generated
vendored
Normal file
|
@ -0,0 +1,65 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.applyExtends = void 0;
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const yerror_1 = require("./yerror");
|
||||
let previouslyVisitedConfigs = [];
|
||||
function checkForCircularExtends(cfgPath) {
|
||||
if (previouslyVisitedConfigs.indexOf(cfgPath) > -1) {
|
||||
throw new yerror_1.YError(`Circular extended configurations: '${cfgPath}'.`);
|
||||
}
|
||||
}
|
||||
function getPathToDefaultConfig(cwd, pathToExtend) {
|
||||
return path.resolve(cwd, pathToExtend);
|
||||
}
|
||||
function mergeDeep(config1, config2) {
|
||||
const target = {};
|
||||
function isObject(obj) {
|
||||
return obj && typeof obj === 'object' && !Array.isArray(obj);
|
||||
}
|
||||
Object.assign(target, config1);
|
||||
for (const key of Object.keys(config2)) {
|
||||
if (isObject(config2[key]) && isObject(target[key])) {
|
||||
target[key] = mergeDeep(config1[key], config2[key]);
|
||||
}
|
||||
else {
|
||||
target[key] = config2[key];
|
||||
}
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function applyExtends(config, cwd, mergeExtends = false) {
|
||||
let defaultConfig = {};
|
||||
if (Object.prototype.hasOwnProperty.call(config, 'extends')) {
|
||||
if (typeof config.extends !== 'string')
|
||||
return defaultConfig;
|
||||
const isPath = /\.json|\..*rc$/.test(config.extends);
|
||||
let pathToDefault = null;
|
||||
if (!isPath) {
|
||||
try {
|
||||
pathToDefault = require.resolve(config.extends);
|
||||
}
|
||||
catch (err) {
|
||||
// most likely this simply isn't a module.
|
||||
}
|
||||
}
|
||||
else {
|
||||
pathToDefault = getPathToDefaultConfig(cwd, config.extends);
|
||||
}
|
||||
// maybe the module uses key for some other reason,
|
||||
// err on side of caution.
|
||||
if (!pathToDefault && !isPath)
|
||||
return config;
|
||||
if (!pathToDefault)
|
||||
throw new yerror_1.YError(`Unable to find extended config '${config.extends}' in '${cwd}'.`);
|
||||
checkForCircularExtends(pathToDefault);
|
||||
previouslyVisitedConfigs.push(pathToDefault);
|
||||
defaultConfig = isPath ? JSON.parse(fs.readFileSync(pathToDefault, 'utf8')) : require(config.extends);
|
||||
delete config.extends;
|
||||
defaultConfig = applyExtends(defaultConfig, path.dirname(pathToDefault), mergeExtends);
|
||||
}
|
||||
previouslyVisitedConfigs = [];
|
||||
return mergeExtends ? mergeDeep(defaultConfig, config) : Object.assign({}, defaultConfig, config);
|
||||
}
|
||||
exports.applyExtends = applyExtends;
|
2
node_modules/yargs/build/lib/argsert.d.ts
generated
vendored
Normal file
2
node_modules/yargs/build/lib/argsert.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
export declare function argsert(callerArguments: any[], length?: number): void;
|
||||
export declare function argsert(expected: string, callerArguments: any[], length?: number): void;
|
65
node_modules/yargs/build/lib/argsert.js
generated
vendored
Normal file
65
node_modules/yargs/build/lib/argsert.js
generated
vendored
Normal file
|
@ -0,0 +1,65 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.argsert = void 0;
|
||||
const yerror_1 = require("./yerror");
|
||||
const parse_command_1 = require("./parse-command");
|
||||
const positionName = ['first', 'second', 'third', 'fourth', 'fifth', 'sixth'];
|
||||
function argsert(arg1, arg2, arg3) {
|
||||
function parseArgs() {
|
||||
return typeof arg1 === 'object'
|
||||
? [{ demanded: [], optional: [] }, arg1, arg2]
|
||||
: [parse_command_1.parseCommand(`cmd ${arg1}`), arg2, arg3];
|
||||
}
|
||||
// TODO: should this eventually raise an exception.
|
||||
try {
|
||||
// preface the argument description with "cmd", so
|
||||
// that we can run it through yargs' command parser.
|
||||
let position = 0;
|
||||
let [parsed, callerArguments, length] = parseArgs();
|
||||
const args = [].slice.call(callerArguments);
|
||||
while (args.length && args[args.length - 1] === undefined)
|
||||
args.pop();
|
||||
length = length || args.length;
|
||||
if (length < parsed.demanded.length) {
|
||||
throw new yerror_1.YError(`Not enough arguments provided. Expected ${parsed.demanded.length} but received ${args.length}.`);
|
||||
}
|
||||
const totalCommands = parsed.demanded.length + parsed.optional.length;
|
||||
if (length > totalCommands) {
|
||||
throw new yerror_1.YError(`Too many arguments provided. Expected max ${totalCommands} but received ${length}.`);
|
||||
}
|
||||
parsed.demanded.forEach((demanded) => {
|
||||
const arg = args.shift();
|
||||
const observedType = guessType(arg);
|
||||
const matchingTypes = demanded.cmd.filter(type => type === observedType || type === '*');
|
||||
if (matchingTypes.length === 0)
|
||||
argumentTypeError(observedType, demanded.cmd, position);
|
||||
position += 1;
|
||||
});
|
||||
parsed.optional.forEach((optional) => {
|
||||
if (args.length === 0)
|
||||
return;
|
||||
const arg = args.shift();
|
||||
const observedType = guessType(arg);
|
||||
const matchingTypes = optional.cmd.filter(type => type === observedType || type === '*');
|
||||
if (matchingTypes.length === 0)
|
||||
argumentTypeError(observedType, optional.cmd, position);
|
||||
position += 1;
|
||||
});
|
||||
}
|
||||
catch (err) {
|
||||
console.warn(err.stack);
|
||||
}
|
||||
}
|
||||
exports.argsert = argsert;
|
||||
function guessType(arg) {
|
||||
if (Array.isArray(arg)) {
|
||||
return 'array';
|
||||
}
|
||||
else if (arg === null) {
|
||||
return 'null';
|
||||
}
|
||||
return typeof arg;
|
||||
}
|
||||
function argumentTypeError(observedType, allowedTypes, position) {
|
||||
throw new yerror_1.YError(`Invalid ${positionName[position] || 'manyith'} argument. Expected ${allowedTypes.join(' or ')} but received ${observedType}.`);
|
||||
}
|
64
node_modules/yargs/build/lib/command.d.ts
generated
vendored
Normal file
64
node_modules/yargs/build/lib/command.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,64 @@
|
|||
/// <reference types="node" />
|
||||
import { Dictionary } from './common-types';
|
||||
import { Middleware } from './middleware';
|
||||
import { Positional } from './parse-command';
|
||||
import { RequireDirectoryOptions } from 'require-directory';
|
||||
import { UsageInstance } from './usage';
|
||||
import { ValidationInstance } from './validation';
|
||||
import { YargsInstance, Options, OptionDefinition, Context, Arguments, DetailedArguments } from './yargs';
|
||||
export declare function command(yargs: YargsInstance, usage: UsageInstance, validation: ValidationInstance, globalMiddleware?: Middleware[]): CommandInstance;
|
||||
/** Instance of the command module. */
|
||||
export interface CommandInstance {
|
||||
addDirectory(dir: string, context: Context, req: NodeRequireFunction, callerFile: string, opts?: RequireDirectoryOptions<any>): void;
|
||||
addHandler(handler: CommandHandlerDefinition): void;
|
||||
addHandler(cmd: string | string[], description: CommandHandler['description'], builder?: CommandBuilderDefinition | CommandBuilder, handler?: CommandHandlerCallback, commandMiddleware?: Middleware[], deprecated?: boolean): void;
|
||||
cmdToParseOptions(cmdString: string): Positionals;
|
||||
freeze(): void;
|
||||
getCommandHandlers(): Dictionary<CommandHandler>;
|
||||
getCommands(): string[];
|
||||
hasDefaultCommand(): boolean;
|
||||
reset(): CommandInstance;
|
||||
runCommand(command: string | null, yargs: YargsInstance, parsed: DetailedArguments, commandIndex?: number): Arguments | Promise<Arguments>;
|
||||
runDefaultBuilderOn(yargs: YargsInstance): void;
|
||||
unfreeze(): void;
|
||||
}
|
||||
export interface CommandHandlerDefinition extends Partial<Pick<CommandHandler, 'deprecated' | 'description' | 'handler' | 'middlewares'>> {
|
||||
aliases?: string[];
|
||||
builder?: CommandBuilder | CommandBuilderDefinition;
|
||||
command?: string | string[];
|
||||
desc?: CommandHandler['description'];
|
||||
describe?: CommandHandler['description'];
|
||||
}
|
||||
export declare function isCommandHandlerDefinition(cmd: string | string[] | CommandHandlerDefinition): cmd is CommandHandlerDefinition;
|
||||
export interface CommandBuilderDefinition {
|
||||
builder?: CommandBuilder;
|
||||
deprecated?: boolean;
|
||||
handler: CommandHandlerCallback;
|
||||
middlewares?: Middleware[];
|
||||
}
|
||||
export declare function isCommandBuilderDefinition(builder?: CommandBuilder | CommandBuilderDefinition): builder is CommandBuilderDefinition;
|
||||
export interface CommandHandlerCallback {
|
||||
(argv: Arguments): any;
|
||||
}
|
||||
export interface CommandHandler {
|
||||
builder: CommandBuilder;
|
||||
demanded: Positional[];
|
||||
deprecated?: boolean;
|
||||
description?: string | false;
|
||||
handler: CommandHandlerCallback;
|
||||
middlewares: Middleware[];
|
||||
optional: Positional[];
|
||||
original: string;
|
||||
}
|
||||
export declare type CommandBuilder = CommandBuilderCallback | Dictionary<OptionDefinition>;
|
||||
interface CommandBuilderCallback {
|
||||
(y: YargsInstance): YargsInstance | void;
|
||||
}
|
||||
export declare function isCommandBuilderCallback(builder: CommandBuilder): builder is CommandBuilderCallback;
|
||||
interface Positionals extends Pick<Options, 'alias' | 'array' | 'default'> {
|
||||
demand: Dictionary<boolean>;
|
||||
}
|
||||
export interface FinishCommandHandler {
|
||||
(handlerResult: any): any;
|
||||
}
|
||||
export {};
|
416
node_modules/yargs/build/lib/command.js
generated
vendored
Normal file
416
node_modules/yargs/build/lib/command.js
generated
vendored
Normal file
|
@ -0,0 +1,416 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.isCommandBuilderCallback = exports.isCommandBuilderDefinition = exports.isCommandHandlerDefinition = exports.command = void 0;
|
||||
const common_types_1 = require("./common-types");
|
||||
const is_promise_1 = require("./is-promise");
|
||||
const middleware_1 = require("./middleware");
|
||||
const parse_command_1 = require("./parse-command");
|
||||
const path = require("path");
|
||||
const util_1 = require("util");
|
||||
const yargs_1 = require("./yargs");
|
||||
const requireDirectory = require("require-directory");
|
||||
const whichModule = require("which-module");
|
||||
const Parser = require("yargs-parser");
|
||||
const DEFAULT_MARKER = /(^\*)|(^\$0)/;
|
||||
// handles parsing positional arguments,
|
||||
// and populating argv with said positional
|
||||
// arguments.
|
||||
function command(yargs, usage, validation, globalMiddleware = []) {
|
||||
const self = {};
|
||||
let handlers = {};
|
||||
let aliasMap = {};
|
||||
let defaultCommand;
|
||||
self.addHandler = function addHandler(cmd, description, builder, handler, commandMiddleware, deprecated) {
|
||||
let aliases = [];
|
||||
const middlewares = middleware_1.commandMiddlewareFactory(commandMiddleware);
|
||||
handler = handler || (() => { });
|
||||
if (Array.isArray(cmd)) {
|
||||
aliases = cmd.slice(1);
|
||||
cmd = cmd[0];
|
||||
}
|
||||
else if (isCommandHandlerDefinition(cmd)) {
|
||||
let command = (Array.isArray(cmd.command) || typeof cmd.command === 'string') ? cmd.command : moduleName(cmd);
|
||||
if (cmd.aliases)
|
||||
command = [].concat(command).concat(cmd.aliases);
|
||||
self.addHandler(command, extractDesc(cmd), cmd.builder, cmd.handler, cmd.middlewares, cmd.deprecated);
|
||||
return;
|
||||
}
|
||||
// allow a module to be provided instead of separate builder and handler
|
||||
if (isCommandBuilderDefinition(builder)) {
|
||||
self.addHandler([cmd].concat(aliases), description, builder.builder, builder.handler, builder.middlewares, builder.deprecated);
|
||||
return;
|
||||
}
|
||||
// parse positionals out of cmd string
|
||||
const parsedCommand = parse_command_1.parseCommand(cmd);
|
||||
// remove positional args from aliases only
|
||||
aliases = aliases.map(alias => parse_command_1.parseCommand(alias).cmd);
|
||||
// check for default and filter out '*''
|
||||
let isDefault = false;
|
||||
const parsedAliases = [parsedCommand.cmd].concat(aliases).filter((c) => {
|
||||
if (DEFAULT_MARKER.test(c)) {
|
||||
isDefault = true;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
// standardize on $0 for default command.
|
||||
if (parsedAliases.length === 0 && isDefault)
|
||||
parsedAliases.push('$0');
|
||||
// shift cmd and aliases after filtering out '*'
|
||||
if (isDefault) {
|
||||
parsedCommand.cmd = parsedAliases[0];
|
||||
aliases = parsedAliases.slice(1);
|
||||
cmd = cmd.replace(DEFAULT_MARKER, parsedCommand.cmd);
|
||||
}
|
||||
// populate aliasMap
|
||||
aliases.forEach((alias) => {
|
||||
aliasMap[alias] = parsedCommand.cmd;
|
||||
});
|
||||
if (description !== false) {
|
||||
usage.command(cmd, description, isDefault, aliases, deprecated);
|
||||
}
|
||||
handlers[parsedCommand.cmd] = {
|
||||
original: cmd,
|
||||
description,
|
||||
handler,
|
||||
builder: builder || {},
|
||||
middlewares,
|
||||
deprecated,
|
||||
demanded: parsedCommand.demanded,
|
||||
optional: parsedCommand.optional
|
||||
};
|
||||
if (isDefault)
|
||||
defaultCommand = handlers[parsedCommand.cmd];
|
||||
};
|
||||
self.addDirectory = function addDirectory(dir, context, req, callerFile, opts) {
|
||||
opts = opts || {};
|
||||
// disable recursion to support nested directories of subcommands
|
||||
if (typeof opts.recurse !== 'boolean')
|
||||
opts.recurse = false;
|
||||
// exclude 'json', 'coffee' from require-directory defaults
|
||||
if (!Array.isArray(opts.extensions))
|
||||
opts.extensions = ['js'];
|
||||
// allow consumer to define their own visitor function
|
||||
const parentVisit = typeof opts.visit === 'function' ? opts.visit : (o) => o;
|
||||
// call addHandler via visitor function
|
||||
opts.visit = function visit(obj, joined, filename) {
|
||||
const visited = parentVisit(obj, joined, filename);
|
||||
// allow consumer to skip modules with their own visitor
|
||||
if (visited) {
|
||||
// check for cyclic reference
|
||||
// each command file path should only be seen once per execution
|
||||
if (~context.files.indexOf(joined))
|
||||
return visited;
|
||||
// keep track of visited files in context.files
|
||||
context.files.push(joined);
|
||||
self.addHandler(visited);
|
||||
}
|
||||
return visited;
|
||||
};
|
||||
requireDirectory({ require: req, filename: callerFile }, dir, opts);
|
||||
};
|
||||
// lookup module object from require()d command and derive name
|
||||
// if module was not require()d and no name given, throw error
|
||||
function moduleName(obj) {
|
||||
const mod = whichModule(obj);
|
||||
if (!mod)
|
||||
throw new Error(`No command name given for module: ${util_1.inspect(obj)}`);
|
||||
return commandFromFilename(mod.filename);
|
||||
}
|
||||
// derive command name from filename
|
||||
function commandFromFilename(filename) {
|
||||
return path.basename(filename, path.extname(filename));
|
||||
}
|
||||
function extractDesc({ describe, description, desc }) {
|
||||
for (const test of [describe, description, desc]) {
|
||||
if (typeof test === 'string' || test === false)
|
||||
return test;
|
||||
common_types_1.assertNotStrictEqual(test, true);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
self.getCommands = () => Object.keys(handlers).concat(Object.keys(aliasMap));
|
||||
self.getCommandHandlers = () => handlers;
|
||||
self.hasDefaultCommand = () => !!defaultCommand;
|
||||
self.runCommand = function runCommand(command, yargs, parsed, commandIndex) {
|
||||
let aliases = parsed.aliases;
|
||||
const commandHandler = handlers[command] || handlers[aliasMap[command]] || defaultCommand;
|
||||
const currentContext = yargs.getContext();
|
||||
let numFiles = currentContext.files.length;
|
||||
const parentCommands = currentContext.commands.slice();
|
||||
// what does yargs look like after the builder is run?
|
||||
let innerArgv = parsed.argv;
|
||||
let positionalMap = {};
|
||||
if (command) {
|
||||
currentContext.commands.push(command);
|
||||
currentContext.fullCommands.push(commandHandler.original);
|
||||
}
|
||||
const builder = commandHandler.builder;
|
||||
if (isCommandBuilderCallback(builder)) {
|
||||
// a function can be provided, which builds
|
||||
// up a yargs chain and possibly returns it.
|
||||
const builderOutput = builder(yargs.reset(parsed.aliases));
|
||||
const innerYargs = yargs_1.isYargsInstance(builderOutput) ? builderOutput : yargs;
|
||||
if (shouldUpdateUsage(innerYargs)) {
|
||||
innerYargs.getUsageInstance().usage(usageFromParentCommandsCommandHandler(parentCommands, commandHandler), commandHandler.description);
|
||||
}
|
||||
innerArgv = innerYargs._parseArgs(null, null, true, commandIndex);
|
||||
aliases = innerYargs.parsed.aliases;
|
||||
}
|
||||
else if (isCommandBuilderOptionDefinitions(builder)) {
|
||||
// as a short hand, an object can instead be provided, specifying
|
||||
// the options that a command takes.
|
||||
const innerYargs = yargs.reset(parsed.aliases);
|
||||
if (shouldUpdateUsage(innerYargs)) {
|
||||
innerYargs.getUsageInstance().usage(usageFromParentCommandsCommandHandler(parentCommands, commandHandler), commandHandler.description);
|
||||
}
|
||||
Object.keys(commandHandler.builder).forEach((key) => {
|
||||
innerYargs.option(key, builder[key]);
|
||||
});
|
||||
innerArgv = innerYargs._parseArgs(null, null, true, commandIndex);
|
||||
aliases = innerYargs.parsed.aliases;
|
||||
}
|
||||
if (!yargs._hasOutput()) {
|
||||
positionalMap = populatePositionals(commandHandler, innerArgv, currentContext);
|
||||
}
|
||||
const middlewares = globalMiddleware.slice(0).concat(commandHandler.middlewares);
|
||||
middleware_1.applyMiddleware(innerArgv, yargs, middlewares, true);
|
||||
// we apply validation post-hoc, so that custom
|
||||
// checks get passed populated positional arguments.
|
||||
if (!yargs._hasOutput()) {
|
||||
yargs._runValidation(innerArgv, aliases, positionalMap, yargs.parsed.error, !command);
|
||||
}
|
||||
if (commandHandler.handler && !yargs._hasOutput()) {
|
||||
yargs._setHasOutput();
|
||||
// to simplify the parsing of positionals in commands,
|
||||
// we temporarily populate '--' rather than _, with arguments
|
||||
const populateDoubleDash = !!yargs.getOptions().configuration['populate--'];
|
||||
if (!populateDoubleDash)
|
||||
yargs._copyDoubleDash(innerArgv);
|
||||
innerArgv = middleware_1.applyMiddleware(innerArgv, yargs, middlewares, false);
|
||||
let handlerResult;
|
||||
if (is_promise_1.isPromise(innerArgv)) {
|
||||
handlerResult = innerArgv.then(argv => commandHandler.handler(argv));
|
||||
}
|
||||
else {
|
||||
handlerResult = commandHandler.handler(innerArgv);
|
||||
}
|
||||
const handlerFinishCommand = yargs.getHandlerFinishCommand();
|
||||
if (is_promise_1.isPromise(handlerResult)) {
|
||||
yargs.getUsageInstance().cacheHelpMessage();
|
||||
handlerResult
|
||||
.then(value => {
|
||||
if (handlerFinishCommand) {
|
||||
handlerFinishCommand(value);
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
try {
|
||||
yargs.getUsageInstance().fail(null, error);
|
||||
}
|
||||
catch (err) {
|
||||
// fail's throwing would cause an unhandled rejection.
|
||||
}
|
||||
})
|
||||
.then(() => {
|
||||
yargs.getUsageInstance().clearCachedHelpMessage();
|
||||
});
|
||||
}
|
||||
else {
|
||||
if (handlerFinishCommand) {
|
||||
handlerFinishCommand(handlerResult);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (command) {
|
||||
currentContext.commands.pop();
|
||||
currentContext.fullCommands.pop();
|
||||
}
|
||||
numFiles = currentContext.files.length - numFiles;
|
||||
if (numFiles > 0)
|
||||
currentContext.files.splice(numFiles * -1, numFiles);
|
||||
return innerArgv;
|
||||
};
|
||||
function shouldUpdateUsage(yargs) {
|
||||
return !yargs.getUsageInstance().getUsageDisabled() &&
|
||||
yargs.getUsageInstance().getUsage().length === 0;
|
||||
}
|
||||
function usageFromParentCommandsCommandHandler(parentCommands, commandHandler) {
|
||||
const c = DEFAULT_MARKER.test(commandHandler.original) ? commandHandler.original.replace(DEFAULT_MARKER, '').trim() : commandHandler.original;
|
||||
const pc = parentCommands.filter((c) => { return !DEFAULT_MARKER.test(c); });
|
||||
pc.push(c);
|
||||
return `$0 ${pc.join(' ')}`;
|
||||
}
|
||||
self.runDefaultBuilderOn = function (yargs) {
|
||||
common_types_1.assertNotStrictEqual(defaultCommand, undefined);
|
||||
if (shouldUpdateUsage(yargs)) {
|
||||
// build the root-level command string from the default string.
|
||||
const commandString = DEFAULT_MARKER.test(defaultCommand.original)
|
||||
? defaultCommand.original : defaultCommand.original.replace(/^[^[\]<>]*/, '$0 ');
|
||||
yargs.getUsageInstance().usage(commandString, defaultCommand.description);
|
||||
}
|
||||
const builder = defaultCommand.builder;
|
||||
if (isCommandBuilderCallback(builder)) {
|
||||
builder(yargs);
|
||||
}
|
||||
else {
|
||||
Object.keys(builder).forEach((key) => {
|
||||
yargs.option(key, builder[key]);
|
||||
});
|
||||
}
|
||||
};
|
||||
// transcribe all positional arguments "command <foo> <bar> [apple]"
|
||||
// onto argv.
|
||||
function populatePositionals(commandHandler, argv, context) {
|
||||
argv._ = argv._.slice(context.commands.length); // nuke the current commands
|
||||
const demanded = commandHandler.demanded.slice(0);
|
||||
const optional = commandHandler.optional.slice(0);
|
||||
const positionalMap = {};
|
||||
validation.positionalCount(demanded.length, argv._.length);
|
||||
while (demanded.length) {
|
||||
const demand = demanded.shift();
|
||||
populatePositional(demand, argv, positionalMap);
|
||||
}
|
||||
while (optional.length) {
|
||||
const maybe = optional.shift();
|
||||
populatePositional(maybe, argv, positionalMap);
|
||||
}
|
||||
argv._ = context.commands.concat(argv._);
|
||||
postProcessPositionals(argv, positionalMap, self.cmdToParseOptions(commandHandler.original));
|
||||
return positionalMap;
|
||||
}
|
||||
function populatePositional(positional, argv, positionalMap) {
|
||||
const cmd = positional.cmd[0];
|
||||
if (positional.variadic) {
|
||||
positionalMap[cmd] = argv._.splice(0).map(String);
|
||||
}
|
||||
else {
|
||||
if (argv._.length)
|
||||
positionalMap[cmd] = [String(argv._.shift())];
|
||||
}
|
||||
}
|
||||
// we run yargs-parser against the positional arguments
|
||||
// applying the same parsing logic used for flags.
|
||||
function postProcessPositionals(argv, positionalMap, parseOptions) {
|
||||
// combine the parsing hints we've inferred from the command
|
||||
// string with explicitly configured parsing hints.
|
||||
const options = Object.assign({}, yargs.getOptions());
|
||||
options.default = Object.assign(parseOptions.default, options.default);
|
||||
for (const key of Object.keys(parseOptions.alias)) {
|
||||
options.alias[key] = (options.alias[key] || []).concat(parseOptions.alias[key]);
|
||||
}
|
||||
options.array = options.array.concat(parseOptions.array);
|
||||
delete options.config; // don't load config when processing positionals.
|
||||
const unparsed = [];
|
||||
Object.keys(positionalMap).forEach((key) => {
|
||||
positionalMap[key].map((value) => {
|
||||
if (options.configuration['unknown-options-as-args'])
|
||||
options.key[key] = true;
|
||||
unparsed.push(`--${key}`);
|
||||
unparsed.push(value);
|
||||
});
|
||||
});
|
||||
// short-circuit parse.
|
||||
if (!unparsed.length)
|
||||
return;
|
||||
const config = Object.assign({}, options.configuration, {
|
||||
'populate--': true
|
||||
});
|
||||
const parsed = Parser.detailed(unparsed, Object.assign({}, options, {
|
||||
configuration: config
|
||||
}));
|
||||
if (parsed.error) {
|
||||
yargs.getUsageInstance().fail(parsed.error.message, parsed.error);
|
||||
}
|
||||
else {
|
||||
// only copy over positional keys (don't overwrite
|
||||
// flag arguments that were already parsed).
|
||||
const positionalKeys = Object.keys(positionalMap);
|
||||
Object.keys(positionalMap).forEach((key) => {
|
||||
positionalKeys.push(...parsed.aliases[key]);
|
||||
});
|
||||
Object.keys(parsed.argv).forEach((key) => {
|
||||
if (positionalKeys.indexOf(key) !== -1) {
|
||||
// any new aliases need to be placed in positionalMap, which
|
||||
// is used for validation.
|
||||
if (!positionalMap[key])
|
||||
positionalMap[key] = parsed.argv[key];
|
||||
argv[key] = parsed.argv[key];
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
self.cmdToParseOptions = function (cmdString) {
|
||||
const parseOptions = {
|
||||
array: [],
|
||||
default: {},
|
||||
alias: {},
|
||||
demand: {}
|
||||
};
|
||||
const parsed = parse_command_1.parseCommand(cmdString);
|
||||
parsed.demanded.forEach((d) => {
|
||||
const [cmd, ...aliases] = d.cmd;
|
||||
if (d.variadic) {
|
||||
parseOptions.array.push(cmd);
|
||||
parseOptions.default[cmd] = [];
|
||||
}
|
||||
parseOptions.alias[cmd] = aliases;
|
||||
parseOptions.demand[cmd] = true;
|
||||
});
|
||||
parsed.optional.forEach((o) => {
|
||||
const [cmd, ...aliases] = o.cmd;
|
||||
if (o.variadic) {
|
||||
parseOptions.array.push(cmd);
|
||||
parseOptions.default[cmd] = [];
|
||||
}
|
||||
parseOptions.alias[cmd] = aliases;
|
||||
});
|
||||
return parseOptions;
|
||||
};
|
||||
self.reset = () => {
|
||||
handlers = {};
|
||||
aliasMap = {};
|
||||
defaultCommand = undefined;
|
||||
return self;
|
||||
};
|
||||
// used by yargs.parse() to freeze
|
||||
// the state of commands such that
|
||||
// we can apply .parse() multiple times
|
||||
// with the same yargs instance.
|
||||
const frozens = [];
|
||||
self.freeze = () => {
|
||||
frozens.push({
|
||||
handlers,
|
||||
aliasMap,
|
||||
defaultCommand
|
||||
});
|
||||
};
|
||||
self.unfreeze = () => {
|
||||
const frozen = frozens.pop();
|
||||
common_types_1.assertNotStrictEqual(frozen, undefined);
|
||||
({
|
||||
handlers,
|
||||
aliasMap,
|
||||
defaultCommand
|
||||
} = frozen);
|
||||
};
|
||||
return self;
|
||||
}
|
||||
exports.command = command;
|
||||
function isCommandHandlerDefinition(cmd) {
|
||||
return typeof cmd === 'object';
|
||||
}
|
||||
exports.isCommandHandlerDefinition = isCommandHandlerDefinition;
|
||||
function isCommandBuilderDefinition(builder) {
|
||||
return typeof builder === 'object' &&
|
||||
!!builder.builder &&
|
||||
typeof builder.handler === 'function';
|
||||
}
|
||||
exports.isCommandBuilderDefinition = isCommandBuilderDefinition;
|
||||
function isCommandBuilderCallback(builder) {
|
||||
return typeof builder === 'function';
|
||||
}
|
||||
exports.isCommandBuilderCallback = isCommandBuilderCallback;
|
||||
function isCommandBuilderOptionDefinitions(builder) {
|
||||
return typeof builder === 'object';
|
||||
}
|
36
node_modules/yargs/build/lib/common-types.d.ts
generated
vendored
Normal file
36
node_modules/yargs/build/lib/common-types.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,36 @@
|
|||
/**
|
||||
* An object whose all properties have the same type.
|
||||
*/
|
||||
export declare type Dictionary<T = any> = {
|
||||
[key: string]: T;
|
||||
};
|
||||
/**
|
||||
* Returns the keys of T that match Dictionary<U> and are not arrays.
|
||||
*/
|
||||
export declare type DictionaryKeyof<T, U = any> = Exclude<KeyOf<T, Dictionary<U>>, KeyOf<T, any[]>>;
|
||||
/**
|
||||
* Returns the keys of T that match U.
|
||||
*/
|
||||
export declare type KeyOf<T, U> = Exclude<{
|
||||
[K in keyof T]: T[K] extends U ? K : never;
|
||||
}[keyof T], undefined>;
|
||||
/**
|
||||
* An array whose first element is not undefined.
|
||||
*/
|
||||
export declare type NotEmptyArray<T = any> = [T, ...T[]];
|
||||
/**
|
||||
* Returns the type of a Dictionary or array values.
|
||||
*/
|
||||
export declare type ValueOf<T> = T extends (infer U)[] ? U : T[keyof T];
|
||||
/**
|
||||
* Typing wrapper around assert.notStrictEqual()
|
||||
*/
|
||||
export declare function assertNotStrictEqual<N, T>(actual: T | N, expected: N, message?: string | Error): asserts actual is Exclude<T, N>;
|
||||
/**
|
||||
* Asserts actual is a single key, not a key array or a key map.
|
||||
*/
|
||||
export declare function assertSingleKey(actual: string | string[] | Dictionary): asserts actual is string;
|
||||
/**
|
||||
* Typing wrapper around Object.keys()
|
||||
*/
|
||||
export declare function objectKeys<T>(object: T): (keyof T)[];
|
25
node_modules/yargs/build/lib/common-types.js
generated
vendored
Normal file
25
node_modules/yargs/build/lib/common-types.js
generated
vendored
Normal file
|
@ -0,0 +1,25 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.objectKeys = exports.assertSingleKey = exports.assertNotStrictEqual = void 0;
|
||||
const assert_1 = require("assert");
|
||||
/**
|
||||
* Typing wrapper around assert.notStrictEqual()
|
||||
*/
|
||||
function assertNotStrictEqual(actual, expected, message) {
|
||||
assert_1.notStrictEqual(actual, expected, message);
|
||||
}
|
||||
exports.assertNotStrictEqual = assertNotStrictEqual;
|
||||
/**
|
||||
* Asserts actual is a single key, not a key array or a key map.
|
||||
*/
|
||||
function assertSingleKey(actual) {
|
||||
assert_1.strictEqual(typeof actual, 'string');
|
||||
}
|
||||
exports.assertSingleKey = assertSingleKey;
|
||||
/**
|
||||
* Typing wrapper around Object.keys()
|
||||
*/
|
||||
function objectKeys(object) {
|
||||
return Object.keys(object);
|
||||
}
|
||||
exports.objectKeys = objectKeys;
|
2
node_modules/yargs/build/lib/completion-templates.d.ts
generated
vendored
Normal file
2
node_modules/yargs/build/lib/completion-templates.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
export declare const completionShTemplate = "###-begin-{{app_name}}-completions-###\n#\n# yargs command completion script\n#\n# Installation: {{app_path}} {{completion_command}} >> ~/.bashrc\n# or {{app_path}} {{completion_command}} >> ~/.bash_profile on OSX.\n#\n_yargs_completions()\n{\n local cur_word args type_list\n\n cur_word=\"${COMP_WORDS[COMP_CWORD]}\"\n args=(\"${COMP_WORDS[@]}\")\n\n # ask yargs to generate completions.\n type_list=$({{app_path}} --get-yargs-completions \"${args[@]}\")\n\n COMPREPLY=( $(compgen -W \"${type_list}\" -- ${cur_word}) )\n\n # if no match was found, fall back to filename completion\n if [ ${#COMPREPLY[@]} -eq 0 ]; then\n COMPREPLY=()\n fi\n\n return 0\n}\ncomplete -o default -F _yargs_completions {{app_name}}\n###-end-{{app_name}}-completions-###\n";
|
||||
export declare const completionZshTemplate = "###-begin-{{app_name}}-completions-###\n#\n# yargs command completion script\n#\n# Installation: {{app_path}} {{completion_command}} >> ~/.zshrc\n# or {{app_path}} {{completion_command}} >> ~/.zsh_profile on OSX.\n#\n_{{app_name}}_yargs_completions()\n{\n local reply\n local si=$IFS\n IFS=$'\n' reply=($(COMP_CWORD=\"$((CURRENT-1))\" COMP_LINE=\"$BUFFER\" COMP_POINT=\"$CURSOR\" {{app_path}} --get-yargs-completions \"${words[@]}\"))\n IFS=$si\n _describe 'values' reply\n}\ncompdef _{{app_name}}_yargs_completions {{app_name}}\n###-end-{{app_name}}-completions-###\n";
|
50
node_modules/yargs/build/lib/completion-templates.js
generated
vendored
Normal file
50
node_modules/yargs/build/lib/completion-templates.js
generated
vendored
Normal file
|
@ -0,0 +1,50 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.completionZshTemplate = exports.completionShTemplate = void 0;
|
||||
exports.completionShTemplate = `###-begin-{{app_name}}-completions-###
|
||||
#
|
||||
# yargs command completion script
|
||||
#
|
||||
# Installation: {{app_path}} {{completion_command}} >> ~/.bashrc
|
||||
# or {{app_path}} {{completion_command}} >> ~/.bash_profile on OSX.
|
||||
#
|
||||
_yargs_completions()
|
||||
{
|
||||
local cur_word args type_list
|
||||
|
||||
cur_word="\${COMP_WORDS[COMP_CWORD]}"
|
||||
args=("\${COMP_WORDS[@]}")
|
||||
|
||||
# ask yargs to generate completions.
|
||||
type_list=$({{app_path}} --get-yargs-completions "\${args[@]}")
|
||||
|
||||
COMPREPLY=( $(compgen -W "\${type_list}" -- \${cur_word}) )
|
||||
|
||||
# if no match was found, fall back to filename completion
|
||||
if [ \${#COMPREPLY[@]} -eq 0 ]; then
|
||||
COMPREPLY=()
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
complete -o default -F _yargs_completions {{app_name}}
|
||||
###-end-{{app_name}}-completions-###
|
||||
`;
|
||||
exports.completionZshTemplate = `###-begin-{{app_name}}-completions-###
|
||||
#
|
||||
# yargs command completion script
|
||||
#
|
||||
# Installation: {{app_path}} {{completion_command}} >> ~/.zshrc
|
||||
# or {{app_path}} {{completion_command}} >> ~/.zsh_profile on OSX.
|
||||
#
|
||||
_{{app_name}}_yargs_completions()
|
||||
{
|
||||
local reply
|
||||
local si=$IFS
|
||||
IFS=$'\n' reply=($(COMP_CWORD="$((CURRENT-1))" COMP_LINE="$BUFFER" COMP_POINT="$CURSOR" {{app_path}} --get-yargs-completions "\${words[@]}"))
|
||||
IFS=$si
|
||||
_describe 'values' reply
|
||||
}
|
||||
compdef _{{app_name}}_yargs_completions {{app_name}}
|
||||
###-end-{{app_name}}-completions-###
|
||||
`;
|
21
node_modules/yargs/build/lib/completion.d.ts
generated
vendored
Normal file
21
node_modules/yargs/build/lib/completion.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
import { CommandInstance } from './command';
|
||||
import { UsageInstance } from './usage';
|
||||
import { YargsInstance } from './yargs';
|
||||
import { Arguments, DetailedArguments } from 'yargs-parser';
|
||||
export declare function completion(yargs: YargsInstance, usage: UsageInstance, command: CommandInstance): CompletionInstance;
|
||||
/** Instance of the completion module. */
|
||||
export interface CompletionInstance {
|
||||
completionKey: string;
|
||||
generateCompletionScript($0: string, cmd: string): string;
|
||||
getCompletion(args: string[], done: (completions: string[]) => any): any;
|
||||
registerFunction(fn: CompletionFunction): void;
|
||||
setParsed(parsed: DetailedArguments): void;
|
||||
}
|
||||
export declare type CompletionFunction = SyncCompletionFunction | AsyncCompletionFunction;
|
||||
interface SyncCompletionFunction {
|
||||
(current: string, argv: Arguments): string[] | Promise<string[]>;
|
||||
}
|
||||
interface AsyncCompletionFunction {
|
||||
(current: string, argv: Arguments, done: (completions: string[]) => any): any;
|
||||
}
|
||||
export {};
|
135
node_modules/yargs/build/lib/completion.js
generated
vendored
Normal file
135
node_modules/yargs/build/lib/completion.js
generated
vendored
Normal file
|
@ -0,0 +1,135 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.completion = void 0;
|
||||
const command_1 = require("./command");
|
||||
const templates = require("./completion-templates");
|
||||
const is_promise_1 = require("./is-promise");
|
||||
const parse_command_1 = require("./parse-command");
|
||||
const path = require("path");
|
||||
const common_types_1 = require("./common-types");
|
||||
// add bash completions to your
|
||||
// yargs-powered applications.
|
||||
function completion(yargs, usage, command) {
|
||||
const self = {
|
||||
completionKey: 'get-yargs-completions'
|
||||
};
|
||||
let aliases;
|
||||
self.setParsed = function setParsed(parsed) {
|
||||
aliases = parsed.aliases;
|
||||
};
|
||||
const zshShell = (process.env.SHELL && process.env.SHELL.indexOf('zsh') !== -1) ||
|
||||
(process.env.ZSH_NAME && process.env.ZSH_NAME.indexOf('zsh') !== -1);
|
||||
// get a list of completion commands.
|
||||
// 'args' is the array of strings from the line to be completed
|
||||
self.getCompletion = function getCompletion(args, done) {
|
||||
const completions = [];
|
||||
const current = args.length ? args[args.length - 1] : '';
|
||||
const argv = yargs.parse(args, true);
|
||||
const parentCommands = yargs.getContext().commands;
|
||||
// a custom completion function can be provided
|
||||
// to completion().
|
||||
function runCompletionFunction(argv) {
|
||||
common_types_1.assertNotStrictEqual(completionFunction, null);
|
||||
if (isSyncCompletionFunction(completionFunction)) {
|
||||
const result = completionFunction(current, argv);
|
||||
// promise based completion function.
|
||||
if (is_promise_1.isPromise(result)) {
|
||||
return result.then((list) => {
|
||||
process.nextTick(() => { done(list); });
|
||||
}).catch((err) => {
|
||||
process.nextTick(() => { throw err; });
|
||||
});
|
||||
}
|
||||
// synchronous completion function.
|
||||
return done(result);
|
||||
}
|
||||
else {
|
||||
// asynchronous completion function
|
||||
return completionFunction(current, argv, (completions) => {
|
||||
done(completions);
|
||||
});
|
||||
}
|
||||
}
|
||||
if (completionFunction) {
|
||||
return is_promise_1.isPromise(argv) ? argv.then(runCompletionFunction) : runCompletionFunction(argv);
|
||||
}
|
||||
const handlers = command.getCommandHandlers();
|
||||
for (let i = 0, ii = args.length; i < ii; ++i) {
|
||||
if (handlers[args[i]] && handlers[args[i]].builder) {
|
||||
const builder = handlers[args[i]].builder;
|
||||
if (command_1.isCommandBuilderCallback(builder)) {
|
||||
const y = yargs.reset();
|
||||
builder(y);
|
||||
return y.argv;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!current.match(/^-/) && parentCommands[parentCommands.length - 1] !== current) {
|
||||
usage.getCommands().forEach((usageCommand) => {
|
||||
const commandName = parse_command_1.parseCommand(usageCommand[0]).cmd;
|
||||
if (args.indexOf(commandName) === -1) {
|
||||
if (!zshShell) {
|
||||
completions.push(commandName);
|
||||
}
|
||||
else {
|
||||
const desc = usageCommand[1] || '';
|
||||
completions.push(commandName.replace(/:/g, '\\:') + ':' + desc);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
if (current.match(/^-/) || (current === '' && completions.length === 0)) {
|
||||
const descs = usage.getDescriptions();
|
||||
const options = yargs.getOptions();
|
||||
Object.keys(options.key).forEach((key) => {
|
||||
const negable = !!options.configuration['boolean-negation'] && options.boolean.includes(key);
|
||||
// If the key and its aliases aren't in 'args', add the key to 'completions'
|
||||
let keyAndAliases = [key].concat(aliases[key] || []);
|
||||
if (negable)
|
||||
keyAndAliases = keyAndAliases.concat(keyAndAliases.map(key => `no-${key}`));
|
||||
function completeOptionKey(key) {
|
||||
const notInArgs = keyAndAliases.every(val => args.indexOf(`--${val}`) === -1);
|
||||
if (notInArgs) {
|
||||
const startsByTwoDashes = (s) => /^--/.test(s);
|
||||
const isShortOption = (s) => /^[^0-9]$/.test(s);
|
||||
const dashes = !startsByTwoDashes(current) && isShortOption(key) ? '-' : '--';
|
||||
if (!zshShell) {
|
||||
completions.push(dashes + key);
|
||||
}
|
||||
else {
|
||||
const desc = descs[key] || '';
|
||||
completions.push(dashes + `${key.replace(/:/g, '\\:')}:${desc.replace('__yargsString__:', '')}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
completeOptionKey(key);
|
||||
if (negable && !!options.default[key])
|
||||
completeOptionKey(`no-${key}`);
|
||||
});
|
||||
}
|
||||
done(completions);
|
||||
};
|
||||
// generate the completion script to add to your .bashrc.
|
||||
self.generateCompletionScript = function generateCompletionScript($0, cmd) {
|
||||
let script = zshShell ? templates.completionZshTemplate : templates.completionShTemplate;
|
||||
const name = path.basename($0);
|
||||
// add ./to applications not yet installed as bin.
|
||||
if ($0.match(/\.js$/))
|
||||
$0 = `./${$0}`;
|
||||
script = script.replace(/{{app_name}}/g, name);
|
||||
script = script.replace(/{{completion_command}}/g, cmd);
|
||||
return script.replace(/{{app_path}}/g, $0);
|
||||
};
|
||||
// register a function to perform your own custom
|
||||
// completions., this function can be either
|
||||
// synchrnous or asynchronous.
|
||||
let completionFunction = null;
|
||||
self.registerFunction = (fn) => {
|
||||
completionFunction = fn;
|
||||
};
|
||||
return self;
|
||||
}
|
||||
exports.completion = completion;
|
||||
function isSyncCompletionFunction(completionFunction) {
|
||||
return completionFunction.length < 3;
|
||||
}
|
1
node_modules/yargs/build/lib/is-promise.d.ts
generated
vendored
Normal file
1
node_modules/yargs/build/lib/is-promise.d.ts
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
export declare function isPromise<T>(maybePromise: T | Promise<T>): maybePromise is Promise<T>;
|
9
node_modules/yargs/build/lib/is-promise.js
generated
vendored
Normal file
9
node_modules/yargs/build/lib/is-promise.js
generated
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.isPromise = void 0;
|
||||
function isPromise(maybePromise) {
|
||||
return !!maybePromise &&
|
||||
!!maybePromise.then &&
|
||||
(typeof maybePromise.then === 'function');
|
||||
}
|
||||
exports.isPromise = isPromise;
|
1
node_modules/yargs/build/lib/levenshtein.d.ts
generated
vendored
Normal file
1
node_modules/yargs/build/lib/levenshtein.d.ts
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
export declare function levenshtein(a: string, b: string): number;
|
58
node_modules/yargs/build/lib/levenshtein.js
generated
vendored
Normal file
58
node_modules/yargs/build/lib/levenshtein.js
generated
vendored
Normal file
|
@ -0,0 +1,58 @@
|
|||
"use strict";
|
||||
/*
|
||||
Copyright (c) 2011 Andrei Mackenzie
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.levenshtein = void 0;
|
||||
// levenshtein distance algorithm, pulled from Andrei Mackenzie's MIT licensed.
|
||||
// gist, which can be found here: https://gist.github.com/andrei-m/982927
|
||||
// Compute the edit distance between the two given strings
|
||||
function levenshtein(a, b) {
|
||||
if (a.length === 0)
|
||||
return b.length;
|
||||
if (b.length === 0)
|
||||
return a.length;
|
||||
const matrix = [];
|
||||
// increment along the first column of each row
|
||||
let i;
|
||||
for (i = 0; i <= b.length; i++) {
|
||||
matrix[i] = [i];
|
||||
}
|
||||
// increment each column in the first row
|
||||
let j;
|
||||
for (j = 0; j <= a.length; j++) {
|
||||
matrix[0][j] = j;
|
||||
}
|
||||
// Fill in the rest of the matrix
|
||||
for (i = 1; i <= b.length; i++) {
|
||||
for (j = 1; j <= a.length; j++) {
|
||||
if (b.charAt(i - 1) === a.charAt(j - 1)) {
|
||||
matrix[i][j] = matrix[i - 1][j - 1];
|
||||
}
|
||||
else {
|
||||
matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
|
||||
Math.min(matrix[i][j - 1] + 1, // insertion
|
||||
matrix[i - 1][j] + 1)); // deletion
|
||||
}
|
||||
}
|
||||
}
|
||||
return matrix[b.length][a.length];
|
||||
}
|
||||
exports.levenshtein = levenshtein;
|
10
node_modules/yargs/build/lib/middleware.d.ts
generated
vendored
Normal file
10
node_modules/yargs/build/lib/middleware.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
import { YargsInstance, Arguments } from './yargs';
|
||||
export declare function globalMiddlewareFactory<T>(globalMiddleware: Middleware[], context: T): (callback: MiddlewareCallback | MiddlewareCallback[], applyBeforeValidation?: boolean) => T;
|
||||
export declare function commandMiddlewareFactory(commandMiddleware?: MiddlewareCallback[]): Middleware[];
|
||||
export declare function applyMiddleware(argv: Arguments | Promise<Arguments>, yargs: YargsInstance, middlewares: Middleware[], beforeValidation: boolean): Arguments | Promise<Arguments>;
|
||||
export interface MiddlewareCallback {
|
||||
(argv: Arguments, yargs: YargsInstance): Partial<Arguments> | Promise<Partial<Arguments>>;
|
||||
}
|
||||
export interface Middleware extends MiddlewareCallback {
|
||||
applyBeforeValidation: boolean;
|
||||
}
|
57
node_modules/yargs/build/lib/middleware.js
generated
vendored
Normal file
57
node_modules/yargs/build/lib/middleware.js
generated
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.applyMiddleware = exports.commandMiddlewareFactory = exports.globalMiddlewareFactory = void 0;
|
||||
const argsert_1 = require("./argsert");
|
||||
const is_promise_1 = require("./is-promise");
|
||||
function globalMiddlewareFactory(globalMiddleware, context) {
|
||||
return function (callback, applyBeforeValidation = false) {
|
||||
argsert_1.argsert('<array|function> [boolean]', [callback, applyBeforeValidation], arguments.length);
|
||||
if (Array.isArray(callback)) {
|
||||
for (let i = 0; i < callback.length; i++) {
|
||||
if (typeof callback[i] !== 'function') {
|
||||
throw Error('middleware must be a function');
|
||||
}
|
||||
callback[i].applyBeforeValidation = applyBeforeValidation;
|
||||
}
|
||||
Array.prototype.push.apply(globalMiddleware, callback);
|
||||
}
|
||||
else if (typeof callback === 'function') {
|
||||
callback.applyBeforeValidation = applyBeforeValidation;
|
||||
globalMiddleware.push(callback);
|
||||
}
|
||||
return context;
|
||||
};
|
||||
}
|
||||
exports.globalMiddlewareFactory = globalMiddlewareFactory;
|
||||
function commandMiddlewareFactory(commandMiddleware) {
|
||||
if (!commandMiddleware)
|
||||
return [];
|
||||
return commandMiddleware.map(middleware => {
|
||||
middleware.applyBeforeValidation = false;
|
||||
return middleware;
|
||||
});
|
||||
}
|
||||
exports.commandMiddlewareFactory = commandMiddlewareFactory;
|
||||
function applyMiddleware(argv, yargs, middlewares, beforeValidation) {
|
||||
const beforeValidationError = new Error('middleware cannot return a promise when applyBeforeValidation is true');
|
||||
return middlewares
|
||||
.reduce((acc, middleware) => {
|
||||
if (middleware.applyBeforeValidation !== beforeValidation) {
|
||||
return acc;
|
||||
}
|
||||
if (is_promise_1.isPromise(acc)) {
|
||||
return acc
|
||||
.then(initialObj => Promise.all([initialObj, middleware(initialObj, yargs)]))
|
||||
.then(([initialObj, middlewareObj]) => Object.assign(initialObj, middlewareObj));
|
||||
}
|
||||
else {
|
||||
const result = middleware(acc, yargs);
|
||||
if (beforeValidation && is_promise_1.isPromise(result))
|
||||
throw beforeValidationError;
|
||||
return is_promise_1.isPromise(result)
|
||||
? result.then(middlewareObj => Object.assign(acc, middlewareObj))
|
||||
: Object.assign(acc, result);
|
||||
}
|
||||
}, argv);
|
||||
}
|
||||
exports.applyMiddleware = applyMiddleware;
|
1
node_modules/yargs/build/lib/obj-filter.d.ts
generated
vendored
Normal file
1
node_modules/yargs/build/lib/obj-filter.d.ts
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
export declare function objFilter<T extends object>(original?: T, filter?: (k: keyof T, v: T[keyof T]) => boolean): T;
|
14
node_modules/yargs/build/lib/obj-filter.js
generated
vendored
Normal file
14
node_modules/yargs/build/lib/obj-filter.js
generated
vendored
Normal file
|
@ -0,0 +1,14 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.objFilter = void 0;
|
||||
const common_types_1 = require("./common-types");
|
||||
function objFilter(original = {}, filter = () => true) {
|
||||
const obj = {};
|
||||
common_types_1.objectKeys(original).forEach((key) => {
|
||||
if (filter(key, original[key])) {
|
||||
obj[key] = original[key];
|
||||
}
|
||||
});
|
||||
return obj;
|
||||
}
|
||||
exports.objFilter = objFilter;
|
11
node_modules/yargs/build/lib/parse-command.d.ts
generated
vendored
Normal file
11
node_modules/yargs/build/lib/parse-command.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
import { NotEmptyArray } from './common-types';
|
||||
export declare function parseCommand(cmd: string): ParsedCommand;
|
||||
export interface ParsedCommand {
|
||||
cmd: string;
|
||||
demanded: Positional[];
|
||||
optional: Positional[];
|
||||
}
|
||||
export interface Positional {
|
||||
cmd: NotEmptyArray<string>;
|
||||
variadic: boolean;
|
||||
}
|
36
node_modules/yargs/build/lib/parse-command.js
generated
vendored
Normal file
36
node_modules/yargs/build/lib/parse-command.js
generated
vendored
Normal file
|
@ -0,0 +1,36 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.parseCommand = void 0;
|
||||
function parseCommand(cmd) {
|
||||
const extraSpacesStrippedCommand = cmd.replace(/\s{2,}/g, ' ');
|
||||
const splitCommand = extraSpacesStrippedCommand.split(/\s+(?![^[]*]|[^<]*>)/);
|
||||
const bregex = /\.*[\][<>]/g;
|
||||
const firstCommand = splitCommand.shift();
|
||||
if (!firstCommand)
|
||||
throw new Error(`No command found in: ${cmd}`);
|
||||
const parsedCommand = {
|
||||
cmd: firstCommand.replace(bregex, ''),
|
||||
demanded: [],
|
||||
optional: []
|
||||
};
|
||||
splitCommand.forEach((cmd, i) => {
|
||||
let variadic = false;
|
||||
cmd = cmd.replace(/\s/g, '');
|
||||
if (/\.+[\]>]/.test(cmd) && i === splitCommand.length - 1)
|
||||
variadic = true;
|
||||
if (/^\[/.test(cmd)) {
|
||||
parsedCommand.optional.push({
|
||||
cmd: cmd.replace(bregex, '').split('|'),
|
||||
variadic
|
||||
});
|
||||
}
|
||||
else {
|
||||
parsedCommand.demanded.push({
|
||||
cmd: cmd.replace(bregex, '').split('|'),
|
||||
variadic
|
||||
});
|
||||
}
|
||||
});
|
||||
return parsedCommand;
|
||||
}
|
||||
exports.parseCommand = parseCommand;
|
2
node_modules/yargs/build/lib/process-argv.d.ts
generated
vendored
Normal file
2
node_modules/yargs/build/lib/process-argv.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
export declare function getProcessArgvWithoutBin(): string[];
|
||||
export declare function getProcessArgvBin(): string;
|
31
node_modules/yargs/build/lib/process-argv.js
generated
vendored
Normal file
31
node_modules/yargs/build/lib/process-argv.js
generated
vendored
Normal file
|
@ -0,0 +1,31 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.getProcessArgvBin = exports.getProcessArgvWithoutBin = void 0;
|
||||
function getProcessArgvBinIndex() {
|
||||
// The binary name is the first command line argument for:
|
||||
// - bundled Electron apps: bin argv1 argv2 ... argvn
|
||||
if (isBundledElectronApp())
|
||||
return 0;
|
||||
// or the second one (default) for:
|
||||
// - standard node apps: node bin.js argv1 argv2 ... argvn
|
||||
// - unbundled Electron apps: electron bin.js argv1 arg2 ... argvn
|
||||
return 1;
|
||||
}
|
||||
function isBundledElectronApp() {
|
||||
// process.defaultApp is either set by electron in an electron unbundled app, or undefined
|
||||
// see https://github.com/electron/electron/blob/master/docs/api/process.md#processdefaultapp-readonly
|
||||
return isElectronApp() && !process.defaultApp;
|
||||
}
|
||||
function isElectronApp() {
|
||||
// process.versions.electron is either set by electron, or undefined
|
||||
// see https://github.com/electron/electron/blob/master/docs/api/process.md#processversionselectron-readonly
|
||||
return !!process.versions.electron;
|
||||
}
|
||||
function getProcessArgvWithoutBin() {
|
||||
return process.argv.slice(getProcessArgvBinIndex() + 1);
|
||||
}
|
||||
exports.getProcessArgvWithoutBin = getProcessArgvWithoutBin;
|
||||
function getProcessArgvBin() {
|
||||
return process.argv[getProcessArgvBinIndex()];
|
||||
}
|
||||
exports.getProcessArgvBin = getProcessArgvBin;
|
49
node_modules/yargs/build/lib/usage.d.ts
generated
vendored
Normal file
49
node_modules/yargs/build/lib/usage.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,49 @@
|
|||
import { Dictionary } from './common-types';
|
||||
import { YargsInstance } from './yargs';
|
||||
import { YError } from './yerror';
|
||||
import { Y18N } from 'y18n';
|
||||
export declare function usage(yargs: YargsInstance, y18n: Y18N): UsageInstance;
|
||||
/** Instance of the usage module. */
|
||||
export interface UsageInstance {
|
||||
cacheHelpMessage(): void;
|
||||
clearCachedHelpMessage(): void;
|
||||
command(cmd: string, description: string | undefined, isDefault: boolean, aliases: string[], deprecated?: boolean): void;
|
||||
deferY18nLookup(str: string): string;
|
||||
describe(keys: string | string[] | Dictionary<string>, desc?: string): void;
|
||||
epilog(msg: string): void;
|
||||
example(cmd: string, description?: string): void;
|
||||
fail(msg?: string | null, err?: YError | string): void;
|
||||
failFn(f: FailureFunction): void;
|
||||
freeze(): void;
|
||||
functionDescription(fn: {
|
||||
name?: string;
|
||||
}): string;
|
||||
getCommands(): [string, string, boolean, string[], boolean][];
|
||||
getDescriptions(): Dictionary<string | undefined>;
|
||||
getPositionalGroupName(): string;
|
||||
getUsage(): [string, string][];
|
||||
getUsageDisabled(): boolean;
|
||||
help(): string;
|
||||
reset(localLookup: Dictionary<boolean>): UsageInstance;
|
||||
showHelp(level: 'error' | 'log' | ((message: string) => void)): void;
|
||||
showHelpOnFail(enabled?: boolean | string, message?: string): UsageInstance;
|
||||
showVersion(): void;
|
||||
stringifiedValues(values?: any[], separator?: string): string;
|
||||
unfreeze(): void;
|
||||
usage(msg: string | null, description?: string | false): UsageInstance;
|
||||
version(ver: any): void;
|
||||
wrap(cols: number | null | undefined): void;
|
||||
}
|
||||
export interface FailureFunction {
|
||||
(msg: string | undefined | null, err: YError | string | undefined, usage: UsageInstance): void;
|
||||
}
|
||||
export interface FrozenUsageInstance {
|
||||
failMessage: string | undefined | null;
|
||||
failureOutput: boolean;
|
||||
usages: [string, string][];
|
||||
usageDisabled: boolean;
|
||||
epilogs: string[];
|
||||
examples: [string, string][];
|
||||
commands: [string, string, boolean, string[], boolean][];
|
||||
descriptions: Dictionary<string | undefined>;
|
||||
}
|
540
node_modules/yargs/build/lib/usage.js
generated
vendored
Normal file
540
node_modules/yargs/build/lib/usage.js
generated
vendored
Normal file
|
@ -0,0 +1,540 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.usage = void 0;
|
||||
// this file handles outputting usage instructions,
|
||||
// failures, etc. keeps logging in one place.
|
||||
const common_types_1 = require("./common-types");
|
||||
const obj_filter_1 = require("./obj-filter");
|
||||
const path = require("path");
|
||||
const yerror_1 = require("./yerror");
|
||||
const decamelize = require("decamelize");
|
||||
const setBlocking = require("set-blocking");
|
||||
const stringWidth = require("string-width");
|
||||
function usage(yargs, y18n) {
|
||||
const __ = y18n.__;
|
||||
const self = {};
|
||||
// methods for ouputting/building failure message.
|
||||
const fails = [];
|
||||
self.failFn = function failFn(f) {
|
||||
fails.push(f);
|
||||
};
|
||||
let failMessage = null;
|
||||
let showHelpOnFail = true;
|
||||
self.showHelpOnFail = function showHelpOnFailFn(arg1 = true, arg2) {
|
||||
function parseFunctionArgs() {
|
||||
return typeof arg1 === 'string' ? [true, arg1] : [arg1, arg2];
|
||||
}
|
||||
const [enabled, message] = parseFunctionArgs();
|
||||
failMessage = message;
|
||||
showHelpOnFail = enabled;
|
||||
return self;
|
||||
};
|
||||
let failureOutput = false;
|
||||
self.fail = function fail(msg, err) {
|
||||
const logger = yargs._getLoggerInstance();
|
||||
if (fails.length) {
|
||||
for (let i = fails.length - 1; i >= 0; --i) {
|
||||
fails[i](msg, err, self);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (yargs.getExitProcess())
|
||||
setBlocking(true);
|
||||
// don't output failure message more than once
|
||||
if (!failureOutput) {
|
||||
failureOutput = true;
|
||||
if (showHelpOnFail) {
|
||||
yargs.showHelp('error');
|
||||
logger.error();
|
||||
}
|
||||
if (msg || err)
|
||||
logger.error(msg || err);
|
||||
if (failMessage) {
|
||||
if (msg || err)
|
||||
logger.error('');
|
||||
logger.error(failMessage);
|
||||
}
|
||||
}
|
||||
err = err || new yerror_1.YError(msg);
|
||||
if (yargs.getExitProcess()) {
|
||||
return yargs.exit(1);
|
||||
}
|
||||
else if (yargs._hasParseCallback()) {
|
||||
return yargs.exit(1, err);
|
||||
}
|
||||
else {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
};
|
||||
// methods for ouputting/building help (usage) message.
|
||||
let usages = [];
|
||||
let usageDisabled = false;
|
||||
self.usage = (msg, description) => {
|
||||
if (msg === null) {
|
||||
usageDisabled = true;
|
||||
usages = [];
|
||||
return self;
|
||||
}
|
||||
usageDisabled = false;
|
||||
usages.push([msg, description || '']);
|
||||
return self;
|
||||
};
|
||||
self.getUsage = () => {
|
||||
return usages;
|
||||
};
|
||||
self.getUsageDisabled = () => {
|
||||
return usageDisabled;
|
||||
};
|
||||
self.getPositionalGroupName = () => {
|
||||
return __('Positionals:');
|
||||
};
|
||||
let examples = [];
|
||||
self.example = (cmd, description) => {
|
||||
examples.push([cmd, description || '']);
|
||||
};
|
||||
let commands = [];
|
||||
self.command = function command(cmd, description, isDefault, aliases, deprecated = false) {
|
||||
// the last default wins, so cancel out any previously set default
|
||||
if (isDefault) {
|
||||
commands = commands.map((cmdArray) => {
|
||||
cmdArray[2] = false;
|
||||
return cmdArray;
|
||||
});
|
||||
}
|
||||
commands.push([cmd, description || '', isDefault, aliases, deprecated]);
|
||||
};
|
||||
self.getCommands = () => commands;
|
||||
let descriptions = {};
|
||||
self.describe = function describe(keyOrKeys, desc) {
|
||||
if (Array.isArray(keyOrKeys)) {
|
||||
keyOrKeys.forEach((k) => {
|
||||
self.describe(k, desc);
|
||||
});
|
||||
}
|
||||
else if (typeof keyOrKeys === 'object') {
|
||||
Object.keys(keyOrKeys).forEach((k) => {
|
||||
self.describe(k, keyOrKeys[k]);
|
||||
});
|
||||
}
|
||||
else {
|
||||
descriptions[keyOrKeys] = desc;
|
||||
}
|
||||
};
|
||||
self.getDescriptions = () => descriptions;
|
||||
let epilogs = [];
|
||||
self.epilog = (msg) => {
|
||||
epilogs.push(msg);
|
||||
};
|
||||
let wrapSet = false;
|
||||
let wrap;
|
||||
self.wrap = (cols) => {
|
||||
wrapSet = true;
|
||||
wrap = cols;
|
||||
};
|
||||
function getWrap() {
|
||||
if (!wrapSet) {
|
||||
wrap = windowWidth();
|
||||
wrapSet = true;
|
||||
}
|
||||
return wrap;
|
||||
}
|
||||
const deferY18nLookupPrefix = '__yargsString__:';
|
||||
self.deferY18nLookup = str => deferY18nLookupPrefix + str;
|
||||
self.help = function help() {
|
||||
if (cachedHelpMessage)
|
||||
return cachedHelpMessage;
|
||||
normalizeAliases();
|
||||
// handle old demanded API
|
||||
const base$0 = yargs.customScriptName ? yargs.$0 : path.basename(yargs.$0);
|
||||
const demandedOptions = yargs.getDemandedOptions();
|
||||
const demandedCommands = yargs.getDemandedCommands();
|
||||
const deprecatedOptions = yargs.getDeprecatedOptions();
|
||||
const groups = yargs.getGroups();
|
||||
const options = yargs.getOptions();
|
||||
let keys = [];
|
||||
keys = keys.concat(Object.keys(descriptions));
|
||||
keys = keys.concat(Object.keys(demandedOptions));
|
||||
keys = keys.concat(Object.keys(demandedCommands));
|
||||
keys = keys.concat(Object.keys(options.default));
|
||||
keys = keys.filter(filterHiddenOptions);
|
||||
keys = Object.keys(keys.reduce((acc, key) => {
|
||||
if (key !== '_')
|
||||
acc[key] = true;
|
||||
return acc;
|
||||
}, {}));
|
||||
const theWrap = getWrap();
|
||||
const ui = require('cliui')({
|
||||
width: theWrap,
|
||||
wrap: !!theWrap
|
||||
});
|
||||
// the usage string.
|
||||
if (!usageDisabled) {
|
||||
if (usages.length) {
|
||||
// user-defined usage.
|
||||
usages.forEach((usage) => {
|
||||
ui.div(`${usage[0].replace(/\$0/g, base$0)}`);
|
||||
if (usage[1]) {
|
||||
ui.div({ text: `${usage[1]}`, padding: [1, 0, 0, 0] });
|
||||
}
|
||||
});
|
||||
ui.div();
|
||||
}
|
||||
else if (commands.length) {
|
||||
let u = null;
|
||||
// demonstrate how commands are used.
|
||||
if (demandedCommands._) {
|
||||
u = `${base$0} <${__('command')}>\n`;
|
||||
}
|
||||
else {
|
||||
u = `${base$0} [${__('command')}]\n`;
|
||||
}
|
||||
ui.div(`${u}`);
|
||||
}
|
||||
}
|
||||
// your application's commands, i.e., non-option
|
||||
// arguments populated in '_'.
|
||||
if (commands.length) {
|
||||
ui.div(__('Commands:'));
|
||||
const context = yargs.getContext();
|
||||
const parentCommands = context.commands.length ? `${context.commands.join(' ')} ` : '';
|
||||
if (yargs.getParserConfiguration()['sort-commands'] === true) {
|
||||
commands = commands.sort((a, b) => a[0].localeCompare(b[0]));
|
||||
}
|
||||
commands.forEach((command) => {
|
||||
const commandString = `${base$0} ${parentCommands}${command[0].replace(/^\$0 ?/, '')}`; // drop $0 from default commands.
|
||||
ui.span({
|
||||
text: commandString,
|
||||
padding: [0, 2, 0, 2],
|
||||
width: maxWidth(commands, theWrap, `${base$0}${parentCommands}`) + 4
|
||||
}, { text: command[1] });
|
||||
const hints = [];
|
||||
if (command[2])
|
||||
hints.push(`[${__('default')}]`);
|
||||
if (command[3] && command[3].length) {
|
||||
hints.push(`[${__('aliases:')} ${command[3].join(', ')}]`);
|
||||
}
|
||||
if (command[4]) {
|
||||
if (typeof command[4] === 'string') {
|
||||
hints.push(`[${__('deprecated: %s', command[4])}]`);
|
||||
}
|
||||
else {
|
||||
hints.push(`[${__('deprecated')}]`);
|
||||
}
|
||||
}
|
||||
if (hints.length) {
|
||||
ui.div({ text: hints.join(' '), padding: [0, 0, 0, 2], align: 'right' });
|
||||
}
|
||||
else {
|
||||
ui.div();
|
||||
}
|
||||
});
|
||||
ui.div();
|
||||
}
|
||||
// perform some cleanup on the keys array, making it
|
||||
// only include top-level keys not their aliases.
|
||||
const aliasKeys = (Object.keys(options.alias) || [])
|
||||
.concat(Object.keys(yargs.parsed.newAliases) || []);
|
||||
keys = keys.filter(key => !yargs.parsed.newAliases[key] && aliasKeys.every(alias => (options.alias[alias] || []).indexOf(key) === -1));
|
||||
// populate 'Options:' group with any keys that have not
|
||||
// explicitly had a group set.
|
||||
const defaultGroup = __('Options:');
|
||||
if (!groups[defaultGroup])
|
||||
groups[defaultGroup] = [];
|
||||
addUngroupedKeys(keys, options.alias, groups, defaultGroup);
|
||||
// display 'Options:' table along with any custom tables:
|
||||
Object.keys(groups).forEach((groupName) => {
|
||||
if (!groups[groupName].length)
|
||||
return;
|
||||
// if we've grouped the key 'f', but 'f' aliases 'foobar',
|
||||
// normalizedKeys should contain only 'foobar'.
|
||||
const normalizedKeys = groups[groupName].filter(filterHiddenOptions).map((key) => {
|
||||
if (~aliasKeys.indexOf(key))
|
||||
return key;
|
||||
for (let i = 0, aliasKey; (aliasKey = aliasKeys[i]) !== undefined; i++) {
|
||||
if (~(options.alias[aliasKey] || []).indexOf(key))
|
||||
return aliasKey;
|
||||
}
|
||||
return key;
|
||||
});
|
||||
if (normalizedKeys.length < 1)
|
||||
return;
|
||||
ui.div(groupName);
|
||||
// actually generate the switches string --foo, -f, --bar.
|
||||
const switches = normalizedKeys.reduce((acc, key) => {
|
||||
acc[key] = [key].concat(options.alias[key] || [])
|
||||
.map(sw => {
|
||||
// for the special positional group don't
|
||||
// add '--' or '-' prefix.
|
||||
if (groupName === self.getPositionalGroupName())
|
||||
return sw;
|
||||
else {
|
||||
return (
|
||||
// matches yargs-parser logic in which single-digits
|
||||
// aliases declared with a boolean type are now valid
|
||||
/^[0-9]$/.test(sw)
|
||||
? ~options.boolean.indexOf(key) ? '-' : '--'
|
||||
: sw.length > 1 ? '--' : '-') + sw;
|
||||
}
|
||||
})
|
||||
.join(', ');
|
||||
return acc;
|
||||
}, {});
|
||||
normalizedKeys.forEach((key) => {
|
||||
const kswitch = switches[key];
|
||||
let desc = descriptions[key] || '';
|
||||
let type = null;
|
||||
if (~desc.lastIndexOf(deferY18nLookupPrefix))
|
||||
desc = __(desc.substring(deferY18nLookupPrefix.length));
|
||||
if (~options.boolean.indexOf(key))
|
||||
type = `[${__('boolean')}]`;
|
||||
if (~options.count.indexOf(key))
|
||||
type = `[${__('count')}]`;
|
||||
if (~options.string.indexOf(key))
|
||||
type = `[${__('string')}]`;
|
||||
if (~options.normalize.indexOf(key))
|
||||
type = `[${__('string')}]`;
|
||||
if (~options.array.indexOf(key))
|
||||
type = `[${__('array')}]`;
|
||||
if (~options.number.indexOf(key))
|
||||
type = `[${__('number')}]`;
|
||||
const deprecatedExtra = (deprecated) => typeof deprecated === 'string'
|
||||
? `[${__('deprecated: %s', deprecated)}]`
|
||||
: `[${__('deprecated')}]`;
|
||||
const extra = [
|
||||
(key in deprecatedOptions) ? deprecatedExtra(deprecatedOptions[key]) : null,
|
||||
type,
|
||||
(key in demandedOptions) ? `[${__('required')}]` : null,
|
||||
options.choices && options.choices[key] ? `[${__('choices:')} ${self.stringifiedValues(options.choices[key])}]` : null,
|
||||
defaultString(options.default[key], options.defaultDescription[key])
|
||||
].filter(Boolean).join(' ');
|
||||
ui.span({ text: kswitch, padding: [0, 2, 0, 2], width: maxWidth(switches, theWrap) + 4 }, desc);
|
||||
if (extra)
|
||||
ui.div({ text: extra, padding: [0, 0, 0, 2], align: 'right' });
|
||||
else
|
||||
ui.div();
|
||||
});
|
||||
ui.div();
|
||||
});
|
||||
// describe some common use-cases for your application.
|
||||
if (examples.length) {
|
||||
ui.div(__('Examples:'));
|
||||
examples.forEach((example) => {
|
||||
example[0] = example[0].replace(/\$0/g, base$0);
|
||||
});
|
||||
examples.forEach((example) => {
|
||||
if (example[1] === '') {
|
||||
ui.div({
|
||||
text: example[0],
|
||||
padding: [0, 2, 0, 2]
|
||||
});
|
||||
}
|
||||
else {
|
||||
ui.div({
|
||||
text: example[0],
|
||||
padding: [0, 2, 0, 2],
|
||||
width: maxWidth(examples, theWrap) + 4
|
||||
}, {
|
||||
text: example[1]
|
||||
});
|
||||
}
|
||||
});
|
||||
ui.div();
|
||||
}
|
||||
// the usage string.
|
||||
if (epilogs.length > 0) {
|
||||
const e = epilogs.map(epilog => epilog.replace(/\$0/g, base$0)).join('\n');
|
||||
ui.div(`${e}\n`);
|
||||
}
|
||||
// Remove the trailing white spaces
|
||||
return ui.toString().replace(/\s*$/, '');
|
||||
};
|
||||
// return the maximum width of a string
|
||||
// in the left-hand column of a table.
|
||||
function maxWidth(table, theWrap, modifier) {
|
||||
let width = 0;
|
||||
// table might be of the form [leftColumn],
|
||||
// or {key: leftColumn}
|
||||
if (!Array.isArray(table)) {
|
||||
table = Object.values(table).map(v => [v]);
|
||||
}
|
||||
table.forEach((v) => {
|
||||
width = Math.max(stringWidth(modifier ? `${modifier} ${v[0]}` : v[0]), width);
|
||||
});
|
||||
// if we've enabled 'wrap' we should limit
|
||||
// the max-width of the left-column.
|
||||
if (theWrap)
|
||||
width = Math.min(width, parseInt((theWrap * 0.5).toString(), 10));
|
||||
return width;
|
||||
}
|
||||
// make sure any options set for aliases,
|
||||
// are copied to the keys being aliased.
|
||||
function normalizeAliases() {
|
||||
// handle old demanded API
|
||||
const demandedOptions = yargs.getDemandedOptions();
|
||||
const options = yargs.getOptions();
|
||||
(Object.keys(options.alias) || []).forEach((key) => {
|
||||
options.alias[key].forEach((alias) => {
|
||||
// copy descriptions.
|
||||
if (descriptions[alias])
|
||||
self.describe(key, descriptions[alias]);
|
||||
// copy demanded.
|
||||
if (alias in demandedOptions)
|
||||
yargs.demandOption(key, demandedOptions[alias]);
|
||||
// type messages.
|
||||
if (~options.boolean.indexOf(alias))
|
||||
yargs.boolean(key);
|
||||
if (~options.count.indexOf(alias))
|
||||
yargs.count(key);
|
||||
if (~options.string.indexOf(alias))
|
||||
yargs.string(key);
|
||||
if (~options.normalize.indexOf(alias))
|
||||
yargs.normalize(key);
|
||||
if (~options.array.indexOf(alias))
|
||||
yargs.array(key);
|
||||
if (~options.number.indexOf(alias))
|
||||
yargs.number(key);
|
||||
});
|
||||
});
|
||||
}
|
||||
// if yargs is executing an async handler, we take a snapshot of the
|
||||
// help message to display on failure:
|
||||
let cachedHelpMessage;
|
||||
self.cacheHelpMessage = function () {
|
||||
cachedHelpMessage = this.help();
|
||||
};
|
||||
// however this snapshot must be cleared afterwards
|
||||
// not to be be used by next calls to parse
|
||||
self.clearCachedHelpMessage = function () {
|
||||
cachedHelpMessage = undefined;
|
||||
};
|
||||
// given a set of keys, place any keys that are
|
||||
// ungrouped under the 'Options:' grouping.
|
||||
function addUngroupedKeys(keys, aliases, groups, defaultGroup) {
|
||||
let groupedKeys = [];
|
||||
let toCheck = null;
|
||||
Object.keys(groups).forEach((group) => {
|
||||
groupedKeys = groupedKeys.concat(groups[group]);
|
||||
});
|
||||
keys.forEach((key) => {
|
||||
toCheck = [key].concat(aliases[key]);
|
||||
if (!toCheck.some(k => groupedKeys.indexOf(k) !== -1)) {
|
||||
groups[defaultGroup].push(key);
|
||||
}
|
||||
});
|
||||
return groupedKeys;
|
||||
}
|
||||
function filterHiddenOptions(key) {
|
||||
return yargs.getOptions().hiddenOptions.indexOf(key) < 0 || yargs.parsed.argv[yargs.getOptions().showHiddenOpt];
|
||||
}
|
||||
self.showHelp = (level) => {
|
||||
const logger = yargs._getLoggerInstance();
|
||||
if (!level)
|
||||
level = 'error';
|
||||
const emit = typeof level === 'function' ? level : logger[level];
|
||||
emit(self.help());
|
||||
};
|
||||
self.functionDescription = (fn) => {
|
||||
const description = fn.name ? decamelize(fn.name, '-') : __('generated-value');
|
||||
return ['(', description, ')'].join('');
|
||||
};
|
||||
self.stringifiedValues = function stringifiedValues(values, separator) {
|
||||
let string = '';
|
||||
const sep = separator || ', ';
|
||||
const array = [].concat(values);
|
||||
if (!values || !array.length)
|
||||
return string;
|
||||
array.forEach((value) => {
|
||||
if (string.length)
|
||||
string += sep;
|
||||
string += JSON.stringify(value);
|
||||
});
|
||||
return string;
|
||||
};
|
||||
// format the default-value-string displayed in
|
||||
// the right-hand column.
|
||||
function defaultString(value, defaultDescription) {
|
||||
let string = `[${__('default:')} `;
|
||||
if (value === undefined && !defaultDescription)
|
||||
return null;
|
||||
if (defaultDescription) {
|
||||
string += defaultDescription;
|
||||
}
|
||||
else {
|
||||
switch (typeof value) {
|
||||
case 'string':
|
||||
string += `"${value}"`;
|
||||
break;
|
||||
case 'object':
|
||||
string += JSON.stringify(value);
|
||||
break;
|
||||
default:
|
||||
string += value;
|
||||
}
|
||||
}
|
||||
return `${string}]`;
|
||||
}
|
||||
// guess the width of the console window, max-width 80.
|
||||
function windowWidth() {
|
||||
const maxWidth = 80;
|
||||
// CI is not a TTY
|
||||
/* c8 ignore next 2 */
|
||||
if (typeof process === 'object' && process.stdout && process.stdout.columns) {
|
||||
return Math.min(maxWidth, process.stdout.columns);
|
||||
}
|
||||
else {
|
||||
return maxWidth;
|
||||
}
|
||||
}
|
||||
// logic for displaying application version.
|
||||
let version = null;
|
||||
self.version = (ver) => {
|
||||
version = ver;
|
||||
};
|
||||
self.showVersion = () => {
|
||||
const logger = yargs._getLoggerInstance();
|
||||
logger.log(version);
|
||||
};
|
||||
self.reset = function reset(localLookup) {
|
||||
// do not reset wrap here
|
||||
// do not reset fails here
|
||||
failMessage = null;
|
||||
failureOutput = false;
|
||||
usages = [];
|
||||
usageDisabled = false;
|
||||
epilogs = [];
|
||||
examples = [];
|
||||
commands = [];
|
||||
descriptions = obj_filter_1.objFilter(descriptions, k => !localLookup[k]);
|
||||
return self;
|
||||
};
|
||||
const frozens = [];
|
||||
self.freeze = function freeze() {
|
||||
frozens.push({
|
||||
failMessage,
|
||||
failureOutput,
|
||||
usages,
|
||||
usageDisabled,
|
||||
epilogs,
|
||||
examples,
|
||||
commands,
|
||||
descriptions
|
||||
});
|
||||
};
|
||||
self.unfreeze = function unfreeze() {
|
||||
const frozen = frozens.pop();
|
||||
common_types_1.assertNotStrictEqual(frozen, undefined);
|
||||
({
|
||||
failMessage,
|
||||
failureOutput,
|
||||
usages,
|
||||
usageDisabled,
|
||||
epilogs,
|
||||
examples,
|
||||
commands,
|
||||
descriptions
|
||||
} = frozen);
|
||||
};
|
||||
return self;
|
||||
}
|
||||
exports.usage = usage;
|
34
node_modules/yargs/build/lib/validation.d.ts
generated
vendored
Normal file
34
node_modules/yargs/build/lib/validation.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,34 @@
|
|||
import { Dictionary } from './common-types';
|
||||
import { UsageInstance } from './usage';
|
||||
import { YargsInstance, Arguments } from './yargs';
|
||||
import { DetailedArguments } from 'yargs-parser';
|
||||
import { Y18N } from 'y18n';
|
||||
export declare function validation(yargs: YargsInstance, usage: UsageInstance, y18n: Y18N): ValidationInstance;
|
||||
/** Instance of the validation module. */
|
||||
export interface ValidationInstance {
|
||||
check(f: CustomCheck['func'], global: boolean): void;
|
||||
conflicting(argv: Arguments): void;
|
||||
conflicts(key: string | Dictionary<string | string[]>, value?: string | string[]): void;
|
||||
customChecks(argv: Arguments, aliases: DetailedArguments['aliases']): void;
|
||||
freeze(): void;
|
||||
getConflicting(): Dictionary<(string | undefined)[]>;
|
||||
getImplied(): Dictionary<KeyOrPos[]>;
|
||||
implications(argv: Arguments): void;
|
||||
implies(key: string | Dictionary<KeyOrPos | KeyOrPos[]>, value?: KeyOrPos | KeyOrPos[]): void;
|
||||
isValidAndSomeAliasIsNotNew(key: string, aliases: DetailedArguments['aliases']): boolean;
|
||||
limitedChoices(argv: Arguments): void;
|
||||
nonOptionCount(argv: Arguments): void;
|
||||
positionalCount(required: number, observed: number): void;
|
||||
recommendCommands(cmd: string, potentialCommands: string[]): void;
|
||||
requiredArguments(argv: Arguments): void;
|
||||
reset(localLookup: Dictionary): ValidationInstance;
|
||||
unfreeze(): void;
|
||||
unknownArguments(argv: Arguments, aliases: DetailedArguments['aliases'], positionalMap: Dictionary, isDefaultCommand: boolean): void;
|
||||
unknownCommands(argv: Arguments): boolean;
|
||||
}
|
||||
interface CustomCheck {
|
||||
func: (argv: Arguments, aliases: DetailedArguments['aliases']) => any;
|
||||
global: boolean;
|
||||
}
|
||||
export declare type KeyOrPos = string | number;
|
||||
export {};
|
330
node_modules/yargs/build/lib/validation.js
generated
vendored
Normal file
330
node_modules/yargs/build/lib/validation.js
generated
vendored
Normal file
|
@ -0,0 +1,330 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.validation = void 0;
|
||||
const argsert_1 = require("./argsert");
|
||||
const common_types_1 = require("./common-types");
|
||||
const levenshtein_1 = require("./levenshtein");
|
||||
const obj_filter_1 = require("./obj-filter");
|
||||
const specialKeys = ['$0', '--', '_'];
|
||||
// validation-type-stuff, missing params,
|
||||
// bad implications, custom checks.
|
||||
function validation(yargs, usage, y18n) {
|
||||
const __ = y18n.__;
|
||||
const __n = y18n.__n;
|
||||
const self = {};
|
||||
// validate appropriate # of non-option
|
||||
// arguments were provided, i.e., '_'.
|
||||
self.nonOptionCount = function nonOptionCount(argv) {
|
||||
const demandedCommands = yargs.getDemandedCommands();
|
||||
// don't count currently executing commands
|
||||
const _s = argv._.length - yargs.getContext().commands.length;
|
||||
if (demandedCommands._ && (_s < demandedCommands._.min || _s > demandedCommands._.max)) {
|
||||
if (_s < demandedCommands._.min) {
|
||||
if (demandedCommands._.minMsg !== undefined) {
|
||||
usage.fail(
|
||||
// replace $0 with observed, $1 with expected.
|
||||
demandedCommands._.minMsg
|
||||
? demandedCommands._.minMsg.replace(/\$0/g, _s.toString()).replace(/\$1/, demandedCommands._.min.toString())
|
||||
: null);
|
||||
}
|
||||
else {
|
||||
usage.fail(__n('Not enough non-option arguments: got %s, need at least %s', 'Not enough non-option arguments: got %s, need at least %s', _s, _s, demandedCommands._.min));
|
||||
}
|
||||
}
|
||||
else if (_s > demandedCommands._.max) {
|
||||
if (demandedCommands._.maxMsg !== undefined) {
|
||||
usage.fail(
|
||||
// replace $0 with observed, $1 with expected.
|
||||
demandedCommands._.maxMsg
|
||||
? demandedCommands._.maxMsg.replace(/\$0/g, _s.toString()).replace(/\$1/, demandedCommands._.max.toString())
|
||||
: null);
|
||||
}
|
||||
else {
|
||||
usage.fail(__n('Too many non-option arguments: got %s, maximum of %s', 'Too many non-option arguments: got %s, maximum of %s', _s, _s, demandedCommands._.max));
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
// validate the appropriate # of <required>
|
||||
// positional arguments were provided:
|
||||
self.positionalCount = function positionalCount(required, observed) {
|
||||
if (observed < required) {
|
||||
usage.fail(__n('Not enough non-option arguments: got %s, need at least %s', 'Not enough non-option arguments: got %s, need at least %s', observed, observed, required));
|
||||
}
|
||||
};
|
||||
// make sure all the required arguments are present.
|
||||
self.requiredArguments = function requiredArguments(argv) {
|
||||
const demandedOptions = yargs.getDemandedOptions();
|
||||
let missing = null;
|
||||
for (const key of Object.keys(demandedOptions)) {
|
||||
if (!Object.prototype.hasOwnProperty.call(argv, key) || typeof argv[key] === 'undefined') {
|
||||
missing = missing || {};
|
||||
missing[key] = demandedOptions[key];
|
||||
}
|
||||
}
|
||||
if (missing) {
|
||||
const customMsgs = [];
|
||||
for (const key of Object.keys(missing)) {
|
||||
const msg = missing[key];
|
||||
if (msg && customMsgs.indexOf(msg) < 0) {
|
||||
customMsgs.push(msg);
|
||||
}
|
||||
}
|
||||
const customMsg = customMsgs.length ? `\n${customMsgs.join('\n')}` : '';
|
||||
usage.fail(__n('Missing required argument: %s', 'Missing required arguments: %s', Object.keys(missing).length, Object.keys(missing).join(', ') + customMsg));
|
||||
}
|
||||
};
|
||||
// check for unknown arguments (strict-mode).
|
||||
self.unknownArguments = function unknownArguments(argv, aliases, positionalMap, isDefaultCommand) {
|
||||
const commandKeys = yargs.getCommandInstance().getCommands();
|
||||
const unknown = [];
|
||||
const currentContext = yargs.getContext();
|
||||
Object.keys(argv).forEach((key) => {
|
||||
if (specialKeys.indexOf(key) === -1 &&
|
||||
!Object.prototype.hasOwnProperty.call(positionalMap, key) &&
|
||||
!Object.prototype.hasOwnProperty.call(yargs._getParseContext(), key) &&
|
||||
!self.isValidAndSomeAliasIsNotNew(key, aliases)) {
|
||||
unknown.push(key);
|
||||
}
|
||||
});
|
||||
if ((currentContext.commands.length > 0) || (commandKeys.length > 0) || isDefaultCommand) {
|
||||
argv._.slice(currentContext.commands.length).forEach((key) => {
|
||||
if (commandKeys.indexOf(key) === -1) {
|
||||
unknown.push(key);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (unknown.length > 0) {
|
||||
usage.fail(__n('Unknown argument: %s', 'Unknown arguments: %s', unknown.length, unknown.join(', ')));
|
||||
}
|
||||
};
|
||||
self.unknownCommands = function unknownCommands(argv) {
|
||||
const commandKeys = yargs.getCommandInstance().getCommands();
|
||||
const unknown = [];
|
||||
const currentContext = yargs.getContext();
|
||||
if ((currentContext.commands.length > 0) || (commandKeys.length > 0)) {
|
||||
argv._.slice(currentContext.commands.length).forEach((key) => {
|
||||
if (commandKeys.indexOf(key) === -1) {
|
||||
unknown.push(key);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (unknown.length > 0) {
|
||||
usage.fail(__n('Unknown command: %s', 'Unknown commands: %s', unknown.length, unknown.join(', ')));
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
// check for a key that is not an alias, or for which every alias is new,
|
||||
// implying that it was invented by the parser, e.g., during camelization
|
||||
self.isValidAndSomeAliasIsNotNew = function isValidAndSomeAliasIsNotNew(key, aliases) {
|
||||
if (!Object.prototype.hasOwnProperty.call(aliases, key)) {
|
||||
return false;
|
||||
}
|
||||
const newAliases = yargs.parsed.newAliases;
|
||||
for (const a of [key, ...aliases[key]]) {
|
||||
if (!Object.prototype.hasOwnProperty.call(newAliases, a) || !newAliases[key]) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
// validate arguments limited to enumerated choices
|
||||
self.limitedChoices = function limitedChoices(argv) {
|
||||
const options = yargs.getOptions();
|
||||
const invalid = {};
|
||||
if (!Object.keys(options.choices).length)
|
||||
return;
|
||||
Object.keys(argv).forEach((key) => {
|
||||
if (specialKeys.indexOf(key) === -1 &&
|
||||
Object.prototype.hasOwnProperty.call(options.choices, key)) {
|
||||
[].concat(argv[key]).forEach((value) => {
|
||||
// TODO case-insensitive configurability
|
||||
if (options.choices[key].indexOf(value) === -1 &&
|
||||
value !== undefined) {
|
||||
invalid[key] = (invalid[key] || []).concat(value);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
const invalidKeys = Object.keys(invalid);
|
||||
if (!invalidKeys.length)
|
||||
return;
|
||||
let msg = __('Invalid values:');
|
||||
invalidKeys.forEach((key) => {
|
||||
msg += `\n ${__('Argument: %s, Given: %s, Choices: %s', key, usage.stringifiedValues(invalid[key]), usage.stringifiedValues(options.choices[key]))}`;
|
||||
});
|
||||
usage.fail(msg);
|
||||
};
|
||||
// custom checks, added using the `check` option on yargs.
|
||||
let checks = [];
|
||||
self.check = function check(f, global) {
|
||||
checks.push({
|
||||
func: f,
|
||||
global
|
||||
});
|
||||
};
|
||||
self.customChecks = function customChecks(argv, aliases) {
|
||||
for (let i = 0, f; (f = checks[i]) !== undefined; i++) {
|
||||
const func = f.func;
|
||||
let result = null;
|
||||
try {
|
||||
result = func(argv, aliases);
|
||||
}
|
||||
catch (err) {
|
||||
usage.fail(err.message ? err.message : err, err);
|
||||
continue;
|
||||
}
|
||||
if (!result) {
|
||||
usage.fail(__('Argument check failed: %s', func.toString()));
|
||||
}
|
||||
else if (typeof result === 'string' || result instanceof Error) {
|
||||
usage.fail(result.toString(), result);
|
||||
}
|
||||
}
|
||||
};
|
||||
// check implications, argument foo implies => argument bar.
|
||||
let implied = {};
|
||||
self.implies = function implies(key, value) {
|
||||
argsert_1.argsert('<string|object> [array|number|string]', [key, value], arguments.length);
|
||||
if (typeof key === 'object') {
|
||||
Object.keys(key).forEach((k) => {
|
||||
self.implies(k, key[k]);
|
||||
});
|
||||
}
|
||||
else {
|
||||
yargs.global(key);
|
||||
if (!implied[key]) {
|
||||
implied[key] = [];
|
||||
}
|
||||
if (Array.isArray(value)) {
|
||||
value.forEach((i) => self.implies(key, i));
|
||||
}
|
||||
else {
|
||||
common_types_1.assertNotStrictEqual(value, undefined);
|
||||
implied[key].push(value);
|
||||
}
|
||||
}
|
||||
};
|
||||
self.getImplied = function getImplied() {
|
||||
return implied;
|
||||
};
|
||||
function keyExists(argv, val) {
|
||||
// convert string '1' to number 1
|
||||
const num = Number(val);
|
||||
val = isNaN(num) ? val : num;
|
||||
if (typeof val === 'number') {
|
||||
// check length of argv._
|
||||
val = argv._.length >= val;
|
||||
}
|
||||
else if (val.match(/^--no-.+/)) {
|
||||
// check if key/value doesn't exist
|
||||
val = val.match(/^--no-(.+)/)[1];
|
||||
val = !argv[val];
|
||||
}
|
||||
else {
|
||||
// check if key/value exists
|
||||
val = argv[val];
|
||||
}
|
||||
return val;
|
||||
}
|
||||
self.implications = function implications(argv) {
|
||||
const implyFail = [];
|
||||
Object.keys(implied).forEach((key) => {
|
||||
const origKey = key;
|
||||
(implied[key] || []).forEach((value) => {
|
||||
let key = origKey;
|
||||
const origValue = value;
|
||||
key = keyExists(argv, key);
|
||||
value = keyExists(argv, value);
|
||||
if (key && !value) {
|
||||
implyFail.push(` ${origKey} -> ${origValue}`);
|
||||
}
|
||||
});
|
||||
});
|
||||
if (implyFail.length) {
|
||||
let msg = `${__('Implications failed:')}\n`;
|
||||
implyFail.forEach((value) => {
|
||||
msg += (value);
|
||||
});
|
||||
usage.fail(msg);
|
||||
}
|
||||
};
|
||||
let conflicting = {};
|
||||
self.conflicts = function conflicts(key, value) {
|
||||
argsert_1.argsert('<string|object> [array|string]', [key, value], arguments.length);
|
||||
if (typeof key === 'object') {
|
||||
Object.keys(key).forEach((k) => {
|
||||
self.conflicts(k, key[k]);
|
||||
});
|
||||
}
|
||||
else {
|
||||
yargs.global(key);
|
||||
if (!conflicting[key]) {
|
||||
conflicting[key] = [];
|
||||
}
|
||||
if (Array.isArray(value)) {
|
||||
value.forEach((i) => self.conflicts(key, i));
|
||||
}
|
||||
else {
|
||||
conflicting[key].push(value);
|
||||
}
|
||||
}
|
||||
};
|
||||
self.getConflicting = () => conflicting;
|
||||
self.conflicting = function conflictingFn(argv) {
|
||||
Object.keys(argv).forEach((key) => {
|
||||
if (conflicting[key]) {
|
||||
conflicting[key].forEach((value) => {
|
||||
// we default keys to 'undefined' that have been configured, we should not
|
||||
// apply conflicting check unless they are a value other than 'undefined'.
|
||||
if (value && argv[key] !== undefined && argv[value] !== undefined) {
|
||||
usage.fail(__('Arguments %s and %s are mutually exclusive', key, value));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
self.recommendCommands = function recommendCommands(cmd, potentialCommands) {
|
||||
const threshold = 3; // if it takes more than three edits, let's move on.
|
||||
potentialCommands = potentialCommands.sort((a, b) => b.length - a.length);
|
||||
let recommended = null;
|
||||
let bestDistance = Infinity;
|
||||
for (let i = 0, candidate; (candidate = potentialCommands[i]) !== undefined; i++) {
|
||||
const d = levenshtein_1.levenshtein(cmd, candidate);
|
||||
if (d <= threshold && d < bestDistance) {
|
||||
bestDistance = d;
|
||||
recommended = candidate;
|
||||
}
|
||||
}
|
||||
if (recommended)
|
||||
usage.fail(__('Did you mean %s?', recommended));
|
||||
};
|
||||
self.reset = function reset(localLookup) {
|
||||
implied = obj_filter_1.objFilter(implied, k => !localLookup[k]);
|
||||
conflicting = obj_filter_1.objFilter(conflicting, k => !localLookup[k]);
|
||||
checks = checks.filter(c => c.global);
|
||||
return self;
|
||||
};
|
||||
const frozens = [];
|
||||
self.freeze = function freeze() {
|
||||
frozens.push({
|
||||
implied,
|
||||
checks,
|
||||
conflicting
|
||||
});
|
||||
};
|
||||
self.unfreeze = function unfreeze() {
|
||||
const frozen = frozens.pop();
|
||||
common_types_1.assertNotStrictEqual(frozen, undefined);
|
||||
({
|
||||
implied,
|
||||
checks,
|
||||
conflicting
|
||||
} = frozen);
|
||||
};
|
||||
return self;
|
||||
}
|
||||
exports.validation = validation;
|
274
node_modules/yargs/build/lib/yargs.d.ts
generated
vendored
Normal file
274
node_modules/yargs/build/lib/yargs.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,274 @@
|
|||
/// <reference types="node" />
|
||||
import { CommandInstance, CommandHandler, CommandBuilderDefinition, CommandBuilder, CommandHandlerCallback, FinishCommandHandler } from './command';
|
||||
import { Dictionary } from './common-types';
|
||||
import { Arguments as ParserArguments, DetailedArguments as ParserDetailedArguments, Configuration as ParserConfiguration, Options as ParserOptions, ConfigCallback, CoerceCallback } from 'yargs-parser';
|
||||
import { YError } from './yerror';
|
||||
import { UsageInstance, FailureFunction } from './usage';
|
||||
import { CompletionFunction } from './completion';
|
||||
import { ValidationInstance, KeyOrPos } from './validation';
|
||||
import { Y18N } from 'y18n';
|
||||
import { MiddlewareCallback, Middleware } from './middleware';
|
||||
import { RequireDirectoryOptions } from 'require-directory';
|
||||
export declare function Yargs(processArgs?: string | string[], cwd?: string, parentRequire?: NodeRequire): YargsInstance;
|
||||
export declare function rebase(base: string, dir: string): string;
|
||||
/** Instance of the yargs module. */
|
||||
export interface YargsInstance {
|
||||
$0: string;
|
||||
argv: Arguments;
|
||||
customScriptName: boolean;
|
||||
parsed: DetailedArguments | false;
|
||||
_copyDoubleDash<T extends Arguments | Promise<Arguments>>(argv: T): T;
|
||||
_getLoggerInstance(): LoggerInstance;
|
||||
_getParseContext(): Object;
|
||||
_hasOutput(): boolean;
|
||||
_hasParseCallback(): boolean;
|
||||
_parseArgs: {
|
||||
(args: null, shortCircuit: null, _calledFromCommand: boolean, commandIndex?: number): Arguments | Promise<Arguments>;
|
||||
(args: string | string[], shortCircuit?: boolean): Arguments | Promise<Arguments>;
|
||||
};
|
||||
_runValidation(argv: Arguments, aliases: Dictionary<string[]>, positionalMap: Dictionary<string[]>, parseErrors: Error | null, isDefaultCommand?: boolean): void;
|
||||
_setHasOutput(): void;
|
||||
addHelpOpt: {
|
||||
(opt?: string | false): YargsInstance;
|
||||
(opt?: string, msg?: string): YargsInstance;
|
||||
};
|
||||
addShowHiddenOpt: {
|
||||
(opt?: string | false): YargsInstance;
|
||||
(opt?: string, msg?: string): YargsInstance;
|
||||
};
|
||||
alias: {
|
||||
(keys: string | string[], aliases: string | string[]): YargsInstance;
|
||||
(keyAliases: Dictionary<string | string[]>): YargsInstance;
|
||||
};
|
||||
array(keys: string | string[]): YargsInstance;
|
||||
boolean(keys: string | string[]): YargsInstance;
|
||||
check(f: (argv: Arguments, aliases: Dictionary<string[]>) => any, _global?: boolean): YargsInstance;
|
||||
choices: {
|
||||
(keys: string | string[], choices: string | string[]): YargsInstance;
|
||||
(keyChoices: Dictionary<string | string[]>): YargsInstance;
|
||||
};
|
||||
coerce: {
|
||||
(keys: string | string[], coerceCallback: CoerceCallback): YargsInstance;
|
||||
(keyCoerceCallbacks: Dictionary<CoerceCallback>): YargsInstance;
|
||||
};
|
||||
command(cmd: string | string[], description: CommandHandler['description'], builder?: CommandBuilderDefinition | CommandBuilder, handler?: CommandHandlerCallback, commandMiddleware?: Middleware[], deprecated?: boolean): YargsInstance;
|
||||
commandDir(dir: string, opts?: RequireDirectoryOptions<any>): YargsInstance;
|
||||
completion: {
|
||||
(cmd?: string, fn?: CompletionFunction): YargsInstance;
|
||||
(cmd?: string, desc?: string | false, fn?: CompletionFunction): YargsInstance;
|
||||
};
|
||||
config: {
|
||||
(config: Dictionary): YargsInstance;
|
||||
(keys?: string | string[], configCallback?: ConfigCallback): YargsInstance;
|
||||
(keys?: string | string[], msg?: string, configCallback?: ConfigCallback): YargsInstance;
|
||||
};
|
||||
conflicts: {
|
||||
(key: string, conflictsWith: string | string[]): YargsInstance;
|
||||
(keyConflicts: Dictionary<string | string[]>): YargsInstance;
|
||||
};
|
||||
count(keys: string | string[]): YargsInstance;
|
||||
default: {
|
||||
(key: string, value: any, defaultDescription?: string): YargsInstance;
|
||||
(keys: string[], value: Exclude<any, Function>): YargsInstance;
|
||||
(keys: Dictionary<any>): YargsInstance;
|
||||
};
|
||||
defaults: YargsInstance['default'];
|
||||
demand: {
|
||||
(min: number, max?: number | string, msg?: string): YargsInstance;
|
||||
(keys: string | string[], msg?: string | true): YargsInstance;
|
||||
(keys: string | string[], max: string[], msg?: string | true): YargsInstance;
|
||||
(keyMsgs: Dictionary<string | undefined>): YargsInstance;
|
||||
(keyMsgs: Dictionary<string | undefined>, max: string[], msg?: string): YargsInstance;
|
||||
};
|
||||
demandCommand(): YargsInstance;
|
||||
demandCommand(min: number, minMsg?: string): YargsInstance;
|
||||
demandCommand(min: number, max: number, minMsg?: string | null, maxMsg?: string | null): YargsInstance;
|
||||
demandOption: {
|
||||
(keys: string | string[], msg?: string): YargsInstance;
|
||||
(keyMsgs: Dictionary<string | undefined>): YargsInstance;
|
||||
};
|
||||
deprecateOption(option: string, message?: string | boolean): YargsInstance;
|
||||
describe: {
|
||||
(keys: string | string[], description?: string): YargsInstance;
|
||||
(keyDescriptions: Dictionary<string>): YargsInstance;
|
||||
};
|
||||
detectLocale(detect: boolean): YargsInstance;
|
||||
env(prefix?: string | false): YargsInstance;
|
||||
epilog: YargsInstance['epilogue'];
|
||||
epilogue(msg: string): YargsInstance;
|
||||
example(cmd: string | [string, string?][], description?: string): YargsInstance;
|
||||
exit(code: number, err?: YError | string): void;
|
||||
exitProcess(enabled: boolean): YargsInstance;
|
||||
fail(f: FailureFunction): YargsInstance;
|
||||
getCommandInstance(): CommandInstance;
|
||||
getCompletion(args: string[], done: (completions: string[]) => any): void;
|
||||
getContext(): Context;
|
||||
getDemandedCommands(): Options['demandedCommands'];
|
||||
getDemandedOptions(): Options['demandedOptions'];
|
||||
getDeprecatedOptions(): Options['deprecatedOptions'];
|
||||
getDetectLocale(): boolean;
|
||||
getExitProcess(): boolean;
|
||||
getGroups(): Dictionary<string[]>;
|
||||
getHandlerFinishCommand(): FinishCommandHandler | null;
|
||||
getOptions(): Options;
|
||||
getParserConfiguration(): Configuration;
|
||||
getStrict(): boolean;
|
||||
getStrictCommands(): boolean;
|
||||
getUsageInstance(): UsageInstance;
|
||||
getValidationInstance(): ValidationInstance;
|
||||
global(keys: string | string[], global?: boolean): YargsInstance;
|
||||
group(keys: string | string[], groupName: string): YargsInstance;
|
||||
help: YargsInstance['addHelpOpt'];
|
||||
hide(key: string): YargsInstance;
|
||||
implies: {
|
||||
(key: string, implication: KeyOrPos | KeyOrPos[]): YargsInstance;
|
||||
(keyImplications: Dictionary<KeyOrPos | KeyOrPos[]>): YargsInstance;
|
||||
};
|
||||
locale: {
|
||||
(): string;
|
||||
(locale: string): YargsInstance;
|
||||
};
|
||||
middleware(callback: MiddlewareCallback | MiddlewareCallback[], applyBeforeValidation?: boolean): YargsInstance;
|
||||
nargs: {
|
||||
(keys: string | string[], nargs: number): YargsInstance;
|
||||
(keyNargs: Dictionary<number>): YargsInstance;
|
||||
};
|
||||
normalize(keys: string | string[]): YargsInstance;
|
||||
number(keys: string | string[]): YargsInstance;
|
||||
onFinishCommand(f: FinishCommandHandler): YargsInstance;
|
||||
option: {
|
||||
(key: string, optionDefinition: OptionDefinition): YargsInstance;
|
||||
(keyOptionDefinitions: Dictionary<OptionDefinition>): YargsInstance;
|
||||
};
|
||||
options: YargsInstance['option'];
|
||||
parse: {
|
||||
(): Arguments | Promise<Arguments>;
|
||||
(args: string | string[], context: object, parseCallback?: ParseCallback): Arguments | Promise<Arguments>;
|
||||
(args: string | string[], parseCallback: ParseCallback): Arguments | Promise<Arguments>;
|
||||
(args: string | string[], shortCircuit: boolean): Arguments | Promise<Arguments>;
|
||||
};
|
||||
parserConfiguration(config: Configuration): YargsInstance;
|
||||
pkgConf(key: string, rootPath?: string): YargsInstance;
|
||||
positional(key: string, positionalDefinition: PositionalDefinition): YargsInstance;
|
||||
recommendCommands(recommend: boolean): YargsInstance;
|
||||
require: YargsInstance['demand'];
|
||||
required: YargsInstance['demand'];
|
||||
requiresArg(keys: string | string[] | Dictionary): YargsInstance;
|
||||
reset(aliases?: DetailedArguments['aliases']): YargsInstance;
|
||||
resetOptions(aliases?: DetailedArguments['aliases']): YargsInstance;
|
||||
scriptName(scriptName: string): YargsInstance;
|
||||
showCompletionScript($0?: string, cmd?: string): YargsInstance;
|
||||
showHelp(level: 'error' | 'log' | ((message: string) => void)): YargsInstance;
|
||||
showHelpOnFail: {
|
||||
(message?: string): YargsInstance;
|
||||
(enabled: boolean, message: string): YargsInstance;
|
||||
};
|
||||
showHidden: YargsInstance['addShowHiddenOpt'];
|
||||
skipValidation(keys: string | string[]): YargsInstance;
|
||||
strict(enable?: boolean): YargsInstance;
|
||||
strictCommands(enable?: boolean): YargsInstance;
|
||||
string(key: string | string[]): YargsInstance;
|
||||
terminalWidth(): number | null;
|
||||
updateStrings(obj: Dictionary<string>): YargsInstance;
|
||||
updateLocale: YargsInstance['updateStrings'];
|
||||
usage: {
|
||||
(msg: string | null): YargsInstance;
|
||||
(msg: string, description: CommandHandler['description'], builder?: CommandBuilderDefinition | CommandBuilder, handler?: CommandHandlerCallback): YargsInstance;
|
||||
};
|
||||
version: {
|
||||
(ver?: string | false): YargsInstance;
|
||||
(key?: string, ver?: string): YargsInstance;
|
||||
(key?: string, msg?: string, ver?: string): YargsInstance;
|
||||
};
|
||||
wrap(cols: number | null | undefined): YargsInstance;
|
||||
}
|
||||
export declare function isYargsInstance(y: YargsInstance | void): y is YargsInstance;
|
||||
/** Yargs' context. */
|
||||
export interface Context {
|
||||
commands: string[];
|
||||
files: string[];
|
||||
fullCommands: string[];
|
||||
}
|
||||
declare type LoggerInstance = Pick<Console, 'error' | 'log'>;
|
||||
export interface Options extends ParserOptions {
|
||||
__: Y18N['__'];
|
||||
alias: Dictionary<string[]>;
|
||||
array: string[];
|
||||
boolean: string[];
|
||||
choices: Dictionary<string[]>;
|
||||
config: Dictionary<ConfigCallback | boolean>;
|
||||
configObjects: Dictionary[];
|
||||
configuration: Configuration;
|
||||
count: string[];
|
||||
defaultDescription: Dictionary<string | undefined>;
|
||||
demandedCommands: Dictionary<{
|
||||
min: number;
|
||||
max: number;
|
||||
minMsg?: string | null;
|
||||
maxMsg?: string | null;
|
||||
}>;
|
||||
demandedOptions: Dictionary<string | undefined>;
|
||||
deprecatedOptions: Dictionary<string | boolean | undefined>;
|
||||
hiddenOptions: string[];
|
||||
/** Manually set keys */
|
||||
key: Dictionary<boolean | string>;
|
||||
local: string[];
|
||||
normalize: string[];
|
||||
number: string[];
|
||||
showHiddenOpt: string;
|
||||
skipValidation: string[];
|
||||
string: string[];
|
||||
}
|
||||
export interface Configuration extends Partial<ParserConfiguration> {
|
||||
/** Should a config object be deep-merged with the object config it extends? */
|
||||
'deep-merge-config'?: boolean;
|
||||
/** Should commands be sorted in help? */
|
||||
'sort-commands'?: boolean;
|
||||
}
|
||||
export interface OptionDefinition {
|
||||
alias?: string | string[];
|
||||
array?: boolean;
|
||||
boolean?: boolean;
|
||||
choices?: string | string[];
|
||||
coerce?: CoerceCallback;
|
||||
config?: boolean;
|
||||
configParser?: ConfigCallback;
|
||||
conflicts?: string | string[];
|
||||
count?: boolean;
|
||||
default?: any;
|
||||
defaultDescription?: string;
|
||||
deprecate?: string | boolean;
|
||||
deprecated?: OptionDefinition['deprecate'];
|
||||
desc?: string;
|
||||
describe?: OptionDefinition['desc'];
|
||||
description?: OptionDefinition['desc'];
|
||||
demand?: string | true;
|
||||
demandOption?: OptionDefinition['demand'];
|
||||
global?: boolean;
|
||||
group?: string;
|
||||
hidden?: boolean;
|
||||
implies?: string | number | KeyOrPos[];
|
||||
nargs?: number;
|
||||
normalize?: boolean;
|
||||
number?: boolean;
|
||||
require?: OptionDefinition['demand'];
|
||||
required?: OptionDefinition['demand'];
|
||||
requiresArg?: boolean;
|
||||
skipValidation?: boolean;
|
||||
string?: boolean;
|
||||
type?: 'array' | 'boolean' | 'count' | 'number' | 'string';
|
||||
}
|
||||
interface PositionalDefinition extends Pick<OptionDefinition, 'alias' | 'array' | 'coerce' | 'choices' | 'conflicts' | 'default' | 'defaultDescription' | 'demand' | 'desc' | 'describe' | 'description' | 'implies' | 'normalize'> {
|
||||
type?: 'boolean' | 'number' | 'string';
|
||||
}
|
||||
interface ParseCallback {
|
||||
(err: YError | string | undefined | null, argv: Arguments | Promise<Arguments>, output: string): void;
|
||||
}
|
||||
export interface Arguments extends ParserArguments {
|
||||
/** The script name or node command */
|
||||
$0: string;
|
||||
}
|
||||
export interface DetailedArguments extends ParserDetailedArguments {
|
||||
argv: Arguments;
|
||||
}
|
||||
export {};
|
1190
node_modules/yargs/build/lib/yargs.js
generated
vendored
Normal file
1190
node_modules/yargs/build/lib/yargs.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
4
node_modules/yargs/build/lib/yerror.d.ts
generated
vendored
Normal file
4
node_modules/yargs/build/lib/yerror.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
export declare class YError extends Error {
|
||||
name: string;
|
||||
constructor(msg?: string | null);
|
||||
}
|
11
node_modules/yargs/build/lib/yerror.js
generated
vendored
Normal file
11
node_modules/yargs/build/lib/yerror.js
generated
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.YError = void 0;
|
||||
class YError extends Error {
|
||||
constructor(msg) {
|
||||
super(msg || 'yargs error');
|
||||
this.name = 'YError';
|
||||
Error.captureStackTrace(this, YError);
|
||||
}
|
||||
}
|
||||
exports.YError = YError;
|
Loading…
Add table
Add a link
Reference in a new issue