diff --git a/generate-swagger.js b/generate-swagger.js index 93cffab1..a9acb251 100644 --- a/generate-swagger.js +++ b/generate-swagger.js @@ -3,6 +3,7 @@ 'use strict' const parseArgs = require('./args') +const argv = require('yargs-parser') const log = require('./log') const { exit, @@ -24,6 +25,7 @@ function loadModules (opts) { async function generateSwagger (args) { const opts = parseArgs(args) + const extraOpts = argv(args) if (opts.help) { return showHelpForCommand('generate-swagger') } @@ -45,7 +47,11 @@ async function generateSwagger (args) { process.exit(1) } - return JSON.stringify(fastify.swagger(), undefined, 2) + if (extraOpts.yaml) { + return fastify.swagger({ yaml: true }); + } else { + return JSON.stringify(fastify.swagger(), undefined, 2) + } } finally { fastify.close() } diff --git a/help/generate-swagger.txt b/help/generate-swagger.txt index 1958a5cc..06ebf355 100644 --- a/help/generate-swagger.txt +++ b/help/generate-swagger.txt @@ -1,3 +1,8 @@ Usage: fastify generate-plugin [opts] [--] [] -Generate Swagger/OpenAPI schema for a project using @fastify/cli. +Generate Swagger/OpenAPI schema for a project using @fastify/swagger. + +OPTS + + --yaml=true + generate in YAML format diff --git a/test/generate-swagger.test.js b/test/generate-swagger.test.js index b97566b7..5e98e167 100644 --- a/test/generate-swagger.test.js +++ b/test/generate-swagger.test.js @@ -16,3 +16,14 @@ test('should generate swagger', async (t) => { t.error(err) } }) + +test('should generate swagger in yaml format', async (t) => { + t.plan(1) + + try { + const swagger = await generateSwagger(['--yaml=true', swaggerplugin]) + t.ok(swagger.startsWith('openapi: 3.0.3')) + } catch (err) { + t.error(err) + } +}) diff --git a/test/swaggerplugindir/plugin.js b/test/swaggerplugindir/plugin.js index 80ef2594..fee6af1e 100644 --- a/test/swaggerplugindir/plugin.js +++ b/test/swaggerplugindir/plugin.js @@ -3,31 +3,53 @@ const fp = require('fastify-plugin') module.exports = fp(function (fastify, opts, next) { - fastify.decorate('swagger', function () { - return { - openapi: '3.0.3', - info: { - version: '8.1.0', - title: '@fastify/swagger' - }, - components: { - schemas: {} - }, - paths: { - '/': { - get: { - responses: { - 200: { - description: 'Default Response' + fastify.decorate('swagger', function (opts) { + if (opts && opts.yaml) { + return `\ +openapi: 3.0.3 +info: +version: 8.1.0 +title: "@fastify/swagger" +components: +schemas: {} +paths: +"/": + get: + responses: + '200': + description: Default Response +"/example/": + get: + responses: + '200': + description: Default Response +` + } else { + return { + openapi: '3.0.3', + info: { + version: '8.1.0', + title: '@fastify/swagger' + }, + components: { + schemas: {} + }, + paths: { + '/': { + get: { + responses: { + 200: { + description: 'Default Response' + } } } - } - }, - '/example/': { - get: { - responses: { - 200: { - description: 'Default Response' + }, + '/example/': { + get: { + responses: { + 200: { + description: 'Default Response' + } } } }