index.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.TokenContext = void 0;
  6. exports.needsParens = needsParens;
  7. exports.needsWhitespace = needsWhitespace;
  8. exports.needsWhitespaceAfter = needsWhitespaceAfter;
  9. exports.needsWhitespaceBefore = needsWhitespaceBefore;
  10. var whitespace = require("./whitespace.js");
  11. var parens = require("./parentheses.js");
  12. var _t = require("@babel/types");
  13. const {
  14. FLIPPED_ALIAS_KEYS,
  15. isCallExpression,
  16. isDecorator,
  17. isExpressionStatement,
  18. isMemberExpression,
  19. isNewExpression,
  20. isParenthesizedExpression
  21. } = _t;
  22. const TokenContext = exports.TokenContext = {
  23. expressionStatement: 1,
  24. arrowBody: 2,
  25. exportDefault: 4,
  26. forHead: 8,
  27. forInHead: 16,
  28. forOfHead: 32,
  29. arrowFlowReturnType: 64
  30. };
  31. function expandAliases(obj) {
  32. const map = new Map();
  33. function add(type, func) {
  34. const fn = map.get(type);
  35. map.set(type, fn ? function (node, parent, stack, inForInit) {
  36. var _fn;
  37. return (_fn = fn(node, parent, stack, inForInit)) != null ? _fn : func(node, parent, stack, inForInit);
  38. } : func);
  39. }
  40. for (const type of Object.keys(obj)) {
  41. const aliases = FLIPPED_ALIAS_KEYS[type];
  42. if (aliases) {
  43. for (const alias of aliases) {
  44. add(alias, obj[type]);
  45. }
  46. } else {
  47. add(type, obj[type]);
  48. }
  49. }
  50. return map;
  51. }
  52. const expandedParens = expandAliases(parens);
  53. const expandedWhitespaceNodes = expandAliases(whitespace.nodes);
  54. function isOrHasCallExpression(node) {
  55. if (isCallExpression(node)) {
  56. return true;
  57. }
  58. return isMemberExpression(node) && isOrHasCallExpression(node.object);
  59. }
  60. function needsWhitespace(node, parent, type) {
  61. var _expandedWhitespaceNo;
  62. if (!node) return false;
  63. if (isExpressionStatement(node)) {
  64. node = node.expression;
  65. }
  66. const flag = (_expandedWhitespaceNo = expandedWhitespaceNodes.get(node.type)) == null ? void 0 : _expandedWhitespaceNo(node, parent);
  67. if (typeof flag === "number") {
  68. return (flag & type) !== 0;
  69. }
  70. return false;
  71. }
  72. function needsWhitespaceBefore(node, parent) {
  73. return needsWhitespace(node, parent, 1);
  74. }
  75. function needsWhitespaceAfter(node, parent) {
  76. return needsWhitespace(node, parent, 2);
  77. }
  78. function needsParens(node, parent, tokenContext, inForInit) {
  79. var _expandedParens$get;
  80. if (!parent) return false;
  81. if (isNewExpression(parent) && parent.callee === node) {
  82. if (isOrHasCallExpression(node)) return true;
  83. }
  84. if (isDecorator(parent)) {
  85. return !isDecoratorMemberExpression(node) && !(isCallExpression(node) && isDecoratorMemberExpression(node.callee)) && !isParenthesizedExpression(node);
  86. }
  87. return (_expandedParens$get = expandedParens.get(node.type)) == null ? void 0 : _expandedParens$get(node, parent, tokenContext, inForInit);
  88. }
  89. function isDecoratorMemberExpression(node) {
  90. switch (node.type) {
  91. case "Identifier":
  92. return true;
  93. case "MemberExpression":
  94. return !node.computed && node.property.type === "Identifier" && isDecoratorMemberExpression(node.object);
  95. default:
  96. return false;
  97. }
  98. }
  99. //# sourceMappingURL=index.js.map