UNPKG

@catladder/cli

Version:

Panter cli tool for cloud CI/CD and DevOps

114 lines (107 loc) 3.42 kB
import type { CommandInstance } from "vorpal"; type AnyMessagesFn = (message?: any, ...optionalParams: any[]) => void; type StringMessagesFn = (message?: string, ...optionalParams: string[]) => void; type AnyMessageFn = (message?: any) => void; type StringMessageFn = (message?: string) => void; type StringMessageSpreadFn = (...message: string[]) => void; type AnyMessageSpreadFn = (...message: any[]) => void; type SomeKindOfLogFn = | AnyMessagesFn | StringMessagesFn | AnyMessageFn | StringMessageFn | StringMessageSpreadFn | AnyMessageSpreadFn; type HasSomeKindOfLogMethod = { log: SomeKindOfLogFn }; /** * Something that has a .log method taking a string argument. * * null and undefined will fall back to console.log. */ export type LoggerCmdInstance = | CommandInstance | Console | HasSomeKindOfLogMethod | null | undefined; type LinesArgItem = | string | number | boolean | Date | RegExp | null | undefined; type LinesArg = LinesArgItem | LinesArgItem[]; /** * Logs multiple lines using the log method of the provided {@link LoggerCmdInstance}. * * Line items that are `null` or `undefined` are logged as empty lines. * * @param cmd - The logger instance to use. If `null` or `undefined`, `console` will be used. * * @example * ```ts * logLines(cmd, "line 1", "line 2", null, "line 3"); * logLines(cmd, ...linesArray); // arrays can be spread into the function * logLines(cmd, linesArray); // but it will flatten the plain array for convenience * ``` */ export function logLines( cmd: LoggerCmdInstance = console, ...lines: LinesArg[] ) { for (const line of lines.flat()) { (cmd ?? console).log(`${line ?? ""}`); } } /** * Logs an error message using the log method of the provided {@link LoggerCmdInstance}. * * Line items that are `null` or `undefined` are logged as empty lines. * * @example * ```ts * logError(cmd, "Message"); * logError(cmd, "Message", "Additional message"); * logError(cmd, "Message", "Additional message", "Another additional message line"); * logError(cmd, "Message", ...additionalMessages); // arrays can be spread into the function * logError(cmd, "Message", additionalMessages); // but it will flatten the plain array for convenience * ``` */ export const logError = ( cmd: LoggerCmdInstance = console, message: string, ...additionalMessages: LinesArg[] ) => { logLines(cmd, "", `[ERROR] 🙀 :${message}`); if (additionalMessages?.length) { logLines(cmd, ...additionalMessages.flat()); } logLines(cmd, ""); }; /** * Logs a warning message using the log method of the provided {@link LoggerCmdInstance}. * * Line items that are `null` or `undefined` are logged as empty lines. * * @example * ```ts * logWarning(cmd, "Message"); * logWarning(cmd, "Message", "Additional message"); * logWarning(cmd, "Message", "Additional message", "Another additional message line"); * logWarning(cmd, "Message", ...additionalMessages); // arrays can be spread into the function * logWarning(cmd, "Message", additionalMessages); // but it will flatten the plain array for convenience * ``` */ export const logWarning = ( cmd: LoggerCmdInstance = console, message: string, ...additionalMessages: LinesArg[] ) => { logLines(cmd, "", `[WARNING] ⚠️ : ${message}`); if (additionalMessages?.length) { logLines(cmd, ...additionalMessages.flat()); } logLines(cmd, ""); };