UNPKG

@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
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 }