{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "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"
        }
      },
      "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"
        }
      },
      "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"
        }
      },
      "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"
        }
      },
      "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."
        }
      },
      "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."
        }
      },
      "required": ["rule", "plugin", "name"]
    }
  },
  "description": "A rule-set and config for the Solidarity JSON checker",
  "id": "https://json.schemastore.org/solidaritySchema.json",
  "properties": {
    "config": {
      "type": "object",
      "properties": {
        "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"],
  "title": "Solidarity",
  "type": "object"
}
