Improve type definitions

This commit is contained in:
syuilo 2019-02-24 09:45:27 +09:00
parent 76edcdbe45
commit b679163d01
No known key found for this signature in database
GPG key ID: BDC4C49D06AB9D69
7 changed files with 110 additions and 73 deletions

View file

@ -4,6 +4,7 @@ import config from '../../../config';
import { errors as basicErrors } from './errors';
import { schemas } from './schemas';
import { description } from './description';
import { convertOpenApiSchema } from '../../../prelude/schema';
export function genOpenapiSpec(lang = 'ja-JP') {
const spec = {
@ -104,33 +105,7 @@ export function genOpenapiSpec(lang = 'ja-JP') {
const required = endpoint.meta.params ? Object.entries(endpoint.meta.params).filter(([k, v]) => !v.validator.isOptional).map(([k, v]) => k) : [];
const resSchema = endpoint.meta.res ? renderType(endpoint.meta.res) : {};
function renderType(x: any) {
const res = {} as any;
if (['User', 'Note', 'DriveFile'].includes(x.type)) {
res['$ref'] = `#/components/schemas/${x.type}`;
} else if (x.type === 'object') {
res['type'] = 'object';
if (x.props) {
const props = {} as any;
for (const kv of Object.entries(x.props)) {
props[kv[0]] = renderType(kv[1]);
}
res['properties'] = props;
}
} else if (x.type === 'array') {
res['type'] = 'array';
if (x.items) {
res['items'] = renderType(x.items);
}
} else {
res['type'] = x.type;
}
return res;
}
const resSchema = endpoint.meta.res ? convertOpenApiSchema(endpoint.meta.res) : {};
const info = {
operationId: endpoint.name,