export function trackDownloadProgress(response, {id, postMessage, asset = 'model', file}) { const reader = response.body?.getReader?.(); if (!reader || typeof ReadableStream !== 'function' || typeof Response !== 'function') return response; const total = Number(response.headers.get('content-length')) || 0; let loaded = 0; const body = new ReadableStream({ async pull(controller) { try { const {done, value} = await reader.read(); if (done) { controller.close(); return; } loaded += value.byteLength; const progress = {asset, loaded, total}; if (file) progress.file = file; postMessage({id, type: 'progress', progress}); controller.enqueue(value); } catch (error) { controller.error(error); } }, cancel(reason) { return reader.cancel(reason); }, }); return new Response(body, { status: response.status, statusText: response.statusText, headers: response.headers, }); }