diff options
author | Marvin Hagemeister <marvin@deno.com> | 2024-07-19 12:39:05 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-19 12:39:05 +0200 |
commit | ee2e6933403811d398540e0e8275b2d216546dd8 (patch) | |
tree | 4ed2944dfbc516ea127c4bee50cc771ac12f902d /ext/node/polyfills/tty.js | |
parent | 76b8ecbb6d8c07d29c34fb0b301cc3bf3351e3aa (diff) |
fix(node): support `tty.hasColors()` and `tty.getColorDepth()` (#24619)
This PR adds support for
[`tty.WriteStream.prototype.hasColors()`](https://nodejs.org/api/tty.html#writestreamhascolorscount-env)
and
[`tty.WriteStream.prototype.getColorDepth()`](https://nodejs.org/api/tty.html#writestreamgetcolordepthenv).
I couldn't find any usage on GitHub which passes parameters to it.
Therefore I've skipped adding support for the `env` parameter to keep
our snapshot size small.
Based on https://github.com/denoland/deno_terminal/pull/3
Fixes https://github.com/denoland/deno/issues/24616
Diffstat (limited to 'ext/node/polyfills/tty.js')
-rw-r--r-- | ext/node/polyfills/tty.js | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/ext/node/polyfills/tty.js b/ext/node/polyfills/tty.js index 3a84a1f94..2e8ecc8e1 100644 --- a/ext/node/polyfills/tty.js +++ b/ext/node/polyfills/tty.js @@ -1,5 +1,6 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +import { op_bootstrap_color_depth } from "ext:core/ops"; import { core, primordials } from "ext:core/mod.js"; const { Error, @@ -105,6 +106,32 @@ export class WriteStream extends Socket { this.rows = rows; this.isTTY = true; } + + /** + * @param {number | Record<string, string>} [count] + * @param {Record<string, string>} [env] + * @returns {boolean} + */ + hasColors(count, env) { + if (env === undefined && typeof count === "object") { + env = count; + count = 16; + } + + const depth = this.getColorDepth(env); + return count <= 2 ** depth; + } + + /** + * @param {Record<string, string} [env] + * @returns {1 | 4 | 8 | 24} + */ + getColorDepth(_env) { + // TODO(@marvinhagemeister): Ignore env parameter. + // Haven't seen it used anywhere, seems more done + // to make testing easier in Node + return op_bootstrap_color_depth(); + } } export { isatty }; |