| '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; | |
| 		} | |
| 	} | |
| };
 |