UNPKG

siegel

Version:

Web application development ecosystem

67 lines (66 loc) 3.21 kB
const mergeOptions = (defaultOptions, userOptions, rewrite) => (typeof userOptions == 'function' ? userOptions(defaultOptions) : !rewrite && typeof defaultOptions == 'object' && !Array.isArray(defaultOptions) ? { ...defaultOptions, ...userOptions } : userOptions); function addWithoutMerge(result, pluginConfig) { const { instances, plugin, options } = pluginConfig; if (instances) { Object.values(instances) .forEach(pluginInstance => { const { options, enabled = true } = pluginInstance; enabled && result.push(new plugin(options)); }); } else result.push(new plugin(options)); } const isEnabledByUserPlugin = (plugin) => plugin.enabled !== false; function merge(defaultPlugins, userPlugins = {}) { const result = []; Object.entries(defaultPlugins) .forEach(([defaultPluginKey, defaultPluginConfig]) => { const { plugin, options, instances, enabled = true } = defaultPluginConfig; const userPluginConfig = userPlugins[defaultPluginKey]; if (!userPluginConfig || isEnabledByUserPlugin(userPluginConfig)) { if (userPluginConfig?.plugin) { const { rewrite, plugin: userPlugin = plugin, options: userOptions, instances: userInstances } = userPluginConfig; if (userInstances) { Object.entries(userInstances) .forEach(([userPluginInstanceKey, userInstance]) => { if (userInstance) { const { rewrite, options: userInstanceOptions } = userInstance; let finalPluginInstanceOptions = userInstanceOptions; if (instances) { const defaultInstance = instances[userPluginInstanceKey]; if (defaultInstance) { finalPluginInstanceOptions = mergeOptions(defaultInstance.options, userInstanceOptions, rewrite); } } result.push(new userPlugin(finalPluginInstanceOptions)); } }); } else { const finalPluginOptions = mergeOptions(options, userOptions, rewrite); result.push(new userPlugin(finalPluginOptions)); } } else if (enabled) addWithoutMerge(result, defaultPluginConfig); } }); Object.entries(userPlugins) .forEach(([userPluginKey, userCustomPluginConfig]) => { if (userCustomPluginConfig.plugin) { const userCustomPluginConfigObject = userCustomPluginConfig; if (!defaultPlugins[userPluginKey] && isEnabledByUserPlugin(userCustomPluginConfigObject)) { userCustomPluginConfigObject.plugin ? addWithoutMerge(result, userCustomPluginConfigObject) : console.error(`[config.build.plugins.${userPluginKey}] ->> property 'plugin' is missed.`); } } }); return result; } export default merge;