Files
react-native-devtools-frontend/node_modules/yargs-unparser/index.js
T
Wolfgang Beyer cdedf581e5 Revert "Update Mocha and rollup-plugin-terser"
This reverts commit ecc4ecb65c.

Reason for revert: This CL is suspected of breaking the roll into
chromium (https://crbug.com/1121242#c2).

Original change's description:
> Update Mocha and rollup-plugin-terser
> 
> These two packages had NPM advisories filed against them. Luckily,
> we can upgrade to versions where they are fixed.
> 
> The upgrade of rollup-plugin-terser includes the upgrade to Terser 5.
> Looking at its changelog (https://github.com/terser/terser/blob/master/CHANGELOG.md#v500-beta0)
> we seem to not be affected. Our build also works as expected.
> 
> DISABLE_THIRD_PARTY_CHECK=Update node modules
> R=​petermarshall@chromium.org
> 
> Change-Id: I6974a73d92a1a210b705246053be5c2af268605b
> Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2372148
> Auto-Submit: Tim van der Lippe <tvanderlippe@chromium.org>
> Commit-Queue: Peter Marshall <petermarshall@chromium.org>
> Reviewed-by: Peter Marshall <petermarshall@chromium.org>

TBR=petermarshall@chromium.org,tvanderlippe@chromium.org

Change-Id: I969ca281c77d299038332f93ffd477925e191073
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2374207
Reviewed-by: Wolfgang Beyer <wolfi@chromium.org>
Commit-Queue: Wolfgang Beyer <wolfi@chromium.org>
2020-08-25 08:29:20 +00:00

128 lines
4.0 KiB
JavaScript

'use strict';
const yargs = require('yargs/yargs');
const flatten = require('flat');
const { castArray, some, isPlainObject, camelCase, kebabCase, omitBy } = require('lodash');
function isAlias(key, alias) {
return some(alias, (aliases) => castArray(aliases).indexOf(key) !== -1);
}
function hasDefaultValue(key, value, defaults) {
return value === defaults[key];
}
function isCamelCased(key, argv) {
return /[A-Z]/.test(key) && camelCase(key) === key && // Is it camel case?
argv[kebabCase(key)] != null; // Is the standard version defined?
}
function keyToFlag(key) {
return key.length === 1 ? `-${key}` : `--${key}`;
}
function unparseOption(key, value, unparsed) {
if (typeof value === 'string') {
unparsed.push(keyToFlag(key), value);
} else if (value === true) {
unparsed.push(keyToFlag(key));
} else if (value === false) {
unparsed.push(`--no-${key}`);
} else if (Array.isArray(value)) {
value.forEach((item) => unparseOption(key, item, unparsed));
} else if (isPlainObject(value)) {
const flattened = flatten(value, { safe: true });
for (const flattenedKey in flattened) {
if (!isCamelCased(flattenedKey, flattened)) {
unparseOption(`${key}.${flattenedKey}`, flattened[flattenedKey], unparsed);
}
}
// Fallback case (numbers and other types)
} else if (value != null) {
unparsed.push(keyToFlag(key), `${value}`);
}
}
function unparsePositional(argv, options, unparsed) {
const knownPositional = [];
// Unparse command if set, collecting all known positional arguments
// e.g.: build <first> <second> <rest...>
if (options.command) {
const { 0: cmd, index } = options.command.match(/[^<[]*/);
const { demanded, optional } = yargs()
.getCommandInstance()
.parseCommand(`foo ${options.command.substr(index + cmd.length)}`);
// Push command (can be a deep command)
unparsed.push(...cmd.trim().split(/\s+/));
// Push positional arguments
[...demanded, ...optional].forEach(({ cmd: cmds, variadic }) => {
knownPositional.push(...cmds);
const cmd = cmds[0];
const args = (variadic ? argv[cmd] || [] : [argv[cmd]])
.filter((arg) => arg != null)
.map((arg) => `${arg}`);
unparsed.push(...args);
});
}
// Unparse unkown positional arguments
argv._ && unparsed.push(...argv._.slice(knownPositional.length));
return knownPositional;
}
function unparseOptions(argv, options, knownPositional, unparsed) {
const optionsArgv = omitBy(argv, (value, key) =>
// Remove positional arguments
knownPositional.includes(key) ||
// Remove special _, -- and $0
['_', '--', '$0'].includes(key) ||
// Remove aliases
isAlias(key, options.alias) ||
// Remove default values
hasDefaultValue(key, value, options.default) ||
// Remove camel-cased
isCamelCased(key, argv));
for (const key in optionsArgv) {
unparseOption(key, optionsArgv[key], unparsed);
}
}
function unparseEndOfOptions(argv, options, unparsed) {
// Unparse ending (--) arguments if set
argv['--'] && unparsed.push('--', ...argv['--']);
}
// ------------------------------------------------------------
function unparser(argv, options) {
options = Object.assign({
alias: {},
default: {},
command: null,
}, options);
const unparsed = [];
// Unparse known & unknown positional arguments (foo <first> <second> [rest...])
// All known positional will be returned so that they are not added as flags
const knownPositional = unparsePositional(argv, options, unparsed);
// Unparse option arguments (--foo hello --bar hi)
unparseOptions(argv, options, knownPositional, unparsed);
// Unparse "end-of-options" arguments (stuff after " -- ")
unparseEndOfOptions(argv, options, unparsed);
return unparsed;
}
module.exports = unparser;