A utility to enable stack tracing of the NodeJs.CallSite
object, allowing dynamic tracing of invocations.
npm i @mnrendra/stack-trace
Using CommonJS
:
const { stackTrace } = require('@mnrendra/stack-trace')
const [trace] = stackTrace()
console.log(trace.getFileName() === __filename) // Output: true
Using ES Module
:
import { stackTrace } from '@mnrendra/stack-trace'
import { fileURLToPath } from 'node:url'
const [trace] = stackTrace()
console.log(new URL(trace.getFileName()).pathname === fileURLToPath(import.meta.url)) // Output: true
- Call from your development project
/foo/project-name/src/index.mjs
:
import { stackTrace } from '@mnrendra/stack-trace'
const [trace] = stackTrace()
console.log(trace.getFileName()) // Output: file:///foo/project-name/src/index.mjs
- Call from your production module
/foo/project-name/node_modules/module-name/dist/index.js
:
"use strict";
const { stackTrace } = require('@mnrendra/stack-trace');
const [trace] = stackTrace();
console.log(trace.getFileName()); // Output: /foo/project-name/node_modules/module-name/dist/index.js
Note: When calling getFileName
from an ESM module, it will return the file name as a URL instead of a file path.
import { stackTrace } from '@mnrendra/stack-trace'
stackTrace(
// The first argument is the target function, or `null`, or `undefined`:
null,
// The second argument is the options object:
{
limit: 10 // The `Error.stackTraceLimit` property specifies the number of stack frames to be collected by a stack trace.
}
)
import {
validateSkippedStacks // To validate a name or a list of names of stack traces that need to be skipped. More info: @see https://github.com/mnrendra/validate-skipped-stacks
} from '@mnrendra/stack-trace'
import type {
CallSite, // NodeJS.CallSite
Options, // @mnrendra/stack-trace options
SkippedStacks, // @mnrendra/validate-skipped-stacks input
ValidSkippedStacks // @mnrendra/validate-skipped-stacks output
} from '@mnrendra/stack-trace'