@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
JavaScript
;
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;