@deepkit/http 1.0.1-alpha.100

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 (121) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +13 -0
  3. package/dist/.gitkeep +0 -0
  4. package/dist/cjs/index.d.ts +14 -0
  5. package/dist/cjs/index.js +31 -0
  6. package/dist/cjs/index.js.map +1 -0
  7. package/dist/cjs/src/controllers.d.ts +13 -0
  8. package/dist/cjs/src/controllers.js +17 -0
  9. package/dist/cjs/src/controllers.js.map +1 -0
  10. package/dist/cjs/src/decorator.d.ts +241 -0
  11. package/dist/cjs/src/decorator.js +422 -0
  12. package/dist/cjs/src/decorator.js.map +1 -0
  13. package/dist/cjs/src/filter.d.ts +49 -0
  14. package/dist/cjs/src/filter.js +215 -0
  15. package/dist/cjs/src/filter.js.map +1 -0
  16. package/dist/cjs/src/http-app.d.ts +8 -0
  17. package/dist/cjs/src/http-app.js +16 -0
  18. package/dist/cjs/src/http-app.js.map +1 -0
  19. package/dist/cjs/src/http.d.ts +278 -0
  20. package/dist/cjs/src/http.js +878 -0
  21. package/dist/cjs/src/http.js.map +1 -0
  22. package/dist/cjs/src/kernel.d.ts +16 -0
  23. package/dist/cjs/src/kernel.js +79 -0
  24. package/dist/cjs/src/kernel.js.map +1 -0
  25. package/dist/cjs/src/logger.d.ts +7 -0
  26. package/dist/cjs/src/logger.js +34 -0
  27. package/dist/cjs/src/logger.js.map +1 -0
  28. package/dist/cjs/src/middleware.d.ts +61 -0
  29. package/dist/cjs/src/middleware.js +95 -0
  30. package/dist/cjs/src/middleware.js.map +1 -0
  31. package/dist/cjs/src/model.d.ts +165 -0
  32. package/dist/cjs/src/model.js +398 -0
  33. package/dist/cjs/src/model.js.map +1 -0
  34. package/dist/cjs/src/module.config.d.ts +84 -0
  35. package/dist/cjs/src/module.config.js +14 -0
  36. package/dist/cjs/src/module.config.js.map +1 -0
  37. package/dist/cjs/src/module.d.ts +14 -0
  38. package/dist/cjs/src/module.js +124 -0
  39. package/dist/cjs/src/module.js.map +1 -0
  40. package/dist/cjs/src/request-parser.d.ts +36 -0
  41. package/dist/cjs/src/request-parser.js +305 -0
  42. package/dist/cjs/src/request-parser.js.map +1 -0
  43. package/dist/cjs/src/router.d.ts +230 -0
  44. package/dist/cjs/src/router.js +617 -0
  45. package/dist/cjs/src/router.js.map +1 -0
  46. package/dist/cjs/src/static-serving.d.ts +32 -0
  47. package/dist/cjs/src/static-serving.js +157 -0
  48. package/dist/cjs/src/static-serving.js.map +1 -0
  49. package/dist/cjs/src/utils.d.ts +1 -0
  50. package/dist/cjs/src/utils.js +13 -0
  51. package/dist/cjs/src/utils.js.map +1 -0
  52. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  53. package/dist/esm/index.d.ts +14 -0
  54. package/dist/esm/index.js +15 -0
  55. package/dist/esm/index.js.map +1 -0
  56. package/dist/esm/package.json +1 -0
  57. package/dist/esm/src/controllers.d.ts +13 -0
  58. package/dist/esm/src/controllers.js +13 -0
  59. package/dist/esm/src/controllers.js.map +1 -0
  60. package/dist/esm/src/decorator.d.ts +241 -0
  61. package/dist/esm/src/decorator.js +414 -0
  62. package/dist/esm/src/decorator.js.map +1 -0
  63. package/dist/esm/src/filter.d.ts +49 -0
  64. package/dist/esm/src/filter.js +209 -0
  65. package/dist/esm/src/filter.js.map +1 -0
  66. package/dist/esm/src/http-app.d.ts +8 -0
  67. package/dist/esm/src/http-app.js +12 -0
  68. package/dist/esm/src/http-app.js.map +1 -0
  69. package/dist/esm/src/http.d.ts +278 -0
  70. package/dist/esm/src/http.js +841 -0
  71. package/dist/esm/src/http.js.map +1 -0
  72. package/dist/esm/src/kernel.d.ts +16 -0
  73. package/dist/esm/src/kernel.js +75 -0
  74. package/dist/esm/src/kernel.js.map +1 -0
  75. package/dist/esm/src/logger.d.ts +7 -0
  76. package/dist/esm/src/logger.js +30 -0
  77. package/dist/esm/src/logger.js.map +1 -0
  78. package/dist/esm/src/middleware.d.ts +61 -0
  79. package/dist/esm/src/middleware.js +90 -0
  80. package/dist/esm/src/middleware.js.map +1 -0
  81. package/dist/esm/src/model.d.ts +165 -0
  82. package/dist/esm/src/model.js +363 -0
  83. package/dist/esm/src/model.js.map +1 -0
  84. package/dist/esm/src/module.config.d.ts +84 -0
  85. package/dist/esm/src/module.config.js +10 -0
  86. package/dist/esm/src/module.config.js.map +1 -0
  87. package/dist/esm/src/module.d.ts +14 -0
  88. package/dist/esm/src/module.js +120 -0
  89. package/dist/esm/src/module.js.map +1 -0
  90. package/dist/esm/src/request-parser.d.ts +36 -0
  91. package/dist/esm/src/request-parser.js +295 -0
  92. package/dist/esm/src/request-parser.js.map +1 -0
  93. package/dist/esm/src/router.d.ts +230 -0
  94. package/dist/esm/src/router.js +605 -0
  95. package/dist/esm/src/router.js.map +1 -0
  96. package/dist/esm/src/static-serving.d.ts +32 -0
  97. package/dist/esm/src/static-serving.js +149 -0
  98. package/dist/esm/src/static-serving.js.map +1 -0
  99. package/dist/esm/src/utils.d.ts +1 -0
  100. package/dist/esm/src/utils.js +9 -0
  101. package/dist/esm/src/utils.js.map +1 -0
  102. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
  103. package/index.ts +14 -0
  104. package/package.json +67 -0
  105. package/src/controllers.ts +11 -0
  106. package/src/decorator.ts +411 -0
  107. package/src/filter.ts +224 -0
  108. package/src/http-app.ts +11 -0
  109. package/src/http.ts +828 -0
  110. package/src/kernel.ts +79 -0
  111. package/src/logger.ts +20 -0
  112. package/src/middleware.ts +116 -0
  113. package/src/model.ts +392 -0
  114. package/src/module.config.ts +95 -0
  115. package/src/module.ts +116 -0
  116. package/src/request-parser.ts +346 -0
  117. package/src/router.ts +747 -0
  118. package/src/static-serving.ts +153 -0
  119. package/src/utils.ts +5 -0
  120. package/tsconfig.esm.json +36 -0
  121. package/tsconfig.json +53 -0
@@ -0,0 +1,878 @@
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 __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.HttpListener = exports.HttpResultFormatter = exports.__ΩHttpResultFormatterContext = exports.__ΩSupportedHttpResult = exports.JSONResponse = exports.HtmlResponse = exports.Response = exports.BaseResponse = exports.httpWorkflow = exports.HttpControllerErrorEvent = exports.HttpResponseEvent = exports.HttpControllerEvent = exports.HttpResolveParametersEvent = exports.HttpAccessDeniedEvent = exports.HttpAuthEvent = exports.HttpRouteEvent = exports.HttpWorkflowEventWithRoute = exports.HttpRouteNotFoundEvent = exports.HttpRequestEvent = exports.HttpWorkflowEvent = exports.HttpNotImplementedError = exports.HttpInternalServerError = exports.HttpTooManyRequestsError = exports.HttpGoneError = exports.HttpConflictError = exports.HttpTimeoutError = exports.HttpNotAcceptableError = exports.HttpMethodNotAllowedError = exports.HttpNotFoundError = exports.HttpAccessDeniedError = exports.HttpUnauthorizedError = exports.HttpBadRequestError = exports.createHttpError = exports.HttpError = exports.Redirect = exports.isElementStruct = void 0;
16
+ /*@ts-ignore*/
17
+ const { __ΩClassType } = require('@deepkit/core');
18
+ /*@ts-ignore*/
19
+ const { __ΩRouteParameterResolverForInjector } = require('./router.js');
20
+ /*@ts-ignore*/
21
+ const { __ΩHttpRequestPositionedParameters } = require('./model.js');
22
+ /*@ts-ignore*/
23
+ const { __ΩLoggerInterface } = require('@deepkit/logger');
24
+ function __assignType(fn, args) {
25
+ fn.__type = args;
26
+ return fn;
27
+ }
28
+ const __ΩError = ['name', 'message', 'stack', 'P&4!&4"&4#8M'];
29
+ /*
30
+ * Deepkit Framework
31
+ * Copyright (C) 2021 Deepkit UG, Marc J. Schmidt
32
+ *
33
+ * This program is free software: you can redistribute it and/or modify
34
+ * it under the terms of the MIT License.
35
+ *
36
+ * You should have received a copy of the MIT License along with this program.
37
+ */
38
+ const core_1 = require("@deepkit/core");
39
+ const http_1 = require("http");
40
+ const event_1 = require("@deepkit/event");
41
+ const model_js_1 = require("./model.js");
42
+ const injector_1 = require("@deepkit/injector");
43
+ const router_js_1 = require("./router.js");
44
+ const workflow_1 = require("@deepkit/workflow");
45
+ const stopwatch_1 = require("@deepkit/stopwatch");
46
+ const type_1 = require("@deepkit/type");
47
+ const stream_1 = __importDefault(require("stream"));
48
+ function isElementStruct(v) {
49
+ return 'object' === typeof v && v.hasOwnProperty('render') && v.hasOwnProperty('attributes') && !v.slice;
50
+ }
51
+ exports.isElementStruct = isElementStruct;
52
+ isElementStruct.__type = ['v', 'isElementStruct', 'P"2!!/"'];
53
+ let templateRender;
54
+ function getTemplateRender() {
55
+ if (!templateRender) {
56
+ const template = require('@deepkit/template');
57
+ templateRender = template.render;
58
+ }
59
+ return templateRender;
60
+ }
61
+ getTemplateRender.__type = [() => render, 'getTemplateRender', 'Pi!/"'];
62
+ class Redirect {
63
+ constructor(statusCode = 302) {
64
+ this.statusCode = statusCode;
65
+ }
66
+ static toRoute(routeName, parameters = {}, statusCode = 302) {
67
+ const redirect = new Redirect(statusCode);
68
+ redirect.routeName = routeName;
69
+ redirect.routeParameters = parameters;
70
+ return redirect;
71
+ }
72
+ static toUrl(url, statusCode = 302) {
73
+ const redirect = new Redirect(statusCode);
74
+ redirect.url = url;
75
+ return redirect;
76
+ }
77
+ }
78
+ exports.Redirect = Redirect;
79
+ Redirect.__type = ['routeName', 'routeParameters', 'url', 'statusCode', () => 302, 'constructor', 'parameters', () => ({}), () => 302, () => Redirect, 'toRoute', () => 302, () => Redirect, 'toUrl', '&3!8P&"LM3"8&3#8P\'2$:>%"0&P&2!P&"LM2\'>(\'2$>)P7*0+sP&2#\'2$>,P7-0.s5'];
80
+ class HttpError extends core_1.CustomError {
81
+ constructor(message, httpCode) {
82
+ super(message);
83
+ this.message = message;
84
+ this.httpCode = httpCode;
85
+ }
86
+ }
87
+ exports.HttpError = HttpError;
88
+ HttpError.__type = ['T', () => core_1.CustomError, 'message', 'httpCode', 'constructor', 'b!P7"P&2#:e"!2$:"0%5'];
89
+ function createHttpError(code, defaultMessage = '') {
90
+ var _a;
91
+ return _a = class extends HttpError {
92
+ constructor(message = defaultMessage) {
93
+ super(message, code);
94
+ this.message = message;
95
+ }
96
+ },
97
+ _a.__type = [() => code, () => HttpError, 'message', () => defaultMessage, 'constructor', () => code, 'PPdi!h!!qe!!!j7"P&2#:>$"0%5Pdi&h!!qe!!!j6"'],
98
+ _a;
99
+ }
100
+ exports.createHttpError = createHttpError;
101
+ createHttpError.__type = ['code', 'defaultMessage', () => "", () => __ΩClassType, () => HttpError, 'createHttpError', 'P"2!&2">#P"7%o$"/&'];
102
+ class HttpBadRequestError extends createHttpError(400, 'Bad request') {
103
+ }
104
+ exports.HttpBadRequestError = HttpBadRequestError;
105
+ HttpBadRequestError.__type = [() => createHttpError(400, "Bad request"), 'P7!5'];
106
+ class HttpUnauthorizedError extends createHttpError(401, 'Unauthorized') {
107
+ }
108
+ exports.HttpUnauthorizedError = HttpUnauthorizedError;
109
+ HttpUnauthorizedError.__type = [() => createHttpError(401, "Unauthorized"), 'P7!5'];
110
+ class HttpAccessDeniedError extends createHttpError(403, 'Access denied') {
111
+ }
112
+ exports.HttpAccessDeniedError = HttpAccessDeniedError;
113
+ HttpAccessDeniedError.__type = [() => createHttpError(403, "Access denied"), 'P7!5'];
114
+ class HttpNotFoundError extends createHttpError(404, 'Not found') {
115
+ }
116
+ exports.HttpNotFoundError = HttpNotFoundError;
117
+ HttpNotFoundError.__type = [() => createHttpError(404, "Not found"), 'P7!5'];
118
+ class HttpMethodNotAllowedError extends createHttpError(405, 'Method not allowed') {
119
+ }
120
+ exports.HttpMethodNotAllowedError = HttpMethodNotAllowedError;
121
+ HttpMethodNotAllowedError.__type = [() => createHttpError(405, "Method not allowed"), 'P7!5'];
122
+ class HttpNotAcceptableError extends createHttpError(406, 'Not acceptable') {
123
+ }
124
+ exports.HttpNotAcceptableError = HttpNotAcceptableError;
125
+ HttpNotAcceptableError.__type = [() => createHttpError(406, "Not acceptable"), 'P7!5'];
126
+ class HttpTimeoutError extends createHttpError(408, 'Request timeout') {
127
+ }
128
+ exports.HttpTimeoutError = HttpTimeoutError;
129
+ HttpTimeoutError.__type = [() => createHttpError(408, "Request timeout"), 'P7!5'];
130
+ class HttpConflictError extends createHttpError(409, 'Conflict') {
131
+ }
132
+ exports.HttpConflictError = HttpConflictError;
133
+ HttpConflictError.__type = [() => createHttpError(409, "Conflict"), 'P7!5'];
134
+ class HttpGoneError extends createHttpError(410, 'Gone') {
135
+ }
136
+ exports.HttpGoneError = HttpGoneError;
137
+ HttpGoneError.__type = [() => createHttpError(410, "Gone"), 'P7!5'];
138
+ class HttpTooManyRequestsError extends createHttpError(429, 'Too many requests') {
139
+ }
140
+ exports.HttpTooManyRequestsError = HttpTooManyRequestsError;
141
+ HttpTooManyRequestsError.__type = [() => createHttpError(429, "Too many requests"), 'P7!5'];
142
+ class HttpInternalServerError extends createHttpError(500, 'Internal server error') {
143
+ }
144
+ exports.HttpInternalServerError = HttpInternalServerError;
145
+ HttpInternalServerError.__type = [() => createHttpError(500, "Internal server error"), 'P7!5'];
146
+ class HttpNotImplementedError extends createHttpError(501, 'Not implemented') {
147
+ }
148
+ exports.HttpNotImplementedError = HttpNotImplementedError;
149
+ HttpNotImplementedError.__type = [() => createHttpError(501, "Not implemented"), 'P7!5'];
150
+ class HttpWorkflowEvent {
151
+ constructor(injectorContext, request, response) {
152
+ this.injectorContext = injectorContext;
153
+ this.request = request;
154
+ this.response = response;
155
+ this.propagationStopped = false;
156
+ }
157
+ stopPropagation() {
158
+ this.propagationStopped = true;
159
+ }
160
+ isPropagationStopped() {
161
+ return this.propagationStopped;
162
+ }
163
+ clearNext() {
164
+ this.nextState = undefined;
165
+ this.nextStateEvent = undefined;
166
+ }
167
+ /**
168
+ * @see WorkflowNextEvent.next
169
+ */
170
+ next(nextState, event) {
171
+ this.nextState = nextState;
172
+ this.nextStateEvent = event;
173
+ }
174
+ /**
175
+ * Whether already a next workflow state has been scheduled.
176
+ */
177
+ hasNext() {
178
+ return this.nextState !== undefined;
179
+ }
180
+ get url() {
181
+ return this.request.url || '/';
182
+ }
183
+ /**
184
+ * Whether a response has already been sent.
185
+ */
186
+ get sent() {
187
+ return this.response.headersSent;
188
+ }
189
+ send(response) {
190
+ this.next('response', new HttpResponseEvent(this.injectorContext, this.request, this.response, response));
191
+ }
192
+ }
193
+ exports.HttpWorkflowEvent = HttpWorkflowEvent;
194
+ HttpWorkflowEvent.__type = ['stopPropagation', 'isPropagationStopped', 'nextState', 'nextStateEvent', 'clearNext', 'event', 'next', 'hasNext', () => injector_1.InjectorContext, 'injectorContext', () => model_js_1.HttpRequest, 'request', () => model_js_1.HttpResponse, 'response', 'constructor', 'send', 'P"0!P"0""3#8"3$8P"0%P&2#"2&8"0\'P)0(PP7)2*:P7+2,:P7-2.:"0/!!P"2."005'];
195
+ exports.HttpRequestEvent = HttpWorkflowEvent;
196
+ exports.HttpRouteNotFoundEvent = HttpWorkflowEvent;
197
+ class HttpWorkflowEventWithRoute extends HttpWorkflowEvent {
198
+ constructor(injectorContext, request, response, route) {
199
+ super(injectorContext, request, response);
200
+ this.injectorContext = injectorContext;
201
+ this.request = request;
202
+ this.response = response;
203
+ this.route = route;
204
+ }
205
+ send(response) {
206
+ this.next('response', new HttpResponseEvent(this.injectorContext, this.request, this.response, response, this.route));
207
+ }
208
+ accessDenied(error) {
209
+ this.next('accessDenied', new HttpAccessDeniedEvent(this.injectorContext, this.request, this.response, this.route, error));
210
+ }
211
+ }
212
+ exports.HttpWorkflowEventWithRoute = HttpWorkflowEventWithRoute;
213
+ HttpWorkflowEventWithRoute.__type = [() => HttpWorkflowEvent, () => injector_1.InjectorContext, 'injectorContext', () => model_js_1.HttpRequest, 'request', () => model_js_1.HttpResponse, 'response', () => router_js_1.RouteConfig, 'route', 'constructor', 'send', () => __ΩError, 'error', 'accessDenied', 'P7!PP7"2#:P7$2%:P7&2\':P7(2):"0*P"2\'"0+Pn,2-8"0.5'];
214
+ class HttpRouteEvent extends HttpWorkflowEvent {
215
+ constructor(injectorContext, request, response, parameterResolver, route) {
216
+ super(injectorContext, request, response);
217
+ this.injectorContext = injectorContext;
218
+ this.request = request;
219
+ this.response = response;
220
+ this.parameterResolver = parameterResolver;
221
+ this.route = route;
222
+ }
223
+ routeFound(route, parameterResolver) {
224
+ this.route = route;
225
+ this.next('auth', new HttpAuthEvent(this.injectorContext, this.request, this.response, this.route, parameterResolver));
226
+ }
227
+ notFound() {
228
+ this.next('routeNotFound', new exports.HttpRouteNotFoundEvent(this.injectorContext, this.request, this.response));
229
+ }
230
+ }
231
+ exports.HttpRouteEvent = HttpRouteEvent;
232
+ HttpRouteEvent.__type = [() => HttpWorkflowEvent, () => injector_1.InjectorContext, 'injectorContext', () => model_js_1.HttpRequest, 'request', () => model_js_1.HttpResponse, 'response', () => __ΩRouteParameterResolverForInjector, 'parameterResolver', () => router_js_1.RouteConfig, 'route', 'constructor', () => router_js_1.RouteConfig, () => __ΩRouteParameterResolverForInjector, 'routeFound', 'notFound', 'P7!PP7"2#:P7$2%:P7&2\':n(2)8:P7*2+8:"0,PP7-2+n.2)"0/P"005'];
233
+ class HttpAuthEvent extends HttpWorkflowEventWithRoute {
234
+ constructor(injectorContext, request, response, route, parameterResolver) {
235
+ super(injectorContext, request, response, route);
236
+ this.injectorContext = injectorContext;
237
+ this.request = request;
238
+ this.response = response;
239
+ this.route = route;
240
+ this.parameterResolver = parameterResolver;
241
+ }
242
+ success() {
243
+ this.next('resolveParameters', new HttpResolveParametersEvent(this.injectorContext, this.request, this.response, this.parameterResolver, this.route));
244
+ }
245
+ }
246
+ exports.HttpAuthEvent = HttpAuthEvent;
247
+ HttpAuthEvent.__type = [() => HttpWorkflowEventWithRoute, () => injector_1.InjectorContext, 'injectorContext', () => model_js_1.HttpRequest, 'request', () => model_js_1.HttpResponse, 'response', () => router_js_1.RouteConfig, 'route', () => __ΩRouteParameterResolverForInjector, 'parameterResolver', 'constructor', 'success', 'P7!PP7"2#:P7$2%:P7&2\':P7(2):n*2+:"0,P"0-5'];
248
+ class HttpAccessDeniedEvent extends HttpWorkflowEvent {
249
+ constructor(injectorContext, request, response, route, error) {
250
+ super(injectorContext, request, response);
251
+ this.injectorContext = injectorContext;
252
+ this.request = request;
253
+ this.response = response;
254
+ this.route = route;
255
+ this.error = error;
256
+ }
257
+ }
258
+ exports.HttpAccessDeniedEvent = HttpAccessDeniedEvent;
259
+ HttpAccessDeniedEvent.__type = [() => HttpWorkflowEvent, () => injector_1.InjectorContext, 'injectorContext', () => model_js_1.HttpRequest, 'request', () => model_js_1.HttpResponse, 'response', () => router_js_1.RouteConfig, 'route', () => __ΩError, 'error', 'constructor', 'P7!PP7"2#:P7$2%:P7&2\':P7(2):n*2+8:"0,5'];
260
+ class HttpResolveParametersEvent extends HttpWorkflowEventWithRoute {
261
+ constructor(injectorContext, request, response, parameterResolver, route) {
262
+ super(injectorContext, request, response, route);
263
+ this.injectorContext = injectorContext;
264
+ this.request = request;
265
+ this.response = response;
266
+ this.parameterResolver = parameterResolver;
267
+ this.route = route;
268
+ this.parameters = { arguments: [], parameters: {} };
269
+ }
270
+ accessDenied() {
271
+ this.next('accessDenied', new HttpAccessDeniedEvent(this.injectorContext, this.request, this.response, this.route));
272
+ }
273
+ }
274
+ exports.HttpResolveParametersEvent = HttpResolveParametersEvent;
275
+ HttpResolveParametersEvent.__type = [() => HttpWorkflowEventWithRoute, () => __ΩHttpRequestPositionedParameters, 'parameters', function () { return { arguments: [], parameters: {} }; }, () => injector_1.InjectorContext, 'injectorContext', () => model_js_1.HttpRequest, 'request', () => model_js_1.HttpResponse, 'response', () => __ΩRouteParameterResolverForInjector, 'parameterResolver', () => router_js_1.RouteConfig, 'route', 'constructor', 'accessDenied', 'P7!n"3#>$PP7%2&:P7\'2(:P7)2*:n+2,:P7-2.:"0/P"005'];
276
+ class HttpControllerEvent extends HttpWorkflowEventWithRoute {
277
+ constructor(injectorContext, request, response, parameters = { arguments: [], parameters: {} }, route) {
278
+ super(injectorContext, request, response, route);
279
+ this.injectorContext = injectorContext;
280
+ this.request = request;
281
+ this.response = response;
282
+ this.parameters = parameters;
283
+ this.route = route;
284
+ }
285
+ }
286
+ exports.HttpControllerEvent = HttpControllerEvent;
287
+ HttpControllerEvent.__type = [() => HttpWorkflowEventWithRoute, () => injector_1.InjectorContext, 'injectorContext', () => model_js_1.HttpRequest, 'request', () => model_js_1.HttpResponse, 'response', () => __ΩHttpRequestPositionedParameters, 'parameters', () => ({ arguments: [], parameters: {} }), () => router_js_1.RouteConfig, 'route', 'constructor', 'P7!PP7"2#:P7$2%:P7&2\':n(2):>*P7+2,:"0-5'];
288
+ class HttpResponseEvent extends workflow_1.WorkflowEvent {
289
+ constructor(injectorContext, request, response, result, route) {
290
+ super();
291
+ this.injectorContext = injectorContext;
292
+ this.request = request;
293
+ this.response = response;
294
+ this.result = result;
295
+ this.route = route;
296
+ /**
297
+ * The time it took to call the controller action in milliseconds.
298
+ */
299
+ this.controllerActionTime = 0;
300
+ }
301
+ }
302
+ exports.HttpResponseEvent = HttpResponseEvent;
303
+ HttpResponseEvent.__type = [() => workflow_1.WorkflowEvent, 'controllerActionTime', function () { return 0; }, () => injector_1.InjectorContext, 'injectorContext', () => model_js_1.HttpRequest, 'request', () => model_js_1.HttpResponse, 'response', 'result', () => router_js_1.RouteConfig, 'route', 'constructor', 'P7!\'3">#PP7$2%:P7&2\':P7(2):"2*:P7+2,8:"0-5'];
304
+ class HttpControllerErrorEvent extends HttpWorkflowEventWithRoute {
305
+ constructor(injectorContext, request, response, route, error) {
306
+ super(injectorContext, request, response, route);
307
+ this.injectorContext = injectorContext;
308
+ this.request = request;
309
+ this.response = response;
310
+ this.route = route;
311
+ this.error = error;
312
+ /**
313
+ * The time it took to call the controller action in milliseconds.
314
+ */
315
+ this.controllerActionTime = 0;
316
+ }
317
+ }
318
+ exports.HttpControllerErrorEvent = HttpControllerErrorEvent;
319
+ HttpControllerErrorEvent.__type = [() => HttpWorkflowEventWithRoute, 'controllerActionTime', function () { return 0; }, () => injector_1.InjectorContext, 'injectorContext', () => model_js_1.HttpRequest, 'request', () => model_js_1.HttpResponse, 'response', () => router_js_1.RouteConfig, 'route', () => __ΩError, 'error', 'constructor', 'P7!\'3">#PP7$2%:P7&2\':P7(2):P7*2+:n,2-:"0.5'];
320
+ exports.httpWorkflow = (0, workflow_1.createWorkflow)('http', {
321
+ start: workflow_1.WorkflowEvent,
322
+ request: exports.HttpRequestEvent,
323
+ route: HttpRouteEvent,
324
+ routeNotFound: exports.HttpRouteNotFoundEvent,
325
+ auth: HttpAuthEvent,
326
+ resolveParameters: HttpResolveParametersEvent,
327
+ accessDenied: HttpAccessDeniedEvent,
328
+ controller: HttpControllerEvent,
329
+ controllerError: HttpControllerErrorEvent,
330
+ parametersFailed: HttpControllerErrorEvent,
331
+ response: HttpResponseEvent,
332
+ }, {
333
+ start: 'request',
334
+ request: 'route',
335
+ route: ['auth', 'routeNotFound'],
336
+ auth: ['resolveParameters', 'accessDenied'],
337
+ resolveParameters: ['controller', 'parametersFailed'],
338
+ accessDenied: 'response',
339
+ controller: ['accessDenied', 'controllerError', 'response'],
340
+ controllerError: 'response',
341
+ parametersFailed: 'response',
342
+ routeNotFound: 'response',
343
+ });
344
+ class BaseResponse {
345
+ constructor(_statusCode, _headers = {}) {
346
+ this._statusCode = _statusCode;
347
+ this._headers = _headers;
348
+ this.autoSerializing = true;
349
+ }
350
+ status(code) {
351
+ this._statusCode = code;
352
+ return this;
353
+ }
354
+ /**
355
+ * Per default a JSONResponse is serialized using the return type specified at the route.
356
+ * This disables that behaviour so that JSON.stringify is run on the result directly.
357
+ */
358
+ disableAutoSerializing() {
359
+ this.autoSerializing = false;
360
+ return this;
361
+ }
362
+ header(name, value) {
363
+ this._headers[name] = value;
364
+ return this;
365
+ }
366
+ headers(headers) {
367
+ this._headers = headers;
368
+ return this;
369
+ }
370
+ contentType(type) {
371
+ this._headers['content-type'] = type;
372
+ return this;
373
+ }
374
+ }
375
+ exports.BaseResponse = BaseResponse;
376
+ BaseResponse.__type = ['autoSerializing', function () { return true; }, '_statusCode', '_headers', () => ({}), 'constructor', 'code', 'status', 'disableAutoSerializing', 'name', 'value', 'header', 'headers', 'type', 'contentType', ')3!>"P\'2#8:!2$:>%"0&P\'2\'!0(P"0)P&2*P&\'J2+!0,P!2-!0-P&2.!0/5'];
377
+ class Response extends BaseResponse {
378
+ constructor(content, contentType, statusCode) {
379
+ super(statusCode);
380
+ this.content = content;
381
+ this.contentType(contentType);
382
+ }
383
+ }
384
+ exports.Response = Response;
385
+ Response.__type = [() => BaseResponse, 'content', 'contentType', 'statusCode', 'constructor', 'P7!PP&WJ2":&2#\'2$8"0%5'];
386
+ class HtmlResponse extends BaseResponse {
387
+ constructor(html, statusCode) {
388
+ super(statusCode);
389
+ this.html = html;
390
+ }
391
+ }
392
+ exports.HtmlResponse = HtmlResponse;
393
+ HtmlResponse.__type = [() => BaseResponse, 'html', 'statusCode', 'constructor', 'P7!P&2":\'2#8"0$5'];
394
+ class JSONResponse extends BaseResponse {
395
+ constructor(json, statusCode) {
396
+ super(statusCode);
397
+ this.json = json;
398
+ }
399
+ }
400
+ exports.JSONResponse = JSONResponse;
401
+ JSONResponse.__type = [() => BaseResponse, 'json', 'statusCode', 'constructor', 'P7!P"2":\'2#8"0$5'];
402
+ const __ΩSupportedHttpResult = [() => Response, () => JSONResponse, () => HtmlResponse, () => model_js_1.HttpResponse, () => Redirect, () => __ΩError, 'P-,\'&P7!P7"P7#P7$!!P7%Wn&J'];
403
+ exports.__ΩSupportedHttpResult = __ΩSupportedHttpResult;
404
+ const __ΩHttpResultFormatterContext = [() => model_js_1.HttpRequest, 'request', () => model_js_1.HttpResponse, 'response', () => router_js_1.RouteConfig, 'route', 'PP7!4"P7#4$P7%4&8M'];
405
+ exports.__ΩHttpResultFormatterContext = __ΩHttpResultFormatterContext;
406
+ class HttpResultFormatter {
407
+ constructor(router) {
408
+ this.router = router;
409
+ this.jsonContentType = 'application/json; charset=utf-8';
410
+ this.htmlContentType = 'text/html; charset=utf-8';
411
+ }
412
+ setContentTypeIfNotSetAlready(response, contentType) {
413
+ if (response.hasHeader('Content-Type'))
414
+ return;
415
+ response.setHeader('Content-Type', contentType);
416
+ }
417
+ handleError(error, context) {
418
+ }
419
+ handleUndefined(result, context) {
420
+ context.response.end(result);
421
+ }
422
+ handleRedirect(result, context) {
423
+ if (result.routeName) {
424
+ context.response.writeHead(result.statusCode, {
425
+ Location: this.router.resolveUrl(result.routeName, result.routeParameters)
426
+ });
427
+ }
428
+ else {
429
+ context.response.writeHead(result.statusCode, {
430
+ Location: result.url
431
+ });
432
+ }
433
+ context.response.end();
434
+ }
435
+ handleUnknown(result, context) {
436
+ const oldCheck = type_1.typeSettings.unpopulatedCheck;
437
+ try {
438
+ type_1.typeSettings.unpopulatedCheck = type_1.UnpopulatedCheck.None;
439
+ this.setContentTypeIfNotSetAlready(context.response, this.jsonContentType);
440
+ context.response.end(JSON.stringify(result));
441
+ }
442
+ finally {
443
+ type_1.typeSettings.unpopulatedCheck = oldCheck;
444
+ }
445
+ }
446
+ handleHtmlResponse(result, context) {
447
+ this.setContentTypeIfNotSetAlready(context.response, this.htmlContentType);
448
+ context.response.writeHead(result._statusCode || 200, result._headers);
449
+ context.response.end(result.html);
450
+ }
451
+ handleGenericResponse(result, context) {
452
+ context.response.writeHead(result._statusCode || 200, result._headers);
453
+ context.response.end(result.content);
454
+ }
455
+ handleJSONResponse(result, context) {
456
+ this.setContentTypeIfNotSetAlready(context.response, this.jsonContentType);
457
+ context.response.writeHead(result._statusCode || 200, result._headers);
458
+ context.response.end(JSON.stringify(result.json));
459
+ }
460
+ handleTypeEntity(classType, instance, context, route) {
461
+ this.handleType((0, type_1.resolveReceiveType)(classType), instance, context, route);
462
+ }
463
+ handleType(type, instance, context, route) {
464
+ this.setContentTypeIfNotSetAlready(context.response, this.jsonContentType);
465
+ const serializerToUse = route && (route === null || route === void 0 ? void 0 : route.serializer) ? route.serializer : type_1.serializer;
466
+ context.response.end(JSON.stringify((0, type_1.serialize)(instance, route ? route.serializationOptions : undefined, serializerToUse, undefined, type)));
467
+ }
468
+ handleStream(stream, context) {
469
+ stream.pipe(context.response);
470
+ }
471
+ handleBinary(result, context) {
472
+ context.response.end(result);
473
+ }
474
+ handleResponse(context) {
475
+ }
476
+ handle(result, context) {
477
+ if (result === null || result === undefined) {
478
+ this.handleUndefined(result, context);
479
+ }
480
+ else if (result instanceof Error) {
481
+ this.handleError(result, context);
482
+ }
483
+ else if (result instanceof Redirect) {
484
+ this.handleRedirect(result, context);
485
+ }
486
+ else if (result instanceof http_1.ServerResponse) {
487
+ this.handleResponse(context);
488
+ }
489
+ else if (result instanceof HtmlResponse) {
490
+ this.handleHtmlResponse(result, context);
491
+ }
492
+ else if (result instanceof stream_1.default.Readable) {
493
+ this.handleStream(result, context);
494
+ }
495
+ else if (result instanceof Uint8Array) {
496
+ this.handleBinary(result, context);
497
+ }
498
+ else if (result instanceof JSONResponse) {
499
+ this.handleJSONResponse(result, context);
500
+ }
501
+ else if (result instanceof Response) {
502
+ this.handleGenericResponse(result, context);
503
+ }
504
+ else {
505
+ if ((0, core_1.isClassInstance)(result)) {
506
+ const classType = (0, core_1.getClassTypeFromInstance)(result);
507
+ if ((0, type_1.hasTypeInformation)(classType)) {
508
+ this.handleTypeEntity(classType, result, context);
509
+ return;
510
+ }
511
+ }
512
+ else if ((0, core_1.isArray)(result) && result.length > 0 && (0, core_1.isClassInstance)(result[0])) {
513
+ const firstClassType = (0, core_1.getClassTypeFromInstance)(result[0]);
514
+ let allSameType = true;
515
+ for (const item of result) {
516
+ if (!(0, core_1.isClassInstance)(item) || (0, core_1.getClassTypeFromInstance)(item) !== firstClassType) {
517
+ allSameType = false;
518
+ break;
519
+ }
520
+ }
521
+ if (allSameType && (0, type_1.hasTypeInformation)(firstClassType)) {
522
+ this.handleType({ kind: type_1.ReflectionKind.array, type: (0, type_1.resolveReceiveType)(firstClassType) }, result, context);
523
+ return;
524
+ }
525
+ }
526
+ this.handleUnknown(result, context);
527
+ }
528
+ }
529
+ }
530
+ exports.HttpResultFormatter = HttpResultFormatter;
531
+ HttpResultFormatter.__type = ['jsonContentType', function () { return 'application/json; charset=utf-8'; }, 'htmlContentType', function () { return 'text/html; charset=utf-8'; }, () => router_js_1.HttpRouter, 'router', 'constructor', () => model_js_1.HttpResponse, 'response', 'contentType', 'setContentTypeIfNotSetAlready', () => __ΩError, 'error', () => __ΩHttpResultFormatterContext, 'context', 'handleError', 'result', () => __ΩHttpResultFormatterContext, 'handleUndefined', () => Redirect, () => __ΩHttpResultFormatterContext, 'handleRedirect', () => __ΩHttpResultFormatterContext, 'handleUnknown', () => HtmlResponse, () => __ΩHttpResultFormatterContext, 'handleHtmlResponse', () => Response, () => __ΩHttpResultFormatterContext, 'handleGenericResponse', () => JSONResponse, () => __ΩHttpResultFormatterContext, 'handleJSONResponse', () => __ΩClassType, 'classType', 'instance', () => __ΩHttpResultFormatterContext, () => router_js_1.RouteConfig, 'route', 'handleTypeEntity', 'type', () => __ΩHttpResultFormatterContext, () => router_js_1.RouteConfig, 'handleType', 'stream', () => __ΩHttpResultFormatterContext, 'handleStream', () => __ΩHttpResultFormatterContext, 'handleBinary', () => __ΩHttpResultFormatterContext, 'handleResponse', () => __ΩSupportedHttpResult, () => __ΩHttpResultFormatterContext, 'handle', '&3!<>"&3#<>$PP7%2&<"0\'PP7(2)&2*$0+<Pn,2-n.2/$00PP-,J21n22/$03PP7421n52/$06P"21n72/$08PP7921n:2/$0;PP7<21n=2/$0>PP7?21n@2/$0AP"oB"2C"2DnE2/P7F2G8$0HP"2I"2DnJ2/P7K2G8$0LP!2MnN2/$0OPW21nP2/$0QPnR2/"0SPnT21nU2/$0V5'];
532
+ class HttpListener {
533
+ constructor(router, logger, resultFormatter, stopwatch) {
534
+ this.router = router;
535
+ this.logger = logger;
536
+ this.resultFormatter = resultFormatter;
537
+ this.stopwatch = stopwatch;
538
+ }
539
+ onRequest(event) {
540
+ if (event.sent)
541
+ return;
542
+ if (event.hasNext())
543
+ return;
544
+ event.next('route', new HttpRouteEvent(event.injectorContext, event.request, event.response));
545
+ }
546
+ async onRoute(event) {
547
+ if (event.sent)
548
+ return;
549
+ if (event.hasNext())
550
+ return;
551
+ const logger = this.logger;
552
+ try {
553
+ const resolved = this.router.resolveRequest(event.request);
554
+ if (resolved) {
555
+ event.request.uploadedFiles = resolved.uploadedFiles;
556
+ //todo: embed that into the generated router code.
557
+ if (resolved.middlewares) {
558
+ const middlewares = resolved.middlewares(event.injectorContext);
559
+ if (middlewares.length) {
560
+ await (0, core_1.asyncOperation)(__assignType(async (resolve, reject) => {
561
+ let lastTimer = undefined;
562
+ function finish() {
563
+ clearTimeout(lastTimer);
564
+ resolve(undefined);
565
+ //middleware finished the request. We end the workflow transition
566
+ }
567
+ finish.__type = ['finish', 'P"/!'];
568
+ event.response.once('finish', finish);
569
+ let i = -1;
570
+ async function next() {
571
+ i++;
572
+ if (i >= middlewares.length) {
573
+ event.response.off('finish', finish);
574
+ resolve(undefined);
575
+ return;
576
+ }
577
+ const timeout = middlewares[i].timeout;
578
+ if (timeout !== undefined && timeout > 0) {
579
+ lastTimer = setTimeout(() => {
580
+ logger.warning(`Middleware timed out. Increase the timeout or fix the middleware. (${middlewares[i].fn})`);
581
+ next();
582
+ }, timeout);
583
+ }
584
+ try {
585
+ await middlewares[i].fn(event.request, event.response, __assignType((error) => {
586
+ if (lastTimer)
587
+ clearTimeout(lastTimer);
588
+ if (error) {
589
+ event.response.off('finish', finish);
590
+ reject(error);
591
+ }
592
+ else {
593
+ next();
594
+ }
595
+ }, ['error', '', 'P"2!8"/"']));
596
+ }
597
+ catch (error) {
598
+ reject(error);
599
+ }
600
+ }
601
+ next.__type = ['next', 'P"/!'];
602
+ await next();
603
+ }, ['resolve', 'reject', '', 'P"2!"2""/#']));
604
+ }
605
+ }
606
+ event.injectorContext.set(router_js_1.RouteConfig, resolved.routeConfig);
607
+ event.routeFound(resolved.routeConfig, resolved.parameters);
608
+ }
609
+ }
610
+ catch (error) {
611
+ this.logger.error('Could not resolve request', error);
612
+ event.notFound();
613
+ }
614
+ }
615
+ onRouteForward(event) {
616
+ if (event.sent)
617
+ return;
618
+ if (event.hasNext())
619
+ return;
620
+ if (!event.route) {
621
+ event.next('routeNotFound', new exports.HttpRouteNotFoundEvent(event.injectorContext, event.request, event.response));
622
+ }
623
+ }
624
+ async routeNotFound(event) {
625
+ if (event.sent)
626
+ return;
627
+ if (event.hasNext())
628
+ return;
629
+ event.send(new HtmlResponse('Not found', 404));
630
+ }
631
+ onAuth(event) {
632
+ if (event.sent)
633
+ return;
634
+ if (event.hasNext())
635
+ return;
636
+ event.next('resolveParameters', new HttpResolveParametersEvent(event.injectorContext, event.request, event.response, event.parameterResolver, event.route));
637
+ }
638
+ async onResolveParameters(event) {
639
+ if (event.response.finished)
640
+ return;
641
+ if (event.hasNext())
642
+ return;
643
+ try {
644
+ event.parameters = await event.parameterResolver(event.injectorContext);
645
+ event.next('controller', new HttpControllerEvent(event.injectorContext, event.request, event.response, event.parameters, event.route));
646
+ }
647
+ catch (error) {
648
+ event.next('parametersFailed', new HttpControllerErrorEvent(event.injectorContext, event.request, event.response, event.route, error));
649
+ }
650
+ }
651
+ onAccessDenied(event) {
652
+ if (event.sent)
653
+ return;
654
+ if (event.hasNext())
655
+ return;
656
+ event.send(new HtmlResponse('Access denied', 403));
657
+ }
658
+ async onController(event) {
659
+ if (event.sent)
660
+ return;
661
+ if (event.hasNext())
662
+ return;
663
+ const start = Date.now();
664
+ const stopWatchLabel = event.route.action.type === 'controller'
665
+ ? (0, core_1.getClassName)(event.route.action.controller) + '.' + event.route.action.methodName
666
+ : event.route.action.fn.name;
667
+ const frame = this.stopwatch ? this.stopwatch.start(stopWatchLabel, stopwatch_1.FrameCategory.httpController) : undefined;
668
+ try {
669
+ let result;
670
+ if (event.route.action.type === 'controller') {
671
+ const controllerInstance = event.injectorContext.get(event.route.action.controller, event.route.action.module);
672
+ const method = controllerInstance[event.route.action.methodName];
673
+ result = await method.apply(controllerInstance, event.parameters.arguments);
674
+ }
675
+ else {
676
+ result = await event.route.action.fn(...event.parameters.arguments);
677
+ }
678
+ if (isElementStruct(result)) {
679
+ const html = await getTemplateRender()(event.injectorContext.getRootInjector(), result, this.stopwatch ? this.stopwatch : undefined);
680
+ result = new HtmlResponse(html, 200).header('Content-Type', 'text/html; charset=utf-8');
681
+ }
682
+ if (result instanceof stream_1.default.Readable) {
683
+ const stream = result;
684
+ await new Promise(__assignType((resolve, reject) => {
685
+ stream.once('readable', resolve);
686
+ stream.once('error', reject);
687
+ }, ['resolve', 'reject', '', 'P"2!"2""/#']));
688
+ }
689
+ const responseEvent = new HttpResponseEvent(event.injectorContext, event.request, event.response, result, event.route);
690
+ responseEvent.controllerActionTime = Date.now() - start;
691
+ event.next('response', responseEvent);
692
+ }
693
+ catch (error) {
694
+ if (frame)
695
+ frame.end();
696
+ if (error instanceof HttpAccessDeniedError) {
697
+ event.next('accessDenied', new HttpAccessDeniedEvent(event.injectorContext, event.request, event.response, event.route, error));
698
+ }
699
+ else {
700
+ const errorEvent = new HttpControllerErrorEvent(event.injectorContext, event.request, event.response, event.route, error);
701
+ errorEvent.controllerActionTime = Date.now() - start;
702
+ event.next('controllerError', errorEvent);
703
+ }
704
+ }
705
+ finally {
706
+ if (frame)
707
+ frame.end();
708
+ }
709
+ }
710
+ onParametersFailed(event) {
711
+ if (event.response.finished)
712
+ return;
713
+ if (event.sent)
714
+ return;
715
+ if (event.error instanceof type_1.SerializationError) {
716
+ event.send(new JSONResponse({
717
+ message: event.error.message,
718
+ errors: [{
719
+ path: event.error.path,
720
+ code: 'serialization',
721
+ message: event.error.originalMessage,
722
+ }]
723
+ }, 400).disableAutoSerializing());
724
+ }
725
+ else if (event.error instanceof type_1.ValidationError) {
726
+ event.send(new JSONResponse({
727
+ message: event.error.message,
728
+ errors: event.error.errors
729
+ }, 400).disableAutoSerializing());
730
+ }
731
+ else if (event.error instanceof HttpError) {
732
+ event.send(new JSONResponse({
733
+ message: event.error.message
734
+ }, event.error.httpCode).disableAutoSerializing());
735
+ return;
736
+ }
737
+ else {
738
+ this.logger.error('Controller parameter resolving error:', event.error);
739
+ event.send(new HtmlResponse('Internal error', 500));
740
+ }
741
+ }
742
+ onControllerError(event) {
743
+ if (event.response.finished)
744
+ return;
745
+ if (event.sent)
746
+ return;
747
+ if (event.error instanceof type_1.ValidationError) {
748
+ event.send(new JSONResponse({
749
+ message: event.error.message,
750
+ errors: event.error.errors
751
+ }, 400).disableAutoSerializing());
752
+ return;
753
+ }
754
+ else if (event.error instanceof HttpError) {
755
+ event.send(new JSONResponse({
756
+ message: event.error.message
757
+ }, event.error.httpCode).disableAutoSerializing());
758
+ return;
759
+ }
760
+ this.logger.error('Controller error', event.error);
761
+ event.send(new HtmlResponse('Internal error', 500));
762
+ }
763
+ /**
764
+ * This happens before the result is sent.
765
+ */
766
+ async onResultSerialization(event) {
767
+ if (!event.route)
768
+ return;
769
+ if (event.response.headersSent)
770
+ return;
771
+ if (event.result === undefined || event.result === null)
772
+ return;
773
+ if (event.result instanceof HtmlResponse || event.result instanceof Response || event.result instanceof http_1.ServerResponse || event.result instanceof Redirect || event.result instanceof stream_1.default.Readable) {
774
+ // don't do anything
775
+ }
776
+ else if (event.result instanceof JSONResponse) {
777
+ const schema = (event.result._statusCode && event.route.getSchemaForResponse(event.result._statusCode)) || event.route.returnType;
778
+ if (!schema || !event.result.autoSerializing)
779
+ return;
780
+ const serializerToUse = event.route && event.route.serializer ? event.route.serializer : type_1.serializer;
781
+ const serialize = (0, type_1.getSerializeFunction)(schema, serializerToUse.serializeRegistry);
782
+ event.result.json = serialize(event.result.json, event.route.serializationOptions);
783
+ }
784
+ else if (event.route.returnType && event.route.returnType.kind !== type_1.ReflectionKind.any) {
785
+ const serializerToUse = event.route && event.route.serializer ? event.route.serializer : type_1.serializer;
786
+ const serialize = (0, type_1.getSerializeFunction)(event.route.returnType, serializerToUse.serializeRegistry);
787
+ event.result = serialize(event.result, event.route.serializationOptions);
788
+ }
789
+ else {
790
+ const schema = event.route.getSchemaForResponse(200);
791
+ if (!schema)
792
+ return;
793
+ const serializerToUse = event.route && event.route.serializer ? event.route.serializer : type_1.serializer;
794
+ const serialize = (0, type_1.getSerializeFunction)(schema, serializerToUse.serializeRegistry);
795
+ event.result = serialize(event.result, event.route.serializationOptions);
796
+ }
797
+ }
798
+ async onResponse(event) {
799
+ if (event.response.headersSent)
800
+ return;
801
+ this.resultFormatter.handle(event.result, event);
802
+ }
803
+ }
804
+ HttpListener.__type = [() => router_js_1.HttpRouter, 'router', () => __ΩLoggerInterface, 'logger', () => HttpResultFormatter, 'resultFormatter', () => stopwatch_1.Stopwatch, 'stopwatch', 'constructor', () => exports.httpWorkflow.onRequest.event, 'event', 'onRequest', () => exports.httpWorkflow.onRoute.event, 'onRoute', () => exports.httpWorkflow.onRoute.event, 'onRouteForward', () => exports.httpWorkflow.onRouteNotFound.event, 'routeNotFound', () => exports.httpWorkflow.onAuth.event, 'onAuth', () => exports.httpWorkflow.onResolveParameters.event, 'onResolveParameters', () => exports.httpWorkflow.onAccessDenied.event, 'onAccessDenied', () => exports.httpWorkflow.onController.event, 'onController', () => exports.httpWorkflow.onParametersFailed.event, 'onParametersFailed', () => exports.httpWorkflow.onControllerError.event, 'onControllerError', () => exports.httpWorkflow.onResponse.event, 'onResultSerialization', () => exports.httpWorkflow.onResponse.event, 'onResponse', 'PP7!2"<n#2$<P7%2&<P7\'2(8<"0)Pi*2+$0,Pi-2+"0.Pi/2+"00Pi12+$`02Pi32+$04Pi52+"06Pi72+$08Pi92+"0:Pi;2+$0<Pi=2+$0>Pi?2+"0@PiA2+"0B5'];
805
+ __decorate([
806
+ event_1.eventDispatcher.listen(exports.httpWorkflow.onRequest, 100),
807
+ __metadata("design:type", Function),
808
+ __metadata("design:paramtypes", [Object]),
809
+ __metadata("design:returntype", void 0)
810
+ ], HttpListener.prototype, "onRequest", null);
811
+ __decorate([
812
+ event_1.eventDispatcher.listen(exports.httpWorkflow.onRoute, 100),
813
+ __metadata("design:type", Function),
814
+ __metadata("design:paramtypes", [Object]),
815
+ __metadata("design:returntype", Promise)
816
+ ], HttpListener.prototype, "onRoute", null);
817
+ __decorate([
818
+ event_1.eventDispatcher.listen(exports.httpWorkflow.onRoute, 1000),
819
+ __metadata("design:type", Function),
820
+ __metadata("design:paramtypes", [Object]),
821
+ __metadata("design:returntype", void 0)
822
+ ], HttpListener.prototype, "onRouteForward", null);
823
+ __decorate([
824
+ event_1.eventDispatcher.listen(exports.httpWorkflow.onRouteNotFound, 100),
825
+ __metadata("design:type", Function),
826
+ __metadata("design:paramtypes", [Object]),
827
+ __metadata("design:returntype", Promise)
828
+ ], HttpListener.prototype, "routeNotFound", null);
829
+ __decorate([
830
+ event_1.eventDispatcher.listen(exports.httpWorkflow.onAuth, 100),
831
+ __metadata("design:type", Function),
832
+ __metadata("design:paramtypes", [Object]),
833
+ __metadata("design:returntype", void 0)
834
+ ], HttpListener.prototype, "onAuth", null);
835
+ __decorate([
836
+ event_1.eventDispatcher.listen(exports.httpWorkflow.onResolveParameters, 100),
837
+ __metadata("design:type", Function),
838
+ __metadata("design:paramtypes", [Object]),
839
+ __metadata("design:returntype", Promise)
840
+ ], HttpListener.prototype, "onResolveParameters", null);
841
+ __decorate([
842
+ event_1.eventDispatcher.listen(exports.httpWorkflow.onAccessDenied, 100),
843
+ __metadata("design:type", Function),
844
+ __metadata("design:paramtypes", [Object]),
845
+ __metadata("design:returntype", void 0)
846
+ ], HttpListener.prototype, "onAccessDenied", null);
847
+ __decorate([
848
+ event_1.eventDispatcher.listen(exports.httpWorkflow.onController, 100),
849
+ __metadata("design:type", Function),
850
+ __metadata("design:paramtypes", [Object]),
851
+ __metadata("design:returntype", Promise)
852
+ ], HttpListener.prototype, "onController", null);
853
+ __decorate([
854
+ event_1.eventDispatcher.listen(exports.httpWorkflow.onParametersFailed, 100),
855
+ __metadata("design:type", Function),
856
+ __metadata("design:paramtypes", [Object]),
857
+ __metadata("design:returntype", void 0)
858
+ ], HttpListener.prototype, "onParametersFailed", null);
859
+ __decorate([
860
+ event_1.eventDispatcher.listen(exports.httpWorkflow.onControllerError, 100),
861
+ __metadata("design:type", Function),
862
+ __metadata("design:paramtypes", [Object]),
863
+ __metadata("design:returntype", void 0)
864
+ ], HttpListener.prototype, "onControllerError", null);
865
+ __decorate([
866
+ event_1.eventDispatcher.listen(exports.httpWorkflow.onResponse, -100),
867
+ __metadata("design:type", Function),
868
+ __metadata("design:paramtypes", [Object]),
869
+ __metadata("design:returntype", Promise)
870
+ ], HttpListener.prototype, "onResultSerialization", null);
871
+ __decorate([
872
+ event_1.eventDispatcher.listen(exports.httpWorkflow.onResponse, 100),
873
+ __metadata("design:type", Function),
874
+ __metadata("design:paramtypes", [Object]),
875
+ __metadata("design:returntype", Promise)
876
+ ], HttpListener.prototype, "onResponse", null);
877
+ exports.HttpListener = HttpListener;
878
+ //# sourceMappingURL=http.js.map