Skip to content

Commit 10a5199

Browse files
committed
fix: use optional chaining while processing runtime config
Using default value of `{}` assumed that client configs have no required properties, which may not be true for generic non-AWS clients where endpoint may be required. Using `?.` operator for cases where `config` may be null/undefined.
1 parent adf914b commit 10a5199

File tree

6 files changed

+21
-13
lines changed

6 files changed

+21
-13
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ void generate(LanguageTarget target) {
197197
}
198198
int indentation = target.equals(LanguageTarget.SHARED) ? 1 : 2;
199199
configs.forEach((key, value) -> {
200-
writer.indent(indentation).disableNewlines().openBlock("$1L: config.$1L ?? ", ",\n", key,
200+
writer.indent(indentation).disableNewlines().openBlock("$1L: config?.$1L ?? ", ",\n", key,
201201
() -> {
202202
value.accept(writer);
203203
});

smithy-typescript-codegen/src/main/resources/software/amazon/smithy/typescript/codegen/runtimeConfig.browser.ts.template

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { getRuntimeConfig as getSharedRuntimeConfig } from "./runtimeConfig.shar
44
/**
55
* @internal
66
*/
7-
export const getRuntimeConfig = (config: ${clientConfigName} = {}) => {
7+
export const getRuntimeConfig = (config: ${clientConfigName}) => {
88
const clientSharedValues = getSharedRuntimeConfig(config);
99
return {
1010
...clientSharedValues,

smithy-typescript-codegen/src/main/resources/software/amazon/smithy/typescript/codegen/runtimeConfig.native.ts.template

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { getRuntimeConfig as getBrowserRuntimeConfig } from "./runtimeConfig.bro
44
/**
55
* @internal
66
*/
7-
export const getRuntimeConfig = (config: ${clientConfigName} = {}) => {
7+
export const getRuntimeConfig = (config: ${clientConfigName}) => {
88
const browserDefaults = getBrowserRuntimeConfig(config);
99
return {
1010
...browserDefaults,

smithy-typescript-codegen/src/main/resources/software/amazon/smithy/typescript/codegen/runtimeConfig.shared.ts.template

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { ${clientConfigName} } from "${clientModuleName}";
33
/**
44
* @internal
55
*/
6-
export const getRuntimeConfig = (config: ${clientConfigName} = {}) => ({
6+
export const getRuntimeConfig = (config: ${clientConfigName}) => ({
77
apiVersion: "${apiVersion}",
88
${customizations}
99
});

smithy-typescript-codegen/src/main/resources/software/amazon/smithy/typescript/codegen/runtimeConfig.ts.template

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { emitWarningIfUnsupportedVersion } from "@aws-sdk/smithy-client";
55
/**
66
* @internal
77
*/
8-
export const getRuntimeConfig = (config: ${clientConfigName} = {}) => {
8+
export const getRuntimeConfig = (config: ${clientConfigName}) => {
99
emitWarningIfUnsupportedVersion(process.version);
1010
const clientSharedValues = getSharedRuntimeConfig(config);
1111
return {

smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/RuntimeConfigGeneratorTest.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,23 +86,29 @@ public Map<String, Consumer<TypeScriptWriter>> getRuntimeConfigWriters(
8686

8787
// Does the runtimeConfig.shared.ts file expand the template properties properly?
8888
String runtimeConfigSharedContents = manifest.getFileString("runtimeConfig.shared.ts").get();
89+
assertThat(runtimeConfigSharedContents,
90+
containsString("export const getRuntimeConfig = (config: ExampleClientConfig) =>"));
8991
assertThat(runtimeConfigSharedContents, containsString("apiVersion: \"1.0.0\","));
90-
assertThat(runtimeConfigSharedContents, containsString("syn: 'ack2',"));
91-
assertThat(runtimeConfigSharedContents, containsString("foo: 'bar',"));
92+
assertThat(runtimeConfigSharedContents, containsString("config?.syn ?? syn: 'ack2',"));
93+
assertThat(runtimeConfigSharedContents, containsString("config?.foo ?? foo: 'bar',"));
9294

9395
// Does the runtimeConfig.ts file expand the template properties properly?
9496
String runtimeConfigContents = manifest.getFileString("runtimeConfig.ts").get();
9597
assertThat(runtimeConfigContents,
9698
containsString("import { ExampleClientConfig } from \"./ExampleClient\";"));
97-
assertThat(runtimeConfigContents, containsString("syn: 'ack2',"));
98-
assertThat(runtimeConfigSharedContents, containsString("foo: 'bar',"));
99+
assertThat(runtimeConfigSharedContents,
100+
containsString("export const getRuntimeConfig = (config: ExampleClientConfig) =>"));
101+
assertThat(runtimeConfigContents, containsString("config?.syn ?? syn: 'ack2',"));
102+
assertThat(runtimeConfigSharedContents, containsString("config?.foo ?? foo: 'bar',"));
99103

100104
// Does the runtimeConfig.browser.ts file expand the template properties properly?
101105
String runtimeConfigBrowserContents = manifest.getFileString("runtimeConfig.browser.ts").get();
102106
assertThat(runtimeConfigBrowserContents,
103107
containsString("import { ExampleClientConfig } from \"./ExampleClient\";"));
104-
assertThat(runtimeConfigContents, containsString("syn: 'ack2',"));
105-
assertThat(runtimeConfigSharedContents, containsString("foo: 'bar',"));
108+
assertThat(runtimeConfigSharedContents,
109+
containsString("export const getRuntimeConfig = (config: ExampleClientConfig) =>"));
110+
assertThat(runtimeConfigContents, containsString("config?.syn ?? syn: 'ack2',"));
111+
assertThat(runtimeConfigSharedContents, containsString("config?.foo ?? foo: 'bar',"));
106112

107113
// Does the runtimeConfig.native.ts file expand the browser template properties properly?
108114
String runtimeConfigNativeContents = manifest.getFileString("runtimeConfig.native.ts").get();
@@ -111,7 +117,9 @@ public Map<String, Consumer<TypeScriptWriter>> getRuntimeConfigWriters(
111117
assertThat(runtimeConfigNativeContents,
112118
containsString(
113119
"import { getRuntimeConfig as getBrowserRuntimeConfig } from \"./runtimeConfig.browser\";"));
114-
assertThat(runtimeConfigContents, containsString("syn: 'ack2',"));
115-
assertThat(runtimeConfigSharedContents, containsString("foo: 'bar',"));
120+
assertThat(runtimeConfigSharedContents,
121+
containsString("export const getRuntimeConfig = (config: ExampleClientConfig) =>"));
122+
assertThat(runtimeConfigContents, containsString("config?.syn ?? syn: 'ack2',"));
123+
assertThat(runtimeConfigSharedContents, containsString("config?.foo ?? foo: 'bar',"));
116124
}
117125
}

0 commit comments

Comments
 (0)