UNPKG

stylelint

Version:
128 lines (105 loc) 4.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = function (options) { var rawConfig = function () { if (options.config) return options.config; if (options.rules) return options; return false; }(); var configBasedir = options.configBasedir || process.cwd(); if (rawConfig) { return augmentConfig(rawConfig, configBasedir).then(function (config) { return { config: (0, _lodash.merge)(config, options.configOverrides), configDir: configBasedir }; }); } var cosmiconfigOptions = { // Turn off argv option to avoid hijacking the all-too-common // --config argument, when this is used in conjunction with other CLI's // (e.g. webpack) argv: false, // Allow extensions on rc filenames rcExtensions: true }; if (options.configFile) { cosmiconfigOptions.configPath = _path2.default.resolve(process.cwd(), options.configFile); } var rootConfigDir = void 0; return (0, _cosmiconfig2.default)("stylelint", cosmiconfigOptions).then(function (result) { if (!result) throw (0, _utils.configurationError)("No configuration found"); rootConfigDir = _path2.default.dirname(result.filepath); return augmentConfig(result.config, rootConfigDir); }).then(function (augmentedConfig) { var finalConfig = options.configOverrides ? (0, _lodash.merge)({}, augmentedConfig, options.configOverrides) : augmentedConfig; return { config: finalConfig, configDir: rootConfigDir }; }); }; var _path = require("path"); var _path2 = _interopRequireDefault(_path); var _cosmiconfig = require("cosmiconfig"); var _cosmiconfig2 = _interopRequireDefault(_cosmiconfig); var _resolveFrom = require("resolve-from"); var _resolveFrom2 = _interopRequireDefault(_resolveFrom); var _lodash = require("lodash"); var _utils = require("./utils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function augmentConfig(config, configDir) { // Absolutize the plugins here, because here is the place // where we know the basedir for this particular config var configWithAbsolutePlugins = absolutizePlugins(config, configDir); if (!config.extends) { return Promise.resolve(configWithAbsolutePlugins); } var extendLookups = [].concat(configWithAbsolutePlugins.extends); var origConfig = (0, _lodash.omit)(configWithAbsolutePlugins, "extends"); var resultPromise = extendLookups.reduce(function (mergeConfigs, extendLookup) { return mergeConfigs.then(function (mergedConfig) { return loadExtendedConfig(mergedConfig, extendLookup).then(function (extendedConfig) { return (0, _lodash.merge)({}, mergedConfig, extendedConfig); }); }); }, Promise.resolve(origConfig)); return resultPromise.then(function (mergedConfig) { return (0, _lodash.merge)({}, mergedConfig, origConfig); }); function loadExtendedConfig(config, extendLookup) { var extendPath = getModulePath(configDir, extendLookup); var extendDir = _path2.default.dirname(extendPath); return (0, _cosmiconfig2.default)(null, { configPath: extendPath, // In case --config was used: do not pay attention to it again argv: false }).then(function (result) { return augmentConfig(stripIgnoreFiles(result.config), extendDir); }); } } // Replace all plugin lookups with absolute paths function absolutizePlugins(config, configDir) { if (!config.plugins) { return config; } return (0, _lodash.assign)({}, config, { plugins: config.plugins.map(function (lookup) { return getModulePath(configDir, lookup); }) }); } function getModulePath(basedir, lookup) { var path = (0, _resolveFrom2.default)(basedir, lookup); if (path) return path; throw (0, _utils.configurationError)("Could not find \"" + lookup + "\". Do you need a `configBasedir`?"); } // The `ignoreFiles` option only works with the // config that is being directly invoked, not any // extended configs function stripIgnoreFiles(config) { return (0, _lodash.omit)(config, "ignoreFiles"); }