UNPKG

@dechamp/express-auto-route

Version:

An express auto route module which allows routes and middleware to be configured via config file.

89 lines (88 loc) 3.96 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var path = require("path"); var joi = require("@hapi/joi"); var deref = require("json-schema-deref-sync"); var sprintf = require("sprintf-js").sprintf; var jsonSchemaValidationService_1 = __importDefault(require("../../jsonSchema/jsonSchemaValidationService")); var MSG_SCHEMA_FAILED = "Failed json schema on %s, errors: %s"; var RouteRequestJsonSchemaValidator = /** @class */ (function () { function RouteRequestJsonSchemaValidator() { } RouteRequestJsonSchemaValidator.prototype.callback = function (req, res, next) { var route = req.config.route; if (!route.hasOwnProperty("requestJsonSchema")) { return next(); } try { joi.assert(route, joi.object().keys({ requestJsonSchema: joi.object().keys({ query: joi.string(), body: joi.string(), params: joi.string(), }).or("query", "body", "params"), }).unknown(true)); var _a = this.buildRequestJsonSchema(route.requestJsonSchema), query = _a.query, body = _a.body, params = _a.params; if (params) { var paramsError = this.validateParams(params, req); if (paramsError) { return next(sprintf(MSG_SCHEMA_FAILED, "params", paramsError).trim("\n")); } } if (query) { var queryError = this.validateQuery(query, req); if (queryError) { return next(sprintf(MSG_SCHEMA_FAILED, "query", queryError).trim("\n")); } } if (body) { var bodyError = this.validateBody(body, req); if (bodyError) { return next(sprintf(MSG_SCHEMA_FAILED, "body", bodyError).trim("\n")); } } } catch (error) { if (error.hasOwnProperty("details")) { console.debug("Skipping route \"" + route.id + "\" due to " + error.details[0].message); return next(); } return next(error.message); } return next(); }; RouteRequestJsonSchemaValidator.prototype.validateParams = function (schema, req) { debugger; return jsonSchemaValidationService_1.default(schema, req.params); }; RouteRequestJsonSchemaValidator.prototype.validateQuery = function (schema, req) { return jsonSchemaValidationService_1.default(schema, req.query); }; RouteRequestJsonSchemaValidator.prototype.validateBody = function (schema, req) { return jsonSchemaValidationService_1.default(schema, req.body); }; RouteRequestJsonSchemaValidator.prototype.buildRequestJsonSchema = function (requestJsonSchema) { var schema = {}; if (requestJsonSchema.hasOwnProperty("params")) { var paramsSchema = path.join(process.cwd(), requestJsonSchema.params); var paramsSchemaFromFile = require(paramsSchema); schema.params = deref(paramsSchemaFromFile); } if (requestJsonSchema.hasOwnProperty("query")) { var querySchema = path.join(process.cwd(), requestJsonSchema.query); var querySchemaFromFile = require(querySchema); schema.query = deref(querySchemaFromFile); } if (requestJsonSchema.hasOwnProperty("body")) { var bodySchema = path.join(process.cwd(), requestJsonSchema.body); var bodySchemaFromFile = require(bodySchema); schema.body = deref(bodySchemaFromFile); } return schema; }; return RouteRequestJsonSchemaValidator; }()); exports.default = RouteRequestJsonSchemaValidator;