summaryrefslogtreecommitdiff
path: root/node_modules/cssnano-utils/src
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:05:55 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:05:55 +0800
commitc06f7ee0a40255214c477e13d9b956a7e07c2900 (patch)
treef5982a568ef8fab865d0142e71c7494fea3e4c1b /node_modules/cssnano-utils/src
parent3fd9400d4dccc25aa29b5702216732e0b7542073 (diff)
postcss,(plugins): nanocss, postcss-preset-env
Diffstat (limited to 'node_modules/cssnano-utils/src')
-rw-r--r--node_modules/cssnano-utils/src/getArguments.js19
-rw-r--r--node_modules/cssnano-utils/src/index.js6
-rw-r--r--node_modules/cssnano-utils/src/rawCache.js34
-rw-r--r--node_modules/cssnano-utils/src/sameParent.js44
4 files changed, 103 insertions, 0 deletions
diff --git a/node_modules/cssnano-utils/src/getArguments.js b/node_modules/cssnano-utils/src/getArguments.js
new file mode 100644
index 00000000..7c8e48aa
--- /dev/null
+++ b/node_modules/cssnano-utils/src/getArguments.js
@@ -0,0 +1,19 @@
+'use strict';
+/**
+ * Extracts the arguments of a CSS function or AtRule.
+ *
+ * @param {import('postcss-value-parser').ParsedValue | import('postcss-value-parser').FunctionNode} node
+ * @return {import('postcss-value-parser').Node[][]}
+ */
+module.exports = function getArguments(node) {
+ /** @type {import('postcss-value-parser').Node[][]} */
+ const list = [[]];
+ for (const child of node.nodes) {
+ if (child.type !== 'div') {
+ list[list.length - 1].push(child);
+ } else {
+ list.push([]);
+ }
+ }
+ return list;
+};
diff --git a/node_modules/cssnano-utils/src/index.js b/node_modules/cssnano-utils/src/index.js
new file mode 100644
index 00000000..d0828f44
--- /dev/null
+++ b/node_modules/cssnano-utils/src/index.js
@@ -0,0 +1,6 @@
+'use strict';
+const rawCache = require('./rawCache.js');
+const getArguments = require('./getArguments.js');
+const sameParent = require('./sameParent.js');
+
+module.exports = { rawCache, getArguments, sameParent };
diff --git a/node_modules/cssnano-utils/src/rawCache.js b/node_modules/cssnano-utils/src/rawCache.js
new file mode 100644
index 00000000..42a320e0
--- /dev/null
+++ b/node_modules/cssnano-utils/src/rawCache.js
@@ -0,0 +1,34 @@
+'use strict';
+
+/**
+ * @type {import('postcss').PluginCreator<void>}
+ * @return {import('postcss').Plugin}
+ */
+function pluginCreator() {
+ return {
+ postcssPlugin: 'cssnano-util-raw-cache',
+ /**
+ * @param {import('postcss').Root} css
+ * @param {{result: import('postcss').Result & {root: {rawCache?: any}}}} arg
+ */
+ OnceExit(css, { result }) {
+ result.root.rawCache = {
+ colon: ':',
+ indent: '',
+ beforeDecl: '',
+ beforeRule: '',
+ beforeOpen: '',
+ beforeClose: '',
+ beforeComment: '',
+ after: '',
+ emptyBody: '',
+ commentLeft: '',
+ commentRight: '',
+ };
+ },
+ };
+}
+
+pluginCreator.postcss = true;
+
+module.exports = pluginCreator;
diff --git a/node_modules/cssnano-utils/src/sameParent.js b/node_modules/cssnano-utils/src/sameParent.js
new file mode 100644
index 00000000..6c484e1f
--- /dev/null
+++ b/node_modules/cssnano-utils/src/sameParent.js
@@ -0,0 +1,44 @@
+'use strict';
+
+/**
+ * @param {import('postcss').AnyNode} nodeA
+ * @param {import('postcss').AnyNode} nodeB
+ * @return {boolean}
+ */
+function checkMatch(nodeA, nodeB) {
+ if (nodeA.type === 'atrule' && nodeB.type === 'atrule') {
+ return (
+ nodeA.params === nodeB.params &&
+ nodeA.name.toLowerCase() === nodeB.name.toLowerCase()
+ );
+ }
+ return nodeA.type === nodeB.type;
+}
+
+/** @typedef {import('postcss').AnyNode & {parent?: Child}} Child */
+/**
+ * @param {Child} nodeA
+ * @param {Child} nodeB
+ * @return {boolean}
+ */
+function sameParent(nodeA, nodeB) {
+ if (!nodeA.parent) {
+ // A is orphaned, return if B is orphaned as well
+ return !nodeB.parent;
+ }
+
+ if (!nodeB.parent) {
+ // B is orphaned and A is not
+ return false;
+ }
+
+ // Check if parents match
+ if (!checkMatch(nodeA.parent, nodeB.parent)) {
+ return false;
+ }
+
+ // Check parents' parents
+ return sameParent(nodeA.parent, nodeB.parent);
+}
+
+module.exports = sameParent;