Skip to content

Commit b078964

Browse files
author
Aleksi Pekkala
committed
Generate OpenAPI from decorated classes
1 parent 57cf14a commit b078964

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

src/loaders/swaggerLoader.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,30 @@
1+
import { defaultMetadataStorage as classTransformerMetadataStorage } from 'class-transformer/storage';
2+
import { getFromContainer, MetadataStorage } from 'class-validator';
3+
import { validationMetadatasToSchemas } from 'class-validator-jsonschema';
14
import basicAuth from 'express-basic-auth';
25
import { MicroframeworkLoader, MicroframeworkSettings } from 'microframework-w3tec';
3-
import * as path from 'path';
6+
import { getMetadataArgsStorage } from 'routing-controllers';
7+
import { routingControllersToSpec } from 'routing-controllers-openapi';
48
import * as swaggerUi from 'swagger-ui-express';
59

610
import { env } from '../env';
711

812
export const swaggerLoader: MicroframeworkLoader = (settings: MicroframeworkSettings | undefined) => {
913
if (settings && env.swagger.enabled) {
1014
const expressApp = settings.getData('express_app');
11-
const swaggerFile = require(path.join(__dirname, '..', env.swagger.file));
15+
16+
const { validationMetadatas } = getFromContainer(
17+
MetadataStorage
18+
) as any;
19+
20+
const schemas = validationMetadatasToSchemas(validationMetadatas, {
21+
classTransformerMetadataStorage,
22+
refPointerPrefix: '#/components/schemas/',
23+
});
24+
25+
const swaggerFile = routingControllersToSpec(getMetadataArgsStorage(), {}, {
26+
components: { schemas },
27+
});
1228

1329
// Add npm infos to the swagger doc
1430
swaggerFile.info = {

0 commit comments

Comments
 (0)