UNPKG

ibag

Version:

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

58 lines (47 loc) 1.48 kB
"use strict"; // 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]; } };