Skip to content

Commit c03fd2f

Browse files
committed
chore: move runtime config customization to return a map
1 parent 6667e3a commit c03fd2f

File tree

6 files changed

+149
-109
lines changed

6 files changed

+149
-109
lines changed

codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAwsRuntimeConfig.java

Lines changed: 72 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515

1616
package software.amazon.smithy.aws.typescript.codegen;
1717

18+
import java.util.Collections;
19+
import java.util.HashMap;
20+
import java.util.Map;
1821
import java.util.function.Consumer;
1922
import java.util.logging.Logger;
2023
import software.amazon.smithy.aws.traits.ServiceTrait;
@@ -26,6 +29,7 @@
2629
import software.amazon.smithy.typescript.codegen.TypeScriptSettings;
2730
import software.amazon.smithy.typescript.codegen.TypeScriptWriter;
2831
import software.amazon.smithy.typescript.codegen.integration.TypeScriptIntegration;
32+
import software.amazon.smithy.utils.MapUtils;
2933

3034
/**
3135
* AWS clients need to know the service name used to sign requests,
@@ -87,97 +91,113 @@ public void addConfigInterfaceFields(
8791
}
8892

8993
@Override
90-
public void addRuntimeConfigValues(
94+
public Map<String, Consumer<TypeScriptWriter>> getRuntimeConfigWriters(
9195
TypeScriptSettings settings,
9296
Model model,
9397
SymbolProvider symbolProvider,
94-
TypeScriptWriter writer,
9598
LanguageTarget target
9699
) {
97100
ServiceShape service = settings.getService(model);
101+
Map<String, Consumer<TypeScriptWriter>> runtimeConfigs = new HashMap();
98102
if (target.equals(LanguageTarget.SHARED)) {
99103
String signingName = service.getTrait(ServiceTrait.class)
100104
.map(ServiceTrait::getArnNamespace)
101105
.orElse(null);
102106
if (signingName != null) {
103-
writer.write("signingName: $S,", signingName);
107+
runtimeConfigs.put("signingName", writer -> {
108+
writer.write("signingName: $S", signingName);
109+
});
104110
} else {
105111
LOGGER.info("Cannot generate a signing name for the client because no aws.api#Service "
106112
+ "trait was found on " + service.getId());
107113
}
108114
}
109-
110-
getRuntimeConfig(writer, service, target);
115+
runtimeConfigs.putAll(getRuntimeConfig(service, target));
116+
return runtimeConfigs;
111117
}
112118

113-
private void getRuntimeConfig(TypeScriptWriter writer, ServiceShape service, LanguageTarget target) {
119+
private Map<String, Consumer<TypeScriptWriter>> getRuntimeConfig(ServiceShape service, LanguageTarget target) {
114120
String serviceId = service.getTrait(ServiceTrait.class).map(ServiceTrait::getSdkId).orElse("");
115121
if (serviceId.equals("Cognito Identity")) {
116-
getCognitoIdentityConfig(target).accept(writer);
122+
return getCognitoIdentityConfig(target);
117123
} else {
118-
getDefaultConfig(target).accept(writer);
124+
return getDefaultConfig(target);
119125
}
120126
}
121127

122-
private Consumer<TypeScriptWriter> getDefaultConfig(LanguageTarget target) {
128+
private Map<String, Consumer<TypeScriptWriter>> getDefaultConfig(LanguageTarget target) {
123129
switch (target) {
124130
case BROWSER:
125-
return writer -> {
126-
writer.addDependency(TypeScriptDependency.INVALID_DEPENDENCY);
127-
writer.addImport("invalidFunction", "invalidFunction",
128-
TypeScriptDependency.INVALID_DEPENDENCY.packageName);
129-
writer.write("credentialDefaultProvider: invalidFunction(\"Credential is missing\") as any,");
130-
writer.write("regionDefaultProvider: invalidFunction(\"Region is missing\") as any,");
131-
};
131+
return MapUtils.of(
132+
"credentialDefaultProvider", writer -> {
133+
writer.addDependency(TypeScriptDependency.INVALID_DEPENDENCY);
134+
writer.addImport("invalidFunction", "invalidFunction",
135+
TypeScriptDependency.INVALID_DEPENDENCY.packageName);
136+
writer.write(
137+
"credentialDefaultProvider: invalidFunction(\"Credential is missing\") as any,");
138+
},
139+
"regionDefaultProvider", writer -> {
140+
writer.write("regionDefaultProvider: invalidFunction(\"Region is missing\") as any,");
141+
});
132142
case NODE:
133-
return writer -> {
134-
writer.addDependency(AwsDependency.CREDENTIAL_PROVIDER_NODE);
135-
writer.addDependency(AwsDependency.REGION_PROVIDER);
136-
writer.addImport("defaultProvider", "credentialDefaultProvider",
137-
AwsDependency.CREDENTIAL_PROVIDER_NODE.packageName);
138-
writer.addImport("defaultProvider", "regionDefaultProvider",
139-
AwsDependency.REGION_PROVIDER.packageName);
140-
writer.write("credentialDefaultProvider,");
141-
writer.write("regionDefaultProvider,");
142-
};
143+
return MapUtils.of(
144+
"credentialDefaultProvider", writer -> {
145+
writer.addDependency(AwsDependency.CREDENTIAL_PROVIDER_NODE);
146+
writer.addImport("defaultProvider", "credentialDefaultProvider",
147+
AwsDependency.CREDENTIAL_PROVIDER_NODE.packageName);
148+
writer.write("credentialDefaultProvider,");
149+
},
150+
"regionDefaultProvider", writer -> {
151+
writer.addDependency(AwsDependency.REGION_PROVIDER);
152+
writer.addImport("defaultProvider", "regionDefaultProvider",
153+
AwsDependency.REGION_PROVIDER.packageName);
154+
writer.write("regionDefaultProvider,");
155+
}
156+
);
143157
default:
144-
return writer -> LOGGER.info("Unknown JavaScript target: " + target);
158+
return Collections.emptyMap();
145159
}
146160
}
147161

148162
/**
149163
* Cognito Identity client doesn't require signing for some commands, so we are tolerant to
150164
* credential config resolver failure.
151165
*/
152-
private Consumer<TypeScriptWriter> getCognitoIdentityConfig(LanguageTarget target) {
166+
private Map<String, Consumer<TypeScriptWriter>> getCognitoIdentityConfig(LanguageTarget target) {
153167
switch (target) {
154168
case BROWSER:
155-
return writer -> {
156-
writer.addDependency(TypeScriptDependency.INVALID_DEPENDENCY);
157-
writer.addImport("invalidFunction", "invalidFunction",
158-
TypeScriptDependency.INVALID_DEPENDENCY.packageName);
159-
writer.write("credentialDefaultProvider: (() => {}) as any,");
160-
writer.write("regionDefaultProvider: invalidFunction(\"Region is missing\") as any,");
161-
};
169+
return MapUtils.of(
170+
"credentialDefaultProvider", writer -> {
171+
writer.write("credentialDefaultProvider: (() => {}) as any,");
172+
},
173+
"regionDefaultProvider", writer -> {
174+
writer.addDependency(TypeScriptDependency.INVALID_DEPENDENCY);
175+
writer.addImport("invalidFunction", "invalidFunction",
176+
TypeScriptDependency.INVALID_DEPENDENCY.packageName);
177+
writer.write("regionDefaultProvider: invalidFunction(\"Region is missing\") as any,");
178+
});
162179
case NODE:
163-
return writer -> {
164-
writer.addDependency(AwsDependency.CREDENTIAL_PROVIDER_NODE);
165-
writer.addImport("defaultProvider", "credentialDefaultProvider",
166-
AwsDependency.CREDENTIAL_PROVIDER_NODE.packageName);
167-
writer.addDependency(AwsDependency.REGION_PROVIDER);
168-
writer.addImport("defaultProvider", "regionDefaultProvider",
169-
AwsDependency.REGION_PROVIDER.packageName);
170-
writer.openBlock(
171-
"credentialDefaultProvider: ((options: any) => {", "}) as any,", () -> {
172-
writer.write("try {").indent();
173-
writer.write("return credentialDefaultProvider(options);");
174-
writer.dedent().write("} catch(e){}");
175-
writer.write("return {}");
176-
});
177-
writer.write("regionDefaultProvider,");
178-
};
180+
return MapUtils.of(
181+
"credentialDefaultProvider", writer -> {
182+
writer.addDependency(AwsDependency.CREDENTIAL_PROVIDER_NODE);
183+
writer.addImport("defaultProvider", "credentialDefaultProvider",
184+
AwsDependency.CREDENTIAL_PROVIDER_NODE.packageName);
185+
writer.openBlock("credentialDefaultProvider: ((options: any) => {", "}) as any,", () -> {
186+
writer.write("try {").indent();
187+
writer.write("return credentialDefaultProvider(options);");
188+
writer.dedent().write("} catch(e){}");
189+
writer.write("return {}");
190+
});
191+
},
192+
"regionDefaultProvider", writer -> {
193+
writer.addDependency(AwsDependency.REGION_PROVIDER);
194+
writer.addImport("defaultProvider", "regionDefaultProvider",
195+
AwsDependency.REGION_PROVIDER.packageName);
196+
writer.write("regionDefaultProvider,");
197+
}
198+
);
179199
default:
180-
return writer -> LOGGER.info("Unknown JavaScript target: " + target);
200+
return Collections.emptyMap();
181201
}
182202
}
183203
}

codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddBodyChecksumGeneratorDependency.java

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@
1515

1616
package software.amazon.smithy.aws.typescript.codegen;
1717

18+
import java.util.Collections;
19+
import java.util.Map;
1820
import java.util.Set;
21+
import java.util.function.Consumer;
1922
import java.util.logging.Logger;
2023
import software.amazon.smithy.aws.traits.ServiceTrait;
2124
import software.amazon.smithy.codegen.core.SymbolProvider;
@@ -26,6 +29,7 @@
2629
import software.amazon.smithy.typescript.codegen.TypeScriptWriter;
2730

2831
import software.amazon.smithy.typescript.codegen.integration.TypeScriptIntegration;
32+
import software.amazon.smithy.utils.MapUtils;
2933
import software.amazon.smithy.utils.SetUtils;
3034

3135
/**
@@ -53,43 +57,36 @@ public void addConfigInterfaceFields(
5357
}
5458

5559
@Override
56-
public void addRuntimeConfigValues(
60+
public Map<String, Consumer<TypeScriptWriter>> getRuntimeConfigWriters(
5761
TypeScriptSettings settings,
5862
Model model,
5963
SymbolProvider symbolProvider,
60-
TypeScriptWriter writer,
6164
LanguageTarget target
6265
) {
6366
if (!needsBodyChecksumGeneratorDep(settings.getService(model))) {
64-
return;
67+
return Collections.emptyMap();
6568
}
6669

6770
switch (target) {
6871
case NODE:
69-
writeNodeConfig(writer);
70-
break;
72+
return MapUtils.of("bodyChecksumGenerator", writer -> {
73+
writer.addDependency(AwsDependency.BODY_CHECKSUM_GENERATOR_NODE);
74+
writer.addImport("bodyChecksumGenerator", "bodyChecksumGenerator",
75+
AwsDependency.BODY_CHECKSUM_GENERATOR_NODE.packageName);
76+
writer.write("bodyChecksumGenerator,");
77+
});
7178
case BROWSER:
72-
writeBrowserConfig(writer);
73-
break;
79+
return MapUtils.of("bodyChecksumGenerator", writer -> {
80+
writer.addDependency(AwsDependency.BODY_CHECKSUM_GENERATOR_BROWSER);
81+
writer.addImport("bodyChecksumGenerator", "bodyChecksumGenerator",
82+
AwsDependency.BODY_CHECKSUM_GENERATOR_BROWSER.packageName);
83+
writer.write("bodyChecksumGenerator,");
84+
});
7485
default:
75-
LOGGER.info("Unknown JavaScript target: " + target);
86+
return Collections.emptyMap();
7687
}
7788
}
7889

79-
private void writeNodeConfig(TypeScriptWriter writer) {
80-
writer.addDependency(AwsDependency.BODY_CHECKSUM_GENERATOR_NODE);
81-
writer.addImport("bodyChecksumGenerator", "bodyChecksumGenerator",
82-
AwsDependency.BODY_CHECKSUM_GENERATOR_NODE.packageName);
83-
writer.write("bodyChecksumGenerator,");
84-
}
85-
86-
private void writeBrowserConfig(TypeScriptWriter writer) {
87-
writer.addDependency(AwsDependency.BODY_CHECKSUM_GENERATOR_BROWSER);
88-
writer.addImport("bodyChecksumGenerator", "bodyChecksumGenerator",
89-
AwsDependency.BODY_CHECKSUM_GENERATOR_BROWSER.packageName);
90-
writer.write("bodyChecksumGenerator,");
91-
}
92-
9390
private static boolean needsBodyChecksumGeneratorDep(ServiceShape service) {
9491
String serviceId = service.getTrait(ServiceTrait.class).map(ServiceTrait::getSdkId).orElse("");
9592
return SERVICE_IDS.contains(serviceId);

codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddMd5HashDependency.java

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,21 @@
1515

1616
package software.amazon.smithy.aws.typescript.codegen;
1717

18+
import java.util.Collections;
19+
import java.util.Map;
1820
import java.util.Set;
21+
import java.util.function.Consumer;
22+
1923
import software.amazon.smithy.aws.traits.ServiceTrait;
2024
import software.amazon.smithy.codegen.core.SymbolProvider;
2125
import software.amazon.smithy.model.Model;
2226
import software.amazon.smithy.model.shapes.ServiceShape;
2327
import software.amazon.smithy.typescript.codegen.LanguageTarget;
28+
import software.amazon.smithy.typescript.codegen.TypeScriptDependency;
2429
import software.amazon.smithy.typescript.codegen.TypeScriptSettings;
2530
import software.amazon.smithy.typescript.codegen.TypeScriptWriter;
2631
import software.amazon.smithy.typescript.codegen.integration.TypeScriptIntegration;
32+
import software.amazon.smithy.utils.MapUtils;
2733
import software.amazon.smithy.utils.SetUtils;
2834

2935
/**
@@ -50,29 +56,32 @@ public void addConfigInterfaceFields(
5056
}
5157

5258
@Override
53-
public void addRuntimeConfigValues(
59+
public Map<String, Consumer<TypeScriptWriter>> getRuntimeConfigWriters(
5460
TypeScriptSettings settings,
5561
Model model,
5662
SymbolProvider symbolProvider,
57-
TypeScriptWriter writer,
5863
LanguageTarget target
5964
) {
6065
if (!needsMd5Dep(settings.getService(model))) {
61-
return;
66+
return Collections.emptyMap();
6267
}
6368

6469
switch (target) {
6570
case NODE:
66-
writer.addImport("HashConstructor", "__HashConstructor", "@aws-sdk/types");
67-
writer.write("md5: Hash.bind(null, \"md5\"),");
68-
break;
71+
return MapUtils.of("md5", writer -> {
72+
writer.addDependency(TypeScriptDependency.AWS_SDK_TYPES);
73+
writer.addImport("HashConstructor", "__HashConstructor",
74+
TypeScriptDependency.AWS_SDK_TYPES.packageName);
75+
writer.write("md5: Hash.bind(null, \"md5\"),");
76+
});
6977
case BROWSER:
70-
writer.addDependency(AwsDependency.MD5_BROWSER);
71-
writer.addImport("Md5", "Md5", AwsDependency.MD5_BROWSER.packageName);
72-
writer.write("md5: Md5,");
73-
break;
78+
return MapUtils.of("md5", writer -> {
79+
writer.addDependency(AwsDependency.MD5_BROWSER);
80+
writer.addImport("Md5", "Md5", AwsDependency.MD5_BROWSER.packageName);
81+
writer.write("md5: Md5,");
82+
});
7483
default:
75-
// do nothing
84+
return Collections.emptyMap();
7685
}
7786
}
7887

codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddS3Config.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515

1616
package software.amazon.smithy.aws.typescript.codegen;
1717

18+
import java.util.Collections;
19+
import java.util.Map;
20+
import java.util.function.Consumer;
21+
1822
import software.amazon.smithy.aws.traits.ServiceTrait;
1923
import software.amazon.smithy.codegen.core.SymbolProvider;
2024
import software.amazon.smithy.model.Model;
@@ -23,6 +27,7 @@
2327
import software.amazon.smithy.typescript.codegen.TypeScriptSettings;
2428
import software.amazon.smithy.typescript.codegen.TypeScriptWriter;
2529
import software.amazon.smithy.typescript.codegen.integration.TypeScriptIntegration;
30+
import software.amazon.smithy.utils.MapUtils;
2631

2732
/**
2833
* AWS S3 client configuration.
@@ -44,22 +49,22 @@ public void addConfigInterfaceFields(
4449
}
4550

4651
@Override
47-
public void addRuntimeConfigValues(
52+
public Map<String, Consumer<TypeScriptWriter>> getRuntimeConfigWriters(
4853
TypeScriptSettings settings,
4954
Model model,
5055
SymbolProvider symbolProvider,
51-
TypeScriptWriter writer,
5256
LanguageTarget target
5357
) {
5458
if (!needsS3Config(settings.getService(model))) {
55-
return;
59+
return Collections.emptyMap();
5660
}
5761
switch (target) {
5862
case SHARED:
59-
writer.write("signingEscapePath: false,");
60-
break;
63+
return MapUtils.of("signingEscapePath", writer -> {
64+
writer.write("signingEscapePath: false,");
65+
});
6166
default:
62-
//do nothing
67+
return Collections.emptyMap();
6368
}
6469
}
6570

0 commit comments

Comments
 (0)