Skip to content

Commit ae5bf45

Browse files
committed
fix: add error handling for theme and language parsing in hooks
1 parent 498e09b commit ae5bf45

File tree

1 file changed

+24
-13
lines changed

1 file changed

+24
-13
lines changed

src/hooks.server.ts

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,16 @@ import { sequence } from '@sveltejs/kit/hooks';
33

44
// * Theme event handler, gets the data from the event and then return the user theme
55
const themeHookHandle: Handle = ({ event, resolve }) => {
6-
const newTheme = event.url.searchParams.get('theme');
7-
const currentTheme = event.cookies.get('theme');
8-
const selectedTheme = newTheme || currentTheme || 'dark';
9-
const theme = selectedTheme === 'dark' ? 'dark' : 'light';
6+
let theme: 'dark' | 'light' = 'dark';
7+
8+
try {
9+
const newTheme = event.url.searchParams.get('theme');
10+
const currentTheme = event.cookies.get('theme');
11+
const selectedTheme = newTheme || currentTheme || 'dark';
12+
theme = selectedTheme === 'dark' ? 'dark' : 'light';
13+
} catch (error) {
14+
console.error('Error parsing theme:', error);
15+
}
1016

1117
return resolve(event, {
1218
transformPageChunk: ({ html }) => {
@@ -18,15 +24,20 @@ const themeHookHandle: Handle = ({ event, resolve }) => {
1824

1925
// * i18n event handler, gets the data from the event and then return the user language
2026
const i18nHookHandle: Handle = ({ event, resolve }) => {
21-
const acceptLanguageHeader = event.request.headers.get('accept-language');
22-
23-
// Get the default language from the browser
24-
const defaultLanguage = acceptLanguageHeader?.split(',')[0].split('-')[0];
25-
const newLanguageSetting = event.url.searchParams.get('lang');
26-
const currentLanguageSetting = event.cookies.get('lang');
27-
// Pick language by priority
28-
const selectedLang = newLanguageSetting || currentLanguageSetting || defaultLanguage || 'en';
29-
const lang = selectedLang === 'pt' ? 'pt' : 'en';
27+
let lang = 'en';
28+
29+
try {
30+
const acceptLanguageHeader = event.request.headers.get('accept-language');
31+
// Get the default language from the browser
32+
const defaultLanguage = acceptLanguageHeader?.split(',')[0].split('-')[0];
33+
const newLanguageSetting = event.url.searchParams.get('lang');
34+
const currentLanguageSetting = event.cookies.get('lang');
35+
// Pick language by priority
36+
const selectedLang = newLanguageSetting || currentLanguageSetting || defaultLanguage || 'en';
37+
lang = selectedLang === 'pt' ? 'pt' : 'en'
38+
} catch (error) {
39+
console.error('Error parsing language:', error);
40+
}
3041

3142
// Set the cookie for the selected language
3243
event.cookies.set('lang', lang, {

0 commit comments

Comments
 (0)