diff --git a/.changeset/eight-onions-joke.md b/.changeset/eight-onions-joke.md new file mode 100644 index 00000000000..a845151cc84 --- /dev/null +++ b/.changeset/eight-onions-joke.md @@ -0,0 +1,2 @@ +--- +--- 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 b4cb6030916..50858c4cafa 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 @@ -30,6 +30,7 @@ import java.util.Optional; import java.util.Set; import java.util.TreeSet; +import java.util.function.Function; import java.util.stream.Collectors; import software.amazon.smithy.build.FileManifest; import software.amazon.smithy.codegen.core.Symbol; @@ -49,17 +50,14 @@ import software.amazon.smithy.model.traits.InternalTrait; import software.amazon.smithy.rulesengine.traits.EndpointRuleSetTrait; import software.amazon.smithy.typescript.codegen.documentation.StructureExampleGenerator; -import software.amazon.smithy.typescript.codegen.endpointsV2.EndpointsParamNameMap; import software.amazon.smithy.typescript.codegen.endpointsV2.RuleSetParameterFinder; import software.amazon.smithy.typescript.codegen.integration.ProtocolGenerator; import software.amazon.smithy.typescript.codegen.integration.RuntimeClientPlugin; import software.amazon.smithy.typescript.codegen.sections.CommandBodyExtraCodeSection; import software.amazon.smithy.typescript.codegen.sections.CommandConstructorCodeSection; -import software.amazon.smithy.typescript.codegen.sections.CommandContextCodeSection; import software.amazon.smithy.typescript.codegen.sections.CommandPropertiesCodeSection; import software.amazon.smithy.typescript.codegen.sections.SmithyContextCodeSection; import software.amazon.smithy.typescript.codegen.validation.SensitiveDataFinder; -import software.amazon.smithy.utils.OptionalUtils; import software.amazon.smithy.utils.SmithyInternalApi; /** @@ -128,11 +126,6 @@ private void generateClientCommand() { writer.addRelativeImport("ServiceInputTypes", null, Paths.get(".", serviceSymbol.getNamespace())); writer.addRelativeImport("ServiceOutputTypes", null, Paths.get(".", serviceSymbol.getNamespace())); writer.addImport("Command", "$Command", TypeScriptDependency.AWS_SMITHY_CLIENT); - writer.addImport("FinalizeHandlerArguments", "FinalizeHandlerArguments", TypeScriptDependency.SMITHY_TYPES); - writer.addImport("Handler", "Handler", TypeScriptDependency.SMITHY_TYPES); - writer.addImport("HandlerExecutionContext", "HandlerExecutionContext", TypeScriptDependency.SMITHY_TYPES); - writer.addImport("MiddlewareStack", "MiddlewareStack", TypeScriptDependency.SMITHY_TYPES); - writer.addImport("SMITHY_CONTEXT_KEY", null, TypeScriptDependency.SMITHY_TYPES); String name = symbol.getName(); @@ -162,42 +155,48 @@ private void generateClientCommand() { } writer.openBlock( - "export class $L extends $$Command<$T, $T, $L> {", "}", - name, inputType, outputType, - configType, () -> { - - // Section for adding custom command properties. - writer.injectSection(CommandPropertiesCodeSection.builder() - .settings(settings) - .model(model) - .service(service) - .operation(operation) - .symbolProvider(symbolProvider) - .runtimeClientPlugins(runtimePlugins) - .protocolGenerator(protocolGenerator) - .applicationProtocol(applicationProtocol) - .build()); - writer.write(""); - generateEndpointParameterInstructionProvider(); - writer.write(""); - - generateCommandConstructor(); - writer.write(""); - generateCommandMiddlewareResolver(configType); - writeSerde(); - - // Hook for adding more methods to the command. - writer.injectSection(CommandBodyExtraCodeSection.builder() - .settings(settings) - .model(model) - .service(service) - .operation(operation) - .symbolProvider(symbolProvider) - .runtimeClientPlugins(runtimePlugins) - .protocolGenerator(protocolGenerator) - .applicationProtocol(applicationProtocol) - .build()); - }); + "export class $L extends $$Command.classBuilder<$T, $T, $L, ServiceInputTypes, ServiceOutputTypes>()", + ".build() {", // class open bracket. + name, inputType, outputType, configType, + () -> { + generateEndpointParameterInstructionProvider(); + generateCommandMiddlewareResolver(configType); + writeSerde(); + }); + // Ctor section. + writer.injectSection(CommandConstructorCodeSection.builder() + .settings(settings) + .model(model) + .service(service) + .operation(operation) + .symbolProvider(symbolProvider) + .runtimeClientPlugins(runtimePlugins) + .protocolGenerator(protocolGenerator) + .applicationProtocol(applicationProtocol) + .build()); + // Section for adding custom command properties. + writer.injectSection(CommandPropertiesCodeSection.builder() + .settings(settings) + .model(model) + .service(service) + .operation(operation) + .symbolProvider(symbolProvider) + .runtimeClientPlugins(runtimePlugins) + .protocolGenerator(protocolGenerator) + .applicationProtocol(applicationProtocol) + .build()); + // Hook for adding more methods to the command. + writer.injectSection(CommandBodyExtraCodeSection.builder() + .settings(settings) + .model(model) + .service(service) + .operation(operation) + .symbolProvider(symbolProvider) + .runtimeClientPlugins(runtimePlugins) + .protocolGenerator(protocolGenerator) + .applicationProtocol(applicationProtocol) + .build()); + writer.write("}"); // class close bracket. } private String getCommandExample(String serviceName, String configName, String commandName, String commandInput, @@ -253,184 +252,134 @@ private String getThrownExceptions() { return buffer.toString(); } - private void generateCommandConstructor() { - writer.writeDocs("@public") - .openBlock("constructor(readonly input: $T) {", "}", inputType, () -> { - writer.pushState(CommandConstructorCodeSection.builder() - .settings(settings) - .model(model) - .service(service) - .operation(operation) - .symbolProvider(symbolProvider) - .runtimeClientPlugins(runtimePlugins) - .protocolGenerator(protocolGenerator) - .applicationProtocol(applicationProtocol) - .build()); - writer.write("super();"); - writer.popState(); - }); - } - private void generateEndpointParameterInstructionProvider() { if (!service.hasTrait(EndpointRuleSetTrait.class)) { return; } - writer.addImport("EndpointParameterInstructions", null, TypeScriptDependency.MIDDLEWARE_ENDPOINTS_V2); - writer.openBlock( - "public static getEndpointParameterInstructions(): EndpointParameterInstructions {", "}", - () -> { - writer.openBlock( - "return {", "};", - () -> { - RuleSetParameterFinder parameterFinder = new RuleSetParameterFinder(service); - Set paramNames = new HashSet<>(); - - parameterFinder.getStaticContextParamValues(operation).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, type) -> { - if (!paramNames.contains(name)) { - writer.write( - "$L: { type: \"contextParams\", name: \"$L\" },", - name, name); - } - paramNames.add(name); - }); - - parameterFinder.getClientContextParams().forEach((name, type) -> { - if (!paramNames.contains(name)) { - writer.write( - "$L: { type: \"clientContextParams\", name: \"$L\" },", - name, EndpointsParamNameMap.getLocalName(name)); - } - paramNames.add(name); - }); - - parameterFinder.getBuiltInParams().forEach((name, type) -> { - if (!paramNames.contains(name)) { - writer.write( - "$L: { type: \"builtInParams\", name: \"$L\" },", - name, EndpointsParamNameMap.getLocalName(name)); - } - paramNames.add(name); - }); - }); - }); + 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) -> { + paramNames.add(name); + writer.write( + "$L: { type: \"staticContextParams\", value: $L },", + name, value); + }); + + Shape operationInput = model.getShape(operation.getInputShape()).get(); + parameterFinder.getContextParams(operationInput).forEach((name, type) -> { + if (!paramNames.contains(name)) { + writer.write( + "$L: { type: \"contextParams\", name: \"$L\" },", + name, name); + } + paramNames.add(name); + }); + } + writer.write("})") + .dedent(); } private void generateCommandMiddlewareResolver(String configType) { Symbol serde = TypeScriptDependency.MIDDLEWARE_SERDE.createSymbol("getSerdePlugin"); - writer.writeDocs("@internal"); - writer.write("resolveMiddleware(") - .indent() - .write("clientStack: MiddlewareStack<$L, $L>,", "ServiceInputTypes", "ServiceOutputTypes") - .write("configuration: $L,", configType) - .write("options?: $T", applicationProtocol.getOptionsType()) - .dedent(); - writer.openBlock("): Handler<$T, $T> {", "}", inputType, outputType, () -> { - // Add serialization and deserialization plugin. - writer.write("this.middlewareStack.use($T(configuration, this.serialize, this.deserialize));", serde); + Function getFilterFunctionName = input -> { + if (sensitiveDataFinder.findsSensitiveDataIn(input)) { + Symbol inputSymbol = symbolProvider.toSymbol(input); + String filterFunctionName = inputSymbol.getName() + "FilterSensitiveLog"; + writer.addRelativeImport( + filterFunctionName, + null, + Paths.get(".", inputSymbol.getNamespace())); + return filterFunctionName; + } + return "void 0"; + }; + String inputFilterFn = operationIndex + .getInput(operation) + .map(getFilterFunctionName) + .orElse("void 0"); + + String outputFilterFn = operationIndex + .getOutput(operation) + .map(getFilterFunctionName) + .orElse("void 0"); + + writer.pushState() + .putContext("client", symbolProvider.toSymbol(service).getName()) + .putContext("command", symbolProvider.toSymbol(operation).getName()) + .putContext("service", service.toShapeId().getName()) + .putContext("operation", operation.toShapeId().getName()) + .putContext("inputFilter", inputFilterFn) + .putContext("outputFilter", outputFilterFn) + .putContext("configType", configType) + .putContext("optionsType", applicationProtocol.getOptionsType()) + .putContext("inputType", inputType) + .putContext("outputType", outputType); + + writer.write( + """ + .m(function (this: any, Command: any, cs: any, config: $configType:L, o: any) { + return [ + """ + ); + { + // Add serialization and deserialization plugin. + writer.write("$T(config, this.serialize, this.deserialize),", serde); // EndpointsV2 if (service.hasTrait(EndpointRuleSetTrait.class)) { writer.addImport( - "getEndpointPlugin", - null, - TypeScriptDependency.MIDDLEWARE_ENDPOINTS_V2); - writer.openBlock( - "this.middlewareStack.use(getEndpointPlugin(configuration, ", - "));", - () -> { - writer.write("$L.getEndpointParameterInstructions()", symbol.getName()); - }); + "getEndpointPlugin", + null, + TypeScriptDependency.MIDDLEWARE_ENDPOINTS_V2); + writer.write( + """ + getEndpointPlugin(config, Command.getEndpointParameterInstructions()),""" + ); } - // Add customizations. addCommandSpecificPlugins(); + } + writer.write( + """ + ]; + })""" + ); // end middleware. - // Resolve the middleware stack. - writer.write("\nconst stack = clientStack.concat(this.middlewareStack);\n"); - writer.write("const { logger } = configuration;"); - writer.write("const clientName = $S;", symbolProvider.toSymbol(service).getName()); - writer.write("const commandName = $S;", symbolProvider.toSymbol(operation).getName()); - writer.pushState(CommandContextCodeSection.builder() - .settings(settings) - .model(model) - .service(service) - .operation(operation) - .symbolProvider(symbolProvider) - .runtimeClientPlugins(runtimePlugins) - .protocolGenerator(protocolGenerator) - .applicationProtocol(applicationProtocol) - .build()); - writer.openBlock("const handlerExecutionContext: HandlerExecutionContext = {", "}", () -> { - writer.write("logger,"); - writer.write("clientName,"); - writer.write("commandName,"); - writer.openBlock("inputFilterSensitiveLog: ", ",", () -> { - OptionalUtils.ifPresentOrElse(operationIndex.getInput(operation), - input -> { - if (sensitiveDataFinder.findsSensitiveDataIn(input)) { - Symbol inputSymbol = symbolProvider.toSymbol(input); - String filterFunctionName = inputSymbol.getName() + "FilterSensitiveLog"; - writer.addRelativeImport( - filterFunctionName, - null, - Paths.get(".", inputSymbol.getNamespace())); - writer.writeInline(filterFunctionName); - } else { - writer.writeInline("(_: any) => _"); - } - }, - () -> writer.writeInline("(_: any) => _")); - }); - writer.openBlock("outputFilterSensitiveLog: ", ",", () -> { - OptionalUtils.ifPresentOrElse(operationIndex.getOutput(operation), - output -> { - if (sensitiveDataFinder.findsSensitiveDataIn(output)) { - Symbol outputSymbol = symbolProvider.toSymbol(output); - String filterFunctionName = outputSymbol.getName() + "FilterSensitiveLog"; - writer.addRelativeImport( - filterFunctionName, - null, - Paths.get(".", outputSymbol.getNamespace())); - writer.writeInline(filterFunctionName); - } else { - writer.writeInline("(_: any) => _"); - } - }, - () -> writer.writeInline("(_: any) => _")); - }); - writer.openBlock("[SMITHY_CONTEXT_KEY]: {", "},", () -> { - writer.pushState(SmithyContextCodeSection.builder() - .settings(settings) - .model(model) - .service(service) - .operation(operation) - .symbolProvider(symbolProvider) - .runtimeClientPlugins(runtimePlugins) - .protocolGenerator(protocolGenerator) - .applicationProtocol(applicationProtocol) - .build()); - writer.write("service: $S,", service.toShapeId().getName()); - writer.write("operation: $S,", operation.toShapeId().getName()); - writer.popState(); - }); - }); - writer.popState(); - writer.write("const { requestHandler } = configuration;"); - writer.openBlock("return stack.resolve(", ");", () -> { - writer.write("(request: FinalizeHandlerArguments) => "); - writer.write(" requestHandler.handle(request.request as $T, options || {}),", - applicationProtocol.getRequestType()); - writer.write("handlerExecutionContext"); - }); - }); + // context, filters + writer.openBlock( + """ + .s($service:S, $operation:S, { + """, + """ + }) + .n($client:S, $command:S) + .f($inputFilter:L, $outputFilter:L)""", + () -> { + writer.pushState(SmithyContextCodeSection.builder() + .settings(settings) + .model(model) + .service(service) + .operation(operation) + .symbolProvider(symbolProvider) + .runtimeClientPlugins(runtimePlugins) + .protocolGenerator(protocolGenerator) + .applicationProtocol(applicationProtocol) + .build()); + writer.popState(); + } + ); + writer.popState(); } private void addInputAndOutputTypes() { @@ -524,42 +473,21 @@ private void addCommandSpecificPlugins() { } writer.pushState(); writer.putContext(symbolMap); - writer.write("this.middlewareStack.use($pluginFn:T(configuration" + additionalParamsString + "));"); + writer.write("$pluginFn:T(config" + additionalParamsString + "),"); writer.popState(); }); } } private void writeSerde() { - writer.write("") - .writeDocs("@internal") - .write("private serialize(") - .indent() - .write("input: $T,", inputType) - .write("context: $L", CodegenUtils.getOperationSerializerContextType(writer, model, operation)) - .dedent() - .openBlock( - "): Promise<$T> {", "}", - applicationProtocol.getRequestType(), - () -> writeSerdeDispatcher(true)); - - writer.write("") - .writeDocs("@internal") - .write("private deserialize(") - .indent() - .write("output: $T,", applicationProtocol.getResponseType()) - .write("context: $L", - CodegenUtils.getOperationDeserializerContextType(settings, writer, model, operation)) - .dedent() - .openBlock("): Promise<$T> {", "}", outputType, () -> writeSerdeDispatcher(false)) - .write(""); + writer + .write(".ser($L)", getSerdeDispatcher(true)) + .write(".de($L)", getSerdeDispatcher(false)); } - private void writeSerdeDispatcher(boolean isInput) { - // For example: - // return getFooCommandAws_RestJson1_1Serialize(input, utils); + private String getSerdeDispatcher(boolean isInput) { if (protocolGenerator == null) { - writer.write("throw new Error(\"No supported protocol was found\");"); + return "() => { throw new Error(\"No supported protocol was found\"); }"; } else { String serdeFunctionName = isInput ? ProtocolGenerator.getSerFunctionShortName(symbol) @@ -567,7 +495,7 @@ private void writeSerdeDispatcher(boolean isInput) { writer.addRelativeImport(serdeFunctionName, null, Paths.get(".", CodegenUtils.SOURCE_FOLDER, ProtocolGenerator.PROTOCOLS_FOLDER, ProtocolGenerator.getSanitizedName(protocolGenerator.getName()))); - writer.write("return $L($L, context);", serdeFunctionName, isInput ? "input" : "output"); + return serdeFunctionName; } } diff --git a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/endpointsV2/EndpointsV2Generator.java b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/endpointsV2/EndpointsV2Generator.java index 604dbc8f076..f85201e1f50 100644 --- a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/endpointsV2/EndpointsV2Generator.java +++ b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/endpointsV2/EndpointsV2Generator.java @@ -17,8 +17,10 @@ import java.nio.file.Paths; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import software.amazon.smithy.codegen.core.SymbolDependency; import software.amazon.smithy.model.Model; import software.amazon.smithy.model.node.ObjectNode; @@ -154,6 +156,34 @@ private void generateEndpointParameters() { } ); + writer.write(""); + + writer.openBlock( + "export const commonParams = {", "} as const", + () -> { + RuleSetParameterFinder parameterFinder = new RuleSetParameterFinder(service); + Set paramNames = new HashSet<>(); + + parameterFinder.getClientContextParams().forEach((name, type) -> { + if (!paramNames.contains(name)) { + writer.write( + "$L: { type: \"clientContextParams\", name: \"$L\" },", + name, EndpointsParamNameMap.getLocalName(name)); + } + paramNames.add(name); + }); + + parameterFinder.getBuiltInParams().forEach((name, type) -> { + if (!paramNames.contains(name)) { + writer.write( + "$L: { type: \"builtInParams\", name: \"$L\" },", + name, EndpointsParamNameMap.getLocalName(name)); + } + paramNames.add(name); + }); + } + ); + writer.write(""); writer.openBlock( "export interface EndpointParameters extends __EndpointParameters {", diff --git a/smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/CommandGeneratorTest.java b/smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/CommandGeneratorTest.java index d201cd86000..7b4e3ae6d4f 100644 --- a/smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/CommandGeneratorTest.java +++ b/smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/CommandGeneratorTest.java @@ -12,33 +12,26 @@ public class CommandGeneratorTest { @Test public void addsCommandSpecificPlugins() { - testCommmandCodegen("output-structure.smithy", - " resolveMiddleware(\n" + - " clientStack: MiddlewareStack,\n" + - " configuration: ExampleClientResolvedConfig,\n" + - " options?: __HttpHandlerOptions\n" + - " ): Handler {\n" + - " this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n" + - "\n" + - " const stack = clientStack.concat(this.middlewareStack);"); + testCommmandCodegen( + "output-structure.smithy", + "getSerdePlugin(config, this.serialize, this.deserialize)" + ); } @Test public void writesSerializer() { - testCommmandCodegen("output-structure.smithy", - " private serialize(\n" + - " input: GetFooCommandInput,\n" + - " context: __SerdeContext\n" + - " ): Promise<__HttpRequest> {"); + testCommmandCodegen( + "output-structure.smithy", + ".ser(" + ); } @Test public void writesDeserializer() { - testCommmandCodegen("output-structure.smithy", - " private deserialize(\n" + - " output: __HttpResponse,\n" + - " context: __SerdeContext\n" + - " ): Promise {"); + testCommmandCodegen( + "output-structure.smithy", + ".de(" + ); } private void testCommmandCodegen(String file, String expectedType) { diff --git a/smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/endpointsV2/EndpointsV2GeneratorTest.java b/smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/endpointsV2/EndpointsV2GeneratorTest.java index 544df2093f1..ecc03eeceaa 100644 --- a/smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/endpointsV2/EndpointsV2GeneratorTest.java +++ b/smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/endpointsV2/EndpointsV2GeneratorTest.java @@ -80,7 +80,7 @@ private MockManifest testEndpoints(String filename) { .build(); new TypeScriptCodegenPlugin().execute(context); - + assertThat(manifest.hasFile(CodegenUtils.SOURCE_FOLDER + "/endpoint/EndpointParameters.ts"), is(true)); assertThat(manifest.hasFile(CodegenUtils.SOURCE_FOLDER + "/endpoint/endpointResolver.ts"), diff --git a/smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/integration/AddHttpApiKeyAuthPluginTest.java b/smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/integration/AddHttpApiKeyAuthPluginTest.java index 191d65c29e3..231936fc864 100644 --- a/smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/integration/AddHttpApiKeyAuthPluginTest.java +++ b/smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/integration/AddHttpApiKeyAuthPluginTest.java @@ -61,13 +61,13 @@ private void testInjects(String filename, String extra) { assertThat(manifest.getFileString(CodegenUtils.SOURCE_FOLDER + "/commands/GetFooCommand.ts").get(), containsString("from \"../middleware/HttpApiKeyAuth\"")); assertThat(manifest.getFileString(CodegenUtils.SOURCE_FOLDER + "/commands/GetFooCommand.ts").get(), - containsString("this.middlewareStack.use(getHttpApiKeyAuthPlugin(configuration" + extra + "));")); + containsString("getHttpApiKeyAuthPlugin(config" + extra + ")")); // Ensure that the GetBar operation does not import the middleware or use it. assertThat(manifest.getFileString(CodegenUtils.SOURCE_FOLDER + "/commands/GetBarCommand.ts").get(), not(containsString("from \"../middleware/HttpApiKeyAuth\""))); assertThat(manifest.getFileString(CodegenUtils.SOURCE_FOLDER + "/commands/GetBarCommand.ts").get(), - not(containsString("this.middlewareStack.use(getHttpApiKeyAuthPlugin"))); + not(containsString("getHttpApiKeyAuthPlugin"))); // Make sure that the middleware file was written and exports the plugin symbol. assertThat(manifest.getFileString(CodegenUtils.SOURCE_FOLDER + "/middleware/HttpApiKeyAuth/index.ts").get(), @@ -75,7 +75,7 @@ private void testInjects(String filename, String extra) { // Ensure that the middleware was being exported in the index file. assertThat(manifest.getFileString(CodegenUtils.SOURCE_FOLDER + "/index.ts").get(), - containsString("from \"./middleware/HttpApiKeyAuth\"")); + containsString("from \"./middleware/HttpApiKeyAuth\"")); } private MockManifest generate(String filename) @@ -124,7 +124,7 @@ private void testDoesNotInject(String filename) { assertThat(manifest.getFileString(CodegenUtils.SOURCE_FOLDER + "/commands/GetFooCommand.ts").get(), not(containsString("from \"../middleware/HttpApiKeyAuth\""))); assertThat(manifest.getFileString(CodegenUtils.SOURCE_FOLDER + "/commands/GetFooCommand.ts").get(), - not(containsString("this.middlewareStack.use(getHttpApiKeyAuthPlugin(configuration"))); + not(containsString("getHttpApiKeyAuthPlugin(configuration"))); // Make sure that the middleware file was not written. assertThat(manifest.hasFile(CodegenUtils.SOURCE_FOLDER + "/middleware/HttpApiKeyAuth/index.ts"), @@ -132,6 +132,6 @@ private void testDoesNotInject(String filename) { // Ensure that the middleware was not being exported in the index file. assertThat(manifest.getFileString(CodegenUtils.SOURCE_FOLDER + "/index.ts").get(), - not(containsString("from \"./middleware/HttpApiKeyAuth\""))); + not(containsString("from \"./middleware/HttpApiKeyAuth\""))); } }