aboutsummaryrefslogtreecommitdiff
path: root/src/javascript/jsc/api/bun.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-04-11 04:58:29 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-04-11 04:58:29 -0700
commit3e969244ac2a1b60ba7cea2aeff286b0d5dc3dc6 (patch)
tree923d54a2bf187b1827865ad26c59fadd6b5f019d /src/javascript/jsc/api/bun.zig
parentac3835227eb66ea340122db614e6f32fa17a5697 (diff)
downloadbun-3e969244ac2a1b60ba7cea2aeff286b0d5dc3dc6.tar.gz
bun-3e969244ac2a1b60ba7cea2aeff286b0d5dc3dc6.tar.zst
bun-3e969244ac2a1b60ba7cea2aeff286b0d5dc3dc6.zip
[bun.js] Add a `Server.stop` function
Diffstat (limited to 'src/javascript/jsc/api/bun.zig')
-rw-r--r--src/javascript/jsc/api/bun.zig44
1 files changed, 43 insertions, 1 deletions
diff --git a/src/javascript/jsc/api/bun.zig b/src/javascript/jsc/api/bun.zig
index 8826acc2e..f0d483e1f 100644
--- a/src/javascript/jsc/api/bun.zig
+++ b/src/javascript/jsc/api/bun.zig
@@ -1191,25 +1191,67 @@ pub fn serve(
return null;
}
+ // Listen happens on the next tick!
+ // This is so we can return a Server object
if (config.ssl_config != null) {
if (config.development) {
var server = JSC.API.DebugSSLServer.init(config, ctx.ptr());
server.listen();
+ if (!server.thisObject.isEmpty()) {
+ exception.* = server.thisObject.asObjectRef();
+ server.thisObject = JSC.JSValue.zero;
+ server.deinit();
+ return null;
+ }
+ var obj = JSC.API.DebugSSLServer.Class.make(ctx, server);
+ JSC.C.JSValueProtect(ctx, obj);
+ server.thisObject = JSValue.c(obj);
+ return obj;
} else {
var server = JSC.API.SSLServer.init(config, ctx.ptr());
server.listen();
+ if (!server.thisObject.isEmpty()) {
+ exception.* = server.thisObject.asObjectRef();
+ server.thisObject = JSC.JSValue.zero;
+ server.deinit();
+ return null;
+ }
+ var obj = JSC.API.SSLServer.Class.make(ctx, server);
+ JSC.C.JSValueProtect(ctx, obj);
+ server.thisObject = JSValue.c(obj);
+ return obj;
}
} else {
if (config.development) {
var server = JSC.API.DebugServer.init(config, ctx.ptr());
server.listen();
+ if (!server.thisObject.isEmpty()) {
+ exception.* = server.thisObject.asObjectRef();
+ server.thisObject = JSC.JSValue.zero;
+ server.deinit();
+ return null;
+ }
+ var obj = JSC.API.DebugServer.Class.make(ctx, server);
+ JSC.C.JSValueProtect(ctx, obj);
+ server.thisObject = JSValue.c(obj);
+ return obj;
} else {
var server = JSC.API.Server.init(config, ctx.ptr());
server.listen();
+ if (!server.thisObject.isEmpty()) {
+ exception.* = server.thisObject.asObjectRef();
+ server.thisObject = JSC.JSValue.zero;
+ server.deinit();
+ return null;
+ }
+ var obj = JSC.API.Server.Class.make(ctx, server);
+ JSC.C.JSValueProtect(ctx, obj);
+ server.thisObject = JSValue.c(obj);
+ return obj;
}
}
- return JSC.JSValue.jsUndefined().asObjectRef();
+ unreachable;
}
pub fn allocUnsafe(