export interface CSPair { /**
    The ANSI terminal control sequence for starting this style.
    */ readonly open : string ; /**
    The ANSI terminal control sequence for ending this style.
    */ readonly close : string ; } export interface ColorBase { /**
    The ANSI terminal control sequence for ending this color.
    */ readonly close : string ; ansi ( code ) : string ; ansi256 ( code ) : string ; ansi16m ( red , green , blue ) : string ; } export interface Modifier { /**
    Resets the current color chain.
    */ readonly reset : CSPair ; /**
    Make text bold.
    */ readonly bold : CSPair ; /**
    Emitting only a small amount of light.
    */ readonly dim : CSPair ; /**
    Make text italic. (Not widely supported)
    */ readonly italic : CSPair ; /**
    Make text underline. (Not widely supported)
    */ readonly underline : CSPair ; /**
    Make text overline.

    Supported on VTE-based terminals, the GNOME terminal, mintty, and Git Bash.
    */ readonly overline : CSPair ; /**
    Inverse background and foreground colors.
    */ readonly inverse : CSPair ; /**
    Prints the text, but makes it invisible.
    */ readonly hidden : CSPair ; /**
    Puts a horizontal line through the center of the text. (Not widely supported)
    */ readonly strikethrough : CSPair ; } export interface ForegroundColor { readonly black : CSPair ; readonly red : CSPair ; readonly green : CSPair ; readonly yellow : CSPair ; readonly blue : CSPair ; readonly cyan : CSPair ; readonly magenta : CSPair ; readonly white : CSPair ; /**
    Alias for `blackBright`.
    */ readonly gray : CSPair ; /**
    Alias for `blackBright`.
    */ readonly grey : CSPair ; readonly blackBright : CSPair ; readonly redBright : CSPair ; readonly greenBright : CSPair ; readonly yellowBright : CSPair ; readonly blueBright : CSPair ; readonly cyanBright : CSPair ; readonly magentaBright : CSPair ; readonly whiteBright : CSPair ; } export interface BackgroundColor { readonly bgBlack : CSPair ; readonly bgRed : CSPair ; readonly bgGreen : CSPair ; readonly bgYellow : CSPair ; readonly bgBlue : CSPair ; readonly bgCyan : CSPair ; readonly bgMagenta : CSPair ; readonly bgWhite : CSPair ; /**
    Alias for `bgBlackBright`.
    */ readonly bgGray : CSPair ; /**
    Alias for `bgBlackBright`.
    */ readonly bgGrey : CSPair ; readonly bgBlackBright : CSPair ; readonly bgRedBright : CSPair ; readonly bgGreenBright : CSPair ; readonly bgYellowBright : CSPair ; readonly bgBlueBright : CSPair ; readonly bgCyanBright : CSPair ; readonly bgMagentaBright : CSPair ; readonly bgWhiteBright : CSPair ; } export interface ConvertColor { param red param green param blue rgbToAnsi256 ( red , green , blue ) : number ; param hex hexToRgb ( hex ) : [ red : number , green : number , blue : number ] ; param hex hexToAnsi256 ( hex ) : number ; param code ansi256ToAnsi ( code ) : number ; param red param green param blue rgbToAnsi ( red , green , blue ) : number ; param hex hexToAnsi ( hex ) : number ; } export type AnsiStyles = { readonly modifier : Modifier ; readonly color : ColorBase & ForegroundColor ; readonly bgColor : ColorBase & BackgroundColor ; readonly codes : ReadonlyMap < number , number > ; } & ForegroundColor & BackgroundColor & Modifier & ConvertColor ; const ANSI_BACKGROUND_OFFSET = 10 ; const wrapAnsi16 = ( offset = 0 ) => ( code ) => `\u001B[${ code + offset }m` ; const wrapAnsi256 = ( offset = 0 ) => ( code ) => `\u001B[${ 38 + offset };5;${ code }m` ; const wrapAnsi16m = ( offset = 0 ) => ( red , green , blue ) => `\u001B[${ 38 + offset };2;${ red };${ green };${ blue }m` ; function assembleStyles ( ) { const codes = new Map ( ) ; const styles = { modifier : { reset : [ 0 , 0 ] , bold : [ 1 , 22 ] , dim : [ 2 , 22 ] , italic : [ 3 , 23 ] , underline : [ 4 , 24 ] , overline : [ 53 , 55 ] , inverse : [ 7 , 27 ] , hidden : [ 8 , 28 ] , strikethrough : [ 9 , 29 ] , } , color : { black : [ 30 , 39 ] , red : [ 31 , 39 ] , green : [ 32 , 39 ] , yellow : [ 33 , 39 ] , blue : [ 34 , 39 ] , magenta : [ 35 , 39 ] , cyan : [ 36 , 39 ] , white : [ 37 , 39 ] , blackBright : [ 90 , 39 ] , redBright : [ 91 , 39 ] , greenBright : [ 92 , 39 ] , yellowBright : [ 93 , 39 ] , blueBright : [ 94 , 39 ] , magentaBright : [ 95 , 39 ] , cyanBright : [ 96 , 39 ] , whiteBright : [ 97 , 39 ] , } , bgColor : { bgBlack : [ 40 , 49 ] , bgRed : [ 41 , 49 ] , bgGreen : [ 42 , 49 ] , bgYellow : [ 43 , 49 ] , bgBlue : [ 44 , 49 ] , bgMagenta : [ 45 , 49 ] , bgCyan : [ 46 , 49 ] , bgWhite : [ 47 , 49 ] , bgBlackBright : [ 100 , 49 ] , bgRedBright : [ 101 , 49 ] , bgGreenBright : [ 102 , 49 ] , bgYellowBright : [ 103 , 49 ] , bgBlueBright : [ 104 , 49 ] , bgMagentaBright : [ 105 , 49 ] , bgCyanBright : [ 106 , 49 ] , bgWhiteBright : [ 107 , 49 ] , } , } as any ; styles . color . gray = styles . color . blackBright ; styles . bgColor . bgGray = styles . bgColor . bgBlackBright ; styles . color . grey = styles . color . blackBright ; styles . bgColor . bgGrey = styles . bgColor . bgBlackBright ; for ( const [ groupName , group ] of Object . entries < any > ( styles ) ) { for ( const [ styleName , style ] of Object . entries < any > ( group ) ) { styles [ styleName ] = { open : `\u001B[${ style [ 0 ] }m` , close : `\u001B[${ style [ 1 ] }m` , } ; group [ styleName ] = styles [ styleName ] ; codes . set ( style [ 0 ] , style [ 1 ] ) ; } Object . defineProperty ( styles , groupName , { value : group , enumerable : false , } ) ; } Object . defineProperty ( styles , 'codes' , { value : codes , enumerable : false , } ) ; styles . color . close = '\u001B[39m' ; styles . bgColor . close = '\u001B[49m' ; styles . color . ansi = wrapAnsi16 ( ) ; styles . color . ansi256 = wrapAnsi256 ( ) ; styles . color . ansi16m = wrapAnsi16m ( ) ; styles . bgColor . ansi = wrapAnsi16 ( ANSI_BACKGROUND_OFFSET ) ; styles . bgColor . ansi256 = wrapAnsi256 ( ANSI_BACKGROUND_OFFSET ) ; styles . bgColor . ansi16m = wrapAnsi16m ( ANSI_BACKGROUND_OFFSET ) ; Object . defineProperties ( styles , { rgbToAnsi256 : { value : ( red , green , blue ) => { if ( red === green && green === blue ) { if ( red < 8 ) { return 16 ; } if ( red > 248 ) { return 231 ; } return Math . round ( ( ( red - 8 ) / 247 ) * 24 ) + 232 ; } return ( 16 + 36 * Math . round ( ( red / 255 ) * 5 ) + 6 * Math . round ( ( green / 255 ) * 5 ) + Math . round ( ( blue / 255 ) * 5 ) ) ; } , enumerable : false , } , hexToRgb : { value : ( hex ) => { const matches = /(?<colorString>[a-f\d]{6}|[a-f\d]{3})/i . exec ( hex . toString ( 16 ) ) ; if ( ! matches ) { return [ 0 , 0 , 0 ] ; } let { colorString } = matches . groups ; if ( colorString . length === 3 ) { colorString = colorString . split ( '' ) . map ( ( character ) => character + character ) . join ( '' ) ; } const integer = Number . parseInt ( colorString , 16 ) ; return [ ( integer >> 16 ) & 0xff , ( integer >> 8 ) & 0xff , integer & 0xff , ] ; } , enumerable : false , } , hexToAnsi256 : { value : ( hex ) => styles . rgbToAnsi256 ( ... styles . hexToRgb ( hex ) ) , enumerable : false , } , ansi256ToAnsi : { value : ( code ) => { if ( code < 8 ) { return 30 + code ; } if ( code < 16 ) { return 90 + ( code - 8 ) ; } let red ; let green ; let blue ; if ( code >= 232 ) { red = ( ( code - 232 ) * 10 + 8 ) / 255 ; green = red ; blue = red ; } else { code -= 16 ; const remainder = code % 36 ; red = Math . floor ( code / 36 ) / 5 ; green = Math . floor ( remainder / 6 ) / 5 ; blue = ( remainder % 6 ) / 5 ; } const value = Math . max ( red , green , blue ) * 2 ; if ( value === 0 ) { return 30 ; } let result = 30 + ( ( Math . round ( blue ) << 2 ) | ( Math . round ( green ) << 1 ) | Math . round ( red ) ) ; if ( value === 2 ) { result += 60 ; } return result ; } , enumerable : false , } , rgbToAnsi : { value : ( red , green , blue ) => styles . ansi256ToAnsi ( styles . rgbToAnsi256 ( red , green , blue ) ) , enumerable : false , } , hexToAnsi : { value : ( hex ) => styles . ansi256ToAnsi ( styles . hexToAnsi256 ( hex ) ) , enumerable : false , } , } ) ; return styles ; } const ansiStyles = assembleStyles ( ) ; export default ansiStyles ;