Files
ai-spel-frontend/piper-download-progress.mjs
T
Ein Anderssono 7f77b904ac
Build and publish frontend / publish (push) Successful in 47s
Track Piper model bytes in the worker
2026-10-16 08:02:17 +02:00

33 lines
934 B
JavaScript

export function trackModelDownload(response, {id, postMessage}) {
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;
postMessage({id, type: 'progress', progress: {loaded, total}});
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,
});
}