UNPKG

2.29 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.needsParens = needsParens;
7exports.needsWhitespace = needsWhitespace;
8exports.needsWhitespaceAfter = needsWhitespaceAfter;
9exports.needsWhitespaceBefore = needsWhitespaceBefore;
10var whitespace = require("./whitespace.js");
11var parens = require("./parentheses.js");
12var _t = require("@babel/types");
13const {
14 FLIPPED_ALIAS_KEYS,
15 isCallExpression,
16 isExpressionStatement,
17 isMemberExpression,
18 isNewExpression
19} = _t;
20function expandAliases(obj) {
21 const map = new Map();
22 function add(type, func) {
23 const fn = map.get(type);
24 map.set(type, fn ? function (node, parent, stack) {
25 var _fn;
26 return (_fn = fn(node, parent, stack)) != null ? _fn : func(node, parent, stack);
27 } : func);
28 }
29 for (const type of Object.keys(obj)) {
30 const aliases = FLIPPED_ALIAS_KEYS[type];
31 if (aliases) {
32 for (const alias of aliases) {
33 add(alias, obj[type]);
34 }
35 } else {
36 add(type, obj[type]);
37 }
38 }
39 return map;
40}
41const expandedParens = expandAliases(parens);
42const expandedWhitespaceNodes = expandAliases(whitespace.nodes);
43function isOrHasCallExpression(node) {
44 if (isCallExpression(node)) {
45 return true;
46 }
47 return isMemberExpression(node) && isOrHasCallExpression(node.object);
48}
49function needsWhitespace(node, parent, type) {
50 var _expandedWhitespaceNo;
51 if (!node) return false;
52 if (isExpressionStatement(node)) {
53 node = node.expression;
54 }
55 const flag = (_expandedWhitespaceNo = expandedWhitespaceNodes.get(node.type)) == null ? void 0 : _expandedWhitespaceNo(node, parent);
56 if (typeof flag === "number") {
57 return (flag & type) !== 0;
58 }
59 return false;
60}
61function needsWhitespaceBefore(node, parent) {
62 return needsWhitespace(node, parent, 1);
63}
64function needsWhitespaceAfter(node, parent) {
65 return needsWhitespace(node, parent, 2);
66}
67function needsParens(node, parent, printStack) {
68 var _expandedParens$get;
69 if (!parent) return false;
70 if (isNewExpression(parent) && parent.callee === node) {
71 if (isOrHasCallExpression(node)) return true;
72 }
73 return (_expandedParens$get = expandedParens.get(node.type)) == null ? void 0 : _expandedParens$get(node, parent, printStack);
74}
75
76//# sourceMappingURL=index.js.map