{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "title": "JSON Schema for AsyncAPI tool discovery file.",
    "type": "object",
    "additionalProperties": false,
    "required": [
        "title",
        "filters"
    ],
    "properties": {
        "title": {
            "type": "string",
            "description": "Human-readable name of the tool that will be visible to people in the list of tools.",
            "examples": [
                "AsyncAPI Generator",
                "Cupid"
            ]
        },
        "description": {
            "type": "string",
            "description": "By default scripts read description of repository there project is stored. You can override this behaviour by providing custom description."
        },
        "links": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "websiteUrl": {
                    "type": "string",
                    "description": "You can provide URL to the website where your project hosts some demo or project landing page.",
                    "format": "uri"
                },
                "docsUrl": {
                    "type": "string",
                    "description": "You can provide URL to project documentation in case you have more than just a readme file.",
                    "format": "uri"
                },
                "repoUrl": {
                    "type": "string",
                    "description": "You can provide URL to project codebase in case you have more than one tool present inside single repository.",
                    "format": "uri"
                }
            }
        },
        "filters": {
            "type": "object",
            "additionalProperties": false,
            "required": [
                "categories"
            ],
            "properties": {
                "language": {
                    "description": "The language referred to is the runtime language selected by the user, not the generator or library language. For example, the Generator written in JavaScript generates Python code from the JavaScript template and the result of generation is a Python app, so the language for Generator is specified as Python. But for the Bundler library, users need to know if it can be integrated into their TypeScript codebase, so its language is specified as TypeScript. If some language in the schema's enum is omitted, it can be added through a pull request to the AsyncAPI website repository.",
                    "anyOf": [
                        {
                            "type": "string",
                            "anyOf": [
                                {
                                    "type": "string",
                                    "enum": [
                                        "Go",
                                        "Java",
                                        "JavaScript",
                                        "HTML",
                                        "C/C++",
                                        "C#",
                                        "Python",
                                        "TypeScript",
                                        "Kotlin",
                                        "Scala",
                                        "Markdown",
                                        "YAML",
                                        "R",
                                        "Rubby",
                                        "Rust",
                                        "Shell",
                                        "Groovy"
                                    ]
                                },
                                {
                                    "type": "string"
                                }
                            ]
                        },
                        {
                            "type": "array",
                            "items": {
                                "type": "string",
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "Go",
                                            "Java",
                                            "JavaScript",
                                            "HTML",
                                            "C/C++",
                                            "C#",
                                            "Python",
                                            "TypeScript",
                                            "Kotlin",
                                            "Scala",
                                            "Markdown",
                                            "YAML",
                                            "R",
                                            "Rubby",
                                            "Rust",
                                            "Shell",
                                            "Groovy"
                                        ]
                                    },
                                    {
                                        "type": "string"
                                    }
                                ]    
                            }
                        }
                    ]
                },
                "technology": {
                    "type": "array",
                    "description": "Provide a list of different technologies used in the tool. Put details useful for tool user and tool contributor.",
                    "items": {
                        "type": "string",
                        "anyOf": [
                            {
                                "type": "string",
                                "enum": [
                                    "Node js",
                                    "Hermes",
                                    "React JS",
                                    ".NET",
                                    "ASP.NET",
                                    "Springboot",
                                    "AWS",
                                    "Docker",
                                    "Node-red",
                                    "Maven",
                                    "Saas",
                                    "Kubernetes-native",
                                    "Scala",
                                    "Azure",
                                    "Jenkins",
                                    "Flask"
                                ]
                            },
                            {
                                "type": "string"
                            }
                        ]
                    },
                    "examples": [
                        "Express.js",
                        "Kafka"
                    ]
                },
                "categories": {
                    "type": "array",
                    "description": "Categories are used to group tools by different use case, like documentation or code generation. If have a list of fixed categories. If you use different one that your tool lands under \"other\" category. Feel free to add your category through a pull request to AsyncAPI website repository.",
                    "items": {
                        "type": "string",
                        "anyOf": [
                            {
                                "type": "string",
                                "enum": [
                                    "api",
                                    "code-first",
                                    "code-generator",
                                    "converter",
                                    "directory",
                                    "documentation-generator",
                                    "editor",
                                    "ui-component",
                                    "dsl",
                                    "framework",
                                    "github-action",
                                    "mocking-and-testing",
                                    "validator",
                                    "compare-tool",
                                    "other",
                                    "cli",
                                    "bundler",
                                    "ide-extension"
                                ]
                            },
                            {
                                "type": "string"
                            }
                        ]
                    },
                    "minItems": 1,
                    "examples": [
                        "api",
                        "code-first",
                        "code-generator",
                        "converter",
                        "directory",
                        "documentation-generator",
                        "editor",
                        "ui-component",
                        "dsl",
                        "framework",
                        "github-action",
                        "mocking-and-testing",
                        "validator",
                        "compare-tool",
                        "other",
                        "cli",
                        "bundler",
                        "ide-extension"
                    ]
                },
                "hasCommercial": {
                    "type": "boolean",
                    "description": "Indicate if your tool is open source or commercial offering, like SAAS for example",
                    "default": false
                }
            }
        }
    }
}