UNPKG

swagger2-koa

Version:

Koa 2 middleware for loading, parsing and validating requests via swagger2

71 lines (70 loc) 3.92 kB
// src/validate.ts import * as swagger from "swagger2"; function validate_default(document) { const compiled = swagger.compileDocument(document); const basePath = ( // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions,@typescript-eslint/prefer-nullish-coalescing (document.basePath || "") + // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions,@typescript-eslint/prefer-nullish-coalescing ((document.basePath || "").endsWith("/") ? "" : "/") ); return async (context, next) => { if (document.basePath !== void 0 && !context.path.startsWith(basePath)) { return next(); } const compiledPath = compiled(context.path); if (compiledPath === void 0) { context.status = 404; return; } const validationErrors = swagger.validateRequest( compiledPath, // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-member-access context.method, // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access context.request.query, // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access context.request.body, // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access context.request.headers ); if (validationErrors === void 0) { if (context.method !== "OPTIONS") { context.status = 405; } return; } if (validationErrors.length > 0) { context.status = 400; context.body = { code: "SWAGGER_REQUEST_VALIDATION_FAILED", errors: validationErrors }; return; } await next(); if (context.method.toLowerCase() === "options") { return; } const error = swagger.validateResponse( compiledPath, // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-member-access context.method, // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-member-access context.status, // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access context.body ); if (error) { error.where = "response"; context.status = 500; context.body = { code: "SWAGGER_RESPONSE_VALIDATION_FAILED", errors: [error] }; } }; } export { validate_default as default }; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3ZhbGlkYXRlLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQThCQSxZQUFZLGFBQWE7QUFFVixTQUFSLGlCQUNMLFVBRTREO0FBRTVELFFBQU0sV0FBbUIsd0JBQWdCLFFBQVE7QUFHakQsUUFBTTtBQUFBO0FBQUEsS0FFSCxTQUFTLFlBQVk7QUFBQSxNQUVwQixTQUFTLFlBQVksSUFBSSxTQUFTLEdBQUcsSUFBSSxLQUFLO0FBQUE7QUFHbEQsU0FBTyxPQUFPLFNBQWMsU0FBOEI7QUFFeEQsUUFBSSxTQUFTLGFBQWEsVUFBYSxDQUFDLFFBQVEsS0FBSyxXQUFXLFFBQVEsR0FBRztBQUV6RSxhQUFPLEtBQUs7QUFBQSxJQUNkO0FBR0EsVUFBTSxlQUFlLFNBQVMsUUFBUSxJQUFJO0FBQzFDLFFBQUksaUJBQWlCLFFBQVc7QUFHOUIsY0FBUSxTQUFTO0FBQ2pCO0FBQUEsSUFDRjtBQUdBLFVBQU0sbUJBQTJCO0FBQUEsTUFDL0I7QUFBQTtBQUFBLE1BRUEsUUFBUTtBQUFBO0FBQUEsTUFFUixRQUFRLFFBQVE7QUFBQTtBQUFBLE1BRWhCLFFBQVEsUUFBUTtBQUFBO0FBQUEsTUFFaEIsUUFBUSxRQUFRO0FBQUEsSUFDbEI7QUFFQSxRQUFJLHFCQUFxQixRQUFXO0FBR2xDLFVBQUksUUFBUSxXQUFXLFdBQVc7QUFFaEMsZ0JBQVEsU0FBUztBQUFBLE1BQ25CO0FBQ0E7QUFBQSxJQUNGO0FBQ0EsUUFBSSxpQkFBaUIsU0FBUyxHQUFHO0FBRS9CLGNBQVEsU0FBUztBQUVqQixjQUFRLE9BQU87QUFBQSxRQUNiLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxNQUNWO0FBQ0E7QUFBQSxJQUNGO0FBR0EsVUFBTSxLQUFLO0FBSVgsUUFBSSxRQUFRLE9BQU8sWUFBWSxNQUFNLFdBQVc7QUFDOUM7QUFBQSxJQUNGO0FBR0EsVUFBTSxRQUFnQjtBQUFBLE1BQ3BCO0FBQUE7QUFBQSxNQUVBLFFBQVE7QUFBQTtBQUFBLE1BRVIsUUFBUTtBQUFBO0FBQUEsTUFFUixRQUFRO0FBQUEsSUFDVjtBQUNBLFFBQUksT0FBTztBQUNULFlBQU0sUUFBUTtBQUVkLGNBQVEsU0FBUztBQUVqQixjQUFRLE9BQU87QUFBQSxRQUNiLE1BQU07QUFBQSxRQUNOLFFBQVEsQ0FBQyxLQUFLO0FBQUEsTUFDaEI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=