index.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports["default"] = rule;
  6. exports.ruleName = exports.meta = exports.messages = void 0;
  7. var _stylelint = require("stylelint");
  8. var _utils = require("../../utils");
  9. var hasOwnProp = Object.prototype.hasOwnProperty;
  10. var ruleName = (0, _utils.namespace)("declaration-nested-properties-no-divided-groups");
  11. exports.ruleName = ruleName;
  12. var messages = _stylelint.utils.ruleMessages(ruleName, {
  13. expected: function expected(prop) {
  14. return "Expected all nested properties of \"".concat(prop, "\" namespace to be in one nested group");
  15. }
  16. });
  17. exports.messages = messages;
  18. var meta = {
  19. url: (0, _utils.ruleUrl)(ruleName)
  20. };
  21. exports.meta = meta;
  22. function rule(expectation) {
  23. return function (root, result) {
  24. var validOptions = _stylelint.utils.validateOptions(result, ruleName, {
  25. actual: expectation
  26. });
  27. if (!validOptions) {
  28. return;
  29. }
  30. root.walk(function (item) {
  31. if (item.type !== "rule" && item.type !== "atrule") {
  32. return;
  33. }
  34. var nestedGroups = {};
  35. // Find all nested property groups
  36. item.each(function (decl) {
  37. if (decl.type !== "rule") {
  38. return;
  39. }
  40. var testForProp = (0, _utils.parseNestedPropRoot)(decl.selector);
  41. if (testForProp && testForProp.propName !== undefined) {
  42. var ns = testForProp.propName.value;
  43. if (!hasOwnProp.call(nestedGroups, ns)) {
  44. nestedGroups[ns] = [];
  45. }
  46. nestedGroups[ns].push(decl);
  47. }
  48. });
  49. Object.keys(nestedGroups).forEach(function (namespace) {
  50. // Only warn if there are more than one nested groups with equal namespaces
  51. if (nestedGroups[namespace].length === 1) {
  52. return;
  53. }
  54. nestedGroups[namespace].forEach(function (group) {
  55. _stylelint.utils.report({
  56. message: messages.expected(namespace),
  57. node: group,
  58. result: result,
  59. ruleName: ruleName
  60. });
  61. });
  62. });
  63. });
  64. };
  65. }
  66. rule.ruleName = ruleName;
  67. rule.messages = messages;
  68. rule.meta = meta;