新增模块:src/bugcollect/ - bugcollect.ts: 主入口,错误捕获 API - crash-capture.ts: Web 端崩溃捕获(error + unhandledrejection) - types.ts: 数据模型 - fingerprint.ts: 错误指纹计算(SHA-256) - log-queue.ts: 内存队列 + 定时上传(localStorage 持久化) - funnel-tracker.ts: 漏斗追踪 功能: - captureError/captureCrash 捕获错误 - addBreadcrumb 添加面包屑 - event 记录自定义事件 - warn/info 日志级别记录 - 自动初始化(window error 事件捕获) Co-Authored-By: Claude <noreply@anthropic.com>
41 行
952 B
TypeScript
41 行
952 B
TypeScript
/**
|
|
* Web 端崩溃捕获器
|
|
*/
|
|
|
|
type ErrorHandler = (error: Error, tags?: Record<string, unknown>) => void
|
|
|
|
let _started = false
|
|
let _handler: ErrorHandler | null = null
|
|
|
|
/**
|
|
* 启动崩溃捕获
|
|
*/
|
|
export function startCrashCapture(handler: ErrorHandler): void {
|
|
if (_started) return
|
|
_started = true
|
|
_handler = handler
|
|
|
|
// 捕获未处理的错误
|
|
window.addEventListener('error', (event) => {
|
|
if (event.error) {
|
|
handler(event.error, { type: 'uncaught_error', filename: event.filename, lineno: event.lineno, colno: event.colno })
|
|
}
|
|
})
|
|
|
|
// 捕获未处理的 Promise rejection
|
|
window.addEventListener('unhandledrejection', (event) => {
|
|
const error = event.reason instanceof Error
|
|
? event.reason
|
|
: new Error(String(event.reason))
|
|
handler(error, { type: 'unhandled_rejection' })
|
|
})
|
|
}
|
|
|
|
/**
|
|
* 停止崩溃捕获
|
|
*/
|
|
export function stopCrashCapture(): void {
|
|
_started = false
|
|
_handler = null
|
|
}
|