You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

64 regels
1.9 KiB

  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. var _stringToObjectStyle = _interopRequireDefault(require("./stringToObjectStyle"));
  7. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  8. const formatAttribute = jsxAttribute => {
  9. if (jsxAttribute.spread) return `{...${jsxAttribute.name}}`;
  10. if (jsxAttribute.literal) return `${jsxAttribute.name}={${jsxAttribute.value}}`;
  11. if (jsxAttribute.name === 'style') return `${jsxAttribute.name}={${JSON.stringify((0, _stringToObjectStyle.default)(jsxAttribute.value))}}`;
  12. return `${jsxAttribute.name}="${jsxAttribute.value}"`;
  13. };
  14. const formatElementOpen = jsxElement => {
  15. const attributes = jsxElement.attributes.map(formatAttribute).join(' ');
  16. const end = jsxElement.children.length === 0 ? ' />' : '>';
  17. return `<${jsxElement.name}${attributes.length ? ` ${attributes}` : ''}${end}`;
  18. };
  19. const formatElementClose = jsxElement => `</${jsxElement.name}>`;
  20. const formatComment = jsxComment => `{/*${jsxComment.text.replace(/\*\//g, '* /')}*/}`;
  21. const formatText = jsxText => jsxText.text.replace(/`/g, '\\`');
  22. var _default = {
  23. JSXElement: {
  24. enter(path, generator) {
  25. generator.writeLine(formatElementOpen(path.node));
  26. generator.indent();
  27. },
  28. exit(path, generator) {
  29. generator.deindent();
  30. if (path.node.children.length !== 0) generator.writeLine(formatElementClose(path.node));
  31. }
  32. },
  33. JSXComment: {
  34. enter(path, generator) {
  35. generator.writeLine(formatComment(path.node));
  36. }
  37. },
  38. JSXText: {
  39. enter(path, generator) {
  40. const trimmedText = path.node.text.trim();
  41. if (trimmedText) generator.writeLine(`{\`${formatText(path.node)}\`}`);
  42. }
  43. },
  44. JSXInterpolation: {
  45. enter(path, generator) {
  46. generator.writeLine(`{${path.node.value}}`);
  47. }
  48. }
  49. };
  50. exports.default = _default;