Spaces:
Running
Running
/** | |
* Module dependencies. | |
*/ | |
var bytes = require('bytes') | |
var contentType = require('content-type') | |
var typeis = require('type-is') | |
/** | |
* Module exports. | |
*/ | |
module.exports = { | |
getCharset, | |
normalizeOptions | |
} | |
/** | |
* Get the charset of a request. | |
* | |
* @param {object} req | |
* @api private | |
*/ | |
function getCharset (req) { | |
try { | |
return (contentType.parse(req).parameters.charset || '').toLowerCase() | |
} catch { | |
return undefined | |
} | |
} | |
/** | |
* Get the simple type checker. | |
* | |
* @param {string | string[]} type | |
* @return {function} | |
*/ | |
function typeChecker (type) { | |
return function checkType (req) { | |
return Boolean(typeis(req, type)) | |
} | |
} | |
/** | |
* Normalizes the common options for all parsers. | |
* | |
* @param {object} options options to normalize | |
* @param {string | string[] | function} defaultType default content type(s) or a function to determine it | |
* @returns {object} | |
*/ | |
function normalizeOptions (options, defaultType) { | |
if (!defaultType) { | |
// Parsers must define a default content type | |
throw new TypeError('defaultType must be provided') | |
} | |
var inflate = options?.inflate !== false | |
var limit = typeof options?.limit !== 'number' | |
? bytes.parse(options?.limit || '100kb') | |
: options?.limit | |
var type = options?.type || defaultType | |
var verify = options?.verify || false | |
if (verify !== false && typeof verify !== 'function') { | |
throw new TypeError('option verify must be function') | |
} | |
// create the appropriate type checking function | |
var shouldParse = typeof type !== 'function' | |
? typeChecker(type) | |
: type | |
return { | |
inflate, | |
limit, | |
verify, | |
shouldParse | |
} | |
} | |