UNPKG

kequapp

Version:

A minimal, zero-magic Node web framework built on native APIs

36 lines (35 loc) 1.18 kB
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'; }