diff options
author | 2023-06-24 02:44:50 -0400 | |
---|---|---|
committer | 2023-06-29 23:37:11 -0400 | |
commit | 8fbf24fc2fcca36fa78f36c7fd21f729c46c5cdb (patch) | |
tree | b86e22b1281588245c6b23156f00f1ba8d4dd5d1 /src/bun.js | |
parent | b9460087e391c454f323390a42902a3ed024c8bc (diff) | |
download | bun-8fbf24fc2fcca36fa78f36c7fd21f729c46c5cdb.tar.gz bun-8fbf24fc2fcca36fa78f36c7fd21f729c46c5cdb.tar.zst bun-8fbf24fc2fcca36fa78f36c7fd21f729c46c5cdb.zip |
start eventstream
Diffstat (limited to 'src/bun.js')
-rw-r--r-- | src/bun.js/api/bun.zig | 23 | ||||
-rw-r--r-- | src/bun.js/api/server.zig | 2 | ||||
-rw-r--r-- | src/bun.js/bindings/ZigGlobalObject.cpp | 11 |
3 files changed, 35 insertions, 1 deletions
diff --git a/src/bun.js/api/bun.zig b/src/bun.js/api/bun.zig index 2e6381c74..9932d10cc 100644 --- a/src/bun.js/api/bun.zig +++ b/src/bun.js/api/bun.zig @@ -1364,6 +1364,9 @@ pub const Class = NewClass( .FileSystemRouter = .{ .get = getFileSystemRouter, }, + .EventStream = .{ + .get = getEventStream, + }, }, ); @@ -3382,6 +3385,26 @@ pub fn getUnsafe( return existing.asObjectRef(); } +extern fn ZigGlobalObject__createEventStream(*JSGlobalObject) JSValue; + +pub fn getEventStream( + _: void, + ctx: js.JSContextRef, + _: js.JSValueRef, + _: js.JSStringRef, + _: js.ExceptionRef, +) js.JSValueRef { + var existing = ctx.ptr().getCachedObject(ZigString.static("EventStream")); + if (existing.isEmpty()) { + return ctx.ptr().putCachedObject( + &ZigString.init("EventStream"), + ZigGlobalObject__createEventStream(ctx.ptr()), + ).asObjectRef(); + } + + return existing.asObjectRef(); +} + pub const Unsafe = struct { pub const Class = NewClass( void, diff --git a/src/bun.js/api/server.zig b/src/bun.js/api/server.zig index 32c4fd25c..1167e6b0f 100644 --- a/src/bun.js/api/server.zig +++ b/src/bun.js/api/server.zig @@ -2105,7 +2105,7 @@ fn NewRequestContext(comptime ssl_enabled: bool, comptime debug_mode: bool, comp this.setAbortHandler(); streamLog("is in progress, but did not return a Promise. Finalizing request context", .{}); - this.finalize(); + this.finalizeWithoutDeinit(); stream.value.unprotect(); } diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index 7ba0f0b30..85038f868 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -1939,6 +1939,17 @@ extern "C" JSC__JSValue ZigGlobalObject__createNativeReadableStream(Zig::GlobalO return JSC::JSValue::encode(call(globalObject, function, callData, JSC::jsUndefined(), arguments)); } +extern "C" JSC__JSValue ZigGlobalObject__createEventStream(Zig::GlobalObject* globalObject) +{ + auto& vm = globalObject->vm(); + + JSC::JSFunction* getClass = JSC::JSFunction::create(vm, eventStreamGetEventStreamCodeGenerator(vm), globalObject); + JSC::MarkedArgumentBuffer args; + JSC::CallData callData = JSC::getCallData(getClass); + auto result = JSC::call(globalObject, getClass, callData, globalObject->globalThis(), args); + return JSC::JSValue::encode(result); +} + static inline EncodedJSValue flattenArrayOfBuffersIntoArrayBuffer(JSGlobalObject* lexicalGlobalObject, JSValue arrayValue) { auto& vm = lexicalGlobalObject->vm(); |