import { IS_DEV } from '@/config' import { env } from '@/env' async function main() { // Polyfill for Array.prototype.toSpliced (ES2023, Chrome 110+) if (!Array.prototype.toSpliced) { // eslint-disable-next-line no-extend-native Array.prototype.toSpliced = function (this: T[], start: number, deleteCount?: number, ...items: T[]): T[] { const copy = this.slice() // When deleteCount is undefined (omitted), delete to end; otherwise let splice handle coercion if (deleteCount === undefined) copy.splice(start, copy.length - start, ...items) else copy.splice(start, deleteCount, ...items) return copy } } if (!('localStorage' in globalThis) || !('sessionStorage' in globalThis)) { class StorageMock { data: Record constructor() { this.data = {} as Record } setItem(name: string, value: string) { this.data[name] = value } getItem(name: string) { return this.data[name] || null } removeItem(name: string) { delete this.data[name] } clear() { this.data = {} } } let localStorage, sessionStorage try { localStorage = globalThis.localStorage sessionStorage = globalThis.sessionStorage } catch { localStorage = new StorageMock() sessionStorage = new StorageMock() } Object.defineProperty(globalThis, 'localStorage', { value: localStorage, }) Object.defineProperty(globalThis, 'sessionStorage', { value: sessionStorage, }) } const SENTRY_DSN = env.NEXT_PUBLIC_SENTRY_DSN if (!IS_DEV && SENTRY_DSN) { const Sentry = await import('@sentry/react') Sentry.init({ dsn: SENTRY_DSN, integrations: [ Sentry.browserTracingIntegration(), Sentry.replayIntegration(), ], tracesSampleRate: 0.1, replaysSessionSampleRate: 0.1, replaysOnErrorSampleRate: 1.0, }) } } main()