From c06f7ee0a40255214c477e13d9b956a7e07c2900 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Sat, 14 Oct 2023 15:05:55 +0800 Subject: postcss,(plugins): nanocss, postcss-preset-env --- node_modules/svgo/plugins/removeUselessDefs.js | 65 ++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 node_modules/svgo/plugins/removeUselessDefs.js (limited to 'node_modules/svgo/plugins/removeUselessDefs.js') diff --git a/node_modules/svgo/plugins/removeUselessDefs.js b/node_modules/svgo/plugins/removeUselessDefs.js new file mode 100644 index 00000000..46461a98 --- /dev/null +++ b/node_modules/svgo/plugins/removeUselessDefs.js @@ -0,0 +1,65 @@ +'use strict'; + +/** + * @typedef {import('../lib/types').XastElement} XastElement + */ + +const { detachNodeFromParent } = require('../lib/xast.js'); +const { elemsGroups } = require('./_collections.js'); + +exports.name = 'removeUselessDefs'; +exports.description = 'removes elements in without id'; + +/** + * Removes content of defs and properties that aren't rendered directly without ids. + * + * @author Lev Solntsev + * + * @type {import('./plugins-types').Plugin<'removeUselessDefs'>} + */ +exports.fn = () => { + return { + element: { + enter: (node, parentNode) => { + if (node.name === 'defs') { + /** + * @type {Array} + */ + const usefulNodes = []; + collectUsefulNodes(node, usefulNodes); + if (usefulNodes.length === 0) { + detachNodeFromParent(node, parentNode); + } + // TODO remove legacy parentNode in v4 + for (const usefulNode of usefulNodes) { + Object.defineProperty(usefulNode, 'parentNode', { + writable: true, + value: node, + }); + } + node.children = usefulNodes; + } else if ( + elemsGroups.nonRendering.includes(node.name) && + node.attributes.id == null + ) { + detachNodeFromParent(node, parentNode); + } + }, + }, + }; +}; + +/** + * @type {(node: XastElement, usefulNodes: Array) => void} + */ +const collectUsefulNodes = (node, usefulNodes) => { + for (const child of node.children) { + if (child.type === 'element') { + if (child.attributes.id != null || child.name === 'style') { + usefulNodes.push(child); + } else { + collectUsefulNodes(child, usefulNodes); + } + } + } +}; -- cgit v1.2.3