diff --git a/ui/apps/dashboard/.gitignore b/ui/apps/dashboard/.gitignore index c8f79981..a16c0e5e 100644 --- a/ui/apps/dashboard/.gitignore +++ b/ui/apps/dashboard/.gitignore @@ -13,3 +13,6 @@ dist !.yarn/sdks !.yarn/versions + +# Sentry Config File +.env.sentry-build-plugin diff --git a/ui/apps/dashboard/package.json b/ui/apps/dashboard/package.json index d4137228..b77fa1f6 100644 --- a/ui/apps/dashboard/package.json +++ b/ui/apps/dashboard/package.json @@ -29,6 +29,8 @@ "@karmada/dashboard": "link:", "@karmada/i18n-tool": "link:", "@monaco-editor/react": "^4.6.0", + "@sentry/react": "^8.33.1", + "@sentry/vite-plugin": "^2.22.5", "@tanstack/react-query": "^5.59.8", "@uidotdev/usehooks": "^2.4.1", "antd": "^5.21.3", diff --git a/ui/apps/dashboard/src/components/error/index.tsx b/ui/apps/dashboard/src/components/error/index.tsx index 616bf208..9c849f7a 100644 --- a/ui/apps/dashboard/src/components/error/index.tsx +++ b/ui/apps/dashboard/src/components/error/index.tsx @@ -1,8 +1,15 @@ import i18nInstance from '@/utils/i18n'; import type { ResultProps } from 'antd'; import { Result } from 'antd'; +import { useRouteError } from 'react-router-dom'; +import * as Sentry from '@sentry/react'; +import { useEffect } from 'react'; const ErrorBoundary = (props: ResultProps) => { + const error = useRouteError() as Error; + useEffect(() => { + Sentry.captureException(error); + }, [error]); return ( https://www.i18next.com/translation-function/interpolation#unescape - }, - saveMissing: true, // send not translated keys to endpoint, - react: { - useSuspense: false, - }, - }) - .then(() => { - initRoute(); - ReactDOM.createRoot(document.getElementById('root')!).render( - - - , - ); - }) - .catch(() => { - - }) + .use(initReactI18next) // passes i18n down to react-i18next + .init({ + debug: true, + lng: getLang(), // if you're using a language detector, do not define the lng option + fallbackLng: ['zh-CN'], + resources: { + zh: { + translation: zhTexts, + }, + en: { + translation: enTexts, + }, + }, + interpolation: { + escapeValue: false, // react already safes from xss => https://www.i18next.com/translation-function/interpolation#unescape + }, + saveMissing: true, // send not translated keys to endpoint, + react: { + useSuspense: false, + }, + }) + .then(() => { + initRoute(); + ReactDOM.createRoot(document.getElementById('root')!).render( + + + , + ); + }) + .catch(() => {}); diff --git a/ui/apps/dashboard/src/routes/index.tsx b/ui/apps/dashboard/src/routes/index.tsx index 664bd529..04357ed7 100644 --- a/ui/apps/dashboard/src/routes/index.tsx +++ b/ui/apps/dashboard/src/routes/index.tsx @@ -1,9 +1,12 @@ import { createBrowserRouter, RouterProvider } from 'react-router-dom'; +import * as Sentry from '@sentry/react'; import { routes } from './route.tsx'; import { routerBase } from '@/services/base'; -const router = createBrowserRouter(routes, { +const sentryCreateBrowserRouter = + Sentry.wrapCreateBrowserRouter(createBrowserRouter); +const router = sentryCreateBrowserRouter(routes, { basename: routerBase, }); export default function Router() { diff --git a/ui/apps/dashboard/vite.config.ts b/ui/apps/dashboard/vite.config.ts index 8fb153d1..bb812f88 100644 --- a/ui/apps/dashboard/vite.config.ts +++ b/ui/apps/dashboard/vite.config.ts @@ -1,8 +1,9 @@ -import { defineConfig, loadEnv, Plugin } from 'vite'; +import { defineConfig, Plugin } from 'vite'; import react from '@vitejs/plugin-react'; import svgr from 'vite-plugin-svgr'; import path from 'path'; import { dynamicBase } from 'vite-plugin-dynamic-base'; +import { sentryVitePlugin } from '@sentry/vite-plugin'; const replacePathPrefixPlugin = (): Plugin => { return { @@ -18,9 +19,11 @@ const replacePathPrefixPlugin = (): Plugin => { // https://vitejs.dev/config/ export default defineConfig(({ mode }) => { - const env = loadEnv(mode, process.cwd(), ''); return { base: process.env.NODE_ENV === 'development' ? '' : '/static', + build: { + sourcemap: true, // Source map generation must be turned on + }, plugins: [ react(), svgr(), @@ -29,6 +32,12 @@ export default defineConfig(({ mode }) => { publicPath: 'window.__dynamic_base__', transformIndexHtml: true, }), + // Put the Sentry vite plugin after all other plugins + sentryVitePlugin({ + authToken: process.env.SENTRY_AUTH_TOKEN, + org: 'karmada-community', + project: 'karmada-dashboard', + }), ], resolve: { alias: [{ find: '@', replacement: path.resolve(__dirname, 'src') }], diff --git a/ui/pnpm-lock.yaml b/ui/pnpm-lock.yaml index d2851852..6a77d18c 100644 --- a/ui/pnpm-lock.yaml +++ b/ui/pnpm-lock.yaml @@ -50,6 +50,12 @@ importers: '@monaco-editor/react': specifier: ^4.6.0 version: 4.6.0(monaco-editor@0.48.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@sentry/react': + specifier: ^8.33.1 + version: 8.33.1(react@18.3.1) + '@sentry/vite-plugin': + specifier: ^2.22.5 + version: 2.22.5 '@tanstack/react-query': specifier: ^5.59.8 version: 5.59.8(react@18.3.1) @@ -1258,6 +1264,102 @@ packages: '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + '@sentry-internal/browser-utils@8.33.1': + resolution: {integrity: sha512-TW6/r+Gl5jiXv54iK1xZ3mlVgTS/jaBp4vcQ0xGMdgiQ3WchEPcFSeYovL+YHT3tSud0GZqVtDQCz+5i76puqA==} + engines: {node: '>=14.18'} + + '@sentry-internal/feedback@8.33.1': + resolution: {integrity: sha512-qauMRTm3qDaLqZ3ibI03cj4gLF40y0ij65nj+cns6iWxGCtPrO8tjvXFWuQsE7Aye9dGMnBgmv7uN+NTUtC3RA==} + engines: {node: '>=14.18'} + + '@sentry-internal/replay-canvas@8.33.1': + resolution: {integrity: sha512-nsxTFTPCT10Ty/v6+AiST3+yotGP1sUb8xqfKB9fPnS1hZHFryp0NnEls7xFjBsBbZPU1GpFkzrk/E6JFzixDQ==} + engines: {node: '>=14.18'} + + '@sentry-internal/replay@8.33.1': + resolution: {integrity: sha512-fm4coIOjmanU29NOVN9MyaP4fUCOYytbtFqVSKRFNZQ/xAgNeySiBIbUd6IjujMmnOk9bY0WEUMcdm3Uotjdog==} + engines: {node: '>=14.18'} + + '@sentry/babel-plugin-component-annotate@2.22.5': + resolution: {integrity: sha512-+93qwB9vTX1nj4hD8AMWowXZsZVkvmP9OwTqSh5d4kOeiJ+dZftUk4+FKeKkAX9lvY2reyHV8Gms5mo67c27RQ==} + engines: {node: '>= 14'} + + '@sentry/browser@8.33.1': + resolution: {integrity: sha512-c6zI/igexkLwZuGk+u8Rj26ChjxGgkhe6ZbKFsXCYaKAp5ep5X7HQRkkqgbxApiqlC0LduHdd/ymzh139JLg8w==} + engines: {node: '>=14.18'} + + '@sentry/bundler-plugin-core@2.22.5': + resolution: {integrity: sha512-nfvTthV0aNM9/MwgnCi1WjAlCtau1I4kw6+oZIDOwJRDqGNziz517mYRXSsvCUebtGxDZtPcF7hSEBMSHjpncA==} + engines: {node: '>= 14'} + + '@sentry/cli-darwin@2.37.0': + resolution: {integrity: sha512-CsusyMvO0eCPSN7H+sKHXS1pf637PWbS4rZak/7giz/z31/6qiXmeMlcL3f9lLZKtFPJmXVFO9uprn1wbBVF8A==} + engines: {node: '>=10'} + os: [darwin] + + '@sentry/cli-linux-arm64@2.37.0': + resolution: {integrity: sha512-2vzUWHLZ3Ct5gpcIlfd/2Qsha+y9M8LXvbZE26VxzYrIkRoLAWcnClBv8m4XsHLMURYvz3J9QSZHMZHSO7kAzw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux, freebsd] + + '@sentry/cli-linux-arm@2.37.0': + resolution: {integrity: sha512-Dz0qH4Yt+gGUgoVsqVt72oDj4VQynRF1QB1/Sr8g76Vbi+WxWZmUh0iFwivYVwWxdQGu/OQrE0tx946HToCRyA==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux, freebsd] + + '@sentry/cli-linux-i686@2.37.0': + resolution: {integrity: sha512-MHRLGs4t/CQE1pG+mZBQixyWL6xDZfNalCjO8GMcTTbZFm44S3XRHfYJZNVCgdtnUP7b6OHGcu1v3SWE10LcwQ==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [linux, freebsd] + + '@sentry/cli-linux-x64@2.37.0': + resolution: {integrity: sha512-k76ClefKZaDNJZU/H3mGeR8uAzAGPzDRG/A7grzKfBeyhP3JW09L7Nz9IQcSjCK+xr399qLhM2HFCaPWQ6dlMw==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux, freebsd] + + '@sentry/cli-win32-i686@2.37.0': + resolution: {integrity: sha512-FFyi5RNYQQkEg4GkP2f3BJcgQn0F4fjFDMiWkjCkftNPXQG+HFUEtrGsWr6mnHPdFouwbYg3tEPUWNxAoypvTw==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [win32] + + '@sentry/cli-win32-x64@2.37.0': + resolution: {integrity: sha512-nSMj4OcfQmyL+Tu/jWCJwhKCXFsCZW1MUk6wjjQlRt9SDLfgeapaMlK1ZvT1eZv5ZH6bj3qJfefwj4U8160uOA==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@sentry/cli@2.37.0': + resolution: {integrity: sha512-fM3V4gZRJR/s8lafc3O07hhOYRnvkySdPkvL/0e0XW0r+xRwqIAgQ5ECbsZO16A5weUiXVSf03ztDL1FcmbJCQ==} + engines: {node: '>= 10'} + hasBin: true + + '@sentry/core@8.33.1': + resolution: {integrity: sha512-3SS41suXLFzxL3OQvTMZ6q92ZapELVq2l2SoWlZopcamWhog2Ru0dp2vkunq97kFHb2TzKRTlFH4+4gbT8SJug==} + engines: {node: '>=14.18'} + + '@sentry/react@8.33.1': + resolution: {integrity: sha512-SsEX05xfcfOvo7/pK1UyeyTAYWH8iSIsXXlsjvnSRsbuJkjb0c+q6yiZpj3A2PRdbcx43nTVE1n0lSpgaqj2HA==} + engines: {node: '>=14.18'} + peerDependencies: + react: ^16.14.0 || 17.x || 18.x || 19.x + + '@sentry/types@8.33.1': + resolution: {integrity: sha512-GjoAMvwtpIemoF/IiwZ7A60g4nQv3qwzR21GvJqDVUoKD0e8pv9OLX+HyXoUat4wEDGSuDUcUyUKD2G+od73QA==} + engines: {node: '>=14.18'} + + '@sentry/utils@8.33.1': + resolution: {integrity: sha512-uzuYpiiJuFY3N4WNHMBWUQX5oNv2t/TbG0OHRp3Rr7yeu+HSfD542TIp9/gMZ+G0Cxd8AmVO3wkKIFbk0TL4Qg==} + engines: {node: '>=14.18'} + + '@sentry/vite-plugin@2.22.5': + resolution: {integrity: sha512-dFARM360varU+hdU1MCpl0VTL03FkVIC+A9egCE+ureuOryjVNe3cm2mUjv/gnDHHNTOxWC2H2c8BlOkqTGP/w==} + engines: {node: '>= 14'} + '@sindresorhus/is@7.0.1': resolution: {integrity: sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==} engines: {node: '>=18'} @@ -1713,6 +1815,10 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + agentkeepalive@4.5.0: resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} engines: {node: '>= 8.0.0'} @@ -2137,6 +2243,10 @@ packages: dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -2546,6 +2656,10 @@ packages: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported + glob@9.3.5: + resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} + engines: {node: '>=16 || 14 >=14.17'} + globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -2609,6 +2723,9 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + html-parse-stringify@3.0.1: resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} @@ -2622,6 +2739,10 @@ packages: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} @@ -3006,6 +3127,10 @@ packages: magic-string@0.30.11: resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + magic-string@0.30.8: + resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} + engines: {node: '>=12'} + make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -3057,10 +3182,18 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@8.0.4: + resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} + engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.4: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} + minipass@4.2.8: + resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} + engines: {node: '>=8'} + minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} @@ -3421,6 +3554,10 @@ packages: engines: {node: '>=14'} hasBin: true + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + promise-stream-reader@1.0.1: resolution: {integrity: sha512-Tnxit5trUjBAqqZCGWwjyxhmgMN4hGrtpW3Oc/tRI4bpm/O2+ej72BB08l6JBnGQgVDGCLvHFGjGgQS6vzhwXg==} engines: {node: '>8.0.0'} @@ -4224,6 +4361,9 @@ packages: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} + unplugin@1.0.1: + resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==} + update-browserslist-db@1.0.15: resolution: {integrity: sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==} hasBin: true @@ -4379,6 +4519,13 @@ packages: webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack-virtual-modules@0.5.0: + resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} + websocket-driver@0.7.4: resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} engines: {node: '>=0.8.0'} @@ -5357,6 +5504,126 @@ snapshots: '@sec-ant/readable-stream@0.4.1': {} + '@sentry-internal/browser-utils@8.33.1': + dependencies: + '@sentry/core': 8.33.1 + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 + + '@sentry-internal/feedback@8.33.1': + dependencies: + '@sentry/core': 8.33.1 + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 + + '@sentry-internal/replay-canvas@8.33.1': + dependencies: + '@sentry-internal/replay': 8.33.1 + '@sentry/core': 8.33.1 + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 + + '@sentry-internal/replay@8.33.1': + dependencies: + '@sentry-internal/browser-utils': 8.33.1 + '@sentry/core': 8.33.1 + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 + + '@sentry/babel-plugin-component-annotate@2.22.5': {} + + '@sentry/browser@8.33.1': + dependencies: + '@sentry-internal/browser-utils': 8.33.1 + '@sentry-internal/feedback': 8.33.1 + '@sentry-internal/replay': 8.33.1 + '@sentry-internal/replay-canvas': 8.33.1 + '@sentry/core': 8.33.1 + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 + + '@sentry/bundler-plugin-core@2.22.5': + dependencies: + '@babel/core': 7.24.5 + '@sentry/babel-plugin-component-annotate': 2.22.5 + '@sentry/cli': 2.37.0 + dotenv: 16.4.5 + find-up: 5.0.0 + glob: 9.3.5 + magic-string: 0.30.8 + unplugin: 1.0.1 + transitivePeerDependencies: + - encoding + - supports-color + + '@sentry/cli-darwin@2.37.0': + optional: true + + '@sentry/cli-linux-arm64@2.37.0': + optional: true + + '@sentry/cli-linux-arm@2.37.0': + optional: true + + '@sentry/cli-linux-i686@2.37.0': + optional: true + + '@sentry/cli-linux-x64@2.37.0': + optional: true + + '@sentry/cli-win32-i686@2.37.0': + optional: true + + '@sentry/cli-win32-x64@2.37.0': + optional: true + + '@sentry/cli@2.37.0': + dependencies: + https-proxy-agent: 5.0.1 + node-fetch: 2.7.0 + progress: 2.0.3 + proxy-from-env: 1.1.0 + which: 2.0.2 + optionalDependencies: + '@sentry/cli-darwin': 2.37.0 + '@sentry/cli-linux-arm': 2.37.0 + '@sentry/cli-linux-arm64': 2.37.0 + '@sentry/cli-linux-i686': 2.37.0 + '@sentry/cli-linux-x64': 2.37.0 + '@sentry/cli-win32-i686': 2.37.0 + '@sentry/cli-win32-x64': 2.37.0 + transitivePeerDependencies: + - encoding + - supports-color + + '@sentry/core@8.33.1': + dependencies: + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 + + '@sentry/react@8.33.1(react@18.3.1)': + dependencies: + '@sentry/browser': 8.33.1 + '@sentry/core': 8.33.1 + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 + hoist-non-react-statics: 3.3.2 + react: 18.3.1 + + '@sentry/types@8.33.1': {} + + '@sentry/utils@8.33.1': + dependencies: + '@sentry/types': 8.33.1 + + '@sentry/vite-plugin@2.22.5': + dependencies: + '@sentry/bundler-plugin-core': 2.22.5 + unplugin: 1.0.1 + transitivePeerDependencies: + - encoding + - supports-color + '@sindresorhus/is@7.0.1': {} '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.24.5)': @@ -5845,6 +6112,12 @@ snapshots: acorn@8.11.3: {} + agent-base@6.0.2: + dependencies: + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + agentkeepalive@4.5.0: dependencies: humanize-ms: 1.2.1 @@ -6338,6 +6611,8 @@ snapshots: no-case: 3.0.4 tslib: 2.6.2 + dotenv@16.4.5: {} + eastasianwidth@0.2.0: {} electron-to-chromium@1.4.763: {} @@ -6937,6 +7212,13 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 + glob@9.3.5: + dependencies: + fs.realpath: 1.0.0 + minimatch: 8.0.4 + minipass: 4.2.8 + path-scurry: 1.11.1 + globals@11.12.0: {} globals@13.24.0: @@ -7003,6 +7285,10 @@ snapshots: he@1.2.0: {} + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + html-parse-stringify@3.0.1: dependencies: void-elements: 3.1.0 @@ -7016,6 +7302,13 @@ snapshots: quick-lru: 5.1.1 resolve-alpn: 1.2.1 + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + human-id@1.0.2: {} human-signals@2.1.0: {} @@ -7385,6 +7678,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + magic-string@0.30.8: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + make-dir@2.1.0: dependencies: pify: 4.0.1 @@ -7425,10 +7722,16 @@ snapshots: dependencies: brace-expansion: 1.1.11 + minimatch@8.0.4: + dependencies: + brace-expansion: 2.0.1 + minimatch@9.0.4: dependencies: brace-expansion: 2.0.1 + minipass@4.2.8: {} + minipass@7.1.2: {} monaco-editor@0.48.0: {} @@ -7750,6 +8053,8 @@ snapshots: prettier@3.3.3: {} + progress@2.0.3: {} + promise-stream-reader@1.0.1: {} prop-types@15.8.1: @@ -8696,6 +9001,13 @@ snapshots: universalify@0.1.2: {} + unplugin@1.0.1: + dependencies: + acorn: 8.11.3 + chokidar: 3.6.0 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.5.0 + update-browserslist-db@1.0.15(browserslist@4.23.0): dependencies: browserslist: 4.23.0 @@ -8834,6 +9146,10 @@ snapshots: webidl-conversions@4.0.2: {} + webpack-sources@3.2.3: {} + + webpack-virtual-modules@0.5.0: {} + websocket-driver@0.7.4: dependencies: http-parser-js: 0.5.8