diff --git a/src/openapi/OpenApi.ts b/src/openapi/OpenApi.ts index 7aa3a98..80aa2f8 100644 --- a/src/openapi/OpenApi.ts +++ b/src/openapi/OpenApi.ts @@ -24,7 +24,7 @@ export interface AmalaMetadata { export let openApiSpec: OpenAPIV3_1.Document = { openapi: '3.0.1', info: { - 'title': '', + 'title': 'API', description: 'powered by AmalaJS (https://github.com/iyobo/amala)', 'version': '1.0.0' }, @@ -38,6 +38,28 @@ export let openApiSpec: OpenAPIV3_1.Document = { externalDocs: undefined }; +function convertRegexpToSwagger(path) { + const swaggerPath = []; + + let paramMode = false; + for (const c of path) { + + if (c === ':') { + paramMode = true; + swaggerPath.push('{'); + } else if (paramMode && c === '/') { + paramMode = false; + swaggerPath.push('}/'); + } else { + swaggerPath.push(c); + } + } + + if (paramMode) swaggerPath.push('}'); + + return swaggerPath.join(''); +} + export function generateOpenApi(metaData: AmalaMetadata, options: AmalaOptions) { // incorporate custom spec values @@ -124,7 +146,7 @@ export function generateOpenApi(metaData: AmalaMetadata, options: AmalaOptions) for (const actionName in controllerMeta.actions) { // e.g getUsers const actionMeta = controllerMeta.actions[actionName]; - const fullPath = basePath + (actionMeta.path === '/' ? '' : actionMeta.path); + const fullPath = convertRegexpToSwagger(basePath + (actionMeta.path === '/' ? '' : actionMeta.path)); const verb = actionMeta.verb; paths[fullPath] = paths[fullPath] || {}; @@ -167,7 +189,8 @@ export function generateOpenApi(metaData: AmalaMetadata, options: AmalaOptions) } // eslint-disable-next-line new-cap - const f = new argType(); + // const refl = argType.name; + // console.log(refl); parameters.push({ in: argExistsIn, name, @@ -178,6 +201,12 @@ export function generateOpenApi(metaData: AmalaMetadata, options: AmalaOptions) }); } + // console.log( + // 'meta-'+actionMeta.target.name, + // Reflect.getMetadata('design:type', actionMeta.target()), + // Reflect.getMetadata('design:paramtypes', actionMeta.target), + // Reflect.getMetadata('design:returntype', actionMeta.target) + // ); // finalize iteration changes of path paths[fullPath][verb] = { @@ -195,7 +224,7 @@ export function generateOpenApi(metaData: AmalaMetadata, options: AmalaOptions) // @ts-ignore //???? 'application/json': { schema: { - $ref: `#/components/schemas/Error` + $ref: `#/components/schemas/${actionMeta.target.name}` } } } diff --git a/src/tests/util/controllers/ArgController.ts b/src/tests/util/controllers/ArgController.ts index 9d816ee..d3278c5 100644 --- a/src/tests/util/controllers/ArgController.ts +++ b/src/tests/util/controllers/ArgController.ts @@ -37,7 +37,7 @@ const CustomDeco = ()=>Ctx('query'); @Controller('/arg') export class ArgController { @Post('/:model/:id') - async twoParams(@Params() params: any, @Params('id') id: any) { + async twoParams(@Params() params, @Params('id') id: string) { return {params, id}; } diff --git a/src/util/test.ts b/src/util/test.ts index 3c8f582..4106606 100644 --- a/src/util/test.ts +++ b/src/util/test.ts @@ -28,5 +28,6 @@ export const startTestServer = async ()=> { app.listen(port); } +console.log(Reflect.get) startTestServer() \ No newline at end of file