{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://www.espocrm.com/schema/metadata/selectDefs.json",
    "title": "selectDefs",
    "description": "Select framework definitions for a scope.",
    "type": "object",
    "properties": {
        "accessControlFilterClassNameMap": {
            "description": "Access control filters. Classes should implement Espo\\Core\\Select\\AccessControl\\Filter interface.",
            "type": "object",
            "properties": {
                "mandatory": {"type": "string"},
                "all": {"type": "string"},
                "onlyTeam": {"type": "string"},
                "onlyOwn": {"type": "string"},
                "portalAll": {"type": "string"},
                "portalOnlyAccount": {"type": "string"},
                "portalOnlyContact": {"type": "string"},
                "portalOnlyOwn": {"type": "string"}
            },
            "additionalProperties": {
                "type": "string",
                "description": "A filter."
            }
        },
        "primaryFilterClassNameMap": {
            "description": "Primary filters. Classes should implement Espo\\Core\\Select\\Primary\\Filter interface.",
            "type": "object",
            "additionalProperties": {
                "type": "string",
                "description": "A filter."
            }
        },
        "boolFilterClassNameMap": {
            "description": "Bool filters. Classes should implement Espo\\Core\\Select\\Bool\\Filter interface.",
            "type": "object",
            "additionalProperties": {
                "type": "string",
                "description": "A filter."
            }
        },
        "selectAttributesDependencyMap": {
            "description": "When a specific attribute is requested in the select parameter, attributes defined by the map will be selected.",
            "additionalProperties": {
                "type": "array",
                "items": {
                    "type": "string",
                    "description": "An attribute."
                }
            }
        },
        "whereItemConverterClassNameMap": {
            "description": "Implementations for custom where items. Classes should implement Espo\\Core\\Select\\Where\\ItemConverter interface. The key format: '{fieldName}_{conditionItemType}'.",
            "type": "object",
            "additionalProperties": {
                "type": "string",
                "description": "A key in `{fieldName}_{conditionItemType}` format."
            }
        },
        "accessControlFilterResolverClassName": {
            "description": "A resolver is responsible for choosing an access filter. Should implement Espo\\Core\\Select\\AccessControl\\FilterResolver interface.",
            "type": "string"
        },
        "textFilterClassName": {
            "description": "A class that processes the text filter search. Should implement Espo\\Core\\Select\\Text\\Filter interface.",
            "type": "string"
        },
        "orderItemConverterClassNameMap": {
            "description": "An order converter converts order parameters passed from the frontend to an order data acceptable for ORM. One can implement a custom converter for a specific field. Classes should implement Espo\\Core\\Select\\Order\\ItemConverter interface.",
            "type": "object",
            "additionalProperties": {
                "type": "string",
                "description": "A field."
            }
        },
        "ordererClassNameMap": {
            "description": "Provides the ability to apply custom order for a specific field. Classes should implement Espo\\Core\\Select\\Order\\Orderer interface.",
            "type": "object",
            "additionalProperties": {
                "type": "string",
                "description": "A field."
            }
        }
    }
}
