UNPKG

express-openapi-validate

Version:

Express middleware to validate request based on an OpenAPI 3 document

55 lines 2.15 kB
"use strict"; 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