{
  "title": "JSON schema for API history blocks in Electron documentation",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$comment": "If you change this schema, remember to edit the TypeScript interfaces in the linting script.",
  "definitions": {
    "baseChangeSchema": {
      "type": "object",
      "properties": {
        "pr-url": {
          "description": "URL to the 'main' GitHub Pull Request for the change (i.e. not a backport PR)",
          "type": "string", "pattern": "^https://github.com/electron/electron/pull/\\d+$",
          "examples": [ "https://github.com/electron/electron/pull/26789" ]
        },
        "breaking-changes-header": {
          "description": "Heading ID for the change in `electron/docs/breaking-changes.md`",
          "type": "string", "minLength": 3,
          "examples": [ "deprecated-browserwindowsettrafficlightpositionposition" ]
        },
        "description": {
          "description": "Short description of the change",
          "type": "string", "minLength": 3, "maxLength": 120,
          "examples": [ "Made `trafficLightPosition` option work for `customButtonOnHover`." ]
        }
      },
      "required": [ "pr-url" ],
      "additionalProperties": false
    },
    "addedChangeSchema": {
      "allOf": [ { "$ref": "#/definitions/baseChangeSchema" } ]
    },
    "deprecatedChangeSchema": {
      "$comment": "TODO: Make 'breaking-changes-header' required in the future.",
      "allOf": [ { "$ref": "#/definitions/baseChangeSchema" } ]
    },
    "changesChangeSchema": {
      "$comment": "Unlike RFC, added `'type': 'object'` to appease AJV strict mode",
      "allOf": [ { "$ref": "#/definitions/baseChangeSchema" }, { "type": "object", "required": [ "description" ] } ]
    }
  },
  "type": "object",
  "properties": {
    "added": { "type": "array", "minItems": 1, "maxItems": 1, "items": { "$ref": "#/definitions/addedChangeSchema" } },
    "deprecated": { "type": "array", "minItems": 1, "maxItems": 1, "items": { "$ref": "#/definitions/deprecatedChangeSchema" } },
    "changes": { "type": "array", "minItems": 1, "items": { "$ref": "#/definitions/changesChangeSchema" } }
  },
  "additionalProperties": false
}
