/** * Executes `source` to retrieve plugins configuration * and loads the `index.js` of specified plugins. * * Outputs a module that looks like the following: * * module.exports = [{plugin: string, module: object}, ...] * */ const { stripIndent } = require('common-tags'); function getPluginList(config) { if (config && config.client) { return config.client.map( x => (typeof x === 'string' ? x : Object.keys(x)[0]) ); } return []; } module.exports = function(source) { this.cacheable(); const config = this.exec(source, this.resourcePath); const plugins = getPluginList(config).map( plugin => `{ module: require('${plugin}/client').default, name: '${plugin}' }` ); return stripIndent` module.exports = [ ${plugins.join(',')} ]; `; };