@sharangyawali/sg-app 1.0.10

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.
Files changed (110) hide show
  1. package/README.md +24 -0
  2. package/cls/cls.service.d.ts +8 -0
  3. package/cls/cls.service.js +33 -0
  4. package/cls/index.d.ts +1 -0
  5. package/cls/index.js +17 -0
  6. package/common/constants/index.d.ts +1 -0
  7. package/common/constants/index.js +17 -0
  8. package/common/constants/providers.constants.d.ts +1 -0
  9. package/common/constants/providers.constants.js +4 -0
  10. package/common/decorators/component.decorators.d.ts +2 -0
  11. package/common/decorators/component.decorators.js +14 -0
  12. package/common/decorators/controller.decorator.d.ts +2 -0
  13. package/common/decorators/controller.decorator.js +18 -0
  14. package/common/decorators/filters.decorator.d.ts +2 -0
  15. package/common/decorators/filters.decorator.js +19 -0
  16. package/common/decorators/guards.decorator.d.ts +4 -0
  17. package/common/decorators/guards.decorator.js +25 -0
  18. package/common/decorators/index.d.ts +10 -0
  19. package/common/decorators/index.js +26 -0
  20. package/common/decorators/inject.decorators.d.ts +3 -0
  21. package/common/decorators/inject.decorators.js +13 -0
  22. package/common/decorators/interceptors.decorator.d.ts +4 -0
  23. package/common/decorators/interceptors.decorator.js +25 -0
  24. package/common/decorators/middlewares.decorator.d.ts +3 -0
  25. package/common/decorators/middlewares.decorator.js +19 -0
  26. package/common/decorators/module.decorator.d.ts +2 -0
  27. package/common/decorators/module.decorator.js +25 -0
  28. package/common/decorators/parameter-validator.decorator.d.ts +7 -0
  29. package/common/decorators/parameter-validator.decorator.js +25 -0
  30. package/common/decorators/route-mapping.decorator.d.ts +5 -0
  31. package/common/decorators/route-mapping.decorator.js +32 -0
  32. package/common/enum/index.d.ts +3 -0
  33. package/common/enum/index.js +19 -0
  34. package/common/enum/request-method.enum.d.ts +11 -0
  35. package/common/enum/request-method.enum.js +15 -0
  36. package/common/enum/request-parameters.enum.d.ts +9 -0
  37. package/common/enum/request-parameters.enum.js +13 -0
  38. package/common/enum/scope.enum.d.ts +5 -0
  39. package/common/enum/scope.enum.js +9 -0
  40. package/common/http/http-context.d.ts +13 -0
  41. package/common/http/http-context.js +27 -0
  42. package/common/http/http-exception.d.ts +7 -0
  43. package/common/http/http-exception.js +17 -0
  44. package/common/http/index.d.ts +2 -0
  45. package/common/http/index.js +18 -0
  46. package/common/index.d.ts +5 -0
  47. package/common/index.js +21 -0
  48. package/common/interface/controller-method-paramenters.interface.d.ts +6 -0
  49. package/common/interface/controller-method-paramenters.interface.js +2 -0
  50. package/common/interface/controller-methods.interface.d.ts +6 -0
  51. package/common/interface/controller-methods.interface.js +2 -0
  52. package/common/interface/cors.interface.d.ts +14 -0
  53. package/common/interface/cors.interface.js +2 -0
  54. package/common/interface/features/index.d.ts +4 -0
  55. package/common/interface/features/index.js +20 -0
  56. package/common/interface/features/sg-filter.interface.d.ts +4 -0
  57. package/common/interface/features/sg-filter.interface.js +2 -0
  58. package/common/interface/features/sg-guard.interface.d.ts +4 -0
  59. package/common/interface/features/sg-guard.interface.js +2 -0
  60. package/common/interface/features/sg-interceptor.interface.d.ts +4 -0
  61. package/common/interface/features/sg-interceptor.interface.js +2 -0
  62. package/common/interface/features/sg-middleware.interface.d.ts +4 -0
  63. package/common/interface/features/sg-middleware.interface.js +2 -0
  64. package/common/interface/global-middleware-options.interface.d.ts +5 -0
  65. package/common/interface/global-middleware-options.interface.js +2 -0
  66. package/common/interface/global-prefix-options.interface.d.ts +4 -0
  67. package/common/interface/global-prefix-options.interface.js +2 -0
  68. package/common/interface/index.d.ts +15 -0
  69. package/common/interface/index.js +31 -0
  70. package/common/interface/injectable-options.interface.d.ts +5 -0
  71. package/common/interface/injectable-options.interface.js +2 -0
  72. package/common/interface/injection-token.interface.d.ts +6 -0
  73. package/common/interface/injection-token.interface.js +2 -0
  74. package/common/interface/module-options.interface.d.ts +6 -0
  75. package/common/interface/module-options.interface.js +2 -0
  76. package/common/interface/provider.interface.d.ts +28 -0
  77. package/common/interface/provider.interface.js +2 -0
  78. package/common/interface/route-info.interface.d.ts +5 -0
  79. package/common/interface/route-info.interface.js +2 -0
  80. package/common/interface/sg-application.interface.d.ts +8 -0
  81. package/common/interface/sg-application.interface.js +2 -0
  82. package/common/interface/sg-factory.interface.d.ts +8 -0
  83. package/common/interface/sg-factory.interface.js +2 -0
  84. package/common/interface/sg-interceptor.interface.d.ts +3 -0
  85. package/common/interface/sg-interceptor.interface.js +2 -0
  86. package/common/interface/static-route.interface.d.ts +20 -0
  87. package/common/interface/static-route.interface.js +2 -0
  88. package/common/interface/type.interface.d.ts +3 -0
  89. package/common/interface/type.interface.js +2 -0
  90. package/config/config-service.d.ts +3 -0
  91. package/config/config-service.js +11 -0
  92. package/config/index.d.ts +1 -0
  93. package/config/index.js +17 -0
  94. package/di-container.d.ts +19 -0
  95. package/di-container.js +113 -0
  96. package/index.d.ts +9 -0
  97. package/index.js +25 -0
  98. package/logger/index.d.ts +1 -0
  99. package/logger/index.js +17 -0
  100. package/logger/logger-service.d.ts +9 -0
  101. package/logger/logger-service.js +44 -0
  102. package/package.json +24 -0
  103. package/routes-config.d.ts +24 -0
  104. package/routes-config.js +224 -0
  105. package/set-meta-data.d.ts +1 -0
  106. package/set-meta-data.js +35 -0
  107. package/sg-application.d.ts +12 -0
  108. package/sg-application.js +37 -0
  109. package/sg-factory.d.ts +7 -0
  110. package/sg-factory.js +36 -0
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./decorators"), exports);
18
+ __exportStar(require("./enum"), exports);
19
+ __exportStar(require("./interface"), exports);
20
+ __exportStar(require("./http"), exports);
21
+ __exportStar(require("./constants"), exports);
@@ -0,0 +1,6 @@
1
+ import { RequestParameters } from "../enum";
2
+ export interface ControllerMethodParams<T = RequestParameters | string> {
3
+ dtoClass: any;
4
+ index: number;
5
+ paramType: T;
6
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ import { RequestMethodEnum } from "../enum";
2
+ export interface ControllerMethods<T = RequestMethodEnum | string> {
3
+ method: T;
4
+ path?: string;
5
+ handler: string | symbol;
6
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,14 @@
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
+ export interface CorsOptionsDelegate {
13
+ (origin: string | undefined, callback: (err: Error | null, allow: boolean) => void): void;
14
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./sg-middleware.interface"), exports);
18
+ __exportStar(require("./sg-guard.interface"), exports);
19
+ __exportStar(require("./sg-interceptor.interface"), exports);
20
+ __exportStar(require("./sg-filter.interface"), exports);
@@ -0,0 +1,4 @@
1
+ import { HttpContext, HttpException } from "../..";
2
+ export interface SGFilter {
3
+ catch(exception: HttpException, context: HttpContext): any;
4
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ import { HttpContext } from "../..";
2
+ export interface SGGuard {
3
+ canAccess(httpContext: HttpContext): Promise<Boolean>;
4
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ import { HttpContext } from "../..";
2
+ export interface SGInterceptor {
3
+ intercept(httpContext: HttpContext): Promise<(data: any) => any | void>;
4
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ import { NextFunction, Request, Response } from "express";
2
+ export interface SGMiddleware {
3
+ use(request: Request, response: Response, next: NextFunction): any;
4
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ import { RouteInfo } from "./route-info.interface";
2
+ export interface MiddlewareOptions<T = RouteInfo> {
3
+ exclude?: T[];
4
+ forRoutes?: T[];
5
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ import { RouteInfo } from "./route-info.interface";
2
+ export interface GlobalPrefixOptions<T = RouteInfo> {
3
+ exclude?: T[];
4
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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,31 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./route-info.interface"), exports);
18
+ __exportStar(require("./global-prefix-options.interface"), exports);
19
+ __exportStar(require("./sg-application.interface"), exports);
20
+ __exportStar(require("./global-middleware-options.interface"), exports);
21
+ __exportStar(require("./features"), exports);
22
+ __exportStar(require("./controller-methods.interface"), exports);
23
+ __exportStar(require("./controller-method-paramenters.interface"), exports);
24
+ __exportStar(require("./module-options.interface"), exports);
25
+ __exportStar(require("./injectable-options.interface"), exports);
26
+ __exportStar(require("./type.interface"), exports);
27
+ __exportStar(require("./injection-token.interface"), exports);
28
+ __exportStar(require("./provider.interface"), exports);
29
+ __exportStar(require("./sg-factory.interface"), exports);
30
+ __exportStar(require("./cors.interface"), exports);
31
+ __exportStar(require("./static-route.interface"), exports);
@@ -0,0 +1,5 @@
1
+ import { Scope } from "../enum";
2
+ export interface InjectableOptions<T = Scope> {
3
+ scope: T;
4
+ token?: string;
5
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ import { Type } from "./type.interface";
2
+ export type Constructor<T = any> = new (...args: any[]) => T;
3
+ export interface Abstract<T> extends Function {
4
+ prototype: T;
5
+ }
6
+ export type Token<T = any> = symbol | string | Type<T> | Function | Abstract<T> | Constructor<T>;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ import { ModuleProvider } from "./provider.interface";
2
+ export interface ModuleOptions {
3
+ controllers?: any[];
4
+ imports?: any[];
5
+ providers?: ModuleProvider[];
6
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,28 @@
1
+ import { Scope } from "../enum";
2
+ import { Constructor, Token } from "./injection-token.interface";
3
+ import { Type } from "./type.interface";
4
+ export type ModuleProvider<T = any> = Type<any> | ClassProvider<T> | ValueProvider<T> | FactoryProvider<T>;
5
+ export interface ClassProvider<T = any> {
6
+ token: Token<T>;
7
+ useClass?: Constructor<T>;
8
+ scope: Scope;
9
+ }
10
+ export interface ValueProvider<T = any> {
11
+ token: Token<T>;
12
+ useValue?: T;
13
+ scope: Scope;
14
+ }
15
+ export interface FactoryProvider<T = any> {
16
+ inject: Token[];
17
+ token: Token<T>;
18
+ useFactory: (...args: any[]) => T | Promise<T>;
19
+ scope: Scope;
20
+ }
21
+ export interface Provider<T = any> {
22
+ token: Token<T>;
23
+ useClass?: Constructor<T>;
24
+ useValue?: T;
25
+ scope: Scope;
26
+ inject?: Token[];
27
+ useFactory?: (...args: any[]) => T | Promise<T>;
28
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ import { RequestMethodEnum } from "../enum/request-method.enum";
2
+ export interface RouteInfo {
3
+ routePrefix: string;
4
+ method: RequestMethodEnum;
5
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,8 @@
1
+ import { GlobalPrefixOptions } from "./global-prefix-options.interface";
2
+ import { StaticRoutes } from "./static-route.interface";
3
+ export interface ISGApplication {
4
+ use(...args: any[]): this;
5
+ setStaticRoutes(options: StaticRoutes[]): this;
6
+ setGlobalPrefix(prefix: string, options?: GlobalPrefixOptions): this;
7
+ listen(port: number, callback?: (error?: Error) => void): Promise<any>;
8
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,8 @@
1
+ import { CorsOptions } from "./cors.interface";
2
+ import { ISGApplication } from "./sg-application.interface";
3
+ export interface FactoryOptions {
4
+ cors?: CorsOptions | boolean;
5
+ }
6
+ export interface ISGFactory {
7
+ create(appModule: any, options?: FactoryOptions): ISGApplication;
8
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ export interface SGInterceptor {
2
+ intercepts: any;
3
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,20 @@
1
+ import { Response } from "express";
2
+ export interface StaticRoutes {
3
+ prefix?: string;
4
+ path: string;
5
+ options?: StaticOptions;
6
+ }
7
+ export interface StaticOptions<T = Response> {
8
+ acceptRanges?: boolean | undefined;
9
+ cacheControl?: boolean | undefined;
10
+ dotfiles?: string | undefined;
11
+ etag?: boolean | undefined;
12
+ extensions?: string[] | false | undefined;
13
+ fallthrough?: boolean | undefined;
14
+ immutable?: boolean | undefined;
15
+ index?: boolean | string | string[] | undefined;
16
+ lastModified?: boolean | undefined;
17
+ maxAge?: number | string | undefined;
18
+ redirect?: boolean | undefined;
19
+ setHeaders?: ((res: T, path: string, stat: any) => any) | undefined;
20
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ export interface Type<T = any> extends Function {
2
+ new (...args: any[]): T;
3
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ export declare class ConfigService {
2
+ get(propertyPath: string): string;
3
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfigService = void 0;
4
+ const dotenv_1 = require("dotenv");
5
+ (0, dotenv_1.config)();
6
+ class ConfigService {
7
+ get(propertyPath) {
8
+ return process.env[propertyPath];
9
+ }
10
+ }
11
+ exports.ConfigService = ConfigService;
@@ -0,0 +1 @@
1
+ export * from "./config-service";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./config-service"), exports);
@@ -0,0 +1,19 @@
1
+ import "reflect-metadata";
2
+ import { Provider, Scope, Token } from "./common";
3
+ declare class Container {
4
+ private providers;
5
+ private singletons;
6
+ private requestCache;
7
+ private effectiveScopeCache;
8
+ private readonly ScopeRank;
9
+ register(provider: Provider): void;
10
+ resolve<T>(token: Token<T>, requestId?: string): Promise<T>;
11
+ private createInstance;
12
+ private resolveDeps;
13
+ private construct;
14
+ computeEffectiveScope(token: Token): Scope;
15
+ private maxScope;
16
+ removeRequest(requestId: string): void;
17
+ }
18
+ export declare const container: Container;
19
+ export {};
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.container = void 0;
4
+ require("reflect-metadata");
5
+ const common_1 = require("./common");
6
+ const cls_1 = require("./cls");
7
+ class Container {
8
+ providers = new Map();
9
+ singletons = new Map();
10
+ requestCache = new Map();
11
+ effectiveScopeCache = new Map();
12
+ ScopeRank = {
13
+ ['singleton']: 0,
14
+ ['request']: 1,
15
+ ['transient']: 2,
16
+ };
17
+ register(provider) {
18
+ this.providers.set(provider.token, provider);
19
+ }
20
+ async resolve(token, requestId) {
21
+ const provider = this.providers.get(token);
22
+ if (token === common_1.REQUEST) {
23
+ const cls = await this.resolve(cls_1.CLSService);
24
+ return cls.get("request");
25
+ }
26
+ const effectiveScope = this.computeEffectiveScope(token);
27
+ if (provider?.useValue !== undefined) {
28
+ return provider.useValue;
29
+ }
30
+ if (effectiveScope === common_1.Scope.SINGLETON) {
31
+ if (!this.singletons.has(token)) {
32
+ const instance = await this.createInstance(provider, requestId, token);
33
+ this.singletons.set(token, instance);
34
+ }
35
+ return this.singletons.get(token);
36
+ }
37
+ if (effectiveScope === common_1.Scope.REQUEST) {
38
+ if (!requestId) {
39
+ throw new Error(`Request-scoped provider "${String(token)}" requires requestId`);
40
+ }
41
+ let cache = this.requestCache.get(requestId);
42
+ if (!cache) {
43
+ cache = new Map();
44
+ this.requestCache.set(requestId, cache);
45
+ }
46
+ if (!cache.has(token)) {
47
+ const instance = await this.createInstance(provider, requestId, token);
48
+ cache.set(token, instance);
49
+ }
50
+ return cache.get(token);
51
+ }
52
+ return this.createInstance(provider, requestId, token);
53
+ }
54
+ async createInstance(provider, requestId, token) {
55
+ if (!provider) {
56
+ throw new Error(`No provider for token ${String(token)}`);
57
+ }
58
+ if (provider.useFactory) {
59
+ const deps = await this.resolveDeps(provider.inject ?? [], requestId);
60
+ return provider.useFactory(...deps);
61
+ }
62
+ if (provider.useClass) {
63
+ return await this.construct(provider.useClass, requestId);
64
+ }
65
+ throw new Error(`Invalid provider for ${String(token)}`);
66
+ }
67
+ async resolveDeps(tokens, requestId) {
68
+ const deps = [];
69
+ for (const t of tokens) {
70
+ deps.push(await this.resolve(t, requestId));
71
+ }
72
+ return deps;
73
+ }
74
+ async construct(target, requestId) {
75
+ const injections = Reflect.getMetadata("custom:inject_tokens", target) || {};
76
+ const args = [];
77
+ for (const index of Object.keys(injections)) {
78
+ args[+index] = await this.resolve(injections[index], requestId);
79
+ }
80
+ return new target(...args);
81
+ }
82
+ computeEffectiveScope(token) {
83
+ if (token === common_1.REQUEST) {
84
+ return common_1.Scope.REQUEST;
85
+ }
86
+ if (this.effectiveScopeCache.has(token)) {
87
+ return this.effectiveScopeCache.get(token);
88
+ }
89
+ const provider = this.providers.get(token);
90
+ let scope = provider?.scope ?? common_1.Scope.SINGLETON;
91
+ const deps = [];
92
+ if (provider?.inject) {
93
+ deps.push(...provider.inject);
94
+ }
95
+ if (provider?.useClass) {
96
+ const injections = Reflect.getMetadata("custom:inject_tokens", provider.useClass) || {};
97
+ deps.push(...Object.values(injections));
98
+ }
99
+ for (const dep of deps) {
100
+ const depScope = this.computeEffectiveScope(dep);
101
+ scope = this.maxScope(scope, depScope);
102
+ }
103
+ this.effectiveScopeCache.set(token, scope);
104
+ return scope;
105
+ }
106
+ maxScope(a, b) {
107
+ return this.ScopeRank[a] > this.ScopeRank[b] ? a : b;
108
+ }
109
+ removeRequest(requestId) {
110
+ this.requestCache.delete(requestId);
111
+ }
112
+ }
113
+ exports.container = new Container();
package/index.d.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";
package/index.js ADDED
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./logger"), exports);
18
+ __exportStar(require("./common"), exports);
19
+ __exportStar(require("./config"), exports);
20
+ __exportStar(require("./sg-factory"), exports);
21
+ __exportStar(require("./sg-application"), exports);
22
+ __exportStar(require("./routes-config"), exports);
23
+ __exportStar(require("./set-meta-data"), exports);
24
+ __exportStar(require("./cls"), exports);
25
+ __exportStar(require("./di-container"), exports);
@@ -0,0 +1 @@
1
+ export * from "./logger-service";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./logger-service"), exports);
@@ -0,0 +1,9 @@
1
+ export declare class AppLogger {
2
+ private readonly logger;
3
+ constructor();
4
+ log(message: string): void;
5
+ debug(message: string): void;
6
+ warn(message: string): void;
7
+ error(message: string): void;
8
+ logWithContext(context: string, message: string): void;
9
+ }