index.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. const createExpectedOrder = require('../createExpectedOrder');
  2. const isRuleWithNodes = require('../isRuleWithNodes');
  3. const processLastComments = require('../processLastComments');
  4. const processMostNodes = require('../processMostNodes');
  5. const getContainingNode = require('../getContainingNode');
  6. const sorting = require('../sorting');
  7. module.exports = function(css, opts) {
  8. const expectedOrder = createExpectedOrder(opts.order);
  9. css.walk(function(input) {
  10. const node = getContainingNode(input);
  11. if (isRuleWithNodes(node)) {
  12. // Nodes for sorting
  13. let processed = [];
  14. // Add indexes to nodes
  15. node.each(function(childNode, index) {
  16. processed = processMostNodes(childNode, index, expectedOrder, processed);
  17. });
  18. // Add last comments in the rule. Need this because last comments are not belonging to anything
  19. node.each(function(childNode, index) {
  20. processed = processLastComments(childNode, index, processed);
  21. });
  22. // Sort declarations saved for sorting
  23. processed.sort(sorting.sortByIndexes);
  24. // Enforce semicolon for the last node
  25. node.raws.semicolon = true;
  26. // Replace rule content with sorted one
  27. node.removeAll();
  28. node.append(processed);
  29. }
  30. });
  31. };