@bool-ts/core 1.6.7 → 1.6.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__test/controller.ts +8 -2
- package/dist/decorators/arguments.d.ts +16 -10
- package/dist/decorators/arguments.js +31 -18
- package/dist/decorators/index.d.ts +1 -1
- package/dist/decorators/index.js +1 -1
- package/dist/hooks/factory.js +101 -29
- package/dist/keys/index.d.ts +1 -0
- package/dist/keys/index.js +1 -0
- package/package.json +1 -1
- package/src/decorators/arguments.ts +62 -34
- package/src/decorators/index.ts +1 -1
- package/src/hooks/factory.ts +156 -29
- package/src/keys/index.ts +1 -0
package/__test/controller.ts
CHANGED
|
@@ -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,
|
|
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",
|
|
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,16 +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;
|
|
40
|
+
key?: symbol;
|
|
36
41
|
};
|
|
37
|
-
export declare const RequestHeaders: (
|
|
38
|
-
export declare const
|
|
39
|
-
export declare const
|
|
40
|
-
export declare const
|
|
41
|
-
export declare const
|
|
42
|
-
export declare const
|
|
43
|
-
export declare const
|
|
44
|
-
export declare const
|
|
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 = (
|
|
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:
|
|
11
|
+
zodSchema: schema
|
|
12
12
|
};
|
|
13
13
|
Reflect.defineMetadata(argumentsKey, requestHeadersMetadata, target.constructor, methodName);
|
|
14
14
|
};
|
|
15
|
-
export const
|
|
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:
|
|
36
|
+
zodSchema: schema,
|
|
24
37
|
parser: parser
|
|
25
38
|
};
|
|
26
39
|
Reflect.defineMetadata(argumentsKey, bodyMetadata, target.constructor, methodName);
|
|
27
40
|
};
|
|
28
|
-
export const Params = (
|
|
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:
|
|
49
|
+
zodSchema: schema
|
|
37
50
|
};
|
|
38
51
|
Reflect.defineMetadata(argumentsKey, paramsMetadata, target.constructor, methodName);
|
|
39
52
|
};
|
|
40
|
-
export const Param = (key,
|
|
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:
|
|
62
|
+
zodSchema: schema
|
|
50
63
|
};
|
|
51
64
|
Reflect.defineMetadata(argumentsKey, paramMetadata, target.constructor, methodName);
|
|
52
65
|
};
|
|
53
|
-
export const Query = (
|
|
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:
|
|
74
|
+
zodSchema: schema
|
|
62
75
|
};
|
|
63
76
|
Reflect.defineMetadata(argumentsKey, queryMetadata, target.constructor, methodName);
|
|
64
77
|
};
|
|
65
|
-
export const Request = (
|
|
78
|
+
export const Request = (schema) => (target, methodName, parameterIndex) => {
|
|
66
79
|
if (!methodName) {
|
|
67
80
|
return;
|
|
68
81
|
}
|
|
@@ -70,30 +83,30 @@ export const Request = (zodSchema) => (target, methodName, parameterIndex) => {
|
|
|
70
83
|
requestMetadata[`argumentIndexes.${parameterIndex}`] = {
|
|
71
84
|
index: parameterIndex,
|
|
72
85
|
type: requestArgsKey,
|
|
73
|
-
zodSchema:
|
|
86
|
+
zodSchema: schema
|
|
74
87
|
};
|
|
75
88
|
Reflect.defineMetadata(argumentsKey, requestMetadata, target.constructor, methodName);
|
|
76
89
|
};
|
|
77
|
-
export const ResponseHeaders = (
|
|
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 = () => (target, methodName, parameterIndex) => {
|
|
101
|
+
export const Context = (key) => (target, methodName, parameterIndex) => {
|
|
90
102
|
if (!methodName) {
|
|
91
103
|
return;
|
|
92
104
|
}
|
|
93
105
|
const responseHeadersMetadata = Reflect.getOwnMetadata(argumentsKey, target.constructor, methodName) || {};
|
|
94
106
|
responseHeadersMetadata[`argumentIndexes.${parameterIndex}`] = {
|
|
95
107
|
index: parameterIndex,
|
|
96
|
-
type: contextArgsKey
|
|
108
|
+
type: contextArgsKey,
|
|
109
|
+
key: key
|
|
97
110
|
};
|
|
98
111
|
Reflect.defineMetadata(argumentsKey, responseHeadersMetadata, target.constructor, methodName);
|
|
99
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";
|
package/dist/decorators/index.js
CHANGED
|
@@ -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";
|
package/dist/hooks/factory.js
CHANGED
|
@@ -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,7 +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] =
|
|
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)
|
|
239
|
+
: await argumentsResolution(headers.get(argsMetadata.key), argsMetadata.zodSchema, argsMetadata.index, middlewareCollection.funcName);
|
|
225
240
|
break;
|
|
226
241
|
default:
|
|
227
242
|
middlewareArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
@@ -258,7 +273,22 @@ export const BoolFactory = async (target, options) => {
|
|
|
258
273
|
: await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, guardCollection.funcName);
|
|
259
274
|
break;
|
|
260
275
|
case contextArgsKey:
|
|
261
|
-
guardArguments[argsMetadata.index] =
|
|
276
|
+
guardArguments[argsMetadata.index] = !argsMetadata.key
|
|
277
|
+
? contextHook
|
|
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)
|
|
291
|
+
: await argumentsResolution(headers.get(argsMetadata.key), argsMetadata.zodSchema, argsMetadata.index, guardCollection.funcName);
|
|
262
292
|
break;
|
|
263
293
|
default:
|
|
264
294
|
guardArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
@@ -305,13 +335,28 @@ export const BoolFactory = async (target, options) => {
|
|
|
305
335
|
? await request[argsMetadata.parser || "json"]()
|
|
306
336
|
: await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, beforeDispatcherCollection.funcName);
|
|
307
337
|
break;
|
|
308
|
-
case
|
|
338
|
+
case contextArgsKey:
|
|
339
|
+
beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.key
|
|
340
|
+
? contextHook
|
|
341
|
+
: contextHook.get(argsMetadata.key);
|
|
342
|
+
break;
|
|
343
|
+
case requestHeadersArgsKey:
|
|
309
344
|
beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
310
|
-
?
|
|
311
|
-
: await argumentsResolution(
|
|
345
|
+
? headers
|
|
346
|
+
: await argumentsResolution(headers.toJSON(), argsMetadata.zodSchema, argsMetadata.index, beforeDispatcherCollection.funcName);
|
|
312
347
|
break;
|
|
313
|
-
case
|
|
314
|
-
beforeDispatcherArguments[argsMetadata.index] =
|
|
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), 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);
|
|
315
360
|
break;
|
|
316
361
|
default:
|
|
317
362
|
beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
@@ -326,39 +371,53 @@ export const BoolFactory = async (target, options) => {
|
|
|
326
371
|
// Execute controller action
|
|
327
372
|
for (let i = 0; i < result.handlers.length; i++) {
|
|
328
373
|
const controllerActionArguments = [];
|
|
329
|
-
const
|
|
330
|
-
const handlerMetadata = Reflect.getOwnMetadata(argumentsKey,
|
|
331
|
-
{};
|
|
374
|
+
const controllerActionCollection = result.handlers[i];
|
|
375
|
+
const handlerMetadata = Reflect.getOwnMetadata(argumentsKey, controllerActionCollection.class, controllerActionCollection.funcName) || {};
|
|
332
376
|
if (handlerMetadata) {
|
|
333
377
|
for (const [_key, argsMetadata] of Object.entries(handlerMetadata)) {
|
|
334
378
|
switch (argsMetadata.type) {
|
|
335
379
|
case requestArgsKey:
|
|
336
380
|
controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
337
381
|
? request
|
|
338
|
-
: await argumentsResolution(request, argsMetadata.zodSchema, argsMetadata.index,
|
|
382
|
+
: await argumentsResolution(request, argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
|
|
339
383
|
break;
|
|
340
384
|
case bodyArgsKey:
|
|
341
385
|
controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
342
386
|
? await request[argsMetadata.parser || "json"]()
|
|
343
|
-
: await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index,
|
|
387
|
+
: await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
|
|
344
388
|
break;
|
|
345
|
-
case
|
|
389
|
+
case contextArgsKey:
|
|
390
|
+
controllerActionArguments[argsMetadata.index] = !argsMetadata.key
|
|
391
|
+
? contextHook
|
|
392
|
+
: contextHook.get(argsMetadata.key);
|
|
393
|
+
break;
|
|
394
|
+
case requestHeadersArgsKey:
|
|
346
395
|
controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
347
|
-
?
|
|
348
|
-
: await argumentsResolution(
|
|
396
|
+
? headers
|
|
397
|
+
: await argumentsResolution(headers.toJSON(), argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
|
|
349
398
|
break;
|
|
350
|
-
case
|
|
351
|
-
controllerActionArguments[argsMetadata.index] =
|
|
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), 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);
|
|
352
411
|
break;
|
|
353
412
|
default:
|
|
354
413
|
controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
355
414
|
? context[argsMetadata.type]
|
|
356
|
-
: await argumentsResolution(context[argsMetadata.type], argsMetadata.zodSchema, argsMetadata.index,
|
|
415
|
+
: await argumentsResolution(context[argsMetadata.type], argsMetadata.zodSchema, argsMetadata.index, controllerActionCollection.funcName);
|
|
357
416
|
break;
|
|
358
417
|
}
|
|
359
418
|
}
|
|
360
419
|
}
|
|
361
|
-
responseBody = await
|
|
420
|
+
responseBody = await controllerActionCollection.func(...controllerActionArguments);
|
|
362
421
|
}
|
|
363
422
|
// Execute after dispatcher(s)
|
|
364
423
|
for (let i = 0; i < afterDispatcherGroup.length; i++) {
|
|
@@ -378,20 +437,33 @@ export const BoolFactory = async (target, options) => {
|
|
|
378
437
|
? await request[argsMetadata.parser || "json"]()
|
|
379
438
|
: await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
|
|
380
439
|
break;
|
|
381
|
-
case
|
|
440
|
+
case contextArgsKey:
|
|
441
|
+
afterDispatcherArguments[argsMetadata.index] = !argsMetadata.key
|
|
442
|
+
? contextHook
|
|
443
|
+
: contextHook.get(argsMetadata.key);
|
|
444
|
+
break;
|
|
445
|
+
case requestHeadersArgsKey:
|
|
382
446
|
afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
383
|
-
?
|
|
384
|
-
: await argumentsResolution(
|
|
447
|
+
? headers
|
|
448
|
+
: await argumentsResolution(headers.toJSON(), argsMetadata.zodSchema, argsMetadata.index, afterDispatcherCollection.funcName);
|
|
385
449
|
break;
|
|
386
|
-
case
|
|
387
|
-
afterDispatcherArguments[argsMetadata.index] =
|
|
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), 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);
|
|
388
462
|
break;
|
|
389
463
|
default:
|
|
390
464
|
afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
391
|
-
?
|
|
392
|
-
|
|
393
|
-
: context[argsMetadata.type]
|
|
394
|
-
: 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);
|
|
395
467
|
break;
|
|
396
468
|
}
|
|
397
469
|
}
|
package/dist/keys/index.d.ts
CHANGED
|
@@ -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;
|
package/dist/keys/index.js
CHANGED
|
@@ -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
|
@@ -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,15 +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;
|
|
61
|
+
key?: symbol;
|
|
55
62
|
};
|
|
56
63
|
|
|
57
64
|
export const RequestHeaders =
|
|
58
|
-
(
|
|
65
|
+
(schema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
|
|
59
66
|
if (!methodName) {
|
|
60
67
|
return;
|
|
61
68
|
}
|
|
@@ -65,7 +72,7 @@ export const RequestHeaders =
|
|
|
65
72
|
requestHeadersMetadata[`argumentIndexes.${parameterIndex}`] = {
|
|
66
73
|
index: parameterIndex,
|
|
67
74
|
type: requestHeadersArgsKey,
|
|
68
|
-
zodSchema:
|
|
75
|
+
zodSchema: schema
|
|
69
76
|
} satisfies Extract<
|
|
70
77
|
TArgumentsMetadata,
|
|
71
78
|
{
|
|
@@ -76,8 +83,31 @@ export const RequestHeaders =
|
|
|
76
83
|
Reflect.defineMetadata(argumentsKey, requestHeadersMetadata, target.constructor, methodName);
|
|
77
84
|
};
|
|
78
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
|
+
|
|
79
109
|
export const Body =
|
|
80
|
-
(
|
|
110
|
+
(schema?: Zod.Schema, parser?: "arrayBuffer" | "blob" | "formData" | "json" | "text") =>
|
|
81
111
|
(target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
|
|
82
112
|
if (!methodName) {
|
|
83
113
|
return;
|
|
@@ -88,7 +118,7 @@ export const Body =
|
|
|
88
118
|
bodyMetadata[`argumentIndexes.${parameterIndex}`] = {
|
|
89
119
|
index: parameterIndex,
|
|
90
120
|
type: bodyArgsKey,
|
|
91
|
-
zodSchema:
|
|
121
|
+
zodSchema: schema,
|
|
92
122
|
parser: parser
|
|
93
123
|
} satisfies Extract<
|
|
94
124
|
TArgumentsMetadata,
|
|
@@ -101,7 +131,7 @@ export const Body =
|
|
|
101
131
|
};
|
|
102
132
|
|
|
103
133
|
export const Params =
|
|
104
|
-
(
|
|
134
|
+
(schema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
|
|
105
135
|
if (!methodName) {
|
|
106
136
|
return;
|
|
107
137
|
}
|
|
@@ -111,7 +141,7 @@ export const Params =
|
|
|
111
141
|
paramsMetadata[`argumentIndexes.${parameterIndex}`] = {
|
|
112
142
|
index: parameterIndex,
|
|
113
143
|
type: paramsArgsKey,
|
|
114
|
-
zodSchema:
|
|
144
|
+
zodSchema: schema
|
|
115
145
|
} satisfies Extract<
|
|
116
146
|
TArgumentsMetadata,
|
|
117
147
|
{
|
|
@@ -123,8 +153,7 @@ export const Params =
|
|
|
123
153
|
};
|
|
124
154
|
|
|
125
155
|
export const Param =
|
|
126
|
-
(key: string,
|
|
127
|
-
(target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
|
|
156
|
+
(key: string, schema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
|
|
128
157
|
if (!methodName) {
|
|
129
158
|
return;
|
|
130
159
|
}
|
|
@@ -135,7 +164,7 @@ export const Param =
|
|
|
135
164
|
index: parameterIndex,
|
|
136
165
|
type: paramArgsKey,
|
|
137
166
|
key: key,
|
|
138
|
-
zodSchema:
|
|
167
|
+
zodSchema: schema
|
|
139
168
|
} satisfies Extract<
|
|
140
169
|
TArgumentsMetadata,
|
|
141
170
|
{
|
|
@@ -147,7 +176,7 @@ export const Param =
|
|
|
147
176
|
};
|
|
148
177
|
|
|
149
178
|
export const Query =
|
|
150
|
-
(
|
|
179
|
+
(schema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
|
|
151
180
|
if (!methodName) {
|
|
152
181
|
return;
|
|
153
182
|
}
|
|
@@ -157,7 +186,7 @@ export const Query =
|
|
|
157
186
|
queryMetadata[`argumentIndexes.${parameterIndex}`] = {
|
|
158
187
|
index: parameterIndex,
|
|
159
188
|
type: queryArgsKey,
|
|
160
|
-
zodSchema:
|
|
189
|
+
zodSchema: schema
|
|
161
190
|
} satisfies Extract<
|
|
162
191
|
TArgumentsMetadata,
|
|
163
192
|
{
|
|
@@ -169,7 +198,7 @@ export const Query =
|
|
|
169
198
|
};
|
|
170
199
|
|
|
171
200
|
export const Request =
|
|
172
|
-
(
|
|
201
|
+
(schema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
|
|
173
202
|
if (!methodName) {
|
|
174
203
|
return;
|
|
175
204
|
}
|
|
@@ -179,7 +208,7 @@ export const Request =
|
|
|
179
208
|
requestMetadata[`argumentIndexes.${parameterIndex}`] = {
|
|
180
209
|
index: parameterIndex,
|
|
181
210
|
type: requestArgsKey,
|
|
182
|
-
zodSchema:
|
|
211
|
+
zodSchema: schema
|
|
183
212
|
} satisfies Extract<
|
|
184
213
|
TArgumentsMetadata,
|
|
185
214
|
{
|
|
@@ -190,29 +219,27 @@ export const Request =
|
|
|
190
219
|
Reflect.defineMetadata(argumentsKey, requestMetadata, target.constructor, methodName);
|
|
191
220
|
};
|
|
192
221
|
|
|
193
|
-
export const ResponseHeaders =
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
}
|
|
222
|
+
export const ResponseHeaders = () => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
|
|
223
|
+
if (!methodName) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
198
226
|
|
|
199
|
-
|
|
227
|
+
const responseHeadersMetadata = Reflect.getOwnMetadata(argumentsKey, target.constructor, methodName) || {};
|
|
200
228
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
>;
|
|
229
|
+
responseHeadersMetadata[`argumentIndexes.${parameterIndex}`] = {
|
|
230
|
+
index: parameterIndex,
|
|
231
|
+
type: responseHeadersArgsKey
|
|
232
|
+
} satisfies Extract<
|
|
233
|
+
TArgumentsMetadata,
|
|
234
|
+
{
|
|
235
|
+
type: typeof responseHeadersArgsKey;
|
|
236
|
+
}
|
|
237
|
+
>;
|
|
211
238
|
|
|
212
|
-
|
|
213
|
-
|
|
239
|
+
Reflect.defineMetadata(argumentsKey, responseHeadersMetadata, target.constructor, methodName);
|
|
240
|
+
};
|
|
214
241
|
|
|
215
|
-
export const Context = () => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
|
|
242
|
+
export const Context = (key?: symbol) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => {
|
|
216
243
|
if (!methodName) {
|
|
217
244
|
return;
|
|
218
245
|
}
|
|
@@ -221,7 +248,8 @@ export const Context = () => (target: Object, methodName: string | symbol | unde
|
|
|
221
248
|
|
|
222
249
|
responseHeadersMetadata[`argumentIndexes.${parameterIndex}`] = {
|
|
223
250
|
index: parameterIndex,
|
|
224
|
-
type: contextArgsKey
|
|
251
|
+
type: contextArgsKey,
|
|
252
|
+
key: key
|
|
225
253
|
} satisfies Extract<
|
|
226
254
|
TArgumentsMetadata,
|
|
227
255
|
{
|
package/src/decorators/index.ts
CHANGED
|
@@ -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";
|
package/src/hooks/factory.ts
CHANGED
|
@@ -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,7 +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] =
|
|
327
|
+
middlewareArguments[argsMetadata.index] = !argsMetadata.key
|
|
328
|
+
? contextHook
|
|
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)
|
|
347
|
+
: await argumentsResolution(
|
|
348
|
+
headers.get(argsMetadata.key),
|
|
349
|
+
argsMetadata.zodSchema,
|
|
350
|
+
argsMetadata.index,
|
|
351
|
+
middlewareCollection.funcName
|
|
352
|
+
);
|
|
327
353
|
break;
|
|
328
354
|
default:
|
|
329
355
|
middlewareArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
@@ -381,7 +407,32 @@ export const BoolFactory = async (target: new (...args: any[]) => unknown, optio
|
|
|
381
407
|
);
|
|
382
408
|
break;
|
|
383
409
|
case contextArgsKey:
|
|
384
|
-
guardArguments[argsMetadata.index] =
|
|
410
|
+
guardArguments[argsMetadata.index] = !argsMetadata.key
|
|
411
|
+
? contextHook
|
|
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)
|
|
430
|
+
: await argumentsResolution(
|
|
431
|
+
headers.get(argsMetadata.key),
|
|
432
|
+
argsMetadata.zodSchema,
|
|
433
|
+
argsMetadata.index,
|
|
434
|
+
guardCollection.funcName
|
|
435
|
+
);
|
|
385
436
|
break;
|
|
386
437
|
default:
|
|
387
438
|
guardArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
@@ -456,18 +507,43 @@ export const BoolFactory = async (target: new (...args: any[]) => unknown, optio
|
|
|
456
507
|
beforeDispatcherCollection.funcName
|
|
457
508
|
);
|
|
458
509
|
break;
|
|
459
|
-
case
|
|
510
|
+
case contextArgsKey:
|
|
511
|
+
beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.key
|
|
512
|
+
? contextHook
|
|
513
|
+
: contextHook.get(argsMetadata.key);
|
|
514
|
+
break;
|
|
515
|
+
case requestHeadersArgsKey:
|
|
460
516
|
beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
461
|
-
?
|
|
517
|
+
? headers
|
|
462
518
|
: await argumentsResolution(
|
|
463
|
-
|
|
519
|
+
headers.toJSON(),
|
|
464
520
|
argsMetadata.zodSchema,
|
|
465
521
|
argsMetadata.index,
|
|
466
522
|
beforeDispatcherCollection.funcName
|
|
467
523
|
);
|
|
468
524
|
break;
|
|
469
|
-
case
|
|
470
|
-
beforeDispatcherArguments[argsMetadata.index] =
|
|
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),
|
|
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
|
+
);
|
|
471
547
|
break;
|
|
472
548
|
default:
|
|
473
549
|
beforeDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
@@ -489,10 +565,13 @@ export const BoolFactory = async (target: new (...args: any[]) => unknown, optio
|
|
|
489
565
|
// Execute controller action
|
|
490
566
|
for (let i = 0; i < result.handlers.length; i++) {
|
|
491
567
|
const controllerActionArguments = [];
|
|
492
|
-
const
|
|
568
|
+
const controllerActionCollection = result.handlers[i];
|
|
493
569
|
const handlerMetadata: Record<string, TArgumentsMetadata> =
|
|
494
|
-
Reflect.getOwnMetadata(
|
|
495
|
-
|
|
570
|
+
Reflect.getOwnMetadata(
|
|
571
|
+
argumentsKey,
|
|
572
|
+
controllerActionCollection.class,
|
|
573
|
+
controllerActionCollection.funcName
|
|
574
|
+
) || {};
|
|
496
575
|
|
|
497
576
|
if (handlerMetadata) {
|
|
498
577
|
for (const [_key, argsMetadata] of Object.entries(handlerMetadata)) {
|
|
@@ -504,7 +583,7 @@ export const BoolFactory = async (target: new (...args: any[]) => unknown, optio
|
|
|
504
583
|
request,
|
|
505
584
|
argsMetadata.zodSchema,
|
|
506
585
|
argsMetadata.index,
|
|
507
|
-
|
|
586
|
+
controllerActionCollection.funcName
|
|
508
587
|
);
|
|
509
588
|
break;
|
|
510
589
|
case bodyArgsKey:
|
|
@@ -514,21 +593,46 @@ export const BoolFactory = async (target: new (...args: any[]) => unknown, optio
|
|
|
514
593
|
await request[argsMetadata.parser || "json"](),
|
|
515
594
|
argsMetadata.zodSchema,
|
|
516
595
|
argsMetadata.index,
|
|
517
|
-
|
|
596
|
+
controllerActionCollection.funcName
|
|
518
597
|
);
|
|
519
598
|
break;
|
|
520
|
-
case
|
|
599
|
+
case contextArgsKey:
|
|
600
|
+
controllerActionArguments[argsMetadata.index] = !argsMetadata.key
|
|
601
|
+
? contextHook
|
|
602
|
+
: contextHook.get(argsMetadata.key);
|
|
603
|
+
break;
|
|
604
|
+
case requestHeadersArgsKey:
|
|
521
605
|
controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
522
|
-
?
|
|
606
|
+
? headers
|
|
523
607
|
: await argumentsResolution(
|
|
524
|
-
|
|
608
|
+
headers.toJSON(),
|
|
525
609
|
argsMetadata.zodSchema,
|
|
526
610
|
argsMetadata.index,
|
|
527
|
-
|
|
611
|
+
controllerActionCollection.funcName
|
|
528
612
|
);
|
|
529
613
|
break;
|
|
530
|
-
case
|
|
531
|
-
controllerActionArguments[argsMetadata.index] =
|
|
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),
|
|
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
|
+
);
|
|
532
636
|
break;
|
|
533
637
|
default:
|
|
534
638
|
controllerActionArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
@@ -537,14 +641,14 @@ export const BoolFactory = async (target: new (...args: any[]) => unknown, optio
|
|
|
537
641
|
context[argsMetadata.type],
|
|
538
642
|
argsMetadata.zodSchema,
|
|
539
643
|
argsMetadata.index,
|
|
540
|
-
|
|
644
|
+
controllerActionCollection.funcName
|
|
541
645
|
);
|
|
542
646
|
break;
|
|
543
647
|
}
|
|
544
648
|
}
|
|
545
649
|
}
|
|
546
650
|
|
|
547
|
-
responseBody = await
|
|
651
|
+
responseBody = await controllerActionCollection.func(...controllerActionArguments);
|
|
548
652
|
}
|
|
549
653
|
|
|
550
654
|
// Execute after dispatcher(s)
|
|
@@ -581,26 +685,49 @@ export const BoolFactory = async (target: new (...args: any[]) => unknown, optio
|
|
|
581
685
|
afterDispatcherCollection.funcName
|
|
582
686
|
);
|
|
583
687
|
break;
|
|
584
|
-
case
|
|
688
|
+
case contextArgsKey:
|
|
689
|
+
afterDispatcherArguments[argsMetadata.index] = !argsMetadata.key
|
|
690
|
+
? contextHook
|
|
691
|
+
: contextHook.get(argsMetadata.key);
|
|
692
|
+
break;
|
|
693
|
+
case requestHeadersArgsKey:
|
|
585
694
|
afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
586
|
-
?
|
|
695
|
+
? headers
|
|
587
696
|
: await argumentsResolution(
|
|
588
|
-
|
|
697
|
+
headers.toJSON(),
|
|
589
698
|
argsMetadata.zodSchema,
|
|
590
699
|
argsMetadata.index,
|
|
591
700
|
afterDispatcherCollection.funcName
|
|
592
701
|
);
|
|
593
702
|
break;
|
|
594
|
-
case
|
|
595
|
-
afterDispatcherArguments[argsMetadata.index] =
|
|
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),
|
|
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
|
+
);
|
|
596
725
|
break;
|
|
597
726
|
default:
|
|
598
727
|
afterDispatcherArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
599
|
-
?
|
|
600
|
-
? undefined
|
|
601
|
-
: context[argsMetadata.type]
|
|
728
|
+
? context[argsMetadata.type]
|
|
602
729
|
: await argumentsResolution(
|
|
603
|
-
|
|
730
|
+
context[argsMetadata.type],
|
|
604
731
|
argsMetadata.zodSchema,
|
|
605
732
|
argsMetadata.index,
|
|
606
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__");
|