@expressots/adapter-express 0.0.1-dev.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.
Files changed (84) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +107 -0
  3. package/lib/CHANGELOG.md +8 -0
  4. package/lib/README.md +107 -0
  5. package/lib/cjs/adapter-express/application-express.interface.js +2 -0
  6. package/lib/cjs/adapter-express/application-express.js +147 -0
  7. package/lib/cjs/adapter-express/express-utils/base-middleware.js +19 -0
  8. package/lib/cjs/adapter-express/express-utils/constants.js +46 -0
  9. package/lib/cjs/adapter-express/express-utils/content/httpContent.js +12 -0
  10. package/lib/cjs/adapter-express/express-utils/decorators.js +110 -0
  11. package/lib/cjs/adapter-express/express-utils/httpResponseMessage.js +31 -0
  12. package/lib/cjs/adapter-express/express-utils/index.js +17 -0
  13. package/lib/cjs/adapter-express/express-utils/interfaces.js +2 -0
  14. package/lib/cjs/adapter-express/express-utils/inversify-express-server.js +300 -0
  15. package/lib/cjs/adapter-express/express-utils/utils.js +58 -0
  16. package/lib/cjs/adapter-express/index.js +21 -0
  17. package/lib/cjs/index.js +17 -0
  18. package/lib/cjs/types/adapter-express/application-express.d.ts +70 -0
  19. package/lib/cjs/types/adapter-express/application-express.d.ts.map +1 -0
  20. package/lib/cjs/types/adapter-express/application-express.interface.d.ts +29 -0
  21. package/lib/cjs/types/adapter-express/application-express.interface.d.ts.map +1 -0
  22. package/lib/cjs/types/adapter-express/express-utils/base-middleware.d.ts +9 -0
  23. package/lib/cjs/types/adapter-express/express-utils/base-middleware.d.ts.map +1 -0
  24. package/lib/cjs/types/adapter-express/express-utils/constants.d.ts +39 -0
  25. package/lib/cjs/types/adapter-express/express-utils/constants.d.ts.map +1 -0
  26. package/lib/cjs/types/adapter-express/express-utils/content/httpContent.d.ts +8 -0
  27. package/lib/cjs/types/adapter-express/express-utils/content/httpContent.d.ts.map +1 -0
  28. package/lib/cjs/types/adapter-express/express-utils/decorators.d.ts +24 -0
  29. package/lib/cjs/types/adapter-express/express-utils/decorators.d.ts.map +1 -0
  30. package/lib/cjs/types/adapter-express/express-utils/httpResponseMessage.d.ts +16 -0
  31. package/lib/cjs/types/adapter-express/express-utils/httpResponseMessage.d.ts.map +1 -0
  32. package/lib/cjs/types/adapter-express/express-utils/index.d.ts +2 -0
  33. package/lib/cjs/types/adapter-express/express-utils/index.d.ts.map +1 -0
  34. package/lib/cjs/types/adapter-express/express-utils/interfaces.d.ts +76 -0
  35. package/lib/cjs/types/adapter-express/express-utils/interfaces.d.ts.map +1 -0
  36. package/lib/cjs/types/adapter-express/express-utils/inversify-express-server.d.ts +60 -0
  37. package/lib/cjs/types/adapter-express/express-utils/inversify-express-server.d.ts.map +1 -0
  38. package/lib/cjs/types/adapter-express/express-utils/utils.d.ts +10 -0
  39. package/lib/cjs/types/adapter-express/express-utils/utils.d.ts.map +1 -0
  40. package/lib/cjs/types/adapter-express/index.d.ts +4 -0
  41. package/lib/cjs/types/adapter-express/index.d.ts.map +1 -0
  42. package/lib/cjs/types/index.d.ts +2 -0
  43. package/lib/cjs/types/index.d.ts.map +1 -0
  44. package/lib/esm/adapter-express/application-express.interface.js +2 -0
  45. package/lib/esm/adapter-express/application-express.js +135 -0
  46. package/lib/esm/adapter-express/express-utils/base-middleware.js +22 -0
  47. package/lib/esm/adapter-express/express-utils/constants.js +46 -0
  48. package/lib/esm/adapter-express/express-utils/content/httpContent.js +10 -0
  49. package/lib/esm/adapter-express/express-utils/decorators.js +110 -0
  50. package/lib/esm/adapter-express/express-utils/httpResponseMessage.js +33 -0
  51. package/lib/esm/adapter-express/express-utils/index.js +17 -0
  52. package/lib/esm/adapter-express/express-utils/interfaces.js +2 -0
  53. package/lib/esm/adapter-express/express-utils/inversify-express-server.js +293 -0
  54. package/lib/esm/adapter-express/express-utils/utils.js +58 -0
  55. package/lib/esm/adapter-express/index.js +21 -0
  56. package/lib/esm/index.mjs +17 -0
  57. package/lib/esm/types/adapter-express/application-express.d.ts +70 -0
  58. package/lib/esm/types/adapter-express/application-express.d.ts.map +1 -0
  59. package/lib/esm/types/adapter-express/application-express.interface.d.ts +29 -0
  60. package/lib/esm/types/adapter-express/application-express.interface.d.ts.map +1 -0
  61. package/lib/esm/types/adapter-express/express-utils/base-middleware.d.ts +9 -0
  62. package/lib/esm/types/adapter-express/express-utils/base-middleware.d.ts.map +1 -0
  63. package/lib/esm/types/adapter-express/express-utils/constants.d.ts +39 -0
  64. package/lib/esm/types/adapter-express/express-utils/constants.d.ts.map +1 -0
  65. package/lib/esm/types/adapter-express/express-utils/content/httpContent.d.ts +8 -0
  66. package/lib/esm/types/adapter-express/express-utils/content/httpContent.d.ts.map +1 -0
  67. package/lib/esm/types/adapter-express/express-utils/decorators.d.ts +24 -0
  68. package/lib/esm/types/adapter-express/express-utils/decorators.d.ts.map +1 -0
  69. package/lib/esm/types/adapter-express/express-utils/httpResponseMessage.d.ts +16 -0
  70. package/lib/esm/types/adapter-express/express-utils/httpResponseMessage.d.ts.map +1 -0
  71. package/lib/esm/types/adapter-express/express-utils/index.d.ts +2 -0
  72. package/lib/esm/types/adapter-express/express-utils/index.d.ts.map +1 -0
  73. package/lib/esm/types/adapter-express/express-utils/interfaces.d.ts +76 -0
  74. package/lib/esm/types/adapter-express/express-utils/interfaces.d.ts.map +1 -0
  75. package/lib/esm/types/adapter-express/express-utils/inversify-express-server.d.ts +60 -0
  76. package/lib/esm/types/adapter-express/express-utils/inversify-express-server.d.ts.map +1 -0
  77. package/lib/esm/types/adapter-express/express-utils/utils.d.ts +10 -0
  78. package/lib/esm/types/adapter-express/express-utils/utils.d.ts.map +1 -0
  79. package/lib/esm/types/adapter-express/index.d.ts +4 -0
  80. package/lib/esm/types/adapter-express/index.d.ts.map +1 -0
  81. package/lib/esm/types/index.d.ts +2 -0
  82. package/lib/esm/types/index.d.ts.map +1 -0
  83. package/lib/package.json +153 -0
  84. package/package.json +153 -0
@@ -0,0 +1,76 @@
1
+ import type { Application, NextFunction, Request, RequestHandler, Response } from "express";
2
+ import { interfaces as inversifyInterfaces } from "inversify";
3
+ import { HTTP_VERBS_ENUM, PARAMETER_TYPE } from "./constants";
4
+ import { HttpResponseMessage } from "./httpResponseMessage";
5
+ type Prototype<T> = {
6
+ [P in keyof T]: T[P] extends NewableFunction ? T[P] : T[P] | undefined;
7
+ } & {
8
+ constructor: NewableFunction;
9
+ };
10
+ interface ConstructorFunction<T = Record<string, unknown>> {
11
+ new (...args: Array<unknown>): T;
12
+ prototype: Prototype<T>;
13
+ }
14
+ export type DecoratorTarget<T = unknown> = ConstructorFunction<T> | Prototype<T>;
15
+ export type Middleware = string | symbol | RequestHandler;
16
+ export type ControllerHandler = (...params: Array<unknown>) => unknown;
17
+ export type BaseController = Record<string, ControllerHandler>;
18
+ export interface Controller {
19
+ }
20
+ export interface ControllerMetadata {
21
+ middleware: Array<Middleware>;
22
+ path: string;
23
+ target: DecoratorTarget;
24
+ }
25
+ export interface ControllerMethodMetadata extends ControllerMetadata {
26
+ key: string;
27
+ method: keyof typeof HTTP_VERBS_ENUM;
28
+ }
29
+ export interface ControllerParameterMetadata {
30
+ [methodName: string]: Array<ParameterMetadata>;
31
+ }
32
+ export interface ParameterMetadata {
33
+ index: number;
34
+ injectRoot: boolean;
35
+ parameterName?: string | undefined;
36
+ type: PARAMETER_TYPE;
37
+ }
38
+ export type ExtractedParameters = Array<ParameterMetadata> | [Request, Response, NextFunction] | Array<unknown>;
39
+ export type HandlerDecorator = (target: DecoratorTarget, key: string, value: unknown) => void;
40
+ export type ConfigFunction = (app: Application) => void;
41
+ export interface RoutingConfig {
42
+ rootPath: string;
43
+ }
44
+ export interface Principal<T = unknown> {
45
+ details: T;
46
+ isAuthenticated(): Promise<boolean>;
47
+ isInRole(role: string): Promise<boolean>;
48
+ isResourceOwner(resourceId: unknown): Promise<boolean>;
49
+ }
50
+ export interface AuthProvider {
51
+ getUser(req: Request, res: Response, next: NextFunction): Promise<Principal>;
52
+ }
53
+ export interface HttpContext<T = unknown> {
54
+ container: inversifyInterfaces.Container;
55
+ request: Request;
56
+ response: Response;
57
+ user: Principal<T>;
58
+ }
59
+ export interface IHttpActionResult {
60
+ executeAsync(): Promise<HttpResponseMessage>;
61
+ }
62
+ export interface RouteDetails {
63
+ args?: Array<string>;
64
+ route: string;
65
+ }
66
+ export interface RouteInfo {
67
+ controller: string;
68
+ endpoints: Array<RouteDetails>;
69
+ }
70
+ export interface RawMetadata {
71
+ controllerMetadata: ControllerMetadata;
72
+ methodMetadata: Array<ControllerMethodMetadata>;
73
+ parameterMetadata: ControllerParameterMetadata;
74
+ }
75
+ export {};
76
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../../src/adapter-express/express-utils/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5F,OAAO,EAAE,UAAU,IAAI,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,KAAK,SAAS,CAAC,CAAC,IAAI;KACjB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;CACvE,GAAG;IACF,WAAW,EAAE,eAAe,CAAC;CAC9B,CAAC;AAEF,UAAU,mBAAmB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvD,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;CACzB;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,OAAO,IAAI,mBAAmB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAEjF,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,cAAc,CAAC;AAE1D,MAAM,MAAM,iBAAiB,GAAG,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;AACvE,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAC/D,MAAM,WAAW,UAAU;CAAG;AAE9B,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,wBAAyB,SAAQ,kBAAkB;IAClE,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,OAAO,eAAe,CAAC;CACtC;AAED,MAAM,WAAW,2BAA2B;IAC1C,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,MAAM,mBAAmB,GAC3B,KAAK,CAAC,iBAAiB,CAAC,GACxB,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,GACjC,KAAK,CAAC,OAAO,CAAC,CAAC;AAEnB,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;AAE9F,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,OAAO;IACpC,OAAO,EAAE,CAAC,CAAC;IACX,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEzC,eAAe,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CAC9E;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,SAAS,EAAE,mBAAmB,CAAC,SAAS,CAAC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,WAAW;IAC1B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,cAAc,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAChD,iBAAiB,EAAE,2BAA2B,CAAC;CAChD"}
@@ -0,0 +1,60 @@
1
+ import express, { Application, Router } from "express";
2
+ import { interfaces } from "inversify";
3
+ import type { AuthProvider, ConfigFunction, RoutingConfig } from "./interfaces";
4
+ export declare class InversifyExpressServer {
5
+ private _router;
6
+ private _container;
7
+ private _app;
8
+ private _configFn;
9
+ private _errorConfigFn;
10
+ private _routingConfig;
11
+ private _AuthProvider;
12
+ private _forceControllers;
13
+ /**
14
+ * Wrapper for the express server.
15
+ *
16
+ * @param container Container loaded with all controllers and their dependencies.
17
+ * @param customRouter optional express.Router custom router
18
+ * @param routingConfig optional interfaces.RoutingConfig routing config
19
+ * @param customApp optional express.Application custom app
20
+ * @param authProvider optional interfaces.AuthProvider auth provider
21
+ * @param forceControllers optional boolean setting to force controllers (defaults do true)
22
+ */
23
+ constructor(container: interfaces.Container, customRouter?: Router | null, routingConfig?: RoutingConfig | null, customApp?: Application | null, authProvider?: (new () => AuthProvider) | null, forceControllers?: boolean);
24
+ /**
25
+ * Sets the configuration function to be applied to the application.
26
+ * Note that the config function is not actually executed until a call to
27
+ * InversifyExpresServer.build().
28
+ *
29
+ * This method is chainable.
30
+ *
31
+ * @param fn Function in which app-level middleware can be registered.
32
+ */
33
+ setConfig(fn: ConfigFunction): InversifyExpressServer;
34
+ /**
35
+ * Sets the error handler configuration function to be applied to the application.
36
+ * Note that the error config function is not actually executed until a call to
37
+ * InversifyExpressServer.build().
38
+ *
39
+ * This method is chainable.
40
+ *
41
+ * @param fn Function in which app-level error handlers can be registered.
42
+ */
43
+ setErrorConfig(fn: ConfigFunction): InversifyExpressServer;
44
+ /**
45
+ * Applies all routes and configuration to the server, returning the express application.
46
+ */
47
+ build(): express.Application;
48
+ private registerControllers;
49
+ private resolveMidleware;
50
+ private copyHeadersTo;
51
+ private handleHttpResponseMessage;
52
+ private handlerFactory;
53
+ private _getHttpContext;
54
+ private _createHttpContext;
55
+ private _getCurrentUser;
56
+ private extractParameters;
57
+ private getParam;
58
+ private _getPrincipal;
59
+ }
60
+ //# sourceMappingURL=inversify-express-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inversify-express-server.d.ts","sourceRoot":"","sources":["../../../../../src/adapter-express/express-utils/inversify-express-server.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,EAAE,EACd,WAAW,EAKX,MAAM,EACP,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAmBvC,OAAO,KAAK,EACV,YAAY,EAEZ,cAAc,EAQd,aAAa,EACd,MAAM,cAAc,CAAC;AAGtB,qBAAa,sBAAsB;IACjC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,iBAAiB,CAAU;IAEnC;;;;;;;;;OASG;gBAED,SAAS,EAAE,UAAU,CAAC,SAAS,EAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,EAC5B,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,EACpC,SAAS,CAAC,EAAE,WAAW,GAAG,IAAI,EAC9B,YAAY,CAAC,EAAE,CAAC,UAAU,YAAY,CAAC,GAAG,IAAI,EAC9C,gBAAgB,UAAO;IAezB;;;;;;;;OAQG;IACI,SAAS,CAAC,EAAE,EAAE,cAAc,GAAG,sBAAsB;IAK5D;;;;;;;;OAQG;IACI,cAAc,CAAC,EAAE,EAAE,cAAc,GAAG,sBAAsB;IAKjE;;OAEG;IACI,KAAK,IAAI,OAAO,CAAC,WAAW;IA2BnC,OAAO,CAAC,mBAAmB;IAqD3B,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,aAAa;YAQP,yBAAyB;IAmBvC,OAAO,CAAC,cAAc;IAqCtB,OAAO,CAAC,eAAe;YAIT,kBAAkB;YAgBlB,eAAe;IAiB7B,OAAO,CAAC,iBAAiB;IA+CzB,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,aAAa;CAGtB"}
@@ -0,0 +1,10 @@
1
+ import { interfaces } from "inversify";
2
+ import type { BaseController, ControllerMetadata, ControllerMethodMetadata, ControllerParameterMetadata, DecoratorTarget, IHttpActionResult } from "./interfaces";
3
+ export declare function getControllersFromContainer(container: interfaces.Container, forceControllers: boolean): Array<BaseController>;
4
+ export declare function getControllersFromMetadata(): Array<DecoratorTarget>;
5
+ export declare function getControllerMetadata(constructor: NewableFunction): ControllerMetadata;
6
+ export declare function getControllerMethodMetadata(constructor: NewableFunction): Array<ControllerMethodMetadata>;
7
+ export declare function getControllerParameterMetadata(constructor: NewableFunction): ControllerParameterMetadata;
8
+ export declare function cleanUpMetadata(): void;
9
+ export declare function instanceOfIHttpActionResult(value: unknown): value is IHttpActionResult;
10
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/adapter-express/express-utils/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,wBAAwB,EACxB,2BAA2B,EAC3B,eAAe,EACf,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAEtB,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,UAAU,CAAC,SAAS,EAC/B,gBAAgB,EAAE,OAAO,GACxB,KAAK,CAAC,cAAc,CAAC,CASvB;AAED,wBAAgB,0BAA0B,IAAI,KAAK,CAAC,eAAe,CAAC,CAInE;AAED,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,eAAe,GAAG,kBAAkB,CAMtF;AAED,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,eAAe,GAC3B,KAAK,CAAC,wBAAwB,CAAC,CAkBjC;AAED,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,eAAe,GAC3B,2BAA2B,CAkB7B;AAED,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAEtF"}
@@ -0,0 +1,4 @@
1
+ export * from "./express-utils";
2
+ export { AppExpress, ServerEnvironment } from "./application-express";
3
+ export { IApplicationExpress } from "./application-express.interface";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapter-express/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./adapter-express";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ServerEnvironment = exports.AppExpress = void 0;
13
+ const inversify_binding_decorators_1 = require("inversify-binding-decorators");
14
+ const process_1 = __importDefault(require("process"));
15
+ const core_1 = require("@expressots/core");
16
+ const inversify_express_server_1 = require("./express-utils/inversify-express-server");
17
+ /**
18
+ * Enum representing possible server environments.
19
+ */
20
+ var ServerEnvironment;
21
+ (function (ServerEnvironment) {
22
+ ServerEnvironment["Development"] = "development";
23
+ ServerEnvironment["Production"] = "production";
24
+ })(ServerEnvironment || (exports.ServerEnvironment = ServerEnvironment = {}));
25
+ /**
26
+ * The Application class provides a way to configure and manage an Express application.
27
+ * @provide Application
28
+ */
29
+ let ApplicationExpress = class ApplicationExpress extends core_1.ApplicationBase {
30
+ app;
31
+ port;
32
+ environment;
33
+ container;
34
+ middlewares = [];
35
+ configureServices() { }
36
+ postServerInitialization() { }
37
+ serverShutdown() { }
38
+ /**
39
+ * Handles process exit by calling serverShutdown and then exiting the process.
40
+ */
41
+ handleExit() {
42
+ this.serverShutdown();
43
+ process_1.default.exit(0);
44
+ }
45
+ /**
46
+ * Create and configure the Express application.
47
+ * @param container - The InversifyJS container.
48
+ * @param middlewares - An array of Express middlewares to be applied.
49
+ * @returns The configured Application instance.
50
+ */
51
+ async create(container, middlewares = []) {
52
+ this.container = container;
53
+ await Promise.resolve(this.configureServices());
54
+ const middleware = container.get(core_1.Middleware);
55
+ this.middlewares.push(...middlewares, ...middleware.getMiddlewares());
56
+ const expressServer = new inversify_express_server_1.InversifyExpressServer(container);
57
+ expressServer.setConfig((app) => {
58
+ this.middlewares.forEach((middleware) => {
59
+ app.use(middleware);
60
+ });
61
+ });
62
+ expressServer.setErrorConfig((app) => {
63
+ if (middleware.getErrorHandler()) {
64
+ app.use(middleware.getErrorHandler());
65
+ }
66
+ });
67
+ this.app = expressServer.build();
68
+ return this;
69
+ }
70
+ /**
71
+ * Start listening on the given port and environment.
72
+ * @param port - The port number to listen on.
73
+ * @param environment - The server environment.
74
+ * @param consoleMessage - Optional message to display in the console.
75
+ */
76
+ async listen(port, environment, consoleMessage) {
77
+ this.port = port;
78
+ this.environment = environment;
79
+ this.app.set("env", environment);
80
+ this.app.listen(this.port, () => {
81
+ const console = this.container.get(core_1.Console);
82
+ console.messageServer(this.port, this.environment, consoleMessage);
83
+ ["SIGTERM", "SIGHUP", "SIGBREAK", "SIGQUIT", "SIGINT"].forEach((signal) => {
84
+ process_1.default.on(signal, this.handleExit.bind(this));
85
+ });
86
+ });
87
+ await Promise.resolve(this.postServerInitialization());
88
+ }
89
+ /**
90
+ * Configures the application's view engine based on the provided configuration options.
91
+ *
92
+ * @public
93
+ * @method setEngine
94
+ * @template T - A generic type extending from RenderTemplateOptions.
95
+ *
96
+ * @param {T} options - An object of type T (must be an object that extends RenderTemplateOptions)
97
+ * that provides the configuration options for setting the view engine.
98
+ * This includes the extension name, view path, and the engine function itself.
99
+ */
100
+ setEngine(options) {
101
+ if ("extName" in options) {
102
+ const { extName, viewPath, engine } = options;
103
+ this.app.engine(extName, engine);
104
+ this.app.set("view engine", extName);
105
+ this.app.set("views", viewPath);
106
+ }
107
+ }
108
+ /**
109
+ * Verifies if the current environment is development.
110
+ *
111
+ * @returns A boolean value indicating whether the current environment is development or not.
112
+ */
113
+ isDevelopment() {
114
+ if (this.app) {
115
+ return this.app.get("env") === ServerEnvironment.Development;
116
+ }
117
+ this.container
118
+ .get(core_1.Logger)
119
+ .error("isDevelopment() method must be called on `PostServerInitialization`", "application");
120
+ return false;
121
+ }
122
+ /**
123
+ * Verifies if the current environment is production.
124
+ *
125
+ * @returns A boolean value indicating whether the current environment is production or not.
126
+ *
127
+ */
128
+ get ExpressApp() {
129
+ return this.app;
130
+ }
131
+ };
132
+ exports.AppExpress = ApplicationExpress;
133
+ exports.AppExpress = ApplicationExpress = __decorate([
134
+ (0, inversify_binding_decorators_1.provide)(ApplicationExpress)
135
+ ], ApplicationExpress);
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.BaseMiddleware = void 0;
10
+ const inversify_1 = require("inversify");
11
+ let BaseMiddleware = class BaseMiddleware {
12
+ // httpContext is initialized when the middleware is invoked
13
+ // see resolveMiddleware in server.ts for more details
14
+ httpContext;
15
+ bind(serviceIdentifier) {
16
+ return this.httpContext.container.bind(serviceIdentifier);
17
+ }
18
+ };
19
+ exports.BaseMiddleware = BaseMiddleware;
20
+ exports.BaseMiddleware = BaseMiddleware = __decorate([
21
+ (0, inversify_1.injectable)()
22
+ ], BaseMiddleware);
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_ROUTING_ROOT_PATH = exports.NO_CONTROLLERS_FOUND = exports.DUPLICATED_CONTROLLER_NAME = exports.HTTP_VERBS_ENUM = exports.PARAMETER_TYPE = exports.METADATA_KEY = exports.TYPE = void 0;
4
+ exports.TYPE = {
5
+ AuthProvider: Symbol.for("AuthProvider"),
6
+ Controller: Symbol.for("Controller"),
7
+ HttpContext: Symbol.for("HttpContext"),
8
+ };
9
+ exports.METADATA_KEY = {
10
+ controller: "inversify-express-utils:controller",
11
+ controllerMethod: "inversify-express-utils:controller-method",
12
+ controllerParameter: "inversify-express-utils:controller-parameter",
13
+ httpContext: "inversify-express-utils:httpcontext",
14
+ };
15
+ var PARAMETER_TYPE;
16
+ (function (PARAMETER_TYPE) {
17
+ PARAMETER_TYPE[PARAMETER_TYPE["REQUEST"] = 0] = "REQUEST";
18
+ PARAMETER_TYPE[PARAMETER_TYPE["RESPONSE"] = 1] = "RESPONSE";
19
+ PARAMETER_TYPE[PARAMETER_TYPE["PARAMS"] = 2] = "PARAMS";
20
+ PARAMETER_TYPE[PARAMETER_TYPE["QUERY"] = 3] = "QUERY";
21
+ PARAMETER_TYPE[PARAMETER_TYPE["BODY"] = 4] = "BODY";
22
+ PARAMETER_TYPE[PARAMETER_TYPE["HEADERS"] = 5] = "HEADERS";
23
+ PARAMETER_TYPE[PARAMETER_TYPE["COOKIES"] = 6] = "COOKIES";
24
+ PARAMETER_TYPE[PARAMETER_TYPE["NEXT"] = 7] = "NEXT";
25
+ PARAMETER_TYPE[PARAMETER_TYPE["PRINCIPAL"] = 8] = "PRINCIPAL";
26
+ })(PARAMETER_TYPE || (exports.PARAMETER_TYPE = PARAMETER_TYPE = {}));
27
+ var HTTP_VERBS_ENUM;
28
+ (function (HTTP_VERBS_ENUM) {
29
+ HTTP_VERBS_ENUM["all"] = "ALL";
30
+ HTTP_VERBS_ENUM["connect"] = "CONNECT";
31
+ HTTP_VERBS_ENUM["delete"] = "DELETE";
32
+ HTTP_VERBS_ENUM["get"] = "GET";
33
+ HTTP_VERBS_ENUM["head"] = "HEAD";
34
+ HTTP_VERBS_ENUM["options"] = "OPTIONS";
35
+ HTTP_VERBS_ENUM["patch"] = "PATCH";
36
+ HTTP_VERBS_ENUM["post"] = "POST";
37
+ HTTP_VERBS_ENUM["propfind"] = "PROPFIND";
38
+ HTTP_VERBS_ENUM["put"] = "PUT";
39
+ HTTP_VERBS_ENUM["trace"] = "TRACE";
40
+ })(HTTP_VERBS_ENUM || (exports.HTTP_VERBS_ENUM = HTTP_VERBS_ENUM = {}));
41
+ const DUPLICATED_CONTROLLER_NAME = (name) => `Two controllers cannot have the same name: ${name}`;
42
+ exports.DUPLICATED_CONTROLLER_NAME = DUPLICATED_CONTROLLER_NAME;
43
+ exports.NO_CONTROLLERS_FOUND = "No controllers" +
44
+ "have been found! Please ensure that you have register" +
45
+ "at least one Controller.";
46
+ exports.DEFAULT_ROUTING_ROOT_PATH = "/";
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpContent = void 0;
4
+ class HttpContent {
5
+ _headers = {};
6
+ get headers() {
7
+ return this._headers;
8
+ }
9
+ }
10
+ exports.HttpContent = HttpContent;
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.params = exports.Principal = exports.next = exports.cookies = exports.headers = exports.body = exports.query = exports.param = exports.response = exports.request = exports.httpMethod = exports.Delete = exports.Head = exports.Patch = exports.Put = exports.Post = exports.Get = exports.all = exports.controller = exports.injectHttpContext = void 0;
4
+ require("reflect-metadata");
5
+ const inversify_1 = require("inversify");
6
+ const constants_1 = require("./constants");
7
+ exports.injectHttpContext = (0, inversify_1.inject)(constants_1.TYPE.HttpContext);
8
+ function controller(path, ...middleware) {
9
+ return (target) => {
10
+ const currentMetadata = {
11
+ middleware,
12
+ path,
13
+ target,
14
+ };
15
+ (0, inversify_1.decorate)((0, inversify_1.injectable)(), target);
16
+ Reflect.defineMetadata(constants_1.METADATA_KEY.controller, currentMetadata, target);
17
+ const previousMetadata = Reflect.getMetadata(constants_1.METADATA_KEY.controller, Reflect) || [];
18
+ const newMetadata = [currentMetadata, ...previousMetadata];
19
+ Reflect.defineMetadata(constants_1.METADATA_KEY.controller, newMetadata, Reflect);
20
+ };
21
+ }
22
+ exports.controller = controller;
23
+ function all(path, ...middleware) {
24
+ return httpMethod("all", path, ...middleware);
25
+ }
26
+ exports.all = all;
27
+ function Get(path, ...middleware) {
28
+ return httpMethod("get", path, ...middleware);
29
+ }
30
+ exports.Get = Get;
31
+ function Post(path, ...middleware) {
32
+ return httpMethod("post", path, ...middleware);
33
+ }
34
+ exports.Post = Post;
35
+ function Put(path, ...middleware) {
36
+ return httpMethod("put", path, ...middleware);
37
+ }
38
+ exports.Put = Put;
39
+ function Patch(path, ...middleware) {
40
+ return httpMethod("patch", path, ...middleware);
41
+ }
42
+ exports.Patch = Patch;
43
+ function Head(path, ...middleware) {
44
+ return httpMethod("head", path, ...middleware);
45
+ }
46
+ exports.Head = Head;
47
+ function Delete(path, ...middleware) {
48
+ return httpMethod("delete", path, ...middleware);
49
+ }
50
+ exports.Delete = Delete;
51
+ function httpMethod(method, path, ...middleware) {
52
+ return (target, key) => {
53
+ const metadata = {
54
+ key,
55
+ method,
56
+ middleware,
57
+ path,
58
+ target,
59
+ };
60
+ let metadataList = [];
61
+ if (!Reflect.hasOwnMetadata(constants_1.METADATA_KEY.controllerMethod, target.constructor)) {
62
+ Reflect.defineMetadata(constants_1.METADATA_KEY.controllerMethod, metadataList, target.constructor);
63
+ }
64
+ else {
65
+ metadataList = Reflect.getOwnMetadata(constants_1.METADATA_KEY.controllerMethod, target.constructor);
66
+ }
67
+ metadataList.push(metadata);
68
+ };
69
+ }
70
+ exports.httpMethod = httpMethod;
71
+ /*
72
+ * Parameter Decorators
73
+ */
74
+ exports.request = paramDecoratorFactory(constants_1.PARAMETER_TYPE.REQUEST);
75
+ exports.response = paramDecoratorFactory(constants_1.PARAMETER_TYPE.RESPONSE);
76
+ exports.param = paramDecoratorFactory(constants_1.PARAMETER_TYPE.PARAMS);
77
+ exports.query = paramDecoratorFactory(constants_1.PARAMETER_TYPE.QUERY);
78
+ exports.body = paramDecoratorFactory(constants_1.PARAMETER_TYPE.BODY);
79
+ exports.headers = paramDecoratorFactory(constants_1.PARAMETER_TYPE.HEADERS);
80
+ exports.cookies = paramDecoratorFactory(constants_1.PARAMETER_TYPE.COOKIES);
81
+ exports.next = paramDecoratorFactory(constants_1.PARAMETER_TYPE.NEXT);
82
+ exports.Principal = paramDecoratorFactory(constants_1.PARAMETER_TYPE.PRINCIPAL);
83
+ function paramDecoratorFactory(parameterType) {
84
+ return (name) => params(parameterType, name);
85
+ }
86
+ function params(type, parameterName) {
87
+ return (target, methodName, index) => {
88
+ let metadataList = {};
89
+ let parameterMetadataList = [];
90
+ const parameterMetadata = {
91
+ index,
92
+ injectRoot: parameterName === undefined,
93
+ parameterName,
94
+ type,
95
+ };
96
+ if (!Reflect.hasOwnMetadata(constants_1.METADATA_KEY.controllerParameter, target.constructor)) {
97
+ parameterMetadataList.unshift(parameterMetadata);
98
+ }
99
+ else {
100
+ metadataList = Reflect.getOwnMetadata(constants_1.METADATA_KEY.controllerParameter, target.constructor);
101
+ if (metadataList[methodName]) {
102
+ parameterMetadataList = metadataList[methodName] || [];
103
+ }
104
+ parameterMetadataList.unshift(parameterMetadata);
105
+ }
106
+ metadataList[methodName] = parameterMetadataList;
107
+ Reflect.defineMetadata(constants_1.METADATA_KEY.controllerParameter, metadataList, target.constructor);
108
+ };
109
+ }
110
+ exports.params = params;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpResponseMessage = void 0;
4
+ class HttpResponseMessage {
5
+ _content;
6
+ _headers = {};
7
+ get headers() {
8
+ return this._headers;
9
+ }
10
+ set headers(headers) {
11
+ this._headers = headers;
12
+ }
13
+ get content() {
14
+ return this._content;
15
+ }
16
+ set content(value) {
17
+ this._content = value;
18
+ }
19
+ _statusCode;
20
+ get statusCode() {
21
+ return this._statusCode;
22
+ }
23
+ set statusCode(code) {
24
+ if (code < 0 || code > 999) {
25
+ throw new Error(`${code} is not a valid status code`);
26
+ }
27
+ this._statusCode = code;
28
+ }
29
+ constructor(statusCode = 200) {
30
+ this.statusCode = statusCode;
31
+ }
32
+ }
33
+ exports.HttpResponseMessage = HttpResponseMessage;
@@ -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("./decorators"), exports);
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });