From 3ce110c13d238e33d7cb6ac2881ea7993012ce08 Mon Sep 17 00:00:00 2001 From: Hydraner Date: Mon, 16 Mar 2020 13:55:29 +0100 Subject: [PATCH] Allow uikit plugins to be used in multiple uikit definitions in patternlab-config.json. --- packages/core/src/lib/loaduikits.js | 31 +++++++++++++--------- packages/core/test/loaduitkits_tests.js | 35 +++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 12 deletions(-) diff --git a/packages/core/src/lib/loaduikits.js b/packages/core/src/lib/loaduikits.js index 1b976e7da..7bc809de4 100644 --- a/packages/core/src/lib/loaduikits.js +++ b/packages/core/src/lib/loaduikits.js @@ -37,35 +37,42 @@ const readModuleFile = (kit, subPath) => { /** * Loads uikits, connecting configuration and installed modules * [1] Looks in node_modules for uikits. - * [2] Only continue if uikit is enabled in patternlab-config.json + * [2] Map them to enabled uikit's in patternlab-config.json * [3] Reads files from uikit that apply to every template * @param {object} patternlab */ module.exports = patternlab => { const paths = patternlab.config.paths; - const uikits = findModules(nodeModulesPath, isUIKitModule); // [1] + const uikitModules = findModules(nodeModulesPath, isUIKitModule); // [1] - uikits.forEach(kit => { - const configEntry = _.find(_.filter(patternlab.config.uikits, 'enabled'), { - name: `uikit-${kit.name}`, + _.filter(patternlab.config.uikits, 'enabled').forEach(uikit => { + const kit = _.find(uikitModules, { + name: uikit.name.replace('uikit-', ''), }); // [2] - if (!configEntry) { + if (!kit) { logger.warning( - `Could not find uikit with name uikit-${kit.name} defined within patternlab-config.json, or it is not enabled.` + `Could not find uikit plugin with name uikit-${kit.name} defined within patternlab-config.json.` ); return; } + if (!uikit.id) { + logger.warning( + `ID for ${uikit.name} is missing, ${uikit.name} will be used instead. Caution, this can cause uikit's using the same package to malfunction.` + ); + uikit.id = uikit.name; + } + try { - patternlab.uikits[`uikit-${kit.name}`] = { - name: `uikit-${kit.name}`, + patternlab.uikits[uikit.id] = { + name: uikit.name, modulePath: kit.modulePath, enabled: true, - outputDir: configEntry.outputDir, - excludedPatternStates: configEntry.excludedPatternStates, - excludedTags: configEntry.excludedTags, + outputDir: uikit.outputDir, + excludedPatternStates: uikit.excludedPatternStates, + excludedTags: uikit.excludedTags, header: readModuleFile( kit, paths.source.patternlabFiles['general-header'] diff --git a/packages/core/test/loaduitkits_tests.js b/packages/core/test/loaduitkits_tests.js index c0fc9a4b1..b06e9f3d1 100644 --- a/packages/core/test/loaduitkits_tests.js +++ b/packages/core/test/loaduitkits_tests.js @@ -44,6 +44,7 @@ tap.test('loaduikits - maps fields correctly', function(test) { const uikitFoo = { name: 'uikit-foo', + id: "foo", enabled: true, outputDir: 'foo', excludedPatternStates: ['legacy'], @@ -114,3 +115,37 @@ tap.test('loaduikits - only adds files for enabled uikits', function(test) { test.end(); }); }); + +tap.test('loaduikits - reuse uikit-plugin for diffrent ui kits', function(test) { + //arrange + const patternlab = { + config: testConfig, + uikits: [], + }; + + patternlab.config.uikits = [ + { + name: 'uikit-foo', + enabled: true, + outputDir: 'foo', + excludedPatternStates: ['legacy'], + excludedTags: ['baz'], + }, + { + name: 'uikit-foo', + id: 'alternative-foo', + enabled: true, + outputDir: 'bar', + excludedPatternStates: ['development'], + excludedTags: ['baz', 'foo'], + }, + ]; + + //act + loaduikits(patternlab).then(() => { + //assert + test.ok(patternlab.uikits['uikit-foo']); + test.ok(patternlab.uikits['alternative-foo']); + test.end(); + }); +});