From b3e9b91405c8fa93fa8b2b9343449a797baba0a0 Mon Sep 17 00:00:00 2001 From: ExE Boss <3889017+ExE-Boss@users.noreply.github.com> Date: Sat, 11 May 2019 10:04:20 +0200 Subject: [PATCH] =?UTF-8?q?Fix=20TypeScript=20types=20for=20`supportsColor?= =?UTF-8?q?`=20which=20is=C2=A0top=E2=80=91level=20only=20(#342)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Dimitri Benin --- index.d.ts | 136 +++++++++++++++++++++++++++--------------------- index.test-d.ts | 7 ++- 2 files changed, 81 insertions(+), 62 deletions(-) diff --git a/index.d.ts b/index.d.ts index c7d4a54..eed72e0 100644 --- a/index.d.ts +++ b/index.d.ts @@ -70,11 +70,27 @@ declare namespace chalk { has16m: boolean; } - interface Chalk { - (...text: unknown[]): string; + interface ChalkFunction { + /** + Use a template string. + + @remarks Template literals are unsupported for nested calls (see [issue #341](https://github.com/chalk/chalk/issues/341)) + @example + ``` + log(chalk` + CPU: {red ${cpu.totalPercent}%} + RAM: {green ${ram.used / ram.total * 100}%} + DISK: {rgb(255,131,0) ${disk.used / disk.total * 100}%} + `); + ``` + */ (text: TemplateStringsArray, ...placeholders: unknown[]): string; + (...text: unknown[]): string; + } + + interface Chalk extends ChalkFunction { /** Return a new Chalk instance. */ @@ -105,7 +121,7 @@ declare namespace chalk { chalk.hex('#DEADED'); ``` */ - hex(color: string): this; + hex(color: string): Chalk; /** Use keyword color value to set text color. @@ -119,27 +135,27 @@ declare namespace chalk { chalk.keyword('orange'); ``` */ - keyword(color: string): this; + keyword(color: string): Chalk; /** Use RGB values to set text color. */ - rgb(red: number, green: number, blue: number): this; + rgb(red: number, green: number, blue: number): Chalk; /** Use HSL values to set text color. */ - hsl(hue: number, saturation: number, lightness: number): this; + hsl(hue: number, saturation: number, lightness: number): Chalk; /** Use HSV values to set text color. */ - hsv(hue: number, saturation: number, value: number): this; + hsv(hue: number, saturation: number, value: number): Chalk; /** Use HWB values to set text color. */ - hwb(hue: number, whiteness: number, blackness: number): this; + hwb(hue: number, whiteness: number, blackness: number): Chalk; /** Use HEX value to set background color. @@ -153,7 +169,7 @@ declare namespace chalk { chalk.bgHex('#DEADED'); ``` */ - bgHex(color: string): this; + bgHex(color: string): Chalk; /** Use keyword color value to set background color. @@ -167,109 +183,109 @@ declare namespace chalk { chalk.bgKeyword('orange'); ``` */ - bgKeyword(color: string): this; + bgKeyword(color: string): Chalk; /** Use RGB values to set background color. */ - bgRgb(red: number, green: number, blue: number): this; + bgRgb(red: number, green: number, blue: number): Chalk; /** Use HSL values to set background color. */ - bgHsl(hue: number, saturation: number, lightness: number): this; + bgHsl(hue: number, saturation: number, lightness: number): Chalk; /** Use HSV values to set background color. */ - bgHsv(hue: number, saturation: number, value: number): this; + bgHsv(hue: number, saturation: number, value: number): Chalk; /** Use HWB values to set background color. */ - bgHwb(hue: number, whiteness: number, blackness: number): this; + bgHwb(hue: number, whiteness: number, blackness: number): Chalk; /** Modifier: Resets the current color chain. */ - readonly reset: this; + readonly reset: Chalk; /** Modifier: Make text bold. */ - readonly bold: this; + readonly bold: Chalk; /** Modifier: Emitting only a small amount of light. */ - readonly dim: this; + readonly dim: Chalk; /** Modifier: Make text italic. (Not widely supported) */ - readonly italic: this; + readonly italic: Chalk; /** Modifier: Make text underline. (Not widely supported) */ - readonly underline: this; + readonly underline: Chalk; /** Modifier: Inverse background and foreground colors. */ - readonly inverse: this; + readonly inverse: Chalk; /** Modifier: Prints the text, but makes it invisible. */ - readonly hidden: this; + readonly hidden: Chalk; /** Modifier: Puts a horizontal line through the center of the text. (Not widely supported) */ - readonly strikethrough: this; + readonly strikethrough: Chalk; /** Modifier: Prints the text only when Chalk is enabled. Can be useful for things that are purely cosmetic. */ - readonly visible: this; - - readonly black: this; - readonly red: this; - readonly green: this; - readonly yellow: this; - readonly blue: this; - readonly magenta: this; - readonly cyan: this; - readonly white: this; - readonly gray: this; - readonly grey: this; - readonly blackBright: this; - readonly redBright: this; - readonly greenBright: this; - readonly yellowBright: this; - readonly blueBright: this; - readonly magentaBright: this; - readonly cyanBright: this; - readonly whiteBright: this; - - readonly bgBlack: this; - readonly bgRed: this; - readonly bgGreen: this; - readonly bgYellow: this; - readonly bgBlue: this; - readonly bgMagenta: this; - readonly bgCyan: this; - readonly bgWhite: this; - readonly bgBlackBright: this; - readonly bgRedBright: this; - readonly bgGreenBright: this; - readonly bgYellowBright: this; - readonly bgBlueBright: this; - readonly bgMagentaBright: this; - readonly bgCyanBright: this; - readonly bgWhiteBright: this; + readonly visible: Chalk; + + readonly black: Chalk; + readonly red: Chalk; + readonly green: Chalk; + readonly yellow: Chalk; + readonly blue: Chalk; + readonly magenta: Chalk; + readonly cyan: Chalk; + readonly white: Chalk; + readonly gray: Chalk; + readonly grey: Chalk; + readonly blackBright: Chalk; + readonly redBright: Chalk; + readonly greenBright: Chalk; + readonly yellowBright: Chalk; + readonly blueBright: Chalk; + readonly magentaBright: Chalk; + readonly cyanBright: Chalk; + readonly whiteBright: Chalk; + + readonly bgBlack: Chalk; + readonly bgRed: Chalk; + readonly bgGreen: Chalk; + readonly bgYellow: Chalk; + readonly bgBlue: Chalk; + readonly bgMagenta: Chalk; + readonly bgCyan: Chalk; + readonly bgWhite: Chalk; + readonly bgBlackBright: Chalk; + readonly bgRedBright: Chalk; + readonly bgGreenBright: Chalk; + readonly bgYellowBright: Chalk; + readonly bgBlueBright: Chalk; + readonly bgMagentaBright: Chalk; + readonly bgCyanBright: Chalk; + readonly bgWhiteBright: Chalk; } } @@ -279,7 +295,7 @@ Call the last one as a method with a string argument. Order doesn't matter, and later styles take precedent in case of a conflict. This simply means that `chalk.red.yellow.green` is equivalent to `chalk.green`. */ -declare const chalk: chalk.Chalk & { +declare const chalk: chalk.Chalk & chalk.ChalkFunction & { supportsColor: chalk.ColorSupport; Level: typeof LevelEnum; }; diff --git a/index.test-d.ts b/index.test-d.ts index 7a791a8..0a25ff7 100644 --- a/index.test-d.ts +++ b/index.test-d.ts @@ -1,8 +1,8 @@ -import {expectType} from 'tsd'; +import {expectType, expectError} from 'tsd'; import chalk = require('.'); // - Helpers - -type colorReturn = chalk.Chalk & {supportsColor: chalk.ColorSupport}; +type colorReturn = chalk.Chalk & {supportsColor?: never}; // - Level - expectType(chalk.Level.None); @@ -15,6 +15,9 @@ expectType(chalk.supportsColor.hasBasic); expectType(chalk.supportsColor.has256); expectType(chalk.supportsColor.has16m); +// -- `supportsColor` is not a member of the Chalk interface -- +expectError(chalk.reset.supportsColor); + // - Chalk - // -- Instance -- expectType(new chalk.Instance({level: 1}));