UNPKG

1.11 kBJavaScriptView Raw
1const chalk = require('chalk')
2
3/**
4 * Chalk instance for CLI
5 * @param {boolean} noColors - disable chalk colors
6 * @return {object} - chalk instance or proxy noOp
7 */
8function safeChalk(noColors) {
9 /* if no colors return proxy to chalk API */
10 if (noColors) {
11 return neverNull(chalk)
12 }
13 return chalk
14}
15
16function noop() {}
17
18function neverNull(obj) {
19 function match(some, none = noop) {
20 return obj != null ? some(obj) : none()
21 }
22 return new Proxy(
23 (some, none) => {
24 if (some) {
25 // has value return it with no chalk wrapper
26 return some
27 }
28 if (!some && !none) return obj
29 return match(some, none)
30 },
31 {
32 get: (target, key) => {
33 const obj = target()
34 if (obj !== null && typeof obj === 'object') {
35 return neverNull(obj[key])
36 } else {
37 return neverNull()
38 }
39 },
40 set: (target, key, val) => {
41 const obj = target()
42 if (obj !== null && typeof obj === 'object') {
43 obj[key] = val
44 }
45 return true
46 }
47 }
48 )
49}
50
51module.exports = safeChalk