133 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| Object.defineProperty(exports, '__esModule', {
 | |
|   value: true
 | |
| });
 | |
| exports.default = void 0;
 | |
| 
 | |
| 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;
 | |
| }
 | |
| 
 | |
| let hasDeprecationWarnings = false;
 | |
| 
 | |
| const shouldSkipValidationForPath = (path, key, blacklist) =>
 | |
|   blacklist ? blacklist.includes([...path, key].join('.')) : false;
 | |
| 
 | |
| const _validate = (config, exampleConfig, options, path = []) => {
 | |
|   if (
 | |
|     typeof config !== 'object' ||
 | |
|     config == null ||
 | |
|     typeof exampleConfig !== 'object' ||
 | |
|     exampleConfig == null
 | |
|   ) {
 | |
|     return {
 | |
|       hasDeprecationWarnings
 | |
|     };
 | |
|   }
 | |
| 
 | |
|   for (const key in config) {
 | |
|     if (
 | |
|       options.deprecatedConfig &&
 | |
|       key in options.deprecatedConfig &&
 | |
|       typeof options.deprecate === 'function'
 | |
|     ) {
 | |
|       const isDeprecatedKey = options.deprecate(
 | |
|         config,
 | |
|         key,
 | |
|         options.deprecatedConfig,
 | |
|         options
 | |
|       );
 | |
|       hasDeprecationWarnings = hasDeprecationWarnings || isDeprecatedKey;
 | |
|     } else if (Object.hasOwnProperty.call(exampleConfig, key)) {
 | |
|       if (
 | |
|         typeof options.condition === 'function' &&
 | |
|         typeof options.error === 'function' &&
 | |
|         !options.condition(config[key], exampleConfig[key])
 | |
|       ) {
 | |
|         options.error(key, config[key], exampleConfig[key], options, path);
 | |
|       }
 | |
|     } else if (
 | |
|       shouldSkipValidationForPath(path, key, options.recursiveBlacklist)
 | |
|     ) {
 | |
|       // skip validating unknown options inside blacklisted paths
 | |
|     } else {
 | |
|       options.unknown &&
 | |
|         options.unknown(config, exampleConfig, key, options, path);
 | |
|     }
 | |
| 
 | |
|     if (
 | |
|       options.recursive &&
 | |
|       !Array.isArray(exampleConfig[key]) &&
 | |
|       options.recursiveBlacklist &&
 | |
|       !shouldSkipValidationForPath(path, key, options.recursiveBlacklist)
 | |
|     ) {
 | |
|       _validate(config[key], exampleConfig[key], options, [...path, key]);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return {
 | |
|     hasDeprecationWarnings
 | |
|   };
 | |
| };
 | |
| 
 | |
| const validate = (config, options) => {
 | |
|   hasDeprecationWarnings = false; // Preserve default blacklist entries even with user-supplied blacklist
 | |
| 
 | |
|   const combinedBlacklist = [
 | |
|     ...(_defaultConfig.default.recursiveBlacklist || []),
 | |
|     ...(options.recursiveBlacklist || [])
 | |
|   ];
 | |
|   const defaultedOptions = Object.assign(
 | |
|     _objectSpread({}, _defaultConfig.default, options, {
 | |
|       recursiveBlacklist: combinedBlacklist,
 | |
|       title: options.title || _defaultConfig.default.title
 | |
|     })
 | |
|   );
 | |
| 
 | |
|   const _validate2 = _validate(config, options.exampleConfig, defaultedOptions),
 | |
|     hdw = _validate2.hasDeprecationWarnings;
 | |
| 
 | |
|   return {
 | |
|     hasDeprecationWarnings: hdw,
 | |
|     isValid: true
 | |
|   };
 | |
| };
 | |
| 
 | |
| var _default = validate;
 | |
| exports.default = _default;
 |