axe-api 0.31.4 → 1.0.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.
- package/build/dev-kit.d.ts +1 -0
- package/build/dev-kit.js +16 -0
- package/build/index.d.ts +3 -2
- package/build/index.js +6 -1
- package/build/src/Builders/ModelTreeBuilder.js +1 -2
- package/build/src/Builders/RouterBuilder.d.ts +1 -5
- package/build/src/Builders/RouterBuilder.js +17 -112
- package/build/src/Enums.d.ts +0 -7
- package/build/src/Enums.js +14 -22
- package/build/src/Handlers/DocsHTMLHandler.d.ts +3 -2
- package/build/src/Handlers/Helpers.d.ts +7 -7
- package/build/src/Handlers/MetadataHandler.d.ts +3 -2
- package/build/src/Handlers/RequestHandler.d.ts +3 -0
- package/build/src/Handlers/RequestHandler.js +99 -0
- package/build/src/Handlers/RoutesHandler.d.ts +3 -2
- package/build/src/Helpers.d.ts +1 -3
- package/build/src/Helpers.js +4 -68
- package/build/src/Interfaces.d.ts +74 -35
- package/build/src/Middlewares/RateLimit/AdaptorFactory.d.ts +6 -0
- package/build/src/Middlewares/RateLimit/AdaptorFactory.js +17 -0
- package/build/src/Middlewares/RateLimit/IAdaptor.d.ts +6 -0
- package/build/src/Middlewares/RateLimit/IAdaptor.js +2 -0
- package/build/src/Middlewares/RateLimit/MemoryAdaptor.d.ts +10 -0
- package/build/src/Middlewares/RateLimit/MemoryAdaptor.js +41 -0
- package/build/src/Middlewares/RateLimit/RedisAdaptor.d.ts +11 -0
- package/build/src/Middlewares/RateLimit/RedisAdaptor.js +35 -0
- package/build/src/Middlewares/RateLimit/index.d.ts +6 -0
- package/build/src/Middlewares/RateLimit/index.js +118 -0
- package/build/src/Model.d.ts +4 -4
- package/build/src/Phases/All/FetchPhase.d.ts +3 -0
- package/build/src/{Middlewares/acceptLanguageMiddleware.js → Phases/All/FetchPhase.js} +4 -10
- package/build/src/Phases/All/PreparePhase.d.ts +3 -0
- package/build/src/Phases/All/PreparePhase.js +30 -0
- package/build/src/Phases/All/index.d.ts +4 -0
- package/build/src/{Middlewares → Phases/All}/index.js +4 -3
- package/build/src/Phases/Delete/ActionPhase.d.ts +3 -0
- package/build/src/Phases/Delete/ActionPhase.js +24 -0
- package/build/src/Phases/Delete/PreparePhase.d.ts +3 -0
- package/build/src/Phases/Delete/PreparePhase.js +25 -0
- package/build/src/Phases/Delete/QueryPhase.d.ts +3 -0
- package/build/src/Phases/Delete/QueryPhase.js +22 -0
- package/build/src/Phases/Delete/ResponsePhase.d.ts +3 -0
- package/build/src/Phases/Delete/ResponsePhase.js +14 -0
- package/build/src/Phases/Delete/index.d.ts +7 -0
- package/build/src/Phases/Delete/index.js +15 -0
- package/build/src/Phases/ForceDelete/ActionPhase.d.ts +3 -0
- package/build/src/Phases/ForceDelete/ActionPhase.js +16 -0
- package/build/src/Phases/ForceDelete/PreparePhase.d.ts +3 -0
- package/build/src/Phases/ForceDelete/PreparePhase.js +30 -0
- package/build/src/Phases/ForceDelete/QueryPhase.d.ts +3 -0
- package/build/src/Phases/ForceDelete/QueryPhase.js +22 -0
- package/build/src/Phases/ForceDelete/index.d.ts +6 -0
- package/build/src/Phases/ForceDelete/index.js +13 -0
- package/build/src/Phases/List/RelationalPhase.d.ts +3 -0
- package/build/src/Phases/List/RelationalPhase.js +17 -0
- package/build/src/Phases/List/ResultPhase.d.ts +3 -0
- package/build/src/Phases/List/ResultPhase.js +14 -0
- package/build/src/Phases/List/SerializePhase.d.ts +3 -0
- package/build/src/Phases/List/SerializePhase.js +19 -0
- package/build/src/Phases/List/index.d.ts +6 -0
- package/build/src/Phases/List/index.js +13 -0
- package/build/src/Phases/Paginate/FetchPhase.d.ts +3 -0
- package/build/src/Phases/Paginate/FetchPhase.js +30 -0
- package/build/src/Phases/Paginate/PreparePhase.d.ts +3 -0
- package/build/src/Phases/Paginate/PreparePhase.js +22 -0
- package/build/src/Phases/Paginate/index.d.ts +5 -0
- package/build/src/Phases/Paginate/index.js +11 -0
- package/build/src/Phases/Patch/PrepareActionPhase.d.ts +3 -0
- package/build/src/Phases/Patch/PrepareActionPhase.js +37 -0
- package/build/src/Phases/Patch/index.d.ts +4 -0
- package/build/src/Phases/Patch/index.js +9 -0
- package/build/src/Phases/Show/FetchPhase.d.ts +3 -0
- package/build/src/Phases/Show/FetchPhase.js +35 -0
- package/build/src/Phases/Show/PreparePhase.d.ts +3 -0
- package/build/src/Phases/Show/PreparePhase.js +22 -0
- package/build/src/Phases/Show/index.d.ts +5 -0
- package/build/src/Phases/Show/index.js +11 -0
- package/build/src/Phases/Single/GetPhase.d.ts +3 -0
- package/build/src/Phases/Single/GetPhase.js +29 -0
- package/build/src/Phases/Single/PrepareGetPhase.d.ts +3 -0
- package/build/src/Phases/Single/PrepareGetPhase.js +19 -0
- package/build/src/Phases/Single/RelationalPhase.d.ts +3 -0
- package/build/src/Phases/Single/RelationalPhase.js +17 -0
- package/build/src/Phases/Single/ResultPhase.d.ts +3 -0
- package/build/src/Phases/Single/ResultPhase.js +14 -0
- package/build/src/Phases/Single/SerializePhase.d.ts +3 -0
- package/build/src/Phases/Single/SerializePhase.js +18 -0
- package/build/src/Phases/Single/index.d.ts +8 -0
- package/build/src/Phases/Single/index.js +17 -0
- package/build/src/Phases/Store/ActionPhase.d.ts +3 -0
- package/build/src/Phases/Store/ActionPhase.js +29 -0
- package/build/src/Phases/Store/PreparePhase.d.ts +3 -0
- package/build/src/Phases/Store/PreparePhase.js +46 -0
- package/build/src/Phases/Store/index.d.ts +5 -0
- package/build/src/Phases/Store/index.js +11 -0
- package/build/src/Phases/Update/ActionPhase.d.ts +3 -0
- package/build/src/Phases/Update/ActionPhase.js +22 -0
- package/build/src/Phases/Update/PrepareActionPhase.d.ts +3 -0
- package/build/src/Phases/Update/PrepareActionPhase.js +37 -0
- package/build/src/Phases/Update/index.d.ts +5 -0
- package/build/src/Phases/Update/index.js +11 -0
- package/build/src/Resolvers/ModelResolver.js +9 -4
- package/build/src/Resolvers/VersionConfigResolver.js +6 -1
- package/build/src/Resolvers/VersionResolver.js +1 -2
- package/build/src/Server.d.ts +0 -1
- package/build/src/Server.js +29 -24
- package/build/src/Services/APIService.d.ts +3 -3
- package/build/src/Services/APIService.js +3 -8
- package/build/src/Services/App.d.ts +14 -0
- package/build/src/Services/App.js +80 -0
- package/build/src/Services/AxeRequest.d.ts +26 -0
- package/build/src/Services/AxeRequest.js +85 -0
- package/build/src/Services/AxeResponse.d.ts +18 -0
- package/build/src/Services/AxeResponse.js +41 -0
- package/build/src/Services/ConverterService.d.ts +9 -0
- package/build/src/Services/ConverterService.js +49 -0
- package/build/src/Services/LogService.d.ts +8 -12
- package/build/src/Services/LogService.js +16 -34
- package/build/src/Services/ModelService.d.ts +4 -4
- package/build/src/Services/QueryService.d.ts +4 -4
- package/build/src/Services/QueryService.js +14 -11
- package/build/src/Services/SchemaValidatorService.js +1 -2
- package/build/src/Services/URLService.d.ts +29 -0
- package/build/src/Services/URLService.js +144 -0
- package/build/src/Services/index.d.ts +4 -1
- package/build/src/Services/index.js +7 -1
- package/build/src/Types.d.ts +18 -6
- package/build/src/constants.d.ts +12 -14
- package/build/src/constants.js +200 -13
- package/package.json +29 -20
- package/build/src/Handlers/AllHandler.d.ts +0 -3
- package/build/src/Handlers/AllHandler.js +0 -45
- package/build/src/Handlers/DestroyHandler.d.ts +0 -3
- package/build/src/Handlers/DestroyHandler.js +0 -51
- package/build/src/Handlers/ForceDestroyHandler.d.ts +0 -3
- package/build/src/Handlers/ForceDestroyHandler.js +0 -45
- package/build/src/Handlers/HandlerFactory.d.ts +0 -6
- package/build/src/Handlers/HandlerFactory.js +0 -39
- package/build/src/Handlers/PaginateHandler.d.ts +0 -3
- package/build/src/Handlers/PaginateHandler.js +0 -49
- package/build/src/Handlers/PatchHandler.d.ts +0 -3
- package/build/src/Handlers/PatchHandler.js +0 -69
- package/build/src/Handlers/ShowHandler.d.ts +0 -3
- package/build/src/Handlers/ShowHandler.js +0 -55
- package/build/src/Handlers/StoreHandler.d.ts +0 -3
- package/build/src/Handlers/StoreHandler.js +0 -65
- package/build/src/Handlers/UpdateHandler.d.ts +0 -3
- package/build/src/Handlers/UpdateHandler.js +0 -69
- package/build/src/Middlewares/acceptLanguageMiddleware.d.ts +0 -3
- package/build/src/Middlewares/index.d.ts +0 -2
|
@@ -0,0 +1,17 @@
|
|
|
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 RelationalPhase_1 = __importDefault(require("./RelationalPhase"));
|
|
7
|
+
const ResultPhase_1 = __importDefault(require("./ResultPhase"));
|
|
8
|
+
const SerializePhase_1 = __importDefault(require("./SerializePhase"));
|
|
9
|
+
const PrepareGetPhase_1 = __importDefault(require("./PrepareGetPhase"));
|
|
10
|
+
const GetPhase_1 = __importDefault(require("./GetPhase"));
|
|
11
|
+
exports.default = {
|
|
12
|
+
RelationalPhase: RelationalPhase_1.default,
|
|
13
|
+
ResultPhase: ResultPhase_1.default,
|
|
14
|
+
SerializePhase: SerializePhase_1.default,
|
|
15
|
+
PrepareGetPhase: PrepareGetPhase_1.default,
|
|
16
|
+
GetPhase: GetPhase_1.default,
|
|
17
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () {
|
|
13
|
+
const [returningResult] = yield context
|
|
14
|
+
.database(context.model.instance.table)
|
|
15
|
+
.insert(context.formData)
|
|
16
|
+
.returning(context.model.instance.primaryKey);
|
|
17
|
+
let insertedPrimaryKeyValue = typeof returningResult === "number"
|
|
18
|
+
? returningResult
|
|
19
|
+
: returningResult[context.model.instance.primaryKey];
|
|
20
|
+
// If the user use a special primary key value, we should use that value
|
|
21
|
+
if (insertedPrimaryKeyValue === 0) {
|
|
22
|
+
insertedPrimaryKeyValue =
|
|
23
|
+
context.formData[context.model.instance.primaryKey];
|
|
24
|
+
}
|
|
25
|
+
context.item = yield context
|
|
26
|
+
.database(context.model.instance.table)
|
|
27
|
+
.where(context.model.instance.primaryKey, insertedPrimaryKeyValue)
|
|
28
|
+
.first();
|
|
29
|
+
});
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const validatorjs_1 = __importDefault(require("validatorjs"));
|
|
16
|
+
const Helpers_1 = require("../../Handlers/Helpers");
|
|
17
|
+
const Enums_1 = require("../../Enums");
|
|
18
|
+
exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () {
|
|
19
|
+
const requestMethod = context.req
|
|
20
|
+
.method;
|
|
21
|
+
const fillables = context.model.instance.getFillableFields(requestMethod);
|
|
22
|
+
context.formData = (0, Helpers_1.getMergedFormData)(context.req, fillables);
|
|
23
|
+
const validationRules = context.model.instance.getValidationRules(requestMethod);
|
|
24
|
+
if (validationRules) {
|
|
25
|
+
// The validation language should be set
|
|
26
|
+
validatorjs_1.default.useLang(context.req.currentLanguage.language);
|
|
27
|
+
// Validate the data
|
|
28
|
+
const validation = new validatorjs_1.default(context.formData, validationRules);
|
|
29
|
+
if (validation.fails()) {
|
|
30
|
+
context.res.status(400).json(validation.errors);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (context.relation && context.parentModel) {
|
|
35
|
+
const parentColumn = (0, Helpers_1.getParentColumn)(context.relation);
|
|
36
|
+
if (parentColumn) {
|
|
37
|
+
context.formData[context.relation.foreignKey] =
|
|
38
|
+
context.params[parentColumn];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// We should bind the timestamp values
|
|
42
|
+
(0, Helpers_1.bindTimestampValues)(context.formData, context.model, [
|
|
43
|
+
Enums_1.TimestampColumns.CREATED_AT,
|
|
44
|
+
Enums_1.TimestampColumns.UPDATED_AT,
|
|
45
|
+
]);
|
|
46
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
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 PreparePhase_1 = __importDefault(require("./PreparePhase"));
|
|
7
|
+
const ActionPhase_1 = __importDefault(require("./ActionPhase"));
|
|
8
|
+
exports.default = {
|
|
9
|
+
PreparePhase: PreparePhase_1.default,
|
|
10
|
+
ActionPhase: ActionPhase_1.default,
|
|
11
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () {
|
|
13
|
+
if (context.query) {
|
|
14
|
+
yield context.query
|
|
15
|
+
.where(context.model.instance.primaryKey, context.item[context.model.instance.primaryKey])
|
|
16
|
+
.update(context.formData);
|
|
17
|
+
context.item = yield context
|
|
18
|
+
.database(context.model.instance.table)
|
|
19
|
+
.where(context.model.instance.primaryKey, context.item[context.model.instance.primaryKey])
|
|
20
|
+
.first();
|
|
21
|
+
}
|
|
22
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const validatorjs_1 = __importDefault(require("validatorjs"));
|
|
16
|
+
const Enums_1 = require("../../Enums");
|
|
17
|
+
const Helpers_1 = require("../../Handlers/Helpers");
|
|
18
|
+
exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () {
|
|
19
|
+
const requestMethod = context.req
|
|
20
|
+
.method;
|
|
21
|
+
const fillables = context.model.instance.getFillableFields(requestMethod);
|
|
22
|
+
context.formData = (0, Helpers_1.getMergedFormData)(context.req, fillables);
|
|
23
|
+
const validationRules = context.model.instance.getValidationRules(requestMethod);
|
|
24
|
+
if (validationRules) {
|
|
25
|
+
// The validation language should be set
|
|
26
|
+
validatorjs_1.default.useLang(context.req.currentLanguage.language);
|
|
27
|
+
// Validate the data
|
|
28
|
+
const validation = new validatorjs_1.default(context.formData, validationRules);
|
|
29
|
+
if (validation.fails()) {
|
|
30
|
+
return context.res.status(400).json(validation.errors);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// We should bind the timestamp values
|
|
34
|
+
(0, Helpers_1.bindTimestampValues)(context.formData, context.model, [
|
|
35
|
+
Enums_1.TimestampColumns.UPDATED_AT,
|
|
36
|
+
]);
|
|
37
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
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 ActionPhase_1 = __importDefault(require("./ActionPhase"));
|
|
7
|
+
const PrepareActionPhase_1 = __importDefault(require("./PrepareActionPhase"));
|
|
8
|
+
exports.default = {
|
|
9
|
+
ActionPhase: ActionPhase_1.default,
|
|
10
|
+
PrepareActionPhase: PrepareActionPhase_1.default,
|
|
11
|
+
};
|
|
@@ -26,16 +26,22 @@ class ModelResolver {
|
|
|
26
26
|
}
|
|
27
27
|
resolve() {
|
|
28
28
|
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
-
const logger = Services_1.LogService.getInstance();
|
|
30
29
|
const modelList = new Services_1.ModelListService(yield this.getModelList());
|
|
30
|
+
Services_1.LogService.debug(`[${this.version.name}] Model list has been resolved`);
|
|
31
31
|
yield this.setModelRelations(modelList);
|
|
32
|
+
Services_1.LogService.debug(`[${this.version.name}] Model relations have been resolved`);
|
|
32
33
|
yield this.setDatabaseColumns(modelList);
|
|
34
|
+
Services_1.LogService.debug(`[${this.version.name}] Database columns have been bonded with models`);
|
|
33
35
|
yield this.setModelHooks(modelList, Enums_1.Extensions.Hooks);
|
|
36
|
+
Services_1.LogService.debug(`[${this.version.name}] Model hooks have been loaded`);
|
|
34
37
|
yield this.setModelHooks(modelList, Enums_1.Extensions.Events);
|
|
38
|
+
Services_1.LogService.debug(`[${this.version.name}] Model events have been loaded`);
|
|
35
39
|
yield this.setModelSerializations(modelList);
|
|
40
|
+
Services_1.LogService.debug(`[${this.version.name}] Model serializers have been loaded`);
|
|
36
41
|
yield this.setModelQueryLimits(modelList);
|
|
42
|
+
Services_1.LogService.debug(`[${this.version.name}] Model query limits have been loaded`);
|
|
37
43
|
this.version.modelList = modelList;
|
|
38
|
-
|
|
44
|
+
Services_1.LogService.debug(`[${this.version.name}] All models have been resolved.`);
|
|
39
45
|
});
|
|
40
46
|
}
|
|
41
47
|
setModelRelations(modelList) {
|
|
@@ -88,7 +94,6 @@ class ModelResolver {
|
|
|
88
94
|
}
|
|
89
95
|
setModelHooks(modelList, hookType) {
|
|
90
96
|
return __awaiter(this, void 0, void 0, function* () {
|
|
91
|
-
const logger = Services_1.LogService.getInstance();
|
|
92
97
|
// What kind of hooks that we can have
|
|
93
98
|
const hookList = Object.keys(Enums_1.HookFunctionTypes);
|
|
94
99
|
const fileResolver = new FileResolver_1.default();
|
|
@@ -119,7 +124,7 @@ class ModelResolver {
|
|
|
119
124
|
currentModel.setExtensions(hookType, hookName, hooks[hookName].default);
|
|
120
125
|
}
|
|
121
126
|
else {
|
|
122
|
-
|
|
127
|
+
Services_1.LogService.warn(`Invalid ${hookType} type: "${hookName}" in this folder: "${subfolderPath}"`);
|
|
123
128
|
}
|
|
124
129
|
}
|
|
125
130
|
}
|
|
@@ -39,6 +39,7 @@ const path_1 = __importDefault(require("path"));
|
|
|
39
39
|
const fs_1 = __importDefault(require("fs"));
|
|
40
40
|
const AxeError_1 = __importDefault(require("../Exceptions/AxeError"));
|
|
41
41
|
const Enums_1 = require("../Enums");
|
|
42
|
+
const constants_1 = require("../constants");
|
|
42
43
|
class VersionConfigResolver {
|
|
43
44
|
constructor(version) {
|
|
44
45
|
this.version = version;
|
|
@@ -50,8 +51,12 @@ class VersionConfigResolver {
|
|
|
50
51
|
!fs_1.default.existsSync(`${versionConfigFile}.js`)) {
|
|
51
52
|
throw new AxeError_1.default(Enums_1.AxeErrorCode.VERSION_CONFIG_NOT_FOUND, `The version file not found: ${versionConfigFile}.ts`);
|
|
52
53
|
}
|
|
54
|
+
// Loading the configuration file
|
|
53
55
|
const { default: content } = yield Promise.resolve(`${versionConfigFile}`).then(s => __importStar(require(s)));
|
|
54
|
-
|
|
56
|
+
// Merging the configurations with the default version configurations
|
|
57
|
+
const apiConfiguration = Object.assign(Object.assign({}, constants_1.DEFAULT_VERSION_CONFIG), content);
|
|
58
|
+
// Setting the config values
|
|
59
|
+
this.version.config = apiConfiguration;
|
|
55
60
|
});
|
|
56
61
|
}
|
|
57
62
|
}
|
|
@@ -27,9 +27,8 @@ const RESERVED_VERSION_FOLDERS = [
|
|
|
27
27
|
class VersionResolver {
|
|
28
28
|
resolve() {
|
|
29
29
|
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
-
const logger = Services_1.LogService.getInstance();
|
|
31
30
|
yield this.getVersions();
|
|
32
|
-
|
|
31
|
+
Services_1.LogService.debug("All API versions have been resolved.");
|
|
33
32
|
});
|
|
34
33
|
}
|
|
35
34
|
getVersions() {
|
package/build/src/Server.d.ts
CHANGED
package/build/src/Server.js
CHANGED
|
@@ -38,7 +38,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
38
38
|
const Resolvers_1 = require("./Resolvers");
|
|
39
39
|
const dotenv_1 = __importDefault(require("dotenv"));
|
|
40
40
|
const path_1 = __importDefault(require("path"));
|
|
41
|
-
const express_1 = __importDefault(require("express"));
|
|
42
41
|
const knex_1 = __importDefault(require("knex"));
|
|
43
42
|
const knex_schema_inspector_1 = __importDefault(require("knex-schema-inspector"));
|
|
44
43
|
const knex_paginate_1 = require("knex-paginate");
|
|
@@ -47,21 +46,24 @@ const Services_1 = require("./Services");
|
|
|
47
46
|
const MetadataHandler_1 = __importDefault(require("./Handlers/MetadataHandler"));
|
|
48
47
|
const DocsHTMLHandler_1 = __importDefault(require("./Handlers/DocsHTMLHandler"));
|
|
49
48
|
const RoutesHandler_1 = __importDefault(require("./Handlers/RoutesHandler"));
|
|
50
|
-
const
|
|
49
|
+
const http_1 = __importDefault(require("http"));
|
|
50
|
+
const RequestHandler_1 = __importDefault(require("./Handlers/RequestHandler"));
|
|
51
|
+
const App_1 = __importDefault(require("./Services/App"));
|
|
52
|
+
const constants_1 = require("./constants");
|
|
51
53
|
class Server {
|
|
52
54
|
start(rootFolder) {
|
|
53
55
|
return __awaiter(this, void 0, void 0, function* () {
|
|
54
56
|
dotenv_1.default.config();
|
|
55
57
|
try {
|
|
56
|
-
|
|
58
|
+
Services_1.APIService.setInsance(rootFolder);
|
|
57
59
|
yield this.loadGeneralConfiguration();
|
|
58
|
-
yield this.
|
|
60
|
+
yield this.bindDependencies();
|
|
59
61
|
yield this.analyzeVersions();
|
|
60
62
|
yield this.listen();
|
|
61
63
|
}
|
|
62
64
|
catch (error) {
|
|
63
65
|
if (error.type === "AxeError") {
|
|
64
|
-
|
|
66
|
+
Services_1.LogService.error(error);
|
|
65
67
|
}
|
|
66
68
|
else {
|
|
67
69
|
throw error;
|
|
@@ -69,27 +71,18 @@ class Server {
|
|
|
69
71
|
}
|
|
70
72
|
});
|
|
71
73
|
}
|
|
72
|
-
bindDependencies(
|
|
74
|
+
bindDependencies() {
|
|
73
75
|
return __awaiter(this, void 0, void 0, function* () {
|
|
74
|
-
Services_1.APIService.setInsance(rootFolder);
|
|
75
76
|
const api = Services_1.APIService.getInstance();
|
|
76
77
|
Services_1.IoCService.singleton("SchemaInspector", () => knex_schema_inspector_1.default);
|
|
78
|
+
Services_1.IoCService.singleton("App", () => new App_1.default());
|
|
77
79
|
Services_1.IoCService.singleton("Database", () => __awaiter(this, void 0, void 0, function* () {
|
|
78
80
|
const database = (0, knex_1.default)(api.config.database);
|
|
81
|
+
Services_1.LogService.debug("Created a knex connection instance");
|
|
79
82
|
(0, knex_paginate_1.attachPaginate)();
|
|
83
|
+
Services_1.LogService.debug("Added pagination support to the knex");
|
|
80
84
|
return database;
|
|
81
85
|
}));
|
|
82
|
-
Services_1.IoCService.singleton("App", () => __awaiter(this, void 0, void 0, function* () {
|
|
83
|
-
return (0, express_1.default)();
|
|
84
|
-
}));
|
|
85
|
-
Services_1.LogService.setInstance(api.config.logLevel);
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
loadExpress() {
|
|
89
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
90
|
-
const app = yield Services_1.IoCService.use("App");
|
|
91
|
-
app.use(express_1.default.urlencoded({ extended: true }));
|
|
92
|
-
app.use(express_1.default.json());
|
|
93
86
|
});
|
|
94
87
|
}
|
|
95
88
|
analyzeVersions() {
|
|
@@ -108,24 +101,36 @@ class Server {
|
|
|
108
101
|
loadGeneralConfiguration() {
|
|
109
102
|
return __awaiter(this, void 0, void 0, function* () {
|
|
110
103
|
const api = Services_1.APIService.getInstance();
|
|
104
|
+
// Getting configuration file path
|
|
111
105
|
const generalConfigFile = path_1.default.join(api.appFolder, "config");
|
|
106
|
+
// Loading the configurations
|
|
112
107
|
const { default: content } = yield Promise.resolve(`${generalConfigFile}`).then(s => __importStar(require(s)));
|
|
113
|
-
|
|
108
|
+
// Merge the configuration with the default configurations
|
|
109
|
+
const apiConfiguration = Object.assign(Object.assign({}, constants_1.DEFAULT_APP_CONFIG), content);
|
|
110
|
+
// Setting the configurations
|
|
111
|
+
api.setConfig(apiConfiguration);
|
|
112
|
+
// Setting the logger instance
|
|
113
|
+
Services_1.LogService.setInstance(api.config.pino);
|
|
114
|
+
Services_1.LogService.debug("Configurations are loaded");
|
|
114
115
|
});
|
|
115
116
|
}
|
|
116
117
|
listen() {
|
|
117
118
|
return __awaiter(this, void 0, void 0, function* () {
|
|
118
|
-
const app = yield Services_1.IoCService.
|
|
119
|
-
|
|
119
|
+
const app = yield Services_1.IoCService.useByType("App");
|
|
120
|
+
app.use(RequestHandler_1.default);
|
|
121
|
+
const server = http_1.default.createServer(app.instance);
|
|
120
122
|
const api = Services_1.APIService.getInstance();
|
|
123
|
+
server.on("error", function (e) {
|
|
124
|
+
// Handle your error here
|
|
125
|
+
console.log("GENERAL", e);
|
|
126
|
+
});
|
|
121
127
|
if (api.config.env === "development") {
|
|
122
128
|
app.get("/metadata", MetadataHandler_1.default);
|
|
123
129
|
app.get("/docs", DocsHTMLHandler_1.default);
|
|
124
130
|
app.get("/routes", RoutesHandler_1.default);
|
|
125
131
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
});
|
|
132
|
+
server.listen(api.config.port);
|
|
133
|
+
Services_1.LogService.info(`Axe API listens requests on http://localhost:${api.config.port}`);
|
|
129
134
|
});
|
|
130
135
|
}
|
|
131
136
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AxeConfig, IVersion } from "../Interfaces";
|
|
2
2
|
declare class APIService {
|
|
3
3
|
private folders;
|
|
4
4
|
private static instance;
|
|
@@ -8,8 +8,8 @@ declare class APIService {
|
|
|
8
8
|
get rootFolder(): string;
|
|
9
9
|
get appFolder(): string;
|
|
10
10
|
get versions(): IVersion[];
|
|
11
|
-
get config():
|
|
12
|
-
setConfig(config:
|
|
11
|
+
get config(): AxeConfig;
|
|
12
|
+
setConfig(config: AxeConfig): void;
|
|
13
13
|
addVersion(name: string): void;
|
|
14
14
|
getVersion(name: string): IVersion;
|
|
15
15
|
}
|
|
@@ -4,21 +4,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const path_1 = __importDefault(require("path"));
|
|
7
|
-
const Enums_1 = require("../Enums");
|
|
8
7
|
const ModelListService_1 = __importDefault(require("./ModelListService"));
|
|
8
|
+
const constants_1 = require("../constants");
|
|
9
9
|
class APIService {
|
|
10
10
|
constructor(rootFolder) {
|
|
11
11
|
this.folders = {
|
|
12
12
|
rootFolder: rootFolder,
|
|
13
13
|
appFolder: path_1.default.join(rootFolder, "app"),
|
|
14
14
|
versions: [],
|
|
15
|
-
config:
|
|
16
|
-
env: "production",
|
|
17
|
-
port: 3000,
|
|
18
|
-
logLevel: Enums_1.LogLevels.INFO,
|
|
19
|
-
prefix: "/api",
|
|
20
|
-
database: {},
|
|
21
|
-
},
|
|
15
|
+
config: constants_1.DEFAULT_APP_CONFIG,
|
|
22
16
|
};
|
|
23
17
|
}
|
|
24
18
|
static getInstance() {
|
|
@@ -57,6 +51,7 @@ class APIService {
|
|
|
57
51
|
query: {
|
|
58
52
|
limits: [],
|
|
59
53
|
},
|
|
54
|
+
formidable: {},
|
|
60
55
|
},
|
|
61
56
|
folders: {
|
|
62
57
|
root,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import connect from "connect";
|
|
2
|
+
import { DynamicFunctionType } from "../Types";
|
|
3
|
+
declare class App {
|
|
4
|
+
private connect;
|
|
5
|
+
constructor();
|
|
6
|
+
get instance(): connect.Server;
|
|
7
|
+
use(middleware: connect.NextHandleFunction): void;
|
|
8
|
+
get(url: string, ...args: DynamicFunctionType): void;
|
|
9
|
+
post(url: string, ...args: DynamicFunctionType): void;
|
|
10
|
+
put(url: string, ...args: DynamicFunctionType): void;
|
|
11
|
+
patch(url: string, ...args: DynamicFunctionType): void;
|
|
12
|
+
delete(url: string, ...args: DynamicFunctionType): void;
|
|
13
|
+
}
|
|
14
|
+
export default App;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
const connect_1 = __importDefault(require("connect"));
|
|
30
|
+
const body_parser_1 = __importDefault(require("body-parser"));
|
|
31
|
+
const URLService_1 = __importDefault(require("./URLService"));
|
|
32
|
+
const LogService_1 = __importDefault(require("./LogService"));
|
|
33
|
+
const RateLimit_1 = __importStar(require("../Middlewares/RateLimit"));
|
|
34
|
+
const APIService_1 = __importDefault(require("./APIService"));
|
|
35
|
+
const ConverterService_1 = require("./ConverterService");
|
|
36
|
+
class App {
|
|
37
|
+
constructor() {
|
|
38
|
+
var _a;
|
|
39
|
+
this.connect = (0, connect_1.default)();
|
|
40
|
+
LogService_1.default.debug("Created a new connect() instance");
|
|
41
|
+
this.connect.use(body_parser_1.default.urlencoded({ extended: true }));
|
|
42
|
+
this.connect.use(body_parser_1.default.json());
|
|
43
|
+
LogService_1.default.debug("New middleware: bodyParser()");
|
|
44
|
+
// Activate the Rate Limit middleware
|
|
45
|
+
const api = APIService_1.default.getInstance();
|
|
46
|
+
(0, RateLimit_1.setupRateLimitAdaptors)(api.config);
|
|
47
|
+
if ((_a = api.config.rateLimit) === null || _a === void 0 ? void 0 : _a.enabled) {
|
|
48
|
+
LogService_1.default.debug("New middleware: rateLimit()");
|
|
49
|
+
this.connect.use(RateLimit_1.default);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
get instance() {
|
|
53
|
+
return this.connect;
|
|
54
|
+
}
|
|
55
|
+
use(middleware) {
|
|
56
|
+
this.connect.use(middleware);
|
|
57
|
+
LogService_1.default.debug(`New middleware: ${middleware.name || "anonymous"}()`);
|
|
58
|
+
}
|
|
59
|
+
get(url, ...args) {
|
|
60
|
+
const { handler, middlewares } = (0, ConverterService_1.resolveMiddlewares)(args);
|
|
61
|
+
URLService_1.default.addHandler("GET", url, handler, middlewares);
|
|
62
|
+
}
|
|
63
|
+
post(url, ...args) {
|
|
64
|
+
const { handler, middlewares } = (0, ConverterService_1.resolveMiddlewares)(args);
|
|
65
|
+
URLService_1.default.addHandler("POST", url, handler, middlewares);
|
|
66
|
+
}
|
|
67
|
+
put(url, ...args) {
|
|
68
|
+
const { handler, middlewares } = (0, ConverterService_1.resolveMiddlewares)(args);
|
|
69
|
+
URLService_1.default.addHandler("PUT", url, handler, middlewares);
|
|
70
|
+
}
|
|
71
|
+
patch(url, ...args) {
|
|
72
|
+
const { handler, middlewares } = (0, ConverterService_1.resolveMiddlewares)(args);
|
|
73
|
+
URLService_1.default.addHandler("PATCH", url, handler, middlewares);
|
|
74
|
+
}
|
|
75
|
+
delete(url, ...args) {
|
|
76
|
+
const { handler, middlewares } = (0, ConverterService_1.resolveMiddlewares)(args);
|
|
77
|
+
URLService_1.default.addHandler("DELETE", url, handler, middlewares);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.default = App;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="express" />
|
|
3
|
+
import formidable, { Options as FormOptions } from "formidable";
|
|
4
|
+
import { IncomingMessage } from "http";
|
|
5
|
+
import { ILanguage } from "../Interfaces";
|
|
6
|
+
declare class AxeRequest {
|
|
7
|
+
private request;
|
|
8
|
+
private language;
|
|
9
|
+
private urlObject;
|
|
10
|
+
private privateParams;
|
|
11
|
+
private version;
|
|
12
|
+
constructor(request: IncomingMessage);
|
|
13
|
+
get url(): URL;
|
|
14
|
+
get params(): any;
|
|
15
|
+
set params(value: any);
|
|
16
|
+
get query(): URLSearchParams;
|
|
17
|
+
get path(): string;
|
|
18
|
+
get method(): string;
|
|
19
|
+
get body(): any;
|
|
20
|
+
get currentLanguage(): ILanguage;
|
|
21
|
+
set currentLanguage(language: ILanguage);
|
|
22
|
+
header(key: string): string | string[] | undefined;
|
|
23
|
+
files(options?: FormOptions): Promise<[formidable.Fields, formidable.Files]>;
|
|
24
|
+
get original(): IncomingMessage;
|
|
25
|
+
}
|
|
26
|
+
export default AxeRequest;
|