createOrderInfo.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. const _ = require('lodash');
  2. const getDescription = require('./getDescription');
  3. module.exports = function createOrderInfo(input) {
  4. let order = {};
  5. let expectedPosition = 0;
  6. input.forEach((originalItem) => {
  7. let item = originalItem;
  8. expectedPosition += 1;
  9. // Convert 'rules' into extended pattern
  10. if (item === 'rules') {
  11. item = {
  12. type: 'rule',
  13. };
  14. }
  15. if (item.type === 'rule') {
  16. // It there are no nodes like that create array for them
  17. if (!order[item.type]) {
  18. order[item.type] = [];
  19. }
  20. let nodeData = {
  21. expectedPosition,
  22. description: getDescription(item),
  23. };
  24. if (item.selector) {
  25. nodeData.selector = item.selector;
  26. if (_.isString(item.selector)) {
  27. nodeData.selector = new RegExp(item.selector);
  28. }
  29. }
  30. order[item.type].push(nodeData);
  31. }
  32. // Convert 'at-rules' into extended pattern
  33. if (item === 'at-rules') {
  34. item = {
  35. type: 'at-rule',
  36. };
  37. }
  38. if (item.type === 'at-rule') {
  39. // It there are no nodes like that create array for them
  40. if (!order[item.type]) {
  41. order[item.type] = [];
  42. }
  43. let nodeData = {
  44. expectedPosition,
  45. description: getDescription(item),
  46. };
  47. if (item.name) {
  48. nodeData.name = item.name;
  49. }
  50. if (item.parameter) {
  51. nodeData.parameter = item.parameter;
  52. if (_.isString(item.parameter)) {
  53. nodeData.parameter = new RegExp(item.parameter);
  54. }
  55. }
  56. if (!_.isUndefined(item.hasBlock)) {
  57. nodeData.hasBlock = item.hasBlock;
  58. }
  59. order[item.type].push(nodeData);
  60. }
  61. if (_.isString(item)) {
  62. order[item] = {
  63. expectedPosition,
  64. description: getDescription(item),
  65. };
  66. }
  67. });
  68. return order;
  69. };