Skip to content

Commit 3b37740

Browse files
authored
feat: enable ctor arg passthrough for requestHandler (Java codegen) (#1168)
* feat: enable ctor arg passthrough for requestHandler * add checked access to config object * make config value prefix supply-able from TypeScriptIntegration * move default impl of config value prefix * static config value prefix instructions * unused import
1 parent 7baf4b1 commit 3b37740

File tree

3 files changed

+30
-13
lines changed

3 files changed

+30
-13
lines changed

.changeset/orange-beans-deliver.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
---
2+
---

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

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ final class RuntimeConfigGenerator {
5858
writer.addDependency(TypeScriptDependency.AWS_SDK_NODE_HTTP_HANDLER);
5959
writer.addImport("NodeHttpHandler", "RequestHandler",
6060
TypeScriptDependency.AWS_SDK_NODE_HTTP_HANDLER);
61-
writer.write("new RequestHandler(defaultConfigProvider)");
61+
writer.write("RequestHandler.create(config?.requestHandler ?? defaultConfigProvider)");
6262
},
6363
"sha256", writer -> {
6464
writer.addDependency(TypeScriptDependency.AWS_SDK_HASH_NODE);
@@ -81,7 +81,7 @@ final class RuntimeConfigGenerator {
8181
writer.addDependency(TypeScriptDependency.AWS_SDK_FETCH_HTTP_HANDLER);
8282
writer.addImport("FetchHttpHandler", "RequestHandler",
8383
TypeScriptDependency.AWS_SDK_FETCH_HTTP_HANDLER);
84-
writer.write("new RequestHandler(defaultConfigProvider)");
84+
writer.write("RequestHandler.create(config?.requestHandler ?? defaultConfigProvider)");
8585
},
8686
"sha256", writer -> {
8787
writer.addDependency(TypeScriptDependency.AWS_CRYPTO_SHA256_BROWSER);
@@ -145,6 +145,9 @@ final class RuntimeConfigGenerator {
145145
writer.write("[]");
146146
}
147147
);
148+
private final Map<String, String> runtimeConfigDefaultValuePrefixes = MapUtils.of(
149+
"requestHandler", ""
150+
);
148151

149152
RuntimeConfigGenerator(
150153
TypeScriptSettings settings,
@@ -184,10 +187,13 @@ void generate(LanguageTarget target) {
184187
writer.indent().onSection("customizations", original -> {
185188
// Start with defaults, use a TreeMap for keeping entries sorted.
186189
Map<String, Consumer<TypeScriptWriter>> configs =
187-
new TreeMap<>(getDefaultRuntimeConfigs(target));
190+
new TreeMap<>(getDefaultRuntimeConfigs(target));
191+
188192
// Add any integration supplied runtime config writers.
189193
for (TypeScriptIntegration integration : integrations) {
190-
configs.putAll(integration.getRuntimeConfigWriters(settings, model, symbolProvider, target));
194+
configs.putAll(
195+
integration.getRuntimeConfigWriters(settings, model, symbolProvider, target)
196+
);
191197
}
192198
// feat(experimentalIdentityAndAuth): add config writers for httpAuthScheme and httpAuthSchemes
193199
// Needs a separate integration point since not all the information is accessible in
@@ -197,11 +203,18 @@ void generate(LanguageTarget target) {
197203
}
198204
int indentation = target.equals(LanguageTarget.SHARED) ? 1 : 2;
199205
configs.forEach((key, value) -> {
200-
writer.indent(indentation).disableNewlines().openBlock("$1L: config?.$1L ?? ", ",\n", key,
201-
() -> {
202-
value.accept(writer);
203-
});
204-
writer.dedent(indentation);
206+
String valuePrefix =
207+
runtimeConfigDefaultValuePrefixes.getOrDefault(key, "config?.$1L ?? ");
208+
writer
209+
.indent(indentation)
210+
.disableNewlines()
211+
.openBlock(
212+
"$1L: " + valuePrefix, ",\n", key,
213+
() -> {
214+
value.accept(writer);
215+
}
216+
)
217+
.dedent(indentation);
205218
});
206219
});
207220
writer.dedent();

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -253,11 +253,13 @@ private void generateClientDefaults() {
253253

254254
writer.writeDocs("@public")
255255
.openBlock("export interface ClientDefaults\n"
256-
+ " extends Partial<__SmithyResolvedConfiguration<$T>> {", "}",
256+
+ " extends Partial<__SmithyConfiguration<$T>> {", "}",
257257
applicationProtocol.getOptionsType(), () -> {
258-
writer.addImport("HttpHandler", "__HttpHandler", TypeScriptDependency.PROTOCOL_HTTP);
259-
writer.writeDocs("The HTTP handler to use. Fetch in browser and Https in Nodejs.");
260-
writer.write("requestHandler?: __HttpHandler;\n");
258+
writer.addImport("HttpHandlerUserInput", "__HttpHandlerUserInput", TypeScriptDependency.PROTOCOL_HTTP);
259+
writer.writeDocs(
260+
"The HTTP handler to use or its constructor options. Fetch in browser and Https in Nodejs."
261+
);
262+
writer.write("requestHandler?: __HttpHandlerUserInput;\n");
261263

262264
writer.addImport("HashConstructor", "__HashConstructor", TypeScriptDependency.SMITHY_TYPES);
263265
writer.addImport("ChecksumConstructor", "__ChecksumConstructor", TypeScriptDependency.SMITHY_TYPES);

0 commit comments

Comments
 (0)