aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-10-30 23:14:48 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-10-30 23:14:48 -0700
commitdaf583e4cb71945038ee3619768ba2d107d10603 (patch)
tree34b7a257130030be4eee4b964b7ab069f97871cc
parent51e55f4b6e6a7060ce8a66397c6f5b2dd1619943 (diff)
downloadbun-daf583e4cb71945038ee3619768ba2d107d10603.tar.gz
bun-daf583e4cb71945038ee3619768ba2d107d10603.tar.zst
bun-daf583e4cb71945038ee3619768ba2d107d10603.zip
[Bun.js] Lazily add `FORCE_COLOR` environment variable for better compatibility with Node.js modules that detect whether the terminal supports colors
-rw-r--r--src/javascript/jsc/javascript.zig14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/javascript/jsc/javascript.zig b/src/javascript/jsc/javascript.zig
index d942baeb4..5d445ecc1 100644
--- a/src/javascript/jsc/javascript.zig
+++ b/src/javascript/jsc/javascript.zig
@@ -602,6 +602,11 @@ pub const Bun = struct {
return js.JSObjectMake(ctx, EnvironmentVariables.Class.get().*, null);
}
+ pub const BooleanString = struct {
+ pub const @"true": string = "true";
+ pub const @"false": string = "false";
+ };
+
pub fn getProperty(
ctx: js.JSContextRef,
thisObject: js.JSObjectRef,
@@ -615,6 +620,13 @@ pub const Bun = struct {
return ZigString.toRef(value, VirtualMachine.vm.global);
}
+ if (Output.enable_ansi_colors) {
+ // https://github.com/chalk/supports-color/blob/main/index.js
+ if (strings.eqlComptime(name, "FORCE_COLOR")) {
+ return ZigString.toRef(BooleanString.@"true", VirtualMachine.vm.global);
+ }
+ }
+
return js.JSValueMakeUndefined(ctx);
}
@@ -626,7 +638,7 @@ pub const Bun = struct {
const len = js.JSStringGetLength(propertyName);
const ptr = js.JSStringGetCharacters8Ptr(propertyName);
const name = ptr[0..len];
- return VirtualMachine.vm.bundler.env.map.get(name) != null;
+ return VirtualMachine.vm.bundler.env.map.get(name) != null or (Output.enable_ansi_colors and strings.eqlComptime(name, "FORCE_COLOR"));
}
pub fn getPropertyNames(