sango
TypeScript icon, indicating that this package has built-in type declarations

0.1.4 • Public • Published

Sango

build status npm

Functions to generate OpenAPI YAML file.

Install

npm install sango

Usage

  1. Create yaml files like following example-petstore project:
projects/example-petstore
├── components
│   └── schemas
│       ├── Error.yaml
│       ├── Pet.yaml
│       ├── Pets.yaml
│       └── User.yaml
├── info
│   └── index.yaml
└── paths
    ├── pets
    │   ├── create.yaml
    │   ├── index.yaml
    │   └── show.yaml
    └── users
        └── show.yaml
  1. Create template file according to OpenAPI Specification.
$ cat projects/example-petstore/index.template.yaml
openapi: 3.0.0
info:
  $ref: ./info/index.yaml
paths:
  $ref: ./paths/index.gen.yaml
components:
  schemas:
    $ref: ./components/schemas.gen.yaml
  1. Combine them:
Runner
  .run([
    write({
      outputPath: "./components/schemas.gen.yaml",
      traverser: traverseTexts("./components/schemas"),
    }),
    write({
      outputPath: "./paths/index.gen.yaml",
      traverser: traverseYamls("./paths"),
    }),
  ])
  .then(resolve("./index.template.yaml").and(validate))
  .then(output("./dist/index.gen.yaml"))
  .catch(err => {
    console.error("[index.ts] unexpected error:", err)
    process.exit(1)
  })
Output : projects/example-petstore/dist/index.gen.yaml
$ cat projects/example-petstore/dist/index.gen.yaml
openapi: 3.0.0
info:
  version: 0.0.1
  title: Petstore Example
paths:
  /pets:
    post:
      summary: Create a pet
      operationId: createPets
      tags:
        - pets
      responses:
        '201':
          description: Null response
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    get:
      summary: List all pets
      operationId: listPets
      tags:
        - pets
      parameters:
        - name: limit
          in: query
          description: How many items to return at one time (max 100)
          required: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: A paged array of pets
          headers:
            x-next:
              description: A link to the next page of responses
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pets'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  '/pets/{petId}':
    get:
      summary: Info for a specific pet
      operationId: showPetById
      tags:
        - pets
      parameters:
        - name: petId
          in: path
          required: true
          description: The id of the pet to retrieve
          schema:
            type: string
      responses:
        '200':
          description: Expected response to a valid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pets'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  '/users/{userId}':
    get:
      summary: Info for a specific user
      tags:
        - users
      parameters:
        - name: userId
          in: path
          required: true
          description: The id of the user to retrieve
          schema:
            type: string
      responses:
        '200':
          description: Expected response to a valid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Users'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      required:
        - code
        - message
      properties:
        code:
          type: integer
          format: int32
        message:
          type: string
    Pet:
      required:
        - id
        - name
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        tag:
          type: string
    Pets:
      type: array
      items:
        $ref: '#/components/schemas/Pet'
    User:
      required:
        - id
        - name
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        tag:
          type: string

License

This repository is published under the MIT License.

Readme

Keywords

Package Sidebar

Install

npm i sango

Weekly Downloads

6

Version

0.1.4

License

MIT

Unpacked Size

79.5 kB

Total Files

45

Last publish

Collaborators

  • x7c1