/** * 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) { return config.client.map(x => typeof x === 'string' ? x : Object.keys(x)[0]); } module.exports = function(source) { this.cacheable(); const config = this.exec(source, this.resourcePath); const plugins = getPluginList(config); const list = []; plugins.forEach(plugin => { list.push(`{module: require('plugins/${plugin}/client/index.js'), plugin: '${plugin}'}`); }); return stripIndent` module.exports = [ ${list.join(',')} ]; `; };