From d08d3686de3b0da271cfe3be36ef948cf1356034 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Sun, 3 Dec 2023 16:46:46 -0800 Subject: [PATCH] Add logger function --- src/logger.ts | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/logger.ts diff --git a/src/logger.ts b/src/logger.ts new file mode 100644 index 000000000..a3b15f160 --- /dev/null +++ b/src/logger.ts @@ -0,0 +1,47 @@ +import console from 'console'; +import dayjs from 'dayjs'; + +const reset = '\x1b[0m'; + +const baseLog = (errorType: 'error' | 'info' | 'success' | 'warn') => { + let logString = ''; + switch (errorType) { + case 'error': + logString = '\x1b[31m[ERROR] '; + break; + case 'info': + logString = '\x1b[34m[INFO] '; + break; + case 'success': + logString = '\x1b[32m[SUCCESS] '; + break; + case 'warn': + logString = '\x1b[33m[WARNING] '; + break; + default: + logString = '\x1b[34m[INFO] '; + break; + } + + return ( + text: string, + options?: { context?: Record; throwError?: boolean; toast?: boolean }, + ): null | Error => { + const { throwError } = options || {}; + const now = dayjs().toISOString(); + console.log(`${logString}${now}${text}${JSON.stringify(options?.context)}${reset}`); + + if (!throwError) { + return null; + } + + throw new Error(text); + }; +}; + +export const fsLog = { + error: baseLog('error'), + info: baseLog('info'), + success: baseLog('success'), + warn: baseLog('warn'), +};