formflux
Version:
A package to upload files to a server and parsing multipart-formData requests
477 lines (456 loc) • 19.2 kB
JavaScript
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