json_schema: {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "definitions": {
          "BindingChange": {
              "properties": {
                  "conditions": {
                      "description": "An array of function names that will be executed as conditions.",
                      "items": {
                          "type": "string"
                      },
                      "type": "array"
                  },
                  "moveBetweenElementTags": {
                      "description": "Move property value between owner's element tags.",
                      "type": "boolean"
                  },
                  "name": {
                      "description": "Name of the input/output property to change",
                      "type": "string"
                  },
                  "owner": {
                      "$ref": "#/definitions/TemplateElement",
                      "description": "Component that emits the output or accepts the input"
                  },
                  "remove": {
                      "description": "Remove directive/component/property",
                      "type": "boolean"
                  },
                  "replaceWith": {
                      "description": "Replace original selector/property with new one",
                      "type": "string"
                  },
                  "valueTransform": {
                      "description": "A function that transforms the value of an Input",
                      "type": "string"
                  }
              },
              "required": [
                  "name",
                  "owner"
              ],
              "type": "object"
          },
          "ElementType": {
              "enum": [
                  "component",
                  "directive"
              ],
              "type": "string"
          },
          "TemplateElement": {
              "properties": {
                  "selector": {
                      "description": "Original selector to apply change to",
                      "type": "string"
                  },
                  "type": {
                      "$ref": "#/definitions/ElementType",
                      "description": "Type of selector the change applies to - either component or directive"
                  }
              },
              "required": [
                  "selector",
                  "type"
              ],
              "type": "object"
          }
      },
      "properties": {
          "changes": {
              "description": "An array of changes to input/output properties",
              "items": {
                  "$ref": "#/definitions/BindingChange"
              },
              "type": "array"
          }
      },
      "required": [
          "changes"
      ],
      "type": "object"
  }