164 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			164 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, '__esModule', {
							 | 
						||
| 
								 | 
							
								  value: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								exports.default = validateCLIOptions;
							 | 
						||
| 
								 | 
							
								exports.DOCUMENTATION_NOTE = void 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function _chalk() {
							 | 
						||
| 
								 | 
							
								  const data = _interopRequireDefault(require('chalk'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _chalk = function _chalk() {
							 | 
						||
| 
								 | 
							
								    return data;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return data;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function _camelcase() {
							 | 
						||
| 
								 | 
							
								  const data = _interopRequireDefault(require('camelcase'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _camelcase = function _camelcase() {
							 | 
						||
| 
								 | 
							
								    return data;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return data;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var _utils = require('./utils');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var _deprecated = require('./deprecated');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var _defaultConfig = _interopRequireDefault(require('./defaultConfig'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function _interopRequireDefault(obj) {
							 | 
						||
| 
								 | 
							
								  return obj && obj.__esModule ? obj : {default: obj};
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function _objectSpread(target) {
							 | 
						||
| 
								 | 
							
								  for (var i = 1; i < arguments.length; i++) {
							 | 
						||
| 
								 | 
							
								    var source = arguments[i] != null ? arguments[i] : {};
							 | 
						||
| 
								 | 
							
								    var ownKeys = Object.keys(source);
							 | 
						||
| 
								 | 
							
								    if (typeof Object.getOwnPropertySymbols === 'function') {
							 | 
						||
| 
								 | 
							
								      ownKeys = ownKeys.concat(
							 | 
						||
| 
								 | 
							
								        Object.getOwnPropertySymbols(source).filter(function(sym) {
							 | 
						||
| 
								 | 
							
								          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								      );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    ownKeys.forEach(function(key) {
							 | 
						||
| 
								 | 
							
								      _defineProperty(target, key, source[key]);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  return target;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function _defineProperty(obj, key, value) {
							 | 
						||
| 
								 | 
							
								  if (key in obj) {
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(obj, key, {
							 | 
						||
| 
								 | 
							
								      value: value,
							 | 
						||
| 
								 | 
							
								      enumerable: true,
							 | 
						||
| 
								 | 
							
								      configurable: true,
							 | 
						||
| 
								 | 
							
								      writable: true
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    obj[key] = value;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  return obj;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const BULLET = _chalk().default.bold('\u25cf');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const DOCUMENTATION_NOTE = `  ${_chalk().default.bold(
							 | 
						||
| 
								 | 
							
								  'CLI Options Documentation:'
							 | 
						||
| 
								 | 
							
								)}
							 | 
						||
| 
								 | 
							
								  https://jestjs.io/docs/en/cli.html
							 | 
						||
| 
								 | 
							
								`;
							 | 
						||
| 
								 | 
							
								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/en/cli.html\n`;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (unrecognizedOptions.length === 1) {
							 | 
						||
| 
								 | 
							
								    const unrecognized = unrecognizedOptions[0];
							 | 
						||
| 
								 | 
							
								    const didYouMeanMessage = (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,
							 | 
						||
| 
								 | 
							
								      _objectSpread({}, _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)) &&
							 | 
						||
| 
								 | 
							
								      (!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;
							 | 
						||
| 
								 | 
							
								}
							 |