From 78a8b57ec6cbe71ed7b1198b0eca4260b1accc8b Mon Sep 17 00:00:00 2001 From: Luke Edwards Date: Tue, 10 Jul 2018 09:27:16 -0700 Subject: [PATCH] add readme, logo, & visuals --- package.json | 2 +- readme.md | 180 +++++++++++++++++++++++++++++++++++++++++++++++-- shots/1.png | Bin 0 -> 10900 bytes shots/2.png | Bin 0 -> 6103 bytes shots/3.png | Bin 0 -> 8163 bytes shots/logo.png | Bin 0 -> 11287 bytes 6 files changed, 177 insertions(+), 5 deletions(-) create mode 100755 shots/1.png create mode 100755 shots/2.png create mode 100755 shots/3.png create mode 100644 shots/logo.png diff --git a/package.json b/package.json index d98ae0b..4566a7a 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "kleur", "version": "0.0.0", "repository": "lukeed/kleur", - "description": "WIP", + "description": "The fastest Node.js library for formatting terminal text with ANSI colors~!", "license": "MIT", "files": [ "*.js" diff --git a/readme.md b/readme.md index de59dae..93e63ac 100644 --- a/readme.md +++ b/readme.md @@ -1,6 +1,33 @@ -# kleur [![Build Status](https://travis-ci.org/lukeed/kleur.svg?branch=master)](https://travis-ci.org/lukeed/kleur) +
+ kleur +
+ +
+ + version + + + travis + + + downloads + +
+ +
The fastest Node.js library for formatting terminal text with ANSI colors~!
+ +## Features + +* No dependencies +* Super [lightweight](##load-time) & [performant](#performance) +* Supports [nested](#nested-methods) & [chained](#chained-methods) colors +* No `String.prototype` modifications +* Supports [`printf`](#printf-formatting) formatting +* Conditional [color support](#conditional-support) +* Familiar [API](#api) + +_Heavily inspired by [`ansi-colors`](https://github.com/doowb/ansi-colors). See [Credits](#credits) for more info!_ -> WIP ## Install @@ -12,12 +39,157 @@ $ npm install --save kleur ## Usage ```js -// +const kleur = require('kleur'); + +// basic usage +kleur.red('red text'); + +// or variadic arguments +kleur.red('this', 'is', 'also', 'red'); + +// or printf formatting +kleur.red('%s, %s!', 'hello', 'world'); + +// chained methods +kleur.blue.bold.underline('howdy partner'); + +// nested methods +kleur.bold(`${ kleur.bgRed.white('[ERROR]') } ${ kleur.red.italic('Something happened')}`); +``` + +### Chained Methods + +```js +console.log(kleur.bold.red('this is a bold red message')); +console.log(kleur.bold.italic('this is a bold italicized message')); +console.log(kleur.bold.yellow.bgRed.italic('this is a bold yellow italicized message')); +console.log(kleur.green.bold.underline('this is a bold green underlined message')); +``` + + + +### Nested Methods + +```js +const { yellow, red, cyan } = require('kleur'); + +// with template literals +console.log(yellow(`foo ${red.bold('red')} bar ${cyan('cyan')} baz`)); + +// or variadic arguments +console.log(yellow('foo', red.bold('red'), 'bar', cyan('cyan'), 'baz')); +``` + + + + +### `printf` Formatting + +> See [`util.format`](https://nodejs.org/api/util.html#util_util_format_format_args) for documentation + +```js +const { yellow, bgGreen, bold } = require('kleur'); + +// basic usage +console.log(bold.cyan('%s, %s!', 'Hello', 'World', '-Anonymous')); + +// or with nested colors +console.log( bold('%s-like %s... %s!', 'printf', bgGreen.black('formatting'), yellow('YAY')) ); +``` + + + + +### Clear Formatting + +Manually strip all ANSI codes from a given string. + +```js +let str = kleur.blue('Howdy partner'); +//=> styled + +kleur.clear(str); +//=> 'Howdy partner' +``` + +### Conditional Support + +Toggle color support as needed; `kleur` assumes it's always enabled. + +```js +const kleur = require('kleur'); + +// manually disable +kleur.enabled = false; + +// or use a library to detect support +kleur.enabled = require('color-support').stdout; + +console.log(kleur.red('I will only be colored red if the terminal supports colors')); ``` + ## API -hi +Any `kleur` method returns a `String` (when invoked, not chained). It's up to the developer to pass the output to destinations like `console.log`, `process.stdout.write`, etc. + +The methods below are grouped by type for legbility purposes only. They each can be [chained](#chained-methods) or [nested](#nested-methods) with one another. + +***Colors:*** +> black — red — green — yellow — blue — magenta — cyan — white — gray + +***Backgrounds:*** +> bgBlack — bgRed — bgGreen — bgYellow — bgBlue — bgMagenta — bgCyan — bgWhite + +***Modifiers:*** +> reset — bold — dim — italic* — underline — inverse — hidden — strikethrough* + +* Not widely supported + + +## Benchmarks + +> Using Node v8.9.0 + +### Load time + +``` +ansi-colors: 1.172ms +chalk: 11.799ms +clorox: 0.922ms +kleur: 0.694ms +``` + +### Performance + +``` +# All Colors + ansi-colors x 60,235 ops/sec ±0.57% (93 runs sampled) + chalk x 7,125 ops/sec ±4.23% (69 runs sampled) + clorox x 1,175 ops/sec ±3.95% (71 runs sampled) + kleur x 74,307 ops/sec ±0.40% (96 runs sampled) + +# Stacked colors + ansi-colors x 13,547 ops/sec ±0.15% (97 runs sampled) + chalk x 1,631 ops/sec ±4.83% (72 runs sampled) + clorox x 454 ops/sec ±2.43% (40 runs sampled) + kleur x 21,825 ops/sec ±0.31% (94 runs sampled) + +# Nested colors + ansi-colors x 27,553 ops/sec ±0.45% (93 runs sampled) + chalk x 3,445 ops/sec ±4.31% (69 runs sampled) + clorox x 552 ops/sec ±2.79% (45 runs sampled) + kleur x 32,405 ops/sec ±0.36% (92 runs sampled) +``` + + +## Credits + +This project (inadvertently) is very similar to [Brian Woodward](https://github.com/doowb)'s awesome [`ansi-colors`](https://github.com/doowb/ansi-colors) project. My original implementation involved writing into a global state — first by writing into an output string, and then by saving the `keys` array into the `$` directly. Both approaches were leaky & allowed for accidental chains/overwrites. In turn, I borrowed `ansi-colors`'s approach in writing `keys` state into each chain directly. + +Aside from the performance boost, `kleur` exists as a separate module because I've no need for bright color variants nor the symbols. And since those are defining features of `ansi-colors`, they're not something that can be removed. + +The benchmark suite is also imported directly from `ansi-colors` :raised_hands: ## License diff --git a/shots/1.png b/shots/1.png new file mode 100755 index 0000000000000000000000000000000000000000..e5a8fb7e06109c5b8e892cd0cc6caf89ce508ce7 GIT binary patch literal 10900 zcmZ{JWmH^C(=HN15+H*GXONKK?lQQ0aCZsr?vUW_KDfI(!JWY&xDM{_mvi3tyLa6m zU;WstR`1$fvg>)eS9gfKtQg8CyiYJNFenn@!U`}j@W40y>;wGUvsqBk5C#VBL0(!( zgo29gMN9QnOI71G^7208?(U9)N>t-Ekb;Vvhm!4QGA~TD_p6qICOPZ%S-{PB%GFh> zsxkxaVf5YY!F_483^kkFP2{Vw$_yuq-l^@wl+A#a#=WM>tCsfbPp8X^i>v#j%iBBE zi?CNKm2@h`tNU29d4QXby4&=9=RE2~6`YcKF##5%(i9pKmQ<qL!RWR zjZ%A3p0|v2NqD6XPR@cy&kp}~UfqPfCaO`Yhy;FP)+}6r9SSwxw7xy?eJt`tS2HSC zR@2IrTfDuK%$m#2E4&~1_0Zr0(Nw46;nF+{tP&L;#eS4uJ^ zs#JD?DI9|V(Z9UD*{Y68OYxZsH?p(Aq$RNyIW_!QRBUDZ zMYC0@f5+u=ECt&;*oGVO?Ti)A_Ef+fMwdo-zzjyh3`JIIihIGpkSj|F3n;lR9(DP> zAp^!Y>$w=a815hSe-)E8bCv1f9NY26Xf#JkWXD7Vgf4PhT;WDue)cZ^=mhDOg9>gJ z!R7vPJrw~40P5a%NX+hD`s1N1la40l;*~dTVDq^rrvuM!CYW1P_)XG7jhF`$eJH-5 zo$F6PYH1Qmg@4&}jv>H#akmBv<*+zn!1r%?RR4ts`lJg)0E^Z`?m8#l?`53*0slta zd)k;R&~vT(*!#+T+Um50%!Qj742U#p)9|9@B%11MX+npkv1@nt@*>=PJ|kw~1q+~z zVVrkOQlFk#8SFl$W!H+K4v`Cr+;Awm$|FZb0ag*DHU#cQdf

b#DcjMxB>AeX%p+ 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 w{kr&}?huS&v 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 bi4DfHp3}PJ&^f0kHkvBrwc=O#H=+LnPQ%wl literal 0 HcmV?d00001 diff --git a/shots/3.png b/shots/3.png new file mode 100755 index 0000000000000000000000000000000000000000..5a9ce8997057a505509c61cd6d19b500691f6dea GIT binary patch literal 8163 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

f^wI0j84|H+qk1*Rc*7ZK?Q6*Yb4;3S> zRnacOG}C@EVBS#q?qjV6N-oeV!t2}MZ29{h1#%{}w*p6mHKE9G;~|MX=Nd5vhfKEu zxmo}D7g^F%dIQ5MpNDO;N&%oog`^6Sr#QW#!=anbb+hLBc!FQoYjCmn4!_h14M`Mu zXsSx|tQhlRpG!|KN;`KlFV}8X1m2yrOlvPaAmXf8sBXpeG}p6?E9{#ZNL2&>T#J6D zf_mb7PtH~7OgQ+a01XiLQpDgg9;bH=-@buTA*5Dh=BhuJ9MHW*ZKa2|FPTJaqyPr| z;^HO0Tx@A^ULVl+NtHGWPi$gUNvvvW${}w9W5`>FXFGe;aLM!=g%4_W+4^+B{0_Lu zNkm|os`E|lcy4m5)?!oebM8E)l@D1s*`66_Hczhs->1Tp@v;g^2bpuYx6Ja$a7z~C z!E>wa^mkLj;lho8Yjx>s;)LF5THid1yUNffD6M=`rpuh3O=4~8{PjRAw~`T&;)l&o zsU%Lp7xn`0mQM;28d+m&KK5L2%{@y!3!iuI^*lB5|Eibuc&dlB=-WZgu>6HXqs$w{ zBFOvtQTR>&G`Hy+%>qxe2Xs&Kq%j&4Xycsx+fN7Ub>wKc3WL%2{eAZ-AJynTx@;S7 z-{+5OW-M=S%5RkL>IX0~3&eO+f6klviv)x}1UFlit=wOJm^p{q=C zQiNgQJkG(CfoKbIl`2+?n^bJG?$UO*8@LYsZd1|Jn1B>Mu`{l4+R*R8z&AgP5tHu% zPsiQV|H@JdxkJ^)dpqzan!onQ^|@ETYlnqw!0LI_qJ)t8lD^1<7i0il4a{yKrjn9woMmhkk_og>-c%{>-+f;LCm94CxvkB&quk*uz9G*8u7&MK zzEr+!oXnbYGMCm8NXzt}UoYy=Gx^xx+)aVsiQkqW6Va>X#GU75HCI^J@|*px6lxs%8)0!8?WOWb7EFH*_G*@6}?p*;*)%K63j zh^LCxs`Ip-zKzGYv9h#Z#t}51wEY%tlk_S-e_QaG|K4zO=&*@(Vl1jW zp(b7}Ig|cp*!?EJ#!qxE9z*Y(=K1yZ2A`pn>|zPv-H@qNib;x&tc{y9Y&<>qOJG$^9Sm zh#R2OS$2SNwPH^t5GUmRX-tsf@hi~%eJZZM^J`Y*Wy{Ih<7#kHeds?>6Tx~~fqUgz z)0!B|wI|>9WFf|P%jGicQqArSW?!?v?qdvfQ*}@4{@-7#1B+WMo}A#RjvFW0lr(@ZG;#Y9a&oMuZh}e4b8X zpB=dt)~NVd6!~@OzU@GoBy@k1Hn0pU8{tMPG7^?TzghhcI@`A%C(Vg%Fuyk_iun)4 z$VcnPv+tt(S^lRvB;j(-azRj#Ib+dX|Fm}Rb z{F%iOWR>L@uI&!@Ys@>pW3O4~VAwPHj%ky3I|^KyYQs zXRQ0hTvbu^2n|cq7VXu@gJ00V^@WSkv*#8|Y2qDu^G3h_q!a+gk30$8ap;NwpFrGEl4JHDo|ezg=i7$_h)VxC- zH$IUM6p9hoznD_Juy`mBJ7?ZghQdDF1{^3?mXP{zmy*RN$^XrD5#+6EmIV>QZcv=m zSnnCha?>y)@!+!ts%=0W=kDaKPeIf89Kmy76|%L-~6S_YO3` z#VWVxslt>#nt3 z3_E(zr@v_$C}x(BilE2HD5IO;Wdr?ZDrbN1s_hJ(=+EE8U!&qa|fH!o? z^uSEmuv50u5S;50oaaHxbpO}6K~2ZqoYX8wx7mD3U9_a;#E+g${<#ky{veSv*Ra(l zUYH3N?TD}R8*h1z6%RjoRNR7#MI3y7@nWTL1fj$7RLT{8gzl&3csH6w|kT&IC;g8J2#C~poe2MFMqCcYc3!?(2IqoBhR7Yw4(-cI&n20BS}72 z2PBLCK7?MN-#x+*tR)z~SU0($A3(#-12_c^@An(IV$`3xjDJJ8F zi#uEwgV%+;D}k1nK@X#SLw5XY%j`q70yIRL?*vzmmqIG&BtNw25cePtUqMgQ6+CQP zp-6PG8NW^f^1t_c^AT^jY?OW*m)CTJeHvDI-3m>tfj<^3KZv|5TENITxx{!85z(CH}k&Qw9OmvzdhX3`Kv-C}Uqit3#Pg{CR(VghDli z{+h3p_^3nA(Un)&!v;b6MtGCDLiYo5Bvr9r|C95E-{`uj9MAJhu-Xn5G-ctMwVrZhRnVVfRo7%Vdwt!*+_Ece+=`4 z=Ta*uD1f1qX#1jr#mhWtL(iuIUXA^r65O?vXd&a<46PsJ`Nf337*9uukv|MFt&#(? ziA;Ds@*)3v{f|&lUWGE-VtEs0mW+d&4M6 z6^{MoW|C!EI4$a(o}+hvy-}fSFEgLZcs|LwdP*tH;k`4u`<0U-i{WiVKNCNem|=px z-O*+mT7^Ota|!1*G~UM`b_@NmB4u{1{u@#W7q#|OymQm-ofwg2`4 zqrpJoOF^pTgen{qCESs{GzpszJEbL6plx@;&ddMzhr=#>4c#mK|H~Es|A@SD%2pLZ Ty_d;yN&8GiTe(cp-1q+g`D+k^ literal 0 HcmV?d00001