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.
		
		
		
		
		
			
		
			
				
					49 lines
				
				1.5 KiB
			
		
		
			
		
	
	
					49 lines
				
				1.5 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { | ||
|  |   value: true | ||
|  | }); | ||
|  | exports.default = void 0; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Get the name of variable that contains node | ||
|  |  * | ||
|  |  * @param  {Path} path to the node | ||
|  |  * | ||
|  |  * @return {String}   The target | ||
|  |  */ | ||
|  | var _default = t => path => { | ||
|  |   let namedNode; | ||
|  |   path.find(path => { | ||
|  |     // X = styled
 | ||
|  |     if (path.isAssignmentExpression()) { | ||
|  |       namedNode = path.node.left; // const X = { Y: styled }
 | ||
|  |     } else if (path.isObjectProperty()) { | ||
|  |       namedNode = path.node.key; // class Y { (static) X = styled }
 | ||
|  |     } else if (path.isClassProperty()) { | ||
|  |       namedNode = path.node.key; // const X = styled
 | ||
|  |     } else if (path.isVariableDeclarator()) { | ||
|  |       namedNode = path.node.id; | ||
|  |     } else if (path.isStatement()) { | ||
|  |       // we've hit a statement, we should stop crawling up
 | ||
|  |       return true; | ||
|  |     } // we've got an displayName (if we need it) no need to continue
 | ||
|  |     // However if this is an assignment expression like X = styled then we
 | ||
|  |     // want to keep going up incase there is Y = X = styled; in this case we
 | ||
|  |     // want to pick the outer name because react-refresh will add HMR variables
 | ||
|  |     // like this: X = _a = styled. We could also consider only doing this if the
 | ||
|  |     // name starts with an underscore.
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     if (namedNode && !path.isAssignmentExpression()) return true; | ||
|  |   }); // foo.bar -> bar
 | ||
|  | 
 | ||
|  |   if (t.isMemberExpression(namedNode)) { | ||
|  |     namedNode = namedNode.property; | ||
|  |   } // identifiers are the only thing we can reliably get a name from
 | ||
|  | 
 | ||
|  | 
 | ||
|  |   return t.isIdentifier(namedNode) ? namedNode.name : undefined; | ||
|  | }; | ||
|  | 
 | ||
|  | exports.default = _default; |