62 lines
1.9 KiB
JavaScript
62 lines
1.9 KiB
JavaScript
|
'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<CosmiconfigResult | null>} 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;
|
||
|
}));
|
||
|
};
|