🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@deepracticex/logger

Package Overview
Dependencies
Maintainers
2
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@deepracticex/logger - npm Package Compare versions

Comparing version
0.5.1
to
1.0.0
+80
dist/browser.cjs
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/browser.ts
var browser_exports = {};
__export(browser_exports, {
createLogger: () => createLogger
});
module.exports = __toCommonJS(browser_exports);
// src/core/console-adapter.ts
var LOG_LEVELS = {
trace: 0,
debug: 1,
info: 2,
warn: 3,
error: 4,
fatal: 5
};
var defaultConfig = {
level: "info",
console: true,
colors: true,
name: "app"
};
function createConsoleLogger(config = {}) {
const finalConfig = { ...defaultConfig, ...config };
const levelThreshold = LOG_LEVELS[finalConfig.level || "info"];
const name = finalConfig.name || "app";
const formatMessage = (level, ...args) => {
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
const prefix = `[${timestamp}] [${level.toUpperCase()}] [${name}]`;
return `${prefix} ${args.join(" ")}`;
};
const shouldLog = (level) => {
return LOG_LEVELS[level] >= levelThreshold;
};
const logMethod = (level, consoleMethod) => {
return (...args) => {
if (!shouldLog(level)) return;
if (!finalConfig.console) return;
const message = formatMessage(level, ...args);
consoleMethod(message);
};
};
return {
trace: logMethod("trace", console.log),
debug: logMethod("debug", console.log),
info: logMethod("info", console.info),
warn: logMethod("warn", console.warn),
error: logMethod("error", console.error),
fatal: logMethod("fatal", console.error)
};
}
// src/browser.ts
function createLogger(config = {}) {
return createConsoleLogger({ ...config, environment: "browser" });
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
createLogger
});
//# sourceMappingURL=browser.cjs.map
{"version":3,"sources":["../src/browser.ts","../src/core/console-adapter.ts"],"sourcesContent":["/**\n * Browser platform entry point\n * Directly uses console adapter for client-side logging\n */\nimport { createConsoleLogger } from './core/console-adapter.js';\nimport type { LoggerConfig, Logger } from './types/index.js';\n\n/**\n * Create logger for browser runtime\n * Always uses console-based logging\n */\nexport function createLogger(config: LoggerConfig = {}): Logger {\n // Force environment to prevent any detection logic\n return createConsoleLogger({ ...config, environment: 'browser' });\n}\n\nexport type { Logger, LoggerConfig };\n","/**\n * Console logger adapter - for edge runtimes and browsers\n */\nimport type { LoggerConfig } from \"~/types/config.js\";\nimport type { LogLevel } from \"~/types/logger.js\";\n\ninterface ConsoleLoggerInstance {\n trace: (...args: any[]) => void;\n debug: (...args: any[]) => void;\n info: (...args: any[]) => void;\n warn: (...args: any[]) => void;\n error: (...args: any[]) => void;\n fatal: (...args: any[]) => void;\n}\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n trace: 0,\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n fatal: 5,\n};\n\nconst defaultConfig: LoggerConfig = {\n level: \"info\",\n console: true,\n colors: true,\n name: \"app\",\n};\n\n/**\n * Create a console-based logger instance for edge runtimes\n */\nexport function createConsoleLogger(\n config: LoggerConfig = {},\n): ConsoleLoggerInstance {\n const finalConfig = { ...defaultConfig, ...config };\n const levelThreshold = LOG_LEVELS[finalConfig.level || \"info\"];\n const name = finalConfig.name || \"app\";\n\n const formatMessage = (level: LogLevel, ...args: any[]): string => {\n const timestamp = new Date().toISOString();\n const prefix = `[${timestamp}] [${level.toUpperCase()}] [${name}]`;\n return `${prefix} ${args.join(\" \")}`;\n };\n\n const shouldLog = (level: LogLevel): boolean => {\n return LOG_LEVELS[level] >= levelThreshold;\n };\n\n const logMethod = (level: LogLevel, consoleMethod: any) => {\n return (...args: any[]) => {\n if (!shouldLog(level)) return;\n if (!finalConfig.console) return;\n\n const message = formatMessage(level, ...args);\n consoleMethod(message);\n };\n };\n\n return {\n trace: logMethod(\"trace\", console.log),\n debug: logMethod(\"debug\", console.log),\n info: logMethod(\"info\", console.info),\n warn: logMethod(\"warn\", console.warn),\n error: logMethod(\"error\", console.error),\n fatal: logMethod(\"fatal\", console.error),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACeA,IAAM,aAAuC;AAAA,EAC3C,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACT;AAEA,IAAM,gBAA8B;AAAA,EAClC,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AACR;AAKO,SAAS,oBACd,SAAuB,CAAC,GACD;AACvB,QAAM,cAAc,EAAE,GAAG,eAAe,GAAG,OAAO;AAClD,QAAM,iBAAiB,WAAW,YAAY,SAAS,MAAM;AAC7D,QAAM,OAAO,YAAY,QAAQ;AAEjC,QAAM,gBAAgB,CAAC,UAAoB,SAAwB;AACjE,UAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AACzC,UAAM,SAAS,IAAI,SAAS,MAAM,MAAM,YAAY,CAAC,MAAM,IAAI;AAC/D,WAAO,GAAG,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC;AAAA,EACpC;AAEA,QAAM,YAAY,CAAC,UAA6B;AAC9C,WAAO,WAAW,KAAK,KAAK;AAAA,EAC9B;AAEA,QAAM,YAAY,CAAC,OAAiB,kBAAuB;AACzD,WAAO,IAAI,SAAgB;AACzB,UAAI,CAAC,UAAU,KAAK,EAAG;AACvB,UAAI,CAAC,YAAY,QAAS;AAE1B,YAAM,UAAU,cAAc,OAAO,GAAG,IAAI;AAC5C,oBAAc,OAAO;AAAA,IACvB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,UAAU,SAAS,QAAQ,GAAG;AAAA,IACrC,OAAO,UAAU,SAAS,QAAQ,GAAG;AAAA,IACrC,MAAM,UAAU,QAAQ,QAAQ,IAAI;AAAA,IACpC,MAAM,UAAU,QAAQ,QAAQ,IAAI;AAAA,IACpC,OAAO,UAAU,SAAS,QAAQ,KAAK;AAAA,IACvC,OAAO,UAAU,SAAS,QAAQ,KAAK;AAAA,EACzC;AACF;;;AD1DO,SAAS,aAAa,SAAuB,CAAC,GAAW;AAE9D,SAAO,oBAAoB,EAAE,GAAG,QAAQ,aAAa,UAAU,CAAC;AAClE;","names":[]}
import { L as LoggerConfig, a as Logger } from './logger-CraRs5pE.cjs';
/**
* Create logger for browser runtime
* Always uses console-based logging
*/
declare function createLogger(config?: LoggerConfig): Logger;
export { Logger, LoggerConfig, createLogger };
import { L as LoggerConfig, a as Logger } from './logger-CraRs5pE.js';
/**
* Create logger for browser runtime
* Always uses console-based logging
*/
declare function createLogger(config?: LoggerConfig): Logger;
export { Logger, LoggerConfig, createLogger };
// src/core/console-adapter.ts
var LOG_LEVELS = {
trace: 0,
debug: 1,
info: 2,
warn: 3,
error: 4,
fatal: 5
};
var defaultConfig = {
level: "info",
console: true,
colors: true,
name: "app"
};
function createConsoleLogger(config = {}) {
const finalConfig = { ...defaultConfig, ...config };
const levelThreshold = LOG_LEVELS[finalConfig.level || "info"];
const name = finalConfig.name || "app";
const formatMessage = (level, ...args) => {
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
const prefix = `[${timestamp}] [${level.toUpperCase()}] [${name}]`;
return `${prefix} ${args.join(" ")}`;
};
const shouldLog = (level) => {
return LOG_LEVELS[level] >= levelThreshold;
};
const logMethod = (level, consoleMethod) => {
return (...args) => {
if (!shouldLog(level)) return;
if (!finalConfig.console) return;
const message = formatMessage(level, ...args);
consoleMethod(message);
};
};
return {
trace: logMethod("trace", console.log),
debug: logMethod("debug", console.log),
info: logMethod("info", console.info),
warn: logMethod("warn", console.warn),
error: logMethod("error", console.error),
fatal: logMethod("fatal", console.error)
};
}
// src/browser.ts
function createLogger(config = {}) {
return createConsoleLogger({ ...config, environment: "browser" });
}
export {
createLogger
};
//# sourceMappingURL=browser.js.map
{"version":3,"sources":["../src/core/console-adapter.ts","../src/browser.ts"],"sourcesContent":["/**\n * Console logger adapter - for edge runtimes and browsers\n */\nimport type { LoggerConfig } from \"~/types/config.js\";\nimport type { LogLevel } from \"~/types/logger.js\";\n\ninterface ConsoleLoggerInstance {\n trace: (...args: any[]) => void;\n debug: (...args: any[]) => void;\n info: (...args: any[]) => void;\n warn: (...args: any[]) => void;\n error: (...args: any[]) => void;\n fatal: (...args: any[]) => void;\n}\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n trace: 0,\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n fatal: 5,\n};\n\nconst defaultConfig: LoggerConfig = {\n level: \"info\",\n console: true,\n colors: true,\n name: \"app\",\n};\n\n/**\n * Create a console-based logger instance for edge runtimes\n */\nexport function createConsoleLogger(\n config: LoggerConfig = {},\n): ConsoleLoggerInstance {\n const finalConfig = { ...defaultConfig, ...config };\n const levelThreshold = LOG_LEVELS[finalConfig.level || \"info\"];\n const name = finalConfig.name || \"app\";\n\n const formatMessage = (level: LogLevel, ...args: any[]): string => {\n const timestamp = new Date().toISOString();\n const prefix = `[${timestamp}] [${level.toUpperCase()}] [${name}]`;\n return `${prefix} ${args.join(\" \")}`;\n };\n\n const shouldLog = (level: LogLevel): boolean => {\n return LOG_LEVELS[level] >= levelThreshold;\n };\n\n const logMethod = (level: LogLevel, consoleMethod: any) => {\n return (...args: any[]) => {\n if (!shouldLog(level)) return;\n if (!finalConfig.console) return;\n\n const message = formatMessage(level, ...args);\n consoleMethod(message);\n };\n };\n\n return {\n trace: logMethod(\"trace\", console.log),\n debug: logMethod(\"debug\", console.log),\n info: logMethod(\"info\", console.info),\n warn: logMethod(\"warn\", console.warn),\n error: logMethod(\"error\", console.error),\n fatal: logMethod(\"fatal\", console.error),\n };\n}\n","/**\n * Browser platform entry point\n * Directly uses console adapter for client-side logging\n */\nimport { createConsoleLogger } from './core/console-adapter.js';\nimport type { LoggerConfig, Logger } from './types/index.js';\n\n/**\n * Create logger for browser runtime\n * Always uses console-based logging\n */\nexport function createLogger(config: LoggerConfig = {}): Logger {\n // Force environment to prevent any detection logic\n return createConsoleLogger({ ...config, environment: 'browser' });\n}\n\nexport type { Logger, LoggerConfig };\n"],"mappings":";AAeA,IAAM,aAAuC;AAAA,EAC3C,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACT;AAEA,IAAM,gBAA8B;AAAA,EAClC,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AACR;AAKO,SAAS,oBACd,SAAuB,CAAC,GACD;AACvB,QAAM,cAAc,EAAE,GAAG,eAAe,GAAG,OAAO;AAClD,QAAM,iBAAiB,WAAW,YAAY,SAAS,MAAM;AAC7D,QAAM,OAAO,YAAY,QAAQ;AAEjC,QAAM,gBAAgB,CAAC,UAAoB,SAAwB;AACjE,UAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AACzC,UAAM,SAAS,IAAI,SAAS,MAAM,MAAM,YAAY,CAAC,MAAM,IAAI;AAC/D,WAAO,GAAG,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC;AAAA,EACpC;AAEA,QAAM,YAAY,CAAC,UAA6B;AAC9C,WAAO,WAAW,KAAK,KAAK;AAAA,EAC9B;AAEA,QAAM,YAAY,CAAC,OAAiB,kBAAuB;AACzD,WAAO,IAAI,SAAgB;AACzB,UAAI,CAAC,UAAU,KAAK,EAAG;AACvB,UAAI,CAAC,YAAY,QAAS;AAE1B,YAAM,UAAU,cAAc,OAAO,GAAG,IAAI;AAC5C,oBAAc,OAAO;AAAA,IACvB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,UAAU,SAAS,QAAQ,GAAG;AAAA,IACrC,OAAO,UAAU,SAAS,QAAQ,GAAG;AAAA,IACrC,MAAM,UAAU,QAAQ,QAAQ,IAAI;AAAA,IACpC,MAAM,UAAU,QAAQ,QAAQ,IAAI;AAAA,IACpC,OAAO,UAAU,SAAS,QAAQ,KAAK;AAAA,IACvC,OAAO,UAAU,SAAS,QAAQ,KAAK;AAAA,EACzC;AACF;;;AC1DO,SAAS,aAAa,SAAuB,CAAC,GAAW;AAE9D,SAAO,oBAAoB,EAAE,GAAG,QAAQ,aAAa,UAAU,CAAC;AAClE;","names":[]}
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/cloudflare-workers.ts
var cloudflare_workers_exports = {};
__export(cloudflare_workers_exports, {
createLogger: () => createLogger
});
module.exports = __toCommonJS(cloudflare_workers_exports);
// src/core/console-adapter.ts
var LOG_LEVELS = {
trace: 0,
debug: 1,
info: 2,
warn: 3,
error: 4,
fatal: 5
};
var defaultConfig = {
level: "info",
console: true,
colors: true,
name: "app"
};
function createConsoleLogger(config = {}) {
const finalConfig = { ...defaultConfig, ...config };
const levelThreshold = LOG_LEVELS[finalConfig.level || "info"];
const name = finalConfig.name || "app";
const formatMessage = (level, ...args) => {
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
const prefix = `[${timestamp}] [${level.toUpperCase()}] [${name}]`;
return `${prefix} ${args.join(" ")}`;
};
const shouldLog = (level) => {
return LOG_LEVELS[level] >= levelThreshold;
};
const logMethod = (level, consoleMethod) => {
return (...args) => {
if (!shouldLog(level)) return;
if (!finalConfig.console) return;
const message = formatMessage(level, ...args);
consoleMethod(message);
};
};
return {
trace: logMethod("trace", console.log),
debug: logMethod("debug", console.log),
info: logMethod("info", console.info),
warn: logMethod("warn", console.warn),
error: logMethod("error", console.error),
fatal: logMethod("fatal", console.error)
};
}
// src/cloudflare-workers.ts
function createLogger(config = {}) {
return createConsoleLogger({ ...config, environment: "cloudflare-workers" });
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
createLogger
});
//# sourceMappingURL=cloudflare-workers.cjs.map
{"version":3,"sources":["../src/cloudflare-workers.ts","../src/core/console-adapter.ts"],"sourcesContent":["/**\n * Cloudflare Workers platform entry point\n * Directly uses console adapter - no dynamic detection or pino dependencies\n */\nimport { createConsoleLogger } from './core/console-adapter.js';\nimport type { LoggerConfig, Logger } from './types/index.js';\n\n/**\n * Create logger for Cloudflare Workers runtime\n * Always uses console-based logging\n */\nexport function createLogger(config: LoggerConfig = {}): Logger {\n // Force environment to prevent any detection logic\n return createConsoleLogger({ ...config, environment: 'cloudflare-workers' });\n}\n\nexport type { Logger, LoggerConfig };\n","/**\n * Console logger adapter - for edge runtimes and browsers\n */\nimport type { LoggerConfig } from \"~/types/config.js\";\nimport type { LogLevel } from \"~/types/logger.js\";\n\ninterface ConsoleLoggerInstance {\n trace: (...args: any[]) => void;\n debug: (...args: any[]) => void;\n info: (...args: any[]) => void;\n warn: (...args: any[]) => void;\n error: (...args: any[]) => void;\n fatal: (...args: any[]) => void;\n}\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n trace: 0,\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n fatal: 5,\n};\n\nconst defaultConfig: LoggerConfig = {\n level: \"info\",\n console: true,\n colors: true,\n name: \"app\",\n};\n\n/**\n * Create a console-based logger instance for edge runtimes\n */\nexport function createConsoleLogger(\n config: LoggerConfig = {},\n): ConsoleLoggerInstance {\n const finalConfig = { ...defaultConfig, ...config };\n const levelThreshold = LOG_LEVELS[finalConfig.level || \"info\"];\n const name = finalConfig.name || \"app\";\n\n const formatMessage = (level: LogLevel, ...args: any[]): string => {\n const timestamp = new Date().toISOString();\n const prefix = `[${timestamp}] [${level.toUpperCase()}] [${name}]`;\n return `${prefix} ${args.join(\" \")}`;\n };\n\n const shouldLog = (level: LogLevel): boolean => {\n return LOG_LEVELS[level] >= levelThreshold;\n };\n\n const logMethod = (level: LogLevel, consoleMethod: any) => {\n return (...args: any[]) => {\n if (!shouldLog(level)) return;\n if (!finalConfig.console) return;\n\n const message = formatMessage(level, ...args);\n consoleMethod(message);\n };\n };\n\n return {\n trace: logMethod(\"trace\", console.log),\n debug: logMethod(\"debug\", console.log),\n info: logMethod(\"info\", console.info),\n warn: logMethod(\"warn\", console.warn),\n error: logMethod(\"error\", console.error),\n fatal: logMethod(\"fatal\", console.error),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACeA,IAAM,aAAuC;AAAA,EAC3C,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACT;AAEA,IAAM,gBAA8B;AAAA,EAClC,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AACR;AAKO,SAAS,oBACd,SAAuB,CAAC,GACD;AACvB,QAAM,cAAc,EAAE,GAAG,eAAe,GAAG,OAAO;AAClD,QAAM,iBAAiB,WAAW,YAAY,SAAS,MAAM;AAC7D,QAAM,OAAO,YAAY,QAAQ;AAEjC,QAAM,gBAAgB,CAAC,UAAoB,SAAwB;AACjE,UAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AACzC,UAAM,SAAS,IAAI,SAAS,MAAM,MAAM,YAAY,CAAC,MAAM,IAAI;AAC/D,WAAO,GAAG,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC;AAAA,EACpC;AAEA,QAAM,YAAY,CAAC,UAA6B;AAC9C,WAAO,WAAW,KAAK,KAAK;AAAA,EAC9B;AAEA,QAAM,YAAY,CAAC,OAAiB,kBAAuB;AACzD,WAAO,IAAI,SAAgB;AACzB,UAAI,CAAC,UAAU,KAAK,EAAG;AACvB,UAAI,CAAC,YAAY,QAAS;AAE1B,YAAM,UAAU,cAAc,OAAO,GAAG,IAAI;AAC5C,oBAAc,OAAO;AAAA,IACvB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,UAAU,SAAS,QAAQ,GAAG;AAAA,IACrC,OAAO,UAAU,SAAS,QAAQ,GAAG;AAAA,IACrC,MAAM,UAAU,QAAQ,QAAQ,IAAI;AAAA,IACpC,MAAM,UAAU,QAAQ,QAAQ,IAAI;AAAA,IACpC,OAAO,UAAU,SAAS,QAAQ,KAAK;AAAA,IACvC,OAAO,UAAU,SAAS,QAAQ,KAAK;AAAA,EACzC;AACF;;;AD1DO,SAAS,aAAa,SAAuB,CAAC,GAAW;AAE9D,SAAO,oBAAoB,EAAE,GAAG,QAAQ,aAAa,qBAAqB,CAAC;AAC7E;","names":[]}
import { L as LoggerConfig, a as Logger } from './logger-CraRs5pE.cjs';
/**
* Create logger for Cloudflare Workers runtime
* Always uses console-based logging
*/
declare function createLogger(config?: LoggerConfig): Logger;
export { Logger, LoggerConfig, createLogger };
import { L as LoggerConfig, a as Logger } from './logger-CraRs5pE.js';
/**
* Create logger for Cloudflare Workers runtime
* Always uses console-based logging
*/
declare function createLogger(config?: LoggerConfig): Logger;
export { Logger, LoggerConfig, createLogger };
// src/core/console-adapter.ts
var LOG_LEVELS = {
trace: 0,
debug: 1,
info: 2,
warn: 3,
error: 4,
fatal: 5
};
var defaultConfig = {
level: "info",
console: true,
colors: true,
name: "app"
};
function createConsoleLogger(config = {}) {
const finalConfig = { ...defaultConfig, ...config };
const levelThreshold = LOG_LEVELS[finalConfig.level || "info"];
const name = finalConfig.name || "app";
const formatMessage = (level, ...args) => {
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
const prefix = `[${timestamp}] [${level.toUpperCase()}] [${name}]`;
return `${prefix} ${args.join(" ")}`;
};
const shouldLog = (level) => {
return LOG_LEVELS[level] >= levelThreshold;
};
const logMethod = (level, consoleMethod) => {
return (...args) => {
if (!shouldLog(level)) return;
if (!finalConfig.console) return;
const message = formatMessage(level, ...args);
consoleMethod(message);
};
};
return {
trace: logMethod("trace", console.log),
debug: logMethod("debug", console.log),
info: logMethod("info", console.info),
warn: logMethod("warn", console.warn),
error: logMethod("error", console.error),
fatal: logMethod("fatal", console.error)
};
}
// src/cloudflare-workers.ts
function createLogger(config = {}) {
return createConsoleLogger({ ...config, environment: "cloudflare-workers" });
}
export {
createLogger
};
//# sourceMappingURL=cloudflare-workers.js.map
{"version":3,"sources":["../src/core/console-adapter.ts","../src/cloudflare-workers.ts"],"sourcesContent":["/**\n * Console logger adapter - for edge runtimes and browsers\n */\nimport type { LoggerConfig } from \"~/types/config.js\";\nimport type { LogLevel } from \"~/types/logger.js\";\n\ninterface ConsoleLoggerInstance {\n trace: (...args: any[]) => void;\n debug: (...args: any[]) => void;\n info: (...args: any[]) => void;\n warn: (...args: any[]) => void;\n error: (...args: any[]) => void;\n fatal: (...args: any[]) => void;\n}\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n trace: 0,\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n fatal: 5,\n};\n\nconst defaultConfig: LoggerConfig = {\n level: \"info\",\n console: true,\n colors: true,\n name: \"app\",\n};\n\n/**\n * Create a console-based logger instance for edge runtimes\n */\nexport function createConsoleLogger(\n config: LoggerConfig = {},\n): ConsoleLoggerInstance {\n const finalConfig = { ...defaultConfig, ...config };\n const levelThreshold = LOG_LEVELS[finalConfig.level || \"info\"];\n const name = finalConfig.name || \"app\";\n\n const formatMessage = (level: LogLevel, ...args: any[]): string => {\n const timestamp = new Date().toISOString();\n const prefix = `[${timestamp}] [${level.toUpperCase()}] [${name}]`;\n return `${prefix} ${args.join(\" \")}`;\n };\n\n const shouldLog = (level: LogLevel): boolean => {\n return LOG_LEVELS[level] >= levelThreshold;\n };\n\n const logMethod = (level: LogLevel, consoleMethod: any) => {\n return (...args: any[]) => {\n if (!shouldLog(level)) return;\n if (!finalConfig.console) return;\n\n const message = formatMessage(level, ...args);\n consoleMethod(message);\n };\n };\n\n return {\n trace: logMethod(\"trace\", console.log),\n debug: logMethod(\"debug\", console.log),\n info: logMethod(\"info\", console.info),\n warn: logMethod(\"warn\", console.warn),\n error: logMethod(\"error\", console.error),\n fatal: logMethod(\"fatal\", console.error),\n };\n}\n","/**\n * Cloudflare Workers platform entry point\n * Directly uses console adapter - no dynamic detection or pino dependencies\n */\nimport { createConsoleLogger } from './core/console-adapter.js';\nimport type { LoggerConfig, Logger } from './types/index.js';\n\n/**\n * Create logger for Cloudflare Workers runtime\n * Always uses console-based logging\n */\nexport function createLogger(config: LoggerConfig = {}): Logger {\n // Force environment to prevent any detection logic\n return createConsoleLogger({ ...config, environment: 'cloudflare-workers' });\n}\n\nexport type { Logger, LoggerConfig };\n"],"mappings":";AAeA,IAAM,aAAuC;AAAA,EAC3C,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACT;AAEA,IAAM,gBAA8B;AAAA,EAClC,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AACR;AAKO,SAAS,oBACd,SAAuB,CAAC,GACD;AACvB,QAAM,cAAc,EAAE,GAAG,eAAe,GAAG,OAAO;AAClD,QAAM,iBAAiB,WAAW,YAAY,SAAS,MAAM;AAC7D,QAAM,OAAO,YAAY,QAAQ;AAEjC,QAAM,gBAAgB,CAAC,UAAoB,SAAwB;AACjE,UAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AACzC,UAAM,SAAS,IAAI,SAAS,MAAM,MAAM,YAAY,CAAC,MAAM,IAAI;AAC/D,WAAO,GAAG,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC;AAAA,EACpC;AAEA,QAAM,YAAY,CAAC,UAA6B;AAC9C,WAAO,WAAW,KAAK,KAAK;AAAA,EAC9B;AAEA,QAAM,YAAY,CAAC,OAAiB,kBAAuB;AACzD,WAAO,IAAI,SAAgB;AACzB,UAAI,CAAC,UAAU,KAAK,EAAG;AACvB,UAAI,CAAC,YAAY,QAAS;AAE1B,YAAM,UAAU,cAAc,OAAO,GAAG,IAAI;AAC5C,oBAAc,OAAO;AAAA,IACvB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,UAAU,SAAS,QAAQ,GAAG;AAAA,IACrC,OAAO,UAAU,SAAS,QAAQ,GAAG;AAAA,IACrC,MAAM,UAAU,QAAQ,QAAQ,IAAI;AAAA,IACpC,MAAM,UAAU,QAAQ,QAAQ,IAAI;AAAA,IACpC,OAAO,UAAU,SAAS,QAAQ,KAAK;AAAA,IACvC,OAAO,UAAU,SAAS,QAAQ,KAAK;AAAA,EACzC;AACF;;;AC1DO,SAAS,aAAa,SAAuB,CAAC,GAAW;AAE9D,SAAO,oBAAoB,EAAE,GAAG,QAAQ,aAAa,qBAAqB,CAAC;AAC7E;","names":[]}
/**
* Runtime environment type
*/
type RuntimeEnvironment = "nodejs" | "cloudflare-workers" | "browser";
/**
* Logger configuration interface
*/
interface LoggerConfig {
/**
* Log level threshold
* @default "info"
*/
level?: "trace" | "debug" | "info" | "warn" | "error" | "fatal";
/**
* Enable console output
* @default true
*/
console?: boolean;
/**
* File logging configuration
* @default { dirname: "~/.deepractice/logs" }
*/
file?: boolean | {
dirname?: string;
};
/**
* Enable colored output
* @default true
*/
colors?: boolean;
/**
* Package/service name for identification
* @default "app"
*/
name?: string;
/**
* Explicitly specify the runtime environment
* If not provided, will auto-detect
* @default auto-detect
*/
environment?: RuntimeEnvironment;
}
/**
* Logger interface - all methods accept any arguments for maximum flexibility
*/
interface Logger {
/**
* Log trace level message
*/
trace: any;
/**
* Log debug level message
*/
debug: any;
/**
* Log info level message
*/
info: any;
/**
* Log warning level message
*/
warn: any;
/**
* Log error level message
*/
error: any;
/**
* Log fatal level message
*/
fatal: any;
}
/**
* Log level type
*/
type LogLevel = "trace" | "debug" | "info" | "warn" | "error" | "fatal";
export type { LoggerConfig as L, Logger as a, LogLevel as b };
/**
* Runtime environment type
*/
type RuntimeEnvironment = "nodejs" | "cloudflare-workers" | "browser";
/**
* Logger configuration interface
*/
interface LoggerConfig {
/**
* Log level threshold
* @default "info"
*/
level?: "trace" | "debug" | "info" | "warn" | "error" | "fatal";
/**
* Enable console output
* @default true
*/
console?: boolean;
/**
* File logging configuration
* @default { dirname: "~/.deepractice/logs" }
*/
file?: boolean | {
dirname?: string;
};
/**
* Enable colored output
* @default true
*/
colors?: boolean;
/**
* Package/service name for identification
* @default "app"
*/
name?: string;
/**
* Explicitly specify the runtime environment
* If not provided, will auto-detect
* @default auto-detect
*/
environment?: RuntimeEnvironment;
}
/**
* Logger interface - all methods accept any arguments for maximum flexibility
*/
interface Logger {
/**
* Log trace level message
*/
trace: any;
/**
* Log debug level message
*/
debug: any;
/**
* Log info level message
*/
info: any;
/**
* Log warning level message
*/
warn: any;
/**
* Log error level message
*/
error: any;
/**
* Log fatal level message
*/
fatal: any;
}
/**
* Log level type
*/
type LogLevel = "trace" | "debug" | "info" | "warn" | "error" | "fatal";
export type { LoggerConfig as L, Logger as a, LogLevel as b };
"use strict";
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/nodejs.ts
var nodejs_exports = {};
__export(nodejs_exports, {
createLogger: () => createLogger
});
module.exports = __toCommonJS(nodejs_exports);
// src/core/pino-adapter.ts
var import_pino = __toESM(require("pino"), 1);
var import_path2 = __toESM(require("path"), 1);
var import_os = __toESM(require("os"), 1);
var import_fs = __toESM(require("fs"), 1);
// src/core/caller-tracker.ts
var import_path = __toESM(require("path"), 1);
function getCallerInfo(packageName) {
const stack = new Error().stack || "";
const stackLines = stack.split("\n");
for (let i = 2; i < stackLines.length; i++) {
const line = stackLines[i];
if (line && !line.includes("node_modules/pino") && !line.includes("packages/logger") && !line.includes("@deepracticex/logger")) {
const match = line.match(/at\s+(?:.*?\s+)?\(?(.*?):(\d+):(\d+)\)?/);
if (match && match[1] && match[2]) {
const fullPath = match[1];
const lineNum = parseInt(match[2], 10);
const filename = import_path.default.basename(fullPath);
return {
package: packageName,
file: filename,
line: lineNum
};
}
}
}
return { package: packageName, file: "unknown", line: 0 };
}
// src/core/pino-adapter.ts
var defaultConfig = {
level: process.env.LOG_LEVEL || "info",
console: true,
file: {
dirname: import_path2.default.join(import_os.default.homedir(), ".deepractice", "logs")
},
colors: true,
name: "app"
};
function createPinoLogger(config = {}) {
const finalConfig = { ...defaultConfig, ...config };
if (finalConfig.file) {
const fileConfig = typeof finalConfig.file === "object" ? finalConfig.file : {};
const logDir = fileConfig.dirname || import_path2.default.join(import_os.default.homedir(), ".deepractice", "logs");
if (!import_fs.default.existsSync(logDir)) {
import_fs.default.mkdirSync(logDir, { recursive: true });
}
}
const isElectron = process.versions && "electron" in process.versions;
const isTest = process.env.NODE_ENV === "test" || process.env.VITEST === "true";
if (isElectron || isTest || process.env.DEEPRACTICE_NO_WORKERS === "true") {
if (finalConfig.file) {
const fileConfig = typeof finalConfig.file === "object" ? finalConfig.file : {};
const logDir = fileConfig.dirname || import_path2.default.join(import_os.default.homedir(), ".deepractice", "logs");
const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
const logPath = import_path2.default.join(logDir, `deepractice-${today}.log`);
const dest = import_pino.default.destination({
dest: logPath,
sync: true
});
return (0, import_pino.default)(
{
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo(finalConfig.name || "app"),
formatters: {
level: (label) => {
return { level: label };
},
log: (obj) => {
const { package: pkg, file, line, ...rest } = obj;
return {
...rest,
location: pkg && file ? `${pkg} [${file}:${line}]` : void 0
};
}
}
},
dest
);
} else {
return (0, import_pino.default)({
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo(finalConfig.name || "app"),
formatters: {
level: (label) => {
return { level: label };
},
log: (obj) => {
const { package: pkg, file, line, ...rest } = obj;
return {
...rest,
location: pkg && file ? `${pkg} [${file}:${line}]` : void 0
};
}
}
});
}
} else {
const targets = [];
if (finalConfig.console) {
targets.push({
target: "pino-pretty",
level: finalConfig.level,
options: {
// MCP stdio mode disables colors to avoid ANSI escape codes
colorize: process.env.MCP_TRANSPORT === "stdio" ? false : finalConfig.colors,
translateTime: "SYS:yyyy-mm-dd HH:MM:ss.l",
ignore: "hostname,pid,package,file,line",
destination: 2,
// stderr (fd 2) - MCP best practice
messageFormat: "{package} [{file}:{line}] {msg}"
}
});
}
if (finalConfig.file) {
const fileConfig = typeof finalConfig.file === "object" ? finalConfig.file : {};
const logDir = fileConfig.dirname || import_path2.default.join(import_os.default.homedir(), ".deepractice", "logs");
const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
targets.push({
target: "pino/file",
level: finalConfig.level,
options: {
destination: import_path2.default.join(logDir, `deepractice-${today}.log`)
}
});
targets.push({
target: "pino/file",
level: "error",
options: {
destination: import_path2.default.join(logDir, `deepractice-error-${today}.log`)
}
});
}
if (targets.length > 0) {
return (0, import_pino.default)({
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo(finalConfig.name || "app"),
transport: {
targets
}
});
}
}
return (0, import_pino.default)({
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo(finalConfig.name || "app")
});
}
// src/nodejs.ts
function createLogger(config = {}) {
return createPinoLogger({ ...config, environment: "nodejs" });
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
createLogger
});
//# sourceMappingURL=nodejs.cjs.map
{"version":3,"sources":["../src/nodejs.ts","../src/core/pino-adapter.ts","../src/core/caller-tracker.ts"],"sourcesContent":["/**\n * Node.js platform entry point (default)\n * Directly uses Pino adapter for production-grade logging\n */\nimport { createPinoLogger } from './core/pino-adapter.js';\nimport type { LoggerConfig, Logger } from './types/index.js';\n\n/**\n * Create logger for Node.js runtime\n * Always uses Pino for structured logging with file support\n */\nexport function createLogger(config: LoggerConfig = {}): Logger {\n // Force environment to prevent any detection logic\n return createPinoLogger({ ...config, environment: 'nodejs' });\n}\n\nexport type { Logger, LoggerConfig };\n","/**\n * Pino logger adapter - internal implementation\n */\nimport pino from \"pino\";\nimport path from \"path\";\nimport os from \"os\";\nimport fs from \"fs\";\nimport type { LoggerConfig } from \"~/types/config.js\";\nimport { getCallerInfo } from \"~/core/caller-tracker.js\";\n\nconst defaultConfig: LoggerConfig = {\n level: (process.env.LOG_LEVEL as any) || \"info\",\n console: true,\n file: {\n dirname: path.join(os.homedir(), \".deepractice\", \"logs\"),\n },\n colors: true,\n name: \"app\",\n};\n\n/**\n * Create a Pino logger instance\n */\nexport function createPinoLogger(config: LoggerConfig = {}): pino.Logger {\n const finalConfig = { ...defaultConfig, ...config };\n\n // Ensure log directory exists\n if (finalConfig.file) {\n const fileConfig =\n typeof finalConfig.file === \"object\" ? finalConfig.file : {};\n const logDir =\n fileConfig.dirname || path.join(os.homedir(), \".deepractice\", \"logs\");\n if (!fs.existsSync(logDir)) {\n fs.mkdirSync(logDir, { recursive: true });\n }\n }\n\n // For Electron desktop app, avoid worker thread issues\n const isElectron = process.versions && \"electron\" in process.versions;\n const isTest =\n process.env.NODE_ENV === \"test\" || process.env.VITEST === \"true\";\n\n if (isElectron || isTest || process.env.DEEPRACTICE_NO_WORKERS === \"true\") {\n // For Electron: use sync mode to avoid worker thread issues\n if (finalConfig.file) {\n const fileConfig =\n typeof finalConfig.file === \"object\" ? finalConfig.file : {};\n const logDir =\n fileConfig.dirname || path.join(os.homedir(), \".deepractice\", \"logs\");\n const today = new Date().toISOString().split(\"T\")[0];\n const logPath = path.join(logDir, `deepractice-${today}.log`);\n\n const dest = pino.destination({\n dest: logPath,\n sync: true,\n });\n\n return pino(\n {\n level: finalConfig.level || \"info\",\n base: { pid: process.pid },\n mixin: () => getCallerInfo(finalConfig.name || \"app\"),\n formatters: {\n level: (label) => {\n return { level: label };\n },\n log: (obj) => {\n const { package: pkg, file, line, ...rest } = obj;\n return {\n ...rest,\n location: pkg && file ? `${pkg} [${file}:${line}]` : undefined,\n };\n },\n },\n },\n dest,\n );\n } else {\n return pino({\n level: finalConfig.level || \"info\",\n base: { pid: process.pid },\n mixin: () => getCallerInfo(finalConfig.name || \"app\"),\n formatters: {\n level: (label) => {\n return { level: label };\n },\n log: (obj) => {\n const { package: pkg, file, line, ...rest } = obj;\n return {\n ...rest,\n location: pkg && file ? `${pkg} [${file}:${line}]` : undefined,\n };\n },\n },\n });\n }\n } else {\n // Use transports for non-Electron environments (better for servers)\n const targets: any[] = [];\n\n // Console transport\n if (finalConfig.console) {\n targets.push({\n target: \"pino-pretty\",\n level: finalConfig.level,\n options: {\n // MCP stdio mode disables colors to avoid ANSI escape codes\n colorize:\n process.env.MCP_TRANSPORT === \"stdio\" ? false : finalConfig.colors,\n translateTime: \"SYS:yyyy-mm-dd HH:MM:ss.l\",\n ignore: \"hostname,pid,package,file,line\",\n destination: 2, // stderr (fd 2) - MCP best practice\n messageFormat: \"{package} [{file}:{line}] {msg}\",\n },\n });\n }\n\n // File transport\n if (finalConfig.file) {\n const fileConfig =\n typeof finalConfig.file === \"object\" ? finalConfig.file : {};\n const logDir =\n fileConfig.dirname || path.join(os.homedir(), \".deepractice\", \"logs\");\n const today = new Date().toISOString().split(\"T\")[0];\n\n targets.push({\n target: \"pino/file\",\n level: finalConfig.level,\n options: {\n destination: path.join(logDir, `deepractice-${today}.log`),\n },\n });\n\n // Separate error log\n targets.push({\n target: \"pino/file\",\n level: \"error\",\n options: {\n destination: path.join(logDir, `deepractice-error-${today}.log`),\n },\n });\n }\n\n // Create logger with transports\n if (targets.length > 0) {\n return pino({\n level: finalConfig.level || \"info\",\n base: { pid: process.pid },\n mixin: () => getCallerInfo(finalConfig.name || \"app\"),\n transport: {\n targets,\n },\n });\n }\n }\n\n // Fallback to basic logger\n return pino({\n level: finalConfig.level || \"info\",\n base: { pid: process.pid },\n mixin: () => getCallerInfo(finalConfig.name || \"app\"),\n });\n}\n","/**\n * Caller location tracking utility\n */\nimport path from \"path\";\n\nexport interface CallerInfo {\n package: string;\n file: string;\n line: number;\n}\n\n/**\n * Get caller information from stack trace\n */\nexport function getCallerInfo(packageName: string): CallerInfo {\n const stack = new Error().stack || \"\";\n const stackLines = stack.split(\"\\n\");\n\n // Find first non-logger stack frame\n for (let i = 2; i < stackLines.length; i++) {\n const line = stackLines[i];\n if (\n line &&\n !line.includes(\"node_modules/pino\") &&\n !line.includes(\"packages/logger\") &&\n !line.includes(\"@deepracticex/logger\")\n ) {\n const match = line.match(/at\\s+(?:.*?\\s+)?\\(?(.*?):(\\d+):(\\d+)\\)?/);\n if (match && match[1] && match[2]) {\n const fullPath = match[1];\n const lineNum = parseInt(match[2], 10);\n const filename = path.basename(fullPath);\n\n return {\n package: packageName,\n file: filename,\n line: lineNum,\n };\n }\n }\n }\n\n return { package: packageName, file: \"unknown\", line: 0 };\n}\n"],"mappings":"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","names":["import_path","path","path","os","fs","pino"]}
import { L as LoggerConfig, a as Logger } from './logger-CraRs5pE.cjs';
/**
* Create logger for Node.js runtime
* Always uses Pino for structured logging with file support
*/
declare function createLogger(config?: LoggerConfig): Logger;
export { Logger, LoggerConfig, createLogger };
import { L as LoggerConfig, a as Logger } from './logger-CraRs5pE.js';
/**
* Create logger for Node.js runtime
* Always uses Pino for structured logging with file support
*/
declare function createLogger(config?: LoggerConfig): Logger;
export { Logger, LoggerConfig, createLogger };
// src/core/pino-adapter.ts
import pino from "pino";
import path2 from "path";
import os from "os";
import fs from "fs";
// src/core/caller-tracker.ts
import path from "path";
function getCallerInfo(packageName) {
const stack = new Error().stack || "";
const stackLines = stack.split("\n");
for (let i = 2; i < stackLines.length; i++) {
const line = stackLines[i];
if (line && !line.includes("node_modules/pino") && !line.includes("packages/logger") && !line.includes("@deepracticex/logger")) {
const match = line.match(/at\s+(?:.*?\s+)?\(?(.*?):(\d+):(\d+)\)?/);
if (match && match[1] && match[2]) {
const fullPath = match[1];
const lineNum = parseInt(match[2], 10);
const filename = path.basename(fullPath);
return {
package: packageName,
file: filename,
line: lineNum
};
}
}
}
return { package: packageName, file: "unknown", line: 0 };
}
// src/core/pino-adapter.ts
var defaultConfig = {
level: process.env.LOG_LEVEL || "info",
console: true,
file: {
dirname: path2.join(os.homedir(), ".deepractice", "logs")
},
colors: true,
name: "app"
};
function createPinoLogger(config = {}) {
const finalConfig = { ...defaultConfig, ...config };
if (finalConfig.file) {
const fileConfig = typeof finalConfig.file === "object" ? finalConfig.file : {};
const logDir = fileConfig.dirname || path2.join(os.homedir(), ".deepractice", "logs");
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir, { recursive: true });
}
}
const isElectron = process.versions && "electron" in process.versions;
const isTest = process.env.NODE_ENV === "test" || process.env.VITEST === "true";
if (isElectron || isTest || process.env.DEEPRACTICE_NO_WORKERS === "true") {
if (finalConfig.file) {
const fileConfig = typeof finalConfig.file === "object" ? finalConfig.file : {};
const logDir = fileConfig.dirname || path2.join(os.homedir(), ".deepractice", "logs");
const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
const logPath = path2.join(logDir, `deepractice-${today}.log`);
const dest = pino.destination({
dest: logPath,
sync: true
});
return pino(
{
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo(finalConfig.name || "app"),
formatters: {
level: (label) => {
return { level: label };
},
log: (obj) => {
const { package: pkg, file, line, ...rest } = obj;
return {
...rest,
location: pkg && file ? `${pkg} [${file}:${line}]` : void 0
};
}
}
},
dest
);
} else {
return pino({
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo(finalConfig.name || "app"),
formatters: {
level: (label) => {
return { level: label };
},
log: (obj) => {
const { package: pkg, file, line, ...rest } = obj;
return {
...rest,
location: pkg && file ? `${pkg} [${file}:${line}]` : void 0
};
}
}
});
}
} else {
const targets = [];
if (finalConfig.console) {
targets.push({
target: "pino-pretty",
level: finalConfig.level,
options: {
// MCP stdio mode disables colors to avoid ANSI escape codes
colorize: process.env.MCP_TRANSPORT === "stdio" ? false : finalConfig.colors,
translateTime: "SYS:yyyy-mm-dd HH:MM:ss.l",
ignore: "hostname,pid,package,file,line",
destination: 2,
// stderr (fd 2) - MCP best practice
messageFormat: "{package} [{file}:{line}] {msg}"
}
});
}
if (finalConfig.file) {
const fileConfig = typeof finalConfig.file === "object" ? finalConfig.file : {};
const logDir = fileConfig.dirname || path2.join(os.homedir(), ".deepractice", "logs");
const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
targets.push({
target: "pino/file",
level: finalConfig.level,
options: {
destination: path2.join(logDir, `deepractice-${today}.log`)
}
});
targets.push({
target: "pino/file",
level: "error",
options: {
destination: path2.join(logDir, `deepractice-error-${today}.log`)
}
});
}
if (targets.length > 0) {
return pino({
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo(finalConfig.name || "app"),
transport: {
targets
}
});
}
}
return pino({
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo(finalConfig.name || "app")
});
}
// src/nodejs.ts
function createLogger(config = {}) {
return createPinoLogger({ ...config, environment: "nodejs" });
}
export {
createLogger
};
//# sourceMappingURL=nodejs.js.map
{"version":3,"sources":["../src/core/pino-adapter.ts","../src/core/caller-tracker.ts","../src/nodejs.ts"],"sourcesContent":["/**\n * Pino logger adapter - internal implementation\n */\nimport pino from \"pino\";\nimport path from \"path\";\nimport os from \"os\";\nimport fs from \"fs\";\nimport type { LoggerConfig } from \"~/types/config.js\";\nimport { getCallerInfo } from \"~/core/caller-tracker.js\";\n\nconst defaultConfig: LoggerConfig = {\n level: (process.env.LOG_LEVEL as any) || \"info\",\n console: true,\n file: {\n dirname: path.join(os.homedir(), \".deepractice\", \"logs\"),\n },\n colors: true,\n name: \"app\",\n};\n\n/**\n * Create a Pino logger instance\n */\nexport function createPinoLogger(config: LoggerConfig = {}): pino.Logger {\n const finalConfig = { ...defaultConfig, ...config };\n\n // Ensure log directory exists\n if (finalConfig.file) {\n const fileConfig =\n typeof finalConfig.file === \"object\" ? finalConfig.file : {};\n const logDir =\n fileConfig.dirname || path.join(os.homedir(), \".deepractice\", \"logs\");\n if (!fs.existsSync(logDir)) {\n fs.mkdirSync(logDir, { recursive: true });\n }\n }\n\n // For Electron desktop app, avoid worker thread issues\n const isElectron = process.versions && \"electron\" in process.versions;\n const isTest =\n process.env.NODE_ENV === \"test\" || process.env.VITEST === \"true\";\n\n if (isElectron || isTest || process.env.DEEPRACTICE_NO_WORKERS === \"true\") {\n // For Electron: use sync mode to avoid worker thread issues\n if (finalConfig.file) {\n const fileConfig =\n typeof finalConfig.file === \"object\" ? finalConfig.file : {};\n const logDir =\n fileConfig.dirname || path.join(os.homedir(), \".deepractice\", \"logs\");\n const today = new Date().toISOString().split(\"T\")[0];\n const logPath = path.join(logDir, `deepractice-${today}.log`);\n\n const dest = pino.destination({\n dest: logPath,\n sync: true,\n });\n\n return pino(\n {\n level: finalConfig.level || \"info\",\n base: { pid: process.pid },\n mixin: () => getCallerInfo(finalConfig.name || \"app\"),\n formatters: {\n level: (label) => {\n return { level: label };\n },\n log: (obj) => {\n const { package: pkg, file, line, ...rest } = obj;\n return {\n ...rest,\n location: pkg && file ? `${pkg} [${file}:${line}]` : undefined,\n };\n },\n },\n },\n dest,\n );\n } else {\n return pino({\n level: finalConfig.level || \"info\",\n base: { pid: process.pid },\n mixin: () => getCallerInfo(finalConfig.name || \"app\"),\n formatters: {\n level: (label) => {\n return { level: label };\n },\n log: (obj) => {\n const { package: pkg, file, line, ...rest } = obj;\n return {\n ...rest,\n location: pkg && file ? `${pkg} [${file}:${line}]` : undefined,\n };\n },\n },\n });\n }\n } else {\n // Use transports for non-Electron environments (better for servers)\n const targets: any[] = [];\n\n // Console transport\n if (finalConfig.console) {\n targets.push({\n target: \"pino-pretty\",\n level: finalConfig.level,\n options: {\n // MCP stdio mode disables colors to avoid ANSI escape codes\n colorize:\n process.env.MCP_TRANSPORT === \"stdio\" ? false : finalConfig.colors,\n translateTime: \"SYS:yyyy-mm-dd HH:MM:ss.l\",\n ignore: \"hostname,pid,package,file,line\",\n destination: 2, // stderr (fd 2) - MCP best practice\n messageFormat: \"{package} [{file}:{line}] {msg}\",\n },\n });\n }\n\n // File transport\n if (finalConfig.file) {\n const fileConfig =\n typeof finalConfig.file === \"object\" ? finalConfig.file : {};\n const logDir =\n fileConfig.dirname || path.join(os.homedir(), \".deepractice\", \"logs\");\n const today = new Date().toISOString().split(\"T\")[0];\n\n targets.push({\n target: \"pino/file\",\n level: finalConfig.level,\n options: {\n destination: path.join(logDir, `deepractice-${today}.log`),\n },\n });\n\n // Separate error log\n targets.push({\n target: \"pino/file\",\n level: \"error\",\n options: {\n destination: path.join(logDir, `deepractice-error-${today}.log`),\n },\n });\n }\n\n // Create logger with transports\n if (targets.length > 0) {\n return pino({\n level: finalConfig.level || \"info\",\n base: { pid: process.pid },\n mixin: () => getCallerInfo(finalConfig.name || \"app\"),\n transport: {\n targets,\n },\n });\n }\n }\n\n // Fallback to basic logger\n return pino({\n level: finalConfig.level || \"info\",\n base: { pid: process.pid },\n mixin: () => getCallerInfo(finalConfig.name || \"app\"),\n });\n}\n","/**\n * Caller location tracking utility\n */\nimport path from \"path\";\n\nexport interface CallerInfo {\n package: string;\n file: string;\n line: number;\n}\n\n/**\n * Get caller information from stack trace\n */\nexport function getCallerInfo(packageName: string): CallerInfo {\n const stack = new Error().stack || \"\";\n const stackLines = stack.split(\"\\n\");\n\n // Find first non-logger stack frame\n for (let i = 2; i < stackLines.length; i++) {\n const line = stackLines[i];\n if (\n line &&\n !line.includes(\"node_modules/pino\") &&\n !line.includes(\"packages/logger\") &&\n !line.includes(\"@deepracticex/logger\")\n ) {\n const match = line.match(/at\\s+(?:.*?\\s+)?\\(?(.*?):(\\d+):(\\d+)\\)?/);\n if (match && match[1] && match[2]) {\n const fullPath = match[1];\n const lineNum = parseInt(match[2], 10);\n const filename = path.basename(fullPath);\n\n return {\n package: packageName,\n file: filename,\n line: lineNum,\n };\n }\n }\n }\n\n return { package: packageName, file: \"unknown\", line: 0 };\n}\n","/**\n * Node.js platform entry point (default)\n * Directly uses Pino adapter for production-grade logging\n */\nimport { createPinoLogger } from './core/pino-adapter.js';\nimport type { LoggerConfig, Logger } from './types/index.js';\n\n/**\n * Create logger for Node.js runtime\n * Always uses Pino for structured logging with file support\n */\nexport function createLogger(config: LoggerConfig = {}): Logger {\n // Force environment to prevent any detection logic\n return createPinoLogger({ ...config, environment: 'nodejs' });\n}\n\nexport type { Logger, LoggerConfig };\n"],"mappings":"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","names":["path","path"]}
+3
-36

@@ -1,38 +0,5 @@

import { L as LoggerConfig } from './config-DDSl2Hsp.cjs';
import { a as Logger, L as LoggerConfig } from './logger-CraRs5pE.cjs';
export { b as LogLevel } from './logger-CraRs5pE.cjs';
/**
* Logger interface - all methods accept any arguments for maximum flexibility
*/
interface Logger {
/**
* Log trace level message
*/
trace: any;
/**
* Log debug level message
*/
debug: any;
/**
* Log info level message
*/
info: any;
/**
* Log warning level message
*/
warn: any;
/**
* Log error level message
*/
error: any;
/**
* Log fatal level message
*/
fatal: any;
}
/**
* Log level type
*/
type LogLevel = "trace" | "debug" | "info" | "warn" | "error" | "fatal";
/**
* Default logger implementation

@@ -57,2 +24,2 @@ */

export { DefaultLogger, type LogLevel, type Logger, LoggerConfig, createLogger };
export { DefaultLogger, Logger, LoggerConfig, createLogger };

@@ -1,38 +0,5 @@

import { L as LoggerConfig } from './config-DDSl2Hsp.js';
import { a as Logger, L as LoggerConfig } from './logger-CraRs5pE.js';
export { b as LogLevel } from './logger-CraRs5pE.js';
/**
* Logger interface - all methods accept any arguments for maximum flexibility
*/
interface Logger {
/**
* Log trace level message
*/
trace: any;
/**
* Log debug level message
*/
debug: any;
/**
* Log info level message
*/
info: any;
/**
* Log warning level message
*/
warn: any;
/**
* Log error level message
*/
error: any;
/**
* Log fatal level message
*/
fatal: any;
}
/**
* Log level type
*/
type LogLevel = "trace" | "debug" | "info" | "warn" | "error" | "fatal";
/**
* Default logger implementation

@@ -57,2 +24,2 @@ */

export { DefaultLogger, type LogLevel, type Logger, LoggerConfig, createLogger };
export { DefaultLogger, Logger, LoggerConfig, createLogger };
{
"name": "@deepracticex/logger",
"version": "0.5.1",
"version": "1.0.0",
"description": "Unified logging system for Deepractice projects using Pino",

@@ -14,2 +14,17 @@ "type": "module",

"require": "./dist/index.cjs"
},
"./nodejs": {
"types": "./dist/nodejs.d.ts",
"import": "./dist/nodejs.js",
"require": "./dist/nodejs.cjs"
},
"./cloudflare-workers": {
"types": "./dist/cloudflare-workers.d.ts",
"import": "./dist/cloudflare-workers.js",
"require": "./dist/cloudflare-workers.cjs"
},
"./browser": {
"types": "./dist/browser.d.ts",
"import": "./dist/browser.js",
"require": "./dist/browser.cjs"
}

@@ -16,0 +31,0 @@ },

/**
* Runtime environment type
*/
type RuntimeEnvironment = "nodejs" | "cloudflare-workers" | "browser";
/**
* Logger configuration interface
*/
interface LoggerConfig {
/**
* Log level threshold
* @default "info"
*/
level?: "trace" | "debug" | "info" | "warn" | "error" | "fatal";
/**
* Enable console output
* @default true
*/
console?: boolean;
/**
* File logging configuration
* @default { dirname: "~/.deepractice/logs" }
*/
file?: boolean | {
dirname?: string;
};
/**
* Enable colored output
* @default true
*/
colors?: boolean;
/**
* Package/service name for identification
* @default "app"
*/
name?: string;
/**
* Explicitly specify the runtime environment
* If not provided, will auto-detect
* @default auto-detect
*/
environment?: RuntimeEnvironment;
}
export type { LoggerConfig as L };
/**
* Runtime environment type
*/
type RuntimeEnvironment = "nodejs" | "cloudflare-workers" | "browser";
/**
* Logger configuration interface
*/
interface LoggerConfig {
/**
* Log level threshold
* @default "info"
*/
level?: "trace" | "debug" | "info" | "warn" | "error" | "fatal";
/**
* Enable console output
* @default true
*/
console?: boolean;
/**
* File logging configuration
* @default { dirname: "~/.deepractice/logs" }
*/
file?: boolean | {
dirname?: string;
};
/**
* Enable colored output
* @default true
*/
colors?: boolean;
/**
* Package/service name for identification
* @default "app"
*/
name?: string;
/**
* Explicitly specify the runtime environment
* If not provided, will auto-detect
* @default auto-detect
*/
environment?: RuntimeEnvironment;
}
export type { LoggerConfig as L };
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/core/console-adapter.ts
var console_adapter_exports = {};
__export(console_adapter_exports, {
createConsoleLogger: () => createConsoleLogger
});
module.exports = __toCommonJS(console_adapter_exports);
var LOG_LEVELS = {
trace: 0,
debug: 1,
info: 2,
warn: 3,
error: 4,
fatal: 5
};
var defaultConfig = {
level: "info",
console: true,
colors: true,
name: "app"
};
function createConsoleLogger(config = {}) {
const finalConfig = { ...defaultConfig, ...config };
const levelThreshold = LOG_LEVELS[finalConfig.level || "info"];
const name = finalConfig.name || "app";
const formatMessage = (level, ...args) => {
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
const prefix = `[${timestamp}] [${level.toUpperCase()}] [${name}]`;
return `${prefix} ${args.join(" ")}`;
};
const shouldLog = (level) => {
return LOG_LEVELS[level] >= levelThreshold;
};
const logMethod = (level, consoleMethod) => {
return (...args) => {
if (!shouldLog(level)) return;
if (!finalConfig.console) return;
const message = formatMessage(level, ...args);
consoleMethod(message);
};
};
return {
trace: logMethod("trace", console.log),
debug: logMethod("debug", console.log),
info: logMethod("info", console.info),
warn: logMethod("warn", console.warn),
error: logMethod("error", console.error),
fatal: logMethod("fatal", console.error)
};
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
createConsoleLogger
});
//# sourceMappingURL=console-adapter.cjs.map
{"version":3,"sources":["../../src/core/console-adapter.ts"],"sourcesContent":["/**\n * Console logger adapter - for edge runtimes and browsers\n */\nimport type { LoggerConfig } from \"~/types/config.js\";\nimport type { LogLevel } from \"~/types/logger.js\";\n\ninterface ConsoleLoggerInstance {\n trace: (...args: any[]) => void;\n debug: (...args: any[]) => void;\n info: (...args: any[]) => void;\n warn: (...args: any[]) => void;\n error: (...args: any[]) => void;\n fatal: (...args: any[]) => void;\n}\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n trace: 0,\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n fatal: 5,\n};\n\nconst defaultConfig: LoggerConfig = {\n level: \"info\",\n console: true,\n colors: true,\n name: \"app\",\n};\n\n/**\n * Create a console-based logger instance for edge runtimes\n */\nexport function createConsoleLogger(\n config: LoggerConfig = {},\n): ConsoleLoggerInstance {\n const finalConfig = { ...defaultConfig, ...config };\n const levelThreshold = LOG_LEVELS[finalConfig.level || \"info\"];\n const name = finalConfig.name || \"app\";\n\n const formatMessage = (level: LogLevel, ...args: any[]): string => {\n const timestamp = new Date().toISOString();\n const prefix = `[${timestamp}] [${level.toUpperCase()}] [${name}]`;\n return `${prefix} ${args.join(\" \")}`;\n };\n\n const shouldLog = (level: LogLevel): boolean => {\n return LOG_LEVELS[level] >= levelThreshold;\n };\n\n const logMethod = (level: LogLevel, consoleMethod: any) => {\n return (...args: any[]) => {\n if (!shouldLog(level)) return;\n if (!finalConfig.console) return;\n\n const message = formatMessage(level, ...args);\n consoleMethod(message);\n };\n };\n\n return {\n trace: logMethod(\"trace\", console.log),\n debug: logMethod(\"debug\", console.log),\n info: logMethod(\"info\", console.info),\n warn: logMethod(\"warn\", console.warn),\n error: logMethod(\"error\", console.error),\n fatal: logMethod(\"fatal\", console.error),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA,IAAM,aAAuC;AAAA,EAC3C,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACT;AAEA,IAAM,gBAA8B;AAAA,EAClC,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AACR;AAKO,SAAS,oBACd,SAAuB,CAAC,GACD;AACvB,QAAM,cAAc,EAAE,GAAG,eAAe,GAAG,OAAO;AAClD,QAAM,iBAAiB,WAAW,YAAY,SAAS,MAAM;AAC7D,QAAM,OAAO,YAAY,QAAQ;AAEjC,QAAM,gBAAgB,CAAC,UAAoB,SAAwB;AACjE,UAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AACzC,UAAM,SAAS,IAAI,SAAS,MAAM,MAAM,YAAY,CAAC,MAAM,IAAI;AAC/D,WAAO,GAAG,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC;AAAA,EACpC;AAEA,QAAM,YAAY,CAAC,UAA6B;AAC9C,WAAO,WAAW,KAAK,KAAK;AAAA,EAC9B;AAEA,QAAM,YAAY,CAAC,OAAiB,kBAAuB;AACzD,WAAO,IAAI,SAAgB;AACzB,UAAI,CAAC,UAAU,KAAK,EAAG;AACvB,UAAI,CAAC,YAAY,QAAS;AAE1B,YAAM,UAAU,cAAc,OAAO,GAAG,IAAI;AAC5C,oBAAc,OAAO;AAAA,IACvB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,UAAU,SAAS,QAAQ,GAAG;AAAA,IACrC,OAAO,UAAU,SAAS,QAAQ,GAAG;AAAA,IACrC,MAAM,UAAU,QAAQ,QAAQ,IAAI;AAAA,IACpC,MAAM,UAAU,QAAQ,QAAQ,IAAI;AAAA,IACpC,OAAO,UAAU,SAAS,QAAQ,KAAK;AAAA,IACvC,OAAO,UAAU,SAAS,QAAQ,KAAK;AAAA,EACzC;AACF;","names":[]}
import { L as LoggerConfig } from '../config-DDSl2Hsp.cjs';
/**
* Console logger adapter - for edge runtimes and browsers
*/
interface ConsoleLoggerInstance {
trace: (...args: any[]) => void;
debug: (...args: any[]) => void;
info: (...args: any[]) => void;
warn: (...args: any[]) => void;
error: (...args: any[]) => void;
fatal: (...args: any[]) => void;
}
/**
* Create a console-based logger instance for edge runtimes
*/
declare function createConsoleLogger(config?: LoggerConfig): ConsoleLoggerInstance;
export { createConsoleLogger };
import { L as LoggerConfig } from '../config-DDSl2Hsp.js';
/**
* Console logger adapter - for edge runtimes and browsers
*/
interface ConsoleLoggerInstance {
trace: (...args: any[]) => void;
debug: (...args: any[]) => void;
info: (...args: any[]) => void;
warn: (...args: any[]) => void;
error: (...args: any[]) => void;
fatal: (...args: any[]) => void;
}
/**
* Create a console-based logger instance for edge runtimes
*/
declare function createConsoleLogger(config?: LoggerConfig): ConsoleLoggerInstance;
export { createConsoleLogger };
// src/core/console-adapter.ts
var LOG_LEVELS = {
trace: 0,
debug: 1,
info: 2,
warn: 3,
error: 4,
fatal: 5
};
var defaultConfig = {
level: "info",
console: true,
colors: true,
name: "app"
};
function createConsoleLogger(config = {}) {
const finalConfig = { ...defaultConfig, ...config };
const levelThreshold = LOG_LEVELS[finalConfig.level || "info"];
const name = finalConfig.name || "app";
const formatMessage = (level, ...args) => {
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
const prefix = `[${timestamp}] [${level.toUpperCase()}] [${name}]`;
return `${prefix} ${args.join(" ")}`;
};
const shouldLog = (level) => {
return LOG_LEVELS[level] >= levelThreshold;
};
const logMethod = (level, consoleMethod) => {
return (...args) => {
if (!shouldLog(level)) return;
if (!finalConfig.console) return;
const message = formatMessage(level, ...args);
consoleMethod(message);
};
};
return {
trace: logMethod("trace", console.log),
debug: logMethod("debug", console.log),
info: logMethod("info", console.info),
warn: logMethod("warn", console.warn),
error: logMethod("error", console.error),
fatal: logMethod("fatal", console.error)
};
}
export {
createConsoleLogger
};
//# sourceMappingURL=console-adapter.js.map
{"version":3,"sources":["../../src/core/console-adapter.ts"],"sourcesContent":["/**\n * Console logger adapter - for edge runtimes and browsers\n */\nimport type { LoggerConfig } from \"~/types/config.js\";\nimport type { LogLevel } from \"~/types/logger.js\";\n\ninterface ConsoleLoggerInstance {\n trace: (...args: any[]) => void;\n debug: (...args: any[]) => void;\n info: (...args: any[]) => void;\n warn: (...args: any[]) => void;\n error: (...args: any[]) => void;\n fatal: (...args: any[]) => void;\n}\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n trace: 0,\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n fatal: 5,\n};\n\nconst defaultConfig: LoggerConfig = {\n level: \"info\",\n console: true,\n colors: true,\n name: \"app\",\n};\n\n/**\n * Create a console-based logger instance for edge runtimes\n */\nexport function createConsoleLogger(\n config: LoggerConfig = {},\n): ConsoleLoggerInstance {\n const finalConfig = { ...defaultConfig, ...config };\n const levelThreshold = LOG_LEVELS[finalConfig.level || \"info\"];\n const name = finalConfig.name || \"app\";\n\n const formatMessage = (level: LogLevel, ...args: any[]): string => {\n const timestamp = new Date().toISOString();\n const prefix = `[${timestamp}] [${level.toUpperCase()}] [${name}]`;\n return `${prefix} ${args.join(\" \")}`;\n };\n\n const shouldLog = (level: LogLevel): boolean => {\n return LOG_LEVELS[level] >= levelThreshold;\n };\n\n const logMethod = (level: LogLevel, consoleMethod: any) => {\n return (...args: any[]) => {\n if (!shouldLog(level)) return;\n if (!finalConfig.console) return;\n\n const message = formatMessage(level, ...args);\n consoleMethod(message);\n };\n };\n\n return {\n trace: logMethod(\"trace\", console.log),\n debug: logMethod(\"debug\", console.log),\n info: logMethod(\"info\", console.info),\n warn: logMethod(\"warn\", console.warn),\n error: logMethod(\"error\", console.error),\n fatal: logMethod(\"fatal\", console.error),\n };\n}\n"],"mappings":";AAeA,IAAM,aAAuC;AAAA,EAC3C,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACT;AAEA,IAAM,gBAA8B;AAAA,EAClC,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AACR;AAKO,SAAS,oBACd,SAAuB,CAAC,GACD;AACvB,QAAM,cAAc,EAAE,GAAG,eAAe,GAAG,OAAO;AAClD,QAAM,iBAAiB,WAAW,YAAY,SAAS,MAAM;AAC7D,QAAM,OAAO,YAAY,QAAQ;AAEjC,QAAM,gBAAgB,CAAC,UAAoB,SAAwB;AACjE,UAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AACzC,UAAM,SAAS,IAAI,SAAS,MAAM,MAAM,YAAY,CAAC,MAAM,IAAI;AAC/D,WAAO,GAAG,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC;AAAA,EACpC;AAEA,QAAM,YAAY,CAAC,UAA6B;AAC9C,WAAO,WAAW,KAAK,KAAK;AAAA,EAC9B;AAEA,QAAM,YAAY,CAAC,OAAiB,kBAAuB;AACzD,WAAO,IAAI,SAAgB;AACzB,UAAI,CAAC,UAAU,KAAK,EAAG;AACvB,UAAI,CAAC,YAAY,QAAS;AAE1B,YAAM,UAAU,cAAc,OAAO,GAAG,IAAI;AAC5C,oBAAc,OAAO;AAAA,IACvB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,UAAU,SAAS,QAAQ,GAAG;AAAA,IACrC,OAAO,UAAU,SAAS,QAAQ,GAAG;AAAA,IACrC,MAAM,UAAU,QAAQ,QAAQ,IAAI;AAAA,IACpC,MAAM,UAAU,QAAQ,QAAQ,IAAI;AAAA,IACpC,OAAO,UAAU,SAAS,QAAQ,KAAK;AAAA,IACvC,OAAO,UAAU,SAAS,QAAQ,KAAK;AAAA,EACzC;AACF;","names":[]}
"use strict";
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/core/pino-adapter.ts
var pino_adapter_exports = {};
__export(pino_adapter_exports, {
createPinoLogger: () => createPinoLogger
});
module.exports = __toCommonJS(pino_adapter_exports);
var import_pino = __toESM(require("pino"), 1);
var import_path2 = __toESM(require("path"), 1);
var import_os = __toESM(require("os"), 1);
var import_fs = __toESM(require("fs"), 1);
// src/core/caller-tracker.ts
var import_path = __toESM(require("path"), 1);
function getCallerInfo(packageName) {
const stack = new Error().stack || "";
const stackLines = stack.split("\n");
for (let i = 2; i < stackLines.length; i++) {
const line = stackLines[i];
if (line && !line.includes("node_modules/pino") && !line.includes("packages/logger") && !line.includes("@deepracticex/logger")) {
const match = line.match(/at\s+(?:.*?\s+)?\(?(.*?):(\d+):(\d+)\)?/);
if (match && match[1] && match[2]) {
const fullPath = match[1];
const lineNum = parseInt(match[2], 10);
const filename = import_path.default.basename(fullPath);
return {
package: packageName,
file: filename,
line: lineNum
};
}
}
}
return { package: packageName, file: "unknown", line: 0 };
}
// src/core/pino-adapter.ts
var defaultConfig = {
level: process.env.LOG_LEVEL || "info",
console: true,
file: {
dirname: import_path2.default.join(import_os.default.homedir(), ".deepractice", "logs")
},
colors: true,
name: "app"
};
function createPinoLogger(config = {}) {
const finalConfig = { ...defaultConfig, ...config };
if (finalConfig.file) {
const fileConfig = typeof finalConfig.file === "object" ? finalConfig.file : {};
const logDir = fileConfig.dirname || import_path2.default.join(import_os.default.homedir(), ".deepractice", "logs");
if (!import_fs.default.existsSync(logDir)) {
import_fs.default.mkdirSync(logDir, { recursive: true });
}
}
const isElectron = process.versions && "electron" in process.versions;
const isTest = process.env.NODE_ENV === "test" || process.env.VITEST === "true";
if (isElectron || isTest || process.env.DEEPRACTICE_NO_WORKERS === "true") {
if (finalConfig.file) {
const fileConfig = typeof finalConfig.file === "object" ? finalConfig.file : {};
const logDir = fileConfig.dirname || import_path2.default.join(import_os.default.homedir(), ".deepractice", "logs");
const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
const logPath = import_path2.default.join(logDir, `deepractice-${today}.log`);
const dest = import_pino.default.destination({
dest: logPath,
sync: true
});
return (0, import_pino.default)(
{
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo(finalConfig.name || "app"),
formatters: {
level: (label) => {
return { level: label };
},
log: (obj) => {
const { package: pkg, file, line, ...rest } = obj;
return {
...rest,
location: pkg && file ? `${pkg} [${file}:${line}]` : void 0
};
}
}
},
dest
);
} else {
return (0, import_pino.default)({
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo(finalConfig.name || "app"),
formatters: {
level: (label) => {
return { level: label };
},
log: (obj) => {
const { package: pkg, file, line, ...rest } = obj;
return {
...rest,
location: pkg && file ? `${pkg} [${file}:${line}]` : void 0
};
}
}
});
}
} else {
const targets = [];
if (finalConfig.console) {
targets.push({
target: "pino-pretty",
level: finalConfig.level,
options: {
// MCP stdio mode disables colors to avoid ANSI escape codes
colorize: process.env.MCP_TRANSPORT === "stdio" ? false : finalConfig.colors,
translateTime: "SYS:yyyy-mm-dd HH:MM:ss.l",
ignore: "hostname,pid,package,file,line",
destination: 2,
// stderr (fd 2) - MCP best practice
messageFormat: "{package} [{file}:{line}] {msg}"
}
});
}
if (finalConfig.file) {
const fileConfig = typeof finalConfig.file === "object" ? finalConfig.file : {};
const logDir = fileConfig.dirname || import_path2.default.join(import_os.default.homedir(), ".deepractice", "logs");
const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
targets.push({
target: "pino/file",
level: finalConfig.level,
options: {
destination: import_path2.default.join(logDir, `deepractice-${today}.log`)
}
});
targets.push({
target: "pino/file",
level: "error",
options: {
destination: import_path2.default.join(logDir, `deepractice-error-${today}.log`)
}
});
}
if (targets.length > 0) {
return (0, import_pino.default)({
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo(finalConfig.name || "app"),
transport: {
targets
}
});
}
}
return (0, import_pino.default)({
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo(finalConfig.name || "app")
});
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
createPinoLogger
});
//# sourceMappingURL=pino-adapter.cjs.map
{"version":3,"sources":["../../src/core/pino-adapter.ts","../../src/core/caller-tracker.ts"],"sourcesContent":["/**\n * Pino logger adapter - internal implementation\n */\nimport pino from \"pino\";\nimport path from \"path\";\nimport os from \"os\";\nimport fs from \"fs\";\nimport type { LoggerConfig } from \"~/types/config.js\";\nimport { getCallerInfo } from \"~/core/caller-tracker.js\";\n\nconst defaultConfig: LoggerConfig = {\n level: (process.env.LOG_LEVEL as any) || \"info\",\n console: true,\n file: {\n dirname: path.join(os.homedir(), \".deepractice\", \"logs\"),\n },\n colors: true,\n name: \"app\",\n};\n\n/**\n * Create a Pino logger instance\n */\nexport function createPinoLogger(config: LoggerConfig = {}): pino.Logger {\n const finalConfig = { ...defaultConfig, ...config };\n\n // Ensure log directory exists\n if (finalConfig.file) {\n const fileConfig =\n typeof finalConfig.file === \"object\" ? finalConfig.file : {};\n const logDir =\n fileConfig.dirname || path.join(os.homedir(), \".deepractice\", \"logs\");\n if (!fs.existsSync(logDir)) {\n fs.mkdirSync(logDir, { recursive: true });\n }\n }\n\n // For Electron desktop app, avoid worker thread issues\n const isElectron = process.versions && \"electron\" in process.versions;\n const isTest =\n process.env.NODE_ENV === \"test\" || process.env.VITEST === \"true\";\n\n if (isElectron || isTest || process.env.DEEPRACTICE_NO_WORKERS === \"true\") {\n // For Electron: use sync mode to avoid worker thread issues\n if (finalConfig.file) {\n const fileConfig =\n typeof finalConfig.file === \"object\" ? finalConfig.file : {};\n const logDir =\n fileConfig.dirname || path.join(os.homedir(), \".deepractice\", \"logs\");\n const today = new Date().toISOString().split(\"T\")[0];\n const logPath = path.join(logDir, `deepractice-${today}.log`);\n\n const dest = pino.destination({\n dest: logPath,\n sync: true,\n });\n\n return pino(\n {\n level: finalConfig.level || \"info\",\n base: { pid: process.pid },\n mixin: () => getCallerInfo(finalConfig.name || \"app\"),\n formatters: {\n level: (label) => {\n return { level: label };\n },\n log: (obj) => {\n const { package: pkg, file, line, ...rest } = obj;\n return {\n ...rest,\n location: pkg && file ? `${pkg} [${file}:${line}]` : undefined,\n };\n },\n },\n },\n dest,\n );\n } else {\n return pino({\n level: finalConfig.level || \"info\",\n base: { pid: process.pid },\n mixin: () => getCallerInfo(finalConfig.name || \"app\"),\n formatters: {\n level: (label) => {\n return { level: label };\n },\n log: (obj) => {\n const { package: pkg, file, line, ...rest } = obj;\n return {\n ...rest,\n location: pkg && file ? `${pkg} [${file}:${line}]` : undefined,\n };\n },\n },\n });\n }\n } else {\n // Use transports for non-Electron environments (better for servers)\n const targets: any[] = [];\n\n // Console transport\n if (finalConfig.console) {\n targets.push({\n target: \"pino-pretty\",\n level: finalConfig.level,\n options: {\n // MCP stdio mode disables colors to avoid ANSI escape codes\n colorize:\n process.env.MCP_TRANSPORT === \"stdio\" ? false : finalConfig.colors,\n translateTime: \"SYS:yyyy-mm-dd HH:MM:ss.l\",\n ignore: \"hostname,pid,package,file,line\",\n destination: 2, // stderr (fd 2) - MCP best practice\n messageFormat: \"{package} [{file}:{line}] {msg}\",\n },\n });\n }\n\n // File transport\n if (finalConfig.file) {\n const fileConfig =\n typeof finalConfig.file === \"object\" ? finalConfig.file : {};\n const logDir =\n fileConfig.dirname || path.join(os.homedir(), \".deepractice\", \"logs\");\n const today = new Date().toISOString().split(\"T\")[0];\n\n targets.push({\n target: \"pino/file\",\n level: finalConfig.level,\n options: {\n destination: path.join(logDir, `deepractice-${today}.log`),\n },\n });\n\n // Separate error log\n targets.push({\n target: \"pino/file\",\n level: \"error\",\n options: {\n destination: path.join(logDir, `deepractice-error-${today}.log`),\n },\n });\n }\n\n // Create logger with transports\n if (targets.length > 0) {\n return pino({\n level: finalConfig.level || \"info\",\n base: { pid: process.pid },\n mixin: () => getCallerInfo(finalConfig.name || \"app\"),\n transport: {\n targets,\n },\n });\n }\n }\n\n // Fallback to basic logger\n return pino({\n level: finalConfig.level || \"info\",\n base: { pid: process.pid },\n mixin: () => getCallerInfo(finalConfig.name || \"app\"),\n });\n}\n","/**\n * Caller location tracking utility\n */\nimport path from \"path\";\n\nexport interface CallerInfo {\n package: string;\n file: string;\n line: number;\n}\n\n/**\n * Get caller information from stack trace\n */\nexport function getCallerInfo(packageName: string): CallerInfo {\n const stack = new Error().stack || \"\";\n const stackLines = stack.split(\"\\n\");\n\n // Find first non-logger stack frame\n for (let i = 2; i < stackLines.length; i++) {\n const line = stackLines[i];\n if (\n line &&\n !line.includes(\"node_modules/pino\") &&\n !line.includes(\"packages/logger\") &&\n !line.includes(\"@deepracticex/logger\")\n ) {\n const match = line.match(/at\\s+(?:.*?\\s+)?\\(?(.*?):(\\d+):(\\d+)\\)?/);\n if (match && match[1] && match[2]) {\n const fullPath = match[1];\n const lineNum = parseInt(match[2], 10);\n const filename = path.basename(fullPath);\n\n return {\n package: packageName,\n file: filename,\n line: lineNum,\n };\n }\n }\n }\n\n return { package: packageName, file: \"unknown\", line: 0 };\n}\n"],"mappings":"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","names":["import_path","path","path","os","fs","pino"]}
import pino from 'pino';
import { L as LoggerConfig } from '../config-DDSl2Hsp.cjs';
/**
* Pino logger adapter - internal implementation
*/
/**
* Create a Pino logger instance
*/
declare function createPinoLogger(config?: LoggerConfig): pino.Logger;
export { createPinoLogger };
import pino from 'pino';
import { L as LoggerConfig } from '../config-DDSl2Hsp.js';
/**
* Pino logger adapter - internal implementation
*/
/**
* Create a Pino logger instance
*/
declare function createPinoLogger(config?: LoggerConfig): pino.Logger;
export { createPinoLogger };
// src/core/pino-adapter.ts
import pino from "pino";
import path2 from "path";
import os from "os";
import fs from "fs";
// src/core/caller-tracker.ts
import path from "path";
function getCallerInfo(packageName) {
const stack = new Error().stack || "";
const stackLines = stack.split("\n");
for (let i = 2; i < stackLines.length; i++) {
const line = stackLines[i];
if (line && !line.includes("node_modules/pino") && !line.includes("packages/logger") && !line.includes("@deepracticex/logger")) {
const match = line.match(/at\s+(?:.*?\s+)?\(?(.*?):(\d+):(\d+)\)?/);
if (match && match[1] && match[2]) {
const fullPath = match[1];
const lineNum = parseInt(match[2], 10);
const filename = path.basename(fullPath);
return {
package: packageName,
file: filename,
line: lineNum
};
}
}
}
return { package: packageName, file: "unknown", line: 0 };
}
// src/core/pino-adapter.ts
var defaultConfig = {
level: process.env.LOG_LEVEL || "info",
console: true,
file: {
dirname: path2.join(os.homedir(), ".deepractice", "logs")
},
colors: true,
name: "app"
};
function createPinoLogger(config = {}) {
const finalConfig = { ...defaultConfig, ...config };
if (finalConfig.file) {
const fileConfig = typeof finalConfig.file === "object" ? finalConfig.file : {};
const logDir = fileConfig.dirname || path2.join(os.homedir(), ".deepractice", "logs");
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir, { recursive: true });
}
}
const isElectron = process.versions && "electron" in process.versions;
const isTest = process.env.NODE_ENV === "test" || process.env.VITEST === "true";
if (isElectron || isTest || process.env.DEEPRACTICE_NO_WORKERS === "true") {
if (finalConfig.file) {
const fileConfig = typeof finalConfig.file === "object" ? finalConfig.file : {};
const logDir = fileConfig.dirname || path2.join(os.homedir(), ".deepractice", "logs");
const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
const logPath = path2.join(logDir, `deepractice-${today}.log`);
const dest = pino.destination({
dest: logPath,
sync: true
});
return pino(
{
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo(finalConfig.name || "app"),
formatters: {
level: (label) => {
return { level: label };
},
log: (obj) => {
const { package: pkg, file, line, ...rest } = obj;
return {
...rest,
location: pkg && file ? `${pkg} [${file}:${line}]` : void 0
};
}
}
},
dest
);
} else {
return pino({
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo(finalConfig.name || "app"),
formatters: {
level: (label) => {
return { level: label };
},
log: (obj) => {
const { package: pkg, file, line, ...rest } = obj;
return {
...rest,
location: pkg && file ? `${pkg} [${file}:${line}]` : void 0
};
}
}
});
}
} else {
const targets = [];
if (finalConfig.console) {
targets.push({
target: "pino-pretty",
level: finalConfig.level,
options: {
// MCP stdio mode disables colors to avoid ANSI escape codes
colorize: process.env.MCP_TRANSPORT === "stdio" ? false : finalConfig.colors,
translateTime: "SYS:yyyy-mm-dd HH:MM:ss.l",
ignore: "hostname,pid,package,file,line",
destination: 2,
// stderr (fd 2) - MCP best practice
messageFormat: "{package} [{file}:{line}] {msg}"
}
});
}
if (finalConfig.file) {
const fileConfig = typeof finalConfig.file === "object" ? finalConfig.file : {};
const logDir = fileConfig.dirname || path2.join(os.homedir(), ".deepractice", "logs");
const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
targets.push({
target: "pino/file",
level: finalConfig.level,
options: {
destination: path2.join(logDir, `deepractice-${today}.log`)
}
});
targets.push({
target: "pino/file",
level: "error",
options: {
destination: path2.join(logDir, `deepractice-error-${today}.log`)
}
});
}
if (targets.length > 0) {
return pino({
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo(finalConfig.name || "app"),
transport: {
targets
}
});
}
}
return pino({
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo(finalConfig.name || "app")
});
}
export {
createPinoLogger
};
//# sourceMappingURL=pino-adapter.js.map
{"version":3,"sources":["../../src/core/pino-adapter.ts","../../src/core/caller-tracker.ts"],"sourcesContent":["/**\n * Pino logger adapter - internal implementation\n */\nimport pino from \"pino\";\nimport path from \"path\";\nimport os from \"os\";\nimport fs from \"fs\";\nimport type { LoggerConfig } from \"~/types/config.js\";\nimport { getCallerInfo } from \"~/core/caller-tracker.js\";\n\nconst defaultConfig: LoggerConfig = {\n level: (process.env.LOG_LEVEL as any) || \"info\",\n console: true,\n file: {\n dirname: path.join(os.homedir(), \".deepractice\", \"logs\"),\n },\n colors: true,\n name: \"app\",\n};\n\n/**\n * Create a Pino logger instance\n */\nexport function createPinoLogger(config: LoggerConfig = {}): pino.Logger {\n const finalConfig = { ...defaultConfig, ...config };\n\n // Ensure log directory exists\n if (finalConfig.file) {\n const fileConfig =\n typeof finalConfig.file === \"object\" ? finalConfig.file : {};\n const logDir =\n fileConfig.dirname || path.join(os.homedir(), \".deepractice\", \"logs\");\n if (!fs.existsSync(logDir)) {\n fs.mkdirSync(logDir, { recursive: true });\n }\n }\n\n // For Electron desktop app, avoid worker thread issues\n const isElectron = process.versions && \"electron\" in process.versions;\n const isTest =\n process.env.NODE_ENV === \"test\" || process.env.VITEST === \"true\";\n\n if (isElectron || isTest || process.env.DEEPRACTICE_NO_WORKERS === \"true\") {\n // For Electron: use sync mode to avoid worker thread issues\n if (finalConfig.file) {\n const fileConfig =\n typeof finalConfig.file === \"object\" ? finalConfig.file : {};\n const logDir =\n fileConfig.dirname || path.join(os.homedir(), \".deepractice\", \"logs\");\n const today = new Date().toISOString().split(\"T\")[0];\n const logPath = path.join(logDir, `deepractice-${today}.log`);\n\n const dest = pino.destination({\n dest: logPath,\n sync: true,\n });\n\n return pino(\n {\n level: finalConfig.level || \"info\",\n base: { pid: process.pid },\n mixin: () => getCallerInfo(finalConfig.name || \"app\"),\n formatters: {\n level: (label) => {\n return { level: label };\n },\n log: (obj) => {\n const { package: pkg, file, line, ...rest } = obj;\n return {\n ...rest,\n location: pkg && file ? `${pkg} [${file}:${line}]` : undefined,\n };\n },\n },\n },\n dest,\n );\n } else {\n return pino({\n level: finalConfig.level || \"info\",\n base: { pid: process.pid },\n mixin: () => getCallerInfo(finalConfig.name || \"app\"),\n formatters: {\n level: (label) => {\n return { level: label };\n },\n log: (obj) => {\n const { package: pkg, file, line, ...rest } = obj;\n return {\n ...rest,\n location: pkg && file ? `${pkg} [${file}:${line}]` : undefined,\n };\n },\n },\n });\n }\n } else {\n // Use transports for non-Electron environments (better for servers)\n const targets: any[] = [];\n\n // Console transport\n if (finalConfig.console) {\n targets.push({\n target: \"pino-pretty\",\n level: finalConfig.level,\n options: {\n // MCP stdio mode disables colors to avoid ANSI escape codes\n colorize:\n process.env.MCP_TRANSPORT === \"stdio\" ? false : finalConfig.colors,\n translateTime: \"SYS:yyyy-mm-dd HH:MM:ss.l\",\n ignore: \"hostname,pid,package,file,line\",\n destination: 2, // stderr (fd 2) - MCP best practice\n messageFormat: \"{package} [{file}:{line}] {msg}\",\n },\n });\n }\n\n // File transport\n if (finalConfig.file) {\n const fileConfig =\n typeof finalConfig.file === \"object\" ? finalConfig.file : {};\n const logDir =\n fileConfig.dirname || path.join(os.homedir(), \".deepractice\", \"logs\");\n const today = new Date().toISOString().split(\"T\")[0];\n\n targets.push({\n target: \"pino/file\",\n level: finalConfig.level,\n options: {\n destination: path.join(logDir, `deepractice-${today}.log`),\n },\n });\n\n // Separate error log\n targets.push({\n target: \"pino/file\",\n level: \"error\",\n options: {\n destination: path.join(logDir, `deepractice-error-${today}.log`),\n },\n });\n }\n\n // Create logger with transports\n if (targets.length > 0) {\n return pino({\n level: finalConfig.level || \"info\",\n base: { pid: process.pid },\n mixin: () => getCallerInfo(finalConfig.name || \"app\"),\n transport: {\n targets,\n },\n });\n }\n }\n\n // Fallback to basic logger\n return pino({\n level: finalConfig.level || \"info\",\n base: { pid: process.pid },\n mixin: () => getCallerInfo(finalConfig.name || \"app\"),\n });\n}\n","/**\n * Caller location tracking utility\n */\nimport path from \"path\";\n\nexport interface CallerInfo {\n package: string;\n file: string;\n line: number;\n}\n\n/**\n * Get caller information from stack trace\n */\nexport function getCallerInfo(packageName: string): CallerInfo {\n const stack = new Error().stack || \"\";\n const stackLines = stack.split(\"\\n\");\n\n // Find first non-logger stack frame\n for (let i = 2; i < stackLines.length; i++) {\n const line = stackLines[i];\n if (\n line &&\n !line.includes(\"node_modules/pino\") &&\n !line.includes(\"packages/logger\") &&\n !line.includes(\"@deepracticex/logger\")\n ) {\n const match = line.match(/at\\s+(?:.*?\\s+)?\\(?(.*?):(\\d+):(\\d+)\\)?/);\n if (match && match[1] && match[2]) {\n const fullPath = match[1];\n const lineNum = parseInt(match[2], 10);\n const filename = path.basename(fullPath);\n\n return {\n package: packageName,\n file: filename,\n line: lineNum,\n };\n }\n }\n }\n\n return { package: packageName, file: \"unknown\", line: 0 };\n}\n"],"mappings":"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","names":["path","path"]}