snowballtools-base/packages/frontend/src/utils/log-error.ts
2024-05-02 16:36:31 -05:00

35 lines
955 B
TypeScript

import Bugsnag from '@bugsnag/js';
import BugsnagPluginReact from '@bugsnag/plugin-react';
import BugsnagPerformance from '@bugsnag/browser-performance';
import React from 'react';
const bugsnagApiKey = import.meta.env.VITE_BUGSNAG_API_KEY;
if (bugsnagApiKey) {
Bugsnag.start({
apiKey: bugsnagApiKey,
plugins: [new BugsnagPluginReact()],
});
BugsnagPerformance.start({ apiKey: bugsnagApiKey });
}
export const errorLoggingEnabled = !!bugsnagApiKey;
export const LogErrorBoundary = bugsnagApiKey
? Bugsnag.getPlugin('react')!.createErrorBoundary(React)
: ({ children }: any) => children;
export function logError(error: Error) {
let errors: any[] = [error];
let safety = 0;
while (errors[errors.length - 1].cause && safety < 10) {
errors.push('::caused by::', errors[errors.length - 1].cause);
safety += 1;
}
console.error(...errors);
if (import.meta.env.VITE_BUGSNAG_API_KEY) {
Bugsnag.notify(error);
}
}