1import * as _ from 'lodash-es' 2import { inspect } from 'util' 8const getErrType = ({err}: {err: any}) => { 9 if (err instanceof PtErr) return 'PtErr' 13const cleanStackA = (linesA: string[]) => linesA 14 .map(line => line.trim()) 16 .filter(line => !line.startsWith('at eval (')) 18const cleanStacksStr = (stacksH: Record<string, string[]>) => { 19 return Object.entries(stacksH).map(([stackName, linesA]) => { 20 linesA = cleanStackA(linesA) 21 return `${stackName}: ${linesA.length == 0 ? 'emptystack' : linesA.join("\n")}` 22 }).join("\n--------\n") 25export const getErrStr = ({err, prettyHumanIncompleteHash=false, forClassHash=false}: {err: any, prettyHumanIncompleteHash?: boolean, forClassHash?: boolean}) => { 26 if (err.constructor.name == 'String') { 27 return 'errstr ' + (err.toStringReplaced || err.toString()).trim() 30 const jsonToStr = (obj: unknown) => { 33 const errType = getErrType({err}) 35 let ret = errType + ' ' + err.message 37 if (err.throwLocation) ret += ' @ ' + err.throwLocation 40 if (!prettyHumanIncompleteHash && err.uniqDebugH) { 41 ret += "\n" + jsonToStr(err.uniqDebugH) 45 if (err.originalError) { 47 console.log('err.originalError', err.originalError) 50 return jsErrToStr({err, inclTitleLine: true, inclStack: !prettyHumanIncompleteHash}) 53 return gqlErrToStr({err, inclTitleLine: true, inclStack: !prettyHumanIncompleteHash}) 55 return 'fallb ' + jsonToStr(err) 58export const isGqlErr = (err: any) => { 59 const firstStackLine = err.stack 60 return _.startsWith(firstStackLine, 'GraphQLError:') 63export const isJsErr = (err: any) => _.get(err, 'extensions.code') == jsErrSym 65export const gqlErrToStr = ({err, inclTitleLine, inclStack}: {err: any, inclTitleLine: boolean, inclStack: boolean}) => { 66 const [firstLine, ...restLines] = (err.toStringReplaced || err.toString()).split("\n") 67 const retA: string[] = [] 72 retA.push(restLines.join("\n").trim()) 74 return retA.join("\n") 77export const jsErrToStr = ({err, inclTitleLine, inclStack}: {err: any, inclTitleLine: boolean, inclStack: boolean}) => { 78 let {stackA, componentStackA, message, ...restErr} = err 79 const retA: string[] = [] 81 retA.push('ptFeError ' + message) 83 const jsStackFilterFnc = (line: string) => { 84 if (_.includes(line, '/node_modules/')) return false 88 ], (bit) => _.startsWith(line, bit))) { 91 if (line === 'at div') return false 94 const compStackFilterFnc = (line: string) => { 95 if (_.includes(line, '/node_modules/')) return false 99 ], (bit) => _.startsWith(line, bit))) { 104 stackA = _.filter(stackA, jsStackFilterFnc) 105 componentStackA = _.filter(componentStackA, compStackFilterFnc) 107 return [...retA, cleanStacksStr({componentStackA, stackA})].join("\n") 109 return retA.join("\n")