38 lines
641 B
JavaScript
38 lines
641 B
JavaScript
|
'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;
|
||
|
}
|
||
|
}
|
||
|
};
|