This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
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,
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user