UNPKG

@marblejs/middleware-multipart

Version:

A multipart/form-data middleware for Marble.js

37 lines (36 loc) 1.69 kB
"use strict"; 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;