From 72c2a6c9e74e54a01415f41e19a56242bd97784c Mon Sep 17 00:00:00 2001 From: Joost De Cock Date: Sat, 12 Sep 2020 19:01:12 +0200 Subject: [PATCH] feat(core): Added support for conditional plugins --- packages/core/src/design.js | 11 +++++++++-- packages/core/src/pattern.js | 17 +++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/packages/core/src/design.js b/packages/core/src/design.js index 1194358dfce..ac037eade43 100644 --- a/packages/core/src/design.js +++ b/packages/core/src/design.js @@ -1,10 +1,17 @@ import Pattern from './pattern' -export default function Design(config, plugins = false) { - const pattern = function(settings) { +export default function Design(config, plugins = false, conditionalPlugins = false) { + const pattern = function (settings) { Pattern.call(this, config) + // Load plugins if (Array.isArray(plugins)) for (let plugin of plugins) this.use(plugin) else if (plugins) this.use(plugins) + // Load conditional plugins + if (Array.isArray(conditionalPlugins)) + for (let plugin of conditionalPlugins) this.useIf(plugin, settings) + else if (conditionalPlugins.plugin && conditionalPlugins.condition) + this.useIf(conditionalPlugins, settings) + this.apply(settings) return this diff --git a/packages/core/src/pattern.js b/packages/core/src/pattern.js index 2575c579d47..d4ee1b3f976 100644 --- a/packages/core/src/pattern.js +++ b/packages/core/src/pattern.js @@ -397,6 +397,23 @@ Pattern.prototype.use = function (plugin, data) { return this } +Pattern.prototype.useIf = function (plugin, settings) { + if (plugin.condition(settings)) { + if (this.debug) + this.raise.debug( + `Condition met: Loaded plugin \`${plugin.plugin.name}:${plugin.plugin.version}\`` + ) + this.loadPluginHooks(plugin.plugin, plugin.data) + } else { + if (this.debug) + this.raise.debug( + `Condition not met: Skipped loading plugin \`${plugin.plugin.name}:${plugin.plugin.version}\`` + ) + } + + return this +} + Pattern.prototype.loadPluginHooks = function (plugin, data) { for (let hook of Object.keys(this.hooks)) { if (typeof plugin.hooks[hook] === 'function') {