axe-api 0.22.0 → 0.30.0-rc1

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 (145) hide show
  1. package/build/dev-kit/app/Config/Application.d.ts +3 -0
  2. package/build/dev-kit/app/Config/Application.js +14 -0
  3. package/build/dev-kit/app/Config/Database.d.ts +3 -0
  4. package/build/dev-kit/app/Config/Database.js +24 -0
  5. package/build/dev-kit/app/Events/UserEvent.d.ts +3 -0
  6. package/build/dev-kit/app/Events/UserEvent.js +16 -0
  7. package/build/dev-kit/app/Hooks/CustomerHook.d.ts +3 -0
  8. package/build/dev-kit/app/Hooks/CustomerHook.js +16 -0
  9. package/build/dev-kit/app/Hooks/EmployeeHook.d.ts +2 -0
  10. package/build/dev-kit/app/Hooks/EmployeeHook.js +16 -0
  11. package/build/dev-kit/app/Hooks/UserHook.d.ts +3 -0
  12. package/build/dev-kit/app/Hooks/UserHook.js +17 -0
  13. package/build/dev-kit/app/Models/Customer.d.ts +7 -0
  14. package/build/dev-kit/app/Models/Customer.js +15 -0
  15. package/build/dev-kit/app/Models/Employee.d.ts +9 -0
  16. package/build/dev-kit/app/Models/Employee.js +21 -0
  17. package/build/dev-kit/app/Models/EmployeeAddress.d.ts +8 -0
  18. package/build/dev-kit/app/Models/EmployeeAddress.js +18 -0
  19. package/build/dev-kit/app/Models/Post.d.ts +6 -0
  20. package/build/dev-kit/app/Models/Post.js +14 -0
  21. package/build/dev-kit/app/Models/User.d.ts +7 -0
  22. package/build/dev-kit/app/Models/User.js +23 -0
  23. package/build/dev-kit/app/Serialization/UserSerialization.d.ts +3 -0
  24. package/build/dev-kit/app/Serialization/UserSerialization.js +6 -0
  25. package/build/dev-kit/app/config.d.ts +3 -0
  26. package/build/dev-kit/app/config.js +31 -0
  27. package/build/dev-kit/app/init.d.ts +4 -0
  28. package/build/dev-kit/app/init.js +16 -0
  29. package/build/dev-kit/app/v1/Events/UserEvent.d.ts +3 -0
  30. package/build/dev-kit/app/v1/Events/UserEvent.js +16 -0
  31. package/build/dev-kit/app/v1/Hooks/CustomerHook.d.ts +3 -0
  32. package/build/dev-kit/app/v1/Hooks/CustomerHook.js +16 -0
  33. package/build/dev-kit/app/v1/Hooks/EmployeeHook.d.ts +2 -0
  34. package/build/dev-kit/app/v1/Hooks/EmployeeHook.js +16 -0
  35. package/build/dev-kit/app/v1/Hooks/UserHook.d.ts +3 -0
  36. package/build/dev-kit/app/v1/Hooks/UserHook.js +17 -0
  37. package/build/dev-kit/app/v1/Models/Customer.d.ts +7 -0
  38. package/build/dev-kit/app/v1/Models/Customer.js +15 -0
  39. package/build/dev-kit/app/v1/Models/Employee.d.ts +9 -0
  40. package/build/dev-kit/app/v1/Models/Employee.js +21 -0
  41. package/build/dev-kit/app/v1/Models/EmployeeAddress.d.ts +8 -0
  42. package/build/dev-kit/app/v1/Models/EmployeeAddress.js +18 -0
  43. package/build/dev-kit/app/v1/Models/Post.d.ts +6 -0
  44. package/build/dev-kit/app/v1/Models/Post.js +14 -0
  45. package/build/dev-kit/app/v1/Models/User.d.ts +7 -0
  46. package/build/dev-kit/app/v1/Models/User.js +23 -0
  47. package/build/dev-kit/app/v1/Serialization/PostSerialization.d.ts +3 -0
  48. package/build/dev-kit/app/v1/Serialization/PostSerialization.js +6 -0
  49. package/build/dev-kit/app/v1/Serialization/UserSerialization.d.ts +3 -0
  50. package/build/dev-kit/app/v1/Serialization/UserSerialization.js +5 -0
  51. package/build/dev-kit/app/v1/config.d.ts +3 -0
  52. package/build/dev-kit/app/v1/config.js +19 -0
  53. package/build/dev-kit/app/v1/init.d.ts +4 -0
  54. package/build/dev-kit/app/v1/init.js +16 -0
  55. package/build/dev-kit/app/v2/Events/UserEvent.d.ts +3 -0
  56. package/build/dev-kit/app/v2/Events/UserEvent.js +16 -0
  57. package/build/dev-kit/app/v2/Hooks/CustomerHook.d.ts +3 -0
  58. package/build/dev-kit/app/v2/Hooks/CustomerHook.js +16 -0
  59. package/build/dev-kit/app/v2/Hooks/EmployeeHook.d.ts +2 -0
  60. package/build/dev-kit/app/v2/Hooks/EmployeeHook.js +16 -0
  61. package/build/dev-kit/app/v2/Hooks/UserHook.d.ts +3 -0
  62. package/build/dev-kit/app/v2/Hooks/UserHook.js +17 -0
  63. package/build/dev-kit/app/v2/Models/Customer.d.ts +10 -0
  64. package/build/dev-kit/app/v2/Models/Customer.js +20 -0
  65. package/build/dev-kit/app/v2/Models/Employee.d.ts +9 -0
  66. package/build/dev-kit/app/v2/Models/Employee.js +21 -0
  67. package/build/dev-kit/app/v2/Models/EmployeeAddress.d.ts +8 -0
  68. package/build/dev-kit/app/v2/Models/EmployeeAddress.js +18 -0
  69. package/build/dev-kit/app/v2/Models/Post.d.ts +6 -0
  70. package/build/dev-kit/app/v2/Models/Post.js +14 -0
  71. package/build/dev-kit/app/v2/Models/User.d.ts +7 -0
  72. package/build/dev-kit/app/v2/Models/User.js +23 -0
  73. package/build/dev-kit/app/v2/Serialization/UserSerialization.d.ts +3 -0
  74. package/build/dev-kit/app/v2/Serialization/UserSerialization.js +5 -0
  75. package/build/dev-kit/app/v2/config.d.ts +3 -0
  76. package/build/dev-kit/app/v2/config.js +9 -0
  77. package/build/dev-kit/app/v2/init.d.ts +4 -0
  78. package/build/dev-kit/app/v2/init.js +16 -0
  79. package/build/dev-kit/app/v3/config.d.ts +3 -0
  80. package/build/dev-kit/app/v3/config.js +9 -0
  81. package/build/dev-kit/config.d.ts +3 -0
  82. package/build/dev-kit/config.js +31 -0
  83. package/build/dev-kit.d.ts +1 -0
  84. package/build/dev-kit.js +16 -0
  85. package/build/package.json +67 -0
  86. package/build/src/Builders/ModelTreeBuilder.d.ts +3 -0
  87. package/build/src/Builders/ModelTreeBuilder.js +21 -17
  88. package/build/src/Builders/RouterBuilder.d.ts +3 -0
  89. package/build/src/Builders/RouterBuilder.js +27 -25
  90. package/build/src/Enums.d.ts +8 -0
  91. package/build/src/Enums.js +10 -1
  92. package/build/src/Exceptions/AxeError.d.ts +8 -0
  93. package/build/src/Exceptions/AxeError.js +11 -0
  94. package/build/src/Handlers/AllHandler.js +4 -5
  95. package/build/src/Handlers/DocsHandler.d.ts +3 -0
  96. package/build/src/Handlers/DocsHandler.js +22 -0
  97. package/build/src/Handlers/HandlerFactory.d.ts +1 -1
  98. package/build/src/Handlers/HandlerFactory.js +1 -1
  99. package/build/src/Handlers/Helpers.d.ts +4 -3
  100. package/build/src/Handlers/Helpers.js +9 -10
  101. package/build/src/Handlers/PaginateHandler.js +4 -5
  102. package/build/src/Handlers/PatchHandler.js +2 -2
  103. package/build/src/Handlers/RoutesHandler.d.ts +3 -0
  104. package/build/src/Handlers/RoutesHandler.js +16 -0
  105. package/build/src/Handlers/ShowHandler.js +4 -5
  106. package/build/src/Handlers/StoreHandler.js +2 -2
  107. package/build/src/Handlers/UpdateHandler.js +2 -2
  108. package/build/src/Helpers.d.ts +4 -0
  109. package/build/src/Helpers.js +78 -0
  110. package/build/src/Interfaces.d.ts +34 -11
  111. package/build/src/Middlewares/acceptLanguageMiddleware.js +3 -5
  112. package/build/src/Model.d.ts +0 -1
  113. package/build/src/Model.js +0 -4
  114. package/build/src/Resolvers/FolderResolver.js +1 -0
  115. package/build/src/Resolvers/GeneralHookResolver.d.ts +4 -2
  116. package/build/src/Resolvers/GeneralHookResolver.js +5 -8
  117. package/build/src/Resolvers/ModelResolver.d.ts +4 -0
  118. package/build/src/Resolvers/ModelResolver.js +26 -8
  119. package/build/src/Resolvers/TransactionResolver.d.ts +4 -2
  120. package/build/src/Resolvers/TransactionResolver.js +5 -4
  121. package/build/src/Resolvers/VersionConfigResolver.d.ts +7 -0
  122. package/build/src/Resolvers/VersionConfigResolver.js +58 -0
  123. package/build/src/Resolvers/VersionResolver.d.ts +7 -0
  124. package/build/src/Resolvers/VersionResolver.js +65 -0
  125. package/build/src/Resolvers/index.d.ts +3 -2
  126. package/build/src/Resolvers/index.js +5 -3
  127. package/build/src/Server.d.ts +3 -2
  128. package/build/src/Server.js +73 -46
  129. package/build/src/Services/APIService.d.ts +16 -0
  130. package/build/src/Services/APIService.js +79 -0
  131. package/build/src/Services/DocumentationService.d.ts +3 -1
  132. package/build/src/Services/DocumentationService.js +6 -0
  133. package/build/src/Services/LogService.d.ts +4 -1
  134. package/build/src/Services/LogService.js +6 -0
  135. package/build/src/Services/ModelService.d.ts +3 -0
  136. package/build/src/Services/ModelService.js +4 -0
  137. package/build/src/Services/SchemaValidatorService.d.ts +3 -0
  138. package/build/src/Services/SchemaValidatorService.js +12 -8
  139. package/build/src/Services/index.d.ts +2 -1
  140. package/build/src/Services/index.js +3 -1
  141. package/build/src/Types.d.ts +2 -0
  142. package/build/src/Types.js +2 -0
  143. package/build/src/constants.js +0 -1
  144. package/package.json +2 -1
  145. package/CHANGELOG.md +0 -212
@@ -3,6 +3,8 @@ import { Express, Request, Response, NextFunction } from "express";
3
3
  import { Column } from "knex-schema-inspector/lib/types/column";
4
4
  import { HandlerTypes, LogLevels, HttpMethods, HookFunctionTypes, Extensions, Relationships, SortTypes, ConditionTypes, DependencyTypes } from "./Enums";
5
5
  import Model from "./Model";
6
+ import { SerializationFunction } from "./Types";
7
+ import { ModelListService } from "./Services";
6
8
  export interface IColumn extends Column {
7
9
  table_name: string;
8
10
  }
@@ -16,15 +18,18 @@ interface IHandlerBasedSerializer {
16
18
  handler: HandlerTypes[];
17
19
  serializer: ((data: any, request: Request) => void)[];
18
20
  }
21
+ export interface IVersionConfig {
22
+ transaction: boolean | IHandlerBasedTransactionConfig | IHandlerBasedTransactionConfig[];
23
+ serializers: ((data: any, request: Request) => void)[] | IHandlerBasedSerializer[];
24
+ supportedLanguages: string[];
25
+ defaultLanguage: string;
26
+ }
19
27
  export interface IApplicationConfig extends IConfig {
20
28
  env: string;
21
29
  port: number;
22
30
  logLevel: LogLevels;
23
31
  prefix: string;
24
- transaction: boolean | IHandlerBasedTransactionConfig | IHandlerBasedTransactionConfig[];
25
- serializers: ((data: any, request: Request) => void)[] | IHandlerBasedSerializer[];
26
- supportedLanguages: string[];
27
- defaultLanguage: string;
32
+ database: IDatabaseConfig;
28
33
  }
29
34
  export interface ILanguage {
30
35
  title: string;
@@ -36,13 +41,27 @@ export interface IAcceptedLanguage {
36
41
  quality: number;
37
42
  }
38
43
  export declare type IDatabaseConfig = Knex.Config;
39
- export interface IFolders {
40
- App: string;
41
- Config: string;
42
- Events: string;
43
- Hooks: string;
44
- Middlewares: string;
45
- Models: string;
44
+ export interface IVersionFolder {
45
+ root: string;
46
+ config: string;
47
+ events: string;
48
+ hooks: string;
49
+ middlewares: string;
50
+ models: string;
51
+ serialization: string;
52
+ }
53
+ export interface IVersion {
54
+ name: string;
55
+ config: IVersionConfig;
56
+ folders: IVersionFolder;
57
+ modelList: ModelListService;
58
+ modelTree: IModelService[];
59
+ }
60
+ export interface IAPI {
61
+ rootFolder: string;
62
+ appFolder: string;
63
+ versions: IVersion[];
64
+ config: IApplicationConfig;
46
65
  }
47
66
  export interface IGeneralHooks {
48
67
  onBeforeInit: (app: Express) => void | null;
@@ -85,8 +104,10 @@ export interface IModelService {
85
104
  events: Record<HookFunctionTypes, (params: IHookParameter) => void>;
86
105
  isRecursive: boolean;
87
106
  children: IModelService[];
107
+ serialize: SerializationFunction | null;
88
108
  setColumns(columns: IColumn[]): void;
89
109
  setExtensions(type: Extensions, hookFunctionType: HookFunctionTypes, data: (params: IHookParameter) => void): void;
110
+ setSerialization(callback: SerializationFunction): void;
90
111
  }
91
112
  export interface IRelation {
92
113
  type: Relationships;
@@ -96,6 +117,8 @@ export interface IRelation {
96
117
  foreignKey: string;
97
118
  }
98
119
  export interface IRequestPack {
120
+ api: IAPI;
121
+ version: IVersion;
99
122
  req: Request;
100
123
  res: Response;
101
124
  handlerType: HandlerTypes;
@@ -9,15 +9,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- const Services_1 = require("../Services");
13
12
  const Resolvers_1 = require("../Resolvers");
13
+ const Helpers_1 = require("../Helpers");
14
14
  exports.default = (req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
15
15
  // Application configuration is need for the default setting.
16
- const configs = yield Services_1.IoCService.use("Config");
17
- const application = configs.Application;
18
- const { supportedLanguages, defaultLanguage } = application;
16
+ const version = yield (0, Helpers_1.getVersionByRequest)(req);
19
17
  // Setting the current language by the supported, default and the client prefences
20
- req.currentLanguage = Resolvers_1.AcceptLanguageResolver.resolve(req.get("accept-language") || "", supportedLanguages || ["en"], defaultLanguage || "en");
18
+ req.currentLanguage = Resolvers_1.AcceptLanguageResolver.resolve(req.get("accept-language") || "", version.config.supportedLanguages || ["en"], version.config.defaultLanguage || "en");
21
19
  // Adding the `Content-Language` header to the response object
22
20
  res.setHeader("Content-Language", req.currentLanguage.title);
23
21
  next();
@@ -20,7 +20,6 @@ declare class Model {
20
20
  hasMany(relatedModel: string, primaryKey?: string, foreignKey?: string): IRelation;
21
21
  hasOne(relatedModel: string, primaryKey?: string, foreignKey?: string): IRelation;
22
22
  belongsTo(relatedModel: string, primaryKey: string, foreignKey: string): IRelation;
23
- serialize(data: any, request: Request): any;
24
23
  private hasStringValue;
25
24
  }
26
25
  export default Model;
@@ -130,10 +130,6 @@ class Model {
130
130
  belongsTo(relatedModel, primaryKey, foreignKey) {
131
131
  return this.hasOne(relatedModel, foreignKey, primaryKey);
132
132
  }
133
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
134
- serialize(data, request) {
135
- return data;
136
- }
137
133
  hasStringValue() {
138
134
  const tester = this.validations;
139
135
  let status = false;
@@ -13,6 +13,7 @@ class FolderResolver {
13
13
  Hooks: path_1.default.join(appFolder, "app", "Hooks"),
14
14
  Middlewares: path_1.default.join(appFolder, "app", "Middlewares"),
15
15
  Models: path_1.default.join(appFolder, "app", "Models"),
16
+ Serialization: path_1.default.join(appFolder, "app", "Serialization"),
16
17
  };
17
18
  }
18
19
  }
@@ -1,5 +1,7 @@
1
- import { IGeneralHooks } from "../Interfaces";
1
+ import { IGeneralHooks, IVersion } from "../Interfaces";
2
2
  declare class GeneralHookResolver {
3
- static resolve(): Promise<IGeneralHooks>;
3
+ private version;
4
+ constructor(version: IVersion);
5
+ resolve(): Promise<IGeneralHooks>;
4
6
  }
5
7
  export default GeneralHookResolver;
@@ -8,19 +8,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
11
  Object.defineProperty(exports, "__esModule", { value: true });
15
- const path_1 = __importDefault(require("path"));
16
- const Services_1 = require("../Services");
17
12
  const _1 = require(".");
18
13
  class GeneralHookResolver {
19
- static resolve() {
14
+ constructor(version) {
15
+ this.version = version;
16
+ }
17
+ resolve() {
20
18
  return __awaiter(this, void 0, void 0, function* () {
21
- const folders = (yield Services_1.IoCService.use("Folders"));
22
19
  const fileResolver = new _1.FileResolver();
23
- const content = yield fileResolver.resolveContent(path_1.default.join(folders.App, "app"));
20
+ const content = yield fileResolver.resolveContent(this.version.folders.root);
24
21
  if (content && content.init) {
25
22
  const { onBeforeInit = null, onAfterInit = null } = content.init;
26
23
  return { onBeforeInit, onAfterInit };
@@ -1,9 +1,13 @@
1
+ import { IVersion } from "../Interfaces";
1
2
  declare class ModelResolver {
3
+ private version;
4
+ constructor(version: IVersion);
2
5
  resolve(): Promise<void>;
3
6
  private setModelRelations;
4
7
  private getModelList;
5
8
  private setDatabaseColumns;
6
9
  private setModelHooks;
10
+ private setModelSerializations;
7
11
  private getInstanceMethods;
8
12
  }
9
13
  export default ModelResolver;
@@ -16,17 +16,22 @@ const FileResolver_1 = __importDefault(require("./FileResolver"));
16
16
  const Enums_1 = require("../Enums");
17
17
  const Services_1 = require("../Services");
18
18
  const constants_1 = require("../constants");
19
+ const AxeError_1 = __importDefault(require("../Exceptions/AxeError"));
19
20
  class ModelResolver {
21
+ constructor(version) {
22
+ this.version = version;
23
+ }
20
24
  resolve() {
21
25
  return __awaiter(this, void 0, void 0, function* () {
22
- const logger = yield Services_1.IoCService.useByType("LogService");
26
+ const logger = Services_1.LogService.getInstance();
23
27
  const modelList = new Services_1.ModelListService(yield this.getModelList());
24
28
  yield this.setModelRelations(modelList);
25
29
  yield this.setDatabaseColumns(modelList);
26
30
  yield this.setModelHooks(modelList, Enums_1.Extensions.Hooks);
27
31
  yield this.setModelHooks(modelList, Enums_1.Extensions.Events);
28
- Services_1.IoCService.singleton("ModelListService", () => modelList);
29
- logger.info("All models have been resolved.");
32
+ yield this.setModelSerializations(modelList);
33
+ this.version.modelList = modelList;
34
+ logger.info(`[${this.version.name}] All models have been resolved.`);
30
35
  });
31
36
  }
32
37
  setModelRelations(modelList) {
@@ -48,9 +53,8 @@ class ModelResolver {
48
53
  getModelList() {
49
54
  return __awaiter(this, void 0, void 0, function* () {
50
55
  const list = [];
51
- const folders = (yield Services_1.IoCService.use("Folders"));
52
56
  const fileResolver = new FileResolver_1.default();
53
- const models = yield fileResolver.resolve(folders.Models);
57
+ const models = yield fileResolver.resolve(this.version.folders.models);
54
58
  for (const key in models) {
55
59
  list.push(new Services_1.ModelService(key, models[key]));
56
60
  }
@@ -72,7 +76,7 @@ class ModelResolver {
72
76
  for (const model of modelList.get()) {
73
77
  const modelColumns = columns.filter((column) => column.table_name === model.instance.table);
74
78
  if (modelColumns.length === 0) {
75
- throw new Error(`The "${model.instance.table}" table doesn't have any column. Are you sure about the table name?`);
79
+ throw new AxeError_1.default(Enums_1.AxeErrorCode.TABLE_DOESNT_HAVE_ANY_COLUMN, `The "${model.instance.table}" table doesn't have any column.`);
76
80
  }
77
81
  model.setColumns(modelColumns);
78
82
  }
@@ -80,9 +84,10 @@ class ModelResolver {
80
84
  }
81
85
  setModelHooks(modelList, hookType) {
82
86
  return __awaiter(this, void 0, void 0, function* () {
83
- const folders = (yield Services_1.IoCService.use("Folders"));
84
87
  const fileResolver = new FileResolver_1.default();
85
- const folder = hookType === Enums_1.Extensions.Hooks ? folders.Hooks : folders.Events;
88
+ const folder = hookType === Enums_1.Extensions.Hooks
89
+ ? this.version.folders.hooks
90
+ : this.version.folders.events;
86
91
  const hooks = yield fileResolver.resolveContent(folder);
87
92
  for (const model of modelList.get()) {
88
93
  const hookFileName = `${model.name}${hookType
@@ -99,6 +104,19 @@ class ModelResolver {
99
104
  }
100
105
  });
101
106
  }
107
+ setModelSerializations(modelList) {
108
+ return __awaiter(this, void 0, void 0, function* () {
109
+ const fileResolver = new FileResolver_1.default();
110
+ const serializations = yield fileResolver.resolveContent(this.version.folders.serialization);
111
+ for (const model of modelList.get()) {
112
+ const fileName = `${model.name}Serialization`;
113
+ if (serializations[fileName]) {
114
+ const file = serializations[fileName];
115
+ model.setSerialization(file.default);
116
+ }
117
+ }
118
+ });
119
+ }
102
120
  getInstanceMethods(obj) {
103
121
  const properties = Object.getOwnPropertyNames(obj.instance.constructor.prototype);
104
122
  return properties.filter((name) => !constants_1.DEFAULT_METHODS_OF_MODELS.includes(name));
@@ -1,7 +1,9 @@
1
- import { IModelService } from "../Interfaces";
1
+ import { IModelService, IVersion } from "../Interfaces";
2
2
  import { HandlerTypes } from "../Enums";
3
3
  declare class TransactionResolver {
4
- static resolve(model: IModelService, handlerType: HandlerTypes): Promise<boolean>;
4
+ private version;
5
+ constructor(version: IVersion);
6
+ resolve(model: IModelService, handlerType: HandlerTypes): Promise<boolean>;
5
7
  private static resolveTransactionOption;
6
8
  private static getTransactionConfiguration;
7
9
  }
@@ -9,12 +9,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- const Services_1 = require("../Services");
13
12
  class TransactionResolver {
14
- static resolve(model, handlerType) {
13
+ constructor(version) {
14
+ this.version = version;
15
+ }
16
+ resolve(model, handlerType) {
15
17
  return __awaiter(this, void 0, void 0, function* () {
16
- const config = yield Services_1.IoCService.use("Config");
17
- const global = config.Application.transaction;
18
+ const global = this.version.config.transaction;
18
19
  const local = model.instance.transaction;
19
20
  let privilegedOption = false;
20
21
  if (global) {
@@ -0,0 +1,7 @@
1
+ import { IVersion } from "../Interfaces";
2
+ declare class VersionConfigResolver {
3
+ private version;
4
+ constructor(version: IVersion);
5
+ resolve(): Promise<void>;
6
+ }
7
+ export default VersionConfigResolver;
@@ -0,0 +1,58 @@
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 path_1 = __importDefault(require("path"));
39
+ const fs_1 = __importDefault(require("fs"));
40
+ const AxeError_1 = __importDefault(require("../Exceptions/AxeError"));
41
+ const Enums_1 = require("../Enums");
42
+ class VersionConfigResolver {
43
+ constructor(version) {
44
+ this.version = version;
45
+ }
46
+ resolve() {
47
+ return __awaiter(this, void 0, void 0, function* () {
48
+ const versionConfigFile = path_1.default.join(this.version.folders.root, "config");
49
+ if (!fs_1.default.existsSync(`${versionConfigFile}.ts`) &&
50
+ !fs_1.default.existsSync(`${versionConfigFile}.js`)) {
51
+ throw new AxeError_1.default(Enums_1.AxeErrorCode.VERSION_CONFIG_NOT_FOUND, `The version file not found: ${versionConfigFile}.ts`);
52
+ }
53
+ const { default: content } = yield Promise.resolve().then(() => __importStar(require(versionConfigFile)));
54
+ this.version.config = content;
55
+ });
56
+ }
57
+ }
58
+ exports.default = VersionConfigResolver;
@@ -0,0 +1,7 @@
1
+ declare class VersionResolver {
2
+ resolve(): Promise<void>;
3
+ private getVersions;
4
+ private getDirectories;
5
+ private checkReservedKeys;
6
+ }
7
+ export default VersionResolver;
@@ -0,0 +1,65 @@
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 promises_1 = require("fs/promises");
17
+ const Services_1 = require("../Services");
18
+ const AxeError_1 = __importDefault(require("../Exceptions/AxeError"));
19
+ const Enums_1 = require("../Enums");
20
+ const RESERVED_VERSION_FOLDERS = [
21
+ "Config",
22
+ "Events",
23
+ "Hooks",
24
+ "Models",
25
+ "Serialization",
26
+ ];
27
+ class VersionResolver {
28
+ resolve() {
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ const logger = Services_1.LogService.getInstance();
31
+ yield this.getVersions();
32
+ logger.info("All API versions have been resolved.");
33
+ });
34
+ }
35
+ getVersions() {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ const api = Services_1.APIService.getInstance();
38
+ const versionFolders = yield this.getDirectories(api.appFolder);
39
+ this.checkReservedKeys(versionFolders);
40
+ versionFolders.forEach((version) => {
41
+ const validation = new validatorjs_1.default({ version }, { version: "required|alpha_num" });
42
+ if (validation.fails()) {
43
+ const { version: versionError } = validation.errors.errors;
44
+ const [message] = versionError;
45
+ throw new AxeError_1.default(Enums_1.AxeErrorCode.UNACCEPTABLE_VERSION_NAME, `${message} ("${version}")`);
46
+ }
47
+ api.addVersion(version);
48
+ });
49
+ });
50
+ }
51
+ getDirectories(source) {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ return (yield (0, promises_1.readdir)(source, { withFileTypes: true }))
54
+ .filter((dirent) => dirent.isDirectory())
55
+ .map((dirent) => dirent.name);
56
+ });
57
+ }
58
+ checkReservedKeys(names) {
59
+ const reservedName = names.find((name) => RESERVED_VERSION_FOLDERS.includes(name));
60
+ if (reservedName) {
61
+ throw new AxeError_1.default(Enums_1.AxeErrorCode.RESERVED_VERSION_NAME, `You can not use a reserved name in the app directory: ${reservedName}`);
62
+ }
63
+ }
64
+ }
65
+ exports.default = VersionResolver;
@@ -1,8 +1,9 @@
1
1
  import AcceptLanguageResolver from "./AcceptLanguageResolver";
2
2
  import FileResolver from "./FileResolver";
3
- import FolderResolver from "./FolderResolver";
4
3
  import GeneralHookResolver from "./GeneralHookResolver";
5
4
  import ModelResolver from "./ModelResolver";
6
5
  import TransactionResolver from "./TransactionResolver";
6
+ import VersionConfigResolver from "./VersionConfigResolver";
7
+ import VersionResolver from "./VersionResolver";
7
8
  import WithQueryResolver from "./WithQueryResolver";
8
- export { AcceptLanguageResolver, FileResolver, FolderResolver, GeneralHookResolver, ModelResolver, TransactionResolver, WithQueryResolver, };
9
+ export { AcceptLanguageResolver, FileResolver, GeneralHookResolver, ModelResolver, TransactionResolver, VersionConfigResolver, VersionResolver, WithQueryResolver, };
@@ -3,18 +3,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.WithQueryResolver = exports.TransactionResolver = exports.ModelResolver = exports.GeneralHookResolver = exports.FolderResolver = exports.FileResolver = exports.AcceptLanguageResolver = void 0;
6
+ exports.WithQueryResolver = exports.VersionResolver = exports.VersionConfigResolver = exports.TransactionResolver = exports.ModelResolver = exports.GeneralHookResolver = exports.FileResolver = exports.AcceptLanguageResolver = void 0;
7
7
  const AcceptLanguageResolver_1 = __importDefault(require("./AcceptLanguageResolver"));
8
8
  exports.AcceptLanguageResolver = AcceptLanguageResolver_1.default;
9
9
  const FileResolver_1 = __importDefault(require("./FileResolver"));
10
10
  exports.FileResolver = FileResolver_1.default;
11
- const FolderResolver_1 = __importDefault(require("./FolderResolver"));
12
- exports.FolderResolver = FolderResolver_1.default;
13
11
  const GeneralHookResolver_1 = __importDefault(require("./GeneralHookResolver"));
14
12
  exports.GeneralHookResolver = GeneralHookResolver_1.default;
15
13
  const ModelResolver_1 = __importDefault(require("./ModelResolver"));
16
14
  exports.ModelResolver = ModelResolver_1.default;
17
15
  const TransactionResolver_1 = __importDefault(require("./TransactionResolver"));
18
16
  exports.TransactionResolver = TransactionResolver_1.default;
17
+ const VersionConfigResolver_1 = __importDefault(require("./VersionConfigResolver"));
18
+ exports.VersionConfigResolver = VersionConfigResolver_1.default;
19
+ const VersionResolver_1 = __importDefault(require("./VersionResolver"));
20
+ exports.VersionResolver = VersionResolver_1.default;
19
21
  const WithQueryResolver_1 = __importDefault(require("./WithQueryResolver"));
20
22
  exports.WithQueryResolver = WithQueryResolver_1.default;
@@ -1,8 +1,9 @@
1
1
  declare class Server {
2
- start(appFolder: string): Promise<void>;
2
+ start(rootFolder: string): Promise<void>;
3
3
  private bindDependencies;
4
4
  private loadExpress;
5
- private analyzeModels;
5
+ private analyzeVersions;
6
+ private loadGeneralConfiguration;
6
7
  private listen;
7
8
  }
8
9
  export default Server;