@sharangyawali/sg-app 0.0.5

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.

Potentially problematic release.


This version of @sharangyawali/sg-app might be problematic. Click here for more details.

Files changed (165) hide show
  1. package/cls/cls.service.d.ts +8 -0
  2. package/cls/cls.service.js +33 -0
  3. package/cls/index.d.ts +1 -0
  4. package/cls/index.js +17 -0
  5. package/common/constants/index.d.ts +1 -0
  6. package/common/constants/index.js +17 -0
  7. package/common/constants/providers.constants.d.ts +1 -0
  8. package/common/constants/providers.constants.js +4 -0
  9. package/common/decorators/component.decorators.d.ts +2 -0
  10. package/common/decorators/component.decorators.js +14 -0
  11. package/common/decorators/controller.decorator.d.ts +2 -0
  12. package/common/decorators/controller.decorator.js +18 -0
  13. package/common/decorators/filters.decorator.d.ts +2 -0
  14. package/common/decorators/filters.decorator.js +19 -0
  15. package/common/decorators/guards.decorator.d.ts +4 -0
  16. package/common/decorators/guards.decorator.js +25 -0
  17. package/common/decorators/index.d.ts +10 -0
  18. package/common/decorators/index.js +26 -0
  19. package/common/decorators/inject.decorators.d.ts +3 -0
  20. package/common/decorators/inject.decorators.js +13 -0
  21. package/common/decorators/interceptors.decorator.d.ts +4 -0
  22. package/common/decorators/interceptors.decorator.js +25 -0
  23. package/common/decorators/middlewares.decorator.d.ts +3 -0
  24. package/common/decorators/middlewares.decorator.js +19 -0
  25. package/common/decorators/module.decorator.d.ts +2 -0
  26. package/common/decorators/module.decorator.js +31 -0
  27. package/common/decorators/parameter-validator.decorator.d.ts +5 -0
  28. package/common/decorators/parameter-validator.decorator.js +21 -0
  29. package/common/decorators/route-mapping.decorator.d.ts +5 -0
  30. package/common/decorators/route-mapping.decorator.js +32 -0
  31. package/common/enum/index.d.ts +3 -0
  32. package/common/enum/index.js +19 -0
  33. package/common/enum/request-method.enum.d.ts +11 -0
  34. package/common/enum/request-method.enum.js +15 -0
  35. package/common/enum/request-parameters.enum.d.ts +7 -0
  36. package/common/enum/request-parameters.enum.js +11 -0
  37. package/common/enum/scope.enum.d.ts +5 -0
  38. package/common/enum/scope.enum.js +9 -0
  39. package/common/http/http-context.d.ts +13 -0
  40. package/common/http/http-context.js +27 -0
  41. package/common/http/http-exception.d.ts +7 -0
  42. package/common/http/http-exception.js +17 -0
  43. package/common/http/index.d.ts +2 -0
  44. package/common/http/index.js +18 -0
  45. package/common/index.d.ts +5 -0
  46. package/common/index.js +21 -0
  47. package/common/interface/controller-method-paramenters.interface.d.ts +6 -0
  48. package/common/interface/controller-method-paramenters.interface.js +2 -0
  49. package/common/interface/controller-methods.interface.d.ts +6 -0
  50. package/common/interface/controller-methods.interface.js +2 -0
  51. package/common/interface/cors.interface.d.ts +14 -0
  52. package/common/interface/cors.interface.js +2 -0
  53. package/common/interface/features/index.d.ts +4 -0
  54. package/common/interface/features/index.js +20 -0
  55. package/common/interface/features/sg-filter.interface.d.ts +4 -0
  56. package/common/interface/features/sg-filter.interface.js +2 -0
  57. package/common/interface/features/sg-guard.interface.d.ts +4 -0
  58. package/common/interface/features/sg-guard.interface.js +2 -0
  59. package/common/interface/features/sg-interceptor.interface.d.ts +4 -0
  60. package/common/interface/features/sg-interceptor.interface.js +2 -0
  61. package/common/interface/features/sg-middleware.interface.d.ts +4 -0
  62. package/common/interface/features/sg-middleware.interface.js +2 -0
  63. package/common/interface/global-middleware-options.interface.d.ts +5 -0
  64. package/common/interface/global-middleware-options.interface.js +2 -0
  65. package/common/interface/global-prefix-options.interface.d.ts +4 -0
  66. package/common/interface/global-prefix-options.interface.js +2 -0
  67. package/common/interface/index.d.ts +15 -0
  68. package/common/interface/index.js +31 -0
  69. package/common/interface/injectable-options.interface.d.ts +5 -0
  70. package/common/interface/injectable-options.interface.js +2 -0
  71. package/common/interface/injection-token.interface.d.ts +2 -0
  72. package/common/interface/injection-token.interface.js +2 -0
  73. package/common/interface/module-options.interface.d.ts +6 -0
  74. package/common/interface/module-options.interface.js +2 -0
  75. package/common/interface/provider.interface.d.ts +30 -0
  76. package/common/interface/provider.interface.js +2 -0
  77. package/common/interface/route-info.interface.d.ts +5 -0
  78. package/common/interface/route-info.interface.js +2 -0
  79. package/common/interface/sg-application.interface.d.ts +8 -0
  80. package/common/interface/sg-application.interface.js +2 -0
  81. package/common/interface/sg-factory.interface.d.ts +8 -0
  82. package/common/interface/sg-factory.interface.js +2 -0
  83. package/common/interface/sg-interceptor.interface.d.ts +3 -0
  84. package/common/interface/sg-interceptor.interface.js +2 -0
  85. package/common/interface/static-route.interface.d.ts +20 -0
  86. package/common/interface/static-route.interface.js +2 -0
  87. package/common/interface/type.interface.d.ts +3 -0
  88. package/common/interface/type.interface.js +2 -0
  89. package/config/config-service.d.ts +3 -0
  90. package/config/config-service.js +11 -0
  91. package/config/index.d.ts +1 -0
  92. package/config/index.js +17 -0
  93. package/di-container.d.ts +15 -0
  94. package/di-container.js +103 -0
  95. package/index.d.ts +9 -0
  96. package/index.js +25 -0
  97. package/logger/index.d.ts +1 -0
  98. package/logger/index.js +17 -0
  99. package/logger/logger-service.d.ts +9 -0
  100. package/logger/logger-service.js +44 -0
  101. package/package.json +24 -0
  102. package/routes-config.d.ts +22 -0
  103. package/routes-config.js +204 -0
  104. package/set-meta-data.d.ts +1 -0
  105. package/set-meta-data.js +35 -0
  106. package/sg-application.d.ts +12 -0
  107. package/sg-application.js +37 -0
  108. package/sg-factory.d.ts +6 -0
  109. package/sg-factory.js +22 -0
  110. package/src/cls/cls.service.ts +31 -0
  111. package/src/cls/index.ts +1 -0
  112. package/src/common/constants/index.ts +1 -0
  113. package/src/common/constants/providers.constants.ts +1 -0
  114. package/src/common/decorators/component.decorators.ts +13 -0
  115. package/src/common/decorators/controller.decorator.ts +16 -0
  116. package/src/common/decorators/filters.decorator.ts +17 -0
  117. package/src/common/decorators/guards.decorator.ts +26 -0
  118. package/src/common/decorators/index.ts +10 -0
  119. package/src/common/decorators/inject.decorators.ts +12 -0
  120. package/src/common/decorators/interceptors.decorator.ts +26 -0
  121. package/src/common/decorators/middlewares.decorator.ts +18 -0
  122. package/src/common/decorators/module.decorator.ts +29 -0
  123. package/src/common/decorators/parameter-validator.decorator.ts +17 -0
  124. package/src/common/decorators/route-mapping.decorator.ts +27 -0
  125. package/src/common/enum/index.ts +3 -0
  126. package/src/common/enum/request-method.enum.ts +11 -0
  127. package/src/common/enum/request-parameters.enum.ts +7 -0
  128. package/src/common/enum/scope.enum.ts +5 -0
  129. package/src/common/http/http-context.ts +25 -0
  130. package/src/common/http/http-exception.ts +12 -0
  131. package/src/common/http/index.ts +2 -0
  132. package/src/common/index.ts +5 -0
  133. package/src/common/interface/controller-method-paramenters.interface.ts +7 -0
  134. package/src/common/interface/controller-methods.interface.ts +7 -0
  135. package/src/common/interface/cors.interface.ts +15 -0
  136. package/src/common/interface/features/index.ts +4 -0
  137. package/src/common/interface/features/sg-filter.interface.ts +5 -0
  138. package/src/common/interface/features/sg-guard.interface.ts +5 -0
  139. package/src/common/interface/features/sg-interceptor.interface.ts +5 -0
  140. package/src/common/interface/features/sg-middleware.interface.ts +5 -0
  141. package/src/common/interface/global-middleware-options.interface.ts +7 -0
  142. package/src/common/interface/global-prefix-options.interface.ts +5 -0
  143. package/src/common/interface/index.ts +15 -0
  144. package/src/common/interface/injectable-options.interface.ts +6 -0
  145. package/src/common/interface/injection-token.interface.ts +2 -0
  146. package/src/common/interface/module-options.interface.ts +7 -0
  147. package/src/common/interface/provider.interface.ts +36 -0
  148. package/src/common/interface/route-info.interface.ts +6 -0
  149. package/src/common/interface/sg-application.interface.ts +9 -0
  150. package/src/common/interface/sg-factory.interface.ts +10 -0
  151. package/src/common/interface/sg-interceptor.interface.ts +3 -0
  152. package/src/common/interface/static-route.interface.ts +22 -0
  153. package/src/common/interface/type.interface.ts +3 -0
  154. package/src/config/config-service.ts +7 -0
  155. package/src/config/index.ts +1 -0
  156. package/src/di-container.ts +135 -0
  157. package/src/index.ts +9 -0
  158. package/src/logger/index.ts +1 -0
  159. package/src/logger/logger-service.ts +48 -0
  160. package/src/routes-config.ts +305 -0
  161. package/src/set-meta-data.ts +30 -0
  162. package/src/sg-application.ts +29 -0
  163. package/src/sg-factory.ts +15 -0
  164. package/tsconfig.json +31 -0
  165. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,25 @@
1
+ import { Request, Response } from "express";
2
+ import { ControllerMethods } from "../interface";
3
+
4
+ export class HttpContext {
5
+ private readonly req: Request;
6
+ private readonly res: Response;
7
+ constructor(
8
+ private readonly request: Request,
9
+ private readonly response: Response,
10
+ private readonly methodMeta: ControllerMethods
11
+ ) {
12
+ this.req = request;
13
+ this.res = response;
14
+ }
15
+
16
+ getRequest(): Request {
17
+ return this.req;
18
+ }
19
+ getResponse(): Response {
20
+ return this.res;
21
+ }
22
+ getMetaData<T>(key: string): T {
23
+ return this.methodMeta[key];
24
+ }
25
+ }
@@ -0,0 +1,12 @@
1
+ export class HttpException extends Error {
2
+ public readonly message: any;
3
+ public readonly statusCode: number;
4
+ constructor(
5
+ private readonly msg: any = "Internal Server Error",
6
+ private readonly status: number = 500
7
+ ) {
8
+ super(msg);
9
+ this.message = msg;
10
+ this.statusCode = status;
11
+ }
12
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./http-context";
2
+ export * from "./http-exception";
@@ -0,0 +1,5 @@
1
+ export * from "./decorators";
2
+ export * from "./enum";
3
+ export * from "./interface";
4
+ export * from "./http";
5
+ export * from "./constants";
@@ -0,0 +1,7 @@
1
+ import { RequestParameters } from "../enum";
2
+
3
+ export interface ControllerMethodParams<T = RequestParameters | string> {
4
+ dtoClass: any;
5
+ index: number;
6
+ paramType: T;
7
+ }
@@ -0,0 +1,7 @@
1
+ import { RequestMethodEnum } from "../enum";
2
+
3
+ export interface ControllerMethods<T = RequestMethodEnum | string> {
4
+ method: T;
5
+ path?: string;
6
+ handler: string | symbol;
7
+ }
@@ -0,0 +1,15 @@
1
+ export interface CorsOptions {
2
+ origin?: boolean | string | RegExp | (string | RegExp)[] | CorsOptionsDelegate;
3
+ methods?: string | string[];
4
+ allowedHeaders?: string | string[];
5
+ exposedHeaders?: string | string[];
6
+ credentials?: boolean;
7
+ preflightContinue?: boolean;
8
+ optionsSuccessStatus?: number;
9
+ maxAge?: number;
10
+ vary?: boolean;
11
+ }
12
+
13
+ export interface CorsOptionsDelegate {
14
+ (origin: string | undefined, callback: (err: Error | null, allow: boolean) => void): void;
15
+ }
@@ -0,0 +1,4 @@
1
+ export * from "./sg-middleware.interface";
2
+ export * from "./sg-guard.interface";
3
+ export * from "./sg-interceptor.interface";
4
+ export * from "./sg-filter.interface";
@@ -0,0 +1,5 @@
1
+ import { HttpContext, HttpException } from "../..";
2
+
3
+ export interface SGFilter {
4
+ catch(exception: HttpException, context: HttpContext): any;
5
+ }
@@ -0,0 +1,5 @@
1
+ import { HttpContext } from "../..";
2
+
3
+ export interface SGGuard {
4
+ canAccess(httpContext: HttpContext): Promise<Boolean>;
5
+ }
@@ -0,0 +1,5 @@
1
+ import { HttpContext } from "../..";
2
+
3
+ export interface SGInterceptor {
4
+ intercept(httpContext: HttpContext): Promise<(data: any) => any | void>;
5
+ }
@@ -0,0 +1,5 @@
1
+ import { NextFunction, Request, Response } from "express";
2
+
3
+ export interface SGMiddleware {
4
+ use(request: Request, response: Response, next: NextFunction): any;
5
+ }
@@ -0,0 +1,7 @@
1
+ import { RouteInfo } from "./route-info.interface";
2
+
3
+ export interface MiddlewareOptions<T = RouteInfo> {
4
+ exclude?: T[];
5
+
6
+ forRoutes?: T[];
7
+ }
@@ -0,0 +1,5 @@
1
+ import { RouteInfo } from "./route-info.interface";
2
+
3
+ export interface GlobalPrefixOptions<T = RouteInfo> {
4
+ exclude?: T[];
5
+ }
@@ -0,0 +1,15 @@
1
+ export * from "./route-info.interface";
2
+ export * from "./global-prefix-options.interface";
3
+ export * from "./sg-application.interface";
4
+ export * from "./global-middleware-options.interface";
5
+ export * from "./features";
6
+ export * from "./controller-methods.interface";
7
+ export * from "./controller-method-paramenters.interface";
8
+ export * from "./module-options.interface";
9
+ export * from "./injectable-options.interface";
10
+ export * from "./type.interface";
11
+ export * from "./injection-token.interface";
12
+ export * from "./provider.interface";
13
+ export * from './sg-factory.interface';
14
+ export * from './cors.interface';
15
+ export * from './static-route.interface';
@@ -0,0 +1,6 @@
1
+ import { Scope } from "../enum";
2
+
3
+ export interface InjectableOptions<T = Scope> {
4
+ scope: T;
5
+ token?: string;
6
+ }
@@ -0,0 +1,2 @@
1
+ export type Constructor<T = any> = new (...args: any[]) => T;
2
+ export type Token<T = any> = (new (...args: any[]) => T) | symbol | string;
@@ -0,0 +1,7 @@
1
+ import { ModuleProvider } from "./provider.interface";
2
+
3
+ export interface ModuleOptions {
4
+ controllers?: any[];
5
+ imports?: any[];
6
+ providers?: ModuleProvider[];
7
+ }
@@ -0,0 +1,36 @@
1
+ import { Scope } from "../enum";
2
+ import { Constructor, Token } from "./injection-token.interface";
3
+ import { Type } from "./type.interface";
4
+
5
+ export type ModuleProvider<T = any> =
6
+ | Type<any>
7
+ | ClassProvider<T>
8
+ | ValueProvider<T>
9
+ | FactoryProvider<T>;
10
+
11
+ export interface ClassProvider<T = any> {
12
+ token: Token<T>;
13
+ useClass?: Constructor<T>;
14
+ scope: Scope;
15
+ }
16
+
17
+ export interface ValueProvider<T = any> {
18
+ token: Token<T>;
19
+ useValue?: T;
20
+ scope: Scope;
21
+ }
22
+
23
+ export interface FactoryProvider<T = any> {
24
+ inject: Token[];
25
+ token: Token<T>;
26
+ useFactory: (...args: any[]) => { value: T };
27
+ scope: Scope;
28
+ }
29
+ export interface Provider<T = any> {
30
+ token: Token<T>;
31
+ useClass?: Constructor<T>;
32
+ useValue?: T;
33
+ scope: Scope;
34
+ inject?: Token[];
35
+ useFactory?: (...args: any[]) => T;
36
+ }
@@ -0,0 +1,6 @@
1
+ import { RequestMethodEnum } from "../enum/request-method.enum";
2
+
3
+ export interface RouteInfo {
4
+ routePrefix: string;
5
+ method: RequestMethodEnum;
6
+ }
@@ -0,0 +1,9 @@
1
+ import { GlobalPrefixOptions } from "./global-prefix-options.interface";
2
+ import { StaticRoutes } from "./static-route.interface";
3
+
4
+ export interface ISGApplication {
5
+ use(...args: any[]): this;
6
+ setStaticRoutes(options: StaticRoutes[]): this;
7
+ setGlobalPrefix(prefix: string, options?: GlobalPrefixOptions): this;
8
+ listen(port: number, callback?: (error?: Error) => void): Promise<any>;
9
+ }
@@ -0,0 +1,10 @@
1
+ import { CorsOptions } from "./cors.interface";
2
+ import { ISGApplication } from "./sg-application.interface";
3
+
4
+ export interface FactoryOptions {
5
+ cors?: CorsOptions | boolean
6
+ }
7
+
8
+ export interface ISGFactory {
9
+ create(appModule: any, options?: FactoryOptions): ISGApplication
10
+ }
@@ -0,0 +1,3 @@
1
+ export interface SGInterceptor {
2
+ intercepts;
3
+ }
@@ -0,0 +1,22 @@
1
+ import { Response } from "express";
2
+
3
+ export interface StaticRoutes {
4
+ prefix?: string;
5
+ path: string;
6
+ options?: StaticOptions
7
+ }
8
+
9
+ export interface StaticOptions<T = Response> {
10
+ acceptRanges?: boolean | undefined;
11
+ cacheControl?: boolean | undefined;
12
+ dotfiles?: string | undefined;
13
+ etag?: boolean | undefined;
14
+ extensions?: string[] | false | undefined;
15
+ fallthrough?: boolean | undefined;
16
+ immutable?: boolean | undefined;
17
+ index?: boolean | string | string[] | undefined;
18
+ lastModified?: boolean | undefined;
19
+ maxAge?: number | string | undefined;
20
+ redirect?: boolean | undefined;
21
+ setHeaders?: ((res: T, path: string, stat: any) => any) | undefined;
22
+ }
@@ -0,0 +1,3 @@
1
+ export interface Type<T = any> extends Function {
2
+ new (...args: any[]): T;
3
+ }
@@ -0,0 +1,7 @@
1
+ import { config } from 'dotenv';
2
+ config();
3
+ export class ConfigService {
4
+ get(propertyPath: string): string {
5
+ return process.env[propertyPath];
6
+ }
7
+ }
@@ -0,0 +1 @@
1
+ export * from "./config-service";
@@ -0,0 +1,135 @@
1
+ import {
2
+ Constructor,
3
+ HttpException,
4
+ Provider,
5
+ REQUEST,
6
+ Scope,
7
+ Token
8
+ } from "./common";
9
+ import { CLSService } from "./cls";
10
+ import "reflect-metadata";
11
+
12
+ class Container {
13
+ private providers = new Map<Token, Provider>();
14
+ private singletons = new Map<Token, any>();
15
+ private requestCache = new Map<string, Map<Token, any>>();
16
+
17
+ register(provider: Provider) {
18
+ this.providers.set(provider.token, provider);
19
+ }
20
+
21
+ resolve<T>(token: Token<T>, requestId?: string): T {
22
+ if (token === REQUEST) {
23
+ const cls = this.resolve(CLSService);
24
+ return cls.get("request") as T;
25
+ }
26
+
27
+ const provider = this.providers.get(token);
28
+ if (!provider) {
29
+ if (typeof token === "function") {
30
+ return this.construct(token, requestId);
31
+ }
32
+ throw new HttpException(
33
+ `No provider found for token: ${token.toString()}`
34
+ );
35
+ }
36
+ if (provider.useValue) return provider.useValue;
37
+
38
+ if (provider.scope == Scope.SINGLETON) {
39
+ if (!this.singletons.has(token)) {
40
+ const instance = provider.useFactory
41
+ ? this.constructFactory(provider, requestId)
42
+ : this.construct(provider.useClass!, requestId);
43
+ this.singletons.set(token, instance);
44
+ }
45
+ return this.singletons.get(token);
46
+ }
47
+
48
+ else if (provider.scope === Scope.REQUEST) {
49
+ if (!requestId) {
50
+ throw new Error(`Request-scoped provider "${String(token)}" needs requestId`);
51
+ }
52
+ let cache = this.requestCache.get(requestId);
53
+ if (!cache) {
54
+ cache = new Map();
55
+ this.requestCache.set(requestId, cache);
56
+ }
57
+ if (cache.has(token)) return cache.get(token);
58
+
59
+ const instance = provider.useFactory
60
+ ? this.constructFactory(provider, requestId)
61
+ : this.construct(provider.useClass!, requestId);
62
+
63
+ cache.set(token, instance);
64
+ return instance;
65
+ }
66
+ return provider.useFactory ? this.constructFactory(provider, requestId) : this.construct(provider.useClass!, requestId)
67
+ }
68
+
69
+ private constructFactory<T>(
70
+ provider: Provider<T>,
71
+ requestId?: string
72
+ ): T {
73
+ const params =
74
+ provider.inject?.map((token) => {
75
+ const dep = this.providers.get(token);
76
+
77
+ if (dep?.scope === Scope.REQUEST) {
78
+ return this.createRequestScopedProxy(token);
79
+ }
80
+
81
+ return this.resolve(token, requestId);
82
+ }) ?? [];
83
+
84
+ return provider.useFactory!(...params);
85
+ }
86
+
87
+ private construct<T>(
88
+ target: Constructor<T>,
89
+ requestId?: string
90
+ ): T {
91
+ const injections =
92
+ Reflect.getMetadata("custom:inject_tokens", target) || {};
93
+ const args = [];
94
+ for (const index of Object.keys(injections)) {
95
+ const token = injections[index];
96
+ const provider = this.providers.get(token);
97
+ if (!provider) {
98
+ args[+index] = this.resolve(token, requestId);
99
+ continue;
100
+ }
101
+ if (provider?.scope === Scope.REQUEST) {
102
+ args[+index] = this.createRequestScopedProxy(token);
103
+ } else {
104
+ args[+index] = this.resolve(token, requestId);
105
+ }
106
+ }
107
+
108
+ return new target(...args);
109
+ }
110
+
111
+ private createRequestScopedProxy<T>(
112
+ token: Token<T>,
113
+ ): T {
114
+ const cls = this.resolve(CLSService)
115
+ return (new Proxy({}, {
116
+ get(_, prop) {
117
+ const requestId = cls.get('requestId');
118
+ if (!requestId) {
119
+ throw new Error(
120
+ `Request-scoped provider "${String(token)}" accessed outside request context`
121
+ );
122
+ }
123
+ const instance = container.resolve<T>(token, requestId);
124
+ const value = (instance as any)[prop];
125
+ return typeof value === "function" ? value.bind(instance) : value;
126
+ }
127
+ }) as T);
128
+ }
129
+
130
+ removeRequestInstances(requestId: string) {
131
+ this.requestCache.delete(requestId);
132
+ }
133
+ }
134
+
135
+ export const container = new Container();
package/src/index.ts ADDED
@@ -0,0 +1,9 @@
1
+ export * from "./logger";
2
+ export * from "./common";
3
+ export * from "./config";
4
+ export * from "./sg-factory";
5
+ export * from "./sg-application";
6
+ export * from "./routes-config";
7
+ export * from "./set-meta-data";
8
+ export * from "./cls";
9
+ export * from "./di-container";
@@ -0,0 +1 @@
1
+ export * from "./logger-service";
@@ -0,0 +1,48 @@
1
+ import { addColors, createLogger, format, Logger, transports } from "winston";
2
+
3
+ export class AppLogger {
4
+ private readonly logger: Logger;
5
+ constructor() {
6
+ const colorizer = format.colorize();
7
+ addColors({
8
+ info: "bold green",
9
+ log: "bold white",
10
+ warn: "bold yellow"
11
+ });
12
+ const myFormat = format.printf(({ message }) => {
13
+ const coloredTime = colorizer.colorize(
14
+ "log",
15
+ new Date().toLocaleString()
16
+ );
17
+ const coloredServer = colorizer.colorize("info", "[NODE] SHARAN");
18
+ return `${coloredServer}- ${coloredTime} ${message}`;
19
+ });
20
+ this.logger = createLogger({
21
+ level: "info",
22
+ format: format.combine(format.colorize({ all: true }), myFormat),
23
+ transports: [
24
+ new transports.Console(),
25
+ ],
26
+ exitOnError: false
27
+ });
28
+ }
29
+ log(message: string) {
30
+ this.logger.log("info", message);
31
+ }
32
+
33
+ debug(message: string): void {
34
+ this.logger.debug(message);
35
+ }
36
+
37
+ warn(message: string) {
38
+ this.logger.warn(message);
39
+ }
40
+
41
+ error(message: string) {
42
+ this.logger.error(message);
43
+ }
44
+
45
+ logWithContext(context: string, message: string) {
46
+ this.logger.info(`[${context}] ${message}`);
47
+ }
48
+ }