sdin
Version:
JavaScript package builder.
122 lines (110 loc) • 3.61 kB
text/typescript
export function red(msg: any): string {
return msg ? '\x1B[31m' + msg + '\x1B[0m' : ''
}
export function green(msg: any): string {
return msg ? '\x1B[32m' + msg + '\x1B[0m' : ''
}
export function yellow(msg: any): string {
return msg ? '\x1B[33m' + msg + '\x1B[0m' : ''
}
export function blue(msg: any): string {
return msg ? '\x1B[34m' + msg + '\x1B[0m' : ''
}
export function magenta(msg: any): string {
return msg ? '\x1B[35m' + msg + '\x1B[0m' : ''
}
export function cyan(msg: any): string {
return msg ? '\x1B[36m' + msg + '\x1B[0m' : ''
}
function indentMessage(msg: any, icon?: string): string | undefined {
const msgs = Array.isArray(msg) ? msg : [msg]
const suf1 = msgs.length > 2 ? '\n ' : '\n '
const suf2 = msgs.length > 2 ? '\n - ' : '\n '
const strs: string[] = []
for (const item of msgs) {
if (item) {
const str1 =
typeof item === 'string'
? item
: item instanceof Error
? item.message
: JSON.stringify(item)
if (str1) {
strs.push(str1.replaceAll('\n', suf1))
}
}
}
if (strs.length > 0) {
return (icon ? icon + ' ' : '') + strs.join(suf2)
}
return undefined
}
export function print(msg: any, icon: string | undefined, exitCode: number): never
export function print(msg: any, icon?: string, exitCode?: undefined): void
export function print(msg: any, icon?: string, exitCode?: number): void {
const indented = msg ? indentMessage(msg, icon) : undefined
if (indented) {
console.log(indented)
}
if (Number.isInteger(exitCode)) {
console.log()
process.exit(exitCode)
}
}
export function printInfo(msg: any, exitCode?: undefined): void
export function printInfo(msg: any, exitCode: number): never
export function printInfo(msg: any, exitCode?: number) {
if (exitCode !== undefined) {
print(msg, blue('i'), exitCode)
} else {
print(msg, blue('i'))
}
}
export function printWarn(msg: any, exitCode?: undefined): void
export function printWarn(msg: any, exitCode: number): never
export function printWarn(msg: any, exitCode?: number) {
if (exitCode !== undefined) {
print(msg, yellow('!'), exitCode)
} else {
print(msg, yellow('!'))
}
}
export function printSuccess(msg: any, exitCode?: undefined): void
export function printSuccess(msg: any, exitCode: number): never
export function printSuccess(msg: any, exitCode?: number) {
if (exitCode !== undefined) {
print(msg, green('√'), exitCode)
} else {
print(msg, green('√'))
}
}
export function printError(error: Error, exitCode?: undefined): void
export function printError(error: Error, exitCode: number): never
export function printError(msg: any, exitCode?: undefined): void
export function printError(msg: any, exitCode: number): never
export function printError(msg: any, error: Error, exitCode?: undefined): void
export function printError(msg: any, error: Error, exitCode: number): never
export function printError(arg1: any, arg2: any, arg3?: number) {
let msg: any = undefined
let error: Error | undefined = undefined
let exitCode: number | undefined = undefined
if (arg1 instanceof Error) {
error = arg1
} else if (arg2 instanceof Error) {
msg = arg1
error = arg2
exitCode = arg3
} else {
msg = arg1
exitCode = arg2
}
if (msg) {
print(msg, red('x'))
}
if (error) {
console.error(error)
}
if (exitCode !== undefined) {
print(undefined, undefined, exitCode)
}
}