axe-api 0.20.0 → 0.20.2

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 (70) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/build/index.d.ts +8 -0
  3. package/build/index.js +32 -0
  4. package/build/src/Builders/ModelTreeBuilder.d.ts +9 -0
  5. package/build/src/Builders/ModelTreeBuilder.js +64 -0
  6. package/build/src/Builders/RouterBuilder.d.ts +15 -0
  7. package/build/src/Builders/RouterBuilder.js +219 -0
  8. package/build/src/Builders/index.d.ts +3 -0
  9. package/build/src/Builders/index.js +10 -0
  10. package/build/src/Enums.d.ts +77 -0
  11. package/build/src/Enums.js +90 -0
  12. package/build/src/Exceptions/ApiError.d.ts +8 -0
  13. package/build/src/Exceptions/ApiError.js +12 -0
  14. package/build/src/Handlers/AllHandler.d.ts +4 -0
  15. package/build/src/Handlers/AllHandler.js +44 -0
  16. package/build/src/Handlers/DestroyHandler.d.ts +4 -0
  17. package/build/src/Handlers/DestroyHandler.js +37 -0
  18. package/build/src/Handlers/HandlerFactory.d.ts +6 -0
  19. package/build/src/Handlers/HandlerFactory.js +36 -0
  20. package/build/src/Handlers/Helpers.d.ts +14 -0
  21. package/build/src/Handlers/Helpers.js +217 -0
  22. package/build/src/Handlers/PaginateHandler.d.ts +4 -0
  23. package/build/src/Handlers/PaginateHandler.js +48 -0
  24. package/build/src/Handlers/PatchHandler.d.ts +4 -0
  25. package/build/src/Handlers/PatchHandler.js +62 -0
  26. package/build/src/Handlers/ShowHandler.d.ts +4 -0
  27. package/build/src/Handlers/ShowHandler.js +51 -0
  28. package/build/src/Handlers/StoreHandler.d.ts +4 -0
  29. package/build/src/Handlers/StoreHandler.js +59 -0
  30. package/build/src/Handlers/UpdateHandler.d.ts +4 -0
  31. package/build/src/Handlers/UpdateHandler.js +62 -0
  32. package/build/src/Interfaces.d.ts +146 -0
  33. package/build/src/Interfaces.js +3 -0
  34. package/build/src/Model.d.ts +25 -0
  35. package/build/src/Model.js +145 -0
  36. package/build/src/Resolvers/FileResolver.d.ts +5 -0
  37. package/build/src/Resolvers/FileResolver.js +85 -0
  38. package/build/src/Resolvers/FolderResolver.d.ts +5 -0
  39. package/build/src/Resolvers/FolderResolver.js +19 -0
  40. package/build/src/Resolvers/GeneralHookResolver.d.ts +5 -0
  41. package/build/src/Resolvers/GeneralHookResolver.js +35 -0
  42. package/build/src/Resolvers/ModelResolver.d.ts +9 -0
  43. package/build/src/Resolvers/ModelResolver.js +107 -0
  44. package/build/src/Resolvers/TransactionResolver.d.ts +8 -0
  45. package/build/src/Resolvers/TransactionResolver.js +75 -0
  46. package/build/src/Resolvers/WithQueryResolver.d.ts +13 -0
  47. package/build/src/Resolvers/WithQueryResolver.js +116 -0
  48. package/build/src/Resolvers/index.d.ts +7 -0
  49. package/build/src/Resolvers/index.js +18 -0
  50. package/build/src/Server.d.ts +8 -0
  51. package/build/src/Server.js +103 -0
  52. package/build/src/Services/DocumentationService.d.ts +9 -0
  53. package/build/src/Services/DocumentationService.js +22 -0
  54. package/build/src/Services/IoCService.d.ts +9 -0
  55. package/build/src/Services/IoCService.js +51 -0
  56. package/build/src/Services/LogService.d.ts +12 -0
  57. package/build/src/Services/LogService.js +41 -0
  58. package/build/src/Services/ModelListService.d.ts +8 -0
  59. package/build/src/Services/ModelListService.js +18 -0
  60. package/build/src/Services/ModelService.d.ts +20 -0
  61. package/build/src/Services/ModelService.js +38 -0
  62. package/build/src/Services/QueryService.d.ts +34 -0
  63. package/build/src/Services/QueryService.js +377 -0
  64. package/build/src/Services/SchemaValidatorService.d.ts +12 -0
  65. package/build/src/Services/SchemaValidatorService.js +114 -0
  66. package/build/src/Services/index.d.ts +8 -0
  67. package/build/src/Services/index.js +20 -0
  68. package/build/src/constants.d.ts +23 -0
  69. package/build/src/constants.js +62 -0
  70. package/package.json +1 -1
@@ -0,0 +1,75 @@
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
+ const Services_1 = require("../Services");
13
+ class TransactionResolver {
14
+ static resolve(model, handlerType) {
15
+ 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 local = model.instance.transaction;
19
+ let privilegedOption = false;
20
+ if (global) {
21
+ privilegedOption = TransactionResolver.resolveTransactionOption(global, handlerType, privilegedOption);
22
+ }
23
+ if (local !== null) {
24
+ privilegedOption = TransactionResolver.resolveTransactionOption(local, handlerType, privilegedOption);
25
+ }
26
+ return privilegedOption;
27
+ });
28
+ }
29
+ static getTransactionConfiguration(configItem, handlerType) {
30
+ // An item definitions might have handler array such as;
31
+ //
32
+ // handler: [HandlerTypes.ALL, HandlerTypes.INSERT]
33
+ if (Array.isArray(configItem.handler)) {
34
+ // If this is an array, we should find the matched handler type
35
+ const found = configItem.handler.find((item) => item === handlerType);
36
+ // If there is, this is the our transaction choice
37
+ if (found) {
38
+ return configItem.transaction;
39
+ }
40
+ }
41
+ else if (configItem.handler === handlerType) {
42
+ // If the "configItem.handler" is not an array, should be matched
43
+ // with the handlerType. If it matches, it means that this is our
44
+ // transaction configuration
45
+ return configItem.transaction;
46
+ }
47
+ return null;
48
+ }
49
+ }
50
+ TransactionResolver.resolveTransactionOption = (option, handlerType, defaultValue) => {
51
+ if (Array.isArray(option)) {
52
+ // If this is an array, we should treat it like an array.
53
+ const configs = option;
54
+ // We should check every item of the array
55
+ for (const configItem of configs) {
56
+ const value = TransactionResolver.getTransactionConfiguration(configItem, handlerType);
57
+ if (value) {
58
+ defaultValue = configItem.transaction;
59
+ }
60
+ }
61
+ }
62
+ else if (typeof option === "boolean") {
63
+ // Developer should be able to select a boolean value for all kind of routes
64
+ defaultValue = option;
65
+ }
66
+ else {
67
+ const configItem = option;
68
+ const value = TransactionResolver.getTransactionConfiguration(configItem, handlerType);
69
+ if (value) {
70
+ defaultValue = configItem.transaction;
71
+ }
72
+ }
73
+ return defaultValue;
74
+ };
75
+ exports.default = TransactionResolver;
@@ -0,0 +1,13 @@
1
+ import { IModelService, IWith } from "../Interfaces";
2
+ declare class WithQueryResolver {
3
+ model: IModelService;
4
+ models: IModelService[];
5
+ constructor(model: IModelService, models: IModelService[]);
6
+ resolve(expression: string): IWith[];
7
+ private resolveRelationsByKey;
8
+ private toNestedArray;
9
+ private getKey;
10
+ private getGroupValue;
11
+ private splitByGroups;
12
+ }
13
+ export default WithQueryResolver;
@@ -0,0 +1,116 @@
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 ApiError_1 = __importDefault(require("../Exceptions/ApiError"));
7
+ class WithQueryResolver {
8
+ constructor(model, models) {
9
+ this.getKey = (group) => {
10
+ const firstIndex = group.indexOf("{");
11
+ if (firstIndex > -1) {
12
+ return group.substring(0, firstIndex);
13
+ }
14
+ return null;
15
+ };
16
+ this.getGroupValue = (group) => {
17
+ const firstIndex = group.indexOf("{");
18
+ if (firstIndex > -1) {
19
+ return group.substring(firstIndex + 1, group.length - 1);
20
+ }
21
+ return group;
22
+ };
23
+ this.model = model;
24
+ this.models = models;
25
+ }
26
+ resolve(expression) {
27
+ const result = [];
28
+ const root = {
29
+ key: "root",
30
+ children: [],
31
+ };
32
+ const currentModel = this.model;
33
+ this.toNestedArray(root, expression);
34
+ this.resolveRelationsByKey(result, null, root.children, currentModel);
35
+ return result;
36
+ }
37
+ resolveRelationsByKey(result, fields, expressions, model) {
38
+ for (const expression of expressions) {
39
+ if (expression.key.trim().length === 0) {
40
+ continue;
41
+ }
42
+ const relationFunction = model.instance[expression.key];
43
+ if (typeof relationFunction === "function") {
44
+ const definition = relationFunction.call(model.instance);
45
+ const relationModel = this.models.find((item) => item.name === definition.model);
46
+ if (relationModel === undefined) {
47
+ throw new ApiError_1.default(`Undefined relation model: ${definition.model} (${expression.key})`);
48
+ }
49
+ const data = {
50
+ relationship: expression.key,
51
+ relationModel,
52
+ fields: [],
53
+ children: [],
54
+ };
55
+ if (expression.children.length > 0) {
56
+ this.resolveRelationsByKey(data.children, data.fields, expression.children, relationModel);
57
+ }
58
+ result.push(data);
59
+ }
60
+ else if (fields !== null) {
61
+ if (model.columnNames.includes(expression.key)) {
62
+ fields.push(expression.key);
63
+ }
64
+ else {
65
+ throw new ApiError_1.default(`It is not a field or a relation: ${expression.key}`);
66
+ }
67
+ }
68
+ else {
69
+ throw new ApiError_1.default(`Unknown expression: ${expression.key}`);
70
+ }
71
+ }
72
+ }
73
+ toNestedArray(root, expression) {
74
+ const groups = this.splitByGroups(expression);
75
+ for (const group of groups) {
76
+ const key = this.getKey(group);
77
+ if (key) {
78
+ const child = {
79
+ key,
80
+ children: [],
81
+ };
82
+ this.toNestedArray(child, this.getGroupValue(group));
83
+ root.children.push(child);
84
+ }
85
+ else {
86
+ root.children.push(...group.split("|").map((field) => {
87
+ return {
88
+ key: field,
89
+ children: [],
90
+ };
91
+ }));
92
+ }
93
+ }
94
+ }
95
+ splitByGroups(expression) {
96
+ const result = [];
97
+ let bracket = 0;
98
+ let startedAt = 0;
99
+ for (let index = 0; index < expression.length; index++) {
100
+ const char = expression[index];
101
+ if (char === "{") {
102
+ bracket++;
103
+ }
104
+ else if (char === "}") {
105
+ bracket--;
106
+ }
107
+ if (bracket === 0 && char === ",") {
108
+ result.push(expression.substring(startedAt, index));
109
+ startedAt = index + 1;
110
+ }
111
+ }
112
+ result.push(expression.substring(startedAt, expression.length));
113
+ return result;
114
+ }
115
+ }
116
+ exports.default = WithQueryResolver;
@@ -0,0 +1,7 @@
1
+ import FileResolver from "./FileResolver";
2
+ import FolderResolver from "./FolderResolver";
3
+ import GeneralHookResolver from "./GeneralHookResolver";
4
+ import ModelResolver from "./ModelResolver";
5
+ import TransactionResolver from "./TransactionResolver";
6
+ import WithQueryResolver from "./WithQueryResolver";
7
+ export { FileResolver, FolderResolver, GeneralHookResolver, ModelResolver, TransactionResolver, WithQueryResolver, };
@@ -0,0 +1,18 @@
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
+ exports.WithQueryResolver = exports.TransactionResolver = exports.ModelResolver = exports.GeneralHookResolver = exports.FolderResolver = exports.FileResolver = void 0;
7
+ const FileResolver_1 = __importDefault(require("./FileResolver"));
8
+ exports.FileResolver = FileResolver_1.default;
9
+ const FolderResolver_1 = __importDefault(require("./FolderResolver"));
10
+ exports.FolderResolver = FolderResolver_1.default;
11
+ const GeneralHookResolver_1 = __importDefault(require("./GeneralHookResolver"));
12
+ exports.GeneralHookResolver = GeneralHookResolver_1.default;
13
+ const ModelResolver_1 = __importDefault(require("./ModelResolver"));
14
+ exports.ModelResolver = ModelResolver_1.default;
15
+ const TransactionResolver_1 = __importDefault(require("./TransactionResolver"));
16
+ exports.TransactionResolver = TransactionResolver_1.default;
17
+ const WithQueryResolver_1 = __importDefault(require("./WithQueryResolver"));
18
+ exports.WithQueryResolver = WithQueryResolver_1.default;
@@ -0,0 +1,8 @@
1
+ declare class Server {
2
+ start(appFolder: string): Promise<void>;
3
+ private bindDependencies;
4
+ private loadExpress;
5
+ private analyzeModels;
6
+ private listen;
7
+ }
8
+ export default Server;
@@ -0,0 +1,103 @@
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 Resolvers_1 = require("./Resolvers");
16
+ const dotenv_1 = __importDefault(require("dotenv"));
17
+ const express_1 = __importDefault(require("express"));
18
+ const knex_1 = __importDefault(require("knex"));
19
+ const knex_schema_inspector_1 = __importDefault(require("knex-schema-inspector"));
20
+ const knex_paginate_1 = require("knex-paginate");
21
+ const Builders_1 = require("./Builders");
22
+ const HandlerFactory_1 = __importDefault(require("./Handlers/HandlerFactory"));
23
+ const Services_1 = require("./Services");
24
+ class Server {
25
+ start(appFolder) {
26
+ return __awaiter(this, void 0, void 0, function* () {
27
+ 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();
36
+ });
37
+ }
38
+ bindDependencies(folders, config, models) {
39
+ 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);
43
+ Services_1.IoCService.singleton("SchemaInspector", () => knex_schema_inspector_1.default);
44
+ 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);
47
+ (0, knex_paginate_1.attachPaginate)();
48
+ return database;
49
+ }));
50
+ Services_1.IoCService.singleton("App", () => __awaiter(this, void 0, void 0, function* () {
51
+ return (0, express_1.default)();
52
+ }));
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
+ }));
61
+ });
62
+ }
63
+ loadExpress() {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ const app = yield Services_1.IoCService.use("App");
66
+ app.use(express_1.default.urlencoded({ extended: true }));
67
+ app.use(express_1.default.json());
68
+ });
69
+ }
70
+ analyzeModels() {
71
+ 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();
76
+ });
77
+ }
78
+ listen() {
79
+ return __awaiter(this, void 0, void 0, function* () {
80
+ const config = yield Services_1.IoCService.use("Config");
81
+ 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
+ }));
96
+ }
97
+ app.listen(config.Application.port, () => {
98
+ logger.info(`API listens requests on http://localhost:${config.Application.port}`);
99
+ });
100
+ });
101
+ }
102
+ }
103
+ exports.default = Server;
@@ -0,0 +1,9 @@
1
+ import { IModelService, IRouteDocumentation } from "../Interfaces";
2
+ import { HttpMethods } from "../Enums";
3
+ declare class DocumentationService {
4
+ routes: IRouteDocumentation[];
5
+ constructor();
6
+ push(method: HttpMethods, url: string, model: IModelService): void;
7
+ get(): IRouteDocumentation[];
8
+ }
9
+ export default DocumentationService;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class DocumentationService {
4
+ constructor() {
5
+ this.routes = [];
6
+ }
7
+ push(method, url, model) {
8
+ this.routes.push({
9
+ model: model.name,
10
+ table: model.instance.table,
11
+ columns: model.columns,
12
+ method,
13
+ url,
14
+ fillables: model.instance.getFillableFields(method),
15
+ validations: model.instance.getValidationRules(method),
16
+ });
17
+ }
18
+ get() {
19
+ return this.routes;
20
+ }
21
+ }
22
+ exports.default = DocumentationService;
@@ -0,0 +1,9 @@
1
+ declare class IoCService {
2
+ private static items;
3
+ static bind(name: string, callback: any): void;
4
+ static singleton(name: string, callback: any): void;
5
+ static use(name: string): Promise<any>;
6
+ static useByType<T>(name: string): Promise<T>;
7
+ private static _add;
8
+ }
9
+ export default IoCService;
@@ -0,0 +1,51 @@
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
+ const Enums_1 = require("../Enums");
13
+ class IoCService {
14
+ static bind(name, callback) {
15
+ this._add(Enums_1.DependencyTypes.BIND, name, callback);
16
+ }
17
+ static singleton(name, callback) {
18
+ this._add(Enums_1.DependencyTypes.SINGLETON, name, callback);
19
+ }
20
+ static use(name) {
21
+ return __awaiter(this, void 0, void 0, function* () {
22
+ const item = IoCService.items[name];
23
+ if (!item) {
24
+ throw new Error(`Dependency is not found ${name}`);
25
+ }
26
+ if (item.type === Enums_1.DependencyTypes.BIND) {
27
+ return yield item.callback();
28
+ }
29
+ if (item.instance) {
30
+ return item.instance;
31
+ }
32
+ item.instance = yield item.callback();
33
+ return item.instance;
34
+ });
35
+ }
36
+ static useByType(name) {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ const result = yield IoCService.use(name);
39
+ return result;
40
+ });
41
+ }
42
+ static _add(type, name, callback) {
43
+ IoCService.items[name] = {
44
+ type,
45
+ callback,
46
+ instance: null,
47
+ };
48
+ }
49
+ }
50
+ IoCService.items = {};
51
+ exports.default = IoCService;
@@ -0,0 +1,12 @@
1
+ import { LogLevels } from "../Enums";
2
+ declare class LogService {
3
+ level: LogLevels;
4
+ constructor(level: LogLevels);
5
+ error(message: string): void;
6
+ warn(message: string): void;
7
+ info(message: string): void;
8
+ success(message: string): void;
9
+ log(message: string): void;
10
+ debug(message: string): void;
11
+ }
12
+ export default LogService;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const Enums_1 = require("../Enums");
4
+ const constants_1 = require("../constants");
5
+ const { fgRed, fgGreen, fgYellow, fgCyan, fgReset } = constants_1.LOG_COLORS;
6
+ class LogService {
7
+ constructor(level) {
8
+ this.level = level;
9
+ }
10
+ error(message) {
11
+ if (this.level >= Enums_1.LogLevels.ERROR) {
12
+ console.error(fgRed, "[axe]", message, fgReset);
13
+ }
14
+ }
15
+ warn(message) {
16
+ if (this.level >= Enums_1.LogLevels.WARNING) {
17
+ console.warn(fgYellow, "[axe]", message, fgReset);
18
+ }
19
+ }
20
+ info(message) {
21
+ if (this.level >= Enums_1.LogLevels.INFO) {
22
+ console.info(fgCyan, "[axe]", message, fgReset);
23
+ }
24
+ }
25
+ success(message) {
26
+ if (this.level >= Enums_1.LogLevels.INFO) {
27
+ console.info(fgGreen, "[axe]", message, fgReset);
28
+ }
29
+ }
30
+ log(message) {
31
+ if (this.level === Enums_1.LogLevels.ALL) {
32
+ console.log(message);
33
+ }
34
+ }
35
+ debug(message) {
36
+ if (this.level === Enums_1.LogLevels.ALL) {
37
+ console.log(message);
38
+ }
39
+ }
40
+ }
41
+ exports.default = LogService;
@@ -0,0 +1,8 @@
1
+ import { IModelService } from "../Interfaces";
2
+ declare class ModelListService {
3
+ private models;
4
+ constructor(models: IModelService[]);
5
+ find(name: string): IModelService | null;
6
+ get(): IModelService[];
7
+ }
8
+ export default ModelListService;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class ModelListService {
4
+ constructor(models) {
5
+ this.models = models;
6
+ }
7
+ find(name) {
8
+ const found = this.models.find((i) => i.name === name);
9
+ if (found) {
10
+ return found;
11
+ }
12
+ return null;
13
+ }
14
+ get() {
15
+ return this.models;
16
+ }
17
+ }
18
+ exports.default = ModelListService;
@@ -0,0 +1,20 @@
1
+ import { HookFunctionTypes, Extensions } from "../Enums";
2
+ import { IColumn, IHookParameter, IModelService, IRelation } from "../Interfaces";
3
+ import Model from "./../Model";
4
+ declare class ModelService implements IModelService {
5
+ name: string;
6
+ instance: Model;
7
+ relations: IRelation[];
8
+ columns: IColumn[];
9
+ columnNames: string[];
10
+ hooks: Record<HookFunctionTypes, (params: IHookParameter) => void>;
11
+ events: Record<HookFunctionTypes, (params: IHookParameter) => void>;
12
+ children: IModelService[];
13
+ isRecursive: boolean;
14
+ constructor(name: string, instance: Model);
15
+ setColumns(columns: IColumn[]): void;
16
+ setExtensions(type: Extensions, hookFunctionType: HookFunctionTypes, data: (params: IHookParameter) => void): void;
17
+ private setHooks;
18
+ private setEvents;
19
+ }
20
+ export default ModelService;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const Enums_1 = require("../Enums");
4
+ class ModelService {
5
+ constructor(name, instance) {
6
+ this.hooks = {};
7
+ this.events = {};
8
+ this.name = name;
9
+ this.instance = instance;
10
+ this.relations = [];
11
+ this.columns = [];
12
+ this.columnNames = [];
13
+ this.children = [];
14
+ this.isRecursive = false;
15
+ }
16
+ setColumns(columns) {
17
+ this.columns = columns;
18
+ this.columnNames = this.columns.map((i) => i.name);
19
+ }
20
+ setExtensions(type, hookFunctionType, data) {
21
+ if (type == Enums_1.Extensions.Hooks) {
22
+ this.setHooks(hookFunctionType, data);
23
+ }
24
+ else if (type == Enums_1.Extensions.Events) {
25
+ this.setEvents(hookFunctionType, data);
26
+ }
27
+ else {
28
+ throw new Error("Undefined hook type.");
29
+ }
30
+ }
31
+ setHooks(hookFunctionType, data) {
32
+ this.hooks[hookFunctionType] = data;
33
+ }
34
+ setEvents(hookFunctionType, data) {
35
+ this.events[hookFunctionType] = data;
36
+ }
37
+ }
38
+ exports.default = ModelService;
@@ -0,0 +1,34 @@
1
+ import { IQuery, ISortField, NestedWhere, IWhere, IModelService } from "../Interfaces";
2
+ import { Knex } from "knex";
3
+ declare class QueryService {
4
+ model: IModelService;
5
+ models: IModelService[];
6
+ usedConditionColumns: string[];
7
+ relationColumns: string[];
8
+ createdJoins: string[];
9
+ constructor(model: IModelService, models: IModelService[]);
10
+ applyFields(query: Knex.QueryBuilder, fields: string[]): void;
11
+ applySorting(query: Knex.QueryBuilder, sort: ISortField[]): void;
12
+ applyWheresInsideGroup(sub: Knex.QueryBuilder, ruleSet: NestedWhere | IWhere): void;
13
+ applyWheres(query: Knex.QueryBuilder, ruleSet: NestedWhere): void;
14
+ get(query: any): IQuery;
15
+ private getUsedColumns;
16
+ private applyConditionRule;
17
+ private applyRelatedQueryJoins;
18
+ private applyJoinIfNecessary;
19
+ private addJoinOnce;
20
+ private parseSections;
21
+ private parsePage;
22
+ private parsePerPage;
23
+ private parseFields;
24
+ private parseSortingOptions;
25
+ private parseConditions;
26
+ private parseCondition;
27
+ private parseConditionObject;
28
+ private applySpecialCondition;
29
+ private addRelationColumns;
30
+ private getConditionMethodName;
31
+ private hasSpecialStructure;
32
+ private shouldBeAcceptableColumn;
33
+ }
34
+ export default QueryService;