index.js 1.5 KB

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