From 3d251cdbc9a2504004f4ec9f11717f2e7d590c55 Mon Sep 17 00:00:00 2001 From: codeonquer Date: Thu, 20 May 2021 22:11:23 +0800 Subject: [PATCH 1/2] fix: issue#1112 --- packages/postcss-merge-rules/src/index.js | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/postcss-merge-rules/src/index.js b/packages/postcss-merge-rules/src/index.js index 04f6e9175..d735f83be 100644 --- a/packages/postcss-merge-rules/src/index.js +++ b/packages/postcss-merge-rules/src/index.js @@ -206,23 +206,25 @@ function partialMerge(first, second) { // Filter out intersections with later conflicts in First intersection = intersection.filter((decl, intersectIndex) => { - const index = indexOfDeclaration(firstDecls, decl); + const indexOfDecl = indexOfDeclaration(firstDecls, decl); const nextConflictInFirst = firstDecls - .slice(index + 1) - .find((d) => isConflictingProp(d.prop, decl.prop)); - if (!nextConflictInFirst) { + .slice(indexOfDecl + 1) + .filter((d) => isConflictingProp(d.prop, decl.prop)); + if (!nextConflictInFirst.length) { return true; } const nextConflictInIntersection = intersection .slice(intersectIndex + 1) - .find((d) => isConflictingProp(d.prop, decl.prop)); - if (!nextConflictInIntersection) { + .filter((d) => isConflictingProp(d.prop, decl.prop)); + if (!nextConflictInIntersection.length) { return false; } - if (declarationIsEqual(nextConflictInFirst, nextConflictInIntersection)) { - return true; + if (nextConflictInFirst.length !== nextConflictInIntersection.length) { + return false; } - return false; + return nextConflictInFirst.every((d, index) => + declarationIsEqual(d, nextConflictInIntersection[index]) + ); }); // Filter out intersections with previous conflicts in Second From 0f250c17afe9114f609215b9b51d9c87e133f70e Mon Sep 17 00:00:00 2001 From: codeonquer Date: Thu, 20 May 2021 22:37:44 +0800 Subject: [PATCH 2/2] feat: test-case --- packages/postcss-merge-rules/src/__tests__/index.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/postcss-merge-rules/src/__tests__/index.js b/packages/postcss-merge-rules/src/__tests__/index.js index 2213f89cf..94f8b63eb 100644 --- a/packages/postcss-merge-rules/src/__tests__/index.js +++ b/packages/postcss-merge-rules/src/__tests__/index.js @@ -815,3 +815,11 @@ test( 'a,a:link,a:visited{color:#555}' ) ); + +test( + 'should not merge colors', + processCSS( + 'h1{color:#001;color:#002;color:#003}h2{color:#001;color:#002}', + 'h1{color:#001;color:#002;color:#003}h2{color:#001;color:#002}' + ) +);