express-openapi-validate
Version:
Express middleware to validate request based on an OpenAPI 3 document
55 lines • 2.15 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildSchema = exports.resolve = void 0;
const lodash_1 = __importDefault(require("lodash"));
const schema_utils_1 = require("./schema-utils");
const normalizeParameters = (document, parameters) => lodash_1.default.keyBy(lodash_1.default.map(parameters, (p) => schema_utils_1.resolveReference(document, p)), "name");
function resolve(document, pathParameters, itemParameters) {
const parameters = {
...normalizeParameters(document, pathParameters),
...normalizeParameters(document, itemParameters),
};
return lodash_1.default.values(parameters);
}
exports.resolve = resolve;
const concatArraysCustomizer = (objValue, srcValue) => Array.isArray(objValue) ? objValue.concat(srcValue) : undefined;
const parameterLocationToRequestField = (location) => {
if (location === "header") {
return "headers";
}
if (location === "path") {
return "params";
}
if (location === "cookie") {
return "cookies";
}
if (location === "query") {
return "query";
}
throw new Error(`Unrecognized parameter location=${location}`);
};
function buildSchema(parameterObjects) {
const schema = { query: {}, headers: {}, params: {}, cookies: {} };
parameterObjects.forEach((parameterObject) => {
const location = parameterObject.in;
const name = location === "header"
? parameterObject.name.toLowerCase()
: parameterObject.name;
const parameterSchema = {
type: "object",
properties: {
[name]: parameterObject.schema,
},
};
if (parameterObject.required) {
parameterSchema.required = [name];
}
lodash_1.default.mergeWith(schema[parameterLocationToRequestField(location)], parameterSchema, concatArraysCustomizer);
});
return schema;
}
exports.buildSchema = buildSchema;
//# sourceMappingURL=parameters.js.map