{
    "$schema": "http://json-schema.org/draft-07/schema",
    "definitions": {
        "IconVersions": {
            "type": "string",
            "enum": [
                "original",
                "plain",
                "line",
                "original-wordmark",
                "plain-wordmark",
                "line-wordmark"
            ]
        },
        "IconVersionsArray": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/IconVersions"
            }
        }
    },
    "type": "array",
    "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
            "name": {
                "type": "string",
                "title": "The official name of the technology.",
                "description": "Pattern: Only lower-case letters and digits.",
                "pattern": "^(dot-net|[0-9a-z]+)$"
            },
            "altnames": {
                "type": "array",
                "title": "List of alternative names for this technology.",
                "description": "Used for the searchbar on the Devicon website. https://devicon.dev",
                "uniqueItems": true,
                "items": {
                    "type": "string"
                }
            },
            "tags": {
                "type": "array",
                "title": "List of tags relating to the technology for categorization/search purpose.",
                "$ref": "./tags-enum.json/#/definitions/Tags"
            },
            "versions": {
                "title": "Keeps track of the different versions that you have.",
                "type": "object",
                "additionalProperties": false,
                "properties": {
                    "svg": {
                        "title": "List all the SVGs that you have.",
                        "contains": {
                            "$ref": "#/definitions/IconVersions"
                        },
                        "minItems": 1,
                        "uniqueItems": true,
                        "$ref": "#/definitions/IconVersionsArray"
                    },
                    "font": {
                        "title": "List only the SVGs that can be converted to fonts. Usually refers to \"plain\" and \"line\" versions but \"original\" can be accepted.",
                        "description": "DO NOT list aliases here! In this case use \"aliases\" property!",
                        "contains": {
                            "$ref": "#/definitions/IconVersions"
                        },
                        "minItems": 1,
                        "uniqueItems": true,
                        "$ref": "#/definitions/IconVersionsArray"
                    }
                }
            },
            "color": {
                "title": "The official/main hexadecimal color of the logo. [Case insensitive]",
                "description": "Pattern example: #FFFFFF",
                "type": "string",
                "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
                "format": "color"
            },
            "aliases": {
                "title": "Keeps track of the aliases for the font versions ONLY.",
                "description": "Can be empty, or contain objects, each with an alias and a base version. More info here: https://github.com/devicons/devicon/wiki/Updating-%60devicon.json%60#aliases-and-aliasobj",
                "type": "array",
                "items": {
                    "title": "AliasObj, an object containing an alias and a base version",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "base": {
                            "title": "The SVG file you are using as source for the alias.",
                            "$ref": "#/definitions/IconVersions"
                        },
                        "alias": {
                            "title": "The new name (alias) that you want to generate.",
                            "$ref": "#/definitions/IconVersions"
                        }
                    },
                    "required": [
                        "base",
                        "alias"
                    ],
                    "allOf": [
                        {
                            "if": {
                                "properties": {
                                    "base": {
                                        "const": "original"
                                    }
                                }
                            },
                            "then": {
                                "not": {
                                    "properties": {
                                        "alias": {
                                            "const": "original"
                                        }
                                    }
                                }
                            }
                        },
                        {
                            "if": {
                                "properties": {
                                    "base": {
                                        "const": "plain"
                                    }
                                }
                            },
                            "then": {
                                "not": {
                                    "properties": {
                                        "alias": {
                                            "const": "plain"
                                        }
                                    }
                                }
                            }
                        },
                        {
                            "if": {
                                "properties": {
                                    "base": {
                                        "const": "line"
                                    }
                                }
                            },
                            "then": {
                                "not": {
                                    "properties": {
                                        "alias": {
                                            "const": "line"
                                        }
                                    }
                                }
                            }
                        },
                        {
                            "if": {
                                "properties": {
                                    "base": {
                                        "const": "original-wordmark"
                                    }
                                }
                            },
                            "then": {
                                "not": {
                                    "properties": {
                                        "alias": {
                                            "const": "original-wordmark"
                                        }
                                    }
                                }
                            }
                        },
                        {
                            "if": {
                                "properties": {
                                    "base": {
                                        "const": "plain-wordmark"
                                    }
                                }
                            },
                            "then": {
                                "not": {
                                    "properties": {
                                        "alias": {
                                            "const": "plain-wordmark"
                                        }
                                    }
                                }
                            }
                        },
                        {
                            "if": {
                                "properties": {
                                    "base": {
                                        "const": "line-wordmark"
                                    }
                                }
                            },
                            "then": {
                                "not": {
                                    "properties": {
                                        "alias": {
                                            "const": "line-wordmark"
                                        }
                                    }
                                }
                            }
                        }
                    ]
                }
            }
        },
        "required": [
            "name",
            "altnames",
            "tags",
            "versions",
            "color",
            "aliases"
        ]
    }
}
