Skip to content

Commit f7914b9

Browse files
Steven Yuansyall
authored andcommitted
feat(experimentalIdentityAndAuth): update ConfigField::configFieldWriter()
1 parent 67cb6c2 commit f7914b9

File tree

2 files changed

+33
-36
lines changed

2 files changed

+33
-36
lines changed

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/auth/http/ConfigField.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public final record ConfigField(
3333
Type type,
3434
Symbol inputType,
3535
Symbol resolvedType,
36-
BiConsumer<TypeScriptWriter, ConfigField> configFieldWriter,
36+
Optional<BiConsumer<TypeScriptWriter, ConfigField>> configFieldWriter,
3737
Optional<Consumer<TypeScriptWriter>> docs
3838
) implements ToSmithyBuilder<ConfigField> {
3939

@@ -63,7 +63,7 @@ public Builder toBuilder() {
6363
.type(type)
6464
.inputType(inputType)
6565
.resolvedType(resolvedType)
66-
.configFieldWriter(configFieldWriter)
66+
.configFieldWriter(configFieldWriter.orElse(null))
6767
.docs(docs.orElse(null));
6868
}
6969

@@ -77,17 +77,12 @@ public static final class Builder implements SmithyBuilder<ConfigField> {
7777

7878
@Override
7979
public ConfigField build() {
80-
if (configFieldWriter == null) {
81-
configFieldWriter = type.equals(Type.MAIN)
82-
? ConfigField::defaultMainConfigFieldWriter
83-
: ConfigField::defaultAuxiliaryConfigFieldWriter;
84-
}
8580
return new ConfigField(
8681
SmithyBuilder.requiredState("name", name),
8782
SmithyBuilder.requiredState("type", type),
8883
SmithyBuilder.requiredState("inputType", inputType),
8984
SmithyBuilder.requiredState("resolvedType", resolvedType),
90-
SmithyBuilder.requiredState("configFieldWriter", configFieldWriter),
85+
Optional.ofNullable(configFieldWriter),
9186
Optional.ofNullable(docs));
9287
}
9388

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/auth/http/integration/AddHttpAuthSchemePlugin.java

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.util.Iterator;
1010
import java.util.List;
1111
import java.util.Map;
12+
import java.util.stream.Collectors;
1213
import software.amazon.smithy.codegen.core.CodegenException;
1314
import software.amazon.smithy.codegen.core.Symbol;
1415
import software.amazon.smithy.model.knowledge.ServiceIndex;
@@ -286,8 +287,10 @@ private void generateHttpAuthSchemeInputConfigInterface(
286287
w.write("httpAuthSchemeProvider?: $L;\n", httpAuthSchemeProviderName);
287288

288289
for (ConfigField configField : configFields.values()) {
289-
configField.docs().ifPresent(docs -> w.writeDocs(() -> w.write("$C", docs)));
290-
w.write("$L?: $T;", configField.name(), configField.inputType());
290+
if (configField.configFieldWriter().isPresent()) {
291+
configField.docs().ifPresent(docs -> w.writeDocs(() -> w.write("$C", docs)));
292+
w.write("$L?: $T;", configField.name(), configField.inputType());
293+
}
291294
}
292295
w.dedent();
293296
w.write("}\n");
@@ -349,8 +352,10 @@ private void generateHttpAuthSchemeResolvedConfigInterface(
349352
@internal""");
350353
w.write("readonly httpAuthSchemeProvider: $L;\n", httpAuthSchemeProviderName);
351354
for (ConfigField configField : configFields.values()) {
352-
configField.docs().ifPresent(docs -> w.writeDocs(() -> w.write("$C", docs)));
353-
w.write("readonly $L?: $T;", configField.name(), configField.resolvedType());
355+
if (configField.configFieldWriter().isPresent()) {
356+
configField.docs().ifPresent(docs -> w.writeDocs(() -> w.write("$C", docs)));
357+
w.write("readonly $L?: $T;", configField.name(), configField.resolvedType());
358+
}
354359
}
355360
w.dedent();
356361
w.write("}\n");
@@ -379,33 +384,23 @@ private void generateResolveHttpAuthSchemeConfigFunction(
379384
w.pushState(s);
380385
Map<String, ConfigField> configFields = s.getConfigFields();
381386
Map<Symbol, ResolveConfigFunction> resolveConfigFunctions = s.getResolveConfigFunctions();
387+
Map<Symbol, ResolveConfigFunction> previousResolvedFunctions = resolveConfigFunctions.entrySet().stream()
388+
.filter(e -> e.getValue().previouslyResolved().isPresent())
389+
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
382390
w.writeDocs("@internal");
383391
w.writeInline("export const resolveHttpAuthSchemeConfig = <T>(config: T & HttpAuthSchemeInputConfig");
384-
if (!resolveConfigFunctions.isEmpty()) {
385-
w.writeInline(" & ");
386-
Iterator<ResolveConfigFunction> iter = resolveConfigFunctions.values().iterator();
387-
while (iter.hasNext()) {
388-
ResolveConfigFunction entry = iter.next();
389-
w.writeInline("$T", entry.inputConfig());
390-
entry.previouslyResolved().ifPresent(p -> w.writeInline(" & $T", p));
391-
if (iter.hasNext()) {
392-
w.writeInline(" & ");
393-
}
394-
}
395-
}
396-
w.writeInline("): T & HttpAuthSchemeResolvedConfig");
397-
if (!resolveConfigFunctions.isEmpty()) {
392+
if (!previousResolvedFunctions.isEmpty()) {
398393
w.writeInline(" & ");
399-
Iterator<ResolveConfigFunction> iter = resolveConfigFunctions.values().iterator();
394+
Iterator<ResolveConfigFunction> iter = previousResolvedFunctions.values().iterator();
400395
while (iter.hasNext()) {
401396
ResolveConfigFunction entry = iter.next();
402-
w.writeInline("$T", entry.resolvedConfig());
397+
w.writeInline("$T", entry.previouslyResolved().get());
403398
if (iter.hasNext()) {
404399
w.writeInline(" & ");
405400
}
406401
}
407402
}
408-
w.write(" => {");
403+
w.write("): T & HttpAuthSchemeResolvedConfig => {");
409404
w.indent();
410405
w.pushState(ResolveHttpAuthSchemeConfigFunctionConfigFieldsCodeSection.builder()
411406
.service(s.getService())
@@ -417,7 +412,7 @@ private void generateResolveHttpAuthSchemeConfigFunction(
417412
.build());
418413
w.addDependency(TypeScriptDependency.SMITHY_CORE);
419414
for (ConfigField configField : configFields.values()) {
420-
configField.configFieldWriter().accept(w, configField);
415+
configField.configFieldWriter().ifPresent(cfw -> cfw.accept(w, configField));
421416
}
422417
w.popState();
423418
w.pushState(ResolveHttpAuthSchemeConfigFunctionReturnBlockCodeSection.builder()
@@ -428,16 +423,23 @@ private void generateResolveHttpAuthSchemeConfigFunction(
428423
.integrations(s.getIntegrations())
429424
.configFields(configFields)
430425
.build());
431-
426+
Integer i = 0;
427+
String configName = "config";
432428
for (ResolveConfigFunction resolveConfigFunction : resolveConfigFunctions.values()) {
433-
w.write("config = $T(config);", resolveConfigFunction.resolveConfigFunction());
429+
w.write("const config_$L = $T($L);", i, resolveConfigFunction.resolveConfigFunction(), configName);
430+
configName = "config_" + i;
431+
i++;
434432
}
435-
w.openBlock("return {", "} as T & HttpAuthSchemeResolvedConfig;", () -> {
436-
w.write("...config,");
437-
for (ConfigField configField : configFields.values()) {
433+
w.write("return {");
434+
w.indent();
435+
w.write("...$L,", configName);
436+
for (ConfigField configField : configFields.values()) {
437+
if (configField.configFieldWriter().isPresent()) {
438438
w.write("$L,", configField.name());
439439
}
440-
});
440+
}
441+
w.dedent();
442+
w.write("} as T & HttpAuthSchemeResolvedConfig;");
441443
w.popState();
442444
w.dedent();
443445
w.write("};");

0 commit comments

Comments
 (0)