You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							146 lines
						
					
					
						
							4.1 KiB
						
					
					
				
			
		
		
	
	
							146 lines
						
					
					
						
							4.1 KiB
						
					
					
				/** | 
						|
 * @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 };
 | 
						|
 |