From 495e8f8a90c3e9b8b2c23b9478e451491950aa42 Mon Sep 17 00:00:00 2001 From: evilebottnawi Date: Thu, 31 Jan 2019 20:16:12 +0300 Subject: [PATCH] test(postcss-minify-params): `@supports` at-rule --- .../src/__tests__/index.js | 28 +++++++++++++++++++ packages/postcss-minify-params/src/index.js | 6 ++++ 2 files changed, 34 insertions(+) diff --git a/packages/postcss-minify-params/src/__tests__/index.js b/packages/postcss-minify-params/src/__tests__/index.js index 9478a4dc6..b25a2ca11 100644 --- a/packages/postcss-minify-params/src/__tests__/index.js +++ b/packages/postcss-minify-params/src/__tests__/index.js @@ -144,6 +144,34 @@ test( '@supports (display:grid) {}' ); +test( + 'should normalise @supports with not', + processCSS, + '@supports not (display: grid) {}', + '@supports not (display:grid) {}' +); + +test( + 'should normalise @supports with multiple conditions', + processCSS, + '@supports ((text-align-last: justify) or (-moz-text-align-last: justify)) {}', + '@supports ((text-align-last:justify) or (-moz-text-align-last:justify)) {}' +); + +test( + 'should normalise @supports with var', + processCSS, + '@supports (--foo: green) {}', + '@supports (--foo:green) {}' +); + +test( + 'should normalise @supports with :is', + processCSS, + '@supports not selector(:is(a, b)) {}', + '@supports not selector(:is(a,b)) {}' +); + test( 'should not throw on empty parentheses', passthroughCSS, diff --git a/packages/postcss-minify-params/src/index.js b/packages/postcss-minify-params/src/index.js index fdfada51b..50e62825f 100644 --- a/packages/postcss-minify-params/src/index.js +++ b/packages/postcss-minify-params/src/index.js @@ -42,6 +42,7 @@ function transform (legacy, rule) { params.walk((node, index) => { if (node.type === 'div' || node.type === 'function') { node.before = node.after = ''; + if ( node.type === 'function' && node.nodes[4] && @@ -51,6 +52,7 @@ function transform (legacy, rule) { node.nodes[2].value, node.nodes[4].value ); + node.nodes[2].value = a; node.nodes[4].value = b; } @@ -58,18 +60,22 @@ function transform (legacy, rule) { node.value = ' '; } else { const prevWord = params.nodes[index - 2]; + if ( node.value.toLowerCase() === 'all' && rule.name.toLowerCase() === 'media' && !prevWord ) { const nextWord = params.nodes[index + 2]; + if (!legacy || nextWord) { removeNode(node); } + if (nextWord && nextWord.value.toLowerCase() === 'and') { const nextSpace = params.nodes[index + 1]; const secondSpace = params.nodes[index + 3]; + removeNode(nextWord); removeNode(nextSpace); removeNode(secondSpace);