formflux
Version:
A package to upload files to a server and parsing multipart-formData requests
100 lines (98 loc) • 3.24 kB
JavaScript
;
exports.__esModule = true;
exports.default = void 0;
var _EventHandlers = _interopRequireDefault(require("./EventHandlers"));
var _resBodyMaker = _interopRequireDefault(require("./helpers/resBodyMaker"));
var _FormFluxError = _interopRequireDefault(require("./FormFluxError"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
class setContentToBody {
constructor(obj) {
this.obj = void 0;
this.obj = obj;
}
setBody(req) {
try {
req.body = req.body ? req.body : {};
if (this.obj.contentBody.length > 0) {
for (let i = 0; i < this.obj.contentBody.length; i++) {
if (/\[.*\]/.test(this.obj.fieldNameBody[i])) {
this.nestedData(req, this.obj.fieldNameBody[i], this.obj.contentBody[i]);
} else req.body[`${this.obj.fieldNameBody[i]}`] = this.obj.contentBody[i];
}
}
_EventHandlers.default.emitMessage("parseEnd", "parse commplete");
} catch (err) {
throw new _FormFluxError.default("Error in parsing form data.Invalid Format!", 400);
}
}
nestedData(req, fieldName, data) {
let outer = fieldName.substring(0, fieldName.indexOf("["));
let inners = fieldName.substring(fieldName.indexOf("["));
let i = 0;
let current;
let prev;
let temp = inners.match(/\[([^\]]+)\]/g).map(s => s.slice(1, -1)); // [a,b,c] => [a,b,c]
if (!req.body[`${outer}`]) {
for (let i = temp.length - 1; i >= 0; i--) {
if (!isNaN(temp[i])) {
if (!prev) {
current = [data];
prev = current;
} else {
current = [prev];
prev = current;
}
} else {
if (!prev) {
current = {
[`${temp[i]}`]: data
};
prev = current;
} else {
current = {
[`${temp[i]}`]: prev
};
prev = current;
}
}
}
req.body[`${outer}`] = current;
} else {
temp.unshift(outer);
this.getNestedField(req, req.body, temp, temp[temp.length - 1], data, 0, req.body);
}
}
// mapping.....
getNestedField(req, obj, posArr, keySearch, data, i, prevObj) {
if (i == posArr.length - 1) {
// reached last position set the value
if (Array.isArray(obj)) {
if (!isNaN(posArr[i])) {
// if the current position is a number then it is an array
obj[posArr[i]] ? obj[posArr[i]] = data : obj.push(data);
return;
} else {
obj[posArr[i]] = data; // needs some checking
return;
}
} else {
// it is an objct
obj[posArr[i]] = data;
return;
}
}
if (!obj[posArr[i]]) {
if (!isNaN(posArr[i])) {
obj[posArr[i]] = (0, _resBodyMaker.default)(posArr, i + 1, data); // create the rest
return;
} else {
obj[posArr[i]] = (0, _resBodyMaker.default)(posArr, i + 1, data);
return;
}
}
prevObj = obj[posArr[i]];
this.getNestedField(req, obj[posArr[i]], posArr, keySearch, data, i + 1, prevObj);
}
}
var _default = exports.default = setContentToBody;
//# sourceMappingURL=SetBodyContentToReq.js.map