|
15 | 15 |
|
16 | 16 | package software.amazon.smithy.aws.typescript.codegen;
|
17 | 17 |
|
| 18 | +import java.util.Collections; |
| 19 | +import java.util.HashMap; |
| 20 | +import java.util.Map; |
18 | 21 | import java.util.function.Consumer;
|
19 | 22 | import java.util.logging.Logger;
|
20 | 23 | import software.amazon.smithy.aws.traits.ServiceTrait;
|
|
26 | 29 | import software.amazon.smithy.typescript.codegen.TypeScriptSettings;
|
27 | 30 | import software.amazon.smithy.typescript.codegen.TypeScriptWriter;
|
28 | 31 | import software.amazon.smithy.typescript.codegen.integration.TypeScriptIntegration;
|
| 32 | +import software.amazon.smithy.utils.MapUtils; |
29 | 33 |
|
30 | 34 | /**
|
31 | 35 | * AWS clients need to know the service name used to sign requests,
|
@@ -87,97 +91,113 @@ public void addConfigInterfaceFields(
|
87 | 91 | }
|
88 | 92 |
|
89 | 93 | @Override
|
90 |
| - public void addRuntimeConfigValues( |
| 94 | + public Map<String, Consumer<TypeScriptWriter>> getRuntimeConfigWriters( |
91 | 95 | TypeScriptSettings settings,
|
92 | 96 | Model model,
|
93 | 97 | SymbolProvider symbolProvider,
|
94 |
| - TypeScriptWriter writer, |
95 | 98 | LanguageTarget target
|
96 | 99 | ) {
|
97 | 100 | ServiceShape service = settings.getService(model);
|
| 101 | + Map<String, Consumer<TypeScriptWriter>> runtimeConfigs = new HashMap(); |
98 | 102 | if (target.equals(LanguageTarget.SHARED)) {
|
99 | 103 | String signingName = service.getTrait(ServiceTrait.class)
|
100 | 104 | .map(ServiceTrait::getArnNamespace)
|
101 | 105 | .orElse(null);
|
102 | 106 | if (signingName != null) {
|
103 |
| - writer.write("signingName: $S,", signingName); |
| 107 | + runtimeConfigs.put("signingName", writer -> { |
| 108 | + writer.write("signingName: $S", signingName); |
| 109 | + }); |
104 | 110 | } else {
|
105 | 111 | LOGGER.info("Cannot generate a signing name for the client because no aws.api#Service "
|
106 | 112 | + "trait was found on " + service.getId());
|
107 | 113 | }
|
108 | 114 | }
|
109 |
| - |
110 |
| - getRuntimeConfig(writer, service, target); |
| 115 | + runtimeConfigs.putAll(getRuntimeConfig(service, target)); |
| 116 | + return runtimeConfigs; |
111 | 117 | }
|
112 | 118 |
|
113 |
| - private void getRuntimeConfig(TypeScriptWriter writer, ServiceShape service, LanguageTarget target) { |
| 119 | + private Map<String, Consumer<TypeScriptWriter>> getRuntimeConfig(ServiceShape service, LanguageTarget target) { |
114 | 120 | String serviceId = service.getTrait(ServiceTrait.class).map(ServiceTrait::getSdkId).orElse("");
|
115 | 121 | if (serviceId.equals("Cognito Identity")) {
|
116 |
| - getCognitoIdentityConfig(target).accept(writer); |
| 122 | + return getCognitoIdentityConfig(target); |
117 | 123 | } else {
|
118 |
| - getDefaultConfig(target).accept(writer); |
| 124 | + return getDefaultConfig(target); |
119 | 125 | }
|
120 | 126 | }
|
121 | 127 |
|
122 |
| - private Consumer<TypeScriptWriter> getDefaultConfig(LanguageTarget target) { |
| 128 | + private Map<String, Consumer<TypeScriptWriter>> getDefaultConfig(LanguageTarget target) { |
123 | 129 | switch (target) {
|
124 | 130 | 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 | + }); |
132 | 142 | 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 | + ); |
143 | 157 | default:
|
144 |
| - return writer -> LOGGER.info("Unknown JavaScript target: " + target); |
| 158 | + return Collections.emptyMap(); |
145 | 159 | }
|
146 | 160 | }
|
147 | 161 |
|
148 | 162 | /**
|
149 | 163 | * Cognito Identity client doesn't require signing for some commands, so we are tolerant to
|
150 | 164 | * credential config resolver failure.
|
151 | 165 | */
|
152 |
| - private Consumer<TypeScriptWriter> getCognitoIdentityConfig(LanguageTarget target) { |
| 166 | + private Map<String, Consumer<TypeScriptWriter>> getCognitoIdentityConfig(LanguageTarget target) { |
153 | 167 | switch (target) {
|
154 | 168 | 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 | + }); |
162 | 179 | 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 | + ); |
179 | 199 | default:
|
180 |
| - return writer -> LOGGER.info("Unknown JavaScript target: " + target); |
| 200 | + return Collections.emptyMap(); |
181 | 201 | }
|
182 | 202 | }
|
183 | 203 | }
|
0 commit comments