/stack-trace

A utility to enable stack tracing of the NodeJs.CallSite object, allowing dynamic tracing of invocations.

Primary LanguageTypeScriptMIT LicenseMIT

@mnrendra/stack-trace

A utility to enable stack tracing of the NodeJs.CallSite object, allowing dynamic tracing of invocations.

Install

npm i @mnrendra/stack-trace

Usage

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

Examples

  1. 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
  1. 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.

Options

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.
  }
)

Utilities

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'

Types

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'

License

MIT

Author

@mnrendra