diff --git a/README.md b/README.md index 0c5e2a5..d3bc4ca 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,11 @@ const webReadable = makeByteReadableStreamFromNodeReadable(nodeReadable); // Now you can use webReadable as a WHATWG ReadableStream ``` +## Compatibility + +This is an ECMAScript Module (ESM). + + ## API ### `toWebReadableStream(nodeReadable)` diff --git a/lib/index.ts b/lib/index.ts index 712c7d4..af172eb 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -58,14 +58,7 @@ export function makeByteReadableStreamFromNodeReadable(nodeReadable: Readable): nodeReadable.resume(); }, pull(controller: ReadableByteStreamController) { - if (leftoverChunk) { - processLeftover(controller); - return; - } - if (isNodeStreamEnded) { - controller.close(); - return; - } + processLeftover(controller); }, cancel(reason) { nodeReadable.destroy(reason); diff --git a/test/test.js b/test/test.js index 1061f86..8769ef2 100644 --- a/test/test.js +++ b/test/test.js @@ -37,6 +37,34 @@ describe('makeByteReadableStreamFromFile()', () => { } }); + it('read more data then available #2', async () => { + const nodeReadable = new SourceStream('123'); + try { + const webReadableStream = makeByteReadableStreamFromNodeReadable(nodeReadable); + try { + const streamReader = webReadableStream.getReader({mode: 'byob'}); + try { + + let res; + let buf = new Uint8Array(4); + res = await streamReader.read(buf); + assert.strictEqual(res.done, false, 'result.done'); + assert.equal(res.value.length, 3, 'should indicate only 3 bytes are actually read'); + buf = new Uint8Array(4); + res = await streamReader.read(buf); + assert.strictEqual(res.done, true, 'result.done'); + assert.equal(res.value.length, 0, 'should indicate no more bytes are available'); + } finally { + streamReader.releaseLock(); + } + } finally { + await webReadableStream.cancel(); + } + } finally { + nodeReadable.destroy(); + } + }); + it('read from a streamed data chunk', async () => { const nodeReadable = new SourceStream('\x05peter'); try {