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
@@ -1,4 +1,27 @@
1
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
+ };
2
25
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
26
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
27
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -14,50 +37,51 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
14
37
  Object.defineProperty(exports, "__esModule", { value: true });
15
38
  const Resolvers_1 = require("./Resolvers");
16
39
  const dotenv_1 = __importDefault(require("dotenv"));
40
+ const path_1 = __importDefault(require("path"));
17
41
  const express_1 = __importDefault(require("express"));
18
42
  const knex_1 = __importDefault(require("knex"));
19
43
  const knex_schema_inspector_1 = __importDefault(require("knex-schema-inspector"));
20
44
  const knex_paginate_1 = require("knex-paginate");
21
45
  const Builders_1 = require("./Builders");
22
- const HandlerFactory_1 = __importDefault(require("./Handlers/HandlerFactory"));
23
46
  const Services_1 = require("./Services");
47
+ const DocsHandler_1 = __importDefault(require("./Handlers/DocsHandler"));
48
+ const RoutesHandler_1 = __importDefault(require("./Handlers/RoutesHandler"));
49
+ const Helpers_1 = require("./Helpers");
24
50
  class Server {
25
- start(appFolder) {
51
+ start(rootFolder) {
26
52
  return __awaiter(this, void 0, void 0, function* () {
27
53
  dotenv_1.default.config();
28
- const folders = new Resolvers_1.FolderResolver().resolve(appFolder);
29
- const fileResolver = new Resolvers_1.FileResolver();
30
- const config = yield fileResolver.resolve(folders.Config);
31
- const models = yield fileResolver.resolve(folders.Models);
32
- yield this.bindDependencies(folders, config, models);
33
- yield this.loadExpress();
34
- yield this.analyzeModels();
35
- yield this.listen();
54
+ try {
55
+ yield this.bindDependencies(rootFolder);
56
+ yield this.loadGeneralConfiguration();
57
+ yield this.loadExpress();
58
+ yield this.analyzeVersions();
59
+ yield this.listen();
60
+ }
61
+ catch (error) {
62
+ if (error.type === "AxeError") {
63
+ (0, Helpers_1.consoleAxeError)(error);
64
+ }
65
+ else {
66
+ throw error;
67
+ }
68
+ }
36
69
  });
37
70
  }
38
- bindDependencies(folders, config, models) {
71
+ bindDependencies(rootFolder) {
39
72
  return __awaiter(this, void 0, void 0, function* () {
40
- Services_1.IoCService.singleton("Folders", () => folders);
41
- Services_1.IoCService.singleton("Config", () => config);
42
- Services_1.IoCService.singleton("Models", () => models);
73
+ Services_1.APIService.setInsance(rootFolder);
74
+ const api = Services_1.APIService.getInstance();
43
75
  Services_1.IoCService.singleton("SchemaInspector", () => knex_schema_inspector_1.default);
44
76
  Services_1.IoCService.singleton("Database", () => __awaiter(this, void 0, void 0, function* () {
45
- const config = yield Services_1.IoCService.use("Config");
46
- const database = (0, knex_1.default)(config.Database);
77
+ const database = (0, knex_1.default)(api.config.database);
47
78
  (0, knex_paginate_1.attachPaginate)();
48
79
  return database;
49
80
  }));
50
81
  Services_1.IoCService.singleton("App", () => __awaiter(this, void 0, void 0, function* () {
51
82
  return (0, express_1.default)();
52
83
  }));
53
- Services_1.IoCService.singleton("HandlerFactory", () => {
54
- return new HandlerFactory_1.default();
55
- });
56
- Services_1.IoCService.singleton("DocumentationService", () => __awaiter(this, void 0, void 0, function* () { return new Services_1.DocumentationService(); }));
57
- Services_1.IoCService.singleton("LogService", () => __awaiter(this, void 0, void 0, function* () {
58
- const config = yield Services_1.IoCService.use("Config");
59
- return new Services_1.LogService(config.Application.logLevel);
60
- }));
84
+ Services_1.LogService.setInstance(api.config.logLevel);
61
85
  });
62
86
  }
63
87
  loadExpress() {
@@ -67,35 +91,38 @@ class Server {
67
91
  app.use(express_1.default.json());
68
92
  });
69
93
  }
70
- analyzeModels() {
94
+ analyzeVersions() {
95
+ return __awaiter(this, void 0, void 0, function* () {
96
+ const api = Services_1.APIService.getInstance();
97
+ yield new Resolvers_1.VersionResolver().resolve();
98
+ for (const version of api.versions) {
99
+ yield new Resolvers_1.VersionConfigResolver(version).resolve();
100
+ yield new Resolvers_1.ModelResolver(version).resolve();
101
+ yield new Services_1.SchemaValidatorService(version).validate();
102
+ yield new Builders_1.ModelTreeBuilder(version).build();
103
+ yield new Builders_1.RouterBuilder(version).build();
104
+ }
105
+ });
106
+ }
107
+ loadGeneralConfiguration() {
71
108
  return __awaiter(this, void 0, void 0, function* () {
72
- yield new Resolvers_1.ModelResolver().resolve();
73
- yield new Services_1.SchemaValidatorService().validate();
74
- yield new Builders_1.ModelTreeBuilder().build();
75
- yield new Builders_1.RouterBuilder().build();
109
+ const api = Services_1.APIService.getInstance();
110
+ const generalConfigFile = path_1.default.join(api.appFolder, "config");
111
+ const { default: content } = yield Promise.resolve().then(() => __importStar(require(generalConfigFile)));
112
+ api.setConfig(content);
76
113
  });
77
114
  }
78
115
  listen() {
79
116
  return __awaiter(this, void 0, void 0, function* () {
80
- const config = yield Services_1.IoCService.use("Config");
81
117
  const app = yield Services_1.IoCService.use("App");
82
- const logger = yield Services_1.IoCService.useByType("LogService");
83
- if (config.Application.env === "development") {
84
- app.get("/docs", (req, res) => __awaiter(this, void 0, void 0, function* () {
85
- const docs = yield Services_1.IoCService.useByType("DocumentationService");
86
- const modelTree = yield Services_1.IoCService.use("ModelTree");
87
- res.json({
88
- routes: docs.get(),
89
- modelTree,
90
- });
91
- }));
92
- app.get("/docs/routes", (req, res) => __awaiter(this, void 0, void 0, function* () {
93
- const docs = yield Services_1.IoCService.useByType("DocumentationService");
94
- res.json(docs.get().map((route) => `${route.method} ${route.url}`));
95
- }));
118
+ const logger = Services_1.LogService.getInstance();
119
+ const api = Services_1.APIService.getInstance();
120
+ if (api.config.env === "development") {
121
+ app.get("/docs", DocsHandler_1.default);
122
+ app.get("/routes", RoutesHandler_1.default);
96
123
  }
97
- app.listen(config.Application.port, () => {
98
- logger.info(`API listens requests on http://localhost:${config.Application.port}`);
124
+ app.listen(api.config.port, () => {
125
+ logger.info(`API listens requests on http://localhost:${api.config.port}`);
99
126
  });
100
127
  });
101
128
  }
@@ -0,0 +1,16 @@
1
+ import { IApplicationConfig, IVersion } from "../Interfaces";
2
+ declare class APIService {
3
+ private folders;
4
+ private static instance;
5
+ constructor(rootFolder: string);
6
+ static getInstance(): APIService;
7
+ static setInsance(rootFolder: string): void;
8
+ get rootFolder(): string;
9
+ get appFolder(): string;
10
+ get versions(): IVersion[];
11
+ get config(): IApplicationConfig;
12
+ setConfig(config: IApplicationConfig): void;
13
+ addVersion(name: string): void;
14
+ getVersion(name: string): IVersion;
15
+ }
16
+ export default APIService;
@@ -0,0 +1,79 @@
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 path_1 = __importDefault(require("path"));
7
+ const Enums_1 = require("../Enums");
8
+ const ModelListService_1 = __importDefault(require("./ModelListService"));
9
+ class APIService {
10
+ constructor(rootFolder) {
11
+ this.folders = {
12
+ rootFolder: rootFolder,
13
+ appFolder: path_1.default.join(rootFolder, "app"),
14
+ versions: [],
15
+ config: {
16
+ env: "production",
17
+ port: 3000,
18
+ logLevel: Enums_1.LogLevels.INFO,
19
+ prefix: "/api",
20
+ database: {},
21
+ },
22
+ };
23
+ }
24
+ static getInstance() {
25
+ return APIService.instance;
26
+ }
27
+ static setInsance(rootFolder) {
28
+ if (APIService.instance) {
29
+ throw new Error(`The instance already created: ${APIService.name}`);
30
+ }
31
+ APIService.instance = new APIService(rootFolder);
32
+ }
33
+ get rootFolder() {
34
+ return this.folders.rootFolder;
35
+ }
36
+ get appFolder() {
37
+ return this.folders.appFolder;
38
+ }
39
+ get versions() {
40
+ return this.folders.versions;
41
+ }
42
+ get config() {
43
+ return this.folders.config;
44
+ }
45
+ setConfig(config) {
46
+ this.folders.config = config;
47
+ }
48
+ addVersion(name) {
49
+ const root = path_1.default.join(this.folders.appFolder, name);
50
+ this.folders.versions.push({
51
+ name,
52
+ config: {
53
+ transaction: [],
54
+ serializers: [],
55
+ supportedLanguages: ["en"],
56
+ defaultLanguage: "en",
57
+ },
58
+ folders: {
59
+ root,
60
+ config: path_1.default.join(root, "Config"),
61
+ events: path_1.default.join(root, "Events"),
62
+ hooks: path_1.default.join(root, "Hooks"),
63
+ middlewares: path_1.default.join(root, "Middlewares"),
64
+ models: path_1.default.join(root, "Models"),
65
+ serialization: path_1.default.join(root, "Serialization"),
66
+ },
67
+ modelList: new ModelListService_1.default([]),
68
+ modelTree: [],
69
+ });
70
+ }
71
+ getVersion(name) {
72
+ const version = this.folders.versions.find((i) => i.name === name);
73
+ if (!version) {
74
+ throw new Error(`Undefined version: ${version}`);
75
+ }
76
+ return version;
77
+ }
78
+ }
79
+ exports.default = APIService;
@@ -1,8 +1,10 @@
1
1
  import { IModelService, IRouteDocumentation } from "../Interfaces";
2
2
  import { HttpMethods } from "../Enums";
3
3
  declare class DocumentationService {
4
- routes: IRouteDocumentation[];
4
+ private static instance;
5
+ private routes;
5
6
  constructor();
7
+ static getInstance(): DocumentationService;
6
8
  push(method: HttpMethods, url: string, model: IModelService): void;
7
9
  get(): IRouteDocumentation[];
8
10
  }
@@ -4,6 +4,12 @@ class DocumentationService {
4
4
  constructor() {
5
5
  this.routes = [];
6
6
  }
7
+ static getInstance() {
8
+ if (!DocumentationService.instance) {
9
+ DocumentationService.instance = new DocumentationService();
10
+ }
11
+ return DocumentationService.instance;
12
+ }
7
13
  push(method, url, model) {
8
14
  this.routes.push({
9
15
  model: model.name,
@@ -1,7 +1,10 @@
1
1
  import { LogLevels } from "../Enums";
2
2
  declare class LogService {
3
- level: LogLevels;
3
+ private static instance;
4
+ private level;
4
5
  constructor(level: LogLevels);
6
+ static setInstance(level: LogLevels): void;
7
+ static getInstance(): LogService;
5
8
  error(message: string): void;
6
9
  warn(message: string): void;
7
10
  info(message: string): void;
@@ -7,6 +7,12 @@ class LogService {
7
7
  constructor(level) {
8
8
  this.level = level;
9
9
  }
10
+ static setInstance(level) {
11
+ LogService.instance = new LogService(level);
12
+ }
13
+ static getInstance() {
14
+ return LogService.instance;
15
+ }
10
16
  error(message) {
11
17
  if (this.level >= Enums_1.LogLevels.ERROR) {
12
18
  console.error(fgRed, "[axe]", message, fgReset);
@@ -1,6 +1,7 @@
1
1
  import { HookFunctionTypes, Extensions } from "../Enums";
2
2
  import { IColumn, IHookParameter, IModelService, IRelation } from "../Interfaces";
3
3
  import Model from "./../Model";
4
+ import { SerializationFunction } from "../Types";
4
5
  declare class ModelService implements IModelService {
5
6
  name: string;
6
7
  instance: Model;
@@ -11,9 +12,11 @@ declare class ModelService implements IModelService {
11
12
  events: Record<HookFunctionTypes, (params: IHookParameter) => void>;
12
13
  children: IModelService[];
13
14
  isRecursive: boolean;
15
+ serialize: SerializationFunction | null;
14
16
  constructor(name: string, instance: Model);
15
17
  setColumns(columns: IColumn[]): void;
16
18
  setExtensions(type: Extensions, hookFunctionType: HookFunctionTypes, data: (params: IHookParameter) => void): void;
19
+ setSerialization(callback: SerializationFunction): void;
17
20
  private setHooks;
18
21
  private setEvents;
19
22
  }
@@ -12,6 +12,7 @@ class ModelService {
12
12
  this.columnNames = [];
13
13
  this.children = [];
14
14
  this.isRecursive = false;
15
+ this.serialize = null;
15
16
  }
16
17
  setColumns(columns) {
17
18
  this.columns = columns;
@@ -28,6 +29,9 @@ class ModelService {
28
29
  throw new Error("Undefined hook type.");
29
30
  }
30
31
  }
32
+ setSerialization(callback) {
33
+ this.serialize = callback;
34
+ }
31
35
  setHooks(hookFunctionType, data) {
32
36
  this.hooks[hookFunctionType] = data;
33
37
  }
@@ -1,4 +1,7 @@
1
+ import { IVersion } from "../Interfaces";
1
2
  declare class SchemaValidatorService {
3
+ private version;
4
+ constructor(version: IVersion);
2
5
  validate(): Promise<void>;
3
6
  private checkModelColumnsOrFail;
4
7
  private getModelFillableColumns;
@@ -8,11 +8,15 @@ 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
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
+ const AxeError_1 = __importDefault(require("../Exceptions/AxeError"));
12
16
  const Enums_1 = require("../Enums");
13
17
  const Services_1 = require("../Services");
14
18
  class SchemaValidatorService {
15
- constructor() {
19
+ constructor(version) {
16
20
  this.getModelFillableColumns = (model) => {
17
21
  const fillable = model.instance.fillable;
18
22
  if (!fillable) {
@@ -66,30 +70,30 @@ class SchemaValidatorService {
66
70
  this.checkModelColumnsOrFail(model, [relation.primaryKey]);
67
71
  const relatedModel = modelList.find(relation.model);
68
72
  if (!relatedModel) {
69
- throw new Error(`Undefined related model: ${relation.model}`);
73
+ throw new AxeError_1.default(Enums_1.AxeErrorCode.UNDEFINED_RELATION_MODEL, `Undefined related model: ${relation.model} (${model.name}.${relation.name})`);
70
74
  }
71
75
  this.checkModelColumnsOrFail(relatedModel, [relation.foreignKey]);
72
76
  };
77
+ this.version = version;
73
78
  }
74
79
  validate() {
75
80
  return __awaiter(this, void 0, void 0, function* () {
76
- const logger = yield Services_1.IoCService.useByType("LogService");
77
- const modelList = yield Services_1.IoCService.useByType("ModelListService");
78
- modelList.get().forEach((model) => {
81
+ const logger = Services_1.LogService.getInstance();
82
+ this.version.modelList.get().forEach((model) => {
79
83
  this.checkModelColumnsOrFail(model, this.getModelFillableColumns(model));
80
84
  this.checkModelColumnsOrFail(model, this.getModelFormValidationColumns(model));
81
85
  this.checkModelColumnsOrFail(model, this.getModelHiddenColumns(model));
82
86
  this.checkModelColumnsOrFail(model, this.getTimestampsColumns(model));
83
87
  this.checkModelColumnsOrFail(model, [model.instance.primaryKey]);
84
- this.checkRelationColumnsOrFail(modelList, model);
88
+ this.checkRelationColumnsOrFail(this.version.modelList, model);
85
89
  });
86
- logger.info("Database schema has been validated.");
90
+ logger.info(`[${this.version.name}] Database schema has been validated.`);
87
91
  });
88
92
  }
89
93
  checkModelColumnsOrFail(model, modelColumns) {
90
94
  const undefinedColumns = modelColumns.filter((modelColumn) => !model.columnNames.includes(modelColumn));
91
95
  if (undefinedColumns.length > 0) {
92
- throw new Error(`${model.name} model doesn't have the following columns on the database; "${model.instance.table}.${undefinedColumns.join(",")}"`);
96
+ throw new AxeError_1.default(Enums_1.AxeErrorCode.UNDEFINED_COLUMN, `${model.name} model doesn't have the following columns on the database; "${model.instance.table}.${undefinedColumns.join(",")}"`);
93
97
  }
94
98
  }
95
99
  checkRelationColumnsOrFail(modelList, model) {
@@ -1,3 +1,4 @@
1
+ import APIService from "./APIService";
1
2
  import DocumentationService from "./DocumentationService";
2
3
  import IoCService from "./IoCService";
3
4
  import LogService from "./LogService";
@@ -5,4 +6,4 @@ import ModelListService from "./ModelListService";
5
6
  import ModelService from "./ModelService";
6
7
  import QueryService from "./QueryService";
7
8
  import SchemaValidatorService from "./SchemaValidatorService";
8
- export { DocumentationService, IoCService, LogService, ModelListService, ModelService, QueryService, SchemaValidatorService, };
9
+ export { DocumentationService, APIService, IoCService, LogService, ModelListService, ModelService, QueryService, SchemaValidatorService, };
@@ -3,7 +3,9 @@ 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.SchemaValidatorService = exports.QueryService = exports.ModelService = exports.ModelListService = exports.LogService = exports.IoCService = exports.DocumentationService = void 0;
6
+ exports.SchemaValidatorService = exports.QueryService = exports.ModelService = exports.ModelListService = exports.LogService = exports.IoCService = exports.APIService = exports.DocumentationService = void 0;
7
+ const APIService_1 = __importDefault(require("./APIService"));
8
+ exports.APIService = APIService_1.default;
7
9
  const DocumentationService_1 = __importDefault(require("./DocumentationService"));
8
10
  exports.DocumentationService = DocumentationService_1.default;
9
11
  const IoCService_1 = __importDefault(require("./IoCService"));
@@ -0,0 +1,2 @@
1
+ import { Request } from "express";
2
+ export declare type SerializationFunction = (item: any, request: Request) => any;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -26,7 +26,6 @@ exports.DEFAULT_METHODS_OF_MODELS = [
26
26
  "hasMany",
27
27
  "hasOne",
28
28
  "belongsTo",
29
- "serialize",
30
29
  "__defineGetter__",
31
30
  "__defineSetter__",
32
31
  "hasOwnProperty",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "axe-api",
3
- "version": "0.22.0",
3
+ "version": "0.30.0-rc1",
4
4
  "description": "AXE API is a simple tool which has been created based on Express and Knex.js to create Rest APIs quickly.",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -30,6 +30,7 @@
30
30
  },
31
31
  "dependencies": {
32
32
  "@types/express": "^4.17.15",
33
+ "chalk": "^4.1.2",
33
34
  "change-case": "^4.1.2",
34
35
  "dotenv": "^14.2.0",
35
36
  "express": "^4.18.2",