ansi-colors
Advanced tools
Comparing version 3.2.4 to 4.0.1
232
index.js
'use strict'; | ||
const colors = { enabled: true, visible: true, styles: {}, keys: {} }; | ||
const create = () => { | ||
const colors = { enabled: true, visible: true, styles: {}, keys: {} }; | ||
if ('FORCE_COLOR' in process.env) { | ||
colors.enabled = process.env.FORCE_COLOR !== '0'; | ||
} | ||
if ('FORCE_COLOR' in process.env) { | ||
colors.enabled = process.env.FORCE_COLOR !== '0'; | ||
} | ||
const ansi = style => { | ||
style.open = `\u001b[${style.codes[0]}m`; | ||
style.close = `\u001b[${style.codes[1]}m`; | ||
style.regex = new RegExp(`\\u001b\\[${style.codes[1]}m`, 'g'); | ||
return style; | ||
}; | ||
const ansi = style => { | ||
style.open = `\u001b[${style.codes[0]}m`; | ||
style.close = `\u001b[${style.codes[1]}m`; | ||
style.regex = new RegExp(`\\u001b\\[${style.codes[1]}m`, 'g'); | ||
return style; | ||
}; | ||
const wrap = (style, str, nl) => { | ||
let { open, close, regex } = style; | ||
str = open + (str.includes(close) ? str.replace(regex, close + open) : str) + close; | ||
// see https://github.com/chalk/chalk/pull/92, thanks to the | ||
// chalk contributors for this fix. However, we've confirmed that | ||
// this issue is also present in Windows terminals | ||
return nl ? str.replace(/\r?\n/g, `${close}$&${open}`) : str; | ||
}; | ||
const wrap = (style, str, nl) => { | ||
let { open, close, regex } = style; | ||
str = open + (str.includes(close) ? str.replace(regex, close + open) : str) + close; | ||
// see https://github.com/chalk/chalk/pull/92, thanks to the | ||
// chalk contributors for this fix. However, we've confirmed that | ||
// this issue is also present in Windows terminals | ||
return nl ? str.replace(/\r*\n/g, `${close}$&${open}`) : str; | ||
}; | ||
const style = (input, stack) => { | ||
if (input === '' || input == null) return ''; | ||
if (colors.enabled === false) return input; | ||
if (colors.visible === false) return ''; | ||
let str = '' + input; | ||
let nl = str.includes('\n'); | ||
let n = stack.length; | ||
while (n-- > 0) str = wrap(colors.styles[stack[n]], str, nl); | ||
return str; | ||
}; | ||
const style = (input, stack) => { | ||
if (input === '' || input == null) return ''; | ||
if (colors.enabled === false) return input; | ||
if (colors.visible === false) return ''; | ||
let str = '' + input; | ||
let nl = str.includes('\n'); | ||
let n = stack.length; | ||
while (n-- > 0) str = wrap(colors.styles[stack[n]], str, nl); | ||
return str; | ||
}; | ||
const define = (name, codes, type) => { | ||
colors.styles[name] = ansi({ name, codes }); | ||
let t = colors.keys[type] || (colors.keys[type] = []); | ||
t.push(name); | ||
const define = (name, codes, type) => { | ||
colors.styles[name] = ansi({ name, codes }); | ||
let t = colors.keys[type] || (colors.keys[type] = []); | ||
t.push(name); | ||
Reflect.defineProperty(colors, name, { | ||
get() { | ||
let color = input => style(input, color.stack); | ||
Reflect.setPrototypeOf(color, colors); | ||
color.stack = this.stack ? this.stack.concat(name) : [name]; | ||
return color; | ||
} | ||
}); | ||
}; | ||
Reflect.defineProperty(colors, name, { | ||
configurable: true, | ||
enumerable: true, | ||
set(value) { | ||
colors.alias(name, value); | ||
}, | ||
get() { | ||
let color = input => style(input, color.stack); | ||
Reflect.setPrototypeOf(color, colors); | ||
color.stack = this.stack ? this.stack.concat(name) : [name]; | ||
return color; | ||
} | ||
}); | ||
}; | ||
define('reset', [0, 0], 'modifier'); | ||
define('bold', [1, 22], 'modifier'); | ||
define('dim', [2, 22], 'modifier'); | ||
define('italic', [3, 23], 'modifier'); | ||
define('underline', [4, 24], 'modifier'); | ||
define('inverse', [7, 27], 'modifier'); | ||
define('hidden', [8, 28], 'modifier'); | ||
define('strikethrough', [9, 29], 'modifier'); | ||
define('reset', [0, 0], 'modifier'); | ||
define('bold', [1, 22], 'modifier'); | ||
define('dim', [2, 22], 'modifier'); | ||
define('italic', [3, 23], 'modifier'); | ||
define('underline', [4, 24], 'modifier'); | ||
define('inverse', [7, 27], 'modifier'); | ||
define('hidden', [8, 28], 'modifier'); | ||
define('strikethrough', [9, 29], 'modifier'); | ||
define('black', [30, 39], 'color'); | ||
define('red', [31, 39], 'color'); | ||
define('green', [32, 39], 'color'); | ||
define('yellow', [33, 39], 'color'); | ||
define('blue', [34, 39], 'color'); | ||
define('magenta', [35, 39], 'color'); | ||
define('cyan', [36, 39], 'color'); | ||
define('white', [37, 39], 'color'); | ||
define('gray', [90, 39], 'color'); | ||
define('grey', [90, 39], 'color'); | ||
define('black', [30, 39], 'color'); | ||
define('red', [31, 39], 'color'); | ||
define('green', [32, 39], 'color'); | ||
define('yellow', [33, 39], 'color'); | ||
define('blue', [34, 39], 'color'); | ||
define('magenta', [35, 39], 'color'); | ||
define('cyan', [36, 39], 'color'); | ||
define('white', [37, 39], 'color'); | ||
define('gray', [90, 39], 'color'); | ||
define('grey', [90, 39], 'color'); | ||
define('bgBlack', [40, 49], 'bg'); | ||
define('bgRed', [41, 49], 'bg'); | ||
define('bgGreen', [42, 49], 'bg'); | ||
define('bgYellow', [43, 49], 'bg'); | ||
define('bgBlue', [44, 49], 'bg'); | ||
define('bgMagenta', [45, 49], 'bg'); | ||
define('bgCyan', [46, 49], 'bg'); | ||
define('bgWhite', [47, 49], 'bg'); | ||
define('bgBlack', [40, 49], 'bg'); | ||
define('bgRed', [41, 49], 'bg'); | ||
define('bgGreen', [42, 49], 'bg'); | ||
define('bgYellow', [43, 49], 'bg'); | ||
define('bgBlue', [44, 49], 'bg'); | ||
define('bgMagenta', [45, 49], 'bg'); | ||
define('bgCyan', [46, 49], 'bg'); | ||
define('bgWhite', [47, 49], 'bg'); | ||
define('blackBright', [90, 39], 'bright'); | ||
define('redBright', [91, 39], 'bright'); | ||
define('greenBright', [92, 39], 'bright'); | ||
define('yellowBright', [93, 39], 'bright'); | ||
define('blueBright', [94, 39], 'bright'); | ||
define('magentaBright', [95, 39], 'bright'); | ||
define('cyanBright', [96, 39], 'bright'); | ||
define('whiteBright', [97, 39], 'bright'); | ||
define('blackBright', [90, 39], 'bright'); | ||
define('redBright', [91, 39], 'bright'); | ||
define('greenBright', [92, 39], 'bright'); | ||
define('yellowBright', [93, 39], 'bright'); | ||
define('blueBright', [94, 39], 'bright'); | ||
define('magentaBright', [95, 39], 'bright'); | ||
define('cyanBright', [96, 39], 'bright'); | ||
define('whiteBright', [97, 39], 'bright'); | ||
define('bgBlackBright', [100, 49], 'bgBright'); | ||
define('bgRedBright', [101, 49], 'bgBright'); | ||
define('bgGreenBright', [102, 49], 'bgBright'); | ||
define('bgYellowBright', [103, 49], 'bgBright'); | ||
define('bgBlueBright', [104, 49], 'bgBright'); | ||
define('bgMagentaBright', [105, 49], 'bgBright'); | ||
define('bgCyanBright', [106, 49], 'bgBright'); | ||
define('bgWhiteBright', [107, 49], 'bgBright'); | ||
define('bgBlackBright', [100, 49], 'bgBright'); | ||
define('bgRedBright', [101, 49], 'bgBright'); | ||
define('bgGreenBright', [102, 49], 'bgBright'); | ||
define('bgYellowBright', [103, 49], 'bgBright'); | ||
define('bgBlueBright', [104, 49], 'bgBright'); | ||
define('bgMagentaBright', [105, 49], 'bgBright'); | ||
define('bgCyanBright', [106, 49], 'bgBright'); | ||
define('bgWhiteBright', [107, 49], 'bgBright'); | ||
/* eslint-disable no-control-regex */ | ||
// this is a modified, optimized version of | ||
// https://github.com/chalk/ansi-regex (MIT License) | ||
const re = colors.ansiRegex = /[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g; | ||
/* eslint-disable no-control-regex */ | ||
// this is a modified, optimized version of | ||
// https://github.com/chalk/ansi-regex (MIT License) | ||
const re = colors.ansiRegex = /[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g; | ||
colors.hasColor = colors.hasAnsi = str => { | ||
re.lastIndex = 0; | ||
return !!str && typeof str === 'string' && re.test(str); | ||
}; | ||
colors.hasColor = colors.hasAnsi = str => { | ||
re.lastIndex = 0; | ||
return !!str && typeof str === 'string' && re.test(str); | ||
}; | ||
colors.unstyle = str => { | ||
re.lastIndex = 0; | ||
return typeof str === 'string' ? str.replace(re, '') : str; | ||
colors.unstyle = str => { | ||
re.lastIndex = 0; | ||
return typeof str === 'string' ? str.replace(re, '') : str; | ||
}; | ||
colors.alias = (name, color) => { | ||
let fn = typeof color === 'string' ? colors[color] : color; | ||
Reflect.defineProperty(colors, name, { | ||
configurable: true, | ||
enumerable: true, | ||
set(value) { | ||
colors.alias(name, value); | ||
}, | ||
get() { | ||
let color = input => style(input, color.stack); | ||
Reflect.setPrototypeOf(color, colors); | ||
color.stack = this.stack ? this.stack.concat(fn.stack) : fn.stack; | ||
return color; | ||
} | ||
}); | ||
}; | ||
colors.theme = obj => { | ||
for (let name of Object.keys(obj)) { | ||
colors.alias(name, obj[name]); | ||
} | ||
return colors; | ||
}; | ||
colors.none = colors.clear = colors.noop = str => str; // no-op, for programmatic usage | ||
colors.stripColor = colors.unstyle; | ||
colors.symbols = require('./symbols'); | ||
colors.define = define; | ||
return colors; | ||
}; | ||
colors.none = colors.clear = colors.noop = str => str; // no-op, for programmatic usage | ||
colors.stripColor = colors.unstyle; | ||
colors.symbols = require('./symbols'); | ||
colors.define = define; | ||
module.exports = colors; | ||
module.exports = create(); | ||
module.exports.create = create; |
{ | ||
"name": "ansi-colors", | ||
"description": "Easily add ANSI colors to your text and symbols in the terminal. A faster drop-in replacement for chalk, kleur and turbocolor (without the dependencies and rendering bugs).", | ||
"version": "3.2.4", | ||
"version": "4.0.1", | ||
"homepage": "https://github.com/doowb/ansi-colors", | ||
@@ -32,6 +32,6 @@ "author": "Brian Woodward (https://github.com/doowb)", | ||
"devDependencies": { | ||
"decache": "^4.4.0", | ||
"gulp-format-md": "^1.0.0", | ||
"decache": "^4.5.1", | ||
"gulp-format-md": "^2.0.0", | ||
"justified": "^1.0.1", | ||
"mocha": "^5.2.0", | ||
"mocha": "^6.1.4", | ||
"text-table": "^0.2.0" | ||
@@ -38,0 +38,0 @@ }, |
@@ -144,2 +144,44 @@ # ansi-colors [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=W8YFZ425KND68) [![NPM version](https://img.shields.io/npm/v/ansi-colors.svg?style=flat)](https://www.npmjs.com/package/ansi-colors) [![NPM monthly downloads](https://img.shields.io/npm/dm/ansi-colors.svg?style=flat)](https://npmjs.org/package/ansi-colors) [![NPM total downloads](https://img.shields.io/npm/dt/ansi-colors.svg?style=flat)](https://npmjs.org/package/ansi-colors) [![Linux Build Status](https://img.shields.io/travis/doowb/ansi-colors.svg?style=flat&label=Travis)](https://travis-ci.org/doowb/ansi-colors) | ||
## Aliases | ||
Create custom aliases for styles. | ||
```js | ||
const colors = require('ansi-colors'); | ||
colors.alias('primary', colors.yellow); | ||
colors.alias('secondary', colors.bold); | ||
console.log(colors.primary.secondary('Foo')); | ||
``` | ||
## Themes | ||
A theme is an object of custom aliases. | ||
```js | ||
const colors = require('ansi-colors'); | ||
colors.theme({ | ||
danger: colors.red, | ||
dark: colors.dim.gray, | ||
disabled: colors.gray, | ||
em: colors.italic, | ||
heading: colors.bold.underline, | ||
info: colors.cyan, | ||
muted: colors.dim, | ||
primary: colors.blue, | ||
strong: colors.bold, | ||
success: colors.green, | ||
underline: colors.underline, | ||
warning: colors.yellow | ||
}); | ||
// Now, we can use our custom styles alongside the built-in styles! | ||
console.log(colors.danger.strong.em('Error!')); | ||
console.log(colors.warning('Heads up!')); | ||
console.log(colors.info('Did you know...')); | ||
console.log(colors.success.bold('It worked!')); | ||
``` | ||
## Performance | ||
@@ -251,3 +293,3 @@ | ||
| 42 | [doowb](https://github.com/doowb) | | ||
| 38 | [jonschlinkert](https://github.com/jonschlinkert) | | ||
| 41 | [jonschlinkert](https://github.com/jonschlinkert) | | ||
| 6 | [lukeed](https://github.com/lukeed) | | ||
@@ -268,8 +310,2 @@ | 2 | [Silic0nS0ldier](https://github.com/Silic0nS0ldier) | | ||
Please consider supporting me on Patreon, or [start your own Patreon page](https://patreon.com/invite/bxpbvm)! | ||
<a href="https://www.patreon.com/jonschlinkert"> | ||
<img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" height="50"> | ||
</a> | ||
### License | ||
@@ -282,2 +318,2 @@ | ||
_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on March 03, 2019._ | ||
_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on June 19, 2019._ |
'use strict'; | ||
const isHyper = process.env.TERM_PROGRAM === 'Hyper'; | ||
const isWindows = process.platform === 'win32'; | ||
const isLinux = process.platform === 'linux'; | ||
const common = { | ||
ballotDisabled: '☒', | ||
ballotOff: '☐', | ||
ballotOn: '☑', | ||
bullet: '•', | ||
bulletWhite: '◦', | ||
fullBlock: '█', | ||
heart: '❤', | ||
identicalTo: '≡', | ||
line: '─', | ||
mark: '※', | ||
middot: '·', | ||
minus: '-', | ||
multiplication: '×', | ||
obelus: '÷', | ||
pencilDownRight: '✎', | ||
pencilRight: '✏', | ||
pencilUpRight: '✐', | ||
percent: '%', | ||
pilcrow2: '❡', | ||
pilcrow: '¶', | ||
plusMinus: '±', | ||
section: '§', | ||
starsOff: '☆', | ||
starsOn: '★', | ||
upDownArrow: '↕' | ||
}; | ||
const windows = { | ||
bullet: '•', | ||
...common, | ||
check: '√', | ||
cross: '×', | ||
ellipsisLarge: '...', | ||
ellipsis: '...', | ||
heart: '❤', | ||
info: 'i', | ||
line: '─', | ||
middot: '·', | ||
minus: '-', | ||
plus: '+', | ||
question: '?', | ||
questionSmall: '﹖', | ||
questionSmall: '?', | ||
pointer: '>', | ||
pointerSmall: '»', | ||
radioOff: '( )', | ||
radioOn: '(*)', | ||
warning: '‼' | ||
@@ -25,13 +52,9 @@ }; | ||
const other = { | ||
...common, | ||
ballotCross: '✘', | ||
bullet: '•', | ||
check: '✔', | ||
cross: '✖', | ||
ellipsisLarge: '⋯', | ||
ellipsis: '…', | ||
heart: '❤', | ||
info: 'ℹ', | ||
line: '─', | ||
middot: '·', | ||
minus: '-', | ||
plus: '+', | ||
question: '?', | ||
@@ -42,7 +65,10 @@ questionFull: '?', | ||
pointerSmall: isLinux ? '‣' : '›', | ||
radioOff: '◯', | ||
radioOn: '◉', | ||
warning: '⚠' | ||
}; | ||
module.exports = isWindows ? windows : other; | ||
module.exports = (isWindows && !isHyper) ? windows : other; | ||
Reflect.defineProperty(module.exports, 'common', { enumerable: false, value: common }); | ||
Reflect.defineProperty(module.exports, 'windows', { enumerable: false, value: windows }); | ||
Reflect.defineProperty(module.exports, 'other', { enumerable: false, value: other }); |
23464
340
315