self.addEventListener('fetch', event => { const path = event.request.url.match(/\/(?[^\/]+)$/); switch (path?.groups?.name) { case 'constructed': event.respondWith(new Response(new Uint8Array([1, 2, 3]))); break; case 'forward': event.respondWith(fetch('/common/text-plain.txt')); break; case 'stream': event.respondWith((async() => { const res = await fetch('/common/text-plain.txt'); const body = await res.body; const reader = await body.getReader(); const stream = new ReadableStream({ async start(controller) { while (true) { const {done, value} = await reader.read(); if (done) break; controller.enqueue(value); } controller.close(); reader.releaseLock(); } }); return new Response(stream); })()); break; default: event.respondWith(fetch(event.request)); break; } });