@iamnnort/nestjs-logger 1.4.0 → 1.4.2

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.d.mts CHANGED
@@ -5,10 +5,11 @@ import { Request, Response } from 'express';
5
5
 
6
6
  type LoggerConfig = {
7
7
  context?: string;
8
+ forbiddenKeys?: string[];
9
+ logResponse?: boolean;
8
10
  serializer?: {
9
- array?: 'indices' | 'brackets' | 'repeat' | 'comma';
11
+ array: 'indices' | 'brackets' | 'repeat' | 'comma';
10
12
  };
11
- forbiddenKeys?: string[];
12
13
  };
13
14
  declare enum LoggerContexts {
14
15
  SYSTEM = "System",
@@ -27,7 +28,7 @@ declare class LoggerModule extends ConfigurableModuleClass {
27
28
 
28
29
  declare class LoggerService extends ConsoleLogger {
29
30
  private config;
30
- constructor(config?: LoggerConfig);
31
+ constructor(customConfig?: LoggerConfig);
31
32
  log(message: string, context?: string): void;
32
33
  logRequest(request: InternalAxiosRequestConfig & Request): void;
33
34
  logResponse(response: AxiosResponse & Response): void;
package/dist/index.d.ts CHANGED
@@ -5,10 +5,11 @@ import { Request, Response } from 'express';
5
5
 
6
6
  type LoggerConfig = {
7
7
  context?: string;
8
+ forbiddenKeys?: string[];
9
+ logResponse?: boolean;
8
10
  serializer?: {
9
- array?: 'indices' | 'brackets' | 'repeat' | 'comma';
11
+ array: 'indices' | 'brackets' | 'repeat' | 'comma';
10
12
  };
11
- forbiddenKeys?: string[];
12
13
  };
13
14
  declare enum LoggerContexts {
14
15
  SYSTEM = "System",
@@ -27,7 +28,7 @@ declare class LoggerModule extends ConfigurableModuleClass {
27
28
 
28
29
  declare class LoggerService extends ConsoleLogger {
29
30
  private config;
30
- constructor(config?: LoggerConfig);
31
+ constructor(customConfig?: LoggerConfig);
31
32
  log(message: string, context?: string): void;
32
33
  logRequest(request: InternalAxiosRequestConfig & Request): void;
33
34
  logResponse(response: AxiosResponse & Response): void;
package/dist/index.js CHANGED
@@ -54,26 +54,26 @@ var MessageBuilder = class {
54
54
  const params = _optionalChain([this, 'access', _16 => _16.request, 'optionalAccess', _17 => _17.params]) || _optionalChain([this, 'access', _18 => _18.response, 'optionalAccess', _19 => _19.config, 'optionalAccess', _20 => _20.params]) || _optionalChain([this, 'access', _21 => _21.error, 'optionalAccess', _22 => _22.response, 'optionalAccess', _23 => _23.config, 'access', _24 => _24.params]);
55
55
  if (url) {
56
56
  if (params) {
57
+ const formattedParams = {
58
+ ...params
59
+ };
57
60
  const systemKeys = [
58
61
  "0",
59
62
  "path"
60
63
  ];
61
- const forbiddenKeys = [
62
- "password",
63
- ...this.config.forbiddenKeys || []
64
- ];
65
- Object.keys(params).forEach((paramKey) => {
64
+ const forbiddenKeys = this.config.forbiddenKeys || [];
65
+ Object.keys(formattedParams).forEach((paramKey) => {
66
66
  if (forbiddenKeys.includes(paramKey)) {
67
- params[paramKey] = "******";
67
+ formattedParams[paramKey] = "******";
68
68
  }
69
69
  if (systemKeys.includes(paramKey)) {
70
- delete params[paramKey];
70
+ delete formattedParams[paramKey];
71
71
  }
72
72
  });
73
73
  this.printQueue.push([
74
74
  url,
75
- _qs.stringify.call(void 0, params, {
76
- arrayFormat: _optionalChain([this, 'access', _25 => _25.config, 'access', _26 => _26.serializer, 'optionalAccess', _27 => _27.array]) || "brackets",
75
+ _qs.stringify.call(void 0, formattedParams, {
76
+ arrayFormat: _optionalChain([this, 'access', _25 => _25.config, 'access', _26 => _26.serializer, 'optionalAccess', _27 => _27.array]),
77
77
  skipNulls: true
78
78
  })
79
79
  ].filter((_) => _).join("?"));
@@ -98,16 +98,16 @@ var MessageBuilder = class {
98
98
  return this;
99
99
  }
100
100
  if (Object.keys(data).length) {
101
- const forbiddenKeys = [
102
- "password",
103
- ...this.config.forbiddenKeys || []
104
- ];
105
- Object.keys(data).forEach((dataKey) => {
101
+ const formattedData = {
102
+ ...data
103
+ };
104
+ const forbiddenKeys = this.config.forbiddenKeys || [];
105
+ Object.keys(formattedData).forEach((dataKey) => {
106
106
  if (forbiddenKeys.includes(dataKey)) {
107
- data[dataKey] = "******";
107
+ formattedData[dataKey] = "******";
108
108
  }
109
109
  });
110
- this.printQueue.push(JSON.stringify(data));
110
+ this.printQueue.push(JSON.stringify(formattedData));
111
111
  return this;
112
112
  }
113
113
  }
@@ -121,16 +121,16 @@ var MessageBuilder = class {
121
121
  return this;
122
122
  }
123
123
  if (Object.keys(data).length) {
124
- const forbiddenKeys = [
125
- "password",
126
- ...this.config.forbiddenKeys || []
127
- ];
128
- Object.keys(data).forEach((dataKey) => {
124
+ const formattedData = {
125
+ ...data
126
+ };
127
+ const forbiddenKeys = this.config.forbiddenKeys || [];
128
+ Object.keys(formattedData).forEach((dataKey) => {
129
129
  if (forbiddenKeys.includes(dataKey)) {
130
- data[dataKey] = "******";
130
+ formattedData[dataKey] = "******";
131
131
  }
132
132
  });
133
- this.printQueue.push(JSON.stringify(data));
133
+ this.printQueue.push(JSON.stringify(formattedData));
134
134
  return this;
135
135
  }
136
136
  }
@@ -157,6 +157,7 @@ var MessageBuilder = class {
157
157
  var { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new (0, _common.ConfigurableModuleBuilder)().build();
158
158
 
159
159
  // src/service.ts
160
+ var _lodash = require('lodash');
160
161
  function _ts_decorate(decorators, target, key, desc) {
161
162
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
162
163
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -179,9 +180,20 @@ var LoggerService = class extends _common.ConsoleLogger {
179
180
  __name(this, "LoggerService");
180
181
  }
181
182
 
182
- constructor(config = {}) {
183
- const ctx = config.context || LoggerContexts.SYSTEM;
184
- super(ctx), this.config = config;
183
+ constructor(customConfig = {}) {
184
+ const defaultConfig = {
185
+ context: LoggerContexts.SYSTEM,
186
+ forbiddenKeys: [
187
+ "password"
188
+ ],
189
+ logResponse: true,
190
+ serializer: {
191
+ array: "brackets"
192
+ }
193
+ };
194
+ const config = _lodash.merge.call(void 0, {}, defaultConfig, customConfig);
195
+ super(config.context);
196
+ this.config = config;
185
197
  }
186
198
  log(message, context) {
187
199
  const ctx = _optionalChain([context, 'optionalAccess', _73 => _73.replace, 'call', _74 => _74(/^_/, "")]) || this.context || "";
@@ -210,7 +222,11 @@ var LoggerService = class extends _common.ConsoleLogger {
210
222
  }
211
223
  logResponse(response) {
212
224
  const loggerMessageBuilder = new MessageBuilder(this.config);
213
- const message = loggerMessageBuilder.setResponse(response).makeType("Response").makeMethod().makeUrl().makeRequestData().makeStatus().makeResponseData().build();
225
+ const loggerMesage = loggerMessageBuilder.setResponse(response).makeType("Response").makeMethod().makeUrl().makeRequestData().makeStatus();
226
+ if (this.config.logResponse) {
227
+ loggerMesage.makeResponseData();
228
+ }
229
+ const message = loggerMesage.build();
214
230
  return this.log(message);
215
231
  }
216
232
  logRequestError(error) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/nestjs-logger/nestjs-logger/dist/index.js","../src/module.ts","../src/service.ts","../src/types.ts","../src/message/builder.ts","../src/module-definition.ts","../src/middleware.ts"],"names":["LoggerContexts","MessageBuilder","printQueue","request","response","error","constructor","config","setRequest","setResponse","setError","makeType","type","push","makeUrl","url","originalUrl","req","params","systemKeys","forbiddenKeys","Object","keys","forEach","paramKey","includes","stringify","arrayFormat","serializer","array","skipNulls","filter","_","join","makeMethod","method","toUpperCase","makeRequestData","data","body","length","dataKey","JSON","makeResponseData","makeStatus","status","statusCode","ConfigurableModuleBuilder","ConfigurableModuleClass","ConsoleLogger","context","replace","INSTANCE_LOADER","ROUTER_EXPLORER","ROUTES_RESOLVER","NEST_FACTORY","NEST_APPLICATION","ctxMessageMap","ctx","loggerMessageBuilder","message","TRANSIENT","Injectable","LoggerMiddleware","loggerService","next","logRequest","logResponse","LoggerService"],"mappings":"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","file":"/home/runner/work/nestjs-logger/nestjs-logger/dist/index.js","sourcesContent":[null,"import { Global, MiddlewareConsumer, Module } from '@nestjs/common';\nimport { LoggerService } from './service';\nimport { LoggerMiddleware } from './middleware';\nimport { ConfigurableModuleClass } from './module-definition';\n\n@Global()\n@Module({\n providers: [LoggerService],\n exports: [LoggerService],\n})\nexport class LoggerModule extends ConfigurableModuleClass {\n configure(consumer: MiddlewareConsumer) {\n consumer.apply(LoggerMiddleware).forRoutes('*');\n }\n}\n","import { ConsoleLogger, Inject, Injectable, Scope } from '@nestjs/common';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { type LoggerConfig, LoggerContexts } from './types';\nimport { Request, Response } from 'express';\nimport { MessageBuilder } from './message/builder';\nimport { MODULE_OPTIONS_TOKEN } from './module-definition';\n\n@Injectable({\n scope: Scope.TRANSIENT,\n})\nexport class LoggerService extends ConsoleLogger {\n constructor(@Inject(MODULE_OPTIONS_TOKEN) private config: LoggerConfig = {}) {\n const ctx = config.context || LoggerContexts.SYSTEM;\n\n super(ctx);\n }\n\n log(message: string, context?: string) {\n const ctx = context?.replace(/^_/, '') || this.context || '';\n\n const ctxBlacklist: string[] = [\n LoggerContexts.INSTANCE_LOADER,\n LoggerContexts.ROUTER_EXPLORER,\n LoggerContexts.ROUTES_RESOLVER,\n ];\n\n if (ctxBlacklist.includes(ctx)) {\n return;\n }\n\n const ctxMessageMap: Record<string, string> = {\n [LoggerContexts.NEST_FACTORY]: 'Application is starting...',\n [LoggerContexts.NEST_APPLICATION]: 'Application started.',\n };\n\n const ctxMessage = ctxMessageMap[ctx];\n\n if (ctxMessage) {\n return console.log(`[${LoggerContexts.SYSTEM}] ${ctxMessage}`);\n }\n\n return console.log(`[${ctx}] ${message}`);\n }\n\n logRequest(request: InternalAxiosRequestConfig & Request) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setRequest(request)\n .makeType('Request')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .build();\n\n return this.log(message);\n }\n\n logResponse(response: AxiosResponse & Response) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setResponse(response)\n .makeType('Response')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .makeStatus()\n .makeResponseData()\n .build();\n\n return this.log(message);\n }\n\n logRequestError(error: AxiosError) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setError(error)\n .makeType('Error')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .makeStatus()\n .makeResponseData()\n .build();\n\n return this.log(message);\n }\n}\n","export type LoggerConfig = {\n context?: string;\n serializer?: {\n array?: 'indices' | 'brackets' | 'repeat' | 'comma';\n };\n forbiddenKeys?: string[];\n};\n\nexport enum LoggerContexts {\n SYSTEM = 'System',\n INSTANCE_LOADER = 'InstanceLoader',\n ROUTER_EXPLORER = 'RouterExplorer',\n ROUTES_RESOLVER = 'RoutesResolver',\n NEST_FACTORY = 'NestFactory',\n NEST_APPLICATION = 'NestApplication',\n}\n","import { stringify } from 'qs';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { Response, Request } from 'express';\nimport { LoggerConfig } from '@src/types';\n\nexport class MessageBuilder {\n private printQueue: string[] = [];\n\n private request!: InternalAxiosRequestConfig & Request;\n private response!: AxiosResponse & Response;\n private error!: AxiosError;\n\n constructor(private config: LoggerConfig = {}) {}\n\n setRequest(request: InternalAxiosRequestConfig & Request) {\n this.request = request;\n\n return this;\n }\n\n setResponse(response: AxiosResponse & Response) {\n this.response = response;\n\n return this;\n }\n\n setError(error: AxiosError) {\n this.error = error;\n\n return this;\n }\n\n makeType(type: string) {\n this.printQueue.push(`[${type}]`);\n\n return this;\n }\n\n makeUrl() {\n const url =\n this.request?.originalUrl ||\n this.response?.req?.originalUrl ||\n this.request?.url ||\n this.response?.config?.url ||\n this.error?.response?.config.url;\n\n const params = this.request?.params || this.response?.config?.params || this.error?.response?.config.params;\n\n if (url) {\n if (params) {\n const systemKeys = ['0', 'path'];\n const forbiddenKeys = ['password', ...(this.config.forbiddenKeys || [])];\n\n Object.keys(params).forEach((paramKey) => {\n if (forbiddenKeys.includes(paramKey)) {\n params[paramKey] = '******';\n }\n\n if (systemKeys.includes(paramKey)) {\n delete params[paramKey];\n }\n });\n\n this.printQueue.push(\n [\n url,\n stringify(params, {\n arrayFormat: this.config.serializer?.array || 'brackets',\n skipNulls: true,\n }),\n ]\n .filter((_) => _)\n .join('?'),\n );\n } else {\n this.printQueue.push(url);\n }\n }\n\n return this;\n }\n\n makeMethod() {\n const method =\n this.request?.method ||\n this.response?.req?.method ||\n this.response?.config?.method ||\n this.error?.response?.config.method;\n\n if (method) {\n this.printQueue.push(method.toUpperCase());\n }\n\n return this;\n }\n\n makeRequestData() {\n const data =\n this.request?.body ||\n this.response?.req?.body ||\n this.request?.data ||\n this.response?.config?.data ||\n this.error?.response?.config.data;\n\n if (data) {\n if (typeof data === 'string') {\n this.printQueue.push(data);\n\n return this;\n }\n\n if (Object.keys(data).length) {\n const forbiddenKeys = ['password', ...(this.config.forbiddenKeys || [])];\n\n Object.keys(data).forEach((dataKey) => {\n if (forbiddenKeys.includes(dataKey)) {\n data[dataKey] = '******';\n }\n });\n\n this.printQueue.push(JSON.stringify(data));\n\n return this;\n }\n }\n\n return this;\n }\n\n makeResponseData() {\n const data = this.response?.data || this.error?.response?.data;\n\n if (data) {\n if (typeof data === 'string') {\n this.printQueue.push(data);\n\n return this;\n }\n\n if (Object.keys(data).length) {\n const forbiddenKeys = ['password', ...(this.config.forbiddenKeys || [])];\n\n Object.keys(data).forEach((dataKey) => {\n if (forbiddenKeys.includes(dataKey)) {\n data[dataKey] = '******';\n }\n });\n\n this.printQueue.push(JSON.stringify(data));\n\n return this;\n }\n }\n\n return this;\n }\n\n makeStatus() {\n const status = this.response?.statusCode || this.response?.status || this.error?.response?.status;\n\n if (status) {\n this.printQueue.push(`${status}`);\n\n const statusText = this.response?.statusMessage || this.response?.statusText || this.error?.response?.statusText;\n\n if (statusText) {\n this.printQueue.push(statusText);\n }\n }\n\n return this;\n }\n\n build() {\n return this.printQueue.join(' ');\n }\n}\n","import { ConfigurableModuleBuilder } from '@nestjs/common';\nimport { LoggerConfig } from './types';\n\nexport const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new ConfigurableModuleBuilder<LoggerConfig>().build();\n","import { Injectable, NestMiddleware } from '@nestjs/common';\nimport { Request, Response, NextFunction } from 'express';\nimport { LoggerService } from './service';\n\n@Injectable()\nexport class LoggerMiddleware implements NestMiddleware {\n constructor(private loggerService: LoggerService) {}\n\n use(request: Request, response: Response, next: NextFunction) {\n this.loggerService.logRequest(request as any);\n\n response.on('finish', () => {\n this.loggerService.logResponse(response as any);\n });\n\n return next();\n }\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/nestjs-logger/nestjs-logger/dist/index.js","../src/module.ts","../src/service.ts","../src/types.ts","../src/message/builder.ts","../src/module-definition.ts","../src/middleware.ts"],"names":["LoggerContexts","MessageBuilder","printQueue","request","response","error","constructor","config","setRequest","setResponse","setError","makeType","type","push","makeUrl","url","originalUrl","req","params","formattedParams","systemKeys","forbiddenKeys","Object","keys","forEach","paramKey","includes","stringify","arrayFormat","serializer","array","skipNulls","filter","_","join","makeMethod","method","toUpperCase","makeRequestData","data","body","length","formattedData","dataKey","JSON","makeResponseData","makeStatus","status","statusCode","ConfigurableModuleBuilder","ConfigurableModuleClass","ConsoleLogger","customConfig","replace","INSTANCE_LOADER","ROUTER_EXPLORER","ROUTES_RESOLVER","NEST_FACTORY","NEST_APPLICATION","ctxMessageMap","ctx","loggerMessageBuilder","message","logResponse","loggerMesage","TRANSIENT","Injectable","LoggerMiddleware","loggerService","next","logRequest","LoggerService"],"mappings":"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","file":"/home/runner/work/nestjs-logger/nestjs-logger/dist/index.js","sourcesContent":[null,"import { Global, MiddlewareConsumer, Module } from '@nestjs/common';\nimport { LoggerService } from './service';\nimport { LoggerMiddleware } from './middleware';\nimport { ConfigurableModuleClass } from './module-definition';\n\n@Global()\n@Module({\n providers: [LoggerService],\n exports: [LoggerService],\n})\nexport class LoggerModule extends ConfigurableModuleClass {\n configure(consumer: MiddlewareConsumer) {\n consumer.apply(LoggerMiddleware).forRoutes('*');\n }\n}\n","import { ConsoleLogger, Inject, Injectable, Scope } from '@nestjs/common';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { type LoggerConfig, LoggerContexts } from './types';\nimport { Request, Response } from 'express';\nimport { MessageBuilder } from './message/builder';\nimport { MODULE_OPTIONS_TOKEN } from './module-definition';\nimport { merge } from 'lodash';\n\n@Injectable({\n scope: Scope.TRANSIENT,\n})\nexport class LoggerService extends ConsoleLogger {\n private config: LoggerConfig;\n\n constructor(@Inject(MODULE_OPTIONS_TOKEN) customConfig: LoggerConfig = {}) {\n const defaultConfig = {\n context: LoggerContexts.SYSTEM,\n forbiddenKeys: ['password'],\n logResponse: true,\n serializer: {\n array: 'brackets',\n },\n };\n\n const config = merge({}, defaultConfig, customConfig);\n\n super(config.context);\n\n this.config = config;\n }\n\n log(message: string, context?: string) {\n const ctx = context?.replace(/^_/, '') || this.context || '';\n\n const ctxBlacklist: string[] = [\n LoggerContexts.INSTANCE_LOADER,\n LoggerContexts.ROUTER_EXPLORER,\n LoggerContexts.ROUTES_RESOLVER,\n ];\n\n if (ctxBlacklist.includes(ctx)) {\n return;\n }\n\n const ctxMessageMap: Record<string, string> = {\n [LoggerContexts.NEST_FACTORY]: 'Application is starting...',\n [LoggerContexts.NEST_APPLICATION]: 'Application started.',\n };\n\n const ctxMessage = ctxMessageMap[ctx];\n\n if (ctxMessage) {\n return console.log(`[${LoggerContexts.SYSTEM}] ${ctxMessage}`);\n }\n\n return console.log(`[${ctx}] ${message}`);\n }\n\n logRequest(request: InternalAxiosRequestConfig & Request) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setRequest(request)\n .makeType('Request')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .build();\n\n return this.log(message);\n }\n\n logResponse(response: AxiosResponse & Response) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const loggerMesage = loggerMessageBuilder\n .setResponse(response)\n .makeType('Response')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .makeStatus();\n\n if (this.config.logResponse) {\n loggerMesage.makeResponseData();\n }\n\n const message = loggerMesage.build();\n\n return this.log(message);\n }\n\n logRequestError(error: AxiosError) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setError(error)\n .makeType('Error')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .makeStatus()\n .makeResponseData()\n .build();\n\n return this.log(message);\n }\n}\n","export type LoggerConfig = {\n context?: string;\n forbiddenKeys?: string[];\n logResponse?: boolean;\n serializer?: {\n array: 'indices' | 'brackets' | 'repeat' | 'comma';\n };\n};\n\nexport enum LoggerContexts {\n SYSTEM = 'System',\n INSTANCE_LOADER = 'InstanceLoader',\n ROUTER_EXPLORER = 'RouterExplorer',\n ROUTES_RESOLVER = 'RoutesResolver',\n NEST_FACTORY = 'NestFactory',\n NEST_APPLICATION = 'NestApplication',\n}\n","import { stringify } from 'qs';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { Response, Request } from 'express';\nimport { LoggerConfig } from '@src/types';\n\nexport class MessageBuilder {\n private printQueue: string[] = [];\n\n private request!: InternalAxiosRequestConfig & Request;\n private response!: AxiosResponse & Response;\n private error!: AxiosError;\n\n constructor(private config: LoggerConfig = {}) {}\n\n setRequest(request: InternalAxiosRequestConfig & Request) {\n this.request = request;\n\n return this;\n }\n\n setResponse(response: AxiosResponse & Response) {\n this.response = response;\n\n return this;\n }\n\n setError(error: AxiosError) {\n this.error = error;\n\n return this;\n }\n\n makeType(type: string) {\n this.printQueue.push(`[${type}]`);\n\n return this;\n }\n\n makeUrl() {\n const url =\n this.request?.originalUrl ||\n this.response?.req?.originalUrl ||\n this.request?.url ||\n this.response?.config?.url ||\n this.error?.response?.config.url;\n\n const params = this.request?.params || this.response?.config?.params || this.error?.response?.config.params;\n\n if (url) {\n if (params) {\n const formattedParams = { ...params };\n const systemKeys = ['0', 'path'];\n const forbiddenKeys = this.config.forbiddenKeys || [];\n\n Object.keys(formattedParams).forEach((paramKey) => {\n if (forbiddenKeys.includes(paramKey)) {\n formattedParams[paramKey] = '******';\n }\n\n if (systemKeys.includes(paramKey)) {\n delete formattedParams[paramKey];\n }\n });\n\n this.printQueue.push(\n [\n url,\n stringify(formattedParams, {\n arrayFormat: this.config.serializer?.array,\n skipNulls: true,\n }),\n ]\n .filter((_) => _)\n .join('?'),\n );\n } else {\n this.printQueue.push(url);\n }\n }\n\n return this;\n }\n\n makeMethod() {\n const method =\n this.request?.method ||\n this.response?.req?.method ||\n this.response?.config?.method ||\n this.error?.response?.config.method;\n\n if (method) {\n this.printQueue.push(method.toUpperCase());\n }\n\n return this;\n }\n\n makeRequestData() {\n const data =\n this.request?.body ||\n this.response?.req?.body ||\n this.request?.data ||\n this.response?.config?.data ||\n this.error?.response?.config.data;\n\n if (data) {\n if (typeof data === 'string') {\n this.printQueue.push(data);\n\n return this;\n }\n\n if (Object.keys(data).length) {\n const formattedData = { ...data };\n const forbiddenKeys = this.config.forbiddenKeys || [];\n\n Object.keys(formattedData).forEach((dataKey) => {\n if (forbiddenKeys.includes(dataKey)) {\n formattedData[dataKey] = '******';\n }\n });\n\n this.printQueue.push(JSON.stringify(formattedData));\n\n return this;\n }\n }\n\n return this;\n }\n\n makeResponseData() {\n const data = this.response?.data || this.error?.response?.data;\n\n if (data) {\n if (typeof data === 'string') {\n this.printQueue.push(data);\n\n return this;\n }\n\n if (Object.keys(data).length) {\n const formattedData = { ...data };\n const forbiddenKeys = this.config.forbiddenKeys || [];\n\n Object.keys(formattedData).forEach((dataKey) => {\n if (forbiddenKeys.includes(dataKey)) {\n formattedData[dataKey] = '******';\n }\n });\n\n this.printQueue.push(JSON.stringify(formattedData));\n\n return this;\n }\n }\n\n return this;\n }\n\n makeStatus() {\n const status = this.response?.statusCode || this.response?.status || this.error?.response?.status;\n\n if (status) {\n this.printQueue.push(`${status}`);\n\n const statusText = this.response?.statusMessage || this.response?.statusText || this.error?.response?.statusText;\n\n if (statusText) {\n this.printQueue.push(statusText);\n }\n }\n\n return this;\n }\n\n build() {\n return this.printQueue.join(' ');\n }\n}\n","import { ConfigurableModuleBuilder } from '@nestjs/common';\nimport { LoggerConfig } from './types';\n\nexport const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new ConfigurableModuleBuilder<LoggerConfig>().build();\n","import { Injectable, NestMiddleware } from '@nestjs/common';\nimport { Request, Response, NextFunction } from 'express';\nimport { LoggerService } from './service';\n\n@Injectable()\nexport class LoggerMiddleware implements NestMiddleware {\n constructor(private loggerService: LoggerService) {}\n\n use(request: Request, response: Response, next: NextFunction) {\n this.loggerService.logRequest(request as any);\n\n response.on('finish', () => {\n this.loggerService.logResponse(response as any);\n });\n\n return next();\n }\n}\n"]}
package/dist/index.mjs CHANGED
@@ -54,26 +54,26 @@ var MessageBuilder = class {
54
54
  const params = this.request?.params || this.response?.config?.params || this.error?.response?.config.params;
55
55
  if (url) {
56
56
  if (params) {
57
+ const formattedParams = {
58
+ ...params
59
+ };
57
60
  const systemKeys = [
58
61
  "0",
59
62
  "path"
60
63
  ];
61
- const forbiddenKeys = [
62
- "password",
63
- ...this.config.forbiddenKeys || []
64
- ];
65
- Object.keys(params).forEach((paramKey) => {
64
+ const forbiddenKeys = this.config.forbiddenKeys || [];
65
+ Object.keys(formattedParams).forEach((paramKey) => {
66
66
  if (forbiddenKeys.includes(paramKey)) {
67
- params[paramKey] = "******";
67
+ formattedParams[paramKey] = "******";
68
68
  }
69
69
  if (systemKeys.includes(paramKey)) {
70
- delete params[paramKey];
70
+ delete formattedParams[paramKey];
71
71
  }
72
72
  });
73
73
  this.printQueue.push([
74
74
  url,
75
- stringify(params, {
76
- arrayFormat: this.config.serializer?.array || "brackets",
75
+ stringify(formattedParams, {
76
+ arrayFormat: this.config.serializer?.array,
77
77
  skipNulls: true
78
78
  })
79
79
  ].filter((_) => _).join("?"));
@@ -98,16 +98,16 @@ var MessageBuilder = class {
98
98
  return this;
99
99
  }
100
100
  if (Object.keys(data).length) {
101
- const forbiddenKeys = [
102
- "password",
103
- ...this.config.forbiddenKeys || []
104
- ];
105
- Object.keys(data).forEach((dataKey) => {
101
+ const formattedData = {
102
+ ...data
103
+ };
104
+ const forbiddenKeys = this.config.forbiddenKeys || [];
105
+ Object.keys(formattedData).forEach((dataKey) => {
106
106
  if (forbiddenKeys.includes(dataKey)) {
107
- data[dataKey] = "******";
107
+ formattedData[dataKey] = "******";
108
108
  }
109
109
  });
110
- this.printQueue.push(JSON.stringify(data));
110
+ this.printQueue.push(JSON.stringify(formattedData));
111
111
  return this;
112
112
  }
113
113
  }
@@ -121,16 +121,16 @@ var MessageBuilder = class {
121
121
  return this;
122
122
  }
123
123
  if (Object.keys(data).length) {
124
- const forbiddenKeys = [
125
- "password",
126
- ...this.config.forbiddenKeys || []
127
- ];
128
- Object.keys(data).forEach((dataKey) => {
124
+ const formattedData = {
125
+ ...data
126
+ };
127
+ const forbiddenKeys = this.config.forbiddenKeys || [];
128
+ Object.keys(formattedData).forEach((dataKey) => {
129
129
  if (forbiddenKeys.includes(dataKey)) {
130
- data[dataKey] = "******";
130
+ formattedData[dataKey] = "******";
131
131
  }
132
132
  });
133
- this.printQueue.push(JSON.stringify(data));
133
+ this.printQueue.push(JSON.stringify(formattedData));
134
134
  return this;
135
135
  }
136
136
  }
@@ -157,6 +157,7 @@ import { ConfigurableModuleBuilder } from "@nestjs/common";
157
157
  var { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new ConfigurableModuleBuilder().build();
158
158
 
159
159
  // src/service.ts
160
+ import { merge } from "lodash";
160
161
  function _ts_decorate(decorators, target, key, desc) {
161
162
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
162
163
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -179,9 +180,20 @@ var LoggerService = class extends ConsoleLogger {
179
180
  __name(this, "LoggerService");
180
181
  }
181
182
  config;
182
- constructor(config = {}) {
183
- const ctx = config.context || LoggerContexts.SYSTEM;
184
- super(ctx), this.config = config;
183
+ constructor(customConfig = {}) {
184
+ const defaultConfig = {
185
+ context: LoggerContexts.SYSTEM,
186
+ forbiddenKeys: [
187
+ "password"
188
+ ],
189
+ logResponse: true,
190
+ serializer: {
191
+ array: "brackets"
192
+ }
193
+ };
194
+ const config = merge({}, defaultConfig, customConfig);
195
+ super(config.context);
196
+ this.config = config;
185
197
  }
186
198
  log(message, context) {
187
199
  const ctx = context?.replace(/^_/, "") || this.context || "";
@@ -210,7 +222,11 @@ var LoggerService = class extends ConsoleLogger {
210
222
  }
211
223
  logResponse(response) {
212
224
  const loggerMessageBuilder = new MessageBuilder(this.config);
213
- const message = loggerMessageBuilder.setResponse(response).makeType("Response").makeMethod().makeUrl().makeRequestData().makeStatus().makeResponseData().build();
225
+ const loggerMesage = loggerMessageBuilder.setResponse(response).makeType("Response").makeMethod().makeUrl().makeRequestData().makeStatus();
226
+ if (this.config.logResponse) {
227
+ loggerMesage.makeResponseData();
228
+ }
229
+ const message = loggerMesage.build();
214
230
  return this.log(message);
215
231
  }
216
232
  logRequestError(error) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/module.ts","../src/service.ts","../src/types.ts","../src/message/builder.ts","../src/module-definition.ts","../src/middleware.ts"],"sourcesContent":["import { Global, MiddlewareConsumer, Module } from '@nestjs/common';\nimport { LoggerService } from './service';\nimport { LoggerMiddleware } from './middleware';\nimport { ConfigurableModuleClass } from './module-definition';\n\n@Global()\n@Module({\n providers: [LoggerService],\n exports: [LoggerService],\n})\nexport class LoggerModule extends ConfigurableModuleClass {\n configure(consumer: MiddlewareConsumer) {\n consumer.apply(LoggerMiddleware).forRoutes('*');\n }\n}\n","import { ConsoleLogger, Inject, Injectable, Scope } from '@nestjs/common';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { type LoggerConfig, LoggerContexts } from './types';\nimport { Request, Response } from 'express';\nimport { MessageBuilder } from './message/builder';\nimport { MODULE_OPTIONS_TOKEN } from './module-definition';\n\n@Injectable({\n scope: Scope.TRANSIENT,\n})\nexport class LoggerService extends ConsoleLogger {\n constructor(@Inject(MODULE_OPTIONS_TOKEN) private config: LoggerConfig = {}) {\n const ctx = config.context || LoggerContexts.SYSTEM;\n\n super(ctx);\n }\n\n log(message: string, context?: string) {\n const ctx = context?.replace(/^_/, '') || this.context || '';\n\n const ctxBlacklist: string[] = [\n LoggerContexts.INSTANCE_LOADER,\n LoggerContexts.ROUTER_EXPLORER,\n LoggerContexts.ROUTES_RESOLVER,\n ];\n\n if (ctxBlacklist.includes(ctx)) {\n return;\n }\n\n const ctxMessageMap: Record<string, string> = {\n [LoggerContexts.NEST_FACTORY]: 'Application is starting...',\n [LoggerContexts.NEST_APPLICATION]: 'Application started.',\n };\n\n const ctxMessage = ctxMessageMap[ctx];\n\n if (ctxMessage) {\n return console.log(`[${LoggerContexts.SYSTEM}] ${ctxMessage}`);\n }\n\n return console.log(`[${ctx}] ${message}`);\n }\n\n logRequest(request: InternalAxiosRequestConfig & Request) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setRequest(request)\n .makeType('Request')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .build();\n\n return this.log(message);\n }\n\n logResponse(response: AxiosResponse & Response) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setResponse(response)\n .makeType('Response')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .makeStatus()\n .makeResponseData()\n .build();\n\n return this.log(message);\n }\n\n logRequestError(error: AxiosError) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setError(error)\n .makeType('Error')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .makeStatus()\n .makeResponseData()\n .build();\n\n return this.log(message);\n }\n}\n","export type LoggerConfig = {\n context?: string;\n serializer?: {\n array?: 'indices' | 'brackets' | 'repeat' | 'comma';\n };\n forbiddenKeys?: string[];\n};\n\nexport enum LoggerContexts {\n SYSTEM = 'System',\n INSTANCE_LOADER = 'InstanceLoader',\n ROUTER_EXPLORER = 'RouterExplorer',\n ROUTES_RESOLVER = 'RoutesResolver',\n NEST_FACTORY = 'NestFactory',\n NEST_APPLICATION = 'NestApplication',\n}\n","import { stringify } from 'qs';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { Response, Request } from 'express';\nimport { LoggerConfig } from '@src/types';\n\nexport class MessageBuilder {\n private printQueue: string[] = [];\n\n private request!: InternalAxiosRequestConfig & Request;\n private response!: AxiosResponse & Response;\n private error!: AxiosError;\n\n constructor(private config: LoggerConfig = {}) {}\n\n setRequest(request: InternalAxiosRequestConfig & Request) {\n this.request = request;\n\n return this;\n }\n\n setResponse(response: AxiosResponse & Response) {\n this.response = response;\n\n return this;\n }\n\n setError(error: AxiosError) {\n this.error = error;\n\n return this;\n }\n\n makeType(type: string) {\n this.printQueue.push(`[${type}]`);\n\n return this;\n }\n\n makeUrl() {\n const url =\n this.request?.originalUrl ||\n this.response?.req?.originalUrl ||\n this.request?.url ||\n this.response?.config?.url ||\n this.error?.response?.config.url;\n\n const params = this.request?.params || this.response?.config?.params || this.error?.response?.config.params;\n\n if (url) {\n if (params) {\n const systemKeys = ['0', 'path'];\n const forbiddenKeys = ['password', ...(this.config.forbiddenKeys || [])];\n\n Object.keys(params).forEach((paramKey) => {\n if (forbiddenKeys.includes(paramKey)) {\n params[paramKey] = '******';\n }\n\n if (systemKeys.includes(paramKey)) {\n delete params[paramKey];\n }\n });\n\n this.printQueue.push(\n [\n url,\n stringify(params, {\n arrayFormat: this.config.serializer?.array || 'brackets',\n skipNulls: true,\n }),\n ]\n .filter((_) => _)\n .join('?'),\n );\n } else {\n this.printQueue.push(url);\n }\n }\n\n return this;\n }\n\n makeMethod() {\n const method =\n this.request?.method ||\n this.response?.req?.method ||\n this.response?.config?.method ||\n this.error?.response?.config.method;\n\n if (method) {\n this.printQueue.push(method.toUpperCase());\n }\n\n return this;\n }\n\n makeRequestData() {\n const data =\n this.request?.body ||\n this.response?.req?.body ||\n this.request?.data ||\n this.response?.config?.data ||\n this.error?.response?.config.data;\n\n if (data) {\n if (typeof data === 'string') {\n this.printQueue.push(data);\n\n return this;\n }\n\n if (Object.keys(data).length) {\n const forbiddenKeys = ['password', ...(this.config.forbiddenKeys || [])];\n\n Object.keys(data).forEach((dataKey) => {\n if (forbiddenKeys.includes(dataKey)) {\n data[dataKey] = '******';\n }\n });\n\n this.printQueue.push(JSON.stringify(data));\n\n return this;\n }\n }\n\n return this;\n }\n\n makeResponseData() {\n const data = this.response?.data || this.error?.response?.data;\n\n if (data) {\n if (typeof data === 'string') {\n this.printQueue.push(data);\n\n return this;\n }\n\n if (Object.keys(data).length) {\n const forbiddenKeys = ['password', ...(this.config.forbiddenKeys || [])];\n\n Object.keys(data).forEach((dataKey) => {\n if (forbiddenKeys.includes(dataKey)) {\n data[dataKey] = '******';\n }\n });\n\n this.printQueue.push(JSON.stringify(data));\n\n return this;\n }\n }\n\n return this;\n }\n\n makeStatus() {\n const status = this.response?.statusCode || this.response?.status || this.error?.response?.status;\n\n if (status) {\n this.printQueue.push(`${status}`);\n\n const statusText = this.response?.statusMessage || this.response?.statusText || this.error?.response?.statusText;\n\n if (statusText) {\n this.printQueue.push(statusText);\n }\n }\n\n return this;\n }\n\n build() {\n return this.printQueue.join(' ');\n }\n}\n","import { ConfigurableModuleBuilder } from '@nestjs/common';\nimport { LoggerConfig } from './types';\n\nexport const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new ConfigurableModuleBuilder<LoggerConfig>().build();\n","import { Injectable, NestMiddleware } from '@nestjs/common';\nimport { Request, Response, NextFunction } from 'express';\nimport { LoggerService } from './service';\n\n@Injectable()\nexport class LoggerMiddleware implements NestMiddleware {\n constructor(private loggerService: LoggerService) {}\n\n use(request: Request, response: Response, next: NextFunction) {\n this.loggerService.logRequest(request as any);\n\n response.on('finish', () => {\n this.loggerService.logResponse(response as any);\n });\n\n return next();\n }\n}\n"],"mappings":"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","names":["Global","Module","ConsoleLogger","Inject","Injectable","Scope","LoggerContexts","stringify","MessageBuilder","printQueue","request","response","error","constructor","config","setRequest","setResponse","setError","makeType","type","push","makeUrl","url","originalUrl","req","params","systemKeys","forbiddenKeys","Object","keys","forEach","paramKey","includes","stringify","arrayFormat","serializer","array","skipNulls","filter","_","join","makeMethod","method","toUpperCase","makeRequestData","data","body","length","dataKey","JSON","makeResponseData","makeStatus","status","statusCode","statusText","statusMessage","build","ConfigurableModuleBuilder","ConfigurableModuleClass","MODULE_OPTIONS_TOKEN","build","LoggerService","ConsoleLogger","constructor","config","ctx","context","LoggerContexts","SYSTEM","log","message","replace","ctxBlacklist","INSTANCE_LOADER","ROUTER_EXPLORER","ROUTES_RESOLVER","includes","ctxMessageMap","NEST_FACTORY","NEST_APPLICATION","ctxMessage","console","logRequest","request","loggerMessageBuilder","MessageBuilder","setRequest","makeType","makeMethod","makeUrl","makeRequestData","build","logResponse","response","setResponse","makeStatus","makeResponseData","logRequestError","error","setError","scope","Scope","TRANSIENT","Injectable","LoggerMiddleware","constructor","loggerService","use","request","response","next","logRequest","on","logResponse","LoggerModule","ConfigurableModuleClass","configure","consumer","apply","LoggerMiddleware","forRoutes","providers","LoggerService","exports"]}
1
+ {"version":3,"sources":["../src/module.ts","../src/service.ts","../src/types.ts","../src/message/builder.ts","../src/module-definition.ts","../src/middleware.ts"],"sourcesContent":["import { Global, MiddlewareConsumer, Module } from '@nestjs/common';\nimport { LoggerService } from './service';\nimport { LoggerMiddleware } from './middleware';\nimport { ConfigurableModuleClass } from './module-definition';\n\n@Global()\n@Module({\n providers: [LoggerService],\n exports: [LoggerService],\n})\nexport class LoggerModule extends ConfigurableModuleClass {\n configure(consumer: MiddlewareConsumer) {\n consumer.apply(LoggerMiddleware).forRoutes('*');\n }\n}\n","import { ConsoleLogger, Inject, Injectable, Scope } from '@nestjs/common';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { type LoggerConfig, LoggerContexts } from './types';\nimport { Request, Response } from 'express';\nimport { MessageBuilder } from './message/builder';\nimport { MODULE_OPTIONS_TOKEN } from './module-definition';\nimport { merge } from 'lodash';\n\n@Injectable({\n scope: Scope.TRANSIENT,\n})\nexport class LoggerService extends ConsoleLogger {\n private config: LoggerConfig;\n\n constructor(@Inject(MODULE_OPTIONS_TOKEN) customConfig: LoggerConfig = {}) {\n const defaultConfig = {\n context: LoggerContexts.SYSTEM,\n forbiddenKeys: ['password'],\n logResponse: true,\n serializer: {\n array: 'brackets',\n },\n };\n\n const config = merge({}, defaultConfig, customConfig);\n\n super(config.context);\n\n this.config = config;\n }\n\n log(message: string, context?: string) {\n const ctx = context?.replace(/^_/, '') || this.context || '';\n\n const ctxBlacklist: string[] = [\n LoggerContexts.INSTANCE_LOADER,\n LoggerContexts.ROUTER_EXPLORER,\n LoggerContexts.ROUTES_RESOLVER,\n ];\n\n if (ctxBlacklist.includes(ctx)) {\n return;\n }\n\n const ctxMessageMap: Record<string, string> = {\n [LoggerContexts.NEST_FACTORY]: 'Application is starting...',\n [LoggerContexts.NEST_APPLICATION]: 'Application started.',\n };\n\n const ctxMessage = ctxMessageMap[ctx];\n\n if (ctxMessage) {\n return console.log(`[${LoggerContexts.SYSTEM}] ${ctxMessage}`);\n }\n\n return console.log(`[${ctx}] ${message}`);\n }\n\n logRequest(request: InternalAxiosRequestConfig & Request) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setRequest(request)\n .makeType('Request')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .build();\n\n return this.log(message);\n }\n\n logResponse(response: AxiosResponse & Response) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const loggerMesage = loggerMessageBuilder\n .setResponse(response)\n .makeType('Response')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .makeStatus();\n\n if (this.config.logResponse) {\n loggerMesage.makeResponseData();\n }\n\n const message = loggerMesage.build();\n\n return this.log(message);\n }\n\n logRequestError(error: AxiosError) {\n const loggerMessageBuilder = new MessageBuilder(this.config);\n\n const message = loggerMessageBuilder\n .setError(error)\n .makeType('Error')\n .makeMethod()\n .makeUrl()\n .makeRequestData()\n .makeStatus()\n .makeResponseData()\n .build();\n\n return this.log(message);\n }\n}\n","export type LoggerConfig = {\n context?: string;\n forbiddenKeys?: string[];\n logResponse?: boolean;\n serializer?: {\n array: 'indices' | 'brackets' | 'repeat' | 'comma';\n };\n};\n\nexport enum LoggerContexts {\n SYSTEM = 'System',\n INSTANCE_LOADER = 'InstanceLoader',\n ROUTER_EXPLORER = 'RouterExplorer',\n ROUTES_RESOLVER = 'RoutesResolver',\n NEST_FACTORY = 'NestFactory',\n NEST_APPLICATION = 'NestApplication',\n}\n","import { stringify } from 'qs';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { Response, Request } from 'express';\nimport { LoggerConfig } from '@src/types';\n\nexport class MessageBuilder {\n private printQueue: string[] = [];\n\n private request!: InternalAxiosRequestConfig & Request;\n private response!: AxiosResponse & Response;\n private error!: AxiosError;\n\n constructor(private config: LoggerConfig = {}) {}\n\n setRequest(request: InternalAxiosRequestConfig & Request) {\n this.request = request;\n\n return this;\n }\n\n setResponse(response: AxiosResponse & Response) {\n this.response = response;\n\n return this;\n }\n\n setError(error: AxiosError) {\n this.error = error;\n\n return this;\n }\n\n makeType(type: string) {\n this.printQueue.push(`[${type}]`);\n\n return this;\n }\n\n makeUrl() {\n const url =\n this.request?.originalUrl ||\n this.response?.req?.originalUrl ||\n this.request?.url ||\n this.response?.config?.url ||\n this.error?.response?.config.url;\n\n const params = this.request?.params || this.response?.config?.params || this.error?.response?.config.params;\n\n if (url) {\n if (params) {\n const formattedParams = { ...params };\n const systemKeys = ['0', 'path'];\n const forbiddenKeys = this.config.forbiddenKeys || [];\n\n Object.keys(formattedParams).forEach((paramKey) => {\n if (forbiddenKeys.includes(paramKey)) {\n formattedParams[paramKey] = '******';\n }\n\n if (systemKeys.includes(paramKey)) {\n delete formattedParams[paramKey];\n }\n });\n\n this.printQueue.push(\n [\n url,\n stringify(formattedParams, {\n arrayFormat: this.config.serializer?.array,\n skipNulls: true,\n }),\n ]\n .filter((_) => _)\n .join('?'),\n );\n } else {\n this.printQueue.push(url);\n }\n }\n\n return this;\n }\n\n makeMethod() {\n const method =\n this.request?.method ||\n this.response?.req?.method ||\n this.response?.config?.method ||\n this.error?.response?.config.method;\n\n if (method) {\n this.printQueue.push(method.toUpperCase());\n }\n\n return this;\n }\n\n makeRequestData() {\n const data =\n this.request?.body ||\n this.response?.req?.body ||\n this.request?.data ||\n this.response?.config?.data ||\n this.error?.response?.config.data;\n\n if (data) {\n if (typeof data === 'string') {\n this.printQueue.push(data);\n\n return this;\n }\n\n if (Object.keys(data).length) {\n const formattedData = { ...data };\n const forbiddenKeys = this.config.forbiddenKeys || [];\n\n Object.keys(formattedData).forEach((dataKey) => {\n if (forbiddenKeys.includes(dataKey)) {\n formattedData[dataKey] = '******';\n }\n });\n\n this.printQueue.push(JSON.stringify(formattedData));\n\n return this;\n }\n }\n\n return this;\n }\n\n makeResponseData() {\n const data = this.response?.data || this.error?.response?.data;\n\n if (data) {\n if (typeof data === 'string') {\n this.printQueue.push(data);\n\n return this;\n }\n\n if (Object.keys(data).length) {\n const formattedData = { ...data };\n const forbiddenKeys = this.config.forbiddenKeys || [];\n\n Object.keys(formattedData).forEach((dataKey) => {\n if (forbiddenKeys.includes(dataKey)) {\n formattedData[dataKey] = '******';\n }\n });\n\n this.printQueue.push(JSON.stringify(formattedData));\n\n return this;\n }\n }\n\n return this;\n }\n\n makeStatus() {\n const status = this.response?.statusCode || this.response?.status || this.error?.response?.status;\n\n if (status) {\n this.printQueue.push(`${status}`);\n\n const statusText = this.response?.statusMessage || this.response?.statusText || this.error?.response?.statusText;\n\n if (statusText) {\n this.printQueue.push(statusText);\n }\n }\n\n return this;\n }\n\n build() {\n return this.printQueue.join(' ');\n }\n}\n","import { ConfigurableModuleBuilder } from '@nestjs/common';\nimport { LoggerConfig } from './types';\n\nexport const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new ConfigurableModuleBuilder<LoggerConfig>().build();\n","import { Injectable, NestMiddleware } from '@nestjs/common';\nimport { Request, Response, NextFunction } from 'express';\nimport { LoggerService } from './service';\n\n@Injectable()\nexport class LoggerMiddleware implements NestMiddleware {\n constructor(private loggerService: LoggerService) {}\n\n use(request: Request, response: Response, next: NextFunction) {\n this.loggerService.logRequest(request as any);\n\n response.on('finish', () => {\n this.loggerService.logResponse(response as any);\n });\n\n return next();\n }\n}\n"],"mappings":"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","names":["Global","Module","ConsoleLogger","Inject","Injectable","Scope","LoggerContexts","stringify","MessageBuilder","printQueue","request","response","error","constructor","config","setRequest","setResponse","setError","makeType","type","push","makeUrl","url","originalUrl","req","params","formattedParams","systemKeys","forbiddenKeys","Object","keys","forEach","paramKey","includes","stringify","arrayFormat","serializer","array","skipNulls","filter","_","join","makeMethod","method","toUpperCase","makeRequestData","data","body","length","formattedData","dataKey","JSON","makeResponseData","makeStatus","status","statusCode","statusText","statusMessage","build","ConfigurableModuleBuilder","ConfigurableModuleClass","MODULE_OPTIONS_TOKEN","build","merge","LoggerService","ConsoleLogger","config","constructor","customConfig","defaultConfig","context","LoggerContexts","SYSTEM","forbiddenKeys","logResponse","serializer","array","merge","log","message","ctx","replace","ctxBlacklist","INSTANCE_LOADER","ROUTER_EXPLORER","ROUTES_RESOLVER","includes","ctxMessageMap","NEST_FACTORY","NEST_APPLICATION","ctxMessage","console","logRequest","request","loggerMessageBuilder","MessageBuilder","setRequest","makeType","makeMethod","makeUrl","makeRequestData","build","response","loggerMesage","setResponse","makeStatus","makeResponseData","logRequestError","error","setError","scope","Scope","TRANSIENT","Injectable","LoggerMiddleware","constructor","loggerService","use","request","response","next","logRequest","on","logResponse","LoggerModule","ConfigurableModuleClass","configure","consumer","apply","LoggerMiddleware","forRoutes","providers","LoggerService","exports"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iamnnort/nestjs-logger",
3
- "version": "1.4.0",
3
+ "version": "1.4.2",
4
4
  "description": "Logger module for NestJS - Simple - Informative - Pretty",
5
5
  "keywords": [
6
6
  "logger"
@@ -35,6 +35,7 @@
35
35
  "dependencies": {
36
36
  "@nestjs/common": "^11.0.12",
37
37
  "axios": "^1.8.4",
38
+ "lodash": "^4.17.21",
38
39
  "qs": "^6.14.0"
39
40
  },
40
41
  "devDependencies": {
@@ -43,6 +44,7 @@
43
44
  "@swc/core": "^1.11.16",
44
45
  "@tsconfig/node20": "^20.1.5",
45
46
  "@types/express": "^5.0.1",
47
+ "@types/lodash": "^4.17.16",
46
48
  "@types/node": "^22.13.17",
47
49
  "@typescript-eslint/parser": "^8.29.0",
48
50
  "eslint": "^9.23.0",