@athenna/http 3.0.11 → 3.1.1

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 (151) hide show
  1. package/build/Commands/MakeControllerCommand.d.ts +15 -0
  2. package/build/Commands/MakeControllerCommand.js +42 -0
  3. package/build/Commands/MakeInterceptorCommand.d.ts +15 -0
  4. package/build/Commands/MakeInterceptorCommand.js +42 -0
  5. package/build/Commands/MakeMiddlewareCommand.d.ts +15 -0
  6. package/build/Commands/MakeMiddlewareCommand.js +42 -0
  7. package/build/Commands/MakeTerminatorCommand.d.ts +15 -0
  8. package/build/Commands/MakeTerminatorCommand.js +42 -0
  9. package/build/Commands/RouteListCommand.d.ts +15 -0
  10. package/build/Commands/RouteListCommand.js +45 -0
  11. package/build/Context/Request.d.ts +144 -0
  12. package/build/Context/Request.js +219 -0
  13. package/build/Context/Response.d.ts +67 -0
  14. package/build/Context/Response.js +102 -0
  15. package/build/Contracts/InterceptorContract.d.ts +15 -0
  16. package/build/Contracts/InterceptorContract.js +9 -0
  17. package/build/Contracts/MiddlewareContract.d.ts +15 -0
  18. package/build/Contracts/MiddlewareContract.js +9 -0
  19. package/build/Contracts/TerminatorContract.d.ts +15 -0
  20. package/build/Contracts/TerminatorContract.js +9 -0
  21. package/build/Decorators/Controller.d.ts +14 -0
  22. package/build/Decorators/Controller.js +28 -0
  23. package/build/Decorators/Interceptor.d.ts +14 -0
  24. package/build/Decorators/Interceptor.js +37 -0
  25. package/build/Decorators/Middleware.d.ts +14 -0
  26. package/build/Decorators/Middleware.js +37 -0
  27. package/build/Decorators/Terminator.d.ts +14 -0
  28. package/build/Decorators/Terminator.js +37 -0
  29. package/build/Exceptions/BadGatewayException.d.ts +20 -0
  30. package/build/Exceptions/BadGatewayException.js +22 -0
  31. package/build/Exceptions/BadRequestException.d.ts +20 -0
  32. package/build/Exceptions/BadRequestException.js +22 -0
  33. package/build/Exceptions/ForbiddenException.d.ts +20 -0
  34. package/build/Exceptions/ForbiddenException.js +22 -0
  35. package/build/Exceptions/HttpException.d.ts +20 -0
  36. package/build/Exceptions/HttpException.js +27 -0
  37. package/build/Exceptions/InternalServerException.d.ts +20 -0
  38. package/build/Exceptions/InternalServerException.js +22 -0
  39. package/build/Exceptions/MethodNotAllowedException.d.ts +20 -0
  40. package/build/Exceptions/MethodNotAllowedException.js +22 -0
  41. package/build/Exceptions/NotAcceptableException.d.ts +20 -0
  42. package/build/Exceptions/NotAcceptableException.js +22 -0
  43. package/build/Exceptions/NotFoundException.d.ts +20 -0
  44. package/build/Exceptions/NotFoundException.js +22 -0
  45. package/build/Exceptions/NotImplementedException.d.ts +20 -0
  46. package/build/Exceptions/NotImplementedException.js +22 -0
  47. package/build/Exceptions/PayloadTooLargeException.d.ts +20 -0
  48. package/build/Exceptions/PayloadTooLargeException.js +22 -0
  49. package/build/Exceptions/RequestTimeoutException.d.ts +20 -0
  50. package/build/Exceptions/RequestTimeoutException.js +22 -0
  51. package/build/Exceptions/ServiceUnavailableException.d.ts +20 -0
  52. package/build/Exceptions/ServiceUnavailableException.js +22 -0
  53. package/build/Exceptions/UnauthorizedException.d.ts +20 -0
  54. package/build/Exceptions/UnauthorizedException.js +22 -0
  55. package/build/Exceptions/UndefinedMethodException.d.ts +12 -0
  56. package/build/Exceptions/UndefinedMethodException.js +19 -0
  57. package/build/Exceptions/UnprocessableEntityException.d.ts +20 -0
  58. package/build/Exceptions/UnprocessableEntityException.js +22 -0
  59. package/build/Facades/Route.d.ts +10 -0
  60. package/{src → build}/Facades/Route.js +2 -7
  61. package/build/Facades/Server.d.ts +10 -0
  62. package/{src → build}/Facades/Server.js +2 -7
  63. package/build/Handlers/FastifyHandler.d.ts +41 -0
  64. package/build/Handlers/FastifyHandler.js +116 -0
  65. package/build/Handlers/HttpExceptionHandler.d.ts +27 -0
  66. package/build/Handlers/HttpExceptionHandler.js +67 -0
  67. package/build/Kernels/HttpKernel.d.ts +73 -0
  68. package/build/Kernels/HttpKernel.js +217 -0
  69. package/build/Providers/HttpRouteProvider.d.ts +12 -0
  70. package/build/Providers/HttpRouteProvider.js +15 -0
  71. package/build/Providers/HttpServerProvider.d.ts +13 -0
  72. package/build/Providers/HttpServerProvider.js +25 -0
  73. package/build/Router/Route.d.ts +263 -0
  74. package/build/Router/Route.js +447 -0
  75. package/build/Router/RouteGroup.d.ts +96 -0
  76. package/build/Router/RouteGroup.js +123 -0
  77. package/build/Router/RouteResource.d.ts +108 -0
  78. package/build/Router/RouteResource.js +158 -0
  79. package/build/Router/Router.d.ts +103 -0
  80. package/build/Router/Router.js +188 -0
  81. package/build/Server/ServerImpl.d.ts +129 -0
  82. package/build/Server/ServerImpl.js +213 -0
  83. package/build/Types/Contexts/Context.d.ts +20 -0
  84. package/build/Types/Contexts/Context.js +9 -0
  85. package/build/Types/Contexts/ErrorContext.d.ts +21 -0
  86. package/build/Types/Contexts/ErrorContext.js +9 -0
  87. package/build/Types/Contexts/InterceptContext.d.ts +20 -0
  88. package/build/Types/Contexts/InterceptContext.js +9 -0
  89. package/build/Types/Contexts/TerminateContext.d.ts +21 -0
  90. package/build/Types/Contexts/TerminateContext.js +9 -0
  91. package/build/Types/Controllers/ControllerOptions.d.ts +25 -0
  92. package/build/Types/Controllers/ControllerOptions.js +9 -0
  93. package/build/Types/Middlewares/InterceptorRouteType.d.ts +11 -0
  94. package/build/Types/Middlewares/InterceptorRouteType.js +9 -0
  95. package/build/Types/Middlewares/MiddlewareHandler.d.ts +20 -0
  96. package/build/Types/Middlewares/MiddlewareHandler.js +9 -0
  97. package/build/Types/Middlewares/MiddlewareOptions.d.ts +40 -0
  98. package/build/Types/Middlewares/MiddlewareOptions.js +9 -0
  99. package/build/Types/Middlewares/MiddlewareRouteType.d.ts +11 -0
  100. package/build/Types/Middlewares/MiddlewareRouteType.js +9 -0
  101. package/build/Types/Middlewares/TerminatorRouteType.d.ts +11 -0
  102. package/build/Types/Middlewares/TerminatorRouteType.js +9 -0
  103. package/build/Types/Router/RouteHandler.d.ts +10 -0
  104. package/build/Types/Router/RouteHandler.js +9 -0
  105. package/build/Types/Router/RouteJSON.d.ts +21 -0
  106. package/build/Types/Router/RouteJSON.js +9 -0
  107. package/build/Types/Router/RouteResourceTypes.d.ts +9 -0
  108. package/build/Types/Router/RouteResourceTypes.js +9 -0
  109. package/build/index.d.ts +70 -0
  110. package/build/index.js +48 -0
  111. package/package.json +169 -77
  112. package/templates/controller.edge +8 -36
  113. package/templates/interceptor.edge +8 -0
  114. package/templates/middleware.edge +4 -36
  115. package/templates/terminator.edge +6 -0
  116. package/src/Commands/Make/Controller.js +0 -64
  117. package/src/Commands/Make/Middleware.js +0 -80
  118. package/src/Commands/Route/List.js +0 -107
  119. package/src/Context/Request.js +0 -268
  120. package/src/Context/Response.js +0 -173
  121. package/src/Exceptions/BadGatewayException.js +0 -31
  122. package/src/Exceptions/BadRequestException.js +0 -31
  123. package/src/Exceptions/ForbiddenException.js +0 -31
  124. package/src/Exceptions/HttpException.js +0 -33
  125. package/src/Exceptions/InternalServerException.js +0 -31
  126. package/src/Exceptions/MethodNotAllowedException.js +0 -31
  127. package/src/Exceptions/NotAcceptableException.js +0 -31
  128. package/src/Exceptions/NotFoundException.js +0 -31
  129. package/src/Exceptions/NotImplementedException.js +0 -31
  130. package/src/Exceptions/PayloadTooLargeException.js +0 -31
  131. package/src/Exceptions/RequestTimeoutException.js +0 -31
  132. package/src/Exceptions/ServiceUnavailableException.js +0 -31
  133. package/src/Exceptions/UnauthorizedException.js +0 -31
  134. package/src/Exceptions/UndefinedMethodException.js +0 -30
  135. package/src/Exceptions/UnprocessableEntityException.js +0 -31
  136. package/src/Handlers/FastifyHandler.js +0 -148
  137. package/src/Handlers/HttpExceptionHandler.js +0 -88
  138. package/src/Helpers/HttpLoader.js +0 -38
  139. package/src/Kernels/HttpKernel.js +0 -199
  140. package/src/Providers/ControllerProvider.js +0 -29
  141. package/src/Providers/HttpRouteProvider.js +0 -24
  142. package/src/Providers/HttpServerProvider.js +0 -37
  143. package/src/Providers/MiddlewareProvider.js +0 -29
  144. package/src/Router/Route.js +0 -411
  145. package/src/Router/RouteGroup.js +0 -119
  146. package/src/Router/RouteResource.js +0 -247
  147. package/src/Router/Router.js +0 -313
  148. package/src/Utils/isMiddlewareContract.js +0 -17
  149. package/src/Utils/removeSlashes.js +0 -30
  150. package/src/index.d.ts +0 -1395
  151. package/src/index.js +0 -377
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @athenna/http
3
+ *
4
+ * (c) João Lenon <lenon@athenna.io>
5
+ *
6
+ * For the full copyright and license information, please view the LICENSE
7
+ * file that was distributed with this source code.
8
+ */
9
+ import { ErrorContext } from '#src';
10
+ export declare class HttpExceptionHandler {
11
+ /**
12
+ * Error codes that should be ignored from logging.
13
+ */
14
+ get ignoreCodes(): string[];
15
+ /**
16
+ * Error statuses that should be ignored from logging.
17
+ */
18
+ get ignoreStatuses(): number[];
19
+ /**
20
+ * The exception handler of all request handlers.
21
+ */
22
+ handle({ error, response }: ErrorContext): Promise<void>;
23
+ /**
24
+ * Return a boolean indicating if the error can be logged or not.
25
+ */
26
+ private canBeLogged;
27
+ }
@@ -0,0 +1,67 @@
1
+ /**
2
+ * @athenna/http
3
+ *
4
+ * (c) João Lenon <lenon@athenna.io>
5
+ *
6
+ * For the full copyright and license information, please view the LICENSE
7
+ * file that was distributed with this source code.
8
+ */
9
+ import { Log } from '@athenna/logger';
10
+ import { Is, String } from '@athenna/common';
11
+ export class HttpExceptionHandler {
12
+ /**
13
+ * Error codes that should be ignored from logging.
14
+ */
15
+ get ignoreCodes() {
16
+ return [];
17
+ }
18
+ /**
19
+ * Error statuses that should be ignored from logging.
20
+ */
21
+ get ignoreStatuses() {
22
+ return [];
23
+ }
24
+ /**
25
+ * The exception handler of all request handlers.
26
+ */
27
+ async handle({ error, response }) {
28
+ const body = {
29
+ statusCode: error.statusCode || error.status || 500,
30
+ code: String.toSnakeCase(error.code || error.name).toUpperCase(),
31
+ name: error.name,
32
+ message: error.message,
33
+ stack: error.stack,
34
+ };
35
+ if (error.help) {
36
+ body.help = error.help;
37
+ }
38
+ const isInternalServerError = Is.Error(error) && !Is.Exception(error);
39
+ const isDebugMode = Config.is('app.debug', true);
40
+ if (isInternalServerError && !isDebugMode) {
41
+ body.code = 'E_INTERNAL_SERVER';
42
+ body.name = 'InternalServerException';
43
+ body.message = 'An internal server exception has occurred.';
44
+ delete body.stack;
45
+ }
46
+ response.status(body.statusCode).send(body);
47
+ if (!this.canBeLogged(error)) {
48
+ return;
49
+ }
50
+ if (!Is.Exception(error)) {
51
+ error = error.toAthennaException();
52
+ }
53
+ Log.channelOrVanilla('exception').error(await error.prettify());
54
+ }
55
+ /**
56
+ * Return a boolean indicating if the error can be logged or not.
57
+ */
58
+ canBeLogged(error) {
59
+ if (this.ignoreCodes.includes(error.code)) {
60
+ return false;
61
+ }
62
+ if (this.ignoreStatuses.includes(error.status || error.statusCode)) {
63
+ return false;
64
+ }
65
+ return true;
66
+ }
67
+ }
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @athenna/http
3
+ *
4
+ * (c) João Lenon <lenon@athenna.io>
5
+ *
6
+ * For the full copyright and license information, please view the LICENSE
7
+ * file that was distributed with this source code.
8
+ */
9
+ import 'reflect-metadata';
10
+ export declare class HttpKernel {
11
+ /**
12
+ * Register the @fastify/cors plugin in the Http server.
13
+ */
14
+ registerCors(): Promise<void>;
15
+ /**
16
+ * Register the @fastify/helmet plugin in the Http server.
17
+ */
18
+ registerHelmet(): Promise<void>;
19
+ /**
20
+ * Register the @fastify/swagger plugin in the Http server.
21
+ */
22
+ registerSwagger(): Promise<void>;
23
+ /**
24
+ * Register the @fastify/rate-limit plugin in the Http server.
25
+ */
26
+ registerRateLimit(): Promise<void>;
27
+ /**
28
+ * Register the cls-rtracer plugin in the Http server.
29
+ */
30
+ registerRTracer(): Promise<void>;
31
+ /**
32
+ * Register the global log terminator in the Http server.
33
+ */
34
+ registerLoggerTerminator(): Promise<void>;
35
+ /**
36
+ * Register all the controllers found inside "rc.controllers" config
37
+ * inside the service provider.
38
+ */
39
+ registerControllers(): Promise<void>;
40
+ /**
41
+ * Register all the middlewares found inside "rc.middlewares" config
42
+ * inside the service provider. Also register if "rc.namedMiddlewares"
43
+ * and "rc.globalMiddlewares" exists.
44
+ */
45
+ registerMiddlewares(): Promise<void>;
46
+ /**
47
+ * Register all the named middlewares found inside "rc.namedMiddlewares"
48
+ * property.
49
+ */
50
+ registerNamedMiddlewares(): Promise<void>;
51
+ /**
52
+ * Register all the named middlewares found inside "rc.globalMiddlewares"
53
+ * property.
54
+ */
55
+ registerGlobalMiddlewares(): Promise<void>;
56
+ /**
57
+ * Register the exception handler for all request handlers.
58
+ */
59
+ registerExceptionHandler(path?: string): Promise<void>;
60
+ /**
61
+ * Fabricate the named middlewares aliases.
62
+ */
63
+ private getNamedMiddlewareAlias;
64
+ /**
65
+ * Fabricate the global middlewares alias and resolve the handler and
66
+ * server methods.
67
+ */
68
+ private getGlobalMiddlewareAliasAndHandler;
69
+ /**
70
+ * Resolve the import path by meta URL and import it.
71
+ */
72
+ private resolvePath;
73
+ }
@@ -0,0 +1,217 @@
1
+ /**
2
+ * @athenna/http
3
+ *
4
+ * (c) João Lenon <lenon@athenna.io>
5
+ *
6
+ * For the full copyright and license information, please view the LICENSE
7
+ * file that was distributed with this source code.
8
+ */
9
+ import 'reflect-metadata';
10
+ import { Server } from '#src';
11
+ import { Log } from '@athenna/logger';
12
+ import { Config } from '@athenna/config';
13
+ import { Exec, Is, Module } from '@athenna/common';
14
+ import { HttpExceptionHandler } from '#src/Handlers/HttpExceptionHandler';
15
+ const corsPlugin = await Module.safeImport('@fastify/cors');
16
+ const helmetPlugin = await Module.safeImport('@fastify/helmet');
17
+ const swaggerPlugin = await Module.safeImport('@fastify/swagger');
18
+ const swaggerUiPlugin = await Module.safeImport('@fastify/swagger-ui');
19
+ const rateLimitPlugin = await Module.safeImport('@fastify/rate-limit');
20
+ const rTracerPlugin = await Module.safeImport('cls-rtracer');
21
+ export class HttpKernel {
22
+ /**
23
+ * Register the @fastify/cors plugin in the Http server.
24
+ */
25
+ async registerCors() {
26
+ if (!corsPlugin) {
27
+ return;
28
+ }
29
+ await Server.plugin(corsPlugin, Config.get('http.cors'));
30
+ }
31
+ /**
32
+ * Register the @fastify/helmet plugin in the Http server.
33
+ */
34
+ async registerHelmet() {
35
+ if (!helmetPlugin) {
36
+ return;
37
+ }
38
+ await Server.plugin(helmetPlugin, Config.get('http.helmet'));
39
+ }
40
+ /**
41
+ * Register the @fastify/swagger plugin in the Http server.
42
+ */
43
+ async registerSwagger() {
44
+ if (swaggerPlugin) {
45
+ await Server.plugin(swaggerPlugin, Config.get('http.swagger.configurations'));
46
+ }
47
+ if (swaggerUiPlugin) {
48
+ await Server.plugin(swaggerUiPlugin, Config.get('http.swagger.ui'));
49
+ }
50
+ }
51
+ /**
52
+ * Register the @fastify/rate-limit plugin in the Http server.
53
+ */
54
+ async registerRateLimit() {
55
+ if (!rateLimitPlugin) {
56
+ return;
57
+ }
58
+ await Server.plugin(rateLimitPlugin, Config.get('http.rateLimit'));
59
+ }
60
+ /**
61
+ * Register the cls-rtracer plugin in the Http server.
62
+ */
63
+ async registerRTracer() {
64
+ if (!rTracerPlugin) {
65
+ return;
66
+ }
67
+ Server.middleware(async (ctx) => (ctx.data.traceId = rTracerPlugin.id()));
68
+ await Server.plugin(rTracerPlugin.fastifyPlugin, Config.get('http.rTracer'));
69
+ }
70
+ /**
71
+ * Register the global log terminator in the Http server.
72
+ */
73
+ async registerLoggerTerminator() {
74
+ if (!Config.exists('http.logger') || Config.is('http.logger', false)) {
75
+ return;
76
+ }
77
+ Server.terminate(ctx => Log.channelOrVanilla('request').info(ctx));
78
+ }
79
+ /**
80
+ * Register all the controllers found inside "rc.controllers" config
81
+ * inside the service provider.
82
+ */
83
+ async registerControllers() {
84
+ const controllers = Config.get('rc.controllers', []);
85
+ await Exec.concurrently(controllers, async (path) => {
86
+ const Controller = await this.resolvePath(path);
87
+ if (Reflect.hasMetadata('provider:registered', Controller)) {
88
+ return;
89
+ }
90
+ const createCamelAlias = false;
91
+ const alias = `App/Http/Controllers/${Controller.name}`;
92
+ ioc.bind(alias, Controller, createCamelAlias);
93
+ });
94
+ }
95
+ /**
96
+ * Register all the middlewares found inside "rc.middlewares" config
97
+ * inside the service provider. Also register if "rc.namedMiddlewares"
98
+ * and "rc.globalMiddlewares" exists.
99
+ */
100
+ async registerMiddlewares() {
101
+ await this.registerNamedMiddlewares();
102
+ await this.registerGlobalMiddlewares();
103
+ if (Config.exists('rc.middlewares')) {
104
+ await Exec.concurrently(Config.get('rc.middlewares'), this.resolvePath);
105
+ }
106
+ }
107
+ /**
108
+ * Register all the named middlewares found inside "rc.namedMiddlewares"
109
+ * property.
110
+ */
111
+ async registerNamedMiddlewares() {
112
+ const namedMiddlewares = Config.get('rc.namedMiddlewares');
113
+ if (Is.Empty(namedMiddlewares)) {
114
+ return;
115
+ }
116
+ await Exec.concurrently(Object.keys(namedMiddlewares), async (key) => {
117
+ const Middleware = await this.resolvePath(namedMiddlewares[key]);
118
+ if (Reflect.hasMetadata('provider:registered', Middleware)) {
119
+ return;
120
+ }
121
+ const createCamelAlias = false;
122
+ const { alias, namedAlias } = this.getNamedMiddlewareAlias(key, Middleware);
123
+ ioc.bind(alias, Middleware, createCamelAlias).alias(namedAlias, alias);
124
+ });
125
+ }
126
+ /**
127
+ * Register all the named middlewares found inside "rc.globalMiddlewares"
128
+ * property.
129
+ */
130
+ async registerGlobalMiddlewares() {
131
+ const globalMiddlewares = Config.get('rc.globalMiddlewares');
132
+ if (Is.Empty(globalMiddlewares)) {
133
+ return;
134
+ }
135
+ await Exec.concurrently(globalMiddlewares, async (path) => {
136
+ const Middleware = await this.resolvePath(path);
137
+ if (Reflect.hasMetadata('provider:registered', Middleware)) {
138
+ return;
139
+ }
140
+ const createCamelAlias = false;
141
+ const { alias, handler, serverMethod } = this.getGlobalMiddlewareAliasAndHandler(Middleware);
142
+ ioc.bind(alias, Middleware, createCamelAlias);
143
+ Server[serverMethod](ioc.safeUse(alias)[handler]);
144
+ });
145
+ }
146
+ /**
147
+ * Register the exception handler for all request handlers.
148
+ */
149
+ async registerExceptionHandler(path) {
150
+ if (!path) {
151
+ const handler = new HttpExceptionHandler();
152
+ Server.setErrorHandler(handler.handle.bind(handler));
153
+ return;
154
+ }
155
+ const Handler = await this.resolvePath(path);
156
+ const handler = new Handler();
157
+ Server.setErrorHandler(handler.handle.bind(handler));
158
+ }
159
+ /**
160
+ * Fabricate the named middlewares aliases.
161
+ */
162
+ getNamedMiddlewareAlias(name, Middleware) {
163
+ const middleware = new Middleware();
164
+ if (middleware.handle) {
165
+ return {
166
+ alias: `App/Http/Middlewares/${Middleware.name}`,
167
+ namedAlias: `App/Http/Middlewares/Names/${name}`,
168
+ };
169
+ }
170
+ if (middleware.intercept) {
171
+ return {
172
+ alias: `App/Http/Interceptors/${Middleware.name}`,
173
+ namedAlias: `App/Http/Interceptors/Names/${name}`,
174
+ };
175
+ }
176
+ if (middleware.terminate) {
177
+ return {
178
+ alias: `App/Http/Terminators/${Middleware.name}`,
179
+ namedAlias: `App/Http/Terminators/Names/${name}`,
180
+ };
181
+ }
182
+ }
183
+ /**
184
+ * Fabricate the global middlewares alias and resolve the handler and
185
+ * server methods.
186
+ */
187
+ getGlobalMiddlewareAliasAndHandler(Middleware) {
188
+ const middleware = new Middleware();
189
+ if (middleware.handle) {
190
+ return {
191
+ handler: 'handle',
192
+ serverMethod: 'middleware',
193
+ alias: `App/Http/Middlewares/${Middleware.name}`,
194
+ };
195
+ }
196
+ if (middleware.intercept) {
197
+ return {
198
+ handler: 'intercept',
199
+ serverMethod: 'intercept',
200
+ alias: `App/Http/Interceptors/${Middleware.name}`,
201
+ };
202
+ }
203
+ if (middleware.terminate) {
204
+ return {
205
+ handler: 'terminate',
206
+ serverMethod: 'terminate',
207
+ alias: `App/Http/Terminators/${Middleware.name}`,
208
+ };
209
+ }
210
+ }
211
+ /**
212
+ * Resolve the import path by meta URL and import it.
213
+ */
214
+ resolvePath(path) {
215
+ return Module.resolve(`${path}?version=${Math.random()}`, Config.get('rc.meta'));
216
+ }
217
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @athenna/http
3
+ *
4
+ * (c) João Lenon <lenon@athenna.io>
5
+ *
6
+ * For the full copyright and license information, please view the LICENSE
7
+ * file that was distributed with this source code.
8
+ */
9
+ import { ServiceProvider } from '@athenna/ioc';
10
+ export declare class HttpRouteProvider extends ServiceProvider {
11
+ register(): void;
12
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @athenna/http
3
+ *
4
+ * (c) João Lenon <lenon@athenna.io>
5
+ *
6
+ * For the full copyright and license information, please view the LICENSE
7
+ * file that was distributed with this source code.
8
+ */
9
+ import { Router } from '#src/Router/Router';
10
+ import { ServiceProvider } from '@athenna/ioc';
11
+ export class HttpRouteProvider extends ServiceProvider {
12
+ register() {
13
+ this.container.instance('Athenna/Core/HttpRoute', new Router(), false);
14
+ }
15
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @athenna/http
3
+ *
4
+ * (c) João Lenon <lenon@athenna.io>
5
+ *
6
+ * For the full copyright and license information, please view the LICENSE
7
+ * file that was distributed with this source code.
8
+ */
9
+ import { ServiceProvider } from '@athenna/ioc';
10
+ export declare class HttpServerProvider extends ServiceProvider {
11
+ register(): void;
12
+ shutdown(): Promise<void>;
13
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @athenna/http
3
+ *
4
+ * (c) João Lenon <lenon@athenna.io>
5
+ *
6
+ * For the full copyright and license information, please view the LICENSE
7
+ * file that was distributed with this source code.
8
+ */
9
+ import { ServerImpl } from '#src/Server/ServerImpl';
10
+ import { ServiceProvider } from '@athenna/ioc';
11
+ export class HttpServerProvider extends ServiceProvider {
12
+ register() {
13
+ this.container.instance('Athenna/Core/HttpServer', new ServerImpl(), false);
14
+ }
15
+ async shutdown() {
16
+ const Server = this.container.use('Athenna/Core/HttpServer');
17
+ if (!Server) {
18
+ return;
19
+ }
20
+ if (!Server.isListening) {
21
+ return;
22
+ }
23
+ await Server.close();
24
+ }
25
+ }