aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-06-02 18:36:10 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-06-02 18:36:10 -0700
commit549e5bbbcdbfec70b1649b1400b2bb59b4791974 (patch)
treeadb1549c670e66b175722824f7614cbfddb6d97e
parent57ad68a4b096d4cbe2b7a7e0373d546444ff7602 (diff)
downloadbun-549e5bbbcdbfec70b1649b1400b2bb59b4791974.tar.gz
bun-549e5bbbcdbfec70b1649b1400b2bb59b4791974.tar.zst
bun-549e5bbbcdbfec70b1649b1400b2bb59b4791974.zip
Handle empty files/blobs
-rw-r--r--src/javascript/jsc/bindings/BlobReadableStreamSource.cpp164
-rw-r--r--src/javascript/jsc/bindings/BlobReadableStreamSource.h51
-rw-r--r--src/javascript/jsc/bindings/BunBuiltinNames.h1
-rw-r--r--src/javascript/jsc/bindings/ReadableStreamBuiltins.cpp33
-rw-r--r--src/javascript/jsc/bindings/ReadableStreamBuiltins.h8
-rw-r--r--src/javascript/jsc/bindings/ReadableStreamInternalsBuiltins.cpp4
-rw-r--r--src/javascript/jsc/bindings/ZigGlobalObject.cpp4
-rw-r--r--src/javascript/jsc/bindings/bindings.cpp8
-rw-r--r--src/javascript/jsc/bindings/builtins/js/ReadableStream.js28
-rw-r--r--src/javascript/jsc/bindings/builtins/js/ReadableStreamInternals.js2
-rw-r--r--src/javascript/jsc/webcore/response.zig147
11 files changed, 54 insertions, 396 deletions
diff --git a/src/javascript/jsc/bindings/BlobReadableStreamSource.cpp b/src/javascript/jsc/bindings/BlobReadableStreamSource.cpp
deleted file mode 100644
index b697f62d9..000000000
--- a/src/javascript/jsc/bindings/BlobReadableStreamSource.cpp
+++ /dev/null
@@ -1,164 +0,0 @@
-#include "BlobReadableStreamSource.h"
-#include "ReadableStream.h"
-#include "JavaScriptCore/JSCInlines.h"
-
-extern "C" void BlobStore__ref(void*);
-extern "C" void BlobStore__deref(void*);
-
-extern "C" bool BlobStore__requestRead(void* store, void* streamer, WeakPtr<WebCore::BlobReadableStreamSource> ctx, size_t offset, size_t size);
-extern "C" bool BlobStore__requestStart(void* store, void** streamer, WeakPtr<WebCore::BlobReadableStreamSource> ctx, size_t offset, size_t size);
-extern "C" bool BlobReadableStreamSource_isCancelled(WeakPtr<WebCore::BlobReadableStreamSource> source)
-{
- if (source)
- return source->isCancelled();
-
- return true;
-}
-extern "C" void BlobStore__onClose(RefPtr<WebCore::BlobReadableStreamSource> source)
-{
- if (!source)
- return;
- source->close();
-}
-extern "C" void BlobStore__onError(RefPtr<WebCore::BlobReadableStreamSource> source, const SystemError* error, Zig::GlobalObject* globalObject)
-{
- if (!source || source->isCancelled())
- return;
-
- source->error(JSC::JSValue::decode(SystemError__toErrorInstance(error, globalObject)));
-}
-extern "C" bool BlobStore__onRead(RefPtr<WebCore::BlobReadableStreamSource> source, const uint8_t* ptr, size_t read)
-{
- if (!source)
- return false;
-
- auto result = source->enqueue(ptr, read);
- source->deref();
- return result;
-}
-
-extern "C" bool BlobStore__onReadExternal(RefPtr<WebCore::BlobReadableStreamSource> source, uint8_t* ptr, size_t read, void* ctx, JSTypedArrayBytesDeallocator bytesDeallocator)
-{
- if (!source) {
- bytesDeallocator(ctx, ptr);
- return false;
- }
-
- auto result = source->enqueue(ptr, read, ctx, bytesDeallocator);
- source->deref();
- return result;
-}
-
-extern "C" JSC__JSValue ReadableStream__empty(Zig::GlobalObject* globalObject)
-{
- auto source = WebCore::SimpleReadableStreamSource::create();
- auto result = WebCore::ReadableStream::create(*globalObject, WTFMove(source));
- if (UNLIKELY(result.hasException())) {
- auto scope = DECLARE_THROW_SCOPE(globalObject->vm());
- result.releaseException();
- return JSC::JSValue::encode(JSC::jsUndefined());
- }
- source->close();
- return JSC::JSValue::encode(WebCore::toJSNewlyCreated(globalObject, globalObject, result.releaseReturnValue()));
-}
-
-extern "C" JSC__JSValue ReadableStream__fromBlob(Zig::GlobalObject* globalObject, void* store, size_t offset, size_t size)
-{
- auto source = WebCore::BlobReadableStreamSource::create(store, offset, size);
-
- auto result = WebCore::ReadableStream::create(*globalObject, WTFMove(source));
- if (UNLIKELY(result.hasException())) {
- auto scope = DECLARE_THROW_SCOPE(globalObject->vm());
- result.releaseException();
- return JSC::JSValue::encode(JSC::jsUndefined());
- }
-
- return JSC::JSValue::encode(WebCore::toJSNewlyCreated(globalObject, globalObject, result.releaseReturnValue()));
-}
-
-namespace WebCore {
-
-Ref<BlobReadableStreamSource> BlobReadableStreamSource::create(void* store, size_t offset, size_t size)
-{
- return adoptRef(*new BlobReadableStreamSource(store, offset, size));
-}
-
-void BlobReadableStreamSource::doStart()
-{
- RefPtr<BlobReadableStreamSource> weakThis = this;
- weakThis->ref();
-
- if (!BlobStore__requestStart(m_store, &m_streamer, weakThis, m_offset, m_size > m_offset ? m_size - m_offset : 0)) {
- if (m_promise) {
- close();
- }
- return;
- }
-}
-void BlobReadableStreamSource::doPull()
-{
- RefPtr<BlobReadableStreamSource> weakThis = this;
- weakThis->ref();
- if (!BlobStore__requestRead(m_store, m_streamer, weakThis, m_offset, m_size > m_offset ? m_size - m_offset : 0)) {
- close();
-
- return;
- }
-}
-
-void BlobReadableStreamSource::doCancel()
-{
- m_isCancelled = true;
-}
-
-void BlobReadableStreamSource::close()
-{
- if (!m_isCancelled)
- controller().close();
-}
-
-void BlobReadableStreamSource::enqueue(JSC::JSValue value)
-{
- if (!m_isCancelled)
- controller().enqueue(value);
-}
-
-bool BlobReadableStreamSource::enqueue(const uint8_t* ptr, size_t size)
-{
-
- if (m_isCancelled)
- return false;
-
- auto arrayBuffer = JSC::ArrayBuffer::tryCreate(ptr, size);
- if (!arrayBuffer)
- return false;
- controller().enqueue(WTFMove(arrayBuffer));
- this->m_offset += size;
- return true;
-}
-
-bool BlobReadableStreamSource::enqueue(uint8_t* ptr, size_t read, void* ctx, JSTypedArrayBytesDeallocator bytesDeallocator)
-{
-
- if (m_isCancelled) {
- bytesDeallocator(ctx, ptr);
- return false;
- }
-
- auto buffer = ArrayBuffer::createFromBytes(ptr, read, createSharedTask<void(void*)>([bytesDeallocator, ctx](void* p) {
- if (bytesDeallocator) {
- bytesDeallocator(p, ctx);
- }
- }));
-
- controller().enqueue(WTFMove(buffer));
- this->m_offset += read;
- return true;
-}
-
-BlobReadableStreamSource::~BlobReadableStreamSource()
-{
- if (m_store)
- BlobStore__deref(m_store);
-}
-}
diff --git a/src/javascript/jsc/bindings/BlobReadableStreamSource.h b/src/javascript/jsc/bindings/BlobReadableStreamSource.h
deleted file mode 100644
index a0ce35b59..000000000
--- a/src/javascript/jsc/bindings/BlobReadableStreamSource.h
+++ /dev/null
@@ -1,51 +0,0 @@
-#pragma once
-
-#include "root.h"
-#include "ReadableStreamSource.h"
-#include <wtf/WeakPtr.h>
-
-namespace WebCore {
-
-class BlobReadableStreamSource
- : public ReadableStreamSource,
- public CanMakeWeakPtr<BlobReadableStreamSource> {
-public:
- static Ref<BlobReadableStreamSource> create(void* store, size_t offset, size_t size);
-
- void close();
- void enqueue(JSC::JSValue);
- bool enqueue(const uint8_t* ptr, size_t length);
- bool enqueue(uint8_t* ptr, size_t read, void* deallocator, JSTypedArrayBytesDeallocator bytesDeallocator);
- bool isCancelled() const { return m_isCancelled; }
-
- void* streamer() const { return m_streamer; }
-
-private:
- BlobReadableStreamSource(void* store, size_t offset, size_t size)
- : ReadableStreamSource()
- , m_store(store)
- , m_offset(offset)
- , m_size(size)
- , m_isCancelled(false)
- {
- }
- ~BlobReadableStreamSource();
-
- // ReadableStreamSource
- void setActive() final
- {
- }
- void setInactive() final {}
- void doStart() final;
- void doPull() final;
- void doCancel() final;
-
- bool m_isCancelled { false };
-
- uint64_t m_size = 0;
- uint64_t m_offset = 0;
- void* m_store = nullptr;
- void* m_streamer = nullptr;
-};
-
-}
diff --git a/src/javascript/jsc/bindings/BunBuiltinNames.h b/src/javascript/jsc/bindings/BunBuiltinNames.h
index e849f914d..23bbad2ca 100644
--- a/src/javascript/jsc/bindings/BunBuiltinNames.h
+++ b/src/javascript/jsc/bindings/BunBuiltinNames.h
@@ -69,6 +69,7 @@ using namespace JSC;
macro(cork) \
macro(createFIFO) \
macro(createNativeReadableStream) \
+ macro(createEmptyReadableStream) \
macro(createReadableStream) \
macro(createUninitializedArrayBuffer) \
macro(createWritableStreamFromInternal) \
diff --git a/src/javascript/jsc/bindings/ReadableStreamBuiltins.cpp b/src/javascript/jsc/bindings/ReadableStreamBuiltins.cpp
index 68155a460..47fa24988 100644
--- a/src/javascript/jsc/bindings/ReadableStreamBuiltins.cpp
+++ b/src/javascript/jsc/bindings/ReadableStreamBuiltins.cpp
@@ -117,9 +117,25 @@ const char* const s_readableStreamInitializeReadableStreamCode =
"})\n" \
;
+const JSC::ConstructAbility s_readableStreamCreateEmptyReadableStreamCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
+const JSC::ConstructorKind s_readableStreamCreateEmptyReadableStreamCodeConstructorKind = JSC::ConstructorKind::None;
+const int s_readableStreamCreateEmptyReadableStreamCodeLength = 178;
+static const JSC::Intrinsic s_readableStreamCreateEmptyReadableStreamCodeIntrinsic = JSC::NoIntrinsic;
+const char* const s_readableStreamCreateEmptyReadableStreamCode =
+ "(function () {\n" \
+ " var stream = new @ReadableStream({\n" \
+ " pull() {},\n" \
+ " start() {},\n" \
+ " cancel() {},\n" \
+ " });\n" \
+ " @readableStreamClose(stream);\n" \
+ " return stream;\n" \
+ "})\n" \
+;
+
const JSC::ConstructAbility s_readableStreamCreateNativeReadableStreamCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
const JSC::ConstructorKind s_readableStreamCreateNativeReadableStreamCodeConstructorKind = JSC::ConstructorKind::None;
-const int s_readableStreamCreateNativeReadableStreamCodeLength = 3152;
+const int s_readableStreamCreateNativeReadableStreamCodeLength = 2956;
static const JSC::Intrinsic s_readableStreamCreateNativeReadableStreamCodeIntrinsic = JSC::NoIntrinsic;
const char* const s_readableStreamCreateNativeReadableStreamCode =
"(function (nativePtr, nativeType, autoAllocateChunkSize) {\n" \
@@ -135,7 +151,6 @@ const char* const s_readableStreamCreateNativeReadableStreamCode =
" var {c, v} = this;\n" \
" this.c = @undefined;\n" \
" this.v = @undefined;\n" \
- " closer[0] = false;\n" \
" handleResult(val, c, v);\n" \
" }\n" \
" \n" \
@@ -204,19 +219,7 @@ const char* const s_readableStreamCreateNativeReadableStreamCode =
"\n" \
" //\n" \
" if (chunkSize === 0) {\n" \
- " return new @ReadableStream({\n" \
- " start(controller) {\n" \
- " controller.close();\n" \
- " },\n" \
- "\n" \
- " pull() {\n" \
- "\n" \
- " },\n" \
- "\n" \
- " cancel() {\n" \
- "\n" \
- " },\n" \
- " });\n" \
+ " return @createEmptyReadableStream();\n" \
" }\n" \
"\n" \
" var instance = new Prototype(nativePtr, chunkSize);\n" \
diff --git a/src/javascript/jsc/bindings/ReadableStreamBuiltins.h b/src/javascript/jsc/bindings/ReadableStreamBuiltins.h
index 2cd7f6b6e..34ad16846 100644
--- a/src/javascript/jsc/bindings/ReadableStreamBuiltins.h
+++ b/src/javascript/jsc/bindings/ReadableStreamBuiltins.h
@@ -51,6 +51,10 @@ extern const char* const s_readableStreamInitializeReadableStreamCode;
extern const int s_readableStreamInitializeReadableStreamCodeLength;
extern const JSC::ConstructAbility s_readableStreamInitializeReadableStreamCodeConstructAbility;
extern const JSC::ConstructorKind s_readableStreamInitializeReadableStreamCodeConstructorKind;
+extern const char* const s_readableStreamCreateEmptyReadableStreamCode;
+extern const int s_readableStreamCreateEmptyReadableStreamCodeLength;
+extern const JSC::ConstructAbility s_readableStreamCreateEmptyReadableStreamCodeConstructAbility;
+extern const JSC::ConstructorKind s_readableStreamCreateEmptyReadableStreamCodeConstructorKind;
extern const char* const s_readableStreamCreateNativeReadableStreamCode;
extern const int s_readableStreamCreateNativeReadableStreamCodeLength;
extern const JSC::ConstructAbility s_readableStreamCreateNativeReadableStreamCodeConstructAbility;
@@ -82,6 +86,7 @@ extern const JSC::ConstructorKind s_readableStreamLockedCodeConstructorKind;
#define WEBCORE_FOREACH_READABLESTREAM_BUILTIN_DATA(macro) \
macro(initializeReadableStream, readableStreamInitializeReadableStream, 2) \
+ macro(createEmptyReadableStream, readableStreamCreateEmptyReadableStream, 0) \
macro(createNativeReadableStream, readableStreamCreateNativeReadableStream, 3) \
macro(cancel, readableStreamCancel, 1) \
macro(getReader, readableStreamGetReader, 1) \
@@ -91,6 +96,7 @@ extern const JSC::ConstructorKind s_readableStreamLockedCodeConstructorKind;
macro(locked, readableStreamLocked, 0) \
#define WEBCORE_BUILTIN_READABLESTREAM_INITIALIZEREADABLESTREAM 1
+#define WEBCORE_BUILTIN_READABLESTREAM_CREATEEMPTYREADABLESTREAM 1
#define WEBCORE_BUILTIN_READABLESTREAM_CREATENATIVEREADABLESTREAM 1
#define WEBCORE_BUILTIN_READABLESTREAM_CANCEL 1
#define WEBCORE_BUILTIN_READABLESTREAM_GETREADER 1
@@ -101,6 +107,7 @@ extern const JSC::ConstructorKind s_readableStreamLockedCodeConstructorKind;
#define WEBCORE_FOREACH_READABLESTREAM_BUILTIN_CODE(macro) \
macro(readableStreamInitializeReadableStreamCode, initializeReadableStream, ASCIILiteral(), s_readableStreamInitializeReadableStreamCodeLength) \
+ macro(readableStreamCreateEmptyReadableStreamCode, createEmptyReadableStream, ASCIILiteral(), s_readableStreamCreateEmptyReadableStreamCodeLength) \
macro(readableStreamCreateNativeReadableStreamCode, createNativeReadableStream, ASCIILiteral(), s_readableStreamCreateNativeReadableStreamCodeLength) \
macro(readableStreamCancelCode, cancel, ASCIILiteral(), s_readableStreamCancelCodeLength) \
macro(readableStreamGetReaderCode, getReader, ASCIILiteral(), s_readableStreamGetReaderCodeLength) \
@@ -111,6 +118,7 @@ extern const JSC::ConstructorKind s_readableStreamLockedCodeConstructorKind;
#define WEBCORE_FOREACH_READABLESTREAM_BUILTIN_FUNCTION_NAME(macro) \
macro(cancel) \
+ macro(createEmptyReadableStream) \
macro(createNativeReadableStream) \
macro(getReader) \
macro(initializeReadableStream) \
diff --git a/src/javascript/jsc/bindings/ReadableStreamInternalsBuiltins.cpp b/src/javascript/jsc/bindings/ReadableStreamInternalsBuiltins.cpp
index b7ae6f1df..b6481d5f9 100644
--- a/src/javascript/jsc/bindings/ReadableStreamInternalsBuiltins.cpp
+++ b/src/javascript/jsc/bindings/ReadableStreamInternalsBuiltins.cpp
@@ -895,7 +895,7 @@ const char* const s_readableStreamInternalsReadableStreamDefaultControllerPullCo
const JSC::ConstructAbility s_readableStreamInternalsReadableStreamDefaultControllerCloseCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
const JSC::ConstructorKind s_readableStreamInternalsReadableStreamDefaultControllerCloseCodeConstructorKind = JSC::ConstructorKind::None;
-const int s_readableStreamInternalsReadableStreamDefaultControllerCloseCodeLength = 346;
+const int s_readableStreamInternalsReadableStreamDefaultControllerCloseCodeLength = 342;
static const JSC::Intrinsic s_readableStreamInternalsReadableStreamDefaultControllerCloseCodeIntrinsic = JSC::NoIntrinsic;
const char* const s_readableStreamInternalsReadableStreamDefaultControllerCloseCode =
"(function (controller)\n" \
@@ -904,7 +904,7 @@ const char* const s_readableStreamInternalsReadableStreamDefaultControllerCloseC
"\n" \
" @assert(@readableStreamDefaultControllerCanCloseOrEnqueue(controller));\n" \
" @putByIdDirectPrivate(controller, \"closeRequested\", true);\n" \
- " if (!@getByIdDirectPrivate(controller, \"queue\")?.isNotEmpty())\n" \
+ " if (@getByIdDirectPrivate(controller, \"queue\")?.isEmpty())\n" \
" @readableStreamClose(@getByIdDirectPrivate(controller, \"controlledReadableStream\"));\n" \
"})\n" \
;
diff --git a/src/javascript/jsc/bindings/ZigGlobalObject.cpp b/src/javascript/jsc/bindings/ZigGlobalObject.cpp
index c3ba74cf4..692c69b96 100644
--- a/src/javascript/jsc/bindings/ZigGlobalObject.cpp
+++ b/src/javascript/jsc/bindings/ZigGlobalObject.cpp
@@ -1353,8 +1353,10 @@ void GlobalObject::addBuiltinGlobals(JSC::VM& vm)
extraStaticGlobals.releaseBuffer();
putDirectBuiltinFunction(vm, this, builtinNames.createFIFOPrivateName(), streamInternalsCreateFIFOCodeGenerator(vm), PropertyAttribute::Builtin | PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly);
- putDirectNativeFunction(vm, this, builtinNames.createUninitializedArrayBufferPrivateName(), 1, functionCreateUninitializedArrayBuffer, NoIntrinsic, PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly | PropertyAttribute::Function);
putDirectBuiltinFunction(vm, this, builtinNames.createNativeReadableStreamPrivateName(), readableStreamCreateNativeReadableStreamCodeGenerator(vm), PropertyAttribute::Builtin | PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly);
+ putDirectBuiltinFunction(vm, this, builtinNames.createEmptyReadableStreamPrivateName(), readableStreamCreateEmptyReadableStreamCodeGenerator(vm), PropertyAttribute::Builtin | PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly);
+
+ putDirectNativeFunction(vm, this, builtinNames.createUninitializedArrayBufferPrivateName(), 1, functionCreateUninitializedArrayBuffer, NoIntrinsic, PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly | PropertyAttribute::Function);
putDirectCustomAccessor(vm, JSC::Identifier::fromString(vm, "process"_s), JSC::CustomGetterSetter::create(vm, property_lazyProcessGetter, property_lazyProcessSetter),
JSC::PropertyAttribute::CustomAccessor | 0);
diff --git a/src/javascript/jsc/bindings/bindings.cpp b/src/javascript/jsc/bindings/bindings.cpp
index c27752b7b..7505a8a8f 100644
--- a/src/javascript/jsc/bindings/bindings.cpp
+++ b/src/javascript/jsc/bindings/bindings.cpp
@@ -889,6 +889,14 @@ static JSC::JSValue doLink(JSC__JSGlobalObject* globalObject, JSC::JSValue modul
return JSC::linkAndEvaluateModule(globalObject, moduleKey, JSC::JSValue());
}
+JSC__JSValue ReadableStream__empty(Zig::GlobalObject* globalObject)
+{
+ auto& vm = globalObject->vm();
+ auto clientData = WebCore::clientData(vm);
+ auto* function = globalObject->getDirect(vm, clientData->builtinNames().createEmptyReadableStreamPrivateName()).getObject();
+ return JSValue::encode(JSC::call(globalObject, function, JSC::ArgList(), "ReadableStream.create"_s));
+}
+
JSC__JSValue JSC__JSValue__createRangeError(const ZigString* message, const ZigString* arg1,
JSC__JSGlobalObject* globalObject)
{
diff --git a/src/javascript/jsc/bindings/builtins/js/ReadableStream.js b/src/javascript/jsc/bindings/builtins/js/ReadableStream.js
index 4d7113888..f3ab66d5c 100644
--- a/src/javascript/jsc/bindings/builtins/js/ReadableStream.js
+++ b/src/javascript/jsc/bindings/builtins/js/ReadableStream.js
@@ -89,6 +89,17 @@ function initializeReadableStream(underlyingSource, strategy)
}
@globalPrivate
+function createEmptyReadableStream() {
+ var stream = new @ReadableStream({
+ pull() {},
+ start() {},
+ cancel() {},
+ });
+ @readableStreamClose(stream);
+ return stream;
+}
+
+@globalPrivate
function createNativeReadableStream(nativePtr, nativeType, autoAllocateChunkSize) {
"use strict";
var cached = globalThis[Symbol.for("Bun.nativeReadableStreamPrototype")] ||= new @Map;
@@ -96,7 +107,7 @@ function createNativeReadableStream(nativePtr, nativeType, autoAllocateChunkSize
if (Prototype === @undefined) {
var [pull, start, cancel, setClose, deinit] = globalThis[Symbol.for("Bun.lazy")](nativeType);
var closer = [false];
-var handleResult;
+ var handleResult;
function handleNativeReadableStreamPromiseResult(val) {
"use strict";
var {c, v} = this;
@@ -104,7 +115,6 @@ var handleResult;
this.v = @undefined;
handleResult(val, c, v);
}
-
handleResult = function handleResult(result, controller, view) {
"use strict";
@@ -170,19 +180,7 @@ var handleResult;
// empty file, no need for native back-and-forth on this
if (chunkSize === 0) {
- return new @ReadableStream({
- start(controller) {
- controller.close();
- },
-
- pull() {
-
- },
-
- cancel() {
-
- },
- });
+ return @createEmptyReadableStream();
}
var instance = new Prototype(nativePtr, chunkSize);
diff --git a/src/javascript/jsc/bindings/builtins/js/ReadableStreamInternals.js b/src/javascript/jsc/bindings/builtins/js/ReadableStreamInternals.js
index f441858cc..18e82262c 100644
--- a/src/javascript/jsc/bindings/builtins/js/ReadableStreamInternals.js
+++ b/src/javascript/jsc/bindings/builtins/js/ReadableStreamInternals.js
@@ -691,7 +691,7 @@ function readableStreamDefaultControllerClose(controller)
@assert(@readableStreamDefaultControllerCanCloseOrEnqueue(controller));
@putByIdDirectPrivate(controller, "closeRequested", true);
- if (!@getByIdDirectPrivate(controller, "queue")?.isNotEmpty())
+ if (@getByIdDirectPrivate(controller, "queue")?.isEmpty())
@readableStreamClose(@getByIdDirectPrivate(controller, "controlledReadableStream"));
}
diff --git a/src/javascript/jsc/webcore/response.zig b/src/javascript/jsc/webcore/response.zig
index f72ac5989..d85139525 100644
--- a/src/javascript/jsc/webcore/response.zig
+++ b/src/javascript/jsc/webcore/response.zig
@@ -1557,153 +1557,6 @@ pub const Blob = struct {
is_all_ascii: ?bool = null,
allocator: std.mem.Allocator,
- // 2 MB ought to be enough
- pub const max_chunk_size = 1024 * 1024 * 2;
-
- pub export fn BlobStore__ref(ptr: *anyopaque) void {
- var this = bun.cast(*Store, ptr);
- this.ref();
- }
-
- pub export fn BlobStore__deref(ptr: *anyopaque) void {
- var this = bun.cast(*Store, ptr);
- this.deref();
- }
-
- // pub const BlobStoreStreamer = Pointer
- extern fn BlobStore__onRead(source: ?*anyopaque, ptr: ?[*]const u8, len: usize) bool;
- extern fn BlobStore__onError(source: ?*anyopaque, system_error: *const JSC.SystemError, global: *JSGlobalObject) void;
- extern fn BlobReadableStreamSource_isCancelled(source: ?*anyopaque) bool;
- extern fn BlobStore__onReadExternal(source: ?*anyopaque, ptr: [*]u8, read: usize, deallocator: ?*anyopaque, deallocator: JSC.C.JSTypedArrayBytesDeallocator) bool;
-
- pub export fn BlobStore__onFinish(store: *Store, stream: ?*anyopaque) void {
- _ = store;
- _ = stream;
- const fd = @intCast(JSC.Node.FileDescriptor, @ptrToInt(stream));
- _ = fd;
- }
-
- pub export fn BlobStore__requestRead(
- store: *Blob.Store,
- stream: ReadableStream.StreamTag,
- ctx: ?*anyopaque,
- offset: usize,
- length: usize,
- ) bool {
- _ = store;
- _ = stream;
- _ = ctx;
- _ = offset;
- _ = length;
- return false;
- // _ = stream;
- // store.ref();
- // defer store.deref();
- // if (comptime JSC.is_bindgen) unreachable;
- // switch (store.data) {
- // .bytes => |*bytes| {
- // var slice = bytes.slice();
- // var base = slice[@minimum(offset, slice.len)..];
- // slice = base;
- // slice = if (length > 0)
- // slice[0..@minimum(@minimum(slice.len, length), max_chunk_size)]
- // else
- // slice[0..@minimum(slice.len, max_chunk_size)];
- // if (slice.len == 0)
- // return false;
-
- // const has_more = base.len > slice.len;
-
- // return BlobStore__onRead(ctx, slice.ptr, slice.len) and has_more;
- // },
- // .file => |*file| {
- // _ = file;
- // const fd = stream.fd();
-
- // // invalid fd
- // if (fd == std.math.maxInt(@TypeOf(fd))) {
- // return false;
- // }
- // const auto_close = file.pathlike == .path;
-
- // const chunk_size = if (length > 0) @minimum(length, max_chunk_size) else max_chunk_size;
-
- // const this_chunk_size = if (file.max_size > 0)
- // @minimum(chunk_size, file.max_size)
- // else if (std.os.S.ISFIFO(file.mode))
- // fifo_chunk_size
- // else
- // chunk_size;
-
- // var buf = bun.default_allocator.alloc(
- // u8,
- // this_chunk_size,
- // ) catch {
- // const err = JSC.SystemError{
- // .code = ZigString.init("ENOMEM"),
- // .path = if (file.pathlike == .path)
- // ZigString.init(file.pathlike.path.slice())
- // else
- // ZigString.Empty,
- // .message = ZigString.init("Out of memory"),
- // .syscall = ZigString.init("malloc"),
- // };
- // BlobStore__onError(ctx, &err, JSC.VirtualMachine.vm.global);
-
- // if (auto_close) {
- // _ = JSC.Node.Syscall.close(fd);
- // }
- // return false;
- // };
- // },
- // }
-
- // return false;
- }
-
- const fifo_chunk_size = 512;
- pub export fn BlobStore__requestStart(
- store: *Blob.Store,
- streamer: *ReadableStream.StreamTag,
- ctx: ?*anyopaque,
- offset: usize,
- length: usize,
- ) bool {
- _ = store;
- _ = streamer;
- _ = ctx;
- _ = offset;
- _ = length;
- return false;
- // store.ref();
- // defer store.deref();
- // if (comptime JSC.is_bindgen) unreachable;
- // const chunk_size = if (length > 0) @minimum(length, max_chunk_size) else max_chunk_size;
- // switch (store.data) {
- // .bytes => |*bytes| {
- // var slice = bytes.slice();
- // var base = slice[@minimum(offset, slice.len)..];
- // slice = base;
- // slice = slice[0..@minimum(slice.len, chunk_size)];
- // if (slice.len == 0)
- // return false;
-
- // const has_more = base.len > slice.len;
-
- // return BlobStore__onRead(ctx, slice.ptr, slice.len) and has_more;
- // },
-
- }
-
- comptime {
- if (!JSC.is_bindgen) {
- _ = BlobStore__ref;
- _ = BlobStore__deref;
- _ = BlobStore__requestRead;
- _ = BlobStore__requestStart;
- }
- }
-
pub fn size(this: *const Store) SizeType {
return switch (this.data) {
.bytes => this.data.bytes.len,