@@ -17,6 +17,10 @@ const OperationNotFoundError = createError('OperationNotFoundError', function (m
1717 Object . assign ( this , extra || { } )
1818} )
1919
20+ const findParametersWithName = ( name , parameters ) => {
21+ return parameters . filter ( p => p . name === name )
22+ }
23+
2024// For stubbing in tests
2125export const self = {
2226 buildRequest
@@ -110,36 +114,43 @@ export function buildRequest({
110114 req . headers . accept = responseContentType
111115 }
112116
113- // Add values to request
114- arrayOrEmpty ( operation . parameters ) // operation parameters
117+ const combinedParameters = [ ]
118+ . concat ( arrayOrEmpty ( operation . parameters ) ) // operation parameters
115119 . concat ( arrayOrEmpty ( path . parameters ) ) // path parameters
116- . forEach ( ( parameter ) => {
117- const builder = parameterBuilders [ parameter . in ]
118- let value
119120
120- if ( parameter . in === 'body' && parameter . schema && parameter . schema . properties ) {
121- value = parameters
122- }
121+ // Add values to request
122+ combinedParameters . forEach ( ( parameter ) => {
123+ const builder = parameterBuilders [ parameter . in ]
124+ let value
123125
124- value = parameter && parameter . name && parameters [ parameter . name ]
126+ if ( parameter . in === 'body' && parameter . schema && parameter . schema . properties ) {
127+ value = parameters
128+ }
129+
130+ value = parameter && parameter . name && parameters [ parameter . name ]
125131
126- if ( typeof value === 'undefined' ) {
132+ if ( typeof value === 'undefined' ) {
127133 // check for `name-in` formatted key
128- value = parameter && parameter . name && parameters [ `${ parameter . name } -${ parameter . in } ` ]
129- }
134+ value = parameter && parameter . name && parameters [ `${ parameter . in } .${ parameter . name } ` ]
135+ }
136+ else if ( findParametersWithName ( parameter . name , combinedParameters ) . length > 1 ) {
137+ // value came from `parameters[parameter.name]`
138+ // check to see if this is an ambiguous parameter
139+ console . warn ( `Parameter '${ parameter . name } ' is ambiguous because the defined spec has more than one parameter with the name: '${ parameter . name } ' and the passed-in parameter values did not define an 'in' value.` )
140+ }
130141
131- if ( typeof parameter . default !== 'undefined' && typeof value === 'undefined' ) {
132- value = parameter . default
133- }
142+ if ( typeof parameter . default !== 'undefined' && typeof value === 'undefined' ) {
143+ value = parameter . default
144+ }
134145
135- if ( typeof value === 'undefined' && parameter . required && ! parameter . allowEmptyValue ) {
136- throw new Error ( `Required parameter ${ parameter . name } is not provided` )
137- }
146+ if ( typeof value === 'undefined' && parameter . required && ! parameter . allowEmptyValue ) {
147+ throw new Error ( `Required parameter ${ parameter . name } is not provided` )
148+ }
138149
139- if ( builder ) {
140- builder ( { req, parameter, value, operation, spec} )
141- }
142- } )
150+ if ( builder ) {
151+ builder ( { req, parameter, value, operation, spec} )
152+ }
153+ } )
143154
144155 // Add securities, which are applicable
145156 req = applySecurities ( { request : req , securities, operation, spec} )
0 commit comments