{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "title": "Solidarity",
    "description": "A rule-set and config for the Solidarity JSON checker",
    "type": "object",
    "properties": {
        "config": {
            "output": {
                "description": "Identify what kind output should happen when a check is called",
                "type": "string",
                "enum": [
                    "moderate",
                    "verbose",
                    "silent"
                ]
            }
        },
        "requirements": {
            "description": "List of requirement rules for your particular environment",
            "type": "object",
            "additionalProperties": {
                "type": "array",
                "items": {
                    "type": "object",
                    "oneOf": [
                        {
                            "$ref": "#/definitions/cli"
                        },
                        {
                            "$ref": "#/definitions/dir"
                        },
                        {
                            "$ref": "#/definitions/file"
                        },
                        {
                            "$ref": "#/definitions/env"
                        },
                        {
                            "$ref": "#/definitions/shell"
                        },
                        {
                            "$ref": "#/definitions/custom"
                        }
                    ]
                },
                "minItems": 1,
                "_uniqueItems": true
            }
        }
    },
    "required": [
        "requirements"
    ],
    "definitions": {
        "cli": {
            "description": "CLI Rule",
            "type": "object",
            "properties": {
                "rule": {
                    "enum": [
                        "cli"
                    ]
                },
                "binary": {
                    "type": "string"
                },
                "semver": {
                    "type": "string"
                },
                "version": {
                    "type": "string"
                },
                "line": {
                    "type": [
                        "string",
                        "integer"
                    ]
                },
                "matchIndex": {
                    "type": "integer"
                },
                "platform": {
                    "enum": [
                        "darwin",
                        "macos",
                        "freebsd",
                        "linux",
                        "sunos",
                        "win32",
                        "windows"
                    ]
                },
                "error": {
                    "type": "string"
                },
                "ci": {
                    "type": "boolean"
                },
                "fix": {
                    "type": "string"
                }
            },
            "required": [
                "rule",
                "binary"
            ]
        },
        "dir": {
            "description": "Dir Rule",
            "type": "object",
            "properties": {
                "rule": {
                    "enum": [
                        "dir",
                        "directory"
                    ]
                },
                "platform": {
                    "enum": [
                        "darwin",
                        "macos",
                        "freebsd",
                        "linux",
                        "sunos",
                        "win32",
                        "windows"
                    ]
                },
                "error": {
                    "type": "string"
                },
                "ci": {
                    "type": "boolean"
                },
                "fix": {
                    "type": "string"
                }
            },
            "required": [
                "rule",
                "location"
            ]
        },
        "file": {
            "description": "File Rule",
            "type": "object",
            "properties": {
                "rule": {
                    "enum": [
                        "file"
                    ]
                },
                "platform": {
                    "enum": [
                        "darwin",
                        "macos",
                        "freebsd",
                        "linux",
                        "sunos",
                        "win32",
                        "windows"
                    ]
                },
                "error": {
                    "type": "string"
                },
                "ci": {
                    "type": "boolean"
                },
                "fix": {
                    "type": "string"
                }
            },
            "required": [
                "rule",
                "location"
            ]
        },
        "env": {
            "description": "ENV Rule",
            "type": "object",
            "properties": {
                "rule": {
                    "enum": [
                        "env"
                    ]
                },
                "platform": {
                    "enum": [
                        "darwin",
                        "macos",
                        "freebsd",
                        "linux",
                        "sunos",
                        "win32",
                        "windows"
                    ]
                },
                "error": {
                    "type": "string"
                },
                "ci": {
                    "type": "boolean"
                },
                "fix": {
                    "type": "string"
                }
            },
            "required": [
                "rule",
                "variable"
            ]
        },
        "shell": {
            "description": "Shell Rule",
            "type": "object",
            "properties": {
                "rule": {
                    "enum": [
                        "shell"
                    ]
                },
                "platform": {
                    "enum": [
                        "darwin",
                        "macos",
                        "freebsd",
                        "linux",
                        "sunos",
                        "win32",
                        "windows"
                    ]
                },
                "error": {
                    "type": "string"
                },
                "ci": {
                    "type": "boolean"
                },
                "match": {
                    "type": "string",
                    "description": "A regexp to search the output."
                },
                "fix": {
                    "type": "string"
                }
            },
            "required": [
                "rule",
                "match"
            ]
        },
        "custom": {
            "description": "Custom Rule",
            "type": "object",
            "additionalProperties": true,
            "properties": {
                "rule": {
                    "enum": [
                        "custom"
                    ]
                },
                "plugin": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "platform": {
                    "enum": [
                        "darwin",
                        "macos",
                        "freebsd",
                        "linux",
                        "sunos",
                        "win32",
                        "windows"
                    ]
                },
                "error": {
                    "type": "string"
                },
                "ci": {
                    "type": "boolean"
                },
                "match": {
                    "type": "string",
                    "description": "A regexp to search the output."
                },
                "fix": {
                    "type": "string"
                }
            },
            "required": [
                "rule",
                "plugin",
                "name"
            ]
        }
    }
}