@devexpress/callsite-record

中文文档
4.1.7发布于 2023/08/17MITTypeScriptCommonJS近 30 天下载 50.5万

Create fancy log entries for errors and function call sites.

此软件包已被标记为弃用

The @devexpress/callsite-record package is deprecated and will no longer receive updates.

原始使用文档
文档目录7 节
  1. Install
  2. API
  3. createCallsiteRecord( { forError, isCallsiteFrame, processF…
  4. createCallsiteRecord({ byFunctionName, typeName, processFra…
  5. CallsiteRecord
  6. Related
  7. Author

callsite-record

Build Status

Create fancy log entries for errors and function call sites.

For Error:

'use strict';

const createCallsiteRecord = require('callsite-record');

function myFunc() {
    throw new Error('Yo!');
}

try {
    myFunc();
}
catch(err) {
    console.log(createCallsiteRecord({ forError: err }).renderSync());
}

⬇

example

For function call up in the stack:

'use strict';

const createCallsiteRecord = require('callsite-record');

function func2 () {
    (function func1 () {
        console.log(createCallsiteRecord({ byFunctionName: 'func2' }).renderSync());
    })();
}

func2();

⬇

example

Additional goodies:

  • Use renderers for different output formats, e.g. to produce output in HTML.
  • Use stack filter to produce clean and beautiful stacks, e.g. removing Node lib internal calls.

Install

npm install callsite-record

API

createCallsiteRecord( { forError, isCallsiteFrame, processFrameFn }) → CallsiteRecord

You can generate a callsite for any stack frame, not only the topmost one. Use the isCallsiteFrame function to select a frame. This function is called for each frame starting from the top. Return true for the desired frame to generate the callsite.

Example:

const createCallsiteRecord = require('callsite-record');

try {
    throw new Error("We're doomed");
}
catch(err) {
    const record = createCallsiteRecord({ forError: err });
}

createCallsiteRecord({ byFunctionName, typeName, processFrameFn }) → CallsiteRecord

Creates CallsiteRecord for the function up in the call stack specified by byFunctionName. You can optionally specify a typeName if the function is a method. If the function is a constructor set byFunctionName to constructor.

Example:

const createCallsiteRecord = require('callsite-record');

(function func1() {
    (function func2() {
        (function func3() {
            const record = createCallsiteRecord({ byFunctionName: 'func2' });
        })();
    })();
})();

You can specify processFrameFn function, which will process every frame in callstack. It's usefull when you need to enable frame processing like source-maps-support.

Example:

const createCallsiteRecord = require('callsite-record');
const wrapCallSite         = require('source-map-support').wrapCallSite;

try {
    throw new Error("We're doomed");
}
catch(err) {
    const record = createCallsiteRecord({ forError: err, processFrameFn: wrapCallSite });
}

(function func1() {
    (function func2() {
        (function func3() {
            const record = createCallsiteRecord({ byFunctionName: 'func2', processFrameFn: wrapCallSite });
        })();
    })();
})();

CallsiteRecord

CallsiteRecord.render([renderOptions]) → Promise<String>

Renders call site record to the string.

Example:

record.render().then(str => console.log(str));

CallsiteRecord.renderSync([renderOptions]) → String

Sync version of the CallsiteRecord.render.

renderOptions.frameSize

Specifies the number of lines rendered above and below the call site in the code frame. Default: 5.

Example:

console.log(record.renderSync({ frameSize: 0 }));
// > 12 |    func1();
// ...

console.log(record.renderSync({ frameSize: 1 }));
//   11 |(function func2() {
// > 12 |    func1();
//   13 |})();
// ...
renderOptions.codeFrame

Specifies if code frame should be rendered. If disabled only stack will be rendered. Default: true.

renderOptions.stack

Specifies if stack trace should be rendered in addition to the code frame. Default: true.

renderOptions.stackFilter

Function that will be used to filter stack frames. Function accepts 2 arguments:

  • stackFrame - stack entry.
  • idx - index of the frame.
  • isV8StackFrame - if true then stackFrame is a V8 CallSite object. Otherwise it's a StackFrame object.

Default: null.

Example:

const sep = require('path').sep;

// Remove node core lib calls from the stack trace
record.renderSync({ stackFilter: frame => frame.getFileName().indexOf(sep) > -1 });
renderOptions.renderer

Specifies the output format of the rendering. Default: renderers.default. You can pass your own renderer object (example implementations) or use one of the built-in renderers:

renderers.default

Provides ANSI-colored output as shown above.

Usage:

const defaultRenderer = require('callsite-record').renderers.default;

record.renderSync({ renderer: defaultRenderer });
renderers.noColor

Same as default renderer but without colors.

Usage:

const noColorRenderer = require('callsite-record').renderers.noColor;

record.renderSync({ renderer: noColorRenderer });
renderers.html

Outputs HTML that can be later decorated with the CSS and embeded into the web page. Example output.

Usage:

const htmlRenderer = require('callsite-record').renderers.html;

record.renderSync({ renderer: html });

Author

Ivan Nikulin ([email protected])

版本与发布记录

@devexpress/callsite-record 共发布 2 个版本,首次发布于 2023/08/10;过去 12 个月发布了 0 个版本。

版本发布日期距今
4.1.7latest2023/08/173 年前
4.1.62023/08/103 年前

关于 @devexpress/callsite-record 的常见问题

@devexpress/callsite-record 是什么?

Create fancy log entries for errors and function call sites.注意:该包已被作者标记为弃用——The @devexpress/callsite-record package is deprecated and will no longer receive updates.

如何安装 @devexpress/callsite-record?

在项目目录运行 npm install @devexpress/callsite-record,或使用 pnpm add / yarn add / bun add。

@devexpress/callsite-record 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@devexpress/callsite-record 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@devexpress/callsite-record 可以商用吗?

@devexpress/callsite-record 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@devexpress/callsite-record 的下载量有多少?

根据 npm 官方下载统计,@devexpress/callsite-record 在 2026/10/12 – 2026/11/10 这 30 天内被下载 505,406 次,日均约 16,847 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@devexpress/callsite-record 还在维护吗?

最新版本 4.1.7 发布于 2023/08/17(3 年前);至今共发布 2 个版本,其中过去 12 个月发布了 0 个;首次发布于 2023/08/10。作者已将其标记为弃用,新项目建议寻找替代方案。