Skip to content
This repository has been archived by the owner on Nov 22, 2021. It is now read-only.

ai/nanocolors

Repository files navigation

Deprecated

DEPRECATED: Use picocolors instead. It is 3 times smaller and 50% faster.

The space in node_modules including sub-dependencies:

- nanocolors   16 kB
+ picocolors    7 kB

Library loading time:

- nanocolors     0.885 ms
+ picocolors     0.470 ms

Benchmark for complex use cases:

- nanocolors     1,088,193 ops/sec
+ picocolors     1,772,265 ops/sec

Old docs

A tiny and fast Node.js library to ANSI colors to terminal output.

import { green, bold } from 'nanocolors'

console.log(
  green(`Task ${bold('1')} was finished`)
)

Started as a fork of @jorgebucaran’s colorette with hacks from @lukeed’s kleur. See changes between Nano Colors and colorette.

Nano Colors output

Sponsored by Evil Martians

Replacing chalk

  1. Replace import and use named exports:

    - import chalk from 'chalk'
    + import { red, bold } from 'nanocolors'
  2. Unprefix calls:

    - chalk.red(text)
    + red(text)
  3. Replace chains to nested calls:

    - chalk.red.bold(text)
    + red(bold(text))
  4. If you used template tag, then use the nanocolors-template:

    - import chalk from 'chalk'
    + import { colorize } from 'nanocolors-template'
    
    - chalk.yellow.bold`yellow {red ${"text"}}`
    + colorize`{yellow.bold yellow {red ${"text"}}}`

Above changes can be applied automatically using codemod:

npx jscodeshift FILES -t https://gist.githubusercontent.com/gavrix/ff051941ad9a19c8ea3224f38c30bc9a/raw/09d81e93f880ecbc8f52dcf7819816c81e2ba340/chalk_nanocolors_transform.js

API

Individual Colors

Nano Colors exports functions:

Colors Background Colors Modifiers
black bgBlack dim
red bgRed bold
green bgGreen hidden
yellow bgYellow italic
blue bgBlue underline
magenta bgMagenta strikethrough
cyan bgCyan reset
white bgWhite
gray

Functions are not chainable. You need to wrap it inside each other:

import { black, bgYellow } from 'nanocolors'

console.log(bgYellow(black(' WARN ')))

Functions will use colors only if Nano Colors auto-detect that current environment supports colors.

You can get support level in isColorSupported:

import { isColorSupported } from 'nanocolors'

if (isColorSupported) {
  console.log('With colors')
}

Conditional Support

You can manually switch colors on/off and override color support auto-detection:

import { createColors } from 'nanocolors'

const { red } = createColors(options.enableColors)

On undefined argument, createColors will use value from color support auto-detection.