Files
w4rpservices/node_modules/postcss-load-config/src/index.js
2018-10-27 03:51:47 -05:00

93 lines
1.9 KiB
JavaScript
Vendored

'use strict'
const resolve = require('path').resolve
const config = require('cosmiconfig')
const loadOptions = require('./options.js')
const loadPlugins = require('./plugins.js')
/**
* 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}
*
* @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)
/**
* @type {String} `process.cwd()`
*
*/
path = path ? resolve(path) : process.cwd()
/**
* @type {Object}
*
* @prop {Boolean} rcExtensions=true
*/
options = Object.assign({
rcExtensions: true
}, options)
if (!ctx.env) {
process.env.NODE_ENV = 'development'
}
return config('postcss', options)
.load(path)
.then((result) => {
if (!result) {
throw new Error(`No PostCSS Config found in: ${path}`)
}
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
}
})
}
/**
* Autoload Config for PostCSS
*
* @author Michael Ciniawsky @michael-ciniawsky <michael.ciniawsky@gmail.com>
* @license MIT
*
* @module postcss-load-config
* @version 2.0.0
*
* @requires comsiconfig
* @requires ./options
* @requires ./plugins
*/
module.exports = rc