'use strict'; const augmentConfigFull = require('./augmentConfig').augmentConfigFull; const configurationError = require('./utils/configurationError'); const path = require('path'); /** @typedef {import('stylelint').StylelintConfig} StylelintConfig */ /** @typedef {import('stylelint').CosmiconfigResult} CosmiconfigResult */ /** @typedef {Promise} ConfigPromise */ /** * @param {import('stylelint').StylelintInternalApi} stylelint * @param {string} [searchPath] * @returns {ConfigPromise} */ module.exports = function (stylelint, searchPath = process.cwd()) { const optionsConfig = stylelint._options.config; if (optionsConfig !== undefined) { const cached = /** @type {ConfigPromise} */ (stylelint._specifiedConfigCache.get( optionsConfig, )); if (cached) return cached; // stylelint._fullExplorer (cosmiconfig) is already configured to // run augmentConfigFull; but since we're making up the result here, // we need to manually run the transform const augmentedResult = augmentConfigFull(stylelint, { config: optionsConfig, // Add the extra path part so that we can get the directory without being // confused filepath: path.join(process.cwd(), 'argument-config'), }); stylelint._specifiedConfigCache.set(optionsConfig, augmentedResult); return augmentedResult; } const searchForConfig = stylelint._options.configFile ? stylelint._fullExplorer.load(stylelint._options.configFile) : stylelint._fullExplorer.search(searchPath); return /** @type {ConfigPromise} */ (searchForConfig .then((config) => { // If no config was found, try looking from process.cwd if (!config) return stylelint._fullExplorer.search(process.cwd()); return config; }) .then((config) => { if (!config) { const ending = searchPath ? ` for ${searchPath}` : ''; throw configurationError(`No configuration provided${ending}`); } return config; })); };