1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-22 15:06:54 -05:00

fix(runtime): fix Deno.noColor when stdout is not tty (#21208)

This commit is contained in:
Yoshiya Hinosawa 2023-11-15 14:10:12 +09:00 committed by GitHub
parent 4913274a65
commit c67de43ff3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 4 deletions

View file

@ -13,3 +13,14 @@ Deno.test(
assertEquals(output, "1\n"); assertEquals(output, "1\n");
}, },
); );
Deno.test(
{ permissions: { run: true, read: true } },
async function denoNoColorIsNotAffectedByNonTty() {
const { stdout } = await new Deno.Command(Deno.execPath(), {
args: ["eval", "console.log(Deno.noColor)"],
}).output();
const output = new TextDecoder().decode(stdout);
assertEquals(output, "false\n");
},
);

View file

@ -241,7 +241,7 @@ function opMainModule() {
const opArgs = memoizeLazy(() => ops.op_bootstrap_args()); const opArgs = memoizeLazy(() => ops.op_bootstrap_args());
const opPid = memoizeLazy(() => ops.op_bootstrap_pid()); const opPid = memoizeLazy(() => ops.op_bootstrap_pid());
const opPpid = memoizeLazy(() => ops.op_ppid()); const opPpid = memoizeLazy(() => ops.op_ppid());
setNoColorFn(() => ops.op_bootstrap_no_color()); setNoColorFn(() => ops.op_bootstrap_no_color() || !ops.op_bootstrap_is_tty());
function formatException(error) { function formatException(error) {
if (ObjectPrototypeIsPrototypeOf(ErrorPrototype, error)) { if (ObjectPrototypeIsPrototypeOf(ErrorPrototype, error)) {
@ -530,7 +530,7 @@ function bootstrapMainRuntime(runtimeOptions) {
ObjectDefineProperties(finalDenoNs, { ObjectDefineProperties(finalDenoNs, {
pid: util.getterOnly(opPid), pid: util.getterOnly(opPid),
ppid: util.getterOnly(opPpid), ppid: util.getterOnly(opPpid),
noColor: util.getterOnly(getNoColor), noColor: util.getterOnly(() => ops.op_bootstrap_no_color()),
args: util.getterOnly(opArgs), args: util.getterOnly(opArgs),
mainModule: util.getterOnly(opMainModule), mainModule: util.getterOnly(opMainModule),
}); });
@ -666,7 +666,7 @@ function bootstrapWorkerRuntime(
} }
ObjectDefineProperties(finalDenoNs, { ObjectDefineProperties(finalDenoNs, {
pid: util.getterOnly(opPid), pid: util.getterOnly(opPid),
noColor: util.getterOnly(getNoColor), noColor: util.getterOnly(() => ops.op_bootstrap_no_color()),
args: util.getterOnly(opArgs), args: util.getterOnly(opArgs),
}); });
// Setup `Deno` global - we're actually overriding already // Setup `Deno` global - we're actually overriding already

View file

@ -15,6 +15,7 @@ deno_core::extension!(
op_bootstrap_language, op_bootstrap_language,
op_bootstrap_log_level, op_bootstrap_log_level,
op_bootstrap_no_color, op_bootstrap_no_color,
op_bootstrap_is_tty,
], ],
); );
@ -57,5 +58,11 @@ pub fn op_bootstrap_log_level(state: &mut OpState) -> i32 {
#[op2(fast)] #[op2(fast)]
pub fn op_bootstrap_no_color(state: &mut OpState) -> bool { pub fn op_bootstrap_no_color(state: &mut OpState) -> bool {
let options = state.borrow::<BootstrapOptions>(); let options = state.borrow::<BootstrapOptions>();
options.no_color || !options.is_tty options.no_color
}
#[op2(fast)]
pub fn op_bootstrap_is_tty(state: &mut OpState) -> bool {
let options = state.borrow::<BootstrapOptions>();
options.is_tty
} }