Skip to content

Latest commit

 

History

History
229 lines (209 loc) · 4.77 KB

README.md

File metadata and controls

229 lines (209 loc) · 4.77 KB

Open api schema converter

Converts open-api / swagger files to json schema objects ready to use with json schema validation libraries.

Usage

npm install --save open-api-to-schema

import openApiToSchema from 'open-api-to-schema'
import Ajv from 'ajv'

const config = {
  required: 'all',
  optionalFields: {
    Pet: [ 'id' ]
  }
}

const jsonSchemas = openApiToSchema('./test/fixtures/petstore-expanded.yaml', config)

const ajv = new Ajv()
const validator = ajv.compile(jsonSchema.paths['/pet'].get[200])

const valid = validator(response.data)

if (!valid) {
  console.error(validator.errors)
}
...

Returns

Returns a valid JSON Schema draft 7 object ready to be used with json validation libraries such as ajv.

Definitions and paths are root objects.

See [Example Response](##Example Response)

Config

required

required is on of :-

  • respect // required fields from schema are used
  • all // all fields are required expect optionalFields
  • none // no fields are required expect requiredFields

optionalFields

Only used when required is set to all. Defines the fields that should not be set to required. Has definition name as key with array of optional fields

{
  [definitionName]: [ 'unrequired' ]
}

requiredFields

Only used when required is set to none. Defines the fields that should be set to required. Has definition name as key with array of required fields

{
  [definitionName]: [ 'required' ]
}

Features

  • Allof
  • Oneof
  • Anyof
  • Expose definitions
  • Expose paths
  • Override requiring

Example Response

{
  "/pets": {
    "get": {
      "200": {
        "type": "array",
        "items": {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "$name": "Pet",
          "properties": {
            "name": {
              "type": "string"
            },
            "tag": {
              "type": "string"
            },
            "id": {
              "type": "integer",
              "format": "int64"
            }
          },
          "required": [
            "name",
            "tag"
          ],
          "additionalProperties": false
        }
      },
      "default": {
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "integer",
            "format": "int32"
          },
          "message": {
            "type": "string"
          }
        },
        "$schema": "http://json-schema.org/draft-07/schema#",
        "$name": "Error"
      }
    },
    "post": {
      "200": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "$name": "Pet",
        "properties": {
          "name": {
            "type": "string"
          },
          "tag": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          }
        },
        "required": [
          "name",
          "tag"
        ],
        "additionalProperties": false
      },
      "default": {
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "integer",
            "format": "int32"
          },
          "message": {
            "type": "string"
          }
        },
        "$schema": "http://json-schema.org/draft-07/schema#",
        "$name": "Error"
      }
    }
  },
  "/pets/{id}": {
    "get": {
      "200": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "$name": "Pet",
        "properties": {
          "name": {
            "type": "string"
          },
          "tag": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          }
        },
        "required": [
          "name",
          "tag"
        ],
        "additionalProperties": false
      },
      "default": {
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "integer",
            "format": "int32"
          },
          "message": {
            "type": "string"
          }
        },
        "$schema": "http://json-schema.org/draft-07/schema#",
        "$name": "Error"
      }
    },
    "delete": {
      "204": {},
      "default": {
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "integer",
            "format": "int32"
          },
          "message": {
            "type": "string"
          }
        },
        "$schema": "http://json-schema.org/draft-07/schema#",
        "$name": "Error"
      }
    }
  }
}