From bcfe71c7342488106e18ced275865155eb2ce45f Mon Sep 17 00:00:00 2001 From: Fangyi Zhou Date: Thu, 18 Jul 2024 16:39:58 +0100 Subject: [PATCH] feat(codegen): export Mux for http binding for server Closes #1342 It's useful to export the multiplexer that is automatically generated for a service, e.g. for use in anauthorizor lambda. This commit exports the generated multiplexer that is generated inside the service handler so that the multiplexer can be used in other packages. --- .../typescript/codegen/ServerSymbolVisitor.java | 2 ++ .../integration/HttpBindingProtocolGenerator.java | 14 ++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/ServerSymbolVisitor.java b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/ServerSymbolVisitor.java index 746c4338273..5062fee1014 100644 --- a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/ServerSymbolVisitor.java +++ b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/ServerSymbolVisitor.java @@ -106,6 +106,8 @@ public Symbol serviceShape(ServiceShape shape) { intermediate.toBuilder().name(serviceName + "Operations").build()); builder.putProperty("handler", intermediate.toBuilder().name(serviceName + "Handler").build()); + builder.putProperty("mux", + intermediate.toBuilder().name(serviceName + "Mux").build()); return builder.build(); } diff --git a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpBindingProtocolGenerator.java b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpBindingProtocolGenerator.java index 0f2761ab942..73fa3b4f81e 100644 --- a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpBindingProtocolGenerator.java +++ b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpBindingProtocolGenerator.java @@ -296,10 +296,13 @@ private void generateServiceMux(GenerationContext context) { writer.addImport("httpbinding", null, TypeScriptDependency.SERVER_COMMON); Symbol serviceSymbol = context.getSymbolProvider().toSymbol(context.getService()); + Symbol operationsSymbol = serviceSymbol.expectProperty("operations", Symbol.class); + Symbol muxSymbol = serviceSymbol.expectProperty("mux", Symbol.class); - writer.openBlock("const mux = new httpbinding.HttpBindingMux<$S, keyof $T>([", "]);", + writer.openBlock("export const $T = new httpbinding.HttpBindingMux<$S, $T>([", "]);", + muxSymbol, context.getService().getId().getName(), - serviceSymbol, + operationsSymbol, () -> { for (OperationShape operation : topDownIndex.getContainedOperations(context.getService())) { OptionalUtils.ifPresentOrElse( @@ -392,8 +395,11 @@ public void generateServiceHandlerFactory(GenerationContext context) { Symbol serviceSymbol = symbolProvider.toSymbol(context.getService()); Symbol handlerSymbol = serviceSymbol.expectProperty("handler", Symbol.class); + Symbol muxSymbol = serviceSymbol.expectProperty("mux", Symbol.class); Symbol operationsSymbol = serviceSymbol.expectProperty("operations", Symbol.class); + generateServiceMux(context); + if (context.getSettings().isDisableDefaultValidation()) { writer.write("export const get$L = (service: $T, " + "customizer: __ValidationCustomizer<$T>): " @@ -406,7 +412,6 @@ public void generateServiceHandlerFactory(GenerationContext context) { } writer.indent(); - generateServiceMux(context); writer.addImport("ServiceException", "__ServiceException", TypeScriptDependency.SERVER_COMMON); writer.openBlock("const serFn: (op: $1T) => __OperationSerializer<$2T, $1T, __ServiceException> = " + "(op) => {", "};", operationsSymbol, serviceSymbol, () -> { @@ -430,7 +435,8 @@ public void generateServiceHandlerFactory(GenerationContext context) { ); } - writer.write("return new $T(service, mux, serFn, serializeFrameworkException, customizer);", handlerSymbol); + writer.write("return new $T(service, $T, serFn, serializeFrameworkException, customizer);", + handlerSymbol, muxSymbol); writer.dedent().write("}"); }