{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "diff": {
      "type": "string",
      "description": "Unified diff (a/package.json, b/package.json) that `patch -p1` applies"
    },
    "updatedPackageJson": {
      "type": "string"
    },
    "packages": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "section": {
            "type": "string",
            "enum": [
              "dependencies",
              "devDependencies",
              "optionalDependencies"
            ]
          },
          "oldRange": {
            "type": "string"
          },
          "newRange": {
            "type": "string"
          },
          "oldVersion": {
            "type": [
              "string",
              "null"
            ]
          },
          "newVersion": {
            "type": [
              "string",
              "null"
            ]
          },
          "step": {
            "type": "string",
            "enum": [
              "none",
              "patch",
              "minor",
              "major"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "upgrade",
              "held",
              "current",
              "outside-focus",
              "skipped"
            ]
          },
          "publishedAt": {
            "description": "Release time of the new version (ISO 8601)",
            "type": [
              "string",
              "null"
            ]
          },
          "bestVersion": {
            "description": "The highest candidate version",
            "type": [
              "string",
              "null"
            ]
          },
          "skipReason": {
            "type": "string",
            "enum": [
              "non-semver-specifier",
              "open-ended",
              "complex-range",
              "unsupported-range",
              "prerelease",
              "invalid-value",
              "unknown-package",
              "lookup-failed"
            ]
          },
          "reasons": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "enum": [
                    "age-gate",
                    "engines",
                    "level-limit",
                    "peer",
                    "dependency",
                    "pulled-in"
                  ]
                },
                "message": {
                  "type": "string"
                },
                "version": {
                  "type": "string"
                },
                "ageDays": {
                  "type": "number"
                }
              },
              "required": [
                "kind",
                "message"
              ],
              "additionalProperties": false
            }
          },
          "explanation": {
            "type": "string",
            "description": "One sentence saying what happened to this package and why"
          }
        },
        "required": [
          "name",
          "section",
          "oldRange",
          "newRange",
          "oldVersion",
          "newVersion",
          "step",
          "status",
          "publishedAt",
          "bestVersion",
          "reasons",
          "explanation"
        ],
        "additionalProperties": false
      }
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "package": {
            "type": "string"
          }
        },
        "required": [
          "code",
          "message"
        ],
        "additionalProperties": false
      }
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Changes to the output file that are not package upgrades (e.g. the ripedeps entry)"
    },
    "meta": {
      "type": "object",
      "properties": {
        "settings": {
          "type": "object",
          "properties": {
            "minAgeDays": {
              "type": "object",
              "properties": {
                "value": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "source": {
                  "type": "string",
                  "enum": [
                    "request",
                    "file",
                    "default"
                  ]
                }
              },
              "required": [
                "value",
                "source"
              ],
              "additionalProperties": false
            },
            "maxBump": {
              "type": "object",
              "properties": {
                "value": {
                  "type": "string",
                  "enum": [
                    "patch",
                    "minor",
                    "major"
                  ],
                  "description": "Highest allowed step relative to the version in package.json"
                },
                "source": {
                  "type": "string",
                  "enum": [
                    "request",
                    "file",
                    "default"
                  ]
                }
              },
              "required": [
                "value",
                "source"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "minAgeDays",
            "maxBump"
          ],
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "source": {
              "type": "string",
              "enum": [
                "inline",
                "url"
              ]
            },
            "url": {
              "description": "Without query string and fragment",
              "type": "string"
            },
            "bytes": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "source",
            "bytes"
          ],
          "additionalProperties": false
        },
        "exact": {
          "type": "boolean",
          "description": "false when the solver budget was exhausted and the best solution found is returned"
        },
        "components": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991
        },
        "stale": {
          "type": "boolean",
          "description": "true when expired package metadata was served because revalidation failed"
        }
      },
      "required": [
        "settings",
        "input",
        "exact",
        "components",
        "stale"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "diff",
    "updatedPackageJson",
    "packages",
    "warnings",
    "notes",
    "meta"
  ],
  "additionalProperties": false,
  "description": "Plan response"
}
