Add packages to optimize svgs dynamically
These packages will be used to dynamically optimize SVG images
during the build.
R=jacktfranklin@chromium.org
Bug: 1216402
Change-Id: I04e95aa7d79c9d67beaf8a7861182c52b16b7d0f
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2939992
Reviewed-by: Jack Franklin <jacktfranklin@chromium.org>
Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org>
diff --git a/node_modules/css-tree/data/index.js b/node_modules/css-tree/data/index.js
new file mode 100755
index 0000000..ff56c24
--- /dev/null
+++ b/node_modules/css-tree/data/index.js
@@ -0,0 +1,103 @@
+const mdnAtrules = require('mdn-data/css/at-rules.json');
+const mdnProperties = require('mdn-data/css/properties.json');
+const mdnSyntaxes = require('mdn-data/css/syntaxes.json');
+const patch = require('./patch.json');
+const extendSyntax = /^\s*\|\s*/;
+
+function preprocessAtrules(dict) {
+ const result = Object.create(null);
+
+ for (const atruleName in dict) {
+ const atrule = dict[atruleName];
+ let descriptors = null;
+
+ if (atrule.descriptors) {
+ descriptors = Object.create(null);
+
+ for (const descriptor in atrule.descriptors) {
+ descriptors[descriptor] = atrule.descriptors[descriptor].syntax;
+ }
+ }
+
+ result[atruleName.substr(1)] = {
+ prelude: atrule.syntax.trim().match(/^@\S+\s+([^;\{]*)/)[1].trim() || null,
+ descriptors
+ };
+ }
+
+ return result;
+}
+
+function patchDictionary(dict, patchDict) {
+ const result = {};
+
+ // copy all syntaxes for an original dict
+ for (const key in dict) {
+ result[key] = dict[key].syntax || dict[key];
+ }
+
+ // apply a patch
+ for (const key in patchDict) {
+ if (key in dict) {
+ if (patchDict[key].syntax) {
+ result[key] = extendSyntax.test(patchDict[key].syntax)
+ ? result[key] + ' ' + patchDict[key].syntax.trim()
+ : patchDict[key].syntax;
+ } else {
+ delete result[key];
+ }
+ } else {
+ if (patchDict[key].syntax) {
+ result[key] = patchDict[key].syntax.replace(extendSyntax, '');
+ }
+ }
+ }
+
+ return result;
+}
+
+function unpackSyntaxes(dict) {
+ const result = {};
+
+ for (const key in dict) {
+ result[key] = dict[key].syntax;
+ }
+
+ return result;
+}
+
+function patchAtrules(dict, patchDict) {
+ const result = {};
+
+ // copy all syntaxes for an original dict
+ for (const key in dict) {
+ const patchDescriptors = (patchDict[key] && patchDict[key].descriptors) || null;
+
+ result[key] = {
+ prelude: key in patchDict && 'prelude' in patchDict[key]
+ ? patchDict[key].prelude
+ : dict[key].prelude || null,
+ descriptors: dict[key].descriptors
+ ? patchDictionary(dict[key].descriptors, patchDescriptors || {})
+ : patchDescriptors && unpackSyntaxes(patchDescriptors)
+ };
+ }
+
+ // apply a patch
+ for (const key in patchDict) {
+ if (!hasOwnProperty.call(dict, key)) {
+ result[key] = {
+ prelude: patchDict[key].prelude || null,
+ descriptors: patchDict[key].descriptors && unpackSyntaxes(patchDict[key].descriptors)
+ };
+ }
+ }
+
+ return result;
+}
+
+module.exports = {
+ types: patchDictionary(mdnSyntaxes, patch.syntaxes),
+ atrules: patchAtrules(preprocessAtrules(mdnAtrules), patch.atrules),
+ properties: patchDictionary(mdnProperties, patch.properties)
+};