import { isDebugMode } from "./env.js"; //#region src/logger.ts const PREFIX = "[ Module Federation ]"; const DEFAULT_DELEGATE = console; const LOGGER_STACK_SKIP_TOKENS = [ "logger.ts", "logger.js", "captureStackTrace", "Logger.emit", "Logger.log", "Logger.info", "Logger.warn", "Logger.error", "Logger.debug" ]; function captureStackTrace() { try { const stack = (/* @__PURE__ */ new Error()).stack; if (!stack) return; const [, ...rawLines] = stack.split("\n"); const filtered = rawLines.filter((line) => !LOGGER_STACK_SKIP_TOKENS.some((token) => line.includes(token))); if (!filtered.length) return; return `Stack trace:\n${filtered.slice(0, 5).join("\n")}`; } catch { return; } } var Logger = class { constructor(prefix, delegate = DEFAULT_DELEGATE) { this.prefix = prefix; this.delegate = delegate ?? DEFAULT_DELEGATE; } setPrefix(prefix) { this.prefix = prefix; } setDelegate(delegate) { this.delegate = delegate ?? DEFAULT_DELEGATE; } emit(method, args) { const delegate = this.delegate; const stackTrace = isDebugMode() ? captureStackTrace() : void 0; const enrichedArgs = stackTrace ? [...args, stackTrace] : args; const order = (() => { switch (method) { case "log": return ["log", "info"]; case "info": return ["info", "log"]; case "warn": return [ "warn", "info", "log" ]; case "error": return [ "error", "warn", "log" ]; default: return ["debug", "log"]; } })(); for (const candidate of order) { const handler = delegate[candidate]; if (typeof handler === "function") { handler.call(delegate, this.prefix, ...enrichedArgs); return; } } for (const candidate of order) { const handler = DEFAULT_DELEGATE[candidate]; if (typeof handler === "function") { handler.call(DEFAULT_DELEGATE, this.prefix, ...enrichedArgs); return; } } } log(...args) { this.emit("log", args); } warn(...args) { this.emit("warn", args); } error(...args) { this.emit("error", args); } success(...args) { this.emit("info", args); } info(...args) { this.emit("info", args); } ready(...args) { this.emit("info", args); } debug(...args) { if (isDebugMode()) this.emit("debug", args); } }; function createLogger(prefix) { return new Logger(prefix); } function createInfrastructureLogger(prefix) { const infrastructureLogger = new Logger(prefix); Object.defineProperty(infrastructureLogger, "__mf_infrastructure_logger__", { value: true, enumerable: false, configurable: false }); return infrastructureLogger; } function bindLoggerToCompiler(loggerInstance, compiler, name) { if (!loggerInstance.__mf_infrastructure_logger__) return; if (!compiler?.getInfrastructureLogger) return; try { const infrastructureLogger = compiler.getInfrastructureLogger(name); if (infrastructureLogger && typeof infrastructureLogger === "object" && (typeof infrastructureLogger.log === "function" || typeof infrastructureLogger.info === "function" || typeof infrastructureLogger.warn === "function" || typeof infrastructureLogger.error === "function")) loggerInstance.setDelegate(infrastructureLogger); } catch { loggerInstance.setDelegate(void 0); } } const logger = createLogger(PREFIX); const infrastructureLogger = createInfrastructureLogger(PREFIX); //#endregion export { bindLoggerToCompiler, createInfrastructureLogger, createLogger, infrastructureLogger, logger }; //# sourceMappingURL=logger.js.map