Add cssnano
The CSS minifier we currently use (clean-css) is not maintained and
lacks support for new CSS features. CSSNano is a replacement that
supports features we need (primarily container queries).
This CL only adds the relevant dependencies, and does not use it. I will
do that (and remove clean-css) in a follow-up.
Bug: 1399763
Change-Id: I899ecc4482164404dd5ac2fd13f92fb797978e29
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/4092305
Commit-Queue: Jack Franklin <jacktfranklin@chromium.org>
Reviewed-by: Alex Rudenko <alexrudenko@chromium.org>
Commit-Queue: Alex Rudenko <alexrudenko@chromium.org>
Auto-Submit: Jack Franklin <jacktfranklin@chromium.org>
diff --git a/node_modules/postcss-normalize-display-values/src/index.js b/node_modules/postcss-normalize-display-values/src/index.js
new file mode 100644
index 0000000..7495e57
--- /dev/null
+++ b/node_modules/postcss-normalize-display-values/src/index.js
@@ -0,0 +1,71 @@
+'use strict';
+const valueParser = require('postcss-value-parser');
+const mappings = require('./lib/map.js');
+
+/**
+ * @param {string} value
+ * @return {string}
+ */
+function transform(value) {
+ const { nodes } = valueParser(value);
+
+ if (nodes.length === 1) {
+ return value;
+ }
+
+ const values = nodes
+ .filter((list, index) => index % 2 === 0)
+ .filter((node) => node.type === 'word')
+ .map((n) => n.value.toLowerCase());
+
+ if (values.length === 0) {
+ return value;
+ }
+
+ const match = mappings.get(values.toString());
+
+ if (!match) {
+ return value;
+ }
+
+ return match;
+}
+
+/**
+ * @type {import('postcss').PluginCreator<void>}
+ * @return {import('postcss').Plugin}
+ */
+function pluginCreator() {
+ return {
+ postcssPlugin: 'postcss-normalize-display-values',
+
+ prepare() {
+ const cache = new Map();
+ return {
+ OnceExit(css) {
+ css.walkDecls(/^display$/i, (decl) => {
+ const value = decl.value;
+
+ if (!value) {
+ return;
+ }
+
+ if (cache.has(value)) {
+ decl.value = cache.get(value);
+
+ return;
+ }
+
+ const result = transform(value);
+
+ decl.value = result;
+ cache.set(value, result);
+ });
+ },
+ };
+ },
+ };
+}
+
+pluginCreator.postcss = true;
+module.exports = pluginCreator;