PSRule-language.schema.json

{
  "$schema": "https://json-schema.org/draft-07/schema#",
  "$ref": "#/definitions/resource-v1",
  "definitions": {
    "resource-v1": {
      "oneOf": [
        {
          "$ref": "#/definitions/rule-v1"
        },
        {
          "$ref": "#/definitions/baseline-v1"
        },
        {
          "$ref": "#/definitions/moduleConfig-v1"
        },
        {
          "$ref": "#/definitions/selector-v1"
        },
        {
          "$ref": "#/definitions/suppressionGroup-v1"
        }
      ]
    },
    "resource-metadata": {
      "type": "object",
      "title": "Metadata",
      "description": "Additional information to identify the resource.",
      "properties": {
        "name": {
          "type": "string",
          "title": "Name",
          "description": "The name of the resource. This must be unique.",
          "$ref": "#/definitions/resourceName"
        },
        "annotations": {
          "type": "object",
          "title": "Annotations",
          "description": "Additional annotations for the resource.",
          "properties": {
            "obsolete": {
              "type": "boolean",
              "title": "Obsolete",
              "description": "A common annotation that flags the resource as obsolete.",
              "default": false
            }
          },
          "additionalProperties": true,
          "defaultSnippets": [
            {
              "label": "Annotation key/ value",
              "body": {
                "${1:Key}": "${2:Value}"
              }
            }
          ]
        },
        "tags": {
          "$ref": "#/definitions/resourceTags"
        }
      },
      "required": [
        "name"
      ]
    },
    "baseline-v1": {
      "type": "object",
      "title": "Baseline",
      "description": "A PSRule Baseline.",
      "markdownDescription": "A PSRule Baseline. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Baseline/)",
      "properties": {
        "apiVersion": {
          "type": "string",
          "title": "API Version",
          "description": "The API Version for the PSRule resources.",
          "enum": [
            "github.com/microsoft/PSRule/v1"
          ]
        },
        "kind": {
          "type": "string",
          "title": "Kind",
          "description": "A PSRule Baseline resource.",
          "markdownDescription": "A PSRule Baseline resource. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Baseline/)",
          "enum": [
            "Baseline"
          ]
        },
        "metadata": {
          "type": "object",
          "$ref": "#/definitions/resource-metadata"
        },
        "spec": {
          "type": "object",
          "$ref": "#/definitions/baselineSpec"
        }
      },
      "required": [
        "apiVersion",
        "kind",
        "metadata",
        "spec"
      ],
      "additionalProperties": false
    },
    "baselineSpec": {
      "type": "object",
      "title": "Spec",
      "description": "A specification for a baseline.",
      "markdownDescription": "A specification for a baseline. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Baseline/)",
      "properties": {
        "binding": {
          "$ref": "#/definitions/binding-option"
        },
        "configuration": {
          "$ref": "#/definitions/configuration"
        },
        "rule": {
          "type": "object",
          "title": "Rule",
          "description": "A filter for included or excluded rules.",
          "properties": {
            "include": {
              "type": "array",
              "title": "Include rules",
              "description": "Rules to include by name in the baseline.",
              "markdownDescription": "Rules to include by name in the baseline. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Options/#ruleinclude)",
              "items": {
                "type": "string",
                "$ref": "#/definitions/resourceNameReference"
              },
              "uniqueItems": true
            },
            "exclude": {
              "type": "array",
              "title": "Exclude rules",
              "description": "Rules to exclude by name from the baseline.",
              "markdownDescription": "Rules to exclude by name from the baseline. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Options/#ruleexclude)",
              "items": {
                "type": "string",
                "$ref": "#/definitions/resourceNameReference"
              },
              "uniqueItems": true
            },
            "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/v2/concepts/PSRule/en-US/about_PSRule_Options/#ruletag)",
              "additionalProperties": {
                "oneOf": [
                  {
                    "type": "string",
                    "description": "A required tag."
                  },
                  {
                    "type": "array",
                    "description": "A required tag.",
                    "items": {
                      "type": "string"
                    },
                    "uniqueItems": true
                  }
                ]
              }
            },
            "labels": {
              "type": "object",
              "title": "Labels",
              "description": "Require rules to have the following associated labels.",
              "markdownDescription": "Require rules to have the following associated labels.",
              "additionalProperties": {
                "oneOf": [
                  {
                    "type": "string",
                    "description": "A required reference."
                  },
                  {
                    "type": "array",
                    "description": "A required reference.",
                    "items": {
                      "type": "string"
                    },
                    "uniqueItems": true
                  }
                ]
              }
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "moduleConfig-v1": {
      "type": "object",
      "title": "ModuleConfig",
      "description": "A PSRule ModuleConfig.",
      "properties": {
        "apiVersion": {
          "type": "string",
          "title": "API Version",
          "description": "The API Version for the PSRule resources.",
          "enum": [
            "github.com/microsoft/PSRule/v1"
          ]
        },
        "kind": {
          "type": "string",
          "title": "Kind",
          "description": "A PSRule ModuleConfig resource.",
          "enum": [
            "ModuleConfig"
          ]
        },
        "metadata": {
          "type": "object",
          "$ref": "#/definitions/resource-metadata"
        },
        "spec": {
          "type": "object",
          "$ref": "#/definitions/moduleConfigSpec"
        }
      },
      "required": [
        "apiVersion",
        "kind",
        "metadata",
        "spec"
      ],
      "additionalProperties": false
    },
    "moduleConfigSpec": {
      "type": "object",
      "title": "Spec",
      "description": "A specification for a ModuleConfig.",
      "properties": {
        "binding": {
          "$ref": "#/definitions/binding-option"
        },
        "configuration": {
          "$ref": "#/definitions/configuration"
        },
        "convention": {
          "$ref": "#/definitions/convention-option"
        },
        "output": {
          "type": "object",
          "title": "Output options",
          "description": "Options that affect how output is generated.",
          "properties": {
            "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/v2/concepts/PSRule/en-US/about_PSRule_Options/#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"
                  ]
                }
              ]
            }
          },
          "additionalProperties": false
        },
        "rule": {
          "type": "object",
          "title": "Rule",
          "description": "A filter for included or excluded rules.",
          "properties": {
            "baseline": {
              "type": "string",
              "title": "Baseline",
              "description": "The name of a baseline to use.",
              "markdownDescription": "The name of a baseline to use. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Options/#rulebaseline)",
              "$ref": "#/definitions/resourceNameReference"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "resourceName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 128,
      "pattern": "^[^<>:/\\\\|?*\"'`+@._\\-\\x00-\\x1F][^<>:/\\\\|?*\"'`+@\\x00-\\x1F]{1,126}[^<>:/\\\\|?*\"'`+@._\\-\\x00-\\x1F]$"
    },
    "resourceNameReference": {
      "type": "string",
      "minLength": 3,
      "pattern": "^.*\\[^<>:/\\\\|?*\"'`+@._\\-\\x00-\\x1F][^<>:/\\\\|?*\"'`+@\\x00-\\x1F]{1,126}[^<>:/\\\\|?*\"'`+@._\\-\\x00-\\x1F]$"
    },
    "resourceTags": {
      "type": "object",
      "title": "Tags",
      "description": "Additional indexed key/ value pairs for the resource.",
      "additionalProperties": {
        "type": "string"
      },
      "defaultSnippets": [
        {
          "label": "Tag key/ value",
          "body": {
            "${1:Key}": "${2:Value}"
          }
        }
      ]
    },
    "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/v2/concepts/PSRule/en-US/about_PSRule_Options/#bindingfield)",
          "additionalProperties": {
            "type": "array",
            "description": "A custom field to bind.",
            "markdownDescription": "Custom field to bind. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Options/#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/v2/concepts/PSRule/en-US/about_PSRule_Options/#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/v2/concepts/PSRule/en-US/about_PSRule_Options/#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/v2/concepts/PSRule/en-US/about_PSRule_Options/#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/v2/concepts/PSRule/en-US/about_PSRule_Options/#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/v2/concepts/PSRule/en-US/about_PSRule_Options/#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/v2/concepts/PSRule/en-US/about_PSRule_Options/#bindingusequalifiedname)",
          "default": false
        }
      },
      "additionalProperties": false
    },
    "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/v2/concepts/PSRule/en-US/about_PSRule_Options/#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.",
          "markdownDescription": "An ordered list of conventions to include. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Options/#conventioninclude)",
          "items": {
            "type": "string"
          },
          "uniqueItems": true
        }
      },
      "additionalProperties": false
    },
    "selector-v1": {
      "type": "object",
      "title": "Selector",
      "description": "A selector resource.",
      "markdownDescription": "A selector resource. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Selectors/)",
      "properties": {
        "apiVersion": {
          "type": "string",
          "title": "API Version",
          "description": "The API Version for the PSRule resources.",
          "enum": [
            "github.com/microsoft/PSRule/v1"
          ]
        },
        "kind": {
          "type": "string",
          "title": "Kind",
          "description": "A PSRule Selector resource.",
          "enum": [
            "Selector"
          ]
        },
        "metadata": {
          "type": "object",
          "$ref": "#/definitions/resource-metadata"
        },
        "spec": {
          "type": "object",
          "$ref": "#/definitions/selectorSpec"
        }
      },
      "required": [
        "apiVersion",
        "kind",
        "metadata",
        "spec"
      ]
    },
    "selectorSpec": {
      "type": "object",
      "title": "Spec",
      "description": "The specification for a selector.",
      "markdownDescription": "The specification for a selector. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Selectors/)",
      "properties": {
        "if": {
          "type": "object",
          "title": "If",
          "description": "A condition is made up of one or more expressions that will determine if an object is selected by the selector.",
          "markdownDescription": "A condition is made up of one or more [expressions](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/) that will determine if an object is selected by the selector. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Selectors/)",
          "$ref": "#/definitions/expressions"
        }
      },
      "required": [
        "if"
      ],
      "additionalProperties": false
    },
    "suppressionGroup-v1": {
      "type": "object",
      "title": "SuppressionGroup",
      "description": "A PSRule Suppression Group",
      "markdownDescription": "A PSRule Suppression Group. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_SuppressionGroups/)",
      "properties": {
        "apiVersion": {
          "type": "string",
          "title": "API Version",
          "description": "The API Version for the PSRule resources.",
          "enum": [
            "github.com/microsoft/PSRule/v1"
          ]
        },
        "kind": {
          "type": "string",
          "title": "Kind",
          "description": "A PSRule SuppressionGroup resource.",
          "enum": [
            "SuppressionGroup"
          ]
        },
        "metadata": {
          "type": "object",
          "$ref": "#/definitions/resource-metadata"
        },
        "spec": {
          "type": "object",
          "$ref": "#/definitions/suppressionGroupSpec"
        }
      },
      "required": [
        "apiVersion",
        "kind",
        "metadata",
        "spec"
      ]
    },
    "suppressionGroupSpec": {
      "type": "object",
      "title": "Spec",
      "description": "PSRule Suppression Group specification.",
      "markdownDescription": "PSRule Suppression Group specification.",
      "properties": {
        "expiresOn": {
          "type": "string",
          "title": "Expires On",
          "description": "The date time that the suppression is valid until. After this date time, the suppression is ignored. When not set, the suppression does not expire. This RFC3339 (ISO 8601) formatted date time using the format yyyy-MM-ddTHH:mm:ssZ.",
          "markdownDescription": "The date time that the suppression is valid until. After this date time, the suppression is ignored. When not set, the suppression does not expire. This RFC3339 (ISO 8601) formatted date time using the format `yyyy-MM-ddTHH:mm:ssZ`.",
          "format": "date-time"
        },
        "rule": {
          "type": "array",
          "title": "Rule pre-condition",
          "description": "This only applies to rules that match the specified rule names.",
          "markdownDescription": "This only applies to rules that match the specified rule names.",
          "items": {
            "type": "string"
          },
          "uniqueItems": true
        },
        "if": {
          "type": "object",
          "$ref": "#/definitions/expressions"
        }
      },
      "required": [
        "if"
      ],
      "additionalProperties": false
    },
    "rule-v1": {
      "type": "object",
      "title": "Rule",
      "description": "A rule resource.",
      "markdownDescription": "A rule resource. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Rules/)",
      "properties": {
        "apiVersion": {
          "type": "string",
          "title": "API Version",
          "description": "The API Version for the PSRule resources.",
          "enum": [
            "github.com/microsoft/PSRule/v1"
          ]
        },
        "kind": {
          "type": "string",
          "title": "Kind",
          "description": "A rule resource.",
          "markdownDescription": "A rule resource. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Rules/)",
          "enum": [
            "Rule"
          ]
        },
        "metadata": {
          "type": "object",
          "$ref": "#/definitions/ruleMetadata"
        },
        "spec": {
          "type": "object",
          "$ref": "#/definitions/ruleSpec"
        }
      },
      "required": [
        "apiVersion",
        "kind",
        "metadata",
        "spec"
      ]
    },
    "ruleSpec": {
      "type": "object",
      "title": "Spec",
      "description": "The specification for the rule.",
      "markdownDescription": "The specification for the rule. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Rules/)",
      "properties": {
        "condition": {
          "type": "object",
          "title": "Condition",
          "description": "A condition is made up of one or more expressions that will determine if the rule passes or fails.",
          "markdownDescription": "A condition is made up of one or more [expressions](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/) that will determine if the rule passes or fails.\n\n[See help](https://microsoft.github.io/PSRule/v2/authoring/writing-rules/)",
          "oneOf": [
            {
              "$ref": "#/definitions/expressions"
            }
          ]
        },
        "level": {
          "type": "string",
          "title": "Level",
          "description": "If the rule fails, how serious is the result. By default this is set to Error.",
          "markdownDescription": "If the rule fails, how serious is the result. By default this is set to `Error`. [See help](https://microsoft.github.io/PSRule/v2/authoring/writing-rules/)",
          "enum": [
            "Error",
            "Warning",
            "Information"
          ],
          "default": "Error"
        },
        "type": {
          "type": "array",
          "title": "Type pre-condition",
          "description": "This rule only applies to objects that match the specifies types.",
          "items": {
            "type": "string",
            "default": ""
          },
          "uniqueItems": true
        },
        "with": {
          "type": "array",
          "title": "Selector pre-condition",
          "description": "This rule only applies to objects that match the specified selectors.",
          "items": {
            "type": "string",
            "default": ""
          },
          "uniqueItems": true
        },
        "where": {
          "type": "object",
          "title": "Sub-selector pre-condition",
          "description": "The rule only applies to objects that match the sub-selector condition.",
          "markdownDescription": "The rule only applies to objects that match the sub-selector condition.\n\n[See help](https://microsoft.github.io/PSRule/v2/expressions/sub-selectors/)",
          "oneOf": [
            {
              "$ref": "#/definitions/expressions"
            }
          ]
        }
      },
      "required": [
        "condition"
      ],
      "additionalProperties": false,
      "default": {
        "condition": {}
      }
    },
    "ruleMetadata": {
      "type": "object",
      "title": "Metadata",
      "description": "Additional information to identify the resource.",
      "properties": {
        "name": {
          "type": "string",
          "title": "Name",
          "description": "The name of the resource. This must be unique.",
          "$ref": "#/definitions/resourceName"
        },
        "ref": {
          "title": "Reference",
          "description": "An optional stable opaque identifier of this resource for lookup. This must be unique if set.",
          "$ref": "#/definitions/resourceName"
        },
        "annotations": {
          "type": "object",
          "title": "Annotations",
          "description": "Additional annotations for the resource.",
          "additionalProperties": true,
          "defaultSnippets": [
            {
              "label": "Annotation key/ value",
              "body": {
                "${1:Key}": "${2:Value}"
              }
            }
          ]
        },
        "alias": {
          "type": "array",
          "title": "Aliases",
          "description": "Alternative names this resource is known by.",
          "items": {
            "type": "string",
            "title": "Alias",
            "description": "An alternative name.",
            "$ref": "#/definitions/resourceName"
          },
          "uniqueItems": true
        },
        "tags": {
          "$ref": "#/definitions/resourceTags"
        },
        "labels": {
          "type": "object",
          "title": "Labels",
          "description": "Any taxonomy references.",
          "additionalProperties": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "defaultSnippets": [
            {
              "label": "Reference key/ value",
              "body": {
                "${1:Key}": "${2:Value}"
              }
            },
            {
              "label": "Reference key/ multi-value",
              "body": {
                "${1:Key}": [
                  "${2:Value}"
                ]
              }
            }
          ]
        }
      },
      "required": [
        "name"
      ]
    },
    "selectorExpressionValueMultiString": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          },
          "uniqueItems": true
        }
      ]
    },
    "selectorExpressionValue": {
      "oneOf": [
        {
          "type": "string",
          "ztitle": "Value from string",
          "zdescription": "A value to compare.",
          "default": ""
        },
        {
          "type": "boolean",
          "ztitle": "Value from boolean",
          "zdescription": "A value to compare.",
          "default": true
        },
        {
          "type": "integer",
          "ztitle": "Value from integer",
          "zdescription": "A value to compare.",
          "default": 0
        },
        {
          "type": "object",
          "ztitle": "Value for object",
          "zdescription": "A value to compare.",
          "not": {
            "propertyNames": {
              "enum": [
                "$"
              ]
            }
          }
        },
        {
          "$ref": "#/definitions/fn"
        }
      ]
    },
    "expressions": {
      "type": "object",
      "oneOf": [
        {
          "$ref": "#/definitions/expressions/definitions/operators/definitions/allOf"
        },
        {
          "$ref": "#/definitions/expressions/definitions/operators/definitions/anyOf"
        },
        {
          "$ref": "#/definitions/expressions/definitions/operators/definitions/not"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/exists"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/equals"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/notEquals"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/hasValue"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/match"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/notMatch"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/in"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/notIn"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/setOf"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/subset"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/count"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/notCount"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/less"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/lessOrEquals"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/greater"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/greaterOrEquals"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/startsWith"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/notStartsWith"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/endsWith"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/notEndsWith"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/contains"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/notContains"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/isString"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/isLower"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/isArray"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/isBoolean"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/isDateTime"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/isInteger"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/isNumeric"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/isUpper"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/hasSchema"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/version"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/hasDefault"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/withinPath"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/notWithinPath"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/like"
        },
        {
          "$ref": "#/definitions/expressions/definitions/conditions/definitions/notLike"
        }
      ],
      "defaultSnippets": [
        {
          "label": "field",
          "description": "The object path of a field to compare.",
          "markdownDescription": "The object path of a field to compare.",
          "body": {
            "field": "${1}"
          }
        },
        {
          "label": "value",
          "body": {
            "value": "${1}"
          }
        },
        {
          "label": "name",
          "body": {
            "name": "."
          }
        },
        {
          "label": "type",
          "body": {
            "type": "."
          }
        },
        {
          "label": "source",
          "body": {
            "source": "${1}"
          }
        },
        {
          "label": "allOf",
          "body": {
            "allOf": [
              "${1}"
            ]
          }
        },
        {
          "label": "anyOf",
          "body": {
            "anyOf": [
              "${1}"
            ]
          }
        },
        {
          "label": "not",
          "body": {
            "not": {}
          }
        }
      ],
      "definitions": {
        "operands": {
          "oneOf": [
            {
              "$ref": "#/definitions/expressions/definitions/operands/definitions/field"
            },
            {
              "$ref": "#/definitions/expressions/definitions/operands/definitions/value"
            },
            {
              "$ref": "#/definitions/expressions/definitions/operands/definitions/type"
            },
            {
              "$ref": "#/definitions/expressions/definitions/operands/definitions/name"
            },
            {
              "$ref": "#/definitions/expressions/definitions/operands/definitions/source"
            }
          ],
          "definitions": {
            "string-only": {
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands/definitions/field"
                },
                {
                  "$ref": "#/definitions/expressions/definitions/operands/definitions/value"
                },
                {
                  "$ref": "#/definitions/expressions/definitions/operands/definitions/type"
                },
                {
                  "$ref": "#/definitions/expressions/definitions/operands/definitions/name"
                },
                {
                  "$ref": "#/definitions/expressions/definitions/operands/definitions/source"
                }
              ]
            },
            "field": {
              "type": "object",
              "properties": {
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "where": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/where"
                }
              },
              "required": [
                "field"
              ]
            },
            "value": {
              "type": "object",
              "properties": {
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                }
              },
              "required": [
                "value"
              ]
            },
            "type": {
              "type": "object",
              "properties": {
                "type": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/type"
                }
              },
              "required": [
                "type"
              ]
            },
            "name": {
              "type": "object",
              "properties": {
                "name": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/name"
                }
              },
              "required": [
                "name"
              ]
            },
            "source": {
              "type": "object",
              "properties": {
                "source": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/source"
                }
              },
              "required": [
                "source"
              ]
            }
          }
        },
        "properties": {
          "oneOf": [
            {
              "$ref": "#/definitions/expressions/definitions/operands/definitions/field"
            },
            {
              "$ref": "#/definitions/expressions/definitions/operands/definitions/value"
            },
            {
              "$ref": "#/definitions/expressions/definitions/operands/definitions/name"
            },
            {
              "$ref": "#/definitions/expressions/definitions/operands/definitions/type"
            },
            {
              "$ref": "#/definitions/expressions/definitions/operands/definitions/source"
            }
          ],
          "definitions": {
            "field": {
              "type": "string",
              "title": "Field",
              "description": "The object path of a field to compare.",
              "markdownDescription": "The object path of a field to compare.\n\n[See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#field)",
              "minLength": 1
            },
            "where": {
              "type": "object",
              "title": "Sub-selector filter",
              "description": "Limits the condition to matching items.",
              "markdownDescription": "Limits the condition to matching items.\n\n[See help](https://microsoft.github.io/PSRule/v2/expressions/sub-selectors/)",
              "allOf": [
                {
                  "$ref": "#/definitions/expressions"
                }
              ]
            },
            "value": {
              "allOf": [
                {
                  "$ref": "#/definitions/selectorExpressionValue"
                }
              ]
            },
            "name": {
              "type": "string",
              "title": "Name",
              "description": "The target name of the object.",
              "markdownDescription": "The target name of the object. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#name)",
              "default": ".",
              "enum": [
                "."
              ]
            },
            "type": {
              "type": "string",
              "title": "Type",
              "description": "The target type of the object.",
              "markdownDescription": "The target type of the object. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#type)",
              "default": ".",
              "enum": [
                "."
              ]
            },
            "source": {
              "type": "string",
              "title": "Source",
              "description": "The source of the object currently being processed by the pipeline.",
              "markdownDescription": "The source of the object currently being processed by the pipeline. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#source)",
              "default": ""
            }
          }
        },
        "conditions": {
          "type": "object",
          "oneOf": [
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/exists"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/equals"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/notEquals"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/hasValue"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/match"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/notMatch"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/in"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/notIn"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/setOf"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/subset"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/count"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/notCount"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/less"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/lessOrEquals"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/greater"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/greaterOrEquals"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/startsWith"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/notStartsWith"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/endsWith"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/notEndsWith"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/contains"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/notContains"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/isString"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/isLower"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/isArray"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/isBoolean"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/isDateTime"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/isInteger"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/isNumeric"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/isUpper"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/hasSchema"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/version"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/hasDefault"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/withinPath"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/notWithinPath"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/like"
            },
            {
              "$ref": "#/definitions/expressions/definitions/conditions/definitions/notLike"
            }
          ],
          "definitions": {
            "equals": {
              "type": "object",
              "title": "equals",
              "description": "Must have the specified value.",
              "markdownDescription": "Must have the specified value.\n\n[See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#equals)",
              "properties": {
                "equals": {
                  "title": "Equals",
                  "description": "Must have the specified value.",
                  "markdownDescription": "Must have the specified value.\n\n[See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#equals)",
                  "default": "",
                  "oneOf": [
                    {
                      "$ref": "#/definitions/selectorExpressionValue"
                    }
                  ]
                },
                "convert": {
                  "type": "boolean",
                  "title": "Type conversion",
                  "description": "Convert type of compared operand.",
                  "markdownDescription": "Convert type of compared operand.\n\n[See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#equals)",
                  "default": false
                },
                "caseSensitive": {
                  "type": "boolean",
                  "title": "Case sensitive",
                  "description": "Determines if comparing values is case-sensitive. Only applies to string values.",
                  "markdownDescription": "Determines if comparing values is case-sensitive. Only applies to string values.\n\n[See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#equals)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                },
                "type": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/type"
                },
                "name": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/name"
                },
                "source": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/source"
                }
              },
              "required": [
                "equals"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ]
            },
            "count": {
              "type": "object",
              "properties": {
                "count": {
                  "type": "integer",
                  "title": "Count",
                  "description": "Must include the specified number of values.",
                  "markdownDescription": "Must include the specified number of values. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#count)",
                  "minimum": 0
                }
              },
              "required": [
                "count"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ]
            },
            "exists": {
              "type": "object",
              "properties": {
                "exists": {
                  "type": "boolean",
                  "title": "Exists",
                  "description": "Must have the named field.",
                  "markdownDescription": "Must have the named field. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#exists)",
                  "default": true
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                }
              },
              "required": [
                "exists",
                "field"
              ]
            },
            "notEquals": {
              "type": "object",
              "properties": {
                "notEquals": {
                  "title": "Not Equals",
                  "description": "Must not have the specified value.",
                  "markdownDescription": "Must not have the specified value. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notequals)",
                  "default": "",
                  "oneOf": [
                    {
                      "$ref": "#/definitions/selectorExpressionValue"
                    }
                  ]
                },
                "convert": {
                  "type": "boolean",
                  "title": "Type conversion",
                  "description": "Convert type of compared operand.",
                  "markdownDescription": "Convert type of compared operand. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notequals)",
                  "default": false
                },
                "caseSensitive": {
                  "type": "boolean",
                  "title": "Case sensitive",
                  "description": "Determines if comparing values is case-sensitive. Only applies to string values.",
                  "markdownDescription": "Determines if comparing values is case-sensitive. Only applies to string values. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notequals)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                },
                "type": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/type"
                },
                "name": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/name"
                },
                "source": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/source"
                }
              },
              "required": [
                "notEquals"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ]
            },
            "hasValue": {
              "type": "object",
              "properties": {
                "hasValue": {
                  "type": "boolean",
                  "title": "Has Value",
                  "description": "Must have a non-empty value.",
                  "markdownDescription": "Must have a non-empty value. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#hasvalue)",
                  "default": true
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                }
              },
              "required": [
                "hasValue"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ]
            },
            "match": {
              "type": "object",
              "properties": {
                "match": {
                  "type": "string",
                  "title": "Match",
                  "description": "Must match the regular expression.",
                  "markdownDescription": "Must match the regular expression. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#match)",
                  "default": ""
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                },
                "type": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/type"
                },
                "name": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/name"
                },
                "source": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/source"
                }
              },
              "required": [
                "match"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ]
            },
            "notMatch": {
              "type": "object",
              "properties": {
                "notMatch": {
                  "type": "string",
                  "title": "Not Match",
                  "description": "Must not match the regular expression.",
                  "markdownDescription": "Must not match the regular expression. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notmatch)",
                  "default": ""
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                },
                "type": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/type"
                },
                "name": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/name"
                },
                "source": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/source"
                }
              },
              "required": [
                "notMatch"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ]
            },
            "in": {
              "type": "object",
              "properties": {
                "in": {
                  "type": "array",
                  "title": "In",
                  "description": "Must equal one of the specified values.",
                  "markdownDescription": "Must equal one of the specified values. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#in)",
                  "default": [
                    ""
                  ],
                  "uniqueItems": true
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                },
                "type": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/type"
                },
                "name": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/name"
                },
                "source": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/source"
                }
              },
              "required": [
                "in"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ]
            },
            "notIn": {
              "type": "object",
              "properties": {
                "notIn": {
                  "type": "array",
                  "title": "Not In",
                  "description": "Must not equal any of the specified values.",
                  "markdownDescription": "Must not equal any of the specified values. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notin)",
                  "default": [
                    ""
                  ],
                  "uniqueItems": true
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                },
                "type": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/type"
                },
                "name": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/name"
                },
                "source": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/source"
                }
              },
              "required": [
                "notIn"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ]
            },
            "setOf": {
              "type": "object",
              "properties": {
                "setOf": {
                  "type": "array",
                  "title": "SetOf",
                  "description": "Must include all of but only specified values.",
                  "markdownDescription": "Must include all of but only values. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#setof)",
                  "default": [
                    ""
                  ],
                  "uniqueItems": true
                },
                "caseSensitive": {
                  "type": "boolean",
                  "title": "Case sensitive",
                  "description": "Determines if comparing values is case-sensitive.",
                  "markdownDescription": "Determines if comparing values is case-sensitive. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#setof)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                },
                "type": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/type"
                },
                "name": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/name"
                },
                "source": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/source"
                }
              },
              "required": [
                "setOf"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/properties"
                }
              ]
            },
            "subset": {
              "type": "object",
              "properties": {
                "subset": {
                  "type": "array",
                  "title": "Subset",
                  "description": "Must include all of the specified values.",
                  "markdownDescription": "Must include all of the specified values. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#subset)",
                  "default": [
                    ""
                  ],
                  "uniqueItems": true
                },
                "caseSensitive": {
                  "type": "boolean",
                  "title": "Case sensitive",
                  "description": "Determines if comparing values is case-sensitive.",
                  "markdownDescription": "Determines if comparing values is case-sensitive. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#subset)",
                  "default": false
                },
                "unique": {
                  "type": "boolean",
                  "title": "Unique",
                  "description": "Determines if each of the field values must be unique.",
                  "markdownDescription": "Determines if each of the field values must be unique. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#subset)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                },
                "type": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/type"
                },
                "name": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/name"
                },
                "source": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/source"
                }
              },
              "required": [
                "subset"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/properties"
                }
              ]
            },
            "notCount": {
              "type": "object",
              "properties": {
                "notCount": {
                  "type": "integer",
                  "title": "NotCount",
                  "description": "Determines if operand does not have number of items.",
                  "markdownDescription": "Determines if operand does not have number of items. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notcount)",
                  "minimum": 0,
                  "default": 0
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                }
              },
              "required": [
                "notCount"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/properties"
                }
              ],
              "additionalProperties": false
            },
            "less": {
              "type": "object",
              "properties": {
                "less": {
                  "title": "Less",
                  "description": "Must be less then the specified value.",
                  "markdownDescription": "Must be less then the specified value. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#less)",
                  "default": 0,
                  "oneOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "object",
                      "$ref": "#/definitions/fn"
                    }
                  ]
                },
                "convert": {
                  "type": "boolean",
                  "title": "Type conversion",
                  "description": "Convert type of compared operand.",
                  "markdownDescription": "Convert type of compared operand. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#less)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                },
                "type": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/type"
                },
                "name": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/name"
                },
                "source": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/source"
                }
              },
              "required": [
                "less"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false
            },
            "lessOrEquals": {
              "type": "object",
              "properties": {
                "lessOrEquals": {
                  "title": "Less or Equal to",
                  "description": "Must be less or equal to the specified value.",
                  "markdownDescription": "Must be less or equal to the specified value. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#lessorequals)",
                  "default": 0,
                  "oneOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "object",
                      "$ref": "#/definitions/fn"
                    }
                  ]
                },
                "convert": {
                  "type": "boolean",
                  "title": "Type conversion",
                  "description": "Convert type of compared operand.",
                  "markdownDescription": "Convert type of compared operand. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#less)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                },
                "type": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/type"
                },
                "name": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/name"
                },
                "source": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/source"
                }
              },
              "required": [
                "lessOrEquals"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false
            },
            "greater": {
              "type": "object",
              "properties": {
                "greater": {
                  "title": "Greater",
                  "description": "Must be greater then the specified value.",
                  "markdownDescription": "Must be greater then the specified value. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#greater)",
                  "default": 0,
                  "oneOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "object",
                      "$ref": "#/definitions/fn"
                    }
                  ]
                },
                "convert": {
                  "type": "boolean",
                  "title": "Type conversion",
                  "description": "Convert type of compared operand.",
                  "markdownDescription": "Convert type of compared operand. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#less)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                },
                "type": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/type"
                },
                "name": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/name"
                },
                "source": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/source"
                }
              },
              "required": [
                "greater"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false
            },
            "greaterOrEquals": {
              "type": "object",
              "properties": {
                "greaterOrEquals": {
                  "title": "Greater or Equal to",
                  "description": "Must be greater or equal to the specified value.",
                  "markdownDescription": "Must be greater or equal to the specified value. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#greaterorequals)",
                  "default": 0,
                  "oneOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "object",
                      "$ref": "#/definitions/fn"
                    }
                  ]
                },
                "convert": {
                  "type": "boolean",
                  "title": "Type conversion",
                  "description": "Convert type of compared operand.",
                  "markdownDescription": "Convert type of compared operand. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#less)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                },
                "type": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/type"
                },
                "name": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/name"
                },
                "source": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/source"
                }
              },
              "required": [
                "greaterOrEquals"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false
            },
            "startsWith": {
              "type": "object",
              "properties": {
                "startsWith": {
                  "title": "Starts with",
                  "description": "Must start with one of the specified values.",
                  "markdownDescription": "Must start with one of the specified values. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#startswith)",
                  "$ref": "#/definitions/selectorExpressionValueMultiString",
                  "default": ""
                },
                "convert": {
                  "type": "boolean",
                  "title": "Type conversion",
                  "description": "Convert type to string.",
                  "markdownDescription": "Convert type to string. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#startswith)",
                  "default": false
                },
                "caseSensitive": {
                  "type": "boolean",
                  "title": "Case sensitive",
                  "description": "Determines if comparing values is case-sensitive.",
                  "markdownDescription": "Determines if comparing values is case-sensitive. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#startswith)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                },
                "type": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/type"
                },
                "name": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/name"
                },
                "source": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/source"
                }
              },
              "required": [
                "startsWith"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false
            },
            "notStartsWith": {
              "type": "object",
              "properties": {
                "notStartsWith": {
                  "title": "Not starts with",
                  "description": "Must not start with any of the specified values.",
                  "markdownDescription": "Must not start with any of the specified values. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notstartswith)",
                  "$ref": "#/definitions/selectorExpressionValueMultiString"
                },
                "convert": {
                  "type": "boolean",
                  "title": "Type conversion",
                  "description": "Convert type to string.",
                  "markdownDescription": "Convert type to string. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notstartswith)",
                  "default": false
                },
                "caseSensitive": {
                  "type": "boolean",
                  "title": "Case sensitive",
                  "description": "Determines if comparing values is case-sensitive.",
                  "markdownDescription": "Determines if comparing values is case-sensitive. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notstartswith)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                },
                "type": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/type"
                },
                "name": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/name"
                },
                "source": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/source"
                }
              },
              "required": [
                "notStartsWith"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false
            },
            "endsWith": {
              "type": "object",
              "properties": {
                "endsWith": {
                  "title": "Ends with",
                  "description": "Must end with one of the specified values.",
                  "markdownDescription": "Must end with one of the specified values. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#endswith)",
                  "$ref": "#/definitions/selectorExpressionValueMultiString",
                  "default": ""
                },
                "convert": {
                  "type": "boolean",
                  "title": "Type conversion",
                  "description": "Convert type to string.",
                  "markdownDescription": "Convert type to string. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#endswith)",
                  "default": false
                },
                "caseSensitive": {
                  "type": "boolean",
                  "title": "Case sensitive",
                  "description": "Determines if comparing values is case-sensitive.",
                  "markdownDescription": "Determines if comparing values is case-sensitive. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#endswith)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                },
                "type": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/type"
                },
                "name": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/name"
                },
                "source": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/source"
                }
              },
              "required": [
                "endsWith"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false
            },
            "notEndsWith": {
              "type": "object",
              "properties": {
                "notEndsWith": {
                  "title": "Not Ends with",
                  "description": "Must not end with any of the specified values.",
                  "markdownDescription": "Must not end with any of the specified values. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notendswith)",
                  "$ref": "#/definitions/selectorExpressionValueMultiString"
                },
                "convert": {
                  "type": "boolean",
                  "title": "Type conversion",
                  "description": "Convert type to string.",
                  "markdownDescription": "Convert type to string. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notendswith)",
                  "default": false
                },
                "caseSensitive": {
                  "type": "boolean",
                  "title": "Case sensitive",
                  "description": "Determines if comparing values is case-sensitive.",
                  "markdownDescription": "Determines if comparing values is case-sensitive. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notendswith)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                },
                "type": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/type"
                },
                "name": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/name"
                },
                "source": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/source"
                }
              },
              "required": [
                "notEndsWith"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false
            },
            "contains": {
              "type": "object",
              "title": "contains",
              "description": "Must contain one of the specified values.",
              "markdownDescription": "Must contain one of the specified values.\n\n[See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#contains)",
              "properties": {
                "contains": {
                  "title": "Contains",
                  "description": "Must contain one of the specified values.",
                  "markdownDescription": "Must contain one of the specified values.\n\n[See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#contains)",
                  "default": "",
                  "allOf": [
                    {
                      "$ref": "#/definitions/selectorExpressionValueMultiString"
                    }
                  ]
                },
                "convert": {
                  "type": "boolean",
                  "title": "Type conversion",
                  "description": "Convert type to string.",
                  "markdownDescription": "Convert type to string. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#contains)",
                  "default": false
                },
                "caseSensitive": {
                  "type": "boolean",
                  "title": "Case sensitive",
                  "description": "Determines if comparing values is case-sensitive.",
                  "markdownDescription": "Determines if comparing values is case-sensitive. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#contains)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                },
                "type": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/type"
                },
                "name": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/name"
                },
                "source": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/source"
                }
              },
              "required": [
                "contains"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false,
              "minProperties": 2
            },
            "notContains": {
              "type": "object",
              "properties": {
                "notContains": {
                  "title": "Not Contains",
                  "description": "Must not contain any of the specified values.",
                  "markdownDescription": "Must not contain any of the specified values. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notcontains)",
                  "$ref": "#/definitions/selectorExpressionValueMultiString"
                },
                "convert": {
                  "type": "boolean",
                  "title": "Type conversion",
                  "description": "Convert type to string.",
                  "markdownDescription": "Convert type to string. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notcontains)",
                  "default": false
                },
                "caseSensitive": {
                  "type": "boolean",
                  "title": "Case sensitive",
                  "description": "Determines if comparing values is case-sensitive.",
                  "markdownDescription": "Determines if comparing values is case-sensitive. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notcontains)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                },
                "type": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/type"
                },
                "name": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/name"
                },
                "source": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/source"
                }
              },
              "required": [
                "notContains"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false
            },
            "isString": {
              "type": "object",
              "properties": {
                "isString": {
                  "type": "boolean",
                  "title": "Is string",
                  "description": "Must be a string type.",
                  "markdownDescription": "Must be a string type. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#isstring)",
                  "default": true
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                }
              },
              "required": [
                "isString"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false
            },
            "isArray": {
              "type": "object",
              "properties": {
                "isArray": {
                  "type": "boolean",
                  "title": "Is array",
                  "description": "Must be an array type.",
                  "markdownDescription": "Must be an array type. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#isarray)",
                  "default": true
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                }
              },
              "required": [
                "isArray"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false
            },
            "isBoolean": {
              "type": "object",
              "properties": {
                "isBoolean": {
                  "type": "boolean",
                  "title": "Is boolean",
                  "description": "Must be a boolean type.",
                  "markdownDescription": "Must be a boolean type. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#isboolean)",
                  "default": true
                },
                "convert": {
                  "type": "boolean",
                  "title": "Type conversion",
                  "description": "Convert type to boolean.",
                  "markdownDescription": "Convert type to boolean. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#isboolean)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                }
              },
              "required": [
                "isBoolean"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false
            },
            "isDateTime": {
              "type": "object",
              "properties": {
                "isDateTime": {
                  "type": "boolean",
                  "title": "Is datetime",
                  "description": "Must be a datetime type.",
                  "markdownDescription": "Must be a datetime type. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#isdatetime)",
                  "default": true
                },
                "convert": {
                  "type": "boolean",
                  "title": "Type conversion",
                  "description": "Convert type to datetime.",
                  "markdownDescription": "Convert type to datetime. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#isdatetime)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                }
              },
              "required": [
                "isDateTime"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false
            },
            "isInteger": {
              "type": "object",
              "properties": {
                "isInteger": {
                  "type": "boolean",
                  "title": "Is integer",
                  "description": "Must be an integer type.",
                  "markdownDescription": "Must be an integer type. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#isinteger)",
                  "default": true
                },
                "convert": {
                  "type": "boolean",
                  "title": "Type conversion",
                  "description": "Convert type to integer.",
                  "markdownDescription": "Convert type to integer. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#isinteger)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                }
              },
              "required": [
                "isInteger"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false
            },
            "isNumeric": {
              "type": "object",
              "properties": {
                "isNumeric": {
                  "type": "boolean",
                  "title": "Is numeric",
                  "description": "Must be a numeric type.",
                  "markdownDescription": "Must be a numeric type. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#isnumeric)",
                  "default": true
                },
                "convert": {
                  "type": "boolean",
                  "title": "Type conversion",
                  "description": "Convert type to numeric.",
                  "markdownDescription": "Convert type to numeric. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#isnumeric)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                }
              },
              "required": [
                "isNumeric"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false,
              "minProperties": 2
            },
            "isLower": {
              "type": "object",
              "properties": {
                "isLower": {
                  "type": "boolean",
                  "title": "Is Lowercase",
                  "description": "Must be a lowercase string.",
                  "markdownDescription": "Must be a lowercase string. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#islower)",
                  "default": true
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                }
              },
              "required": [
                "isLower"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false,
              "minProperties": 2
            },
            "isUpper": {
              "type": "object",
              "properties": {
                "isUpper": {
                  "type": "boolean",
                  "title": "Is Uppercase",
                  "description": "Must be an uppercase string.",
                  "markdownDescription": "Must be an uppercase string. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#isupper)",
                  "default": true
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                }
              },
              "required": [
                "isUpper"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false,
              "minProperties": 2
            },
            "hasSchema": {
              "type": "object",
              "properties": {
                "hasSchema": {
                  "type": "array",
                  "title": "Has schema",
                  "description": "Must use one of the specified schemas of the value of $schema. If an empty array is specified any non-empty $schema can be specified.",
                  "markdownDescription": "Must use one of the specified schemas of the value of `$schema`. If an empty array is specified any non-empty `$schema` can be specified [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#hasschema)",
                  "default": [],
                  "items": {
                    "type": "string",
                    "title": "Has schema",
                    "description": "Must use one of the specified schemas of the value of $schema. If an empty array is specified any non-empty $schema can be specified.",
                    "markdownDescription": "Must use one of the specified schemas of the value of `$schema`. If an empty array is specified any non-empty `$schema` can be specified [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#hasschema)",
                    "minLength": 1
                  },
                  "uniqueItems": true
                },
                "ignoreScheme": {
                  "type": "boolean",
                  "title": "Ignore scheme",
                  "description": "Determines comparing values is case-sensitive.",
                  "markdownDescription": "Determines comparing values is case-sensitive. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#hasschema)",
                  "default": false
                },
                "caseSensitive": {
                  "type": "boolean",
                  "title": "Case sensitive",
                  "description": "Determines if comparing schemas is case-sensitive.",
                  "markdownDescription": "Determines if comparing schemas is case-sensitive. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#hasschema)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                }
              },
              "required": [
                "hasSchema"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/properties"
                }
              ],
              "additionalProperties": false,
              "minProperties": 2
            },
            "version": {
              "type": "object",
              "properties": {
                "version": {
                  "type": "string",
                  "title": "Version",
                  "description": "Must be a valid semantic version. A constraint can optionally be provided to require the semantic version to be within a range.",
                  "markdownDescription": "Must be a valid semantic version. A constraint can optionally be provided to require the semantic version to be within a range. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#version)",
                  "default": ""
                },
                "includePrerelease": {
                  "type": "boolean",
                  "title": "Include pre-release",
                  "description": "Determines if pre-release versions are included. By default, pre-release versions are not included.",
                  "markdownDescription": "Determines if pre-release versions are included. By default, pre-release versions are not included. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#version)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                }
              },
              "required": [
                "version"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/properties"
                }
              ],
              "additionalProperties": false,
              "minProperties": 2
            },
            "hasDefault": {
              "type": "object",
              "properties": {
                "hasDefault": {
                  "title": "Has Default",
                  "description": "The field must either not exist or be set to the configured value.",
                  "markdownDescription": "The field must either not exist or be set to the configured value. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#hasdefault)",
                  "default": "",
                  "oneOf": [
                    {
                      "$ref": "#/definitions/selectorExpressionValue"
                    }
                  ]
                },
                "caseSensitive": {
                  "type": "boolean",
                  "title": "Case sensitive",
                  "description": "Determines if comparing values is case-sensitive.",
                  "markdownDescription": "Determines if comparing values is case-sensitive. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#hasdefault)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                }
              },
              "required": [
                "hasDefault"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/properties"
                }
              ],
              "additionalProperties": false,
              "minProperties": 2
            },
            "withinPath": {
              "type": "object",
              "properties": {
                "withinPath": {
                  "type": "array",
                  "title": "Within Path",
                  "description": "The file path must exist within the required paths.",
                  "markdownDescription": "The file path must exist within the required paths. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#withinpath)",
                  "default": [],
                  "items": {
                    "type": "string"
                  },
                  "uniqueItems": true
                },
                "caseSensitive": {
                  "type": "boolean",
                  "title": "Case sensitive",
                  "description": "Determines if comparing values is case-sensitive.",
                  "markdownDescription": "Determines if comparing values is case-sensitive. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#withinpath)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                }
              },
              "required": [
                "withinPath"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false,
              "maxProperties": 2
            },
            "notWithinPath": {
              "type": "object",
              "properties": {
                "notWithinPath": {
                  "type": "array",
                  "title": "Not Within Path",
                  "description": "The file path must not exist within the required paths.",
                  "markdownDescription": "The file path must not exist within the required paths. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notwithinpath)",
                  "default": [],
                  "items": {
                    "type": "string"
                  },
                  "uniqueItems": true
                },
                "caseSensitive": {
                  "type": "boolean",
                  "title": "Case sensitive",
                  "description": "Determines if comparing values is case-sensitive.",
                  "markdownDescription": "Determines if comparing values is case-sensitive. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notwithinpath)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                }
              },
              "required": [
                "notWithinPath"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false,
              "minProperties": 2
            },
            "like": {
              "type": "object",
              "properties": {
                "like": {
                  "title": "Like",
                  "description": "Must match any of the specified wildcard patterns.",
                  "markdownDescription": "Must match any of the specified wildcard patterns. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#like)",
                  "$ref": "#/definitions/selectorExpressionValueMultiString"
                },
                "convert": {
                  "type": "boolean",
                  "title": "Type conversion",
                  "description": "Convert type to string.",
                  "markdownDescription": "Convert type to string. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#like)",
                  "default": false
                },
                "caseSensitive": {
                  "type": "boolean",
                  "title": "Case sensitive",
                  "description": "Determines if comparing values is case-sensitive.",
                  "markdownDescription": "Determines if comparing values is case-sensitive. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#like)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                }
              },
              "required": [
                "like"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false,
              "minProperties": 2
            },
            "notLike": {
              "type": "object",
              "properties": {
                "notLike": {
                  "title": "Not like",
                  "description": "Must not match any of the specified wildcard patterns.",
                  "markdownDescription": "Must not match any of the specified wildcard patterns. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notlike)",
                  "$ref": "#/definitions/selectorExpressionValueMultiString"
                },
                "convert": {
                  "type": "boolean",
                  "title": "Type conversion",
                  "description": "Convert type to string.",
                  "markdownDescription": "Convert type to string. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notlike)",
                  "default": false
                },
                "caseSensitive": {
                  "type": "boolean",
                  "title": "Case sensitive",
                  "description": "Determines if comparing values is case-sensitive.",
                  "markdownDescription": "Determines if comparing values is case-sensitive. [See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#notlike)",
                  "default": false
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "value": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/value"
                }
              },
              "required": [
                "notLike"
              ],
              "oneOf": [
                {
                  "$ref": "#/definitions/expressions/definitions/operands"
                }
              ],
              "additionalProperties": false,
              "minProperties": 2
            }
          }
        },
        "operators": {
          "type": "object",
          "oneOf": [
            {
              "$ref": "#/definitions/expressions/definitions/operators/definitions/allOf"
            },
            {
              "$ref": "#/definitions/expressions/definitions/operators/definitions/anyOf"
            },
            {
              "$ref": "#/definitions/expressions/definitions/operators/definitions/not"
            }
          ],
          "definitions": {
            "allOf": {
              "type": "object",
              "title": "allOf",
              "description": "All of the expressions must be true.",
              "markdownDescription": "All of the expressions must be true.\n\n[See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#allof)",
              "properties": {
                "allOf": {
                  "type": "array",
                  "title": "AllOf",
                  "description": "All of the expressions must be true.",
                  "markdownDescription": "All of the expressions must be true.\n\n[See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#allof)",
                  "items": {
                    "$ref": "#/definitions/expressions"
                  }
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "where": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/where"
                }
              },
              "required": [
                "allOf"
              ],
              "oneOf": [
                {
                  "properties": {
                    "field": {
                      "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                    },
                    "where": {
                      "$ref": "#/definitions/expressions/definitions/properties/definitions/where"
                    }
                  }
                }
              ],
              "additionalProperties": false
            },
            "anyOf": {
              "type": "object",
              "properties": {
                "anyOf": {
                  "type": "array",
                  "title": "AnyOf",
                  "description": "One of the expressions must be true.",
                  "markdownDescription": "All of the expressions must be true.\n\n[See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#anyof)",
                  "items": {
                    "$ref": "#/definitions/expressions"
                  }
                },
                "field": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                },
                "where": {
                  "$ref": "#/definitions/expressions/definitions/properties/definitions/where"
                }
              },
              "required": [
                "anyOf"
              ],
              "oneOf": [
                {
                  "properties": {
                    "field": {
                      "$ref": "#/definitions/expressions/definitions/properties/definitions/field"
                    },
                    "where": {
                      "$ref": "#/definitions/expressions/definitions/properties/definitions/where"
                    }
                  }
                }
              ],
              "additionalProperties": false
            },
            "not": {
              "type": "object",
              "properties": {
                "not": {
                  "type": "object",
                  "title": "Not",
                  "description": "The nested expression must not be true.",
                  "markdownDescription": "The nested expression must not be true.\n\n[See help](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Expressions/#not)",
                  "$ref": "#/definitions/expressions"
                }
              },
              "required": [
                "not"
              ],
              "additionalProperties": false
            }
          }
        }
      }
    },
    "fn": {
      "ztitle": "Value from function",
      "zdescription": "A function expression that once evaluated specifies the value.",
      "zmarkdownDescription": "A function expression that once evaluated specifies the value.",
      "properties": {
        "$": {
          "type": "object",
          "title": "Value from function",
          "description": "A function expression that once evaluated specifies the value.",
          "markdownDescription": "A function expression that once evaluated specifies the value.",
          "$ref": "#/definitions/fn/definitions/function"
        }
      },
      "required": [
        "$"
      ],
      "definitions": {
        "function": {
          "oneOf": [
            {
              "$ref": "#/definitions/fn/definitions/function/definitions/substring"
            },
            {
              "$ref": "#/definitions/fn/definitions/function/definitions/string"
            },
            {
              "$ref": "#/definitions/fn/definitions/function/definitions/boolean"
            },
            {
              "$ref": "#/definitions/fn/definitions/function/definitions/integer"
            },
            {
              "$ref": "#/definitions/fn/definitions/function/definitions/concat"
            },
            {
              "$ref": "#/definitions/fn/definitions/function/definitions/path"
            },
            {
              "$ref": "#/definitions/fn/definitions/function/definitions/configuration"
            }
          ],
          "definitions": {
            "equal": {
              "type": "object",
              "properties": {
                "equal": {
                  "type": "array",
                  "title": "Equal",
                  "description": "The equal operator checks for equity between two operands.",
                  "markdownDescription": "The `equal` operator checks for equity two operands.",
                  "items": {
                    "oneOf": [
                      {
                        "$ref": "#/definitions/fn/definitions/function"
                      },
                      {
                        "type": "string"
                      },
                      {
                        "type": "integer"
                      },
                      {
                        "type": "boolean"
                      }
                    ]
                  },
                  "additionalItems": false,
                  "minItems": 2,
                  "maxItems": 2
                }
              },
              "additionalProperties": false,
              "required": [
                "equal"
              ]
            },
            "substring": {
              "type": "object",
              "properties": {
                "substring": {
                  "title": "Substring",
                  "description": "The substring function, copies a number of characters from input starting from a zero based position.",
                  "markdownDescription": "The `substring` function, copies a number of characters from input starting from a zero based position.",
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "object",
                      "$ref": "#/definitions/fn/definitions/function",
                      "defaultSnippets": [
                        {
                          "label": "From string",
                          "description": "Set value to a specific value.",
                          "body": ""
                        },
                        {
                          "label": "From configuration",
                          "description": "Configure length from configuration.",
                          "body": {
                            "configuration": "${1}"
                          }
                        }
                      ]
                    }
                  ]
                },
                "start": {
                  "title": "Start",
                  "description": "The zero based position to start copying characters from.",
                  "default": 0,
                  "oneOf": [
                    {
                      "type": "integer",
                      "minimum": 0
                    },
                    {
                      "type": "object",
                      "$ref": "#/definitions/fn/definitions/function"
                    }
                  ],
                  "defaultSnippets": [
                    {
                      "label": "From integer",
                      "description": "Set start to a specific value.",
                      "body": 0
                    },
                    {
                      "label": "From configuration",
                      "description": "Configure start from configuration.",
                      "body": {
                        "configuration": "${1}"
                      }
                    }
                  ]
                },
                "length": {
                  "title": "Length",
                  "description": "The number of character to copy from the source string.",
                  "oneOf": [
                    {
                      "type": "integer",
                      "minimum": 0
                    },
                    {
                      "type": "object",
                      "$ref": "#/definitions/fn/definitions/function"
                    }
                  ],
                  "defaultSnippets": [
                    {
                      "label": "From integer",
                      "description": "Set length to a specific value.",
                      "body": 0
                    },
                    {
                      "label": "From configuration",
                      "description": "Configure length from configuration.",
                      "body": {
                        "configuration": "${1}"
                      }
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "substring"
              ],
              "defaultSnippets": [
                {
                  "label": "Substring from string",
                  "description": "Set value to a specific value.",
                  "body": {
                    "substring": "${1}",
                    "length": "${2}"
                  }
                },
                {
                  "label": "Substring from configuration",
                  "description": "Configure length from configuration.",
                  "body": {
                    "substring": {
                      "configuration": "${1}"
                    },
                    "length": "${2}"
                  }
                }
              ]
            },
            "string": {
              "type": "object",
              "properties": {
                "string": {
                  "title": "String",
                  "oneOf": [
                    {
                      "type": "string",
                      "description": "A literal string value."
                    },
                    {
                      "type": "object",
                      "description": "Converts the operand in to a string value.",
                      "$ref": "#/definitions/fn/definitions/function"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "string"
              ]
            },
            "integer": {
              "type": "object",
              "properties": {
                "integer": {
                  "title": "Integer",
                  "oneOf": [
                    {
                      "type": "integer",
                      "description": "A literal integer value."
                    },
                    {
                      "type": "object",
                      "description": "Converts the operand in to an integer.",
                      "$ref": "#/definitions/fn/definitions/function"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "integer"
              ]
            },
            "boolean": {
              "type": "object",
              "properties": {
                "boolean": {
                  "title": "Boolean",
                  "oneOf": [
                    {
                      "type": "boolean",
                      "description": "A literal boolean value.",
                      "markdownDescription": "A literal boolean value."
                    },
                    {
                      "type": "object",
                      "description": "Converts the operand to a boolean value.",
                      "markdownDescription": "Converts the operand to a boolean value.",
                      "$ref": "#/definitions/fn/definitions/function"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "boolean"
              ]
            },
            "concat": {
              "type": "object",
              "properties": {
                "concat": {
                  "type": "array",
                  "description": "The concat function combines two or more operands.",
                  "markdownDescription": "The `concat` function combines two or more operands.",
                  "items": {
                    "$ref": "#/definitions/fn/definitions/function"
                  },
                  "additionalItems": false,
                  "minItems": 2
                }
              },
              "additionalProperties": false,
              "required": [
                "concat"
              ]
            },
            "path": {
              "type": "object",
              "properties": {
                "path": {
                  "type": "string",
                  "title": "Path",
                  "description": "The path function returns a value from an object path.",
                  "markdownDescription": "The `path` function returns a value from an object path."
                }
              },
              "additionalProperties": false,
              "required": [
                "path"
              ]
            },
            "configuration": {
              "type": "object",
              "properties": {
                "configuration": {
                  "type": "string",
                  "title": "Configuration",
                  "description": "The configuration function returns a value retrieved from configuration by name.",
                  "markdownDescription": "The `configuration` function returns a value retrieved from configuration by name.",
                  "minLength": 1
                }
              },
              "additionalProperties": false,
              "required": [
                "configuration"
              ]
            }
          }
        }
      }
    }
  }
}