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.
		
		
		
		
		
			
		
			
				
					58 lines
				
				1.5 KiB
			
		
		
			
		
	
	
					58 lines
				
				1.5 KiB
			| 
											3 years ago
										 | 'use strict'; | ||
|  | 
 | ||
|  | const { parseContentType } = require('./utils.js'); | ||
|  | 
 | ||
|  | function getInstance(cfg) { | ||
|  |   const headers = cfg.headers; | ||
|  |   const conType = parseContentType(headers['content-type']); | ||
|  |   if (!conType) | ||
|  |     throw new Error('Malformed content type'); | ||
|  | 
 | ||
|  |   for (const type of TYPES) { | ||
|  |     const matched = type.detect(conType); | ||
|  |     if (!matched) | ||
|  |       continue; | ||
|  | 
 | ||
|  |     const instanceCfg = { | ||
|  |       limits: cfg.limits, | ||
|  |       headers, | ||
|  |       conType, | ||
|  |       highWaterMark: undefined, | ||
|  |       fileHwm: undefined, | ||
|  |       defCharset: undefined, | ||
|  |       defParamCharset: undefined, | ||
|  |       preservePath: false, | ||
|  |     }; | ||
|  |     if (cfg.highWaterMark) | ||
|  |       instanceCfg.highWaterMark = cfg.highWaterMark; | ||
|  |     if (cfg.fileHwm) | ||
|  |       instanceCfg.fileHwm = cfg.fileHwm; | ||
|  |     instanceCfg.defCharset = cfg.defCharset; | ||
|  |     instanceCfg.defParamCharset = cfg.defParamCharset; | ||
|  |     instanceCfg.preservePath = cfg.preservePath; | ||
|  |     return new type(instanceCfg); | ||
|  |   } | ||
|  | 
 | ||
|  |   throw new Error(`Unsupported content type: ${headers['content-type']}`); | ||
|  | } | ||
|  | 
 | ||
|  | // Note: types are explicitly listed here for easier bundling
 | ||
|  | // See: https://github.com/mscdex/busboy/issues/121
 | ||
|  | const TYPES = [ | ||
|  |   require('./types/multipart'), | ||
|  |   require('./types/urlencoded'), | ||
|  | ].filter(function(typemod) { return typeof typemod.detect === 'function'; }); | ||
|  | 
 | ||
|  | module.exports = (cfg) => { | ||
|  |   if (typeof cfg !== 'object' || cfg === null) | ||
|  |     cfg = {}; | ||
|  | 
 | ||
|  |   if (typeof cfg.headers !== 'object' | ||
|  |       || cfg.headers === null | ||
|  |       || typeof cfg.headers['content-type'] !== 'string') { | ||
|  |     throw new Error('Missing Content-Type'); | ||
|  |   } | ||
|  | 
 | ||
|  |   return getInstance(cfg); | ||
|  | }; |