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