@iamnnort/nestjs-logger 1.3.2 → 1.4.0

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
@@ -8,6 +8,7 @@ type LoggerConfig = {
8
8
  serializer?: {
9
9
  array?: 'indices' | 'brackets' | 'repeat' | 'comma';
10
10
  };
11
+ forbiddenKeys?: string[];
11
12
  };
12
13
  declare enum LoggerContexts {
13
14
  SYSTEM = "System",
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@ type LoggerConfig = {
8
8
  serializer?: {
9
9
  array?: 'indices' | 'brackets' | 'repeat' | 'comma';
10
10
  };
11
+ forbiddenKeys?: string[];
11
12
  };
12
13
  declare enum LoggerContexts {
13
14
  SYSTEM = "System",
package/dist/index.js CHANGED
@@ -54,7 +54,22 @@ 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
- delete params["0"];
57
+ const systemKeys = [
58
+ "0",
59
+ "path"
60
+ ];
61
+ const forbiddenKeys = [
62
+ "password",
63
+ ...this.config.forbiddenKeys || []
64
+ ];
65
+ Object.keys(params).forEach((paramKey) => {
66
+ if (forbiddenKeys.includes(paramKey)) {
67
+ params[paramKey] = "******";
68
+ }
69
+ if (systemKeys.includes(paramKey)) {
70
+ delete params[paramKey];
71
+ }
72
+ });
58
73
  this.printQueue.push([
59
74
  url,
60
75
  _qs.stringify.call(void 0, params, {
@@ -83,6 +98,15 @@ var MessageBuilder = class {
83
98
  return this;
84
99
  }
85
100
  if (Object.keys(data).length) {
101
+ const forbiddenKeys = [
102
+ "password",
103
+ ...this.config.forbiddenKeys || []
104
+ ];
105
+ Object.keys(data).forEach((dataKey) => {
106
+ if (forbiddenKeys.includes(dataKey)) {
107
+ data[dataKey] = "******";
108
+ }
109
+ });
86
110
  this.printQueue.push(JSON.stringify(data));
87
111
  return this;
88
112
  }
@@ -97,6 +121,15 @@ var MessageBuilder = class {
97
121
  return this;
98
122
  }
99
123
  if (Object.keys(data).length) {
124
+ const forbiddenKeys = [
125
+ "password",
126
+ ...this.config.forbiddenKeys || []
127
+ ];
128
+ Object.keys(data).forEach((dataKey) => {
129
+ if (forbiddenKeys.includes(dataKey)) {
130
+ data[dataKey] = "******";
131
+ }
132
+ });
100
133
  this.printQueue.push(JSON.stringify(data));
101
134
  return this;
102
135
  }
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","stringify","arrayFormat","serializer","array","skipNulls","filter","_","join","makeMethod","method","toUpperCase","makeRequestData","data","body","Object","keys","length","JSON","makeResponseData","makeStatus","status","statusCode","ConfigurableModuleBuilder","ConfigurableModuleClass","ConsoleLogger","context","replace","INSTANCE_LOADER","ROUTER_EXPLORER","ROUTES_RESOLVER","includes","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};\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 delete params['0'];\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 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 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","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"]}
package/dist/index.mjs CHANGED
@@ -54,7 +54,22 @@ 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
- delete params["0"];
57
+ const systemKeys = [
58
+ "0",
59
+ "path"
60
+ ];
61
+ const forbiddenKeys = [
62
+ "password",
63
+ ...this.config.forbiddenKeys || []
64
+ ];
65
+ Object.keys(params).forEach((paramKey) => {
66
+ if (forbiddenKeys.includes(paramKey)) {
67
+ params[paramKey] = "******";
68
+ }
69
+ if (systemKeys.includes(paramKey)) {
70
+ delete params[paramKey];
71
+ }
72
+ });
58
73
  this.printQueue.push([
59
74
  url,
60
75
  stringify(params, {
@@ -83,6 +98,15 @@ var MessageBuilder = class {
83
98
  return this;
84
99
  }
85
100
  if (Object.keys(data).length) {
101
+ const forbiddenKeys = [
102
+ "password",
103
+ ...this.config.forbiddenKeys || []
104
+ ];
105
+ Object.keys(data).forEach((dataKey) => {
106
+ if (forbiddenKeys.includes(dataKey)) {
107
+ data[dataKey] = "******";
108
+ }
109
+ });
86
110
  this.printQueue.push(JSON.stringify(data));
87
111
  return this;
88
112
  }
@@ -97,6 +121,15 @@ var MessageBuilder = class {
97
121
  return this;
98
122
  }
99
123
  if (Object.keys(data).length) {
124
+ const forbiddenKeys = [
125
+ "password",
126
+ ...this.config.forbiddenKeys || []
127
+ ];
128
+ Object.keys(data).forEach((dataKey) => {
129
+ if (forbiddenKeys.includes(dataKey)) {
130
+ data[dataKey] = "******";
131
+ }
132
+ });
100
133
  this.printQueue.push(JSON.stringify(data));
101
134
  return this;
102
135
  }
@@ -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};\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 delete params['0'];\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 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 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","stringify","arrayFormat","serializer","array","skipNulls","filter","_","join","makeMethod","method","toUpperCase","makeRequestData","data","body","Object","keys","length","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';\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iamnnort/nestjs-logger",
3
- "version": "1.3.2",
3
+ "version": "1.4.0",
4
4
  "description": "Logger module for NestJS - Simple - Informative - Pretty",
5
5
  "keywords": [
6
6
  "logger"
@@ -12,7 +12,7 @@
12
12
  "dist"
13
13
  ],
14
14
  "engines": {
15
- "node": ">=18.0.0"
15
+ "node": ">=20.0.0"
16
16
  },
17
17
  "scripts": {
18
18
  "start": "ts-node ./example",
@@ -33,28 +33,28 @@
33
33
  },
34
34
  "homepage": "https://github.com/iamnnort/nestjs-logger#readme",
35
35
  "dependencies": {
36
- "@nestjs/common": "^10.4.4",
37
- "axios": "^1.7.7",
38
- "qs": "^6.13.0"
36
+ "@nestjs/common": "^11.0.12",
37
+ "axios": "^1.8.4",
38
+ "qs": "^6.14.0"
39
39
  },
40
40
  "devDependencies": {
41
- "@nestjs/core": "^10.4.4",
42
- "@nestjs/platform-express": "^10.4.4",
43
- "@swc/core": "^1.7.35",
44
- "@tsconfig/node18": "^18.2.4",
45
- "@types/express": "^5.0.0",
46
- "@types/node": "^22.7.5",
47
- "@typescript-eslint/parser": "^8.8.1",
48
- "eslint": "^9.12.0",
49
- "eslint-config-prettier": "^9.1.0",
50
- "husky": "^9.1.6",
51
- "lint-staged": "^15.2.10",
52
- "prettier": "^3.3.3",
41
+ "@nestjs/core": "^11.0.12",
42
+ "@nestjs/platform-express": "^11.0.12",
43
+ "@swc/core": "^1.11.16",
44
+ "@tsconfig/node20": "^20.1.5",
45
+ "@types/express": "^5.0.1",
46
+ "@types/node": "^22.13.17",
47
+ "@typescript-eslint/parser": "^8.29.0",
48
+ "eslint": "^9.23.0",
49
+ "eslint-config-prettier": "^10.1.1",
50
+ "husky": "^9.1.7",
51
+ "lint-staged": "^15.5.0",
52
+ "prettier": "^3.5.3",
53
53
  "reflect-metadata": "^0.2.2",
54
- "rxjs": "^7.8.1",
54
+ "rxjs": "^7.8.2",
55
55
  "ts-node": "^10.9.2",
56
- "tsup": "^8.3.0",
57
- "typescript": "5.5.4",
58
- "typescript-eslint": "^8.8.1"
56
+ "tsup": "^8.4.0",
57
+ "typescript": "^5.8.2",
58
+ "typescript-eslint": "^8.29.0"
59
59
  }
60
60
  }