@bool-ts/core 1.5.10 → 1.6.1
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/dist/decorators/arguments.d.ts +7 -1
- package/dist/decorators/arguments.js +15 -0
- package/dist/decorators/index.d.ts +1 -1
- package/dist/decorators/index.js +1 -1
- package/dist/decorators/module.d.ts +2 -0
- package/dist/hooks/factory.d.ts +2 -1
- package/dist/hooks/factory.js +332 -306
- package/package.json +1 -1
- package/src/decorators/arguments.ts +30 -1
- package/src/decorators/index.ts +2 -1
- package/src/decorators/module.ts +2 -0
- package/src/hooks/factory.ts +498 -464
package/dist/hooks/factory.js
CHANGED
|
@@ -79,338 +79,364 @@ export const argumentsResolution = async (data, zodSchema, argumentIndex, funcNa
|
|
|
79
79
|
});
|
|
80
80
|
}
|
|
81
81
|
};
|
|
82
|
-
export const BoolFactory = (target, options) => {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
const { middlewares, guards, beforeDispatchers, controllers, afterDispatchers, prefix: modulePrefix } = moduleMetadata;
|
|
94
|
-
// Middleware(s)
|
|
95
|
-
const middlewareGroup = !middlewares
|
|
96
|
-
? []
|
|
97
|
-
: middlewares.map((middleware) => {
|
|
98
|
-
const middlewareInstance = Injector.get(middleware);
|
|
99
|
-
return Object.freeze({
|
|
100
|
-
class: middleware,
|
|
101
|
-
funcName: "enforce",
|
|
102
|
-
func: middlewareInstance.enforce.bind(middlewareInstance)
|
|
82
|
+
export const BoolFactory = async (target, options) => {
|
|
83
|
+
try {
|
|
84
|
+
if (!Reflect.getOwnMetadataKeys(target).includes(moduleKey)) {
|
|
85
|
+
throw Error(`${target.name} is not a module.`);
|
|
86
|
+
}
|
|
87
|
+
const moduleMetadata = Reflect.getOwnMetadata(moduleKey, target);
|
|
88
|
+
if (!moduleMetadata) {
|
|
89
|
+
return Bun.serve({
|
|
90
|
+
port: options.port,
|
|
91
|
+
fetch: () => new Response()
|
|
103
92
|
});
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
93
|
+
}
|
|
94
|
+
const { middlewares, guards, beforeDispatchers, controllers, afterDispatchers, prefix: modulePrefix, config: moduleConfig } = moduleMetadata;
|
|
95
|
+
// Middleware(s)
|
|
96
|
+
const middlewareGroup = !middlewares
|
|
97
|
+
? []
|
|
98
|
+
: middlewares.map((middleware) => {
|
|
99
|
+
const middlewareInstance = Injector.get(middleware);
|
|
100
|
+
return Object.freeze({
|
|
101
|
+
class: middleware,
|
|
102
|
+
funcName: "enforce",
|
|
103
|
+
func: middlewareInstance.enforce.bind(middlewareInstance)
|
|
104
|
+
});
|
|
114
105
|
});
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
106
|
+
// Guard(s)
|
|
107
|
+
const guardGroup = !guards
|
|
108
|
+
? []
|
|
109
|
+
: guards.map((guard) => {
|
|
110
|
+
const guardInstance = Injector.get(guard);
|
|
111
|
+
return Object.freeze({
|
|
112
|
+
class: guard,
|
|
113
|
+
funcName: "enforce",
|
|
114
|
+
func: guardInstance.enforce.bind(guardInstance)
|
|
115
|
+
});
|
|
125
116
|
});
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
? []
|
|
137
|
-
: afterDispatchers.map((afterDispatcher) => {
|
|
138
|
-
const afterDispatcherInstance = Injector.get(afterDispatcher);
|
|
139
|
-
return Object.freeze({
|
|
140
|
-
class: afterDispatcher,
|
|
141
|
-
funcName: "execute",
|
|
142
|
-
func: afterDispatcherInstance.execute.bind(afterDispatcherInstance)
|
|
117
|
+
// Before dispatcher(s)
|
|
118
|
+
const beforeDispatcherGroup = !beforeDispatchers
|
|
119
|
+
? []
|
|
120
|
+
: beforeDispatchers.map((beforeDispatcher) => {
|
|
121
|
+
const beforeDispatcherInstance = Injector.get(beforeDispatcher);
|
|
122
|
+
return Object.freeze({
|
|
123
|
+
class: beforeDispatcher,
|
|
124
|
+
funcName: "execute",
|
|
125
|
+
func: beforeDispatcherInstance.execute.bind(beforeDispatcherInstance)
|
|
126
|
+
});
|
|
143
127
|
});
|
|
128
|
+
// Controller(s)
|
|
129
|
+
const routerGroup = new RouterGroup();
|
|
130
|
+
controllers &&
|
|
131
|
+
controllers.map((controllerConstructor) => controllerCreator(controllerConstructor, routerGroup, `${options.prefix || ""}/${modulePrefix || ""}`));
|
|
132
|
+
// After dispatcher(s)
|
|
133
|
+
const afterDispatcherGroup = !afterDispatchers
|
|
134
|
+
? []
|
|
135
|
+
: afterDispatchers.map((afterDispatcher) => {
|
|
136
|
+
const afterDispatcherInstance = Injector.get(afterDispatcher);
|
|
137
|
+
return Object.freeze({
|
|
138
|
+
class: afterDispatcher,
|
|
139
|
+
funcName: "execute",
|
|
140
|
+
func: afterDispatcherInstance.execute.bind(afterDispatcherInstance)
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
const { allowLogsMethods, config } = Object.freeze({
|
|
144
|
+
allowLogsMethods: options?.log?.methods,
|
|
145
|
+
config: {
|
|
146
|
+
...(typeof options.config !== "function" ? options.config : await options.config()),
|
|
147
|
+
...(typeof moduleConfig !== "function" ? moduleConfig : await moduleConfig())
|
|
148
|
+
}
|
|
144
149
|
});
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
150
|
+
Bun.serve({
|
|
151
|
+
port: options.port,
|
|
152
|
+
fetch: async (request) => {
|
|
153
|
+
const start = performance.now();
|
|
154
|
+
const url = new URL(request.url);
|
|
155
|
+
const reqHeaders = request.headers;
|
|
156
|
+
const resHeaders = new Headers();
|
|
157
|
+
const query = Qs.parse(url.searchParams.toString(), options.queryParser);
|
|
158
|
+
try {
|
|
159
|
+
// Execute middleware(s)
|
|
160
|
+
for (let i = 0; i < middlewareGroup.length; i++) {
|
|
161
|
+
const middlewareArguments = [];
|
|
162
|
+
const middlewareCollection = middlewareGroup[i];
|
|
163
|
+
const middlewareMetadata = Reflect.getOwnMetadata(argumentsKey, middlewareCollection.class, middlewareCollection.funcName) ||
|
|
164
|
+
{};
|
|
165
|
+
if (middlewareMetadata) {
|
|
166
|
+
for (const [_key, argsMetadata] of Object.entries(middlewareMetadata)) {
|
|
167
|
+
switch (argsMetadata.type) {
|
|
168
|
+
case EArgumentTypes.requestHeaders:
|
|
169
|
+
middlewareArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
170
|
+
? reqHeaders
|
|
171
|
+
: await argumentsResolution(reqHeaders, argsMetadata.zodSchema, argsMetadata.index, middlewareCollection.funcName);
|
|
172
|
+
break;
|
|
173
|
+
case EArgumentTypes.body:
|
|
174
|
+
middlewareArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
175
|
+
? await request[argsMetadata.parser || "json"]()
|
|
176
|
+
: await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, middlewareCollection.funcName);
|
|
177
|
+
break;
|
|
178
|
+
case EArgumentTypes.query:
|
|
179
|
+
middlewareArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
180
|
+
? query
|
|
181
|
+
: await argumentsResolution(query, argsMetadata.zodSchema, argsMetadata.index, middlewareCollection.funcName);
|
|
182
|
+
break;
|
|
183
|
+
case EArgumentTypes.request:
|
|
184
|
+
middlewareArguments[argsMetadata.index] = request;
|
|
185
|
+
break;
|
|
186
|
+
case EArgumentTypes.responseHeaders:
|
|
187
|
+
middlewareArguments[argsMetadata.index] = resHeaders;
|
|
188
|
+
break;
|
|
189
|
+
case EArgumentTypes.config:
|
|
190
|
+
middlewareArguments[argsMetadata.index] = config;
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
183
193
|
}
|
|
184
194
|
}
|
|
195
|
+
const middlewareResult = await middlewareCollection.func(...middlewareArguments);
|
|
196
|
+
if (!(middlewareResult instanceof Response)) {
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
return middlewareResult;
|
|
185
200
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
guardArguments[argsMetadata.index] = resHeaders;
|
|
220
|
-
break;
|
|
201
|
+
// Execute guard(s)
|
|
202
|
+
for (let i = 0; i < guardGroup.length; i++) {
|
|
203
|
+
const guardArguments = [];
|
|
204
|
+
const guardCollection = guardGroup[i];
|
|
205
|
+
const guardMetadata = Reflect.getOwnMetadata(argumentsKey, guardCollection.class, guardCollection.funcName) || {};
|
|
206
|
+
if (guardMetadata) {
|
|
207
|
+
for (const [_key, argsMetadata] of Object.entries(guardMetadata)) {
|
|
208
|
+
switch (argsMetadata.type) {
|
|
209
|
+
case EArgumentTypes.requestHeaders:
|
|
210
|
+
guardArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
211
|
+
? reqHeaders
|
|
212
|
+
: await argumentsResolution(reqHeaders, argsMetadata.zodSchema, argsMetadata.index, guardCollection.funcName);
|
|
213
|
+
break;
|
|
214
|
+
case EArgumentTypes.body:
|
|
215
|
+
guardArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
216
|
+
? await request[argsMetadata.parser || "json"]()
|
|
217
|
+
: await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, guardCollection.funcName);
|
|
218
|
+
break;
|
|
219
|
+
case EArgumentTypes.query:
|
|
220
|
+
guardArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
221
|
+
? query
|
|
222
|
+
: await argumentsResolution(query, argsMetadata.zodSchema, argsMetadata.index, guardCollection.funcName);
|
|
223
|
+
break;
|
|
224
|
+
case EArgumentTypes.request:
|
|
225
|
+
guardArguments[argsMetadata.index] = request;
|
|
226
|
+
break;
|
|
227
|
+
case EArgumentTypes.responseHeaders:
|
|
228
|
+
guardArguments[argsMetadata.index] = resHeaders;
|
|
229
|
+
break;
|
|
230
|
+
case EArgumentTypes.config:
|
|
231
|
+
guardArguments[argsMetadata.index] = config;
|
|
232
|
+
break;
|
|
233
|
+
}
|
|
221
234
|
}
|
|
222
235
|
}
|
|
236
|
+
const guardResult = await guardCollection.func(...guardArguments);
|
|
237
|
+
if (typeof guardResult !== "boolean" || !guardResult) {
|
|
238
|
+
throw new HttpClientError({
|
|
239
|
+
httpCode: 401,
|
|
240
|
+
message: "Unauthorization.",
|
|
241
|
+
data: undefined
|
|
242
|
+
});
|
|
243
|
+
}
|
|
223
244
|
}
|
|
224
|
-
const
|
|
225
|
-
if (
|
|
245
|
+
const result = routerGroup.find(url.pathname, request.method);
|
|
246
|
+
if (!result) {
|
|
226
247
|
throw new HttpClientError({
|
|
227
|
-
httpCode:
|
|
228
|
-
message: "
|
|
248
|
+
httpCode: 404,
|
|
249
|
+
message: "Route not found.",
|
|
229
250
|
data: undefined
|
|
230
251
|
});
|
|
231
252
|
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
beforeDispatcherArguments[argsMetadata.index] = request;
|
|
280
|
-
break;
|
|
281
|
-
case EArgumentTypes.responseHeaders:
|
|
282
|
-
beforeDispatcherArguments[argsMetadata.index] = resHeaders;
|
|
283
|
-
break;
|
|
253
|
+
const params = result.params;
|
|
254
|
+
let responseBody = undefined;
|
|
255
|
+
// Execute before dispatcher(s)
|
|
256
|
+
for (let i = 0; i < beforeDispatcherGroup.length; i++) {
|
|
257
|
+
const beforeDispatcherArguments = [];
|
|
258
|
+
const beforeDispatcherCollection = beforeDispatcherGroup[i];
|
|
259
|
+
const beforeDispatcherMetadata = Reflect.getOwnMetadata(argumentsKey, beforeDispatcherCollection.class, beforeDispatcherCollection.funcName) || {};
|
|
260
|
+
if (beforeDispatcherMetadata) {
|
|
261
|
+
for (const [_key, argsMetadata] of Object.entries(beforeDispatcherMetadata)) {
|
|
262
|
+
switch (argsMetadata.type) {
|
|
263
|
+
case EArgumentTypes.requestHeaders:
|
|
264
|
+
beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
265
|
+
? reqHeaders
|
|
266
|
+
: await argumentsResolution(reqHeaders, argsMetadata.zodSchema, argsMetadata.index, beforeDispatcherCollection.funcName);
|
|
267
|
+
break;
|
|
268
|
+
case EArgumentTypes.body:
|
|
269
|
+
beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
270
|
+
? await request[argsMetadata.parser || "json"]()
|
|
271
|
+
: await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, beforeDispatcherCollection.funcName);
|
|
272
|
+
break;
|
|
273
|
+
case EArgumentTypes.params:
|
|
274
|
+
beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
275
|
+
? params
|
|
276
|
+
: await argumentsResolution(params, argsMetadata.zodSchema, argsMetadata.index, beforeDispatcherCollection.funcName);
|
|
277
|
+
break;
|
|
278
|
+
case EArgumentTypes.query:
|
|
279
|
+
beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
280
|
+
? query
|
|
281
|
+
: await argumentsResolution(query, argsMetadata.zodSchema, argsMetadata.index, beforeDispatcherCollection.funcName);
|
|
282
|
+
break;
|
|
283
|
+
case EArgumentTypes.param:
|
|
284
|
+
beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
285
|
+
? !(argsMetadata.key in params)
|
|
286
|
+
? undefined
|
|
287
|
+
: params[argsMetadata.key]
|
|
288
|
+
: await argumentsResolution(query, argsMetadata.zodSchema, argsMetadata.index, beforeDispatcherCollection.funcName);
|
|
289
|
+
break;
|
|
290
|
+
case EArgumentTypes.request:
|
|
291
|
+
beforeDispatcherArguments[argsMetadata.index] = request;
|
|
292
|
+
break;
|
|
293
|
+
case EArgumentTypes.responseHeaders:
|
|
294
|
+
beforeDispatcherArguments[argsMetadata.index] = resHeaders;
|
|
295
|
+
break;
|
|
296
|
+
case EArgumentTypes.config:
|
|
297
|
+
beforeDispatcherArguments[argsMetadata.index] = config;
|
|
298
|
+
break;
|
|
299
|
+
}
|
|
284
300
|
}
|
|
285
301
|
}
|
|
302
|
+
await beforeDispatcherCollection.func(...beforeDispatcherArguments);
|
|
286
303
|
}
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
304
|
+
// Execute controller action
|
|
305
|
+
for (let i = 0; i < result.handlers.length; i++) {
|
|
306
|
+
const controllerActionArguments = [];
|
|
307
|
+
const handler = result.handlers[i];
|
|
308
|
+
const handlerMetadata = Reflect.getOwnMetadata(argumentsKey, handler.class, handler.funcName) || {};
|
|
309
|
+
if (handlerMetadata) {
|
|
310
|
+
for (const [_key, argsMetadata] of Object.entries(handlerMetadata)) {
|
|
311
|
+
switch (argsMetadata.type) {
|
|
312
|
+
case EArgumentTypes.requestHeaders:
|
|
313
|
+
controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
314
|
+
? reqHeaders
|
|
315
|
+
: await argumentsResolution(reqHeaders, argsMetadata.zodSchema, argsMetadata.index, handler.funcName);
|
|
316
|
+
break;
|
|
317
|
+
case EArgumentTypes.body:
|
|
318
|
+
controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
319
|
+
? await request[argsMetadata.parser || "json"]()
|
|
320
|
+
: await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, handler.funcName);
|
|
321
|
+
break;
|
|
322
|
+
case EArgumentTypes.params:
|
|
323
|
+
controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
324
|
+
? params
|
|
325
|
+
: await argumentsResolution(params, argsMetadata.zodSchema, argsMetadata.index, handler.funcName);
|
|
326
|
+
break;
|
|
327
|
+
case EArgumentTypes.query:
|
|
328
|
+
controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
329
|
+
? query
|
|
330
|
+
: await argumentsResolution(query, argsMetadata.zodSchema, argsMetadata.index, handler.funcName);
|
|
331
|
+
break;
|
|
332
|
+
case EArgumentTypes.param:
|
|
333
|
+
controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
334
|
+
? !(argsMetadata.key in params)
|
|
335
|
+
? undefined
|
|
336
|
+
: params[argsMetadata.key]
|
|
337
|
+
: await argumentsResolution(query, argsMetadata.zodSchema, argsMetadata.index, handler.funcName);
|
|
338
|
+
break;
|
|
339
|
+
case EArgumentTypes.request:
|
|
340
|
+
controllerActionArguments[argsMetadata.index] = request;
|
|
341
|
+
break;
|
|
342
|
+
case EArgumentTypes.responseHeaders:
|
|
343
|
+
controllerActionArguments[argsMetadata.index] = resHeaders;
|
|
344
|
+
break;
|
|
345
|
+
case EArgumentTypes.config:
|
|
346
|
+
controllerActionArguments[argsMetadata.index] = config;
|
|
347
|
+
break;
|
|
348
|
+
}
|
|
330
349
|
}
|
|
331
350
|
}
|
|
351
|
+
responseBody = await handler.func(...controllerActionArguments);
|
|
332
352
|
}
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
353
|
+
// Execute after dispatcher(s)
|
|
354
|
+
for (let i = 0; i < afterDispatcherGroup.length; i++) {
|
|
355
|
+
const afterDispatcherArguments = [];
|
|
356
|
+
const afterDispatcherCollection = afterDispatcherGroup[i];
|
|
357
|
+
const afterDispatcherMetadata = Reflect.getOwnMetadata(argumentsKey, afterDispatcherCollection.class, afterDispatcherCollection.funcName) || {};
|
|
358
|
+
if (afterDispatcherMetadata) {
|
|
359
|
+
for (const [_key, argsMetadata] of Object.entries(afterDispatcherMetadata)) {
|
|
360
|
+
switch (argsMetadata.type) {
|
|
361
|
+
case EArgumentTypes.requestHeaders:
|
|
362
|
+
afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
363
|
+
? reqHeaders
|
|
364
|
+
: await argumentsResolution(reqHeaders, argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
|
|
365
|
+
break;
|
|
366
|
+
case EArgumentTypes.body:
|
|
367
|
+
afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
368
|
+
? await request[argsMetadata.parser || "json"]()
|
|
369
|
+
: await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
|
|
370
|
+
break;
|
|
371
|
+
case EArgumentTypes.params:
|
|
372
|
+
afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
373
|
+
? params
|
|
374
|
+
: await argumentsResolution(params, argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
|
|
375
|
+
break;
|
|
376
|
+
case EArgumentTypes.query:
|
|
377
|
+
afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
378
|
+
? query
|
|
379
|
+
: await argumentsResolution(query, argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
|
|
380
|
+
break;
|
|
381
|
+
case EArgumentTypes.param:
|
|
382
|
+
afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
383
|
+
? !(argsMetadata.key in params)
|
|
384
|
+
? undefined
|
|
385
|
+
: params[argsMetadata.key]
|
|
386
|
+
: await argumentsResolution(query, argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
|
|
387
|
+
break;
|
|
388
|
+
case EArgumentTypes.request:
|
|
389
|
+
afterDispatcherArguments[argsMetadata.index] = request;
|
|
390
|
+
break;
|
|
391
|
+
case EArgumentTypes.responseHeaders:
|
|
392
|
+
afterDispatcherArguments[argsMetadata.index] = resHeaders;
|
|
393
|
+
break;
|
|
394
|
+
case EArgumentTypes.config:
|
|
395
|
+
afterDispatcherArguments[argsMetadata.index] = config;
|
|
396
|
+
break;
|
|
397
|
+
}
|
|
376
398
|
}
|
|
377
399
|
}
|
|
400
|
+
await afterDispatcherCollection.func(...afterDispatcherArguments);
|
|
378
401
|
}
|
|
379
|
-
|
|
402
|
+
// Set default header(s)
|
|
403
|
+
resHeaders.set("X-Powered-By", "Bool Typescript");
|
|
404
|
+
return responseBody instanceof Response
|
|
405
|
+
? responseBody
|
|
406
|
+
: new Response(!responseBody
|
|
407
|
+
? undefined
|
|
408
|
+
: JSON.stringify({
|
|
409
|
+
httpCode: 200,
|
|
410
|
+
message: "SUCCESS",
|
|
411
|
+
data: responseBody
|
|
412
|
+
}), {
|
|
413
|
+
status: !responseBody ? 204 : 200,
|
|
414
|
+
statusText: "SUCCESS",
|
|
415
|
+
headers: resHeaders
|
|
416
|
+
});
|
|
380
417
|
}
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
catch (error) {
|
|
398
|
-
// Set default header(s)
|
|
399
|
-
resHeaders.set("X-Powered-By", "Bool Typescript");
|
|
400
|
-
return jsonErrorInfer(error, resHeaders);
|
|
401
|
-
}
|
|
402
|
-
finally {
|
|
403
|
-
if (allowLogsMethods) {
|
|
404
|
-
const end = performance.now();
|
|
405
|
-
const convertedPID = `${process.pid}`.yellow;
|
|
406
|
-
const convertedMethod = `${request.method.yellow}`.bgBlue;
|
|
407
|
-
const convertedReqIp = `${request.headers.get("x-forwarded-for") || request.headers.get("x-real-ip") || "<Unknown>"}`.yellow;
|
|
408
|
-
const convertedTime = `${Math.round((end - start + Number.EPSILON) * 10 ** 2) / 10 ** 2}ms`.yellow;
|
|
409
|
-
allowLogsMethods.includes(request.method.toUpperCase()) &&
|
|
410
|
-
console.info(`PID: ${convertedPID} - Method: ${convertedMethod} - IP: ${convertedReqIp} - ${url.pathname.blue} - Time: ${convertedTime}`);
|
|
418
|
+
catch (error) {
|
|
419
|
+
// Set default header(s)
|
|
420
|
+
resHeaders.set("X-Powered-By", "Bool Typescript");
|
|
421
|
+
return jsonErrorInfer(error, resHeaders);
|
|
422
|
+
}
|
|
423
|
+
finally {
|
|
424
|
+
if (allowLogsMethods) {
|
|
425
|
+
const end = performance.now();
|
|
426
|
+
const convertedPID = `${process.pid}`.yellow;
|
|
427
|
+
const convertedMethod = `${request.method.yellow}`.bgBlue;
|
|
428
|
+
const convertedReqIp = `${request.headers.get("x-forwarded-for") || request.headers.get("x-real-ip") || "<Unknown>"}`.yellow;
|
|
429
|
+
const convertedTime = `${Math.round((end - start + Number.EPSILON) * 10 ** 2) / 10 ** 2}ms`.yellow;
|
|
430
|
+
allowLogsMethods.includes(request.method.toUpperCase()) &&
|
|
431
|
+
console.info(`PID: ${convertedPID} - Method: ${convertedMethod} - IP: ${convertedReqIp} - ${url.pathname.blue} - Time: ${convertedTime}`);
|
|
432
|
+
}
|
|
411
433
|
}
|
|
412
434
|
}
|
|
413
|
-
}
|
|
414
|
-
}
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
catch (error) {
|
|
438
|
+
console.error(error);
|
|
439
|
+
throw error;
|
|
440
|
+
}
|
|
415
441
|
};
|
|
416
442
|
export default BoolFactory;
|