diff --git a/1000-hours/workers-site/index.js b/1000-hours/workers-site/index.js index 9b0d4095..9c9e50e3 100644 --- a/1000-hours/workers-site/index.js +++ b/1000-hours/workers-site/index.js @@ -1,4 +1,7 @@ -import { getAssetFromKV, mapRequestToAsset } from '@cloudflare/kv-asset-handler' +import { + getAssetFromKV, + mapRequestToAsset, +} from "@cloudflare/kv-asset-handler"; /** * The DEBUG flag will do two things that help during development: @@ -7,26 +10,26 @@ import { getAssetFromKV, mapRequestToAsset } from '@cloudflare/kv-asset-handler' * 2. we will return an error message on exception in your Response rather * than the default 404.html page. */ -const DEBUG = true +const DEBUG = true; -addEventListener('fetch', event => { +addEventListener("fetch", (event) => { try { - event.respondWith(handleEvent(event)) + event.respondWith(handleEvent(event)); } catch (e) { if (DEBUG) { return event.respondWith( new Response(e.message || e.toString(), { status: 500, - }), - ) + }) + ); } - event.respondWith(new Response('Internal Error', { status: 500 })) + event.respondWith(new Response("Internal Error", { status: 500 })); } -}) +}); async function handleEvent(event) { // const url = new URL(event.request.url) - let options = {} + let options = {}; // const key = url.pathname.slice(1); // if (event.request.method === 'GET' && key.startsWith("storage/")) { @@ -79,8 +82,11 @@ async function handleEvent(event) { response.headers.set("Referrer-Policy", "unsafe-url"); response.headers.set("Feature-Policy", "none"); - return response; + if (event.request.url.match(/\.(js|css|png|jpg|svg|ttf)$/)) { + response.headers.set("Cache-Control", "max-age=604800"); + } + return response; } catch (e) { // if an error is thrown try to serve the asset at 404.html // if (!DEBUG) { @@ -103,18 +109,18 @@ async function handleEvent(event) { } // If the pathname ends with '/', assume it's a directory and append 'index.html' - if (pathname.endsWith('/')) { - pathname += 'index.html'; + if (pathname.endsWith("/")) { + pathname += "index.html"; } // If it doesn't have an extension, assume it's a directory and append '/index.html' else if (!pathname.split("/").pop().includes(".")) { - pathname += '/index.html'; + pathname += "/index.html"; } return new Request(`${url.origin}${pathname}`, req); }, - }) + }); // return new Response(e.message || e.toString(), { status: 500 }) } @@ -128,15 +134,15 @@ async function handleEvent(event) { * to exist at a specific path. */ function handlePrefix(prefix) { - return request => { + return (request) => { // compute the default (e.g. / -> index.html) - let defaultAssetKey = mapRequestToAsset(request) - let url = new URL(defaultAssetKey.url) + let defaultAssetKey = mapRequestToAsset(request); + let url = new URL(defaultAssetKey.url); // strip the prefix from the path for lookup - url.pathname = url.pathname.replace(prefix, '/') + url.pathname = url.pathname.replace(prefix, "/"); // inherit all other props from the default request - return new Request(url.toString(), defaultAssetKey) - } -} \ No newline at end of file + return new Request(url.toString(), defaultAssetKey); + }; +}