@nodearch/joi-express
Version:
NodeArch Joi Express Extension
66 lines • 2.58 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import { Service } from '@nodearch/core';
import j2s from 'joi-to-swagger';
let JoiOpenApiService = class JoiOpenApiService {
getRouteInfo(schema) {
const openAPI = {
parameters: []
};
const { swagger, components } = j2s.default(schema);
const { query, headers, params, cookies, body } = swagger.properties;
if (query) {
const queryParams = this.getParams('query', query);
openAPI.parameters = openAPI.parameters.concat(queryParams);
}
if (headers) {
const headerParams = this.getParams('header', headers);
openAPI.parameters = openAPI.parameters.concat(headerParams);
}
if (params) {
const pathParams = this.getParams('path', params);
openAPI.parameters = openAPI.parameters.concat(pathParams);
}
if (cookies) {
const cookieParams = this.getParams('cookie', cookies);
openAPI.parameters = openAPI.parameters.concat(cookieParams);
}
if (body) {
openAPI.requestBody = this.getBody(body);
}
return openAPI;
}
getParams(location, schema) {
const parameters = [];
const paramKeys = Object.keys(schema.properties);
paramKeys.forEach(key => {
const paramSchema = schema.properties[key];
const parameter = {
name: key,
in: location,
required: schema.required ? schema.required.includes(key) : false,
schema: paramSchema
};
parameters.push(parameter);
});
return parameters;
}
getBody(schema) {
return {
content: {
'application/json': {
schema: schema
}
}
};
}
};
JoiOpenApiService = __decorate([
Service()
], JoiOpenApiService);
export { JoiOpenApiService };
//# sourceMappingURL=joi-openapi.service.js.map