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