公式ドキュメントには起動しているサーバからJSON出力するサンプルしかなかったので調べてみました
単純に OpenAPIObject
をYAMLなりJSONなりに出力すればよい模様
exportOpenAPIDocument.ts
import yaml from 'js-yaml';
import fs from 'fs-extra';
import path from 'path';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import { AppModule } from './app.module';
import { NestFactory } from '@nestjs/core';
const exportOpenAPIDocument = async () => {
const app = await NestFactory.create(AppModule);
const documentBuilder = new DocumentBuilder()
.setTitle('xxxxx')
.setDescription('xxxxx')
.setVersion('1.0')
.build();
const document = SwaggerModule.createDocument(app, documentBuilder);
const yamlDocument = yaml.safeDump(document, {
skipInvalid: true,
noRefs: true,
});
const yamlPath = path.join(__dirname, 'path_to', 'openapi.yml');
await fs.writeFile(yamlPath, yamlDocument);
};
(async () => await exportOpenAPIDocument())();
package.json
には以下の感じで書いておくと便利でしょう
package.json(抜粋)
{
"scripts": {
"openapi:export": "ts-node src/exportOpenAPIDocument.ts"
}
}
$ npm run openapi:export
お試しを!👳♂️