Spaces:
Runtime error
Runtime error
; | |
var VERSION = require('../env/data').version; | |
var validators = {}; | |
// eslint-disable-next-line func-names | |
['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) { | |
validators[type] = function validator(thing) { | |
return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; | |
}; | |
}); | |
var 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 function(value, opt, opts) { | |
if (validator === false) { | |
throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : ''))); | |
} | |
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 | |
*/ | |
function assertOptions(options, schema, allowUnknown) { | |
if (typeof options !== 'object') { | |
throw new TypeError('options must be an object'); | |
} | |
var keys = Object.keys(options); | |
var i = keys.length; | |
while (i-- > 0) { | |
var opt = keys[i]; | |
var validator = schema[opt]; | |
if (validator) { | |
var value = options[opt]; | |
var result = value === undefined || validator(value, opt, options); | |
if (result !== true) { | |
throw new TypeError('option ' + opt + ' must be ' + result); | |
} | |
continue; | |
} | |
if (allowUnknown !== true) { | |
throw Error('Unknown option ' + opt); | |
} | |
} | |
} | |
module.exports = { | |
assertOptions: assertOptions, | |
validators: validators | |
}; | |