expressions.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.UnaryExpression = UnaryExpression;
  6. exports.DoExpression = DoExpression;
  7. exports.ParenthesizedExpression = ParenthesizedExpression;
  8. exports.UpdateExpression = UpdateExpression;
  9. exports.ConditionalExpression = ConditionalExpression;
  10. exports.NewExpression = NewExpression;
  11. exports.SequenceExpression = SequenceExpression;
  12. exports.ThisExpression = ThisExpression;
  13. exports.Super = Super;
  14. exports.Decorator = Decorator;
  15. exports.OptionalMemberExpression = OptionalMemberExpression;
  16. exports.OptionalCallExpression = OptionalCallExpression;
  17. exports.CallExpression = CallExpression;
  18. exports.Import = Import;
  19. exports.EmptyStatement = EmptyStatement;
  20. exports.ExpressionStatement = ExpressionStatement;
  21. exports.AssignmentPattern = AssignmentPattern;
  22. exports.LogicalExpression = exports.BinaryExpression = exports.AssignmentExpression = AssignmentExpression;
  23. exports.BindExpression = BindExpression;
  24. exports.MemberExpression = MemberExpression;
  25. exports.MetaProperty = MetaProperty;
  26. exports.AwaitExpression = exports.YieldExpression = void 0;
  27. function t() {
  28. var data = _interopRequireWildcard(require("@babel/types"));
  29. t = function t() {
  30. return data;
  31. };
  32. return data;
  33. }
  34. var n = _interopRequireWildcard(require("../node"));
  35. function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
  36. function UnaryExpression(node) {
  37. if (node.operator === "void" || node.operator === "delete" || node.operator === "typeof") {
  38. this.word(node.operator);
  39. this.space();
  40. } else {
  41. this.token(node.operator);
  42. }
  43. this.print(node.argument, node);
  44. }
  45. function DoExpression(node) {
  46. this.word("do");
  47. this.space();
  48. this.print(node.body, node);
  49. }
  50. function ParenthesizedExpression(node) {
  51. this.token("(");
  52. this.print(node.expression, node);
  53. this.token(")");
  54. }
  55. function UpdateExpression(node) {
  56. if (node.prefix) {
  57. this.token(node.operator);
  58. this.print(node.argument, node);
  59. } else {
  60. this.startTerminatorless(true);
  61. this.print(node.argument, node);
  62. this.endTerminatorless();
  63. this.token(node.operator);
  64. }
  65. }
  66. function ConditionalExpression(node) {
  67. this.print(node.test, node);
  68. this.space();
  69. this.token("?");
  70. this.space();
  71. this.print(node.consequent, node);
  72. this.space();
  73. this.token(":");
  74. this.space();
  75. this.print(node.alternate, node);
  76. }
  77. function NewExpression(node, parent) {
  78. this.word("new");
  79. this.space();
  80. this.print(node.callee, node);
  81. if (this.format.minified && node.arguments.length === 0 && !node.optional && !t().isCallExpression(parent, {
  82. callee: node
  83. }) && !t().isMemberExpression(parent) && !t().isNewExpression(parent)) {
  84. return;
  85. }
  86. this.print(node.typeParameters, node);
  87. if (node.optional) {
  88. this.token("?.");
  89. }
  90. this.token("(");
  91. this.printList(node.arguments, node);
  92. this.token(")");
  93. }
  94. function SequenceExpression(node) {
  95. this.printList(node.expressions, node);
  96. }
  97. function ThisExpression() {
  98. this.word("this");
  99. }
  100. function Super() {
  101. this.word("super");
  102. }
  103. function Decorator(node) {
  104. this.token("@");
  105. this.print(node.expression, node);
  106. this.newline();
  107. }
  108. function OptionalMemberExpression(node) {
  109. this.print(node.object, node);
  110. if (!node.computed && t().isMemberExpression(node.property)) {
  111. throw new TypeError("Got a MemberExpression for MemberExpression property");
  112. }
  113. var computed = node.computed;
  114. if (t().isLiteral(node.property) && typeof node.property.value === "number") {
  115. computed = true;
  116. }
  117. if (node.optional) {
  118. this.token("?.");
  119. }
  120. if (computed) {
  121. this.token("[");
  122. this.print(node.property, node);
  123. this.token("]");
  124. } else {
  125. if (!node.optional) {
  126. this.token(".");
  127. }
  128. this.print(node.property, node);
  129. }
  130. }
  131. function OptionalCallExpression(node) {
  132. this.print(node.callee, node);
  133. this.print(node.typeParameters, node);
  134. if (node.optional) {
  135. this.token("?.");
  136. }
  137. this.token("(");
  138. this.printList(node.arguments, node);
  139. this.token(")");
  140. }
  141. function CallExpression(node) {
  142. this.print(node.callee, node);
  143. this.print(node.typeParameters, node);
  144. this.token("(");
  145. this.printList(node.arguments, node);
  146. this.token(")");
  147. }
  148. function Import() {
  149. this.word("import");
  150. }
  151. function buildYieldAwait(keyword) {
  152. return function (node) {
  153. this.word(keyword);
  154. if (node.delegate) {
  155. this.token("*");
  156. }
  157. if (node.argument) {
  158. this.space();
  159. var terminatorState = this.startTerminatorless();
  160. this.print(node.argument, node);
  161. this.endTerminatorless(terminatorState);
  162. }
  163. };
  164. }
  165. var YieldExpression = buildYieldAwait("yield");
  166. exports.YieldExpression = YieldExpression;
  167. var AwaitExpression = buildYieldAwait("await");
  168. exports.AwaitExpression = AwaitExpression;
  169. function EmptyStatement() {
  170. this.semicolon(true);
  171. }
  172. function ExpressionStatement(node) {
  173. this.print(node.expression, node);
  174. this.semicolon();
  175. }
  176. function AssignmentPattern(node) {
  177. this.print(node.left, node);
  178. if (node.left.optional) this.token("?");
  179. this.print(node.left.typeAnnotation, node);
  180. this.space();
  181. this.token("=");
  182. this.space();
  183. this.print(node.right, node);
  184. }
  185. function AssignmentExpression(node, parent) {
  186. var parens = this.inForStatementInitCounter && node.operator === "in" && !n.needsParens(node, parent);
  187. if (parens) {
  188. this.token("(");
  189. }
  190. this.print(node.left, node);
  191. this.space();
  192. if (node.operator === "in" || node.operator === "instanceof") {
  193. this.word(node.operator);
  194. } else {
  195. this.token(node.operator);
  196. }
  197. this.space();
  198. this.print(node.right, node);
  199. if (parens) {
  200. this.token(")");
  201. }
  202. }
  203. function BindExpression(node) {
  204. this.print(node.object, node);
  205. this.token("::");
  206. this.print(node.callee, node);
  207. }
  208. function MemberExpression(node) {
  209. this.print(node.object, node);
  210. if (!node.computed && t().isMemberExpression(node.property)) {
  211. throw new TypeError("Got a MemberExpression for MemberExpression property");
  212. }
  213. var computed = node.computed;
  214. if (t().isLiteral(node.property) && typeof node.property.value === "number") {
  215. computed = true;
  216. }
  217. if (computed) {
  218. this.token("[");
  219. this.print(node.property, node);
  220. this.token("]");
  221. } else {
  222. this.token(".");
  223. this.print(node.property, node);
  224. }
  225. }
  226. function MetaProperty(node) {
  227. this.print(node.meta, node);
  228. this.token(".");
  229. this.print(node.property, node);
  230. }