/
index.js
41 lines (35 loc) · 1.07 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
const versions = require('./lib/versions/');
const { ValidationErrors } = require('./lib/errors/');
function create(schema) {
const [major] = (schema.swagger || schema.version || '').split('.');
return versions[major] && new versions[major](schema);
}
function requestValidatorMiddleware(validator, options = {}) {
return function (req, res, next) {
const handler = validator.getRequestValidator(req, options.response);
if (!handler) return void next();
handler(req, res, err => {
if (err && err instanceof ValidationErrors) {
if (typeof options.request === 'function') {
return void options.request(err, res, next);
}
}
if (err) return void next(err);
next();
});
};
}
function errorMiddleware(err, req, res, next) {
if (err && err instanceof ValidationErrors)
return void res.status(400).json(err);
return void next(err);
}
function middleware(options) {
return requestValidatorMiddleware(create(options.schema), options);
}
module.exports = {
versions,
create,
middleware,
errorMiddleware
};