@@ -3,78 +3,69 @@ import {
33 convertIfDateObjectToISOString ,
44 isBooleanRecord ,
55 isNumberRecord ,
6- isStringRecord ,
6+ isStringRecord , SerializationMethodToContentType ,
77} from "./utils" ;
88
9- const requestMetadataKey = "request" ;
9+ export const requestMetadataKey = "request" ;
1010const mpFormMetadataKey = "multipart_form" ;
1111
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 ) ;
1515 }
1616
17- let requestBodyObj = request ;
18-
19- const firstLevelRequestAnn : string = Reflect . getMetadata (
17+ const requestBodyAnn : string = Reflect . getMetadata (
2018 requestMetadataKey ,
2119 request ,
22- requestMetadataKey
20+ requestFieldName
2321 ) ;
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+ }
4725
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+ }
5429
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 ] = [ { } , { } ] ;
6232
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+ }
7869 return [ requestHeaders , requestBody ] ;
7970}
8071
0 commit comments