@@ -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,44 +160,30 @@ private void generateEndpointParameters() {
160160 );
161161
162162 writer .write ("" );
163- writer .openBlock (
164- """
165- export type ClientResolvedEndpointParameters = Omit<ClientInputEndpointParameters, "endpoint"> & {
166- """ ,
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 + "> & {" ,
167170 "};" ,
168171 () -> {
169172 writer .write ("defaultSigningName: string;" );
170- // Add clientContextParams with same structure as input
171- Map <String , String > clientContextParams = ruleSetParameterFinder .getClientContextParams ();
172- Map <String , String > customerContextParams = new HashMap <>();
173- Map <String , String > builtInParams = ruleSetParameterFinder .getBuiltInParams ();
174- for (Map .Entry <String , String > entry : clientContextParams .entrySet ()) {
175- if (!builtInParams .containsKey (entry .getKey ())) {
176- customerContextParams .put (entry .getKey (), entry .getValue ());
177- }
178- }
179173 if (!customerContextParams .isEmpty ()) {
180174 writer .write ("clientContextParams: {" );
181175 writer .indent ();
182176 ObjectNode ruleSet = endpointRuleSetTrait .getRuleSet ().expectObjectNode ();
183177 ruleSet .getObjectMember ("parameters" ).ifPresent (parameters -> {
184178 parameters .accept (new RuleSetParametersVisitor (
185- writer , customerContextParams , false ));
179+ writer , customerContextParams , true ));
186180 });
187181 writer .dedent ();
188182 writer .write ("};" );
189183 }
190184 }
191185 );
192186 // Generate clientContextParamDefaults only if there are customer context params
193- Map <String , String > clientContextParams = ruleSetParameterFinder .getClientContextParams ();
194- Map <String , String > builtInParams = ruleSetParameterFinder .getBuiltInParams ();
195- Map <String , String > customerContextParams = new HashMap <>();
196- for (Map .Entry <String , String > entry : clientContextParams .entrySet ()) {
197- if (!builtInParams .containsKey (entry .getKey ())) {
198- customerContextParams .put (entry .getKey (), entry .getValue ());
199- }
200- }
201187 if (!customerContextParams .isEmpty ()) {
202188 // Check if any parameters have default values
203189 boolean hasDefaults = false ;
@@ -253,6 +239,34 @@ private void generateEndpointParameters() {
253239 "defaultSigningName: \" $L\" ," ,
254240 settings .getDefaultSigningName ()
255241 );
242+ // Only generate clientContextParams if there are customer context params
243+ if (!customerContextParams .isEmpty ()) {
244+ // Initialize clientContextParams if undefined to satisfy type requirements
245+ // Check if we have defaults to merge
246+ boolean hasDefaultsForResolve = false ;
247+ if (ruleSet .getObjectMember ("parameters" ).isPresent ()) {
248+ ObjectNode parameters = ruleSet .getObjectMember ("parameters" )
249+ .get ().expectObjectNode ();
250+ for (Map .Entry <String , String > entry : customerContextParams .entrySet ()) {
251+ String paramName = entry .getKey ();
252+ ObjectNode paramNode = parameters .getObjectMember (paramName ).orElse (null );
253+ if (paramNode != null && paramNode .containsMember ("default" )) {
254+ hasDefaultsForResolve = true ;
255+ break ;
256+ }
257+ }
258+ }
259+ if (hasDefaultsForResolve ) {
260+ writer .write (
261+ "clientContextParams: Object.assign(clientContextParamDefaults, "
262+ + "options.clientContextParams ?? {}),"
263+ );
264+ } else {
265+ writer .write (
266+ "clientContextParams: options.clientContextParams ?? {},"
267+ );
268+ }
269+ }
256270 });
257271 }
258272 );
0 commit comments