axe-api 0.20.0-rc7 → 0.20.0-rc8
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.
- package/build/index.js +30 -7
- package/build/src/Builders/ModelTreeBuilder.js +27 -18
- package/build/src/Builders/RouterBuilder.js +184 -153
- package/build/src/Builders/index.js +10 -3
- package/build/src/Enums.js +23 -20
- package/build/src/Exceptions/ApiError.js +5 -6
- package/build/src/Handlers/AllHandler.js +27 -22
- package/build/src/Handlers/DestroyHandler.js +29 -27
- package/build/src/Handlers/HandlerFactory.js +28 -23
- package/build/src/Handlers/Helpers.js +59 -36
- package/build/src/Handlers/PaginateHandler.js +27 -22
- package/build/src/Handlers/PatchHandler.js +37 -35
- package/build/src/Handlers/ShowHandler.js +32 -24
- package/build/src/Handlers/StoreHandler.js +30 -22
- package/build/src/Handlers/UpdateHandler.js +37 -35
- package/build/src/Interfaces.js +3 -1
- package/build/src/Model.js +22 -17
- package/build/src/Resolvers/FileResolver.js +70 -29
- package/build/src/Resolvers/FolderResolver.js +12 -7
- package/build/src/Resolvers/GeneralHookResolver.js +32 -16
- package/build/src/Resolvers/ModelMiddlewareResolver.js +4 -2
- package/build/src/Resolvers/ModelResolver.js +88 -67
- package/build/src/Resolvers/TransactionResolver.js +51 -38
- package/build/src/Resolvers/index.js +18 -7
- package/build/src/Server.js +91 -67
- package/build/src/Services/DocumentationService.js +3 -2
- package/build/src/Services/IoCService.js +34 -19
- package/build/src/Services/LogService.js +12 -11
- package/build/src/Services/ModelListService.js +3 -2
- package/build/src/Services/ModelService.js +8 -13
- package/build/src/Services/QueryService.js +34 -34
- package/build/src/Services/SchemaValidatorService.js +85 -70
- package/build/src/Services/index.js +20 -8
- package/build/src/constants.js +21 -18
- package/package.json +1 -1
package/build/index.js
CHANGED
|
@@ -1,7 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.DEFAULT_HANDLERS = exports.ApiError = exports.Model = exports.Server = void 0;
|
|
21
|
+
const Server_1 = __importDefault(require("./src/Server"));
|
|
22
|
+
exports.Server = Server_1.default;
|
|
23
|
+
const Model_1 = __importDefault(require("./src/Model"));
|
|
24
|
+
exports.Model = Model_1.default;
|
|
25
|
+
const ApiError_1 = __importDefault(require("./src/Exceptions/ApiError"));
|
|
26
|
+
exports.ApiError = ApiError_1.default;
|
|
27
|
+
const constants_1 = require("./src/constants");
|
|
28
|
+
Object.defineProperty(exports, "DEFAULT_HANDLERS", { enumerable: true, get: function () { return constants_1.DEFAULT_HANDLERS; } });
|
|
29
|
+
__exportStar(require("./src/Enums"), exports);
|
|
30
|
+
__exportStar(require("./src/Interfaces"), exports);
|
|
@@ -1,20 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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 Services_1 = require("../Services");
|
|
3
14
|
class ModelTreeBuilder {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
15
|
+
build() {
|
|
16
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
17
|
+
const logger = yield Services_1.IoCService.useByType("LogService");
|
|
18
|
+
const modelList = yield Services_1.IoCService.useByType("ModelListService");
|
|
19
|
+
const tree = this.getRootLevelOfTree(modelList);
|
|
20
|
+
this.createRecursiveTree(tree, modelList);
|
|
21
|
+
this.addNestedRoutes(tree, modelList);
|
|
22
|
+
Services_1.IoCService.singleton("ModelTree", () => tree);
|
|
23
|
+
logger.info("Model tree has been created.");
|
|
24
|
+
});
|
|
12
25
|
}
|
|
13
26
|
getRootLevelOfTree(modelList) {
|
|
14
27
|
const childModels = [];
|
|
15
28
|
modelList.get().forEach((model) => {
|
|
16
29
|
childModels.push(...model.relations
|
|
17
|
-
.filter((relation) => relation.type === Relationships.HAS_MANY)
|
|
30
|
+
.filter((relation) => relation.type === Enums_1.Relationships.HAS_MANY)
|
|
18
31
|
.map((relation) => relation.model));
|
|
19
32
|
});
|
|
20
33
|
return modelList.get().filter((model) => !childModels.includes(model.name));
|
|
@@ -35,7 +48,7 @@ class ModelTreeBuilder {
|
|
|
35
48
|
}
|
|
36
49
|
getChildModelNames(model) {
|
|
37
50
|
return model.relations
|
|
38
|
-
.filter((item) => item.type === Relationships.HAS_MANY)
|
|
51
|
+
.filter((item) => item.type === Enums_1.Relationships.HAS_MANY)
|
|
39
52
|
.map((item) => item.model);
|
|
40
53
|
}
|
|
41
54
|
addNestedRoutes(tree, modelList) {
|
|
@@ -43,13 +56,9 @@ class ModelTreeBuilder {
|
|
|
43
56
|
modelList.get().forEach((model) => {
|
|
44
57
|
const recursiveRelations = model.relations.filter((relation) => relation.model === model.name);
|
|
45
58
|
if (recursiveRelations.length === 2) {
|
|
46
|
-
tree.push({
|
|
47
|
-
...model,
|
|
48
|
-
isRecursive: true,
|
|
49
|
-
children: [],
|
|
50
|
-
});
|
|
59
|
+
tree.push(Object.assign(Object.assign({}, model), { isRecursive: true, children: [] }));
|
|
51
60
|
}
|
|
52
61
|
});
|
|
53
62
|
}
|
|
54
63
|
}
|
|
55
|
-
|
|
64
|
+
exports.default = ModelTreeBuilder;
|
|
@@ -1,154 +1,196 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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 pluralize_1 = __importDefault(require("pluralize"));
|
|
16
|
+
const http_status_codes_1 = require("http-status-codes");
|
|
17
|
+
const change_case_1 = require("change-case");
|
|
18
|
+
const Resolvers_1 = require("../Resolvers");
|
|
19
|
+
const constants_1 = require("../constants");
|
|
20
|
+
const Enums_1 = require("../Enums");
|
|
21
|
+
const Services_1 = require("../Services");
|
|
8
22
|
class RouterBuilder {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
constructor() {
|
|
24
|
+
this.getPrimaryKeyName = (model) => {
|
|
25
|
+
return (pluralize_1.default.singular(model.name).toLowerCase() +
|
|
26
|
+
this.ucFirst(model.instance.primaryKey));
|
|
27
|
+
};
|
|
28
|
+
this.ucFirst = (value) => {
|
|
29
|
+
return value.charAt(0).toUpperCase() + value.slice(1);
|
|
30
|
+
};
|
|
31
|
+
this.getRootPrefix = () => __awaiter(this, void 0, void 0, function* () {
|
|
32
|
+
var _a;
|
|
33
|
+
const config = yield Services_1.IoCService.use("Config");
|
|
34
|
+
let prefix = ((_a = config === null || config === void 0 ? void 0 : config.Application) === null || _a === void 0 ? void 0 : _a.prefix) || "api";
|
|
35
|
+
if (prefix.substr(0, 1) === "/") {
|
|
36
|
+
prefix = prefix.substr(1);
|
|
37
|
+
}
|
|
38
|
+
if (prefix.substr(prefix.length - 1) === "/") {
|
|
39
|
+
prefix = prefix.substr(0, prefix.length - 1);
|
|
40
|
+
}
|
|
41
|
+
return prefix;
|
|
42
|
+
});
|
|
27
43
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (!model.instance.handlers.includes(handlerType)) {
|
|
37
|
-
continue;
|
|
44
|
+
build() {
|
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
const logger = yield Services_1.IoCService.useByType("LogService");
|
|
47
|
+
const modelTree = yield Services_1.IoCService.useByType("ModelTree");
|
|
48
|
+
const modelList = yield Services_1.IoCService.useByType("ModelListService");
|
|
49
|
+
const generalHooks = yield Resolvers_1.GeneralHookResolver.resolve();
|
|
50
|
+
if (generalHooks.onBeforeInit) {
|
|
51
|
+
generalHooks.onBeforeInit();
|
|
38
52
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
await this.createChildRoutes(model, modelList, resource, urlPrefix);
|
|
47
|
-
await this.createNestedRoutes(model, modelList, allowRecursive, urlPrefix, resource);
|
|
53
|
+
yield this.createRoutesByModelTree(modelTree, modelList);
|
|
54
|
+
if (generalHooks.onAfterInit) {
|
|
55
|
+
generalHooks.onAfterInit();
|
|
56
|
+
}
|
|
57
|
+
logger.info("Express routes have been created.");
|
|
58
|
+
});
|
|
48
59
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
relation.type === Relationships.HAS_MANY);
|
|
56
|
-
if (relation) {
|
|
57
|
-
await this.createRouteByModel(model, modelList, `${urlPrefix}${resource}/:${camelCase(relation.foreignKey)}/`, model, relation, false);
|
|
58
|
-
}
|
|
60
|
+
createRoutesByModelTree(modelTree, modelList) {
|
|
61
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
+
for (const model of modelTree) {
|
|
63
|
+
yield this.createRouteByModel(model, modelList);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
59
66
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
// We should different parameter name for child routes
|
|
65
|
-
const primaryKey = this.getPrimaryKeyName(model);
|
|
66
|
-
const subRelations = model.relations.filter((item) => item.type === Relationships.HAS_MANY);
|
|
67
|
-
for (const relation of subRelations) {
|
|
68
|
-
const child = model.children.find((item) => item.name === relation.model);
|
|
69
|
-
// It should be recursive
|
|
70
|
-
if (child) {
|
|
71
|
-
await this.createRouteByModel(child, modelList, `${urlPrefix}${resource}/:${primaryKey}/`, model, relation);
|
|
67
|
+
createRouteByModel(model, modelList, urlPrefix = "", parentModel = null, relation = null, allowRecursive = true) {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
if (model.instance.ignore) {
|
|
70
|
+
return;
|
|
72
71
|
}
|
|
73
|
-
|
|
72
|
+
const resource = this.getResourcePath(model, relation);
|
|
73
|
+
// We create and handle routes by not duplicate so many lines.
|
|
74
|
+
for (const handler of Object.keys(constants_1.API_ROUTE_TEMPLATES)) {
|
|
75
|
+
const handlerType = handler;
|
|
76
|
+
if (!model.instance.handlers.includes(handlerType)) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const urlCreator = constants_1.API_ROUTE_TEMPLATES[handlerType];
|
|
80
|
+
const url = urlCreator(yield this.getRootPrefix(), urlPrefix, resource, model.instance.primaryKey);
|
|
81
|
+
// Detecting filters
|
|
82
|
+
const middlewares = Resolvers_1.ModelMiddlewareResolver.resolve(model, handlerType);
|
|
83
|
+
// Adding the route to the express
|
|
84
|
+
yield this.addExpressRoute(handlerType, url, middlewares, model, parentModel, relation);
|
|
85
|
+
}
|
|
86
|
+
yield this.createChildRoutes(model, modelList, resource, urlPrefix);
|
|
87
|
+
yield this.createNestedRoutes(model, modelList, allowRecursive, urlPrefix, resource);
|
|
88
|
+
});
|
|
74
89
|
}
|
|
75
|
-
|
|
76
|
-
return (
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
};
|
|
88
|
-
switch (handlerType) {
|
|
89
|
-
case HandlerTypes.ALL:
|
|
90
|
-
app.get(url, middlewares, handler);
|
|
91
|
-
docs.push(HttpMethods.GET, url, model);
|
|
92
|
-
break;
|
|
93
|
-
case HandlerTypes.DELETE:
|
|
94
|
-
app.delete(url, middlewares, handler);
|
|
95
|
-
docs.push(HttpMethods.DELETE, url, model);
|
|
96
|
-
break;
|
|
97
|
-
case HandlerTypes.INSERT:
|
|
98
|
-
app.post(url, middlewares, handler);
|
|
99
|
-
docs.push(HttpMethods.POST, url, model);
|
|
100
|
-
break;
|
|
101
|
-
case HandlerTypes.PAGINATE:
|
|
102
|
-
app.get(url, middlewares, handler);
|
|
103
|
-
docs.push(HttpMethods.GET, url, model);
|
|
104
|
-
break;
|
|
105
|
-
case HandlerTypes.PATCH:
|
|
106
|
-
app.patch(url, middlewares, handler);
|
|
107
|
-
docs.push(HttpMethods.PATCH, url, model);
|
|
108
|
-
break;
|
|
109
|
-
case HandlerTypes.SHOW:
|
|
110
|
-
app.get(url, middlewares, handler);
|
|
111
|
-
docs.push(HttpMethods.GET, url, model);
|
|
112
|
-
break;
|
|
113
|
-
case HandlerTypes.UPDATE:
|
|
114
|
-
app.put(url, middlewares, handler);
|
|
115
|
-
docs.push(HttpMethods.PUT, url, model);
|
|
116
|
-
break;
|
|
117
|
-
default:
|
|
118
|
-
throw new Error("Undefined handler type");
|
|
119
|
-
}
|
|
90
|
+
createNestedRoutes(model, modelList, allowRecursive, urlPrefix, resource) {
|
|
91
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
if (!model.isRecursive || !allowRecursive) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// We should different parameter name for child routes
|
|
96
|
+
const relation = model.relations.find((relation) => relation.model === model.name &&
|
|
97
|
+
relation.type === Enums_1.Relationships.HAS_MANY);
|
|
98
|
+
if (relation) {
|
|
99
|
+
yield this.createRouteByModel(model, modelList, `${urlPrefix}${resource}/:${(0, change_case_1.camelCase)(relation.foreignKey)}/`, model, relation, false);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
120
102
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
103
|
+
createChildRoutes(model, modelList, resource, urlPrefix) {
|
|
104
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
105
|
+
if (model.children.length === 0) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// We should different parameter name for child routes
|
|
109
|
+
const primaryKey = this.getPrimaryKeyName(model);
|
|
110
|
+
const subRelations = model.relations.filter((item) => item.type === Enums_1.Relationships.HAS_MANY);
|
|
111
|
+
for (const relation of subRelations) {
|
|
112
|
+
const child = model.children.find((item) => item.name === relation.model);
|
|
113
|
+
// It should be recursive
|
|
114
|
+
if (child) {
|
|
115
|
+
yield this.createRouteByModel(child, modelList, `${urlPrefix}${resource}/:${primaryKey}/`, model, relation);
|
|
116
|
+
}
|
|
130
117
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
relation
|
|
139
|
-
database: hasTransaction && trx ? trx : database,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
addExpressRoute(handlerType, url, middlewares, model, parentModel, relation) {
|
|
121
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
122
|
+
const docs = yield Services_1.IoCService.useByType("DocumentationService");
|
|
123
|
+
const app = yield Services_1.IoCService.useByType("App");
|
|
124
|
+
const handler = (req, res) => {
|
|
125
|
+
this.requestHandler(handlerType, req, res, model, parentModel, relation);
|
|
140
126
|
};
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
127
|
+
switch (handlerType) {
|
|
128
|
+
case Enums_1.HandlerTypes.ALL:
|
|
129
|
+
app.get(url, middlewares, handler);
|
|
130
|
+
docs.push(Enums_1.HttpMethods.GET, url, model);
|
|
131
|
+
break;
|
|
132
|
+
case Enums_1.HandlerTypes.DELETE:
|
|
133
|
+
app.delete(url, middlewares, handler);
|
|
134
|
+
docs.push(Enums_1.HttpMethods.DELETE, url, model);
|
|
135
|
+
break;
|
|
136
|
+
case Enums_1.HandlerTypes.INSERT:
|
|
137
|
+
app.post(url, middlewares, handler);
|
|
138
|
+
docs.push(Enums_1.HttpMethods.POST, url, model);
|
|
139
|
+
break;
|
|
140
|
+
case Enums_1.HandlerTypes.PAGINATE:
|
|
141
|
+
app.get(url, middlewares, handler);
|
|
142
|
+
docs.push(Enums_1.HttpMethods.GET, url, model);
|
|
143
|
+
break;
|
|
144
|
+
case Enums_1.HandlerTypes.PATCH:
|
|
145
|
+
app.patch(url, middlewares, handler);
|
|
146
|
+
docs.push(Enums_1.HttpMethods.PATCH, url, model);
|
|
147
|
+
break;
|
|
148
|
+
case Enums_1.HandlerTypes.SHOW:
|
|
149
|
+
app.get(url, middlewares, handler);
|
|
150
|
+
docs.push(Enums_1.HttpMethods.GET, url, model);
|
|
151
|
+
break;
|
|
152
|
+
case Enums_1.HandlerTypes.UPDATE:
|
|
153
|
+
app.put(url, middlewares, handler);
|
|
154
|
+
docs.push(Enums_1.HttpMethods.PUT, url, model);
|
|
155
|
+
break;
|
|
156
|
+
default:
|
|
157
|
+
throw new Error("Undefined handler type");
|
|
144
158
|
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
requestHandler(handlerType, req, res, model, parentModel, relation) {
|
|
162
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
163
|
+
let trx = null;
|
|
164
|
+
let hasTransaction = false;
|
|
165
|
+
try {
|
|
166
|
+
const factory = yield Services_1.IoCService.useByType("HandlerFactory");
|
|
167
|
+
const database = (yield Services_1.IoCService.use("Database"));
|
|
168
|
+
hasTransaction = yield Resolvers_1.TransactionResolver.resolve(model, handlerType);
|
|
169
|
+
if (hasTransaction) {
|
|
170
|
+
trx = yield database.transaction();
|
|
171
|
+
}
|
|
172
|
+
const handler = factory.get(handlerType);
|
|
173
|
+
const pack = {
|
|
174
|
+
req,
|
|
175
|
+
res,
|
|
176
|
+
handlerType,
|
|
177
|
+
model,
|
|
178
|
+
parentModel,
|
|
179
|
+
relation,
|
|
180
|
+
database: hasTransaction && trx ? trx : database,
|
|
181
|
+
};
|
|
182
|
+
yield handler(pack);
|
|
183
|
+
if (hasTransaction && trx) {
|
|
184
|
+
trx.commit();
|
|
185
|
+
}
|
|
149
186
|
}
|
|
150
|
-
|
|
151
|
-
|
|
187
|
+
catch (error) {
|
|
188
|
+
if (hasTransaction && trx) {
|
|
189
|
+
trx.rollback();
|
|
190
|
+
}
|
|
191
|
+
this.sendErrorAsResponse(res, error);
|
|
192
|
+
}
|
|
193
|
+
});
|
|
152
194
|
}
|
|
153
195
|
sendErrorAsResponse(res, error) {
|
|
154
196
|
const type = error.type;
|
|
@@ -160,7 +202,7 @@ class RouterBuilder {
|
|
|
160
202
|
});
|
|
161
203
|
break;
|
|
162
204
|
default:
|
|
163
|
-
res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({
|
|
205
|
+
res.status(http_status_codes_1.StatusCodes.INTERNAL_SERVER_ERROR).json({
|
|
164
206
|
error: "An error occurred.",
|
|
165
207
|
});
|
|
166
208
|
break;
|
|
@@ -168,21 +210,10 @@ class RouterBuilder {
|
|
|
168
210
|
}
|
|
169
211
|
getResourcePath(model, relation) {
|
|
170
212
|
// TODO: Fix
|
|
171
|
-
return paramCase(
|
|
213
|
+
return (0, change_case_1.paramCase)(pluralize_1.default.plural(model.name)).toLowerCase();
|
|
172
214
|
// return relation
|
|
173
215
|
// ? relation.resource
|
|
174
216
|
// : paramCase(pluralize.plural(model.name)).toLowerCase();
|
|
175
217
|
}
|
|
176
|
-
getRootPrefix = async () => {
|
|
177
|
-
const config = await IoCService.use("Config");
|
|
178
|
-
let prefix = config?.Application?.prefix || "api";
|
|
179
|
-
if (prefix.substr(0, 1) === "/") {
|
|
180
|
-
prefix = prefix.substr(1);
|
|
181
|
-
}
|
|
182
|
-
if (prefix.substr(prefix.length - 1) === "/") {
|
|
183
|
-
prefix = prefix.substr(0, prefix.length - 1);
|
|
184
|
-
}
|
|
185
|
-
return prefix;
|
|
186
|
-
};
|
|
187
218
|
}
|
|
188
|
-
|
|
219
|
+
exports.default = RouterBuilder;
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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.RouterBuilder = exports.ModelTreeBuilder = void 0;
|
|
7
|
+
const ModelTreeBuilder_1 = __importDefault(require("./ModelTreeBuilder"));
|
|
8
|
+
exports.ModelTreeBuilder = ModelTreeBuilder_1.default;
|
|
9
|
+
const RouterBuilder_1 = __importDefault(require("./RouterBuilder"));
|
|
10
|
+
exports.RouterBuilder = RouterBuilder_1.default;
|
package/build/src/Enums.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TimestampColumns = exports.SortTypes = exports.Relationships = exports.LogLevels = exports.HttpMethods = exports.Extensions = exports.HookFunctionTypes = exports.HandlerTypes = exports.DependencyTypes = exports.ConditionTypes = void 0;
|
|
4
|
+
var ConditionTypes;
|
|
2
5
|
(function (ConditionTypes) {
|
|
3
6
|
ConditionTypes["NotNull"] = "NotNull";
|
|
4
7
|
ConditionTypes["Null"] = "NotNull";
|
|
@@ -14,13 +17,13 @@ export var ConditionTypes;
|
|
|
14
17
|
ConditionTypes["NotIn"] = "NotIn";
|
|
15
18
|
ConditionTypes["Between"] = "Between";
|
|
16
19
|
ConditionTypes["NotBetween"] = "NotBetween";
|
|
17
|
-
})(ConditionTypes || (ConditionTypes = {}));
|
|
18
|
-
|
|
20
|
+
})(ConditionTypes = exports.ConditionTypes || (exports.ConditionTypes = {}));
|
|
21
|
+
var DependencyTypes;
|
|
19
22
|
(function (DependencyTypes) {
|
|
20
23
|
DependencyTypes["BIND"] = "BIND";
|
|
21
24
|
DependencyTypes["SINGLETON"] = "SINGLETON";
|
|
22
|
-
})(DependencyTypes || (DependencyTypes = {}));
|
|
23
|
-
|
|
25
|
+
})(DependencyTypes = exports.DependencyTypes || (exports.DependencyTypes = {}));
|
|
26
|
+
var HandlerTypes;
|
|
24
27
|
(function (HandlerTypes) {
|
|
25
28
|
HandlerTypes["INSERT"] = "store";
|
|
26
29
|
HandlerTypes["PAGINATE"] = "paginate";
|
|
@@ -29,8 +32,8 @@ export var HandlerTypes;
|
|
|
29
32
|
HandlerTypes["DELETE"] = "destroy";
|
|
30
33
|
HandlerTypes["PATCH"] = "patch";
|
|
31
34
|
HandlerTypes["ALL"] = "all";
|
|
32
|
-
})(HandlerTypes || (HandlerTypes = {}));
|
|
33
|
-
|
|
35
|
+
})(HandlerTypes = exports.HandlerTypes || (exports.HandlerTypes = {}));
|
|
36
|
+
var HookFunctionTypes;
|
|
34
37
|
(function (HookFunctionTypes) {
|
|
35
38
|
HookFunctionTypes["onBeforeInsert"] = "onBeforeInsert";
|
|
36
39
|
HookFunctionTypes["onBeforeUpdateQuery"] = "onBeforeUpdateQuery";
|
|
@@ -48,40 +51,40 @@ export var HookFunctionTypes;
|
|
|
48
51
|
HookFunctionTypes["onAfterPaginate"] = "onAfterPaginate";
|
|
49
52
|
HookFunctionTypes["onAfterAll"] = "onAfterAll";
|
|
50
53
|
HookFunctionTypes["onAfterShow"] = "onAfterShow";
|
|
51
|
-
})(HookFunctionTypes || (HookFunctionTypes = {}));
|
|
52
|
-
|
|
54
|
+
})(HookFunctionTypes = exports.HookFunctionTypes || (exports.HookFunctionTypes = {}));
|
|
55
|
+
var Extensions;
|
|
53
56
|
(function (Extensions) {
|
|
54
57
|
Extensions["Hooks"] = "Hooks";
|
|
55
58
|
Extensions["Events"] = "Events";
|
|
56
|
-
})(Extensions || (Extensions = {}));
|
|
57
|
-
|
|
59
|
+
})(Extensions = exports.Extensions || (exports.Extensions = {}));
|
|
60
|
+
var HttpMethods;
|
|
58
61
|
(function (HttpMethods) {
|
|
59
62
|
HttpMethods["POST"] = "POST";
|
|
60
63
|
HttpMethods["PUT"] = "PUT";
|
|
61
64
|
HttpMethods["PATCH"] = "PATCH";
|
|
62
65
|
HttpMethods["GET"] = "GET";
|
|
63
66
|
HttpMethods["DELETE"] = "DELETE";
|
|
64
|
-
})(HttpMethods || (HttpMethods = {}));
|
|
65
|
-
|
|
67
|
+
})(HttpMethods = exports.HttpMethods || (exports.HttpMethods = {}));
|
|
68
|
+
var LogLevels;
|
|
66
69
|
(function (LogLevels) {
|
|
67
70
|
LogLevels[LogLevels["NONE"] = 0] = "NONE";
|
|
68
71
|
LogLevels[LogLevels["ERROR"] = 1] = "ERROR";
|
|
69
72
|
LogLevels[LogLevels["WARNING"] = 2] = "WARNING";
|
|
70
73
|
LogLevels[LogLevels["INFO"] = 3] = "INFO";
|
|
71
74
|
LogLevels[LogLevels["ALL"] = 4] = "ALL";
|
|
72
|
-
})(LogLevels || (LogLevels = {}));
|
|
73
|
-
|
|
75
|
+
})(LogLevels = exports.LogLevels || (exports.LogLevels = {}));
|
|
76
|
+
var Relationships;
|
|
74
77
|
(function (Relationships) {
|
|
75
78
|
Relationships["HAS_ONE"] = "HAS_ONE";
|
|
76
79
|
Relationships["HAS_MANY"] = "HAS_MANY";
|
|
77
|
-
})(Relationships || (Relationships = {}));
|
|
78
|
-
|
|
80
|
+
})(Relationships = exports.Relationships || (exports.Relationships = {}));
|
|
81
|
+
var SortTypes;
|
|
79
82
|
(function (SortTypes) {
|
|
80
83
|
SortTypes["ASC"] = "ASC";
|
|
81
84
|
SortTypes["DESC"] = "DESC";
|
|
82
|
-
})(SortTypes || (SortTypes = {}));
|
|
83
|
-
|
|
85
|
+
})(SortTypes = exports.SortTypes || (exports.SortTypes = {}));
|
|
86
|
+
var TimestampColumns;
|
|
84
87
|
(function (TimestampColumns) {
|
|
85
88
|
TimestampColumns["CREATED_AT"] = "createdAtColumn";
|
|
86
89
|
TimestampColumns["UPDATED_AT"] = "updatedAtColumn";
|
|
87
|
-
})(TimestampColumns || (TimestampColumns = {}));
|
|
90
|
+
})(TimestampColumns = exports.TimestampColumns || (exports.TimestampColumns = {}));
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const http_status_codes_1 = require("http-status-codes");
|
|
2
4
|
class ApiError extends Error {
|
|
3
|
-
type;
|
|
4
|
-
status;
|
|
5
|
-
message;
|
|
6
5
|
constructor(message) {
|
|
7
6
|
super(message);
|
|
8
7
|
this.type = "ApiError";
|
|
9
|
-
this.status = StatusCodes.BAD_REQUEST;
|
|
8
|
+
this.status = http_status_codes_1.StatusCodes.BAD_REQUEST;
|
|
10
9
|
this.message = message;
|
|
11
10
|
}
|
|
12
11
|
}
|
|
13
|
-
|
|
12
|
+
exports.default = ApiError;
|