|
|
|
@ -1,20 +1,39 @@
|
|
|
|
|
// 从 'common/fileSystemConfig' 模块中导入名为 'EnvironmentVariable' 的类型。
|
|
|
|
|
// 'EnvironmentVariable' 可能是用于表示环境变量的类型定义,导入这个类型可以在当前模块中使用它进行类型标注等操作。
|
|
|
|
|
import type { EnvironmentVariable } from 'common/fileSystemConfig';
|
|
|
|
|
|
|
|
|
|
// 从当前模块中导入名为 'DEBUG' 的常量,推测它可能与日志记录的调试级别相关。
|
|
|
|
|
// './logging' 可能是一个包含日志记录相关功能的模块,'DEBUG' 常量可能用于控制日志输出的详细程度。
|
|
|
|
|
import { DEBUG } from './logging';
|
|
|
|
|
|
|
|
|
|
// 定义一个名为 prepareStackTraceDefault 的函数,用于生成错误对象的栈跟踪字符串。
|
|
|
|
|
function prepareStackTraceDefault(error: Error, stackTraces: NodeJS.CallSite[]): string {
|
|
|
|
|
// 使用 reduce 方法遍历栈跟踪数组,逐步构建栈跟踪字符串。
|
|
|
|
|
// 初始字符串为错误对象的名称和消息,如果没有名称则为 "Error",如果没有消息则为空字符串。
|
|
|
|
|
// 对于每个栈跟踪项,将其添加到字符串中,格式为 "\n\tat [栈跟踪项描述] ([栈跟踪项对应的函数名])"。
|
|
|
|
|
return stackTraces.reduce((s, c) => `${s}\n\tat ${c} (${c.getFunction()})`, `${error.name || "Error"}: ${error.message || ""}`);
|
|
|
|
|
}
|
|
|
|
|
// 定义一个名为 trimError 的函数,用于裁剪错误对象的栈跟踪信息。
|
|
|
|
|
function trimError(error: Error, depth: number): [string[], Error] {
|
|
|
|
|
// 保存原始的 Error.prepareStackTrace 函数。
|
|
|
|
|
const pst = Error.prepareStackTrace;
|
|
|
|
|
// 初始化裁剪后的字符串为空。
|
|
|
|
|
let trimmed = '';
|
|
|
|
|
// 临时修改 Error.prepareStackTrace 函数,以实现裁剪栈跟踪的目的。
|
|
|
|
|
Error.prepareStackTrace = (err, stack) => {
|
|
|
|
|
// 获取裁剪后的栈跟踪结果,从 depth + 1 开始裁剪。
|
|
|
|
|
const result = (pst || prepareStackTraceDefault)(err, stack.slice(depth + 1));
|
|
|
|
|
// 获取裁剪掉的部分,用于返回。
|
|
|
|
|
trimmed = (pst || prepareStackTraceDefault)(err, stack.slice(0, depth + 1));
|
|
|
|
|
return result;
|
|
|
|
|
};
|
|
|
|
|
// 捕获错误对象的栈跟踪信息。
|
|
|
|
|
Error.captureStackTrace(error);
|
|
|
|
|
// 强制更新错误对象的 stack 属性,触发新的栈跟踪生成。
|
|
|
|
|
error.stack = error.stack;
|
|
|
|
|
// 恢复原始的 Error.prepareStackTrace 函数。
|
|
|
|
|
Error.prepareStackTrace = pst;
|
|
|
|
|
// 返回裁剪掉的部分(分割成数组)和裁剪后的错误对象。
|
|
|
|
|
return [trimmed.split('\n').slice(1), error];
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|