UNPKG

ibag

Version:

A visual, fast, and customizable front-end scaffolding.

54 lines (47 loc) 1.44 kB
var plugins = [] // During bootstrap, we write requires at top of this file which looks like: // var plugins = [ // { // plugin: require("/path/to/plugin1/gatsby-ssr.js"), // options: { ... }, // }, // { // plugin: require("/path/to/plugin2/gatsby-ssr.js"), // options: { ... }, // }, // ] const apis = require(`./api-ssr-docs`) // Run the specified API in any plugins that have implemented it module.exports = (api, args, defaultReturn, argTransform) => { if (!apis[api]) { console.log(`This API doesn't exist`, api) } // Run each plugin in series. // eslint-disable-next-line no-undef let results = plugins.map(plugin => { if (!plugin.plugin[api]) { return undefined } try { const result = plugin.plugin[api](args, plugin.options) if (result && argTransform) { args = argTransform({ args, result }) } return result } catch (e) { if (plugin.name !== `default-site-plugin`) { // default-site-plugin is user code and will print proper stack trace, // so no point in annotating error message pointing out which plugin is root of the problem e.message += ` (from plugin: ${plugin.name})` } throw e } }) // Filter out undefined results. results = results.filter(result => typeof result !== `undefined`) if (results.length > 0) { return results } else { return [defaultReturn] } }