-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
switch to a copy of
ansi-colors
to work around lacking support for …
…`process.env` in Parcel - see: parcel-bundler/parcel#7904
- Loading branch information
1 parent
62f7b73
commit e71002a
Showing
3 changed files
with
343 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,161 @@ | ||
// NOTE: copied from https://github.com/doowb/ansi-colors/blob/a4794363369d7b4d1872d248fc43a12761640d8e/types/index.d.ts | ||
// | ||
// TODO once this issue is resolved, switch back to `ansi-colors` proper | ||
// https://github.com/parcel-bundler/parcel/issues/7904 | ||
|
||
// Imported from DefinitelyTyped project. | ||
// TypeScript definitions for ansi-colors | ||
// Definitions by: Rogier Schouten <https://github.com/rogierschouten> | ||
// Integrated by: Jordan Mele <https://github.com/Silic0nS0ldier> | ||
|
||
type StyleArrayStructure = [number, number]; | ||
interface StyleArrayProperties { | ||
open: string; | ||
close: string; | ||
closeRe: string; | ||
} | ||
|
||
type StyleType = StyleArrayStructure & StyleArrayProperties; | ||
|
||
|
||
interface StylesType<T> { | ||
// modifiers | ||
reset: T; | ||
bold: T; | ||
dim: T; | ||
italic: T; | ||
underline: T; | ||
inverse: T; | ||
hidden: T; | ||
strikethrough: T; | ||
|
||
// colors | ||
black: T; | ||
red: T; | ||
green: T; | ||
yellow: T; | ||
blue: T; | ||
magenta: T; | ||
cyan: T; | ||
white: T; | ||
gray: T; | ||
grey: T; | ||
|
||
// bright colors | ||
blackBright: T; | ||
redBright: T; | ||
greenBright: T; | ||
yellowBright: T; | ||
blueBright: T; | ||
magentaBright: T; | ||
cyanBright: T; | ||
whiteBright: T; | ||
|
||
// background colors | ||
bgBlack: T; | ||
bgRed: T; | ||
bgGreen: T; | ||
bgYellow: T; | ||
bgBlue: T; | ||
bgMagenta: T; | ||
bgCyan: T; | ||
bgWhite: T; | ||
|
||
// bright background colors | ||
bgBlackBright: T; | ||
bgRedBright: T; | ||
bgGreenBright: T; | ||
bgYellowBright: T; | ||
bgBlueBright: T; | ||
bgMagentaBright: T; | ||
bgCyanBright: T; | ||
bgWhiteBright: T; | ||
} | ||
|
||
declare namespace ansiColors { | ||
interface StyleFunction extends StylesType<StyleFunction> { | ||
(s: string): string; | ||
} | ||
|
||
// modifiers | ||
const reset: StyleFunction; | ||
const bold: StyleFunction; | ||
const dim: StyleFunction; | ||
const italic: StyleFunction; | ||
const underline: StyleFunction; | ||
const inverse: StyleFunction; | ||
const hidden: StyleFunction; | ||
const strikethrough: StyleFunction; | ||
|
||
// colors | ||
const black: StyleFunction; | ||
const red: StyleFunction; | ||
const green: StyleFunction; | ||
const yellow: StyleFunction; | ||
const blue: StyleFunction; | ||
const magenta: StyleFunction; | ||
const cyan: StyleFunction; | ||
const white: StyleFunction; | ||
const gray: StyleFunction; | ||
const grey: StyleFunction; | ||
|
||
// bright colors | ||
const blackBright: StyleFunction; | ||
const redBright: StyleFunction; | ||
const greenBright: StyleFunction; | ||
const yellowBright: StyleFunction; | ||
const blueBright: StyleFunction; | ||
const magentaBright: StyleFunction; | ||
const cyanBright: StyleFunction; | ||
const whiteBright: StyleFunction; | ||
|
||
// background colors | ||
const bgBlack: StyleFunction; | ||
const bgRed: StyleFunction; | ||
const bgGreen: StyleFunction; | ||
const bgYellow: StyleFunction; | ||
const bgBlue: StyleFunction; | ||
const bgMagenta: StyleFunction; | ||
const bgCyan: StyleFunction; | ||
const bgWhite: StyleFunction; | ||
|
||
// bright background colors | ||
const bgBlackBright: StyleFunction; | ||
const bgRedBright: StyleFunction; | ||
const bgGreenBright: StyleFunction; | ||
const bgYellowBright: StyleFunction; | ||
const bgBlueBright: StyleFunction; | ||
const bgMagentaBright: StyleFunction; | ||
const bgCyanBright: StyleFunction; | ||
const bgWhiteBright: StyleFunction; | ||
|
||
let enabled: boolean; | ||
let visible: boolean; | ||
const ansiRegex: RegExp; | ||
|
||
/** | ||
* Remove styles from string | ||
*/ | ||
function stripColor(s: string): string; | ||
|
||
/** | ||
* Remove styles from string | ||
*/ | ||
function strip(s: string): string; | ||
|
||
/** | ||
* Remove styles from string | ||
*/ | ||
function unstyle(s: string): string; | ||
|
||
const styles: StylesType<StyleType>; | ||
|
||
/** | ||
* Outputs a string with check-symbol as prefix | ||
*/ | ||
function ok(...args: string[]): string; | ||
|
||
function create(): typeof ansiColors; | ||
} | ||
|
||
export = ansiColors; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,181 @@ | ||
'use strict'; | ||
|
||
// NOTE: copied from https://github.com/doowb/ansi-colors/blob/a4794363369d7b4d1872d248fc43a12761640d8e/index.js | ||
// | ||
// TODO once this issue is resolved, switch back to `ansi-colors` proper | ||
// https://github.com/parcel-bundler/parcel/issues/7904 | ||
|
||
const isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val); | ||
const identity = val => val; | ||
|
||
/* eslint-disable no-control-regex */ | ||
// this is a modified version of https://github.com/chalk/ansi-regex (MIT License) | ||
const ANSI_REGEX = /[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g; | ||
|
||
const create = () => { | ||
const colors = { enabled: true, visible: true, styles: {}, keys: {} }; | ||
|
||
// if ('FORCE_COLOR' in process.env) { | ||
// colors.enabled = process.env.FORCE_COLOR !== '0'; | ||
// } | ||
|
||
const ansi = style => { | ||
let open = style.open = `\u001b[${style.codes[0]}m`; | ||
let close = style.close = `\u001b[${style.codes[1]}m`; | ||
let regex = style.regex = new RegExp(`\\u001b\\[${style.codes[1]}m`, 'g'); | ||
style.wrap = (input, newline) => { | ||
if (input.includes(close)) input = input.replace(regex, close + open); | ||
let output = open + input + 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 newline ? output.replace(/\r*\n/g, `${close}$&${open}`) : output; | ||
}; | ||
return style; | ||
}; | ||
|
||
const wrap = (style, input, newline) => { | ||
return typeof style === 'function' ? style(input) : style.wrap(input, newline); | ||
}; | ||
|
||
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; | ||
if (n > 0 && stack.includes('unstyle')) { | ||
stack = [...new Set(['unstyle', ...stack])].reverse(); | ||
} | ||
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 keys = colors.keys[type] || (colors.keys[type] = []); | ||
keys.push(name); | ||
|
||
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('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('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'); | ||
|
||
colors.ansiRegex = ANSI_REGEX; | ||
colors.hasColor = colors.hasAnsi = str => { | ||
colors.ansiRegex.lastIndex = 0; | ||
return typeof str === 'string' && str !== '' && colors.ansiRegex.test(str); | ||
}; | ||
|
||
colors.alias = (name, color) => { | ||
let fn = typeof color === 'string' ? colors[color] : color; | ||
|
||
if (typeof fn !== 'function') { | ||
throw new TypeError('Expected alias to be the name of an existing color (string) or a function'); | ||
} | ||
|
||
if (!fn.stack) { | ||
Reflect.defineProperty(fn, 'name', { value: name }); | ||
colors.styles[name] = fn; | ||
fn.stack = [name]; | ||
} | ||
|
||
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 = custom => { | ||
if (!isObject(custom)) throw new TypeError('Expected theme to be an object'); | ||
for (let name of Object.keys(custom)) { | ||
colors.alias(name, custom[name]); | ||
} | ||
return colors; | ||
}; | ||
|
||
colors.alias('unstyle', str => { | ||
if (typeof str === 'string' && str !== '') { | ||
colors.ansiRegex.lastIndex = 0; | ||
return str.replace(colors.ansiRegex, ''); | ||
} | ||
return ''; | ||
}); | ||
|
||
colors.alias('noop', str => str); | ||
colors.none = colors.clear = colors.noop; | ||
|
||
colors.stripColor = colors.unstyle; | ||
colors.define = define; | ||
return colors; | ||
}; | ||
|
||
module.exports = create(); | ||
module.exports.create = create; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters