Blame view

node_modules/postcss-load-config/src/index.js 1.92 KB
aaac7fed   liuqimichale   add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
  '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