You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
3.7 KiB
141 lines
3.7 KiB
'use strict'; |
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.DOCUMENTATION_NOTE = void 0; |
|
exports.default = validateCLIOptions; |
|
|
|
function _camelcase() { |
|
const data = _interopRequireDefault(require('camelcase')); |
|
|
|
_camelcase = function () { |
|
return data; |
|
}; |
|
|
|
return data; |
|
} |
|
|
|
function _chalk() { |
|
const data = _interopRequireDefault(require('chalk')); |
|
|
|
_chalk = function () { |
|
return data; |
|
}; |
|
|
|
return data; |
|
} |
|
|
|
var _defaultConfig = _interopRequireDefault(require('./defaultConfig')); |
|
|
|
var _deprecated = require('./deprecated'); |
|
|
|
var _utils = require('./utils'); |
|
|
|
function _interopRequireDefault(obj) { |
|
return obj && obj.__esModule ? obj : {default: obj}; |
|
} |
|
|
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
const BULLET = _chalk().default.bold('\u25cf'); |
|
|
|
const DOCUMENTATION_NOTE = ` ${_chalk().default.bold( |
|
'CLI Options Documentation:' |
|
)} |
|
https://jestjs.io/docs/cli |
|
`; |
|
exports.DOCUMENTATION_NOTE = DOCUMENTATION_NOTE; |
|
|
|
const createCLIValidationError = (unrecognizedOptions, allowedOptions) => { |
|
let title = `${BULLET} Unrecognized CLI Parameter`; |
|
let message; |
|
const comment = |
|
` ${_chalk().default.bold('CLI Options Documentation')}:\n` + |
|
' https://jestjs.io/docs/cli\n'; |
|
|
|
if (unrecognizedOptions.length === 1) { |
|
const unrecognized = unrecognizedOptions[0]; |
|
const didYouMeanMessage = |
|
unrecognized.length > 1 |
|
? (0, _utils.createDidYouMeanMessage)( |
|
unrecognized, |
|
Array.from(allowedOptions) |
|
) |
|
: ''; |
|
message = |
|
` Unrecognized option ${_chalk().default.bold( |
|
(0, _utils.format)(unrecognized) |
|
)}.` + (didYouMeanMessage ? ` ${didYouMeanMessage}` : ''); |
|
} else { |
|
title += 's'; |
|
message = |
|
' Following options were not recognized:\n' + |
|
` ${_chalk().default.bold((0, _utils.format)(unrecognizedOptions))}`; |
|
} |
|
|
|
return new _utils.ValidationError(title, message, comment); |
|
}; |
|
|
|
const logDeprecatedOptions = (deprecatedOptions, deprecationEntries, argv) => { |
|
deprecatedOptions.forEach(opt => { |
|
(0, _deprecated.deprecationWarning)(argv, opt, deprecationEntries, { |
|
..._defaultConfig.default, |
|
comment: DOCUMENTATION_NOTE |
|
}); |
|
}); |
|
}; |
|
|
|
function validateCLIOptions(argv, options, rawArgv = []) { |
|
const yargsSpecialOptions = ['$0', '_', 'help', 'h']; |
|
const deprecationEntries = options.deprecationEntries || {}; |
|
const allowedOptions = Object.keys(options).reduce( |
|
(acc, option) => acc.add(option).add(options[option].alias || option), |
|
new Set(yargsSpecialOptions) |
|
); |
|
const unrecognizedOptions = Object.keys(argv).filter( |
|
arg => |
|
!allowedOptions.has( |
|
(0, _camelcase().default)(arg, { |
|
locale: 'en-US' |
|
}) |
|
) && |
|
!allowedOptions.has(arg) && |
|
(!rawArgv.length || rawArgv.includes(arg)), |
|
[] |
|
); |
|
|
|
if (unrecognizedOptions.length) { |
|
throw createCLIValidationError(unrecognizedOptions, allowedOptions); |
|
} |
|
|
|
const CLIDeprecations = Object.keys(deprecationEntries).reduce( |
|
(acc, entry) => { |
|
if (options[entry]) { |
|
acc[entry] = deprecationEntries[entry]; |
|
const alias = options[entry].alias; |
|
|
|
if (alias) { |
|
acc[alias] = deprecationEntries[entry]; |
|
} |
|
} |
|
|
|
return acc; |
|
}, |
|
{} |
|
); |
|
const deprecations = new Set(Object.keys(CLIDeprecations)); |
|
const deprecatedOptions = Object.keys(argv).filter( |
|
arg => deprecations.has(arg) && argv[arg] != null |
|
); |
|
|
|
if (deprecatedOptions.length) { |
|
logDeprecatedOptions(deprecatedOptions, CLIDeprecations, argv); |
|
} |
|
|
|
return true; |
|
}
|
|
|