Converts open-api / swagger files to json schema objects ready to use with json schema validation libraries.
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 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)
required is on of :-
respect
// required fields from schema are usedall
// all fields are required expectoptionalFields
none
// no fields are required expectrequiredFields
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' ]
}
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' ]
}
- Allof
- Oneof
- Anyof
- Expose definitions
- Expose paths
- Override requiring
{
"/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"
}
}
}
}