picocolors
Advanced tools
Comparing version 0.2.1 to 1.0.0
{ | ||
"name": "picocolors", | ||
"version": "0.2.1", | ||
"version": "1.0.0", | ||
"main": "./picocolors.js", | ||
@@ -10,3 +10,3 @@ "types": "./picocolors.d.ts", | ||
"sideEffects": false, | ||
"description": "The tiniest and the fastest coloring library ever", | ||
"description": "The tiniest and the fastest library for terminal output formatting with ANSI colors", | ||
"files": [ | ||
@@ -13,0 +13,0 @@ "picocolors.*", |
import { Colors } from "./types" | ||
declare const picocolors: Colors & { createColors: (enabled: boolean) => Colors } | ||
declare const picocolors: Colors & { createColors: (enabled?: boolean) => Colors } | ||
export = picocolors |
@@ -11,51 +11,49 @@ let tty = require("tty") | ||
function formatter(open, close, replace = open) { | ||
return (input) => { | ||
let formatter = | ||
(open, close, replace = open) => | ||
input => { | ||
let string = "" + input | ||
let index = string.indexOf(close, open.length) | ||
return !~index | ||
? open + string + close | ||
: open + replaceClose(string, close, replace, index) + close | ||
return ~index | ||
? open + replaceClose(string, close, replace, index) + close | ||
: open + string + close | ||
} | ||
} | ||
function replaceClose(string, close, replace, index) { | ||
let replaceClose = (string, close, replace, index) => { | ||
let start = string.substring(0, index) + replace | ||
let end = string.substring(index + close.length) | ||
let nextIndex = end.indexOf(close) | ||
return !~nextIndex ? start + end : start + replaceClose(end, close, replace, nextIndex) | ||
return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end | ||
} | ||
function createColors(enabled = isColorSupported) { | ||
return { | ||
isColorSupported: enabled, | ||
reset: enabled ? (s) => `\x1b[0m${s}\x1b[0m` : String, | ||
bold: enabled ? formatter("\x1b[1m", "\x1b[22m", "\x1b[22m\x1b[1m") : String, | ||
dim: enabled ? formatter("\x1b[2m", "\x1b[22m", "\x1b[22m\x1b[2m") : String, | ||
italic: enabled ? formatter("\x1b[3m", "\x1b[23m") : String, | ||
underline: enabled ? formatter("\x1b[4m", "\x1b[24m") : String, | ||
inverse: enabled ? formatter("\x1b[7m", "\x1b[27m") : String, | ||
hidden: enabled ? formatter("\x1b[8m", "\x1b[28m") : String, | ||
strikethrough: enabled ? formatter("\x1b[9m", "\x1b[29m") : String, | ||
black: enabled ? formatter("\x1b[30m", "\x1b[39m") : String, | ||
red: enabled ? formatter("\x1b[31m", "\x1b[39m") : String, | ||
green: enabled ? formatter("\x1b[32m", "\x1b[39m") : String, | ||
yellow: enabled ? formatter("\x1b[33m", "\x1b[39m") : String, | ||
blue: enabled ? formatter("\x1b[34m", "\x1b[39m") : String, | ||
magenta: enabled ? formatter("\x1b[35m", "\x1b[39m") : String, | ||
cyan: enabled ? formatter("\x1b[36m", "\x1b[39m") : String, | ||
white: enabled ? formatter("\x1b[37m", "\x1b[39m") : String, | ||
gray: enabled ? formatter("\x1b[90m", "\x1b[39m") : String, | ||
bgBlack: enabled ? formatter("\x1b[40m", "\x1b[49m") : String, | ||
bgRed: enabled ? formatter("\x1b[41m", "\x1b[49m") : String, | ||
bgGreen: enabled ? formatter("\x1b[42m", "\x1b[49m") : String, | ||
bgYellow: enabled ? formatter("\x1b[43m", "\x1b[49m") : String, | ||
bgBlue: enabled ? formatter("\x1b[44m", "\x1b[49m") : String, | ||
bgMagenta: enabled ? formatter("\x1b[45m", "\x1b[49m") : String, | ||
bgCyan: enabled ? formatter("\x1b[46m", "\x1b[49m") : String, | ||
bgWhite: enabled ? formatter("\x1b[47m", "\x1b[49m") : String, | ||
} | ||
} | ||
let createColors = (enabled = isColorSupported) => ({ | ||
isColorSupported: enabled, | ||
reset: enabled ? s => `\x1b[0m${s}\x1b[0m` : String, | ||
bold: enabled ? formatter("\x1b[1m", "\x1b[22m", "\x1b[22m\x1b[1m") : String, | ||
dim: enabled ? formatter("\x1b[2m", "\x1b[22m", "\x1b[22m\x1b[2m") : String, | ||
italic: enabled ? formatter("\x1b[3m", "\x1b[23m") : String, | ||
underline: enabled ? formatter("\x1b[4m", "\x1b[24m") : String, | ||
inverse: enabled ? formatter("\x1b[7m", "\x1b[27m") : String, | ||
hidden: enabled ? formatter("\x1b[8m", "\x1b[28m") : String, | ||
strikethrough: enabled ? formatter("\x1b[9m", "\x1b[29m") : String, | ||
black: enabled ? formatter("\x1b[30m", "\x1b[39m") : String, | ||
red: enabled ? formatter("\x1b[31m", "\x1b[39m") : String, | ||
green: enabled ? formatter("\x1b[32m", "\x1b[39m") : String, | ||
yellow: enabled ? formatter("\x1b[33m", "\x1b[39m") : String, | ||
blue: enabled ? formatter("\x1b[34m", "\x1b[39m") : String, | ||
magenta: enabled ? formatter("\x1b[35m", "\x1b[39m") : String, | ||
cyan: enabled ? formatter("\x1b[36m", "\x1b[39m") : String, | ||
white: enabled ? formatter("\x1b[37m", "\x1b[39m") : String, | ||
gray: enabled ? formatter("\x1b[90m", "\x1b[39m") : String, | ||
bgBlack: enabled ? formatter("\x1b[40m", "\x1b[49m") : String, | ||
bgRed: enabled ? formatter("\x1b[41m", "\x1b[49m") : String, | ||
bgGreen: enabled ? formatter("\x1b[42m", "\x1b[49m") : String, | ||
bgYellow: enabled ? formatter("\x1b[43m", "\x1b[49m") : String, | ||
bgBlue: enabled ? formatter("\x1b[44m", "\x1b[49m") : String, | ||
bgMagenta: enabled ? formatter("\x1b[45m", "\x1b[49m") : String, | ||
bgCyan: enabled ? formatter("\x1b[46m", "\x1b[49m") : String, | ||
bgWhite: enabled ? formatter("\x1b[47m", "\x1b[49m") : String, | ||
}) | ||
module.exports = createColors() | ||
module.exports.createColors = createColors |
# picocolors | ||
npm install picocolors | ||
The tiniest and the fastest library for terminal output formatting with ANSI colors. | ||
A tinier and faster alternative to [nanocolors](https://github.com/ai/nanocolors). Andrey, are you even trying? | ||
```javascript | ||
import pc from "picocolors"; | ||
import pc from "picocolors" | ||
console.log(pc.green(`How are ${pc.italic(`you`)} doing?`)); | ||
console.log( | ||
pc.green(`How are ${pc.italic(`you`)} doing?`) | ||
) | ||
``` | ||
- Up to [2x faster and 2x smaller](#benchmarks) than alternatives | ||
- 3x faster and 10x smaller than `chalk` | ||
- [TypeScript](https://www.typescriptlang.org/) support | ||
- [`NO_COLOR`](https://no-color.org/) friendly | ||
- Node.js v6+ & browsers support | ||
- The same API, but faster, much faster | ||
- No `String.prototype` modifications (anyone still doing it?) | ||
- No dependencies and the smallest `node_modules` footprint | ||
- **No dependencies.** | ||
- **14 times** smaller and **2 times** faster than chalk. | ||
- Used by popular tools like PostCSS, SVGO, Stylelint, and Browserslist. | ||
- Node.js v6+ & browsers support. Support for both CJS and ESM projects. | ||
- TypeScript type declarations included. | ||
- [`NO_COLOR`](https://no-color.org/) friendly. | ||
## Docs | ||
Read **[full docs](https://github.com/alexeyraspopov/picocolors#readme)** on GitHub. |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
1
5655
90
22