diff options
Diffstat (limited to 'colors/mod.ts')
| -rw-r--r-- | colors/mod.ts | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/colors/mod.ts b/colors/mod.ts new file mode 100644 index 000000000..8316060db --- /dev/null +++ b/colors/mod.ts @@ -0,0 +1,33 @@ +// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import { styles } from "./styles.ts"; + +type Styles = { readonly [S in keyof typeof styles]: Color }; + +type Color = Styles & { + (str: string): string; +}; + +const styleStack: string[] = []; + +export const color = function color(str: string): string { + styleStack.reverse(); + while (styleStack.length) { + const style = styleStack.pop(); + const code = styles[style]; + str = `${code.open}${str.replace(code.closeRe, code.open)}${ + code.close + }`.replace(/\r?\n/g, `${code.close}$&${code.open}`); + } + return str; +} as Color; + +for (const style of Object.keys(styles)) { + Object.defineProperty(color, style, { + get() { + styleStack.push(style); + return color; + }, + enumerable: true, + configurable: false + }); +} |
