@fdm-monster/server
Version:
FDM Monster is a bulk OctoPrint, Klipper, PrusaLink and BambuLab manager to set up, configure and monitor 3D printers. Our aim is to provide neat overview over your farm.
35 lines (34 loc) • 1.67 kB
JavaScript
import { validateInput } from "../handlers/validators.js";
import { idRulesV2 } from "../controllers/validation/generic.validation.js";
//#region src/middleware/param-converter.middleware.ts
const ParamInt = (paramName) => createParamDecorator(paramName, Number);
const ParamBool = (paramName) => createParamDecorator(paramName, Boolean);
const ParamString = (paramName) => createParamDecorator(paramName, String);
const ParamId = (paramName) => createParamDecorator(paramName, "id");
function createParamDecorator(paramName, type) {
return async (req, res, next) => {
const paramValue = req.params[paramName];
if (paramValue === void 0) return res.status(400).send(`Missing parameter: ${paramName}`);
let convertedValue;
let validateIdAsType = null;
if (type === "id") validateIdAsType = Number;
if (type === Boolean) if (paramValue.toLowerCase() === "true") convertedValue = true;
else if (paramValue.toLowerCase() === "false") convertedValue = false;
else return res.status(400).send(`Invalid boolean: ${paramName}`);
else if (type === Number || validateIdAsType === Number) {
convertedValue = Number.parseInt(paramValue, 10);
if (Number.isNaN(convertedValue)) return res.status(400).send(`Invalid number: ${paramName}`);
} else return res.status(400).send(`Unknown type of: ${paramName}`);
if (validateIdAsType === Number) try {
await validateInput({ id: convertedValue }, idRulesV2);
} catch (e) {
return next(e);
}
req.local = req.local || {};
req.local[paramName] = convertedValue;
next();
};
}
//#endregion
export { ParamBool, ParamId, ParamInt, ParamString };
//# sourceMappingURL=param-converter.middleware.js.map