{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:junexis:schema:provider:0.1",
  "title": "Junexis provider manifest 0.1",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schemaVersion",
    "id",
    "version",
    "abiVersion",
    "factoryType",
    "resourceKind",
    "capabilities",
    "sdk",
    "artifact"
  ],
  "properties": {
    "schemaVersion": { "const": "junexis.provider/0.1" },
    "id": {
      "type": "string",
      "pattern": "^[A-Za-z_][A-Za-z0-9_]*(\\.[A-Za-z_][A-Za-z0-9_]*)+$"
    },
    "version": {
      "type": "string",
      "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(?:-(?:0|[1-9][0-9]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*)(?:\\.(?:0|[1-9][0-9]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*))*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$"
    },
    "abiVersion": { "const": "junexis.storage.runtime/0.1" },
    "factoryType": { "type": "string", "minLength": 3 },
    "resourceKind": { "const": "storage" },
    "capabilities": {
      "type": "array",
      "uniqueItems": true,
      "items": {
        "enum": [
          "read",
          "write",
          "transactions",
          "health",
          "native-sql",
          "migrations",
          "query-plan",
          "mutation-plan"
        ]
      }
    },
    "sdk": {
      "type": "object",
      "additionalProperties": false,
      "required": ["packageId", "version"],
      "properties": {
        "packageId": { "const": "Junexis.Storage.Runtime.Abstractions" },
        "version": { "const": "0.1.0" }
      }
    },
    "artifact": {
      "type": "object",
      "additionalProperties": false,
      "required": ["assembly", "targetFramework"],
      "properties": {
        "assembly": { "type": "string", "pattern": "^[A-Za-z0-9_.-]+\\.dll$" },
        "targetFramework": { "const": "net10.0" }
      }
    }
  }
}
