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.
		
		
		
		
		
			
		
			
				
					36 lines
				
				1.0 KiB
			
		
		
			
		
	
	
					36 lines
				
				1.0 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { | ||
|  |   value: true | ||
|  | }); | ||
|  | exports.default = optimiseCallExpression; | ||
|  | 
 | ||
|  | var _t = require("@babel/types"); | ||
|  | 
 | ||
|  | const { | ||
|  |   callExpression, | ||
|  |   identifier, | ||
|  |   isIdentifier, | ||
|  |   isSpreadElement, | ||
|  |   memberExpression, | ||
|  |   optionalCallExpression, | ||
|  |   optionalMemberExpression | ||
|  | } = _t; | ||
|  | 
 | ||
|  | function optimiseCallExpression(callee, thisNode, args, optional) { | ||
|  |   if (args.length === 1 && isSpreadElement(args[0]) && isIdentifier(args[0].argument, { | ||
|  |     name: "arguments" | ||
|  |   })) { | ||
|  |     if (optional) { | ||
|  |       return optionalCallExpression(optionalMemberExpression(callee, identifier("apply"), false, true), [thisNode, args[0].argument], false); | ||
|  |     } | ||
|  | 
 | ||
|  |     return callExpression(memberExpression(callee, identifier("apply")), [thisNode, args[0].argument]); | ||
|  |   } else { | ||
|  |     if (optional) { | ||
|  |       return optionalCallExpression(optionalMemberExpression(callee, identifier("call"), false, true), [thisNode, ...args], false); | ||
|  |     } | ||
|  | 
 | ||
|  |     return callExpression(memberExpression(callee, identifier("call")), [thisNode, ...args]); | ||
|  |   } | ||
|  | } |