{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://usemakoto.dev/schema/v0.2/profile-dialect.schema.json",
  "$vocabulary": {
    "https://json-schema.org/draft/2020-12/vocab/core": true,
    "https://json-schema.org/draft/2020-12/vocab/applicator": true,
    "https://json-schema.org/draft/2020-12/vocab/validation": true,
    "https://json-schema.org/draft/2020-12/vocab/meta-data": true,
    "https://json-schema.org/draft/2020-12/vocab/format-annotation": true,
    "https://json-schema.org/draft/2020-12/vocab/content": true,
    "https://json-schema.org/draft/2020-12/vocab/unevaluated": true,
    "https://usemakoto.dev/vocab/v0.2/bounded-pattern": true
  },
  "$dynamicAnchor": "meta",
  "title": "Makoto v0.2 Organizational Profile Dialect",
  "type": "object",
  "required": ["$schema", "$id"],
  "allOf": [{ "$ref": "#/$defs/schemaObject" }],
  "$defs": {
    "nonnegativeInteger": { "type": "integer", "minimum": 0 },
    "schemaObject": {
      "type": "object",
      "properties": {
        "$schema": {
          "const": "https://usemakoto.dev/schema/v0.2/profile-dialect.schema.json"
        },
        "$id": { "type": "string", "minLength": 1, "maxLength": 4096 },
        "$comment": { "type": "string" },
        "$ref": { "type": "string" },
        "$defs": { "$ref": "#/$defs/schemaMap" },
        "$anchor": {
          "type": "string",
          "pattern": "^[A-Za-z_][-A-Za-z0-9._]*$"
        },
        "type": {
          "oneOf": [
            {
              "enum": ["null", "boolean", "object", "array", "number", "string", "integer"]
            },
            {
              "type": "array",
              "minItems": 1,
              "uniqueItems": true,
              "items": {
                "enum": ["null", "boolean", "object", "array", "number", "string", "integer"]
              }
            }
          ]
        },
        "enum": { "type": "array", "minItems": 1 },
        "const": true,
        "multipleOf": { "type": "number", "exclusiveMinimum": 0 },
        "maximum": { "type": "number" },
        "exclusiveMaximum": { "type": "number" },
        "minimum": { "type": "number" },
        "exclusiveMinimum": { "type": "number" },
        "maxLength": { "$ref": "#/$defs/nonnegativeInteger" },
        "minLength": { "$ref": "#/$defs/nonnegativeInteger" },
        "makotoPattern": { "type": "string", "maxLength": 65536 },
        "maxItems": { "$ref": "#/$defs/nonnegativeInteger" },
        "minItems": { "$ref": "#/$defs/nonnegativeInteger" },
        "uniqueItems": { "type": "boolean" },
        "maxContains": { "$ref": "#/$defs/nonnegativeInteger" },
        "minContains": { "$ref": "#/$defs/nonnegativeInteger" },
        "maxProperties": { "$ref": "#/$defs/nonnegativeInteger" },
        "minProperties": { "$ref": "#/$defs/nonnegativeInteger" },
        "required": {
          "type": "array",
          "items": { "type": "string" },
          "uniqueItems": true
        },
        "dependentRequired": {
          "type": "object",
          "additionalProperties": {
            "type": "array",
            "items": { "type": "string" },
            "uniqueItems": true
          }
        },
        "allOf": { "$ref": "#/$defs/schemaArray" },
        "anyOf": { "$ref": "#/$defs/schemaArray" },
        "oneOf": { "$ref": "#/$defs/schemaArray" },
        "not": { "$ref": "#/$defs/nestedSchema" },
        "if": { "$ref": "#/$defs/nestedSchema" },
        "then": { "$ref": "#/$defs/nestedSchema" },
        "else": { "$ref": "#/$defs/nestedSchema" },
        "properties": { "$ref": "#/$defs/schemaMap" },
        "additionalProperties": { "$ref": "#/$defs/nestedSchema" },
        "unevaluatedProperties": { "$ref": "#/$defs/nestedSchema" },
        "propertyNames": { "$ref": "#/$defs/nestedSchema" },
        "dependentSchemas": { "$ref": "#/$defs/schemaMap" },
        "prefixItems": { "$ref": "#/$defs/schemaArray" },
        "items": { "$ref": "#/$defs/nestedSchema" },
        "contains": { "$ref": "#/$defs/nestedSchema" },
        "unevaluatedItems": { "$ref": "#/$defs/nestedSchema" },
        "title": { "type": "string" },
        "description": { "type": "string" },
        "default": true,
        "deprecated": { "type": "boolean" },
        "readOnly": { "type": "boolean" },
        "writeOnly": { "type": "boolean" },
        "examples": { "type": "array" },
        "contentEncoding": { "type": "string" },
        "contentMediaType": { "type": "string" },
        "contentSchema": { "$ref": "#/$defs/nestedSchema" },
        "format": { "type": "string" }
      },
      "additionalProperties": false
    },
    "nestedSchema": {
      "oneOf": [
        { "type": "boolean" },
        {
          "allOf": [
            { "$ref": "#/$defs/schemaObject" },
            {
              "not": {
                "anyOf": [
                  { "required": ["$schema"] },
                  { "required": ["$id"] },
                  { "required": ["$vocabulary"] }
                ]
              }
            }
          ]
        }
      ]
    },
    "schemaArray": {
      "type": "array",
      "minItems": 1,
      "items": { "$ref": "#/$defs/nestedSchema" }
    },
    "schemaMap": {
      "type": "object",
      "additionalProperties": { "$ref": "#/$defs/nestedSchema" }
    }
  }
}
