123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- '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);
- };
|