axe-api 0.31.4 → 1.0.0-rc10

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 (150) hide show
  1. package/build/dev-kit.d.ts +1 -0
  2. package/build/dev-kit.js +16 -0
  3. package/build/index.d.ts +3 -2
  4. package/build/index.js +6 -1
  5. package/build/src/Builders/ModelTreeBuilder.js +1 -2
  6. package/build/src/Builders/RouterBuilder.d.ts +1 -5
  7. package/build/src/Builders/RouterBuilder.js +17 -112
  8. package/build/src/Enums.d.ts +0 -7
  9. package/build/src/Enums.js +14 -22
  10. package/build/src/Handlers/DocsHTMLHandler.d.ts +3 -2
  11. package/build/src/Handlers/Helpers.d.ts +7 -7
  12. package/build/src/Handlers/MetadataHandler.d.ts +3 -2
  13. package/build/src/Handlers/RequestHandler.d.ts +3 -0
  14. package/build/src/Handlers/RequestHandler.js +99 -0
  15. package/build/src/Handlers/RoutesHandler.d.ts +3 -2
  16. package/build/src/Helpers.d.ts +1 -3
  17. package/build/src/Helpers.js +4 -68
  18. package/build/src/Interfaces.d.ts +74 -35
  19. package/build/src/Middlewares/RateLimit/AdaptorFactory.d.ts +6 -0
  20. package/build/src/Middlewares/RateLimit/AdaptorFactory.js +17 -0
  21. package/build/src/Middlewares/RateLimit/IAdaptor.d.ts +6 -0
  22. package/build/src/Middlewares/RateLimit/IAdaptor.js +2 -0
  23. package/build/src/Middlewares/RateLimit/MemoryAdaptor.d.ts +10 -0
  24. package/build/src/Middlewares/RateLimit/MemoryAdaptor.js +41 -0
  25. package/build/src/Middlewares/RateLimit/RedisAdaptor.d.ts +11 -0
  26. package/build/src/Middlewares/RateLimit/RedisAdaptor.js +35 -0
  27. package/build/src/Middlewares/RateLimit/index.d.ts +6 -0
  28. package/build/src/Middlewares/RateLimit/index.js +118 -0
  29. package/build/src/Model.d.ts +4 -4
  30. package/build/src/Phases/All/FetchPhase.d.ts +3 -0
  31. package/build/src/{Middlewares/acceptLanguageMiddleware.js → Phases/All/FetchPhase.js} +4 -10
  32. package/build/src/Phases/All/PreparePhase.d.ts +3 -0
  33. package/build/src/Phases/All/PreparePhase.js +30 -0
  34. package/build/src/Phases/All/index.d.ts +4 -0
  35. package/build/src/{Middlewares → Phases/All}/index.js +4 -3
  36. package/build/src/Phases/Delete/ActionPhase.d.ts +3 -0
  37. package/build/src/Phases/Delete/ActionPhase.js +24 -0
  38. package/build/src/Phases/Delete/PreparePhase.d.ts +3 -0
  39. package/build/src/Phases/Delete/PreparePhase.js +25 -0
  40. package/build/src/Phases/Delete/QueryPhase.d.ts +3 -0
  41. package/build/src/Phases/Delete/QueryPhase.js +22 -0
  42. package/build/src/Phases/Delete/ResponsePhase.d.ts +3 -0
  43. package/build/src/Phases/Delete/ResponsePhase.js +14 -0
  44. package/build/src/Phases/Delete/index.d.ts +7 -0
  45. package/build/src/Phases/Delete/index.js +15 -0
  46. package/build/src/Phases/ForceDelete/ActionPhase.d.ts +3 -0
  47. package/build/src/Phases/ForceDelete/ActionPhase.js +16 -0
  48. package/build/src/Phases/ForceDelete/PreparePhase.d.ts +3 -0
  49. package/build/src/Phases/ForceDelete/PreparePhase.js +30 -0
  50. package/build/src/Phases/ForceDelete/QueryPhase.d.ts +3 -0
  51. package/build/src/Phases/ForceDelete/QueryPhase.js +22 -0
  52. package/build/src/Phases/ForceDelete/index.d.ts +6 -0
  53. package/build/src/Phases/ForceDelete/index.js +13 -0
  54. package/build/src/Phases/List/RelationalPhase.d.ts +3 -0
  55. package/build/src/Phases/List/RelationalPhase.js +17 -0
  56. package/build/src/Phases/List/ResultPhase.d.ts +3 -0
  57. package/build/src/Phases/List/ResultPhase.js +14 -0
  58. package/build/src/Phases/List/SerializePhase.d.ts +3 -0
  59. package/build/src/Phases/List/SerializePhase.js +19 -0
  60. package/build/src/Phases/List/index.d.ts +6 -0
  61. package/build/src/Phases/List/index.js +13 -0
  62. package/build/src/Phases/Paginate/FetchPhase.d.ts +3 -0
  63. package/build/src/Phases/Paginate/FetchPhase.js +30 -0
  64. package/build/src/Phases/Paginate/PreparePhase.d.ts +3 -0
  65. package/build/src/Phases/Paginate/PreparePhase.js +22 -0
  66. package/build/src/Phases/Paginate/index.d.ts +5 -0
  67. package/build/src/Phases/Paginate/index.js +11 -0
  68. package/build/src/Phases/Patch/PrepareActionPhase.d.ts +3 -0
  69. package/build/src/Phases/Patch/PrepareActionPhase.js +37 -0
  70. package/build/src/Phases/Patch/index.d.ts +4 -0
  71. package/build/src/Phases/Patch/index.js +9 -0
  72. package/build/src/Phases/Show/FetchPhase.d.ts +3 -0
  73. package/build/src/Phases/Show/FetchPhase.js +35 -0
  74. package/build/src/Phases/Show/PreparePhase.d.ts +3 -0
  75. package/build/src/Phases/Show/PreparePhase.js +22 -0
  76. package/build/src/Phases/Show/index.d.ts +5 -0
  77. package/build/src/Phases/Show/index.js +11 -0
  78. package/build/src/Phases/Single/GetPhase.d.ts +3 -0
  79. package/build/src/Phases/Single/GetPhase.js +29 -0
  80. package/build/src/Phases/Single/PrepareGetPhase.d.ts +3 -0
  81. package/build/src/Phases/Single/PrepareGetPhase.js +19 -0
  82. package/build/src/Phases/Single/RelationalPhase.d.ts +3 -0
  83. package/build/src/Phases/Single/RelationalPhase.js +17 -0
  84. package/build/src/Phases/Single/ResultPhase.d.ts +3 -0
  85. package/build/src/Phases/Single/ResultPhase.js +14 -0
  86. package/build/src/Phases/Single/SerializePhase.d.ts +3 -0
  87. package/build/src/Phases/Single/SerializePhase.js +18 -0
  88. package/build/src/Phases/Single/index.d.ts +8 -0
  89. package/build/src/Phases/Single/index.js +17 -0
  90. package/build/src/Phases/Store/ActionPhase.d.ts +3 -0
  91. package/build/src/Phases/Store/ActionPhase.js +29 -0
  92. package/build/src/Phases/Store/PreparePhase.d.ts +3 -0
  93. package/build/src/Phases/Store/PreparePhase.js +46 -0
  94. package/build/src/Phases/Store/index.d.ts +5 -0
  95. package/build/src/Phases/Store/index.js +11 -0
  96. package/build/src/Phases/Update/ActionPhase.d.ts +3 -0
  97. package/build/src/Phases/Update/ActionPhase.js +22 -0
  98. package/build/src/Phases/Update/PrepareActionPhase.d.ts +3 -0
  99. package/build/src/Phases/Update/PrepareActionPhase.js +37 -0
  100. package/build/src/Phases/Update/index.d.ts +5 -0
  101. package/build/src/Phases/Update/index.js +11 -0
  102. package/build/src/Resolvers/ModelResolver.js +9 -4
  103. package/build/src/Resolvers/VersionConfigResolver.js +6 -1
  104. package/build/src/Resolvers/VersionResolver.js +1 -2
  105. package/build/src/Server.d.ts +0 -1
  106. package/build/src/Server.js +29 -24
  107. package/build/src/Services/APIService.d.ts +3 -3
  108. package/build/src/Services/APIService.js +3 -8
  109. package/build/src/Services/App.d.ts +14 -0
  110. package/build/src/Services/App.js +80 -0
  111. package/build/src/Services/AxeRequest.d.ts +26 -0
  112. package/build/src/Services/AxeRequest.js +85 -0
  113. package/build/src/Services/AxeResponse.d.ts +18 -0
  114. package/build/src/Services/AxeResponse.js +41 -0
  115. package/build/src/Services/ConverterService.d.ts +9 -0
  116. package/build/src/Services/ConverterService.js +49 -0
  117. package/build/src/Services/LogService.d.ts +8 -12
  118. package/build/src/Services/LogService.js +16 -34
  119. package/build/src/Services/ModelService.d.ts +4 -4
  120. package/build/src/Services/QueryService.d.ts +4 -4
  121. package/build/src/Services/QueryService.js +14 -11
  122. package/build/src/Services/SchemaValidatorService.js +1 -2
  123. package/build/src/Services/URLService.d.ts +29 -0
  124. package/build/src/Services/URLService.js +144 -0
  125. package/build/src/Services/index.d.ts +4 -1
  126. package/build/src/Services/index.js +7 -1
  127. package/build/src/Types.d.ts +18 -6
  128. package/build/src/constants.d.ts +12 -14
  129. package/build/src/constants.js +200 -13
  130. package/package.json +29 -20
  131. package/build/src/Handlers/AllHandler.d.ts +0 -3
  132. package/build/src/Handlers/AllHandler.js +0 -45
  133. package/build/src/Handlers/DestroyHandler.d.ts +0 -3
  134. package/build/src/Handlers/DestroyHandler.js +0 -51
  135. package/build/src/Handlers/ForceDestroyHandler.d.ts +0 -3
  136. package/build/src/Handlers/ForceDestroyHandler.js +0 -45
  137. package/build/src/Handlers/HandlerFactory.d.ts +0 -6
  138. package/build/src/Handlers/HandlerFactory.js +0 -39
  139. package/build/src/Handlers/PaginateHandler.d.ts +0 -3
  140. package/build/src/Handlers/PaginateHandler.js +0 -49
  141. package/build/src/Handlers/PatchHandler.d.ts +0 -3
  142. package/build/src/Handlers/PatchHandler.js +0 -69
  143. package/build/src/Handlers/ShowHandler.d.ts +0 -3
  144. package/build/src/Handlers/ShowHandler.js +0 -55
  145. package/build/src/Handlers/StoreHandler.d.ts +0 -3
  146. package/build/src/Handlers/StoreHandler.js +0 -65
  147. package/build/src/Handlers/UpdateHandler.d.ts +0 -3
  148. package/build/src/Handlers/UpdateHandler.js +0 -69
  149. package/build/src/Middlewares/acceptLanguageMiddleware.d.ts +0 -3
  150. package/build/src/Middlewares/index.d.ts +0 -2
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const RelationalPhase_1 = __importDefault(require("./RelationalPhase"));
7
+ const ResultPhase_1 = __importDefault(require("./ResultPhase"));
8
+ const SerializePhase_1 = __importDefault(require("./SerializePhase"));
9
+ const PrepareGetPhase_1 = __importDefault(require("./PrepareGetPhase"));
10
+ const GetPhase_1 = __importDefault(require("./GetPhase"));
11
+ exports.default = {
12
+ RelationalPhase: RelationalPhase_1.default,
13
+ ResultPhase: ResultPhase_1.default,
14
+ SerializePhase: SerializePhase_1.default,
15
+ PrepareGetPhase: PrepareGetPhase_1.default,
16
+ GetPhase: GetPhase_1.default,
17
+ };
@@ -0,0 +1,3 @@
1
+ import { IRequestPack } from "../../Interfaces";
2
+ declare const _default: (context: IRequestPack) => Promise<void>;
3
+ export default _default;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () {
13
+ const [returningResult] = yield context
14
+ .database(context.model.instance.table)
15
+ .insert(context.formData)
16
+ .returning(context.model.instance.primaryKey);
17
+ let insertedPrimaryKeyValue = typeof returningResult === "number"
18
+ ? returningResult
19
+ : returningResult[context.model.instance.primaryKey];
20
+ // If the user use a special primary key value, we should use that value
21
+ if (insertedPrimaryKeyValue === 0) {
22
+ insertedPrimaryKeyValue =
23
+ context.formData[context.model.instance.primaryKey];
24
+ }
25
+ context.item = yield context
26
+ .database(context.model.instance.table)
27
+ .where(context.model.instance.primaryKey, insertedPrimaryKeyValue)
28
+ .first();
29
+ });
@@ -0,0 +1,3 @@
1
+ import { IRequestPack } from "../../Interfaces";
2
+ declare const _default: (context: IRequestPack) => Promise<void>;
3
+ export default _default;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
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
+ const validatorjs_1 = __importDefault(require("validatorjs"));
16
+ const Helpers_1 = require("../../Handlers/Helpers");
17
+ const Enums_1 = require("../../Enums");
18
+ exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () {
19
+ const requestMethod = context.req
20
+ .method;
21
+ const fillables = context.model.instance.getFillableFields(requestMethod);
22
+ context.formData = (0, Helpers_1.getMergedFormData)(context.req, fillables);
23
+ const validationRules = context.model.instance.getValidationRules(requestMethod);
24
+ if (validationRules) {
25
+ // The validation language should be set
26
+ validatorjs_1.default.useLang(context.req.currentLanguage.language);
27
+ // Validate the data
28
+ const validation = new validatorjs_1.default(context.formData, validationRules);
29
+ if (validation.fails()) {
30
+ context.res.status(400).json(validation.errors);
31
+ return;
32
+ }
33
+ }
34
+ if (context.relation && context.parentModel) {
35
+ const parentColumn = (0, Helpers_1.getParentColumn)(context.relation);
36
+ if (parentColumn) {
37
+ context.formData[context.relation.foreignKey] =
38
+ context.params[parentColumn];
39
+ }
40
+ }
41
+ // We should bind the timestamp values
42
+ (0, Helpers_1.bindTimestampValues)(context.formData, context.model, [
43
+ Enums_1.TimestampColumns.CREATED_AT,
44
+ Enums_1.TimestampColumns.UPDATED_AT,
45
+ ]);
46
+ });
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ PreparePhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
3
+ ActionPhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
4
+ };
5
+ export default _default;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const PreparePhase_1 = __importDefault(require("./PreparePhase"));
7
+ const ActionPhase_1 = __importDefault(require("./ActionPhase"));
8
+ exports.default = {
9
+ PreparePhase: PreparePhase_1.default,
10
+ ActionPhase: ActionPhase_1.default,
11
+ };
@@ -0,0 +1,3 @@
1
+ import { IRequestPack } from "../../Interfaces";
2
+ declare const _default: (context: IRequestPack) => Promise<void>;
3
+ export default _default;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () {
13
+ if (context.query) {
14
+ yield context.query
15
+ .where(context.model.instance.primaryKey, context.item[context.model.instance.primaryKey])
16
+ .update(context.formData);
17
+ context.item = yield context
18
+ .database(context.model.instance.table)
19
+ .where(context.model.instance.primaryKey, context.item[context.model.instance.primaryKey])
20
+ .first();
21
+ }
22
+ });
@@ -0,0 +1,3 @@
1
+ import { IRequestPack } from "../../Interfaces";
2
+ declare const _default: (context: IRequestPack) => Promise<void>;
3
+ export default _default;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
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
+ const validatorjs_1 = __importDefault(require("validatorjs"));
16
+ const Enums_1 = require("../../Enums");
17
+ const Helpers_1 = require("../../Handlers/Helpers");
18
+ exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () {
19
+ const requestMethod = context.req
20
+ .method;
21
+ const fillables = context.model.instance.getFillableFields(requestMethod);
22
+ context.formData = (0, Helpers_1.getMergedFormData)(context.req, fillables);
23
+ const validationRules = context.model.instance.getValidationRules(requestMethod);
24
+ if (validationRules) {
25
+ // The validation language should be set
26
+ validatorjs_1.default.useLang(context.req.currentLanguage.language);
27
+ // Validate the data
28
+ const validation = new validatorjs_1.default(context.formData, validationRules);
29
+ if (validation.fails()) {
30
+ return context.res.status(400).json(validation.errors);
31
+ }
32
+ }
33
+ // We should bind the timestamp values
34
+ (0, Helpers_1.bindTimestampValues)(context.formData, context.model, [
35
+ Enums_1.TimestampColumns.UPDATED_AT,
36
+ ]);
37
+ });
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ ActionPhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
3
+ PrepareActionPhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
4
+ };
5
+ export default _default;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const ActionPhase_1 = __importDefault(require("./ActionPhase"));
7
+ const PrepareActionPhase_1 = __importDefault(require("./PrepareActionPhase"));
8
+ exports.default = {
9
+ ActionPhase: ActionPhase_1.default,
10
+ PrepareActionPhase: PrepareActionPhase_1.default,
11
+ };
@@ -26,16 +26,22 @@ class ModelResolver {
26
26
  }
27
27
  resolve() {
28
28
  return __awaiter(this, void 0, void 0, function* () {
29
- const logger = Services_1.LogService.getInstance();
30
29
  const modelList = new Services_1.ModelListService(yield this.getModelList());
30
+ Services_1.LogService.debug(`[${this.version.name}] Model list has been resolved`);
31
31
  yield this.setModelRelations(modelList);
32
+ Services_1.LogService.debug(`[${this.version.name}] Model relations have been resolved`);
32
33
  yield this.setDatabaseColumns(modelList);
34
+ Services_1.LogService.debug(`[${this.version.name}] Database columns have been bonded with models`);
33
35
  yield this.setModelHooks(modelList, Enums_1.Extensions.Hooks);
36
+ Services_1.LogService.debug(`[${this.version.name}] Model hooks have been loaded`);
34
37
  yield this.setModelHooks(modelList, Enums_1.Extensions.Events);
38
+ Services_1.LogService.debug(`[${this.version.name}] Model events have been loaded`);
35
39
  yield this.setModelSerializations(modelList);
40
+ Services_1.LogService.debug(`[${this.version.name}] Model serializers have been loaded`);
36
41
  yield this.setModelQueryLimits(modelList);
42
+ Services_1.LogService.debug(`[${this.version.name}] Model query limits have been loaded`);
37
43
  this.version.modelList = modelList;
38
- logger.info(`[${this.version.name}] All models have been resolved.`);
44
+ Services_1.LogService.debug(`[${this.version.name}] All models have been resolved.`);
39
45
  });
40
46
  }
41
47
  setModelRelations(modelList) {
@@ -88,7 +94,6 @@ class ModelResolver {
88
94
  }
89
95
  setModelHooks(modelList, hookType) {
90
96
  return __awaiter(this, void 0, void 0, function* () {
91
- const logger = Services_1.LogService.getInstance();
92
97
  // What kind of hooks that we can have
93
98
  const hookList = Object.keys(Enums_1.HookFunctionTypes);
94
99
  const fileResolver = new FileResolver_1.default();
@@ -119,7 +124,7 @@ class ModelResolver {
119
124
  currentModel.setExtensions(hookType, hookName, hooks[hookName].default);
120
125
  }
121
126
  else {
122
- logger.warn(`Invalid ${hookType} type: "${hookName}" in this folder: "${subfolderPath}"`);
127
+ Services_1.LogService.warn(`Invalid ${hookType} type: "${hookName}" in this folder: "${subfolderPath}"`);
123
128
  }
124
129
  }
125
130
  }
@@ -39,6 +39,7 @@ const path_1 = __importDefault(require("path"));
39
39
  const fs_1 = __importDefault(require("fs"));
40
40
  const AxeError_1 = __importDefault(require("../Exceptions/AxeError"));
41
41
  const Enums_1 = require("../Enums");
42
+ const constants_1 = require("../constants");
42
43
  class VersionConfigResolver {
43
44
  constructor(version) {
44
45
  this.version = version;
@@ -50,8 +51,12 @@ class VersionConfigResolver {
50
51
  !fs_1.default.existsSync(`${versionConfigFile}.js`)) {
51
52
  throw new AxeError_1.default(Enums_1.AxeErrorCode.VERSION_CONFIG_NOT_FOUND, `The version file not found: ${versionConfigFile}.ts`);
52
53
  }
54
+ // Loading the configuration file
53
55
  const { default: content } = yield Promise.resolve(`${versionConfigFile}`).then(s => __importStar(require(s)));
54
- this.version.config = content;
56
+ // Merging the configurations with the default version configurations
57
+ const apiConfiguration = Object.assign(Object.assign({}, constants_1.DEFAULT_VERSION_CONFIG), content);
58
+ // Setting the config values
59
+ this.version.config = apiConfiguration;
55
60
  });
56
61
  }
57
62
  }
@@ -27,9 +27,8 @@ const RESERVED_VERSION_FOLDERS = [
27
27
  class VersionResolver {
28
28
  resolve() {
29
29
  return __awaiter(this, void 0, void 0, function* () {
30
- const logger = Services_1.LogService.getInstance();
31
30
  yield this.getVersions();
32
- logger.info("All API versions have been resolved.");
31
+ Services_1.LogService.debug("All API versions have been resolved.");
33
32
  });
34
33
  }
35
34
  getVersions() {
@@ -1,7 +1,6 @@
1
1
  declare class Server {
2
2
  start(rootFolder: string): Promise<void>;
3
3
  private bindDependencies;
4
- private loadExpress;
5
4
  private analyzeVersions;
6
5
  private loadGeneralConfiguration;
7
6
  private listen;
@@ -38,7 +38,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
38
38
  const Resolvers_1 = require("./Resolvers");
39
39
  const dotenv_1 = __importDefault(require("dotenv"));
40
40
  const path_1 = __importDefault(require("path"));
41
- const express_1 = __importDefault(require("express"));
42
41
  const knex_1 = __importDefault(require("knex"));
43
42
  const knex_schema_inspector_1 = __importDefault(require("knex-schema-inspector"));
44
43
  const knex_paginate_1 = require("knex-paginate");
@@ -47,21 +46,24 @@ const Services_1 = require("./Services");
47
46
  const MetadataHandler_1 = __importDefault(require("./Handlers/MetadataHandler"));
48
47
  const DocsHTMLHandler_1 = __importDefault(require("./Handlers/DocsHTMLHandler"));
49
48
  const RoutesHandler_1 = __importDefault(require("./Handlers/RoutesHandler"));
50
- const Helpers_1 = require("./Helpers");
49
+ const http_1 = __importDefault(require("http"));
50
+ const RequestHandler_1 = __importDefault(require("./Handlers/RequestHandler"));
51
+ const App_1 = __importDefault(require("./Services/App"));
52
+ const constants_1 = require("./constants");
51
53
  class Server {
52
54
  start(rootFolder) {
53
55
  return __awaiter(this, void 0, void 0, function* () {
54
56
  dotenv_1.default.config();
55
57
  try {
56
- yield this.bindDependencies(rootFolder);
58
+ Services_1.APIService.setInsance(rootFolder);
57
59
  yield this.loadGeneralConfiguration();
58
- yield this.loadExpress();
60
+ yield this.bindDependencies();
59
61
  yield this.analyzeVersions();
60
62
  yield this.listen();
61
63
  }
62
64
  catch (error) {
63
65
  if (error.type === "AxeError") {
64
- (0, Helpers_1.consoleAxeError)(error);
66
+ Services_1.LogService.error(error);
65
67
  }
66
68
  else {
67
69
  throw error;
@@ -69,27 +71,18 @@ class Server {
69
71
  }
70
72
  });
71
73
  }
72
- bindDependencies(rootFolder) {
74
+ bindDependencies() {
73
75
  return __awaiter(this, void 0, void 0, function* () {
74
- Services_1.APIService.setInsance(rootFolder);
75
76
  const api = Services_1.APIService.getInstance();
76
77
  Services_1.IoCService.singleton("SchemaInspector", () => knex_schema_inspector_1.default);
78
+ Services_1.IoCService.singleton("App", () => new App_1.default());
77
79
  Services_1.IoCService.singleton("Database", () => __awaiter(this, void 0, void 0, function* () {
78
80
  const database = (0, knex_1.default)(api.config.database);
81
+ Services_1.LogService.debug("Created a knex connection instance");
79
82
  (0, knex_paginate_1.attachPaginate)();
83
+ Services_1.LogService.debug("Added pagination support to the knex");
80
84
  return database;
81
85
  }));
82
- Services_1.IoCService.singleton("App", () => __awaiter(this, void 0, void 0, function* () {
83
- return (0, express_1.default)();
84
- }));
85
- Services_1.LogService.setInstance(api.config.logLevel);
86
- });
87
- }
88
- loadExpress() {
89
- return __awaiter(this, void 0, void 0, function* () {
90
- const app = yield Services_1.IoCService.use("App");
91
- app.use(express_1.default.urlencoded({ extended: true }));
92
- app.use(express_1.default.json());
93
86
  });
94
87
  }
95
88
  analyzeVersions() {
@@ -108,24 +101,36 @@ class Server {
108
101
  loadGeneralConfiguration() {
109
102
  return __awaiter(this, void 0, void 0, function* () {
110
103
  const api = Services_1.APIService.getInstance();
104
+ // Getting configuration file path
111
105
  const generalConfigFile = path_1.default.join(api.appFolder, "config");
106
+ // Loading the configurations
112
107
  const { default: content } = yield Promise.resolve(`${generalConfigFile}`).then(s => __importStar(require(s)));
113
- api.setConfig(content);
108
+ // Merge the configuration with the default configurations
109
+ const apiConfiguration = Object.assign(Object.assign({}, constants_1.DEFAULT_APP_CONFIG), content);
110
+ // Setting the configurations
111
+ api.setConfig(apiConfiguration);
112
+ // Setting the logger instance
113
+ Services_1.LogService.setInstance(api.config.pino);
114
+ Services_1.LogService.debug("Configurations are loaded");
114
115
  });
115
116
  }
116
117
  listen() {
117
118
  return __awaiter(this, void 0, void 0, function* () {
118
- const app = yield Services_1.IoCService.use("App");
119
- const logger = Services_1.LogService.getInstance();
119
+ const app = yield Services_1.IoCService.useByType("App");
120
+ app.use(RequestHandler_1.default);
121
+ const server = http_1.default.createServer(app.instance);
120
122
  const api = Services_1.APIService.getInstance();
123
+ server.on("error", function (e) {
124
+ // Handle your error here
125
+ console.log("GENERAL", e);
126
+ });
121
127
  if (api.config.env === "development") {
122
128
  app.get("/metadata", MetadataHandler_1.default);
123
129
  app.get("/docs", DocsHTMLHandler_1.default);
124
130
  app.get("/routes", RoutesHandler_1.default);
125
131
  }
126
- app.listen(api.config.port, () => {
127
- logger.info(`API listens requests on http://localhost:${api.config.port}`);
128
- });
132
+ server.listen(api.config.port);
133
+ Services_1.LogService.info(`Axe API listens requests on http://localhost:${api.config.port}`);
129
134
  });
130
135
  }
131
136
  }
@@ -1,4 +1,4 @@
1
- import { IApplicationConfig, IVersion } from "../Interfaces";
1
+ import { AxeConfig, IVersion } from "../Interfaces";
2
2
  declare class APIService {
3
3
  private folders;
4
4
  private static instance;
@@ -8,8 +8,8 @@ declare class APIService {
8
8
  get rootFolder(): string;
9
9
  get appFolder(): string;
10
10
  get versions(): IVersion[];
11
- get config(): IApplicationConfig;
12
- setConfig(config: IApplicationConfig): void;
11
+ get config(): AxeConfig;
12
+ setConfig(config: AxeConfig): void;
13
13
  addVersion(name: string): void;
14
14
  getVersion(name: string): IVersion;
15
15
  }
@@ -4,21 +4,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const path_1 = __importDefault(require("path"));
7
- const Enums_1 = require("../Enums");
8
7
  const ModelListService_1 = __importDefault(require("./ModelListService"));
8
+ const constants_1 = require("../constants");
9
9
  class APIService {
10
10
  constructor(rootFolder) {
11
11
  this.folders = {
12
12
  rootFolder: rootFolder,
13
13
  appFolder: path_1.default.join(rootFolder, "app"),
14
14
  versions: [],
15
- config: {
16
- env: "production",
17
- port: 3000,
18
- logLevel: Enums_1.LogLevels.INFO,
19
- prefix: "/api",
20
- database: {},
21
- },
15
+ config: constants_1.DEFAULT_APP_CONFIG,
22
16
  };
23
17
  }
24
18
  static getInstance() {
@@ -57,6 +51,7 @@ class APIService {
57
51
  query: {
58
52
  limits: [],
59
53
  },
54
+ formidable: {},
60
55
  },
61
56
  folders: {
62
57
  root,
@@ -0,0 +1,14 @@
1
+ import connect from "connect";
2
+ import { DynamicFunctionType } from "../Types";
3
+ declare class App {
4
+ private connect;
5
+ constructor();
6
+ get instance(): connect.Server;
7
+ use(middleware: connect.NextHandleFunction): void;
8
+ get(url: string, ...args: DynamicFunctionType): void;
9
+ post(url: string, ...args: DynamicFunctionType): void;
10
+ put(url: string, ...args: DynamicFunctionType): void;
11
+ patch(url: string, ...args: DynamicFunctionType): void;
12
+ delete(url: string, ...args: DynamicFunctionType): void;
13
+ }
14
+ export default App;
@@ -0,0 +1,80 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const connect_1 = __importDefault(require("connect"));
30
+ const body_parser_1 = __importDefault(require("body-parser"));
31
+ const URLService_1 = __importDefault(require("./URLService"));
32
+ const LogService_1 = __importDefault(require("./LogService"));
33
+ const RateLimit_1 = __importStar(require("../Middlewares/RateLimit"));
34
+ const APIService_1 = __importDefault(require("./APIService"));
35
+ const ConverterService_1 = require("./ConverterService");
36
+ class App {
37
+ constructor() {
38
+ var _a;
39
+ this.connect = (0, connect_1.default)();
40
+ LogService_1.default.debug("Created a new connect() instance");
41
+ this.connect.use(body_parser_1.default.urlencoded({ extended: true }));
42
+ this.connect.use(body_parser_1.default.json());
43
+ LogService_1.default.debug("New middleware: bodyParser()");
44
+ // Activate the Rate Limit middleware
45
+ const api = APIService_1.default.getInstance();
46
+ (0, RateLimit_1.setupRateLimitAdaptors)(api.config);
47
+ if ((_a = api.config.rateLimit) === null || _a === void 0 ? void 0 : _a.enabled) {
48
+ LogService_1.default.debug("New middleware: rateLimit()");
49
+ this.connect.use(RateLimit_1.default);
50
+ }
51
+ }
52
+ get instance() {
53
+ return this.connect;
54
+ }
55
+ use(middleware) {
56
+ this.connect.use(middleware);
57
+ LogService_1.default.debug(`New middleware: ${middleware.name || "anonymous"}()`);
58
+ }
59
+ get(url, ...args) {
60
+ const { handler, middlewares } = (0, ConverterService_1.resolveMiddlewares)(args);
61
+ URLService_1.default.addHandler("GET", url, handler, middlewares);
62
+ }
63
+ post(url, ...args) {
64
+ const { handler, middlewares } = (0, ConverterService_1.resolveMiddlewares)(args);
65
+ URLService_1.default.addHandler("POST", url, handler, middlewares);
66
+ }
67
+ put(url, ...args) {
68
+ const { handler, middlewares } = (0, ConverterService_1.resolveMiddlewares)(args);
69
+ URLService_1.default.addHandler("PUT", url, handler, middlewares);
70
+ }
71
+ patch(url, ...args) {
72
+ const { handler, middlewares } = (0, ConverterService_1.resolveMiddlewares)(args);
73
+ URLService_1.default.addHandler("PATCH", url, handler, middlewares);
74
+ }
75
+ delete(url, ...args) {
76
+ const { handler, middlewares } = (0, ConverterService_1.resolveMiddlewares)(args);
77
+ URLService_1.default.addHandler("DELETE", url, handler, middlewares);
78
+ }
79
+ }
80
+ exports.default = App;
@@ -0,0 +1,26 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="express" />
3
+ import formidable, { Options as FormOptions } from "formidable";
4
+ import { IncomingMessage } from "http";
5
+ import { ILanguage } from "../Interfaces";
6
+ declare class AxeRequest {
7
+ private request;
8
+ private language;
9
+ private urlObject;
10
+ private privateParams;
11
+ private version;
12
+ constructor(request: IncomingMessage);
13
+ get url(): URL;
14
+ get params(): any;
15
+ set params(value: any);
16
+ get query(): URLSearchParams;
17
+ get path(): string;
18
+ get method(): string;
19
+ get body(): any;
20
+ get currentLanguage(): ILanguage;
21
+ set currentLanguage(language: ILanguage);
22
+ header(key: string): string | string[] | undefined;
23
+ files(options?: FormOptions): Promise<[formidable.Fields, formidable.Files]>;
24
+ get original(): IncomingMessage;
25
+ }
26
+ export default AxeRequest;