Webfreshener/datamatic

View on GitHub
fixtures/SwaggerV2.js

Summary

Maintainability
F
6 days
Test Coverage
export default {
    title: "A JSON Schema for Swagger 2.0 API.",
    $id: "http://swagger.io/v2/schema.json#",
    schema: "http://json-schema.org/draft-04/schema#",
    type: "object",
    required: [
        "swagger",
        "info",
        "paths"
    ],
    additionalProperties: false,
    patternProperties: {
        "^x-": {
            $ref: "#/definitions/vendorExtension"
        }
    },
    properties: {
        swagger: {
            type: "string",
            enum: [
                "2.0"
            ],
            description: "The Swagger version of this document."
        },
        info: {
            $ref: "#/definitions/info"
        },
        host: {
            type: "string",
            pattern: "^[^{}/ :\\\\]+(?::\\d+)?$",
            description: "The host (name or ip) of the API. Example: 'swagger.io'"
        },
        basePath: {
            type: "string",
            pattern: "^/",
            description: "The base path to the API. Example: '/api'."
        },
        schemes: {
            $ref: "#/definitions/schemesList"
        },
        consumes: {
            description: "A list of MIME types accepted by the API.",
            allOf: [
                {
                    $ref: "#/definitions/mediaTypeList"
                }
            ]
        },
        produces: {
            description: "A list of MIME types the API can produce.",
            allOf: [
                {
                    $ref: "#/definitions/mediaTypeList"
                }
            ]
        },
        paths: {
            $ref: "#/definitions/paths"
        },
        definitions: {
            $ref: "#/definitions/definitions"
        },
        parameters: {
            $ref: "#/definitions/parameterDefinitions"
        },
        responses: {
            $ref: "#/definitions/responseDefinitions"
        },
        security: {
            $ref: "#/definitions/security"
        },
        securityDefinitions: {
            $ref: "#/definitions/securityDefinitions"
        },
        tags: {
            type: "array",
            items: {
                $ref: "#/definitions/tag"
            },
            uniqueItems: true
        },
        externalDocs: {
            $ref: "#/definitions/externalDocs"
        }
    },
    definitions: {
        info: {
            type: "object",
            description: "General information about the API.",
            required: [
                "version",
                "title"
            ],
            additionalProperties: false,
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            },
            properties: {
                title: {
                    type: "string",
                    description: "A unique and precise title of the API."
                },
                version: {
                    type: "string",
                    description: "A semantic version number of the API."
                },
                description: {
                    type: "string",
                    description: "A longer description of the API. Should be different from the title.  GitHub Flavored Markdown is allowed."
                },
                termsOfService: {
                    type: "string",
                    description: "The terms of service for the API."
                },
                contact: {
                    $ref: "#/definitions/contact"
                },
                license: {
                    $ref: "#/definitions/license"
                }
            }
        },
        contact: {
            type: "object",
            description: "Contact information for the owners of the API.",
            additionalProperties: false,
            properties: {
                name: {
                    type: "string",
                    description: "The identifying name of the contact person/organization."
                },
                url: {
                    type: "string",
                    description: "The URL pointing to the contact information.",
                    format: "uri"
                },
                email: {
                    type: "string",
                    description: "The email address of the contact person/organization.",
                    format: "email"
                }
            },
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            }
        },
        license: {
            type: "object",
            required: [
                "name"
            ],
            additionalProperties: false,
            properties: {
                name: {
                    type: "string",
                    description: "The name of the license type. It's encouraged to use an OSI compatible license."
                },
                url: {
                    type: "string",
                    description: "The URL pointing to the license.",
                    format: "uri"
                }
            },
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            }
        },
        paths: {
            type: "object",
            description: "Relative paths to the individual endpoints. They must be relative to the 'basePath'.",
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                },
                "^/": {
                    $ref: "#/definitions/pathItem"
                }
            },
            additionalProperties: false
        },
        definitions: {
            type: "object",
            additionalProperties: {
                $ref: "#/definitions/schema"
            },
            description: "One or more JSON objects describing the schemas being consumed and produced by the API."
        },
        parameterDefinitions: {
            type: "object",
            additionalProperties: {
                $ref: "#/definitions/parameter"
            },
            description: "One or more JSON representations for parameters"
        },
        responseDefinitions: {
            type: "object",
            additionalProperties: {
                $ref: "#/definitions/response"
            },
            description: "One or more JSON representations for responses"
        },
        externalDocs: {
            type: "object",
            additionalProperties: false,
            description: "information about external documentation",
            required: [
                "url"
            ],
            properties: {
                description: {
                    type: "string"
                },
                url: {
                    type: "string",
                    format: "uri"
                }
            },
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            }
        },
        examples: {
            type: "object",
            additionalProperties: true
        },
        mimeType: {
            type: "string",
            description: "The MIME type of the HTTP message."
        },
        operation: {
            type: "object",
            required: [
                "responses"
            ],
            additionalProperties: false,
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            },
            properties: {
                tags: {
                    type: "array",
                    items: {
                        type: "string"
                    },
                    uniqueItems: true
                },
                summary: {
                    type: "string",
                    description: "A brief summary of the operation."
                },
                description: {
                    type: "string",
                    description: "A longer description of the operation, GitHub Flavored Markdown is allowed."
                },
                externalDocs: {
                    $ref: "#/definitions/externalDocs"
                },
                operationId: {
                    type: "string",
                    description: "A unique identifier of the operation."
                },
                produces: {
                    description: "A list of MIME types the API can produce.",
                    allOf: [
                        {
                            $ref: "#/definitions/mediaTypeList"
                        }
                    ]
                },
                consumes: {
                    description: "A list of MIME types the API can consume.",
                    allOf: [
                        {
                            $ref: "#/definitions/mediaTypeList"
                        }
                    ]
                },
                parameters: {
                    $ref: "#/definitions/parametersList"
                },
                responses: {
                    $ref: "#/definitions/responses"
                },
                schemes: {
                    $ref: "#/definitions/schemesList"
                },
                deprecated: {
                    type: "boolean",
                    default: false
                },
                security: {
                    $ref: "#/definitions/security"
                }
            }
        },
        pathItem: {
            type: "object",
            additionalProperties: false,
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            },
            properties: {
                $ref: {
                    type: "string"
                },
                get: {
                    $ref: "#/definitions/operation"
                },
                put: {
                    $ref: "#/definitions/operation"
                },
                post: {
                    $ref: "#/definitions/operation"
                },
                delete: {
                    $ref: "#/definitions/operation"
                },
                options: {
                    $ref: "#/definitions/operation"
                },
                head: {
                    $ref: "#/definitions/operation"
                },
                patch: {
                    $ref: "#/definitions/operation"
                },
                parameters: {
                    $ref: "#/definitions/parametersList"
                }
            }
        },
        responses: {
            type: "object",
            description: "Response objects names can either be any valid HTTP status code or 'default'.",
            minProperties: 1,
            additionalProperties: false,
            patternProperties: {
                "^([0-9]{3})$|^(default)$": {
                    $ref: "#/definitions/responseValue"
                },
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            },
            not: {
                type: "object",
                additionalProperties: false,
                patternProperties: {
                    "^x-": {
                        $ref: "#/definitions/vendorExtension"
                    }
                }
            }
        },
        responseValue: {
            oneOf: [
                {
                    $ref: "#/definitions/response"
                },
                {
                    $ref: "#/definitions/jsonReference"
                }
            ]
        },
        response: {
            type: "object",
            required: [
                "description"
            ],
            properties: {
                description: {
                    type: "string"
                },
                schema: {
                    oneOf: [
                        {
                            $ref: "#/definitions/schema"
                        },
                        {
                            $ref: "#/definitions/fileSchema"
                        }
                    ]
                },
                headers: {
                    $ref: "#/definitions/headers"
                },
                examples: {
                    $ref: "#/definitions/examples"
                }
            },
            additionalProperties: false,
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            }
        },
        headers: {
            type: "object",
            additionalProperties: {
                $ref: "#/definitions/header"
            }
        },
        header: {
            type: "object",
            additionalProperties: false,
            required: [
                "type"
            ],
            properties: {
                type: {
                    type: "string",
                    enum: [
                        "string",
                        "number",
                        "integer",
                        "boolean",
                        "array"
                    ]
                },
                format: {
                    type: "string"
                },
                items: {
                    $ref: "#/definitions/primitivesItems"
                },
                collectionFormat: {
                    $ref: "#/definitions/collectionFormat"
                },
                default: {
                    $ref: "#/definitions/default"
                },
                maximum: {
                    $ref: "#/definitions/maximum"
                },
                exclusiveMaximum: {
                    $ref: "#/definitions/exclusiveMaximum"
                },
                minimum: {
                    $ref: "#/definitions/minimum"
                },
                exclusiveMinimum: {
                    $ref: "#/definitions/exclusiveMinimum"
                },
                maxLength: {
                    $ref: "#/definitions/maxLength"
                },
                minLength: {
                    $ref: "#/definitions/minLength"
                },
                pattern: {
                    $ref: "#/definitions/pattern"
                },
                maxItems: {
                    $ref: "#/definitions/maxItems"
                },
                minItems: {
                    $ref: "#/definitions/minItems"
                },
                uniqueItems: {
                    $ref: "#/definitions/uniqueItems"
                },
                enum: {
                    $ref: "#/definitions/enum"
                },
                multipleOf: {
                    $ref: "#/definitions/multipleOf"
                },
                description: {
                    type: "string"
                }
            },
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            }
        },
        vendorExtension: {
            description: "Any property starting with x- is valid.",
            additionalProperties: true,
            additionalItems: true
        },
        bodyParameter: {
            type: "object",
            required: [
                "name",
                "in",
                "schema"
            ],
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            },
            properties: {
                description: {
                    type: "string",
                    description: "A brief description of the parameter. This could contain examples of use.  GitHub Flavored Markdown is allowed."
                },
                name: {
                    type: "string",
                    description: "The name of the parameter."
                },
                in: {
                    type: "string",
                    description: "Determines the location of the parameter.",
                    enum: [
                        "body"
                    ]
                },
                required: {
                    type: "boolean",
                    description: "Determines whether or not this parameter is required or optional.",
                    default: false
                },
                schema: {
                    $ref: "#/definitions/schema"
                }
            },
            additionalProperties: false
        },
        headerParameterSubSchema: {
            additionalProperties: false,
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            },
            properties: {
                required: {
                    type: "boolean",
                    description: "Determines whether or not this parameter is required or optional.",
                    default: false
                },
                in: {
                    type: "string",
                    description: "Determines the location of the parameter.",
                    enum: [
                        "header"
                    ]
                },
                description: {
                    type: "string",
                    description: "A brief description of the parameter. This could contain examples of use.  GitHub Flavored Markdown is allowed."
                },
                name: {
                    type: "string",
                    description: "The name of the parameter."
                },
                type: {
                    type: "string",
                    enum: [
                        "string",
                        "number",
                        "boolean",
                        "integer",
                        "array"
                    ]
                },
                format: {
                    type: "string"
                },
                items: {
                    $ref: "#/definitions/primitivesItems"
                },
                collectionFormat: {
                    $ref: "#/definitions/collectionFormat"
                },
                default: {
                    $ref: "#/definitions/default"
                },
                maximum: {
                    $ref: "#/definitions/maximum"
                },
                exclusiveMaximum: {
                    $ref: "#/definitions/exclusiveMaximum"
                },
                minimum: {
                    $ref: "#/definitions/minimum"
                },
                exclusiveMinimum: {
                    $ref: "#/definitions/exclusiveMinimum"
                },
                maxLength: {
                    $ref: "#/definitions/maxLength"
                },
                minLength: {
                    $ref: "#/definitions/minLength"
                },
                pattern: {
                    $ref: "#/definitions/pattern"
                },
                maxItems: {
                    $ref: "#/definitions/maxItems"
                },
                minItems: {
                    $ref: "#/definitions/minItems"
                },
                uniqueItems: {
                    $ref: "#/definitions/uniqueItems"
                },
                enum: {
                    $ref: "#/definitions/enum"
                },
                multipleOf: {
                    $ref: "#/definitions/multipleOf"
                }
            }
        },
        queryParameterSubSchema: {
            additionalProperties: false,
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            },
            properties: {
                required: {
                    type: "boolean",
                    description: "Determines whether or not this parameter is required or optional.",
                    default: false
                },
                in: {
                    type: "string",
                    description: "Determines the location of the parameter.",
                    enum: [
                        "query"
                    ]
                },
                description: {
                    type: "string",
                    description: "A brief description of the parameter. This could contain examples of use.  GitHub Flavored Markdown is allowed."
                },
                name: {
                    type: "string",
                    description: "The name of the parameter."
                },
                allowEmptyValue: {
                    type: "boolean",
                    default: false,
                    description: "allows sending a parameter by name only or with an empty value."
                },
                type: {
                    type: "string",
                    enum: [
                        "string",
                        "number",
                        "boolean",
                        "integer",
                        "array"
                    ]
                },
                format: {
                    type: "string"
                },
                items: {
                    $ref: "#/definitions/primitivesItems"
                },
                collectionFormat: {
                    $ref: "#/definitions/collectionFormatWithMulti"
                },
                default: {
                    $ref: "#/definitions/default"
                },
                maximum: {
                    $ref: "#/definitions/maximum"
                },
                exclusiveMaximum: {
                    $ref: "#/definitions/exclusiveMaximum"
                },
                minimum: {
                    $ref: "#/definitions/minimum"
                },
                exclusiveMinimum: {
                    $ref: "#/definitions/exclusiveMinimum"
                },
                maxLength: {
                    $ref: "#/definitions/maxLength"
                },
                minLength: {
                    $ref: "#/definitions/minLength"
                },
                pattern: {
                    $ref: "#/definitions/pattern"
                },
                maxItems: {
                    $ref: "#/definitions/maxItems"
                },
                minItems: {
                    $ref: "#/definitions/minItems"
                },
                uniqueItems: {
                    $ref: "#/definitions/uniqueItems"
                },
                enum: {
                    $ref: "#/definitions/enum"
                },
                multipleOf: {
                    $ref: "#/definitions/multipleOf"
                }
            }
        },
        formDataParameterSubSchema: {
            additionalProperties: false,
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            },
            properties: {
                required: {
                    type: "boolean",
                    description: "Determines whether or not this parameter is required or optional.",
                    default: false
                },
                in: {
                    type: "string",
                    description: "Determines the location of the parameter.",
                    enum: [
                        "formData"
                    ]
                },
                description: {
                    type: "string",
                    description: "A brief description of the parameter. This could contain examples of use.  GitHub Flavored Markdown is allowed."
                },
                name: {
                    type: "string",
                    description: "The name of the parameter."
                },
                allowEmptyValue: {
                    type: "boolean",
                    default: false,
                    description: "allows sending a parameter by name only or with an empty value."
                },
                type: {
                    type: "string",
                    enum: [
                        "string",
                        "number",
                        "boolean",
                        "integer",
                        "array",
                        "file"
                    ]
                },
                format: {
                    type: "string"
                },
                items: {
                    $ref: "#/definitions/primitivesItems"
                },
                collectionFormat: {
                    $ref: "#/definitions/collectionFormatWithMulti"
                },
                default: {
                    $ref: "#/definitions/default"
                },
                maximum: {
                    $ref: "#/definitions/maximum"
                },
                exclusiveMaximum: {
                    $ref: "#/definitions/exclusiveMaximum"
                },
                minimum: {
                    $ref: "#/definitions/minimum"
                },
                exclusiveMinimum: {
                    $ref: "#/definitions/exclusiveMinimum"
                },
                maxLength: {
                    $ref: "#/definitions/maxLength"
                },
                minLength: {
                    $ref: "#/definitions/minLength"
                },
                pattern: {
                    $ref: "#/definitions/pattern"
                },
                maxItems: {
                    $ref: "#/definitions/maxItems"
                },
                minItems: {
                    $ref: "#/definitions/minItems"
                },
                uniqueItems: {
                    $ref: "#/definitions/uniqueItems"
                },
                enum: {
                    $ref: "#/definitions/enum"
                },
                multipleOf: {
                    $ref: "#/definitions/multipleOf"
                }
            }
        },
        pathParameterSubSchema: {
            additionalProperties: false,
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            },
            required: [
                "required"
            ],
            properties: {
                required: {
                    type: "boolean",
                    enum: [
                        true
                    ],
                    description: "Determines whether or not this parameter is required or optional."
                },
                in: {
                    type: "string",
                    description: "Determines the location of the parameter.",
                    enum: [
                        "path"
                    ]
                },
                description: {
                    type: "string",
                    description: "A brief description of the parameter. This could contain examples of use.  GitHub Flavored Markdown is allowed."
                },
                name: {
                    type: "string",
                    description: "The name of the parameter."
                },
                type: {
                    type: "string",
                    enum: [
                        "string",
                        "number",
                        "boolean",
                        "integer",
                        "array"
                    ]
                },
                format: {
                    type: "string"
                },
                items: {
                    $ref: "#/definitions/primitivesItems"
                },
                collectionFormat: {
                    $ref: "#/definitions/collectionFormat"
                },
                default: {
                    $ref: "#/definitions/default"
                },
                maximum: {
                    $ref: "#/definitions/maximum"
                },
                exclusiveMaximum: {
                    $ref: "#/definitions/exclusiveMaximum"
                },
                minimum: {
                    $ref: "#/definitions/minimum"
                },
                exclusiveMinimum: {
                    $ref: "#/definitions/exclusiveMinimum"
                },
                maxLength: {
                    $ref: "#/definitions/maxLength"
                },
                minLength: {
                    $ref: "#/definitions/minLength"
                },
                pattern: {
                    $ref: "#/definitions/pattern"
                },
                maxItems: {
                    $ref: "#/definitions/maxItems"
                },
                minItems: {
                    $ref: "#/definitions/minItems"
                },
                uniqueItems: {
                    $ref: "#/definitions/uniqueItems"
                },
                enum: {
                    $ref: "#/definitions/enum"
                },
                multipleOf: {
                    $ref: "#/definitions/multipleOf"
                }
            }
        },
        nonBodyParameter: {
            type: "object",
            required: [
                "name",
                "in",
                "type"
            ],
            oneOf: [
                {
                    $ref: "#/definitions/headerParameterSubSchema"
                },
                {
                    $ref: "#/definitions/formDataParameterSubSchema"
                },
                {
                    $ref: "#/definitions/queryParameterSubSchema"
                },
                {
                    $ref: "#/definitions/pathParameterSubSchema"
                }
            ]
        },
        parameter: {
            oneOf: [
                {
                    $ref: "#/definitions/bodyParameter"
                },
                {
                    $ref: "#/definitions/nonBodyParameter"
                }
            ]
        },
        schema: {
            type: "object",
            description: "A deterministic version of a JSON Schema object.",
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            },
            properties: {
                $ref: {
                    type: "string"
                },
                format: {
                    type: "string"
                },
                title: {
                    $ref: "http://json-schema.org/draft-04/schema#/properties/title"
                },
                description: {
                    $ref: "http://json-schema.org/draft-04/schema#/properties/description"
                },
                default: {
                    $ref: "http://json-schema.org/draft-04/schema#/properties/default"
                },
                multipleOf: {
                    $ref: "http://json-schema.org/draft-04/schema#/properties/multipleOf"
                },
                maximum: {
                    $ref: "http://json-schema.org/draft-04/schema#/properties/maximum"
                },
                exclusiveMaximum: {
                    $ref: "http://json-schema.org/draft-04/schema#/properties/exclusiveMaximum"
                },
                minimum: {
                    $ref: "http://json-schema.org/draft-04/schema#/properties/minimum"
                },
                exclusiveMinimum: {
                    $ref: "http://json-schema.org/draft-04/schema#/properties/exclusiveMinimum"
                },
                maxLength: {
                    $ref: "http://json-schema.org/draft-04/schema#/definitions/positiveInteger"
                },
                minLength: {
                    $ref: "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"
                },
                pattern: {
                    $ref: "http://json-schema.org/draft-04/schema#/properties/pattern"
                },
                maxItems: {
                    $ref: "http://json-schema.org/draft-04/schema#/definitions/positiveInteger"
                },
                minItems: {
                    $ref: "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"
                },
                uniqueItems: {
                    $ref: "http://json-schema.org/draft-04/schema#/properties/uniqueItems"
                },
                maxProperties: {
                    $ref: "http://json-schema.org/draft-04/schema#/definitions/positiveInteger"
                },
                minProperties: {
                    $ref: "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"
                },
                required: {
                    $ref: "http://json-schema.org/draft-04/schema#/definitions/stringArray"
                },
                enum: {
                    $ref: "http://json-schema.org/draft-04/schema#/properties/enum"
                },
                additionalProperties: {
                    anyOf: [
                        {
                            $ref: "#/definitions/schema"
                        },
                        {
                            type: "boolean"
                        }
                    ],
                    default: {}
                },
                type: {
                    $ref: "http://json-schema.org/draft-04/schema#/properties/type"
                },
                items: {
                    anyOf: [
                        {
                            $ref: "#/definitions/schema"
                        },
                        {
                            type: "array",
                            minItems: 1,
                            items: {
                                $ref: "#/definitions/schema"
                            }
                        }
                    ],
                    default: {}
                },
                allOf: {
                    type: "array",
                    minItems: 1,
                    items: {
                        $ref: "#/definitions/schema"
                    }
                },
                properties: {
                    type: "object",
                    additionalProperties: {
                        $ref: "#/definitions/schema"
                    },
                    default: {}
                },
                discriminator: {
                    type: "string"
                },
                readOnly: {
                    type: "boolean",
                    default: false
                },
                xml: {
                    $ref: "#/definitions/xml"
                },
                externalDocs: {
                    $ref: "#/definitions/externalDocs"
                },
                example: {}
            },
            additionalProperties: false
        },
        fileSchema: {
            type: "object",
            description: "A deterministic version of a JSON Schema object.",
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            },
            required: [
                "type"
            ],
            properties: {
                format: {
                    type: "string"
                },
                title: {
                    $ref: "http://json-schema.org/draft-04/schema#/properties/title"
                },
                description: {
                    $ref: "http://json-schema.org/draft-04/schema#/properties/description"
                },
                default: {
                    $ref: "http://json-schema.org/draft-04/schema#/properties/default"
                },
                required: {
                    $ref: "http://json-schema.org/draft-04/schema#/definitions/stringArray"
                },
                type: {
                    type: "string",
                    enum: [
                        "file"
                    ]
                },
                readOnly: {
                    type: "boolean",
                    default: false
                },
                externalDocs: {
                    $ref: "#/definitions/externalDocs"
                },
                example: {}
            },
            additionalProperties: false
        },
        primitivesItems: {
            type: "object",
            additionalProperties: false,
            properties: {
                type: {
                    type: "string",
                    enum: [
                        "string",
                        "number",
                        "integer",
                        "boolean",
                        "array"
                    ]
                },
                format: {
                    type: "string"
                },
                items: {
                    $ref: "#/definitions/primitivesItems"
                },
                collectionFormat: {
                    $ref: "#/definitions/collectionFormat"
                },
                default: {
                    $ref: "#/definitions/default"
                },
                maximum: {
                    $ref: "#/definitions/maximum"
                },
                exclusiveMaximum: {
                    $ref: "#/definitions/exclusiveMaximum"
                },
                minimum: {
                    $ref: "#/definitions/minimum"
                },
                exclusiveMinimum: {
                    $ref: "#/definitions/exclusiveMinimum"
                },
                maxLength: {
                    $ref: "#/definitions/maxLength"
                },
                minLength: {
                    $ref: "#/definitions/minLength"
                },
                pattern: {
                    $ref: "#/definitions/pattern"
                },
                maxItems: {
                    $ref: "#/definitions/maxItems"
                },
                minItems: {
                    $ref: "#/definitions/minItems"
                },
                uniqueItems: {
                    $ref: "#/definitions/uniqueItems"
                },
                enum: {
                    $ref: "#/definitions/enum"
                },
                multipleOf: {
                    $ref: "#/definitions/multipleOf"
                }
            },
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            }
        },
        security: {
            type: "array",
            items: {
                $ref: "#/definitions/securityRequirement"
            },
            uniqueItems: true
        },
        securityRequirement: {
            type: "object",
            additionalProperties: {
                type: "array",
                items: {
                    type: "string"
                },
                uniqueItems: true
            }
        },
        xml: {
            type: "object",
            additionalProperties: false,
            properties: {
                name: {
                    type: "string"
                },
                namespace: {
                    type: "string"
                },
                prefix: {
                    type: "string"
                },
                attribute: {
                    type: "boolean",
                    default: false
                },
                wrapped: {
                    type: "boolean",
                    default: false
                }
            },
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            }
        },
        tag: {
            type: "object",
            additionalProperties: false,
            required: [
                "name"
            ],
            properties: {
                name: {
                    type: "string"
                },
                description: {
                    type: "string"
                },
                externalDocs: {
                    $ref: "#/definitions/externalDocs"
                }
            },
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            }
        },
        securityDefinitions: {
            type: "object",
            additionalProperties: {
                oneOf: [
                    {
                        $ref: "#/definitions/basicAuthenticationSecurity"
                    },
                    {
                        $ref: "#/definitions/apiKeySecurity"
                    },
                    {
                        $ref: "#/definitions/oauth2ImplicitSecurity"
                    },
                    {
                        $ref: "#/definitions/oauth2PasswordSecurity"
                    },
                    {
                        $ref: "#/definitions/oauth2ApplicationSecurity"
                    },
                    {
                        $ref: "#/definitions/oauth2AccessCodeSecurity"
                    }
                ]
            }
        },
        basicAuthenticationSecurity: {
            type: "object",
            additionalProperties: false,
            required: [
                "type"
            ],
            properties: {
                type: {
                    type: "string",
                    enum: [
                        "basic"
                    ]
                },
                description: {
                    type: "string"
                }
            },
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            }
        },
        apiKeySecurity: {
            type: "object",
            additionalProperties: false,
            required: [
                "type",
                "name",
                "in"
            ],
            properties: {
                type: {
                    type: "string",
                    enum: [
                        "apiKey"
                    ]
                },
                name: {
                    type: "string"
                },
                in: {
                    type: "string",
                    enum: [
                        "header",
                        "query"
                    ]
                },
                description: {
                    type: "string"
                }
            },
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            }
        },
        oauth2ImplicitSecurity: {
            type: "object",
            additionalProperties: false,
            required: [
                "type",
                "flow",
                "authorizationUrl"
            ],
            properties: {
                type: {
                    type: "string",
                    enum: [
                        "oauth2"
                    ]
                },
                flow: {
                    type: "string",
                    enum: [
                        "implicit"
                    ]
                },
                scopes: {
                    $ref: "#/definitions/oauth2Scopes"
                },
                authorizationUrl: {
                    type: "string",
                    format: "uri"
                },
                description: {
                    type: "string"
                }
            },
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            }
        },
        oauth2PasswordSecurity: {
            type: "object",
            additionalProperties: false,
            required: [
                "type",
                "flow",
                "tokenUrl"
            ],
            properties: {
                type: {
                    type: "string",
                    enum: [
                        "oauth2"
                    ]
                },
                flow: {
                    type: "string",
                    enum: [
                        "password"
                    ]
                },
                scopes: {
                    $ref: "#/definitions/oauth2Scopes"
                },
                tokenUrl: {
                    type: "string",
                    format: "uri"
                },
                description: {
                    type: "string"
                }
            },
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            }
        },
        oauth2ApplicationSecurity: {
            type: "object",
            additionalProperties: false,
            required: [
                "type",
                "flow",
                "tokenUrl"
            ],
            properties: {
                type: {
                    type: "string",
                    enum: [
                        "oauth2"
                    ]
                },
                flow: {
                    type: "string",
                    enum: [
                        "application"
                    ]
                },
                scopes: {
                    $ref: "#/definitions/oauth2Scopes"
                },
                tokenUrl: {
                    type: "string",
                    format: "uri"
                },
                description: {
                    type: "string"
                }
            },
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            }
        },
        oauth2AccessCodeSecurity: {
            type: "object",
            additionalProperties: false,
            required: [
                "type",
                "flow",
                "authorizationUrl",
                "tokenUrl"
            ],
            properties: {
                type: {
                    type: "string",
                    enum: [
                        "oauth2"
                    ]
                },
                flow: {
                    type: "string",
                    enum: [
                        "accessCode"
                    ]
                },
                scopes: {
                    $ref: "#/definitions/oauth2Scopes"
                },
                authorizationUrl: {
                    type: "string",
                    format: "uri"
                },
                tokenUrl: {
                    type: "string",
                    format: "uri"
                },
                description: {
                    type: "string"
                }
            },
            patternProperties: {
                "^x-": {
                    $ref: "#/definitions/vendorExtension"
                }
            }
        },
        oauth2Scopes: {
            type: "object",
            additionalProperties: {
                type: "string"
            }
        },
        mediaTypeList: {
            type: "array",
            items: {
                $ref: "#/definitions/mimeType"
            },
            uniqueItems: true
        },
        parametersList: {
            type: "array",
            description: "The parameters needed to send a valid API call.",
            additionalItems: false,
            items: {
                oneOf: [
                    {
                        $ref: "#/definitions/parameter"
                    },
                    {
                        $ref: "#/definitions/jsonReference"
                    }
                ]
            },
            uniqueItems: true
        },
        schemesList: {
            type: "array",
            description: "The transfer protocol of the API.",
            items: {
                type: "string",
                enum: [
                    "http",
                    "https",
                    "ws",
                    "wss"
                ]
            },
            uniqueItems: true
        },
        collectionFormat: {
            type: "string",
            enum: [
                "csv",
                "ssv",
                "tsv",
                "pipes"
            ],
            default: "csv"
        },
        collectionFormatWithMulti: {
            type: "string",
            enum: [
                "csv",
                "ssv",
                "tsv",
                "pipes",
                "multi"
            ],
            default: "csv"
        },
        title: {
            $ref: "http://json-schema.org/draft-04/schema#/properties/title"
        },
        description: {
            $ref: "http://json-schema.org/draft-04/schema#/properties/description"
        },
        default: {
            $ref: "http://json-schema.org/draft-04/schema#/properties/default"
        },
        multipleOf: {
            $ref: "http://json-schema.org/draft-04/schema#/properties/multipleOf"
        },
        maximum: {
            $ref: "http://json-schema.org/draft-04/schema#/properties/maximum"
        },
        exclusiveMaximum: {
            $ref: "http://json-schema.org/draft-04/schema#/properties/exclusiveMaximum"
        },
        minimum: {
            $ref: "http://json-schema.org/draft-04/schema#/properties/minimum"
        },
        exclusiveMinimum: {
            $ref: "http://json-schema.org/draft-04/schema#/properties/exclusiveMinimum"
        },
        maxLength: {
            $ref: "http://json-schema.org/draft-04/schema#/definitions/positiveInteger"
        },
        minLength: {
            $ref: "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"
        },
        pattern: {
            $ref: "http://json-schema.org/draft-04/schema#/properties/pattern"
        },
        maxItems: {
            $ref: "http://json-schema.org/draft-04/schema#/definitions/positiveInteger"
        },
        minItems: {
            $ref: "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"
        },
        uniqueItems: {
            $ref: "http://json-schema.org/draft-04/schema#/properties/uniqueItems"
        },
        enum: {
            $ref: "http://json-schema.org/draft-04/schema#/properties/enum"
        },
        jsonReference: {
            type: "object",
            required: [
                "$ref"
            ],
            additionalProperties: false,
            properties: {
                $ref: {
                    type: "string"
                }
            }
        }
    }
};