From 7f874b475692c5693690db86af08bc7427a7f54f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Da=C3=9Fler?= Date: Sun, 5 Oct 2025 06:38:05 +0200 Subject: [PATCH] fix: add defensive checks for undefined args parameter - Add check for args being undefined or not an array in formatMessage - Add default empty array parameter to log method - Prevents 'Cannot read property length of undefined' error - Fixes issue when logger is called from async callbacks in React Native --- logger.ts | 7 ++++--- package.json | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/logger.ts b/logger.ts index e269dc1..308e99f 100644 --- a/logger.ts +++ b/logger.ts @@ -93,7 +93,8 @@ export class LoggerComponent implements ILoggerComponent { // Format the main message let formattedMessage = message; - if (args.length > 0) { + // Defensive check: ensure args is defined and is an array + if (args && Array.isArray(args) && args.length > 0) { // Handle object arguments const argStrings = args.map((arg) => { // Special handling for Error objects @@ -122,10 +123,10 @@ export class LoggerComponent implements ILoggerComponent { return `${COLORS.DIM}[${timestamp}]${COLORS.RESET} ${levelColor}[${levelName}]${COLORS.RESET} ${COLORS.BRIGHT}[${this.context}]${COLORS.RESET} ${formattedMessage}`; } - private log(level: LogLevel, message: string, args: unknown[]): void { + private log(level: LogLevel, message: string, args: unknown[] = []): void { if (level < this.level) return; - const formattedMessage = this.formatMessage(level, message, args); + const formattedMessage = this.formatMessage(level, message, args || []); switch (level) { case LogLevel.TRACE: diff --git a/package.json b/package.json index f655882..bd14120 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { "name": "@metatrom/logger", - "version": "1.0.0", + "version": "1.0.1-beta.1", "main": "logger.ts", "type": "module", "metatrom": { - "ior": "com.metatrom.universal-components.logger@1.0.0", + "ior": "com.metatrom.universal-components.logger@1.0.1-beta.1", "capabilities": { "p2p": false, "contracts": false,