On this page

    util.getCallSites(frameCount?, options?): Object[]
    Stability: 1.1Active development
    Attributes
    frameCount?:integer
    Optional number of frames to capture as call site objects. Default: 10. Allowable range is between 1 and 200.
    options:Object
    Optional
    sourceMap:boolean
    Reconstruct the original location in the stacktrace from the source-map. Enabled by default with the flag --enable-source-maps.
    Returns:Object[]
    An array of call site objects
    functionName:string
    Returns the name of the function associated with this call site.
    scriptName:string
    Returns the name of the resource that contains the script for the function for this call site.
    scriptId:string
    Returns the unique id of the script, as in Chrome DevTools protocol Runtime.ScriptId.
    lineNumber:number
    Returns the JavaScript script line number (1-based).
    columnNumber:number
    Returns the JavaScript script column number (1-based).

    Returns an array of call site objects containing the stack of the caller function.

    Unlike accessing an error.stack, the result returned from this API is not interfered with Error.prepareStackTrace.

    import { getCallSites } from 'node:util';
    
    function exampleFunction() {
      const callSites = getCallSites();
    
      console.log('Call Sites:');
      callSites.forEach((callSite, index) => {
        console.log(`CallSite ${index + 1}:`);
        console.log(`Function Name: ${callSite.functionName}`);
        console.log(`Script Name: ${callSite.scriptName}`);
        console.log(`Line Number: ${callSite.lineNumber}`);
        console.log(`Column Number: ${callSite.columnNumber}`);
      });
      // CallSite 1:
      // Function Name: exampleFunction
      // Script Name: /home/example.js
      // Line Number: 5
      // Column Number: 26
    
      // CallSite 2:
      // Function Name: anotherFunction
      // Script Name: /home/example.js
      // Line Number: 22
      // Column Number: 3
    
      // ...
    }
    
    // A function to simulate another stack layer
    function anotherFunction() {
      exampleFunction();
    }
    
    anotherFunction();
    const { getCallSites } = require('node:util');
    
    function exampleFunction() {
      const callSites = getCallSites();
    
      console.log('Call Sites:');
      callSites.forEach((callSite, index) => {
        console.log(`CallSite ${index + 1}:`);
        console.log(`Function Name: ${callSite.functionName}`);
        console.log(`Script Name: ${callSite.scriptName}`);
        console.log(`Line Number: ${callSite.lineNumber}`);
        console.log(`Column Number: ${callSite.columnNumber}`);
      });
      // CallSite 1:
      // Function Name: exampleFunction
      // Script Name: /home/example.js
      // Line Number: 5
      // Column Number: 26
    
      // CallSite 2:
      // Function Name: anotherFunction
      // Script Name: /home/example.js
      // Line Number: 22
      // Column Number: 3
    
      // ...
    }
    
    // A function to simulate another stack layer
    function anotherFunction() {
      exampleFunction();
    }
    
    anotherFunction();

    It is possible to reconstruct the original locations by setting the option sourceMap to true. If the source map is not available, the original location will be the same as the current location. When the --enable-source-maps flag is enabled,sourceMap will be true by default.

    import { getCallSites } from 'node:util';
    
    interface Foo {
      foo: string;
    }
    
    const callSites = getCallSites({ sourceMap: true });
    
    // With sourceMap:
    // Function Name: ''
    // Script Name: example.js
    // Line Number: 7
    // Column Number: 26
    
    // Without sourceMap:
    // Function Name: ''
    // Script Name: example.js
    // Line Number: 2
    // Column Number: 26
    const { getCallSites } = require('node:util');
    
    const callSites = getCallSites({ sourceMap: true });
    
    // With sourceMap:
    // Function Name: ''
    // Script Name: example.js
    // Line Number: 7
    // Column Number: 26
    
    // Without sourceMap:
    // Function Name: ''
    // Script Name: example.js
    // Line Number: 2
    // Column Number: 26