Skip to content

Commit afb2a47

Browse files
fix: fix event listener leak in SiteNav and add security headers
- Extract astro:after-swap handler to named function so it can be removed in onUnmounted (fixes event listener leak) - Add vercel.json with security headers (X-Frame-Options, nosniff, Referrer-Policy, Permissions-Policy) Addresses review feedback: #10142 (review)
1 parent b2e7eb3 commit afb2a47

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

apps/website/src/components/SiteNav.vue

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,18 @@ function onKeydown(e: KeyboardEvent) {
1616
}
1717
}
1818
19+
function onAfterSwap() {
20+
mobileMenuOpen.value = false
21+
}
22+
1923
onMounted(() => {
2024
document.addEventListener('keydown', onKeydown)
21-
document.addEventListener('astro:after-swap', () => {
22-
mobileMenuOpen.value = false
23-
})
25+
document.addEventListener('astro:after-swap', onAfterSwap)
2426
})
2527
2628
onUnmounted(() => {
2729
document.removeEventListener('keydown', onKeydown)
30+
document.removeEventListener('astro:after-swap', onAfterSwap)
2831
})
2932
</script>
3033

apps/website/vercel.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"headers": [
3+
{
4+
"source": "/(.*)",
5+
"headers": [
6+
{ "key": "X-Frame-Options", "value": "DENY" },
7+
{ "key": "X-Content-Type-Options", "value": "nosniff" },
8+
{ "key": "Referrer-Policy", "value": "strict-origin-when-cross-origin" },
9+
{ "key": "Permissions-Policy", "value": "camera=(), microphone=(), geolocation=()" }
10+
]
11+
}
12+
]
13+
}

0 commit comments

Comments
 (0)