1.0.0 • Published 9 months ago

@mnrendra/get-caller-file v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
9 months ago

@mnrendra/get-caller-file

version types license size downloads

A utility to get the caller's file path from a specific callee. Useful for debugging, logging, or building tools that need to get the file locations at runtime.

Install

npm i @mnrendra/get-caller-file

API

getCallerFile

Gets the caller's file path from a specific callee. Extracts the file name as an absolute path from the first call site in the stack trace. If a callee is provided, the stack trace will start from the caller of the callee.

Type:

(callee?: ((...args: any) => any) | null) => string

Parameters

NameTypeDescription
callee((...args: any) => any) \| nullOptional callee function or method to start tracing from. If undefined or null, tracing starts from the current caller.

Return Type:

string

A string representing the absolute path of the caller's file.

Usage

CommonJS

/foo/callee.cjs

const { getCallerFile } = require('@mnrendra/get-caller-file')

const callee = () => {
  const callerFile1 = getCallerFile()
  const callerFile2 = getCallerFile(callee) // set the `callee` function as the callee.

  console.log(callerFile1) // output: /foo/callee.cjs
  console.log(callerFile2) // output: /foo/caller.cjs
}

module.exports = callee

/foo/caller.cjs

const callee = require('./callee.cjs')
const caller = () => callee()
caller()

ES Modules

/foo/callee.mjs

import { getCallerFile } from '@mnrendra/get-caller-file'

const callee = () => {
  const callerFile1 = getCallerFile()
  const callerFile2 = getCallerFile(callee) // set the `callee` function as the callee.

  console.log(callerFile1) // output: /foo/callee.mjs
  console.log(callerFile2) // output: /foo/caller.mjs
}

export default callee

/foo/caller.mjs

import callee from './callee.mjs'
const caller = () => callee()
caller()

Examples

  1. Call from your development project

/foo/project-name/src/index.mjs:

import { fileURLToPath } from 'node:url'
import { getCallerFile } from '@mnrendra/get-caller-file'

const caller = () => getCallerFile()
const callerFile = caller()

console.log(callerFile) // output: /foo/project-name/src/index.mjs
  1. Call from your production package

/foo/consumer/node_modules/module-name/dist/index.js:

"use strict";

const { getCallerFile } = require("@mnrendra/get-caller-file");

const caller = () => getCallerFile();
const callerFile = caller();

console.log(callerFile); // output: /foo/consumer/node_modules/module-name/dist/index.js

License

MIT

Author

@mnrendra

1.0.0

9 months ago