const assert = require('node:assert/strict'); const test = require('node:test'); test('model response progress forwards each downloaded chunk and preserves the response', async () => { const {trackDownloadProgress} = await import('../piper-download-progress.mjs'); const source = new ReadableStream({ start(controller) { controller.enqueue(new Uint8Array([1, 2])); controller.enqueue(new Uint8Array([3, 4, 5])); controller.close(); }, }); const response = new Response(source, {headers: {'content-length': '5'}}); const messages = []; const tracked = trackDownloadProgress(response, {id: 7, postMessage: message => messages.push(message)}); assert.deepEqual([...new Uint8Array(await tracked.arrayBuffer())], [1, 2, 3, 4, 5]); assert.deepEqual(messages.map(message => message.progress), [ {asset: 'model', loaded: 2, total: 5}, {asset: 'model', loaded: 5, total: 5}, ]); assert.ok(messages.every(message => message.id === 7 && message.type === 'progress')); }); test('model response progress works when content length is absent', async () => { const {trackDownloadProgress} = await import('../piper-download-progress.mjs'); const source = new Response(new Uint8Array([1, 2, 3])); const messages = []; const tracked = trackDownloadProgress(source, { id: 9, asset: 'runtime', file: 'runtime.wasm', postMessage: message => messages.push(message), }); assert.equal((await tracked.arrayBuffer()).byteLength, 3); assert.deepEqual(messages.map(message => message.progress), [{asset: 'runtime', file: 'runtime.wasm', loaded: 3, total: 0}]); });