{ "$schema": "http://json-schema.org/draft-07/schema#", "$id": "@stoplight/spectral-core/meta/ruleset.schema", "type": "object", "additionalProperties": false, "properties": { "documentationUrl": { "type": "string", "format": "url", "errorMessage": "must be a valid URL" }, "description": { "type": "string" }, "rules": { "type": "object", "additionalProperties": { "$ref": "rule.schema#" } }, "functions": { "$ref": "extensions#functions" }, "functionsDir": { "$ref": "extensions#functionsDir" }, "formats": { "$ref": "shared#formats" }, "extends": { "$ref": "extensions#extends" }, "parserOptions": { "type": "object", "properties": { "duplicateKeys": { "$ref": "shared#severity" }, "incompatibleValues": { "$ref": "shared#severity" } }, "additionalProperties": false }, "overrides": { "type": "array", "minItems": 1, "items": { "if": { "type": "object", "properties": { "files": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1, "pattern": "^[^#]+#" }, "errorMessage": "must be an non-empty array of glob patterns" } }, "required": ["files"] }, "then": { "type": "object", "properties": { "files": true, "rules": { "type": "object", "additionalProperties": { "$ref": "shared#severity" }, "errorMessage": { "enum": "must be a valid severity level" } } }, "required": ["rules"], "additionalProperties": false, "errorMessage": { "required": "must contain rules when JSON Pointers are defined", "additionalProperties": "must not override any other property than rules when JSON Pointers are defined" } }, "else": { "allOf": [ { "type": "object", "properties": { "files": { "type": "array", "minItems": 1, "items": { "type": "string", "pattern": "[^#]", "minLength": 1 }, "errorMessage": "must be an non-empty array of glob patterns" } }, "required": ["files"], "errorMessage": { "type": "must be an override, i.e. { \"files\": [\"v2/**/*.json\"], \"rules\": {} }" } }, { "type": "object", "properties": { "formats": { "$ref": "shared#formats" }, "extends": { "$ref": "#/properties/extends" }, "rules": { "$ref": "#/properties/rules" }, "parserOptions": { "$ref": "#/properties/parserOptions" }, "aliases": { "$ref": "#/properties/aliases" } }, "anyOf": [ { "required": ["extends"] }, { "required": ["rules"] } ] } ] } }, "errorMessage": { "minItems": "must not be empty" } }, "aliases": { "type": "object", "propertyNames": { "pattern": "^[A-Za-z][A-Za-z0-9_-]*$", "errorMessage": { "pattern": "to avoid confusion the name must match /^[A-Za-z][A-Za-z0-9_-]*$/ regular expression", "minLength": "the name of an alias must not be empty" } }, "additionalProperties": { "if": { "type": "object" }, "then": { "type": "object", "properties": { "description": { "type": "string" }, "targets": { "type": "array", "minItems": 1, "items": { "type": "object", "properties": { "formats": { "$ref": "shared#formats" }, "given": { "$ref": "shared#arrayish-given" } }, "required": ["formats", "given"], "errorMessage": "a valid target must contain given and non-empty formats" }, "errorMessage": { "minItems": "targets must have at least a single alias definition" } } }, "required": ["targets"], "errorMessage": { "required": "targets must be present and have at least a single alias definition" } }, "else": { "$ref": "shared#arrayish-given" } } } }, "patternProperties": { "^x-": true }, "anyOf": [ { "required": ["extends"] }, { "required": ["rules"] }, { "required": ["overrides"] } ] }