4 Commits

Author SHA1 Message Date
Chris Daßler
a7bb65de4f Fix TypeScript type declarations and bump version to 1.0.1-beta.4
- Remove nested declare module wrapper from logger.d.ts to fix double-nesting issue
- Add types field to package.json
- Update version to 1.0.1-beta.4
- Update IOR identifier to com.metatrom.universal-components.logger@1.0.1-beta.4

This fixes TypeScript import errors where the Rollup IOR plugin was wrapping
already-wrapped types, causing a nested module structure that prevented proper imports.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 21:31:32 +01:00
Chris Daßler
f5b9bc7b69 Fix getLogger() singleton bug causing all loggers to share the same context
The getLogger() function was using a single defaultLogger variable that
would only be initialized once with the first context. All subsequent
calls with different contexts would return the same logger instance,
causing all logs to show the same context prefix.

Changed to use a Map-based cache that stores separate logger instances
per context, ensuring each context gets its own logger with the correct
context name.

Bump version to 1.0.1-beta.3

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-12 23:51:24 +02:00
Chris Daßler
8e3a6f0ccd Fix package.json entry point to use index.ts
- Changed main field from "logger.ts" to "index.ts"
- Bumped version to 1.0.1-beta.2
- Updated IOR identifier to match new version

This fixes the LogLevel export issue where importing from the
resolved module couldn't access LogLevel because the entry point
was bypassing the proper index.ts re-exports.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-12 23:26:09 +02:00
Chris Daßler
7f874b4756 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
2025-10-05 06:38:05 +02:00
4 changed files with 55 additions and 50 deletions

View File

@@ -1,4 +1,4 @@
export * from './logger';
export { LoggerComponent, LogLevel, getLogger, logger } from './logger';
export const version = '1.0.0';
export const ior = 'com.metatrom.examples.logger@1.0.0';
export const version = '1.0.1-beta.4';
export const ior = 'com.metatrom.universal-components.logger@1.0.1-beta.4';

2
logger.d.ts vendored
View File

@@ -1,4 +1,3 @@
declare module 'ior:esm:com.metatrom.examples.logger@1.0.0' {
export enum LogLevel {
TRACE = 0,
DEBUG = 1,
@@ -35,4 +34,3 @@ declare module 'ior:esm:com.metatrom.examples.logger@1.0.0' {
export function getLogger(context?: string): ILoggerComponent;
export const logger: LoggerComponent;
}

View File

@@ -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:
@@ -176,14 +177,19 @@ export class LoggerComponent implements ILoggerComponent {
}
}
// Export a singleton instance for convenience
let defaultLogger: LoggerComponent | null = null;
// Cache logger instances by context to avoid recreating them
const loggerCache = new Map<string, LoggerComponent>();
export function getLogger(context = 'main'): ILoggerComponent {
if (!defaultLogger) {
defaultLogger = new LoggerComponent(context);
// Return cached logger for this context if it exists
if (loggerCache.has(context)) {
return loggerCache.get(context)!;
}
return defaultLogger;
// Create new logger for this context
const newLogger = new LoggerComponent(context);
loggerCache.set(context, newLogger);
return newLogger;
}
// Export default instance

View File

@@ -1,10 +1,11 @@
{
"name": "@metatrom/logger",
"version": "1.0.0",
"main": "logger.ts",
"version": "1.0.1-beta.4",
"main": "index.ts",
"types": "logger.d.ts",
"type": "module",
"metatrom": {
"ior": "com.metatrom.universal-components.logger@1.0.0",
"ior": "com.metatrom.universal-components.logger@1.0.1-beta.4",
"capabilities": {
"p2p": false,
"contracts": false,