@@ -111,29 +111,29 @@ private void generateEndpointParameters() {
111111 this .delegator .useFileWriter (
112112 Paths .get (CodegenUtils .SOURCE_FOLDER , ENDPOINT_FOLDER , ENDPOINT_PARAMETERS_FILE ).toString (),
113113 writer -> {
114- writer .addTypeImport ("EndpointParameters" , "__EndpointParameters" , TypeScriptDependency .SMITHY_TYPES );
115- writer .addTypeImport ("Provider" , null , TypeScriptDependency .SMITHY_TYPES );
114+ writer .addImport ("EndpointParameters" , "__EndpointParameters" , TypeScriptDependency .SMITHY_TYPES );
115+ writer .addImport ("Provider" , null , TypeScriptDependency .SMITHY_TYPES );
116+ Map <String , String > clientContextParams =
117+ ruleSetParameterFinder .getClientContextParams ();
118+ Map <String , String > builtInParams = ruleSetParameterFinder .getBuiltInParams ();
119+ builtInParams .keySet ().removeIf (OmitEndpointParams ::isOmitted );
120+ Set <String > knownConfigKeys = Set .of (
121+ "apiKey" , "retryStrategy" , "requestHandler" );
122+ // Generate clientContextParams with all params excluding built-ins
123+ Map <String , String > customerContextParams = new HashMap <>();
124+ for (Map .Entry <String , String > entry : clientContextParams .entrySet ()) {
125+ if (!builtInParams .containsKey (entry .getKey ())) {
126+ customerContextParams .put (entry .getKey (), entry .getValue ());
127+ }
128+ }
116129
117130 writer .writeDocs ("@public" );
118131 writer .openBlock (
119132 "export interface ClientInputEndpointParameters {" ,
120133 "}" ,
121134 () -> {
122- Map <String , String > clientContextParams =
123- ruleSetParameterFinder .getClientContextParams ();
124- Map <String , String > builtInParams = ruleSetParameterFinder .getBuiltInParams ();
125- builtInParams .keySet ().removeIf (OmitEndpointParams ::isOmitted );
126- Set <String > knownConfigKeys = Set .of (
127- "apiKey" , "retryStrategy" , "requestHandler" );
128- // Generate clientContextParams with all params excluding built-ins
129- Map <String , String > customerContextParams = new HashMap <>();
130- for (Map .Entry <String , String > entry : clientContextParams .entrySet ()) {
131- if (!builtInParams .containsKey (entry .getKey ())) {
132- customerContextParams .put (entry .getKey (), entry .getValue ());
133- }
134- }
135135 if (!customerContextParams .isEmpty ()) {
136- writer .write ("clientContextParams: {" );
136+ writer .write ("clientContextParams? : {" );
137137 writer .indent ();
138138 ObjectNode ruleSet = endpointRuleSetTrait .getRuleSet ().expectObjectNode ();
139139 ruleSet .getObjectMember ("parameters" ).ifPresent (parameters -> {
@@ -168,14 +168,6 @@ private void generateEndpointParameters() {
168168 };"""
169169 );
170170 // Generate clientContextParamDefaults only if there are customer context params
171- Map <String , String > clientContextParams = ruleSetParameterFinder .getClientContextParams ();
172- Map <String , String > builtInParams = ruleSetParameterFinder .getBuiltInParams ();
173- Map <String , String > customerContextParams = new HashMap <>();
174- for (Map .Entry <String , String > entry : clientContextParams .entrySet ()) {
175- if (!builtInParams .containsKey (entry .getKey ())) {
176- customerContextParams .put (entry .getKey (), entry .getValue ());
177- }
178- }
179171 if (!customerContextParams .isEmpty ()) {
180172 // Check if any parameters have default values
181173 boolean hasDefaults = false ;
@@ -234,6 +226,34 @@ private void generateEndpointParameters() {
234226 "defaultSigningName: \" $L\" ," ,
235227 settings .getDefaultSigningName ()
236228 );
229+ // Only generate clientContextParams if there are customer context params
230+ if (!customerContextParams .isEmpty ()) {
231+ // Initialize clientContextParams if undefined to satisfy type requirements
232+ // Check if we have defaults to merge
233+ boolean hasDefaultsForResolve = false ;
234+ if (ruleSet .getObjectMember ("parameters" ).isPresent ()) {
235+ ObjectNode parameters = ruleSet .getObjectMember ("parameters" )
236+ .get ().expectObjectNode ();
237+ for (Map .Entry <String , String > entry : customerContextParams .entrySet ()) {
238+ String paramName = entry .getKey ();
239+ ObjectNode paramNode = parameters .getObjectMember (paramName ).orElse (null );
240+ if (paramNode != null && paramNode .containsMember ("default" )) {
241+ hasDefaultsForResolve = true ;
242+ break ;
243+ }
244+ }
245+ }
246+ if (hasDefaultsForResolve ) {
247+ writer .write (
248+ "clientContextParams: Object.assign(clientContextParamDefaults, "
249+ + "options.clientContextParams ?? {}),"
250+ );
251+ } else {
252+ writer .write (
253+ "clientContextParams: options.clientContextParams ?? {},"
254+ );
255+ }
256+ }
237257 });
238258 }
239259 );
0 commit comments