UNPKG

formflux

Version:

A package to upload files to a server and parsing multipart-formData requests

477 lines (456 loc) 19.2 kB
import { options, optionFields, optionSingle, File } from "./FormFlux.Types"; import ExtractFileContent from "./ExtractContent"; import writeFileContent from "./WriteFileContent"; import setContentToBody from "./SetBodyContentToReq"; import setFileNameToBody from "./setFileNameToBody"; import populateReqObj from "./setDatatoReqobj"; import EventHandlers from "./EventHandlers"; import FormfluxError from "./FormFluxError"; class Formflux { static diskStorage(options) { return { any() { return async function (req, res, next) { var _req$headers$content; let obj = { "originalReq": "", "modifiedReq": Buffer.from(""), "data": [], "content": [], "metaData": [], "mimeType": [], "fieldNameBody": [], "fileName": [], "modifiedFileName": [], "contentBody": [], "fieldNameFile": [], "filePath": [], "filesize": [], "streams": [] }; let buff = []; let reqType = req.headers["content-type"]; if (reqType && !reqType.includes("multipart/form-data")) throw new FormfluxError("Invalid Request Type.Expected multipart/form-data", 400); let boundary = (_req$headers$content = req.headers["content-type"]) == null ? void 0 : _req$headers$content.split("boundary=")[1]; req.on("data", chunk => { buff.push(chunk); }); req.on("end", () => { try { var _obj$modifiedReq$toSt; obj.modifiedReq = Buffer.concat(buff); // holding the concatinated buffer obj.data = (_obj$modifiedReq$toSt = obj.modifiedReq.toString("binary")) == null ? void 0 : _obj$modifiedReq$toSt.split(`--${boundary}`); // separating the boundary obj.data.pop(); obj.data.shift(); //*****Defaults***** //To*********extract content new ExtractFileContent(obj, options, null, null).extraction(); //To*********SetFileDataToReqObj new populateReqObj(obj).populate(); let writeBool = false; let parseBool = false; let checkCompletion = (writeComplete, parsecomplete) => { if (writeComplete && parsecomplete) next(); }; EventHandlers.on("parseEnd", message => { parseBool = true; checkCompletion(writeBool, parseBool); }); EventHandlers.on("writeEnd", message => { writeBool = true; checkCompletion(writeBool, parseBool); }); new writeFileContent(req, obj, options, "any", "disk").writeContent(); if (options.attachFileToReqBody && options.attachFileToReqBody == true) new setFileNameToBody(obj).setFileNames(req); new setContentToBody(obj).setBody(req); } catch (err) { next(err); } }); req.on("error", () => { next(new FormfluxError("Error in recieving request", 500)); }); }; }, fields(optionFields) { return async function (req, res, next) { var _req$headers$content2; let obj = { "originalReq": "", "modifiedReq": Buffer.from(""), "data": [], "content": [], "metaData": [], "mimeType": [], "fieldNameBody": [], "fileName": [], "modifiedFileName": [], "contentBody": [], "fieldNameFile": [], "filePath": [], "filesize": [], "streams": [] }; let buff = []; let reqType = req.headers["content-type"]; if (reqType && !reqType.includes("multipart/form-data")) throw new FormfluxError("Invalid Request Type.Expected multipart/form-data", 400); let boundary = (_req$headers$content2 = req.headers["content-type"]) == null ? void 0 : _req$headers$content2.split("boundary=")[1]; req.on("data", chunk => { buff.push(chunk); }); req.on("end", () => { try { var _obj$modifiedReq$toSt2; obj.modifiedReq = Buffer.concat(buff); // holding the concatinated buffer obj.data = (_obj$modifiedReq$toSt2 = obj.modifiedReq.toString("binary")) == null ? void 0 : _obj$modifiedReq$toSt2.split(`--${boundary}`); // separating the boundary obj.data.pop(); obj.data.shift(); //*****Defaults***** //To*********extract content new ExtractFileContent(obj, options, optionFields, null).extraction(); //To*********SetFileDataToReqObj new populateReqObj(obj).populate(); let writeBool = false; let parseBool = false; let checkCompletion = (writeComplete, parsecomplete) => { if (writeComplete && parsecomplete) next(); }; EventHandlers.on("parseEnd", message => { parseBool = true; checkCompletion(writeBool, parseBool); }); EventHandlers.on("writeEnd", message => { writeBool = true; checkCompletion(writeBool, parseBool); }); new writeFileContent(req, obj, options, "fields", "disk").writeContent(); // new setFileContentToReq(obj).setFileNames(req); if (options.attachFileToReqBody && options.attachFileToReqBody == true) new setFileNameToBody(obj).setFileNames(req); new setContentToBody(obj).setBody(req); } catch (err) { next(err); } }); req.on("error", () => { next(new FormfluxError("Error in recieving request", 500)); }); }; }, single(field) { return async function (req, res, next) { var _req$headers$content3; let obj = { "originalReq": "", "modifiedReq": Buffer.from(""), "data": [], "content": [], "metaData": [], "mimeType": [], "fieldNameBody": [], "fileName": [], "modifiedFileName": [], "contentBody": [], "fieldNameFile": [], "filePath": [], "filesize": [], "streams": [] }; let buff = []; let reqType = req.headers["content-type"]; if (reqType && !reqType.includes("multipart/form-data")) throw new FormfluxError("Invalid Request Type.Expected multipart/form-data", 400); let boundary = (_req$headers$content3 = req.headers["content-type"]) == null ? void 0 : _req$headers$content3.split("boundary=")[1]; req.on("data", chunk => { buff.push(chunk); }); req.on("end", () => { try { var _obj$modifiedReq$toSt3; obj.modifiedReq = Buffer.concat(buff); // holding the concatinated buffer obj.data = (_obj$modifiedReq$toSt3 = obj.modifiedReq.toString("binary")) == null ? void 0 : _obj$modifiedReq$toSt3.split(`--${boundary}`); // separating the boundary obj.data.pop(); obj.data.shift(); //*****Defaults***** //To*********extract content new ExtractFileContent(obj, options, null, field).extraction(); //To*********SetFileDataToReqObj new populateReqObj(obj).populate(); let writeBool = false; let parseBool = false; let checkCompletion = (writeComplete, parsecomplete) => { if (writeComplete && parsecomplete) next(); }; EventHandlers.on("parseEnd", message => { parseBool = true; checkCompletion(writeBool, parseBool); }); EventHandlers.on("writeEnd", message => { writeBool = true; checkCompletion(writeBool, parseBool); }); new writeFileContent(req, obj, options, "single", "disk").writeContent(); if (options.attachFileToReqBody && options.attachFileToReqBody == true) new setFileNameToBody(obj).setFileNames(req); new setContentToBody(obj).setBody(req); } catch (err) { next(err); } }); req.on("error", () => { next(new FormfluxError("Error in recieving request", 500)); }); }; } }; } static memoryStorage(options) { return { any() { return async function (req, res, next) { var _req$headers$content4; let obj = { "originalReq": "", "modifiedReq": Buffer.from(""), "data": [], "content": [], "metaData": [], "mimeType": [], "fieldNameBody": [], "fileName": [], "modifiedFileName": [], "contentBody": [], "fieldNameFile": [], "filePath": [], "filesize": [], "streams": [] }; let buff = []; let reqType = req.headers["content-type"]; if (reqType && !reqType.includes("multipart/form-data")) throw new FormfluxError("Invalid Request Type.Expected multipart/form-data", 400); let boundary = (_req$headers$content4 = req.headers["content-type"]) == null ? void 0 : _req$headers$content4.split("boundary=")[1]; req.on("data", chunk => { buff.push(chunk); }); req.on("end", () => { try { var _obj$modifiedReq$toSt4; obj.modifiedReq = Buffer.concat(buff); // holding the concatinated buffer obj.data = (_obj$modifiedReq$toSt4 = obj.modifiedReq.toString("binary")) == null ? void 0 : _obj$modifiedReq$toSt4.split(`--${boundary}`); // separating the boundary obj.data.pop(); obj.data.shift(); //*****Defaults***** //To*********extract content new ExtractFileContent(obj, options, null, null).extraction(); //To*********SetFileDataToReqObj new populateReqObj(obj).populate(); let writeBool = false; let parseBool = false; let checkCompletion = (writeComplete, parsecomplete) => { if (writeComplete && parsecomplete) next(); }; EventHandlers.on("parseEnd", message => { parseBool = true; checkCompletion(writeBool, parseBool); }); EventHandlers.on("writeEnd", message => { writeBool = true; checkCompletion(writeBool, parseBool); }); new writeFileContent(req, obj, options, "any", "memory").writeContent(); if (options.attachFileToReqBody && options.attachFileToReqBody == true) new setFileNameToBody(obj).setFileNames(req); new setContentToBody(obj).setBody(req); } catch (err) { next(err); } }); req.on("error", () => { next(new FormfluxError("Error in recieving request", 500)); }); }; }, fields(optionFields) { return async function (req, res, next) { var _req$headers$content5; let obj = { "originalReq": "", "modifiedReq": Buffer.from(""), "data": [], "content": [], "metaData": [], "mimeType": [], "fieldNameBody": [], "fileName": [], "modifiedFileName": [], "contentBody": [], "fieldNameFile": [], "filePath": [], "filesize": [], "streams": [] }; let buff = []; let reqType = req.headers["content-type"]; if (reqType && !reqType.includes("multipart/form-data")) throw new FormfluxError("Invalid Request Type.Expected multipart/form-data", 400); let boundary = (_req$headers$content5 = req.headers["content-type"]) == null ? void 0 : _req$headers$content5.split("boundary=")[1]; req.on("data", chunk => { buff.push(chunk); }); req.on("end", () => { try { var _obj$modifiedReq$toSt5; obj.modifiedReq = Buffer.concat(buff); // holding the concatinated buffer obj.data = (_obj$modifiedReq$toSt5 = obj.modifiedReq.toString("binary")) == null ? void 0 : _obj$modifiedReq$toSt5.split(`--${boundary}`); // separating the boundary obj.data.pop(); obj.data.shift(); //*****Defaults***** //To*********extract content new ExtractFileContent(obj, options, optionFields, null).extraction(); //To*********SetFileDataToReqObj new populateReqObj(obj).populate(); let writeBool = false; let parseBool = false; let checkCompletion = (writeComplete, parsecomplete) => { if (writeComplete && parsecomplete) next(); }; EventHandlers.on("parseEnd", message => { parseBool = true; checkCompletion(writeBool, parseBool); }); EventHandlers.on("writeEnd", message => { writeBool = true; checkCompletion(writeBool, parseBool); }); new writeFileContent(req, obj, options, "fields", "memory").writeContent(); if (options.attachFileToReqBody && options.attachFileToReqBody == true) new setFileNameToBody(obj).setFileNames(req); new setContentToBody(obj).setBody(req); } catch (err) { next(err); } }); req.on("error", () => { next(new FormfluxError("Error in recieving request", 500)); }); }; }, single(field) { return async function (req, res, next) { var _req$headers$content6; let obj = { "originalReq": "", "modifiedReq": Buffer.from(""), "data": [], "content": [], "metaData": [], "mimeType": [], "fieldNameBody": [], "fileName": [], "modifiedFileName": [], "contentBody": [], "fieldNameFile": [], "filePath": [], "filesize": [], "streams": [] }; let buff = []; let reqType = req.headers["content-type"]; if (reqType && !reqType.includes("multipart/form-data")) throw new FormfluxError("Invalid Request Type.Expected multipart/form-data", 400); let boundary = (_req$headers$content6 = req.headers["content-type"]) == null ? void 0 : _req$headers$content6.split("boundary=")[1]; req.on("data", chunk => { buff.push(chunk); }); req.on("end", () => { try { var _obj$modifiedReq$toSt6; obj.modifiedReq = Buffer.concat(buff); // holding the concatinated buffer obj.data = (_obj$modifiedReq$toSt6 = obj.modifiedReq.toString("binary")) == null ? void 0 : _obj$modifiedReq$toSt6.split(`--${boundary}`); // separating the boundary obj.data.pop(); obj.data.shift(); //*****Defaults***** //To*********extract content new ExtractFileContent(obj, options, null, field).extraction(); //To*********SetFileDataToReqObj new populateReqObj(obj).populate(); let writeBool = false; let parseBool = false; let checkCompletion = (writeComplete, parsecomplete) => { if (writeComplete && parsecomplete) next(); }; EventHandlers.on("parseEnd", message => { parseBool = true; checkCompletion(writeBool, parseBool); }); EventHandlers.on("writeEnd", message => { writeBool = true; checkCompletion(writeBool, parseBool); }); new writeFileContent(req, obj, options, "single", "memory").writeContent(); if (options.attachFileToReqBody && options.attachFileToReqBody == true) new setFileNameToBody(obj).setFileNames(req); new setContentToBody(obj).setBody(req); } catch (err) { next(err); } }); req.on("error", () => { next(new FormfluxError("Error in recieving request", 500)); }); }; } }; } bodyParser() { return async function (req, res, next) { var _req$headers$content7; let obj = { "originalReq": "", "modifiedReq": Buffer.from(""), "data": [], "content": [], "metaData": [], "mimeType": [], "fieldNameBody": [], "fileName": [], "modifiedFileName": [], "contentBody": [], "fieldNameFile": [], "filePath": [], "filesize": [], "streams": [] }; let buff = []; let reqType = req.headers["content-type"]; if (reqType && !reqType.includes("multipart/form-data")) throw new FormfluxError("Invalid Request Type.Expected multipart/form-data", 400); let boundary = (_req$headers$content7 = req.headers["content-type"]) == null ? void 0 : _req$headers$content7.split("boundary=")[1]; req.on("data", chunk => { buff.push(chunk); }); req.on("end", () => { try { var _obj$modifiedReq$toSt7; obj.modifiedReq = Buffer.concat(buff); // holding the concatinated buffer obj.data = (_obj$modifiedReq$toSt7 = obj.modifiedReq.toString("binary")) == null ? void 0 : _obj$modifiedReq$toSt7.split(`--${boundary}`); // separating the boundary obj.data.pop(); obj.data.shift(); //*****Defaults***** //To*********extract content new ExtractFileContent(obj, null, null, null).extraction(); //To*********SetFileDataToReqObj let writeBool = false; let parseBool = false; let checkCompletion = (writeComplete, parsecomplete) => { if (writeComplete && parsecomplete) next(); }; EventHandlers.on("parseEnd", message => { parseBool = true; next(); }); new setContentToBody(obj).setBody(req); } catch (err) { next(err); } }); req.on("error", () => { next(new FormfluxError("Error in recieving request", 500)); }); }; } } export default Formflux; export { FormfluxError, optionFields, options, optionSingle, File }; //# sourceMappingURL=FormFlux.js.map