Schema: dam-inventory

{
  "$defs": {
    "entry": {
      "additionalProperties": false,
      "properties": {
        "ancestry": {
          "items": {
            "minLength": 1,
            "type": "string"
          },
          "type": "array"
        },
        "app_slug": {
          "type": [
            "string",
            "null"
          ]
        },
        "basename": {
          "minLength": 1,
          "type": "string"
        },
        "content_hash": {
          "pattern": "^[0-9a-f]{64}$",
          "type": "string"
        },
        "extension": {
          "type": "string"
        },
        "key": {
          "minLength": 1,
          "type": "string"
        },
        "modified_at": {
          "minLength": 1,
          "type": "string"
        },
        "parent": {
          "type": [
            "string",
            "null"
          ]
        },
        "relative_path": {
          "minLength": 1,
          "pattern": "^(templates|suites|static)(/[^/\\\\]+)*$",
          "type": "string"
        },
        "root": {
          "enum": [
            "templates",
            "suites",
            "static"
          ],
          "type": "string"
        },
        "semantic_role": {
          "minLength": 1,
          "type": "string"
        },
        "size_bytes": {
          "minimum": 0,
          "type": "integer"
        },
        "suite_name": {
          "type": [
            "string",
            "null"
          ]
        },
        "type": {
          "enum": [
            "file",
            "dir",
            "symlink"
          ],
          "type": "string"
        }
      },
      "required": [
        "root",
        "type",
        "basename",
        "relative_path",
        "parent",
        "ancestry",
        "extension",
        "key"
      ],
      "type": "object"
    },
    "path_map": {
      "additionalProperties": {
        "items": {
          "minLength": 1,
          "type": "string"
        },
        "type": "array"
      },
      "type": "object"
    }
  },
  "$id": "https://australis.systems/schemas/dam/dam-inventory.schema.json",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Strict schema for the Dynamic Assets Manager inventory manifest v1. Every path is portable and root-name-prefixed; no absolute path, drive letter or backslash separator is permitted.",
  "properties": {
    "ambiguities": {
      "additionalProperties": {
        "items": {
          "minLength": 1,
          "type": "string"
        },
        "type": "array"
      },
      "type": "object"
    },
    "counts": {
      "additionalProperties": false,
      "properties": {
        "directories": {
          "minimum": 0,
          "type": "integer"
        },
        "files": {
          "minimum": 0,
          "type": "integer"
        },
        "roots": {
          "minimum": 0,
          "type": "integer"
        },
        "symlinks": {
          "minimum": 0,
          "type": "integer"
        }
      },
      "required": [
        "files",
        "directories",
        "symlinks",
        "roots"
      ],
      "type": "object"
    },
    "entries": {
      "items": {
        "$ref": "#/$defs/entry"
      },
      "type": "array"
    },
    "generated_at": {
      "minLength": 1,
      "type": "string"
    },
    "generator": {
      "const": "dam/1",
      "type": "string"
    },
    "indexes": {
      "additionalProperties": false,
      "properties": {
        "by_basename": {
          "$ref": "#/$defs/path_map"
        },
        "by_category": {
          "$ref": "#/$defs/path_map"
        },
        "by_extension": {
          "$ref": "#/$defs/path_map"
        },
        "by_semantic_role": {
          "$ref": "#/$defs/path_map"
        },
        "by_suite_app": {
          "$ref": "#/$defs/path_map"
        }
      },
      "required": [
        "by_basename",
        "by_extension",
        "by_category"
      ],
      "type": "object"
    },
    "roots": {
      "items": {
        "enum": [
          "templates",
          "suites",
          "static"
        ],
        "type": "string"
      },
      "minItems": 1,
      "type": "array",
      "uniqueItems": true
    },
    "schema_version": {
      "const": "1.0.0",
      "type": "string"
    }
  },
  "required": [
    "schema_version",
    "generated_at",
    "generator",
    "roots",
    "counts",
    "entries",
    "indexes",
    "ambiguities"
  ],
  "title": "DAM Inventory Manifest",
  "type": "object"
}