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
			| 
											3 years ago
										 | "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
 |