web_api_base 6.0.3 → 6.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 (155) hide show
  1. package/package.json +4 -5
  2. package/readme.md +36 -12
  3. package/dist/Application.d.ts +0 -28
  4. package/dist/Application.js +0 -643
  5. package/dist/Application.js.map +0 -1
  6. package/dist/ApplicationConfiguration.d.ts +0 -20
  7. package/dist/ApplicationConfiguration.js +0 -132
  8. package/dist/ApplicationConfiguration.js.map +0 -1
  9. package/dist/bin/CreateApplication.d.ts +0 -1
  10. package/dist/bin/CreateApplication.js +0 -6
  11. package/dist/bin/CreateApplication.js.map +0 -1
  12. package/dist/bin/CreateController.d.ts +0 -1
  13. package/dist/bin/CreateController.js +0 -5
  14. package/dist/bin/CreateController.js.map +0 -1
  15. package/dist/bin/Factory.d.ts +0 -2
  16. package/dist/bin/Factory.js +0 -81
  17. package/dist/bin/Factory.js.map +0 -1
  18. package/dist/controllers/AcceptedResult.d.ts +0 -4
  19. package/dist/controllers/AcceptedResult.js +0 -13
  20. package/dist/controllers/AcceptedResult.js.map +0 -1
  21. package/dist/controllers/ActionResult.d.ts +0 -5
  22. package/dist/controllers/ActionResult.js +0 -10
  23. package/dist/controllers/ActionResult.js.map +0 -1
  24. package/dist/controllers/BadRequestResult.d.ts +0 -4
  25. package/dist/controllers/BadRequestResult.js +0 -13
  26. package/dist/controllers/BadRequestResult.js.map +0 -1
  27. package/dist/controllers/CreatedResult.d.ts +0 -4
  28. package/dist/controllers/CreatedResult.js +0 -13
  29. package/dist/controllers/CreatedResult.js.map +0 -1
  30. package/dist/controllers/DownloadFileResult.d.ts +0 -4
  31. package/dist/controllers/DownloadFileResult.js +0 -13
  32. package/dist/controllers/DownloadFileResult.js.map +0 -1
  33. package/dist/controllers/ErrorResult.d.ts +0 -4
  34. package/dist/controllers/ErrorResult.js +0 -13
  35. package/dist/controllers/ErrorResult.js.map +0 -1
  36. package/dist/controllers/ForbiddenResult.d.ts +0 -4
  37. package/dist/controllers/ForbiddenResult.js +0 -13
  38. package/dist/controllers/ForbiddenResult.js.map +0 -1
  39. package/dist/controllers/GenericResult.d.ts +0 -5
  40. package/dist/controllers/GenericResult.js +0 -13
  41. package/dist/controllers/GenericResult.js.map +0 -1
  42. package/dist/controllers/NoContentResult.d.ts +0 -4
  43. package/dist/controllers/NoContentResult.js +0 -13
  44. package/dist/controllers/NoContentResult.js.map +0 -1
  45. package/dist/controllers/NotFoundResult.d.ts +0 -4
  46. package/dist/controllers/NotFoundResult.js +0 -13
  47. package/dist/controllers/NotFoundResult.js.map +0 -1
  48. package/dist/controllers/OKResult.d.ts +0 -4
  49. package/dist/controllers/OKResult.js +0 -13
  50. package/dist/controllers/OKResult.js.map +0 -1
  51. package/dist/controllers/SendFileResult.d.ts +0 -4
  52. package/dist/controllers/SendFileResult.js +0 -13
  53. package/dist/controllers/SendFileResult.js.map +0 -1
  54. package/dist/controllers/UnauthorizedResult.d.ts +0 -4
  55. package/dist/controllers/UnauthorizedResult.js +0 -13
  56. package/dist/controllers/UnauthorizedResult.js.map +0 -1
  57. package/dist/controllers/base/ControllerBase.d.ts +0 -32
  58. package/dist/controllers/base/ControllerBase.js +0 -84
  59. package/dist/controllers/base/ControllerBase.js.map +0 -1
  60. package/dist/decorators/controllers/ControllerDecorators.d.ts +0 -65
  61. package/dist/decorators/controllers/ControllerDecorators.js +0 -256
  62. package/dist/decorators/controllers/ControllerDecorators.js.map +0 -1
  63. package/dist/decorators/documentation/DocumentationDecorators.d.ts +0 -23
  64. package/dist/decorators/documentation/DocumentationDecorators.js +0 -69
  65. package/dist/decorators/documentation/DocumentationDecorators.js.map +0 -1
  66. package/dist/decorators/validations/ValidationDecorators.d.ts +0 -53
  67. package/dist/decorators/validations/ValidationDecorators.js +0 -181
  68. package/dist/decorators/validations/ValidationDecorators.js.map +0 -1
  69. package/dist/dependencyInjection/DependecyService.d.ts +0 -28
  70. package/dist/dependencyInjection/DependecyService.js +0 -136
  71. package/dist/dependencyInjection/DependecyService.js.map +0 -1
  72. package/dist/dependencyInjection/IDIContext.d.ts +0 -7
  73. package/dist/dependencyInjection/IDIContext.js +0 -3
  74. package/dist/dependencyInjection/IDIContext.js.map +0 -1
  75. package/dist/documentation/CSS.d.ts +0 -6
  76. package/dist/documentation/CSS.js +0 -302
  77. package/dist/documentation/CSS.js.map +0 -1
  78. package/dist/documentation/Documentation.d.ts +0 -7
  79. package/dist/documentation/Documentation.js +0 -89
  80. package/dist/documentation/Documentation.js.map +0 -1
  81. package/dist/documentation/HTML.d.ts +0 -4
  82. package/dist/documentation/HTML.js +0 -26
  83. package/dist/documentation/HTML.js.map +0 -1
  84. package/dist/documentation/JS.d.ts +0 -5
  85. package/dist/documentation/JS.js +0 -416
  86. package/dist/documentation/JS.js.map +0 -1
  87. package/dist/enums/httpVerbs/HttpVerbs.d.ts +0 -6
  88. package/dist/enums/httpVerbs/HttpVerbs.js +0 -11
  89. package/dist/enums/httpVerbs/HttpVerbs.js.map +0 -1
  90. package/dist/exceptions/ArgumentNullException.d.ts +0 -3
  91. package/dist/exceptions/ArgumentNullException.js +0 -10
  92. package/dist/exceptions/ArgumentNullException.js.map +0 -1
  93. package/dist/exceptions/BodyParseException.d.ts +0 -3
  94. package/dist/exceptions/BodyParseException.js +0 -10
  95. package/dist/exceptions/BodyParseException.js.map +0 -1
  96. package/dist/exceptions/ControllerLoadException.d.ts +0 -3
  97. package/dist/exceptions/ControllerLoadException.js +0 -10
  98. package/dist/exceptions/ControllerLoadException.js.map +0 -1
  99. package/dist/exceptions/DecoratorException.d.ts +0 -3
  100. package/dist/exceptions/DecoratorException.js +0 -10
  101. package/dist/exceptions/DecoratorException.js.map +0 -1
  102. package/dist/exceptions/Exception.d.ts +0 -4
  103. package/dist/exceptions/Exception.js +0 -10
  104. package/dist/exceptions/Exception.js.map +0 -1
  105. package/dist/exceptions/FileNotFoundException.d.ts +0 -3
  106. package/dist/exceptions/FileNotFoundException.js +0 -10
  107. package/dist/exceptions/FileNotFoundException.js.map +0 -1
  108. package/dist/exceptions/FindDependencyException.d.ts +0 -3
  109. package/dist/exceptions/FindDependencyException.js +0 -10
  110. package/dist/exceptions/FindDependencyException.js.map +0 -1
  111. package/dist/exceptions/InvalidEntityException.d.ts +0 -3
  112. package/dist/exceptions/InvalidEntityException.js +0 -10
  113. package/dist/exceptions/InvalidEntityException.js.map +0 -1
  114. package/dist/file/AbstractFileService.d.ts +0 -11
  115. package/dist/file/AbstractFileService.js +0 -6
  116. package/dist/file/AbstractFileService.js.map +0 -1
  117. package/dist/file/AbstractMultiPartRequestService.d.ts +0 -16
  118. package/dist/file/AbstractMultiPartRequestService.js +0 -12
  119. package/dist/file/AbstractMultiPartRequestService.js.map +0 -1
  120. package/dist/file/File.d.ts +0 -5
  121. package/dist/file/File.js +0 -10
  122. package/dist/file/File.js.map +0 -1
  123. package/dist/file/FileService.d.ts +0 -12
  124. package/dist/file/FileService.js +0 -136
  125. package/dist/file/FileService.js.map +0 -1
  126. package/dist/file/FormidableMultiPartRequestService.d.ts +0 -4
  127. package/dist/file/FormidableMultiPartRequestService.js +0 -73
  128. package/dist/file/FormidableMultiPartRequestService.js.map +0 -1
  129. package/dist/index.d.ts +0 -76
  130. package/dist/index.js +0 -225
  131. package/dist/index.js.map +0 -1
  132. package/dist/interfaces/IApplication.d.ts +0 -14
  133. package/dist/interfaces/IApplication.js +0 -3
  134. package/dist/interfaces/IApplication.js.map +0 -1
  135. package/dist/interfaces/IApplicationConfiguration.d.ts +0 -14
  136. package/dist/interfaces/IApplicationConfiguration.js +0 -3
  137. package/dist/interfaces/IApplicationConfiguration.js.map +0 -1
  138. package/dist/interfaces/IController.d.ts +0 -5
  139. package/dist/interfaces/IController.js +0 -3
  140. package/dist/interfaces/IController.js.map +0 -1
  141. package/dist/metadata/FunctionAnalizer.d.ts +0 -9
  142. package/dist/metadata/FunctionAnalizer.js +0 -57
  143. package/dist/metadata/FunctionAnalizer.js.map +0 -1
  144. package/dist/metadata/OwnMetaDataContainer.d.ts +0 -12
  145. package/dist/metadata/OwnMetaDataContainer.js +0 -33
  146. package/dist/metadata/OwnMetaDataContainer.js.map +0 -1
  147. package/dist/metadata/Type.d.ts +0 -7
  148. package/dist/metadata/Type.js +0 -139
  149. package/dist/metadata/Type.js.map +0 -1
  150. package/dist/midlewares/IMidleware.d.ts +0 -19
  151. package/dist/midlewares/IMidleware.js +0 -3
  152. package/dist/midlewares/IMidleware.js.map +0 -1
  153. package/dist/utils/Utils.d.ts +0 -3
  154. package/dist/utils/Utils.js +0 -11
  155. package/dist/utils/Utils.js.map +0 -1
@@ -1,643 +0,0 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
- return new (P || (P = Promise))(function (resolve, reject) {
28
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
- step((generator = generator.apply(thisArg, _arguments || [])).next());
32
- });
33
- };
34
- var __importDefault = (this && this.__importDefault) || function (mod) {
35
- return (mod && mod.__esModule) ? mod : { "default": mod };
36
- };
37
- Object.defineProperty(exports, "__esModule", { value: true });
38
- const express_1 = __importDefault(require("express"));
39
- const ApplicationConfiguration_1 = __importDefault(require("./ApplicationConfiguration"));
40
- const ControllerDecorators_1 = __importDefault(require("./decorators/controllers/ControllerDecorators"));
41
- const DependecyService_1 = __importDefault(require("./dependencyInjection/DependecyService"));
42
- const HttpVerbs_1 = require("./enums/httpVerbs/HttpVerbs");
43
- const fs_1 = __importDefault(require("fs"));
44
- const path_1 = __importDefault(require("path"));
45
- const ValidationDecorators_1 = __importDefault(require("./decorators/validations/ValidationDecorators"));
46
- const ControllerLoadException_1 = __importDefault(require("./exceptions/ControllerLoadException"));
47
- const Exception_1 = __importDefault(require("./exceptions/Exception"));
48
- const Documentation_1 = __importDefault(require("./documentation/Documentation"));
49
- const ActionResult_1 = __importDefault(require("./controllers/ActionResult"));
50
- const BodyParseException_1 = __importDefault(require("./exceptions/BodyParseException"));
51
- const AbstractMultiPartRequestService_1 = __importStar(require("./file/AbstractMultiPartRequestService"));
52
- const FormidableMultiPartRequestService_1 = __importDefault(require("./file/FormidableMultiPartRequestService"));
53
- const File_1 = __importDefault(require("./file/File"));
54
- const Type_1 = __importDefault(require("./metadata/Type"));
55
- const SendFileResult_1 = __importDefault(require("./controllers/SendFileResult"));
56
- const DownloadFileResult_1 = __importDefault(require("./controllers/DownloadFileResult"));
57
- class Application {
58
- constructor() {
59
- this._createdControllers = [];
60
- this._URIs = [];
61
- this.ApplicationConfiguration = new ApplicationConfiguration_1.default();
62
- this.Express = (0, express_1.default)();
63
- }
64
- StartAsync() {
65
- return __awaiter(this, void 0, void 0, function* () {
66
- yield this.ApplicationConfiguration.LoadAsync();
67
- Application.Configurations = this.ApplicationConfiguration;
68
- this.Express.use(express_1.default.json({ limit: 50 * 1024 * 1024 }));
69
- this.ApplicationConfiguration.AddScoped(AbstractMultiPartRequestService_1.default, FormidableMultiPartRequestService_1.default);
70
- yield this.ConfigureAsync(this.ApplicationConfiguration);
71
- if (this.ApplicationConfiguration)
72
- this.Express.use((e, rq, rs, n) => {
73
- if (e && e instanceof Error && e instanceof SyntaxError) {
74
- let b = new BodyParseException_1.default(e.message);
75
- b.stack = e.stack;
76
- this.CallErrorHandler(rq, rs, b);
77
- }
78
- else
79
- n();
80
- });
81
- yield this.ApplicationConfiguration.SaveAsync();
82
- this.Express.listen(this.ApplicationConfiguration.Port, this.ApplicationConfiguration.Host, () => {
83
- console.log(`Application running on ${this.ApplicationConfiguration.Host}:${this.ApplicationConfiguration.Port}`);
84
- });
85
- });
86
- }
87
- UseCors() {
88
- this.Express.use(require('cors')());
89
- }
90
- GetIgnoredPaths() {
91
- return [
92
- ".git",
93
- ".vscode",
94
- "coverage",
95
- "node_modules"
96
- ];
97
- }
98
- TryFindControllerFolder(path) {
99
- if (this.GetIgnoredPaths().filter(s => path.endsWith(s)).length > 0)
100
- return undefined;
101
- if (path.indexOf("node_modules") > -1)
102
- return undefined;
103
- if (!fs_1.default.existsSync(path))
104
- return undefined;
105
- if (fs_1.default.readdirSync(path).filter(s => s.toLowerCase().endsWith("controller.js")).length > 0)
106
- return path;
107
- let folder = fs_1.default.readdirSync(path).filter(s => !fs_1.default.lstatSync(path_1.default.join(path, s)).isFile());
108
- if (folder.length == 0)
109
- return undefined;
110
- for (let f of folder) {
111
- let find = this.TryFindControllerFolder(path_1.default.join(path, f));
112
- if (find && find.toLowerCase().endsWith("controllers"))
113
- return find;
114
- }
115
- return undefined;
116
- }
117
- UseControllersAsync(root) {
118
- return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
119
- let controllersPath = this.TryFindControllerFolder(path_1.default.join(root !== null && root !== void 0 ? root : this.ApplicationConfiguration.RootPath, "controllers"));
120
- if (!controllersPath)
121
- controllersPath = this.TryFindControllerFolder(root !== null && root !== void 0 ? root : this.ApplicationConfiguration.RootPath);
122
- if (!controllersPath || !fs_1.default.existsSync(controllersPath))
123
- return;
124
- console.debug(`reading controllers in ${controllersPath}`);
125
- let files = fs_1.default.readdirSync(controllersPath).filter(s => s.toLowerCase().endsWith("controller.js"));
126
- for (let controllerFile of files) {
127
- let controllerModule = yield Promise.resolve(`${path_1.default.join(controllersPath, controllerFile)}`).then(s => __importStar(require(s)));
128
- let controllerClass = undefined;
129
- if (controllerModule.default == undefined) {
130
- for (let c in controllerModule) {
131
- if (c.toLowerCase().endsWith("controller")) {
132
- controllerClass = controllerModule[c];
133
- }
134
- }
135
- }
136
- else
137
- controllerClass = controllerModule.default;
138
- if (controllerClass == undefined)
139
- throw new ControllerLoadException_1.default(`Can find any controller from file : ${controllerFile}`);
140
- let controller = Reflect.construct(controllerClass.prototype.constructor, []);
141
- if (controller != undefined && controller != null) {
142
- this.AppendController(controllerClass.prototype.constructor);
143
- }
144
- else {
145
- throw new ControllerLoadException_1.default(`Can not load ${controllerClass.name} controller from file : ${controllerFile}`);
146
- }
147
- }
148
- resolve();
149
- }));
150
- }
151
- UseCustomMultiPartRequestHandler(cTor) {
152
- this.ApplicationConfiguration.AddScoped(AbstractMultiPartRequestService_1.default, cTor);
153
- }
154
- AppendController(ctor) {
155
- let empty = new ctor();
156
- let methods = Reflect.ownKeys(empty.constructor.prototype).filter(m => {
157
- return typeof empty[m] == "function";
158
- });
159
- let route = ControllerDecorators_1.default.GetRoute(empty);
160
- let validateBody = ControllerDecorators_1.default.IsToValidate(empty);
161
- if (!route)
162
- return;
163
- this._createdControllers.push(ctor);
164
- for (let method of methods) {
165
- let action = ControllerDecorators_1.default.GetAction(empty, method.toString());
166
- if (!action) {
167
- continue;
168
- }
169
- let verb = ControllerDecorators_1.default.GetVerb(empty, method.toString());
170
- let fromBody = ControllerDecorators_1.default.GetFromBodyArgs(empty.constructor, method.toString());
171
- let fromQuery = ControllerDecorators_1.default.GetFromQueryArgs(empty.constructor, method.toString());
172
- let fromFiles = ControllerDecorators_1.default.GetFromFilesArgs(empty.constructor, method.toString());
173
- let maxFilesSize = ControllerDecorators_1.default.GetMaxFilesSize(empty.constructor);
174
- ControllerDecorators_1.default.GetNonDecoratedArguments(empty, method, fromBody, fromQuery, fromFiles);
175
- if (!verb)
176
- verb = HttpVerbs_1.HTTPVerbs.GET;
177
- if (verb == HttpVerbs_1.HTTPVerbs.GET && fromBody.length > 0)
178
- throw new ControllerLoadException_1.default(`GET method: ${ctor.name}.${method.toString()} can not have body params`);
179
- if (verb != HttpVerbs_1.HTTPVerbs.POST && fromFiles.length > 0)
180
- throw new ControllerLoadException_1.default(`Method: ${ctor.name}.${method.toString()} must be a POST method to allow File type parameters`);
181
- let collision = this._URIs.filter(s => s.URI == `${route}${action}`);
182
- if (collision.length > 0)
183
- throw new ControllerLoadException_1.default(`The URI: ${route}${action} exists in two controllers: ${collision[0].Controller} and ${ctor.name}.${method.toString()}`);
184
- console.debug("appended : ", verb, `${route}${action}`);
185
- this._URIs.push({ URI: `${route}${action}`, Controller: `${ctor.name}.${method.toString()}` });
186
- this.Express[verb.toString().toLowerCase()](`${route}${action}`, (request, response) => __awaiter(this, void 0, void 0, function* () {
187
- let midlewares = ControllerDecorators_1.default.GetMidlewares(empty).map(s => s).reverse();
188
- midlewares.push(...ControllerDecorators_1.default.GetBefores(empty, method.toString()).map(s => s).reverse());
189
- let afters = ControllerDecorators_1.default.GetMidlewaresAfter(empty).map(s => s).reverse();
190
- afters.push(...ControllerDecorators_1.default.GetAfters(empty, method.toString()).map(s => s).reverse());
191
- let handler = (context) => __awaiter(this, void 0, void 0, function* () {
192
- var _a, _b;
193
- let params = [];
194
- let ts = ((_b = ((_a = Reflect.getMetadata("design:paramtypes", empty, method.toString())) !== null && _a !== void 0 ? _a : Reflect.getMetadata("design:paramtypes", empty.constructor, method.toString()))) !== null && _b !== void 0 ? _b : []);
195
- let content_type = request.headers["content-type"];
196
- let isMultiPartFormData = content_type && content_type.indexOf('multipart/form-data') > -1;
197
- let parts = [];
198
- let fromFilesParams = [];
199
- if (isMultiPartFormData) {
200
- let multiPartService = DependecyService_1.default.Resolve(AbstractMultiPartRequestService_1.default);
201
- try {
202
- parts = yield multiPartService.GetPartsFromRequestAsync(request, { MaxFileSize: maxFilesSize });
203
- }
204
- catch (err) {
205
- return this.CallErrorHandler(request, response, this.CastToExpection(err));
206
- }
207
- for (let f of fromFiles) {
208
- let fs = parts === null || parts === void 0 ? void 0 : parts.filter(s => s.Type == AbstractMultiPartRequestService_1.PartType.FILE);
209
- if (fs.length > 0) {
210
- if (f.FileName) {
211
- let files = fs.filter(s => s.Filename == f.FileName);
212
- if (files.length > 0) {
213
- let fileClass = new File_1.default(files[0].Filename, files[0].Content);
214
- fromFilesParams.push(fileClass);
215
- params[f.Index] = fileClass;
216
- }
217
- }
218
- else {
219
- let fileClass = new File_1.default(fs[0].Filename, fs[0].Content);
220
- fromFilesParams.push(fileClass);
221
- params[f.Index] = fileClass;
222
- }
223
- }
224
- }
225
- }
226
- let fromBodyParams = [];
227
- if (fromBody.length > 0) {
228
- fromBody.sort((a, b) => a.Index - b.Index).forEach(f => {
229
- let obj = undefined;
230
- if (!f.Field || f.Type.name == "Object") {
231
- let fieldParts = parts.filter(s => s.Name == 'body');
232
- if (isMultiPartFormData && fieldParts.length > 0) {
233
- try {
234
- obj = JSON.parse(fieldParts[0].Content);
235
- }
236
- catch (_a) {
237
- obj = fieldParts[0].Content;
238
- }
239
- }
240
- else {
241
- obj = request.body;
242
- }
243
- }
244
- else {
245
- let fieldParts = parts.filter(s => s.Name == f.Field);
246
- if (isMultiPartFormData && fieldParts.length > 0) {
247
- try {
248
- obj = JSON.parse(fieldParts[0].Content);
249
- }
250
- catch (_b) {
251
- obj = fieldParts[0].Content;
252
- }
253
- }
254
- else {
255
- obj = request.body[f.Field];
256
- }
257
- }
258
- if (["string", "number", "boolean", "bigint"].filter(s => s == ts[f.Index].name.toLowerCase()).length == 0) {
259
- try {
260
- obj.__proto__ = ts[f.Index];
261
- }
262
- catch (_c) { }
263
- if (f.Type.name == "Object") {
264
- fromBodyParams.push(obj);
265
- params[f.Index] = obj;
266
- }
267
- else {
268
- let t = Reflect.construct(ts[f.Index], []);
269
- Object.assign(t, obj);
270
- fromBodyParams.push(t);
271
- params[f.Index] = t;
272
- }
273
- }
274
- else {
275
- if (obj != undefined && typeof obj == "string" && obj.indexOf('"') == 0 && obj.lastIndexOf('"') == obj.length - 1)
276
- obj = obj.substring(1, obj.length - 1);
277
- if (obj != undefined && typeof obj == "string" && obj.indexOf("'") == 0 && obj.lastIndexOf("'") == obj.length - 1)
278
- obj = obj.substring(1, obj.length - 1);
279
- if (obj != undefined && ts[f.Index].name.toLowerCase() == "number") {
280
- let number = Number.parseFloat(obj.toString());
281
- if (number != Number.NaN) {
282
- fromBodyParams.push(number);
283
- params[f.Index] = number;
284
- }
285
- else {
286
- fromBodyParams.push(undefined);
287
- params[f.Index] = undefined;
288
- }
289
- }
290
- else if (obj != undefined && ts[f.Index].name.toLowerCase() == "string") {
291
- fromBodyParams.push(obj.toString());
292
- params[f.Index] = obj.toString();
293
- }
294
- else if (obj != undefined && ts[f.Index].name.toLowerCase() == "date") {
295
- try {
296
- fromBodyParams.push(Type_1.default.CastStringToDateUTC(obj));
297
- params[f.Index] = Type_1.default.CastStringToDateUTC(obj);
298
- }
299
- catch (_d) { }
300
- }
301
- else {
302
- fromBodyParams.push(obj);
303
- params[f.Index] = obj;
304
- }
305
- }
306
- });
307
- }
308
- let fromQueryParams = [];
309
- if (fromQuery.length > 0) {
310
- fromQuery.sort((a, b) => a.Index - b.Index).forEach((f, j) => {
311
- var _a;
312
- let obj;
313
- if (f.Field == '') {
314
- let j = 0;
315
- for (let k in request.query) {
316
- if (j == f.Index)
317
- f.Field = k;
318
- }
319
- }
320
- if (f.Field == '') {
321
- params[f.Index] = undefined;
322
- return;
323
- }
324
- obj = (_a = request.query[f.Field]) === null || _a === void 0 ? void 0 : _a.toString();
325
- if (obj != undefined && typeof obj == "string" && obj.indexOf('"') == 0 && obj.lastIndexOf('"') == obj.length - 1)
326
- obj = obj.substring(1, obj.length - 1);
327
- if (obj != undefined && typeof obj == "string" && obj.indexOf("'") == 0 && obj.lastIndexOf("'") == obj.length - 1)
328
- obj = obj.substring(1, obj.length - 1);
329
- if (obj != undefined && f.Type.name.toLowerCase() == "number") {
330
- let number = Number.parseFloat(obj.toString());
331
- if (number != Number.NaN) {
332
- fromQueryParams.push(number);
333
- params[f.Index] = number;
334
- }
335
- else {
336
- fromBodyParams.push(undefined);
337
- params[f.Index] = undefined;
338
- }
339
- }
340
- else if (obj != undefined && f.Type.name.toLowerCase() == "string") {
341
- fromQueryParams.push(obj.toString());
342
- params[f.Index] = obj.toString();
343
- }
344
- else if (obj != undefined && f.Type.name.toLowerCase() == "date") {
345
- try {
346
- fromQueryParams.push(Type_1.default.CastStringToDateUTC(obj));
347
- params[f.Index] = Type_1.default.CastStringToDateUTC(obj);
348
- }
349
- catch (_b) { }
350
- }
351
- else if (obj != undefined && f.Type.name.toLowerCase() == "boolean") {
352
- try {
353
- if (typeof obj != "boolean") {
354
- let v = obj.toString().toLowerCase() == "true";
355
- fromQueryParams.push(v);
356
- params[f.Index] = v;
357
- }
358
- else {
359
- fromQueryParams.push(obj);
360
- params[f.Index] = obj;
361
- }
362
- }
363
- catch (_c) { }
364
- }
365
- else {
366
- fromQueryParams.push(obj);
367
- params[f.Index] = obj;
368
- }
369
- });
370
- }
371
- if (validateBody) {
372
- if (fromBody.length > 0) {
373
- let modelBindErros = [];
374
- for (let p of fromBody) {
375
- if (p.Required && (params.length <= p.Index || params[p.Index] == undefined)) {
376
- modelBindErros.push(p);
377
- }
378
- else {
379
- try {
380
- Type_1.default.ValidateType(params[p.Index], ts[p.Index]);
381
- }
382
- catch (e) {
383
- response.status(400);
384
- response.json({
385
- Message: "Model binding fail",
386
- Detailts: e.message
387
- });
388
- return;
389
- }
390
- }
391
- }
392
- if (modelBindErros.length > 0) {
393
- response.status(400);
394
- response.json({
395
- Message: "Model binding fail",
396
- Detailts: modelBindErros.map(s => `Parameter "${s.Field}" is required`)
397
- });
398
- return;
399
- }
400
- }
401
- if (fromQuery.length > 0) {
402
- let modelBindErros = [];
403
- for (let p of fromQuery) {
404
- if (p.Required && (params.length <= p.Index || params[p.Index] == undefined)) {
405
- modelBindErros.push(p);
406
- }
407
- }
408
- if (modelBindErros.length > 0) {
409
- response.status(400);
410
- response.json({
411
- Message: "Model binding fail",
412
- Detailts: modelBindErros.map(s => `Parameter "${s.Field}" is required`)
413
- });
414
- return;
415
- }
416
- }
417
- if (fromFiles.length > 0) {
418
- let modelBindErros = [];
419
- for (let p of fromFiles) {
420
- if (p.Required && (params.length <= p.Index || params[p.Index] == undefined)) {
421
- modelBindErros.push(p);
422
- }
423
- }
424
- if (modelBindErros.length > 0) {
425
- response.status(400);
426
- response.json({
427
- Message: "Model binding fail",
428
- Detailts: modelBindErros.map(s => `The file ${(s.FileName ? `"${s.FileName} "` : "")}is required`)
429
- });
430
- return;
431
- }
432
- }
433
- let validationsErrors = [];
434
- for (let a of fromBodyParams) {
435
- try {
436
- validationsErrors.push(...ValidationDecorators_1.default.Validate(a).map(s => s.Message));
437
- }
438
- catch (_c) { }
439
- }
440
- if (validationsErrors.length > 0) {
441
- response.status(400);
442
- response.json({
443
- Message: "Validation fail",
444
- Detailts: validationsErrors
445
- });
446
- return;
447
- }
448
- }
449
- let controller = DependecyService_1.default.ResolveCtor(empty.constructor);
450
- if (controller == undefined)
451
- controller = new ctor();
452
- try {
453
- DependecyService_1.default.CheckForDependenciesAndResolve(controller);
454
- }
455
- catch (err) {
456
- this.CallErrorHandler(request, response, this.CastToExpection(err));
457
- }
458
- controller.Request = context.Request;
459
- controller.Response = context.Response;
460
- try {
461
- let exceutionTask = controller[method](...params);
462
- if (exceutionTask instanceof Promise) {
463
- try {
464
- let c = yield exceutionTask;
465
- for (let afterHandler of afters) {
466
- try {
467
- yield afterHandler({
468
- Request: request,
469
- Response: response,
470
- Result: c
471
- });
472
- }
473
- catch (subErr) {
474
- return this.CallErrorHandler(request, response, this.CastToExpection(subErr));
475
- }
476
- }
477
- this.SendResponseIfNecessary(controller, response, c);
478
- }
479
- catch (err) {
480
- for (let afterHandler of afters) {
481
- try {
482
- yield afterHandler({
483
- Exception: this.CastToExpection(err),
484
- Request: request,
485
- Response: response
486
- });
487
- }
488
- catch (subErr) {
489
- return this.CallErrorHandler(request, response, this.CastToExpection(subErr));
490
- }
491
- }
492
- if (afters.length == 0)
493
- this.CallErrorHandler(request, response, this.CastToExpection(err));
494
- }
495
- }
496
- else {
497
- for (let afterHandler of afters) {
498
- try {
499
- yield afterHandler({
500
- Request: request,
501
- Response: response,
502
- Result: exceutionTask
503
- });
504
- }
505
- catch (err) {
506
- this.CallErrorHandler(request, response, this.CastToExpection(err));
507
- }
508
- }
509
- this.SendResponseIfNecessary(controller, response, exceutionTask);
510
- }
511
- }
512
- catch (err) {
513
- for (let afterHandler of afters) {
514
- try {
515
- yield afterHandler({
516
- Exception: this.CastToExpection(err),
517
- Request: request,
518
- Response: response
519
- });
520
- }
521
- catch (subErr) {
522
- this.CallErrorHandler(request, response, this.CastToExpection(subErr));
523
- }
524
- }
525
- if (afters.length == 0)
526
- this.CallErrorHandler(request, response, this.CastToExpection(err));
527
- }
528
- });
529
- if (midlewares && midlewares.length > 0) {
530
- let httpRequestContexts = [];
531
- let pipeline = [];
532
- for (let i = 0; i <= midlewares.length; i++) {
533
- httpRequestContexts.push({
534
- Request: request,
535
- Response: response,
536
- Next: () => __awaiter(this, void 0, void 0, function* () { })
537
- });
538
- }
539
- for (let i = 0; i < httpRequestContexts.length; i++) {
540
- let box = {
541
- v: i
542
- };
543
- pipeline.push({
544
- Execute: () => __awaiter(this, void 0, void 0, function* () {
545
- try {
546
- pipeline.length - 1 == box.v ? yield handler(httpRequestContexts[box.v]) : yield midlewares[box.v](httpRequestContexts[box.v]);
547
- }
548
- catch (err) {
549
- this.CallErrorHandler(request, response, this.CastToExpection(err));
550
- }
551
- })
552
- });
553
- }
554
- for (let i = 0; i < pipeline.length; i++) {
555
- httpRequestContexts[i].Next = i == pipeline.length - 1 ? () => __awaiter(this, void 0, void 0, function* () { }) : () => __awaiter(this, void 0, void 0, function* () {
556
- try {
557
- yield pipeline[i + 1].Execute();
558
- }
559
- catch (err) {
560
- this.CallErrorHandler(request, response, this.CastToExpection(err));
561
- }
562
- });
563
- }
564
- yield pipeline[0].Execute();
565
- }
566
- else {
567
- yield handler({
568
- Request: request,
569
- Response: response,
570
- Next: () => __awaiter(this, void 0, void 0, function* () { })
571
- });
572
- }
573
- }));
574
- }
575
- }
576
- CreateDocumentation() {
577
- new Documentation_1.default().CreateDocumentation(this._createdControllers, this.Express);
578
- }
579
- SendResponseIfNecessary(controller, response, result) {
580
- if (response.headersSent)
581
- return;
582
- if (!result) {
583
- controller.SendResponse(204);
584
- return;
585
- }
586
- if (result instanceof ActionResult_1.default) {
587
- if (result.constructor.name == SendFileResult_1.default.name) {
588
- controller.Response.sendFile(result.Result);
589
- return;
590
- }
591
- if (result.constructor.name == DownloadFileResult_1.default.name) {
592
- controller.Response.download(result.Result);
593
- return;
594
- }
595
- controller.SendResponse(result.StatusCode, result.Result);
596
- return;
597
- }
598
- controller.SendResponse(200, result);
599
- }
600
- CastToExpection(err) {
601
- let ex;
602
- if (err instanceof Exception_1.default)
603
- ex = err;
604
- else {
605
- ex = new Exception_1.default(err.message);
606
- ex.stack = err.stack;
607
- }
608
- return ex;
609
- }
610
- CallErrorHandler(request, response, exception) {
611
- let defaultHandler = (request, response, exception) => {
612
- try {
613
- if (response.headersSent)
614
- return;
615
- response.status(500);
616
- response.json(exception);
617
- }
618
- catch (err) {
619
- console.log("Error while trying handle the error");
620
- console.log(err);
621
- }
622
- finally {
623
- console.log("Inner exception");
624
- console.log(exception);
625
- }
626
- };
627
- if (this.ApplicationThreadExeptionHandler != undefined) {
628
- try {
629
- this.ApplicationThreadExeptionHandler(request, response, this.CastToExpection(exception));
630
- }
631
- catch (err) {
632
- console.log("Error while trying handle the error with custom delegate");
633
- console.log(err);
634
- defaultHandler(request, response, this.CastToExpection(err));
635
- }
636
- }
637
- else {
638
- defaultHandler(request, response, this.CastToExpection(exception));
639
- }
640
- }
641
- }
642
- exports.default = Application;
643
- //# sourceMappingURL=Application.js.map