UNPKG

hardhat

Version:

Hardhat is an extensible developer tool that helps smart contract developers increase productivity by reliably bringing together the tools they want.

48 lines (36 loc) 1.22 kB
import findup from "find-up"; import path from "path"; function findClosestPackageJson(file: string): string | null { return findup.sync("package.json", { cwd: path.dirname(file) }); } /** * Returns the name of the closest package in the callstack that isn't this. */ export function getClosestCallerPackage(): string | undefined { const previousPrepareStackTrace = Error.prepareStackTrace; Error.prepareStackTrace = (e, s) => s; const error = new Error(); const stack: NodeJS.CallSite[] = error.stack as any; Error.prepareStackTrace = previousPrepareStackTrace; const currentPackage = findClosestPackageJson(__filename)!; for (const callSite of stack) { const fileName = callSite.getFileName(); // fileName is string | null in @types/node <=18 // and string | undefined in @types/node 20 if ( fileName !== null && fileName !== undefined && path.isAbsolute(fileName) ) { const callerPackage = findClosestPackageJson(fileName); if (callerPackage === currentPackage) { continue; } if (callerPackage === null) { return undefined; } return require(callerPackage).name; } } return undefined; }