2025-04-19 23:12:19 -04:00

80 lines
1.9 KiB
JavaScript

/**
* @fileoverview Defines a schema for configs.
* @author Sylvan Mably
*/
const baseConfigProperties = {
$schema: { type: 'string' },
env: { type: 'object' },
extends: { $ref: '#/definitions/stringOrStrings' },
globals: { type: 'object' },
overrides: {
type: 'array',
items: { $ref: '#/definitions/overrideConfig' },
additionalItems: false,
},
parser: { type: ['string', 'null'] },
parserOptions: { type: 'object' },
plugins: { type: 'array' },
processor: { type: 'string' },
rules: { type: 'object' },
settings: { type: 'object' },
noInlineConfig: { type: 'boolean' },
reportUnusedDisableDirectives: { type: 'boolean' },
ecmaFeatures: { type: 'object' }, // deprecated; logs a warning when used
};
const configSchema = {
definitions: {
stringOrStrings: {
oneOf: [
{ type: 'string' },
{
type: 'array',
items: { type: 'string' },
additionalItems: false,
},
],
},
stringOrStringsRequired: {
oneOf: [
{ type: 'string' },
{
type: 'array',
items: { type: 'string' },
additionalItems: false,
minItems: 1,
},
],
},
// Config at top-level.
objectConfig: {
type: 'object',
properties: {
root: { type: 'boolean' },
ignorePatterns: { $ref: '#/definitions/stringOrStrings' },
...baseConfigProperties,
},
additionalProperties: false,
},
// Config in `overrides`.
overrideConfig: {
type: 'object',
properties: {
excludedFiles: { $ref: '#/definitions/stringOrStrings' },
files: { $ref: '#/definitions/stringOrStringsRequired' },
...baseConfigProperties,
},
required: ['files'],
additionalProperties: false,
},
},
$ref: '#/definitions/objectConfig',
};
export default configSchema;