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.
		
		
		
		
		
			
		
			
				
					78 lines
				
				2.0 KiB
			
		
		
			
		
	
	
					78 lines
				
				2.0 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { | ||
|  |   value: true | ||
|  | }); | ||
|  | exports.default = _default; | ||
|  | 
 | ||
|  | var _helperWrapFunction = require("@babel/helper-wrap-function"); | ||
|  | 
 | ||
|  | var _helperAnnotateAsPure = require("@babel/helper-annotate-as-pure"); | ||
|  | 
 | ||
|  | var _helperEnvironmentVisitor = require("@babel/helper-environment-visitor"); | ||
|  | 
 | ||
|  | var _core = require("@babel/core"); | ||
|  | 
 | ||
|  | var _t = require("@babel/types"); | ||
|  | 
 | ||
|  | const { | ||
|  |   callExpression, | ||
|  |   cloneNode, | ||
|  |   isIdentifier, | ||
|  |   isThisExpression, | ||
|  |   yieldExpression | ||
|  | } = _t; | ||
|  | 
 | ||
|  | const awaitVisitor = _core.traverse.visitors.merge([{ | ||
|  |   ArrowFunctionExpression(path) { | ||
|  |     path.skip(); | ||
|  |   }, | ||
|  | 
 | ||
|  |   AwaitExpression(path, { | ||
|  |     wrapAwait | ||
|  |   }) { | ||
|  |     const argument = path.get("argument"); | ||
|  |     path.replaceWith(yieldExpression(wrapAwait ? callExpression(cloneNode(wrapAwait), [argument.node]) : argument.node)); | ||
|  |   } | ||
|  | 
 | ||
|  | }, _helperEnvironmentVisitor.default]); | ||
|  | 
 | ||
|  | function _default(path, helpers, noNewArrows, ignoreFunctionLength) { | ||
|  |   path.traverse(awaitVisitor, { | ||
|  |     wrapAwait: helpers.wrapAwait | ||
|  |   }); | ||
|  |   const isIIFE = checkIsIIFE(path); | ||
|  |   path.node.async = false; | ||
|  |   path.node.generator = true; | ||
|  |   (0, _helperWrapFunction.default)(path, cloneNode(helpers.wrapAsync), noNewArrows, ignoreFunctionLength); | ||
|  |   const isProperty = path.isObjectMethod() || path.isClassMethod() || path.parentPath.isObjectProperty() || path.parentPath.isClassProperty(); | ||
|  | 
 | ||
|  |   if (!isProperty && !isIIFE && path.isExpression()) { | ||
|  |     (0, _helperAnnotateAsPure.default)(path); | ||
|  |   } | ||
|  | 
 | ||
|  |   function checkIsIIFE(path) { | ||
|  |     if (path.parentPath.isCallExpression({ | ||
|  |       callee: path.node | ||
|  |     })) { | ||
|  |       return true; | ||
|  |     } | ||
|  | 
 | ||
|  |     const { | ||
|  |       parentPath | ||
|  |     } = path; | ||
|  | 
 | ||
|  |     if (parentPath.isMemberExpression() && isIdentifier(parentPath.node.property, { | ||
|  |       name: "bind" | ||
|  |     })) { | ||
|  |       const { | ||
|  |         parentPath: bindCall | ||
|  |       } = parentPath; | ||
|  |       return bindCall.isCallExpression() && bindCall.node.arguments.length === 1 && isThisExpression(bindCall.node.arguments[0]) && bindCall.parentPath.isCallExpression({ | ||
|  |         callee: bindCall.node | ||
|  |       }); | ||
|  |     } | ||
|  | 
 | ||
|  |     return false; | ||
|  |   } | ||
|  | } |