Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
207 changes: 207 additions & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
import * as cssColors from 'color-name';

declare namespace ansiStyles {
interface ColorConvert {
/**
The RGB color space.

@param red - (0-255).
@param green - (0-255).
@param blue - (0-255).
*/
rgb(red: number, green: number, blue: number): string;

/**
The HSL color space.

@param hue - (0-360).
@param saturation - (0-100).
@param lightness - (0-100).
*/
hsl(hue: number, saturation: number, lightness: number): string;

/**
The HSV color space.

@param hue - (0-360).
@param saturation - (0-100).
@param value - (0-100).
*/
hsv(hue: number, saturation: number, value: number): string;

/**
The HSV color space.

@param hue - (0-360).
@param whiteness - (0-100).
@param blackness - (0-100).
*/
hwb(hue: number, whiteness: number, blackness: number): string;

/**
The CMYK color space.

@param cyan - (0-100).
@param magenta - (0-100).
@param yellow - (0-100).
@param black - (0-100).
*/
cmyk(cyan: number, magenta: number, yellow: number, black: number): string;

/**
The XYZ color space.

@param x - (0-100).
@param y - (0-100).
@param z - (0-100).
*/
xyz(x: number, y: number, z: number): string;

/**
The LAB color space.

@param x - (0-100).
@param y - (0-100).
@param z - (0-100).
*/
lab(lightness: number, a: number, b: number): string;

/**
The LCH/HCL color space.

@param lightness - (0-100).
@param chroma - (0-100).
@param hue - (0-360).
*/
lch(lightness: number, chroma: number, hue: number): string;

/**
The RGB HEX color space.

@param hex - A hexadecimal string containing RGB data.
*/
hex(hex: string): string;

/**
@param keyword - A CSS color name.
*/
keyword(keyword: keyof typeof cssColors): string;

ansi(ansi: number): string;
ansi256(ansi: number): string;

/**
The HCG color space.

@param hue - (0-360).
@param chroma - (0-100).
@param gray - (0-100).
*/
hcg(hue: number, chroma: number, gray: number): string;

/**
The Apple RGB 16-bit color space.

@param red - (0-65535).
@param green - (0-65535).
@param blue - (0-65535).
*/
apple(r16: number, g16: number, b16: number): string;

/**
Grayscale color.

@param gray - (0-100).
*/
gray(gray: number): string;
}

interface CSIPair {
/**
The ANSI terminal control sequence for starting this style.
*/
readonly open: string;

/**
The ANSI terminal control sequence for ending this style.
*/
readonly close: string;
}

interface ColorBase<Close extends string> {
readonly ansi: ColorConvert;
readonly ansi256: ColorConvert;
readonly ansi16m: ColorConvert;

/**
The ANSI terminal control sequence for ending this color.
*/
readonly close: Close;
}

interface Modifier {
readonly bold: CSIPair;
readonly dim: CSIPair;
readonly hidden: CSIPair;
readonly inverse: CSIPair;
readonly italic: CSIPair;
readonly reset: CSIPair;
readonly strikethrough: CSIPair;
readonly underline: CSIPair;
}

interface ForegroundColor {
readonly black: CSIPair;
readonly red: CSIPair;
readonly green: CSIPair;
readonly yellow: CSIPair;
readonly blue: CSIPair;
readonly cyan: CSIPair;
readonly magenta: CSIPair;
readonly white: CSIPair;

readonly gray: CSIPair;
readonly grey: CSIPair;

readonly blackBright: CSIPair;
readonly redBright: CSIPair;
readonly greenBright: CSIPair;
readonly yellowBright: CSIPair;
readonly blueBright: CSIPair;
readonly cyanBright: CSIPair;
readonly magentaBright: CSIPair;
readonly whiteBright: CSIPair;
}

interface BackgroundColor {
readonly bgBlack: CSIPair;
readonly bgRed: CSIPair;
readonly bgGreen: CSIPair;
readonly bgYellow: CSIPair;
readonly bgBlue: CSIPair;
readonly bgCyan: CSIPair;
readonly bgMagenta: CSIPair;
readonly bgWhite: CSIPair;

readonly bgGray: CSIPair;
readonly bgGrey: CSIPair;

readonly bgBlackBright: CSIPair;
readonly bgRedBright: CSIPair;
readonly bgGreenBright: CSIPair;
readonly bgYellowBright: CSIPair;
readonly bgBlueBright: CSIPair;
readonly bgCyanBright: CSIPair;
readonly bgMagentaBright: CSIPair;
readonly bgWhiteBright: CSIPair;
}
}

declare const ansiStyles: {
readonly modifier: ansiStyles.Modifier;
readonly color: ansiStyles.ForegroundColor & ansiStyles.ColorBase<'\u001B[39m'>;
readonly bgColor: ansiStyles.BackgroundColor & ansiStyles.ColorBase<'\u001B[49m'>;
readonly codes: ReadonlyMap<number, number>;
} & ansiStyles.BackgroundColor & ansiStyles.ForegroundColor & ansiStyles.Modifier;

export = ansiStyles;
155 changes: 155 additions & 0 deletions index.test-d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
import {expectType, expectError} from 'tsd';
import * as cssColors from 'color-name';
import colorConvert = require('color-convert');
import ansiStyles = require('.');

declare function keyof<T>(type: T): keyof T;
declare function params<T extends (...args: any) => unknown>(type: T): Parameters<T>

type CSS_COLOR_NAMES = keyof typeof cssColors;
type ExpectedColorSpaces = Exclude<keyof typeof colorConvert, 'ansi16'> | 'ansi';
let expectedColors!: ExpectedColorSpaces;

expectType<ReadonlyMap<number, number>>(ansiStyles.codes);

// - ColorConvert -
// -- Foreground color --
expectType<ExpectedColorSpaces>(keyof(ansiStyles.color.ansi));
expectType<ExpectedColorSpaces>(keyof(ansiStyles.color.ansi256));
expectType<ExpectedColorSpaces>(keyof(ansiStyles.color.ansi16m));

expectType<keyof typeof ansiStyles.color.ansi>(expectedColors);
expectType<keyof typeof ansiStyles.color.ansi256>(expectedColors);
expectType<keyof typeof ansiStyles.color.ansi16m>(expectedColors);

expectType<[CSS_COLOR_NAMES]>(params(ansiStyles.color.ansi.keyword));
expectType<[CSS_COLOR_NAMES]>(params(ansiStyles.color.ansi256.keyword));
expectType<[CSS_COLOR_NAMES]>(params(ansiStyles.color.ansi16m.keyword));

// -- Background color --
expectType<ExpectedColorSpaces>(keyof(ansiStyles.bgColor.ansi));
expectType<ExpectedColorSpaces>(keyof(ansiStyles.bgColor.ansi256));
expectType<ExpectedColorSpaces>(keyof(ansiStyles.bgColor.ansi16m));

expectType<keyof typeof ansiStyles.bgColor.ansi>(expectedColors);
expectType<keyof typeof ansiStyles.bgColor.ansi256>(expectedColors);
expectType<keyof typeof ansiStyles.bgColor.ansi16m>(expectedColors);

expectType<[CSS_COLOR_NAMES]>(params(ansiStyles.bgColor.ansi.keyword));
expectType<[CSS_COLOR_NAMES]>(params(ansiStyles.bgColor.ansi256.keyword));
expectType<[CSS_COLOR_NAMES]>(params(ansiStyles.bgColor.ansi16m.keyword));

// - Static colors -
// -- Namespaced --
// --- Foreground color ---
expectType<ansiStyles.CSIPair>(ansiStyles.color.black);
expectType<ansiStyles.CSIPair>(ansiStyles.color.red);
expectType<ansiStyles.CSIPair>(ansiStyles.color.green);
expectType<ansiStyles.CSIPair>(ansiStyles.color.yellow);
expectType<ansiStyles.CSIPair>(ansiStyles.color.blue);
expectType<ansiStyles.CSIPair>(ansiStyles.color.cyan);
expectType<ansiStyles.CSIPair>(ansiStyles.color.magenta);
expectType<ansiStyles.CSIPair>(ansiStyles.color.white);

expectType<ansiStyles.CSIPair>(ansiStyles.color.gray);
expectType<ansiStyles.CSIPair>(ansiStyles.color.grey);

expectType<ansiStyles.CSIPair>(ansiStyles.color.blackBright);
expectType<ansiStyles.CSIPair>(ansiStyles.color.redBright);
expectType<ansiStyles.CSIPair>(ansiStyles.color.greenBright);
expectType<ansiStyles.CSIPair>(ansiStyles.color.yellowBright);
expectType<ansiStyles.CSIPair>(ansiStyles.color.blueBright);
expectType<ansiStyles.CSIPair>(ansiStyles.color.cyanBright);
expectType<ansiStyles.CSIPair>(ansiStyles.color.magentaBright);
expectType<ansiStyles.CSIPair>(ansiStyles.color.whiteBright);

expectType<'\x1B[39m'>(ansiStyles.color.close);

// --- Background color ---
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgBlack);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgRed);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgGreen);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgYellow);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgBlue);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgCyan);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgMagenta);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgWhite);

expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgGray);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgGrey);

expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgBlackBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgRedBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgGreenBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgYellowBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgBlueBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgCyanBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgMagentaBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgWhiteBright);

expectType<'\x1B[49m'>(ansiStyles.bgColor.close);

// --- Modifiers ---
expectType<ansiStyles.CSIPair>(ansiStyles.modifier.bold);
expectType<ansiStyles.CSIPair>(ansiStyles.modifier.dim);
expectType<ansiStyles.CSIPair>(ansiStyles.modifier.hidden);
expectType<ansiStyles.CSIPair>(ansiStyles.modifier.inverse);
expectType<ansiStyles.CSIPair>(ansiStyles.modifier.italic);
expectType<ansiStyles.CSIPair>(ansiStyles.modifier.reset);
expectType<ansiStyles.CSIPair>(ansiStyles.modifier.strikethrough);
expectType<ansiStyles.CSIPair>(ansiStyles.modifier.underline);

// -- Top level --
// --- Foreground color ---
expectType<ansiStyles.CSIPair>(ansiStyles.black);
expectType<ansiStyles.CSIPair>(ansiStyles.red);
expectType<ansiStyles.CSIPair>(ansiStyles.green);
expectType<ansiStyles.CSIPair>(ansiStyles.yellow);
expectType<ansiStyles.CSIPair>(ansiStyles.blue);
expectType<ansiStyles.CSIPair>(ansiStyles.cyan);
expectType<ansiStyles.CSIPair>(ansiStyles.magenta);
expectType<ansiStyles.CSIPair>(ansiStyles.white);

expectType<ansiStyles.CSIPair>(ansiStyles.gray);
expectType<ansiStyles.CSIPair>(ansiStyles.grey);

expectType<ansiStyles.CSIPair>(ansiStyles.blackBright);
expectType<ansiStyles.CSIPair>(ansiStyles.redBright);
expectType<ansiStyles.CSIPair>(ansiStyles.greenBright);
expectType<ansiStyles.CSIPair>(ansiStyles.yellowBright);
expectType<ansiStyles.CSIPair>(ansiStyles.blueBright);
expectType<ansiStyles.CSIPair>(ansiStyles.cyanBright);
expectType<ansiStyles.CSIPair>(ansiStyles.magentaBright);
expectType<ansiStyles.CSIPair>(ansiStyles.whiteBright);

// --- Background color ---
expectType<ansiStyles.CSIPair>(ansiStyles.bgBlack);
expectType<ansiStyles.CSIPair>(ansiStyles.bgRed);
expectType<ansiStyles.CSIPair>(ansiStyles.bgGreen);
expectType<ansiStyles.CSIPair>(ansiStyles.bgYellow);
expectType<ansiStyles.CSIPair>(ansiStyles.bgBlue);
expectType<ansiStyles.CSIPair>(ansiStyles.bgCyan);
expectType<ansiStyles.CSIPair>(ansiStyles.bgMagenta);
expectType<ansiStyles.CSIPair>(ansiStyles.bgWhite);

expectType<ansiStyles.CSIPair>(ansiStyles.bgGray);
expectType<ansiStyles.CSIPair>(ansiStyles.bgGrey);

expectType<ansiStyles.CSIPair>(ansiStyles.bgBlackBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgRedBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgGreenBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgYellowBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgBlueBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgCyanBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgMagentaBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgWhiteBright);

// --- Modifiers ---
expectType<ansiStyles.CSIPair>(ansiStyles.bold);
expectType<ansiStyles.CSIPair>(ansiStyles.dim);
expectType<ansiStyles.CSIPair>(ansiStyles.hidden);
expectType<ansiStyles.CSIPair>(ansiStyles.inverse);
expectType<ansiStyles.CSIPair>(ansiStyles.italic);
expectType<ansiStyles.CSIPair>(ansiStyles.reset);
expectType<ansiStyles.CSIPair>(ansiStyles.strikethrough);
expectType<ansiStyles.CSIPair>(ansiStyles.underline);
8 changes: 6 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@
"node": ">=8"
},
"scripts": {
"test": "xo && ava",
"test": "xo && ava && tsd",
"screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor"
},
"files": [
"index.js"
"index.js",
"index.d.ts"
],
"keywords": [
"ansi",
Expand All @@ -42,11 +43,14 @@
"text"
],
"dependencies": {
"@types/color-name": "^1.1.1",
"color-convert": "^2.0.1"
},
"devDependencies": {
"@types/color-convert": "^1.9.0",
"ava": "^2.3.0",
"svg-term-cli": "^2.1.1",
"tsd": "^0.8.0",
"xo": "^0.24.0"
}
}