UNPKG

@xpresser/abolish

Version:
64 lines (63 loc) 2.38 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; const xpresser_1 = require("xpresser"); const plugin_config_1 = require("./plugin-config"); const RoutesGuard_1 = __importDefault(require("./RoutesGuard")); const $ = (0, xpresser_1.getInstance)(); const ValidationRulesPath = plugin_config_1.pluginConfig.get("validationRules.file"); const OnErrorFunction = plugin_config_1.pluginConfig.get("validationRules.onError"); let ValidationRules = {}; /** * Load Validation rules file before we boot server; */ if (plugin_config_1.pluginConfig.get("validationRules.enabled", false)) { $.on.bootServer((next) => { // Require Validation rules. try { ValidationRules = require($.path.resolve(ValidationRulesPath)); if (!ValidationRules || typeof ValidationRules !== "object") return $.logErrorAndExit(`ValidationRules File must return an object!`); // check if ValidationRules was exported as default if (ValidationRules.default) ValidationRules = ValidationRules.default; if (ValidationRules instanceof RoutesGuard_1.default || typeof ValidationRules.compileRules === "function") { ValidationRules = ValidationRules.compileRules(); } } catch (e) { return $.logErrorAndExit(e.message); } next(); }); } module.exports = async (http) => { // Only for POST, PUT & PATCH REQUESTS const method = http.req.method.toUpperCase(); if (!["POST", "PATCH", "PUT"].includes(method)) { return http.next(); } if (!ValidationRules[method]) return http.next(); let rules = ValidationRules[method][http.req.route?.path || http.req.path]; // Parse if function. if (typeof rules === "function") { rules = await rules(http); } // check if current path has validation rules if (!rules) { return http.next(); } // Validate const [err, validated] = await http.validateBodyAsync(rules); // return Error if error if (err) { return OnErrorFunction(http, err); } // Save to state for later use. http.state.set("validatedBody", validated); // Continue request. return http.next(); };