Skip to content

Commit 0bd99e8

Browse files
committed
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.
1 parent 9d22987 commit 0bd99e8

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

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

+2
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ public Symbol serviceShape(ServiceShape shape) {
106106
intermediate.toBuilder().name(serviceName + "Operations").build());
107107
builder.putProperty("handler",
108108
intermediate.toBuilder().name(serviceName + "Handler").build());
109+
builder.putProperty("mux",
110+
intermediate.toBuilder().name(serviceName + "Mux").build());
109111
return builder.build();
110112
}
111113

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpBindingProtocolGenerator.java

+8-3
Original file line numberDiff line numberDiff line change
@@ -296,8 +296,10 @@ private void generateServiceMux(GenerationContext context) {
296296
writer.addImport("httpbinding", null, TypeScriptDependency.SERVER_COMMON);
297297

298298
Symbol serviceSymbol = context.getSymbolProvider().toSymbol(context.getService());
299+
Symbol muxSymbol = serviceSymbol.expectProperty("mux", Symbol.class);
299300

300-
writer.openBlock("const mux = new httpbinding.HttpBindingMux<$S, keyof $T<Context>>([", "]);",
301+
writer.openBlock("export const $T = new httpbinding.HttpBindingMux<$S, keyof $T<unknown>>([", "]);",
302+
muxSymbol,
301303
context.getService().getId().getName(),
302304
serviceSymbol,
303305
() -> {
@@ -392,8 +394,11 @@ public void generateServiceHandlerFactory(GenerationContext context) {
392394

393395
Symbol serviceSymbol = symbolProvider.toSymbol(context.getService());
394396
Symbol handlerSymbol = serviceSymbol.expectProperty("handler", Symbol.class);
397+
Symbol muxSymbol = serviceSymbol.expectProperty("mux", Symbol.class);
395398
Symbol operationsSymbol = serviceSymbol.expectProperty("operations", Symbol.class);
396399

400+
generateServiceMux(context);
401+
397402
if (context.getSettings().isDisableDefaultValidation()) {
398403
writer.write("export const get$L = <Context>(service: $T<Context>, "
399404
+ "customizer: __ValidationCustomizer<$T>): "
@@ -406,7 +411,6 @@ public void generateServiceHandlerFactory(GenerationContext context) {
406411
}
407412
writer.indent();
408413

409-
generateServiceMux(context);
410414
writer.addImport("ServiceException", "__ServiceException", TypeScriptDependency.SERVER_COMMON);
411415
writer.openBlock("const serFn: (op: $1T) => __OperationSerializer<$2T<Context>, $1T, __ServiceException> = "
412416
+ "(op) => {", "};", operationsSymbol, serviceSymbol, () -> {
@@ -430,7 +434,8 @@ public void generateServiceHandlerFactory(GenerationContext context) {
430434
);
431435
}
432436

433-
writer.write("return new $T(service, mux, serFn, serializeFrameworkException, customizer);", handlerSymbol);
437+
writer.write("return new $T(service, $T, serFn, serializeFrameworkException, customizer);",
438+
handlerSymbol, muxSymbol);
434439

435440
writer.dedent().write("}");
436441
}

0 commit comments

Comments
 (0)