axe-api 0.31.3 → 1.0.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.d.ts +1 -0
- package/build/dev-kit.js +16 -0
- package/build/index.d.ts +2 -2
- package/build/index.js +4 -1
- package/build/src/Builders/RouterBuilder.d.ts +0 -4
- package/build/src/Builders/RouterBuilder.js +13 -107
- package/build/src/Handlers/DocsHTMLHandler.d.ts +3 -2
- package/build/src/Handlers/Helpers.d.ts +7 -7
- package/build/src/Handlers/Helpers.js +2 -1
- package/build/src/Handlers/MetadataHandler.d.ts +3 -2
- package/build/src/Handlers/RequestHandler.d.ts +3 -0
- package/build/src/Handlers/RequestHandler.js +89 -0
- package/build/src/Handlers/RoutesHandler.d.ts +3 -2
- package/build/src/Helpers.d.ts +1 -2
- package/build/src/Helpers.js +3 -15
- package/build/src/Interfaces.d.ts +30 -29
- package/build/src/Model.d.ts +3 -3
- package/build/src/Phases/All/FetchPhase.d.ts +3 -0
- package/build/src/Phases/All/FetchPhase.js +16 -0
- 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 +20 -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 +28 -0
- package/build/src/Phases/ForceDelete/QueryPhase.d.ts +3 -0
- package/build/src/Phases/ForceDelete/QueryPhase.js +20 -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 +19 -0
- package/build/src/Phases/Paginate/PreparePhase.d.ts +3 -0
- package/build/src/Phases/Paginate/PreparePhase.js +30 -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 +23 -0
- package/build/src/Phases/Show/PreparePhase.d.ts +3 -0
- package/build/src/Phases/Show/PreparePhase.js +31 -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/{Middlewares/acceptLanguageMiddleware.js → Phases/Single/GetPhase.js} +15 -10
- 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/Server.d.ts +0 -1
- package/build/src/Server.js +13 -16
- package/build/src/Services/App.d.ts +14 -0
- package/build/src/Services/App.js +37 -0
- package/build/src/Services/AxeRequest.d.ts +24 -0
- package/build/src/Services/AxeRequest.js +59 -0
- package/build/src/Services/AxeResponse.d.ts +17 -0
- package/build/src/Services/AxeResponse.js +38 -0
- package/build/src/Services/LogService.js +4 -5
- package/build/src/Services/ModelService.d.ts +4 -4
- package/build/src/Services/QueryService.d.ts +1 -1
- package/build/src/Services/QueryService.js +14 -19
- package/build/src/Services/URLService.d.ts +29 -0
- package/build/src/Services/URLService.js +116 -0
- package/build/src/Services/index.d.ts +4 -1
- package/build/src/Services/index.js +7 -1
- package/build/src/Types.d.ts +7 -6
- package/build/src/constants.d.ts +10 -2
- package/build/src/constants.js +163 -1
- package/package.json +9 -1
- 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
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { HookFunctionTypes, Extensions } from "../Enums";
|
|
2
2
|
import { IColumn, IModelService, IQueryLimitConfig, IRelation } from "../Interfaces";
|
|
3
3
|
import Model from "./../Model";
|
|
4
|
-
import {
|
|
4
|
+
import { PhaseFunction, SerializationFunction } from "../Types";
|
|
5
5
|
declare class ModelService implements IModelService {
|
|
6
6
|
name: string;
|
|
7
7
|
instance: Model;
|
|
8
8
|
relations: IRelation[];
|
|
9
9
|
columns: IColumn[];
|
|
10
10
|
columnNames: string[];
|
|
11
|
-
hooks: Record<HookFunctionTypes,
|
|
12
|
-
events: Record<HookFunctionTypes,
|
|
11
|
+
hooks: Record<HookFunctionTypes, PhaseFunction>;
|
|
12
|
+
events: Record<HookFunctionTypes, PhaseFunction>;
|
|
13
13
|
children: IModelService[];
|
|
14
14
|
isRecursive: boolean;
|
|
15
15
|
queryLimits: IQueryLimitConfig[];
|
|
16
16
|
serialize: SerializationFunction | null;
|
|
17
17
|
constructor(name: string, instance: Model);
|
|
18
18
|
setColumns(columns: IColumn[]): void;
|
|
19
|
-
setExtensions(type: Extensions, hookFunctionType: HookFunctionTypes, data:
|
|
19
|
+
setExtensions(type: Extensions, hookFunctionType: HookFunctionTypes, data: PhaseFunction): void;
|
|
20
20
|
setQueryLimits(limits: IQueryLimitConfig[]): void;
|
|
21
21
|
setSerialization(callback: SerializationFunction): void;
|
|
22
22
|
private setHooks;
|
|
@@ -12,7 +12,7 @@ declare class QueryService {
|
|
|
12
12
|
applySorting(query: Knex.QueryBuilder, sort: ISortField[]): void;
|
|
13
13
|
applyWheresInsideGroup(sub: Knex.QueryBuilder, ruleSet: NestedWhere | IWhere): void;
|
|
14
14
|
applyWheres(query: Knex.QueryBuilder, ruleSet: NestedWhere): void;
|
|
15
|
-
get(query:
|
|
15
|
+
get(query: URLSearchParams): IQuery;
|
|
16
16
|
private getUsedColumns;
|
|
17
17
|
private applyConditionRule;
|
|
18
18
|
private applyRelatedQueryJoins;
|
|
@@ -164,12 +164,13 @@ class QueryService {
|
|
|
164
164
|
}
|
|
165
165
|
parseSections(sections) {
|
|
166
166
|
var _a, _b, _c, _d;
|
|
167
|
-
|
|
168
|
-
|
|
167
|
+
let q = sections.get("q");
|
|
168
|
+
if (q) {
|
|
169
|
+
const queryContent = q.replace(/%20/g, "").replace(/ /g, "");
|
|
169
170
|
// Users can send an unacceptable query string. We shouldn't allow them to
|
|
170
171
|
// send unacceptable structure because of security reasons.
|
|
171
172
|
try {
|
|
172
|
-
|
|
173
|
+
q = JSON.parse(queryContent);
|
|
173
174
|
}
|
|
174
175
|
catch (err) {
|
|
175
176
|
throw new ApiError_1.default(`Unacceptable query string: ${queryContent}`);
|
|
@@ -177,13 +178,15 @@ class QueryService {
|
|
|
177
178
|
}
|
|
178
179
|
const withQueryResolver = new Resolvers_1.WithQueryResolver(this.model, this.models);
|
|
179
180
|
const query = {
|
|
180
|
-
page: this.parsePage(sections.page),
|
|
181
|
-
per_page: this.parsePerPage(sections.per_page),
|
|
182
|
-
fields: this.parseFields(sections.fields),
|
|
183
|
-
sort: this.parseSortingOptions(sections.sort),
|
|
184
|
-
q: this.parseCondition(
|
|
185
|
-
with: withQueryResolver.resolve(
|
|
186
|
-
trashed:
|
|
181
|
+
page: this.parsePage(sections.get("page")),
|
|
182
|
+
per_page: this.parsePerPage(sections.get("per_page")),
|
|
183
|
+
fields: this.parseFields(sections.get("fields")),
|
|
184
|
+
sort: this.parseSortingOptions(sections.get("sort")),
|
|
185
|
+
q: this.parseCondition(q),
|
|
186
|
+
with: withQueryResolver.resolve(sections.get("with") || ""),
|
|
187
|
+
trashed: sections.get("trashed")
|
|
188
|
+
? (0, Helpers_1.isBoolean)(sections.get("trashed"))
|
|
189
|
+
: false,
|
|
187
190
|
};
|
|
188
191
|
const configPerPage = ((_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.query.defaults) === null || _b === void 0 ? void 0 : _b.perPage) ||
|
|
189
192
|
((_d = (_c = constants_1.DEFAULT_VERSION_CONFIG.query) === null || _c === void 0 ? void 0 : _c.defaults) === null || _d === void 0 ? void 0 : _d.perPage) ||
|
|
@@ -217,7 +220,7 @@ class QueryService {
|
|
|
217
220
|
((_j = constants_1.DEFAULT_VERSION_CONFIG.query.defaults) === null || _j === void 0 ? void 0 : _j.maxPerPage) ||
|
|
218
221
|
100;
|
|
219
222
|
if (isNaN(value) || value < minPerPage || value > maxPerPage) {
|
|
220
|
-
throw new ApiError_1.default(`Unacceptable 'per_page' value! Current value is '${value}'. It should be between ${minPerPage}-${maxPerPage}
|
|
223
|
+
throw new ApiError_1.default(`Unacceptable 'per_page' value! Current value is '${value}'. It should be between ${minPerPage}-${maxPerPage}`, Enums_1.StatusCodes.BAD_REQUEST);
|
|
221
224
|
}
|
|
222
225
|
return value;
|
|
223
226
|
}
|
|
@@ -326,14 +329,6 @@ class QueryService {
|
|
|
326
329
|
this.applySpecialCondition(where, "$between", Enums_1.ConditionTypes.Between);
|
|
327
330
|
this.applySpecialCondition(where, "$notBetween", Enums_1.ConditionTypes.NotBetween);
|
|
328
331
|
}
|
|
329
|
-
if (where.condition === Enums_1.ConditionTypes.In ||
|
|
330
|
-
where.condition === Enums_1.ConditionTypes.NotIn) {
|
|
331
|
-
where.value = where.value.split(",");
|
|
332
|
-
}
|
|
333
|
-
if (where.condition === Enums_1.ConditionTypes.Between ||
|
|
334
|
-
where.condition === Enums_1.ConditionTypes.NotBetween) {
|
|
335
|
-
where.value = where.value.split(":");
|
|
336
|
-
}
|
|
337
332
|
if (where.condition === Enums_1.ConditionTypes.LIKE ||
|
|
338
333
|
where.condition === Enums_1.ConditionTypes["NOT LIKE"]) {
|
|
339
334
|
where.value = where.value.replace(/\*/g, "%");
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { HandlerFunction, PhaseFunction } from "src/Types";
|
|
2
|
+
import { IPhaseDefinition, IRouteData } from "../Interfaces";
|
|
3
|
+
import AxeRequest from "./AxeRequest";
|
|
4
|
+
interface Pair {
|
|
5
|
+
method: string;
|
|
6
|
+
pattern: string;
|
|
7
|
+
data: IRouteData;
|
|
8
|
+
phases: IPhaseDefinition[];
|
|
9
|
+
hasTransaction: boolean;
|
|
10
|
+
params?: any;
|
|
11
|
+
customHandler?: HandlerFunction;
|
|
12
|
+
}
|
|
13
|
+
declare class URLService {
|
|
14
|
+
private static urls;
|
|
15
|
+
static add(method: string, pattern: string, data: IRouteData, middlewares: PhaseFunction[]): Promise<void>;
|
|
16
|
+
static addHandler(method: string, pattern: string, customHandler: HandlerFunction): Promise<void>;
|
|
17
|
+
static match(request: AxeRequest): {
|
|
18
|
+
params: any;
|
|
19
|
+
method: string;
|
|
20
|
+
pattern: string;
|
|
21
|
+
data: IRouteData;
|
|
22
|
+
phases: IPhaseDefinition[];
|
|
23
|
+
hasTransaction: boolean;
|
|
24
|
+
customHandler?: HandlerFunction | undefined;
|
|
25
|
+
} | undefined;
|
|
26
|
+
static getAllURLs(): Pair[];
|
|
27
|
+
private static getDefaultPhases;
|
|
28
|
+
}
|
|
29
|
+
export default URLService;
|
|
@@ -0,0 +1,116 @@
|
|
|
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 constants_1 = require("../constants");
|
|
13
|
+
const Resolvers_1 = require("../Resolvers");
|
|
14
|
+
const Enums_1 = require("../Enums");
|
|
15
|
+
const check = (url, pattern) => {
|
|
16
|
+
// Escape special characters in the pattern and replace parameter placeholders with regular expression groups
|
|
17
|
+
const regexPattern = new RegExp("^" + pattern.replace(/:[a-zA-Z0-9_]+/g, "([a-zA-Z0-9_-]+)") + "$");
|
|
18
|
+
// Test if the URL matches the pattern
|
|
19
|
+
const match = url.match(regexPattern);
|
|
20
|
+
if (match) {
|
|
21
|
+
// Extract parameter values from the URL
|
|
22
|
+
const params = {};
|
|
23
|
+
const paramNames = pattern.match(/:[a-zA-Z0-9_]+/g) || [];
|
|
24
|
+
paramNames.forEach((param, index) => {
|
|
25
|
+
const paramName = param.slice(1); // Remove the leading ":"
|
|
26
|
+
params[paramName] = match[index + 1]; // index + 1 because match[0] is the whole matched string
|
|
27
|
+
});
|
|
28
|
+
return params;
|
|
29
|
+
}
|
|
30
|
+
return null; // URL does not match the pattern
|
|
31
|
+
};
|
|
32
|
+
class URLService {
|
|
33
|
+
static add(method, pattern, data, middlewares) {
|
|
34
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
35
|
+
const phases = this.getDefaultPhases(middlewares);
|
|
36
|
+
if (data.handlerType && data.model) {
|
|
37
|
+
for (const cycle of constants_1.HANDLER_CYLES[data.handlerType]) {
|
|
38
|
+
const item = cycle.get(data.model);
|
|
39
|
+
if (item) {
|
|
40
|
+
phases.push({
|
|
41
|
+
isAsync: cycle.isAsync(),
|
|
42
|
+
callback: item,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
let hasTransaction = false;
|
|
48
|
+
if (data.version && data.model && data.handlerType) {
|
|
49
|
+
hasTransaction = yield new Resolvers_1.TransactionResolver(data.version).resolve(data.model, data.handlerType);
|
|
50
|
+
}
|
|
51
|
+
this.urls.push({
|
|
52
|
+
method,
|
|
53
|
+
pattern,
|
|
54
|
+
data,
|
|
55
|
+
phases,
|
|
56
|
+
hasTransaction,
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
static addHandler(method, pattern, customHandler) {
|
|
61
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
+
const phases = this.getDefaultPhases([]);
|
|
63
|
+
const hasTransaction = false;
|
|
64
|
+
phases.push({
|
|
65
|
+
isAsync: false,
|
|
66
|
+
callback: (pack) => {
|
|
67
|
+
customHandler(pack.req, pack.res);
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
this.urls.push({
|
|
71
|
+
method,
|
|
72
|
+
pattern,
|
|
73
|
+
phases,
|
|
74
|
+
hasTransaction,
|
|
75
|
+
customHandler,
|
|
76
|
+
data: {
|
|
77
|
+
version: {},
|
|
78
|
+
handlerType: Enums_1.HandlerTypes.INSERT,
|
|
79
|
+
model: {},
|
|
80
|
+
parentModel: null,
|
|
81
|
+
relation: null,
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
static match(request) {
|
|
87
|
+
if (!request) {
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
for (const item of URLService.urls) {
|
|
91
|
+
const found = item.method === request.method &&
|
|
92
|
+
check(request.url.pathname, item.pattern);
|
|
93
|
+
if (found) {
|
|
94
|
+
return Object.assign(Object.assign({}, item), { params: found });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
static getAllURLs() {
|
|
99
|
+
return this.urls;
|
|
100
|
+
}
|
|
101
|
+
static getDefaultPhases(middlewares) {
|
|
102
|
+
// Creating the phase array
|
|
103
|
+
const phases = [
|
|
104
|
+
// Internal middlewares
|
|
105
|
+
...middlewares.map((middleware) => {
|
|
106
|
+
return {
|
|
107
|
+
isAsync: true,
|
|
108
|
+
callback: middleware,
|
|
109
|
+
};
|
|
110
|
+
}),
|
|
111
|
+
];
|
|
112
|
+
return phases;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
URLService.urls = [];
|
|
116
|
+
exports.default = URLService;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import APIService from "./APIService";
|
|
2
|
+
import App from "./App";
|
|
2
3
|
import DocumentationService from "./DocumentationService";
|
|
3
4
|
import IoCService from "./IoCService";
|
|
4
5
|
import { allow, deny } from "./LimitService";
|
|
@@ -7,4 +8,6 @@ import ModelListService from "./ModelListService";
|
|
|
7
8
|
import ModelService from "./ModelService";
|
|
8
9
|
import QueryService from "./QueryService";
|
|
9
10
|
import SchemaValidatorService from "./SchemaValidatorService";
|
|
10
|
-
|
|
11
|
+
import AxeRequest from "./AxeRequest";
|
|
12
|
+
import AxeResponse from "./AxeResponse";
|
|
13
|
+
export { App, AxeRequest, AxeResponse, DocumentationService, APIService, IoCService, LogService, ModelListService, ModelService, QueryService, SchemaValidatorService, allow, deny, };
|
|
@@ -3,9 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.deny = exports.allow = exports.SchemaValidatorService = exports.QueryService = exports.ModelService = exports.ModelListService = exports.LogService = exports.IoCService = exports.APIService = exports.DocumentationService = void 0;
|
|
6
|
+
exports.deny = exports.allow = exports.SchemaValidatorService = exports.QueryService = exports.ModelService = exports.ModelListService = exports.LogService = exports.IoCService = exports.APIService = exports.DocumentationService = exports.AxeResponse = exports.AxeRequest = exports.App = void 0;
|
|
7
7
|
const APIService_1 = __importDefault(require("./APIService"));
|
|
8
8
|
exports.APIService = APIService_1.default;
|
|
9
|
+
const App_1 = __importDefault(require("./App"));
|
|
10
|
+
exports.App = App_1.default;
|
|
9
11
|
const DocumentationService_1 = __importDefault(require("./DocumentationService"));
|
|
10
12
|
exports.DocumentationService = DocumentationService_1.default;
|
|
11
13
|
const IoCService_1 = __importDefault(require("./IoCService"));
|
|
@@ -23,3 +25,7 @@ const QueryService_1 = __importDefault(require("./QueryService"));
|
|
|
23
25
|
exports.QueryService = QueryService_1.default;
|
|
24
26
|
const SchemaValidatorService_1 = __importDefault(require("./SchemaValidatorService"));
|
|
25
27
|
exports.SchemaValidatorService = SchemaValidatorService_1.default;
|
|
28
|
+
const AxeRequest_1 = __importDefault(require("./AxeRequest"));
|
|
29
|
+
exports.AxeRequest = AxeRequest_1.default;
|
|
30
|
+
const AxeResponse_1 = __importDefault(require("./AxeResponse"));
|
|
31
|
+
exports.AxeResponse = AxeResponse_1.default;
|
package/build/src/Types.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
export type
|
|
5
|
-
export type MiddlewareFunction = (req: Request, res: Response, next: NextFunction) => void;
|
|
1
|
+
import { IRequestPack } from "./Interfaces";
|
|
2
|
+
import AxeRequest from "./Services/AxeRequest";
|
|
3
|
+
import AxeResponse from "./Services/AxeResponse";
|
|
4
|
+
export type SerializationFunction = (item: any, request: AxeRequest) => any;
|
|
6
5
|
export type ModelValidation = Record<string, string>;
|
|
7
6
|
export type FieldList = string[];
|
|
8
|
-
export type
|
|
7
|
+
export type PhaseFunction = (pack: IRequestPack) => void | Promise<void>;
|
|
8
|
+
export type NextFunction = () => void;
|
|
9
|
+
export type HandlerFunction = (request: AxeRequest, response: AxeResponse) => Promise<void> | void;
|
package/build/src/constants.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { ConditionTypes, HandlerTypes, QueryFeature, Relationships } from "./Enums";
|
|
2
|
-
import { IVersionConfig } from "./Interfaces";
|
|
1
|
+
import { ConditionTypes, HandlerTypes, HttpMethods, QueryFeature, Relationships } from "./Enums";
|
|
2
|
+
import { IModelService, IVersionConfig } from "./Interfaces";
|
|
3
|
+
import { PhaseFunction } from "./Types";
|
|
3
4
|
export declare const LOG_COLORS: {
|
|
4
5
|
fgBlack: string;
|
|
5
6
|
fgRed: string;
|
|
@@ -27,3 +28,10 @@ export declare const API_ROUTE_TEMPLATES: {
|
|
|
27
28
|
export declare const ConditionQueryFeatureMap: Record<ConditionTypes, QueryFeature>;
|
|
28
29
|
export declare const RelationQueryFeatureMap: Record<Relationships, QueryFeature>;
|
|
29
30
|
export declare const DEFAULT_VERSION_CONFIG: IVersionConfig;
|
|
31
|
+
export declare const NUMERIC_PRIMARY_KEY_TYPES: string[];
|
|
32
|
+
export declare const HANDLER_METHOD_MAP: Record<HandlerTypes, HttpMethods>;
|
|
33
|
+
export interface ICycleDefinition {
|
|
34
|
+
get(model: IModelService): PhaseFunction;
|
|
35
|
+
isAsync(): boolean;
|
|
36
|
+
}
|
|
37
|
+
export declare const HANDLER_CYLES: Record<HandlerTypes, ICycleDefinition[]>;
|
package/build/src/constants.js
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DEFAULT_VERSION_CONFIG = exports.RelationQueryFeatureMap = exports.ConditionQueryFeatureMap = exports.API_ROUTE_TEMPLATES = exports.DEFAULT_METHODS_OF_MODELS = exports.DEFAULT_HANDLERS = exports.RESERVED_KEYWORDS = exports.LOG_COLORS = void 0;
|
|
6
|
+
exports.HANDLER_CYLES = exports.HANDLER_METHOD_MAP = exports.NUMERIC_PRIMARY_KEY_TYPES = exports.DEFAULT_VERSION_CONFIG = exports.RelationQueryFeatureMap = exports.ConditionQueryFeatureMap = exports.API_ROUTE_TEMPLATES = exports.DEFAULT_METHODS_OF_MODELS = exports.DEFAULT_HANDLERS = exports.RESERVED_KEYWORDS = exports.LOG_COLORS = void 0;
|
|
4
7
|
const Enums_1 = require("./Enums");
|
|
5
8
|
const LimitService_1 = require("./Services/LimitService");
|
|
9
|
+
const Single_1 = __importDefault(require("./Phases/Single"));
|
|
10
|
+
const List_1 = __importDefault(require("./Phases/List"));
|
|
11
|
+
const Paginate_1 = __importDefault(require("./Phases/Paginate"));
|
|
12
|
+
const All_1 = __importDefault(require("./Phases/All"));
|
|
13
|
+
const Show_1 = __importDefault(require("./Phases/Show"));
|
|
14
|
+
const Store_1 = __importDefault(require("./Phases/Store"));
|
|
15
|
+
const Update_1 = __importDefault(require("./Phases/Update"));
|
|
16
|
+
const Patch_1 = __importDefault(require("./Phases/Patch"));
|
|
17
|
+
const Delete_1 = __importDefault(require("./Phases/Delete"));
|
|
18
|
+
const ForceDelete_1 = __importDefault(require("./Phases/ForceDelete"));
|
|
6
19
|
exports.LOG_COLORS = {
|
|
7
20
|
fgBlack: "\x1b[30m",
|
|
8
21
|
fgRed: "\x1b[31m",
|
|
@@ -115,3 +128,152 @@ exports.DEFAULT_VERSION_CONFIG = {
|
|
|
115
128
|
},
|
|
116
129
|
},
|
|
117
130
|
};
|
|
131
|
+
exports.NUMERIC_PRIMARY_KEY_TYPES = ["integer", "bigint"];
|
|
132
|
+
exports.HANDLER_METHOD_MAP = {
|
|
133
|
+
[Enums_1.HandlerTypes.INSERT]: Enums_1.HttpMethods.POST,
|
|
134
|
+
[Enums_1.HandlerTypes.PAGINATE]: Enums_1.HttpMethods.GET,
|
|
135
|
+
[Enums_1.HandlerTypes.SHOW]: Enums_1.HttpMethods.GET,
|
|
136
|
+
[Enums_1.HandlerTypes.UPDATE]: Enums_1.HttpMethods.PUT,
|
|
137
|
+
[Enums_1.HandlerTypes.DELETE]: Enums_1.HttpMethods.DELETE,
|
|
138
|
+
[Enums_1.HandlerTypes.FORCE_DELETE]: Enums_1.HttpMethods.DELETE,
|
|
139
|
+
[Enums_1.HandlerTypes.PATCH]: Enums_1.HttpMethods.PATCH,
|
|
140
|
+
[Enums_1.HandlerTypes.ALL]: Enums_1.HttpMethods.GET,
|
|
141
|
+
};
|
|
142
|
+
class Phase {
|
|
143
|
+
constructor(callback) {
|
|
144
|
+
this.callback = callback;
|
|
145
|
+
}
|
|
146
|
+
get() {
|
|
147
|
+
return this.callback;
|
|
148
|
+
}
|
|
149
|
+
isAsync() {
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
class Hook {
|
|
154
|
+
constructor(hookFunctionType) {
|
|
155
|
+
this.hookFunctionType = hookFunctionType;
|
|
156
|
+
}
|
|
157
|
+
get(model) {
|
|
158
|
+
return model.hooks[this.hookFunctionType];
|
|
159
|
+
}
|
|
160
|
+
isAsync() {
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
class Event {
|
|
165
|
+
constructor(hookFunctionType) {
|
|
166
|
+
this.hookFunctionType = hookFunctionType;
|
|
167
|
+
}
|
|
168
|
+
get(model) {
|
|
169
|
+
return model.events[this.hookFunctionType];
|
|
170
|
+
}
|
|
171
|
+
isAsync() {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
exports.HANDLER_CYLES = {
|
|
176
|
+
[Enums_1.HandlerTypes.INSERT]: [
|
|
177
|
+
new Phase(Store_1.default.PreparePhase),
|
|
178
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeInsert),
|
|
179
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeInsert),
|
|
180
|
+
new Phase(Store_1.default.ActionPhase),
|
|
181
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterInsert),
|
|
182
|
+
new Event(Enums_1.HookFunctionTypes.onAfterInsert),
|
|
183
|
+
new Phase(Single_1.default.SerializePhase),
|
|
184
|
+
new Phase(Single_1.default.ResultPhase),
|
|
185
|
+
],
|
|
186
|
+
[Enums_1.HandlerTypes.PAGINATE]: [
|
|
187
|
+
new Phase(Paginate_1.default.PreparePhase),
|
|
188
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforePaginate),
|
|
189
|
+
new Event(Enums_1.HookFunctionTypes.onBeforePaginate),
|
|
190
|
+
new Phase(Paginate_1.default.FetchPhase),
|
|
191
|
+
new Phase(List_1.default.RelationalPhase),
|
|
192
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterPaginate),
|
|
193
|
+
new Event(Enums_1.HookFunctionTypes.onAfterPaginate),
|
|
194
|
+
new Phase(List_1.default.SerializePhase),
|
|
195
|
+
new Phase(List_1.default.ResultPhase),
|
|
196
|
+
],
|
|
197
|
+
[Enums_1.HandlerTypes.SHOW]: [
|
|
198
|
+
new Phase(Show_1.default.PreparePhase),
|
|
199
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeShow),
|
|
200
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeShow),
|
|
201
|
+
new Phase(Show_1.default.FetchPhase),
|
|
202
|
+
new Phase(Single_1.default.RelationalPhase),
|
|
203
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterShow),
|
|
204
|
+
new Event(Enums_1.HookFunctionTypes.onAfterShow),
|
|
205
|
+
new Phase(Single_1.default.SerializePhase),
|
|
206
|
+
new Phase(Single_1.default.ResultPhase),
|
|
207
|
+
],
|
|
208
|
+
[Enums_1.HandlerTypes.UPDATE]: [
|
|
209
|
+
new Phase(Single_1.default.PrepareGetPhase),
|
|
210
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeUpdateQuery),
|
|
211
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeUpdateQuery),
|
|
212
|
+
new Phase(Single_1.default.GetPhase),
|
|
213
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterUpdateQuery),
|
|
214
|
+
new Event(Enums_1.HookFunctionTypes.onAfterUpdateQuery),
|
|
215
|
+
new Phase(Update_1.default.PrepareActionPhase),
|
|
216
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeUpdate),
|
|
217
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeUpdate),
|
|
218
|
+
new Phase(Update_1.default.ActionPhase),
|
|
219
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterUpdate),
|
|
220
|
+
new Event(Enums_1.HookFunctionTypes.onAfterUpdate),
|
|
221
|
+
new Phase(Single_1.default.SerializePhase),
|
|
222
|
+
new Phase(Single_1.default.ResultPhase),
|
|
223
|
+
],
|
|
224
|
+
[Enums_1.HandlerTypes.DELETE]: [
|
|
225
|
+
new Phase(Delete_1.default.PreparePhase),
|
|
226
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeDeleteQuery),
|
|
227
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeDeleteQuery),
|
|
228
|
+
new Phase(Delete_1.default.QueryPhase),
|
|
229
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterDeleteQuery),
|
|
230
|
+
new Event(Enums_1.HookFunctionTypes.onAfterDeleteQuery),
|
|
231
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeDelete),
|
|
232
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeDelete),
|
|
233
|
+
new Phase(Delete_1.default.ActionPhase),
|
|
234
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterDelete),
|
|
235
|
+
new Event(Enums_1.HookFunctionTypes.onAfterDelete),
|
|
236
|
+
new Phase(Delete_1.default.ResponsePhase),
|
|
237
|
+
],
|
|
238
|
+
[Enums_1.HandlerTypes.FORCE_DELETE]: [
|
|
239
|
+
new Phase(ForceDelete_1.default.PreparePhase),
|
|
240
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeForceDeleteQuery),
|
|
241
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeForceDeleteQuery),
|
|
242
|
+
new Phase(ForceDelete_1.default.QueryPhase),
|
|
243
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterForceDeleteQuery),
|
|
244
|
+
new Event(Enums_1.HookFunctionTypes.onAfterForceDeleteQuery),
|
|
245
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeForceDelete),
|
|
246
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeForceDelete),
|
|
247
|
+
new Phase(ForceDelete_1.default.ActionPhase),
|
|
248
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterForceDelete),
|
|
249
|
+
new Event(Enums_1.HookFunctionTypes.onAfterForceDelete),
|
|
250
|
+
new Phase(Delete_1.default.ResponsePhase),
|
|
251
|
+
],
|
|
252
|
+
[Enums_1.HandlerTypes.PATCH]: [
|
|
253
|
+
new Phase(Single_1.default.PrepareGetPhase),
|
|
254
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeUpdateQuery),
|
|
255
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeUpdateQuery),
|
|
256
|
+
new Phase(Single_1.default.GetPhase),
|
|
257
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterUpdateQuery),
|
|
258
|
+
new Event(Enums_1.HookFunctionTypes.onAfterUpdateQuery),
|
|
259
|
+
new Phase(Patch_1.default.PrepareActionPhase),
|
|
260
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeUpdate),
|
|
261
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeUpdate),
|
|
262
|
+
new Phase(Update_1.default.ActionPhase),
|
|
263
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterUpdate),
|
|
264
|
+
new Event(Enums_1.HookFunctionTypes.onAfterUpdate),
|
|
265
|
+
new Phase(Single_1.default.SerializePhase),
|
|
266
|
+
new Phase(Single_1.default.ResultPhase),
|
|
267
|
+
],
|
|
268
|
+
[Enums_1.HandlerTypes.ALL]: [
|
|
269
|
+
new Phase(Paginate_1.default.PreparePhase),
|
|
270
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforePaginate),
|
|
271
|
+
new Event(Enums_1.HookFunctionTypes.onBeforePaginate),
|
|
272
|
+
new Phase(All_1.default.FetchPhase),
|
|
273
|
+
new Phase(List_1.default.RelationalPhase),
|
|
274
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterPaginate),
|
|
275
|
+
new Event(Enums_1.HookFunctionTypes.onAfterPaginate),
|
|
276
|
+
new Phase(List_1.default.SerializePhase),
|
|
277
|
+
new Phase(List_1.default.ResultPhase),
|
|
278
|
+
],
|
|
279
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "axe-api",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0-rc1",
|
|
4
4
|
"description": "AXE API is a simple tool which has been created based on Express and Knex.js to create Rest APIs quickly.",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -39,14 +39,19 @@
|
|
|
39
39
|
"lint:watch": "esw --watch --color",
|
|
40
40
|
"prepare:integration": "nodemon --ignore \"./tests/**\" ./scripts/run-integration-test.js",
|
|
41
41
|
"test:postgres": "sh ./scripts/test-postgres.sh",
|
|
42
|
+
"test:cockroach": "sh ./scripts/test-cockroach.sh",
|
|
42
43
|
"test:mysql57": "sh ./scripts/test-mysql57.sh",
|
|
43
44
|
"test:mysql8": "sh ./scripts/test-mysql8.sh",
|
|
45
|
+
"test:mariadb": "sh ./scripts/test-mariadb.sh",
|
|
46
|
+
"test:sqlite": "sh ./scripts/test-sqlite.sh",
|
|
44
47
|
"prettier:check": "prettier --check .",
|
|
45
48
|
"prepare": "husky install"
|
|
46
49
|
},
|
|
47
50
|
"dependencies": {
|
|
51
|
+
"body-parser": "^1.20.2",
|
|
48
52
|
"chalk": "^4.1.2",
|
|
49
53
|
"change-case": "^4.1.2",
|
|
54
|
+
"connect": "^3.7.0",
|
|
50
55
|
"dotenv": "^16.3.1",
|
|
51
56
|
"knex": "^2.4.2",
|
|
52
57
|
"knex-paginate": "^3.1.1",
|
|
@@ -59,6 +64,8 @@
|
|
|
59
64
|
"@babel/preset-env": "^7.20.2",
|
|
60
65
|
"@babel/preset-typescript": "^7.21.0",
|
|
61
66
|
"@types/accept-language-parser": "^1.5.3",
|
|
67
|
+
"@types/aws-lambda": "^8.10.119",
|
|
68
|
+
"@types/cors": "^2.8.13",
|
|
62
69
|
"@types/express": "^4.17.17",
|
|
63
70
|
"@types/multer": "^1.4.7",
|
|
64
71
|
"@types/pluralize": "^0.0.29",
|
|
@@ -66,6 +73,7 @@
|
|
|
66
73
|
"@typescript-eslint/eslint-plugin": "^5.61.0",
|
|
67
74
|
"@typescript-eslint/parser": "^5.61.0",
|
|
68
75
|
"babel-jest": "^29.5.0",
|
|
76
|
+
"cors": "^2.8.5",
|
|
69
77
|
"eslint": "^7.32.0",
|
|
70
78
|
"eslint-config-standard": "^16.0.3",
|
|
71
79
|
"eslint-plugin-import": "^2.27.5",
|
|
@@ -1,45 +0,0 @@
|
|
|
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 Helpers_1 = require("./Helpers");
|
|
13
|
-
const Services_1 = require("../Services");
|
|
14
|
-
const Enums_1 = require("../Enums");
|
|
15
|
-
exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
-
const { version, model, req, res, database, relation, parentModel } = pack;
|
|
17
|
-
const queryParser = new Services_1.QueryService(model, version.modelList.get(), version.config);
|
|
18
|
-
// We should parse URL query string to use as condition in Lucid query
|
|
19
|
-
const conditions = queryParser.get(req.query);
|
|
20
|
-
// Creating a new database query
|
|
21
|
-
const query = database.from(model.instance.table);
|
|
22
|
-
// If there is a deletedAtColumn, it means that this table support soft-delete
|
|
23
|
-
(0, Helpers_1.addSoftDeleteQuery)(model, conditions, query);
|
|
24
|
-
// Users should be able to select some fields to show.
|
|
25
|
-
queryParser.applyFields(query, conditions.fields);
|
|
26
|
-
// Binding parent id if there is.
|
|
27
|
-
(0, Helpers_1.addForeignKeyQuery)(req, query, relation, parentModel);
|
|
28
|
-
// Users should be able to filter records
|
|
29
|
-
queryParser.applyWheres(query, conditions.q);
|
|
30
|
-
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onBeforeAll, Object.assign(Object.assign({}, pack), { conditions,
|
|
31
|
-
query }));
|
|
32
|
-
// User should be able to select sorting fields and types
|
|
33
|
-
queryParser.applySorting(query, conditions.sort);
|
|
34
|
-
let result = yield query;
|
|
35
|
-
// We should try to get related data if there is any
|
|
36
|
-
yield (0, Helpers_1.getRelatedData)(version, result, conditions.with, model, version.modelList, database, Enums_1.HandlerTypes.ALL, req);
|
|
37
|
-
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onAfterAll, Object.assign(Object.assign({}, pack), { result,
|
|
38
|
-
conditions,
|
|
39
|
-
query }));
|
|
40
|
-
// Serializing the data by the model's serialize method
|
|
41
|
-
result = yield (0, Helpers_1.serializeData)(version, result, model.serialize, Enums_1.HandlerTypes.ALL, req);
|
|
42
|
-
// Filtering hidden fields from the response data.
|
|
43
|
-
(0, Helpers_1.filterHiddenFields)(result, model.instance.hiddens);
|
|
44
|
-
return res.json(result);
|
|
45
|
-
});
|
|
@@ -1,51 +0,0 @@
|
|
|
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 Helpers_1 = require("./Helpers");
|
|
16
|
-
const Enums_1 = require("../Enums");
|
|
17
|
-
const ApiError_1 = __importDefault(require("../Exceptions/ApiError"));
|
|
18
|
-
exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
19
|
-
const { model, req, res, database, relation, parentModel } = pack;
|
|
20
|
-
// We should check the parameter type
|
|
21
|
-
const value = req.params[model.instance.primaryKey];
|
|
22
|
-
(0, Helpers_1.checkPrimaryKeyValueType)(model, value);
|
|
23
|
-
// Adding the main query
|
|
24
|
-
const query = database
|
|
25
|
-
.from(model.instance.table)
|
|
26
|
-
.where(model.instance.primaryKey, value);
|
|
27
|
-
// If there is a deletedAtColumn, it means that this table support soft-delete
|
|
28
|
-
(0, Helpers_1.addSoftDeleteQuery)(model, null, query);
|
|
29
|
-
// If there is a relation, we should bind it
|
|
30
|
-
(0, Helpers_1.addForeignKeyQuery)(req, query, relation, parentModel);
|
|
31
|
-
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onBeforeDeleteQuery, Object.assign(Object.assign({}, pack), { query }));
|
|
32
|
-
const item = yield query.first();
|
|
33
|
-
if (!item) {
|
|
34
|
-
throw new ApiError_1.default(`The item is not found on ${model.name}.`, Enums_1.StatusCodes.NOT_FOUND);
|
|
35
|
-
}
|
|
36
|
-
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onAfterDeleteQuery, Object.assign(Object.assign({}, pack), { query,
|
|
37
|
-
item }));
|
|
38
|
-
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onBeforeDelete, Object.assign(Object.assign({}, pack), { query,
|
|
39
|
-
item }));
|
|
40
|
-
// If there is a deletedAtColumn, it means that this table support soft-delete
|
|
41
|
-
if (model.instance.deletedAtColumn) {
|
|
42
|
-
yield query.update({
|
|
43
|
-
[model.instance.deletedAtColumn]: new Date(),
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
yield query.delete();
|
|
48
|
-
}
|
|
49
|
-
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onAfterDelete, Object.assign(Object.assign({}, pack), { item }));
|
|
50
|
-
return res.json();
|
|
51
|
-
});
|