@bool-ts/core 1.6.8 → 1.6.10

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.
@@ -2,7 +2,7 @@ import type { IService } from "./interfaces";
2
2
 
3
3
  import * as Zod from "zod";
4
4
 
5
- import { Body, Controller, Delete, Get, Inject, Options, Params, Patch, Post, Put, Param, Query } from "../src";
5
+ import { Body, Controller, Delete, Get, Inject, Options, Param, Params, Patch, Post, Put, Query, RequestHeaders } from "../src";
6
6
  import { TestService } from "./service";
7
7
 
8
8
  const postParamsSchema = Zod.object({
@@ -31,6 +31,10 @@ const stringSchema = Zod.object({}).refine(async (val) => {
31
31
  return val;
32
32
  });
33
33
 
34
+ const headersSchema = Zod.object({
35
+ "content-type": Zod.string()
36
+ });
37
+
34
38
  @Controller("test")
35
39
  export class TestController {
36
40
  constructor(
@@ -48,6 +52,8 @@ export class TestController {
48
52
 
49
53
  @Post("abc/:id/provider/:providerId")
50
54
  public async post(
55
+ @RequestHeaders(headersSchema)
56
+ headers: Zod.infer<typeof headersSchema>,
51
57
  @Params()
52
58
  params: any,
53
59
  @Query()
@@ -55,7 +61,7 @@ export class TestController {
55
61
  @Body(bodySchema)
56
62
  body: Zod.infer<typeof bodySchema>
57
63
  ) {
58
- console.log("req.headers", query);
64
+ console.log("req.headers", headers);
59
65
  console.log("===========================");
60
66
  }
61
67
 
@@ -1,9 +1,14 @@
1
1
  import * as Zod from "zod";
2
- import { bodyArgsKey, contextArgsKey, paramArgsKey, paramsArgsKey, queryArgsKey, requestArgsKey, requestHeadersArgsKey, responseHeadersArgsKey } from "../keys";
2
+ import { bodyArgsKey, contextArgsKey, paramArgsKey, paramsArgsKey, queryArgsKey, requestArgsKey, requestHeaderArgsKey, requestHeadersArgsKey, responseHeadersArgsKey } from "../keys";
3
3
  export type TArgumentsMetadata = {
4
4
  index: number;
5
5
  type: typeof requestHeadersArgsKey;
6
6
  zodSchema?: Zod.Schema;
7
+ } | {
8
+ index: number;
9
+ type: typeof requestHeaderArgsKey;
10
+ key: string;
11
+ zodSchema?: Zod.Schema;
7
12
  } | {
8
13
  index: number;
9
14
  type: typeof bodyArgsKey;
@@ -29,17 +34,17 @@ export type TArgumentsMetadata = {
29
34
  } | {
30
35
  index: number;
31
36
  type: typeof responseHeadersArgsKey;
32
- zodSchema?: Zod.Schema;
33
37
  } | {
34
38
  index: number;
35
39
  type: typeof contextArgsKey;
36
- injectKey?: symbol;
40
+ key?: symbol;
37
41
  };
38
- export declare const RequestHeaders: (zodSchema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
39
- export declare const Body: (zodSchema?: Zod.Schema, parser?: "arrayBuffer" | "blob" | "formData" | "json" | "text") => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
40
- export declare const Params: (zodSchema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
41
- export declare const Param: (key: string, zodSchema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
42
- export declare const Query: (zodSchema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
43
- export declare const Request: (zodSchema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
44
- export declare const ResponseHeaders: (zodSchema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
45
- export declare const Context: (injectKey?: symbol) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
42
+ export declare const RequestHeaders: (schema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
43
+ export declare const RequestHeader: (key: string, schema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
44
+ export declare const Body: (schema?: Zod.Schema, parser?: "arrayBuffer" | "blob" | "formData" | "json" | "text") => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
45
+ export declare const Params: (schema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
46
+ export declare const Param: (key: string, schema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
47
+ export declare const Query: (schema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
48
+ export declare const Request: (schema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
49
+ export declare const ResponseHeaders: () => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
50
+ export declare const Context: (key?: symbol) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
@@ -1,6 +1,6 @@
1
1
  import * as Zod from "zod";
2
- import { argumentsKey, bodyArgsKey, contextArgsKey, paramArgsKey, paramsArgsKey, queryArgsKey, requestArgsKey, requestHeadersArgsKey, responseHeadersArgsKey } from "../keys";
3
- export const RequestHeaders = (zodSchema) => (target, methodName, parameterIndex) => {
2
+ import { argumentsKey, bodyArgsKey, contextArgsKey, paramArgsKey, paramsArgsKey, queryArgsKey, requestArgsKey, requestHeaderArgsKey, requestHeadersArgsKey, responseHeadersArgsKey } from "../keys";
3
+ export const RequestHeaders = (schema) => (target, methodName, parameterIndex) => {
4
4
  if (!methodName) {
5
5
  return;
6
6
  }
@@ -8,11 +8,24 @@ export const RequestHeaders = (zodSchema) => (target, methodName, parameterIndex
8
8
  requestHeadersMetadata[`argumentIndexes.${parameterIndex}`] = {
9
9
  index: parameterIndex,
10
10
  type: requestHeadersArgsKey,
11
- zodSchema: zodSchema
11
+ zodSchema: schema
12
12
  };
13
13
  Reflect.defineMetadata(argumentsKey, requestHeadersMetadata, target.constructor, methodName);
14
14
  };
15
- export const Body = (zodSchema, parser) => (target, methodName, parameterIndex) => {
15
+ export const RequestHeader = (key, schema) => (target, methodName, parameterIndex) => {
16
+ if (!methodName) {
17
+ return;
18
+ }
19
+ const requestHeaderMetadata = Reflect.getOwnMetadata(argumentsKey, target.constructor, methodName) || {};
20
+ requestHeaderMetadata[`argumentIndexes.${parameterIndex}`] = {
21
+ index: parameterIndex,
22
+ type: requestHeaderArgsKey,
23
+ key: key,
24
+ zodSchema: schema
25
+ };
26
+ Reflect.defineMetadata(argumentsKey, requestHeaderMetadata, target.constructor, methodName);
27
+ };
28
+ export const Body = (schema, parser) => (target, methodName, parameterIndex) => {
16
29
  if (!methodName) {
17
30
  return;
18
31
  }
@@ -20,12 +33,12 @@ export const Body = (zodSchema, parser) => (target, methodName, parameterIndex)
20
33
  bodyMetadata[`argumentIndexes.${parameterIndex}`] = {
21
34
  index: parameterIndex,
22
35
  type: bodyArgsKey,
23
- zodSchema: zodSchema,
36
+ zodSchema: schema,
24
37
  parser: parser
25
38
  };
26
39
  Reflect.defineMetadata(argumentsKey, bodyMetadata, target.constructor, methodName);
27
40
  };
28
- export const Params = (zodSchema) => (target, methodName, parameterIndex) => {
41
+ export const Params = (schema) => (target, methodName, parameterIndex) => {
29
42
  if (!methodName) {
30
43
  return;
31
44
  }
@@ -33,11 +46,11 @@ export const Params = (zodSchema) => (target, methodName, parameterIndex) => {
33
46
  paramsMetadata[`argumentIndexes.${parameterIndex}`] = {
34
47
  index: parameterIndex,
35
48
  type: paramsArgsKey,
36
- zodSchema: zodSchema
49
+ zodSchema: schema
37
50
  };
38
51
  Reflect.defineMetadata(argumentsKey, paramsMetadata, target.constructor, methodName);
39
52
  };
40
- export const Param = (key, zodSchema) => (target, methodName, parameterIndex) => {
53
+ export const Param = (key, schema) => (target, methodName, parameterIndex) => {
41
54
  if (!methodName) {
42
55
  return;
43
56
  }
@@ -46,11 +59,11 @@ export const Param = (key, zodSchema) => (target, methodName, parameterIndex) =>
46
59
  index: parameterIndex,
47
60
  type: paramArgsKey,
48
61
  key: key,
49
- zodSchema: zodSchema
62
+ zodSchema: schema
50
63
  };
51
64
  Reflect.defineMetadata(argumentsKey, paramMetadata, target.constructor, methodName);
52
65
  };
53
- export const Query = (zodSchema) => (target, methodName, parameterIndex) => {
66
+ export const Query = (schema) => (target, methodName, parameterIndex) => {
54
67
  if (!methodName) {
55
68
  return;
56
69
  }
@@ -58,11 +71,11 @@ export const Query = (zodSchema) => (target, methodName, parameterIndex) => {
58
71
  queryMetadata[`argumentIndexes.${parameterIndex}`] = {
59
72
  index: parameterIndex,
60
73
  type: queryArgsKey,
61
- zodSchema: zodSchema
74
+ zodSchema: schema
62
75
  };
63
76
  Reflect.defineMetadata(argumentsKey, queryMetadata, target.constructor, methodName);
64
77
  };
65
- export const Request = (zodSchema) => (target, methodName, parameterIndex) => {
78
+ export const Request = (schema) => (target, methodName, parameterIndex) => {
66
79
  if (!methodName) {
67
80
  return;
68
81
  }
@@ -70,23 +83,22 @@ export const Request = (zodSchema) => (target, methodName, parameterIndex) => {
70
83
  requestMetadata[`argumentIndexes.${parameterIndex}`] = {
71
84
  index: parameterIndex,
72
85
  type: requestArgsKey,
73
- zodSchema: zodSchema
86
+ zodSchema: schema
74
87
  };
75
88
  Reflect.defineMetadata(argumentsKey, requestMetadata, target.constructor, methodName);
76
89
  };
77
- export const ResponseHeaders = (zodSchema) => (target, methodName, parameterIndex) => {
90
+ export const ResponseHeaders = () => (target, methodName, parameterIndex) => {
78
91
  if (!methodName) {
79
92
  return;
80
93
  }
81
94
  const responseHeadersMetadata = Reflect.getOwnMetadata(argumentsKey, target.constructor, methodName) || {};
82
95
  responseHeadersMetadata[`argumentIndexes.${parameterIndex}`] = {
83
96
  index: parameterIndex,
84
- type: responseHeadersArgsKey,
85
- zodSchema: zodSchema
97
+ type: responseHeadersArgsKey
86
98
  };
87
99
  Reflect.defineMetadata(argumentsKey, responseHeadersMetadata, target.constructor, methodName);
88
100
  };
89
- export const Context = (injectKey) => (target, methodName, parameterIndex) => {
101
+ export const Context = (key) => (target, methodName, parameterIndex) => {
90
102
  if (!methodName) {
91
103
  return;
92
104
  }
@@ -94,7 +106,7 @@ export const Context = (injectKey) => (target, methodName, parameterIndex) => {
94
106
  responseHeadersMetadata[`argumentIndexes.${parameterIndex}`] = {
95
107
  index: parameterIndex,
96
108
  type: contextArgsKey,
97
- injectKey: injectKey
109
+ key: key
98
110
  };
99
111
  Reflect.defineMetadata(argumentsKey, responseHeadersMetadata, target.constructor, methodName);
100
112
  };
@@ -1,4 +1,4 @@
1
- export { Body, Context, Param, Params, Query, Request, RequestHeaders, ResponseHeaders } from "./arguments";
1
+ export { Body, Context, Param, Params, Query, Request, RequestHeader, RequestHeaders, ResponseHeaders } from "./arguments";
2
2
  export { Controller } from "./controller";
3
3
  export { Dispatcher } from "./dispatcher";
4
4
  export { Guard } from "./guard";
@@ -1,4 +1,4 @@
1
- export { Body, Context, Param, Params, Query, Request, RequestHeaders, ResponseHeaders } from "./arguments";
1
+ export { Body, Context, Param, Params, Query, Request, RequestHeader, RequestHeaders, ResponseHeaders } from "./arguments";
2
2
  export { Controller } from "./controller";
3
3
  export { Dispatcher } from "./dispatcher";
4
4
  export { Guard } from "./guard";
@@ -4,7 +4,7 @@ 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, requestHeadersArgsKey, responseHeadersArgsKey } from "../keys";
7
+ import { argumentsKey, bodyArgsKey, configKey, contextArgsKey, controllerHttpKey, controllerKey, moduleKey, paramArgsKey, paramsArgsKey, queryArgsKey, requestArgsKey, requestHeaderArgsKey, requestHeadersArgsKey, responseHeadersArgsKey } from "../keys";
8
8
  import { Injector } from "./injector";
9
9
  export const controllerCreator = (controllerConstructor, group, prefix) => {
10
10
  if (!Reflect.getOwnMetadataKeys(controllerConstructor).includes(controllerKey)) {
@@ -221,9 +221,22 @@ export const BoolFactory = async (target, options) => {
221
221
  : await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, middlewareCollection.funcName);
222
222
  break;
223
223
  case contextArgsKey:
224
- middlewareArguments[argsMetadata.index] = !argsMetadata.injectKey
224
+ middlewareArguments[argsMetadata.index] = !argsMetadata.key
225
225
  ? contextHook
226
- : contextHook.get(argsMetadata.injectKey);
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);
227
240
  break;
228
241
  default:
229
242
  middlewareArguments[argsMetadata.index] = !argsMetadata.zodSchema
@@ -260,9 +273,22 @@ export const BoolFactory = async (target, options) => {
260
273
  : await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, guardCollection.funcName);
261
274
  break;
262
275
  case contextArgsKey:
263
- guardArguments[argsMetadata.index] = !argsMetadata.injectKey
276
+ guardArguments[argsMetadata.index] = !argsMetadata.key
264
277
  ? contextHook
265
- : contextHook.get(argsMetadata.injectKey);
278
+ : contextHook.get(argsMetadata.key);
279
+ break;
280
+ case requestHeadersArgsKey:
281
+ guardArguments[argsMetadata.index] = !argsMetadata.zodSchema
282
+ ? headers
283
+ : await argumentsResolution(headers.toJSON(), argsMetadata.zodSchema, argsMetadata.index, guardCollection.funcName);
284
+ break;
285
+ case responseHeadersArgsKey:
286
+ guardArguments[argsMetadata.index] = context[argsMetadata.type];
287
+ break;
288
+ case requestHeaderArgsKey:
289
+ guardArguments[argsMetadata.index] = !argsMetadata.zodSchema
290
+ ? headers.get(argsMetadata.key) || undefined
291
+ : await argumentsResolution(headers.get(argsMetadata.key) || undefined, argsMetadata.zodSchema, argsMetadata.index, guardCollection.funcName);
266
292
  break;
267
293
  default:
268
294
  guardArguments[argsMetadata.index] = !argsMetadata.zodSchema
@@ -309,15 +335,28 @@ export const BoolFactory = async (target, options) => {
309
335
  ? await request[argsMetadata.parser || "json"]()
310
336
  : await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, beforeDispatcherCollection.funcName);
311
337
  break;
312
- case paramArgsKey:
313
- beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
314
- ? context[paramsArgsKey]?.[argsMetadata.key]
315
- : await argumentsResolution(context[paramsArgsKey]?.[argsMetadata.key], argsMetadata.zodSchema, argsMetadata.index, beforeDispatcherCollection.funcName);
316
- break;
317
338
  case contextArgsKey:
318
- beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.injectKey
339
+ beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.key
319
340
  ? contextHook
320
- : contextHook.get(argsMetadata.injectKey);
341
+ : contextHook.get(argsMetadata.key);
342
+ break;
343
+ case requestHeadersArgsKey:
344
+ beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
345
+ ? headers
346
+ : await argumentsResolution(headers.toJSON(), argsMetadata.zodSchema, argsMetadata.index, beforeDispatcherCollection.funcName);
347
+ break;
348
+ case responseHeadersArgsKey:
349
+ beforeDispatcherArguments[argsMetadata.index] = context[argsMetadata.type];
350
+ break;
351
+ case requestHeaderArgsKey:
352
+ beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
353
+ ? headers.get(argsMetadata.key) || undefined
354
+ : await argumentsResolution(headers.get(argsMetadata.key) || undefined, argsMetadata.zodSchema, argsMetadata.index, beforeDispatcherCollection.funcName);
355
+ break;
356
+ case paramArgsKey:
357
+ beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
358
+ ? context[paramArgsKey][argsMetadata.key] || undefined
359
+ : await argumentsResolution(context[paramArgsKey][argsMetadata.key], argsMetadata.zodSchema, argsMetadata.index, beforeDispatcherCollection.funcName);
321
360
  break;
322
361
  default:
323
362
  beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
@@ -332,41 +371,53 @@ export const BoolFactory = async (target, options) => {
332
371
  // Execute controller action
333
372
  for (let i = 0; i < result.handlers.length; i++) {
334
373
  const controllerActionArguments = [];
335
- const controllerCollection = result.handlers[i];
336
- const handlerMetadata = Reflect.getOwnMetadata(argumentsKey, controllerCollection.class, controllerCollection.funcName) ||
337
- {};
374
+ const controllerActionCollection = result.handlers[i];
375
+ const handlerMetadata = Reflect.getOwnMetadata(argumentsKey, controllerActionCollection.class, controllerActionCollection.funcName) || {};
338
376
  if (handlerMetadata) {
339
377
  for (const [_key, argsMetadata] of Object.entries(handlerMetadata)) {
340
378
  switch (argsMetadata.type) {
341
379
  case requestArgsKey:
342
380
  controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
343
381
  ? request
344
- : await argumentsResolution(request, argsMetadata.zodSchema, argsMetadata.index, controllerCollection.funcName);
382
+ : await argumentsResolution(request, argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
345
383
  break;
346
384
  case bodyArgsKey:
347
385
  controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
348
386
  ? await request[argsMetadata.parser || "json"]()
349
- : await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, controllerCollection.funcName);
350
- break;
351
- case paramArgsKey:
352
- controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
353
- ? context[paramsArgsKey]?.[argsMetadata.key]
354
- : await argumentsResolution(context[paramsArgsKey]?.[argsMetadata.key], argsMetadata.zodSchema, argsMetadata.index, controllerCollection.funcName);
387
+ : await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
355
388
  break;
356
389
  case contextArgsKey:
357
- controllerActionArguments[argsMetadata.index] = !argsMetadata.injectKey
390
+ controllerActionArguments[argsMetadata.index] = !argsMetadata.key
358
391
  ? contextHook
359
- : contextHook.get(argsMetadata.injectKey);
392
+ : contextHook.get(argsMetadata.key);
393
+ break;
394
+ case requestHeadersArgsKey:
395
+ controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
396
+ ? headers
397
+ : await argumentsResolution(headers.toJSON(), argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
398
+ break;
399
+ case responseHeadersArgsKey:
400
+ controllerActionArguments[argsMetadata.index] = context[argsMetadata.type];
401
+ break;
402
+ case requestHeaderArgsKey:
403
+ controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
404
+ ? headers.get(argsMetadata.key) || undefined
405
+ : await argumentsResolution(headers.get(argsMetadata.key) || undefined, argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
406
+ break;
407
+ case paramArgsKey:
408
+ controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
409
+ ? context[paramArgsKey][argsMetadata.key] || undefined
410
+ : await argumentsResolution(context[paramArgsKey][argsMetadata.key], argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
360
411
  break;
361
412
  default:
362
413
  controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
363
414
  ? context[argsMetadata.type]
364
- : await argumentsResolution(context[argsMetadata.type], argsMetadata.zodSchema, argsMetadata.index, controllerCollection.funcName);
415
+ : await argumentsResolution(context[argsMetadata.type], argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
365
416
  break;
366
417
  }
367
418
  }
368
419
  }
369
- responseBody = await controllerCollection.func(...controllerActionArguments);
420
+ responseBody = await controllerActionCollection.func(...controllerActionArguments);
370
421
  }
371
422
  // Execute after dispatcher(s)
372
423
  for (let i = 0; i < afterDispatcherGroup.length; i++) {
@@ -386,22 +437,33 @@ export const BoolFactory = async (target, options) => {
386
437
  ? await request[argsMetadata.parser || "json"]()
387
438
  : await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
388
439
  break;
389
- case paramArgsKey:
390
- afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
391
- ? context[paramsArgsKey]?.[argsMetadata.key]
392
- : await argumentsResolution(context[paramsArgsKey]?.[argsMetadata.key], argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
393
- break;
394
440
  case contextArgsKey:
395
- afterDispatcherArguments[argsMetadata.index] = !argsMetadata.injectKey
441
+ afterDispatcherArguments[argsMetadata.index] = !argsMetadata.key
396
442
  ? contextHook
397
- : contextHook.get(argsMetadata.injectKey);
443
+ : contextHook.get(argsMetadata.key);
444
+ break;
445
+ case requestHeadersArgsKey:
446
+ afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
447
+ ? headers
448
+ : await argumentsResolution(headers.toJSON(), argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
449
+ break;
450
+ case responseHeadersArgsKey:
451
+ afterDispatcherArguments[argsMetadata.index] = context[argsMetadata.type];
452
+ break;
453
+ case requestHeaderArgsKey:
454
+ afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
455
+ ? headers.get(argsMetadata.key) || undefined
456
+ : await argumentsResolution(headers.get(argsMetadata.key) || undefined, argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
457
+ break;
458
+ case paramArgsKey:
459
+ afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
460
+ ? context[paramArgsKey][argsMetadata.key] || undefined
461
+ : await argumentsResolution(context[paramArgsKey][argsMetadata.key], argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
398
462
  break;
399
463
  default:
400
464
  afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
401
- ? !(argsMetadata.type in context)
402
- ? undefined
403
- : context[argsMetadata.type]
404
- : await argumentsResolution(!(argsMetadata.type in context) ? undefined : context[argsMetadata.type], argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
465
+ ? context[argsMetadata.type]
466
+ : await argumentsResolution(context[argsMetadata.type], argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
405
467
  break;
406
468
  }
407
469
  }
@@ -10,6 +10,7 @@ export declare const middlewareKey: unique symbol;
10
10
  export declare const moduleKey: unique symbol;
11
11
  export declare const controllerRouteZodSchemaKey: unique symbol;
12
12
  export declare const requestHeadersArgsKey: unique symbol;
13
+ export declare const requestHeaderArgsKey: unique symbol;
13
14
  export declare const bodyArgsKey: unique symbol;
14
15
  export declare const paramsArgsKey: unique symbol;
15
16
  export declare const paramArgsKey: unique symbol;
@@ -10,6 +10,7 @@ export const middlewareKey = Symbol("__bool:middleware__");
10
10
  export const moduleKey = Symbol("__bool:module__");
11
11
  export const controllerRouteZodSchemaKey = Symbol("__bool:controller.route.zodSchema__");
12
12
  export const requestHeadersArgsKey = Symbol("__bool:arguments:requestHeaders__");
13
+ export const requestHeaderArgsKey = Symbol("__bool:arguments:requestHeader__");
13
14
  export const bodyArgsKey = Symbol("__bool:arguments:body__");
14
15
  export const paramsArgsKey = Symbol("__bool:arguments:params__");
15
16
  export const paramArgsKey = Symbol("__bool:arguments:param__");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bool-ts/core",
3
- "version": "1.6.8",
3
+ "version": "1.6.10",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -7,6 +7,7 @@ import {
7
7
  paramsArgsKey,
8
8
  queryArgsKey,
9
9
  requestArgsKey,
10
+ requestHeaderArgsKey,
10
11
  requestHeadersArgsKey,
11
12
  responseHeadersArgsKey
12
13
  } from "../keys";
@@ -17,6 +18,12 @@ export type TArgumentsMetadata =
17
18
  type: typeof requestHeadersArgsKey;
18
19
  zodSchema?: Zod.Schema;
19
20
  }
21
+ | {
22
+ index: number;
23
+ type: typeof requestHeaderArgsKey;
24
+ key: string;
25
+ zodSchema?: Zod.Schema;
26
+ }
20
27
  | {
21
28
  index: number;
22
29
  type: typeof bodyArgsKey;
@@ -47,16 +54,15 @@ export type TArgumentsMetadata =
47
54
  | {
48
55
  index: number;
49
56
  type: typeof responseHeadersArgsKey;
50
- zodSchema?: Zod.Schema;
51
57
  }
52
58
  | {
53
59
  index: number;
54
60
  type: typeof contextArgsKey;
55
- injectKey?: symbol;
61
+ key?: symbol;
56
62
  };
57
63
 
58
64
  export const RequestHeaders =
59
- (zodSchema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
65
+ (schema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
60
66
  if (!methodName) {
61
67
  return;
62
68
  }
@@ -66,7 +72,7 @@ export const RequestHeaders =
66
72
  requestHeadersMetadata[`argumentIndexes.${parameterIndex}`] = {
67
73
  index: parameterIndex,
68
74
  type: requestHeadersArgsKey,
69
- zodSchema: zodSchema
75
+ zodSchema: schema
70
76
  } satisfies Extract<
71
77
  TArgumentsMetadata,
72
78
  {
@@ -77,8 +83,31 @@ export const RequestHeaders =
77
83
  Reflect.defineMetadata(argumentsKey, requestHeadersMetadata, target.constructor, methodName);
78
84
  };
79
85
 
86
+ export const RequestHeader =
87
+ (key: string, schema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
88
+ if (!methodName) {
89
+ return;
90
+ }
91
+
92
+ const requestHeaderMetadata = Reflect.getOwnMetadata(argumentsKey, target.constructor, methodName) || {};
93
+
94
+ requestHeaderMetadata[`argumentIndexes.${parameterIndex}`] = {
95
+ index: parameterIndex,
96
+ type: requestHeaderArgsKey,
97
+ key: key,
98
+ zodSchema: schema
99
+ } satisfies Extract<
100
+ TArgumentsMetadata,
101
+ {
102
+ type: typeof requestHeaderArgsKey;
103
+ }
104
+ >;
105
+
106
+ Reflect.defineMetadata(argumentsKey, requestHeaderMetadata, target.constructor, methodName);
107
+ };
108
+
80
109
  export const Body =
81
- (zodSchema?: Zod.Schema, parser?: "arrayBuffer" | "blob" | "formData" | "json" | "text") =>
110
+ (schema?: Zod.Schema, parser?: "arrayBuffer" | "blob" | "formData" | "json" | "text") =>
82
111
  (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
83
112
  if (!methodName) {
84
113
  return;
@@ -89,7 +118,7 @@ export const Body =
89
118
  bodyMetadata[`argumentIndexes.${parameterIndex}`] = {
90
119
  index: parameterIndex,
91
120
  type: bodyArgsKey,
92
- zodSchema: zodSchema,
121
+ zodSchema: schema,
93
122
  parser: parser
94
123
  } satisfies Extract<
95
124
  TArgumentsMetadata,
@@ -102,7 +131,7 @@ export const Body =
102
131
  };
103
132
 
104
133
  export const Params =
105
- (zodSchema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
134
+ (schema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
106
135
  if (!methodName) {
107
136
  return;
108
137
  }
@@ -112,7 +141,7 @@ export const Params =
112
141
  paramsMetadata[`argumentIndexes.${parameterIndex}`] = {
113
142
  index: parameterIndex,
114
143
  type: paramsArgsKey,
115
- zodSchema: zodSchema
144
+ zodSchema: schema
116
145
  } satisfies Extract<
117
146
  TArgumentsMetadata,
118
147
  {
@@ -124,8 +153,7 @@ export const Params =
124
153
  };
125
154
 
126
155
  export const Param =
127
- (key: string, zodSchema?: Zod.Schema) =>
128
- (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
156
+ (key: string, schema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
129
157
  if (!methodName) {
130
158
  return;
131
159
  }
@@ -136,7 +164,7 @@ export const Param =
136
164
  index: parameterIndex,
137
165
  type: paramArgsKey,
138
166
  key: key,
139
- zodSchema: zodSchema
167
+ zodSchema: schema
140
168
  } satisfies Extract<
141
169
  TArgumentsMetadata,
142
170
  {
@@ -148,7 +176,7 @@ export const Param =
148
176
  };
149
177
 
150
178
  export const Query =
151
- (zodSchema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
179
+ (schema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
152
180
  if (!methodName) {
153
181
  return;
154
182
  }
@@ -158,7 +186,7 @@ export const Query =
158
186
  queryMetadata[`argumentIndexes.${parameterIndex}`] = {
159
187
  index: parameterIndex,
160
188
  type: queryArgsKey,
161
- zodSchema: zodSchema
189
+ zodSchema: schema
162
190
  } satisfies Extract<
163
191
  TArgumentsMetadata,
164
192
  {
@@ -170,7 +198,7 @@ export const Query =
170
198
  };
171
199
 
172
200
  export const Request =
173
- (zodSchema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
201
+ (schema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
174
202
  if (!methodName) {
175
203
  return;
176
204
  }
@@ -180,7 +208,7 @@ export const Request =
180
208
  requestMetadata[`argumentIndexes.${parameterIndex}`] = {
181
209
  index: parameterIndex,
182
210
  type: requestArgsKey,
183
- zodSchema: zodSchema
211
+ zodSchema: schema
184
212
  } satisfies Extract<
185
213
  TArgumentsMetadata,
186
214
  {
@@ -191,46 +219,43 @@ export const Request =
191
219
  Reflect.defineMetadata(argumentsKey, requestMetadata, target.constructor, methodName);
192
220
  };
193
221
 
194
- export const ResponseHeaders =
195
- (zodSchema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
196
- if (!methodName) {
197
- return;
198
- }
199
-
200
- const responseHeadersMetadata = Reflect.getOwnMetadata(argumentsKey, target.constructor, methodName) || {};
201
-
202
- responseHeadersMetadata[`argumentIndexes.${parameterIndex}`] = {
203
- index: parameterIndex,
204
- type: responseHeadersArgsKey,
205
- zodSchema: zodSchema
206
- } satisfies Extract<
207
- TArgumentsMetadata,
208
- {
209
- type: typeof responseHeadersArgsKey;
210
- }
211
- >;
222
+ export const ResponseHeaders = () => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
223
+ if (!methodName) {
224
+ return;
225
+ }
212
226
 
213
- Reflect.defineMetadata(argumentsKey, responseHeadersMetadata, target.constructor, methodName);
214
- };
227
+ const responseHeadersMetadata = Reflect.getOwnMetadata(argumentsKey, target.constructor, methodName) || {};
215
228
 
216
- export const Context =
217
- (injectKey?: symbol) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
218
- if (!methodName) {
219
- return;
229
+ responseHeadersMetadata[`argumentIndexes.${parameterIndex}`] = {
230
+ index: parameterIndex,
231
+ type: responseHeadersArgsKey
232
+ } satisfies Extract<
233
+ TArgumentsMetadata,
234
+ {
235
+ type: typeof responseHeadersArgsKey;
220
236
  }
237
+ >;
238
+
239
+ Reflect.defineMetadata(argumentsKey, responseHeadersMetadata, target.constructor, methodName);
240
+ };
241
+
242
+ export const Context = (key?: symbol) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
243
+ if (!methodName) {
244
+ return;
245
+ }
246
+
247
+ const responseHeadersMetadata = Reflect.getOwnMetadata(argumentsKey, target.constructor, methodName) || {};
248
+
249
+ responseHeadersMetadata[`argumentIndexes.${parameterIndex}`] = {
250
+ index: parameterIndex,
251
+ type: contextArgsKey,
252
+ key: key
253
+ } satisfies Extract<
254
+ TArgumentsMetadata,
255
+ {
256
+ type: typeof contextArgsKey;
257
+ }
258
+ >;
221
259
 
222
- const responseHeadersMetadata = Reflect.getOwnMetadata(argumentsKey, target.constructor, methodName) || {};
223
-
224
- responseHeadersMetadata[`argumentIndexes.${parameterIndex}`] = {
225
- index: parameterIndex,
226
- type: contextArgsKey,
227
- injectKey: injectKey
228
- } satisfies Extract<
229
- TArgumentsMetadata,
230
- {
231
- type: typeof contextArgsKey;
232
- }
233
- >;
234
-
235
- Reflect.defineMetadata(argumentsKey, responseHeadersMetadata, target.constructor, methodName);
236
- };
260
+ Reflect.defineMetadata(argumentsKey, responseHeadersMetadata, target.constructor, methodName);
261
+ };
@@ -1,4 +1,4 @@
1
- export { Body, Context, Param, Params, Query, Request, RequestHeaders, ResponseHeaders } from "./arguments";
1
+ export { Body, Context, Param, Params, Query, Request, RequestHeader, RequestHeaders, ResponseHeaders } from "./arguments";
2
2
  export { Controller } from "./controller";
3
3
  export { Dispatcher } from "./dispatcher";
4
4
  export { Guard } from "./guard";
@@ -22,6 +22,7 @@ import {
22
22
  paramsArgsKey,
23
23
  queryArgsKey,
24
24
  requestArgsKey,
25
+ requestHeaderArgsKey,
25
26
  requestHeadersArgsKey,
26
27
  responseHeadersArgsKey
27
28
  } from "../keys";
@@ -323,9 +324,32 @@ export const BoolFactory = async (target: new (...args: any[]) => unknown, optio
323
324
  );
324
325
  break;
325
326
  case contextArgsKey:
326
- middlewareArguments[argsMetadata.index] = !argsMetadata.injectKey
327
+ middlewareArguments[argsMetadata.index] = !argsMetadata.key
327
328
  ? contextHook
328
- : contextHook.get(argsMetadata.injectKey);
329
+ : contextHook.get(argsMetadata.key);
330
+ break;
331
+ case requestHeadersArgsKey:
332
+ middlewareArguments[argsMetadata.index] = !argsMetadata.zodSchema
333
+ ? headers
334
+ : await argumentsResolution(
335
+ headers.toJSON(),
336
+ argsMetadata.zodSchema,
337
+ argsMetadata.index,
338
+ middlewareCollection.funcName
339
+ );
340
+ break;
341
+ case responseHeadersArgsKey:
342
+ middlewareArguments[argsMetadata.index] = context[argsMetadata.type];
343
+ break;
344
+ case requestHeaderArgsKey:
345
+ middlewareArguments[argsMetadata.index] = !argsMetadata.zodSchema
346
+ ? headers.get(argsMetadata.key) || undefined
347
+ : await argumentsResolution(
348
+ headers.get(argsMetadata.key) || undefined,
349
+ argsMetadata.zodSchema,
350
+ argsMetadata.index,
351
+ middlewareCollection.funcName
352
+ );
329
353
  break;
330
354
  default:
331
355
  middlewareArguments[argsMetadata.index] = !argsMetadata.zodSchema
@@ -383,9 +407,32 @@ export const BoolFactory = async (target: new (...args: any[]) => unknown, optio
383
407
  );
384
408
  break;
385
409
  case contextArgsKey:
386
- guardArguments[argsMetadata.index] = !argsMetadata.injectKey
410
+ guardArguments[argsMetadata.index] = !argsMetadata.key
387
411
  ? contextHook
388
- : contextHook.get(argsMetadata.injectKey);
412
+ : contextHook.get(argsMetadata.key);
413
+ break;
414
+ case requestHeadersArgsKey:
415
+ guardArguments[argsMetadata.index] = !argsMetadata.zodSchema
416
+ ? headers
417
+ : await argumentsResolution(
418
+ headers.toJSON(),
419
+ argsMetadata.zodSchema,
420
+ argsMetadata.index,
421
+ guardCollection.funcName
422
+ );
423
+ break;
424
+ case responseHeadersArgsKey:
425
+ guardArguments[argsMetadata.index] = context[argsMetadata.type];
426
+ break;
427
+ case requestHeaderArgsKey:
428
+ guardArguments[argsMetadata.index] = !argsMetadata.zodSchema
429
+ ? headers.get(argsMetadata.key) || undefined
430
+ : await argumentsResolution(
431
+ headers.get(argsMetadata.key) || undefined,
432
+ argsMetadata.zodSchema,
433
+ argsMetadata.index,
434
+ guardCollection.funcName
435
+ );
389
436
  break;
390
437
  default:
391
438
  guardArguments[argsMetadata.index] = !argsMetadata.zodSchema
@@ -460,20 +507,43 @@ export const BoolFactory = async (target: new (...args: any[]) => unknown, optio
460
507
  beforeDispatcherCollection.funcName
461
508
  );
462
509
  break;
463
- case paramArgsKey:
510
+ case contextArgsKey:
511
+ beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.key
512
+ ? contextHook
513
+ : contextHook.get(argsMetadata.key);
514
+ break;
515
+ case requestHeadersArgsKey:
464
516
  beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
465
- ? context[paramsArgsKey]?.[argsMetadata.key]
517
+ ? headers
466
518
  : await argumentsResolution(
467
- context[paramsArgsKey]?.[argsMetadata.key],
519
+ headers.toJSON(),
468
520
  argsMetadata.zodSchema,
469
521
  argsMetadata.index,
470
522
  beforeDispatcherCollection.funcName
471
523
  );
472
524
  break;
473
- case contextArgsKey:
474
- beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.injectKey
475
- ? contextHook
476
- : contextHook.get(argsMetadata.injectKey);
525
+ case responseHeadersArgsKey:
526
+ beforeDispatcherArguments[argsMetadata.index] = context[argsMetadata.type];
527
+ break;
528
+ case requestHeaderArgsKey:
529
+ beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
530
+ ? headers.get(argsMetadata.key) || undefined
531
+ : await argumentsResolution(
532
+ headers.get(argsMetadata.key) || undefined,
533
+ argsMetadata.zodSchema,
534
+ argsMetadata.index,
535
+ beforeDispatcherCollection.funcName
536
+ );
537
+ break;
538
+ case paramArgsKey:
539
+ beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
540
+ ? context[paramArgsKey][argsMetadata.key] || undefined
541
+ : await argumentsResolution(
542
+ context[paramArgsKey][argsMetadata.key],
543
+ argsMetadata.zodSchema,
544
+ argsMetadata.index,
545
+ beforeDispatcherCollection.funcName
546
+ );
477
547
  break;
478
548
  default:
479
549
  beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
@@ -495,10 +565,13 @@ export const BoolFactory = async (target: new (...args: any[]) => unknown, optio
495
565
  // Execute controller action
496
566
  for (let i = 0; i < result.handlers.length; i++) {
497
567
  const controllerActionArguments = [];
498
- const controllerCollection = result.handlers[i];
568
+ const controllerActionCollection = result.handlers[i];
499
569
  const handlerMetadata: Record<string, TArgumentsMetadata> =
500
- Reflect.getOwnMetadata(argumentsKey, controllerCollection.class, controllerCollection.funcName) ||
501
- {};
570
+ Reflect.getOwnMetadata(
571
+ argumentsKey,
572
+ controllerActionCollection.class,
573
+ controllerActionCollection.funcName
574
+ ) || {};
502
575
 
503
576
  if (handlerMetadata) {
504
577
  for (const [_key, argsMetadata] of Object.entries(handlerMetadata)) {
@@ -510,7 +583,7 @@ export const BoolFactory = async (target: new (...args: any[]) => unknown, optio
510
583
  request,
511
584
  argsMetadata.zodSchema,
512
585
  argsMetadata.index,
513
- controllerCollection.funcName
586
+ controllerActionCollection.funcName
514
587
  );
515
588
  break;
516
589
  case bodyArgsKey:
@@ -520,23 +593,46 @@ export const BoolFactory = async (target: new (...args: any[]) => unknown, optio
520
593
  await request[argsMetadata.parser || "json"](),
521
594
  argsMetadata.zodSchema,
522
595
  argsMetadata.index,
523
- controllerCollection.funcName
596
+ controllerActionCollection.funcName
524
597
  );
525
598
  break;
526
- case paramArgsKey:
599
+ case contextArgsKey:
600
+ controllerActionArguments[argsMetadata.index] = !argsMetadata.key
601
+ ? contextHook
602
+ : contextHook.get(argsMetadata.key);
603
+ break;
604
+ case requestHeadersArgsKey:
527
605
  controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
528
- ? context[paramsArgsKey]?.[argsMetadata.key]
606
+ ? headers
529
607
  : await argumentsResolution(
530
- context[paramsArgsKey]?.[argsMetadata.key],
608
+ headers.toJSON(),
531
609
  argsMetadata.zodSchema,
532
610
  argsMetadata.index,
533
- controllerCollection.funcName
611
+ controllerActionCollection.funcName
534
612
  );
535
613
  break;
536
- case contextArgsKey:
537
- controllerActionArguments[argsMetadata.index] = !argsMetadata.injectKey
538
- ? contextHook
539
- : contextHook.get(argsMetadata.injectKey);
614
+ case responseHeadersArgsKey:
615
+ controllerActionArguments[argsMetadata.index] = context[argsMetadata.type];
616
+ break;
617
+ case requestHeaderArgsKey:
618
+ controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
619
+ ? headers.get(argsMetadata.key) || undefined
620
+ : await argumentsResolution(
621
+ headers.get(argsMetadata.key) || undefined,
622
+ argsMetadata.zodSchema,
623
+ argsMetadata.index,
624
+ controllerActionCollection.funcName
625
+ );
626
+ break;
627
+ case paramArgsKey:
628
+ controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
629
+ ? context[paramArgsKey][argsMetadata.key] || undefined
630
+ : await argumentsResolution(
631
+ context[paramArgsKey][argsMetadata.key],
632
+ argsMetadata.zodSchema,
633
+ argsMetadata.index,
634
+ controllerActionCollection.funcName
635
+ );
540
636
  break;
541
637
  default:
542
638
  controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
@@ -545,14 +641,14 @@ export const BoolFactory = async (target: new (...args: any[]) => unknown, optio
545
641
  context[argsMetadata.type],
546
642
  argsMetadata.zodSchema,
547
643
  argsMetadata.index,
548
- controllerCollection.funcName
644
+ controllerActionCollection.funcName
549
645
  );
550
646
  break;
551
647
  }
552
648
  }
553
649
  }
554
650
 
555
- responseBody = await controllerCollection.func(...controllerActionArguments);
651
+ responseBody = await controllerActionCollection.func(...controllerActionArguments);
556
652
  }
557
653
 
558
654
  // Execute after dispatcher(s)
@@ -589,28 +685,49 @@ export const BoolFactory = async (target: new (...args: any[]) => unknown, optio
589
685
  afterDispatcherCollection.funcName
590
686
  );
591
687
  break;
592
- case paramArgsKey:
688
+ case contextArgsKey:
689
+ afterDispatcherArguments[argsMetadata.index] = !argsMetadata.key
690
+ ? contextHook
691
+ : contextHook.get(argsMetadata.key);
692
+ break;
693
+ case requestHeadersArgsKey:
593
694
  afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
594
- ? context[paramsArgsKey]?.[argsMetadata.key]
695
+ ? headers
595
696
  : await argumentsResolution(
596
- context[paramsArgsKey]?.[argsMetadata.key],
697
+ headers.toJSON(),
597
698
  argsMetadata.zodSchema,
598
699
  argsMetadata.index,
599
700
  afterDispatcherCollection.funcName
600
701
  );
601
702
  break;
602
- case contextArgsKey:
603
- afterDispatcherArguments[argsMetadata.index] = !argsMetadata.injectKey
604
- ? contextHook
605
- : contextHook.get(argsMetadata.injectKey);
703
+ case responseHeadersArgsKey:
704
+ afterDispatcherArguments[argsMetadata.index] = context[argsMetadata.type];
705
+ break;
706
+ case requestHeaderArgsKey:
707
+ afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
708
+ ? headers.get(argsMetadata.key) || undefined
709
+ : await argumentsResolution(
710
+ headers.get(argsMetadata.key) || undefined,
711
+ argsMetadata.zodSchema,
712
+ argsMetadata.index,
713
+ afterDispatcherCollection.funcName
714
+ );
715
+ break;
716
+ case paramArgsKey:
717
+ afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
718
+ ? context[paramArgsKey][argsMetadata.key] || undefined
719
+ : await argumentsResolution(
720
+ context[paramArgsKey][argsMetadata.key],
721
+ argsMetadata.zodSchema,
722
+ argsMetadata.index,
723
+ afterDispatcherCollection.funcName
724
+ );
606
725
  break;
607
726
  default:
608
727
  afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
609
- ? !(argsMetadata.type in context)
610
- ? undefined
611
- : context[argsMetadata.type]
728
+ ? context[argsMetadata.type]
612
729
  : await argumentsResolution(
613
- !(argsMetadata.type in context) ? undefined : context[argsMetadata.type],
730
+ context[argsMetadata.type],
614
731
  argsMetadata.zodSchema,
615
732
  argsMetadata.index,
616
733
  afterDispatcherCollection.funcName
package/src/keys/index.ts CHANGED
@@ -11,6 +11,7 @@ export const moduleKey = Symbol("__bool:module__");
11
11
  export const controllerRouteZodSchemaKey = Symbol("__bool:controller.route.zodSchema__");
12
12
 
13
13
  export const requestHeadersArgsKey = Symbol("__bool:arguments:requestHeaders__");
14
+ export const requestHeaderArgsKey = Symbol("__bool:arguments:requestHeader__");
14
15
  export const bodyArgsKey = Symbol("__bool:arguments:body__");
15
16
  export const paramsArgsKey = Symbol("__bool:arguments:params__");
16
17
  export const paramArgsKey = Symbol("__bool:arguments:param__");