| /** | 
|  * @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> | 
|  */ | 
| "use strict"; | 
|   | 
| const { IgnorePattern } = require("./ignore-pattern"); | 
|   | 
| // 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; | 
|     } | 
| } | 
|   | 
| module.exports = { ExtractedConfig }; |