npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

micro-chalk

v1.1.2

Published

MicroChalk is a small library for coloring text with ansi codes in a form similar to chalk.

Downloads

2

Readme

micro-chalk

MicroChalk is a simple library for coloring terminal output with ansi codes.

Project Aims

  • Be smaller, less verbose and more flexible than other libraries with no dependencies
  • Does not modify natives

Most existing chalk `template tag` strings should work out of the box, please report if you find a discrepancy.


Quick Example

import {ANSI} from 'micro-chalk';
const log = new ANSI();

let str = log`
{red There are *eight base colors* which come in _two shades_.}
{Green Green is bright, while {green green is dimmer than} {Green Green}}
`;

console.log(str);

Features

Examples

Foreground/Background/Formatting

With micro-chalk, the first color used is taken as the foreground color while the second is the background color. This lets us have the same color names for little extra effort.

In cases where only the background color is needed, simply use .Red as an example.

import {ANSI} from 'micro-chalk';
const log = new ANSI();

let str = log`
{black.White black text on White background.}
        {black.white black text on white background.}
{Black.White Black text on White background.}
        {Black.white Black text on white background.}

    {Yellow Note use of white vs White, all base colors work this way.}
        {White Title case is bright} and {white lowercase is dim.}
            red -> Red, blue -> Blue, etc.

        chalk          micro-chalk
          {red red}            {red red}
          {redBright redBright}      {Red Red}

          {green green}          {green green}
          {greenBright greenBright}    {Green Green}

          {bgBlue bgBlue}         {.blue .blue}
          {bgBlueBright bgBlueBright}   {.Blue .Blue}

          {bgRed bgRed}          {.red .red}
          {bgRedBright bgRedBright}    {.Red .Red}


{.Red Sample of White on Red.}
        {.red Sample of White on red.}
{.Blue Sample of White on Blue.}
        {.blue Sample of White on blue.}
`;

console.log(str);

pre/post Hooks

import {ANSI} from 'micro-chalk';
const log = new ANSI()
    .options( {
        pre: (input) => {
            // Do something with pre-processed input, perhaps translation, loading strings, whatnot.
            return input;
        },
        post: (output) => {
            // Do something with the output, such as sending it to console.log()
            console.log(output);
            return output;
        }
    } );

log`
{White You can use the {red post hook} to cause the
result to go *straight to the console.*}
`;

Nested Styles

Nesting styles lets you encapsulate styles within one another; when an inner section closes, the fg/bg color states are restored to the containing block.

import {ANSI} from 'micro-chalk';
const log = new ANSI()
    .options( { post: (output) => { console.log(output); return output; } } );

log`
{Magenta Most terminals {red support {green the basic} 16 colors},
{cyan many terminals} {Yellow support 256 colors} {Blue and 24-bit color.}}
`;

Nested Template Literals

You can nest Template Literals as deep as you like, each literal will be evaluated and the results may contain further marked sections. Some sophisticated and pedantic examples are shown below.

import {ANSI} from 'micro-chalk';
const log = new ANSI()
    .options( { post: (output) => { console.log(output); return output; } } );

function check(value) {
    if(value >= .98)
        return `{Green ${value * 100}%}`;
    if(value >= .70)
        return `{black.Yellow ${value * 100}%}`;
    return `{White.Red ${value * 100}%}`;
}

log`
   Battery: ${check(.99)}
  CPU Load: ${check(.78)}   ${'{Yellow Warning}'}
Disk Space: ${check(.31)}   ${'{Red Danger {White.Red  Very Low } Disk Space}'}
`;

Custom Aliasing

Aliasing lets you define aliases for common usage scenarios or define names for those 256 colors at your fingertips.

import {ANSI} from 'micro-chalk';
const log = new ANSI()
    .options( {
        aliases: {
            // Regular alias to colors 207, 239, 249
            pink:    207,
            grey39:  239,
            grey49:  249,

            // Alias of other aliases
            RED:    'Red',
            BLU:    'Blue',

            // Full Alias
            '^':    'black.Yellow',     // Black on Yellow
            '^^':   'White.Red',        // White on Red
            '#':    'White.blue',       // White on blue
            '=':    'White.black',      // White on black
        },
        post: (output) => { console.log(output); return output; }
    } );

log`
{^ WARNING:{=  There is a {yellow minor problem} that needs your attention.}}

{^^ ERROR:{=  There is a {^^  major problem } that needs your attention!}}

{#

  White on blue used to be a common color scheme.

}

{pink Some people prefer pink}, {RED to red}, {BLU others like blue}.

{grey39 The world {black.White is full} of color, {grey49 why use just grey?}}
`;

Additional Features

import {ANSI} from 'micro-chalk';
const log = new ANSI()
	.options({
		patternAliases: Object.assign({}, log.patternAliases, {
			'(\\[[^\\]]+\\])' : 'White.blue'
		}),
		post:    (output) => { console.log(output); return output; }
	});

log`
- {#FFF.#0000FF Use CSS Hex Codes Directly}

- {124.251  Directly use ANSI 256 color codes}

- {Red *Convenient* _pattern aliasing_ lets you do [nearly anything].}
`;

Notes

  • micro-chalk assumes your output is ansi 256 color compliant