@sdc-monitor/demo
Version:
<div align="center"> <a href="#" target="_blank"> <img src="https://i.loli.net/2021/07/28/EvPwd4NjVH3tBfO.jpg" alt="mito-logo" height="90"> </a> <p>A Lightweight SDK For Monitor Web</p>
40 lines (37 loc) • 1.52 kB
text/typescript
import { BrowserBreadcrumbTypes, BrowserEventTypes, ErrorTypes } from '@sdc-monitor/shared'
import { extractErrorStack, getLocationHref, getTimestamp, isError, on, Severity, unknownToString, _global } from '@sdc-monitor/utils'
import { BasePluginType, HttpTransformedType, ReportDataType } from '@sdc-monitor/types'
import { BrowserClient } from '../browserClient'
import { addBreadcrumbInBrowser } from '../utils'
const name = BrowserEventTypes.UNHANDLEDREJECTION
const unhandlerejectionPlugin: BasePluginType<BrowserEventTypes, BrowserClient> = {
name,
monitor(notify) {
on(_global, name, function (ev: PromiseRejectionEvent) {
// ev.preventDefault() 阻止默认行为后,控制台就不会再报红色错误
notify(name, ev)
})
},
transform(collectedData: PromiseRejectionEvent) {
let data: ReportDataType = {
type: ErrorTypes.PROMISE,
message: unknownToString(collectedData.reason),
url: getLocationHref(),
name: collectedData.type,
time: getTimestamp(),
level: Severity.Low
}
if (isError(collectedData.reason)) {
data = {
...data,
...extractErrorStack(collectedData.reason, Severity.Low)
}
}
return data
},
consumer(transformedData: HttpTransformedType) {
const breadcrumbStack = addBreadcrumbInBrowser.call(this, transformedData, BrowserBreadcrumbTypes.UNHANDLEDREJECTION, Severity.Error)
this.transport.send(transformedData, breadcrumbStack)
}
}
export default unhandlerejectionPlugin