(plugins: PluginTypeToLoad[])
| 39 | } |
| 40 | |
| 41 | export const initPlugins = async (plugins: PluginTypeToLoad[]) => { |
| 42 | const pluginsToInit = [...plugins]; |
| 43 | const pluginOptions: PluginToLoad['options'] = {}; |
| 44 | |
| 45 | if (pluginsToInit.length) { |
| 46 | const pluginToLoadMap: Record<string, { index: number; loaded?: boolean }> = {}; |
| 47 | const pluginsToLoad: PluginToLoad[] = []; |
| 48 | |
| 49 | pluginsToInit.forEach((plugin, index) => { |
| 50 | if (isPluginToLoad(plugin)) { |
| 51 | pluginToLoadMap[plugin.id] = { index }; |
| 52 | pluginsToLoad.push(plugin); |
| 53 | } |
| 54 | }); |
| 55 | |
| 56 | if (pluginsToLoad.length) { |
| 57 | const { loaded } = await loadPlugins(pluginsToLoad); |
| 58 | loaded.forEach(({ id, options }) => { |
| 59 | pluginToLoadMap[id].loaded = true; |
| 60 | pluginOptions[id] = options || {}; |
| 61 | }); |
| 62 | } |
| 63 | |
| 64 | Object.keys(pluginToLoadMap).forEach(id => { |
| 65 | const plugin = pluginToLoadMap[id]; |
| 66 | if (plugin.loaded) { |
| 67 | pluginsToInit[plugin.index] = id; |
| 68 | } else { |
| 69 | pluginsToInit[plugin.index] = false; |
| 70 | } |
| 71 | }); |
| 72 | } |
| 73 | |
| 74 | return { |
| 75 | plugins: pluginsToInit.filter(Boolean) as GrapesPlugins[], |
| 76 | pluginOptions |
| 77 | }; |
| 78 | }; |
no test coverage detected