UNPKG

siegel

Version:

Web application development ecosystem

87 lines (86 loc) 4.64 kB
import isExists from '../../../common/is/exists/index.js'; const INSTANCES_KEY = 'instances'; const OPTIONS_KEY = 'options'; function merge(innerDefaultPlugins, pluginsConfig = {}) { const { defaultPlugins = {}, userPlugins = {} } = pluginsConfig; const innerDefaultPluginsKeys = Object.keys(innerDefaultPlugins); const result = []; function addPlugin(pluginConfig) { const { plugin, options, instances } = pluginConfig; instances ? Object.keys(instances).forEach(instanceKey => { const { enabled = true, options } = instances[instanceKey]; enabled && result.push({ plugin, options }); }) : result.push({ plugin, options }); } innerDefaultPluginsKeys.forEach(key => { const innerDefaultPluginKey = key; if (!(innerDefaultPluginKey in pluginsConfig)) { const innerDefaultPluginConfig = innerDefaultPlugins[innerDefaultPluginKey]; const { enabled, plugin } = innerDefaultPluginConfig; const userDefaultPluginRewrite = defaultPlugins[innerDefaultPluginKey]; if (isExists(userDefaultPluginRewrite)) { const isRewriteWithObjConfig = typeof userDefaultPluginRewrite != 'boolean'; const isEnabled = isRewriteWithObjConfig ? userDefaultPluginRewrite.enabled : userDefaultPluginRewrite; if (isEnabled) { if (isRewriteWithObjConfig) { if (INSTANCES_KEY in userDefaultPluginRewrite && INSTANCES_KEY in innerDefaultPluginConfig) { const { instances } = userDefaultPluginRewrite; instances && Object.keys(instances).forEach(key => { const userRewriteInstanceKey = key; const userDefaultPluginInstanceRewrite = instances[userRewriteInstanceKey]; if (isExists(userDefaultPluginInstanceRewrite)) { const isRewriteWithObjConfig = typeof userDefaultPluginInstanceRewrite != 'boolean'; const isEnabled = isRewriteWithObjConfig ? userDefaultPluginInstanceRewrite.enabled : userDefaultPluginInstanceRewrite; if (isEnabled) { const { options } = innerDefaultPluginConfig.instances[userRewriteInstanceKey]; result.push({ plugin, options: isRewriteWithObjConfig ? userDefaultPluginInstanceRewrite.options?.(options) || options : innerDefaultPluginConfig }); } } else { result.push({ plugin, options: innerDefaultPluginConfig.instances[userRewriteInstanceKey].options }); } }); } else { result.push({ plugin, options: OPTIONS_KEY in innerDefaultPluginConfig ? OPTIONS_KEY in userDefaultPluginRewrite && typeof userDefaultPluginRewrite.options == 'function' ? userDefaultPluginRewrite.options(innerDefaultPluginConfig .options) : innerDefaultPluginConfig.options : undefined }); } } else addPlugin(innerDefaultPluginConfig); } } else if (enabled) addPlugin(innerDefaultPluginConfig); } }); Object.keys(userPlugins).forEach(userNewPluginKey => { const userNewPlugin = userPlugins[userNewPluginKey]; const { enabled = true } = userNewPlugin; enabled && addPlugin(userNewPlugin); }); return result; } export default merge;