{"version":3,"file":"logger.cjs","names":["isDebugMode"],"sources":["../src/logger.ts"],"sourcesContent":["import { isDebugMode } from './env';\n\nconst PREFIX = '[ Module Federation ]';\n\ntype LogMethod = 'log' | 'info' | 'warn' | 'error' | 'debug';\n\ntype LoggerDelegate = Partial<Record<LogMethod, (...args: any[]) => void>> & {\n  [key: string]: ((...args: any[]) => void) | undefined;\n};\n\nconst DEFAULT_DELEGATE: LoggerDelegate = console as unknown as LoggerDelegate;\nconst LOGGER_STACK_SKIP_TOKENS = [\n  'logger.ts',\n  'logger.js',\n  'captureStackTrace',\n  'Logger.emit',\n  'Logger.log',\n  'Logger.info',\n  'Logger.warn',\n  'Logger.error',\n  'Logger.debug',\n];\n\nfunction captureStackTrace(): string | undefined {\n  try {\n    const stack = new Error().stack;\n    if (!stack) {\n      return undefined;\n    }\n\n    const [, ...rawLines] = stack.split('\\n');\n    const filtered = rawLines.filter(\n      (line) => !LOGGER_STACK_SKIP_TOKENS.some((token) => line.includes(token)),\n    );\n\n    if (!filtered.length) {\n      return undefined;\n    }\n\n    const stackPreview = filtered.slice(0, 5).join('\\n');\n    return `Stack trace:\\n${stackPreview}`;\n  } catch {\n    return undefined;\n  }\n}\n\nclass Logger {\n  prefix: string;\n  private delegate: LoggerDelegate;\n\n  constructor(prefix: string, delegate: LoggerDelegate = DEFAULT_DELEGATE) {\n    this.prefix = prefix;\n    this.delegate = delegate ?? DEFAULT_DELEGATE;\n  }\n\n  setPrefix(prefix: string) {\n    this.prefix = prefix;\n  }\n\n  setDelegate(delegate?: LoggerDelegate) {\n    this.delegate = delegate ?? DEFAULT_DELEGATE;\n  }\n\n  private emit(method: LogMethod, args: any[]) {\n    const delegate = this.delegate;\n    const debugMode = isDebugMode();\n    const stackTrace = debugMode ? captureStackTrace() : undefined;\n    const enrichedArgs = stackTrace ? [...args, stackTrace] : args;\n\n    const order: LogMethod[] = (() => {\n      switch (method) {\n        case 'log':\n          return ['log', 'info'];\n        case 'info':\n          return ['info', 'log'];\n        case 'warn':\n          return ['warn', 'info', 'log'];\n        case 'error':\n          return ['error', 'warn', 'log'];\n        case 'debug':\n        default:\n          return ['debug', 'log'];\n      }\n    })();\n\n    for (const candidate of order) {\n      const handler = delegate[candidate];\n      if (typeof handler === 'function') {\n        handler.call(delegate, this.prefix, ...enrichedArgs);\n        return;\n      }\n    }\n\n    for (const candidate of order) {\n      const handler = DEFAULT_DELEGATE[candidate];\n      if (typeof handler === 'function') {\n        handler.call(DEFAULT_DELEGATE, this.prefix, ...enrichedArgs);\n        return;\n      }\n    }\n  }\n\n  log(...args: any[]) {\n    this.emit('log', args);\n  }\n  warn(...args: any[]) {\n    this.emit('warn', args);\n  }\n  error(...args: any[]) {\n    this.emit('error', args);\n  }\n\n  success(...args: any[]) {\n    this.emit('info', args);\n  }\n  info(...args: any[]) {\n    this.emit('info', args);\n  }\n  ready(...args: any[]) {\n    this.emit('info', args);\n  }\n\n  debug(...args: any[]) {\n    if (isDebugMode()) {\n      this.emit('debug', args);\n    }\n  }\n}\n\nfunction createLogger(prefix: string) {\n  return new Logger(prefix);\n}\n\ntype InfrastructureLogger = Logger & {\n  __mf_infrastructure_logger__: true;\n};\n\nfunction createInfrastructureLogger(prefix: string): InfrastructureLogger {\n  const infrastructureLogger = new Logger(prefix) as InfrastructureLogger;\n  Object.defineProperty(infrastructureLogger, '__mf_infrastructure_logger__', {\n    value: true,\n    enumerable: false,\n    configurable: false,\n  });\n  return infrastructureLogger;\n}\n\ntype InfrastructureLoggerCapableCompiler = {\n  getInfrastructureLogger?: (name: string) => unknown;\n};\n\nfunction bindLoggerToCompiler(\n  loggerInstance: Logger,\n  compiler: InfrastructureLoggerCapableCompiler,\n  name: string,\n) {\n  if (\n    !(loggerInstance as Partial<InfrastructureLogger>)\n      .__mf_infrastructure_logger__\n  ) {\n    return;\n  }\n  if (!compiler?.getInfrastructureLogger) {\n    return;\n  }\n  try {\n    const infrastructureLogger = compiler.getInfrastructureLogger(name);\n    if (\n      infrastructureLogger &&\n      typeof infrastructureLogger === 'object' &&\n      (typeof (infrastructureLogger as LoggerDelegate).log === 'function' ||\n        typeof (infrastructureLogger as LoggerDelegate).info === 'function' ||\n        typeof (infrastructureLogger as LoggerDelegate).warn === 'function' ||\n        typeof (infrastructureLogger as LoggerDelegate).error === 'function')\n    ) {\n      loggerInstance.setDelegate(\n        infrastructureLogger as unknown as LoggerDelegate,\n      );\n    }\n  } catch {\n    // If the bundler throws (older versions), fall back to default console logger.\n    loggerInstance.setDelegate(undefined);\n  }\n}\n\nconst logger = createLogger(PREFIX);\nconst infrastructureLogger = createInfrastructureLogger(PREFIX);\n\nexport {\n  logger,\n  infrastructureLogger,\n  createLogger,\n  createInfrastructureLogger,\n  bindLoggerToCompiler,\n};\nexport type { Logger, InfrastructureLogger };\n"],"mappings":"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"}