@bool-ts/core 1.6.14 → 1.7.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.
Files changed (68) hide show
  1. package/.prettierrc +11 -11
  2. package/LICENSE +21 -21
  3. package/__test/controller.ts +93 -79
  4. package/__test/dispatcher.ts +16 -0
  5. package/__test/firstGuard.ts +10 -10
  6. package/__test/firstMiddleware.ts +15 -9
  7. package/__test/index.ts +8 -8
  8. package/__test/interfaces.ts +7 -7
  9. package/__test/module.ts +28 -30
  10. package/__test/repository.ts +16 -16
  11. package/__test/secondGuard.ts +10 -10
  12. package/__test/secondMiddleware.ts +15 -9
  13. package/__test/service.ts +20 -20
  14. package/bun.lockb +0 -0
  15. package/dist/decorators/arguments.d.ts +3 -3
  16. package/dist/decorators/arguments.js +3 -3
  17. package/dist/decorators/dispatcher.js +0 -3
  18. package/dist/decorators/index.d.ts +1 -1
  19. package/dist/decorators/index.js +1 -1
  20. package/dist/decorators/middleware.js +0 -3
  21. package/dist/decorators/module.d.ts +2 -4
  22. package/dist/decorators/module.js +5 -12
  23. package/dist/hooks/factory.d.ts +41 -2
  24. package/dist/hooks/factory.js +496 -404
  25. package/dist/hooks/injector.d.ts +14 -1
  26. package/dist/hooks/injector.js +3 -3
  27. package/dist/http/index.d.ts +1 -1
  28. package/dist/http/index.js +2 -1
  29. package/dist/interfaces/dispatcher.d.ts +3 -2
  30. package/dist/interfaces/middleware.d.ts +3 -2
  31. package/dist/keys/index.d.ts +2 -1
  32. package/dist/keys/index.js +2 -1
  33. package/jsconfig.json +27 -27
  34. package/package.json +3 -3
  35. package/src/decorators/arguments.ts +286 -286
  36. package/src/decorators/controller.ts +21 -21
  37. package/src/decorators/dispatcher.ts +14 -18
  38. package/src/decorators/guard.ts +18 -18
  39. package/src/decorators/http.ts +81 -81
  40. package/src/decorators/index.ts +29 -29
  41. package/src/decorators/inject.ts +13 -13
  42. package/src/decorators/injectable.ts +8 -8
  43. package/src/decorators/middleware.ts +14 -18
  44. package/src/decorators/module.ts +84 -94
  45. package/src/decorators/zodSchema.ts +19 -19
  46. package/src/entities/index.ts +5 -5
  47. package/src/entities/route.ts +327 -327
  48. package/src/entities/router.ts +35 -35
  49. package/src/entities/routerGroup.ts +34 -34
  50. package/src/hooks/factory.ts +990 -809
  51. package/src/hooks/index.ts +2 -2
  52. package/src/hooks/injector.ts +57 -57
  53. package/src/http/clientError.ts +45 -45
  54. package/src/http/index.ts +62 -61
  55. package/src/http/serverError.ts +27 -27
  56. package/src/index.ts +9 -9
  57. package/src/interfaces/context.ts +4 -4
  58. package/src/interfaces/controller.ts +1 -1
  59. package/src/interfaces/dispatcher.ts +4 -3
  60. package/src/interfaces/guard.ts +3 -3
  61. package/src/interfaces/index.ts +6 -6
  62. package/src/interfaces/middleware.ts +4 -3
  63. package/src/interfaces/module.ts +1 -1
  64. package/src/keys/index.ts +23 -22
  65. package/test.http +31 -31
  66. package/tsconfig.json +108 -108
  67. package/__test/afterDispatcher.ts +0 -9
  68. package/__test/beforeDispatcher.ts +0 -9
@@ -4,13 +4,17 @@ import Qs from "qs";
4
4
  import * as Zod from "zod";
5
5
  import { Router, RouterGroup } from "../entities";
6
6
  import { HttpClientError, HttpServerError, jsonErrorInfer } from "../http";
7
- import { argumentsKey, bodyArgsKey, configKey, contextArgsKey, controllerHttpKey, controllerKey, moduleKey, paramArgsKey, paramsArgsKey, queryArgsKey, requestArgsKey, requestHeaderArgsKey, requestHeadersArgsKey, responseHeadersArgsKey, routeModelArgsKey } from "../keys";
7
+ import { argumentsKey, configKey, contextArgsKey, controllerHttpKey, controllerKey, moduleKey, paramArgsKey, paramsArgsKey, queryArgsKey, requestArgsKey, requestBodyArgsKey, requestHeaderArgsKey, requestHeadersArgsKey, responseBodyArgsKey, responseHeadersArgsKey, routeModelArgsKey } from "../keys";
8
8
  import { Injector } from "./injector";
9
- export const controllerCreator = (controllerConstructor, group, prefix) => {
9
+ export const responseConverter = (response) => {
10
+ response.headers.set("X-Powered-By", "Bool Typescript");
11
+ return response;
12
+ };
13
+ export const controllerCreator = (controllerConstructor, group, injector, prefix) => {
10
14
  if (!Reflect.getOwnMetadataKeys(controllerConstructor).includes(controllerKey)) {
11
15
  throw Error(`${controllerConstructor.name} is not a controller.`);
12
16
  }
13
- const controller = Injector.get(controllerConstructor);
17
+ const controller = injector.get(controllerConstructor);
14
18
  if (!controller) {
15
19
  throw Error("Can not initialize controller.");
16
20
  }
@@ -79,430 +83,518 @@ export const argumentsResolution = async (data, zodSchema, argumentIndex, funcNa
79
83
  });
80
84
  }
81
85
  };
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
+ export const moduleResolution = async (module, options) => {
87
+ if (!Reflect.getOwnMetadataKeys(module).includes(moduleKey)) {
88
+ throw Error(`${module.name} is not a module.`);
89
+ }
90
+ const injector = new Injector();
91
+ const moduleMetadata = Reflect.getOwnMetadata(moduleKey, module);
92
+ if (!moduleMetadata) {
93
+ return;
94
+ }
95
+ const { loaders, middlewares, guards, dispatchers, controllers, dependencies, prefix: modulePrefix, config: moduleConfig } = moduleMetadata;
96
+ // Configuration(s)
97
+ const { config } = Object.freeze({
98
+ config: {
99
+ ...(typeof options.config !== "function" ? options.config : await options.config()),
100
+ ...(typeof moduleConfig !== "function"
101
+ ? typeof moduleConfig !== "object"
102
+ ? undefined
103
+ : moduleConfig
104
+ : await moduleConfig())
86
105
  }
87
- const moduleMetadata = Reflect.getOwnMetadata(moduleKey, target);
88
- if (!moduleMetadata) {
89
- return Bun.serve({
90
- port: options.port,
91
- fetch: () => new Response()
106
+ });
107
+ // Register config like an injection
108
+ injector.set(configKey, config);
109
+ if (loaders) {
110
+ const loaderFunctions = [];
111
+ for (const [key, func] of Object.entries(loaders)) {
112
+ loaderFunctions.push(async () => {
113
+ try {
114
+ const result = await func({ config });
115
+ console.info(`INFO! Loader [${key}] initialized successfully.`);
116
+ return result;
117
+ }
118
+ catch (error) {
119
+ console.error(`WARNING! Loader [${key}] initialization failed.`);
120
+ options.debug && console.error(error);
121
+ throw error;
122
+ }
92
123
  });
93
124
  }
94
- const { loaders, middlewares, guards, beforeDispatchers, controllers, afterDispatchers, dependencies, prefix: modulePrefix, config: moduleConfig } = moduleMetadata;
95
- // Configuration(s)
96
- const { allowLogsMethods, config } = Object.freeze({
97
- allowLogsMethods: options?.log?.methods,
98
- config: {
99
- ...(typeof options.config !== "function" ? options.config : await options.config()),
100
- ...(typeof moduleConfig !== "function"
101
- ? typeof moduleConfig !== "object"
102
- ? undefined
103
- : moduleConfig
104
- : await moduleConfig())
125
+ const results = await Promise.all(loaderFunctions.map((func) => func()));
126
+ for (let i = 0; i < results.length; i++) {
127
+ const [key, value] = results[i];
128
+ injector.set(key, value);
129
+ }
130
+ }
131
+ // Dependencies
132
+ !dependencies || dependencies.map((dependency) => injector.get(dependency));
133
+ // Middleware(s)
134
+ const startMiddlewareGroup = [];
135
+ const endMiddlewareGroup = [];
136
+ if (middlewares) {
137
+ for (let i = 0; i < middlewares.length; i++) {
138
+ const instance = injector.get(middlewares[i]);
139
+ if (instance.start && typeof instance.start === "function") {
140
+ startMiddlewareGroup.push(Object.freeze({
141
+ class: middlewares[i],
142
+ funcName: "start",
143
+ func: instance.start.bind(instance)
144
+ }));
105
145
  }
146
+ if (instance.end && typeof instance.end === "function") {
147
+ endMiddlewareGroup.push(Object.freeze({
148
+ class: middlewares[i],
149
+ funcName: "end",
150
+ func: instance.end.bind(instance)
151
+ }));
152
+ }
153
+ }
154
+ }
155
+ // Guard(s)
156
+ const guardGroup = !guards
157
+ ? []
158
+ : guards.map((guard) => {
159
+ const guardInstance = injector.get(guard);
160
+ return Object.freeze({
161
+ class: guard,
162
+ funcName: "enforce",
163
+ func: guardInstance.enforce.bind(guardInstance)
164
+ });
106
165
  });
107
- // Register config like an injection
108
- Injector.set(configKey, config);
109
- if (loaders) {
110
- const loaderFunctions = [];
111
- for (const [key, func] of Object.entries(loaders)) {
112
- loaderFunctions.push(async () => {
113
- try {
114
- const result = await func({ config });
115
- console.info(`INFO! Loader [${key}] initialized successfully.`);
116
- return result;
117
- }
118
- catch (error) {
119
- console.error(`WARNING! Loader [${key}] initialization failed.`);
120
- options.debug && console.error(error);
121
- throw error;
122
- }
123
- });
166
+ // Before dispatcher(s)
167
+ const openDispatcherGroup = [];
168
+ const closeDispatcherGroup = [];
169
+ if (dispatchers) {
170
+ for (let i = 0; i < dispatchers.length; i++) {
171
+ const instance = injector.get(dispatchers[i]);
172
+ if (instance.open && typeof instance.open === "function") {
173
+ openDispatcherGroup.push(Object.freeze({
174
+ class: dispatchers[i],
175
+ funcName: "open",
176
+ func: instance.open.bind(instance)
177
+ }));
124
178
  }
125
- const results = await Promise.all(loaderFunctions.map((func) => func()));
126
- for (let i = 0; i < results.length; i++) {
127
- const [key, value] = results[i];
128
- Injector.set(key, value);
179
+ if (instance.close && typeof instance.close === "function") {
180
+ closeDispatcherGroup.push(Object.freeze({
181
+ class: dispatchers[i],
182
+ funcName: "close",
183
+ func: instance.close.bind(instance)
184
+ }));
129
185
  }
130
186
  }
131
- // Dependencies
132
- !dependencies || dependencies.map((dependency) => Injector.get(dependency));
133
- // Middleware(s)
134
- const middlewareGroup = !middlewares
135
- ? []
136
- : middlewares.map((middleware) => {
137
- const middlewareInstance = Injector.get(middleware);
138
- return Object.freeze({
139
- class: middleware,
140
- funcName: "enforce",
141
- func: middlewareInstance.enforce.bind(middlewareInstance)
142
- });
143
- });
144
- // Guard(s)
145
- const guardGroup = !guards
146
- ? []
147
- : guards.map((guard) => {
148
- const guardInstance = Injector.get(guard);
149
- return Object.freeze({
150
- class: guard,
151
- funcName: "enforce",
152
- func: guardInstance.enforce.bind(guardInstance)
153
- });
154
- });
155
- // Before dispatcher(s)
156
- const beforeDispatcherGroup = !beforeDispatchers
157
- ? []
158
- : beforeDispatchers.map((beforeDispatcher) => {
159
- const beforeDispatcherInstance = Injector.get(beforeDispatcher);
160
- return Object.freeze({
161
- class: beforeDispatcher,
162
- funcName: "execute",
163
- func: beforeDispatcherInstance.execute.bind(beforeDispatcherInstance)
164
- });
165
- });
166
- // Controller(s)
167
- const routerGroup = new RouterGroup();
168
- controllers &&
169
- controllers.map((controllerConstructor) => controllerCreator(controllerConstructor, routerGroup, `${options.prefix || ""}/${modulePrefix || ""}`));
170
- // After dispatcher(s)
171
- const afterDispatcherGroup = !afterDispatchers
172
- ? []
173
- : afterDispatchers.map((afterDispatcher) => {
174
- const afterDispatcherInstance = Injector.get(afterDispatcher);
175
- return Object.freeze({
176
- class: afterDispatcher,
177
- funcName: "execute",
178
- func: afterDispatcherInstance.execute.bind(afterDispatcherInstance)
179
- });
187
+ }
188
+ // Controller(s)
189
+ const routerGroup = new RouterGroup();
190
+ controllers &&
191
+ controllers.map((controllerConstructor) => controllerCreator(controllerConstructor, routerGroup, injector, `${options.prefix || ""}/${modulePrefix || ""}`));
192
+ return Object.freeze({
193
+ prefix: moduleMetadata.prefix,
194
+ injector: injector,
195
+ startMiddlewareGroup,
196
+ endMiddlewareGroup,
197
+ guardGroup,
198
+ openDispatcherGroup,
199
+ closeDispatcherGroup,
200
+ routerGroup
201
+ });
202
+ };
203
+ const fetcher = async (bun, bool, options) => {
204
+ const { query, route: { parameters, model }, moduleResolution: { startMiddlewareGroup, endMiddlewareGroup, guardGroup, openDispatcherGroup, closeDispatcherGroup } } = bool;
205
+ const { request, server: _server } = bun;
206
+ const context = {
207
+ [requestHeadersArgsKey]: request.headers,
208
+ [responseHeadersArgsKey]: new Headers(),
209
+ [queryArgsKey]: query,
210
+ [paramsArgsKey]: parameters,
211
+ [routeModelArgsKey]: model
212
+ };
213
+ const contextHook = {
214
+ get(key) {
215
+ return context[key];
216
+ },
217
+ set(key, value) {
218
+ if (key in context) {
219
+ throw Error(`${String(key)} already exists in context.`);
220
+ }
221
+ context[key] = value;
222
+ }
223
+ };
224
+ // Execute start middleware(s)
225
+ for (let i = 0; i < startMiddlewareGroup.length; i++) {
226
+ const args = [];
227
+ const collection = startMiddlewareGroup[i];
228
+ const metadata = Reflect.getOwnMetadata(argumentsKey, collection.class, collection.funcName) || {};
229
+ if (metadata) {
230
+ for (const [_key, argsMetadata] of Object.entries(metadata)) {
231
+ switch (argsMetadata.type) {
232
+ case requestArgsKey:
233
+ args[argsMetadata.index] = !argsMetadata.zodSchema
234
+ ? request
235
+ : await argumentsResolution(request, argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
236
+ break;
237
+ case requestBodyArgsKey:
238
+ args[argsMetadata.index] = !argsMetadata.zodSchema
239
+ ? await request[argsMetadata.parser || "json"]()
240
+ : await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
241
+ break;
242
+ case contextArgsKey:
243
+ args[argsMetadata.index] = !argsMetadata.key ? contextHook : contextHook.get(argsMetadata.key);
244
+ break;
245
+ case requestHeadersArgsKey:
246
+ args[argsMetadata.index] = !argsMetadata.zodSchema
247
+ ? request.headers
248
+ : await argumentsResolution(request.headers.toJSON(), argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
249
+ break;
250
+ case responseHeadersArgsKey:
251
+ args[argsMetadata.index] = context[argsMetadata.type];
252
+ break;
253
+ case requestHeaderArgsKey:
254
+ args[argsMetadata.index] = !argsMetadata.zodSchema
255
+ ? request.headers.get(argsMetadata.key) || undefined
256
+ : await argumentsResolution(request.headers.get(argsMetadata.key) || undefined, argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
257
+ break;
258
+ case routeModelArgsKey:
259
+ break;
260
+ default:
261
+ args[argsMetadata.index] = !argsMetadata.zodSchema
262
+ ? !(argsMetadata.type in context)
263
+ ? undefined
264
+ : context[argsMetadata.type]
265
+ : await argumentsResolution(!(argsMetadata.type in context) ? undefined : context[argsMetadata.type], argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
266
+ break;
267
+ }
268
+ }
269
+ }
270
+ context[responseBodyArgsKey] = await collection.func(...args);
271
+ if (context[responseBodyArgsKey] instanceof Response) {
272
+ return responseConverter(context[responseBodyArgsKey]);
273
+ }
274
+ }
275
+ // Execute guard(s)
276
+ for (let i = 0; i < guardGroup.length; i++) {
277
+ const args = [];
278
+ const collection = guardGroup[i];
279
+ const metadata = Reflect.getOwnMetadata(argumentsKey, collection.class, collection.funcName) || {};
280
+ if (metadata) {
281
+ for (const [_key, argsMetadata] of Object.entries(metadata)) {
282
+ switch (argsMetadata.type) {
283
+ case requestArgsKey:
284
+ args[argsMetadata.index] = !argsMetadata.zodSchema
285
+ ? request
286
+ : await argumentsResolution(request, argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
287
+ break;
288
+ case requestBodyArgsKey:
289
+ args[argsMetadata.index] = !argsMetadata.zodSchema
290
+ ? await request[argsMetadata.parser || "json"]()
291
+ : await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
292
+ break;
293
+ case contextArgsKey:
294
+ args[argsMetadata.index] = !argsMetadata.key ? contextHook : contextHook.get(argsMetadata.key);
295
+ break;
296
+ case requestHeadersArgsKey:
297
+ args[argsMetadata.index] = !argsMetadata.zodSchema
298
+ ? request.headers
299
+ : await argumentsResolution(request.headers.toJSON(), argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
300
+ break;
301
+ case responseHeadersArgsKey:
302
+ args[argsMetadata.index] = context[argsMetadata.type];
303
+ break;
304
+ case requestHeaderArgsKey:
305
+ args[argsMetadata.index] = !argsMetadata.zodSchema
306
+ ? request.headers.get(argsMetadata.key) || undefined
307
+ : await argumentsResolution(request.headers.get(argsMetadata.key) || undefined, argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
308
+ break;
309
+ case routeModelArgsKey:
310
+ break;
311
+ default:
312
+ args[argsMetadata.index] = !argsMetadata.zodSchema
313
+ ? context[argsMetadata.type]
314
+ : await argumentsResolution(context[argsMetadata.type], argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
315
+ break;
316
+ }
317
+ }
318
+ }
319
+ const guardResult = await collection.func(...args);
320
+ if (typeof guardResult !== "boolean" || !guardResult) {
321
+ throw new HttpClientError({
322
+ httpCode: 401,
323
+ message: "Unauthorization.",
324
+ data: undefined
180
325
  });
326
+ }
327
+ }
328
+ // Execute open dispatcher(s)
329
+ for (let i = 0; i < openDispatcherGroup.length; i++) {
330
+ const args = [];
331
+ const collection = openDispatcherGroup[i];
332
+ const metadata = Reflect.getOwnMetadata(argumentsKey, collection.class, collection.funcName) || {};
333
+ if (metadata) {
334
+ for (const [_key, argsMetadata] of Object.entries(metadata)) {
335
+ switch (argsMetadata.type) {
336
+ case requestArgsKey:
337
+ args[argsMetadata.index] = !argsMetadata.zodSchema
338
+ ? request
339
+ : await argumentsResolution(request, argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
340
+ break;
341
+ case requestBodyArgsKey:
342
+ args[argsMetadata.index] = !argsMetadata.zodSchema
343
+ ? await request[argsMetadata.parser || "json"]()
344
+ : await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
345
+ break;
346
+ case contextArgsKey:
347
+ args[argsMetadata.index] = !argsMetadata.key ? contextHook : contextHook.get(argsMetadata.key);
348
+ break;
349
+ case requestHeadersArgsKey:
350
+ args[argsMetadata.index] = !argsMetadata.zodSchema
351
+ ? request.headers
352
+ : await argumentsResolution(request.headers.toJSON(), argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
353
+ break;
354
+ case responseHeadersArgsKey:
355
+ args[argsMetadata.index] = context[argsMetadata.type];
356
+ break;
357
+ case requestHeaderArgsKey:
358
+ args[argsMetadata.index] = !argsMetadata.zodSchema
359
+ ? request.headers.get(argsMetadata.key) || undefined
360
+ : await argumentsResolution(request.headers.get(argsMetadata.key) || undefined, argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
361
+ break;
362
+ case paramArgsKey:
363
+ args[argsMetadata.index] = !argsMetadata.zodSchema
364
+ ? context[paramsArgsKey][argsMetadata.key] || undefined
365
+ : await argumentsResolution(context[paramsArgsKey][argsMetadata.key], argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
366
+ break;
367
+ case routeModelArgsKey:
368
+ args[argsMetadata.index] = context[routeModelArgsKey];
369
+ break;
370
+ default:
371
+ args[argsMetadata.index] = !argsMetadata.zodSchema
372
+ ? context[argsMetadata.type]
373
+ : await argumentsResolution(context[argsMetadata.type], argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
374
+ break;
375
+ }
376
+ }
377
+ }
378
+ context[responseBodyArgsKey] = await collection.func(...args);
379
+ }
380
+ // Execute controller action
381
+ const controllerActionArguments = [];
382
+ const controllerActionCollection = model;
383
+ const controllerActionMetadata = Reflect.getOwnMetadata(argumentsKey, controllerActionCollection.class, controllerActionCollection.funcName) || {};
384
+ if (controllerActionMetadata) {
385
+ for (const [_key, argsMetadata] of Object.entries(controllerActionMetadata)) {
386
+ switch (argsMetadata.type) {
387
+ case requestArgsKey:
388
+ controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
389
+ ? request
390
+ : await argumentsResolution(request, argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
391
+ break;
392
+ case requestBodyArgsKey:
393
+ controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
394
+ ? await request[argsMetadata.parser || "json"]()
395
+ : await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
396
+ break;
397
+ case contextArgsKey:
398
+ controllerActionArguments[argsMetadata.index] = !argsMetadata.key
399
+ ? contextHook
400
+ : contextHook.get(argsMetadata.key);
401
+ break;
402
+ case requestHeadersArgsKey:
403
+ controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
404
+ ? request.headers
405
+ : await argumentsResolution(request.headers.toJSON(), argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
406
+ break;
407
+ case responseHeadersArgsKey:
408
+ controllerActionArguments[argsMetadata.index] = context[argsMetadata.type];
409
+ break;
410
+ case requestHeaderArgsKey:
411
+ controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
412
+ ? request.headers.get(argsMetadata.key) || undefined
413
+ : await argumentsResolution(request.headers.get(argsMetadata.key) || undefined, argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
414
+ break;
415
+ case paramArgsKey:
416
+ controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
417
+ ? context[paramsArgsKey][argsMetadata.key] || undefined
418
+ : await argumentsResolution(context[paramsArgsKey][argsMetadata.key], argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
419
+ break;
420
+ case routeModelArgsKey:
421
+ controllerActionArguments[argsMetadata.index] = context[routeModelArgsKey];
422
+ break;
423
+ default:
424
+ controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
425
+ ? context[argsMetadata.type]
426
+ : await argumentsResolution(context[argsMetadata.type], argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
427
+ break;
428
+ }
429
+ }
430
+ }
431
+ context[responseBodyArgsKey] = await controllerActionCollection.func(...controllerActionArguments);
432
+ // Execute close dispatcher(s)
433
+ for (let i = 0; i < closeDispatcherGroup.length; i++) {
434
+ const args = [];
435
+ const collection = closeDispatcherGroup[i];
436
+ const metadata = Reflect.getOwnMetadata(argumentsKey, collection.class, collection.funcName) || {};
437
+ if (metadata) {
438
+ for (const [_key, argsMetadata] of Object.entries(metadata)) {
439
+ switch (argsMetadata.type) {
440
+ case requestArgsKey:
441
+ args[argsMetadata.index] = !argsMetadata.zodSchema
442
+ ? request
443
+ : await argumentsResolution(request, argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
444
+ break;
445
+ case requestBodyArgsKey:
446
+ args[argsMetadata.index] = !argsMetadata.zodSchema
447
+ ? await request[argsMetadata.parser || "json"]()
448
+ : await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
449
+ break;
450
+ case contextArgsKey:
451
+ args[argsMetadata.index] = !argsMetadata.key ? contextHook : contextHook.get(argsMetadata.key);
452
+ break;
453
+ case requestHeadersArgsKey:
454
+ args[argsMetadata.index] = !argsMetadata.zodSchema
455
+ ? request.headers
456
+ : await argumentsResolution(request.headers.toJSON(), argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
457
+ break;
458
+ case responseHeadersArgsKey:
459
+ args[argsMetadata.index] = context[argsMetadata.type];
460
+ break;
461
+ case requestHeaderArgsKey:
462
+ args[argsMetadata.index] = !argsMetadata.zodSchema
463
+ ? request.headers.get(argsMetadata.key) || undefined
464
+ : await argumentsResolution(request.headers.get(argsMetadata.key) || undefined, argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
465
+ break;
466
+ case paramArgsKey:
467
+ args[argsMetadata.index] = !argsMetadata.zodSchema
468
+ ? context[paramsArgsKey][argsMetadata.key] || undefined
469
+ : await argumentsResolution(context[paramsArgsKey][argsMetadata.key], argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
470
+ break;
471
+ case routeModelArgsKey:
472
+ args[argsMetadata.index] = context[routeModelArgsKey];
473
+ break;
474
+ default:
475
+ args[argsMetadata.index] = !argsMetadata.zodSchema
476
+ ? context[argsMetadata.type]
477
+ : await argumentsResolution(context[argsMetadata.type], argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
478
+ break;
479
+ }
480
+ }
481
+ }
482
+ await collection.func(...args);
483
+ }
484
+ // Execute end middleware(s)
485
+ for (let i = 0; i < endMiddlewareGroup.length; i++) {
486
+ const args = [];
487
+ const collection = endMiddlewareGroup[i];
488
+ const metadata = Reflect.getOwnMetadata(argumentsKey, collection.class, collection.funcName) || {};
489
+ if (metadata) {
490
+ for (const [_key, argsMetadata] of Object.entries(metadata)) {
491
+ switch (argsMetadata.type) {
492
+ case requestArgsKey:
493
+ args[argsMetadata.index] = !argsMetadata.zodSchema
494
+ ? request
495
+ : await argumentsResolution(request, argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
496
+ break;
497
+ case requestBodyArgsKey:
498
+ args[argsMetadata.index] = !argsMetadata.zodSchema
499
+ ? await request[argsMetadata.parser || "json"]()
500
+ : await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
501
+ break;
502
+ case contextArgsKey:
503
+ args[argsMetadata.index] = !argsMetadata.key ? contextHook : contextHook.get(argsMetadata.key);
504
+ break;
505
+ case requestHeadersArgsKey:
506
+ args[argsMetadata.index] = !argsMetadata.zodSchema
507
+ ? request.headers
508
+ : await argumentsResolution(request.headers.toJSON(), argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
509
+ break;
510
+ case responseHeadersArgsKey:
511
+ args[argsMetadata.index] = context[argsMetadata.type];
512
+ break;
513
+ case requestHeaderArgsKey:
514
+ args[argsMetadata.index] = !argsMetadata.zodSchema
515
+ ? request.headers.get(argsMetadata.key) || undefined
516
+ : await argumentsResolution(request.headers.get(argsMetadata.key) || undefined, argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
517
+ break;
518
+ case routeModelArgsKey:
519
+ break;
520
+ default:
521
+ args[argsMetadata.index] = !argsMetadata.zodSchema
522
+ ? !(argsMetadata.type in context)
523
+ ? undefined
524
+ : context[argsMetadata.type]
525
+ : await argumentsResolution(!(argsMetadata.type in context) ? undefined : context[argsMetadata.type], argsMetadata.zodSchema, argsMetadata.index, collection.funcName);
526
+ break;
527
+ }
528
+ }
529
+ }
530
+ context[responseBodyArgsKey] = await collection.func(...args);
531
+ }
532
+ if (context[responseBodyArgsKey] instanceof Response) {
533
+ return responseConverter(context[responseBodyArgsKey]);
534
+ }
535
+ return responseConverter(new Response(!context[responseBodyArgsKey]
536
+ ? undefined
537
+ : JSON.stringify({
538
+ httpCode: 200,
539
+ message: "SUCCESS",
540
+ data: context[responseBodyArgsKey]
541
+ }), {
542
+ status: !context[responseBodyArgsKey] ? 204 : 200,
543
+ statusText: "SUCCESS",
544
+ headers: context[responseHeadersArgsKey]
545
+ }));
546
+ };
547
+ export const BoolFactory = async (modules, options) => {
548
+ try {
549
+ const modulesConverted = !Array.isArray(modules) ? [modules] : modules;
550
+ const { allowLogsMethods } = Object.freeze({
551
+ allowLogsMethods: options?.log?.methods
552
+ });
553
+ const moduleResolutions = await Promise.all(modulesConverted.map((moduleConverted) => moduleResolution(moduleConverted, options)));
554
+ const availableModuleResolutions = moduleResolutions.filter((moduleResolution) => typeof moduleResolution !== "undefined");
555
+ const prefixs = [
556
+ ...new Set(availableModuleResolutions.map((availableModuleResolution) => availableModuleResolution.prefix))
557
+ ];
558
+ if (prefixs.length !== availableModuleResolutions.length) {
559
+ throw Error(`Module prefix should be unique.`);
560
+ }
181
561
  Bun.serve({
182
562
  port: options.port,
183
563
  fetch: async (request, server) => {
184
- const { headers } = request;
185
564
  const start = performance.now();
186
565
  const url = new URL(request.url);
187
- const context = {
188
- [requestHeadersArgsKey]: headers,
189
- [responseHeadersArgsKey]: new Headers(),
190
- [queryArgsKey]: Qs.parse(url.searchParams.toString(), options.queryParser)
191
- };
192
- const contextHook = {
193
- get(key) {
194
- return context[key];
195
- },
196
- set(key, value) {
197
- if (key in context) {
198
- throw Error(`${String(key)} already exists in context.`);
199
- }
200
- context[key] = value;
201
- }
202
- };
566
+ const query = Qs.parse(url.searchParams.toString(), options.queryParser);
203
567
  try {
204
- // Execute middleware(s)
205
- for (let i = 0; i < middlewareGroup.length; i++) {
206
- const middlewareArguments = [];
207
- const middlewareCollection = middlewareGroup[i];
208
- const middlewareMetadata = Reflect.getOwnMetadata(argumentsKey, middlewareCollection.class, middlewareCollection.funcName) ||
209
- {};
210
- if (middlewareMetadata) {
211
- for (const [_key, argsMetadata] of Object.entries(middlewareMetadata)) {
212
- switch (argsMetadata.type) {
213
- case requestArgsKey:
214
- middlewareArguments[argsMetadata.index] = !argsMetadata.zodSchema
215
- ? request
216
- : await argumentsResolution(request, argsMetadata.zodSchema, argsMetadata.index, middlewareCollection.funcName);
217
- break;
218
- case bodyArgsKey:
219
- middlewareArguments[argsMetadata.index] = !argsMetadata.zodSchema
220
- ? await request[argsMetadata.parser || "json"]()
221
- : await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, middlewareCollection.funcName);
222
- break;
223
- case contextArgsKey:
224
- middlewareArguments[argsMetadata.index] = !argsMetadata.key
225
- ? contextHook
226
- : contextHook.get(argsMetadata.key);
227
- break;
228
- case requestHeadersArgsKey:
229
- middlewareArguments[argsMetadata.index] = !argsMetadata.zodSchema
230
- ? headers
231
- : await argumentsResolution(headers.toJSON(), argsMetadata.zodSchema, argsMetadata.index, middlewareCollection.funcName);
232
- break;
233
- case responseHeadersArgsKey:
234
- middlewareArguments[argsMetadata.index] = context[argsMetadata.type];
235
- break;
236
- case requestHeaderArgsKey:
237
- middlewareArguments[argsMetadata.index] = !argsMetadata.zodSchema
238
- ? headers.get(argsMetadata.key) || undefined
239
- : await argumentsResolution(headers.get(argsMetadata.key) || undefined, argsMetadata.zodSchema, argsMetadata.index, middlewareCollection.funcName);
240
- break;
241
- case routeModelArgsKey:
242
- break;
243
- default:
244
- middlewareArguments[argsMetadata.index] = !argsMetadata.zodSchema
245
- ? !(argsMetadata.type in context)
246
- ? undefined
247
- : context[argsMetadata.type]
248
- : await argumentsResolution(!(argsMetadata.type in context) ? undefined : context[argsMetadata.type], argsMetadata.zodSchema, argsMetadata.index, middlewareCollection.funcName);
249
- break;
250
- }
251
- }
252
- }
253
- const middlewareResult = await middlewareCollection.func(...middlewareArguments);
254
- if (!(middlewareResult instanceof Response)) {
255
- continue;
256
- }
257
- return middlewareResult;
258
- }
259
- // Execute guard(s)
260
- for (let i = 0; i < guardGroup.length; i++) {
261
- const guardArguments = [];
262
- const guardCollection = guardGroup[i];
263
- const guardMetadata = Reflect.getOwnMetadata(argumentsKey, guardCollection.class, guardCollection.funcName) || {};
264
- if (guardMetadata) {
265
- for (const [_key, argsMetadata] of Object.entries(guardMetadata)) {
266
- switch (argsMetadata.type) {
267
- case requestArgsKey:
268
- guardArguments[argsMetadata.index] = !argsMetadata.zodSchema
269
- ? request
270
- : await argumentsResolution(request, argsMetadata.zodSchema, argsMetadata.index, guardCollection.funcName);
271
- break;
272
- case bodyArgsKey:
273
- guardArguments[argsMetadata.index] = !argsMetadata.zodSchema
274
- ? await request[argsMetadata.parser || "json"]()
275
- : await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, guardCollection.funcName);
276
- break;
277
- case contextArgsKey:
278
- guardArguments[argsMetadata.index] = !argsMetadata.key
279
- ? contextHook
280
- : contextHook.get(argsMetadata.key);
281
- break;
282
- case requestHeadersArgsKey:
283
- guardArguments[argsMetadata.index] = !argsMetadata.zodSchema
284
- ? headers
285
- : await argumentsResolution(headers.toJSON(), argsMetadata.zodSchema, argsMetadata.index, guardCollection.funcName);
286
- break;
287
- case responseHeadersArgsKey:
288
- guardArguments[argsMetadata.index] = context[argsMetadata.type];
289
- break;
290
- case requestHeaderArgsKey:
291
- guardArguments[argsMetadata.index] = !argsMetadata.zodSchema
292
- ? headers.get(argsMetadata.key) || undefined
293
- : await argumentsResolution(headers.get(argsMetadata.key) || undefined, argsMetadata.zodSchema, argsMetadata.index, guardCollection.funcName);
294
- break;
295
- case routeModelArgsKey:
296
- break;
297
- default:
298
- guardArguments[argsMetadata.index] = !argsMetadata.zodSchema
299
- ? context[argsMetadata.type]
300
- : await argumentsResolution(context[argsMetadata.type], argsMetadata.zodSchema, argsMetadata.index, guardCollection.funcName);
301
- break;
302
- }
303
- }
304
- }
305
- const guardResult = await guardCollection.func(...guardArguments);
306
- if (typeof guardResult !== "boolean" || !guardResult) {
307
- throw new HttpClientError({
308
- httpCode: 401,
309
- message: "Unauthorization.",
310
- data: undefined
568
+ let collection;
569
+ for (let i = 0; i < availableModuleResolutions.length; i++) {
570
+ const routeResult = availableModuleResolutions[i].routerGroup.find(url.pathname, request.method);
571
+ if (routeResult) {
572
+ collection = Object.freeze({
573
+ route: routeResult,
574
+ resolution: availableModuleResolutions[i]
311
575
  });
576
+ break;
312
577
  }
313
578
  }
314
- const result = routerGroup.find(url.pathname, request.method);
315
- if (!result) {
316
- throw new HttpClientError({
579
+ if (!collection) {
580
+ return responseConverter(new Response(JSON.stringify({
317
581
  httpCode: 404,
318
- message: "Route not found.",
582
+ message: "Route not found",
319
583
  data: undefined
320
- });
321
- }
322
- context[paramsArgsKey] = result.parameters;
323
- context[routeModelArgsKey] = result.model;
324
- let responseBody = undefined;
325
- // Execute before dispatcher(s)
326
- for (let i = 0; i < beforeDispatcherGroup.length; i++) {
327
- const beforeDispatcherArguments = [];
328
- const beforeDispatcherCollection = beforeDispatcherGroup[i];
329
- const beforeDispatcherMetadata = Reflect.getOwnMetadata(argumentsKey, beforeDispatcherCollection.class, beforeDispatcherCollection.funcName) || {};
330
- if (beforeDispatcherMetadata) {
331
- for (const [_key, argsMetadata] of Object.entries(beforeDispatcherMetadata)) {
332
- switch (argsMetadata.type) {
333
- case requestArgsKey:
334
- beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
335
- ? request
336
- : await argumentsResolution(request, argsMetadata.zodSchema, argsMetadata.index, beforeDispatcherCollection.funcName);
337
- break;
338
- case bodyArgsKey:
339
- beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
340
- ? await request[argsMetadata.parser || "json"]()
341
- : await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, beforeDispatcherCollection.funcName);
342
- break;
343
- case contextArgsKey:
344
- beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.key
345
- ? contextHook
346
- : contextHook.get(argsMetadata.key);
347
- break;
348
- case requestHeadersArgsKey:
349
- beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
350
- ? headers
351
- : await argumentsResolution(headers.toJSON(), argsMetadata.zodSchema, argsMetadata.index, beforeDispatcherCollection.funcName);
352
- break;
353
- case responseHeadersArgsKey:
354
- beforeDispatcherArguments[argsMetadata.index] = context[argsMetadata.type];
355
- break;
356
- case requestHeaderArgsKey:
357
- beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
358
- ? headers.get(argsMetadata.key) || undefined
359
- : await argumentsResolution(headers.get(argsMetadata.key) || undefined, argsMetadata.zodSchema, argsMetadata.index, beforeDispatcherCollection.funcName);
360
- break;
361
- case paramArgsKey:
362
- beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
363
- ? context[paramArgsKey][argsMetadata.key] || undefined
364
- : await argumentsResolution(context[paramArgsKey][argsMetadata.key], argsMetadata.zodSchema, argsMetadata.index, beforeDispatcherCollection.funcName);
365
- break;
366
- case routeModelArgsKey:
367
- beforeDispatcherArguments[argsMetadata.index] = context[routeModelArgsKey];
368
- break;
369
- default:
370
- beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
371
- ? context[argsMetadata.type]
372
- : await argumentsResolution(context[argsMetadata.type], argsMetadata.zodSchema, argsMetadata.index, beforeDispatcherCollection.funcName);
373
- break;
374
- }
375
- }
376
- }
377
- await beforeDispatcherCollection.func(...beforeDispatcherArguments);
378
- }
379
- // Execute controller action
380
- const controllerActionArguments = [];
381
- const controllerActionCollection = result.model;
382
- const controllerActionMetadata = Reflect.getOwnMetadata(argumentsKey, controllerActionCollection.class, controllerActionCollection.funcName) || {};
383
- if (controllerActionMetadata) {
384
- for (const [_key, argsMetadata] of Object.entries(controllerActionMetadata)) {
385
- switch (argsMetadata.type) {
386
- case requestArgsKey:
387
- controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
388
- ? request
389
- : await argumentsResolution(request, argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
390
- break;
391
- case bodyArgsKey:
392
- controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
393
- ? await request[argsMetadata.parser || "json"]()
394
- : await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
395
- break;
396
- case contextArgsKey:
397
- controllerActionArguments[argsMetadata.index] = !argsMetadata.key
398
- ? contextHook
399
- : contextHook.get(argsMetadata.key);
400
- break;
401
- case requestHeadersArgsKey:
402
- controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
403
- ? headers
404
- : await argumentsResolution(headers.toJSON(), argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
405
- break;
406
- case responseHeadersArgsKey:
407
- controllerActionArguments[argsMetadata.index] = context[argsMetadata.type];
408
- break;
409
- case requestHeaderArgsKey:
410
- controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
411
- ? headers.get(argsMetadata.key) || undefined
412
- : await argumentsResolution(headers.get(argsMetadata.key) || undefined, argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
413
- break;
414
- case paramArgsKey:
415
- controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
416
- ? context[paramArgsKey][argsMetadata.key] || undefined
417
- : await argumentsResolution(context[paramArgsKey][argsMetadata.key], argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
418
- break;
419
- case routeModelArgsKey:
420
- controllerActionArguments[argsMetadata.index] = context[routeModelArgsKey];
421
- break;
422
- default:
423
- controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
424
- ? context[argsMetadata.type]
425
- : await argumentsResolution(context[argsMetadata.type], argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
426
- break;
427
- }
428
- }
429
- }
430
- responseBody = await controllerActionCollection.func(...controllerActionArguments);
431
- // Execute after dispatcher(s)
432
- for (let i = 0; i < afterDispatcherGroup.length; i++) {
433
- const afterDispatcherArguments = [];
434
- const afterDispatcherCollection = afterDispatcherGroup[i];
435
- const afterDispatcherMetadata = Reflect.getOwnMetadata(argumentsKey, afterDispatcherCollection.class, afterDispatcherCollection.funcName) || {};
436
- if (afterDispatcherMetadata) {
437
- for (const [_key, argsMetadata] of Object.entries(afterDispatcherMetadata)) {
438
- switch (argsMetadata.type) {
439
- case requestArgsKey:
440
- afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
441
- ? request
442
- : await argumentsResolution(request, argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
443
- break;
444
- case bodyArgsKey:
445
- afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
446
- ? await request[argsMetadata.parser || "json"]()
447
- : await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
448
- break;
449
- case contextArgsKey:
450
- afterDispatcherArguments[argsMetadata.index] = !argsMetadata.key
451
- ? contextHook
452
- : contextHook.get(argsMetadata.key);
453
- break;
454
- case requestHeadersArgsKey:
455
- afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
456
- ? headers
457
- : await argumentsResolution(headers.toJSON(), argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
458
- break;
459
- case responseHeadersArgsKey:
460
- afterDispatcherArguments[argsMetadata.index] = context[argsMetadata.type];
461
- break;
462
- case requestHeaderArgsKey:
463
- afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
464
- ? headers.get(argsMetadata.key) || undefined
465
- : await argumentsResolution(headers.get(argsMetadata.key) || undefined, argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
466
- break;
467
- case paramArgsKey:
468
- afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
469
- ? context[paramArgsKey][argsMetadata.key] || undefined
470
- : await argumentsResolution(context[paramArgsKey][argsMetadata.key], argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
471
- break;
472
- case routeModelArgsKey:
473
- afterDispatcherArguments[argsMetadata.index] = context[routeModelArgsKey];
474
- break;
475
- default:
476
- afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
477
- ? context[argsMetadata.type]
478
- : await argumentsResolution(context[argsMetadata.type], argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
479
- break;
480
- }
481
- }
482
- }
483
- await afterDispatcherCollection.func(...afterDispatcherArguments);
584
+ })));
484
585
  }
485
- // Set default header(s)
486
- context[responseHeadersArgsKey].set("X-Powered-By", "Bool Typescript");
487
- return responseBody instanceof Response
488
- ? responseBody
489
- : new Response(!responseBody
490
- ? undefined
491
- : JSON.stringify({
492
- httpCode: 200,
493
- message: "SUCCESS",
494
- data: responseBody
495
- }), {
496
- status: !responseBody ? 204 : 200,
497
- statusText: "SUCCESS",
498
- headers: context[responseHeadersArgsKey]
499
- });
586
+ return await fetcher({
587
+ request,
588
+ server
589
+ }, {
590
+ query: query,
591
+ route: collection.route,
592
+ moduleResolution: collection.resolution
593
+ }, options);
500
594
  }
501
595
  catch (error) {
502
596
  options.debug && console.error(error);
503
- // Set default header(s)
504
- context[responseHeadersArgsKey].set("X-Powered-By", "Bool Typescript");
505
- return jsonErrorInfer(error, context[responseHeadersArgsKey]);
597
+ return responseConverter(jsonErrorInfer(error));
506
598
  }
507
599
  finally {
508
600
  if (allowLogsMethods) {
@@ -515,7 +607,7 @@ export const BoolFactory = async (target, options) => {
515
607
  "<Unknown>"}`.yellow;
516
608
  const convertedTime = `${Math.round((end - start + Number.EPSILON) * 10 ** 2) / 10 ** 2}ms`.yellow;
517
609
  allowLogsMethods.includes(request.method.toUpperCase()) &&
518
- console.info(`PID: ${convertedPID} - Method: ${convertedMethod} - IP: ${convertedReqIp} - ${url.pathname.blue} - Time: ${convertedTime}`);
610
+ console.info(`PID: ${convertedPID} - Method: ${convertedMethod} - IP: ${convertedReqIp} - ${new URL(request.url).pathname.blue} - Time: ${convertedTime}`);
519
611
  }
520
612
  }
521
613
  }