import * as FSAccess from "./store-directory-handle.js"; self.addEventListener('install', ()=> self.skipWaiting()); // Activate worker immediately); self.addEventListener('activate', ()=> self.clients.claim()); // Become available to all pages); self.addEventListener('fetch', (event) =>event.respondWith(Interceptor(event))); /** @type {(event:{request:Request})=>Promise} */ async function Interceptor(event) { const url = new URL(event.request.url); const pathname = url.pathname.substring(1); let parts = pathname.split("/"); if(parts[0] == "fsx") { parts = parts.slice(1); console.log("intercept:", pathname); if(parts[0] == "room") { parts[parts.length-1] = parts[parts.length-1]+".json"; } const handle = await FSAccess.getDirectoryHandle(); if(handle) { if(event.request.method == "PUT") { const body = await event.request.text(); console.log("PUT intercept", parts, body); const fileHandle = await FSAccess.drilldown(handle, parts, true); if(fileHandle) { const writeable = await fileHandle.createWritable(); await writeable.write(body); await writeable.close(); return new Response("OK", { headers: { 'Content-Type': 'application/javascript', 'Cache-Control': 'no-cache' } }); } else { return new Response("404", {status:404}); } } const fileHandle = await FSAccess.drilldown(handle, parts); if(fileHandle) { const file = await fileHandle.getFile(); const content = await file.text(); return new Response(content, { headers: { 'Content-Type': 'application/javascript', 'Cache-Control': 'no-cache' } }); } } console.log("couldnt find:", pathname); return new Response("404", {status:404}); } else { return fetch(event.request); } }