{
  "$schema": "http://json-schema.org/draft-07/schema",
  "definitions": {
    "object_check": {
      "type": "object",
      "dependencies": {
        "additionalProperties": ["type"]
      },
      "additionalProperties": {
        "anyOf": [
          { "type": "object", "$ref": "#/definitions/object_check" },
          { "type": "array", "$ref": "#/definitions/array_check" },
          { "type": "string" },
          { "type": "boolean" },
          { "type": "number" },
          { "type": "integer" }
        ]
      },
      "properties": {
        "title": {
          "type": "string",
          "pattern": "^([A-Z0-9][a-z0-9\\.\\\\\\(\\)]*(| ))*$"
        },
        "defaultSnippets": {
          "type": "array",
          "title": "default Snippets",
          "items": {
            "type": "object",
            "required": ["label", "body"],
            "examples": [{ "label": "example", "body": {} }],
            "properties": {
              "label": { "type": "string" },
              "body": { "type": ["object", "string", "array", "number", "boolean", "integer"] }
            }
          }
        }
      }
    },
    "array_check": {
      "items": {
        "anyOf": [
          { "type": "object", "$ref": "#/definitions/object_check" },
          { "type": "array", "$ref": "#/definitions/array_check" },
          { "type": "string" },
          { "type": "boolean" },
          { "type": "number" },
          { "type": "integer" }
        ]
      }
    }
  },
  "anyOf": [
    { "type": "object", "$ref": "#/definitions/object_check" },
    { "type": "array", "$ref": "#/definitions/array_check" },
    { "type": "string" },
    { "type": "boolean" },
    { "type": "number" },
    { "type": "integer" }
  ]
}
