fix: Hide router error details in production

This commit is contained in:
karilint
2026-05-29 15:22:58 +03:00
parent 1d454e7d3e
commit 88bed7adca
3 changed files with 40 additions and 10 deletions
@@ -1,17 +1,11 @@
import { useRouteError } from 'react-router-dom'
import { ENV } from '@/util/config'
import { getRouterErrorMessage } from './RouterErrorMessages'
export const RouterError = () => {
const error = useRouteError()
// Handle different error types that useRouteError can return
const errorMessage =
error instanceof Error
? error.message
: error instanceof Response
? `${error.status} ${error.statusText}`
: typeof error === 'string'
? error
: 'An unknown error occurred'
const errorMessage = getRouterErrorMessage(error, ENV === 'dev')
return (
<div style={styles.container}>
@@ -0,0 +1,21 @@
const genericErrorMessage = 'An unexpected navigation error occurred.'
export const getRouterErrorMessage = (error: unknown, isDevelopment: boolean): string => {
if (!isDevelopment) {
return genericErrorMessage
}
if (error instanceof Error) {
return error.message
}
if (error instanceof Response) {
return `${error.status} ${error.statusText}`
}
if (typeof error === 'string') {
return error
}
return 'An unknown error occurred'
}
@@ -0,0 +1,15 @@
import { describe, expect, it } from '@jest/globals'
import { getRouterErrorMessage } from '@/components/ErrorBoundary/RouterErrorMessages'
describe('getRouterErrorMessage', () => {
it('returns a generic message outside development', () => {
expect(getRouterErrorMessage(new Error('sensitive route loader details'), false)).toBe(
'An unexpected navigation error occurred.'
)
})
it('returns raw error details in development', () => {
expect(getRouterErrorMessage(new Error('route loader failed'), true)).toBe('route loader failed')
})
})