@wsxjs/wsx-logger 0.0.18 → 0.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,2 +1,141 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("pino");function g(){return typeof process<"u"&&process.env.NODE_ENV==="production"}function p(){var n;return typeof process<"u"&&((n=process.versions)==null?void 0:n.node)!==void 0}function c(){return typeof window<"u"&&typeof document<"u"}const l={name:"WSX",level:g()?"info":"debug",pretty:!g()};function u(n={}){const{name:e,level:o,pretty:f,pinoOptions:r}={...l,...n},i={name:e||l.name,level:o||l.level,...r};if(c()&&(i.browser={asObject:!1,write:void 0,...(r==null?void 0:r.browser)||{}}),f&&p()&&!g())try{return t(i,t.transport({target:"pino-pretty",options:{colorize:!0,translateTime:"HH:MM:ss.l",ignore:"pid,hostname",singleLine:!1}}))}catch{return console.warn("[wsx-logger] pino-pretty not available, using default formatter"),t(i)}return t(i)}class s{constructor(e={}){this.isProd=g(),this.pinoLogger=u(e)}debug(e,...o){this.isProd||(o.length>0?this.pinoLogger.debug({args:o},e):this.pinoLogger.debug(e))}info(e,...o){this.isProd?o.length>0?this.pinoLogger.info({args:o},e):this.pinoLogger.info(e):o.length>0?this.pinoLogger.info({args:o},e):this.pinoLogger.info(e)}warn(e,...o){o.length>0?this.pinoLogger.warn({args:o},e):this.pinoLogger.warn(e)}error(e,...o){o.length>0?this.pinoLogger.error({args:o},e):this.pinoLogger.error(e)}fatal(e,...o){o.length>0?this.pinoLogger.fatal({args:o},e):this.pinoLogger.fatal(e)}trace(e,...o){this.isProd||(o.length>0?this.pinoLogger.trace({args:o},e):this.pinoLogger.trace(e))}getPinoLogger(){return this.pinoLogger}}const h=new s;function d(n,e={}){return new s({...e,name:e.name||`WSX:${n}`})}function a(n){return new s(n)}Object.defineProperty(exports,"pino",{enumerable:!0,get:()=>t.pino});exports.WSXLogger=s;exports.createLogger=d;exports.createLoggerWithConfig=a;exports.logger=h;
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const pino = require("pino");
4
+ function isProduction() {
5
+ return typeof process !== "undefined" && process.env.NODE_ENV === "production";
6
+ }
7
+ function isNodeEnvironment() {
8
+ var _a;
9
+ return typeof process !== "undefined" && ((_a = process.versions) == null ? void 0 : _a.node) !== void 0;
10
+ }
11
+ function isBrowserEnvironment() {
12
+ return typeof window !== "undefined" && typeof document !== "undefined";
13
+ }
14
+ const DEFAULT_CONFIG = {
15
+ name: "WSX",
16
+ level: isProduction() ? "info" : "debug",
17
+ pretty: !isProduction()
18
+ };
19
+ function createPinoLogger(config = {}) {
20
+ const { name, level, pretty, pinoOptions } = { ...DEFAULT_CONFIG, ...config };
21
+ const options = {
22
+ name: name || DEFAULT_CONFIG.name,
23
+ level: level || DEFAULT_CONFIG.level,
24
+ ...pinoOptions
25
+ };
26
+ if (isBrowserEnvironment()) {
27
+ options.browser = {
28
+ asObject: false,
29
+ // Use console methods directly (default behavior)
30
+ write: void 0,
31
+ // Use default console write
32
+ ...(pinoOptions == null ? void 0 : pinoOptions.browser) || {}
33
+ // Allow override via pinoOptions
34
+ };
35
+ }
36
+ if (pretty && isNodeEnvironment() && !isProduction()) {
37
+ try {
38
+ return pino(
39
+ options,
40
+ pino.transport({
41
+ target: "pino-pretty",
42
+ options: {
43
+ colorize: true,
44
+ translateTime: "HH:MM:ss.l",
45
+ ignore: "pid,hostname",
46
+ singleLine: false
47
+ }
48
+ })
49
+ );
50
+ } catch {
51
+ console.warn("[wsx-logger] pino-pretty not available, using default formatter");
52
+ return pino(options);
53
+ }
54
+ }
55
+ return pino(options);
56
+ }
57
+ class WSXLogger {
58
+ constructor(config = {}) {
59
+ this.isProd = isProduction();
60
+ this.pinoLogger = createPinoLogger(config);
61
+ }
62
+ debug(message, ...args) {
63
+ if (!this.isProd) {
64
+ if (args.length > 0) {
65
+ this.pinoLogger.debug({ args }, message);
66
+ } else {
67
+ this.pinoLogger.debug(message);
68
+ }
69
+ }
70
+ }
71
+ info(message, ...args) {
72
+ if (!this.isProd) {
73
+ if (args.length > 0) {
74
+ this.pinoLogger.info({ args }, message);
75
+ } else {
76
+ this.pinoLogger.info(message);
77
+ }
78
+ } else {
79
+ if (args.length > 0) {
80
+ this.pinoLogger.info({ args }, message);
81
+ } else {
82
+ this.pinoLogger.info(message);
83
+ }
84
+ }
85
+ }
86
+ warn(message, ...args) {
87
+ if (args.length > 0) {
88
+ this.pinoLogger.warn({ args }, message);
89
+ } else {
90
+ this.pinoLogger.warn(message);
91
+ }
92
+ }
93
+ error(message, ...args) {
94
+ if (args.length > 0) {
95
+ this.pinoLogger.error({ args }, message);
96
+ } else {
97
+ this.pinoLogger.error(message);
98
+ }
99
+ }
100
+ fatal(message, ...args) {
101
+ if (args.length > 0) {
102
+ this.pinoLogger.fatal({ args }, message);
103
+ } else {
104
+ this.pinoLogger.fatal(message);
105
+ }
106
+ }
107
+ trace(message, ...args) {
108
+ if (!this.isProd) {
109
+ if (args.length > 0) {
110
+ this.pinoLogger.trace({ args }, message);
111
+ } else {
112
+ this.pinoLogger.trace(message);
113
+ }
114
+ }
115
+ }
116
+ /**
117
+ * Get the underlying pino logger instance
118
+ */
119
+ getPinoLogger() {
120
+ return this.pinoLogger;
121
+ }
122
+ }
123
+ const logger = new WSXLogger();
124
+ function createLogger(componentName, config = {}) {
125
+ return new WSXLogger({
126
+ ...config,
127
+ name: config.name || `WSX:${componentName}`
128
+ });
129
+ }
130
+ function createLoggerWithConfig(config) {
131
+ return new WSXLogger(config);
132
+ }
133
+ Object.defineProperty(exports, "pino", {
134
+ enumerable: true,
135
+ get: () => pino.pino
136
+ });
137
+ exports.WSXLogger = WSXLogger;
138
+ exports.createLogger = createLogger;
139
+ exports.createLoggerWithConfig = createLoggerWithConfig;
140
+ exports.logger = logger;
2
141
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["/**\n * @wsxjs/wsx-logger\n * Pino-based logging utility for WSXJS\n */\n\nimport pino, { type LoggerOptions } from \"pino\";\nimport type { Logger as PinoLoggerType } from \"pino\";\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"fatal\" | \"trace\";\n\n/**\n * Logger interface compatible with WSXJS core logger\n */\nexport interface Logger {\n debug(message: string, ...args: unknown[]): void;\n info(message: string, ...args: unknown[]): void;\n warn(message: string, ...args: unknown[]): void;\n error(message: string, ...args: unknown[]): void;\n fatal?(message: string, ...args: unknown[]): void;\n trace?(message: string, ...args: unknown[]): void;\n}\n\n/**\n * Logger configuration options\n */\nexport interface LoggerConfig {\n /** Logger name/prefix */\n name?: string;\n /** Minimum log level */\n level?: LogLevel;\n /** Enable pretty printing (for development) */\n pretty?: boolean;\n /** Additional pino options */\n pinoOptions?: LoggerOptions;\n}\n\n/**\n * Check if we're in production environment\n */\nfunction isProduction(): boolean {\n return typeof process !== \"undefined\" && process.env.NODE_ENV === \"production\";\n}\n\n/**\n * Check if we're in a Node.js environment\n */\nfunction isNodeEnvironment(): boolean {\n return typeof process !== \"undefined\" && process.versions?.node !== undefined;\n}\n\n/**\n * Check if we're in a browser environment\n */\nfunction isBrowserEnvironment(): boolean {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\";\n}\n\n/**\n * Default logger configuration\n * - Production: info level, no pretty printing\n * - Development: debug level, pretty printing enabled\n */\nconst DEFAULT_CONFIG: LoggerConfig = {\n name: \"WSX\",\n level: isProduction() ? \"info\" : \"debug\",\n pretty: !isProduction(),\n};\n\n/**\n * Create a pino logger instance\n */\nfunction createPinoLogger(config: LoggerConfig = {}): PinoLoggerType {\n const { name, level, pretty, pinoOptions } = { ...DEFAULT_CONFIG, ...config };\n\n const options: LoggerOptions = {\n name: name || DEFAULT_CONFIG.name,\n level: level || DEFAULT_CONFIG.level,\n ...pinoOptions,\n };\n\n // Configure browser-specific options if in browser environment\n if (isBrowserEnvironment()) {\n // In browser, pino automatically uses console methods\n // We can optionally configure browser-specific behavior\n options.browser = {\n asObject: false, // Use console methods directly (default behavior)\n write: undefined, // Use default console write\n ...(pinoOptions?.browser || {}), // Allow override via pinoOptions\n };\n }\n\n // In development and Node.js environment, use pino-pretty for better readability\n if (pretty && isNodeEnvironment() && !isProduction()) {\n try {\n return pino(\n options,\n pino.transport({\n target: \"pino-pretty\",\n options: {\n colorize: true,\n translateTime: \"HH:MM:ss.l\",\n ignore: \"pid,hostname\",\n singleLine: false,\n },\n })\n );\n } catch {\n // Fallback to regular pino if pino-pretty is not available\n console.warn(\"[wsx-logger] pino-pretty not available, using default formatter\");\n return pino(options);\n }\n }\n\n return pino(options);\n}\n\n/**\n * WSX Logger wrapper that implements the Logger interface\n * and uses pino under the hood\n */\nexport class WSXLogger implements Logger {\n private pinoLogger: PinoLoggerType;\n private isProd: boolean;\n\n constructor(config: LoggerConfig = {}) {\n this.isProd = isProduction();\n this.pinoLogger = createPinoLogger(config);\n }\n\n debug(message: string, ...args: unknown[]): void {\n // Always show debug logs in non-production environments\n if (!this.isProd) {\n if (args.length > 0) {\n this.pinoLogger.debug({ args }, message);\n } else {\n this.pinoLogger.debug(message);\n }\n }\n }\n\n info(message: string, ...args: unknown[]): void {\n // Always show info logs in non-production environments\n if (!this.isProd) {\n if (args.length > 0) {\n this.pinoLogger.info({ args }, message);\n } else {\n this.pinoLogger.info(message);\n }\n } else {\n // In production, respect pino's level configuration\n if (args.length > 0) {\n this.pinoLogger.info({ args }, message);\n } else {\n this.pinoLogger.info(message);\n }\n }\n }\n\n warn(message: string, ...args: unknown[]): void {\n // Always show warnings (in both production and development)\n if (args.length > 0) {\n this.pinoLogger.warn({ args }, message);\n } else {\n this.pinoLogger.warn(message);\n }\n }\n\n error(message: string, ...args: unknown[]): void {\n // Always show errors (in both production and development)\n if (args.length > 0) {\n this.pinoLogger.error({ args }, message);\n } else {\n this.pinoLogger.error(message);\n }\n }\n\n fatal(message: string, ...args: unknown[]): void {\n if (args.length > 0) {\n this.pinoLogger.fatal({ args }, message);\n } else {\n this.pinoLogger.fatal(message);\n }\n }\n\n trace(message: string, ...args: unknown[]): void {\n // Always show trace logs in non-production environments\n if (!this.isProd) {\n if (args.length > 0) {\n this.pinoLogger.trace({ args }, message);\n } else {\n this.pinoLogger.trace(message);\n }\n }\n }\n\n /**\n * Get the underlying pino logger instance\n */\n getPinoLogger(): PinoLoggerType {\n return this.pinoLogger;\n }\n}\n\n/**\n * Default logger instance\n */\nexport const logger = new WSXLogger();\n\n/**\n * Create a component-specific logger\n *\n * @param componentName - Name of the component/module\n * @param config - Optional logger configuration\n * @returns Logger instance\n */\nexport function createLogger(componentName: string, config: LoggerConfig = {}): Logger {\n return new WSXLogger({\n ...config,\n name: config.name || `WSX:${componentName}`,\n });\n}\n\n/**\n * Create a logger with custom configuration\n *\n * @param config - Logger configuration\n * @returns Logger instance\n */\nexport function createLoggerWithConfig(config: LoggerConfig): Logger {\n return new WSXLogger(config);\n}\n\n// Export pino types for advanced usage\nexport type { Logger as PinoLogger, LoggerOptions } from \"pino\";\nexport { pino } from \"pino\";\n"],"names":["isProduction","isNodeEnvironment","_a","isBrowserEnvironment","DEFAULT_CONFIG","createPinoLogger","config","name","level","pretty","pinoOptions","options","pino","WSXLogger","message","args","logger","createLogger","componentName","createLoggerWithConfig"],"mappings":"wGAuCA,SAASA,GAAwB,CAC7B,OAAO,OAAO,QAAY,KAAe,QAAQ,IAAI,WAAa,YACtE,CAKA,SAASC,GAA6B,OAClC,OAAO,OAAO,QAAY,OAAeC,EAAA,QAAQ,WAAR,YAAAA,EAAkB,QAAS,MACxE,CAKA,SAASC,GAAgC,CACrC,OAAO,OAAO,OAAW,KAAe,OAAO,SAAa,GAChE,CAOA,MAAMC,EAA+B,CACjC,KAAM,MACN,MAAOJ,IAAiB,OAAS,QACjC,OAAQ,CAACA,EAAA,CACb,EAKA,SAASK,EAAiBC,EAAuB,GAAoB,CACjE,KAAM,CAAE,KAAAC,EAAM,MAAAC,EAAO,OAAAC,EAAQ,YAAAC,CAAA,EAAgB,CAAE,GAAGN,EAAgB,GAAGE,CAAA,EAE/DK,EAAyB,CAC3B,KAAMJ,GAAQH,EAAe,KAC7B,MAAOI,GAASJ,EAAe,MAC/B,GAAGM,CAAA,EAeP,GAXIP,MAGAQ,EAAQ,QAAU,CACd,SAAU,GACV,MAAO,OACP,IAAID,GAAA,YAAAA,EAAa,UAAW,CAAA,CAAC,GAKjCD,GAAUR,KAAuB,CAACD,IAClC,GAAI,CACA,OAAOY,EACHD,EACAC,EAAK,UAAU,CACX,OAAQ,cACR,QAAS,CACL,SAAU,GACV,cAAe,aACf,OAAQ,eACR,WAAY,EAAA,CAChB,CACH,CAAA,CAET,MAAQ,CAEJ,eAAQ,KAAK,iEAAiE,EACvEA,EAAKD,CAAO,CACvB,CAGJ,OAAOC,EAAKD,CAAO,CACvB,CAMO,MAAME,CAA4B,CAIrC,YAAYP,EAAuB,GAAI,CACnC,KAAK,OAASN,EAAA,EACd,KAAK,WAAaK,EAAiBC,CAAM,CAC7C,CAEA,MAAMQ,KAAoBC,EAAuB,CAExC,KAAK,SACFA,EAAK,OAAS,EACd,KAAK,WAAW,MAAM,CAAE,KAAAA,CAAA,EAAQD,CAAO,EAEvC,KAAK,WAAW,MAAMA,CAAO,EAGzC,CAEA,KAAKA,KAAoBC,EAAuB,CAEvC,KAAK,OAQFA,EAAK,OAAS,EACd,KAAK,WAAW,KAAK,CAAE,KAAAA,CAAA,EAAQD,CAAO,EAEtC,KAAK,WAAW,KAAKA,CAAO,EAV5BC,EAAK,OAAS,EACd,KAAK,WAAW,KAAK,CAAE,KAAAA,CAAA,EAAQD,CAAO,EAEtC,KAAK,WAAW,KAAKA,CAAO,CAUxC,CAEA,KAAKA,KAAoBC,EAAuB,CAExCA,EAAK,OAAS,EACd,KAAK,WAAW,KAAK,CAAE,KAAAA,CAAA,EAAQD,CAAO,EAEtC,KAAK,WAAW,KAAKA,CAAO,CAEpC,CAEA,MAAMA,KAAoBC,EAAuB,CAEzCA,EAAK,OAAS,EACd,KAAK,WAAW,MAAM,CAAE,KAAAA,CAAA,EAAQD,CAAO,EAEvC,KAAK,WAAW,MAAMA,CAAO,CAErC,CAEA,MAAMA,KAAoBC,EAAuB,CACzCA,EAAK,OAAS,EACd,KAAK,WAAW,MAAM,CAAE,KAAAA,CAAA,EAAQD,CAAO,EAEvC,KAAK,WAAW,MAAMA,CAAO,CAErC,CAEA,MAAMA,KAAoBC,EAAuB,CAExC,KAAK,SACFA,EAAK,OAAS,EACd,KAAK,WAAW,MAAM,CAAE,KAAAA,CAAA,EAAQD,CAAO,EAEvC,KAAK,WAAW,MAAMA,CAAO,EAGzC,CAKA,eAAgC,CAC5B,OAAO,KAAK,UAChB,CACJ,CAKO,MAAME,EAAS,IAAIH,EASnB,SAASI,EAAaC,EAAuBZ,EAAuB,GAAY,CACnF,OAAO,IAAIO,EAAU,CACjB,GAAGP,EACH,KAAMA,EAAO,MAAQ,OAAOY,CAAa,EAAA,CAC5C,CACL,CAQO,SAASC,EAAuBb,EAA8B,CACjE,OAAO,IAAIO,EAAUP,CAAM,CAC/B"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["/**\n * @wsxjs/wsx-logger\n * Pino-based logging utility for WSXJS\n */\n\nimport pino, { type LoggerOptions } from \"pino\";\nimport type { Logger as PinoLoggerType } from \"pino\";\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"fatal\" | \"trace\";\n\n/**\n * Logger interface compatible with WSXJS core logger\n */\nexport interface Logger {\n debug(message: string, ...args: unknown[]): void;\n info(message: string, ...args: unknown[]): void;\n warn(message: string, ...args: unknown[]): void;\n error(message: string, ...args: unknown[]): void;\n fatal?(message: string, ...args: unknown[]): void;\n trace?(message: string, ...args: unknown[]): void;\n}\n\n/**\n * Logger configuration options\n */\nexport interface LoggerConfig {\n /** Logger name/prefix */\n name?: string;\n /** Minimum log level */\n level?: LogLevel;\n /** Enable pretty printing (for development) */\n pretty?: boolean;\n /** Additional pino options */\n pinoOptions?: LoggerOptions;\n}\n\n/**\n * Check if we're in production environment\n */\nfunction isProduction(): boolean {\n return typeof process !== \"undefined\" && process.env.NODE_ENV === \"production\";\n}\n\n/**\n * Check if we're in a Node.js environment\n */\nfunction isNodeEnvironment(): boolean {\n return typeof process !== \"undefined\" && process.versions?.node !== undefined;\n}\n\n/**\n * Check if we're in a browser environment\n */\nfunction isBrowserEnvironment(): boolean {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\";\n}\n\n/**\n * Default logger configuration\n * - Production: info level, no pretty printing\n * - Development: debug level, pretty printing enabled\n */\nconst DEFAULT_CONFIG: LoggerConfig = {\n name: \"WSX\",\n level: isProduction() ? \"info\" : \"debug\",\n pretty: !isProduction(),\n};\n\n/**\n * Create a pino logger instance\n */\nfunction createPinoLogger(config: LoggerConfig = {}): PinoLoggerType {\n const { name, level, pretty, pinoOptions } = { ...DEFAULT_CONFIG, ...config };\n\n const options: LoggerOptions = {\n name: name || DEFAULT_CONFIG.name,\n level: level || DEFAULT_CONFIG.level,\n ...pinoOptions,\n };\n\n // Configure browser-specific options if in browser environment\n if (isBrowserEnvironment()) {\n // In browser, pino automatically uses console methods\n // We can optionally configure browser-specific behavior\n options.browser = {\n asObject: false, // Use console methods directly (default behavior)\n write: undefined, // Use default console write\n ...(pinoOptions?.browser || {}), // Allow override via pinoOptions\n };\n }\n\n // In development and Node.js environment, use pino-pretty for better readability\n if (pretty && isNodeEnvironment() && !isProduction()) {\n try {\n return pino(\n options,\n pino.transport({\n target: \"pino-pretty\",\n options: {\n colorize: true,\n translateTime: \"HH:MM:ss.l\",\n ignore: \"pid,hostname\",\n singleLine: false,\n },\n })\n );\n } catch {\n // Fallback to regular pino if pino-pretty is not available\n console.warn(\"[wsx-logger] pino-pretty not available, using default formatter\");\n return pino(options);\n }\n }\n\n return pino(options);\n}\n\n/**\n * WSX Logger wrapper that implements the Logger interface\n * and uses pino under the hood\n */\nexport class WSXLogger implements Logger {\n private pinoLogger: PinoLoggerType;\n private isProd: boolean;\n\n constructor(config: LoggerConfig = {}) {\n this.isProd = isProduction();\n this.pinoLogger = createPinoLogger(config);\n }\n\n debug(message: string, ...args: unknown[]): void {\n // Always show debug logs in non-production environments\n if (!this.isProd) {\n if (args.length > 0) {\n this.pinoLogger.debug({ args }, message);\n } else {\n this.pinoLogger.debug(message);\n }\n }\n }\n\n info(message: string, ...args: unknown[]): void {\n // Always show info logs in non-production environments\n if (!this.isProd) {\n if (args.length > 0) {\n this.pinoLogger.info({ args }, message);\n } else {\n this.pinoLogger.info(message);\n }\n } else {\n // In production, respect pino's level configuration\n if (args.length > 0) {\n this.pinoLogger.info({ args }, message);\n } else {\n this.pinoLogger.info(message);\n }\n }\n }\n\n warn(message: string, ...args: unknown[]): void {\n // Always show warnings (in both production and development)\n if (args.length > 0) {\n this.pinoLogger.warn({ args }, message);\n } else {\n this.pinoLogger.warn(message);\n }\n }\n\n error(message: string, ...args: unknown[]): void {\n // Always show errors (in both production and development)\n if (args.length > 0) {\n this.pinoLogger.error({ args }, message);\n } else {\n this.pinoLogger.error(message);\n }\n }\n\n fatal(message: string, ...args: unknown[]): void {\n if (args.length > 0) {\n this.pinoLogger.fatal({ args }, message);\n } else {\n this.pinoLogger.fatal(message);\n }\n }\n\n trace(message: string, ...args: unknown[]): void {\n // Always show trace logs in non-production environments\n if (!this.isProd) {\n if (args.length > 0) {\n this.pinoLogger.trace({ args }, message);\n } else {\n this.pinoLogger.trace(message);\n }\n }\n }\n\n /**\n * Get the underlying pino logger instance\n */\n getPinoLogger(): PinoLoggerType {\n return this.pinoLogger;\n }\n}\n\n/**\n * Default logger instance\n */\nexport const logger = new WSXLogger();\n\n/**\n * Create a component-specific logger\n *\n * @param componentName - Name of the component/module\n * @param config - Optional logger configuration\n * @returns Logger instance\n */\nexport function createLogger(componentName: string, config: LoggerConfig = {}): Logger {\n return new WSXLogger({\n ...config,\n name: config.name || `WSX:${componentName}`,\n });\n}\n\n/**\n * Create a logger with custom configuration\n *\n * @param config - Logger configuration\n * @returns Logger instance\n */\nexport function createLoggerWithConfig(config: LoggerConfig): Logger {\n return new WSXLogger(config);\n}\n\n// Export pino types for advanced usage\nexport type { Logger as PinoLogger, LoggerOptions } from \"pino\";\nexport { pino } from \"pino\";\n"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,73 +1,116 @@
1
- import r from "pino";
2
- import { pino as y } from "pino";
3
- function g() {
4
- return typeof process < "u" && process.env.NODE_ENV === "production";
1
+ import pino from "pino";
2
+ import { pino as pino2 } from "pino";
3
+ function isProduction() {
4
+ return typeof process !== "undefined" && process.env.NODE_ENV === "production";
5
5
  }
6
- function p() {
7
- var n;
8
- return typeof process < "u" && ((n = process.versions) == null ? void 0 : n.node) !== void 0;
6
+ function isNodeEnvironment() {
7
+ var _a;
8
+ return typeof process !== "undefined" && ((_a = process.versions) == null ? void 0 : _a.node) !== void 0;
9
9
  }
10
- function c() {
11
- return typeof window < "u" && typeof document < "u";
10
+ function isBrowserEnvironment() {
11
+ return typeof window !== "undefined" && typeof document !== "undefined";
12
12
  }
13
- const s = {
13
+ const DEFAULT_CONFIG = {
14
14
  name: "WSX",
15
- level: g() ? "info" : "debug",
16
- pretty: !g()
15
+ level: isProduction() ? "info" : "debug",
16
+ pretty: !isProduction()
17
17
  };
18
- function h(n = {}) {
19
- const { name: e, level: o, pretty: l, pinoOptions: i } = { ...s, ...n }, t = {
20
- name: e || s.name,
21
- level: o || s.level,
22
- ...i
18
+ function createPinoLogger(config = {}) {
19
+ const { name, level, pretty, pinoOptions } = { ...DEFAULT_CONFIG, ...config };
20
+ const options = {
21
+ name: name || DEFAULT_CONFIG.name,
22
+ level: level || DEFAULT_CONFIG.level,
23
+ ...pinoOptions
23
24
  };
24
- if (c() && (t.browser = {
25
- asObject: !1,
26
- // Use console methods directly (default behavior)
27
- write: void 0,
28
- // Use default console write
29
- ...(i == null ? void 0 : i.browser) || {}
30
- // Allow override via pinoOptions
31
- }), l && p() && !g())
25
+ if (isBrowserEnvironment()) {
26
+ options.browser = {
27
+ asObject: false,
28
+ // Use console methods directly (default behavior)
29
+ write: void 0,
30
+ // Use default console write
31
+ ...(pinoOptions == null ? void 0 : pinoOptions.browser) || {}
32
+ // Allow override via pinoOptions
33
+ };
34
+ }
35
+ if (pretty && isNodeEnvironment() && !isProduction()) {
32
36
  try {
33
- return r(
34
- t,
35
- r.transport({
37
+ return pino(
38
+ options,
39
+ pino.transport({
36
40
  target: "pino-pretty",
37
41
  options: {
38
- colorize: !0,
42
+ colorize: true,
39
43
  translateTime: "HH:MM:ss.l",
40
44
  ignore: "pid,hostname",
41
- singleLine: !1
45
+ singleLine: false
42
46
  }
43
47
  })
44
48
  );
45
49
  } catch {
46
- return console.warn("[wsx-logger] pino-pretty not available, using default formatter"), r(t);
50
+ console.warn("[wsx-logger] pino-pretty not available, using default formatter");
51
+ return pino(options);
47
52
  }
48
- return r(t);
53
+ }
54
+ return pino(options);
49
55
  }
50
- class f {
51
- constructor(e = {}) {
52
- this.isProd = g(), this.pinoLogger = h(e);
56
+ class WSXLogger {
57
+ constructor(config = {}) {
58
+ this.isProd = isProduction();
59
+ this.pinoLogger = createPinoLogger(config);
53
60
  }
54
- debug(e, ...o) {
55
- this.isProd || (o.length > 0 ? this.pinoLogger.debug({ args: o }, e) : this.pinoLogger.debug(e));
61
+ debug(message, ...args) {
62
+ if (!this.isProd) {
63
+ if (args.length > 0) {
64
+ this.pinoLogger.debug({ args }, message);
65
+ } else {
66
+ this.pinoLogger.debug(message);
67
+ }
68
+ }
56
69
  }
57
- info(e, ...o) {
58
- this.isProd ? o.length > 0 ? this.pinoLogger.info({ args: o }, e) : this.pinoLogger.info(e) : o.length > 0 ? this.pinoLogger.info({ args: o }, e) : this.pinoLogger.info(e);
70
+ info(message, ...args) {
71
+ if (!this.isProd) {
72
+ if (args.length > 0) {
73
+ this.pinoLogger.info({ args }, message);
74
+ } else {
75
+ this.pinoLogger.info(message);
76
+ }
77
+ } else {
78
+ if (args.length > 0) {
79
+ this.pinoLogger.info({ args }, message);
80
+ } else {
81
+ this.pinoLogger.info(message);
82
+ }
83
+ }
59
84
  }
60
- warn(e, ...o) {
61
- o.length > 0 ? this.pinoLogger.warn({ args: o }, e) : this.pinoLogger.warn(e);
85
+ warn(message, ...args) {
86
+ if (args.length > 0) {
87
+ this.pinoLogger.warn({ args }, message);
88
+ } else {
89
+ this.pinoLogger.warn(message);
90
+ }
62
91
  }
63
- error(e, ...o) {
64
- o.length > 0 ? this.pinoLogger.error({ args: o }, e) : this.pinoLogger.error(e);
92
+ error(message, ...args) {
93
+ if (args.length > 0) {
94
+ this.pinoLogger.error({ args }, message);
95
+ } else {
96
+ this.pinoLogger.error(message);
97
+ }
65
98
  }
66
- fatal(e, ...o) {
67
- o.length > 0 ? this.pinoLogger.fatal({ args: o }, e) : this.pinoLogger.fatal(e);
99
+ fatal(message, ...args) {
100
+ if (args.length > 0) {
101
+ this.pinoLogger.fatal({ args }, message);
102
+ } else {
103
+ this.pinoLogger.fatal(message);
104
+ }
68
105
  }
69
- trace(e, ...o) {
70
- this.isProd || (o.length > 0 ? this.pinoLogger.trace({ args: o }, e) : this.pinoLogger.trace(e));
106
+ trace(message, ...args) {
107
+ if (!this.isProd) {
108
+ if (args.length > 0) {
109
+ this.pinoLogger.trace({ args }, message);
110
+ } else {
111
+ this.pinoLogger.trace(message);
112
+ }
113
+ }
71
114
  }
72
115
  /**
73
116
  * Get the underlying pino logger instance
@@ -76,21 +119,21 @@ class f {
76
119
  return this.pinoLogger;
77
120
  }
78
121
  }
79
- const d = new f();
80
- function L(n, e = {}) {
81
- return new f({
82
- ...e,
83
- name: e.name || `WSX:${n}`
122
+ const logger = new WSXLogger();
123
+ function createLogger(componentName, config = {}) {
124
+ return new WSXLogger({
125
+ ...config,
126
+ name: config.name || `WSX:${componentName}`
84
127
  });
85
128
  }
86
- function a(n) {
87
- return new f(n);
129
+ function createLoggerWithConfig(config) {
130
+ return new WSXLogger(config);
88
131
  }
89
132
  export {
90
- f as WSXLogger,
91
- L as createLogger,
92
- a as createLoggerWithConfig,
93
- d as logger,
94
- y as pino
133
+ WSXLogger,
134
+ createLogger,
135
+ createLoggerWithConfig,
136
+ logger,
137
+ pino2 as pino
95
138
  };
96
139
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["/**\n * @wsxjs/wsx-logger\n * Pino-based logging utility for WSXJS\n */\n\nimport pino, { type LoggerOptions } from \"pino\";\nimport type { Logger as PinoLoggerType } from \"pino\";\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"fatal\" | \"trace\";\n\n/**\n * Logger interface compatible with WSXJS core logger\n */\nexport interface Logger {\n debug(message: string, ...args: unknown[]): void;\n info(message: string, ...args: unknown[]): void;\n warn(message: string, ...args: unknown[]): void;\n error(message: string, ...args: unknown[]): void;\n fatal?(message: string, ...args: unknown[]): void;\n trace?(message: string, ...args: unknown[]): void;\n}\n\n/**\n * Logger configuration options\n */\nexport interface LoggerConfig {\n /** Logger name/prefix */\n name?: string;\n /** Minimum log level */\n level?: LogLevel;\n /** Enable pretty printing (for development) */\n pretty?: boolean;\n /** Additional pino options */\n pinoOptions?: LoggerOptions;\n}\n\n/**\n * Check if we're in production environment\n */\nfunction isProduction(): boolean {\n return typeof process !== \"undefined\" && process.env.NODE_ENV === \"production\";\n}\n\n/**\n * Check if we're in a Node.js environment\n */\nfunction isNodeEnvironment(): boolean {\n return typeof process !== \"undefined\" && process.versions?.node !== undefined;\n}\n\n/**\n * Check if we're in a browser environment\n */\nfunction isBrowserEnvironment(): boolean {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\";\n}\n\n/**\n * Default logger configuration\n * - Production: info level, no pretty printing\n * - Development: debug level, pretty printing enabled\n */\nconst DEFAULT_CONFIG: LoggerConfig = {\n name: \"WSX\",\n level: isProduction() ? \"info\" : \"debug\",\n pretty: !isProduction(),\n};\n\n/**\n * Create a pino logger instance\n */\nfunction createPinoLogger(config: LoggerConfig = {}): PinoLoggerType {\n const { name, level, pretty, pinoOptions } = { ...DEFAULT_CONFIG, ...config };\n\n const options: LoggerOptions = {\n name: name || DEFAULT_CONFIG.name,\n level: level || DEFAULT_CONFIG.level,\n ...pinoOptions,\n };\n\n // Configure browser-specific options if in browser environment\n if (isBrowserEnvironment()) {\n // In browser, pino automatically uses console methods\n // We can optionally configure browser-specific behavior\n options.browser = {\n asObject: false, // Use console methods directly (default behavior)\n write: undefined, // Use default console write\n ...(pinoOptions?.browser || {}), // Allow override via pinoOptions\n };\n }\n\n // In development and Node.js environment, use pino-pretty for better readability\n if (pretty && isNodeEnvironment() && !isProduction()) {\n try {\n return pino(\n options,\n pino.transport({\n target: \"pino-pretty\",\n options: {\n colorize: true,\n translateTime: \"HH:MM:ss.l\",\n ignore: \"pid,hostname\",\n singleLine: false,\n },\n })\n );\n } catch {\n // Fallback to regular pino if pino-pretty is not available\n console.warn(\"[wsx-logger] pino-pretty not available, using default formatter\");\n return pino(options);\n }\n }\n\n return pino(options);\n}\n\n/**\n * WSX Logger wrapper that implements the Logger interface\n * and uses pino under the hood\n */\nexport class WSXLogger implements Logger {\n private pinoLogger: PinoLoggerType;\n private isProd: boolean;\n\n constructor(config: LoggerConfig = {}) {\n this.isProd = isProduction();\n this.pinoLogger = createPinoLogger(config);\n }\n\n debug(message: string, ...args: unknown[]): void {\n // Always show debug logs in non-production environments\n if (!this.isProd) {\n if (args.length > 0) {\n this.pinoLogger.debug({ args }, message);\n } else {\n this.pinoLogger.debug(message);\n }\n }\n }\n\n info(message: string, ...args: unknown[]): void {\n // Always show info logs in non-production environments\n if (!this.isProd) {\n if (args.length > 0) {\n this.pinoLogger.info({ args }, message);\n } else {\n this.pinoLogger.info(message);\n }\n } else {\n // In production, respect pino's level configuration\n if (args.length > 0) {\n this.pinoLogger.info({ args }, message);\n } else {\n this.pinoLogger.info(message);\n }\n }\n }\n\n warn(message: string, ...args: unknown[]): void {\n // Always show warnings (in both production and development)\n if (args.length > 0) {\n this.pinoLogger.warn({ args }, message);\n } else {\n this.pinoLogger.warn(message);\n }\n }\n\n error(message: string, ...args: unknown[]): void {\n // Always show errors (in both production and development)\n if (args.length > 0) {\n this.pinoLogger.error({ args }, message);\n } else {\n this.pinoLogger.error(message);\n }\n }\n\n fatal(message: string, ...args: unknown[]): void {\n if (args.length > 0) {\n this.pinoLogger.fatal({ args }, message);\n } else {\n this.pinoLogger.fatal(message);\n }\n }\n\n trace(message: string, ...args: unknown[]): void {\n // Always show trace logs in non-production environments\n if (!this.isProd) {\n if (args.length > 0) {\n this.pinoLogger.trace({ args }, message);\n } else {\n this.pinoLogger.trace(message);\n }\n }\n }\n\n /**\n * Get the underlying pino logger instance\n */\n getPinoLogger(): PinoLoggerType {\n return this.pinoLogger;\n }\n}\n\n/**\n * Default logger instance\n */\nexport const logger = new WSXLogger();\n\n/**\n * Create a component-specific logger\n *\n * @param componentName - Name of the component/module\n * @param config - Optional logger configuration\n * @returns Logger instance\n */\nexport function createLogger(componentName: string, config: LoggerConfig = {}): Logger {\n return new WSXLogger({\n ...config,\n name: config.name || `WSX:${componentName}`,\n });\n}\n\n/**\n * Create a logger with custom configuration\n *\n * @param config - Logger configuration\n * @returns Logger instance\n */\nexport function createLoggerWithConfig(config: LoggerConfig): Logger {\n return new WSXLogger(config);\n}\n\n// Export pino types for advanced usage\nexport type { Logger as PinoLogger, LoggerOptions } from \"pino\";\nexport { pino } from \"pino\";\n"],"names":["isProduction","isNodeEnvironment","_a","isBrowserEnvironment","DEFAULT_CONFIG","createPinoLogger","config","name","level","pretty","pinoOptions","options","pino","WSXLogger","message","args","logger","createLogger","componentName","createLoggerWithConfig"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["/**\n * @wsxjs/wsx-logger\n * Pino-based logging utility for WSXJS\n */\n\nimport pino, { type LoggerOptions } from \"pino\";\nimport type { Logger as PinoLoggerType } from \"pino\";\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"fatal\" | \"trace\";\n\n/**\n * Logger interface compatible with WSXJS core logger\n */\nexport interface Logger {\n debug(message: string, ...args: unknown[]): void;\n info(message: string, ...args: unknown[]): void;\n warn(message: string, ...args: unknown[]): void;\n error(message: string, ...args: unknown[]): void;\n fatal?(message: string, ...args: unknown[]): void;\n trace?(message: string, ...args: unknown[]): void;\n}\n\n/**\n * Logger configuration options\n */\nexport interface LoggerConfig {\n /** Logger name/prefix */\n name?: string;\n /** Minimum log level */\n level?: LogLevel;\n /** Enable pretty printing (for development) */\n pretty?: boolean;\n /** Additional pino options */\n pinoOptions?: LoggerOptions;\n}\n\n/**\n * Check if we're in production environment\n */\nfunction isProduction(): boolean {\n return typeof process !== \"undefined\" && process.env.NODE_ENV === \"production\";\n}\n\n/**\n * Check if we're in a Node.js environment\n */\nfunction isNodeEnvironment(): boolean {\n return typeof process !== \"undefined\" && process.versions?.node !== undefined;\n}\n\n/**\n * Check if we're in a browser environment\n */\nfunction isBrowserEnvironment(): boolean {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\";\n}\n\n/**\n * Default logger configuration\n * - Production: info level, no pretty printing\n * - Development: debug level, pretty printing enabled\n */\nconst DEFAULT_CONFIG: LoggerConfig = {\n name: \"WSX\",\n level: isProduction() ? \"info\" : \"debug\",\n pretty: !isProduction(),\n};\n\n/**\n * Create a pino logger instance\n */\nfunction createPinoLogger(config: LoggerConfig = {}): PinoLoggerType {\n const { name, level, pretty, pinoOptions } = { ...DEFAULT_CONFIG, ...config };\n\n const options: LoggerOptions = {\n name: name || DEFAULT_CONFIG.name,\n level: level || DEFAULT_CONFIG.level,\n ...pinoOptions,\n };\n\n // Configure browser-specific options if in browser environment\n if (isBrowserEnvironment()) {\n // In browser, pino automatically uses console methods\n // We can optionally configure browser-specific behavior\n options.browser = {\n asObject: false, // Use console methods directly (default behavior)\n write: undefined, // Use default console write\n ...(pinoOptions?.browser || {}), // Allow override via pinoOptions\n };\n }\n\n // In development and Node.js environment, use pino-pretty for better readability\n if (pretty && isNodeEnvironment() && !isProduction()) {\n try {\n return pino(\n options,\n pino.transport({\n target: \"pino-pretty\",\n options: {\n colorize: true,\n translateTime: \"HH:MM:ss.l\",\n ignore: \"pid,hostname\",\n singleLine: false,\n },\n })\n );\n } catch {\n // Fallback to regular pino if pino-pretty is not available\n console.warn(\"[wsx-logger] pino-pretty not available, using default formatter\");\n return pino(options);\n }\n }\n\n return pino(options);\n}\n\n/**\n * WSX Logger wrapper that implements the Logger interface\n * and uses pino under the hood\n */\nexport class WSXLogger implements Logger {\n private pinoLogger: PinoLoggerType;\n private isProd: boolean;\n\n constructor(config: LoggerConfig = {}) {\n this.isProd = isProduction();\n this.pinoLogger = createPinoLogger(config);\n }\n\n debug(message: string, ...args: unknown[]): void {\n // Always show debug logs in non-production environments\n if (!this.isProd) {\n if (args.length > 0) {\n this.pinoLogger.debug({ args }, message);\n } else {\n this.pinoLogger.debug(message);\n }\n }\n }\n\n info(message: string, ...args: unknown[]): void {\n // Always show info logs in non-production environments\n if (!this.isProd) {\n if (args.length > 0) {\n this.pinoLogger.info({ args }, message);\n } else {\n this.pinoLogger.info(message);\n }\n } else {\n // In production, respect pino's level configuration\n if (args.length > 0) {\n this.pinoLogger.info({ args }, message);\n } else {\n this.pinoLogger.info(message);\n }\n }\n }\n\n warn(message: string, ...args: unknown[]): void {\n // Always show warnings (in both production and development)\n if (args.length > 0) {\n this.pinoLogger.warn({ args }, message);\n } else {\n this.pinoLogger.warn(message);\n }\n }\n\n error(message: string, ...args: unknown[]): void {\n // Always show errors (in both production and development)\n if (args.length > 0) {\n this.pinoLogger.error({ args }, message);\n } else {\n this.pinoLogger.error(message);\n }\n }\n\n fatal(message: string, ...args: unknown[]): void {\n if (args.length > 0) {\n this.pinoLogger.fatal({ args }, message);\n } else {\n this.pinoLogger.fatal(message);\n }\n }\n\n trace(message: string, ...args: unknown[]): void {\n // Always show trace logs in non-production environments\n if (!this.isProd) {\n if (args.length > 0) {\n this.pinoLogger.trace({ args }, message);\n } else {\n this.pinoLogger.trace(message);\n }\n }\n }\n\n /**\n * Get the underlying pino logger instance\n */\n getPinoLogger(): PinoLoggerType {\n return this.pinoLogger;\n }\n}\n\n/**\n * Default logger instance\n */\nexport const logger = new WSXLogger();\n\n/**\n * Create a component-specific logger\n *\n * @param componentName - Name of the component/module\n * @param config - Optional logger configuration\n * @returns Logger instance\n */\nexport function createLogger(componentName: string, config: LoggerConfig = {}): Logger {\n return new WSXLogger({\n ...config,\n name: config.name || `WSX:${componentName}`,\n });\n}\n\n/**\n * Create a logger with custom configuration\n *\n * @param config - Logger configuration\n * @returns Logger instance\n */\nexport function createLoggerWithConfig(config: LoggerConfig): Logger {\n return new WSXLogger(config);\n}\n\n// Export pino types for advanced usage\nexport type { Logger as PinoLogger, LoggerOptions } from \"pino\";\nexport { pino } from \"pino\";\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wsxjs/wsx-logger",
3
- "version": "0.0.18",
3
+ "version": "0.0.19",
4
4
  "description": "WSXJS Logger - Pino-based logging utility for WSXJS",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",