Spaces:
Running
Running
| const req = require('./req.js') | |
| /** | |
| * Plugin Loader | |
| * | |
| * @private | |
| * @method load | |
| * | |
| * @param {String} plugin PostCSS Plugin Name | |
| * @param {Object} options PostCSS Plugin Options | |
| * | |
| * @return {Function} PostCSS Plugin | |
| */ | |
| const load = (plugin, options, file) => { | |
| try { | |
| if ( | |
| options === null || | |
| options === undefined || | |
| Object.keys(options).length === 0 | |
| ) { | |
| return req(plugin, file) | |
| } else { | |
| return req(plugin, file)(options) | |
| } | |
| } catch (err) { | |
| throw new Error(`Loading PostCSS Plugin failed: ${err.message}\n\n(@${file})`) | |
| } | |
| } | |
| /** | |
| * Load Plugins | |
| * | |
| * @private | |
| * @method plugins | |
| * | |
| * @param {Object} config PostCSS Config Plugins | |
| * | |
| * @return {Array} plugins PostCSS Plugins | |
| */ | |
| const plugins = (config, file) => { | |
| let plugins = [] | |
| if (Array.isArray(config.plugins)) { | |
| plugins = config.plugins.filter(Boolean) | |
| } else { | |
| plugins = Object.keys(config.plugins) | |
| .filter((plugin) => { | |
| return config.plugins[plugin] !== false ? plugin : '' | |
| }) | |
| .map((plugin) => { | |
| return load(plugin, config.plugins[plugin], file) | |
| }) | |
| } | |
| if (plugins.length && plugins.length > 0) { | |
| plugins.forEach((plugin, i) => { | |
| if (plugin.default) { | |
| plugin = plugin.default | |
| } | |
| if (plugin.postcss === true) { | |
| plugin = plugin() | |
| } else if (plugin.postcss) { | |
| plugin = plugin.postcss | |
| } | |
| if ( | |
| // eslint-disable-next-line | |
| !( | |
| (typeof plugin === 'object' && Array.isArray(plugin.plugins)) || | |
| (typeof plugin === 'object' && plugin.postcssPlugin) || | |
| (typeof plugin === 'function') | |
| ) | |
| ) { | |
| throw new TypeError(`Invalid PostCSS Plugin found at: plugins[${i}]\n\n(@${file})`) | |
| } | |
| }) | |
| } | |
| return plugins | |
| } | |
| module.exports = plugins | |