HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/buyercall/node_modules/tailwindcss/src/util/cloneNodes.js
/**
 * @param {import('postcss').Container[]} nodes
 * @param {any} source
 * @param {any} raws
 * @returns {import('postcss').Container[]}
 */
export default 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) => {
        // Do not traverse nodes that have opted
        // to preserve their original source
        let shouldPreserveSource = 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) {
    node.each?.((child) => traverse(child, onNode))
  }
}