diff --git a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/CommandGenerator.java b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/CommandGenerator.java index 4eb9ca83a2c..72cc892ba28 100644 --- a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/CommandGenerator.java +++ b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/CommandGenerator.java @@ -270,28 +270,38 @@ private void generateEndpointParameterInstructionProvider() { if (!service.hasTrait(EndpointRuleSetTrait.class)) { return; } + + writer.addImport( + "commonParams", null, + Paths.get(".", CodegenUtils.SOURCE_FOLDER, "endpoint/EndpointParameters").toString() + ); + + RuleSetParameterFinder parameterFinder = new RuleSetParameterFinder(service); + Map staticContextParamValues = parameterFinder.getStaticContextParamValues(operation); + Map contextParams = parameterFinder.getContextParams( + model.getShape(operation.getInputShape()).get() + ); + Map operationContextParamValues = parameterFinder.getOperationContextParamValues(operation); + + if (staticContextParamValues.isEmpty() && contextParams.isEmpty() && operationContextParamValues.isEmpty()) { + writer.write(".ep(commonParams)"); + return; + } + writer.write(".ep({") .indent(); { - writer.addImport( - "commonParams", null, - Paths.get(".", CodegenUtils.SOURCE_FOLDER, "endpoint/EndpointParameters").toString() - ); - writer.write("...commonParams,"); - - RuleSetParameterFinder parameterFinder = new RuleSetParameterFinder(service); Set paramNames = new HashSet<>(); - parameterFinder.getStaticContextParamValues(operation).forEach((name, value) -> { + staticContextParamValues.forEach((name, value) -> { paramNames.add(name); writer.write( "$L: { type: \"staticContextParams\", value: $L },", name, value); }); - Shape operationInput = model.getShape(operation.getInputShape()).get(); - parameterFinder.getContextParams(operationInput).forEach((name, memberName) -> { + contextParams.forEach((name, memberName) -> { if (!paramNames.contains(name)) { writer.write( "$L: { type: \"contextParams\", name: \"$L\" },", @@ -300,7 +310,7 @@ private void generateEndpointParameterInstructionProvider() { paramNames.add(name); }); - parameterFinder.getOperationContextParamValues(operation).forEach((name, jmesPathForInputInJs) -> { + operationContextParamValues.forEach((name, jmesPathForInputInJs) -> { writer.write( """ $L: { type: \"operationContextParams\", name: $L },