You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
969 B
44 lines
969 B
'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;
|
|
|