Skip to content

Commit fc5635b

Browse files
authored
fix(endpoint): deduplicate client context and built-in params with the same name (#616)
1 parent bd2e0d9 commit fc5635b

File tree

2 files changed

+37
-13
lines changed

2 files changed

+37
-13
lines changed

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/CommandGenerator.java

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import static software.amazon.smithy.typescript.codegen.CodegenUtils.writeClientCommandStreamingOutputType;
2121

2222
import java.nio.file.Paths;
23+
import java.util.HashSet;
2324
import java.util.List;
2425
import java.util.Map;
2526
import java.util.Optional;
@@ -191,18 +192,8 @@ private void generateEndpointParameterInstructionProvider() {
191192
"return {", "};",
192193
() -> {
193194
RuleSetParameterFinder parameterFinder = new RuleSetParameterFinder(service);
194-
parameterFinder.getBuiltInParams().forEach((name, type) -> {
195-
writer.write(
196-
"$L: { type: \"builtInParams\", name: \"$L\" },",
197-
name, EndpointsParamNameMap.getLocalName(name)
198-
);
199-
});
200-
parameterFinder.getClientContextParams().forEach((name, type) -> {
201-
writer.write(
202-
"$L: { type: \"clientContextParams\", name: \"$L\" },",
203-
name, EndpointsParamNameMap.getLocalName(name)
204-
);
205-
});
195+
Set<String> paramNames = new HashSet<>();
196+
206197
Shape operationInput = model.getShape(operation.getInputShape()).get();
207198
parameterFinder.getStaticContextParamValues(operationInput).forEach((name, value) -> {
208199
writer.write(
@@ -216,6 +207,24 @@ private void generateEndpointParameterInstructionProvider() {
216207
name, EndpointsParamNameMap.getLocalName(name)
217208
);
218209
});
210+
parameterFinder.getClientContextParams().forEach((name, type) -> {
211+
if (!paramNames.contains(name)) {
212+
writer.write(
213+
"$L: { type: \"clientContextParams\", name: \"$L\" },",
214+
name, EndpointsParamNameMap.getLocalName(name)
215+
);
216+
}
217+
paramNames.add(name);
218+
});
219+
parameterFinder.getBuiltInParams().forEach((name, type) -> {
220+
if (!paramNames.contains(name)) {
221+
writer.write(
222+
"$L: { type: \"builtInParams\", name: \"$L\" },",
223+
name, EndpointsParamNameMap.getLocalName(name)
224+
);
225+
}
226+
paramNames.add(name);
227+
});
219228
}
220229
);
221230
}

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/endpointsV2/EndpointsParamNameMap.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,21 @@ public static void addNameMapping(Map<String, String> parameterNameMap) {
3838
}
3939

4040
public static String getLocalName(String endpointsV2ParamName) {
41-
return MAPPING.getOrDefault(endpointsV2ParamName, endpointsV2ParamName);
41+
boolean isTitleCase = false;
42+
if (endpointsV2ParamName.length() >= 2) {
43+
String char1 = endpointsV2ParamName.substring(0, 1);
44+
String char2 = endpointsV2ParamName.substring(1, 2);
45+
if (char1.toUpperCase().equals(char1) && char2.toLowerCase().equals(char2)) {
46+
isTitleCase = true;
47+
}
48+
}
49+
50+
String suggestedName = endpointsV2ParamName;
51+
if (isTitleCase) {
52+
suggestedName = endpointsV2ParamName.substring(0, 1).toLowerCase()
53+
+ endpointsV2ParamName.substring(1);
54+
}
55+
56+
return MAPPING.getOrDefault(endpointsV2ParamName, suggestedName);
4257
}
4358
}

0 commit comments

Comments
 (0)