| /** |
| * @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 }; |