axe-api 0.21.0 → 0.30.0-rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/dev-kit/app/Config/Application.d.ts +3 -0
- package/build/dev-kit/app/Config/Application.js +14 -0
- package/build/dev-kit/app/Config/Database.d.ts +3 -0
- package/build/dev-kit/app/Config/Database.js +24 -0
- package/build/dev-kit/app/Events/UserEvent.d.ts +3 -0
- package/build/dev-kit/app/Events/UserEvent.js +16 -0
- package/build/dev-kit/app/Hooks/CustomerHook.d.ts +3 -0
- package/build/dev-kit/app/Hooks/CustomerHook.js +16 -0
- package/build/dev-kit/app/Hooks/EmployeeHook.d.ts +2 -0
- package/build/dev-kit/app/Hooks/EmployeeHook.js +16 -0
- package/build/dev-kit/app/Hooks/UserHook.d.ts +3 -0
- package/build/dev-kit/app/Hooks/UserHook.js +17 -0
- package/build/dev-kit/app/Models/Customer.d.ts +7 -0
- package/build/dev-kit/app/Models/Customer.js +15 -0
- package/build/dev-kit/app/Models/Employee.d.ts +9 -0
- package/build/dev-kit/app/Models/Employee.js +21 -0
- package/build/dev-kit/app/Models/EmployeeAddress.d.ts +8 -0
- package/build/dev-kit/app/Models/EmployeeAddress.js +18 -0
- package/build/dev-kit/app/Models/Post.d.ts +6 -0
- package/build/dev-kit/app/Models/Post.js +14 -0
- package/build/dev-kit/app/Models/User.d.ts +7 -0
- package/build/dev-kit/app/Models/User.js +23 -0
- package/build/dev-kit/app/Serialization/UserSerialization.d.ts +3 -0
- package/build/dev-kit/app/Serialization/UserSerialization.js +6 -0
- package/build/dev-kit/app/config.d.ts +3 -0
- package/build/dev-kit/app/config.js +31 -0
- package/build/dev-kit/app/init.d.ts +4 -0
- package/build/dev-kit/app/init.js +16 -0
- package/build/dev-kit/app/v1/Events/UserEvent.d.ts +3 -0
- package/build/dev-kit/app/v1/Events/UserEvent.js +16 -0
- package/build/dev-kit/app/v1/Hooks/CustomerHook.d.ts +3 -0
- package/build/dev-kit/app/v1/Hooks/CustomerHook.js +16 -0
- package/build/dev-kit/app/v1/Hooks/EmployeeHook.d.ts +2 -0
- package/build/dev-kit/app/v1/Hooks/EmployeeHook.js +16 -0
- package/build/dev-kit/app/v1/Hooks/UserHook.d.ts +3 -0
- package/build/dev-kit/app/v1/Hooks/UserHook.js +17 -0
- package/build/dev-kit/app/v1/Models/Customer.d.ts +7 -0
- package/build/dev-kit/app/v1/Models/Customer.js +15 -0
- package/build/dev-kit/app/v1/Models/Employee.d.ts +9 -0
- package/build/dev-kit/app/v1/Models/Employee.js +21 -0
- package/build/dev-kit/app/v1/Models/EmployeeAddress.d.ts +8 -0
- package/build/dev-kit/app/v1/Models/EmployeeAddress.js +18 -0
- package/build/dev-kit/app/v1/Models/Post.d.ts +6 -0
- package/build/dev-kit/app/v1/Models/Post.js +14 -0
- package/build/dev-kit/app/v1/Models/User.d.ts +7 -0
- package/build/dev-kit/app/v1/Models/User.js +23 -0
- package/build/dev-kit/app/v1/Serialization/PostSerialization.d.ts +3 -0
- package/build/dev-kit/app/v1/Serialization/PostSerialization.js +6 -0
- package/build/dev-kit/app/v1/Serialization/UserSerialization.d.ts +3 -0
- package/build/dev-kit/app/v1/Serialization/UserSerialization.js +5 -0
- package/build/dev-kit/app/v1/config.d.ts +3 -0
- package/build/dev-kit/app/v1/config.js +19 -0
- package/build/dev-kit/app/v1/init.d.ts +4 -0
- package/build/dev-kit/app/v1/init.js +16 -0
- package/build/dev-kit/app/v2/Events/UserEvent.d.ts +3 -0
- package/build/dev-kit/app/v2/Events/UserEvent.js +16 -0
- package/build/dev-kit/app/v2/Hooks/CustomerHook.d.ts +3 -0
- package/build/dev-kit/app/v2/Hooks/CustomerHook.js +16 -0
- package/build/dev-kit/app/v2/Hooks/EmployeeHook.d.ts +2 -0
- package/build/dev-kit/app/v2/Hooks/EmployeeHook.js +16 -0
- package/build/dev-kit/app/v2/Hooks/UserHook.d.ts +3 -0
- package/build/dev-kit/app/v2/Hooks/UserHook.js +17 -0
- package/build/dev-kit/app/v2/Models/Customer.d.ts +10 -0
- package/build/dev-kit/app/v2/Models/Customer.js +20 -0
- package/build/dev-kit/app/v2/Models/Employee.d.ts +9 -0
- package/build/dev-kit/app/v2/Models/Employee.js +21 -0
- package/build/dev-kit/app/v2/Models/EmployeeAddress.d.ts +8 -0
- package/build/dev-kit/app/v2/Models/EmployeeAddress.js +18 -0
- package/build/dev-kit/app/v2/Models/Post.d.ts +6 -0
- package/build/dev-kit/app/v2/Models/Post.js +14 -0
- package/build/dev-kit/app/v2/Models/User.d.ts +7 -0
- package/build/dev-kit/app/v2/Models/User.js +23 -0
- package/build/dev-kit/app/v2/Serialization/UserSerialization.d.ts +3 -0
- package/build/dev-kit/app/v2/Serialization/UserSerialization.js +5 -0
- package/build/dev-kit/app/v2/config.d.ts +3 -0
- package/build/dev-kit/app/v2/config.js +9 -0
- package/build/dev-kit/app/v2/init.d.ts +4 -0
- package/build/dev-kit/app/v2/init.js +16 -0
- package/build/dev-kit/app/v3/config.d.ts +3 -0
- package/build/dev-kit/app/v3/config.js +9 -0
- package/build/dev-kit/config.d.ts +3 -0
- package/build/dev-kit/config.js +31 -0
- package/build/dev-kit.d.ts +1 -0
- package/build/dev-kit.js +16 -0
- package/build/package.json +67 -0
- package/build/src/Builders/ModelTreeBuilder.d.ts +3 -0
- package/build/src/Builders/ModelTreeBuilder.js +21 -17
- package/build/src/Builders/RouterBuilder.d.ts +3 -0
- package/build/src/Builders/RouterBuilder.js +31 -26
- package/build/src/Enums.d.ts +13 -0
- package/build/src/Enums.js +15 -1
- package/build/src/Exceptions/AxeError.d.ts +8 -0
- package/build/src/Exceptions/AxeError.js +11 -0
- package/build/src/Handlers/AllHandler.js +6 -5
- package/build/src/Handlers/DestroyHandler.js +11 -1
- package/build/src/Handlers/DocsHandler.d.ts +3 -0
- package/build/src/Handlers/DocsHandler.js +22 -0
- package/build/src/Handlers/ForceDestroyHandler.d.ts +3 -0
- package/build/src/Handlers/ForceDestroyHandler.js +41 -0
- package/build/src/Handlers/HandlerFactory.d.ts +1 -1
- package/build/src/Handlers/HandlerFactory.js +4 -1
- package/build/src/Handlers/Helpers.d.ts +5 -3
- package/build/src/Handlers/Helpers.js +24 -14
- package/build/src/Handlers/PaginateHandler.js +6 -5
- package/build/src/Handlers/PatchHandler.js +4 -2
- package/build/src/Handlers/RoutesHandler.d.ts +3 -0
- package/build/src/Handlers/RoutesHandler.js +16 -0
- package/build/src/Handlers/ShowHandler.js +6 -5
- package/build/src/Handlers/StoreHandler.js +2 -2
- package/build/src/Handlers/UpdateHandler.js +4 -2
- package/build/src/Helpers.d.ts +4 -0
- package/build/src/Helpers.js +78 -0
- package/build/src/Interfaces.d.ts +36 -11
- package/build/src/Middlewares/acceptLanguageMiddleware.js +3 -5
- package/build/src/Model.d.ts +1 -1
- package/build/src/Model.js +3 -4
- package/build/src/Resolvers/FolderResolver.js +1 -0
- package/build/src/Resolvers/GeneralHookResolver.d.ts +4 -2
- package/build/src/Resolvers/GeneralHookResolver.js +5 -8
- package/build/src/Resolvers/ModelResolver.d.ts +4 -0
- package/build/src/Resolvers/ModelResolver.js +26 -8
- package/build/src/Resolvers/TransactionResolver.d.ts +4 -2
- package/build/src/Resolvers/TransactionResolver.js +5 -4
- package/build/src/Resolvers/VersionConfigResolver.d.ts +7 -0
- package/build/src/Resolvers/VersionConfigResolver.js +58 -0
- package/build/src/Resolvers/VersionResolver.d.ts +7 -0
- package/build/src/Resolvers/VersionResolver.js +65 -0
- package/build/src/Resolvers/index.d.ts +3 -2
- package/build/src/Resolvers/index.js +5 -3
- package/build/src/Server.d.ts +3 -2
- package/build/src/Server.js +73 -46
- package/build/src/Services/APIService.d.ts +16 -0
- package/build/src/Services/APIService.js +79 -0
- package/build/src/Services/DocumentationService.d.ts +3 -1
- package/build/src/Services/DocumentationService.js +6 -0
- package/build/src/Services/LogService.d.ts +4 -1
- package/build/src/Services/LogService.js +6 -0
- package/build/src/Services/ModelService.d.ts +3 -0
- package/build/src/Services/ModelService.js +4 -0
- package/build/src/Services/QueryService.js +3 -0
- package/build/src/Services/SchemaValidatorService.d.ts +3 -0
- package/build/src/Services/SchemaValidatorService.js +15 -8
- package/build/src/Services/index.d.ts +2 -1
- package/build/src/Services/index.js +3 -1
- package/build/src/Types.d.ts +2 -0
- package/build/src/Types.js +2 -0
- package/build/src/constants.d.ts +1 -0
- package/build/src/constants.js +2 -1
- package/package.json +2 -1
- package/readme.md +0 -24
- package/CHANGELOG.md +0 -202
|
@@ -17,13 +17,14 @@ const Enums_1 = require("../Enums");
|
|
|
17
17
|
const ApiError_1 = __importDefault(require("../Exceptions/ApiError"));
|
|
18
18
|
const Services_1 = require("../Services");
|
|
19
19
|
exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
const queryParser = new Services_1.QueryService(model, modelList.get());
|
|
20
|
+
const { version, model, req, res, database, relation, parentModel } = pack;
|
|
21
|
+
const queryParser = new Services_1.QueryService(model, version.modelList.get());
|
|
23
22
|
// We should parse URL query string to use as condition in Lucid query
|
|
24
23
|
const conditions = queryParser.get(req.query);
|
|
25
24
|
// Fetching item
|
|
26
25
|
const query = database.from(model.instance.table);
|
|
26
|
+
// If there is a deletedAtColumn, it means that this table support soft-delete
|
|
27
|
+
(0, Helpers_1.addSoftDeleteQuery)(model, conditions, query);
|
|
27
28
|
// Users should be able to select some fields to show.
|
|
28
29
|
queryParser.applyFields(query, conditions.fields);
|
|
29
30
|
// If there is a relation, we should bind it
|
|
@@ -39,12 +40,12 @@ exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
39
40
|
throw new ApiError_1.default(`The item is not found on ${model.name}.`);
|
|
40
41
|
}
|
|
41
42
|
// We should try to get related data if there is any
|
|
42
|
-
yield (0, Helpers_1.getRelatedData)([item], conditions.with, model, modelList, database, Enums_1.HandlerTypes.ALL, req);
|
|
43
|
+
yield (0, Helpers_1.getRelatedData)(version, [item], conditions.with, model, version.modelList, database, Enums_1.HandlerTypes.ALL, req);
|
|
43
44
|
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onAfterShow, Object.assign(Object.assign({}, pack), { query,
|
|
44
45
|
conditions,
|
|
45
46
|
item }));
|
|
46
47
|
// Serializing the data by the model's serialize method
|
|
47
|
-
item = yield (0, Helpers_1.serializeData)(item, model.
|
|
48
|
+
item = yield (0, Helpers_1.serializeData)(version, item, model.serialize, Enums_1.HandlerTypes.SHOW, req);
|
|
48
49
|
// Filtering hidden fields from the response data.
|
|
49
50
|
(0, Helpers_1.filterHiddenFields)([item], model.instance.hiddens);
|
|
50
51
|
return res.json(item);
|
|
@@ -16,7 +16,7 @@ const validatorjs_1 = __importDefault(require("validatorjs"));
|
|
|
16
16
|
const Helpers_1 = require("./Helpers");
|
|
17
17
|
const Enums_1 = require("../Enums");
|
|
18
18
|
exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
19
|
-
const { model, req, res, database, relation, parentModel } = pack;
|
|
19
|
+
const { version, model, req, res, database, relation, parentModel } = pack;
|
|
20
20
|
const requestMethod = req.method;
|
|
21
21
|
const fillables = model.instance.getFillableFields(requestMethod);
|
|
22
22
|
const formData = (0, Helpers_1.getMergedFormData)(req, fillables);
|
|
@@ -55,7 +55,7 @@ exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
55
55
|
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onAfterInsert, Object.assign(Object.assign({}, pack), { formData,
|
|
56
56
|
item }));
|
|
57
57
|
// Serializing the data by the model's serialize method
|
|
58
|
-
item = yield (0, Helpers_1.serializeData)(item, model.
|
|
58
|
+
item = yield (0, Helpers_1.serializeData)(version, item, model.serialize, Enums_1.HandlerTypes.INSERT, req);
|
|
59
59
|
// Filtering hidden fields from the response data.
|
|
60
60
|
(0, Helpers_1.filterHiddenFields)([item], model.instance.hiddens);
|
|
61
61
|
return res.json(item);
|
|
@@ -17,10 +17,12 @@ const Helpers_1 = require("./Helpers");
|
|
|
17
17
|
const Enums_1 = require("../Enums");
|
|
18
18
|
const ApiError_1 = __importDefault(require("../Exceptions/ApiError"));
|
|
19
19
|
exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
20
|
-
const { model, req, res, database, relation, parentModel } = pack;
|
|
20
|
+
const { version, model, req, res, database, relation, parentModel } = pack;
|
|
21
21
|
const query = database.from(model.instance.table);
|
|
22
22
|
// If there is a relation, we should bind it
|
|
23
23
|
(0, Helpers_1.addForeignKeyQuery)(req, query, relation, parentModel);
|
|
24
|
+
// If there is a deletedAtColumn, it means that this table support soft-delete
|
|
25
|
+
(0, Helpers_1.addSoftDeleteQuery)(model, null, query);
|
|
24
26
|
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onBeforeUpdateQuery, Object.assign(Object.assign({}, pack), { query }));
|
|
25
27
|
let item = yield query
|
|
26
28
|
.where(model.instance.primaryKey, req.params[model.instance.primaryKey])
|
|
@@ -58,7 +60,7 @@ exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
58
60
|
formData,
|
|
59
61
|
query }));
|
|
60
62
|
// Serializing the data by the model's serialize method
|
|
61
|
-
item = yield (0, Helpers_1.serializeData)(item, model.
|
|
63
|
+
item = yield (0, Helpers_1.serializeData)(version, item, model.serialize, Enums_1.HandlerTypes.UPDATE, req);
|
|
62
64
|
// Filtering hidden fields from the response data.
|
|
63
65
|
(0, Helpers_1.filterHiddenFields)([item], model.instance.hiddens);
|
|
64
66
|
return res.json(item);
|
|
@@ -0,0 +1,78 @@
|
|
|
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
|
+
exports.consoleAxeError = exports.getVersionByRequest = void 0;
|
|
16
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
17
|
+
const change_case_1 = require("change-case");
|
|
18
|
+
const Services_1 = require("./Services");
|
|
19
|
+
const getVersionByRequest = (req) => __awaiter(void 0, void 0, void 0, function* () {
|
|
20
|
+
// Application configuration is need for the default setting.
|
|
21
|
+
const api = Services_1.APIService.getInstance();
|
|
22
|
+
const matchedVersion = api.versions.find((version) => {
|
|
23
|
+
const path = `/${api.config.prefix}/${version.name}`;
|
|
24
|
+
return req.path.indexOf(path) === 0;
|
|
25
|
+
});
|
|
26
|
+
if (!matchedVersion) {
|
|
27
|
+
throw new Error(`Version is not matched: ${req.path}`);
|
|
28
|
+
}
|
|
29
|
+
return matchedVersion;
|
|
30
|
+
});
|
|
31
|
+
exports.getVersionByRequest = getVersionByRequest;
|
|
32
|
+
const consoleAxeError = (error) => {
|
|
33
|
+
const putWithSpace = (text, max) => {
|
|
34
|
+
const diff = max - text.length + 3;
|
|
35
|
+
for (let index = 0; index <= diff; index++) {
|
|
36
|
+
text = `${text} `;
|
|
37
|
+
}
|
|
38
|
+
text = ` ${text}`;
|
|
39
|
+
if (text.length > 77) {
|
|
40
|
+
let lines = [];
|
|
41
|
+
text = text.trim();
|
|
42
|
+
for (let step = 0; step < text.length / 70; step++) {
|
|
43
|
+
lines.push(text.substring(0, 70));
|
|
44
|
+
text = text.substring(70);
|
|
45
|
+
}
|
|
46
|
+
lines.push(text);
|
|
47
|
+
lines = lines.map((line) => putWithSpace(line, max));
|
|
48
|
+
return lines.flat();
|
|
49
|
+
}
|
|
50
|
+
return [text];
|
|
51
|
+
};
|
|
52
|
+
const getMaxLength = (code, message) => {
|
|
53
|
+
let maxLength = message.length;
|
|
54
|
+
if (code.length > message.length) {
|
|
55
|
+
maxLength = code.length;
|
|
56
|
+
}
|
|
57
|
+
if (maxLength > 70) {
|
|
58
|
+
maxLength = 70;
|
|
59
|
+
}
|
|
60
|
+
return maxLength;
|
|
61
|
+
};
|
|
62
|
+
const maxLength = getMaxLength(error.code, error.message);
|
|
63
|
+
const messages = [
|
|
64
|
+
"\n",
|
|
65
|
+
...putWithSpace(" ", maxLength),
|
|
66
|
+
...putWithSpace(`[${error.code}]`, maxLength),
|
|
67
|
+
...putWithSpace(" ", maxLength),
|
|
68
|
+
...putWithSpace(error.message, maxLength),
|
|
69
|
+
...putWithSpace(" ", maxLength),
|
|
70
|
+
];
|
|
71
|
+
console.log(chalk_1.default.bgRed.white(messages.join("\n")));
|
|
72
|
+
console.log(chalk_1.default.cyan([
|
|
73
|
+
"\n",
|
|
74
|
+
"You can find more in the documentation;",
|
|
75
|
+
`https://axe-api.com/errors.html#${(0, change_case_1.paramCase)(error.code)}`,
|
|
76
|
+
].join("\n")));
|
|
77
|
+
};
|
|
78
|
+
exports.consoleAxeError = consoleAxeError;
|
|
@@ -3,6 +3,8 @@ import { Express, Request, Response, NextFunction } from "express";
|
|
|
3
3
|
import { Column } from "knex-schema-inspector/lib/types/column";
|
|
4
4
|
import { HandlerTypes, LogLevels, HttpMethods, HookFunctionTypes, Extensions, Relationships, SortTypes, ConditionTypes, DependencyTypes } from "./Enums";
|
|
5
5
|
import Model from "./Model";
|
|
6
|
+
import { SerializationFunction } from "./Types";
|
|
7
|
+
import { ModelListService } from "./Services";
|
|
6
8
|
export interface IColumn extends Column {
|
|
7
9
|
table_name: string;
|
|
8
10
|
}
|
|
@@ -16,15 +18,18 @@ interface IHandlerBasedSerializer {
|
|
|
16
18
|
handler: HandlerTypes[];
|
|
17
19
|
serializer: ((data: any, request: Request) => void)[];
|
|
18
20
|
}
|
|
21
|
+
export interface IVersionConfig {
|
|
22
|
+
transaction: boolean | IHandlerBasedTransactionConfig | IHandlerBasedTransactionConfig[];
|
|
23
|
+
serializers: ((data: any, request: Request) => void)[] | IHandlerBasedSerializer[];
|
|
24
|
+
supportedLanguages: string[];
|
|
25
|
+
defaultLanguage: string;
|
|
26
|
+
}
|
|
19
27
|
export interface IApplicationConfig extends IConfig {
|
|
20
28
|
env: string;
|
|
21
29
|
port: number;
|
|
22
30
|
logLevel: LogLevels;
|
|
23
31
|
prefix: string;
|
|
24
|
-
|
|
25
|
-
serializers: ((data: any, request: Request) => void)[] | IHandlerBasedSerializer[];
|
|
26
|
-
supportedLanguages: string[];
|
|
27
|
-
defaultLanguage: string;
|
|
32
|
+
database: IDatabaseConfig;
|
|
28
33
|
}
|
|
29
34
|
export interface ILanguage {
|
|
30
35
|
title: string;
|
|
@@ -36,13 +41,27 @@ export interface IAcceptedLanguage {
|
|
|
36
41
|
quality: number;
|
|
37
42
|
}
|
|
38
43
|
export declare type IDatabaseConfig = Knex.Config;
|
|
39
|
-
export interface
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
export interface IVersionFolder {
|
|
45
|
+
root: string;
|
|
46
|
+
config: string;
|
|
47
|
+
events: string;
|
|
48
|
+
hooks: string;
|
|
49
|
+
middlewares: string;
|
|
50
|
+
models: string;
|
|
51
|
+
serialization: string;
|
|
52
|
+
}
|
|
53
|
+
export interface IVersion {
|
|
54
|
+
name: string;
|
|
55
|
+
config: IVersionConfig;
|
|
56
|
+
folders: IVersionFolder;
|
|
57
|
+
modelList: ModelListService;
|
|
58
|
+
modelTree: IModelService[];
|
|
59
|
+
}
|
|
60
|
+
export interface IAPI {
|
|
61
|
+
rootFolder: string;
|
|
62
|
+
appFolder: string;
|
|
63
|
+
versions: IVersion[];
|
|
64
|
+
config: IApplicationConfig;
|
|
46
65
|
}
|
|
47
66
|
export interface IGeneralHooks {
|
|
48
67
|
onBeforeInit: (app: Express) => void | null;
|
|
@@ -85,8 +104,10 @@ export interface IModelService {
|
|
|
85
104
|
events: Record<HookFunctionTypes, (params: IHookParameter) => void>;
|
|
86
105
|
isRecursive: boolean;
|
|
87
106
|
children: IModelService[];
|
|
107
|
+
serialize: SerializationFunction | null;
|
|
88
108
|
setColumns(columns: IColumn[]): void;
|
|
89
109
|
setExtensions(type: Extensions, hookFunctionType: HookFunctionTypes, data: (params: IHookParameter) => void): void;
|
|
110
|
+
setSerialization(callback: SerializationFunction): void;
|
|
90
111
|
}
|
|
91
112
|
export interface IRelation {
|
|
92
113
|
type: Relationships;
|
|
@@ -96,6 +117,8 @@ export interface IRelation {
|
|
|
96
117
|
foreignKey: string;
|
|
97
118
|
}
|
|
98
119
|
export interface IRequestPack {
|
|
120
|
+
api: IAPI;
|
|
121
|
+
version: IVersion;
|
|
99
122
|
req: Request;
|
|
100
123
|
res: Response;
|
|
101
124
|
handlerType: HandlerTypes;
|
|
@@ -120,6 +143,7 @@ export interface IRawQuery {
|
|
|
120
143
|
sort: string | null;
|
|
121
144
|
fields: string | null;
|
|
122
145
|
with: string | null;
|
|
146
|
+
trashed: string | null;
|
|
123
147
|
}
|
|
124
148
|
export interface ISortField {
|
|
125
149
|
name: string;
|
|
@@ -138,6 +162,7 @@ export interface IQuery {
|
|
|
138
162
|
sort: ISortField[];
|
|
139
163
|
fields: string[];
|
|
140
164
|
with: IWith[];
|
|
165
|
+
trashed: boolean;
|
|
141
166
|
}
|
|
142
167
|
export interface IWhere {
|
|
143
168
|
prefix: string | null;
|
|
@@ -9,15 +9,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
const Services_1 = require("../Services");
|
|
13
12
|
const Resolvers_1 = require("../Resolvers");
|
|
13
|
+
const Helpers_1 = require("../Helpers");
|
|
14
14
|
exports.default = (req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
|
|
15
15
|
// Application configuration is need for the default setting.
|
|
16
|
-
const
|
|
17
|
-
const application = configs.Application;
|
|
18
|
-
const { supportedLanguages, defaultLanguage } = application;
|
|
16
|
+
const version = yield (0, Helpers_1.getVersionByRequest)(req);
|
|
19
17
|
// Setting the current language by the supported, default and the client prefences
|
|
20
|
-
req.currentLanguage = Resolvers_1.AcceptLanguageResolver.resolve(req.get("accept-language") || "", supportedLanguages || ["en"], defaultLanguage || "en");
|
|
18
|
+
req.currentLanguage = Resolvers_1.AcceptLanguageResolver.resolve(req.get("accept-language") || "", version.config.supportedLanguages || ["en"], version.config.defaultLanguage || "en");
|
|
21
19
|
// Adding the `Content-Language` header to the response object
|
|
22
20
|
res.setHeader("Content-Language", req.currentLanguage.title);
|
|
23
21
|
next();
|
package/build/src/Model.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ declare class Model {
|
|
|
11
11
|
get hiddens(): string[];
|
|
12
12
|
get createdAtColumn(): string | null;
|
|
13
13
|
get updatedAtColumn(): string | null;
|
|
14
|
+
get deletedAtColumn(): string | null;
|
|
14
15
|
get transaction(): boolean | IHandlerBasedTransactionConfig | IHandlerBasedTransactionConfig[] | null;
|
|
15
16
|
get ignore(): boolean;
|
|
16
17
|
getFillableFields(methodType: HttpMethods): string[];
|
|
@@ -19,7 +20,6 @@ declare class Model {
|
|
|
19
20
|
hasMany(relatedModel: string, primaryKey?: string, foreignKey?: string): IRelation;
|
|
20
21
|
hasOne(relatedModel: string, primaryKey?: string, foreignKey?: string): IRelation;
|
|
21
22
|
belongsTo(relatedModel: string, primaryKey: string, foreignKey: string): IRelation;
|
|
22
|
-
serialize(data: any, request: Request): any;
|
|
23
23
|
private hasStringValue;
|
|
24
24
|
}
|
|
25
25
|
export default Model;
|
package/build/src/Model.js
CHANGED
|
@@ -35,6 +35,9 @@ class Model {
|
|
|
35
35
|
get updatedAtColumn() {
|
|
36
36
|
return "updated_at";
|
|
37
37
|
}
|
|
38
|
+
get deletedAtColumn() {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
38
41
|
get transaction() {
|
|
39
42
|
return null;
|
|
40
43
|
}
|
|
@@ -127,10 +130,6 @@ class Model {
|
|
|
127
130
|
belongsTo(relatedModel, primaryKey, foreignKey) {
|
|
128
131
|
return this.hasOne(relatedModel, foreignKey, primaryKey);
|
|
129
132
|
}
|
|
130
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
131
|
-
serialize(data, request) {
|
|
132
|
-
return data;
|
|
133
|
-
}
|
|
134
133
|
hasStringValue() {
|
|
135
134
|
const tester = this.validations;
|
|
136
135
|
let status = false;
|
|
@@ -13,6 +13,7 @@ class FolderResolver {
|
|
|
13
13
|
Hooks: path_1.default.join(appFolder, "app", "Hooks"),
|
|
14
14
|
Middlewares: path_1.default.join(appFolder, "app", "Middlewares"),
|
|
15
15
|
Models: path_1.default.join(appFolder, "app", "Models"),
|
|
16
|
+
Serialization: path_1.default.join(appFolder, "app", "Serialization"),
|
|
16
17
|
};
|
|
17
18
|
}
|
|
18
19
|
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { IGeneralHooks } from "../Interfaces";
|
|
1
|
+
import { IGeneralHooks, IVersion } from "../Interfaces";
|
|
2
2
|
declare class GeneralHookResolver {
|
|
3
|
-
|
|
3
|
+
private version;
|
|
4
|
+
constructor(version: IVersion);
|
|
5
|
+
resolve(): Promise<IGeneralHooks>;
|
|
4
6
|
}
|
|
5
7
|
export default GeneralHookResolver;
|
|
@@ -8,19 +8,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const path_1 = __importDefault(require("path"));
|
|
16
|
-
const Services_1 = require("../Services");
|
|
17
12
|
const _1 = require(".");
|
|
18
13
|
class GeneralHookResolver {
|
|
19
|
-
|
|
14
|
+
constructor(version) {
|
|
15
|
+
this.version = version;
|
|
16
|
+
}
|
|
17
|
+
resolve() {
|
|
20
18
|
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
-
const folders = (yield Services_1.IoCService.use("Folders"));
|
|
22
19
|
const fileResolver = new _1.FileResolver();
|
|
23
|
-
const content = yield fileResolver.resolveContent(
|
|
20
|
+
const content = yield fileResolver.resolveContent(this.version.folders.root);
|
|
24
21
|
if (content && content.init) {
|
|
25
22
|
const { onBeforeInit = null, onAfterInit = null } = content.init;
|
|
26
23
|
return { onBeforeInit, onAfterInit };
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { IVersion } from "../Interfaces";
|
|
1
2
|
declare class ModelResolver {
|
|
3
|
+
private version;
|
|
4
|
+
constructor(version: IVersion);
|
|
2
5
|
resolve(): Promise<void>;
|
|
3
6
|
private setModelRelations;
|
|
4
7
|
private getModelList;
|
|
5
8
|
private setDatabaseColumns;
|
|
6
9
|
private setModelHooks;
|
|
10
|
+
private setModelSerializations;
|
|
7
11
|
private getInstanceMethods;
|
|
8
12
|
}
|
|
9
13
|
export default ModelResolver;
|
|
@@ -16,17 +16,22 @@ const FileResolver_1 = __importDefault(require("./FileResolver"));
|
|
|
16
16
|
const Enums_1 = require("../Enums");
|
|
17
17
|
const Services_1 = require("../Services");
|
|
18
18
|
const constants_1 = require("../constants");
|
|
19
|
+
const AxeError_1 = __importDefault(require("../Exceptions/AxeError"));
|
|
19
20
|
class ModelResolver {
|
|
21
|
+
constructor(version) {
|
|
22
|
+
this.version = version;
|
|
23
|
+
}
|
|
20
24
|
resolve() {
|
|
21
25
|
return __awaiter(this, void 0, void 0, function* () {
|
|
22
|
-
const logger =
|
|
26
|
+
const logger = Services_1.LogService.getInstance();
|
|
23
27
|
const modelList = new Services_1.ModelListService(yield this.getModelList());
|
|
24
28
|
yield this.setModelRelations(modelList);
|
|
25
29
|
yield this.setDatabaseColumns(modelList);
|
|
26
30
|
yield this.setModelHooks(modelList, Enums_1.Extensions.Hooks);
|
|
27
31
|
yield this.setModelHooks(modelList, Enums_1.Extensions.Events);
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
yield this.setModelSerializations(modelList);
|
|
33
|
+
this.version.modelList = modelList;
|
|
34
|
+
logger.info(`[${this.version.name}] All models have been resolved.`);
|
|
30
35
|
});
|
|
31
36
|
}
|
|
32
37
|
setModelRelations(modelList) {
|
|
@@ -48,9 +53,8 @@ class ModelResolver {
|
|
|
48
53
|
getModelList() {
|
|
49
54
|
return __awaiter(this, void 0, void 0, function* () {
|
|
50
55
|
const list = [];
|
|
51
|
-
const folders = (yield Services_1.IoCService.use("Folders"));
|
|
52
56
|
const fileResolver = new FileResolver_1.default();
|
|
53
|
-
const models = yield fileResolver.resolve(folders.
|
|
57
|
+
const models = yield fileResolver.resolve(this.version.folders.models);
|
|
54
58
|
for (const key in models) {
|
|
55
59
|
list.push(new Services_1.ModelService(key, models[key]));
|
|
56
60
|
}
|
|
@@ -72,7 +76,7 @@ class ModelResolver {
|
|
|
72
76
|
for (const model of modelList.get()) {
|
|
73
77
|
const modelColumns = columns.filter((column) => column.table_name === model.instance.table);
|
|
74
78
|
if (modelColumns.length === 0) {
|
|
75
|
-
throw new
|
|
79
|
+
throw new AxeError_1.default(Enums_1.AxeErrorCode.TABLE_DOESNT_HAVE_ANY_COLUMN, `The "${model.instance.table}" table doesn't have any column.`);
|
|
76
80
|
}
|
|
77
81
|
model.setColumns(modelColumns);
|
|
78
82
|
}
|
|
@@ -80,9 +84,10 @@ class ModelResolver {
|
|
|
80
84
|
}
|
|
81
85
|
setModelHooks(modelList, hookType) {
|
|
82
86
|
return __awaiter(this, void 0, void 0, function* () {
|
|
83
|
-
const folders = (yield Services_1.IoCService.use("Folders"));
|
|
84
87
|
const fileResolver = new FileResolver_1.default();
|
|
85
|
-
const folder = hookType === Enums_1.Extensions.Hooks
|
|
88
|
+
const folder = hookType === Enums_1.Extensions.Hooks
|
|
89
|
+
? this.version.folders.hooks
|
|
90
|
+
: this.version.folders.events;
|
|
86
91
|
const hooks = yield fileResolver.resolveContent(folder);
|
|
87
92
|
for (const model of modelList.get()) {
|
|
88
93
|
const hookFileName = `${model.name}${hookType
|
|
@@ -99,6 +104,19 @@ class ModelResolver {
|
|
|
99
104
|
}
|
|
100
105
|
});
|
|
101
106
|
}
|
|
107
|
+
setModelSerializations(modelList) {
|
|
108
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
109
|
+
const fileResolver = new FileResolver_1.default();
|
|
110
|
+
const serializations = yield fileResolver.resolveContent(this.version.folders.serialization);
|
|
111
|
+
for (const model of modelList.get()) {
|
|
112
|
+
const fileName = `${model.name}Serialization`;
|
|
113
|
+
if (serializations[fileName]) {
|
|
114
|
+
const file = serializations[fileName];
|
|
115
|
+
model.setSerialization(file.default);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
102
120
|
getInstanceMethods(obj) {
|
|
103
121
|
const properties = Object.getOwnPropertyNames(obj.instance.constructor.prototype);
|
|
104
122
|
return properties.filter((name) => !constants_1.DEFAULT_METHODS_OF_MODELS.includes(name));
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { IModelService } from "../Interfaces";
|
|
1
|
+
import { IModelService, IVersion } from "../Interfaces";
|
|
2
2
|
import { HandlerTypes } from "../Enums";
|
|
3
3
|
declare class TransactionResolver {
|
|
4
|
-
|
|
4
|
+
private version;
|
|
5
|
+
constructor(version: IVersion);
|
|
6
|
+
resolve(model: IModelService, handlerType: HandlerTypes): Promise<boolean>;
|
|
5
7
|
private static resolveTransactionOption;
|
|
6
8
|
private static getTransactionConfiguration;
|
|
7
9
|
}
|
|
@@ -9,12 +9,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
const Services_1 = require("../Services");
|
|
13
12
|
class TransactionResolver {
|
|
14
|
-
|
|
13
|
+
constructor(version) {
|
|
14
|
+
this.version = version;
|
|
15
|
+
}
|
|
16
|
+
resolve(model, handlerType) {
|
|
15
17
|
return __awaiter(this, void 0, void 0, function* () {
|
|
16
|
-
const
|
|
17
|
-
const global = config.Application.transaction;
|
|
18
|
+
const global = this.version.config.transaction;
|
|
18
19
|
const local = model.instance.transaction;
|
|
19
20
|
let privilegedOption = false;
|
|
20
21
|
if (global) {
|
|
@@ -0,0 +1,58 @@
|
|
|
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
const path_1 = __importDefault(require("path"));
|
|
39
|
+
const fs_1 = __importDefault(require("fs"));
|
|
40
|
+
const AxeError_1 = __importDefault(require("../Exceptions/AxeError"));
|
|
41
|
+
const Enums_1 = require("../Enums");
|
|
42
|
+
class VersionConfigResolver {
|
|
43
|
+
constructor(version) {
|
|
44
|
+
this.version = version;
|
|
45
|
+
}
|
|
46
|
+
resolve() {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
const versionConfigFile = path_1.default.join(this.version.folders.root, "config");
|
|
49
|
+
if (!fs_1.default.existsSync(`${versionConfigFile}.ts`) &&
|
|
50
|
+
!fs_1.default.existsSync(`${versionConfigFile}.js`)) {
|
|
51
|
+
throw new AxeError_1.default(Enums_1.AxeErrorCode.VERSION_CONFIG_NOT_FOUND, `The version file not found: ${versionConfigFile}.ts`);
|
|
52
|
+
}
|
|
53
|
+
const { default: content } = yield Promise.resolve().then(() => __importStar(require(versionConfigFile)));
|
|
54
|
+
this.version.config = content;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.default = VersionConfigResolver;
|
|
@@ -0,0 +1,65 @@
|
|
|
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 promises_1 = require("fs/promises");
|
|
17
|
+
const Services_1 = require("../Services");
|
|
18
|
+
const AxeError_1 = __importDefault(require("../Exceptions/AxeError"));
|
|
19
|
+
const Enums_1 = require("../Enums");
|
|
20
|
+
const RESERVED_VERSION_FOLDERS = [
|
|
21
|
+
"Config",
|
|
22
|
+
"Events",
|
|
23
|
+
"Hooks",
|
|
24
|
+
"Models",
|
|
25
|
+
"Serialization",
|
|
26
|
+
];
|
|
27
|
+
class VersionResolver {
|
|
28
|
+
resolve() {
|
|
29
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
+
const logger = Services_1.LogService.getInstance();
|
|
31
|
+
yield this.getVersions();
|
|
32
|
+
logger.info("All API versions have been resolved.");
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
getVersions() {
|
|
36
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
const api = Services_1.APIService.getInstance();
|
|
38
|
+
const versionFolders = yield this.getDirectories(api.appFolder);
|
|
39
|
+
this.checkReservedKeys(versionFolders);
|
|
40
|
+
versionFolders.forEach((version) => {
|
|
41
|
+
const validation = new validatorjs_1.default({ version }, { version: "required|alpha_num" });
|
|
42
|
+
if (validation.fails()) {
|
|
43
|
+
const { version: versionError } = validation.errors.errors;
|
|
44
|
+
const [message] = versionError;
|
|
45
|
+
throw new AxeError_1.default(Enums_1.AxeErrorCode.UNACCEPTABLE_VERSION_NAME, `${message} ("${version}")`);
|
|
46
|
+
}
|
|
47
|
+
api.addVersion(version);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
getDirectories(source) {
|
|
52
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
return (yield (0, promises_1.readdir)(source, { withFileTypes: true }))
|
|
54
|
+
.filter((dirent) => dirent.isDirectory())
|
|
55
|
+
.map((dirent) => dirent.name);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
checkReservedKeys(names) {
|
|
59
|
+
const reservedName = names.find((name) => RESERVED_VERSION_FOLDERS.includes(name));
|
|
60
|
+
if (reservedName) {
|
|
61
|
+
throw new AxeError_1.default(Enums_1.AxeErrorCode.RESERVED_VERSION_NAME, `You can not use a reserved name in the app directory: ${reservedName}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.default = VersionResolver;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import AcceptLanguageResolver from "./AcceptLanguageResolver";
|
|
2
2
|
import FileResolver from "./FileResolver";
|
|
3
|
-
import FolderResolver from "./FolderResolver";
|
|
4
3
|
import GeneralHookResolver from "./GeneralHookResolver";
|
|
5
4
|
import ModelResolver from "./ModelResolver";
|
|
6
5
|
import TransactionResolver from "./TransactionResolver";
|
|
6
|
+
import VersionConfigResolver from "./VersionConfigResolver";
|
|
7
|
+
import VersionResolver from "./VersionResolver";
|
|
7
8
|
import WithQueryResolver from "./WithQueryResolver";
|
|
8
|
-
export { AcceptLanguageResolver, FileResolver,
|
|
9
|
+
export { AcceptLanguageResolver, FileResolver, GeneralHookResolver, ModelResolver, TransactionResolver, VersionConfigResolver, VersionResolver, WithQueryResolver, };
|