axe-api 0.19.1 → 0.20.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 (106) hide show
  1. package/build/index.d.ts +8 -0
  2. package/build/index.js +32 -0
  3. package/build/src/Builders/ModelTreeBuilder.d.ts +9 -0
  4. package/build/src/Builders/ModelTreeBuilder.js +64 -0
  5. package/build/src/Builders/RouterBuilder.d.ts +15 -0
  6. package/build/src/Builders/RouterBuilder.js +219 -0
  7. package/build/src/Builders/index.d.ts +3 -0
  8. package/build/src/Builders/index.js +10 -0
  9. package/build/src/Enums.d.ts +77 -0
  10. package/build/src/Enums.js +90 -0
  11. package/build/src/Exceptions/ApiError.d.ts +8 -0
  12. package/build/src/Exceptions/ApiError.js +12 -0
  13. package/build/src/Handlers/AllHandler.d.ts +4 -0
  14. package/build/src/Handlers/AllHandler.js +44 -0
  15. package/build/src/Handlers/DestroyHandler.d.ts +4 -0
  16. package/build/src/Handlers/DestroyHandler.js +37 -0
  17. package/build/src/Handlers/HandlerFactory.d.ts +6 -0
  18. package/build/src/Handlers/HandlerFactory.js +36 -0
  19. package/build/src/Handlers/Helpers.d.ts +14 -0
  20. package/build/src/Handlers/Helpers.js +231 -0
  21. package/build/src/Handlers/PaginateHandler.d.ts +4 -0
  22. package/build/src/Handlers/PaginateHandler.js +48 -0
  23. package/build/src/Handlers/PatchHandler.d.ts +4 -0
  24. package/build/src/Handlers/PatchHandler.js +62 -0
  25. package/build/src/Handlers/ShowHandler.d.ts +4 -0
  26. package/build/src/Handlers/ShowHandler.js +51 -0
  27. package/build/src/Handlers/StoreHandler.d.ts +4 -0
  28. package/build/src/Handlers/StoreHandler.js +59 -0
  29. package/build/src/Handlers/UpdateHandler.d.ts +4 -0
  30. package/build/src/Handlers/UpdateHandler.js +62 -0
  31. package/build/src/Interfaces.d.ts +165 -0
  32. package/build/src/Interfaces.js +3 -0
  33. package/build/src/Model.d.ts +24 -0
  34. package/build/src/Model.js +108 -0
  35. package/build/src/Resolvers/FileResolver.d.ts +5 -0
  36. package/build/src/Resolvers/FileResolver.js +76 -0
  37. package/build/src/Resolvers/FolderResolver.d.ts +5 -0
  38. package/build/src/Resolvers/FolderResolver.js +19 -0
  39. package/build/src/Resolvers/GeneralHookResolver.d.ts +5 -0
  40. package/build/src/Resolvers/GeneralHookResolver.js +35 -0
  41. package/build/src/Resolvers/ModelMiddlewareResolver.d.ts +7 -0
  42. package/build/src/Resolvers/ModelMiddlewareResolver.js +29 -0
  43. package/build/src/Resolvers/ModelResolver.d.ts +9 -0
  44. package/build/src/Resolvers/ModelResolver.js +101 -0
  45. package/build/src/Resolvers/TransactionResolver.d.ts +8 -0
  46. package/build/src/Resolvers/TransactionResolver.js +75 -0
  47. package/build/src/Resolvers/index.d.ts +7 -0
  48. package/build/src/Resolvers/index.js +18 -0
  49. package/build/src/Server.d.ts +8 -0
  50. package/build/src/Server.js +101 -0
  51. package/build/src/Services/DocumentationService.d.ts +9 -0
  52. package/build/src/Services/DocumentationService.js +22 -0
  53. package/build/src/Services/IoCService.d.ts +9 -0
  54. package/build/src/Services/IoCService.js +51 -0
  55. package/build/src/Services/LogService.d.ts +12 -0
  56. package/build/src/Services/LogService.js +41 -0
  57. package/build/src/Services/ModelListService.d.ts +8 -0
  58. package/build/src/Services/ModelListService.js +18 -0
  59. package/build/src/Services/ModelService.d.ts +20 -0
  60. package/build/src/Services/ModelService.js +38 -0
  61. package/build/src/Services/QueryService.d.ts +39 -0
  62. package/build/src/Services/QueryService.js +447 -0
  63. package/build/src/Services/SchemaValidatorService.d.ts +12 -0
  64. package/build/src/Services/SchemaValidatorService.js +114 -0
  65. package/build/src/Services/index.d.ts +8 -0
  66. package/build/src/Services/index.js +20 -0
  67. package/build/src/constants.d.ts +23 -0
  68. package/build/src/constants.js +62 -0
  69. package/package.json +65 -56
  70. package/readme.md +152 -145
  71. package/.eslintrc.cjs +0 -24
  72. package/.github/PULL_REQUEST_TEMPLATE.md +0 -32
  73. package/.github/workflows/auto-tag.yml +0 -15
  74. package/.github/workflows/npm-publish.yml +0 -18
  75. package/.github/workflows/test-integration.yml +0 -29
  76. package/.github/workflows/test-unit.yml +0 -23
  77. package/CHANGELOG.md +0 -144
  78. package/babel.config.cjs +0 -12
  79. package/index.js +0 -21
  80. package/jest.config.js +0 -4
  81. package/src/Server.js +0 -118
  82. package/src/constants.js +0 -148
  83. package/src/core/Config.js +0 -38
  84. package/src/core/Docs.js +0 -43
  85. package/src/core/HttpResponse.js +0 -10
  86. package/src/core/IoC.js +0 -41
  87. package/src/core/Logger.js +0 -46
  88. package/src/core/Model.js +0 -86
  89. package/src/core/QueryParser.js +0 -544
  90. package/src/handlers/all.js +0 -73
  91. package/src/handlers/destroy.js +0 -50
  92. package/src/handlers/helpers.js +0 -320
  93. package/src/handlers/index.js +0 -9
  94. package/src/handlers/paginate.js +0 -77
  95. package/src/handlers/patch.js +0 -95
  96. package/src/handlers/show.js +0 -81
  97. package/src/handlers/store.js +0 -82
  98. package/src/handlers/update.js +0 -92
  99. package/src/resolvers/checkModelColumns.js +0 -113
  100. package/src/resolvers/detectDbColumns.js +0 -42
  101. package/src/resolvers/getModelInstanceArray.js +0 -27
  102. package/src/resolvers/getModelTree.js +0 -63
  103. package/src/resolvers/index.js +0 -17
  104. package/src/resolvers/setExpressRoutes.js +0 -286
  105. package/src/resolvers/setModelHooks.js +0 -25
  106. package/src/resolvers/setModelRelations.js +0 -41
@@ -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,7 @@
1
+ import FileResolver from "./FileResolver";
2
+ import FolderResolver from "./FolderResolver";
3
+ import GeneralHookResolver from "./GeneralHookResolver";
4
+ import ModelMiddlewareResolver from "./ModelMiddlewareResolver";
5
+ import ModelResolver from "./ModelResolver";
6
+ import TransactionResolver from "./TransactionResolver";
7
+ export { FileResolver, FolderResolver, GeneralHookResolver, ModelMiddlewareResolver, ModelResolver, TransactionResolver, };
@@ -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.TransactionResolver = exports.ModelResolver = exports.ModelMiddlewareResolver = 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 ModelMiddlewareResolver_1 = __importDefault(require("./ModelMiddlewareResolver"));
14
+ exports.ModelMiddlewareResolver = ModelMiddlewareResolver_1.default;
15
+ const ModelResolver_1 = __importDefault(require("./ModelResolver"));
16
+ exports.ModelResolver = ModelResolver_1.default;
17
+ const TransactionResolver_1 = __importDefault(require("./TransactionResolver"));
18
+ exports.TransactionResolver = TransactionResolver_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,101 @@
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_paginate_1 = require("knex-paginate");
20
+ const Builders_1 = require("./Builders");
21
+ const HandlerFactory_1 = __importDefault(require("./Handlers/HandlerFactory"));
22
+ const Services_1 = require("./Services");
23
+ class Server {
24
+ start(appFolder) {
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ dotenv_1.default.config();
27
+ const folders = new Resolvers_1.FolderResolver().resolve(appFolder);
28
+ const fileResolver = new Resolvers_1.FileResolver();
29
+ const config = yield fileResolver.resolve(folders.Config);
30
+ const models = yield fileResolver.resolve(folders.Models);
31
+ yield this.bindDependencies(folders, config, models);
32
+ yield this.loadExpress();
33
+ yield this.analyzeModels();
34
+ yield this.listen();
35
+ });
36
+ }
37
+ bindDependencies(folders, config, models) {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ Services_1.IoCService.singleton("Folders", () => folders);
40
+ Services_1.IoCService.singleton("Config", () => config);
41
+ Services_1.IoCService.singleton("Models", () => models);
42
+ Services_1.IoCService.singleton("Database", () => __awaiter(this, void 0, void 0, function* () {
43
+ const config = yield Services_1.IoCService.use("Config");
44
+ const database = (0, knex_1.default)(config.Database);
45
+ (0, knex_paginate_1.attachPaginate)();
46
+ return database;
47
+ }));
48
+ Services_1.IoCService.singleton("App", () => __awaiter(this, void 0, void 0, function* () {
49
+ return (0, express_1.default)();
50
+ }));
51
+ Services_1.IoCService.singleton("HandlerFactory", () => {
52
+ return new HandlerFactory_1.default();
53
+ });
54
+ Services_1.IoCService.singleton("DocumentationService", () => __awaiter(this, void 0, void 0, function* () { return new Services_1.DocumentationService(); }));
55
+ Services_1.IoCService.singleton("LogService", () => __awaiter(this, void 0, void 0, function* () {
56
+ const config = yield Services_1.IoCService.use("Config");
57
+ return new Services_1.LogService(config.Application.logLevel);
58
+ }));
59
+ });
60
+ }
61
+ loadExpress() {
62
+ return __awaiter(this, void 0, void 0, function* () {
63
+ const app = yield Services_1.IoCService.use("App");
64
+ app.use(express_1.default.urlencoded({ extended: true }));
65
+ app.use(express_1.default.json());
66
+ });
67
+ }
68
+ analyzeModels() {
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ yield new Resolvers_1.ModelResolver().resolve();
71
+ yield new Services_1.SchemaValidatorService().validate();
72
+ yield new Builders_1.ModelTreeBuilder().build();
73
+ yield new Builders_1.RouterBuilder().build();
74
+ });
75
+ }
76
+ listen() {
77
+ return __awaiter(this, void 0, void 0, function* () {
78
+ const config = yield Services_1.IoCService.use("Config");
79
+ const app = yield Services_1.IoCService.use("App");
80
+ const logger = yield Services_1.IoCService.useByType("LogService");
81
+ if (config.Application.env === "development") {
82
+ app.get("/docs", (req, res) => __awaiter(this, void 0, void 0, function* () {
83
+ const docs = yield Services_1.IoCService.useByType("DocumentationService");
84
+ const modelTree = yield Services_1.IoCService.use("ModelTree");
85
+ res.json({
86
+ routes: docs.get(),
87
+ modelTree,
88
+ });
89
+ }));
90
+ app.get("/docs/routes", (req, res) => __awaiter(this, void 0, void 0, function* () {
91
+ const docs = yield Services_1.IoCService.useByType("DocumentationService");
92
+ res.json(docs.get().map((route) => `${route.method} ${route.url}`));
93
+ }));
94
+ }
95
+ app.listen(config.Application.port, () => {
96
+ logger.info(`API listens requests on http://localhost:${config.Application.port}`);
97
+ });
98
+ });
99
+ }
100
+ }
101
+ 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
+ import { DependencyTypes } from "../Enums";
2
+ declare const IoCService: {
3
+ bind(name: string, callback: any): void;
4
+ singleton(name: string, callback: any): void;
5
+ use(name: string): Promise<any>;
6
+ useByType<T>(name: string): Promise<T>;
7
+ _add(type: DependencyTypes, name: string, callback: any): void;
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
+ const items = {};
14
+ const IoCService = {
15
+ bind(name, callback) {
16
+ this._add(Enums_1.DependencyTypes.BIND, name, callback);
17
+ },
18
+ singleton(name, callback) {
19
+ this._add(Enums_1.DependencyTypes.SINGLETON, name, callback);
20
+ },
21
+ use(name) {
22
+ return __awaiter(this, void 0, void 0, function* () {
23
+ const item = items[name];
24
+ if (!item) {
25
+ throw new Error(`Dependency is not found ${name}`);
26
+ }
27
+ if (item.type === Enums_1.DependencyTypes.BIND) {
28
+ return yield item.callback();
29
+ }
30
+ if (item.instance) {
31
+ return item.instance;
32
+ }
33
+ item.instance = yield item.callback();
34
+ return item.instance;
35
+ });
36
+ },
37
+ useByType(name) {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ const result = yield IoCService.use(name);
40
+ return result;
41
+ });
42
+ },
43
+ _add(type, name, callback) {
44
+ items[name] = {
45
+ type,
46
+ callback,
47
+ instance: null,
48
+ };
49
+ },
50
+ };
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,39 @@
1
+ import { ConditionTypes } from "../Enums";
2
+ import { IRawQuery, IQuery, ISortField, NestedWhere, IWhere, IWith, IModelService } from "../Interfaces";
3
+ import { Knex } from "knex";
4
+ declare class QueryService {
5
+ model: IModelService;
6
+ models: IModelService[];
7
+ usedConditionColumns: string[];
8
+ relationColumns: string[];
9
+ createdJoins: string[];
10
+ constructor(model: IModelService, models: IModelService[]);
11
+ applyFields(query: Knex.QueryBuilder, fields: string[]): void;
12
+ applySorting(query: Knex.QueryBuilder, sort: ISortField[]): void;
13
+ applyWheresInsideGroup(sub: Knex.QueryBuilder, ruleSet: NestedWhere | IWhere): void;
14
+ applyWheres(query: Knex.QueryBuilder, ruleSet: NestedWhere): void;
15
+ get(query: any): IQuery;
16
+ _getUsedColumns(conditions: IQuery): string[];
17
+ _applyConditionRule(sub: Knex.QueryBuilder, ruleSet: IWhere): Knex.QueryBuilder;
18
+ _applyRelatedQueryJoins(query: Knex.QueryBuilder, ruleSet: NestedWhere): void;
19
+ _applyJoinIfNecessary(query: Knex.QueryBuilder, ruleSet: IWhere): void;
20
+ _addJoinOnce(query: Knex.QueryBuilder, ruleSet: IWhere): void;
21
+ _getSections(query: any): IRawQuery;
22
+ _parseSections(sections: IRawQuery): IQuery;
23
+ _parsePage(content: any): number;
24
+ _parsePerPage(content: any): number;
25
+ _parseFields(content: any): string[];
26
+ _parseSortingOptions(content: any): ISortField[];
27
+ _parseConditions(conditions: any): NestedWhere;
28
+ _parseCondition(content: any): NestedWhere;
29
+ _parseConditionObject(content: any, key: string): IWhere;
30
+ _parseWithSections(content: any): string[];
31
+ _parseWith(items: string[]): IWith[];
32
+ _splitWithRecursive(content: string): string[];
33
+ _applySpecialCondition(where: IWhere, structure: string, condition: ConditionTypes): void;
34
+ _addRelationColumns(withs: IWith[]): void;
35
+ _getConditionMethodName(ruleSet: IWhere): "orWhere" | "where";
36
+ _hasSpecialStructure(field: string, structure: string): boolean;
37
+ _shouldBeAcceptableColumn(field: string): void;
38
+ }
39
+ export default QueryService;