Socket
Socket
Sign inDemoInstall

yargs

Package Overview
Dependencies
Maintainers
2
Versions
250
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

yargs - npm Package Compare versions

Comparing version 17.0.0-candidate.3 to 17.0.0-candidate.4

45

build/lib/command.js

@@ -6,6 +6,5 @@ import { assertNotStrictEqual, } from './typings/common-types.js';

import { isYargsInstance, } from './yargs-factory.js';
import { maybeAsyncResult } from './utils/maybe-async-result.js';
import whichModule from './utils/which-module.js';
const DEFAULT_MARKER = /(^\*)|(^\$0)/;
export function command(yargs, usage, validation, globalMiddleware, shim) {
export function command(yargs, usage, validation, globalMiddleware = [], shim) {
const self = {};

@@ -135,2 +134,4 @@ let handlers = {};

const innerYargs = isYargsInstance(builderOutput) ? builderOutput : yargs;
if (!command)
innerYargs.getUsageInstance().unfreeze();
if (shouldUpdateUsage(innerYargs)) {

@@ -146,2 +147,4 @@ innerYargs

const innerYargs = yargs.reset(parsed.aliases);
if (!command)
innerYargs.getUsageInstance().unfreeze();
if (shouldUpdateUsage(innerYargs)) {

@@ -164,3 +167,2 @@ innerYargs

const middlewares = globalMiddleware
.getMiddleware()
.slice(0)

@@ -171,8 +173,11 @@ .concat(commandHandler.middlewares);

const validation = yargs._runValidation(aliases, positionalMap, yargs.parsed.error, !command);
innerArgv = maybeAsyncResult(innerArgv, (err) => {
throw err;
}, result => {
validation(result);
return result;
});
if (isPromise(innerArgv)) {
innerArgv = innerArgv.then(argv => {
validation(argv);
return argv;
});
}
else {
validation(innerArgv);
}
}

@@ -184,13 +189,15 @@ if (commandHandler.handler && !yargs._hasOutput()) {

innerArgv = applyMiddleware(innerArgv, yargs, middlewares, false);
innerArgv = maybeAsyncResult(innerArgv, (err) => {
throw err;
}, result => {
const handlerResult = commandHandler.handler(result);
if (isPromise(innerArgv)) {
const innerArgvRef = innerArgv;
innerArgv = innerArgv
.then(argv => commandHandler.handler(argv))
.then(() => innerArgvRef);
}
else {
const handlerResult = commandHandler.handler(innerArgv);
if (isPromise(handlerResult)) {
return handlerResult.then(() => result);
const innerArgvRef = innerArgv;
innerArgv = handlerResult.then(() => innerArgvRef);
}
else {
return result;
}
});
}
yargs.getUsageInstance().cacheHelpMessage();

@@ -296,3 +303,3 @@ if (isPromise(innerArgv) && !yargs._hasParseCallback()) {

const config = Object.assign({}, options.configuration, {
'populate--': false,
'populate--': true,
});

@@ -299,0 +306,0 @@ const parsed = shim.Parser.detailed(unparsed, Object.assign({}, options, {

@@ -114,3 +114,3 @@ import { isCommandBuilderCallback } from './command.js';

else if (isFallbackCompletionFunction(this.customCompletionFunction)) {
return this.customCompletionFunction(current, argv, () => this.defaultCompletion(args, argv, current, done), completions => {
return this.customCompletionFunction(current, argv, (onCompleted = done) => this.defaultCompletion(args, argv, current, onCompleted), completions => {
done(null, completions);

@@ -117,0 +117,0 @@ });

import { argsert } from './argsert.js';
import { isPromise } from './utils/is-promise.js';
export class GlobalMiddleware {
constructor(yargs) {
this.globalMiddleware = [];
this.frozens = [];
this.yargs = yargs;
}
addMiddleware(callback, applyBeforeValidation, global = true) {
argsert('<array|function> [boolean] [boolean]', [callback, applyBeforeValidation, global], arguments.length);
export function globalMiddlewareFactory(globalMiddleware, context) {
return function (callback, applyBeforeValidation = false) {
argsert('<array|function> [boolean]', [callback, applyBeforeValidation], arguments.length);
if (Array.isArray(callback)) {

@@ -16,42 +11,12 @@ for (let i = 0; i < callback.length; i++) {

}
const m = callback[i];
m.applyBeforeValidation = applyBeforeValidation;
m.global = global;
callback[i].applyBeforeValidation = applyBeforeValidation;
}
Array.prototype.push.apply(this.globalMiddleware, callback);
Array.prototype.push.apply(globalMiddleware, callback);
}
else if (typeof callback === 'function') {
const m = callback;
m.applyBeforeValidation = applyBeforeValidation;
m.global = global;
this.globalMiddleware.push(callback);
callback.applyBeforeValidation = applyBeforeValidation;
globalMiddleware.push(callback);
}
return this.yargs;
}
addCoerceMiddleware(callback, option) {
const aliases = this.yargs.getAliases();
this.globalMiddleware = this.globalMiddleware.filter(m => {
const toCheck = [...(aliases[option] ? aliases[option] : []), option];
if (!m.option)
return true;
else
return !toCheck.includes(m.option);
});
callback.option = option;
return this.addMiddleware(callback, true, true);
}
getMiddleware() {
return this.globalMiddleware;
}
freeze() {
this.frozens.push([...this.globalMiddleware]);
}
unfreeze() {
const frozen = this.frozens.pop();
if (frozen !== undefined)
this.globalMiddleware = frozen;
}
reset() {
this.globalMiddleware = this.globalMiddleware.filter(m => m.global);
}
return context;
};
}

@@ -58,0 +23,0 @@ export function commandMiddlewareFactory(commandMiddleware) {

@@ -1,2 +0,1 @@

import { assertNotStrictEqual, } from './typings/common-types.js';
import { objFilter } from './utils/obj-filter.js';

@@ -193,3 +192,3 @@ import { YError } from './yerror.js';

}
if (commands.length) {
if (commands.length > 1 || (commands.length === 1 && !commands[0][2])) {
ui.div(__('Commands:'));

@@ -537,3 +536,4 @@ const context = yargs.getContext();

const frozen = frozens.pop();
assertNotStrictEqual(frozen, undefined, shim);
if (!frozen)
return;
({

@@ -540,0 +540,0 @@ failMessage,

@@ -151,2 +151,28 @@ import { argsert } from './argsert.js';

};
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);
}
}
};
let implied = {};

@@ -265,2 +291,3 @@ self.implies = function implies(key, value) {

conflicting = objFilter(conflicting, k => !localLookup[k]);
checks = checks.filter(c => c.global);
return self;

@@ -272,2 +299,3 @@ };

implied,
checks,
conflicting,

@@ -279,5 +307,5 @@ });

assertNotStrictEqual(frozen, undefined, shim);
({ implied, conflicting } = frozen);
({ implied, checks, conflicting } = frozen);
};
return self;
}

@@ -10,5 +10,4 @@ import { command as Command, } from './command.js';

import { applyExtends } from './utils/apply-extends.js';
import { applyMiddleware, GlobalMiddleware, } from './middleware.js';
import { applyMiddleware, globalMiddlewareFactory, } from './middleware.js';
import { isPromise } from './utils/is-promise.js';
import { maybeAsyncResult } from './utils/maybe-async-result.js';
import setBlocking from './utils/set-blocking.js';

@@ -25,8 +24,9 @@ let shim;

let groups = {};
const globalMiddleware = [];
let output = '';
const preservedGroups = {};
const globalMiddleware = new GlobalMiddleware(self);
let usage;
let validation;
const y18n = shim.y18n;
self.middleware = globalMiddlewareFactory(globalMiddleware, self);
self.scriptName = function (scriptName) {

@@ -126,2 +126,3 @@ self.customScriptName = true;

'demandedCommands',
'coerce',
'deprecatedOptions',

@@ -146,3 +147,2 @@ ];

completion = Completion(self, usage, command, shim);
globalMiddleware.reset();
completionCommand = null;

@@ -177,3 +177,2 @@ output = '';

command.freeze();
globalMiddleware.freeze();
}

@@ -204,3 +203,2 @@ function unfreeze() {

command.unfreeze();
globalMiddleware.unfreeze();
}

@@ -307,38 +305,3 @@ self.boolean = function (keys) {

argsert('<object|string|array> [function]', [keys, value], arguments.length);
if (Array.isArray(keys)) {
if (!value) {
throw new YError('coerce callback must be provided');
}
for (const key of keys) {
self.coerce(key, value);
}
return self;
}
else if (typeof keys === 'object') {
for (const key of Object.keys(keys)) {
self.coerce(key, keys[key]);
}
return self;
}
if (!value) {
throw new YError('coerce callback must be provided');
}
self.alias(keys, keys);
globalMiddleware.addCoerceMiddleware((argv, yargs) => {
let aliases;
return maybeAsyncResult(() => {
aliases = yargs.getAliases();
return value(argv[keys]);
}, (err) => {
throw new YError(err.message);
}, (result) => {
argv[keys] = result;
if (aliases[keys]) {
for (const alias of aliases[keys]) {
argv[alias] = result;
}
}
return argv;
});
}, keys);
populateParserHintSingleValueDictionary(self.coerce, 'coerce', keys, value);
return self;

@@ -418,3 +381,3 @@ };

};
self.command = function (cmd, description, builder, handler, middlewares, deprecated) {
self.command = self.commands = function (cmd, description, builder, handler, middlewares, deprecated) {
argsert('<string|array|object> [string|boolean] [function|object] [function] [array] [boolean|string]', [cmd, description, builder, handler, middlewares, deprecated], arguments.length);

@@ -477,5 +440,2 @@ command.addHandler(cmd, description, builder, handler, middlewares, deprecated);

};
self.getAliases = () => {
return self.parsed ? self.parsed.aliases : {};
};
self.getDemandedOptions = () => {

@@ -537,25 +497,7 @@ argsert([], 0);

};
self.check = function (f, global) {
argsert('<function> [boolean]', [f, global], arguments.length);
self.middleware((argv, yargs) => {
return maybeAsyncResult(() => {
return f(argv, yargs);
}, (err) => {
usage.fail(err.message ? err.message : err.toString(), err);
return argv;
}, (result) => {
if (!result) {
usage.fail(y18n.__('Argument check failed: %s', f.toString()));
}
else if (typeof result === 'string' || result instanceof Error) {
usage.fail(result.toString(), result);
}
return argv;
});
}, false, global);
self.check = function (f, _global) {
argsert('<function> [boolean]', [f, _global], arguments.length);
validation.check(f, _global !== false);
return self;
};
self.middleware = (callback, applyBeforeValidation, global = true) => {
return globalMiddleware.addMiddleware(callback, !!applyBeforeValidation, global);
};
self.global = function global(globals, global) {

@@ -1037,7 +979,9 @@ argsert('<string|array> [boolean]', [globals, global], arguments.length);

Object.defineProperty(self, 'argv', {
get: () => self._parseArgs(processArgs),
get: () => {
return self.parse();
},
enumerable: true,
});
self._parseArgs = function parseArgs(args, shortCircuit, calledFromCommand, commandIndex = 0, helpOnly = false) {
let skipValidation = !!calledFromCommand;
let skipValidation = !!calledFromCommand || helpOnly;
args = args || processArgs;

@@ -1079,5 +1023,3 @@ options.__ = y18n.__;

const requestCompletions = completion.completionKey in argv;
const skipRecommendation = argv[helpOpt] || requestCompletions;
const skipDefaultCommand = skipRecommendation &&
(handlerKeys.length > 1 || handlerKeys[0] !== '$0');
const skipRecommendation = argv[helpOpt] || requestCompletions || helpOnly;
if (argv._.length) {

@@ -1097,3 +1039,3 @@ if (handlerKeys.length) {

}
if (command.hasDefaultCommand() && !skipDefaultCommand) {
if (command.hasDefaultCommand() && !skipRecommendation) {
const innerArgv = command.runCommand(null, self, parsed, 0, helpOnly);

@@ -1115,3 +1057,3 @@ return self._postProcess(innerArgv, populateDoubleDash, !!calledFromCommand, false);

}
else if (command.hasDefaultCommand() && !skipDefaultCommand) {
else if (command.hasDefaultCommand() && !skipRecommendation) {
const innerArgv = command.runCommand(null, self, parsed, 0, helpOnly);

@@ -1162,10 +1104,5 @@ return self._postProcess(innerArgv, populateDoubleDash, !!calledFromCommand, false);

if (!calledFromCommand) {
argvPromise = applyMiddleware(argv, self, globalMiddleware.getMiddleware(), true);
argvPromise = applyMiddleware(argv, self, globalMiddleware, true);
}
argvPromise = validateAsync(validation, argvPromise !== null && argvPromise !== void 0 ? argvPromise : argv);
if (isPromise(argvPromise) && !calledFromCommand) {
argvPromise = argvPromise.then(() => {
return applyMiddleware(argv, self, globalMiddleware.getMiddleware(), false);
});
}
}

@@ -1183,8 +1120,12 @@ }

function validateAsync(validation, argv) {
return maybeAsyncResult(argv, (err) => {
throw err;
}, result => {
validation(result);
return result;
});
if (isPromise(argv)) {
argv = argv.then(argv => {
validation(argv);
return argv;
});
}
else {
validation(argv);
}
return argv;
}

@@ -1205,3 +1146,3 @@ self._postProcess = function (argv, populateDoubleDash, calledFromCommand, runGlobalMiddleware) {

if (runGlobalMiddleware) {
argv = applyMiddleware(argv, self, globalMiddleware.getMiddleware(), false);
argv = applyMiddleware(argv, self, globalMiddleware, false);
}

@@ -1249,2 +1190,3 @@ return argv;

}
validation.customChecks(argv, aliases);
validation.limitedChoices(argv);

@@ -1251,0 +1193,0 @@ validation.implications(argv);

{
"name": "yargs",
"version": "17.0.0-candidate.3",
"version": "17.0.0-candidate.4",
"description": "yargs the modern, pirate-themed, successor to optimist.",

@@ -82,4 +82,4 @@ "main": "./index.cjs",

"posttest": "npm run check",
"test": "c8 mocha --enable-source-maps ./test/*.cjs --require ./test/before.cjs --timeout=12000 --check-leaks",
"test:esm": "c8 mocha --enable-source-maps ./test/esm/*.mjs --check-leaks",
"test": "c8 mocha ./test/*.cjs --require ./test/before.cjs --timeout=12000 --check-leaks",
"test:esm": "c8 mocha ./test/esm/*.mjs --check-leaks",
"coverage": "c8 report --check-coverage",

@@ -86,0 +86,0 @@ "prepare": "npm run compile",

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc