@@ -24,137 +24,139 @@ module.exports = class RequestValidator {
2424
2525 switch ( endpoint . route . type ) {
2626 // GET request, we assume data will only be in the query or url params
27- case 'GET' : {
28- for ( let param of ( endpoint . params || [ ] ) ) {
29- let value = args . shift ( )
30- // params should always be a string since they will be replaced in the url
31- if ( typeof value !== 'string' && param . optional === false ) {
32- return reject ( new Error ( `Expected to receive string argument for ${ param . name } to match but got ${ value } ` ) )
33- }
34- if ( value ) {
35- // if value is given, use it
36- httpOpts . url = httpOpts . url . replace ( param . name , value )
37- } else if ( param . optional === false && param . defaultvalue !== null ) {
38- // use default value if available
39- httpOpts . url = httpOpts . url . replace ( param . name , param . defaultvalue )
40- }
41- }
42- for ( let param of ( endpoint . query || [ ] ) ) {
43- let value = args . shift ( )
44- // query should always be a string since they will be replaced in the url
45- if ( typeof value !== 'string' && param . optional === false ) {
46- return reject ( new Error ( `Expected to receive string argument for ${ param . name } query but got ${ value } ` ) )
47- }
48- // set query value
49- if ( value ) {
50- // if value is given, use it
51- httpOpts . params [ param . name ] = value
52- } else if ( param . optional === false && param . defaultvalue !== null ) {
53- // use default value if available
54- httpOpts . params [ param . name ] = param . defaultvalue
55- }
56- }
57- break
27+ case 'GET' : {
28+ for ( let param of ( endpoint . params || [ ] ) ) {
29+ let value = args . shift ( )
30+ // params should always be a string since they will be replaced in the url
31+ if ( typeof value !== 'string' && param . optional === false ) {
32+ return reject ( new Error ( `Expected to receive string argument for ${ param . name } to match but got ${ value } ` ) )
33+ }
34+ if ( value ) {
35+ // if value is given, use it
36+ httpOpts . url = httpOpts . url . replace ( param . name , value )
37+ } else if ( param . optional === false && param . defaultvalue !== null ) {
38+ // use default value if available
39+ httpOpts . url = httpOpts . url . replace ( param . name , param . defaultvalue )
40+ }
41+ }
42+ for ( let param of ( endpoint . query || [ ] ) ) {
43+ let value = args . shift ( )
44+ // query should always be a string since they will be replaced in the url
45+ if ( typeof value !== 'string' && param . optional === false ) {
46+ return reject ( new Error ( `Expected to receive string argument for ${ param . name } query but got ${ value } ` ) )
47+ }
48+ // set query value
49+ if ( value ) {
50+ // if value is given, use it
51+ httpOpts . params [ param . name ] = value
52+ } else if ( param . optional === false && param . defaultvalue !== null ) {
53+ // use default value if available
54+ httpOpts . params [ param . name ] = param . defaultvalue
55+ }
5856 }
57+ break
58+ }
5959 // for PUT, POST and PATCH request, only params and body are authorized
60- case 'PUT' :
61- case 'POST' :
62- case 'PATCH' : {
63- for ( let param of ( endpoint . params || [ ] ) ) {
64- let value = args . shift ( )
65- // params should always be a string since they will be replaced in the url
66- if ( typeof value !== 'string' && param . optional === false ) {
67- return reject ( new Error ( `Expected to receive string argument for ${ param . name } to match but got ${ value } ` ) )
68- }
69- // replace param in url
70- if ( value ) {
71- // if value is given, use it
72- httpOpts . url = httpOpts . url . replace ( param . name , value )
73- } else if ( param . optional === false && param . defaultvalue !== null ) {
74- // use default value if available
75- httpOpts . url = httpOpts . url . replace ( param . name , param . defaultvalue )
76- }
77- }
78- for ( let param of ( endpoint . query || [ ] ) ) {
79- let value = args . shift ( )
80- // query should always be a string since they will be replaced in the url
81- if ( typeof value !== 'string' && param . optional === false ) {
82- return reject ( new Error ( `Expected to receive string argument for ${ param . name } query but got ${ value } ` ) )
83- }
84- // set query value
85- if ( value ) {
86- // if value is given, use it
87- httpOpts . params [ param . name ] = value
88- } else if ( param . optional === false && param . defaultvalue !== null ) {
89- // use default value if available
90- httpOpts . params [ param . name ] = param . defaultvalue
91- }
92- }
93- // if we don't have any arguments, break
94- if ( args . length === 0 ) break
95- let data = args [ 0 ]
96- if ( typeof data !== 'object' && endpoint . body . length > 0 ) {
97- return reject ( new Error ( `Expected to receive an object for post data but received ${ typeof data } ` ) )
98- }
99- for ( let field of ( endpoint . body || [ ] ) ) {
100- // verify that the mandatory field are here
101- if ( ! isDefined ( data [ field . name ] ) && field . optional === false && field . defaultvalue === null ) {
102- return reject ( new Error ( `Missing mandatory field ${ field . name } to make a POST request on ${ endpoint . route . name } ` ) )
103- }
104- // verify that the mandatory field are the good type
105- if ( typeof data [ field . name ] !== field . type && field . optional === false && field . defaultvalue === null ) { // eslint-disable-line
106- return reject ( new Error ( `Invalid type for field ${ field . name } , expected ${ field . type } but got ${ typeof data [ field . name ] } ` ) )
107- }
60+ case 'PUT' :
61+ case 'POST' :
62+ case 'PATCH' : {
63+ for ( let param of ( endpoint . params || [ ] ) ) {
64+ let value = args . shift ( )
65+ // params should always be a string since they will be replaced in the url
66+ if ( typeof value !== 'string' && param . optional === false ) {
67+ return reject ( new Error ( `Expected to receive string argument for ${ param . name } to match but got ${ value } ` ) )
68+ }
69+ // replace param in url
70+ if ( value ) {
71+ // if value is given, use it
72+ httpOpts . url = httpOpts . url . replace ( param . name , value )
73+ } else if ( param . optional === false && param . defaultvalue !== null ) {
74+ // use default value if available
75+ httpOpts . url = httpOpts . url . replace ( param . name , param . defaultvalue )
76+ }
77+ }
78+ for ( let param of ( endpoint . query || [ ] ) ) {
79+ let value = args . shift ( )
80+ // query should always be a string since they will be replaced in the url
81+ if ( typeof value !== 'string' && param . optional === false ) {
82+ return reject ( new Error ( `Expected to receive string argument for ${ param . name } query but got ${ value } ` ) )
83+ }
84+ // set query value
85+ if ( value ) {
86+ // if value is given, use it
87+ httpOpts . params [ param . name ] = value
88+ } else if ( param . optional === false && param . defaultvalue !== null ) {
89+ // use default value if available
90+ httpOpts . params [ param . name ] = param . defaultvalue
91+ }
92+ }
93+ // if we don't have any arguments, break
94+ if ( args . length === 0 ) break
95+ let data = args [ 0 ]
96+ if ( typeof data !== 'object' && endpoint . body . length > 0 ) {
97+ return reject ( new Error ( `Expected to receive an object for post data but received ${ typeof data } ` ) )
98+ }
99+ for ( let field of ( endpoint . body || [ ] ) ) {
100+ let isSubfield = field . name . includes ( '[]' ) === true
101+
102+ // verify that the mandatory field are here
103+ if ( ! isDefined ( data [ field . name ] ) && isSubfield === false && field . optional === false && field . defaultvalue === null ) {
104+ return reject ( new Error ( `Missing mandatory field ${ field . name } to make a POST request on ${ endpoint . route . name } ` ) )
105+ }
106+ // verify that the mandatory field are the good type
107+ if ( typeof data [ field . name ] !== field . type && isSubfield === false && field . optional === false && field . defaultvalue === null ) { // eslint-disable-line
108+ return reject ( new Error ( `Invalid type for field ${ field . name } , expected ${ field . type } but got ${ typeof data [ field . name ] } ` ) )
109+ }
108110
109- // add it to the request only when its present
110- if ( isDefined ( data [ field . name ] ) ) {
111- httpOpts . data [ field . name ] = data [ field . name ]
112- }
111+ // add it to the request only when its present
112+ if ( isDefined ( data [ field . name ] ) ) {
113+ httpOpts . data [ field . name ] = data [ field . name ]
114+ }
113115
114- // or else its not optional and has a default value
115- if ( field . optional === false && field . defaultvalue !== null ) {
116- httpOpts . data [ field . name ] = field . defaultvalue
117- }
116+ // or else its not optional and has a default value
117+ if ( field . optional === false && field . defaultvalue !== null ) {
118+ httpOpts . data [ field . name ] = field . defaultvalue
118119 }
119- break
120120 }
121+ break
122+ }
121123 // DELETE can have params or query parameters
122- case 'DELETE' : {
123- for ( let param of ( endpoint . params || [ ] ) ) {
124- let value = args . shift ( )
125- // params should always be a string since they will be replaced in the url
126- if ( typeof value !== 'string' && param . optional === false ) {
127- return reject ( new Error ( `Expected to receive string argument for ${ param . name } to match but got ${ value } ` ) )
128- }
129- // replace param in url
130- if ( value ) {
131- // if value is given, use it
132- httpOpts . url = httpOpts . url . replace ( param . name , value )
133- } else if ( param . optional === false && param . defaultvalue !== null ) {
134- // use default value if available
135- httpOpts . url = httpOpts . url . replace ( param . name , param . defaultvalue )
136- }
137- }
138- for ( let param of ( endpoint . query || [ ] ) ) {
139- let value = args . shift ( )
140- // query should always be a string
141- if ( typeof value !== 'string' && param . optional === false ) {
142- return reject ( new Error ( `Expected to receive string argument for ${ param . name } query but got ${ value } ` ) )
143- }
144- // replace param in url
145- if ( value ) {
146- // if value is given, use it
147- httpOpts . params [ param . name ] = value
148- } else if ( param . optional === false && param . defaultvalue !== null ) {
149- // use default value if available
150- httpOpts . params [ param . name ] = param . defaultvalue
151- }
152- }
153- break
124+ case 'DELETE' : {
125+ for ( let param of ( endpoint . params || [ ] ) ) {
126+ let value = args . shift ( )
127+ // params should always be a string since they will be replaced in the url
128+ if ( typeof value !== 'string' && param . optional === false ) {
129+ return reject ( new Error ( `Expected to receive string argument for ${ param . name } to match but got ${ value } ` ) )
130+ }
131+ // replace param in url
132+ if ( value ) {
133+ // if value is given, use it
134+ httpOpts . url = httpOpts . url . replace ( param . name , value )
135+ } else if ( param . optional === false && param . defaultvalue !== null ) {
136+ // use default value if available
137+ httpOpts . url = httpOpts . url . replace ( param . name , param . defaultvalue )
138+ }
154139 }
155- default : {
156- return reject ( new Error ( `Invalid endpoint declaration, invalid method ${ endpoint . route . type } found` ) )
140+ for ( let param of ( endpoint . query || [ ] ) ) {
141+ let value = args . shift ( )
142+ // query should always be a string
143+ if ( typeof value !== 'string' && param . optional === false ) {
144+ return reject ( new Error ( `Expected to receive string argument for ${ param . name } query but got ${ value } ` ) )
145+ }
146+ // replace param in url
147+ if ( value ) {
148+ // if value is given, use it
149+ httpOpts . params [ param . name ] = value
150+ } else if ( param . optional === false && param . defaultvalue !== null ) {
151+ // use default value if available
152+ httpOpts . params [ param . name ] = param . defaultvalue
153+ }
157154 }
155+ break
156+ }
157+ default : {
158+ return reject ( new Error ( `Invalid endpoint declaration, invalid method ${ endpoint . route . type } found` ) )
159+ }
158160 }
159161 return resolve ( httpOpts )
160162 } )
0 commit comments