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.
		
		
		
		
		
			
		
			
				
					
					
						
							317 lines
						
					
					
						
							10 KiB
						
					
					
				
			
		
		
	
	
							317 lines
						
					
					
						
							10 KiB
						
					
					
				| "use strict";
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", {
 | |
|   value: true
 | |
| });
 | |
| exports.ArrowFunctionExpression = ArrowFunctionExpression;
 | |
| exports.AssignmentExpression = AssignmentExpression;
 | |
| exports.Binary = Binary;
 | |
| exports.BinaryExpression = BinaryExpression;
 | |
| exports.ClassExpression = ClassExpression;
 | |
| exports.ConditionalExpression = ConditionalExpression;
 | |
| exports.DoExpression = DoExpression;
 | |
| exports.FunctionExpression = FunctionExpression;
 | |
| exports.FunctionTypeAnnotation = FunctionTypeAnnotation;
 | |
| exports.Identifier = Identifier;
 | |
| exports.LogicalExpression = LogicalExpression;
 | |
| exports.NullableTypeAnnotation = NullableTypeAnnotation;
 | |
| exports.ObjectExpression = ObjectExpression;
 | |
| exports.OptionalIndexedAccessType = OptionalIndexedAccessType;
 | |
| exports.OptionalCallExpression = exports.OptionalMemberExpression = OptionalMemberExpression;
 | |
| exports.SequenceExpression = SequenceExpression;
 | |
| exports.TSTypeAssertion = exports.TSSatisfiesExpression = exports.TSAsExpression = TSAsExpression;
 | |
| exports.TSInferType = TSInferType;
 | |
| exports.TSInstantiationExpression = TSInstantiationExpression;
 | |
| exports.TSIntersectionType = exports.TSUnionType = TSUnionType;
 | |
| exports.UnaryLike = UnaryLike;
 | |
| exports.IntersectionTypeAnnotation = exports.UnionTypeAnnotation = UnionTypeAnnotation;
 | |
| exports.UpdateExpression = UpdateExpression;
 | |
| exports.AwaitExpression = exports.YieldExpression = YieldExpression;
 | |
| var _t = require("@babel/types");
 | |
| const {
 | |
|   isArrayTypeAnnotation,
 | |
|   isArrowFunctionExpression,
 | |
|   isAssignmentExpression,
 | |
|   isAwaitExpression,
 | |
|   isBinary,
 | |
|   isBinaryExpression,
 | |
|   isUpdateExpression,
 | |
|   isCallExpression,
 | |
|   isClass,
 | |
|   isClassExpression,
 | |
|   isConditional,
 | |
|   isConditionalExpression,
 | |
|   isExportDeclaration,
 | |
|   isExportDefaultDeclaration,
 | |
|   isExpressionStatement,
 | |
|   isFor,
 | |
|   isForInStatement,
 | |
|   isForOfStatement,
 | |
|   isForStatement,
 | |
|   isFunctionExpression,
 | |
|   isIfStatement,
 | |
|   isIndexedAccessType,
 | |
|   isIntersectionTypeAnnotation,
 | |
|   isLogicalExpression,
 | |
|   isMemberExpression,
 | |
|   isNewExpression,
 | |
|   isNullableTypeAnnotation,
 | |
|   isObjectPattern,
 | |
|   isOptionalCallExpression,
 | |
|   isOptionalMemberExpression,
 | |
|   isReturnStatement,
 | |
|   isSequenceExpression,
 | |
|   isSwitchStatement,
 | |
|   isTSArrayType,
 | |
|   isTSAsExpression,
 | |
|   isTSInstantiationExpression,
 | |
|   isTSIntersectionType,
 | |
|   isTSNonNullExpression,
 | |
|   isTSOptionalType,
 | |
|   isTSRestType,
 | |
|   isTSTypeAssertion,
 | |
|   isTSUnionType,
 | |
|   isTaggedTemplateExpression,
 | |
|   isThrowStatement,
 | |
|   isTypeAnnotation,
 | |
|   isUnaryLike,
 | |
|   isUnionTypeAnnotation,
 | |
|   isVariableDeclarator,
 | |
|   isWhileStatement,
 | |
|   isYieldExpression,
 | |
|   isTSSatisfiesExpression
 | |
| } = _t;
 | |
| const PRECEDENCE = {
 | |
|   "||": 0,
 | |
|   "??": 0,
 | |
|   "|>": 0,
 | |
|   "&&": 1,
 | |
|   "|": 2,
 | |
|   "^": 3,
 | |
|   "&": 4,
 | |
|   "==": 5,
 | |
|   "===": 5,
 | |
|   "!=": 5,
 | |
|   "!==": 5,
 | |
|   "<": 6,
 | |
|   ">": 6,
 | |
|   "<=": 6,
 | |
|   ">=": 6,
 | |
|   in: 6,
 | |
|   instanceof: 6,
 | |
|   ">>": 7,
 | |
|   "<<": 7,
 | |
|   ">>>": 7,
 | |
|   "+": 8,
 | |
|   "-": 8,
 | |
|   "*": 9,
 | |
|   "/": 9,
 | |
|   "%": 9,
 | |
|   "**": 10
 | |
| };
 | |
| function isTSTypeExpression(node) {
 | |
|   return isTSAsExpression(node) || isTSSatisfiesExpression(node) || isTSTypeAssertion(node);
 | |
| }
 | |
| const isClassExtendsClause = (node, parent) => isClass(parent, {
 | |
|   superClass: node
 | |
| });
 | |
| const hasPostfixPart = (node, parent) => (isMemberExpression(parent) || isOptionalMemberExpression(parent)) && parent.object === node || (isCallExpression(parent) || isOptionalCallExpression(parent) || isNewExpression(parent)) && parent.callee === node || isTaggedTemplateExpression(parent) && parent.tag === node || isTSNonNullExpression(parent);
 | |
| function NullableTypeAnnotation(node, parent) {
 | |
|   return isArrayTypeAnnotation(parent);
 | |
| }
 | |
| function FunctionTypeAnnotation(node, parent, printStack) {
 | |
|   if (printStack.length < 3) return;
 | |
|   return (
 | |
|     isUnionTypeAnnotation(parent) ||
 | |
|     isIntersectionTypeAnnotation(parent) ||
 | |
|     isArrayTypeAnnotation(parent) ||
 | |
|     isTypeAnnotation(parent) &&
 | |
|     isArrowFunctionExpression(printStack[printStack.length - 3])
 | |
|   );
 | |
| }
 | |
| function UpdateExpression(node, parent) {
 | |
|   return hasPostfixPart(node, parent) || isClassExtendsClause(node, parent);
 | |
| }
 | |
| function ObjectExpression(node, parent, printStack) {
 | |
|   return isFirstInContext(printStack, 1 | 2);
 | |
| }
 | |
| function DoExpression(node, parent, printStack) {
 | |
|   return !node.async && isFirstInContext(printStack, 1);
 | |
| }
 | |
| function Binary(node, parent) {
 | |
|   if (node.operator === "**" && isBinaryExpression(parent, {
 | |
|     operator: "**"
 | |
|   })) {
 | |
|     return parent.left === node;
 | |
|   }
 | |
|   if (isClassExtendsClause(node, parent)) {
 | |
|     return true;
 | |
|   }
 | |
|   if (hasPostfixPart(node, parent) || isUnaryLike(parent) || isAwaitExpression(parent)) {
 | |
|     return true;
 | |
|   }
 | |
|   if (isBinary(parent)) {
 | |
|     const parentOp = parent.operator;
 | |
|     const parentPos = PRECEDENCE[parentOp];
 | |
|     const nodeOp = node.operator;
 | |
|     const nodePos = PRECEDENCE[nodeOp];
 | |
|     if (
 | |
|     parentPos === nodePos && parent.right === node && !isLogicalExpression(parent) || parentPos > nodePos) {
 | |
|       return true;
 | |
|     }
 | |
|   }
 | |
| }
 | |
| function UnionTypeAnnotation(node, parent) {
 | |
|   return isArrayTypeAnnotation(parent) || isNullableTypeAnnotation(parent) || isIntersectionTypeAnnotation(parent) || isUnionTypeAnnotation(parent);
 | |
| }
 | |
| function OptionalIndexedAccessType(node, parent) {
 | |
|   return isIndexedAccessType(parent, {
 | |
|     objectType: node
 | |
|   });
 | |
| }
 | |
| function TSAsExpression() {
 | |
|   return true;
 | |
| }
 | |
| function TSUnionType(node, parent) {
 | |
|   return isTSArrayType(parent) || isTSOptionalType(parent) || isTSIntersectionType(parent) || isTSUnionType(parent) || isTSRestType(parent);
 | |
| }
 | |
| function TSInferType(node, parent) {
 | |
|   return isTSArrayType(parent) || isTSOptionalType(parent);
 | |
| }
 | |
| function TSInstantiationExpression(node, parent) {
 | |
|   return (isCallExpression(parent) || isOptionalCallExpression(parent) || isNewExpression(parent) || isTSInstantiationExpression(parent)) && !!parent.typeParameters;
 | |
| }
 | |
| function BinaryExpression(node, parent) {
 | |
|   return node.operator === "in" && (isVariableDeclarator(parent) || isFor(parent));
 | |
| }
 | |
| function SequenceExpression(node, parent) {
 | |
|   if (
 | |
|   isForStatement(parent) || isThrowStatement(parent) || isReturnStatement(parent) || isIfStatement(parent) && parent.test === node || isWhileStatement(parent) && parent.test === node || isForInStatement(parent) && parent.right === node || isSwitchStatement(parent) && parent.discriminant === node || isExpressionStatement(parent) && parent.expression === node) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   return true;
 | |
| }
 | |
| function YieldExpression(node, parent) {
 | |
|   return isBinary(parent) || isUnaryLike(parent) || hasPostfixPart(node, parent) || isAwaitExpression(parent) && isYieldExpression(node) || isConditionalExpression(parent) && node === parent.test || isClassExtendsClause(node, parent);
 | |
| }
 | |
| function ClassExpression(node, parent, printStack) {
 | |
|   return isFirstInContext(printStack, 1 | 4);
 | |
| }
 | |
| function UnaryLike(node, parent) {
 | |
|   return hasPostfixPart(node, parent) || isBinaryExpression(parent, {
 | |
|     operator: "**",
 | |
|     left: node
 | |
|   }) || isClassExtendsClause(node, parent);
 | |
| }
 | |
| function FunctionExpression(node, parent, printStack) {
 | |
|   return isFirstInContext(printStack, 1 | 4);
 | |
| }
 | |
| function ArrowFunctionExpression(node, parent) {
 | |
|   return isExportDeclaration(parent) || ConditionalExpression(node, parent);
 | |
| }
 | |
| function ConditionalExpression(node, parent) {
 | |
|   if (isUnaryLike(parent) || isBinary(parent) || isConditionalExpression(parent, {
 | |
|     test: node
 | |
|   }) || isAwaitExpression(parent) || isTSTypeExpression(parent)) {
 | |
|     return true;
 | |
|   }
 | |
|   return UnaryLike(node, parent);
 | |
| }
 | |
| function OptionalMemberExpression(node, parent) {
 | |
|   return isCallExpression(parent, {
 | |
|     callee: node
 | |
|   }) || isMemberExpression(parent, {
 | |
|     object: node
 | |
|   });
 | |
| }
 | |
| function AssignmentExpression(node, parent) {
 | |
|   if (isObjectPattern(node.left)) {
 | |
|     return true;
 | |
|   } else {
 | |
|     return ConditionalExpression(node, parent);
 | |
|   }
 | |
| }
 | |
| function LogicalExpression(node, parent) {
 | |
|   if (isTSTypeExpression(parent)) return true;
 | |
|   switch (node.operator) {
 | |
|     case "||":
 | |
|       if (!isLogicalExpression(parent)) return false;
 | |
|       return parent.operator === "??" || parent.operator === "&&";
 | |
|     case "&&":
 | |
|       return isLogicalExpression(parent, {
 | |
|         operator: "??"
 | |
|       });
 | |
|     case "??":
 | |
|       return isLogicalExpression(parent) && parent.operator !== "??";
 | |
|   }
 | |
| }
 | |
| function Identifier(node, parent, printStack) {
 | |
|   var _node$extra;
 | |
|   if ((_node$extra = node.extra) != null && _node$extra.parenthesized && isAssignmentExpression(parent, {
 | |
|     left: node
 | |
|   }) && (isFunctionExpression(parent.right) || isClassExpression(parent.right)) && parent.right.id == null) {
 | |
|     return true;
 | |
|   }
 | |
|   if (node.name === "let") {
 | |
|     const isFollowedByBracket = isMemberExpression(parent, {
 | |
|       object: node,
 | |
|       computed: true
 | |
|     }) || isOptionalMemberExpression(parent, {
 | |
|       object: node,
 | |
|       computed: true,
 | |
|       optional: false
 | |
|     });
 | |
|     return isFirstInContext(printStack, isFollowedByBracket ? 1 | 8 | 16 | 32 : 32);
 | |
|   }
 | |
| 
 | |
|   return node.name === "async" && isForOfStatement(parent) && node === parent.left;
 | |
| }
 | |
| 
 | |
| function isFirstInContext(printStack, checkParam) {
 | |
|   const expressionStatement = checkParam & 1;
 | |
|   const arrowBody = checkParam & 2;
 | |
|   const exportDefault = checkParam & 4;
 | |
|   const forHead = checkParam & 8;
 | |
|   const forInHead = checkParam & 16;
 | |
|   const forOfHead = checkParam & 32;
 | |
|   let i = printStack.length - 1;
 | |
|   if (i <= 0) return;
 | |
|   let node = printStack[i];
 | |
|   i--;
 | |
|   let parent = printStack[i];
 | |
|   while (i >= 0) {
 | |
|     if (expressionStatement && isExpressionStatement(parent, {
 | |
|       expression: node
 | |
|     }) || exportDefault && isExportDefaultDeclaration(parent, {
 | |
|       declaration: node
 | |
|     }) || arrowBody && isArrowFunctionExpression(parent, {
 | |
|       body: node
 | |
|     }) || forHead && isForStatement(parent, {
 | |
|       init: node
 | |
|     }) || forInHead && isForInStatement(parent, {
 | |
|       left: node
 | |
|     }) || forOfHead && isForOfStatement(parent, {
 | |
|       left: node
 | |
|     })) {
 | |
|       return true;
 | |
|     }
 | |
|     if (i > 0 && (hasPostfixPart(node, parent) && !isNewExpression(parent) || isSequenceExpression(parent) && parent.expressions[0] === node || isUpdateExpression(parent) && !parent.prefix || isConditional(parent, {
 | |
|       test: node
 | |
|     }) || isBinary(parent, {
 | |
|       left: node
 | |
|     }) || isAssignmentExpression(parent, {
 | |
|       left: node
 | |
|     }))) {
 | |
|       node = parent;
 | |
|       i--;
 | |
|       parent = printStack[i];
 | |
|     } else {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| //# sourceMappingURL=parentheses.js.map
 |