55 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
| /**
 | |
|  * @param {import('postcss').Container[]} nodes
 | |
|  * @param {any} source
 | |
|  * @param {any} raws
 | |
|  * @returns {import('postcss').Container[]}
 | |
|  */ "use strict";
 | |
| Object.defineProperty(exports, "__esModule", {
 | |
|     value: true
 | |
| });
 | |
| Object.defineProperty(exports, "default", {
 | |
|     enumerable: true,
 | |
|     get: function() {
 | |
|         return cloneNodes;
 | |
|     }
 | |
| });
 | |
| function cloneNodes(nodes, source = undefined, raws = undefined) {
 | |
|     return nodes.map((node)=>{
 | |
|         let cloned = node.clone();
 | |
|         if (raws !== undefined) {
 | |
|             cloned.raws.tailwind = {
 | |
|                 ...cloned.raws.tailwind,
 | |
|                 ...raws
 | |
|             };
 | |
|         }
 | |
|         if (source !== undefined) {
 | |
|             traverse(cloned, (node)=>{
 | |
|                 var _node_raws_tailwind;
 | |
|                 // Do not traverse nodes that have opted
 | |
|                 // to preserve their original source
 | |
|                 let shouldPreserveSource = ((_node_raws_tailwind = node.raws.tailwind) === null || _node_raws_tailwind === void 0 ? void 0 : _node_raws_tailwind.preserveSource) === true && node.source;
 | |
|                 if (shouldPreserveSource) {
 | |
|                     return false;
 | |
|                 }
 | |
|                 // Otherwise we can safely replace the source
 | |
|                 // And continue traversing
 | |
|                 node.source = source;
 | |
|             });
 | |
|         }
 | |
|         return cloned;
 | |
|     });
 | |
| }
 | |
| /**
 | |
|  * Traverse a tree of nodes and don't traverse children if the callback
 | |
|  * returns false. Ideally we'd use Container#walk instead of this
 | |
|  * function but it stops traversing siblings too.
 | |
|  *
 | |
|  * @param {import('postcss').Container} node
 | |
|  * @param {(node: import('postcss').Container) => boolean} onNode
 | |
|  */ function traverse(node, onNode) {
 | |
|     if (onNode(node) !== false) {
 | |
|         var _node_each;
 | |
|         (_node_each = node.each) === null || _node_each === void 0 ? void 0 : _node_each.call(node, (child)=>traverse(child, onNode));
 | |
|     }
 | |
| }
 |