aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/builtins/js/ReadableStream.js
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-07-01 03:24:16 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-07-01 03:24:16 -0700
commit4812fb8faf7e89dd8cb585f687bd887dc552efe2 (patch)
treea6b0a88ec427f68f4989bedb4bed87ca81daa6c2 /src/bun.js/builtins/js/ReadableStream.js
parente105cfcca8ec86464c33501861d506ec529882b5 (diff)
downloadbun-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.js116
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;