fetch-response.js (1277B)
1 self.addEventListener('fetch', event => { 2 const path = event.request.url.match(/\/(?<name>[^\/]+)$/); 3 switch (path?.groups?.name) { 4 case 'constructed': 5 event.respondWith(new Response(new Uint8Array([1, 2, 3]))); 6 break; 7 case 'forward': 8 event.respondWith(fetch('/common/text-plain.txt')); 9 break; 10 case 'stream': 11 event.respondWith((async() => { 12 const res = await fetch('/common/text-plain.txt'); 13 const body = await res.body; 14 const reader = await body.getReader(); 15 const stream = new ReadableStream({ 16 async start(controller) { 17 while (true) { 18 const {done, value} = await reader.read(); 19 if (done) 20 break; 21 22 controller.enqueue(value); 23 } 24 controller.close(); 25 reader.releaseLock(); 26 } 27 }); 28 return new Response(stream); 29 })()); 30 break; 31 default: 32 event.respondWith(fetch(event.request)); 33 break; 34 } 35 });