/var/www/greso.tech/server/nsm/node_modules/qrcode/node_modules/yargs/build/lib
Edit: /var/www/greso.tech/server/nsm/node_modules/qrcode/node_modules/yargs/build/lib/yargs.js (48661B)
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.isYargsInstance = exports.rebase = exports.Yargs = void 0;
const command_1 = require("./command");
const common_types_1 = require("./common-types");
const yerror_1 = require("./yerror");
const usage_1 = require("./usage");
const argsert_1 = require("./argsert");
const fs = require("fs");
const completion_1 = require("./completion");
const path = require("path");
const validation_1 = require("./validation");
const obj_filter_1 = require("./obj-filter");
const apply_extends_1 = require("./apply-extends");
const middleware_1 = require("./middleware");
const processArgv = require("./process-argv");
const is_promise_1 = require("./is-promise");
const Parser = require("yargs-parser");
const y18nFactory = require("y18n");
const setBlocking = require("set-blocking");
const findUp = require("find-up");
const requireMainFilename = require("require-main-filename");
function Yargs(processArgs = [], cwd = process.cwd(), parentRequire = require) {
const self = {};
let command;
let completion = null;
let groups = {};
const globalMiddleware = [];
let output = '';
const preservedGroups = {};
let usage;
let validation;
let handlerFinishCommand = null;
const y18n = y18nFactory({
directory: path.resolve(__dirname, '../../locales'),
updateFiles: false
});
self.middleware = middleware_1.globalMiddlewareFactory(globalMiddleware, self);
self.scriptName = function (scriptName) {
self.customScriptName = true;
self.$0 = scriptName;
return self;
};
// ignore the node bin, specify this in your
// bin file with #!/usr/bin/env node
let default$0;
if (/\b(node|iojs|electron)(\.exe)?$/.test(process.argv[0])) {
default$0 = process.argv.slice(1, 2);
}
else {
default$0 = process.argv.slice(0, 1);
}
self.$0 = default$0
.map(x => {
const b = rebase(cwd, x);
return x.match(/^(\/|([a-zA-Z]:)?\\)/) && b.length < x.length ? b : x;
})
.join(' ').trim();
if (process.env._ !== undefined && processArgv.getProcessArgvBin() === process.env._) {
self.$0 = process.env._.replace(`${path.dirname(process.execPath)}/`, '');
}
// use context object to keep track of resets, subcommand execution, etc
// submodules should modify and check the state of context as necessary
const context = { resets: -1, commands: [], fullCommands: [], files: [] };
self.getContext = () => context;
// puts yargs back into an initial state. any keys
// that have been set to "global" will not be reset
// by this action.
let options;
self.resetOptions = self.reset = function resetOptions(aliases = {}) {
context.resets++;
options = options || {};
// put yargs back into an initial state, this
// logic is used to build a nested command
// hierarchy.
const tmpOptions = {};
tmpOptions.local = options.local ? options.local : [];
tmpOptions.configObjects = options.configObjects ? options.configObjects : [];
// if a key has been explicitly set as local,
// we should reset it before passing options to command.
const localLookup = {};
tmpOptions.local.forEach((l) => {
localLookup[l] = true;
(aliases[l] || []).forEach((a) => {
localLookup[a] = true;
});
});
// add all groups not set to local to preserved groups
Object.assign(preservedGroups, Object.keys(groups).reduce((acc, groupName) => {
const keys = groups[groupName].filter(key => !(key in localLookup));
if (keys.length > 0) {
acc[groupName] = keys;
}
return acc;
}, {}));
// groups can now be reset
groups = {};
const arrayOptions = [
'array', 'boolean', 'string', 'skipValidation',
'count', 'normalize', 'number',
'hiddenOptions'
];
const objectOptions = [
'narg', 'key', 'alias', 'default', 'defaultDescription',
'config', 'choices', 'demandedOptions', 'demandedCommands', 'coerce',
'deprecatedOptions'
];
arrayOptions.forEach(k => {
tmpOptions[k] = (options[k] || []).filter(k => !localLookup[k]);
});
objectOptions.forEach((k) => {
tmpOptions[k] = obj_filter_1.objFilter(options[k], k => !localLookup[k]);
});
tmpOptions.envPrefix = options.envPrefix;
options = tmpOptions;
// if this is the first time being executed, create
// instances of all our helpers -- otherwise just reset.
usage = usage ? usage.reset(localLookup) : usage_1.usage(self, y18n);
validation = validation ? validation.reset(localLookup) : validation_1.validation(self, usage, y18n);
command = command ? command.reset() : command_1.command(self, usage, validation, globalMiddleware);
if (!completion)
completion = completion_1.completion(self, usage, command);
completionCommand = null;
output = '';
exitError = null;
hasOutput = false;
self.parsed = false;
return self;
};
self.resetOptions();
// temporary hack: allow "freezing" of reset-able state for parse(msg, cb)
const frozens = [];
function freeze() {
frozens.push({
options,
configObjects: options.configObjects.slice(0),
exitProcess,
groups,
strict,
strictCommands,
completionCommand,
output,
exitError,
hasOutput,
parsed: self.parsed,
parseFn,
parseContext,
handlerFinishCommand
});
usage.freeze();
validation.freeze();
command.freeze();
}
function unfreeze() {
const frozen = frozens.pop();
common_types_1.assertNotStrictEqual(frozen, undefined);
let configObjects;
({
options,
configObjects,
exitProcess,
groups,
output,
exitError,
hasOutput,
parsed: self.parsed,
strict,
strictCommands,
completionCommand,
parseFn,
parseContext,
handlerFinishCommand
} = frozen);
options.configObjects = configObjects;
usage.unfreeze();
validation.unfreeze();
command.unfreeze();
}
self.boolean = function (keys) {
argsert_1.argsert('
', [keys], arguments.length);
populateParserHintArray('boolean', keys);
return self;
};
self.array = function (keys) {
argsert_1.argsert('', [keys], arguments.length);
populateParserHintArray('array', keys);
return self;
};
self.number = function (keys) {
argsert_1.argsert('', [keys], arguments.length);
populateParserHintArray('number', keys);
return self;
};
self.normalize = function (keys) {
argsert_1.argsert('', [keys], arguments.length);
populateParserHintArray('normalize', keys);
return self;
};
self.count = function (keys) {
argsert_1.argsert('', [keys], arguments.length);
populateParserHintArray('count', keys);
return self;
};
self.string = function (keys) {
argsert_1.argsert('', [keys], arguments.length);
populateParserHintArray('string', keys);
return self;
};
self.requiresArg = function (keys) {
// the 2nd paramter [number] in the argsert the assertion is mandatory
// as populateParserHintSingleValueDictionary recursively calls requiresArg
// with Nan as a 2nd parameter, although we ignore it
argsert_1.argsert(' [number]', [keys], arguments.length);
// If someone configures nargs at the same time as requiresArg,
// nargs should take precedent,
// see: https://github.com/yargs/yargs/pull/1572
// TODO: make this work with aliases, using a check similar to
// checkAllAliases() in yargs-parser.
if (typeof keys === 'string' && options.narg[keys]) {
return self;
}
else {
populateParserHintSingleValueDictionary(self.requiresArg, 'narg', keys, NaN);
}
return self;
};
self.skipValidation = function (keys) {
argsert_1.argsert('', [keys], arguments.length);
populateParserHintArray('skipValidation', keys);
return self;
};
function populateParserHintArray(type, keys) {
keys = [].concat(keys);
keys.forEach((key) => {
key = sanitizeKey(key);
options[type].push(key);
});
}
self.nargs = function (key, value) {
argsert_1.argsert(' [number]', [key, value], arguments.length);
populateParserHintSingleValueDictionary(self.nargs, 'narg', key, value);
return self;
};
self.choices = function (key, value) {
argsert_1.argsert('