{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "CAMP Config",
  "description": "Optional settings for this asset tree, read from config.camp.yml at the root of the assets folder. Without the file camp fetches every resource group and uses its built-in cache lifetimes.",
  "type": "object",
  "properties": {
    "min_version": {
      "type": "string",
      "pattern": "^v?[0-9]+\\.[0-9]+\\.[0-9]+",
      "description": "Refuse to run a camp older than this. A camp built from source is never refused - only a released version is compared - so this stops an old release, not a colleague running from a checkout."
    },
    "disable_resource_groups": {
      "type": "array",
      "description": "Resource groups not to fetch. Everything is fetched unless it is listed here. Disabling a group also disables everything under it, so disabling organizations disables all of them, and disabling collections takes boards with it.",
      "items": {
        "type": "string",
        "enum": [
          "organizations",
          "signals",
          "items",
          "integrations",
          "collections",
          "boards",
          "createddatasets",
          "receiveddatasets",
          "users",
          "labelgroups"
        ]
      }
    },
    "cache_ttl": {
      "type": "object",
      "description": "How long a fetched list stays fresh, as a Go duration such as 3h or 90m. \"default\" covers anything not named. Only whole lists can be set; one resource's own data is not configurable.",
      "properties": {
        "default": {
          "type": "string",
          "pattern": "^([0-9]+(\\.[0-9]+)?(ns|us|ms|s|m|h))+$"
        },
        "organizations": {
          "type": "string",
          "pattern": "^([0-9]+(\\.[0-9]+)?(ns|us|ms|s|m|h))+$"
        },
        "items": {
          "type": "string",
          "pattern": "^([0-9]+(\\.[0-9]+)?(ns|us|ms|s|m|h))+$"
        },
        "integrations": {
          "type": "string",
          "pattern": "^([0-9]+(\\.[0-9]+)?(ns|us|ms|s|m|h))+$"
        },
        "signals": {
          "type": "string",
          "pattern": "^([0-9]+(\\.[0-9]+)?(ns|us|ms|s|m|h))+$"
        },
        "collections": {
          "type": "string",
          "pattern": "^([0-9]+(\\.[0-9]+)?(ns|us|ms|s|m|h))+$"
        },
        "boards": {
          "type": "string",
          "pattern": "^([0-9]+(\\.[0-9]+)?(ns|us|ms|s|m|h))+$"
        },
        "datasets": {
          "type": "string",
          "pattern": "^([0-9]+(\\.[0-9]+)?(ns|us|ms|s|m|h))+$"
        },
        "members": {
          "type": "string",
          "pattern": "^([0-9]+(\\.[0-9]+)?(ns|us|ms|s|m|h))+$"
        },
        "labelgroups": {
          "type": "string",
          "pattern": "^([0-9]+(\\.[0-9]+)?(ns|us|ms|s|m|h))+$"
        }
      },
      "additionalProperties": false
    },
    "editor_support": {
      "type": "boolean",
      "description": "Whether CAMP keeps the files that make an editor understand this tree: the types and schemas under .camp/, and the tsconfig and editor settings that point at them. Nothing CAMP does needs them, so turning this off costs an editor rather than a run. Written when CAMP sets a repository up; absent means yes."
    }
  },
  "additionalProperties": false
}
