feat: docker compose maybe
This commit is contained in:
		
							
								
								
									
										19
									
								
								node_modules/@eslint/eslintrc/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								node_modules/@eslint/eslintrc/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
Copyright OpenJS Foundation and other contributors, <www.openjsf.org>
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in
 | 
			
		||||
all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
THE SOFTWARE.
 | 
			
		||||
							
								
								
									
										115
									
								
								node_modules/@eslint/eslintrc/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								node_modules/@eslint/eslintrc/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,115 @@
 | 
			
		||||
# ESLintRC Library
 | 
			
		||||
 | 
			
		||||
This repository contains the legacy ESLintRC configuration file format for ESLint. This package is not intended for use outside of the ESLint ecosystem. It is ESLint-specific and not intended for use in other programs.
 | 
			
		||||
 | 
			
		||||
**Note:** This package is frozen except for critical bug fixes as ESLint moves to a new config system.
 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
 | 
			
		||||
You can install the package as follows:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
npm install @eslint/eslintrc --save-dev
 | 
			
		||||
 | 
			
		||||
# or
 | 
			
		||||
 | 
			
		||||
yarn add @eslint/eslintrc -D
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Usage (ESM)
 | 
			
		||||
 | 
			
		||||
The primary class in this package is `FlatCompat`, which is a utility to translate ESLintRC-style configs into flat configs. Here's how you use it inside of your `eslint.config.js` file:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
import { FlatCompat } from "@eslint/eslintrc";
 | 
			
		||||
import js from "@eslint/js";
 | 
			
		||||
import path from "path";
 | 
			
		||||
import { fileURLToPath } from "url";
 | 
			
		||||
 | 
			
		||||
// mimic CommonJS variables -- not needed if using CommonJS
 | 
			
		||||
const __filename = fileURLToPath(import.meta.url);
 | 
			
		||||
const __dirname = path.dirname(__filename);
 | 
			
		||||
 | 
			
		||||
const compat = new FlatCompat({
 | 
			
		||||
    baseDirectory: __dirname,                  // optional; default: process.cwd()
 | 
			
		||||
    resolvePluginsRelativeTo: __dirname,       // optional
 | 
			
		||||
    recommendedConfig: js.configs.recommended, // optional
 | 
			
		||||
    allConfig: js.configs.all,                 // optional
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
export default [
 | 
			
		||||
 | 
			
		||||
    // mimic ESLintRC-style extends
 | 
			
		||||
    ...compat.extends("standard", "example"),
 | 
			
		||||
 | 
			
		||||
    // mimic environments
 | 
			
		||||
    ...compat.env({
 | 
			
		||||
        es2020: true,
 | 
			
		||||
        node: true
 | 
			
		||||
    }),
 | 
			
		||||
 | 
			
		||||
    // mimic plugins
 | 
			
		||||
    ...compat.plugins("airbnb", "react"),
 | 
			
		||||
 | 
			
		||||
    // translate an entire config
 | 
			
		||||
    ...compat.config({
 | 
			
		||||
        plugins: ["airbnb", "react"],
 | 
			
		||||
        extends: "standard",
 | 
			
		||||
        env: {
 | 
			
		||||
            es2020: true,
 | 
			
		||||
            node: true
 | 
			
		||||
        },
 | 
			
		||||
        rules: {
 | 
			
		||||
            semi: "error"
 | 
			
		||||
        }
 | 
			
		||||
    })
 | 
			
		||||
];
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Usage (CommonJS)
 | 
			
		||||
 | 
			
		||||
Using `FlatCompat` in CommonJS files is similar to ESM, but you'll use `require()` and `module.exports` instead of `import` and `export`. Here's how you use it inside of your `eslint.config.js` CommonJS file:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
const { FlatCompat } = require("@eslint/eslintrc");
 | 
			
		||||
const js = require("@eslint/js");
 | 
			
		||||
 | 
			
		||||
const compat = new FlatCompat({
 | 
			
		||||
    baseDirectory: __dirname,                  // optional; default: process.cwd()
 | 
			
		||||
    resolvePluginsRelativeTo: __dirname,       // optional
 | 
			
		||||
    recommendedConfig: js.configs.recommended, // optional
 | 
			
		||||
    allConfig: js.configs.all,                 // optional
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
module.exports = [
 | 
			
		||||
 | 
			
		||||
    // mimic ESLintRC-style extends
 | 
			
		||||
    ...compat.extends("standard", "example"),
 | 
			
		||||
 | 
			
		||||
    // mimic environments
 | 
			
		||||
    ...compat.env({
 | 
			
		||||
        es2020: true,
 | 
			
		||||
        node: true
 | 
			
		||||
    }),
 | 
			
		||||
 | 
			
		||||
    // mimic plugins
 | 
			
		||||
    ...compat.plugins("airbnb", "react"),
 | 
			
		||||
 | 
			
		||||
    // translate an entire config
 | 
			
		||||
    ...compat.config({
 | 
			
		||||
        plugins: ["airbnb", "react"],
 | 
			
		||||
        extends: "standard",
 | 
			
		||||
        env: {
 | 
			
		||||
            es2020: true,
 | 
			
		||||
            node: true
 | 
			
		||||
        },
 | 
			
		||||
        rules: {
 | 
			
		||||
            semi: "error"
 | 
			
		||||
        }
 | 
			
		||||
    })
 | 
			
		||||
];
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
MIT License
 | 
			
		||||
							
								
								
									
										79
									
								
								node_modules/@eslint/eslintrc/conf/config-schema.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								node_modules/@eslint/eslintrc/conf/config-schema.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,79 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @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;
 | 
			
		||||
							
								
								
									
										215
									
								
								node_modules/@eslint/eslintrc/conf/environments.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										215
									
								
								node_modules/@eslint/eslintrc/conf/environments.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,215 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview Defines environment settings and globals.
 | 
			
		||||
 * @author Elan Shanker
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Requirements
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
import globals from "globals";
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Helpers
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get the object that has difference.
 | 
			
		||||
 * @param {Record<string,boolean>} current The newer object.
 | 
			
		||||
 * @param {Record<string,boolean>} prev The older object.
 | 
			
		||||
 * @returns {Record<string,boolean>} The difference object.
 | 
			
		||||
 */
 | 
			
		||||
function getDiff(current, prev) {
 | 
			
		||||
    const retv = {};
 | 
			
		||||
 | 
			
		||||
    for (const [key, value] of Object.entries(current)) {
 | 
			
		||||
        if (!Object.hasOwnProperty.call(prev, key)) {
 | 
			
		||||
            retv[key] = value;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return retv;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const newGlobals2015 = getDiff(globals.es2015, globals.es5); // 19 variables such as Promise, Map, ...
 | 
			
		||||
const newGlobals2017 = {
 | 
			
		||||
    Atomics: false,
 | 
			
		||||
    SharedArrayBuffer: false
 | 
			
		||||
};
 | 
			
		||||
const newGlobals2020 = {
 | 
			
		||||
    BigInt: false,
 | 
			
		||||
    BigInt64Array: false,
 | 
			
		||||
    BigUint64Array: false,
 | 
			
		||||
    globalThis: false
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const newGlobals2021 = {
 | 
			
		||||
    AggregateError: false,
 | 
			
		||||
    FinalizationRegistry: false,
 | 
			
		||||
    WeakRef: false
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Public Interface
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
/** @type {Map<string, import("../lib/shared/types").Environment>} */
 | 
			
		||||
export default new Map(Object.entries({
 | 
			
		||||
 | 
			
		||||
    // Language
 | 
			
		||||
    builtin: {
 | 
			
		||||
        globals: globals.es5
 | 
			
		||||
    },
 | 
			
		||||
    es6: {
 | 
			
		||||
        globals: newGlobals2015,
 | 
			
		||||
        parserOptions: {
 | 
			
		||||
            ecmaVersion: 6
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    es2015: {
 | 
			
		||||
        globals: newGlobals2015,
 | 
			
		||||
        parserOptions: {
 | 
			
		||||
            ecmaVersion: 6
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    es2016: {
 | 
			
		||||
        globals: newGlobals2015,
 | 
			
		||||
        parserOptions: {
 | 
			
		||||
            ecmaVersion: 7
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    es2017: {
 | 
			
		||||
        globals: { ...newGlobals2015, ...newGlobals2017 },
 | 
			
		||||
        parserOptions: {
 | 
			
		||||
            ecmaVersion: 8
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    es2018: {
 | 
			
		||||
        globals: { ...newGlobals2015, ...newGlobals2017 },
 | 
			
		||||
        parserOptions: {
 | 
			
		||||
            ecmaVersion: 9
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    es2019: {
 | 
			
		||||
        globals: { ...newGlobals2015, ...newGlobals2017 },
 | 
			
		||||
        parserOptions: {
 | 
			
		||||
            ecmaVersion: 10
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    es2020: {
 | 
			
		||||
        globals: { ...newGlobals2015, ...newGlobals2017, ...newGlobals2020 },
 | 
			
		||||
        parserOptions: {
 | 
			
		||||
            ecmaVersion: 11
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    es2021: {
 | 
			
		||||
        globals: { ...newGlobals2015, ...newGlobals2017, ...newGlobals2020, ...newGlobals2021 },
 | 
			
		||||
        parserOptions: {
 | 
			
		||||
            ecmaVersion: 12
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    es2022: {
 | 
			
		||||
        globals: { ...newGlobals2015, ...newGlobals2017, ...newGlobals2020, ...newGlobals2021 },
 | 
			
		||||
        parserOptions: {
 | 
			
		||||
            ecmaVersion: 13
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    es2023: {
 | 
			
		||||
        globals: { ...newGlobals2015, ...newGlobals2017, ...newGlobals2020, ...newGlobals2021 },
 | 
			
		||||
        parserOptions: {
 | 
			
		||||
            ecmaVersion: 14
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    es2024: {
 | 
			
		||||
        globals: { ...newGlobals2015, ...newGlobals2017, ...newGlobals2020, ...newGlobals2021 },
 | 
			
		||||
        parserOptions: {
 | 
			
		||||
            ecmaVersion: 15
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // Platforms
 | 
			
		||||
    browser: {
 | 
			
		||||
        globals: globals.browser
 | 
			
		||||
    },
 | 
			
		||||
    node: {
 | 
			
		||||
        globals: globals.node,
 | 
			
		||||
        parserOptions: {
 | 
			
		||||
            ecmaFeatures: {
 | 
			
		||||
                globalReturn: true
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "shared-node-browser": {
 | 
			
		||||
        globals: globals["shared-node-browser"]
 | 
			
		||||
    },
 | 
			
		||||
    worker: {
 | 
			
		||||
        globals: globals.worker
 | 
			
		||||
    },
 | 
			
		||||
    serviceworker: {
 | 
			
		||||
        globals: globals.serviceworker
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // Frameworks
 | 
			
		||||
    commonjs: {
 | 
			
		||||
        globals: globals.commonjs,
 | 
			
		||||
        parserOptions: {
 | 
			
		||||
            ecmaFeatures: {
 | 
			
		||||
                globalReturn: true
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    amd: {
 | 
			
		||||
        globals: globals.amd
 | 
			
		||||
    },
 | 
			
		||||
    mocha: {
 | 
			
		||||
        globals: globals.mocha
 | 
			
		||||
    },
 | 
			
		||||
    jasmine: {
 | 
			
		||||
        globals: globals.jasmine
 | 
			
		||||
    },
 | 
			
		||||
    jest: {
 | 
			
		||||
        globals: globals.jest
 | 
			
		||||
    },
 | 
			
		||||
    phantomjs: {
 | 
			
		||||
        globals: globals.phantomjs
 | 
			
		||||
    },
 | 
			
		||||
    jquery: {
 | 
			
		||||
        globals: globals.jquery
 | 
			
		||||
    },
 | 
			
		||||
    qunit: {
 | 
			
		||||
        globals: globals.qunit
 | 
			
		||||
    },
 | 
			
		||||
    prototypejs: {
 | 
			
		||||
        globals: globals.prototypejs
 | 
			
		||||
    },
 | 
			
		||||
    shelljs: {
 | 
			
		||||
        globals: globals.shelljs
 | 
			
		||||
    },
 | 
			
		||||
    meteor: {
 | 
			
		||||
        globals: globals.meteor
 | 
			
		||||
    },
 | 
			
		||||
    mongo: {
 | 
			
		||||
        globals: globals.mongo
 | 
			
		||||
    },
 | 
			
		||||
    protractor: {
 | 
			
		||||
        globals: globals.protractor
 | 
			
		||||
    },
 | 
			
		||||
    applescript: {
 | 
			
		||||
        globals: globals.applescript
 | 
			
		||||
    },
 | 
			
		||||
    nashorn: {
 | 
			
		||||
        globals: globals.nashorn
 | 
			
		||||
    },
 | 
			
		||||
    atomtest: {
 | 
			
		||||
        globals: globals.atomtest
 | 
			
		||||
    },
 | 
			
		||||
    embertest: {
 | 
			
		||||
        globals: globals.embertest
 | 
			
		||||
    },
 | 
			
		||||
    webextensions: {
 | 
			
		||||
        globals: globals.webextensions
 | 
			
		||||
    },
 | 
			
		||||
    greasemonkey: {
 | 
			
		||||
        globals: globals.greasemonkey
 | 
			
		||||
    }
 | 
			
		||||
}));
 | 
			
		||||
							
								
								
									
										1104
									
								
								node_modules/@eslint/eslintrc/dist/eslintrc-universal.cjs
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1104
									
								
								node_modules/@eslint/eslintrc/dist/eslintrc-universal.cjs
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1
									
								
								node_modules/@eslint/eslintrc/dist/eslintrc-universal.cjs.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/@eslint/eslintrc/dist/eslintrc-universal.cjs.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										4333
									
								
								node_modules/@eslint/eslintrc/dist/eslintrc.cjs
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4333
									
								
								node_modules/@eslint/eslintrc/dist/eslintrc.cjs
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1
									
								
								node_modules/@eslint/eslintrc/dist/eslintrc.cjs.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/@eslint/eslintrc/dist/eslintrc.cjs.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										532
									
								
								node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										532
									
								
								node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,532 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview `CascadingConfigArrayFactory` class.
 | 
			
		||||
 *
 | 
			
		||||
 * `CascadingConfigArrayFactory` class has a responsibility:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Handles cascading of config files.
 | 
			
		||||
 *
 | 
			
		||||
 * It provides two methods:
 | 
			
		||||
 *
 | 
			
		||||
 * - `getConfigArrayForFile(filePath)`
 | 
			
		||||
 *     Get the corresponded configuration of a given file. This method doesn't
 | 
			
		||||
 *     throw even if the given file didn't exist.
 | 
			
		||||
 * - `clearCache()`
 | 
			
		||||
 *     Clear the internal cache. You have to call this method when
 | 
			
		||||
 *     `additionalPluginPool` was updated if `baseConfig` or `cliConfig` depends
 | 
			
		||||
 *     on the additional plugins. (`CLIEngine#addPlugin()` method calls this.)
 | 
			
		||||
 *
 | 
			
		||||
 * @author Toru Nagashima <https://github.com/mysticatea>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Requirements
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
import debugOrig from "debug";
 | 
			
		||||
import os from "os";
 | 
			
		||||
import path from "path";
 | 
			
		||||
 | 
			
		||||
import { ConfigArrayFactory } from "./config-array-factory.js";
 | 
			
		||||
import {
 | 
			
		||||
    ConfigArray,
 | 
			
		||||
    ConfigDependency,
 | 
			
		||||
    IgnorePattern
 | 
			
		||||
} from "./config-array/index.js";
 | 
			
		||||
import ConfigValidator from "./shared/config-validator.js";
 | 
			
		||||
import { emitDeprecationWarning } from "./shared/deprecation-warnings.js";
 | 
			
		||||
 | 
			
		||||
const debug = debugOrig("eslintrc:cascading-config-array-factory");
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Helpers
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// Define types for VSCode IntelliSense.
 | 
			
		||||
/** @typedef {import("./shared/types").ConfigData} ConfigData */
 | 
			
		||||
/** @typedef {import("./shared/types").Parser} Parser */
 | 
			
		||||
/** @typedef {import("./shared/types").Plugin} Plugin */
 | 
			
		||||
/** @typedef {import("./shared/types").Rule} Rule */
 | 
			
		||||
/** @typedef {ReturnType<ConfigArrayFactory["create"]>} ConfigArray */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} CascadingConfigArrayFactoryOptions
 | 
			
		||||
 * @property {Map<string,Plugin>} [additionalPluginPool] The map for additional plugins.
 | 
			
		||||
 * @property {ConfigData} [baseConfig] The config by `baseConfig` option.
 | 
			
		||||
 * @property {ConfigData} [cliConfig] The config by CLI options (`--env`, `--global`, `--ignore-pattern`, `--parser`, `--parser-options`, `--plugin`, and `--rule`). CLI options overwrite the setting in config files.
 | 
			
		||||
 * @property {string} [cwd] The base directory to start lookup.
 | 
			
		||||
 * @property {string} [ignorePath] The path to the alternative file of `.eslintignore`.
 | 
			
		||||
 * @property {string[]} [rulePaths] The value of `--rulesdir` option.
 | 
			
		||||
 * @property {string} [specificConfigPath] The value of `--config` option.
 | 
			
		||||
 * @property {boolean} [useEslintrc] if `false` then it doesn't load config files.
 | 
			
		||||
 * @property {Function} loadRules The function to use to load rules.
 | 
			
		||||
 * @property {Map<string,Rule>} builtInRules The rules that are built in to ESLint.
 | 
			
		||||
 * @property {Object} [resolver=ModuleResolver] The module resolver object.
 | 
			
		||||
 * @property {string} eslintAllPath The path to the definitions for eslint:all.
 | 
			
		||||
 * @property {Function} getEslintAllConfig Returns the config data for eslint:all.
 | 
			
		||||
 * @property {string} eslintRecommendedPath The path to the definitions for eslint:recommended.
 | 
			
		||||
 * @property {Function} getEslintRecommendedConfig Returns the config data for eslint:recommended.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} CascadingConfigArrayFactoryInternalSlots
 | 
			
		||||
 * @property {ConfigArray} baseConfigArray The config array of `baseConfig` option.
 | 
			
		||||
 * @property {ConfigData} baseConfigData The config data of `baseConfig` option. This is used to reset `baseConfigArray`.
 | 
			
		||||
 * @property {ConfigArray} cliConfigArray The config array of CLI options.
 | 
			
		||||
 * @property {ConfigData} cliConfigData The config data of CLI options. This is used to reset `cliConfigArray`.
 | 
			
		||||
 * @property {ConfigArrayFactory} configArrayFactory The factory for config arrays.
 | 
			
		||||
 * @property {Map<string, ConfigArray>} configCache The cache from directory paths to config arrays.
 | 
			
		||||
 * @property {string} cwd The base directory to start lookup.
 | 
			
		||||
 * @property {WeakMap<ConfigArray, ConfigArray>} finalizeCache The cache from config arrays to finalized config arrays.
 | 
			
		||||
 * @property {string} [ignorePath] The path to the alternative file of `.eslintignore`.
 | 
			
		||||
 * @property {string[]|null} rulePaths The value of `--rulesdir` option. This is used to reset `baseConfigArray`.
 | 
			
		||||
 * @property {string|null} specificConfigPath The value of `--config` option. This is used to reset `cliConfigArray`.
 | 
			
		||||
 * @property {boolean} useEslintrc if `false` then it doesn't load config files.
 | 
			
		||||
 * @property {Function} loadRules The function to use to load rules.
 | 
			
		||||
 * @property {Map<string,Rule>} builtInRules The rules that are built in to ESLint.
 | 
			
		||||
 * @property {Object} [resolver=ModuleResolver] The module resolver object.
 | 
			
		||||
 * @property {string} eslintAllPath The path to the definitions for eslint:all.
 | 
			
		||||
 * @property {Function} getEslintAllConfig Returns the config data for eslint:all.
 | 
			
		||||
 * @property {string} eslintRecommendedPath The path to the definitions for eslint:recommended.
 | 
			
		||||
 * @property {Function} getEslintRecommendedConfig Returns the config data for eslint:recommended.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** @type {WeakMap<CascadingConfigArrayFactory, CascadingConfigArrayFactoryInternalSlots>} */
 | 
			
		||||
const internalSlotsMap = new WeakMap();
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Create the config array from `baseConfig` and `rulePaths`.
 | 
			
		||||
 * @param {CascadingConfigArrayFactoryInternalSlots} slots The slots.
 | 
			
		||||
 * @returns {ConfigArray} The config array of the base configs.
 | 
			
		||||
 */
 | 
			
		||||
function createBaseConfigArray({
 | 
			
		||||
    configArrayFactory,
 | 
			
		||||
    baseConfigData,
 | 
			
		||||
    rulePaths,
 | 
			
		||||
    cwd,
 | 
			
		||||
    loadRules
 | 
			
		||||
}) {
 | 
			
		||||
    const baseConfigArray = configArrayFactory.create(
 | 
			
		||||
        baseConfigData,
 | 
			
		||||
        { name: "BaseConfig" }
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * Create the config array element for the default ignore patterns.
 | 
			
		||||
     * This element has `ignorePattern` property that ignores the default
 | 
			
		||||
     * patterns in the current working directory.
 | 
			
		||||
     */
 | 
			
		||||
    baseConfigArray.unshift(configArrayFactory.create(
 | 
			
		||||
        { ignorePatterns: IgnorePattern.DefaultPatterns },
 | 
			
		||||
        { name: "DefaultIgnorePattern" }
 | 
			
		||||
    )[0]);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * Load rules `--rulesdir` option as a pseudo plugin.
 | 
			
		||||
     * Use a pseudo plugin to define rules of `--rulesdir`, so we can validate
 | 
			
		||||
     * the rule's options with only information in the config array.
 | 
			
		||||
     */
 | 
			
		||||
    if (rulePaths && rulePaths.length > 0) {
 | 
			
		||||
        baseConfigArray.push({
 | 
			
		||||
            type: "config",
 | 
			
		||||
            name: "--rulesdir",
 | 
			
		||||
            filePath: "",
 | 
			
		||||
            plugins: {
 | 
			
		||||
                "": new ConfigDependency({
 | 
			
		||||
                    definition: {
 | 
			
		||||
                        rules: rulePaths.reduce(
 | 
			
		||||
                            (map, rulesPath) => Object.assign(
 | 
			
		||||
                                map,
 | 
			
		||||
                                loadRules(rulesPath, cwd)
 | 
			
		||||
                            ),
 | 
			
		||||
                            {}
 | 
			
		||||
                        )
 | 
			
		||||
                    },
 | 
			
		||||
                    filePath: "",
 | 
			
		||||
                    id: "",
 | 
			
		||||
                    importerName: "--rulesdir",
 | 
			
		||||
                    importerPath: ""
 | 
			
		||||
                })
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return baseConfigArray;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Create the config array from CLI options.
 | 
			
		||||
 * @param {CascadingConfigArrayFactoryInternalSlots} slots The slots.
 | 
			
		||||
 * @returns {ConfigArray} The config array of the base configs.
 | 
			
		||||
 */
 | 
			
		||||
function createCLIConfigArray({
 | 
			
		||||
    cliConfigData,
 | 
			
		||||
    configArrayFactory,
 | 
			
		||||
    cwd,
 | 
			
		||||
    ignorePath,
 | 
			
		||||
    specificConfigPath
 | 
			
		||||
}) {
 | 
			
		||||
    const cliConfigArray = configArrayFactory.create(
 | 
			
		||||
        cliConfigData,
 | 
			
		||||
        { name: "CLIOptions" }
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    cliConfigArray.unshift(
 | 
			
		||||
        ...(ignorePath
 | 
			
		||||
            ? configArrayFactory.loadESLintIgnore(ignorePath)
 | 
			
		||||
            : configArrayFactory.loadDefaultESLintIgnore())
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    if (specificConfigPath) {
 | 
			
		||||
        cliConfigArray.unshift(
 | 
			
		||||
            ...configArrayFactory.loadFile(
 | 
			
		||||
                specificConfigPath,
 | 
			
		||||
                { name: "--config", basePath: cwd }
 | 
			
		||||
            )
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return cliConfigArray;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The error type when there are files matched by a glob, but all of them have been ignored.
 | 
			
		||||
 */
 | 
			
		||||
class ConfigurationNotFoundError extends Error {
 | 
			
		||||
 | 
			
		||||
    // eslint-disable-next-line jsdoc/require-description
 | 
			
		||||
    /**
 | 
			
		||||
     * @param {string} directoryPath The directory path.
 | 
			
		||||
     */
 | 
			
		||||
    constructor(directoryPath) {
 | 
			
		||||
        super(`No ESLint configuration found in ${directoryPath}.`);
 | 
			
		||||
        this.messageTemplate = "no-config-found";
 | 
			
		||||
        this.messageData = { directoryPath };
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This class provides the functionality that enumerates every file which is
 | 
			
		||||
 * matched by given glob patterns and that configuration.
 | 
			
		||||
 */
 | 
			
		||||
class CascadingConfigArrayFactory {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Initialize this enumerator.
 | 
			
		||||
     * @param {CascadingConfigArrayFactoryOptions} options The options.
 | 
			
		||||
     */
 | 
			
		||||
    constructor({
 | 
			
		||||
        additionalPluginPool = new Map(),
 | 
			
		||||
        baseConfig: baseConfigData = null,
 | 
			
		||||
        cliConfig: cliConfigData = null,
 | 
			
		||||
        cwd = process.cwd(),
 | 
			
		||||
        ignorePath,
 | 
			
		||||
        resolvePluginsRelativeTo,
 | 
			
		||||
        rulePaths = [],
 | 
			
		||||
        specificConfigPath = null,
 | 
			
		||||
        useEslintrc = true,
 | 
			
		||||
        builtInRules = new Map(),
 | 
			
		||||
        loadRules,
 | 
			
		||||
        resolver,
 | 
			
		||||
        eslintRecommendedPath,
 | 
			
		||||
        getEslintRecommendedConfig,
 | 
			
		||||
        eslintAllPath,
 | 
			
		||||
        getEslintAllConfig
 | 
			
		||||
    } = {}) {
 | 
			
		||||
        const configArrayFactory = new ConfigArrayFactory({
 | 
			
		||||
            additionalPluginPool,
 | 
			
		||||
            cwd,
 | 
			
		||||
            resolvePluginsRelativeTo,
 | 
			
		||||
            builtInRules,
 | 
			
		||||
            resolver,
 | 
			
		||||
            eslintRecommendedPath,
 | 
			
		||||
            getEslintRecommendedConfig,
 | 
			
		||||
            eslintAllPath,
 | 
			
		||||
            getEslintAllConfig
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        internalSlotsMap.set(this, {
 | 
			
		||||
            baseConfigArray: createBaseConfigArray({
 | 
			
		||||
                baseConfigData,
 | 
			
		||||
                configArrayFactory,
 | 
			
		||||
                cwd,
 | 
			
		||||
                rulePaths,
 | 
			
		||||
                loadRules
 | 
			
		||||
            }),
 | 
			
		||||
            baseConfigData,
 | 
			
		||||
            cliConfigArray: createCLIConfigArray({
 | 
			
		||||
                cliConfigData,
 | 
			
		||||
                configArrayFactory,
 | 
			
		||||
                cwd,
 | 
			
		||||
                ignorePath,
 | 
			
		||||
                specificConfigPath
 | 
			
		||||
            }),
 | 
			
		||||
            cliConfigData,
 | 
			
		||||
            configArrayFactory,
 | 
			
		||||
            configCache: new Map(),
 | 
			
		||||
            cwd,
 | 
			
		||||
            finalizeCache: new WeakMap(),
 | 
			
		||||
            ignorePath,
 | 
			
		||||
            rulePaths,
 | 
			
		||||
            specificConfigPath,
 | 
			
		||||
            useEslintrc,
 | 
			
		||||
            builtInRules,
 | 
			
		||||
            loadRules
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The path to the current working directory.
 | 
			
		||||
     * This is used by tests.
 | 
			
		||||
     * @type {string}
 | 
			
		||||
     */
 | 
			
		||||
    get cwd() {
 | 
			
		||||
        const { cwd } = internalSlotsMap.get(this);
 | 
			
		||||
 | 
			
		||||
        return cwd;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the config array of a given file.
 | 
			
		||||
     * If `filePath` was not given, it returns the config which contains only
 | 
			
		||||
     * `baseConfigData` and `cliConfigData`.
 | 
			
		||||
     * @param {string} [filePath] The file path to a file.
 | 
			
		||||
     * @param {Object} [options] The options.
 | 
			
		||||
     * @param {boolean} [options.ignoreNotFoundError] If `true` then it doesn't throw `ConfigurationNotFoundError`.
 | 
			
		||||
     * @returns {ConfigArray} The config array of the file.
 | 
			
		||||
     */
 | 
			
		||||
    getConfigArrayForFile(filePath, { ignoreNotFoundError = false } = {}) {
 | 
			
		||||
        const {
 | 
			
		||||
            baseConfigArray,
 | 
			
		||||
            cliConfigArray,
 | 
			
		||||
            cwd
 | 
			
		||||
        } = internalSlotsMap.get(this);
 | 
			
		||||
 | 
			
		||||
        if (!filePath) {
 | 
			
		||||
            return new ConfigArray(...baseConfigArray, ...cliConfigArray);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const directoryPath = path.dirname(path.resolve(cwd, filePath));
 | 
			
		||||
 | 
			
		||||
        debug(`Load config files for ${directoryPath}.`);
 | 
			
		||||
 | 
			
		||||
        return this._finalizeConfigArray(
 | 
			
		||||
            this._loadConfigInAncestors(directoryPath),
 | 
			
		||||
            directoryPath,
 | 
			
		||||
            ignoreNotFoundError
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the config data to override all configs.
 | 
			
		||||
     * Require to call `clearCache()` method after this method is called.
 | 
			
		||||
     * @param {ConfigData} configData The config data to override all configs.
 | 
			
		||||
     * @returns {void}
 | 
			
		||||
     */
 | 
			
		||||
    setOverrideConfig(configData) {
 | 
			
		||||
        const slots = internalSlotsMap.get(this);
 | 
			
		||||
 | 
			
		||||
        slots.cliConfigData = configData;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Clear config cache.
 | 
			
		||||
     * @returns {void}
 | 
			
		||||
     */
 | 
			
		||||
    clearCache() {
 | 
			
		||||
        const slots = internalSlotsMap.get(this);
 | 
			
		||||
 | 
			
		||||
        slots.baseConfigArray = createBaseConfigArray(slots);
 | 
			
		||||
        slots.cliConfigArray = createCLIConfigArray(slots);
 | 
			
		||||
        slots.configCache.clear();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Load and normalize config files from the ancestor directories.
 | 
			
		||||
     * @param {string} directoryPath The path to a leaf directory.
 | 
			
		||||
     * @param {boolean} configsExistInSubdirs `true` if configurations exist in subdirectories.
 | 
			
		||||
     * @returns {ConfigArray} The loaded config.
 | 
			
		||||
     * @private
 | 
			
		||||
     */
 | 
			
		||||
    _loadConfigInAncestors(directoryPath, configsExistInSubdirs = false) {
 | 
			
		||||
        const {
 | 
			
		||||
            baseConfigArray,
 | 
			
		||||
            configArrayFactory,
 | 
			
		||||
            configCache,
 | 
			
		||||
            cwd,
 | 
			
		||||
            useEslintrc
 | 
			
		||||
        } = internalSlotsMap.get(this);
 | 
			
		||||
 | 
			
		||||
        if (!useEslintrc) {
 | 
			
		||||
            return baseConfigArray;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let configArray = configCache.get(directoryPath);
 | 
			
		||||
 | 
			
		||||
        // Hit cache.
 | 
			
		||||
        if (configArray) {
 | 
			
		||||
            debug(`Cache hit: ${directoryPath}.`);
 | 
			
		||||
            return configArray;
 | 
			
		||||
        }
 | 
			
		||||
        debug(`No cache found: ${directoryPath}.`);
 | 
			
		||||
 | 
			
		||||
        const homePath = os.homedir();
 | 
			
		||||
 | 
			
		||||
        // Consider this is root.
 | 
			
		||||
        if (directoryPath === homePath && cwd !== homePath) {
 | 
			
		||||
            debug("Stop traversing because of considered root.");
 | 
			
		||||
            if (configsExistInSubdirs) {
 | 
			
		||||
                const filePath = ConfigArrayFactory.getPathToConfigFileInDirectory(directoryPath);
 | 
			
		||||
 | 
			
		||||
                if (filePath) {
 | 
			
		||||
                    emitDeprecationWarning(
 | 
			
		||||
                        filePath,
 | 
			
		||||
                        "ESLINT_PERSONAL_CONFIG_SUPPRESS"
 | 
			
		||||
                    );
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return this._cacheConfig(directoryPath, baseConfigArray);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Load the config on this directory.
 | 
			
		||||
        try {
 | 
			
		||||
            configArray = configArrayFactory.loadInDirectory(directoryPath);
 | 
			
		||||
        } catch (error) {
 | 
			
		||||
            /* istanbul ignore next */
 | 
			
		||||
            if (error.code === "EACCES") {
 | 
			
		||||
                debug("Stop traversing because of 'EACCES' error.");
 | 
			
		||||
                return this._cacheConfig(directoryPath, baseConfigArray);
 | 
			
		||||
            }
 | 
			
		||||
            throw error;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (configArray.length > 0 && configArray.isRoot()) {
 | 
			
		||||
            debug("Stop traversing because of 'root:true'.");
 | 
			
		||||
            configArray.unshift(...baseConfigArray);
 | 
			
		||||
            return this._cacheConfig(directoryPath, configArray);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Load from the ancestors and merge it.
 | 
			
		||||
        const parentPath = path.dirname(directoryPath);
 | 
			
		||||
        const parentConfigArray = parentPath && parentPath !== directoryPath
 | 
			
		||||
            ? this._loadConfigInAncestors(
 | 
			
		||||
                parentPath,
 | 
			
		||||
                configsExistInSubdirs || configArray.length > 0
 | 
			
		||||
            )
 | 
			
		||||
            : baseConfigArray;
 | 
			
		||||
 | 
			
		||||
        if (configArray.length > 0) {
 | 
			
		||||
            configArray.unshift(...parentConfigArray);
 | 
			
		||||
        } else {
 | 
			
		||||
            configArray = parentConfigArray;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Cache and return.
 | 
			
		||||
        return this._cacheConfig(directoryPath, configArray);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Freeze and cache a given config.
 | 
			
		||||
     * @param {string} directoryPath The path to a directory as a cache key.
 | 
			
		||||
     * @param {ConfigArray} configArray The config array as a cache value.
 | 
			
		||||
     * @returns {ConfigArray} The `configArray` (frozen).
 | 
			
		||||
     */
 | 
			
		||||
    _cacheConfig(directoryPath, configArray) {
 | 
			
		||||
        const { configCache } = internalSlotsMap.get(this);
 | 
			
		||||
 | 
			
		||||
        Object.freeze(configArray);
 | 
			
		||||
        configCache.set(directoryPath, configArray);
 | 
			
		||||
 | 
			
		||||
        return configArray;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Finalize a given config array.
 | 
			
		||||
     * Concatenate `--config` and other CLI options.
 | 
			
		||||
     * @param {ConfigArray} configArray The parent config array.
 | 
			
		||||
     * @param {string} directoryPath The path to the leaf directory to find config files.
 | 
			
		||||
     * @param {boolean} ignoreNotFoundError If `true` then it doesn't throw `ConfigurationNotFoundError`.
 | 
			
		||||
     * @returns {ConfigArray} The loaded config.
 | 
			
		||||
     * @private
 | 
			
		||||
     */
 | 
			
		||||
    _finalizeConfigArray(configArray, directoryPath, ignoreNotFoundError) {
 | 
			
		||||
        const {
 | 
			
		||||
            cliConfigArray,
 | 
			
		||||
            configArrayFactory,
 | 
			
		||||
            finalizeCache,
 | 
			
		||||
            useEslintrc,
 | 
			
		||||
            builtInRules
 | 
			
		||||
        } = internalSlotsMap.get(this);
 | 
			
		||||
 | 
			
		||||
        let finalConfigArray = finalizeCache.get(configArray);
 | 
			
		||||
 | 
			
		||||
        if (!finalConfigArray) {
 | 
			
		||||
            finalConfigArray = configArray;
 | 
			
		||||
 | 
			
		||||
            // Load the personal config if there are no regular config files.
 | 
			
		||||
            if (
 | 
			
		||||
                useEslintrc &&
 | 
			
		||||
                configArray.every(c => !c.filePath) &&
 | 
			
		||||
                cliConfigArray.every(c => !c.filePath) // `--config` option can be a file.
 | 
			
		||||
            ) {
 | 
			
		||||
                const homePath = os.homedir();
 | 
			
		||||
 | 
			
		||||
                debug("Loading the config file of the home directory:", homePath);
 | 
			
		||||
 | 
			
		||||
                const personalConfigArray = configArrayFactory.loadInDirectory(
 | 
			
		||||
                    homePath,
 | 
			
		||||
                    { name: "PersonalConfig" }
 | 
			
		||||
                );
 | 
			
		||||
 | 
			
		||||
                if (
 | 
			
		||||
                    personalConfigArray.length > 0 &&
 | 
			
		||||
                    !directoryPath.startsWith(homePath)
 | 
			
		||||
                ) {
 | 
			
		||||
                    const lastElement =
 | 
			
		||||
                        personalConfigArray[personalConfigArray.length - 1];
 | 
			
		||||
 | 
			
		||||
                    emitDeprecationWarning(
 | 
			
		||||
                        lastElement.filePath,
 | 
			
		||||
                        "ESLINT_PERSONAL_CONFIG_LOAD"
 | 
			
		||||
                    );
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                finalConfigArray = finalConfigArray.concat(personalConfigArray);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Apply CLI options.
 | 
			
		||||
            if (cliConfigArray.length > 0) {
 | 
			
		||||
                finalConfigArray = finalConfigArray.concat(cliConfigArray);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Validate rule settings and environments.
 | 
			
		||||
            const validator = new ConfigValidator({
 | 
			
		||||
                builtInRules
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            validator.validateConfigArray(finalConfigArray);
 | 
			
		||||
 | 
			
		||||
            // Cache it.
 | 
			
		||||
            Object.freeze(finalConfigArray);
 | 
			
		||||
            finalizeCache.set(configArray, finalConfigArray);
 | 
			
		||||
 | 
			
		||||
            debug(
 | 
			
		||||
                "Configuration was determined: %o on %s",
 | 
			
		||||
                finalConfigArray,
 | 
			
		||||
                directoryPath
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // At least one element (the default ignore patterns) exists.
 | 
			
		||||
        if (!ignoreNotFoundError && useEslintrc && finalConfigArray.length <= 1) {
 | 
			
		||||
            throw new ConfigurationNotFoundError(directoryPath);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return finalConfigArray;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Public Interface
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
export { CascadingConfigArrayFactory };
 | 
			
		||||
							
								
								
									
										1149
									
								
								node_modules/@eslint/eslintrc/lib/config-array-factory.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1149
									
								
								node_modules/@eslint/eslintrc/lib/config-array-factory.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										523
									
								
								node_modules/@eslint/eslintrc/lib/config-array/config-array.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										523
									
								
								node_modules/@eslint/eslintrc/lib/config-array/config-array.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,523 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview `ConfigArray` class.
 | 
			
		||||
 *
 | 
			
		||||
 * `ConfigArray` class expresses the full of a configuration. It has the entry
 | 
			
		||||
 * config file, base config files that were extended, loaded parsers, and loaded
 | 
			
		||||
 * plugins.
 | 
			
		||||
 *
 | 
			
		||||
 * `ConfigArray` class provides three properties and two methods.
 | 
			
		||||
 *
 | 
			
		||||
 * - `pluginEnvironments`
 | 
			
		||||
 * - `pluginProcessors`
 | 
			
		||||
 * - `pluginRules`
 | 
			
		||||
 *      The `Map` objects that contain the members of all plugins that this
 | 
			
		||||
 *      config array contains. Those map objects don't have mutation methods.
 | 
			
		||||
 *      Those keys are the member ID such as `pluginId/memberName`.
 | 
			
		||||
 * - `isRoot()`
 | 
			
		||||
 *      If `true` then this configuration has `root:true` property.
 | 
			
		||||
 * - `extractConfig(filePath)`
 | 
			
		||||
 *      Extract the final configuration for a given file. This means merging
 | 
			
		||||
 *      every config array element which that `criteria` property matched. The
 | 
			
		||||
 *      `filePath` argument must be an absolute path.
 | 
			
		||||
 *
 | 
			
		||||
 * `ConfigArrayFactory` provides the loading logic of config files.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Toru Nagashima <https://github.com/mysticatea>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Requirements
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
import { ExtractedConfig } from "./extracted-config.js";
 | 
			
		||||
import { IgnorePattern } from "./ignore-pattern.js";
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Helpers
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// Define types for VSCode IntelliSense.
 | 
			
		||||
/** @typedef {import("../../shared/types").Environment} Environment */
 | 
			
		||||
/** @typedef {import("../../shared/types").GlobalConf} GlobalConf */
 | 
			
		||||
/** @typedef {import("../../shared/types").RuleConf} RuleConf */
 | 
			
		||||
/** @typedef {import("../../shared/types").Rule} Rule */
 | 
			
		||||
/** @typedef {import("../../shared/types").Plugin} Plugin */
 | 
			
		||||
/** @typedef {import("../../shared/types").Processor} Processor */
 | 
			
		||||
/** @typedef {import("./config-dependency").DependentParser} DependentParser */
 | 
			
		||||
/** @typedef {import("./config-dependency").DependentPlugin} DependentPlugin */
 | 
			
		||||
/** @typedef {import("./override-tester")["OverrideTester"]} OverrideTester */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} ConfigArrayElement
 | 
			
		||||
 * @property {string} name The name of this config element.
 | 
			
		||||
 * @property {string} filePath The path to the source file of this config element.
 | 
			
		||||
 * @property {InstanceType<OverrideTester>|null} criteria The tester for the `files` and `excludedFiles` of this config element.
 | 
			
		||||
 * @property {Record<string, boolean>|undefined} env The environment settings.
 | 
			
		||||
 * @property {Record<string, GlobalConf>|undefined} globals The global variable settings.
 | 
			
		||||
 * @property {IgnorePattern|undefined} ignorePattern The ignore patterns.
 | 
			
		||||
 * @property {boolean|undefined} noInlineConfig The flag that disables directive comments.
 | 
			
		||||
 * @property {DependentParser|undefined} parser The parser loader.
 | 
			
		||||
 * @property {Object|undefined} parserOptions The parser options.
 | 
			
		||||
 * @property {Record<string, DependentPlugin>|undefined} plugins The plugin loaders.
 | 
			
		||||
 * @property {string|undefined} processor The processor name to refer plugin's processor.
 | 
			
		||||
 * @property {boolean|undefined} reportUnusedDisableDirectives The flag to report unused `eslint-disable` comments.
 | 
			
		||||
 * @property {boolean|undefined} root The flag to express root.
 | 
			
		||||
 * @property {Record<string, RuleConf>|undefined} rules The rule settings
 | 
			
		||||
 * @property {Object|undefined} settings The shared settings.
 | 
			
		||||
 * @property {"config" | "ignore" | "implicit-processor"} type The element type.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} ConfigArrayInternalSlots
 | 
			
		||||
 * @property {Map<string, ExtractedConfig>} cache The cache to extract configs.
 | 
			
		||||
 * @property {ReadonlyMap<string, Environment>|null} envMap The map from environment ID to environment definition.
 | 
			
		||||
 * @property {ReadonlyMap<string, Processor>|null} processorMap The map from processor ID to environment definition.
 | 
			
		||||
 * @property {ReadonlyMap<string, Rule>|null} ruleMap The map from rule ID to rule definition.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** @type {WeakMap<ConfigArray, ConfigArrayInternalSlots>} */
 | 
			
		||||
const internalSlotsMap = new class extends WeakMap {
 | 
			
		||||
    get(key) {
 | 
			
		||||
        let value = super.get(key);
 | 
			
		||||
 | 
			
		||||
        if (!value) {
 | 
			
		||||
            value = {
 | 
			
		||||
                cache: new Map(),
 | 
			
		||||
                envMap: null,
 | 
			
		||||
                processorMap: null,
 | 
			
		||||
                ruleMap: null
 | 
			
		||||
            };
 | 
			
		||||
            super.set(key, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return value;
 | 
			
		||||
    }
 | 
			
		||||
}();
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get the indices which are matched to a given file.
 | 
			
		||||
 * @param {ConfigArrayElement[]} elements The elements.
 | 
			
		||||
 * @param {string} filePath The path to a target file.
 | 
			
		||||
 * @returns {number[]} The indices.
 | 
			
		||||
 */
 | 
			
		||||
function getMatchedIndices(elements, filePath) {
 | 
			
		||||
    const indices = [];
 | 
			
		||||
 | 
			
		||||
    for (let i = elements.length - 1; i >= 0; --i) {
 | 
			
		||||
        const element = elements[i];
 | 
			
		||||
 | 
			
		||||
        if (!element.criteria || (filePath && element.criteria.test(filePath))) {
 | 
			
		||||
            indices.push(i);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return indices;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Check if a value is a non-null object.
 | 
			
		||||
 * @param {any} x The value to check.
 | 
			
		||||
 * @returns {boolean} `true` if the value is a non-null object.
 | 
			
		||||
 */
 | 
			
		||||
function isNonNullObject(x) {
 | 
			
		||||
    return typeof x === "object" && x !== null;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Merge two objects.
 | 
			
		||||
 *
 | 
			
		||||
 * Assign every property values of `y` to `x` if `x` doesn't have the property.
 | 
			
		||||
 * If `x`'s property value is an object, it does recursive.
 | 
			
		||||
 * @param {Object} target The destination to merge
 | 
			
		||||
 * @param {Object|undefined} source The source to merge.
 | 
			
		||||
 * @returns {void}
 | 
			
		||||
 */
 | 
			
		||||
function mergeWithoutOverwrite(target, source) {
 | 
			
		||||
    if (!isNonNullObject(source)) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (const key of Object.keys(source)) {
 | 
			
		||||
        if (key === "__proto__") {
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (isNonNullObject(target[key])) {
 | 
			
		||||
            mergeWithoutOverwrite(target[key], source[key]);
 | 
			
		||||
        } else if (target[key] === void 0) {
 | 
			
		||||
            if (isNonNullObject(source[key])) {
 | 
			
		||||
                target[key] = Array.isArray(source[key]) ? [] : {};
 | 
			
		||||
                mergeWithoutOverwrite(target[key], source[key]);
 | 
			
		||||
            } else if (source[key] !== void 0) {
 | 
			
		||||
                target[key] = source[key];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The error for plugin conflicts.
 | 
			
		||||
 */
 | 
			
		||||
class PluginConflictError extends Error {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Initialize this error object.
 | 
			
		||||
     * @param {string} pluginId The plugin ID.
 | 
			
		||||
     * @param {{filePath:string, importerName:string}[]} plugins The resolved plugins.
 | 
			
		||||
     */
 | 
			
		||||
    constructor(pluginId, plugins) {
 | 
			
		||||
        super(`Plugin "${pluginId}" was conflicted between ${plugins.map(p => `"${p.importerName}"`).join(" and ")}.`);
 | 
			
		||||
        this.messageTemplate = "plugin-conflict";
 | 
			
		||||
        this.messageData = { pluginId, plugins };
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Merge plugins.
 | 
			
		||||
 * `target`'s definition is prior to `source`'s.
 | 
			
		||||
 * @param {Record<string, DependentPlugin>} target The destination to merge
 | 
			
		||||
 * @param {Record<string, DependentPlugin>|undefined} source The source to merge.
 | 
			
		||||
 * @returns {void}
 | 
			
		||||
 */
 | 
			
		||||
function mergePlugins(target, source) {
 | 
			
		||||
    if (!isNonNullObject(source)) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (const key of Object.keys(source)) {
 | 
			
		||||
        if (key === "__proto__") {
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        const targetValue = target[key];
 | 
			
		||||
        const sourceValue = source[key];
 | 
			
		||||
 | 
			
		||||
        // Adopt the plugin which was found at first.
 | 
			
		||||
        if (targetValue === void 0) {
 | 
			
		||||
            if (sourceValue.error) {
 | 
			
		||||
                throw sourceValue.error;
 | 
			
		||||
            }
 | 
			
		||||
            target[key] = sourceValue;
 | 
			
		||||
        } else if (sourceValue.filePath !== targetValue.filePath) {
 | 
			
		||||
            throw new PluginConflictError(key, [
 | 
			
		||||
                {
 | 
			
		||||
                    filePath: targetValue.filePath,
 | 
			
		||||
                    importerName: targetValue.importerName
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    filePath: sourceValue.filePath,
 | 
			
		||||
                    importerName: sourceValue.importerName
 | 
			
		||||
                }
 | 
			
		||||
            ]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Merge rule configs.
 | 
			
		||||
 * `target`'s definition is prior to `source`'s.
 | 
			
		||||
 * @param {Record<string, Array>} target The destination to merge
 | 
			
		||||
 * @param {Record<string, RuleConf>|undefined} source The source to merge.
 | 
			
		||||
 * @returns {void}
 | 
			
		||||
 */
 | 
			
		||||
function mergeRuleConfigs(target, source) {
 | 
			
		||||
    if (!isNonNullObject(source)) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (const key of Object.keys(source)) {
 | 
			
		||||
        if (key === "__proto__") {
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        const targetDef = target[key];
 | 
			
		||||
        const sourceDef = source[key];
 | 
			
		||||
 | 
			
		||||
        // Adopt the rule config which was found at first.
 | 
			
		||||
        if (targetDef === void 0) {
 | 
			
		||||
            if (Array.isArray(sourceDef)) {
 | 
			
		||||
                target[key] = [...sourceDef];
 | 
			
		||||
            } else {
 | 
			
		||||
                target[key] = [sourceDef];
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        /*
 | 
			
		||||
         * If the first found rule config is severity only and the current rule
 | 
			
		||||
         * config has options, merge the severity and the options.
 | 
			
		||||
         */
 | 
			
		||||
        } else if (
 | 
			
		||||
            targetDef.length === 1 &&
 | 
			
		||||
            Array.isArray(sourceDef) &&
 | 
			
		||||
            sourceDef.length >= 2
 | 
			
		||||
        ) {
 | 
			
		||||
            targetDef.push(...sourceDef.slice(1));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Create the extracted config.
 | 
			
		||||
 * @param {ConfigArray} instance The config elements.
 | 
			
		||||
 * @param {number[]} indices The indices to use.
 | 
			
		||||
 * @returns {ExtractedConfig} The extracted config.
 | 
			
		||||
 */
 | 
			
		||||
function createConfig(instance, indices) {
 | 
			
		||||
    const config = new ExtractedConfig();
 | 
			
		||||
    const ignorePatterns = [];
 | 
			
		||||
 | 
			
		||||
    // Merge elements.
 | 
			
		||||
    for (const index of indices) {
 | 
			
		||||
        const element = instance[index];
 | 
			
		||||
 | 
			
		||||
        // Adopt the parser which was found at first.
 | 
			
		||||
        if (!config.parser && element.parser) {
 | 
			
		||||
            if (element.parser.error) {
 | 
			
		||||
                throw element.parser.error;
 | 
			
		||||
            }
 | 
			
		||||
            config.parser = element.parser;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Adopt the processor which was found at first.
 | 
			
		||||
        if (!config.processor && element.processor) {
 | 
			
		||||
            config.processor = element.processor;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Adopt the noInlineConfig which was found at first.
 | 
			
		||||
        if (config.noInlineConfig === void 0 && element.noInlineConfig !== void 0) {
 | 
			
		||||
            config.noInlineConfig = element.noInlineConfig;
 | 
			
		||||
            config.configNameOfNoInlineConfig = element.name;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Adopt the reportUnusedDisableDirectives which was found at first.
 | 
			
		||||
        if (config.reportUnusedDisableDirectives === void 0 && element.reportUnusedDisableDirectives !== void 0) {
 | 
			
		||||
            config.reportUnusedDisableDirectives = element.reportUnusedDisableDirectives;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Collect ignorePatterns
 | 
			
		||||
        if (element.ignorePattern) {
 | 
			
		||||
            ignorePatterns.push(element.ignorePattern);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Merge others.
 | 
			
		||||
        mergeWithoutOverwrite(config.env, element.env);
 | 
			
		||||
        mergeWithoutOverwrite(config.globals, element.globals);
 | 
			
		||||
        mergeWithoutOverwrite(config.parserOptions, element.parserOptions);
 | 
			
		||||
        mergeWithoutOverwrite(config.settings, element.settings);
 | 
			
		||||
        mergePlugins(config.plugins, element.plugins);
 | 
			
		||||
        mergeRuleConfigs(config.rules, element.rules);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Create the predicate function for ignore patterns.
 | 
			
		||||
    if (ignorePatterns.length > 0) {
 | 
			
		||||
        config.ignores = IgnorePattern.createIgnore(ignorePatterns.reverse());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return config;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Collect definitions.
 | 
			
		||||
 * @template T, U
 | 
			
		||||
 * @param {string} pluginId The plugin ID for prefix.
 | 
			
		||||
 * @param {Record<string,T>} defs The definitions to collect.
 | 
			
		||||
 * @param {Map<string, U>} map The map to output.
 | 
			
		||||
 * @param {function(T): U} [normalize] The normalize function for each value.
 | 
			
		||||
 * @returns {void}
 | 
			
		||||
 */
 | 
			
		||||
function collect(pluginId, defs, map, normalize) {
 | 
			
		||||
    if (defs) {
 | 
			
		||||
        const prefix = pluginId && `${pluginId}/`;
 | 
			
		||||
 | 
			
		||||
        for (const [key, value] of Object.entries(defs)) {
 | 
			
		||||
            map.set(
 | 
			
		||||
                `${prefix}${key}`,
 | 
			
		||||
                normalize ? normalize(value) : value
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Normalize a rule definition.
 | 
			
		||||
 * @param {Function|Rule} rule The rule definition to normalize.
 | 
			
		||||
 * @returns {Rule} The normalized rule definition.
 | 
			
		||||
 */
 | 
			
		||||
function normalizePluginRule(rule) {
 | 
			
		||||
    return typeof rule === "function" ? { create: rule } : rule;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Delete the mutation methods from a given map.
 | 
			
		||||
 * @param {Map<any, any>} map The map object to delete.
 | 
			
		||||
 * @returns {void}
 | 
			
		||||
 */
 | 
			
		||||
function deleteMutationMethods(map) {
 | 
			
		||||
    Object.defineProperties(map, {
 | 
			
		||||
        clear: { configurable: true, value: void 0 },
 | 
			
		||||
        delete: { configurable: true, value: void 0 },
 | 
			
		||||
        set: { configurable: true, value: void 0 }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Create `envMap`, `processorMap`, `ruleMap` with the plugins in the config array.
 | 
			
		||||
 * @param {ConfigArrayElement[]} elements The config elements.
 | 
			
		||||
 * @param {ConfigArrayInternalSlots} slots The internal slots.
 | 
			
		||||
 * @returns {void}
 | 
			
		||||
 */
 | 
			
		||||
function initPluginMemberMaps(elements, slots) {
 | 
			
		||||
    const processed = new Set();
 | 
			
		||||
 | 
			
		||||
    slots.envMap = new Map();
 | 
			
		||||
    slots.processorMap = new Map();
 | 
			
		||||
    slots.ruleMap = new Map();
 | 
			
		||||
 | 
			
		||||
    for (const element of elements) {
 | 
			
		||||
        if (!element.plugins) {
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for (const [pluginId, value] of Object.entries(element.plugins)) {
 | 
			
		||||
            const plugin = value.definition;
 | 
			
		||||
 | 
			
		||||
            if (!plugin || processed.has(pluginId)) {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            processed.add(pluginId);
 | 
			
		||||
 | 
			
		||||
            collect(pluginId, plugin.environments, slots.envMap);
 | 
			
		||||
            collect(pluginId, plugin.processors, slots.processorMap);
 | 
			
		||||
            collect(pluginId, plugin.rules, slots.ruleMap, normalizePluginRule);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    deleteMutationMethods(slots.envMap);
 | 
			
		||||
    deleteMutationMethods(slots.processorMap);
 | 
			
		||||
    deleteMutationMethods(slots.ruleMap);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Create `envMap`, `processorMap`, `ruleMap` with the plugins in the config array.
 | 
			
		||||
 * @param {ConfigArray} instance The config elements.
 | 
			
		||||
 * @returns {ConfigArrayInternalSlots} The extracted config.
 | 
			
		||||
 */
 | 
			
		||||
function ensurePluginMemberMaps(instance) {
 | 
			
		||||
    const slots = internalSlotsMap.get(instance);
 | 
			
		||||
 | 
			
		||||
    if (!slots.ruleMap) {
 | 
			
		||||
        initPluginMemberMaps(instance, slots);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return slots;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Public Interface
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The Config Array.
 | 
			
		||||
 *
 | 
			
		||||
 * `ConfigArray` instance contains all settings, parsers, and plugins.
 | 
			
		||||
 * You need to call `ConfigArray#extractConfig(filePath)` method in order to
 | 
			
		||||
 * extract, merge and get only the config data which is related to an arbitrary
 | 
			
		||||
 * file.
 | 
			
		||||
 * @extends {Array<ConfigArrayElement>}
 | 
			
		||||
 */
 | 
			
		||||
class ConfigArray extends Array {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the plugin environments.
 | 
			
		||||
     * The returned map cannot be mutated.
 | 
			
		||||
     * @type {ReadonlyMap<string, Environment>} The plugin environments.
 | 
			
		||||
     */
 | 
			
		||||
    get pluginEnvironments() {
 | 
			
		||||
        return ensurePluginMemberMaps(this).envMap;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the plugin processors.
 | 
			
		||||
     * The returned map cannot be mutated.
 | 
			
		||||
     * @type {ReadonlyMap<string, Processor>} The plugin processors.
 | 
			
		||||
     */
 | 
			
		||||
    get pluginProcessors() {
 | 
			
		||||
        return ensurePluginMemberMaps(this).processorMap;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the plugin rules.
 | 
			
		||||
     * The returned map cannot be mutated.
 | 
			
		||||
     * @returns {ReadonlyMap<string, Rule>} The plugin rules.
 | 
			
		||||
     */
 | 
			
		||||
    get pluginRules() {
 | 
			
		||||
        return ensurePluginMemberMaps(this).ruleMap;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Check if this config has `root` flag.
 | 
			
		||||
     * @returns {boolean} `true` if this config array is root.
 | 
			
		||||
     */
 | 
			
		||||
    isRoot() {
 | 
			
		||||
        for (let i = this.length - 1; i >= 0; --i) {
 | 
			
		||||
            const root = this[i].root;
 | 
			
		||||
 | 
			
		||||
            if (typeof root === "boolean") {
 | 
			
		||||
                return root;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Extract the config data which is related to a given file.
 | 
			
		||||
     * @param {string} filePath The absolute path to the target file.
 | 
			
		||||
     * @returns {ExtractedConfig} The extracted config data.
 | 
			
		||||
     */
 | 
			
		||||
    extractConfig(filePath) {
 | 
			
		||||
        const { cache } = internalSlotsMap.get(this);
 | 
			
		||||
        const indices = getMatchedIndices(this, filePath);
 | 
			
		||||
        const cacheKey = indices.join(",");
 | 
			
		||||
 | 
			
		||||
        if (!cache.has(cacheKey)) {
 | 
			
		||||
            cache.set(cacheKey, createConfig(this, indices));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return cache.get(cacheKey);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Check if a given path is an additional lint target.
 | 
			
		||||
     * @param {string} filePath The absolute path to the target file.
 | 
			
		||||
     * @returns {boolean} `true` if the file is an additional lint target.
 | 
			
		||||
     */
 | 
			
		||||
    isAdditionalTargetPath(filePath) {
 | 
			
		||||
        for (const { criteria, type } of this) {
 | 
			
		||||
            if (
 | 
			
		||||
                type === "config" &&
 | 
			
		||||
                criteria &&
 | 
			
		||||
                !criteria.endsWithWildcard &&
 | 
			
		||||
                criteria.test(filePath)
 | 
			
		||||
            ) {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get the used extracted configs.
 | 
			
		||||
 * CLIEngine will use this method to collect used deprecated rules.
 | 
			
		||||
 * @param {ConfigArray} instance The config array object to get.
 | 
			
		||||
 * @returns {ExtractedConfig[]} The used extracted configs.
 | 
			
		||||
 * @private
 | 
			
		||||
 */
 | 
			
		||||
function getUsedExtractedConfigs(instance) {
 | 
			
		||||
    const { cache } = internalSlotsMap.get(instance);
 | 
			
		||||
 | 
			
		||||
    return Array.from(cache.values());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
export {
 | 
			
		||||
    ConfigArray,
 | 
			
		||||
    getUsedExtractedConfigs
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										115
									
								
								node_modules/@eslint/eslintrc/lib/config-array/config-dependency.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								node_modules/@eslint/eslintrc/lib/config-array/config-dependency.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,115 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview `ConfigDependency` class.
 | 
			
		||||
 *
 | 
			
		||||
 * `ConfigDependency` class expresses a loaded parser or plugin.
 | 
			
		||||
 *
 | 
			
		||||
 * If the parser or plugin was loaded successfully, it has `definition` property
 | 
			
		||||
 * and `filePath` property. Otherwise, it has `error` property.
 | 
			
		||||
 *
 | 
			
		||||
 * When `JSON.stringify()` converted a `ConfigDependency` object to a JSON, it
 | 
			
		||||
 * omits `definition` property.
 | 
			
		||||
 *
 | 
			
		||||
 * `ConfigArrayFactory` creates `ConfigDependency` objects when it loads parsers
 | 
			
		||||
 * or plugins.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Toru Nagashima <https://github.com/mysticatea>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import util from "util";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The class is to store parsers or plugins.
 | 
			
		||||
 * This class hides the loaded object from `JSON.stringify()` and `console.log`.
 | 
			
		||||
 * @template T
 | 
			
		||||
 */
 | 
			
		||||
class ConfigDependency {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Initialize this instance.
 | 
			
		||||
     * @param {Object} data The dependency data.
 | 
			
		||||
     * @param {T} [data.definition] The dependency if the loading succeeded.
 | 
			
		||||
     * @param {Error} [data.error] The error object if the loading failed.
 | 
			
		||||
     * @param {string} [data.filePath] The actual path to the dependency if the loading succeeded.
 | 
			
		||||
     * @param {string} data.id The ID of this dependency.
 | 
			
		||||
     * @param {string} data.importerName The name of the config file which loads this dependency.
 | 
			
		||||
     * @param {string} data.importerPath The path to the config file which loads this dependency.
 | 
			
		||||
     */
 | 
			
		||||
    constructor({
 | 
			
		||||
        definition = null,
 | 
			
		||||
        error = null,
 | 
			
		||||
        filePath = null,
 | 
			
		||||
        id,
 | 
			
		||||
        importerName,
 | 
			
		||||
        importerPath
 | 
			
		||||
    }) {
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The loaded dependency if the loading succeeded.
 | 
			
		||||
         * @type {T|null}
 | 
			
		||||
         */
 | 
			
		||||
        this.definition = definition;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The error object if the loading failed.
 | 
			
		||||
         * @type {Error|null}
 | 
			
		||||
         */
 | 
			
		||||
        this.error = error;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The loaded dependency if the loading succeeded.
 | 
			
		||||
         * @type {string|null}
 | 
			
		||||
         */
 | 
			
		||||
        this.filePath = filePath;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The ID of this dependency.
 | 
			
		||||
         * @type {string}
 | 
			
		||||
         */
 | 
			
		||||
        this.id = id;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The name of the config file which loads this dependency.
 | 
			
		||||
         * @type {string}
 | 
			
		||||
         */
 | 
			
		||||
        this.importerName = importerName;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The path to the config file which loads this dependency.
 | 
			
		||||
         * @type {string}
 | 
			
		||||
         */
 | 
			
		||||
        this.importerPath = importerPath;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // eslint-disable-next-line jsdoc/require-description
 | 
			
		||||
    /**
 | 
			
		||||
     * @returns {Object} a JSON compatible object.
 | 
			
		||||
     */
 | 
			
		||||
    toJSON() {
 | 
			
		||||
        const obj = this[util.inspect.custom]();
 | 
			
		||||
 | 
			
		||||
        // Display `error.message` (`Error#message` is unenumerable).
 | 
			
		||||
        if (obj.error instanceof Error) {
 | 
			
		||||
            obj.error = { ...obj.error, message: obj.error.message };
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return obj;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // eslint-disable-next-line jsdoc/require-description
 | 
			
		||||
    /**
 | 
			
		||||
     * @returns {Object} an object to display by `console.log()`.
 | 
			
		||||
     */
 | 
			
		||||
    [util.inspect.custom]() {
 | 
			
		||||
        const {
 | 
			
		||||
            definition: _ignore, // eslint-disable-line no-unused-vars
 | 
			
		||||
            ...obj
 | 
			
		||||
        } = this;
 | 
			
		||||
 | 
			
		||||
        return obj;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** @typedef {ConfigDependency<import("../../shared/types").Parser>} DependentParser */
 | 
			
		||||
/** @typedef {ConfigDependency<import("../../shared/types").Plugin>} DependentPlugin */
 | 
			
		||||
 | 
			
		||||
export { ConfigDependency };
 | 
			
		||||
							
								
								
									
										145
									
								
								node_modules/@eslint/eslintrc/lib/config-array/extracted-config.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								node_modules/@eslint/eslintrc/lib/config-array/extracted-config.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,145 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview `ExtractedConfig` class.
 | 
			
		||||
 *
 | 
			
		||||
 * `ExtractedConfig` class expresses a final configuration for a specific file.
 | 
			
		||||
 *
 | 
			
		||||
 * It provides one method.
 | 
			
		||||
 *
 | 
			
		||||
 * - `toCompatibleObjectAsConfigFileContent()`
 | 
			
		||||
 *      Convert this configuration to the compatible object as the content of
 | 
			
		||||
 *      config files. It converts the loaded parser and plugins to strings.
 | 
			
		||||
 *      `CLIEngine#getConfigForFile(filePath)` method uses this method.
 | 
			
		||||
 *
 | 
			
		||||
 * `ConfigArray#extractConfig(filePath)` creates a `ExtractedConfig` instance.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Toru Nagashima <https://github.com/mysticatea>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import { IgnorePattern } from "./ignore-pattern.js";
 | 
			
		||||
 | 
			
		||||
// For VSCode intellisense
 | 
			
		||||
/** @typedef {import("../../shared/types").ConfigData} ConfigData */
 | 
			
		||||
/** @typedef {import("../../shared/types").GlobalConf} GlobalConf */
 | 
			
		||||
/** @typedef {import("../../shared/types").SeverityConf} SeverityConf */
 | 
			
		||||
/** @typedef {import("./config-dependency").DependentParser} DependentParser */
 | 
			
		||||
/** @typedef {import("./config-dependency").DependentPlugin} DependentPlugin */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Check if `xs` starts with `ys`.
 | 
			
		||||
 * @template T
 | 
			
		||||
 * @param {T[]} xs The array to check.
 | 
			
		||||
 * @param {T[]} ys The array that may be the first part of `xs`.
 | 
			
		||||
 * @returns {boolean} `true` if `xs` starts with `ys`.
 | 
			
		||||
 */
 | 
			
		||||
function startsWith(xs, ys) {
 | 
			
		||||
    return xs.length >= ys.length && ys.every((y, i) => y === xs[i]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The class for extracted config data.
 | 
			
		||||
 */
 | 
			
		||||
class ExtractedConfig {
 | 
			
		||||
    constructor() {
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The config name what `noInlineConfig` setting came from.
 | 
			
		||||
         * @type {string}
 | 
			
		||||
         */
 | 
			
		||||
        this.configNameOfNoInlineConfig = "";
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Environments.
 | 
			
		||||
         * @type {Record<string, boolean>}
 | 
			
		||||
         */
 | 
			
		||||
        this.env = {};
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Global variables.
 | 
			
		||||
         * @type {Record<string, GlobalConf>}
 | 
			
		||||
         */
 | 
			
		||||
        this.globals = {};
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The glob patterns that ignore to lint.
 | 
			
		||||
         * @type {(((filePath:string, dot?:boolean) => boolean) & { basePath:string; patterns:string[] }) | undefined}
 | 
			
		||||
         */
 | 
			
		||||
        this.ignores = void 0;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The flag that disables directive comments.
 | 
			
		||||
         * @type {boolean|undefined}
 | 
			
		||||
         */
 | 
			
		||||
        this.noInlineConfig = void 0;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Parser definition.
 | 
			
		||||
         * @type {DependentParser|null}
 | 
			
		||||
         */
 | 
			
		||||
        this.parser = null;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Options for the parser.
 | 
			
		||||
         * @type {Object}
 | 
			
		||||
         */
 | 
			
		||||
        this.parserOptions = {};
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Plugin definitions.
 | 
			
		||||
         * @type {Record<string, DependentPlugin>}
 | 
			
		||||
         */
 | 
			
		||||
        this.plugins = {};
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Processor ID.
 | 
			
		||||
         * @type {string|null}
 | 
			
		||||
         */
 | 
			
		||||
        this.processor = null;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The flag that reports unused `eslint-disable` directive comments.
 | 
			
		||||
         * @type {boolean|undefined}
 | 
			
		||||
         */
 | 
			
		||||
        this.reportUnusedDisableDirectives = void 0;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Rule settings.
 | 
			
		||||
         * @type {Record<string, [SeverityConf, ...any[]]>}
 | 
			
		||||
         */
 | 
			
		||||
        this.rules = {};
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Shared settings.
 | 
			
		||||
         * @type {Object}
 | 
			
		||||
         */
 | 
			
		||||
        this.settings = {};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Convert this config to the compatible object as a config file content.
 | 
			
		||||
     * @returns {ConfigData} The converted object.
 | 
			
		||||
     */
 | 
			
		||||
    toCompatibleObjectAsConfigFileContent() {
 | 
			
		||||
        const {
 | 
			
		||||
            /* eslint-disable no-unused-vars */
 | 
			
		||||
            configNameOfNoInlineConfig: _ignore1,
 | 
			
		||||
            processor: _ignore2,
 | 
			
		||||
            /* eslint-enable no-unused-vars */
 | 
			
		||||
            ignores,
 | 
			
		||||
            ...config
 | 
			
		||||
        } = this;
 | 
			
		||||
 | 
			
		||||
        config.parser = config.parser && config.parser.filePath;
 | 
			
		||||
        config.plugins = Object.keys(config.plugins).filter(Boolean).reverse();
 | 
			
		||||
        config.ignorePatterns = ignores ? ignores.patterns : [];
 | 
			
		||||
 | 
			
		||||
        // Strip the default patterns from `ignorePatterns`.
 | 
			
		||||
        if (startsWith(config.ignorePatterns, IgnorePattern.DefaultPatterns)) {
 | 
			
		||||
            config.ignorePatterns =
 | 
			
		||||
                config.ignorePatterns.slice(IgnorePattern.DefaultPatterns.length);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return config;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export { ExtractedConfig };
 | 
			
		||||
							
								
								
									
										238
									
								
								node_modules/@eslint/eslintrc/lib/config-array/ignore-pattern.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										238
									
								
								node_modules/@eslint/eslintrc/lib/config-array/ignore-pattern.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,238 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview `IgnorePattern` class.
 | 
			
		||||
 *
 | 
			
		||||
 * `IgnorePattern` class has the set of glob patterns and the base path.
 | 
			
		||||
 *
 | 
			
		||||
 * It provides two static methods.
 | 
			
		||||
 *
 | 
			
		||||
 * - `IgnorePattern.createDefaultIgnore(cwd)`
 | 
			
		||||
 *      Create the default predicate function.
 | 
			
		||||
 * - `IgnorePattern.createIgnore(ignorePatterns)`
 | 
			
		||||
 *      Create the predicate function from multiple `IgnorePattern` objects.
 | 
			
		||||
 *
 | 
			
		||||
 * It provides two properties and a method.
 | 
			
		||||
 *
 | 
			
		||||
 * - `patterns`
 | 
			
		||||
 *      The glob patterns that ignore to lint.
 | 
			
		||||
 * - `basePath`
 | 
			
		||||
 *      The base path of the glob patterns. If absolute paths existed in the
 | 
			
		||||
 *      glob patterns, those are handled as relative paths to the base path.
 | 
			
		||||
 * - `getPatternsRelativeTo(basePath)`
 | 
			
		||||
 *      Get `patterns` as modified for a given base path. It modifies the
 | 
			
		||||
 *      absolute paths in the patterns as prepending the difference of two base
 | 
			
		||||
 *      paths.
 | 
			
		||||
 *
 | 
			
		||||
 * `ConfigArrayFactory` creates `IgnorePattern` objects when it processes
 | 
			
		||||
 * `ignorePatterns` properties.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Toru Nagashima <https://github.com/mysticatea>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Requirements
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
import assert from "assert";
 | 
			
		||||
import path from "path";
 | 
			
		||||
import ignore from "ignore";
 | 
			
		||||
import debugOrig from "debug";
 | 
			
		||||
 | 
			
		||||
const debug = debugOrig("eslintrc:ignore-pattern");
 | 
			
		||||
 | 
			
		||||
/** @typedef {ReturnType<import("ignore").default>} Ignore */
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Helpers
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get the path to the common ancestor directory of given paths.
 | 
			
		||||
 * @param {string[]} sourcePaths The paths to calculate the common ancestor.
 | 
			
		||||
 * @returns {string} The path to the common ancestor directory.
 | 
			
		||||
 */
 | 
			
		||||
function getCommonAncestorPath(sourcePaths) {
 | 
			
		||||
    let result = sourcePaths[0];
 | 
			
		||||
 | 
			
		||||
    for (let i = 1; i < sourcePaths.length; ++i) {
 | 
			
		||||
        const a = result;
 | 
			
		||||
        const b = sourcePaths[i];
 | 
			
		||||
 | 
			
		||||
        // Set the shorter one (it's the common ancestor if one includes the other).
 | 
			
		||||
        result = a.length < b.length ? a : b;
 | 
			
		||||
 | 
			
		||||
        // Set the common ancestor.
 | 
			
		||||
        for (let j = 0, lastSepPos = 0; j < a.length && j < b.length; ++j) {
 | 
			
		||||
            if (a[j] !== b[j]) {
 | 
			
		||||
                result = a.slice(0, lastSepPos);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            if (a[j] === path.sep) {
 | 
			
		||||
                lastSepPos = j;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let resolvedResult = result || path.sep;
 | 
			
		||||
 | 
			
		||||
    // if Windows common ancestor is root of drive must have trailing slash to be absolute.
 | 
			
		||||
    if (resolvedResult && resolvedResult.endsWith(":") && process.platform === "win32") {
 | 
			
		||||
        resolvedResult += path.sep;
 | 
			
		||||
    }
 | 
			
		||||
    return resolvedResult;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Make relative path.
 | 
			
		||||
 * @param {string} from The source path to get relative path.
 | 
			
		||||
 * @param {string} to The destination path to get relative path.
 | 
			
		||||
 * @returns {string} The relative path.
 | 
			
		||||
 */
 | 
			
		||||
function relative(from, to) {
 | 
			
		||||
    const relPath = path.relative(from, to);
 | 
			
		||||
 | 
			
		||||
    if (path.sep === "/") {
 | 
			
		||||
        return relPath;
 | 
			
		||||
    }
 | 
			
		||||
    return relPath.split(path.sep).join("/");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get the trailing slash if existed.
 | 
			
		||||
 * @param {string} filePath The path to check.
 | 
			
		||||
 * @returns {string} The trailing slash if existed.
 | 
			
		||||
 */
 | 
			
		||||
function dirSuffix(filePath) {
 | 
			
		||||
    const isDir = (
 | 
			
		||||
        filePath.endsWith(path.sep) ||
 | 
			
		||||
        (process.platform === "win32" && filePath.endsWith("/"))
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    return isDir ? "/" : "";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const DefaultPatterns = Object.freeze(["/**/node_modules/*"]);
 | 
			
		||||
const DotPatterns = Object.freeze([".*", "!.eslintrc.*", "!../"]);
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Public
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class IgnorePattern {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The default patterns.
 | 
			
		||||
     * @type {string[]}
 | 
			
		||||
     */
 | 
			
		||||
    static get DefaultPatterns() {
 | 
			
		||||
        return DefaultPatterns;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create the default predicate function.
 | 
			
		||||
     * @param {string} cwd The current working directory.
 | 
			
		||||
     * @returns {((filePath:string, dot:boolean) => boolean) & {basePath:string; patterns:string[]}}
 | 
			
		||||
     * The preficate function.
 | 
			
		||||
     * The first argument is an absolute path that is checked.
 | 
			
		||||
     * The second argument is the flag to not ignore dotfiles.
 | 
			
		||||
     * If the predicate function returned `true`, it means the path should be ignored.
 | 
			
		||||
     */
 | 
			
		||||
    static createDefaultIgnore(cwd) {
 | 
			
		||||
        return this.createIgnore([new IgnorePattern(DefaultPatterns, cwd)]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create the predicate function from multiple `IgnorePattern` objects.
 | 
			
		||||
     * @param {IgnorePattern[]} ignorePatterns The list of ignore patterns.
 | 
			
		||||
     * @returns {((filePath:string, dot?:boolean) => boolean) & {basePath:string; patterns:string[]}}
 | 
			
		||||
     * The preficate function.
 | 
			
		||||
     * The first argument is an absolute path that is checked.
 | 
			
		||||
     * The second argument is the flag to not ignore dotfiles.
 | 
			
		||||
     * If the predicate function returned `true`, it means the path should be ignored.
 | 
			
		||||
     */
 | 
			
		||||
    static createIgnore(ignorePatterns) {
 | 
			
		||||
        debug("Create with: %o", ignorePatterns);
 | 
			
		||||
 | 
			
		||||
        const basePath = getCommonAncestorPath(ignorePatterns.map(p => p.basePath));
 | 
			
		||||
        const patterns = [].concat(
 | 
			
		||||
            ...ignorePatterns.map(p => p.getPatternsRelativeTo(basePath))
 | 
			
		||||
        );
 | 
			
		||||
        const ig = ignore({ allowRelativePaths: true }).add([...DotPatterns, ...patterns]);
 | 
			
		||||
        const dotIg = ignore({ allowRelativePaths: true }).add(patterns);
 | 
			
		||||
 | 
			
		||||
        debug("  processed: %o", { basePath, patterns });
 | 
			
		||||
 | 
			
		||||
        return Object.assign(
 | 
			
		||||
            (filePath, dot = false) => {
 | 
			
		||||
                assert(path.isAbsolute(filePath), "'filePath' should be an absolute path.");
 | 
			
		||||
                const relPathRaw = relative(basePath, filePath);
 | 
			
		||||
                const relPath = relPathRaw && (relPathRaw + dirSuffix(filePath));
 | 
			
		||||
                const adoptedIg = dot ? dotIg : ig;
 | 
			
		||||
                const result = relPath !== "" && adoptedIg.ignores(relPath);
 | 
			
		||||
 | 
			
		||||
                debug("Check", { filePath, dot, relativePath: relPath, result });
 | 
			
		||||
                return result;
 | 
			
		||||
            },
 | 
			
		||||
            { basePath, patterns }
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Initialize a new `IgnorePattern` instance.
 | 
			
		||||
     * @param {string[]} patterns The glob patterns that ignore to lint.
 | 
			
		||||
     * @param {string} basePath The base path of `patterns`.
 | 
			
		||||
     */
 | 
			
		||||
    constructor(patterns, basePath) {
 | 
			
		||||
        assert(path.isAbsolute(basePath), "'basePath' should be an absolute path.");
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The glob patterns that ignore to lint.
 | 
			
		||||
         * @type {string[]}
 | 
			
		||||
         */
 | 
			
		||||
        this.patterns = patterns;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The base path of `patterns`.
 | 
			
		||||
         * @type {string}
 | 
			
		||||
         */
 | 
			
		||||
        this.basePath = basePath;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * If `true` then patterns which don't start with `/` will match the paths to the outside of `basePath`. Defaults to `false`.
 | 
			
		||||
         *
 | 
			
		||||
         * It's set `true` for `.eslintignore`, `package.json`, and `--ignore-path` for backward compatibility.
 | 
			
		||||
         * It's `false` as-is for `ignorePatterns` property in config files.
 | 
			
		||||
         * @type {boolean}
 | 
			
		||||
         */
 | 
			
		||||
        this.loose = false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get `patterns` as modified for a given base path. It modifies the
 | 
			
		||||
     * absolute paths in the patterns as prepending the difference of two base
 | 
			
		||||
     * paths.
 | 
			
		||||
     * @param {string} newBasePath The base path.
 | 
			
		||||
     * @returns {string[]} Modifired patterns.
 | 
			
		||||
     */
 | 
			
		||||
    getPatternsRelativeTo(newBasePath) {
 | 
			
		||||
        assert(path.isAbsolute(newBasePath), "'newBasePath' should be an absolute path.");
 | 
			
		||||
        const { basePath, loose, patterns } = this;
 | 
			
		||||
 | 
			
		||||
        if (newBasePath === basePath) {
 | 
			
		||||
            return patterns;
 | 
			
		||||
        }
 | 
			
		||||
        const prefix = `/${relative(newBasePath, basePath)}`;
 | 
			
		||||
 | 
			
		||||
        return patterns.map(pattern => {
 | 
			
		||||
            const negative = pattern.startsWith("!");
 | 
			
		||||
            const head = negative ? "!" : "";
 | 
			
		||||
            const body = negative ? pattern.slice(1) : pattern;
 | 
			
		||||
 | 
			
		||||
            if (body.startsWith("/") || body.startsWith("../")) {
 | 
			
		||||
                return `${head}${prefix}${body}`;
 | 
			
		||||
            }
 | 
			
		||||
            return loose ? pattern : `${head}${prefix}/**/${body}`;
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export { IgnorePattern };
 | 
			
		||||
							
								
								
									
										19
									
								
								node_modules/@eslint/eslintrc/lib/config-array/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								node_modules/@eslint/eslintrc/lib/config-array/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview `ConfigArray` class.
 | 
			
		||||
 * @author Toru Nagashima <https://github.com/mysticatea>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import { ConfigArray, getUsedExtractedConfigs } from "./config-array.js";
 | 
			
		||||
import { ConfigDependency } from "./config-dependency.js";
 | 
			
		||||
import { ExtractedConfig } from "./extracted-config.js";
 | 
			
		||||
import { IgnorePattern } from "./ignore-pattern.js";
 | 
			
		||||
import { OverrideTester } from "./override-tester.js";
 | 
			
		||||
 | 
			
		||||
export {
 | 
			
		||||
    ConfigArray,
 | 
			
		||||
    ConfigDependency,
 | 
			
		||||
    ExtractedConfig,
 | 
			
		||||
    IgnorePattern,
 | 
			
		||||
    OverrideTester,
 | 
			
		||||
    getUsedExtractedConfigs
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										225
									
								
								node_modules/@eslint/eslintrc/lib/config-array/override-tester.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										225
									
								
								node_modules/@eslint/eslintrc/lib/config-array/override-tester.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,225 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview `OverrideTester` class.
 | 
			
		||||
 *
 | 
			
		||||
 * `OverrideTester` class handles `files` property and `excludedFiles` property
 | 
			
		||||
 * of `overrides` config.
 | 
			
		||||
 *
 | 
			
		||||
 * It provides one method.
 | 
			
		||||
 *
 | 
			
		||||
 * - `test(filePath)`
 | 
			
		||||
 *      Test if a file path matches the pair of `files` property and
 | 
			
		||||
 *      `excludedFiles` property. The `filePath` argument must be an absolute
 | 
			
		||||
 *      path.
 | 
			
		||||
 *
 | 
			
		||||
 * `ConfigArrayFactory` creates `OverrideTester` objects when it processes
 | 
			
		||||
 * `overrides` properties.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Toru Nagashima <https://github.com/mysticatea>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import assert from "assert";
 | 
			
		||||
import path from "path";
 | 
			
		||||
import util from "util";
 | 
			
		||||
import minimatch from "minimatch";
 | 
			
		||||
 | 
			
		||||
const { Minimatch } = minimatch;
 | 
			
		||||
 | 
			
		||||
const minimatchOpts = { dot: true, matchBase: true };
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} Pattern
 | 
			
		||||
 * @property {InstanceType<Minimatch>[] | null} includes The positive matchers.
 | 
			
		||||
 * @property {InstanceType<Minimatch>[] | null} excludes The negative matchers.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Normalize a given pattern to an array.
 | 
			
		||||
 * @param {string|string[]|undefined} patterns A glob pattern or an array of glob patterns.
 | 
			
		||||
 * @returns {string[]|null} Normalized patterns.
 | 
			
		||||
 * @private
 | 
			
		||||
 */
 | 
			
		||||
function normalizePatterns(patterns) {
 | 
			
		||||
    if (Array.isArray(patterns)) {
 | 
			
		||||
        return patterns.filter(Boolean);
 | 
			
		||||
    }
 | 
			
		||||
    if (typeof patterns === "string" && patterns) {
 | 
			
		||||
        return [patterns];
 | 
			
		||||
    }
 | 
			
		||||
    return [];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Create the matchers of given patterns.
 | 
			
		||||
 * @param {string[]} patterns The patterns.
 | 
			
		||||
 * @returns {InstanceType<Minimatch>[] | null} The matchers.
 | 
			
		||||
 */
 | 
			
		||||
function toMatcher(patterns) {
 | 
			
		||||
    if (patterns.length === 0) {
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
    return patterns.map(pattern => {
 | 
			
		||||
        if (/^\.[/\\]/u.test(pattern)) {
 | 
			
		||||
            return new Minimatch(
 | 
			
		||||
                pattern.slice(2),
 | 
			
		||||
 | 
			
		||||
                // `./*.js` should not match with `subdir/foo.js`
 | 
			
		||||
                { ...minimatchOpts, matchBase: false }
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        return new Minimatch(pattern, minimatchOpts);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Convert a given matcher to string.
 | 
			
		||||
 * @param {Pattern} matchers The matchers.
 | 
			
		||||
 * @returns {string} The string expression of the matcher.
 | 
			
		||||
 */
 | 
			
		||||
function patternToJson({ includes, excludes }) {
 | 
			
		||||
    return {
 | 
			
		||||
        includes: includes && includes.map(m => m.pattern),
 | 
			
		||||
        excludes: excludes && excludes.map(m => m.pattern)
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The class to test given paths are matched by the patterns.
 | 
			
		||||
 */
 | 
			
		||||
class OverrideTester {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a tester with given criteria.
 | 
			
		||||
     * If there are no criteria, returns `null`.
 | 
			
		||||
     * @param {string|string[]} files The glob patterns for included files.
 | 
			
		||||
     * @param {string|string[]} excludedFiles The glob patterns for excluded files.
 | 
			
		||||
     * @param {string} basePath The path to the base directory to test paths.
 | 
			
		||||
     * @returns {OverrideTester|null} The created instance or `null`.
 | 
			
		||||
     */
 | 
			
		||||
    static create(files, excludedFiles, basePath) {
 | 
			
		||||
        const includePatterns = normalizePatterns(files);
 | 
			
		||||
        const excludePatterns = normalizePatterns(excludedFiles);
 | 
			
		||||
        let endsWithWildcard = false;
 | 
			
		||||
 | 
			
		||||
        if (includePatterns.length === 0) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Rejects absolute paths or relative paths to parents.
 | 
			
		||||
        for (const pattern of includePatterns) {
 | 
			
		||||
            if (path.isAbsolute(pattern) || pattern.includes("..")) {
 | 
			
		||||
                throw new Error(`Invalid override pattern (expected relative path not containing '..'): ${pattern}`);
 | 
			
		||||
            }
 | 
			
		||||
            if (pattern.endsWith("*")) {
 | 
			
		||||
                endsWithWildcard = true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        for (const pattern of excludePatterns) {
 | 
			
		||||
            if (path.isAbsolute(pattern) || pattern.includes("..")) {
 | 
			
		||||
                throw new Error(`Invalid override pattern (expected relative path not containing '..'): ${pattern}`);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const includes = toMatcher(includePatterns);
 | 
			
		||||
        const excludes = toMatcher(excludePatterns);
 | 
			
		||||
 | 
			
		||||
        return new OverrideTester(
 | 
			
		||||
            [{ includes, excludes }],
 | 
			
		||||
            basePath,
 | 
			
		||||
            endsWithWildcard
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Combine two testers by logical and.
 | 
			
		||||
     * If either of the testers was `null`, returns the other tester.
 | 
			
		||||
     * The `basePath` property of the two must be the same value.
 | 
			
		||||
     * @param {OverrideTester|null} a A tester.
 | 
			
		||||
     * @param {OverrideTester|null} b Another tester.
 | 
			
		||||
     * @returns {OverrideTester|null} Combined tester.
 | 
			
		||||
     */
 | 
			
		||||
    static and(a, b) {
 | 
			
		||||
        if (!b) {
 | 
			
		||||
            return a && new OverrideTester(
 | 
			
		||||
                a.patterns,
 | 
			
		||||
                a.basePath,
 | 
			
		||||
                a.endsWithWildcard
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        if (!a) {
 | 
			
		||||
            return new OverrideTester(
 | 
			
		||||
                b.patterns,
 | 
			
		||||
                b.basePath,
 | 
			
		||||
                b.endsWithWildcard
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        assert.strictEqual(a.basePath, b.basePath);
 | 
			
		||||
        return new OverrideTester(
 | 
			
		||||
            a.patterns.concat(b.patterns),
 | 
			
		||||
            a.basePath,
 | 
			
		||||
            a.endsWithWildcard || b.endsWithWildcard
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Initialize this instance.
 | 
			
		||||
     * @param {Pattern[]} patterns The matchers.
 | 
			
		||||
     * @param {string} basePath The base path.
 | 
			
		||||
     * @param {boolean} endsWithWildcard If `true` then a pattern ends with `*`.
 | 
			
		||||
     */
 | 
			
		||||
    constructor(patterns, basePath, endsWithWildcard = false) {
 | 
			
		||||
 | 
			
		||||
        /** @type {Pattern[]} */
 | 
			
		||||
        this.patterns = patterns;
 | 
			
		||||
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.basePath = basePath;
 | 
			
		||||
 | 
			
		||||
        /** @type {boolean} */
 | 
			
		||||
        this.endsWithWildcard = endsWithWildcard;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Test if a given path is matched or not.
 | 
			
		||||
     * @param {string} filePath The absolute path to the target file.
 | 
			
		||||
     * @returns {boolean} `true` if the path was matched.
 | 
			
		||||
     */
 | 
			
		||||
    test(filePath) {
 | 
			
		||||
        if (typeof filePath !== "string" || !path.isAbsolute(filePath)) {
 | 
			
		||||
            throw new Error(`'filePath' should be an absolute path, but got ${filePath}.`);
 | 
			
		||||
        }
 | 
			
		||||
        const relativePath = path.relative(this.basePath, filePath);
 | 
			
		||||
 | 
			
		||||
        return this.patterns.every(({ includes, excludes }) => (
 | 
			
		||||
            (!includes || includes.some(m => m.match(relativePath))) &&
 | 
			
		||||
            (!excludes || !excludes.some(m => m.match(relativePath)))
 | 
			
		||||
        ));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // eslint-disable-next-line jsdoc/require-description
 | 
			
		||||
    /**
 | 
			
		||||
     * @returns {Object} a JSON compatible object.
 | 
			
		||||
     */
 | 
			
		||||
    toJSON() {
 | 
			
		||||
        if (this.patterns.length === 1) {
 | 
			
		||||
            return {
 | 
			
		||||
                ...patternToJson(this.patterns[0]),
 | 
			
		||||
                basePath: this.basePath
 | 
			
		||||
            };
 | 
			
		||||
        }
 | 
			
		||||
        return {
 | 
			
		||||
            AND: this.patterns.map(patternToJson),
 | 
			
		||||
            basePath: this.basePath
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // eslint-disable-next-line jsdoc/require-description
 | 
			
		||||
    /**
 | 
			
		||||
     * @returns {Object} an object to display by `console.log()`.
 | 
			
		||||
     */
 | 
			
		||||
    [util.inspect.custom]() {
 | 
			
		||||
        return this.toJSON();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export { OverrideTester };
 | 
			
		||||
							
								
								
									
										318
									
								
								node_modules/@eslint/eslintrc/lib/flat-compat.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										318
									
								
								node_modules/@eslint/eslintrc/lib/flat-compat.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,318 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview Compatibility class for flat config.
 | 
			
		||||
 * @author Nicholas C. Zakas
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// Requirements
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
import createDebug from "debug";
 | 
			
		||||
import path from "path";
 | 
			
		||||
 | 
			
		||||
import environments from "../conf/environments.js";
 | 
			
		||||
import { ConfigArrayFactory } from "./config-array-factory.js";
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// Helpers
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
/** @typedef {import("../../shared/types").Environment} Environment */
 | 
			
		||||
/** @typedef {import("../../shared/types").Processor} Processor */
 | 
			
		||||
 | 
			
		||||
const debug = createDebug("eslintrc:flat-compat");
 | 
			
		||||
const cafactory = Symbol("cafactory");
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Translates an ESLintRC-style config object into a flag-config-style config
 | 
			
		||||
 * object.
 | 
			
		||||
 * @param {Object} eslintrcConfig An ESLintRC-style config object.
 | 
			
		||||
 * @param {Object} options Options to help translate the config.
 | 
			
		||||
 * @param {string} options.resolveConfigRelativeTo To the directory to resolve
 | 
			
		||||
 *      configs from.
 | 
			
		||||
 * @param {string} options.resolvePluginsRelativeTo The directory to resolve
 | 
			
		||||
 *      plugins from.
 | 
			
		||||
 * @param {ReadOnlyMap<string,Environment>} options.pluginEnvironments A map of plugin environment
 | 
			
		||||
 *      names to objects.
 | 
			
		||||
 * @param {ReadOnlyMap<string,Processor>} options.pluginProcessors A map of plugin processor
 | 
			
		||||
 *      names to objects.
 | 
			
		||||
 * @returns {Object} A flag-config-style config object.
 | 
			
		||||
 */
 | 
			
		||||
function translateESLintRC(eslintrcConfig, {
 | 
			
		||||
    resolveConfigRelativeTo,
 | 
			
		||||
    resolvePluginsRelativeTo,
 | 
			
		||||
    pluginEnvironments,
 | 
			
		||||
    pluginProcessors
 | 
			
		||||
}) {
 | 
			
		||||
 | 
			
		||||
    const flatConfig = {};
 | 
			
		||||
    const configs = [];
 | 
			
		||||
    const languageOptions = {};
 | 
			
		||||
    const linterOptions = {};
 | 
			
		||||
    const keysToCopy = ["settings", "rules", "processor"];
 | 
			
		||||
    const languageOptionsKeysToCopy = ["globals", "parser", "parserOptions"];
 | 
			
		||||
    const linterOptionsKeysToCopy = ["noInlineConfig", "reportUnusedDisableDirectives"];
 | 
			
		||||
 | 
			
		||||
    // copy over simple translations
 | 
			
		||||
    for (const key of keysToCopy) {
 | 
			
		||||
        if (key in eslintrcConfig && typeof eslintrcConfig[key] !== "undefined") {
 | 
			
		||||
            flatConfig[key] = eslintrcConfig[key];
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // copy over languageOptions
 | 
			
		||||
    for (const key of languageOptionsKeysToCopy) {
 | 
			
		||||
        if (key in eslintrcConfig && typeof eslintrcConfig[key] !== "undefined") {
 | 
			
		||||
 | 
			
		||||
            // create the languageOptions key in the flat config
 | 
			
		||||
            flatConfig.languageOptions = languageOptions;
 | 
			
		||||
 | 
			
		||||
            if (key === "parser") {
 | 
			
		||||
                debug(`Resolving parser '${languageOptions[key]}' relative to ${resolveConfigRelativeTo}`);
 | 
			
		||||
 | 
			
		||||
                if (eslintrcConfig[key].error) {
 | 
			
		||||
                    throw eslintrcConfig[key].error;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                languageOptions[key] = eslintrcConfig[key].definition;
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // clone any object values that are in the eslintrc config
 | 
			
		||||
            if (eslintrcConfig[key] && typeof eslintrcConfig[key] === "object") {
 | 
			
		||||
                languageOptions[key] = {
 | 
			
		||||
                    ...eslintrcConfig[key]
 | 
			
		||||
                };
 | 
			
		||||
            } else {
 | 
			
		||||
                languageOptions[key] = eslintrcConfig[key];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // copy over linterOptions
 | 
			
		||||
    for (const key of linterOptionsKeysToCopy) {
 | 
			
		||||
        if (key in eslintrcConfig && typeof eslintrcConfig[key] !== "undefined") {
 | 
			
		||||
            flatConfig.linterOptions = linterOptions;
 | 
			
		||||
            linterOptions[key] = eslintrcConfig[key];
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // move ecmaVersion a level up
 | 
			
		||||
    if (languageOptions.parserOptions) {
 | 
			
		||||
 | 
			
		||||
        if ("ecmaVersion" in languageOptions.parserOptions) {
 | 
			
		||||
            languageOptions.ecmaVersion = languageOptions.parserOptions.ecmaVersion;
 | 
			
		||||
            delete languageOptions.parserOptions.ecmaVersion;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ("sourceType" in languageOptions.parserOptions) {
 | 
			
		||||
            languageOptions.sourceType = languageOptions.parserOptions.sourceType;
 | 
			
		||||
            delete languageOptions.parserOptions.sourceType;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // check to see if we even need parserOptions anymore and remove it if not
 | 
			
		||||
        if (Object.keys(languageOptions.parserOptions).length === 0) {
 | 
			
		||||
            delete languageOptions.parserOptions;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // overrides
 | 
			
		||||
    if (eslintrcConfig.criteria) {
 | 
			
		||||
        flatConfig.files = [absoluteFilePath => eslintrcConfig.criteria.test(absoluteFilePath)];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // translate plugins
 | 
			
		||||
    if (eslintrcConfig.plugins && typeof eslintrcConfig.plugins === "object") {
 | 
			
		||||
        debug(`Translating plugins: ${eslintrcConfig.plugins}`);
 | 
			
		||||
 | 
			
		||||
        flatConfig.plugins = {};
 | 
			
		||||
 | 
			
		||||
        for (const pluginName of Object.keys(eslintrcConfig.plugins)) {
 | 
			
		||||
 | 
			
		||||
            debug(`Translating plugin: ${pluginName}`);
 | 
			
		||||
            debug(`Resolving plugin '${pluginName} relative to ${resolvePluginsRelativeTo}`);
 | 
			
		||||
 | 
			
		||||
            const { definition: plugin, error } = eslintrcConfig.plugins[pluginName];
 | 
			
		||||
 | 
			
		||||
            if (error) {
 | 
			
		||||
                throw error;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            flatConfig.plugins[pluginName] = plugin;
 | 
			
		||||
 | 
			
		||||
            // create a config for any processors
 | 
			
		||||
            if (plugin.processors) {
 | 
			
		||||
                for (const processorName of Object.keys(plugin.processors)) {
 | 
			
		||||
                    if (processorName.startsWith(".")) {
 | 
			
		||||
                        debug(`Assigning processor: ${pluginName}/${processorName}`);
 | 
			
		||||
 | 
			
		||||
                        configs.unshift({
 | 
			
		||||
                            files: [`**/*${processorName}`],
 | 
			
		||||
                            processor: pluginProcessors.get(`${pluginName}/${processorName}`)
 | 
			
		||||
                        });
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // translate env - must come after plugins
 | 
			
		||||
    if (eslintrcConfig.env && typeof eslintrcConfig.env === "object") {
 | 
			
		||||
        for (const envName of Object.keys(eslintrcConfig.env)) {
 | 
			
		||||
 | 
			
		||||
            // only add environments that are true
 | 
			
		||||
            if (eslintrcConfig.env[envName]) {
 | 
			
		||||
                debug(`Translating environment: ${envName}`);
 | 
			
		||||
 | 
			
		||||
                if (environments.has(envName)) {
 | 
			
		||||
 | 
			
		||||
                    // built-in environments should be defined first
 | 
			
		||||
                    configs.unshift(...translateESLintRC({
 | 
			
		||||
                        criteria: eslintrcConfig.criteria,
 | 
			
		||||
                        ...environments.get(envName)
 | 
			
		||||
                    }, {
 | 
			
		||||
                        resolveConfigRelativeTo,
 | 
			
		||||
                        resolvePluginsRelativeTo
 | 
			
		||||
                    }));
 | 
			
		||||
                } else if (pluginEnvironments.has(envName)) {
 | 
			
		||||
 | 
			
		||||
                    // if the environment comes from a plugin, it should come after the plugin config
 | 
			
		||||
                    configs.push(...translateESLintRC({
 | 
			
		||||
                        criteria: eslintrcConfig.criteria,
 | 
			
		||||
                        ...pluginEnvironments.get(envName)
 | 
			
		||||
                    }, {
 | 
			
		||||
                        resolveConfigRelativeTo,
 | 
			
		||||
                        resolvePluginsRelativeTo
 | 
			
		||||
                    }));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // only add if there are actually keys in the config
 | 
			
		||||
    if (Object.keys(flatConfig).length > 0) {
 | 
			
		||||
        configs.push(flatConfig);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return configs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// Exports
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A compatibility class for working with configs.
 | 
			
		||||
 */
 | 
			
		||||
class FlatCompat {
 | 
			
		||||
 | 
			
		||||
    constructor({
 | 
			
		||||
        baseDirectory = process.cwd(),
 | 
			
		||||
        resolvePluginsRelativeTo = baseDirectory,
 | 
			
		||||
        recommendedConfig,
 | 
			
		||||
        allConfig
 | 
			
		||||
    } = {}) {
 | 
			
		||||
        this.baseDirectory = baseDirectory;
 | 
			
		||||
        this.resolvePluginsRelativeTo = resolvePluginsRelativeTo;
 | 
			
		||||
        this[cafactory] = new ConfigArrayFactory({
 | 
			
		||||
            cwd: baseDirectory,
 | 
			
		||||
            resolvePluginsRelativeTo,
 | 
			
		||||
            getEslintAllConfig: () => {
 | 
			
		||||
 | 
			
		||||
                if (!allConfig) {
 | 
			
		||||
                    throw new TypeError("Missing parameter 'allConfig' in FlatCompat constructor.");
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                return allConfig;
 | 
			
		||||
            },
 | 
			
		||||
            getEslintRecommendedConfig: () => {
 | 
			
		||||
 | 
			
		||||
                if (!recommendedConfig) {
 | 
			
		||||
                    throw new TypeError("Missing parameter 'recommendedConfig' in FlatCompat constructor.");
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                return recommendedConfig;
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Translates an ESLintRC-style config into a flag-config-style config.
 | 
			
		||||
     * @param {Object} eslintrcConfig The ESLintRC-style config object.
 | 
			
		||||
     * @returns {Object} A flag-config-style config object.
 | 
			
		||||
     */
 | 
			
		||||
    config(eslintrcConfig) {
 | 
			
		||||
        const eslintrcArray = this[cafactory].create(eslintrcConfig, {
 | 
			
		||||
            basePath: this.baseDirectory
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        const flatArray = [];
 | 
			
		||||
        let hasIgnorePatterns = false;
 | 
			
		||||
 | 
			
		||||
        eslintrcArray.forEach(configData => {
 | 
			
		||||
            if (configData.type === "config") {
 | 
			
		||||
                hasIgnorePatterns = hasIgnorePatterns || configData.ignorePattern;
 | 
			
		||||
                flatArray.push(...translateESLintRC(configData, {
 | 
			
		||||
                    resolveConfigRelativeTo: path.join(this.baseDirectory, "__placeholder.js"),
 | 
			
		||||
                    resolvePluginsRelativeTo: path.join(this.resolvePluginsRelativeTo, "__placeholder.js"),
 | 
			
		||||
                    pluginEnvironments: eslintrcArray.pluginEnvironments,
 | 
			
		||||
                    pluginProcessors: eslintrcArray.pluginProcessors
 | 
			
		||||
                }));
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        // combine ignorePatterns to emulate ESLintRC behavior better
 | 
			
		||||
        if (hasIgnorePatterns) {
 | 
			
		||||
            flatArray.unshift({
 | 
			
		||||
                ignores: [filePath => {
 | 
			
		||||
 | 
			
		||||
                    // Compute the final config for this file.
 | 
			
		||||
                    // This filters config array elements by `files`/`excludedFiles` then merges the elements.
 | 
			
		||||
                    const finalConfig = eslintrcArray.extractConfig(filePath);
 | 
			
		||||
 | 
			
		||||
                    // Test the `ignorePattern` properties of the final config.
 | 
			
		||||
                    return Boolean(finalConfig.ignores) && finalConfig.ignores(filePath);
 | 
			
		||||
                }]
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return flatArray;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Translates the `env` section of an ESLintRC-style config.
 | 
			
		||||
     * @param {Object} envConfig The `env` section of an ESLintRC config.
 | 
			
		||||
     * @returns {Object[]} An array of flag-config objects representing the environments.
 | 
			
		||||
     */
 | 
			
		||||
    env(envConfig) {
 | 
			
		||||
        return this.config({
 | 
			
		||||
            env: envConfig
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Translates the `extends` section of an ESLintRC-style config.
 | 
			
		||||
     * @param {...string} configsToExtend The names of the configs to load.
 | 
			
		||||
     * @returns {Object[]} An array of flag-config objects representing the config.
 | 
			
		||||
     */
 | 
			
		||||
    extends(...configsToExtend) {
 | 
			
		||||
        return this.config({
 | 
			
		||||
            extends: configsToExtend
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Translates the `plugins` section of an ESLintRC-style config.
 | 
			
		||||
     * @param {...string} plugins The names of the plugins to load.
 | 
			
		||||
     * @returns {Object[]} An array of flag-config objects representing the plugins.
 | 
			
		||||
     */
 | 
			
		||||
    plugins(...plugins) {
 | 
			
		||||
        return this.config({
 | 
			
		||||
            plugins
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export { FlatCompat };
 | 
			
		||||
							
								
								
									
										29
									
								
								node_modules/@eslint/eslintrc/lib/index-universal.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								node_modules/@eslint/eslintrc/lib/index-universal.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview Package exports for @eslint/eslintrc
 | 
			
		||||
 * @author Nicholas C. Zakas
 | 
			
		||||
 */
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Requirements
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
import * as ConfigOps from "./shared/config-ops.js";
 | 
			
		||||
import ConfigValidator from "./shared/config-validator.js";
 | 
			
		||||
import * as naming from "./shared/naming.js";
 | 
			
		||||
import environments from "../conf/environments.js";
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// Exports
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
const Legacy = {
 | 
			
		||||
    environments,
 | 
			
		||||
 | 
			
		||||
    // shared
 | 
			
		||||
    ConfigOps,
 | 
			
		||||
    ConfigValidator,
 | 
			
		||||
    naming
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export {
 | 
			
		||||
    Legacy
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										56
									
								
								node_modules/@eslint/eslintrc/lib/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								node_modules/@eslint/eslintrc/lib/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview Package exports for @eslint/eslintrc
 | 
			
		||||
 * @author Nicholas C. Zakas
 | 
			
		||||
 */
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Requirements
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
import {
 | 
			
		||||
    ConfigArrayFactory,
 | 
			
		||||
    createContext as createConfigArrayFactoryContext
 | 
			
		||||
} from "./config-array-factory.js";
 | 
			
		||||
 | 
			
		||||
import { CascadingConfigArrayFactory } from "./cascading-config-array-factory.js";
 | 
			
		||||
import * as ModuleResolver from "./shared/relative-module-resolver.js";
 | 
			
		||||
import { ConfigArray, getUsedExtractedConfigs } from "./config-array/index.js";
 | 
			
		||||
import { ConfigDependency } from "./config-array/config-dependency.js";
 | 
			
		||||
import { ExtractedConfig } from "./config-array/extracted-config.js";
 | 
			
		||||
import { IgnorePattern } from "./config-array/ignore-pattern.js";
 | 
			
		||||
import { OverrideTester } from "./config-array/override-tester.js";
 | 
			
		||||
import * as ConfigOps from "./shared/config-ops.js";
 | 
			
		||||
import ConfigValidator from "./shared/config-validator.js";
 | 
			
		||||
import * as naming from "./shared/naming.js";
 | 
			
		||||
import { FlatCompat } from "./flat-compat.js";
 | 
			
		||||
import environments from "../conf/environments.js";
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// Exports
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
const Legacy = {
 | 
			
		||||
    ConfigArray,
 | 
			
		||||
    createConfigArrayFactoryContext,
 | 
			
		||||
    CascadingConfigArrayFactory,
 | 
			
		||||
    ConfigArrayFactory,
 | 
			
		||||
    ConfigDependency,
 | 
			
		||||
    ExtractedConfig,
 | 
			
		||||
    IgnorePattern,
 | 
			
		||||
    OverrideTester,
 | 
			
		||||
    getUsedExtractedConfigs,
 | 
			
		||||
    environments,
 | 
			
		||||
 | 
			
		||||
    // shared
 | 
			
		||||
    ConfigOps,
 | 
			
		||||
    ConfigValidator,
 | 
			
		||||
    ModuleResolver,
 | 
			
		||||
    naming
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export {
 | 
			
		||||
 | 
			
		||||
    Legacy,
 | 
			
		||||
 | 
			
		||||
    FlatCompat
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										191
									
								
								node_modules/@eslint/eslintrc/lib/shared/ajv.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										191
									
								
								node_modules/@eslint/eslintrc/lib/shared/ajv.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,191 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview The instance of Ajv validator.
 | 
			
		||||
 * @author Evgeny Poberezkin
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Requirements
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
import Ajv from "ajv";
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// Helpers
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copied from ajv/lib/refs/json-schema-draft-04.json
 | 
			
		||||
 * The MIT License (MIT)
 | 
			
		||||
 * Copyright (c) 2015-2017 Evgeny Poberezkin
 | 
			
		||||
 */
 | 
			
		||||
const metaSchema = {
 | 
			
		||||
    id: "http://json-schema.org/draft-04/schema#",
 | 
			
		||||
    $schema: "http://json-schema.org/draft-04/schema#",
 | 
			
		||||
    description: "Core schema meta-schema",
 | 
			
		||||
    definitions: {
 | 
			
		||||
        schemaArray: {
 | 
			
		||||
            type: "array",
 | 
			
		||||
            minItems: 1,
 | 
			
		||||
            items: { $ref: "#" }
 | 
			
		||||
        },
 | 
			
		||||
        positiveInteger: {
 | 
			
		||||
            type: "integer",
 | 
			
		||||
            minimum: 0
 | 
			
		||||
        },
 | 
			
		||||
        positiveIntegerDefault0: {
 | 
			
		||||
            allOf: [{ $ref: "#/definitions/positiveInteger" }, { default: 0 }]
 | 
			
		||||
        },
 | 
			
		||||
        simpleTypes: {
 | 
			
		||||
            enum: ["array", "boolean", "integer", "null", "number", "object", "string"]
 | 
			
		||||
        },
 | 
			
		||||
        stringArray: {
 | 
			
		||||
            type: "array",
 | 
			
		||||
            items: { type: "string" },
 | 
			
		||||
            minItems: 1,
 | 
			
		||||
            uniqueItems: true
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    type: "object",
 | 
			
		||||
    properties: {
 | 
			
		||||
        id: {
 | 
			
		||||
            type: "string"
 | 
			
		||||
        },
 | 
			
		||||
        $schema: {
 | 
			
		||||
            type: "string"
 | 
			
		||||
        },
 | 
			
		||||
        title: {
 | 
			
		||||
            type: "string"
 | 
			
		||||
        },
 | 
			
		||||
        description: {
 | 
			
		||||
            type: "string"
 | 
			
		||||
        },
 | 
			
		||||
        default: { },
 | 
			
		||||
        multipleOf: {
 | 
			
		||||
            type: "number",
 | 
			
		||||
            minimum: 0,
 | 
			
		||||
            exclusiveMinimum: true
 | 
			
		||||
        },
 | 
			
		||||
        maximum: {
 | 
			
		||||
            type: "number"
 | 
			
		||||
        },
 | 
			
		||||
        exclusiveMaximum: {
 | 
			
		||||
            type: "boolean",
 | 
			
		||||
            default: false
 | 
			
		||||
        },
 | 
			
		||||
        minimum: {
 | 
			
		||||
            type: "number"
 | 
			
		||||
        },
 | 
			
		||||
        exclusiveMinimum: {
 | 
			
		||||
            type: "boolean",
 | 
			
		||||
            default: false
 | 
			
		||||
        },
 | 
			
		||||
        maxLength: { $ref: "#/definitions/positiveInteger" },
 | 
			
		||||
        minLength: { $ref: "#/definitions/positiveIntegerDefault0" },
 | 
			
		||||
        pattern: {
 | 
			
		||||
            type: "string",
 | 
			
		||||
            format: "regex"
 | 
			
		||||
        },
 | 
			
		||||
        additionalItems: {
 | 
			
		||||
            anyOf: [
 | 
			
		||||
                { type: "boolean" },
 | 
			
		||||
                { $ref: "#" }
 | 
			
		||||
            ],
 | 
			
		||||
            default: { }
 | 
			
		||||
        },
 | 
			
		||||
        items: {
 | 
			
		||||
            anyOf: [
 | 
			
		||||
                { $ref: "#" },
 | 
			
		||||
                { $ref: "#/definitions/schemaArray" }
 | 
			
		||||
            ],
 | 
			
		||||
            default: { }
 | 
			
		||||
        },
 | 
			
		||||
        maxItems: { $ref: "#/definitions/positiveInteger" },
 | 
			
		||||
        minItems: { $ref: "#/definitions/positiveIntegerDefault0" },
 | 
			
		||||
        uniqueItems: {
 | 
			
		||||
            type: "boolean",
 | 
			
		||||
            default: false
 | 
			
		||||
        },
 | 
			
		||||
        maxProperties: { $ref: "#/definitions/positiveInteger" },
 | 
			
		||||
        minProperties: { $ref: "#/definitions/positiveIntegerDefault0" },
 | 
			
		||||
        required: { $ref: "#/definitions/stringArray" },
 | 
			
		||||
        additionalProperties: {
 | 
			
		||||
            anyOf: [
 | 
			
		||||
                { type: "boolean" },
 | 
			
		||||
                { $ref: "#" }
 | 
			
		||||
            ],
 | 
			
		||||
            default: { }
 | 
			
		||||
        },
 | 
			
		||||
        definitions: {
 | 
			
		||||
            type: "object",
 | 
			
		||||
            additionalProperties: { $ref: "#" },
 | 
			
		||||
            default: { }
 | 
			
		||||
        },
 | 
			
		||||
        properties: {
 | 
			
		||||
            type: "object",
 | 
			
		||||
            additionalProperties: { $ref: "#" },
 | 
			
		||||
            default: { }
 | 
			
		||||
        },
 | 
			
		||||
        patternProperties: {
 | 
			
		||||
            type: "object",
 | 
			
		||||
            additionalProperties: { $ref: "#" },
 | 
			
		||||
            default: { }
 | 
			
		||||
        },
 | 
			
		||||
        dependencies: {
 | 
			
		||||
            type: "object",
 | 
			
		||||
            additionalProperties: {
 | 
			
		||||
                anyOf: [
 | 
			
		||||
                    { $ref: "#" },
 | 
			
		||||
                    { $ref: "#/definitions/stringArray" }
 | 
			
		||||
                ]
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        enum: {
 | 
			
		||||
            type: "array",
 | 
			
		||||
            minItems: 1,
 | 
			
		||||
            uniqueItems: true
 | 
			
		||||
        },
 | 
			
		||||
        type: {
 | 
			
		||||
            anyOf: [
 | 
			
		||||
                { $ref: "#/definitions/simpleTypes" },
 | 
			
		||||
                {
 | 
			
		||||
                    type: "array",
 | 
			
		||||
                    items: { $ref: "#/definitions/simpleTypes" },
 | 
			
		||||
                    minItems: 1,
 | 
			
		||||
                    uniqueItems: true
 | 
			
		||||
                }
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        format: { type: "string" },
 | 
			
		||||
        allOf: { $ref: "#/definitions/schemaArray" },
 | 
			
		||||
        anyOf: { $ref: "#/definitions/schemaArray" },
 | 
			
		||||
        oneOf: { $ref: "#/definitions/schemaArray" },
 | 
			
		||||
        not: { $ref: "#" }
 | 
			
		||||
    },
 | 
			
		||||
    dependencies: {
 | 
			
		||||
        exclusiveMaximum: ["maximum"],
 | 
			
		||||
        exclusiveMinimum: ["minimum"]
 | 
			
		||||
    },
 | 
			
		||||
    default: { }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Public Interface
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
export default (additionalOptions = {}) => {
 | 
			
		||||
    const ajv = new Ajv({
 | 
			
		||||
        meta: false,
 | 
			
		||||
        useDefaults: true,
 | 
			
		||||
        validateSchema: false,
 | 
			
		||||
        missingRefs: "ignore",
 | 
			
		||||
        verbose: true,
 | 
			
		||||
        schemaId: "auto",
 | 
			
		||||
        ...additionalOptions
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    ajv.addMetaSchema(metaSchema);
 | 
			
		||||
    // eslint-disable-next-line no-underscore-dangle
 | 
			
		||||
    ajv._opts.defaultMeta = metaSchema.id;
 | 
			
		||||
 | 
			
		||||
    return ajv;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										135
									
								
								node_modules/@eslint/eslintrc/lib/shared/config-ops.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								node_modules/@eslint/eslintrc/lib/shared/config-ops.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,135 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview Config file operations. This file must be usable in the browser,
 | 
			
		||||
 * so no Node-specific code can be here.
 | 
			
		||||
 * @author Nicholas C. Zakas
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Private
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
const RULE_SEVERITY_STRINGS = ["off", "warn", "error"],
 | 
			
		||||
    RULE_SEVERITY = RULE_SEVERITY_STRINGS.reduce((map, value, index) => {
 | 
			
		||||
        map[value] = index;
 | 
			
		||||
        return map;
 | 
			
		||||
    }, {}),
 | 
			
		||||
    VALID_SEVERITIES = [0, 1, 2, "off", "warn", "error"];
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Public Interface
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Normalizes the severity value of a rule's configuration to a number
 | 
			
		||||
 * @param {(number|string|[number, ...*]|[string, ...*])} ruleConfig A rule's configuration value, generally
 | 
			
		||||
 * received from the user. A valid config value is either 0, 1, 2, the string "off" (treated the same as 0),
 | 
			
		||||
 * the string "warn" (treated the same as 1), the string "error" (treated the same as 2), or an array
 | 
			
		||||
 * whose first element is one of the above values. Strings are matched case-insensitively.
 | 
			
		||||
 * @returns {(0|1|2)} The numeric severity value if the config value was valid, otherwise 0.
 | 
			
		||||
 */
 | 
			
		||||
function getRuleSeverity(ruleConfig) {
 | 
			
		||||
    const severityValue = Array.isArray(ruleConfig) ? ruleConfig[0] : ruleConfig;
 | 
			
		||||
 | 
			
		||||
    if (severityValue === 0 || severityValue === 1 || severityValue === 2) {
 | 
			
		||||
        return severityValue;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (typeof severityValue === "string") {
 | 
			
		||||
        return RULE_SEVERITY[severityValue.toLowerCase()] || 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Converts old-style severity settings (0, 1, 2) into new-style
 | 
			
		||||
 * severity settings (off, warn, error) for all rules. Assumption is that severity
 | 
			
		||||
 * values have already been validated as correct.
 | 
			
		||||
 * @param {Object} config The config object to normalize.
 | 
			
		||||
 * @returns {void}
 | 
			
		||||
 */
 | 
			
		||||
function normalizeToStrings(config) {
 | 
			
		||||
 | 
			
		||||
    if (config.rules) {
 | 
			
		||||
        Object.keys(config.rules).forEach(ruleId => {
 | 
			
		||||
            const ruleConfig = config.rules[ruleId];
 | 
			
		||||
 | 
			
		||||
            if (typeof ruleConfig === "number") {
 | 
			
		||||
                config.rules[ruleId] = RULE_SEVERITY_STRINGS[ruleConfig] || RULE_SEVERITY_STRINGS[0];
 | 
			
		||||
            } else if (Array.isArray(ruleConfig) && typeof ruleConfig[0] === "number") {
 | 
			
		||||
                ruleConfig[0] = RULE_SEVERITY_STRINGS[ruleConfig[0]] || RULE_SEVERITY_STRINGS[0];
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Determines if the severity for the given rule configuration represents an error.
 | 
			
		||||
 * @param {int|string|Array} ruleConfig The configuration for an individual rule.
 | 
			
		||||
 * @returns {boolean} True if the rule represents an error, false if not.
 | 
			
		||||
 */
 | 
			
		||||
function isErrorSeverity(ruleConfig) {
 | 
			
		||||
    return getRuleSeverity(ruleConfig) === 2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Checks whether a given config has valid severity or not.
 | 
			
		||||
 * @param {number|string|Array} ruleConfig The configuration for an individual rule.
 | 
			
		||||
 * @returns {boolean} `true` if the configuration has valid severity.
 | 
			
		||||
 */
 | 
			
		||||
function isValidSeverity(ruleConfig) {
 | 
			
		||||
    let severity = Array.isArray(ruleConfig) ? ruleConfig[0] : ruleConfig;
 | 
			
		||||
 | 
			
		||||
    if (typeof severity === "string") {
 | 
			
		||||
        severity = severity.toLowerCase();
 | 
			
		||||
    }
 | 
			
		||||
    return VALID_SEVERITIES.indexOf(severity) !== -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Checks whether every rule of a given config has valid severity or not.
 | 
			
		||||
 * @param {Object} config The configuration for rules.
 | 
			
		||||
 * @returns {boolean} `true` if the configuration has valid severity.
 | 
			
		||||
 */
 | 
			
		||||
function isEverySeverityValid(config) {
 | 
			
		||||
    return Object.keys(config).every(ruleId => isValidSeverity(config[ruleId]));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Normalizes a value for a global in a config
 | 
			
		||||
 * @param {(boolean|string|null)} configuredValue The value given for a global in configuration or in
 | 
			
		||||
 * a global directive comment
 | 
			
		||||
 * @returns {("readable"|"writeable"|"off")} The value normalized as a string
 | 
			
		||||
 * @throws Error if global value is invalid
 | 
			
		||||
 */
 | 
			
		||||
function normalizeConfigGlobal(configuredValue) {
 | 
			
		||||
    switch (configuredValue) {
 | 
			
		||||
        case "off":
 | 
			
		||||
            return "off";
 | 
			
		||||
 | 
			
		||||
        case true:
 | 
			
		||||
        case "true":
 | 
			
		||||
        case "writeable":
 | 
			
		||||
        case "writable":
 | 
			
		||||
            return "writable";
 | 
			
		||||
 | 
			
		||||
        case null:
 | 
			
		||||
        case false:
 | 
			
		||||
        case "false":
 | 
			
		||||
        case "readable":
 | 
			
		||||
        case "readonly":
 | 
			
		||||
            return "readonly";
 | 
			
		||||
 | 
			
		||||
        default:
 | 
			
		||||
            throw new Error(`'${configuredValue}' is not a valid configuration for a global (use 'readonly', 'writable', or 'off')`);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export {
 | 
			
		||||
    getRuleSeverity,
 | 
			
		||||
    normalizeToStrings,
 | 
			
		||||
    isErrorSeverity,
 | 
			
		||||
    isValidSeverity,
 | 
			
		||||
    isEverySeverityValid,
 | 
			
		||||
    normalizeConfigGlobal
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										325
									
								
								node_modules/@eslint/eslintrc/lib/shared/config-validator.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										325
									
								
								node_modules/@eslint/eslintrc/lib/shared/config-validator.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,325 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview Validates configs.
 | 
			
		||||
 * @author Brandon Mills
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* eslint class-methods-use-this: "off" */
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Requirements
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
import util from "util";
 | 
			
		||||
import * as ConfigOps from "./config-ops.js";
 | 
			
		||||
import { emitDeprecationWarning } from "./deprecation-warnings.js";
 | 
			
		||||
import ajvOrig from "./ajv.js";
 | 
			
		||||
import configSchema from "../../conf/config-schema.js";
 | 
			
		||||
import BuiltInEnvironments from "../../conf/environments.js";
 | 
			
		||||
 | 
			
		||||
const ajv = ajvOrig();
 | 
			
		||||
 | 
			
		||||
const ruleValidators = new WeakMap();
 | 
			
		||||
const noop = Function.prototype;
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Private
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
let validateSchema;
 | 
			
		||||
const severityMap = {
 | 
			
		||||
    error: 2,
 | 
			
		||||
    warn: 1,
 | 
			
		||||
    off: 0
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const validated = new WeakSet();
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// Exports
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
export default class ConfigValidator {
 | 
			
		||||
    constructor({ builtInRules = new Map() } = {}) {
 | 
			
		||||
        this.builtInRules = builtInRules;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets a complete options schema for a rule.
 | 
			
		||||
     * @param {{create: Function, schema: (Array|null)}} rule A new-style rule object
 | 
			
		||||
     * @returns {Object} JSON Schema for the rule's options.
 | 
			
		||||
     */
 | 
			
		||||
    getRuleOptionsSchema(rule) {
 | 
			
		||||
        if (!rule) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const schema = rule.schema || rule.meta && rule.meta.schema;
 | 
			
		||||
 | 
			
		||||
        // Given a tuple of schemas, insert warning level at the beginning
 | 
			
		||||
        if (Array.isArray(schema)) {
 | 
			
		||||
            if (schema.length) {
 | 
			
		||||
                return {
 | 
			
		||||
                    type: "array",
 | 
			
		||||
                    items: schema,
 | 
			
		||||
                    minItems: 0,
 | 
			
		||||
                    maxItems: schema.length
 | 
			
		||||
                };
 | 
			
		||||
            }
 | 
			
		||||
            return {
 | 
			
		||||
                type: "array",
 | 
			
		||||
                minItems: 0,
 | 
			
		||||
                maxItems: 0
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Given a full schema, leave it alone
 | 
			
		||||
        return schema || null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Validates a rule's severity and returns the severity value. Throws an error if the severity is invalid.
 | 
			
		||||
     * @param {options} options The given options for the rule.
 | 
			
		||||
     * @returns {number|string} The rule's severity value
 | 
			
		||||
     */
 | 
			
		||||
    validateRuleSeverity(options) {
 | 
			
		||||
        const severity = Array.isArray(options) ? options[0] : options;
 | 
			
		||||
        const normSeverity = typeof severity === "string" ? severityMap[severity.toLowerCase()] : severity;
 | 
			
		||||
 | 
			
		||||
        if (normSeverity === 0 || normSeverity === 1 || normSeverity === 2) {
 | 
			
		||||
            return normSeverity;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        throw new Error(`\tSeverity should be one of the following: 0 = off, 1 = warn, 2 = error (you passed '${util.inspect(severity).replace(/'/gu, "\"").replace(/\n/gu, "")}').\n`);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Validates the non-severity options passed to a rule, based on its schema.
 | 
			
		||||
     * @param {{create: Function}} rule The rule to validate
 | 
			
		||||
     * @param {Array} localOptions The options for the rule, excluding severity
 | 
			
		||||
     * @returns {void}
 | 
			
		||||
     */
 | 
			
		||||
    validateRuleSchema(rule, localOptions) {
 | 
			
		||||
        if (!ruleValidators.has(rule)) {
 | 
			
		||||
            const schema = this.getRuleOptionsSchema(rule);
 | 
			
		||||
 | 
			
		||||
            if (schema) {
 | 
			
		||||
                ruleValidators.set(rule, ajv.compile(schema));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const validateRule = ruleValidators.get(rule);
 | 
			
		||||
 | 
			
		||||
        if (validateRule) {
 | 
			
		||||
            validateRule(localOptions);
 | 
			
		||||
            if (validateRule.errors) {
 | 
			
		||||
                throw new Error(validateRule.errors.map(
 | 
			
		||||
                    error => `\tValue ${JSON.stringify(error.data)} ${error.message}.\n`
 | 
			
		||||
                ).join(""));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Validates a rule's options against its schema.
 | 
			
		||||
     * @param {{create: Function}|null} rule The rule that the config is being validated for
 | 
			
		||||
     * @param {string} ruleId The rule's unique name.
 | 
			
		||||
     * @param {Array|number} options The given options for the rule.
 | 
			
		||||
     * @param {string|null} source The name of the configuration source to report in any errors. If null or undefined,
 | 
			
		||||
     * no source is prepended to the message.
 | 
			
		||||
     * @returns {void}
 | 
			
		||||
     */
 | 
			
		||||
    validateRuleOptions(rule, ruleId, options, source = null) {
 | 
			
		||||
        try {
 | 
			
		||||
            const severity = this.validateRuleSeverity(options);
 | 
			
		||||
 | 
			
		||||
            if (severity !== 0) {
 | 
			
		||||
                this.validateRuleSchema(rule, Array.isArray(options) ? options.slice(1) : []);
 | 
			
		||||
            }
 | 
			
		||||
        } catch (err) {
 | 
			
		||||
            const enhancedMessage = `Configuration for rule "${ruleId}" is invalid:\n${err.message}`;
 | 
			
		||||
 | 
			
		||||
            if (typeof source === "string") {
 | 
			
		||||
                throw new Error(`${source}:\n\t${enhancedMessage}`);
 | 
			
		||||
            } else {
 | 
			
		||||
                throw new Error(enhancedMessage);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Validates an environment object
 | 
			
		||||
     * @param {Object} environment The environment config object to validate.
 | 
			
		||||
     * @param {string} source The name of the configuration source to report in any errors.
 | 
			
		||||
     * @param {function(envId:string): Object} [getAdditionalEnv] A map from strings to loaded environments.
 | 
			
		||||
     * @returns {void}
 | 
			
		||||
     */
 | 
			
		||||
    validateEnvironment(
 | 
			
		||||
        environment,
 | 
			
		||||
        source,
 | 
			
		||||
        getAdditionalEnv = noop
 | 
			
		||||
    ) {
 | 
			
		||||
 | 
			
		||||
        // not having an environment is ok
 | 
			
		||||
        if (!environment) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Object.keys(environment).forEach(id => {
 | 
			
		||||
            const env = getAdditionalEnv(id) || BuiltInEnvironments.get(id) || null;
 | 
			
		||||
 | 
			
		||||
            if (!env) {
 | 
			
		||||
                const message = `${source}:\n\tEnvironment key "${id}" is unknown\n`;
 | 
			
		||||
 | 
			
		||||
                throw new Error(message);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Validates a rules config object
 | 
			
		||||
     * @param {Object} rulesConfig The rules config object to validate.
 | 
			
		||||
     * @param {string} source The name of the configuration source to report in any errors.
 | 
			
		||||
     * @param {function(ruleId:string): Object} getAdditionalRule A map from strings to loaded rules
 | 
			
		||||
     * @returns {void}
 | 
			
		||||
     */
 | 
			
		||||
    validateRules(
 | 
			
		||||
        rulesConfig,
 | 
			
		||||
        source,
 | 
			
		||||
        getAdditionalRule = noop
 | 
			
		||||
    ) {
 | 
			
		||||
        if (!rulesConfig) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Object.keys(rulesConfig).forEach(id => {
 | 
			
		||||
            const rule = getAdditionalRule(id) || this.builtInRules.get(id) || null;
 | 
			
		||||
 | 
			
		||||
            this.validateRuleOptions(rule, id, rulesConfig[id], source);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Validates a `globals` section of a config file
 | 
			
		||||
     * @param {Object} globalsConfig The `globals` section
 | 
			
		||||
     * @param {string|null} source The name of the configuration source to report in the event of an error.
 | 
			
		||||
     * @returns {void}
 | 
			
		||||
     */
 | 
			
		||||
    validateGlobals(globalsConfig, source = null) {
 | 
			
		||||
        if (!globalsConfig) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Object.entries(globalsConfig)
 | 
			
		||||
            .forEach(([configuredGlobal, configuredValue]) => {
 | 
			
		||||
                try {
 | 
			
		||||
                    ConfigOps.normalizeConfigGlobal(configuredValue);
 | 
			
		||||
                } catch (err) {
 | 
			
		||||
                    throw new Error(`ESLint configuration of global '${configuredGlobal}' in ${source} is invalid:\n${err.message}`);
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Validate `processor` configuration.
 | 
			
		||||
     * @param {string|undefined} processorName The processor name.
 | 
			
		||||
     * @param {string} source The name of config file.
 | 
			
		||||
     * @param {function(id:string): Processor} getProcessor The getter of defined processors.
 | 
			
		||||
     * @returns {void}
 | 
			
		||||
     */
 | 
			
		||||
    validateProcessor(processorName, source, getProcessor) {
 | 
			
		||||
        if (processorName && !getProcessor(processorName)) {
 | 
			
		||||
            throw new Error(`ESLint configuration of processor in '${source}' is invalid: '${processorName}' was not found.`);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Formats an array of schema validation errors.
 | 
			
		||||
     * @param {Array} errors An array of error messages to format.
 | 
			
		||||
     * @returns {string} Formatted error message
 | 
			
		||||
     */
 | 
			
		||||
    formatErrors(errors) {
 | 
			
		||||
        return errors.map(error => {
 | 
			
		||||
            if (error.keyword === "additionalProperties") {
 | 
			
		||||
                const formattedPropertyPath = error.dataPath.length ? `${error.dataPath.slice(1)}.${error.params.additionalProperty}` : error.params.additionalProperty;
 | 
			
		||||
 | 
			
		||||
                return `Unexpected top-level property "${formattedPropertyPath}"`;
 | 
			
		||||
            }
 | 
			
		||||
            if (error.keyword === "type") {
 | 
			
		||||
                const formattedField = error.dataPath.slice(1);
 | 
			
		||||
                const formattedExpectedType = Array.isArray(error.schema) ? error.schema.join("/") : error.schema;
 | 
			
		||||
                const formattedValue = JSON.stringify(error.data);
 | 
			
		||||
 | 
			
		||||
                return `Property "${formattedField}" is the wrong type (expected ${formattedExpectedType} but got \`${formattedValue}\`)`;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            const field = error.dataPath[0] === "." ? error.dataPath.slice(1) : error.dataPath;
 | 
			
		||||
 | 
			
		||||
            return `"${field}" ${error.message}. Value: ${JSON.stringify(error.data)}`;
 | 
			
		||||
        }).map(message => `\t- ${message}.\n`).join("");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Validates the top level properties of the config object.
 | 
			
		||||
     * @param {Object} config The config object to validate.
 | 
			
		||||
     * @param {string} source The name of the configuration source to report in any errors.
 | 
			
		||||
     * @returns {void}
 | 
			
		||||
     */
 | 
			
		||||
    validateConfigSchema(config, source = null) {
 | 
			
		||||
        validateSchema = validateSchema || ajv.compile(configSchema);
 | 
			
		||||
 | 
			
		||||
        if (!validateSchema(config)) {
 | 
			
		||||
            throw new Error(`ESLint configuration in ${source} is invalid:\n${this.formatErrors(validateSchema.errors)}`);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (Object.hasOwnProperty.call(config, "ecmaFeatures")) {
 | 
			
		||||
            emitDeprecationWarning(source, "ESLINT_LEGACY_ECMAFEATURES");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Validates an entire config object.
 | 
			
		||||
     * @param {Object} config The config object to validate.
 | 
			
		||||
     * @param {string} source The name of the configuration source to report in any errors.
 | 
			
		||||
     * @param {function(ruleId:string): Object} [getAdditionalRule] A map from strings to loaded rules.
 | 
			
		||||
     * @param {function(envId:string): Object} [getAdditionalEnv] A map from strings to loaded envs.
 | 
			
		||||
     * @returns {void}
 | 
			
		||||
     */
 | 
			
		||||
    validate(config, source, getAdditionalRule, getAdditionalEnv) {
 | 
			
		||||
        this.validateConfigSchema(config, source);
 | 
			
		||||
        this.validateRules(config.rules, source, getAdditionalRule);
 | 
			
		||||
        this.validateEnvironment(config.env, source, getAdditionalEnv);
 | 
			
		||||
        this.validateGlobals(config.globals, source);
 | 
			
		||||
 | 
			
		||||
        for (const override of config.overrides || []) {
 | 
			
		||||
            this.validateRules(override.rules, source, getAdditionalRule);
 | 
			
		||||
            this.validateEnvironment(override.env, source, getAdditionalEnv);
 | 
			
		||||
            this.validateGlobals(config.globals, source);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Validate config array object.
 | 
			
		||||
     * @param {ConfigArray} configArray The config array to validate.
 | 
			
		||||
     * @returns {void}
 | 
			
		||||
     */
 | 
			
		||||
    validateConfigArray(configArray) {
 | 
			
		||||
        const getPluginEnv = Map.prototype.get.bind(configArray.pluginEnvironments);
 | 
			
		||||
        const getPluginProcessor = Map.prototype.get.bind(configArray.pluginProcessors);
 | 
			
		||||
        const getPluginRule = Map.prototype.get.bind(configArray.pluginRules);
 | 
			
		||||
 | 
			
		||||
        // Validate.
 | 
			
		||||
        for (const element of configArray) {
 | 
			
		||||
            if (validated.has(element)) {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            validated.add(element);
 | 
			
		||||
 | 
			
		||||
            this.validateEnvironment(element.env, element.name, getPluginEnv);
 | 
			
		||||
            this.validateGlobals(element.globals, element.name);
 | 
			
		||||
            this.validateProcessor(element.processor, element.name, getPluginProcessor);
 | 
			
		||||
            this.validateRules(element.rules, element.name, getPluginRule);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										63
									
								
								node_modules/@eslint/eslintrc/lib/shared/deprecation-warnings.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								node_modules/@eslint/eslintrc/lib/shared/deprecation-warnings.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview Provide the function that emits deprecation warnings.
 | 
			
		||||
 * @author Toru Nagashima <http://github.com/mysticatea>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Requirements
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
import path from "path";
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Private
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// Defitions for deprecation warnings.
 | 
			
		||||
const deprecationWarningMessages = {
 | 
			
		||||
    ESLINT_LEGACY_ECMAFEATURES:
 | 
			
		||||
        "The 'ecmaFeatures' config file property is deprecated and has no effect.",
 | 
			
		||||
    ESLINT_PERSONAL_CONFIG_LOAD:
 | 
			
		||||
        "'~/.eslintrc.*' config files have been deprecated. " +
 | 
			
		||||
        "Please use a config file per project or the '--config' option.",
 | 
			
		||||
    ESLINT_PERSONAL_CONFIG_SUPPRESS:
 | 
			
		||||
        "'~/.eslintrc.*' config files have been deprecated. " +
 | 
			
		||||
        "Please remove it or add 'root:true' to the config files in your " +
 | 
			
		||||
        "projects in order to avoid loading '~/.eslintrc.*' accidentally."
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const sourceFileErrorCache = new Set();
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Emits a deprecation warning containing a given filepath. A new deprecation warning is emitted
 | 
			
		||||
 * for each unique file path, but repeated invocations with the same file path have no effect.
 | 
			
		||||
 * No warnings are emitted if the `--no-deprecation` or `--no-warnings` Node runtime flags are active.
 | 
			
		||||
 * @param {string} source The name of the configuration source to report the warning for.
 | 
			
		||||
 * @param {string} errorCode The warning message to show.
 | 
			
		||||
 * @returns {void}
 | 
			
		||||
 */
 | 
			
		||||
function emitDeprecationWarning(source, errorCode) {
 | 
			
		||||
    const cacheKey = JSON.stringify({ source, errorCode });
 | 
			
		||||
 | 
			
		||||
    if (sourceFileErrorCache.has(cacheKey)) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    sourceFileErrorCache.add(cacheKey);
 | 
			
		||||
 | 
			
		||||
    const rel = path.relative(process.cwd(), source);
 | 
			
		||||
    const message = deprecationWarningMessages[errorCode];
 | 
			
		||||
 | 
			
		||||
    process.emitWarning(
 | 
			
		||||
        `${message} (found in "${rel}")`,
 | 
			
		||||
        "DeprecationWarning",
 | 
			
		||||
        errorCode
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Public Interface
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
export {
 | 
			
		||||
    emitDeprecationWarning
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										96
									
								
								node_modules/@eslint/eslintrc/lib/shared/naming.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								node_modules/@eslint/eslintrc/lib/shared/naming.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,96 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview Common helpers for naming of plugins, formatters and configs
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
const NAMESPACE_REGEX = /^@.*\//iu;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Brings package name to correct format based on prefix
 | 
			
		||||
 * @param {string} name The name of the package.
 | 
			
		||||
 * @param {string} prefix Can be either "eslint-plugin", "eslint-config" or "eslint-formatter"
 | 
			
		||||
 * @returns {string} Normalized name of the package
 | 
			
		||||
 * @private
 | 
			
		||||
 */
 | 
			
		||||
function normalizePackageName(name, prefix) {
 | 
			
		||||
    let normalizedName = name;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * On Windows, name can come in with Windows slashes instead of Unix slashes.
 | 
			
		||||
     * Normalize to Unix first to avoid errors later on.
 | 
			
		||||
     * https://github.com/eslint/eslint/issues/5644
 | 
			
		||||
     */
 | 
			
		||||
    if (normalizedName.includes("\\")) {
 | 
			
		||||
        normalizedName = normalizedName.replace(/\\/gu, "/");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (normalizedName.charAt(0) === "@") {
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * it's a scoped package
 | 
			
		||||
         * package name is the prefix, or just a username
 | 
			
		||||
         */
 | 
			
		||||
        const scopedPackageShortcutRegex = new RegExp(`^(@[^/]+)(?:/(?:${prefix})?)?$`, "u"),
 | 
			
		||||
            scopedPackageNameRegex = new RegExp(`^${prefix}(-|$)`, "u");
 | 
			
		||||
 | 
			
		||||
        if (scopedPackageShortcutRegex.test(normalizedName)) {
 | 
			
		||||
            normalizedName = normalizedName.replace(scopedPackageShortcutRegex, `$1/${prefix}`);
 | 
			
		||||
        } else if (!scopedPackageNameRegex.test(normalizedName.split("/")[1])) {
 | 
			
		||||
 | 
			
		||||
            /**
 | 
			
		||||
             * for scoped packages, insert the prefix after the first / unless
 | 
			
		||||
             * the path is already @scope/eslint or @scope/eslint-xxx-yyy
 | 
			
		||||
             */
 | 
			
		||||
            normalizedName = normalizedName.replace(/^@([^/]+)\/(.*)$/u, `@$1/${prefix}-$2`);
 | 
			
		||||
        }
 | 
			
		||||
    } else if (!normalizedName.startsWith(`${prefix}-`)) {
 | 
			
		||||
        normalizedName = `${prefix}-${normalizedName}`;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return normalizedName;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Removes the prefix from a fullname.
 | 
			
		||||
 * @param {string} fullname The term which may have the prefix.
 | 
			
		||||
 * @param {string} prefix The prefix to remove.
 | 
			
		||||
 * @returns {string} The term without prefix.
 | 
			
		||||
 */
 | 
			
		||||
function getShorthandName(fullname, prefix) {
 | 
			
		||||
    if (fullname[0] === "@") {
 | 
			
		||||
        let matchResult = new RegExp(`^(@[^/]+)/${prefix}$`, "u").exec(fullname);
 | 
			
		||||
 | 
			
		||||
        if (matchResult) {
 | 
			
		||||
            return matchResult[1];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        matchResult = new RegExp(`^(@[^/]+)/${prefix}-(.+)$`, "u").exec(fullname);
 | 
			
		||||
        if (matchResult) {
 | 
			
		||||
            return `${matchResult[1]}/${matchResult[2]}`;
 | 
			
		||||
        }
 | 
			
		||||
    } else if (fullname.startsWith(`${prefix}-`)) {
 | 
			
		||||
        return fullname.slice(prefix.length + 1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return fullname;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Gets the scope (namespace) of a term.
 | 
			
		||||
 * @param {string} term The term which may have the namespace.
 | 
			
		||||
 * @returns {string} The namespace of the term if it has one.
 | 
			
		||||
 */
 | 
			
		||||
function getNamespaceFromTerm(term) {
 | 
			
		||||
    const match = term.match(NAMESPACE_REGEX);
 | 
			
		||||
 | 
			
		||||
    return match ? match[0] : "";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Public Interface
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
export {
 | 
			
		||||
    normalizePackageName,
 | 
			
		||||
    getShorthandName,
 | 
			
		||||
    getNamespaceFromTerm
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										42
									
								
								node_modules/@eslint/eslintrc/lib/shared/relative-module-resolver.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								node_modules/@eslint/eslintrc/lib/shared/relative-module-resolver.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Utility for resolving a module relative to another module
 | 
			
		||||
 * @author Teddy Katz
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import Module from "module";
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * `Module.createRequire` is added in v12.2.0. It supports URL as well.
 | 
			
		||||
 * We only support the case where the argument is a filepath, not a URL.
 | 
			
		||||
 */
 | 
			
		||||
const createRequire = Module.createRequire;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Resolves a Node module relative to another module
 | 
			
		||||
 * @param {string} moduleName The name of a Node module, or a path to a Node module.
 | 
			
		||||
 * @param {string} relativeToPath An absolute path indicating the module that `moduleName` should be resolved relative to. This must be
 | 
			
		||||
 * a file rather than a directory, but the file need not actually exist.
 | 
			
		||||
 * @returns {string} The absolute path that would result from calling `require.resolve(moduleName)` in a file located at `relativeToPath`
 | 
			
		||||
 */
 | 
			
		||||
function resolve(moduleName, relativeToPath) {
 | 
			
		||||
    try {
 | 
			
		||||
        return createRequire(relativeToPath).resolve(moduleName);
 | 
			
		||||
    } catch (error) {
 | 
			
		||||
 | 
			
		||||
        // This `if` block is for older Node.js than 12.0.0. We can remove this block in the future.
 | 
			
		||||
        if (
 | 
			
		||||
            typeof error === "object" &&
 | 
			
		||||
            error !== null &&
 | 
			
		||||
            error.code === "MODULE_NOT_FOUND" &&
 | 
			
		||||
            !error.requireStack &&
 | 
			
		||||
            error.message.includes(moduleName)
 | 
			
		||||
        ) {
 | 
			
		||||
            error.message += `\nRequire stack:\n- ${relativeToPath}`;
 | 
			
		||||
        }
 | 
			
		||||
        throw error;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export {
 | 
			
		||||
    resolve
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										149
									
								
								node_modules/@eslint/eslintrc/lib/shared/types.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								node_modules/@eslint/eslintrc/lib/shared/types.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,149 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview Define common types for input completion.
 | 
			
		||||
 * @author Toru Nagashima <https://github.com/mysticatea>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** @type {any} */
 | 
			
		||||
export default {};
 | 
			
		||||
 | 
			
		||||
/** @typedef {boolean | "off" | "readable" | "readonly" | "writable" | "writeable"} GlobalConf */
 | 
			
		||||
/** @typedef {0 | 1 | 2 | "off" | "warn" | "error"} SeverityConf */
 | 
			
		||||
/** @typedef {SeverityConf | [SeverityConf, ...any[]]} RuleConf */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} EcmaFeatures
 | 
			
		||||
 * @property {boolean} [globalReturn] Enabling `return` statements at the top-level.
 | 
			
		||||
 * @property {boolean} [jsx] Enabling JSX syntax.
 | 
			
		||||
 * @property {boolean} [impliedStrict] Enabling strict mode always.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} ParserOptions
 | 
			
		||||
 * @property {EcmaFeatures} [ecmaFeatures] The optional features.
 | 
			
		||||
 * @property {3|5|6|7|8|9|10|11|12|2015|2016|2017|2018|2019|2020|2021} [ecmaVersion] The ECMAScript version (or revision number).
 | 
			
		||||
 * @property {"script"|"module"} [sourceType] The source code type.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} ConfigData
 | 
			
		||||
 * @property {Record<string, boolean>} [env] The environment settings.
 | 
			
		||||
 * @property {string | string[]} [extends] The path to other config files or the package name of shareable configs.
 | 
			
		||||
 * @property {Record<string, GlobalConf>} [globals] The global variable settings.
 | 
			
		||||
 * @property {string | string[]} [ignorePatterns] The glob patterns that ignore to lint.
 | 
			
		||||
 * @property {boolean} [noInlineConfig] The flag that disables directive comments.
 | 
			
		||||
 * @property {OverrideConfigData[]} [overrides] The override settings per kind of files.
 | 
			
		||||
 * @property {string} [parser] The path to a parser or the package name of a parser.
 | 
			
		||||
 * @property {ParserOptions} [parserOptions] The parser options.
 | 
			
		||||
 * @property {string[]} [plugins] The plugin specifiers.
 | 
			
		||||
 * @property {string} [processor] The processor specifier.
 | 
			
		||||
 * @property {boolean} [reportUnusedDisableDirectives] The flag to report unused `eslint-disable` comments.
 | 
			
		||||
 * @property {boolean} [root] The root flag.
 | 
			
		||||
 * @property {Record<string, RuleConf>} [rules] The rule settings.
 | 
			
		||||
 * @property {Object} [settings] The shared settings.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} OverrideConfigData
 | 
			
		||||
 * @property {Record<string, boolean>} [env] The environment settings.
 | 
			
		||||
 * @property {string | string[]} [excludedFiles] The glob pattarns for excluded files.
 | 
			
		||||
 * @property {string | string[]} [extends] The path to other config files or the package name of shareable configs.
 | 
			
		||||
 * @property {string | string[]} files The glob patterns for target files.
 | 
			
		||||
 * @property {Record<string, GlobalConf>} [globals] The global variable settings.
 | 
			
		||||
 * @property {boolean} [noInlineConfig] The flag that disables directive comments.
 | 
			
		||||
 * @property {OverrideConfigData[]} [overrides] The override settings per kind of files.
 | 
			
		||||
 * @property {string} [parser] The path to a parser or the package name of a parser.
 | 
			
		||||
 * @property {ParserOptions} [parserOptions] The parser options.
 | 
			
		||||
 * @property {string[]} [plugins] The plugin specifiers.
 | 
			
		||||
 * @property {string} [processor] The processor specifier.
 | 
			
		||||
 * @property {boolean} [reportUnusedDisableDirectives] The flag to report unused `eslint-disable` comments.
 | 
			
		||||
 * @property {Record<string, RuleConf>} [rules] The rule settings.
 | 
			
		||||
 * @property {Object} [settings] The shared settings.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} ParseResult
 | 
			
		||||
 * @property {Object} ast The AST.
 | 
			
		||||
 * @property {ScopeManager} [scopeManager] The scope manager of the AST.
 | 
			
		||||
 * @property {Record<string, any>} [services] The services that the parser provides.
 | 
			
		||||
 * @property {Record<string, string[]>} [visitorKeys] The visitor keys of the AST.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} Parser
 | 
			
		||||
 * @property {(text:string, options:ParserOptions) => Object} parse The definition of global variables.
 | 
			
		||||
 * @property {(text:string, options:ParserOptions) => ParseResult} [parseForESLint] The parser options that will be enabled under this environment.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} Environment
 | 
			
		||||
 * @property {Record<string, GlobalConf>} [globals] The definition of global variables.
 | 
			
		||||
 * @property {ParserOptions} [parserOptions] The parser options that will be enabled under this environment.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} LintMessage
 | 
			
		||||
 * @property {number} column The 1-based column number.
 | 
			
		||||
 * @property {number} [endColumn] The 1-based column number of the end location.
 | 
			
		||||
 * @property {number} [endLine] The 1-based line number of the end location.
 | 
			
		||||
 * @property {boolean} fatal If `true` then this is a fatal error.
 | 
			
		||||
 * @property {{range:[number,number], text:string}} [fix] Information for autofix.
 | 
			
		||||
 * @property {number} line The 1-based line number.
 | 
			
		||||
 * @property {string} message The error message.
 | 
			
		||||
 * @property {string|null} ruleId The ID of the rule which makes this message.
 | 
			
		||||
 * @property {0|1|2} severity The severity of this message.
 | 
			
		||||
 * @property {Array<{desc?: string, messageId?: string, fix: {range: [number, number], text: string}}>} [suggestions] Information for suggestions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} SuggestionResult
 | 
			
		||||
 * @property {string} desc A short description.
 | 
			
		||||
 * @property {string} [messageId] Id referencing a message for the description.
 | 
			
		||||
 * @property {{ text: string, range: number[] }} fix fix result info
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} Processor
 | 
			
		||||
 * @property {(text:string, filename:string) => Array<string | { text:string, filename:string }>} [preprocess] The function to extract code blocks.
 | 
			
		||||
 * @property {(messagesList:LintMessage[][], filename:string) => LintMessage[]} [postprocess] The function to merge messages.
 | 
			
		||||
 * @property {boolean} [supportsAutofix] If `true` then it means the processor supports autofix.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} RuleMetaDocs
 | 
			
		||||
 * @property {string} category The category of the rule.
 | 
			
		||||
 * @property {string} description The description of the rule.
 | 
			
		||||
 * @property {boolean} recommended If `true` then the rule is included in `eslint:recommended` preset.
 | 
			
		||||
 * @property {string} url The URL of the rule documentation.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} RuleMeta
 | 
			
		||||
 * @property {boolean} [deprecated] If `true` then the rule has been deprecated.
 | 
			
		||||
 * @property {RuleMetaDocs} docs The document information of the rule.
 | 
			
		||||
 * @property {"code"|"whitespace"} [fixable] The autofix type.
 | 
			
		||||
 * @property {Record<string,string>} [messages] The messages the rule reports.
 | 
			
		||||
 * @property {string[]} [replacedBy] The IDs of the alternative rules.
 | 
			
		||||
 * @property {Array|Object} schema The option schema of the rule.
 | 
			
		||||
 * @property {"problem"|"suggestion"|"layout"} type The rule type.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} Rule
 | 
			
		||||
 * @property {Function} create The factory of the rule.
 | 
			
		||||
 * @property {RuleMeta} meta The meta data of the rule.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} Plugin
 | 
			
		||||
 * @property {Record<string, ConfigData>} [configs] The definition of plugin configs.
 | 
			
		||||
 * @property {Record<string, Environment>} [environments] The definition of plugin environments.
 | 
			
		||||
 * @property {Record<string, Processor>} [processors] The definition of plugin processors.
 | 
			
		||||
 * @property {Record<string, Function | Rule>} [rules] The definition of plugin rules.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Information of deprecated rules.
 | 
			
		||||
 * @typedef {Object} DeprecatedRuleInfo
 | 
			
		||||
 * @property {string} ruleId The rule ID.
 | 
			
		||||
 * @property {string[]} replacedBy The rule IDs that replace this deprecated rule.
 | 
			
		||||
 */
 | 
			
		||||
							
								
								
									
										82
									
								
								node_modules/@eslint/eslintrc/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								node_modules/@eslint/eslintrc/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,82 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "@eslint/eslintrc",
 | 
			
		||||
  "version": "2.1.3",
 | 
			
		||||
  "description": "The legacy ESLintRC config file format for ESLint",
 | 
			
		||||
  "type": "module",
 | 
			
		||||
  "main": "./dist/eslintrc.cjs",
 | 
			
		||||
  "exports": {
 | 
			
		||||
    ".": {
 | 
			
		||||
      "import": "./lib/index.js",
 | 
			
		||||
      "require": "./dist/eslintrc.cjs"
 | 
			
		||||
    },
 | 
			
		||||
    "./package.json": "./package.json",
 | 
			
		||||
    "./universal": {
 | 
			
		||||
      "import": "./lib/index-universal.js",
 | 
			
		||||
      "require": "./dist/eslintrc-universal.cjs"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "files": [
 | 
			
		||||
    "lib",
 | 
			
		||||
    "conf",
 | 
			
		||||
    "LICENSE",
 | 
			
		||||
    "dist",
 | 
			
		||||
    "universal.js"
 | 
			
		||||
  ],
 | 
			
		||||
  "publishConfig": {
 | 
			
		||||
    "access": "public"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "build": "rollup -c",
 | 
			
		||||
    "lint": "eslint . --report-unused-disable-directives",
 | 
			
		||||
    "lint:fix": "npm run lint -- --fix",
 | 
			
		||||
    "prepare": "npm run build",
 | 
			
		||||
    "release:generate:latest": "eslint-generate-release",
 | 
			
		||||
    "release:generate:alpha": "eslint-generate-prerelease alpha",
 | 
			
		||||
    "release:generate:beta": "eslint-generate-prerelease beta",
 | 
			
		||||
    "release:generate:rc": "eslint-generate-prerelease rc",
 | 
			
		||||
    "release:publish": "eslint-publish-release",
 | 
			
		||||
    "test": "mocha -R progress -c 'tests/lib/*.cjs' && c8 mocha -R progress -c 'tests/lib/**/*.js'"
 | 
			
		||||
  },
 | 
			
		||||
  "repository": "eslint/eslintrc",
 | 
			
		||||
  "funding": "https://opencollective.com/eslint",
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "ESLint",
 | 
			
		||||
    "ESLintRC",
 | 
			
		||||
    "Configuration"
 | 
			
		||||
  ],
 | 
			
		||||
  "author": "Nicholas C. Zakas",
 | 
			
		||||
  "license": "MIT",
 | 
			
		||||
  "bugs": {
 | 
			
		||||
    "url": "https://github.com/eslint/eslintrc/issues"
 | 
			
		||||
  },
 | 
			
		||||
  "homepage": "https://github.com/eslint/eslintrc#readme",
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "c8": "^7.7.3",
 | 
			
		||||
    "chai": "^4.3.4",
 | 
			
		||||
    "eslint": "^7.31.0",
 | 
			
		||||
    "eslint-config-eslint": "^7.0.0",
 | 
			
		||||
    "eslint-plugin-jsdoc": "^35.4.1",
 | 
			
		||||
    "eslint-plugin-node": "^11.1.0",
 | 
			
		||||
    "eslint-release": "^3.2.0",
 | 
			
		||||
    "fs-teardown": "^0.1.3",
 | 
			
		||||
    "mocha": "^9.0.3",
 | 
			
		||||
    "rollup": "^2.70.1",
 | 
			
		||||
    "shelljs": "^0.8.4",
 | 
			
		||||
    "sinon": "^11.1.2",
 | 
			
		||||
    "temp-dir": "^2.0.0"
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "ajv": "^6.12.4",
 | 
			
		||||
    "debug": "^4.3.2",
 | 
			
		||||
    "espree": "^9.6.0",
 | 
			
		||||
    "globals": "^13.19.0",
 | 
			
		||||
    "ignore": "^5.2.0",
 | 
			
		||||
    "import-fresh": "^3.2.1",
 | 
			
		||||
    "js-yaml": "^4.1.0",
 | 
			
		||||
    "minimatch": "^3.1.2",
 | 
			
		||||
    "strip-json-comments": "^3.1.1"
 | 
			
		||||
  },
 | 
			
		||||
  "engines": {
 | 
			
		||||
    "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										9
									
								
								node_modules/@eslint/eslintrc/universal.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								node_modules/@eslint/eslintrc/universal.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
// Jest (and probably some other runtimes with custom implementations of
 | 
			
		||||
// `require`) doesn't support `exports` in `package.json`, so this file is here
 | 
			
		||||
// to help them load this module. Note that it is also `.js` and not `.cjs` for
 | 
			
		||||
// the same reason - `cjs` files requires to be loaded with an extension, but
 | 
			
		||||
// since Jest doesn't respect `module` outside of ESM mode it still works in
 | 
			
		||||
// this case (and the `require` in _this_ file does specify the extension).
 | 
			
		||||
 | 
			
		||||
// eslint-disable-next-line no-undef
 | 
			
		||||
module.exports = require("./dist/eslintrc-universal.cjs");
 | 
			
		||||
							
								
								
									
										19
									
								
								node_modules/@eslint/js/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								node_modules/@eslint/js/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
Copyright OpenJS Foundation and other contributors, <www.openjsf.org>
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in
 | 
			
		||||
all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
THE SOFTWARE.
 | 
			
		||||
							
								
								
									
										57
									
								
								node_modules/@eslint/js/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								node_modules/@eslint/js/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
[](https://www.npmjs.com/package/@eslint/js)
 | 
			
		||||
 | 
			
		||||
# ESLint JavaScript Plugin
 | 
			
		||||
 | 
			
		||||
[Website](https://eslint.org) | [Configure ESLint](https://eslint.org/docs/latest/use/configure) | [Rules](https://eslint.org/docs/rules/) | [Contributing](https://eslint.org/docs/latest/contribute) | [Twitter](https://twitter.com/geteslint) | [Chatroom](https://eslint.org/chat)
 | 
			
		||||
 | 
			
		||||
The beginnings of separating out JavaScript-specific functionality from ESLint.
 | 
			
		||||
 | 
			
		||||
Right now, this plugin contains two configurations:
 | 
			
		||||
 | 
			
		||||
* `recommended` - enables the rules recommended by the ESLint team (the replacement for `"eslint:recommended"`)
 | 
			
		||||
* `all` - enables all ESLint rules (the replacement for `"eslint:all"`)
 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
npm install @eslint/js -D
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
Use in your `eslint.config.js` file anytime you want to extend one of the configs:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
import js from "@eslint/js";
 | 
			
		||||
 | 
			
		||||
export default [
 | 
			
		||||
 | 
			
		||||
    // apply recommended rules to JS files
 | 
			
		||||
    {
 | 
			
		||||
        files: ["**/*.js"],
 | 
			
		||||
        rules: js.configs.recommended.rules
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // apply recommended rules to JS files with an override
 | 
			
		||||
    {
 | 
			
		||||
        files: ["**/*.js"],
 | 
			
		||||
        rules: {
 | 
			
		||||
            ...js.configs.recommended.rules,
 | 
			
		||||
            "no-unused-vars": "warn"
 | 
			
		||||
        } 
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // apply all rules to JS files
 | 
			
		||||
    {
 | 
			
		||||
        files: ["**/*.js"],
 | 
			
		||||
        rules: {
 | 
			
		||||
            ...js.configs.all.rules,
 | 
			
		||||
            "no-unused-vars": "warn"
 | 
			
		||||
        } 
 | 
			
		||||
    }
 | 
			
		||||
]
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
MIT
 | 
			
		||||
							
								
								
									
										31
									
								
								node_modules/@eslint/js/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								node_modules/@eslint/js/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "@eslint/js",
 | 
			
		||||
  "version": "8.53.0",
 | 
			
		||||
  "description": "ESLint JavaScript language implementation",
 | 
			
		||||
  "main": "./src/index.js",
 | 
			
		||||
  "scripts": {},
 | 
			
		||||
  "files": [
 | 
			
		||||
    "LICENSE",
 | 
			
		||||
    "README.md",
 | 
			
		||||
    "src"
 | 
			
		||||
  ],
 | 
			
		||||
  "publishConfig": {
 | 
			
		||||
    "access": "public"
 | 
			
		||||
  },
 | 
			
		||||
  "repository": {
 | 
			
		||||
    "type": "git",
 | 
			
		||||
    "url": "https://github.com/eslint/eslint.git",
 | 
			
		||||
    "directory": "packages/js"
 | 
			
		||||
  },
 | 
			
		||||
  "homepage": "https://eslint.org",
 | 
			
		||||
  "bugs": "https://github.com/eslint/eslint/issues/",
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "javascript",
 | 
			
		||||
    "eslint-plugin",
 | 
			
		||||
    "eslint"
 | 
			
		||||
  ],
 | 
			
		||||
  "license": "MIT",
 | 
			
		||||
  "engines": {
 | 
			
		||||
    "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										211
									
								
								node_modules/@eslint/js/src/configs/eslint-all.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										211
									
								
								node_modules/@eslint/js/src/configs/eslint-all.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,211 @@
 | 
			
		||||
/*
 | 
			
		||||
 * WARNING: This file is autogenerated using the tools/update-eslint-all.js
 | 
			
		||||
 * script. Do not edit manually.
 | 
			
		||||
 */
 | 
			
		||||
"use strict";
 | 
			
		||||
 | 
			
		||||
/* eslint quote-props: off -- autogenerated so don't lint */
 | 
			
		||||
 | 
			
		||||
module.exports = Object.freeze({
 | 
			
		||||
    "rules": {
 | 
			
		||||
        "accessor-pairs": "error",
 | 
			
		||||
        "array-callback-return": "error",
 | 
			
		||||
        "arrow-body-style": "error",
 | 
			
		||||
        "block-scoped-var": "error",
 | 
			
		||||
        "camelcase": "error",
 | 
			
		||||
        "capitalized-comments": "error",
 | 
			
		||||
        "class-methods-use-this": "error",
 | 
			
		||||
        "complexity": "error",
 | 
			
		||||
        "consistent-return": "error",
 | 
			
		||||
        "consistent-this": "error",
 | 
			
		||||
        "constructor-super": "error",
 | 
			
		||||
        "curly": "error",
 | 
			
		||||
        "default-case": "error",
 | 
			
		||||
        "default-case-last": "error",
 | 
			
		||||
        "default-param-last": "error",
 | 
			
		||||
        "dot-notation": "error",
 | 
			
		||||
        "eqeqeq": "error",
 | 
			
		||||
        "for-direction": "error",
 | 
			
		||||
        "func-name-matching": "error",
 | 
			
		||||
        "func-names": "error",
 | 
			
		||||
        "func-style": "error",
 | 
			
		||||
        "getter-return": "error",
 | 
			
		||||
        "grouped-accessor-pairs": "error",
 | 
			
		||||
        "guard-for-in": "error",
 | 
			
		||||
        "id-denylist": "error",
 | 
			
		||||
        "id-length": "error",
 | 
			
		||||
        "id-match": "error",
 | 
			
		||||
        "init-declarations": "error",
 | 
			
		||||
        "line-comment-position": "error",
 | 
			
		||||
        "logical-assignment-operators": "error",
 | 
			
		||||
        "max-classes-per-file": "error",
 | 
			
		||||
        "max-depth": "error",
 | 
			
		||||
        "max-lines": "error",
 | 
			
		||||
        "max-lines-per-function": "error",
 | 
			
		||||
        "max-nested-callbacks": "error",
 | 
			
		||||
        "max-params": "error",
 | 
			
		||||
        "max-statements": "error",
 | 
			
		||||
        "multiline-comment-style": "error",
 | 
			
		||||
        "new-cap": "error",
 | 
			
		||||
        "no-alert": "error",
 | 
			
		||||
        "no-array-constructor": "error",
 | 
			
		||||
        "no-async-promise-executor": "error",
 | 
			
		||||
        "no-await-in-loop": "error",
 | 
			
		||||
        "no-bitwise": "error",
 | 
			
		||||
        "no-caller": "error",
 | 
			
		||||
        "no-case-declarations": "error",
 | 
			
		||||
        "no-class-assign": "error",
 | 
			
		||||
        "no-compare-neg-zero": "error",
 | 
			
		||||
        "no-cond-assign": "error",
 | 
			
		||||
        "no-console": "error",
 | 
			
		||||
        "no-const-assign": "error",
 | 
			
		||||
        "no-constant-binary-expression": "error",
 | 
			
		||||
        "no-constant-condition": "error",
 | 
			
		||||
        "no-constructor-return": "error",
 | 
			
		||||
        "no-continue": "error",
 | 
			
		||||
        "no-control-regex": "error",
 | 
			
		||||
        "no-debugger": "error",
 | 
			
		||||
        "no-delete-var": "error",
 | 
			
		||||
        "no-div-regex": "error",
 | 
			
		||||
        "no-dupe-args": "error",
 | 
			
		||||
        "no-dupe-class-members": "error",
 | 
			
		||||
        "no-dupe-else-if": "error",
 | 
			
		||||
        "no-dupe-keys": "error",
 | 
			
		||||
        "no-duplicate-case": "error",
 | 
			
		||||
        "no-duplicate-imports": "error",
 | 
			
		||||
        "no-else-return": "error",
 | 
			
		||||
        "no-empty": "error",
 | 
			
		||||
        "no-empty-character-class": "error",
 | 
			
		||||
        "no-empty-function": "error",
 | 
			
		||||
        "no-empty-pattern": "error",
 | 
			
		||||
        "no-empty-static-block": "error",
 | 
			
		||||
        "no-eq-null": "error",
 | 
			
		||||
        "no-eval": "error",
 | 
			
		||||
        "no-ex-assign": "error",
 | 
			
		||||
        "no-extend-native": "error",
 | 
			
		||||
        "no-extra-bind": "error",
 | 
			
		||||
        "no-extra-boolean-cast": "error",
 | 
			
		||||
        "no-extra-label": "error",
 | 
			
		||||
        "no-fallthrough": "error",
 | 
			
		||||
        "no-func-assign": "error",
 | 
			
		||||
        "no-global-assign": "error",
 | 
			
		||||
        "no-implicit-coercion": "error",
 | 
			
		||||
        "no-implicit-globals": "error",
 | 
			
		||||
        "no-implied-eval": "error",
 | 
			
		||||
        "no-import-assign": "error",
 | 
			
		||||
        "no-inline-comments": "error",
 | 
			
		||||
        "no-inner-declarations": "error",
 | 
			
		||||
        "no-invalid-regexp": "error",
 | 
			
		||||
        "no-invalid-this": "error",
 | 
			
		||||
        "no-irregular-whitespace": "error",
 | 
			
		||||
        "no-iterator": "error",
 | 
			
		||||
        "no-label-var": "error",
 | 
			
		||||
        "no-labels": "error",
 | 
			
		||||
        "no-lone-blocks": "error",
 | 
			
		||||
        "no-lonely-if": "error",
 | 
			
		||||
        "no-loop-func": "error",
 | 
			
		||||
        "no-loss-of-precision": "error",
 | 
			
		||||
        "no-magic-numbers": "error",
 | 
			
		||||
        "no-misleading-character-class": "error",
 | 
			
		||||
        "no-multi-assign": "error",
 | 
			
		||||
        "no-multi-str": "error",
 | 
			
		||||
        "no-negated-condition": "error",
 | 
			
		||||
        "no-nested-ternary": "error",
 | 
			
		||||
        "no-new": "error",
 | 
			
		||||
        "no-new-func": "error",
 | 
			
		||||
        "no-new-native-nonconstructor": "error",
 | 
			
		||||
        "no-new-symbol": "error",
 | 
			
		||||
        "no-new-wrappers": "error",
 | 
			
		||||
        "no-nonoctal-decimal-escape": "error",
 | 
			
		||||
        "no-obj-calls": "error",
 | 
			
		||||
        "no-object-constructor": "error",
 | 
			
		||||
        "no-octal": "error",
 | 
			
		||||
        "no-octal-escape": "error",
 | 
			
		||||
        "no-param-reassign": "error",
 | 
			
		||||
        "no-plusplus": "error",
 | 
			
		||||
        "no-promise-executor-return": "error",
 | 
			
		||||
        "no-proto": "error",
 | 
			
		||||
        "no-prototype-builtins": "error",
 | 
			
		||||
        "no-redeclare": "error",
 | 
			
		||||
        "no-regex-spaces": "error",
 | 
			
		||||
        "no-restricted-exports": "error",
 | 
			
		||||
        "no-restricted-globals": "error",
 | 
			
		||||
        "no-restricted-imports": "error",
 | 
			
		||||
        "no-restricted-properties": "error",
 | 
			
		||||
        "no-restricted-syntax": "error",
 | 
			
		||||
        "no-return-assign": "error",
 | 
			
		||||
        "no-script-url": "error",
 | 
			
		||||
        "no-self-assign": "error",
 | 
			
		||||
        "no-self-compare": "error",
 | 
			
		||||
        "no-sequences": "error",
 | 
			
		||||
        "no-setter-return": "error",
 | 
			
		||||
        "no-shadow": "error",
 | 
			
		||||
        "no-shadow-restricted-names": "error",
 | 
			
		||||
        "no-sparse-arrays": "error",
 | 
			
		||||
        "no-template-curly-in-string": "error",
 | 
			
		||||
        "no-ternary": "error",
 | 
			
		||||
        "no-this-before-super": "error",
 | 
			
		||||
        "no-throw-literal": "error",
 | 
			
		||||
        "no-undef": "error",
 | 
			
		||||
        "no-undef-init": "error",
 | 
			
		||||
        "no-undefined": "error",
 | 
			
		||||
        "no-underscore-dangle": "error",
 | 
			
		||||
        "no-unexpected-multiline": "error",
 | 
			
		||||
        "no-unmodified-loop-condition": "error",
 | 
			
		||||
        "no-unneeded-ternary": "error",
 | 
			
		||||
        "no-unreachable": "error",
 | 
			
		||||
        "no-unreachable-loop": "error",
 | 
			
		||||
        "no-unsafe-finally": "error",
 | 
			
		||||
        "no-unsafe-negation": "error",
 | 
			
		||||
        "no-unsafe-optional-chaining": "error",
 | 
			
		||||
        "no-unused-expressions": "error",
 | 
			
		||||
        "no-unused-labels": "error",
 | 
			
		||||
        "no-unused-private-class-members": "error",
 | 
			
		||||
        "no-unused-vars": "error",
 | 
			
		||||
        "no-use-before-define": "error",
 | 
			
		||||
        "no-useless-backreference": "error",
 | 
			
		||||
        "no-useless-call": "error",
 | 
			
		||||
        "no-useless-catch": "error",
 | 
			
		||||
        "no-useless-computed-key": "error",
 | 
			
		||||
        "no-useless-concat": "error",
 | 
			
		||||
        "no-useless-constructor": "error",
 | 
			
		||||
        "no-useless-escape": "error",
 | 
			
		||||
        "no-useless-rename": "error",
 | 
			
		||||
        "no-useless-return": "error",
 | 
			
		||||
        "no-var": "error",
 | 
			
		||||
        "no-void": "error",
 | 
			
		||||
        "no-warning-comments": "error",
 | 
			
		||||
        "no-with": "error",
 | 
			
		||||
        "object-shorthand": "error",
 | 
			
		||||
        "one-var": "error",
 | 
			
		||||
        "operator-assignment": "error",
 | 
			
		||||
        "prefer-arrow-callback": "error",
 | 
			
		||||
        "prefer-const": "error",
 | 
			
		||||
        "prefer-destructuring": "error",
 | 
			
		||||
        "prefer-exponentiation-operator": "error",
 | 
			
		||||
        "prefer-named-capture-group": "error",
 | 
			
		||||
        "prefer-numeric-literals": "error",
 | 
			
		||||
        "prefer-object-has-own": "error",
 | 
			
		||||
        "prefer-object-spread": "error",
 | 
			
		||||
        "prefer-promise-reject-errors": "error",
 | 
			
		||||
        "prefer-regex-literals": "error",
 | 
			
		||||
        "prefer-rest-params": "error",
 | 
			
		||||
        "prefer-spread": "error",
 | 
			
		||||
        "prefer-template": "error",
 | 
			
		||||
        "radix": "error",
 | 
			
		||||
        "require-atomic-updates": "error",
 | 
			
		||||
        "require-await": "error",
 | 
			
		||||
        "require-unicode-regexp": "error",
 | 
			
		||||
        "require-yield": "error",
 | 
			
		||||
        "sort-imports": "error",
 | 
			
		||||
        "sort-keys": "error",
 | 
			
		||||
        "sort-vars": "error",
 | 
			
		||||
        "strict": "error",
 | 
			
		||||
        "symbol-description": "error",
 | 
			
		||||
        "unicode-bom": "error",
 | 
			
		||||
        "use-isnan": "error",
 | 
			
		||||
        "valid-typeof": "error",
 | 
			
		||||
        "vars-on-top": "error",
 | 
			
		||||
        "yoda": "error"
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										76
									
								
								node_modules/@eslint/js/src/configs/eslint-recommended.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								node_modules/@eslint/js/src/configs/eslint-recommended.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview Configuration applied when a user configuration extends from
 | 
			
		||||
 * eslint:recommended.
 | 
			
		||||
 * @author Nicholas C. Zakas
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
"use strict";
 | 
			
		||||
 | 
			
		||||
/* eslint sort-keys: ["error", "asc"] -- Long, so make more readable */
 | 
			
		||||
 | 
			
		||||
/** @type {import("../lib/shared/types").ConfigData} */
 | 
			
		||||
module.exports = Object.freeze({
 | 
			
		||||
    rules: Object.freeze({
 | 
			
		||||
        "constructor-super": "error",
 | 
			
		||||
        "for-direction": "error",
 | 
			
		||||
        "getter-return": "error",
 | 
			
		||||
        "no-async-promise-executor": "error",
 | 
			
		||||
        "no-case-declarations": "error",
 | 
			
		||||
        "no-class-assign": "error",
 | 
			
		||||
        "no-compare-neg-zero": "error",
 | 
			
		||||
        "no-cond-assign": "error",
 | 
			
		||||
        "no-const-assign": "error",
 | 
			
		||||
        "no-constant-condition": "error",
 | 
			
		||||
        "no-control-regex": "error",
 | 
			
		||||
        "no-debugger": "error",
 | 
			
		||||
        "no-delete-var": "error",
 | 
			
		||||
        "no-dupe-args": "error",
 | 
			
		||||
        "no-dupe-class-members": "error",
 | 
			
		||||
        "no-dupe-else-if": "error",
 | 
			
		||||
        "no-dupe-keys": "error",
 | 
			
		||||
        "no-duplicate-case": "error",
 | 
			
		||||
        "no-empty": "error",
 | 
			
		||||
        "no-empty-character-class": "error",
 | 
			
		||||
        "no-empty-pattern": "error",
 | 
			
		||||
        "no-ex-assign": "error",
 | 
			
		||||
        "no-extra-boolean-cast": "error",
 | 
			
		||||
        "no-extra-semi": "error",
 | 
			
		||||
        "no-fallthrough": "error",
 | 
			
		||||
        "no-func-assign": "error",
 | 
			
		||||
        "no-global-assign": "error",
 | 
			
		||||
        "no-import-assign": "error",
 | 
			
		||||
        "no-inner-declarations": "error",
 | 
			
		||||
        "no-invalid-regexp": "error",
 | 
			
		||||
        "no-irregular-whitespace": "error",
 | 
			
		||||
        "no-loss-of-precision": "error",
 | 
			
		||||
        "no-misleading-character-class": "error",
 | 
			
		||||
        "no-mixed-spaces-and-tabs": "error",
 | 
			
		||||
        "no-new-symbol": "error",
 | 
			
		||||
        "no-nonoctal-decimal-escape": "error",
 | 
			
		||||
        "no-obj-calls": "error",
 | 
			
		||||
        "no-octal": "error",
 | 
			
		||||
        "no-prototype-builtins": "error",
 | 
			
		||||
        "no-redeclare": "error",
 | 
			
		||||
        "no-regex-spaces": "error",
 | 
			
		||||
        "no-self-assign": "error",
 | 
			
		||||
        "no-setter-return": "error",
 | 
			
		||||
        "no-shadow-restricted-names": "error",
 | 
			
		||||
        "no-sparse-arrays": "error",
 | 
			
		||||
        "no-this-before-super": "error",
 | 
			
		||||
        "no-undef": "error",
 | 
			
		||||
        "no-unexpected-multiline": "error",
 | 
			
		||||
        "no-unreachable": "error",
 | 
			
		||||
        "no-unsafe-finally": "error",
 | 
			
		||||
        "no-unsafe-negation": "error",
 | 
			
		||||
        "no-unsafe-optional-chaining": "error",
 | 
			
		||||
        "no-unused-labels": "error",
 | 
			
		||||
        "no-unused-vars": "error",
 | 
			
		||||
        "no-useless-backreference": "error",
 | 
			
		||||
        "no-useless-catch": "error",
 | 
			
		||||
        "no-useless-escape": "error",
 | 
			
		||||
        "no-with": "error",
 | 
			
		||||
        "require-yield": "error",
 | 
			
		||||
        "use-isnan": "error",
 | 
			
		||||
        "valid-typeof": "error"
 | 
			
		||||
    })
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										17
									
								
								node_modules/@eslint/js/src/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								node_modules/@eslint/js/src/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview Main package entrypoint.
 | 
			
		||||
 * @author Nicholas C. Zakas
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
"use strict";
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Public Interface
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    configs: {
 | 
			
		||||
        all: require("./configs/eslint-all"),
 | 
			
		||||
        recommended: require("./configs/eslint-recommended")
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
		Reference in New Issue
	
	Block a user