import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
import { ErrorBoundary } from "./components/ErrorBoundary";
import { AnalyticsErrorBoundary } from "./components/AnalyticsErrorBoundary";
import { analytics, resourceMonitor } from "./lib/analytics";
import { PostHogProvider } from "posthog-js/react";
import { loader } from "@monaco-editor/react";
import "./lib/i18n"; // 初始化国际化
import "./assets/shimmer.css";
import "./styles.css";
// Configure Monaco loader to use local assets (copied to /public/monaco/vs)
try {
loader.config({ paths: { vs: "/monaco/vs" } });
} catch (e) {
console.error("[Monaco] loader.config failed:", e);
}
// 全局捕获未处理的Promise拒绝,防止Monaco Editor错误
window.addEventListener('unhandledrejection', (event) => {
const error = event.reason;
if (error && (error.message || error.toString() || '').toLowerCase().includes('url is not valid')) {
event.preventDefault();
// 不输出任何日志,完全静默
}
});
// 全局捕获window.onerror
window.addEventListener('error', (event) => {
if (event.error && (event.error.message || event.error.toString() || '').toLowerCase().includes('url is not valid')) {
event.preventDefault();
return true;
}
});
// 捕获console.error并过滤Monaco错误
const originalConsoleError = console.error;
console.error = (...args) => {
const message = args.join(' ');
if (message.includes('URL is not valid')) {
return; // 静默过滤
}
originalConsoleError.apply(console, args);
};
// 捕获console.warn并过滤Monaco警告
const originalConsoleWarn = console.warn;
console.warn = (...args) => {
const message = args.join(' ');
if (message.includes('Monaco') && message.includes('URL')) {
return; // 静默过滤
}
originalConsoleWarn.apply(console, args);
};
// Initialize analytics before rendering (will no-op if no consent or no key)
analytics.initialize();
// Start resource monitoring (check every 2 minutes)
resourceMonitor.startMonitoring(120000);
const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement);
const posthogKey = (import.meta as any).env.VITE_PUBLIC_POSTHOG_KEY as string | undefined;
if (posthogKey) {
root.render(
);
} else {
root.render(
);
}