aboutsummaryrefslogtreecommitdiffstats
path: root/dev.js
diff options
context:
space:
mode:
Diffstat (limited to 'dev.js')
-rw-r--r--dev.js11
1 files changed, 7 insertions, 4 deletions
diff --git a/dev.js b/dev.js
index b1d64d8..6dffad9 100644
--- a/dev.js
+++ b/dev.js
@@ -8,23 +8,26 @@ const port = Number(process.env.PORT || 5173);
Bun.serve({
port,
async fetch(req) {
+ // Never let the browser cache (or bfcache) dev assets — every load rebuilds
+ // from source, so a stale HTTP cache or restored tab can't pin old code.
+ const NO_STORE = 'no-store, must-revalidate';
try {
const path = new URL(req.url).pathname;
if (path === '/jsqr.js') {
return new Response(await buildJsQr({ minify: false }), {
- headers: { 'content-type': 'text/javascript; charset=utf-8' },
+ headers: { 'content-type': 'text/javascript; charset=utf-8', 'cache-control': NO_STORE },
});
}
const loc = path.match(/^\/locales\/([a-z]{2})\.json$/);
if (loc) {
const f = Bun.file('src/locales/' + loc[1] + '.json');
return (await f.exists())
- ? new Response(f, { headers: { 'content-type': 'application/json; charset=utf-8' } })
- : new Response('{}', { status: 404, headers: { 'content-type': 'application/json' } });
+ ? new Response(f, { headers: { 'content-type': 'application/json; charset=utf-8', 'cache-control': NO_STORE } })
+ : new Response('{}', { status: 404, headers: { 'content-type': 'application/json', 'cache-control': NO_STORE } });
}
const html = await buildHtml({ minify: false });
return new Response(html, {
- headers: { 'content-type': 'text/html; charset=utf-8' },
+ headers: { 'content-type': 'text/html; charset=utf-8', 'cache-control': NO_STORE },
});
} catch (e) {
return new Response(`Build error:\n\n${e.stack || e}`, {