diff options
author | 2022-07-01 03:24:16 -0700 | |
---|---|---|
committer | 2022-07-01 03:24:16 -0700 | |
commit | 4812fb8faf7e89dd8cb585f687bd887dc552efe2 (patch) | |
tree | a6b0a88ec427f68f4989bedb4bed87ca81daa6c2 /src/bun.js/builtins/js/ReadableStream.js | |
parent | e105cfcca8ec86464c33501861d506ec529882b5 (diff) | |
download | bun-4812fb8faf7e89dd8cb585f687bd887dc552efe2.tar.gz bun-4812fb8faf7e89dd8cb585f687bd887dc552efe2.tar.zst bun-4812fb8faf7e89dd8cb585f687bd887dc552efe2.zip |
Fix failing tests for ReadableStream -> {text, arrayBuffer, blob}
Diffstat (limited to 'src/bun.js/builtins/js/ReadableStream.js')
-rw-r--r-- | src/bun.js/builtins/js/ReadableStream.js | 116 |
1 files changed, 19 insertions, 97 deletions
diff --git a/src/bun.js/builtins/js/ReadableStream.js b/src/bun.js/builtins/js/ReadableStream.js index 95f379be5..fbd8148ba 100644 --- a/src/bun.js/builtins/js/ReadableStream.js +++ b/src/bun.js/builtins/js/ReadableStream.js @@ -104,129 +104,51 @@ function readableStreamToArray(stream) { // this is a direct stream var underlyingSource = @getByIdDirectPrivate(stream, "underlyingSource"); - if (underlyingSource !== @undefined) { - const promise = @initializeArrayStream.@call(stream, underlyingSource, @undefined); - var reader = stream.getReader(); - return (async function() { - while (@getByIdDirectPrivate(stream, "state") === @streamReadable) { - var thisResult = await reader.read(); - if (thisResult.done) { - break; - } - } - - try { - reader.releaseLock(); - } catch(e) { - } - - return await promise; - })(); + if (underlyingSource !== @undefined) { + return @readableStreamToArrayDirect(stream, underlyingSource); } - var reader = stream.getReader(); - var manyResult = reader.readMany(); - - async function processManyResult(result) { - - if (result.done) { - return []; - } - - var chunks = result.value || []; - - while (true) { - var thisResult = await reader.read(); - if (thisResult.done) { - break; - } - chunks = chunks.concat(thisResult.value); - } + return @readableStreamIntoArray(stream); +} - return chunks; - } +@globalPrivate +function readableStreamToText(stream) { + "use strict"; - if (manyResult && @isPromise(manyResult)) { - return manyResult.@then(processManyResult); + // this is a direct stream + var underlyingSource = @getByIdDirectPrivate(stream, "underlyingSource"); + if (underlyingSource !== @undefined) { + return @readableStreamToTextDirect(stream, underlyingSource); } - return processManyResult(manyResult); + return @readableStreamIntoText(stream); } @globalPrivate -function readableStreamToText(stream) { +function readableStreamToArrayBuffer(stream) { "use strict"; // this is a direct stream var underlyingSource = @getByIdDirectPrivate(stream, "underlyingSource"); - if (underlyingSource !== @undefined) { - - const promise = @initializeTextStream.@call(stream, underlyingSource, @undefined); - var reader = stream.getReader(); - return (async function() { - while (@getByIdDirectPrivate(stream, "state") === @streamReadable) { - var thisResult = await reader.read(); - if (thisResult.done) { - break; - } - } - try { - reader.releaseLock(); - } catch(e) { - } - - return await promise; - })(); - } - - // TODO: optimize this to skip the extra ArrayBuffer - var toArrayBuffer = globalThis.Bun.readableStreamToArrayBuffer(stream); - if (toArrayBuffer && @isPromise(toArrayBuffer)) { - return toArrayBuffer.@then(function(arrayBuffer) { - return new globalThis.TextDecoder().decode(arrayBuffer); - }); + if (underlyingSource !== @undefined) { + return @readableStreamToArrayBufferDirect(stream, underlyingSource); } - return new globalThis.TextDecoder().decode(arrayBuffer); + return globalThis.Bun.readableStreamToArray(stream).@then(globalThis.Bun.concatArrayBuffers); } @globalPrivate function readableStreamToJSON(stream) { "use strict"; - return @readableStreamToText(stream).@then(globalThis.JSON.parse); + return globalThis.Bun.readableStreamToText(stream).@then(globalThis.JSON.parse); } @globalPrivate function readableStreamToBlob(stream) { "use strict"; - - var underlyingSource = @getByIdDirectPrivate(stream, "underlyingSource"); - if (underlyingSource != @undefined) { - var toArrayBuffer = globalThis.Bun.readableStreamToArrayBuffer(stream); - if (toArrayBuffer && @isPromise(toArrayBuffer)) { - return toArrayBuffer.@then(function(arrayBuffer) { - return new globalThis.Blob([arrayBuffer]); - }); - } - - return new globalThis.Blob([toArrayBuffer]); - } - - - const array = @readableStreamToArray(stream); - if (array === null) { - return new globalThis.Blob(); - } - - return array.@then(function(chunks) { - if (chunks === null || chunks.length === 0) { - return new globalThis.Blob(); - } - - return new globalThis.Blob(chunks); - }); + return @Promise.resolve(globalThis.Bun.readableStreamToArray(stream)).@then(array => new Blob(array)); } @globalPrivate @@ -459,7 +381,7 @@ function pipeTo(destination) // FIXME: https://bugs.webkit.org/show_bug.cgi?id=159869. // Built-in generator should be able to parse function signature to compute the function length correctly. - let options = arguments[1]; + let options = @argument(1); let preventClose = false; let preventAbort = false; |