@iamnnort/nestjs-logger 1.1.2 → 1.1.4

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/README.md CHANGED
@@ -11,7 +11,25 @@ yarn install @iamnnort/nestjs-logger
11
11
  ## Usage
12
12
 
13
13
  ```javascript
14
- import { q } from "@iamnnort/request";
14
+ import { NestFactory } from '@nestjs/core';
15
+ import { NestExpressApplication } from '@nestjs/platform-express';
16
+ import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
17
+ import { LoggerModule, LoggerService } from '@iamnnort/nestjs-logger';
18
+
19
+ @Module({
20
+ imports: [
21
+ LoggerModule,
22
+ ],
23
+ })
24
+ class AppModule implements NestModule {
25
+ configure(consumer: MiddlewareConsumer) {
26
+ consumer.apply(LoggerMiddleware).forRoutes('*');
27
+ }
28
+ }
29
+
30
+ const app = await NestFactory.create<NestExpressApplication>(AppModule);
31
+
32
+ app.useLogger(new LoggerService());
15
33
  ```
16
34
 
17
35
  ## License
package/dist/index.d.mts CHANGED
@@ -1,4 +1,22 @@
1
- declare class LoggerModule {
1
+ import { ConsoleLogger, NestMiddleware, NestModule, MiddlewareConsumer } from '@nestjs/common';
2
+ import { Request, Response, NextFunction } from 'express';
3
+ import { InternalAxiosRequestConfig, AxiosResponse, AxiosError } from 'axios';
4
+
5
+ declare class LoggerService extends ConsoleLogger {
6
+ log(message: string, context?: string): void;
7
+ logRequest(request: InternalAxiosRequestConfig & Request): void;
8
+ logResponse(response: AxiosResponse & Response): void;
9
+ logRequestError(error: AxiosError): void;
10
+ }
11
+
12
+ declare class LoggerMiddleware implements NestMiddleware {
13
+ private loggerService;
14
+ constructor(loggerService: LoggerService);
15
+ use(request: Request, response: Response, next: NextFunction): void;
16
+ }
17
+
18
+ declare class LoggerModule implements NestModule {
19
+ configure(consumer: MiddlewareConsumer): void;
2
20
  }
3
21
 
4
- export { LoggerModule };
22
+ export { LoggerMiddleware, LoggerModule, LoggerService };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,22 @@
1
- declare class LoggerModule {
1
+ import { ConsoleLogger, NestMiddleware, NestModule, MiddlewareConsumer } from '@nestjs/common';
2
+ import { Request, Response, NextFunction } from 'express';
3
+ import { InternalAxiosRequestConfig, AxiosResponse, AxiosError } from 'axios';
4
+
5
+ declare class LoggerService extends ConsoleLogger {
6
+ log(message: string, context?: string): void;
7
+ logRequest(request: InternalAxiosRequestConfig & Request): void;
8
+ logResponse(response: AxiosResponse & Response): void;
9
+ logRequestError(error: AxiosError): void;
10
+ }
11
+
12
+ declare class LoggerMiddleware implements NestMiddleware {
13
+ private loggerService;
14
+ constructor(loggerService: LoggerService);
15
+ use(request: Request, response: Response, next: NextFunction): void;
16
+ }
17
+
18
+ declare class LoggerModule implements NestModule {
19
+ configure(consumer: MiddlewareConsumer): void;
2
20
  }
3
21
 
4
- export { LoggerModule };
22
+ export { LoggerMiddleware, LoggerModule, LoggerService };
package/dist/index.js CHANGED
@@ -29,15 +29,36 @@ var __decorateClass = (decorators, target, key, kind) => {
29
29
  // src/index.ts
30
30
  var src_exports = {};
31
31
  __export(src_exports, {
32
- LoggerModule: () => LoggerModule
32
+ LoggerMiddleware: () => LoggerMiddleware,
33
+ LoggerModule: () => LoggerModule,
34
+ LoggerService: () => LoggerService
33
35
  });
34
36
  module.exports = __toCommonJS(src_exports);
35
37
 
38
+ // src/middleware.ts
39
+ var import_common = require("@nestjs/common");
40
+ var LoggerMiddleware = class {
41
+ constructor(loggerService) {
42
+ this.loggerService = loggerService;
43
+ this.loggerService.setContext("System" /* SYSTEM */);
44
+ }
45
+ use(request, response, next) {
46
+ this.loggerService.logRequest(request);
47
+ response.on("finish", () => {
48
+ this.loggerService.logResponse(response);
49
+ });
50
+ return next();
51
+ }
52
+ };
53
+ LoggerMiddleware = __decorateClass([
54
+ (0, import_common.Injectable)()
55
+ ], LoggerMiddleware);
56
+
36
57
  // src/module.ts
37
- var import_common2 = require("@nestjs/common");
58
+ var import_common3 = require("@nestjs/common");
38
59
 
39
60
  // src/service.ts
40
- var import_common = require("@nestjs/common");
61
+ var import_common2 = require("@nestjs/common");
41
62
 
42
63
  // src/message/builder.ts
43
64
  var import_qs = require("qs");
@@ -126,7 +147,7 @@ var MessageBuilder = class {
126
147
  };
127
148
 
128
149
  // src/service.ts
129
- var LoggerService = class extends import_common.ConsoleLogger {
150
+ var LoggerService = class extends import_common2.ConsoleLogger {
130
151
  log(message, context) {
131
152
  const ctx = context || this.context || "";
132
153
  const ctxBlacklist = [
@@ -164,21 +185,26 @@ var LoggerService = class extends import_common.ConsoleLogger {
164
185
  }
165
186
  };
166
187
  LoggerService = __decorateClass([
167
- (0, import_common.Injectable)({ scope: import_common.Scope.TRANSIENT })
188
+ (0, import_common2.Injectable)({ scope: import_common2.Scope.TRANSIENT })
168
189
  ], LoggerService);
169
190
 
170
191
  // src/module.ts
171
192
  var LoggerModule = class {
193
+ configure(consumer) {
194
+ consumer.apply(LoggerMiddleware).forRoutes("*");
195
+ }
172
196
  };
173
197
  LoggerModule = __decorateClass([
174
- (0, import_common2.Global)(),
175
- (0, import_common2.Module)({
198
+ (0, import_common3.Global)(),
199
+ (0, import_common3.Module)({
176
200
  providers: [LoggerService],
177
201
  exports: [LoggerService]
178
202
  })
179
203
  ], LoggerModule);
180
204
  // Annotate the CommonJS export names for ESM import in node:
181
205
  0 && (module.exports = {
182
- LoggerModule
206
+ LoggerMiddleware,
207
+ LoggerModule,
208
+ LoggerService
183
209
  });
184
210
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/module.ts","../src/service.ts","../src/message/builder.ts"],"sourcesContent":["export * from './module';\n","import { Global, Module } from '@nestjs/common';\nimport { LoggerService } from './service';\n\n@Global()\n@Module({\n providers: [LoggerService],\n exports: [LoggerService],\n})\nexport class LoggerModule {}\n","import { ConsoleLogger, Injectable, Scope } from '@nestjs/common';\nimport { LoggerContexts } from './types';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { Request, Response } from 'express';\nimport { MessageBuilder } from './message/builder';\n\n@Injectable({ scope: Scope.TRANSIENT })\nexport class LoggerService extends ConsoleLogger {\n log(message: string, context?: string) {\n const ctx = context || 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();\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();\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();\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","import { stringify } from 'qs';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { Response, Request } from 'express';\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() {\n this.printQueue = [];\n }\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([url, stringify(params)].filter((_) => _).join('?'));\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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,iBAA+B;;;ACA/B,oBAAiD;;;ACAjD,gBAA0B;AAInB,IAAM,iBAAN,MAAqB;AAAA,EAO1B,cAAc;AACZ,SAAK,aAAa,CAAC;AAAA,EACrB;AAAA,EAEA,WAAW,SAA+C;AACxD,SAAK,UAAU;AAEf,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,UAAoC;AAC9C,SAAK,WAAW;AAEhB,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,OAAmB;AAC1B,SAAK,QAAQ;AAEb,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,MAAc;AACrB,SAAK,WAAW,KAAK,IAAI,IAAI,GAAG;AAEhC,WAAO;AAAA,EACT;AAAA,EAEA,UAAU;AACR,UAAM,MACJ,KAAK,SAAS,eACd,KAAK,UAAU,KAAK,eACpB,KAAK,SAAS,OACd,KAAK,UAAU,QAAQ,OACvB,KAAK,OAAO,UAAU,OAAO;AAE/B,UAAM,SAAS,KAAK,SAAS,UAAU,KAAK,UAAU,QAAQ,UAAU,KAAK,OAAO,UAAU,OAAO;AAErG,QAAI,KAAK;AACP,UAAI,QAAQ;AACV,eAAO,OAAO,GAAG;AACjB,aAAK,WAAW,KAAK,CAAC,SAAK,qBAAU,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC;AAAA,MAC1E,OAAO;AACL,aAAK,WAAW,KAAK,GAAG;AAAA,MAC1B;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,aAAa;AACX,UAAM,SACJ,KAAK,SAAS,UACd,KAAK,UAAU,KAAK,UACpB,KAAK,UAAU,QAAQ,UACvB,KAAK,OAAO,UAAU,OAAO;AAE/B,QAAI,QAAQ;AACV,WAAK,WAAW,KAAK,OAAO,YAAY,CAAC;AAAA,IAC3C;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,kBAAkB;AAChB,UAAM,OACJ,KAAK,SAAS,QACd,KAAK,UAAU,KAAK,QACpB,KAAK,SAAS,QACd,KAAK,UAAU,QAAQ,QACvB,KAAK,OAAO,UAAU,OAAO;AAE/B,QAAI,MAAM;AACR,UAAI,OAAO,SAAS,UAAU;AAC5B,aAAK,WAAW,KAAK,IAAI;AAEzB,eAAO;AAAA,MACT;AAEA,UAAI,OAAO,KAAK,IAAI,EAAE,QAAQ;AAC5B,aAAK,WAAW,KAAK,KAAK,UAAU,IAAI,CAAC;AAEzC,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,mBAAmB;AACjB,UAAM,OAAO,KAAK,UAAU,QAAQ,KAAK,OAAO,UAAU;AAE1D,QAAI,MAAM;AACR,UAAI,OAAO,SAAS,UAAU;AAC5B,aAAK,WAAW,KAAK,IAAI;AAEzB,eAAO;AAAA,MACT;AAEA,UAAI,OAAO,KAAK,IAAI,EAAE,QAAQ;AAC5B,aAAK,WAAW,KAAK,KAAK,UAAU,IAAI,CAAC;AAEzC,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,aAAa;AACX,UAAM,SAAS,KAAK,UAAU,cAAc,KAAK,UAAU,UAAU,KAAK,OAAO,UAAU;AAE3F,QAAI,QAAQ;AACV,WAAK,WAAW,KAAK,GAAG,MAAM,EAAE;AAEhC,YAAM,aAAa,KAAK,UAAU,iBAAiB,KAAK,UAAU,cAAc,KAAK,OAAO,UAAU;AAEtG,UAAI,YAAY;AACd,aAAK,WAAW,KAAK,UAAU;AAAA,MACjC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ;AACN,WAAO,KAAK,WAAW,KAAK,GAAG;AAAA,EACjC;AACF;;;ADpIO,IAAM,gBAAN,cAA4B,4BAAc;AAAA,EAC/C,IAAI,SAAiB,SAAkB;AACrC,UAAM,MAAM,WAAW,KAAK,WAAW;AAEvC,UAAM,eAAyB;AAAA;AAAA;AAAA;AAAA,IAI/B;AAEA,QAAI,aAAa,SAAS,GAAG,GAAG;AAC9B;AAAA,IACF;AAEA,UAAM,gBAAwC;AAAA,MAC5C,iCAA4B,GAAG;AAAA,MAC/B,yCAAgC,GAAG;AAAA,IACrC;AAEA,UAAM,aAAa,cAAc,GAAG;AAEpC,QAAI,YAAY;AACd,aAAO,QAAQ,IAAI,yBAAyB,KAAK,UAAU,EAAE;AAAA,IAC/D;AAEA,WAAO,QAAQ,IAAI,IAAI,GAAG,KAAK,OAAO,EAAE;AAAA,EAC1C;AAAA,EAEA,WAAW,SAA+C;AACxD,UAAM,uBAAuB,IAAI,eAAe;AAEhD,UAAM,UAAU,qBACb,WAAW,OAAO,EAClB,SAAS,SAAS,EAClB,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,MAAM;AAET,WAAO,KAAK,IAAI,OAAO;AAAA,EACzB;AAAA,EAEA,YAAY,UAAoC;AAC9C,UAAM,uBAAuB,IAAI,eAAe;AAEhD,UAAM,UAAU,qBACb,YAAY,QAAQ,EACpB,SAAS,UAAU,EACnB,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,MAAM;AAET,WAAO,KAAK,IAAI,OAAO;AAAA,EACzB;AAAA,EAEA,gBAAgB,OAAmB;AACjC,UAAM,uBAAuB,IAAI,eAAe;AAEhD,UAAM,UAAU,qBACb,SAAS,KAAK,EACd,SAAS,OAAO,EAChB,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,MAAM;AAET,WAAO,KAAK,IAAI,OAAO;AAAA,EACzB;AACF;AAzEa,gBAAN;AAAA,MADN,0BAAW,EAAE,OAAO,oBAAM,UAAU,CAAC;AAAA,GACzB;;;ADCN,IAAM,eAAN,MAAmB;AAAC;AAAd,eAAN;AAAA,MALN,uBAAO;AAAA,MACP,uBAAO;AAAA,IACN,WAAW,CAAC,aAAa;AAAA,IACzB,SAAS,CAAC,aAAa;AAAA,EACzB,CAAC;AAAA,GACY;","names":["import_common"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/middleware.ts","../src/module.ts","../src/service.ts","../src/message/builder.ts"],"sourcesContent":["export * from './middleware';\nexport * from './module';\nexport * from './service';\n","import { Injectable, NestMiddleware } from '@nestjs/common';\nimport { Request, Response, NextFunction } from 'express';\nimport { LoggerContexts } from './types';\nimport { LoggerService } from './service';\n\n@Injectable()\nexport class LoggerMiddleware implements NestMiddleware {\n constructor(private loggerService: LoggerService) {\n this.loggerService.setContext(LoggerContexts.SYSTEM);\n }\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","import { Global, MiddlewareConsumer, Module, NestModule } from '@nestjs/common';\nimport { LoggerService } from './service';\nimport { LoggerMiddleware } from '.';\n\n@Global()\n@Module({\n providers: [LoggerService],\n exports: [LoggerService],\n})\nexport class LoggerModule implements NestModule {\n configure(consumer: MiddlewareConsumer) {\n consumer.apply(LoggerMiddleware).forRoutes('*');\n }\n}\n","import { ConsoleLogger, Injectable, Scope } from '@nestjs/common';\nimport { LoggerContexts } from './types';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { Request, Response } from 'express';\nimport { MessageBuilder } from './message/builder';\n\n@Injectable({ scope: Scope.TRANSIENT })\nexport class LoggerService extends ConsoleLogger {\n log(message: string, context?: string) {\n const ctx = context || 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();\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();\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();\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","import { stringify } from 'qs';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { Response, Request } from 'express';\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() {\n this.printQueue = [];\n }\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([url, stringify(params)].filter((_) => _).join('?'));\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"],"mappings":"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","names":["import_common","import_common"]}
package/dist/index.mjs CHANGED
@@ -10,11 +10,30 @@ var __decorateClass = (decorators, target, key, kind) => {
10
10
  return result;
11
11
  };
12
12
 
13
+ // src/middleware.ts
14
+ import { Injectable } from "@nestjs/common";
15
+ var LoggerMiddleware = class {
16
+ constructor(loggerService) {
17
+ this.loggerService = loggerService;
18
+ this.loggerService.setContext("System" /* SYSTEM */);
19
+ }
20
+ use(request, response, next) {
21
+ this.loggerService.logRequest(request);
22
+ response.on("finish", () => {
23
+ this.loggerService.logResponse(response);
24
+ });
25
+ return next();
26
+ }
27
+ };
28
+ LoggerMiddleware = __decorateClass([
29
+ Injectable()
30
+ ], LoggerMiddleware);
31
+
13
32
  // src/module.ts
14
33
  import { Global, Module } from "@nestjs/common";
15
34
 
16
35
  // src/service.ts
17
- import { ConsoleLogger, Injectable, Scope } from "@nestjs/common";
36
+ import { ConsoleLogger, Injectable as Injectable2, Scope } from "@nestjs/common";
18
37
 
19
38
  // src/message/builder.ts
20
39
  import { stringify } from "qs";
@@ -141,11 +160,14 @@ var LoggerService = class extends ConsoleLogger {
141
160
  }
142
161
  };
143
162
  LoggerService = __decorateClass([
144
- Injectable({ scope: Scope.TRANSIENT })
163
+ Injectable2({ scope: Scope.TRANSIENT })
145
164
  ], LoggerService);
146
165
 
147
166
  // src/module.ts
148
167
  var LoggerModule = class {
168
+ configure(consumer) {
169
+ consumer.apply(LoggerMiddleware).forRoutes("*");
170
+ }
149
171
  };
150
172
  LoggerModule = __decorateClass([
151
173
  Global(),
@@ -155,6 +177,8 @@ LoggerModule = __decorateClass([
155
177
  })
156
178
  ], LoggerModule);
157
179
  export {
158
- LoggerModule
180
+ LoggerMiddleware,
181
+ LoggerModule,
182
+ LoggerService
159
183
  };
160
184
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/module.ts","../src/service.ts","../src/message/builder.ts"],"sourcesContent":["import { Global, Module } from '@nestjs/common';\nimport { LoggerService } from './service';\n\n@Global()\n@Module({\n providers: [LoggerService],\n exports: [LoggerService],\n})\nexport class LoggerModule {}\n","import { ConsoleLogger, Injectable, Scope } from '@nestjs/common';\nimport { LoggerContexts } from './types';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { Request, Response } from 'express';\nimport { MessageBuilder } from './message/builder';\n\n@Injectable({ scope: Scope.TRANSIENT })\nexport class LoggerService extends ConsoleLogger {\n log(message: string, context?: string) {\n const ctx = context || 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();\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();\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();\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","import { stringify } from 'qs';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { Response, Request } from 'express';\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() {\n this.printQueue = [];\n }\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([url, stringify(params)].filter((_) => _).join('?'));\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"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/middleware.ts","../src/module.ts","../src/service.ts","../src/message/builder.ts"],"sourcesContent":["import { Injectable, NestMiddleware } from '@nestjs/common';\nimport { Request, Response, NextFunction } from 'express';\nimport { LoggerContexts } from './types';\nimport { LoggerService } from './service';\n\n@Injectable()\nexport class LoggerMiddleware implements NestMiddleware {\n constructor(private loggerService: LoggerService) {\n this.loggerService.setContext(LoggerContexts.SYSTEM);\n }\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","import { Global, MiddlewareConsumer, Module, NestModule } from '@nestjs/common';\nimport { LoggerService } from './service';\nimport { LoggerMiddleware } from '.';\n\n@Global()\n@Module({\n providers: [LoggerService],\n exports: [LoggerService],\n})\nexport class LoggerModule implements NestModule {\n configure(consumer: MiddlewareConsumer) {\n consumer.apply(LoggerMiddleware).forRoutes('*');\n }\n}\n","import { ConsoleLogger, Injectable, Scope } from '@nestjs/common';\nimport { LoggerContexts } from './types';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { Request, Response } from 'express';\nimport { MessageBuilder } from './message/builder';\n\n@Injectable({ scope: Scope.TRANSIENT })\nexport class LoggerService extends ConsoleLogger {\n log(message: string, context?: string) {\n const ctx = context || 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();\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();\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();\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","import { stringify } from 'qs';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { Response, Request } from 'express';\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() {\n this.printQueue = [];\n }\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([url, stringify(params)].filter((_) => _).join('?'));\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"],"mappings":"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","names":["Injectable","Injectable"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iamnnort/nestjs-logger",
3
- "version": "1.1.2",
3
+ "version": "1.1.4",
4
4
  "description": "Logger module for NestJS - Simple - Informative - Pretty",
5
5
  "keywords": [
6
6
  "logger"