From fde6f84bfde051d99d7f91828f7878fa2162c5b8 Mon Sep 17 00:00:00 2001 From: yetao Date: Tue, 29 Oct 2024 17:40:30 +0800 Subject: [PATCH] =?UTF-8?q?refactor=F0=9F=8E=A8:=20=20(=E9=98=85=E8=AF=BB?= =?UTF-8?q?=E4=BB=A3=E7=A0=81)=EF=BC=9Autils.ts=E5=A2=9E=E5=8A=A0=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/utils.ts b/src/utils.ts index ac928e9..fb408db 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -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]; } /**