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