improve fetch intercept
This commit is contained in:
parent
89908827fb
commit
a280e5059f
20
app.js
20
app.js
@ -23,12 +23,11 @@ const H =(type, attributes={}, ...children)=> {
|
||||
const button = H("button");
|
||||
const listRoom = H("ul");
|
||||
|
||||
async function getFolderHandle(dirHandle)
|
||||
/** @type {(handle:boolean)=>Promise<void>} */
|
||||
async function ReloadAndRedraw(handle)
|
||||
{
|
||||
try
|
||||
if(handle)
|
||||
{
|
||||
const workingFolder = await dirHandle.getDirectoryHandle("room");
|
||||
|
||||
const module = await import("./data/room.js");
|
||||
const rooms = module.default();
|
||||
button.innerText = "change directory";
|
||||
@ -50,27 +49,24 @@ async function getFolderHandle(dirHandle)
|
||||
)
|
||||
);
|
||||
})
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (err)
|
||||
else
|
||||
{
|
||||
button.innerText = "select directory";
|
||||
console.error("Folder selection cancelled or failed:", err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
let handle = false;
|
||||
|
||||
handle = await FSHandle.getDirectoryHandle();
|
||||
await getFolderHandle(handle);
|
||||
await ReloadAndRedraw(handle);
|
||||
|
||||
button.addEventListener("click", async()=>
|
||||
{
|
||||
const directory = await globalThis.showDirectoryPicker();
|
||||
await FSHandle.setDirectoryHandle(directory);
|
||||
await getFolderHandle(directory);
|
||||
handle = await FSHandle.getDirectoryHandle();
|
||||
await ReloadAndRedraw(handle);
|
||||
});
|
||||
|
||||
document.body.appendChild(button);
|
||||
|
||||
@ -8,13 +8,15 @@ let handle = false;
|
||||
async function Interceptor(event)
|
||||
{
|
||||
const url = new URL(event.request.url);
|
||||
const pathname = url.pathname.substring(1)
|
||||
const extension = pathname.substring(pathname.lastIndexOf('.') + 1);
|
||||
const pathname = url.pathname.substring(1);
|
||||
const parts = pathname.split("/");
|
||||
|
||||
if(parts[0] == "data" || parts[0] == "room")
|
||||
{
|
||||
const extension = pathname.substring(pathname.lastIndexOf('.') + 1);
|
||||
// Intercept only JavaScript files
|
||||
if ( extension == "js" || extension == "json" )
|
||||
{
|
||||
console.log('[Service Worker] Intercepted JS request:', url.href);
|
||||
if(!handle)
|
||||
{
|
||||
handle = await FSAccess.getDirectoryHandle();
|
||||
@ -23,7 +25,6 @@ async function Interceptor(event)
|
||||
{
|
||||
try
|
||||
{
|
||||
const parts = pathname.split("/");
|
||||
let filePointer = handle;
|
||||
for(let i=0; i<parts.length-1; i++)
|
||||
{
|
||||
@ -32,6 +33,7 @@ async function Interceptor(event)
|
||||
filePointer = await filePointer.getFileHandle(parts[parts.length-1], {create: false});
|
||||
const file = await filePointer.getFile();
|
||||
const content = await file.text();
|
||||
|
||||
return new Response(content, {
|
||||
headers: {
|
||||
'Content-Type': 'application/javascript',
|
||||
@ -46,6 +48,8 @@ async function Interceptor(event)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
return fetch(event.request);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user