Skip to content
This repository was archived by the owner on Aug 22, 2023. It is now read-only.

Commit 9e8e045

Browse files
committed
feat: added debug mode
1 parent 1757da9 commit 9e8e045

File tree

4 files changed

+28
-6
lines changed

4 files changed

+28
-6
lines changed

src/config.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,24 @@
1+
// tslint:disable no-console
2+
13
import {Logger} from './logger'
24

35
const g = global.anycli = global.anycli || {}
46

7+
function displayWarnings() {
8+
if (process.listenerCount('warning') > 1) return
9+
process.on('warning', (warning: any) => {
10+
console.error(warning.stack)
11+
if (warning.detail) console.error(warning.detail)
12+
})
13+
}
14+
515
export const config = {
616
errorLogger: undefined as Logger | undefined,
7-
get debug(): string | undefined { return g.errlog },
8-
set debug(errlog: string | undefined) { g.errlog = errlog },
17+
get debug(): boolean { return !!g.debug },
18+
set debug(enabled: boolean) {
19+
g.debug = enabled
20+
if (enabled) displayWarnings()
21+
},
922
get errlog(): string | undefined { return g.errlog },
1023
set errlog(errlog: string | undefined) {
1124
g.errlog = errlog

src/errors/cli.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
// tslint:disable no-implicit-dependencies
22

33
import Chalk from 'chalk'
4+
import Clean = require('clean-stack')
45
import Indent = require('indent-string')
56
import * as Wrap from 'wrap-ansi'
67

8+
import {config} from '../config'
9+
710
export class CLIError extends Error {
811
anycli: any
912
code?: string
@@ -20,7 +23,15 @@ export class CLIError extends Error {
2023
this.code = options.code
2124
}
2225

26+
get stack(): string {
27+
const clean: typeof Clean = require('clean-stack')
28+
return clean(super.stack!, {pretty: true})
29+
}
30+
2331
render(): string {
32+
if (config.debug) {
33+
return this.stack
34+
}
2435
let wrap: typeof Wrap = require('wrap-ansi')
2536
let indent: typeof Indent = require('indent-string')
2637

src/global.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
declare namespace NodeJS {
44
interface Global {
55
anycli?: {
6+
debug?: boolean
67
errlog?: string
78
}
89
}

src/index.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
// tslint:disable no-console
22

3-
import Clean = require('clean-stack')
43
export {handle} from './handle'
54
export {ExitError} from './errors/exit'
65
export {CLIError} from './errors/cli'
@@ -22,7 +21,5 @@ export function error(err: string | Error, options: {code?: string, exit?: numbe
2221
export function warn(input: string | Error) {
2322
let err = new CLIError.Warn(input)
2423
console.error(err.render())
25-
const clean: typeof Clean = require('clean-stack')
26-
let stack = clean(err.stack!, {pretty: true})
27-
if (config.errorLogger) config.errorLogger.log(stack)
24+
if (config.errorLogger) config.errorLogger.log(err.stack)
2825
}

0 commit comments

Comments
 (0)