kequapp
Version:
A minimal, zero-magic Node web framework built on native APIs
36 lines (35 loc) • 1.18 kB
JavaScript
import headerAttributes from "../../util/header-attributes.js";
export default function parseMultipart(parts) {
const result = {};
const files = [];
const counters = {};
for (const part of parts) {
const { filename, name } = headerAttributes(part.headers['content-disposition']);
const contentType = getContentType(part.headers['content-type']);
const isFile = filename ?? !contentType.startsWith('text/');
if (isFile) {
files.push({ ...part, contentType, name, filename });
continue;
}
const key = name ?? 'undefined';
const value = part.data.toString();
counters[key] = counters[key] ?? 0;
counters[key]++;
if (counters[key] === 2) {
// convert to array
result[key] = [result[key]];
}
if (counters[key] > 1) {
// add to array
result[key].push(value);
}
else {
// set value
result[key] = value;
}
}
return [result, files];
}
function getContentType(contentType) {
return contentType?.split(';')[0].toLowerCase().trim() ?? 'text/plain';
}