[Bun.js] Add Bun.argv api, so you can get the arguments that started a script

This commit is contained in:
Jarred Sumner
2021-12-28 01:09:46 -08:00
parent 93ec969005
commit 8ccb833421

View File

@@ -182,6 +182,28 @@ pub const Bun = struct {
return ZigString.init(VirtualMachine.vm.bundler.options.routes.asset_prefix_path).toValue(VirtualMachine.vm.global).asRef();
}
pub fn getArgv(
this: void,
ctx: js.JSContextRef,
thisObject: js.JSValueRef,
prop: js.JSStringRef,
exception: js.ExceptionRef,
) js.JSValueRef {
if (comptime Environment.isWindows) {
@compileError("argv not supported on windows");
}
var argv_list = std.heap.stackFallback(128, getAllocator(ctx));
var allocator = argv_list.get();
var argv = allocator.alloc(ZigString, std.os.argv.len) catch unreachable;
defer if (argv.len > 128) allocator.free(argv);
for (std.os.argv) |arg, i| {
argv[i] = ZigString.init(std.mem.span(arg));
}
return JSValue.createStringArray(VirtualMachine.vm.global, argv.ptr, argv.len).asObjectRef();
}
pub fn getRoutesDir(
this: void,
ctx: js.JSContextRef,
@@ -587,6 +609,10 @@ pub const Bun = struct {
.get = getAssetPrefix,
.ts = d.ts{ .name = "assetPrefix", .@"return" = "string" },
},
.argv = .{
.get = getArgv,
.ts = d.ts{ .name = "argv", .@"return" = "string[]" },
},
.env = .{
.get = EnvironmentVariables.getter,
},
@@ -2378,4 +2404,3 @@ pub const BuildError = struct {
};
pub const JSPrivateDataTag = JSPrivateDataPtr.Tag;