@@ -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 -> {
@@ -160,45 +160,30 @@ private void generateEndpointParameters() {
160160 );
161161
162162 writer .write ("" );
163- writer .writeDocs ("@public" );
164- writer .openBlock (
165- """
166- export type ClientResolvedEndpointParameters = Omit<ClientInputEndpointParameters, "endpoint"> & {
167- """ ,
163+ // Build Omit type - omit endpoint, and clientContextParams if exists
164+ String omitFields = customerContextParams .isEmpty ()
165+ ? "\" endpoint\" "
166+ : "\" endpoint\" | \" clientContextParams\" " ;
167+ writer .openBlock (
168+ "export type ClientResolvedEndpointParameters = "
169+ + "Omit<ClientInputEndpointParameters, " + omitFields + "> & {" ,
168170 "};" ,
169171 () -> {
170172 writer .write ("defaultSigningName: string;" );
171- // Add clientContextParams with same structure as input
172- Map <String , String > clientContextParams = ruleSetParameterFinder .getClientContextParams ();
173- Map <String , String > customerContextParams = new HashMap <>();
174- Map <String , String > builtInParams = ruleSetParameterFinder .getBuiltInParams ();
175- for (Map .Entry <String , String > entry : clientContextParams .entrySet ()) {
176- if (!builtInParams .containsKey (entry .getKey ())) {
177- customerContextParams .put (entry .getKey (), entry .getValue ());
178- }
179- }
180173 if (!customerContextParams .isEmpty ()) {
181174 writer .write ("clientContextParams: {" );
182175 writer .indent ();
183176 ObjectNode ruleSet = endpointRuleSetTrait .getRuleSet ().expectObjectNode ();
184177 ruleSet .getObjectMember ("parameters" ).ifPresent (parameters -> {
185178 parameters .accept (new RuleSetParametersVisitor (
186- writer , customerContextParams , false ));
179+ writer , customerContextParams , true ));
187180 });
188181 writer .dedent ();
189182 writer .write ("};" );
190183 }
191184 }
192185 );
193186 // Generate clientContextParamDefaults only if there are customer context params
194- Map <String , String > clientContextParams = ruleSetParameterFinder .getClientContextParams ();
195- Map <String , String > builtInParams = ruleSetParameterFinder .getBuiltInParams ();
196- Map <String , String > customerContextParams = new HashMap <>();
197- for (Map .Entry <String , String > entry : clientContextParams .entrySet ()) {
198- if (!builtInParams .containsKey (entry .getKey ())) {
199- customerContextParams .put (entry .getKey (), entry .getValue ());
200- }
201- }
202187 if (!customerContextParams .isEmpty ()) {
203188 // Check if any parameters have default values
204189 boolean hasDefaults = false ;
@@ -256,6 +241,34 @@ private void generateEndpointParameters() {
256241 "defaultSigningName: \" $L\" ," ,
257242 settings .getDefaultSigningName ()
258243 );
244+ // Only generate clientContextParams if there are customer context params
245+ if (!customerContextParams .isEmpty ()) {
246+ // Initialize clientContextParams if undefined to satisfy type requirements
247+ // Check if we have defaults to merge
248+ boolean hasDefaultsForResolve = false ;
249+ if (ruleSet .getObjectMember ("parameters" ).isPresent ()) {
250+ ObjectNode parameters = ruleSet .getObjectMember ("parameters" )
251+ .get ().expectObjectNode ();
252+ for (Map .Entry <String , String > entry : customerContextParams .entrySet ()) {
253+ String paramName = entry .getKey ();
254+ ObjectNode paramNode = parameters .getObjectMember (paramName ).orElse (null );
255+ if (paramNode != null && paramNode .containsMember ("default" )) {
256+ hasDefaultsForResolve = true ;
257+ break ;
258+ }
259+ }
260+ }
261+ if (hasDefaultsForResolve ) {
262+ writer .write (
263+ "clientContextParams: Object.assign(clientContextParamDefaults, "
264+ + "options.clientContextParams ?? {}),"
265+ );
266+ } else {
267+ writer .write (
268+ "clientContextParams: options.clientContextParams ?? {},"
269+ );
270+ }
271+ }
259272 });
260273 }
261274 );
0 commit comments