@marblejs/middleware-multipart
Version:
A multipart/form-data middleware for Marble.js
37 lines (36 loc) • 1.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.streamFileTo = exports.setRequestData = exports.shouldParseMultipart = exports.shouldParseFieldname = void 0;
const fs = require("fs");
const path = require("path");
const rxjs_1 = require("rxjs");
const contentType_util_1 = require("@marblejs/http/dist/+internal/contentType.util");
const isProperMethod = (req) => ['POST', 'PUT'].includes(req.method);
const isMultipart = (req) => (0, contentType_util_1.getContentTypeUnsafe)(req.headers).includes('multipart/');
const shouldParseFieldname = (files) => (fieldname) => !!files ? files.includes(fieldname) : true;
exports.shouldParseFieldname = shouldParseFieldname;
const shouldParseMultipart = (req) => isProperMethod(req) && isMultipart(req);
exports.shouldParseMultipart = shouldParseMultipart;
const setRequestData = (req) => (incomingFile) => ({ buffer, destination, size }) => {
req.files = Object.assign(Object.assign({}, req.files || {}), { [incomingFile.fieldname]: {
size,
buffer,
destination,
encoding: incomingFile.encoding,
mimetype: incomingFile.mimetype,
filename: incomingFile.filename,
fieldname: incomingFile.fieldname,
} });
};
exports.setRequestData = setRequestData;
const streamFileTo = (basePath) => {
if (!fs.existsSync(basePath)) {
fs.mkdirSync(basePath);
}
return ({ file, fieldname }) => {
const destination = path.join(basePath, path.basename(fieldname));
file.pipe(fs.createWriteStream(destination));
return (0, rxjs_1.of)({ destination });
};
};
exports.streamFileTo = streamFileTo;