{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://gardener.style/schema/custom-build.schema.json",
  "title": "Gardener custom build result",
  "type": "object",
  "additionalProperties": false,
  "required": ["$schema", "schemaVersion", "gardenerVersion", "kind", "platform", "requestedComponents", "requestedPacks", "resolvedPacks", "includedComponents", "includeUtilities", "files", "css", "minCss", "sourceMap", "runtime", "adapters", "minifier", "compression", "outputIntegrity", "metrics"],
  "properties": {
    "$schema": { "type": "string" },
    "schemaVersion": { "const": 1 },
    "gardenerVersion": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$" },
    "kind": { "enum": ["platform", "components"] },
    "platform": { "type": ["string", "null"], "enum": ["web", "mobile", "desktop", "tauri", "electron", null] },
    "requestedComponents": { "$ref": "#/$defs/strings" },
    "requestedPacks": { "$ref": "#/$defs/strings" },
    "resolvedPacks": { "$ref": "#/$defs/nonEmptyStrings" },
    "includedComponents": { "$ref": "#/$defs/nonEmptyStrings" },
    "includeUtilities": { "type": "boolean" },
    "files": { "$ref": "#/$defs/nonEmptyStrings" },
    "css": { "type": "string", "minLength": 1 },
    "minCss": { "type": "string", "minLength": 1 },
    "sourceMap": { "type": "string", "pattern": "\\.min\\.css\\.map$" },
    "runtime": { "type": "string", "minLength": 1 },
    "adapters": { "$ref": "#/$defs/strings" },
    "minifier": { "$ref": "builds.schema.json#/$defs/minifier" },
    "compression": { "$ref": "builds.schema.json#/$defs/compression" },
    "outputIntegrity": {
      "type": "object",
      "minProperties": 3,
      "additionalProperties": { "$ref": "builds.schema.json#/$defs/integrity" }
    },
    "metrics": {
      "type": "object",
      "additionalProperties": false,
      "required": ["css", "minCss"],
      "properties": {
        "css": { "$ref": "builds.schema.json#/$defs/metrics" },
        "minCss": { "$ref": "builds.schema.json#/$defs/metrics" }
      }
    }
  },
  "$defs": {
    "strings": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
    "nonEmptyStrings": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } }
  }
}
