notes/node_modules/stylelint/lib/getConfigForFile.js

44 lines
1.5 KiB
JavaScript

/* @flow */
"use strict"
const augmentConfigFull = require("./augmentConfig").augmentConfigFull
const configurationError = require("./utils/configurationError")
const path = require("path")
module.exports = function (
stylelint/*: stylelint$internalApi*/,
searchPath/*:: ?: string*/
)/*: Promise<?{ config: stylelint$config, filepath: string }>*/ {
searchPath = searchPath || process.cwd()
const optionsConfig = stylelint._options.config
if (optionsConfig !== undefined) {
const cached = 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
}
return stylelint._fullExplorer.load(searchPath, stylelint._options.configFile).then(config => {
// If no config was found, try looking from process.cwd
if (!config) return stylelint._fullExplorer.load(process.cwd())
return config
}).then(config => {
if (!config) {
const ending = searchPath ? ` for ${searchPath}` : ""
throw configurationError(`No configuration provided${ending}`)
}
return config
})
}