sameParent.js 988 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = sameParent;
  6. /**
  7. * @param {postcss.ChildNode} nodeA
  8. * @param {postcss.ChildNode} nodeB
  9. * @return {boolean}
  10. */
  11. function checkMatch(nodeA, nodeB) {
  12. if (nodeA.type === 'atrule' && nodeB.type === 'atrule') {
  13. return nodeA.params === nodeB.params && nodeA.name.toLowerCase() === nodeB.name.toLowerCase();
  14. }
  15. return nodeA.type === nodeB.type;
  16. }
  17. /**
  18. * @param {postcss.ChildNode} nodeA
  19. * @param {postcss.ChildNode} nodeB
  20. * @return {boolean}
  21. */
  22. function sameParent(nodeA, nodeB) {
  23. if (!nodeA.parent) {
  24. // A is orphaned, return if B is orphaned as well
  25. return !nodeB.parent;
  26. }
  27. if (!nodeB.parent) {
  28. // B is orphaned and A is not
  29. return false;
  30. } // Check if parents match
  31. if (!checkMatch(nodeA.parent, nodeB.parent)) {
  32. return false;
  33. } // Check parents' parents
  34. return sameParent(nodeA.parent, nodeB.parent);
  35. }
  36. module.exports = exports.default;