diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index d771095..edab1cb 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -32,18 +32,25 @@ export default defineConfig({ }, head: [ - // Tutto first-party. 'unsafe-inline' serve perche' VitePress emette - // uno script inline per il tema e stili inline. - [ - 'meta', - { - 'http-equiv': 'Content-Security-Policy', - content: - "default-src 'self'; script-src 'self' 'unsafe-inline'; " + - "style-src 'self' 'unsafe-inline'; img-src 'self' data:; " + - "font-src 'self'; connect-src 'self'; base-uri 'self'; form-action 'self'", - }, - ], + // Everything this site loads is first-party. 'unsafe-inline' is required + // because VitePress emits an inline appearance script and inline styles. + // Applied to the built site only: `vitepress dev` serves HMR over a + // websocket, which a strict connect-src would block as soon as the dev + // server is not same-origin (--host, or a custom server.hmr.port). + ...(process.env.NODE_ENV === 'production' + ? [ + [ + 'meta', + { + 'http-equiv': 'Content-Security-Policy', + content: + "default-src 'self'; script-src 'self' 'unsafe-inline'; " + + "style-src 'self' 'unsafe-inline'; img-src 'self' data:; " + + "font-src 'self'; connect-src 'self'; base-uri 'self'; form-action 'self'", + }, + ] as [string, Record], + ] + : []), ['link', { rel: 'icon', type: 'image/svg+xml', href: '/patterns/favicon.svg' }], ['meta', { name: 'theme-color', content: '#0071e3' }], ['meta', { name: 'apple-mobile-web-app-capable', content: 'yes' }], @@ -110,7 +117,8 @@ export default defineConfig({ ], footer: { - message: 'Released under the MIT License.' + ' · Privacy & legal', + message: + 'Released under the MIT License. · Privacy & legal', copyright: `Copyright © 2024–${new Date().getFullYear()} Fabrizio Salmi` },