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