Files
hyperframes/packages/studio/src/main.tsx
T

52 lines
1.4 KiB
TypeScript

import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import { StudioApp } from "./App";
import { StudioErrorBoundary } from "./components/StudioErrorBoundary";
import { trackStudioEvent } from "./utils/studioTelemetry";
import "./styles/studio.css";
trackStudioEvent("session_start");
function errorProps(value: unknown): {
error_message: string;
error_name: string | null;
stack_trace: string | null;
} {
if (value instanceof Error) {
return {
error_message: value.message,
error_name: value.name,
stack_trace: value.stack?.slice(0, 4000) ?? null,
};
}
return { error_message: String(value), error_name: null, stack_trace: null };
}
window.addEventListener("error", (event) => {
if (event.message?.includes("ResizeObserver loop")) {
event.stopImmediatePropagation();
event.preventDefault();
return;
}
trackStudioEvent("unhandled_error", {
...errorProps(event.error),
error_message: event.message,
filename: event.filename,
lineno: event.lineno,
colno: event.colno,
});
});
window.addEventListener("unhandledrejection", (event) => {
trackStudioEvent("unhandled_promise_rejection", errorProps(event.reason));
});
createRoot(document.getElementById("root")!).render(
<StrictMode>
<StudioErrorBoundary>
<StudioApp />
</StudioErrorBoundary>
</StrictMode>,
);