parseFunctionArguments.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.groupByKeyValue = groupByKeyValue;
  6. exports.mapToKeyValue = mapToKeyValue;
  7. exports.parseFunctionArguments = parseFunctionArguments;
  8. var _postcssValueParser = _interopRequireDefault(require("postcss-value-parser"));
  9. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
  10. function groupByKeyValue(nodes) {
  11. if (!nodes) {
  12. return [];
  13. }
  14. var groupIndex = 0;
  15. return nodes.reduce(function (acc, node, nodeIndex) {
  16. var isComma = node.type === "div" && node.value === ",";
  17. var skipTrailingComma = isComma && nodeIndex === nodes.length - 1;
  18. if (skipTrailingComma) {
  19. return acc;
  20. }
  21. if (isComma) {
  22. groupIndex++;
  23. }
  24. acc[groupIndex] = acc[groupIndex] || [];
  25. if (!isComma) {
  26. acc[groupIndex].push(node);
  27. }
  28. return acc;
  29. }, []);
  30. }
  31. function mapToKeyValue(nodes) {
  32. var keyVal = nodes.reduce(function (acc, curr, i) {
  33. if (acc.length === 1) {
  34. return acc;
  35. }
  36. var nextNode = nodes[i + 1];
  37. var isNextNodeColon = nextNode && nextNode.type === "div" && nextNode.value === ":";
  38. if (isNextNodeColon) {
  39. acc.push({
  40. key: _postcssValueParser["default"].stringify(nodes[i]),
  41. value: _postcssValueParser["default"].stringify(nodes.slice(2))
  42. });
  43. return acc;
  44. }
  45. acc.push({
  46. value: _postcssValueParser["default"].stringify(nodes)
  47. });
  48. return acc;
  49. }, []);
  50. return keyVal[0];
  51. }
  52. function parseFunctionArguments(value) {
  53. var parsed = (0, _postcssValueParser["default"])(value);
  54. if (!parsed.nodes[0] || parsed.nodes[0].type !== "function") {
  55. return [];
  56. }
  57. return parsed.nodes.map(function (node) {
  58. return groupByKeyValue(node.nodes).map(mapToKeyValue);
  59. })[0];
  60. }