{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "ComponentArrayRead",
  "description": "Component array read model that represents a component with its configuration and metadata",
  "required": [
    "id",
    "type",
    "name",
    "description",
    "version",
    "categories",
    "hasUI",
    "hasRun",
    "flags",
    "features",
    "documentationUrl"
  ],
  "properties": {
    "id": {
      "description": "Unique identifier of the component",
      "type": "string",
      "example": "keboola.ex-db-mysql"
    },
    "type": {
      "description": "Type of the component",
      "type": "string",
      "enum": [
        "extractor",
        "writer",
        "application",
        "transformation"
      ]
    },
    "name": {
      "description": "Display name of the component",
      "type": "string",
      "example": "MySQL Database Extractor"
    },
    "description": {
      "description": "Short description of the component",
      "type": "string",
      "example": "Extracts data from MySQL database"
    },
    "longDescription": {
      "description": "Detailed description of the component",
      "type": "string",
      "nullable": true
    },
    "version": {
      "description": "Version number of the component",
      "type": "integer",
      "example": 2
    },
    "complexity": {
      "description": "Complexity level of the component",
      "type": "string",
      "nullable": true,
      "enum": [
        "low",
        "medium",
        "high"
      ]
    },
    "categories": {
      "description": "List of component categories",
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "extractor",
        "database"
      ]
    },
    "hasUI": {
      "description": "Whether the component has a user interface",
      "type": "boolean"
    },
    "hasRun": {
      "description": "Whether the component can be run",
      "type": "boolean"
    },
    "ico32": {
      "description": "32x32 icon URL",
      "type": "string",
      "nullable": true
    },
    "ico64": {
      "description": "64x64 icon URL",
      "type": "string",
      "nullable": true
    },
    "ico128": {
      "description": "128x128 icon URL",
      "type": "string",
      "nullable": true
    },
    "data": {
      "description": "Additional component data",
      "type": "object",
      "nullable": true,
      "additionalProperties": true
    },
    "flags": {
      "description": "List of component flags",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "configurationSchema": {
      "description": "JSON schema of the component configuration",
      "type": "object",
      "nullable": true
    },
    "configurationRowSchema": {
      "description": "JSON schema of the component configuration row",
      "type": "object",
      "nullable": true
    },
    "emptyConfiguration": {
      "description": "Default empty configuration",
      "type": "object",
      "nullable": true
    },
    "emptyConfigurationRow": {
      "description": "Default empty configuration row",
      "type": "object",
      "nullable": true
    },
    "createConfigurationRowSchema": {
      "description": "JSON schema for creating a new configuration row",
      "type": "object",
      "nullable": true
    },
    "uiOptions": {
      "description": "UI customization options",
      "type": "object",
      "nullable": true
    },
    "configurationDescription": {
      "description": "Description of the configuration structure",
      "type": "string",
      "nullable": true
    },
    "features": {
      "description": "List of component features",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "expiredOn": {
      "description": "Date when the component expires",
      "type": "string",
      "format": "date-time",
      "nullable": true
    },
    "uri": {
      "description": "URI of the component",
      "type": "string",
      "example": "https://connection.keboola.com/v2/storage/components/keboola.ex-db-mysql",
      "nullable": true
    },
    "documentationUrl": {
      "description": "URL to the component documentation",
      "type": "string"
    },
    "dataTypesConfiguration": {
      "description": "Configuration for data types",
      "type": "string",
      "nullable": true
    },
    "processorConfiguration": {
      "description": "Configuration for processor",
      "type": "string",
      "nullable": true
    }
  },
  "type": "object"
}