• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * STOP!!! DO NOT MODIFY.
3 *
4 * This file is part of the ongoing work to move the eslintrc-style config
5 * system into the @eslint/eslintrc package. This file needs to remain
6 * unchanged in order for this work to proceed.
7 *
8 * If you think you need to change this file, please contact @nzakas first.
9 *
10 * Thanks in advance for your cooperation.
11 */
12
13/**
14 * @fileoverview Defines a schema for configs.
15 * @author Sylvan Mably
16 */
17
18"use strict";
19
20const baseConfigProperties = {
21    $schema: { type: "string" },
22    env: { type: "object" },
23    extends: { $ref: "#/definitions/stringOrStrings" },
24    globals: { type: "object" },
25    overrides: {
26        type: "array",
27        items: { $ref: "#/definitions/overrideConfig" },
28        additionalItems: false
29    },
30    parser: { type: ["string", "null"] },
31    parserOptions: { type: "object" },
32    plugins: { type: "array" },
33    processor: { type: "string" },
34    rules: { type: "object" },
35    settings: { type: "object" },
36    noInlineConfig: { type: "boolean" },
37    reportUnusedDisableDirectives: { type: "boolean" },
38
39    ecmaFeatures: { type: "object" } // deprecated; logs a warning when used
40};
41
42const configSchema = {
43    definitions: {
44        stringOrStrings: {
45            oneOf: [
46                { type: "string" },
47                {
48                    type: "array",
49                    items: { type: "string" },
50                    additionalItems: false
51                }
52            ]
53        },
54        stringOrStringsRequired: {
55            oneOf: [
56                { type: "string" },
57                {
58                    type: "array",
59                    items: { type: "string" },
60                    additionalItems: false,
61                    minItems: 1
62                }
63            ]
64        },
65
66        // Config at top-level.
67        objectConfig: {
68            type: "object",
69            properties: {
70                root: { type: "boolean" },
71                ignorePatterns: { $ref: "#/definitions/stringOrStrings" },
72                ...baseConfigProperties
73            },
74            additionalProperties: false
75        },
76
77        // Config in `overrides`.
78        overrideConfig: {
79            type: "object",
80            properties: {
81                excludedFiles: { $ref: "#/definitions/stringOrStrings" },
82                files: { $ref: "#/definitions/stringOrStringsRequired" },
83                ...baseConfigProperties
84            },
85            required: ["files"],
86            additionalProperties: false
87        }
88    },
89
90    $ref: "#/definitions/objectConfig"
91};
92
93module.exports = configSchema;
94