@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>
89 lines (83 loc) • 3.16 kB
text/typescript
import { BREADCRUMBCATEGORYS, WxBreadcrumbTypes, ErrorTypes } from '@sdc-monitor/shared'
import { WxParsedErrorType } from '@sdc-monitor/types'
/**
* 解析字符串错误信息,返回message、name、stack
* @param str error string
*/
export function parseErrorString(str: string): WxParsedErrorType {
const splitLine: string[] = str.split('\n')
if (splitLine.length < 2) return null
if (splitLine[0].indexOf('MiniProgramError') !== -1) {
splitLine.splice(0, 1)
}
const message = splitLine.splice(0, 1)[0]
const name = splitLine.splice(0, 1)[0].split(':')[0]
const stack = []
splitLine.forEach((errorLine: string) => {
const regexpGetFun = /at\s+([\S]+)\s+\(/ // 获取 [ 函数名 ]
const regexGetFile = /\(([^)]+)\)/ // 获取 [ 有括号的文件 , 没括号的文件 ]
const regexGetFileNoParenthese = /\s+at\s+(\S+)/ // 获取 [ 有括号的文件 , 没括号的文件 ]
const funcExec = regexpGetFun.exec(errorLine)
let fileURLExec = regexGetFile.exec(errorLine)
if (!fileURLExec) {
// 假如为空尝试解析无括号的URL
fileURLExec = regexGetFileNoParenthese.exec(errorLine)
}
const funcNameMatch = Array.isArray(funcExec) && funcExec.length > 0 ? funcExec[1].trim() : ''
const fileURLMatch = Array.isArray(fileURLExec) && fileURLExec.length > 0 ? fileURLExec[1] : ''
const lineInfo = fileURLMatch.split(':')
stack.push({
args: [], // 请求参数
func: funcNameMatch || ErrorTypes.UNKNOWN_FUNCTION, // 前端分解后的报错
column: Number(lineInfo.pop()), // 前端分解后的列
line: Number(lineInfo.pop()), // 前端分解后的行
url: lineInfo.join(':') // 前端分解后的URL
})
})
return {
message,
name,
stack
}
}
/**
* 根据wx行为类型返回种类
*
* @export
* @param {WxBreadcrumbTypes} type
* @return {*} {BREADCRUMBCATEGORYS}
*/
export function getBreadcrumbCategoryInWx(type: WxBreadcrumbTypes): BREADCRUMBCATEGORYS {
switch (type) {
case WxBreadcrumbTypes.XHR:
return BREADCRUMBCATEGORYS.HTTP
case WxBreadcrumbTypes.ROUTE:
case WxBreadcrumbTypes.TAP:
case WxBreadcrumbTypes.TOUCHMOVE:
return BREADCRUMBCATEGORYS.USER
case WxBreadcrumbTypes.CUSTOMER:
case WxBreadcrumbTypes.CONSOLE:
return BREADCRUMBCATEGORYS.DEBUG
case WxBreadcrumbTypes.APP_ON_LAUNCH:
case WxBreadcrumbTypes.APP_ON_SHOW:
case WxBreadcrumbTypes.APP_ON_HIDE:
case WxBreadcrumbTypes.PAGE_ON_LOAD:
case WxBreadcrumbTypes.PAGE_ON_SHOW:
case WxBreadcrumbTypes.PAGE_ON_READY:
case WxBreadcrumbTypes.PAGE_ON_HIDE:
case WxBreadcrumbTypes.PAGE_ON_SHARE_APP_MESSAGE:
case WxBreadcrumbTypes.PAGE_ON_SHARE_TIMELINE:
case WxBreadcrumbTypes.PAGE_ON_TAB_ITEM_TAP:
return BREADCRUMBCATEGORYS.LIFECYCLE
case WxBreadcrumbTypes.UNHANDLEDREJECTION:
case WxBreadcrumbTypes.CODE_ERROR:
case WxBreadcrumbTypes.RESOURCE:
case WxBreadcrumbTypes.VUE:
case WxBreadcrumbTypes.REACT:
default:
return BREADCRUMBCATEGORYS.EXCEPTION
}
}
export function getAppId() {
return wx.getAccountInfoSync().miniProgram.appId
}