fix(ui): guard JSON.parse(localStorage) calls with try/catch to prevent UI crashes (#25481)

This commit is contained in:
G30
2026-06-01 10:33:54 -07:00
committed by GitHub
parent bddadafa07
commit ceb1cbc009
2 changed files with 17 additions and 6 deletions
+12 -5
View File
@@ -59,6 +59,14 @@
let closedBannerIds = [];
const getDismissedBannerIds = (): string[] => {
try {
return JSON.parse(localStorage.getItem('dismissedBannerIds') ?? '[]');
} catch {
return [];
}
};
let showShareChatModal = false;
let showDownloadChatModal = false;
</script>
@@ -299,7 +307,7 @@
/>
{/if}
{#each $banners.filter((b) => ![...JSON.parse(localStorage.getItem('dismissedBannerIds') ?? '[]'), ...closedBannerIds].includes(b.id)) as banner (banner.id)}
{#each $banners.filter((b) => ![...getDismissedBannerIds(), ...closedBannerIds].includes(b.id)) as banner (banner.id)}
<Banner
{banner}
on:dismiss={(e) => {
@@ -309,10 +317,9 @@
localStorage.setItem(
'dismissedBannerIds',
JSON.stringify(
[
bannerId,
...JSON.parse(localStorage.getItem('dismissedBannerIds') ?? '[]')
].filter((id) => $banners.find((b) => b.id === id))
[bannerId, ...getDismissedBannerIds()].filter((id) =>
$banners.find((b) => b.id === id)
)
)
);
} else {
+5 -1
View File
@@ -973,7 +973,11 @@
if (userSettings) {
settings.set(userSettings.ui);
} else {
settings.set(JSON.parse(localStorage.getItem('settings') ?? '{}'));
try {
settings.set(JSON.parse(localStorage.getItem('settings') ?? '{}'));
} catch {
settings.set({});
}
}
setTextScale($settings?.textScale ?? 1);