@@ -3,78 +3,69 @@ import {
3
3
convertIfDateObjectToISOString ,
4
4
isBooleanRecord ,
5
5
isNumberRecord ,
6
- isStringRecord ,
6
+ isStringRecord , SerializationMethodToContentType ,
7
7
} from "./utils" ;
8
8
9
- const requestMetadataKey = "request" ;
9
+ export const requestMetadataKey = "request" ;
10
10
const mpFormMetadataKey = "multipart_form" ;
11
11
12
- export function serializeRequestBody ( request : any ) : [ object , any ] {
13
- if ( ! request . hasOwnProperty ( requestMetadataKey ) ) {
14
- throw new Error ( "request body not found" ) ;
12
+ export function serializeRequestBody ( request : any , requestFieldName : string , serializationMethod : string ) : [ object , any ] {
13
+ if ( request !== Object ( request ) || ! request . hasOwnProperty ( requestFieldName ) ) {
14
+ return serializeContentType ( SerializationMethodToContentType [ serializationMethod ] , request ) ;
15
15
}
16
16
17
- let requestBodyObj = request ;
18
-
19
- const firstLevelRequestAnn : string = Reflect . getMetadata (
17
+ const requestBodyAnn : string = Reflect . getMetadata (
20
18
requestMetadataKey ,
21
19
request ,
22
- requestMetadataKey
20
+ requestFieldName
23
21
) ;
24
- if ( firstLevelRequestAnn == null )
25
- requestBodyObj = request [ requestMetadataKey ] ;
26
-
27
- let [ requestHeaders , requestBody ] : [ object , any ] = [ { } , { } ] ;
28
-
29
- const fieldNames : string [ ] = Object . getOwnPropertyNames ( requestBodyObj ) ;
30
- fieldNames . forEach ( ( fname ) => {
31
- const requestAnn : string = Reflect . getMetadata (
32
- requestMetadataKey ,
33
- requestBodyObj ,
34
- fname
35
- ) ;
36
- if ( requestAnn == null ) return ;
37
-
38
- const requestDecorator : RequestDecorator =
39
- parseRequestDecorator ( requestAnn ) ;
40
-
41
- switch ( requestDecorator . MediaType ) {
42
- case "multipart/form-data" :
43
- case "multipart/mixed" :
44
- requestBody = encodeMultipartFormData ( requestBodyObj [ fname ] ) ;
45
- requestHeaders = ( requestBody as FormData ) . getHeaders ( ) ;
46
- break ;
22
+ if ( ! requestBodyAnn ) {
23
+ throw new Error ( "invalid request type" ) ;
24
+ }
47
25
48
- case "application/x-www-form-urlencoded" :
49
- [ requestHeaders , requestBody ] = [
50
- { "Content-Type" : `${ requestDecorator . MediaType } ` } ,
51
- encodeFormUrlEncodeData ( requestBodyObj [ fname ] ) ,
52
- ] ;
53
- break ;
26
+ const requestDecorator : RequestDecorator = parseRequestDecorator ( requestBodyAnn ) ;
27
+ return serializeContentType ( requestDecorator . MediaType , request [ requestFieldName ] ) ;
28
+ }
54
29
55
- case "application/json" :
56
- case "text/json" :
57
- [ requestHeaders , requestBody ] = [
58
- { "Content-Type" : `${ requestDecorator . MediaType } ` } ,
59
- requestBodyObj [ fname ] ,
60
- ] ;
61
- break ;
30
+ const serializeContentType = ( contentType : string , reqBody : any ) : [ object , any ] => {
31
+ let [ requestHeaders , requestBody ] : [ object , any ] = [ { } , { } ] ;
62
32
63
- default :
64
- requestBody = requestBodyObj [ fname ] ;
65
- const requestBodyType : string = typeof requestBody ;
66
- if (
67
- requestBodyType === "string" ||
68
- requestBody instanceof String ||
69
- requestBody instanceof Uint8Array
70
- )
71
- requestHeaders = { "Content-Type" : `${ requestDecorator . MediaType } ` } ;
72
- else
73
- throw new Error (
74
- `invalid request body type ${ requestBodyType } for mediaType ${ requestDecorator . MediaType } `
75
- ) ;
76
- }
77
- } ) ;
33
+ switch ( contentType ) {
34
+ case "multipart/form-data" :
35
+ case "multipart/mixed" :
36
+ requestBody = encodeMultipartFormData ( reqBody ) ;
37
+ requestHeaders = ( requestBody as FormData ) . getHeaders ( ) ;
38
+ break ;
39
+
40
+ case "application/x-www-form-urlencoded" :
41
+ [ requestHeaders , requestBody ] = [
42
+ { "Content-Type" : `${ contentType } ` } ,
43
+ encodeFormUrlEncodeData ( reqBody ) ,
44
+ ] ;
45
+ break ;
46
+
47
+ case "application/json" :
48
+ case "text/json" :
49
+ [ requestHeaders , requestBody ] = [
50
+ { "Content-Type" : `${ contentType } ` } ,
51
+ reqBody ,
52
+ ] ;
53
+ break ;
54
+
55
+ default :
56
+ requestBody = reqBody ;
57
+ const requestBodyType : string = typeof requestBody ;
58
+ if (
59
+ requestBodyType === "string" ||
60
+ requestBody instanceof String ||
61
+ requestBody instanceof Uint8Array
62
+ )
63
+ requestHeaders = { "Content-Type" : `${ contentType } ` } ;
64
+ else
65
+ throw new Error (
66
+ `invalid request body type ${ requestBodyType } for mediaType ${ contentType } `
67
+ ) ;
68
+ }
78
69
return [ requestHeaders , requestBody ] ;
79
70
}
80
71
0 commit comments