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
package/build/src/constants.d.ts
CHANGED
|
@@ -1,16 +1,6 @@
|
|
|
1
|
-
import { ConditionTypes, HandlerTypes, QueryFeature, Relationships } from "./Enums";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
fgBlack: string;
|
|
5
|
-
fgRed: string;
|
|
6
|
-
fgGreen: string;
|
|
7
|
-
fgYellow: string;
|
|
8
|
-
fgBlue: string;
|
|
9
|
-
fgMagenta: string;
|
|
10
|
-
fgCyan: string;
|
|
11
|
-
fgWhite: string;
|
|
12
|
-
fgReset: string;
|
|
13
|
-
};
|
|
1
|
+
import { ConditionTypes, HandlerTypes, HttpMethods, QueryFeature, Relationships } from "./Enums";
|
|
2
|
+
import { AxeConfig, AxeVersionConfig, IModelService } from "./Interfaces";
|
|
3
|
+
import { PhaseFunction } from "./Types";
|
|
14
4
|
export declare const RESERVED_KEYWORDS: string[];
|
|
15
5
|
export declare const DEFAULT_HANDLERS: HandlerTypes[];
|
|
16
6
|
export declare const DEFAULT_METHODS_OF_MODELS: string[];
|
|
@@ -26,5 +16,13 @@ export declare const API_ROUTE_TEMPLATES: {
|
|
|
26
16
|
};
|
|
27
17
|
export declare const ConditionQueryFeatureMap: Record<ConditionTypes, QueryFeature>;
|
|
28
18
|
export declare const RelationQueryFeatureMap: Record<Relationships, QueryFeature>;
|
|
29
|
-
export declare const DEFAULT_VERSION_CONFIG: IVersionConfig;
|
|
30
19
|
export declare const NUMERIC_PRIMARY_KEY_TYPES: string[];
|
|
20
|
+
export declare const HANDLER_METHOD_MAP: Record<HandlerTypes, HttpMethods>;
|
|
21
|
+
export interface ICycleDefinition {
|
|
22
|
+
name: string;
|
|
23
|
+
get(model: IModelService): PhaseFunction;
|
|
24
|
+
isAsync(): boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare const HANDLER_CYLES: Record<HandlerTypes, ICycleDefinition[]>;
|
|
27
|
+
export declare const DEFAULT_APP_CONFIG: AxeConfig;
|
|
28
|
+
export declare const DEFAULT_VERSION_CONFIG: AxeVersionConfig;
|
package/build/src/constants.js
CHANGED
|
@@ -1,19 +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.
|
|
6
|
+
exports.DEFAULT_VERSION_CONFIG = exports.DEFAULT_APP_CONFIG = exports.HANDLER_CYLES = exports.HANDLER_METHOD_MAP = exports.NUMERIC_PRIMARY_KEY_TYPES = exports.RelationQueryFeatureMap = exports.ConditionQueryFeatureMap = exports.API_ROUTE_TEMPLATES = exports.DEFAULT_METHODS_OF_MODELS = exports.DEFAULT_HANDLERS = exports.RESERVED_KEYWORDS = void 0;
|
|
4
7
|
const Enums_1 = require("./Enums");
|
|
5
8
|
const LimitService_1 = require("./Services/LimitService");
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
};
|
|
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"));
|
|
17
19
|
exports.RESERVED_KEYWORDS = [
|
|
18
20
|
"force",
|
|
19
21
|
"model",
|
|
@@ -95,6 +97,191 @@ exports.RelationQueryFeatureMap = {
|
|
|
95
97
|
[Enums_1.Relationships.HAS_ONE]: Enums_1.QueryFeature.WithHasOne,
|
|
96
98
|
[Enums_1.Relationships.HAS_MANY]: Enums_1.QueryFeature.WithHasMany,
|
|
97
99
|
};
|
|
100
|
+
exports.NUMERIC_PRIMARY_KEY_TYPES = ["integer", "bigint"];
|
|
101
|
+
exports.HANDLER_METHOD_MAP = {
|
|
102
|
+
[Enums_1.HandlerTypes.INSERT]: Enums_1.HttpMethods.POST,
|
|
103
|
+
[Enums_1.HandlerTypes.PAGINATE]: Enums_1.HttpMethods.GET,
|
|
104
|
+
[Enums_1.HandlerTypes.SHOW]: Enums_1.HttpMethods.GET,
|
|
105
|
+
[Enums_1.HandlerTypes.UPDATE]: Enums_1.HttpMethods.PUT,
|
|
106
|
+
[Enums_1.HandlerTypes.DELETE]: Enums_1.HttpMethods.DELETE,
|
|
107
|
+
[Enums_1.HandlerTypes.FORCE_DELETE]: Enums_1.HttpMethods.DELETE,
|
|
108
|
+
[Enums_1.HandlerTypes.PATCH]: Enums_1.HttpMethods.PATCH,
|
|
109
|
+
[Enums_1.HandlerTypes.ALL]: Enums_1.HttpMethods.GET,
|
|
110
|
+
};
|
|
111
|
+
class Phase {
|
|
112
|
+
constructor(name, callback) {
|
|
113
|
+
this.phaseName = name;
|
|
114
|
+
this.callback = callback;
|
|
115
|
+
}
|
|
116
|
+
get() {
|
|
117
|
+
return this.callback;
|
|
118
|
+
}
|
|
119
|
+
get name() {
|
|
120
|
+
return this.phaseName;
|
|
121
|
+
}
|
|
122
|
+
isAsync() {
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
class Hook {
|
|
127
|
+
constructor(hookFunctionType) {
|
|
128
|
+
this.hookFunctionType = hookFunctionType;
|
|
129
|
+
}
|
|
130
|
+
get(model) {
|
|
131
|
+
return model.hooks[this.hookFunctionType];
|
|
132
|
+
}
|
|
133
|
+
get name() {
|
|
134
|
+
return `hook:${this.hookFunctionType}`;
|
|
135
|
+
}
|
|
136
|
+
isAsync() {
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
class Event {
|
|
141
|
+
constructor(hookFunctionType) {
|
|
142
|
+
this.hookFunctionType = hookFunctionType;
|
|
143
|
+
}
|
|
144
|
+
get(model) {
|
|
145
|
+
return model.events[this.hookFunctionType];
|
|
146
|
+
}
|
|
147
|
+
get name() {
|
|
148
|
+
return `event:${this.hookFunctionType}`;
|
|
149
|
+
}
|
|
150
|
+
isAsync() {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
exports.HANDLER_CYLES = {
|
|
155
|
+
[Enums_1.HandlerTypes.INSERT]: [
|
|
156
|
+
new Phase("insert.prepare", Store_1.default.PreparePhase),
|
|
157
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeInsert),
|
|
158
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeInsert),
|
|
159
|
+
new Phase("insert.action", Store_1.default.ActionPhase),
|
|
160
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterInsert),
|
|
161
|
+
new Event(Enums_1.HookFunctionTypes.onAfterInsert),
|
|
162
|
+
new Phase("insert.serialize", Single_1.default.SerializePhase),
|
|
163
|
+
new Phase("insert.response", Single_1.default.ResultPhase),
|
|
164
|
+
],
|
|
165
|
+
[Enums_1.HandlerTypes.PAGINATE]: [
|
|
166
|
+
new Phase("paginate.prepareQuery", Paginate_1.default.PreparePhase),
|
|
167
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforePaginate),
|
|
168
|
+
new Event(Enums_1.HookFunctionTypes.onBeforePaginate),
|
|
169
|
+
new Phase("paginate.query", Paginate_1.default.FetchPhase),
|
|
170
|
+
new Phase("paginate.relational", List_1.default.RelationalPhase),
|
|
171
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterPaginate),
|
|
172
|
+
new Event(Enums_1.HookFunctionTypes.onAfterPaginate),
|
|
173
|
+
new Phase("paginate.serialize", List_1.default.SerializePhase),
|
|
174
|
+
new Phase("paginate.response", List_1.default.ResultPhase),
|
|
175
|
+
],
|
|
176
|
+
[Enums_1.HandlerTypes.SHOW]: [
|
|
177
|
+
new Phase("show.prepareQuery", Show_1.default.PreparePhase),
|
|
178
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeShow),
|
|
179
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeShow),
|
|
180
|
+
new Phase("show.query", Show_1.default.FetchPhase),
|
|
181
|
+
new Phase("show.relational", Single_1.default.RelationalPhase),
|
|
182
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterShow),
|
|
183
|
+
new Event(Enums_1.HookFunctionTypes.onAfterShow),
|
|
184
|
+
new Phase("show.serialize", Single_1.default.SerializePhase),
|
|
185
|
+
new Phase("show.response", Single_1.default.ResultPhase),
|
|
186
|
+
],
|
|
187
|
+
[Enums_1.HandlerTypes.UPDATE]: [
|
|
188
|
+
new Phase("update.prepareQuery", Single_1.default.PrepareGetPhase),
|
|
189
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeUpdateQuery),
|
|
190
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeUpdateQuery),
|
|
191
|
+
new Phase("update.query", Single_1.default.GetPhase),
|
|
192
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterUpdateQuery),
|
|
193
|
+
new Event(Enums_1.HookFunctionTypes.onAfterUpdateQuery),
|
|
194
|
+
new Phase("update.prepareAction", Update_1.default.PrepareActionPhase),
|
|
195
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeUpdate),
|
|
196
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeUpdate),
|
|
197
|
+
new Phase("update.action", Update_1.default.ActionPhase),
|
|
198
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterUpdate),
|
|
199
|
+
new Event(Enums_1.HookFunctionTypes.onAfterUpdate),
|
|
200
|
+
new Phase("update.serialize", Single_1.default.SerializePhase),
|
|
201
|
+
new Phase("update.response", Single_1.default.ResultPhase),
|
|
202
|
+
],
|
|
203
|
+
[Enums_1.HandlerTypes.DELETE]: [
|
|
204
|
+
new Phase("delete.prepareQuery", Delete_1.default.PreparePhase),
|
|
205
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeDeleteQuery),
|
|
206
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeDeleteQuery),
|
|
207
|
+
new Phase("delete.query", Delete_1.default.QueryPhase),
|
|
208
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterDeleteQuery),
|
|
209
|
+
new Event(Enums_1.HookFunctionTypes.onAfterDeleteQuery),
|
|
210
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeDelete),
|
|
211
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeDelete),
|
|
212
|
+
new Phase("delete.action", Delete_1.default.ActionPhase),
|
|
213
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterDelete),
|
|
214
|
+
new Event(Enums_1.HookFunctionTypes.onAfterDelete),
|
|
215
|
+
new Phase("delete.response", Delete_1.default.ResponsePhase),
|
|
216
|
+
],
|
|
217
|
+
[Enums_1.HandlerTypes.FORCE_DELETE]: [
|
|
218
|
+
new Phase("force-delete.prepareQuery", ForceDelete_1.default.PreparePhase),
|
|
219
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeForceDeleteQuery),
|
|
220
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeForceDeleteQuery),
|
|
221
|
+
new Phase("force-delete.query", ForceDelete_1.default.QueryPhase),
|
|
222
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterForceDeleteQuery),
|
|
223
|
+
new Event(Enums_1.HookFunctionTypes.onAfterForceDeleteQuery),
|
|
224
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeForceDelete),
|
|
225
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeForceDelete),
|
|
226
|
+
new Phase("force-delete.action", ForceDelete_1.default.ActionPhase),
|
|
227
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterForceDelete),
|
|
228
|
+
new Event(Enums_1.HookFunctionTypes.onAfterForceDelete),
|
|
229
|
+
new Phase("force-delete.response", Delete_1.default.ResponsePhase),
|
|
230
|
+
],
|
|
231
|
+
[Enums_1.HandlerTypes.PATCH]: [
|
|
232
|
+
new Phase("patch.prepareQuery", Single_1.default.PrepareGetPhase),
|
|
233
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeUpdateQuery),
|
|
234
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeUpdateQuery),
|
|
235
|
+
new Phase("patch.query", Single_1.default.GetPhase),
|
|
236
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterUpdateQuery),
|
|
237
|
+
new Event(Enums_1.HookFunctionTypes.onAfterUpdateQuery),
|
|
238
|
+
new Phase("patch.prepareAction", Patch_1.default.PrepareActionPhase),
|
|
239
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforeUpdate),
|
|
240
|
+
new Event(Enums_1.HookFunctionTypes.onBeforeUpdate),
|
|
241
|
+
new Phase("patch.action", Update_1.default.ActionPhase),
|
|
242
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterUpdate),
|
|
243
|
+
new Event(Enums_1.HookFunctionTypes.onAfterUpdate),
|
|
244
|
+
new Phase("patch.serialize", Single_1.default.SerializePhase),
|
|
245
|
+
new Phase("patch.response", Single_1.default.ResultPhase),
|
|
246
|
+
],
|
|
247
|
+
[Enums_1.HandlerTypes.ALL]: [
|
|
248
|
+
new Phase("all.prepareQuery", Paginate_1.default.PreparePhase),
|
|
249
|
+
new Hook(Enums_1.HookFunctionTypes.onBeforePaginate),
|
|
250
|
+
new Event(Enums_1.HookFunctionTypes.onBeforePaginate),
|
|
251
|
+
new Phase("all.query", All_1.default.FetchPhase),
|
|
252
|
+
new Phase("all.relational", List_1.default.RelationalPhase),
|
|
253
|
+
new Hook(Enums_1.HookFunctionTypes.onAfterPaginate),
|
|
254
|
+
new Event(Enums_1.HookFunctionTypes.onAfterPaginate),
|
|
255
|
+
new Phase("all.serialize", List_1.default.SerializePhase),
|
|
256
|
+
new Phase("all.response", List_1.default.ResultPhase),
|
|
257
|
+
],
|
|
258
|
+
};
|
|
259
|
+
exports.DEFAULT_APP_CONFIG = {
|
|
260
|
+
prefix: "api",
|
|
261
|
+
env: "production",
|
|
262
|
+
port: 3000,
|
|
263
|
+
pino: {
|
|
264
|
+
level: "error",
|
|
265
|
+
transport: {
|
|
266
|
+
target: "pino-pretty",
|
|
267
|
+
},
|
|
268
|
+
},
|
|
269
|
+
rateLimit: {
|
|
270
|
+
enabled: false,
|
|
271
|
+
adaptor: {
|
|
272
|
+
type: "memory",
|
|
273
|
+
},
|
|
274
|
+
maxRequests: 200,
|
|
275
|
+
windowInSeconds: 5,
|
|
276
|
+
trustProxyIP: false,
|
|
277
|
+
},
|
|
278
|
+
database: {
|
|
279
|
+
client: "sqlite",
|
|
280
|
+
connection: {
|
|
281
|
+
filename: "./axedb.sql",
|
|
282
|
+
},
|
|
283
|
+
},
|
|
284
|
+
};
|
|
98
285
|
exports.DEFAULT_VERSION_CONFIG = {
|
|
99
286
|
transaction: false,
|
|
100
287
|
serializers: [],
|
|
@@ -114,5 +301,5 @@ exports.DEFAULT_VERSION_CONFIG = {
|
|
|
114
301
|
maxPerPage: 100,
|
|
115
302
|
},
|
|
116
303
|
},
|
|
304
|
+
formidable: {},
|
|
117
305
|
};
|
|
118
|
-
exports.NUMERIC_PRIMARY_KEY_TYPES = ["integer", "bigint"];
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "axe-api",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "AXE API is a simple tool
|
|
3
|
+
"version": "1.0.0-rc10",
|
|
4
|
+
"description": "AXE API is a simple tool to create Rest APIs quickly.",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
7
7
|
"files": [
|
|
@@ -48,49 +48,58 @@
|
|
|
48
48
|
"prepare": "husky install"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"
|
|
51
|
+
"body-parser": "^1.20.2",
|
|
52
52
|
"change-case": "^4.1.2",
|
|
53
|
+
"connect": "^3.7.0",
|
|
53
54
|
"dotenv": "^16.3.1",
|
|
54
|
-
"knex": "^2.
|
|
55
|
+
"knex": "^2.5.1",
|
|
55
56
|
"knex-paginate": "^3.1.1",
|
|
56
57
|
"knex-schema-inspector": "^3.0.1",
|
|
58
|
+
"nanoid": "^3.3.6",
|
|
59
|
+
"pino": "^8.15.0",
|
|
60
|
+
"pino-pretty": "^10.2.0",
|
|
57
61
|
"pluralize": "^8.0.0",
|
|
58
62
|
"validatorjs": "^3.22.1"
|
|
59
63
|
},
|
|
60
64
|
"devDependencies": {
|
|
61
|
-
"@babel/core": "^7.
|
|
62
|
-
"@babel/preset-env": "^7.
|
|
63
|
-
"@babel/preset-typescript": "^7.
|
|
65
|
+
"@babel/core": "^7.22.10",
|
|
66
|
+
"@babel/preset-env": "^7.22.10",
|
|
67
|
+
"@babel/preset-typescript": "^7.22.5",
|
|
64
68
|
"@types/accept-language-parser": "^1.5.3",
|
|
65
|
-
"@types/
|
|
69
|
+
"@types/aws-lambda": "^8.10.119",
|
|
70
|
+
"@types/cors": "^2.8.13",
|
|
71
|
+
"@types/formidable": "^3.4.1",
|
|
66
72
|
"@types/multer": "^1.4.7",
|
|
67
|
-
"@types/pluralize": "^0.0.
|
|
73
|
+
"@types/pluralize": "^0.0.30",
|
|
68
74
|
"@types/validatorjs": "^3.15.0",
|
|
69
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
70
|
-
"@typescript-eslint/parser": "^5.
|
|
71
|
-
"babel-jest": "^29.
|
|
75
|
+
"@typescript-eslint/eslint-plugin": "^5.62.0",
|
|
76
|
+
"@typescript-eslint/parser": "^5.62.0",
|
|
77
|
+
"babel-jest": "^29.6.2",
|
|
78
|
+
"cors": "^2.8.5",
|
|
72
79
|
"eslint": "^7.32.0",
|
|
73
80
|
"eslint-config-standard": "^16.0.3",
|
|
74
|
-
"eslint-plugin-import": "^2.
|
|
81
|
+
"eslint-plugin-import": "^2.28.1",
|
|
75
82
|
"eslint-plugin-node": "^11.1.0",
|
|
76
83
|
"eslint-plugin-promise": "^5.1.0",
|
|
77
84
|
"eslint-plugin-unicorn": "^33.0.1",
|
|
78
85
|
"eslint-watch": "^7.0.0",
|
|
79
|
-
"
|
|
80
|
-
"glob": "^9.3.
|
|
86
|
+
"formidable": "^3.5.1",
|
|
87
|
+
"glob": "^9.3.5",
|
|
81
88
|
"husky": "^8.0.3",
|
|
82
|
-
"jest": "^29.
|
|
83
|
-
"lint-staged": "^13.
|
|
89
|
+
"jest": "^29.6.2",
|
|
90
|
+
"lint-staged": "^13.3.0",
|
|
84
91
|
"multer": "^1.4.5-lts.1",
|
|
85
92
|
"mysql": "^2.18.1",
|
|
93
|
+
"node-cache": "^5.1.2",
|
|
86
94
|
"node-color-log": "^10.0.2",
|
|
87
95
|
"nodemon": "^2.0.22",
|
|
88
|
-
"pg": "^8.
|
|
89
|
-
"prettier": "^2.8.
|
|
96
|
+
"pg": "^8.11.3",
|
|
97
|
+
"prettier": "^2.8.8",
|
|
98
|
+
"redis": "^4.6.7",
|
|
90
99
|
"set-value": ">=4.1.0",
|
|
91
100
|
"sqlite3": "^5.1.6",
|
|
92
101
|
"ts-node": "^10.9.1",
|
|
93
|
-
"typescript": "^5.
|
|
102
|
+
"typescript": "^5.1.6"
|
|
94
103
|
},
|
|
95
104
|
"lint-staged": {
|
|
96
105
|
"**/*": "prettier --write --ignore-unknown"
|
|
@@ -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.status(204).json();
|
|
51
|
-
});
|
|
@@ -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
|
-
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
|
-
if (model.instance.deletedAtColumn === null) {
|
|
29
|
-
throw new ApiError_1.default("You can use force delete only soft-delete supported models.", Enums_1.StatusCodes.NOT_FOUND);
|
|
30
|
-
}
|
|
31
|
-
// If there is a relation, we should bind it
|
|
32
|
-
(0, Helpers_1.addForeignKeyQuery)(req, query, relation, parentModel);
|
|
33
|
-
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onBeforeForceDeleteQuery, Object.assign(Object.assign({}, pack), { query }));
|
|
34
|
-
const item = yield query.first();
|
|
35
|
-
if (!item) {
|
|
36
|
-
throw new ApiError_1.default(`The item is not found on ${model.name}.`);
|
|
37
|
-
}
|
|
38
|
-
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onAfterForceDeleteQuery, Object.assign(Object.assign({}, pack), { query,
|
|
39
|
-
item }));
|
|
40
|
-
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onBeforeForceDelete, Object.assign(Object.assign({}, pack), { query,
|
|
41
|
-
item }));
|
|
42
|
-
yield query.delete();
|
|
43
|
-
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onAfterForceDelete, Object.assign(Object.assign({}, pack), { item }));
|
|
44
|
-
return res.status(204).json();
|
|
45
|
-
});
|
|
@@ -1,39 +0,0 @@
|
|
|
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 AllHandler_1 = __importDefault(require("./AllHandler"));
|
|
7
|
-
const DestroyHandler_1 = __importDefault(require("./DestroyHandler"));
|
|
8
|
-
const ForceDestroyHandler_1 = __importDefault(require("./ForceDestroyHandler"));
|
|
9
|
-
const PaginateHandler_1 = __importDefault(require("./PaginateHandler"));
|
|
10
|
-
const PatchHandler_1 = __importDefault(require("./PatchHandler"));
|
|
11
|
-
const UpdateHandler_1 = __importDefault(require("./UpdateHandler"));
|
|
12
|
-
const ShowHandler_1 = __importDefault(require("./ShowHandler"));
|
|
13
|
-
const StoreHandler_1 = __importDefault(require("./StoreHandler"));
|
|
14
|
-
const Enums_1 = require("../Enums");
|
|
15
|
-
class HandlerFactory {
|
|
16
|
-
static get(handleType) {
|
|
17
|
-
switch (handleType) {
|
|
18
|
-
case Enums_1.HandlerTypes.ALL:
|
|
19
|
-
return AllHandler_1.default;
|
|
20
|
-
case Enums_1.HandlerTypes.DELETE:
|
|
21
|
-
return DestroyHandler_1.default;
|
|
22
|
-
case Enums_1.HandlerTypes.FORCE_DELETE:
|
|
23
|
-
return ForceDestroyHandler_1.default;
|
|
24
|
-
case Enums_1.HandlerTypes.INSERT:
|
|
25
|
-
return StoreHandler_1.default;
|
|
26
|
-
case Enums_1.HandlerTypes.PAGINATE:
|
|
27
|
-
return PaginateHandler_1.default;
|
|
28
|
-
case Enums_1.HandlerTypes.PATCH:
|
|
29
|
-
return PatchHandler_1.default;
|
|
30
|
-
case Enums_1.HandlerTypes.SHOW:
|
|
31
|
-
return ShowHandler_1.default;
|
|
32
|
-
case Enums_1.HandlerTypes.UPDATE:
|
|
33
|
-
return UpdateHandler_1.default;
|
|
34
|
-
default:
|
|
35
|
-
throw new Error("Handler type is not defined");
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
exports.default = HandlerFactory;
|
|
@@ -1,49 +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 Enums_1 = require("../Enums");
|
|
14
|
-
const Services_1 = require("../Services");
|
|
15
|
-
exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
-
const { version, model, req, 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
|
-
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onBeforePaginate, Object.assign(Object.assign({}, pack), { conditions,
|
|
29
|
-
query }));
|
|
30
|
-
// Users should be able to filter records
|
|
31
|
-
queryParser.applyWheres(query, conditions.q);
|
|
32
|
-
// User should be able to select sorting fields and types
|
|
33
|
-
queryParser.applySorting(query, conditions.sort);
|
|
34
|
-
const result = yield query.paginate({
|
|
35
|
-
perPage: conditions.per_page,
|
|
36
|
-
currentPage: conditions.page,
|
|
37
|
-
isLengthAware: true,
|
|
38
|
-
});
|
|
39
|
-
// We should try to get related data if there is any
|
|
40
|
-
yield (0, Helpers_1.getRelatedData)(version, result.data, conditions.with, model, version.modelList, database, Enums_1.HandlerTypes.PAGINATE, req);
|
|
41
|
-
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onAfterPaginate, Object.assign(Object.assign({}, pack), { conditions,
|
|
42
|
-
result,
|
|
43
|
-
query }));
|
|
44
|
-
// Serializing the data by the model's serialize method
|
|
45
|
-
result.data = yield (0, Helpers_1.serializeData)(version, result.data, model.serialize, Enums_1.HandlerTypes.PAGINATE, req);
|
|
46
|
-
// Filtering hidden fields from the response data.
|
|
47
|
-
(0, Helpers_1.filterHiddenFields)(result.data, model.instance.hiddens);
|
|
48
|
-
return pack.res.json(result);
|
|
49
|
-
});
|