{
  "$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"]
    }
  }
}
