open-api-to-schema
TypeScript icon, indicating that this package has built-in type declarations

1.0.12 • Public • Published

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

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"
      }
    }
  }
}

Package Sidebar

Install

npm i open-api-to-schema

Weekly Downloads

47

Version

1.0.12

License

MIT

Unpacked Size

18.1 kB

Total Files

11

Last publish

Collaborators

  • dominicginger