mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-21 00:32:51 +02:00
MISC: Add error cause to exceptionAlert and Recovery mode (#1772)
This commit is contained in:
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user