UNPKG

2.29 kBJavaScriptView Raw
1'use strict'
2
3var cli = require('..')
4const stripAnsi = require('strip-ansi')
5
6var mocking
7
8function concatArguments (args) {
9 return Array.prototype.map.call(args, function (arg) {
10 return arg + ''
11 }).join(' ')
12}
13
14/**
15 * log is a wrapper for console.log() but can be mocked
16 *
17 * @param {...Object} obj - objects to be printed to stdout
18 */
19function log () {
20 if (mocking) {
21 cli.stdout += stripAnsi(concatArguments(arguments) + '\n')
22 } else {
23 console.log.apply(null, arguments)
24 }
25}
26
27/**
28 * writeLog is a wrapper for process.stdout.write() but can be mocked
29 *
30 * @param {...Object} obj - objects to be printed to stdout
31 */
32function writeLog () {
33 if (mocking) {
34 cli.stdout += stripAnsi(concatArguments(arguments))
35 } else {
36 process.stdout.write.apply(process.stdout, arguments)
37 }
38}
39
40function hush () {
41 let debug = process.env.HEROKU_DEBUG
42 if (debug && (debug === '1' || debug.toUpperCase() === 'TRUE')) {
43 console.error.apply(null, arguments)
44 }
45}
46
47/**
48 * error is a wrapper for console.error() but can be mocked
49 *
50 * @param {...Object} obj - objects to be printed to stderr
51 */
52function error () {
53 if (mocking) {
54 cli.stderr += stripAnsi(concatArguments(arguments) + '\n')
55 } else {
56 console.error.apply(null, arguments)
57 }
58}
59
60/**
61 * writeError is a wrapper for process.stderr.write() but can be mocked
62 *
63 * @param {...Object} obj - objects to be printed to stderr
64 */
65function writeError () {
66 if (mocking) {
67 cli.stderr += stripAnsi(concatArguments(arguments))
68 } else {
69 process.stderr.write.apply(process.stderr, arguments)
70 }
71}
72
73/**
74 * mock will make {@link log} and {@link error}
75 * stop printing to stdout and stderr and start writing to the
76 * stdout and stderr strings.
77 */
78function mock (mock) {
79 if (mock === false) {
80 mocking = false
81 } else {
82 mocking = true
83 cli.stderr = ''
84 cli.stdout = ''
85 }
86}
87
88/**
89 * debug pretty prints an object.
90 * It simply calls console.dir with color enabled.
91 *
92 * @param {Object} obj - object to be printed
93 */
94function debug (obj) {
95 console.dir(obj, {colors: true})
96}
97
98exports.hush = hush
99exports.log = log
100exports.writeLog = writeLog
101exports.error = error
102exports.writeError = writeError
103exports.mock = mock
104exports.mocking = () => mocking
105exports.debug = debug