index.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // ------------------------------------
  2. // # POSTCSS - LOAD CONFIG - INDEX
  3. // ------------------------------------
  4. 'use strict'
  5. var resolve = require('path').resolve
  6. var config = require('cosmiconfig')
  7. var assign = require('object-assign')
  8. var loadOptions = require('postcss-load-options/lib/options.js')
  9. var loadPlugins = require('postcss-load-plugins/lib/plugins.js')
  10. /**
  11. * Autoload Config for PostCSS
  12. *
  13. * @author Michael Ciniawsky (@michael-ciniawsky) <michael.ciniawsky@gmail.com>
  14. * @license MIT
  15. *
  16. * @module postcss-load-config
  17. * @version 1.2.0
  18. *
  19. * @requires comsiconfig
  20. * @requires object-assign
  21. * @requires postcss-load-options
  22. * @requires postcss-load-plugins
  23. *
  24. * @method postcssrc
  25. *
  26. * @param {Object} ctx Context
  27. * @param {String} path Config Directory
  28. * @param {Object} options Config Options
  29. *
  30. * @return {Promise} config PostCSS Config
  31. */
  32. module.exports = function postcssrc (ctx, path, options) {
  33. ctx = assign({ cwd: process.cwd(), env: process.env.NODE_ENV }, ctx)
  34. path = path ? resolve(path) : process.cwd()
  35. options = assign({ rcExtensions: true }, options)
  36. if (!ctx.env) process.env.NODE_ENV = 'development'
  37. var file
  38. return config('postcss', options)
  39. .load(path)
  40. .then(function (result) {
  41. if (!result) throw Error('No PostCSS Config found in: ' + path)
  42. file = result ? result.filepath : ''
  43. return result ? result.config : {}
  44. })
  45. .then(function (config) {
  46. if (typeof config === 'function') config = config(ctx)
  47. else config = assign(config, ctx)
  48. if (!config.plugins) config.plugins = []
  49. return {
  50. plugins: loadPlugins(config),
  51. options: loadOptions(config),
  52. file: file
  53. }
  54. })
  55. }