From 545798156a7c31b87165d82abadc97207d62f325 Mon Sep 17 00:00:00 2001 From: Mohsen Shafiei Date: Mon, 3 Jun 2019 14:46:06 +0430 Subject: [PATCH 1/2] fix(loader): fix global composition of rules when have multiple declarations. fix multiple declaration of global tags. --- src/plugins/postcss-module-composer.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/plugins/postcss-module-composer.js b/src/plugins/postcss-module-composer.js index d8f32a2..d4379da 100644 --- a/src/plugins/postcss-module-composer.js +++ b/src/plugins/postcss-module-composer.js @@ -32,9 +32,10 @@ module.exports = postcss.plugin('postcss-module-composer', () => (root) => { }); composerString += '}\n'; } else if (once === false) { + const globals = removeNotGlobals(rule.selector); + composerString += `${globals} {\n`; rule.walkDecls((decl) => { - const globals = removeNotGlobals(rule.selector); - composerString += `${globals} {\n${createModuleDeclaration(decl.prop, decl.value)}`; + composerString += `${createModuleDeclaration(decl.prop, decl.value)}`; hashmap.set( createModuleSelector(decl.prop, decl.value), createModuleDeclaration(decl.prop, decl.value), From 6a58c93c23595de5c621e3e9da71d26c208319cb Mon Sep 17 00:00:00 2001 From: Mohsen Shafiei Date: Mon, 3 Jun 2019 16:33:22 +0430 Subject: [PATCH 2/2] fix(src): fix skip global composition when we have signs fix skip of global composition when we have signs in out selector. --- src/plugins/postcss-module-composer.js | 6 ++++-- src/plugins/utils/index.js | 5 ++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/plugins/postcss-module-composer.js b/src/plugins/postcss-module-composer.js index d4379da..aa38747 100644 --- a/src/plugins/postcss-module-composer.js +++ b/src/plugins/postcss-module-composer.js @@ -9,6 +9,7 @@ const { isGlobal, removeSpace, removeNotGlobals, + shouldSkip, } = require('./utils'); const mainDist = path.resolve(__dirname, '../../dist/quark-loader-output.css'); @@ -21,7 +22,7 @@ module.exports = postcss.plugin('postcss-module-composer', () => (root) => { const identifier = rule.selector; let once = false; identifier.split(',').forEach((selector) => { - if (!isGlobal(removeSpace(selector))) { + if (!isGlobal(removeSpace(selector)) && !shouldSkip(removeSpace(selector))) { composerString += `${removeSpace(selector)} {\n`; rule.walkDecls((decl) => { composerString += createModuleComposer(decl.prop, decl.value); @@ -32,7 +33,8 @@ module.exports = postcss.plugin('postcss-module-composer', () => (root) => { }); composerString += '}\n'; } else if (once === false) { - const globals = removeNotGlobals(rule.selector); + const globals = !shouldSkip(rule.selector) + ? removeNotGlobals(rule.selector) : rule.selector; composerString += `${globals} {\n`; rule.walkDecls((decl) => { composerString += `${createModuleDeclaration(decl.prop, decl.value)}`; diff --git a/src/plugins/utils/index.js b/src/plugins/utils/index.js index a23350d..3b86e09 100644 --- a/src/plugins/utils/index.js +++ b/src/plugins/utils/index.js @@ -1,7 +1,7 @@ const globalSelector = require('./global'); const regex = /\(|\)|%|\.|#|,|\+|:|"|\/|\/|`|'/g; - +const unvalid = /^[\w\s.,]+$/; const createModuleComposer = (property, value) => (`\tcomposes: ${property}--${value.replace(/ /g, '-').replace(regex, '')};\n`); const createModuleDeclaration = (property, value) => (`\t${property}: ${value};\n`); @@ -12,6 +12,8 @@ const isGlobal = selector => globalSelector.includes(selector); const removeSpace = str => str.trim(); +const shouldSkip = str => str.search(unvalid); + const removeNotGlobals = (str) => { let result = ''; str.split(',').forEach((item) => { @@ -28,4 +30,5 @@ module.exports = { removeSpace, removeNotGlobals, isGlobal, + shouldSkip, };