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.
		
		
		
		
		
			
		
			
				
					
					
						
							92 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
	
	
							92 lines
						
					
					
						
							2.5 KiB
						
					
					
				'use strict';
 | 
						|
 | 
						|
import {VERSION} from '../env/data.js';
 | 
						|
import AxiosError from '../core/AxiosError.js';
 | 
						|
 | 
						|
const validators = {};
 | 
						|
 | 
						|
// eslint-disable-next-line func-names
 | 
						|
['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {
 | 
						|
  validators[type] = function validator(thing) {
 | 
						|
    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;
 | 
						|
  };
 | 
						|
});
 | 
						|
 | 
						|
const deprecatedWarnings = {};
 | 
						|
 | 
						|
/**
 | 
						|
 * Transitional option validator
 | 
						|
 *
 | 
						|
 * @param {function|boolean?} validator - set to false if the transitional option has been removed
 | 
						|
 * @param {string?} version - deprecated version / removed since version
 | 
						|
 * @param {string?} message - some message with additional info
 | 
						|
 *
 | 
						|
 * @returns {function}
 | 
						|
 */
 | 
						|
validators.transitional = function transitional(validator, version, message) {
 | 
						|
  function formatMessage(opt, desc) {
 | 
						|
    return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : '');
 | 
						|
  }
 | 
						|
 | 
						|
  // eslint-disable-next-line func-names
 | 
						|
  return (value, opt, opts) => {
 | 
						|
    if (validator === false) {
 | 
						|
      throw new AxiosError(
 | 
						|
        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),
 | 
						|
        AxiosError.ERR_DEPRECATED
 | 
						|
      );
 | 
						|
    }
 | 
						|
 | 
						|
    if (version && !deprecatedWarnings[opt]) {
 | 
						|
      deprecatedWarnings[opt] = true;
 | 
						|
      // eslint-disable-next-line no-console
 | 
						|
      console.warn(
 | 
						|
        formatMessage(
 | 
						|
          opt,
 | 
						|
          ' has been deprecated since v' + version + ' and will be removed in the near future'
 | 
						|
        )
 | 
						|
      );
 | 
						|
    }
 | 
						|
 | 
						|
    return validator ? validator(value, opt, opts) : true;
 | 
						|
  };
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * Assert object's properties type
 | 
						|
 *
 | 
						|
 * @param {object} options
 | 
						|
 * @param {object} schema
 | 
						|
 * @param {boolean?} allowUnknown
 | 
						|
 *
 | 
						|
 * @returns {object}
 | 
						|
 */
 | 
						|
 | 
						|
function assertOptions(options, schema, allowUnknown) {
 | 
						|
  if (typeof options !== 'object') {
 | 
						|
    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);
 | 
						|
  }
 | 
						|
  const keys = Object.keys(options);
 | 
						|
  let i = keys.length;
 | 
						|
  while (i-- > 0) {
 | 
						|
    const opt = keys[i];
 | 
						|
    const validator = schema[opt];
 | 
						|
    if (validator) {
 | 
						|
      const value = options[opt];
 | 
						|
      const result = value === undefined || validator(value, opt, options);
 | 
						|
      if (result !== true) {
 | 
						|
        throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);
 | 
						|
      }
 | 
						|
      continue;
 | 
						|
    }
 | 
						|
    if (allowUnknown !== true) {
 | 
						|
      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
export default {
 | 
						|
  assertOptions,
 | 
						|
  validators
 | 
						|
};
 |