123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- 'use strict'
- const resolve = require('path').resolve
- const config = require('cosmiconfig')
- const loadOptions = require('./options.js')
- const loadPlugins = require('./plugins.js')
- /**
- * Process the result from cosmiconfig
- *
- * @param {Object} ctx Config Context
- * @param {Object} result Cosmiconfig result
- *
- * @return {Object} PostCSS Config
- */
- const processResult = (ctx, result) => {
- let file = result.filepath || ''
- let config = result.config || {}
- if (typeof config === 'function') {
- config = config(ctx)
- } else {
- config = Object.assign({}, config, ctx)
- }
- if (!config.plugins) {
- config.plugins = []
- }
- return {
- plugins: loadPlugins(config, file),
- options: loadOptions(config, file),
- file: file
- }
- }
- /**
- * Builds the Config Context
- *
- * @param {Object} ctx Config Context
- *
- * @return {Object} Config Context
- */
- const createContext = (ctx) => {
- /**
- * @type {Object}
- *
- * @prop {String} cwd=process.cwd() Config search start location
- * @prop {String} env=process.env.NODE_ENV Config Enviroment, will be set to `development` by `postcss-load-config` if `process.env.NODE_ENV` is `undefined`
- */
- ctx = Object.assign({
- cwd: process.cwd(),
- env: process.env.NODE_ENV
- }, ctx)
- if (!ctx.env) {
- process.env.NODE_ENV = 'development'
- }
- return ctx
- }
- /**
- * Load Config
- *
- * @method rc
- *
- * @param {Object} ctx Config Context
- * @param {String} path Config Path
- * @param {Object} options Config Options
- *
- * @return {Promise} config PostCSS Config
- */
- const rc = (ctx, path, options) => {
- /**
- * @type {Object} The full Config Context
- */
- ctx = createContext(ctx)
- /**
- * @type {String} `process.cwd()`
- */
- path = path ? resolve(path) : process.cwd()
- return config('postcss', options)
- .search(path)
- .then((result) => {
- if (!result) {
- throw new Error(`No PostCSS Config found in: ${path}`)
- }
- return processResult(ctx, result)
- })
- }
- rc.sync = (ctx, path, options) => {
- /**
- * @type {Object} The full Config Context
- */
- ctx = createContext(ctx)
- /**
- * @type {String} `process.cwd()`
- */
- path = path ? resolve(path) : process.cwd()
- const result = config('postcss', options).searchSync(path)
- if (!result) {
- throw new Error(`No PostCSS Config found in: ${path}`)
- }
- return processResult(ctx, result)
- }
- /**
- * Autoload Config for PostCSS
- *
- * @author Michael Ciniawsky @michael-ciniawsky <michael.ciniawsky@gmail.com>
- * @license MIT
- *
- * @module postcss-load-config
- * @version 2.1.0
- *
- * @requires comsiconfig
- * @requires ./options
- * @requires ./plugins
- */
- module.exports = rc
|