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.
		
		
		
		
		
			
		
			
				
					66 lines
				
				2.1 KiB
			
		
		
			
		
	
	
					66 lines
				
				2.1 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, "__esModule", {
							 | 
						||
| 
								 | 
							
								  value: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								exports.buildScopeIIFE = buildScopeIIFE;
							 | 
						||
| 
								 | 
							
								exports.collectShadowedParamsNames = collectShadowedParamsNames;
							 | 
						||
| 
								 | 
							
								exports.iifeVisitor = void 0;
							 | 
						||
| 
								 | 
							
								var _core = require("@babel/core");
							 | 
						||
| 
								 | 
							
								const iifeVisitor = {
							 | 
						||
| 
								 | 
							
								  "ReferencedIdentifier|BindingIdentifier"(path, state) {
							 | 
						||
| 
								 | 
							
								    const {
							 | 
						||
| 
								 | 
							
								      scope,
							 | 
						||
| 
								 | 
							
								      node
							 | 
						||
| 
								 | 
							
								    } = path;
							 | 
						||
| 
								 | 
							
								    const {
							 | 
						||
| 
								 | 
							
								      name
							 | 
						||
| 
								 | 
							
								    } = node;
							 | 
						||
| 
								 | 
							
								    if (name === "eval" || scope.getBinding(name) === state.scope.parent.getBinding(name) && state.scope.hasOwnBinding(name)) {
							 | 
						||
| 
								 | 
							
								      state.needsOuterBinding = true;
							 | 
						||
| 
								 | 
							
								      path.stop();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  "TypeAnnotation|TSTypeAnnotation|TypeParameterDeclaration|TSTypeParameterDeclaration": path => path.skip()
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								exports.iifeVisitor = iifeVisitor;
							 | 
						||
| 
								 | 
							
								function collectShadowedParamsNames(param, functionScope, shadowedParams) {
							 | 
						||
| 
								 | 
							
								  for (const name of Object.keys(param.getBindingIdentifiers())) {
							 | 
						||
| 
								 | 
							
								    var _functionScope$bindin;
							 | 
						||
| 
								 | 
							
								    const constantViolations = (_functionScope$bindin = functionScope.bindings[name]) == null ? void 0 : _functionScope$bindin.constantViolations;
							 | 
						||
| 
								 | 
							
								    if (constantViolations) {
							 | 
						||
| 
								 | 
							
								      for (const redeclarator of constantViolations) {
							 | 
						||
| 
								 | 
							
								        const node = redeclarator.node;
							 | 
						||
| 
								 | 
							
								        switch (node.type) {
							 | 
						||
| 
								 | 
							
								          case "VariableDeclarator":
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								              if (node.init === null) {
							 | 
						||
| 
								 | 
							
								                const declaration = redeclarator.parentPath;
							 | 
						||
| 
								 | 
							
								                if (!declaration.parentPath.isFor() || declaration.parentPath.get("body") === declaration) {
							 | 
						||
| 
								 | 
							
								                  redeclarator.remove();
							 | 
						||
| 
								 | 
							
								                  break;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								              }
							 | 
						||
| 
								 | 
							
								              shadowedParams.add(name);
							 | 
						||
| 
								 | 
							
								              break;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          case "FunctionDeclaration":
							 | 
						||
| 
								 | 
							
								            shadowedParams.add(name);
							 | 
						||
| 
								 | 
							
								            break;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function buildScopeIIFE(shadowedParams, body) {
							 | 
						||
| 
								 | 
							
								  const args = [];
							 | 
						||
| 
								 | 
							
								  const params = [];
							 | 
						||
| 
								 | 
							
								  for (const name of shadowedParams) {
							 | 
						||
| 
								 | 
							
								    args.push(_core.types.identifier(name));
							 | 
						||
| 
								 | 
							
								    params.push(_core.types.identifier(name));
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  return _core.types.returnStatement(_core.types.callExpression(_core.types.arrowFunctionExpression(params, body), args));
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//# sourceMappingURL=shadow-utils.js.map
							 |