Node module for extracting swagger endpoints from inline comments.
Too complicated? Try the oas
command line tool, which automates all of this! https://github.com/readmeio/oas
npm install --save-dev swagger-inline
npm run build # single build
npm start # build + watch
npm test # single run
npm run test-watch # test + watch
const swaggerInline = require('swagger-inline');
swaggerInline(['src/**/*.js', 'test/**/*.js'], {
base: 'swaggerBase.json',
}).then((generatedSwagger) => {
/* ... */
});
swagger-inline --base 'swaggerBase.json' # outputs built swagger.json 'src/**/*.js'
Options:
inputGlobs
: Files/globs to search for swagger comments.base
: Base swagger to extend. (default: auto-detect)out
: Name of file to output the generated swagger file (default: results returned, no file saved).format
: Output filetype -.json
or.yaml
(default:.json
)logger
: Function called for logging.metadata
: Add additional annotations to the Swagger file, prefixed with "x-si"ignore
: globs of files to ignore (by default,['node_modules/**/*', ...etc]
,scope
: matches the scope field defined in each api (for example,--scope public
... if not provided, all APIs' doc will be generated )
swaggerBase.yaml
swagger: "2.0"
host: "petstore.swagger.io"
basePath: "/api"
schemes: ['http']
api.js
/*
* @api [get] /pets
* description: "Returns all pets from the system that the user has access to"
* responses:
* "200":
* description: "A list of pets."
* schema:
* type: "String"
*/
api.route('/pets', function() {
/* Pet code 😺 */
});
/*
* @schema Pet
* required:
* - id
* - name
* properties:
* id:
* type: integer
* format: int64
* name:
* type: string
* tag:
* type: string
*/
//some scheme related function
swagger-inline './*.js' --base './swaggerBase.yaml'
Output:
swagger.yaml
swagger: '2.0'
host: petstore.swagger.io
basePath: /api
schemes:
- http
paths:
/pets:
get:
description: Returns all pets from the system that the user has access to
responses:
'200':
description: A list of pets.
schema:
type: String
components:
schemes:
Pet:
required:
- id
- name
properties:
id:
type: integer
format: int64
name:
type: string
tag:
type: string