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; | ||
|  | } |