MISC: Add error cause to exceptionAlert and Recovery mode (#1772)

This commit is contained in:
catloversg
2024-11-13 10:27:18 +07:00
committed by GitHub
parent 246d668951
commit 4f84a894eb
3 changed files with 83 additions and 15 deletions
+43 -3
View File
@@ -54,6 +54,33 @@ export interface IErrorData {
export const newIssueUrl = `https://github.com/bitburner-official/bitburner-src/issues/new`;
export function parseUnknownError(error: unknown): {
errorAsString: string;
stack?: string;
causeAsString?: string;
causeStack?: string;
} {
const errorAsString = String(error);
let stack: string | undefined = undefined;
let causeAsString: string | undefined = undefined;
let causeStack: string | undefined = undefined;
if (error instanceof Error) {
stack = error.stack;
if (error.cause != null) {
causeAsString = String(error.cause);
if (error.cause instanceof Error) {
causeStack = error.cause.stack;
}
}
}
return {
errorAsString,
stack,
causeAsString,
causeStack,
};
}
export function getErrorMetadata(error: unknown, errorInfo?: React.ErrorInfo, page?: Page): IErrorMetadata {
const isElectron = navigator.userAgent.toLowerCase().includes(" electron/");
const env = process.env.NODE_ENV === "development" ? GameEnv.Development : GameEnv.Production;
@@ -85,12 +112,25 @@ export function getErrorMetadata(error: unknown, errorInfo?: React.ErrorInfo, pa
export function getErrorForDisplay(error: unknown, errorInfo?: React.ErrorInfo, page?: Page): IErrorData {
const metadata = getErrorMetadata(error, errorInfo, page);
const errorData = parseUnknownError(error);
const fileName = String(metadata.error.fileName);
const features =
`lang=${metadata.features.language} cookiesEnabled=${metadata.features.cookiesEnabled.toString()}` +
` doNotTrack=${metadata.features.doNotTrack ?? "null"} indexedDb=${metadata.features.indexedDb.toString()}`;
const title = `${metadata.error.name}: ${metadata.error.message} (at "${metadata.page}")`;
let causeAndCauseStack = errorData.causeAsString
? `
### Error cause: ${errorData.causeAsString}
`
: "";
if (errorData.causeStack) {
causeAndCauseStack += `Cause stack:
\`\`\`
${errorData.causeStack}
\`\`\`
`;
}
const body = `
## ${title}
@@ -104,7 +144,7 @@ Please fill this information with details if relevant.
### Environment
* Error: ${String(metadata.error) ?? "n/a"}
* Error: ${errorData.errorAsString ?? "n/a"}
* Page: ${metadata.page ?? "n/a"}
* Version: ${metadata.version.toDisplay()}
* Environment: ${GameEnv[metadata.environment]}
@@ -115,9 +155,9 @@ Please fill this information with details if relevant.
### Stack Trace
\`\`\`
${metadata.error.stack}
${errorData.stack}
\`\`\`
${causeAndCauseStack}
### React Component Stack
\`\`\`
${metadata.errorInfo?.componentStack}