PSRule-options.schema.json

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "title": "PSRule options",
    "description": "A schema for PSRule YAML options files.",
    "$ref": "#/definitions/options",
    "definitions": {
        "configuration": {
            "type": "object",
            "title": "Configuration values",
            "description": "A set of key/ value configuration options for rules.",
            "markdownDescription": "A set of key/ value configuration options for rules. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#configuration)",
            "defaultSnippets": [
                {
                    "label": "Configuration value",
                    "body": {
                        "${1:Key}": "${2:Value}"
                    }
                }
            ]
        },
        "convention-option": {
            "type": "object",
            "title": "Convention options",
            "description": "Options that configure conventions.",
            "properties": {
                "include": {
                    "type": "array",
                    "title": "Include conventions",
                    "description": "An ordered list of conventions to include.",
                    "items": {
                        "type": "string"
                    },
                    "uniqueItems": true
                }
            },
            "additionalProperties": false
        },
        "binding-option": {
            "type": "object",
            "title": "Object binding",
            "description": "Configure property/ object binding options.",
            "properties": {
                "field": {
                    "type": "object",
                    "title": "Field",
                    "description": "Custom fields to bind.",
                    "markdownDescription": "Custom fields to bind. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#bindingfield)",
                    "additionalProperties": {
                        "type": "array",
                        "description": "A custom field to bind.",
                        "markdownDescription": "Custom field to bind. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#bindingfield)",
                        "items": {
                            "type": "string"
                        },
                        "uniqueItems": true
                    }
                },
                "ignoreCase": {
                    "type": "boolean",
                    "title": "Ignore case",
                    "description": "Determines if custom binding uses ignores case when matching properties. The default is true.",
                    "markdownDescription": "Determines if custom binding uses ignores case when matching properties. The default is `true`. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#bindingignorecase)",
                    "default": true
                },
                "nameSeparator": {
                    "type": "string",
                    "title": "Name separator",
                    "description": "Configures the separator to use for building a qualified name. The default is '/'.",
                    "markdownDescription": "Configures the separator to use for building a qualified name. The default is `/`. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#bindingnameseparator)",
                    "default": "/"
                },
                "preferTargetInfo": {
                    "type": "boolean",
                    "title": "Prefer target info",
                    "description": "Determines if binding prefers target info provided by the object over custom configuration. The default is false.",
                    "markdownDescription": "Determines if binding prefers target info provided by the object over custom configuration. The default is `false`. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#bindingprefertargetinfo)",
                    "default": false
                },
                "targetName": {
                    "type": "array",
                    "title": "Bind TargetName",
                    "description": "Specifies one or more property names to bind TargetName to.",
                    "markdownDescription": "Specifies one or more property names to bind TargetName to. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#bindingtargetname)",
                    "items": {
                        "type": "string"
                    },
                    "uniqueItems": true
                },
                "targetType": {
                    "type": "array",
                    "title": "Bind TargetType",
                    "description": "Specifies one or more property names to bind TargetType to.",
                    "markdownDescription": "Specifies one or more property names to bind TargetType to. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#bindingtargettype)",
                    "items": {
                        "type": "string"
                    },
                    "uniqueItems": true
                },
                "useQualifiedName": {
                    "type": "boolean",
                    "title": "Use qualified name",
                    "description": "Determines if a qualified TargetName is used. The default is false.",
                    "markdownDescription": "Determines if a qualified TargetName is used. The default is `false`. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#bindingusequalifiedname)",
                    "default": false
                }
            },
            "additionalProperties": false
        },
        "execution-option": {
            "type": "object",
            "title": "Execution options",
            "description": "Options that affect rule execution.",
            "properties": {
                "languageMode": {
                    "type": "string",
                    "title": "Language mode",
                    "description": "The PowerShell language mode to use for rule execution. The default is FullLanguage.",
                    "markdownDescription": "The PowerShell language mode to use for rule execution. The default is `FullLanguage`. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#executionlanguagemode)",
                    "enum": [
                        "FullLanguage",
                        "ConstrainedLanguage"
                    ],
                    "default": "FullLanguage"
                },
                "inconclusiveWarning": {
                    "type": "boolean",
                    "title": "Warn on inconclusive rules",
                    "description": "Enable or disable warnings for inconclusive rules. The default is true.",
                    "markdownDescription": "Enable or disable warnings for inconclusive rules. The default is `true`. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#executioninconclusivewarning)",
                    "default": true
                },
                "notProcessedWarning": {
                    "type": "boolean",
                    "title": "Warn on unprocessed objects",
                    "description": "Enable or disable warnings for objects that are not processed by any rule. The default is true.",
                    "markdownDescription": "Enable or disable warnings for objects that are not processed by any rule. The default is `true`. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#executionnotprocessedwarning)",
                    "default": true
                }
            },
            "additionalProperties": false
        },
        "include-option": {
            "type": "object",
            "title": "Include options",
            "description": "Options that affect source locations imported for execution.",
            "properties": {
                "module": {
                    "type": "array",
                    "title": "Include module",
                    "description": "Automatically include rules and resources from the specified modules.",
                    "markdownDescription": "Automatically include rules and resources from the specified modules. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#includemodule)",
                    "items": {
                        "type": "string",
                        "title": "Include module",
                        "description": "Automatically include rules and resources from the specified modules.",
                        "markdownDescription": "Automatically include rules and resources from the specified modules. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#includemodule)"
                    },
                    "uniqueItems": true
                },
                "path": {
                    "type": "array",
                    "title": "Include path",
                    "description": "Automatically include rules and resources from the specified paths.",
                    "markdownDescription": "Automatically include rules and resources from the specified paths. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#includepath)",
                    "items": {
                        "type": "string",
                        "title": "Include path",
                        "description": "Automatically include rules and resources from the specified paths.",
                        "markdownDescription": "Automatically include rules and resources from the specified paths. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#includepath)"
                    },
                    "uniqueItems": true
                }
            },
            "additionalProperties": false
        },
        "input-option": {
            "type": "object",
            "title": "Input options",
            "description": "Options that affect how input types are processed.",
            "properties": {
                "format": {
                    "type": "string",
                    "title": "Input format",
                    "description": "The input string format. The default is Detect, which will try to detect the format when the -InputPath parameter is used.",
                    "markdownDescription": "The input string format. The default is `Detect`, which will try to detect the format when the `-InputPath` parameter is used. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#inputformat)",
                    "enum": [
                        "None",
                        "Yaml",
                        "Json",
                        "Markdown",
                        "PowerShellData",
                        "File",
                        "Detect"
                    ],
                    "default": "Detect"
                },
                "ignoreGitPath": {
                    "type": "boolean",
                    "title": "Ignore .git path",
                    "description": "Determine if files within the .git path are ignored when the -InputPath parameter is used.",
                    "markdownDescription": "Determine if files within the `.git` path are ignored when the `-InputPath` parameter is used. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#inputignoregitpath)",
                    "default": true
                },
                "ignoreRepositoryCommon": {
                    "type": "boolean",
                    "title": "Ignore common files",
                    "description": "Determine if common repository files are ignored when the -InputPath parameter is used.",
                    "markdownDescription": "Determine if common repository files are ignored when the `-InputPath` parameter is used. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#inputignorerepositorycommon)",
                    "default": true
                },
                "objectPath": {
                    "type": "string",
                    "title": "Object path",
                    "description": "The object path to a property to use instead of the pipeline object.",
                    "markdownDescription": "The object path to a property to use instead of the pipeline object. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#inputobjectpath)"
                },
                "pathIgnore": {
                    "type": "array",
                    "title": "Path ignore",
                    "description": "Ignores input files that match the path spec.",
                    "markdownDescription": "Ignores input files that match the path spec. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#inputpathignore)",
                    "items": {
                        "type": "string"
                    },
                    "uniqueItems": true
                },
                "targetType": {
                    "type": "array",
                    "title": "Target type",
                    "description": "Only process objects that match one of the included types.",
                    "markdownDescription": "Only process objects that match one of the included types. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#inputtargettype)",
                    "items": {
                        "type": "string"
                    },
                    "uniqueItems": true
                }
            },
            "additionalProperties": false
        },
        "logging-option": {
            "type": "object",
            "title": "Logging options",
            "description": "Options for configuring information logging.",
            "properties": {
                "limitDebug": {
                    "type": "array",
                    "title": "Scopes for debug messages",
                    "description": "Limits debug messages to a list of named debug scopes. No scopes are set by default.",
                    "markdownDescription": "Limits debug messages to a list of named debug scopes. No scopes are set by default. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#logginglimitdebug)",
                    "items": {
                        "type": "string"
                    },
                    "uniqueItems": true
                },
                "limitVerbose": {
                    "type": "array",
                    "title": "Scopes for verbose messages",
                    "description": "Limits verbose messages to a list of named verbose scopes. No scopes are set by default.",
                    "markdownDescription": "Limits verbose messages to a list of named verbose scopes. No scopes are set by default. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#logginglimitverbose)",
                    "items": {
                        "type": "string"
                    },
                    "uniqueItems": true
                },
                "ruleFail": {
                    "type": "string",
                    "title": "Report fail to stream",
                    "description": "Log fail outcomes for each rule to a specific informational stream. The default is None.",
                    "markdownDescription": "Log fail outcomes for each rule to a specific informational stream. The default is `None`. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#loggingrulefail)",
                    "enum": [
                        "None",
                        "Error",
                        "Warning",
                        "Information"
                    ],
                    "default": "None"
                },
                "rulePass": {
                    "type": "string",
                    "title": "Report pass to stream",
                    "description": "Log pass outcomes for each rule to a specific informational stream. The default is None.",
                    "markdownDescription": "Log pass outcomes for each rule to a specific informational stream. The default is `None`. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#loggingrulepass)",
                    "enum": [
                        "None",
                        "Error",
                        "Warning",
                        "Information"
                    ],
                    "default": "None"
                }
            },
            "additionalProperties": false
        },
        "suppression-option": {
            "type": "object",
            "title": "Suppress rules",
            "description": "Specifies suppression rules.",
            "markdownDescription": "Specifies suppression rules. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#suppression)",
            "uniqueItems": true,
            "additionalProperties": {
                "oneOf": [
                    {
                        "type": "array",
                        "title": "Suppressed rule",
                        "description": "The name of the rule to suppress.",
                        "markdownDescription": "The name of the rule to suppress. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#suppression)",
                        "items": {
                            "type": "string",
                            "title": "Suppress when",
                            "description": "Suppress the rule on TargetNames to suppress.",
                            "markdownDescription": "Suppress the rule on TargetNames to suppress. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#suppression)"
                        },
                        "uniqueItems": true
                    },
                    {
                        "type": "object",
                        "title": "Suppressed rule",
                        "description": "The name of the rule to suppress.",
                        "markdownDescription": "The name of the rule to suppress. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#suppression)",
                        "properties": {
                            "targetName": {
                                "type": "array",
                                "title": "Suppress when",
                                "description": "One or more TargetNames to suppress.",
                                "markdownDescription": "One or more TargetNames to suppress. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#suppression)",
                                "items": {
                                    "type": "string"
                                },
                                "uniqueItems": true
                            }
                        },
                        "additionalProperties": false,
                        "required": [
                            "targetName"
                        ]
                    }
                ]
            }
        },
        "output-option": {
            "type": "object",
            "title": "Output options",
            "description": "Options that affect how output is generated.",
            "properties": {
                "as": {
                    "type": "string",
                    "title": "Result type",
                    "description": "Determine if detailed or summary results are generated. The default is Detail.",
                    "markdownDescription": "Determine if detailed or summary results are generated. The default is `Detail`. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#outputas)",
                    "enum": [
                        "Detail",
                        "Summary"
                    ],
                    "default": "Detail"
                },
                "banner": {
                    "title": "Banner format",
                    "description": "The information displayed for Assert-PSRule banner. The default is Default which includes Title, Source, and SupportLinks.",
                    "markdownDescription": "The information displayed for Assert-PSRule banner. The default is `Default` which includes `Title`, `Source`, and `SupportLinks`. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#outputbanner)",
                    "oneOf": [
                        {
                            "type": "string",
                            "enum": [
                                "None",
                                "Title",
                                "Source",
                                "SupportLinks",
                                "Default",
                                "Minimal"
                            ]
                        },
                        {
                            "type": "integer"
                        }
                    ],
                    "default": "Default"
                },
                "culture": {
                    "type": "array",
                    "title": "Culture",
                    "description": "One or more cultures to use for generating output. When multiple cultures are specified, the first matching culture will be used. By default, the current PowerShell culture is used.",
                    "markdownDescription": "One or more cultures to use for generating output. When multiple cultures are specified, the first matching culture will be used. By default, the current PowerShell culture is used. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#outputculture)",
                    "items": {
                        "type": "string",
                        "description": "A culture for generating output.",
                        "minLength": 2
                    },
                    "uniqueItems": true,
                    "defaultSnippets": [
                        {
                            "label": "en-AU",
                            "bodyText": [
                                "en-AU"
                            ]
                        },
                        {
                            "label": "en-US",
                            "bodyText": [
                                "en-US"
                            ]
                        },
                        {
                            "label": "en-GB",
                            "bodyText": [
                                "en-GB"
                            ]
                        }
                    ]
                },
                "encoding": {
                    "type": "string",
                    "title": "Encoding",
                    "description": "The encoding to use when writing results to file. The default is Default, UTF-8 without BOM.",
                    "markdownDescription": "The encoding to use when writing results to file. The default is `Default`, UTF-8 without BOM. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#outputencoding)",
                    "enum": [
                        "Default",
                        "UTF8",
                        "UTF7",
                        "Unicode",
                        "UTF32",
                        "ASCII"
                    ],
                    "default": "Default"
                },
                "footer": {
                    "title": "Footer format",
                    "description": "The information displayed for Assert-PSRule footer. The default is Default which includes RuleCount, and RunInfo.",
                    "markdownDescription": "The information displayed for Assert-PSRule footer. The default is `Default` which includes `RuleCount`, and `RunInfo`. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#outputfooter)",
                    "oneOf": [
                        {
                            "type": "string",
                            "enum": [
                                "None",
                                "RuleCount",
                                "RunInfo",
                                "Default"
                            ]
                        },
                        {
                            "type": "integer"
                        }
                    ],
                    "default": "Default"
                },
                "format": {
                    "type": "string",
                    "title": "Output format",
                    "description": "The output format to use when returning results. The default is None.",
                    "markdownDescription": "The output format to use when returning results. The default is `None`. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#outputformat)",
                    "enum": [
                        "None",
                        "Yaml",
                        "Json",
                        "Markdown",
                        "NUnit3",
                        "Csv",
                        "Wide"
                    ],
                    "default": "None"
                },
                "outcome": {
                    "type": "string",
                    "title": "Output outcome",
                    "description": "The outcome of rule results to return. The default is Processed.",
                    "markdownDescription": "The outcome of rule results to return. The default is `Processed`. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#outputoutcome)",
                    "enum": [
                        "None",
                        "Fail",
                        "Pass",
                        "Error",
                        "Processed",
                        "All"
                    ],
                    "default": "Processed"
                },
                "path": {
                    "type": "string",
                    "title": "Output path",
                    "description": "The file path location to save results.",
                    "markdownDescription": "The file path location to save results. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#outputpath)"
                },
                "style": {
                    "type": "string",
                    "title": "Output Style",
                    "description": "The style that results will be presented in. The default is Detect.",
                    "markdownDescription": "The style that results will be presented in. The default is `Detect`. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#outputstyle)",
                    "enum": [
                        "Client",
                        "Plain",
                        "AzurePipelines",
                        "GitHubActions",
                        "VisualStudioCode",
                        "Detect"
                    ],
                    "default": "Detect"
                },
                "jsonIndent": {
                    "type": "number",
                    "title": "Output Json Indent",
                    "description": "The indentation level for JSON output. The default is 0.",
                    "markdownDescription": "The indentation level for JSON output. The default is `0`. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#outputjsonindent)",
                    "minimum": 0,
                    "maximum": 4,
                    "default": 0
                }
            },
            "additionalProperties": false
        },
        "options": {
            "properties": {
                "binding": {
                    "type": "object",
                    "oneOf": [
                        {
                            "$ref": "#/definitions/binding-option"
                        }
                    ]
                },
                "configuration": {
                    "type": "object",
                    "oneOf": [
                        {
                            "$ref": "#/definitions/configuration"
                        }
                    ]
                },
                "convention": {
                    "type": "object",
                    "$ref": "#/definitions/convention-option"
                },
                "execution": {
                    "type": "object",
                    "oneOf": [
                        {
                            "$ref": "#/definitions/execution-option"
                        }
                    ]
                },
                "include": {
                    "type": "object",
                    "$ref": "#/definitions/include-option"
                },
                "input": {
                    "type": "object",
                    "oneOf": [
                        {
                            "$ref": "#/definitions/input-option"
                        }
                    ]
                },
                "logging": {
                    "type": "object",
                    "oneOf": [
                        {
                            "$ref": "#/definitions/logging-option"
                        }
                    ]
                },
                "output": {
                    "type": "object",
                    "$ref": "#/definitions/output-option"
                },
                "requires": {
                    "type": "object",
                    "$ref": "#/definitions/requires"
                },
                "rule": {
                    "type": "object",
                    "oneOf": [
                        {
                            "$ref": "#/definitions/rule-option"
                        }
                    ]
                },
                "suppression": {
                    "type": "object",
                    "oneOf": [
                        {
                            "$ref": "#/definitions/suppression-option"
                        }
                    ]
                }
            },
            "additionalProperties": false
        },
        "requires": {
            "type": "object",
            "title": "Required modules",
            "description": "Specifies the required version of a module to use.",
            "markdownDescription": "Specifies the required version of a module to use. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#requires)",
            "additionalProperties": {
                "type": "string",
                "title": "Version constraint",
                "description": "Specifies a module to constrain to a specific version.",
                "markdownDescription": "Specifies a module to constrain to a specific version. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#requires)",
                "pattern": "^(@pre |@prerelease )?(((?:^|~|\\>=|\\>|=|\\<=|\\<)?v?(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)(?:\\s|\\s?\\|\\|\\s?)?){1,}$"
            },
            "defaultSnippets": [
                {
                    "label": "Version constraint",
                    "body": {
                        "${1:Module}": "${2:'>=1.0.0'}"
                    }
                }
            ]
        },
        "rule-option": {
            "type": "object",
            "title": "Baseline options",
            "description": "Options that include/ exclude and configure rules.",
            "properties": {
                "include": {
                    "type": "array",
                    "title": "Include rules",
                    "description": "Optionally filter to rules by name.",
                    "markdownDescription": "Optionally filter to rules by name. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#ruleinclude)",
                    "$ref": "#/definitions/rule-names"
                },
                "includeLocal": {
                    "type": "boolean",
                    "title": "Include local",
                    "description": "Automatically include all local rules in the search path unless they have been explicitly excluded.",
                    "markdownDescription": "Automatically include all local rules in the search path unless they have been explicitly excluded. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#ruleincludelocal)",
                    "default": false
                },
                "exclude": {
                    "type": "array",
                    "title": "Exclude rules",
                    "description": "Specifies rules to exclude by name.",
                    "markdownDescription": "Specifies rules to exclude by name. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#ruleexclude)",
                    "$ref": "#/definitions/rule-names"
                },
                "tag": {
                    "type": "object",
                    "title": "Tags",
                    "description": "Require rules to have the following tags.",
                    "markdownDescription": "Require rules to have the following tags. [See help](https://microsoft.github.io/PSRule/concepts/PSRule/en-US/about_PSRule_Options.html#ruletag)",
                    "additionalProperties": {
                        "oneOf": [
                            {
                                "type": "string",
                                "description": "A required tag."
                            },
                            {
                                "type": "array",
                                "description": "A required tag.",
                                "items": {
                                    "type": "string"
                                },
                                "uniqueItems": true
                            }
                        ]
                    }
                }
            },
            "additionalProperties": false
        },
        "rule-names": {
            "type": "array",
            "items": {
                "type": "string",
                "$ref": "#/definitions/rule-name"
            },
            "uniqueItems": true
        },
        "rule-name": {
            "type": "string",
            "minLength": 3
        }
    }
}