@iamnnort/nestjs-logger 1.4.1 → 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
@@ -61,10 +61,7 @@ var MessageBuilder = class {
61
61
  "0",
62
62
  "path"
63
63
  ];
64
- const forbiddenKeys = [
65
- "password",
66
- ...this.config.forbiddenKeys || []
67
- ];
64
+ const forbiddenKeys = this.config.forbiddenKeys || [];
68
65
  Object.keys(formattedParams).forEach((paramKey) => {
69
66
  if (forbiddenKeys.includes(paramKey)) {
70
67
  formattedParams[paramKey] = "******";
@@ -76,7 +73,7 @@ var MessageBuilder = class {
76
73
  this.printQueue.push([
77
74
  url,
78
75
  _qs.stringify.call(void 0, formattedParams, {
79
- arrayFormat: _optionalChain([this, 'access', _25 => _25.config, 'access', _26 => _26.serializer, 'optionalAccess', _27 => _27.array]) || "brackets",
76
+ arrayFormat: _optionalChain([this, 'access', _25 => _25.config, 'access', _26 => _26.serializer, 'optionalAccess', _27 => _27.array]),
80
77
  skipNulls: true
81
78
  })
82
79
  ].filter((_) => _).join("?"));
@@ -104,10 +101,7 @@ var MessageBuilder = class {
104
101
  const formattedData = {
105
102
  ...data
106
103
  };
107
- const forbiddenKeys = [
108
- "password",
109
- ...this.config.forbiddenKeys || []
110
- ];
104
+ const forbiddenKeys = this.config.forbiddenKeys || [];
111
105
  Object.keys(formattedData).forEach((dataKey) => {
112
106
  if (forbiddenKeys.includes(dataKey)) {
113
107
  formattedData[dataKey] = "******";
@@ -130,10 +124,7 @@ var MessageBuilder = class {
130
124
  const formattedData = {
131
125
  ...data
132
126
  };
133
- const forbiddenKeys = [
134
- "password",
135
- ...this.config.forbiddenKeys || []
136
- ];
127
+ const forbiddenKeys = this.config.forbiddenKeys || [];
137
128
  Object.keys(formattedData).forEach((dataKey) => {
138
129
  if (forbiddenKeys.includes(dataKey)) {
139
130
  formattedData[dataKey] = "******";
@@ -166,6 +157,7 @@ var MessageBuilder = class {
166
157
  var { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new (0, _common.ConfigurableModuleBuilder)().build();
167
158
 
168
159
  // src/service.ts
160
+ var _lodash = require('lodash');
169
161
  function _ts_decorate(decorators, target, key, desc) {
170
162
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
171
163
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -188,9 +180,20 @@ var LoggerService = class extends _common.ConsoleLogger {
188
180
  __name(this, "LoggerService");
189
181
  }
190
182
 
191
- constructor(config = {}) {
192
- const ctx = config.context || LoggerContexts.SYSTEM;
193
- 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;
194
197
  }
195
198
  log(message, context) {
196
199
  const ctx = _optionalChain([context, 'optionalAccess', _73 => _73.replace, 'call', _74 => _74(/^_/, "")]) || this.context || "";
@@ -219,7 +222,11 @@ var LoggerService = class extends _common.ConsoleLogger {
219
222
  }
220
223
  logResponse(response) {
221
224
  const loggerMessageBuilder = new MessageBuilder(this.config);
222
- 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();
223
230
  return this.log(message);
224
231
  }
225
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","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","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 formattedParams = { ...params };\n const systemKeys = ['0', 'path'];\n const forbiddenKeys = ['password', ...(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 || '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 formattedData = { ...data };\n const forbiddenKeys = ['password', ...(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 = ['password', ...(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"]}
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
@@ -61,10 +61,7 @@ var MessageBuilder = class {
61
61
  "0",
62
62
  "path"
63
63
  ];
64
- const forbiddenKeys = [
65
- "password",
66
- ...this.config.forbiddenKeys || []
67
- ];
64
+ const forbiddenKeys = this.config.forbiddenKeys || [];
68
65
  Object.keys(formattedParams).forEach((paramKey) => {
69
66
  if (forbiddenKeys.includes(paramKey)) {
70
67
  formattedParams[paramKey] = "******";
@@ -76,7 +73,7 @@ var MessageBuilder = class {
76
73
  this.printQueue.push([
77
74
  url,
78
75
  stringify(formattedParams, {
79
- arrayFormat: this.config.serializer?.array || "brackets",
76
+ arrayFormat: this.config.serializer?.array,
80
77
  skipNulls: true
81
78
  })
82
79
  ].filter((_) => _).join("?"));
@@ -104,10 +101,7 @@ var MessageBuilder = class {
104
101
  const formattedData = {
105
102
  ...data
106
103
  };
107
- const forbiddenKeys = [
108
- "password",
109
- ...this.config.forbiddenKeys || []
110
- ];
104
+ const forbiddenKeys = this.config.forbiddenKeys || [];
111
105
  Object.keys(formattedData).forEach((dataKey) => {
112
106
  if (forbiddenKeys.includes(dataKey)) {
113
107
  formattedData[dataKey] = "******";
@@ -130,10 +124,7 @@ var MessageBuilder = class {
130
124
  const formattedData = {
131
125
  ...data
132
126
  };
133
- const forbiddenKeys = [
134
- "password",
135
- ...this.config.forbiddenKeys || []
136
- ];
127
+ const forbiddenKeys = this.config.forbiddenKeys || [];
137
128
  Object.keys(formattedData).forEach((dataKey) => {
138
129
  if (forbiddenKeys.includes(dataKey)) {
139
130
  formattedData[dataKey] = "******";
@@ -166,6 +157,7 @@ import { ConfigurableModuleBuilder } from "@nestjs/common";
166
157
  var { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new ConfigurableModuleBuilder().build();
167
158
 
168
159
  // src/service.ts
160
+ import { merge } from "lodash";
169
161
  function _ts_decorate(decorators, target, key, desc) {
170
162
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
171
163
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -188,9 +180,20 @@ var LoggerService = class extends ConsoleLogger {
188
180
  __name(this, "LoggerService");
189
181
  }
190
182
  config;
191
- constructor(config = {}) {
192
- const ctx = config.context || LoggerContexts.SYSTEM;
193
- 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;
194
197
  }
195
198
  log(message, context) {
196
199
  const ctx = context?.replace(/^_/, "") || this.context || "";
@@ -219,7 +222,11 @@ var LoggerService = class extends ConsoleLogger {
219
222
  }
220
223
  logResponse(response) {
221
224
  const loggerMessageBuilder = new MessageBuilder(this.config);
222
- 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();
223
230
  return this.log(message);
224
231
  }
225
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 formattedParams = { ...params };\n const systemKeys = ['0', 'path'];\n const forbiddenKeys = ['password', ...(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 || '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 formattedData = { ...data };\n const forbiddenKeys = ['password', ...(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 = ['password', ...(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","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.1",
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",