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.
		
		
		
		
		
			
		
			
				
					38 lines
				
				641 B
			
		
		
			
		
	
	
					38 lines
				
				641 B
			| 
											3 years ago
										 | 'use strict'; | ||
|  | const callsites = require('callsites'); | ||
|  | 
 | ||
|  | module.exports = filepath => { | ||
|  | 	const stacks = callsites(); | ||
|  | 
 | ||
|  | 	if (!filepath) { | ||
|  | 		return stacks[2].getFileName(); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	let seenVal = false; | ||
|  | 
 | ||
|  | 	// Skip the first stack as it's this function
 | ||
|  | 	stacks.shift(); | ||
|  | 
 | ||
|  | 	for (const stack of stacks) { | ||
|  | 		const parentFilepath = stack.getFileName(); | ||
|  | 
 | ||
|  | 		if (typeof parentFilepath !== 'string') { | ||
|  | 			continue; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (parentFilepath === filepath) { | ||
|  | 			seenVal = true; | ||
|  | 			continue; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		// Skip native modules
 | ||
|  | 		if (parentFilepath === 'module.js') { | ||
|  | 			continue; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (seenVal && parentFilepath !== filepath) { | ||
|  | 			return parentFilepath; | ||
|  | 		} | ||
|  | 	} | ||
|  | }; |