aboutsummaryrefslogtreecommitdiff
path: root/src/javascript/jsc/api/bun.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/javascript/jsc/api/bun.zig')
-rw-r--r--src/javascript/jsc/api/bun.zig78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/javascript/jsc/api/bun.zig b/src/javascript/jsc/api/bun.zig
index 26faf75d7..8826acc2e 100644
--- a/src/javascript/jsc/api/bun.zig
+++ b/src/javascript/jsc/api/bun.zig
@@ -255,6 +255,75 @@ pub fn getOrigin(
return ZigString.init(VirtualMachine.vm.origin.origin).toValue(ctx.ptr()).asRef();
}
+pub fn getStdin(
+ _: void,
+ ctx: js.JSContextRef,
+ _: js.JSValueRef,
+ _: js.JSStringRef,
+ _: js.ExceptionRef,
+) js.JSValueRef {
+ var existing = ctx.ptr().getCachedObject(&ZigString.init("BunSTDIN"));
+ if (existing.isEmpty()) {
+ var rare_data = JSC.VirtualMachine.vm.rareData();
+ var store = rare_data.stdin();
+ var blob = bun.default_allocator.create(JSC.WebCore.Blob) catch unreachable;
+ blob.* = JSC.WebCore.Blob.initWithStore(store, ctx.ptr());
+
+ return ctx.ptr().putCachedObject(
+ &ZigString.init("BunSTDIN"),
+ JSC.JSValue.fromRef(JSC.WebCore.Blob.Class.make(ctx, blob)),
+ ).asObjectRef();
+ }
+
+ return existing.asObjectRef();
+}
+
+pub fn getStderr(
+ _: void,
+ ctx: js.JSContextRef,
+ _: js.JSValueRef,
+ _: js.JSStringRef,
+ _: js.ExceptionRef,
+) js.JSValueRef {
+ var existing = ctx.ptr().getCachedObject(&ZigString.init("BunSTDERR"));
+ if (existing.isEmpty()) {
+ var rare_data = JSC.VirtualMachine.vm.rareData();
+ var store = rare_data.stderr();
+ var blob = bun.default_allocator.create(JSC.WebCore.Blob) catch unreachable;
+ blob.* = JSC.WebCore.Blob.initWithStore(store, ctx.ptr());
+
+ return ctx.ptr().putCachedObject(
+ &ZigString.init("BunSTDERR"),
+ JSC.JSValue.fromRef(JSC.WebCore.Blob.Class.make(ctx, blob)),
+ ).asObjectRef();
+ }
+
+ return existing.asObjectRef();
+}
+
+pub fn getStdout(
+ _: void,
+ ctx: js.JSContextRef,
+ _: js.JSValueRef,
+ _: js.JSStringRef,
+ _: js.ExceptionRef,
+) js.JSValueRef {
+ var existing = ctx.ptr().getCachedObject(&ZigString.init("BunSTDOUT"));
+ if (existing.isEmpty()) {
+ var rare_data = JSC.VirtualMachine.vm.rareData();
+ var store = rare_data.stdout();
+ var blob = bun.default_allocator.create(JSC.WebCore.Blob) catch unreachable;
+ blob.* = JSC.WebCore.Blob.initWithStore(store, ctx.ptr());
+
+ return ctx.ptr().putCachedObject(
+ &ZigString.init("BunSTDOUT"),
+ JSC.JSValue.fromRef(JSC.WebCore.Blob.Class.make(ctx, blob)),
+ ).asObjectRef();
+ }
+
+ return existing.asObjectRef();
+}
+
pub fn enableANSIColors(
_: void,
ctx: js.JSContextRef,
@@ -1063,6 +1132,15 @@ pub const Class = NewClass(
.get = getOrigin,
.ts = d.ts{ .name = "origin", .@"return" = "string" },
},
+ .stdin = .{
+ .get = getStdin,
+ },
+ .stdout = .{
+ .get = getStdout,
+ },
+ .stderr = .{
+ .get = getStderr,
+ },
.routesDir = .{
.get = getRoutesDir,
.ts = d.ts{ .name = "routesDir", .@"return" = "string" },