Skip to content

Commit c7e19b9

Browse files
authored
Add @aws-sdk/util-endpoints dependency in package.json (#619)
1 parent 334a06d commit c7e19b9

File tree

3 files changed

+112
-109
lines changed

3 files changed

+112
-109
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ private void generateEndpointV2(GenerateServiceDirective<TypeScriptCodegenContex
307307
return;
308308
}
309309

310-
new EndpointsV2Generator(directive.settings(), directive.model(), directive.fileManifest()).run();
310+
new EndpointsV2Generator(directive.context().writerDelegator(), directive.settings(), directive.model()).run();
311311
}
312312

313313
private void generateServiceInterface(GenerateServiceDirective<TypeScriptCodegenContext,

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public enum TypeScriptDependency implements SymbolDependencyContainer {
5151
MIDDLEWARE_RETRY("dependencies", "@aws-sdk/middleware-retry", true),
5252
MIDDLEWARE_STACK("dependencies", "@aws-sdk/middleware-stack", true),
5353
MIDDLEWARE_ENDPOINTS_V2("dependencies", "@aws-sdk/middleware-endpoint", false),
54+
AWS_SDK_UTIL_ENDPOINTS("dependencies", "@aws-sdk/util-endpoints", false),
5455

5556
AWS_CRYPTO_SHA256_BROWSER("dependencies", "@aws-crypto/sha256-browser", "2.0.0", true),
5657
AWS_CRYPTO_SHA256_JS("dependencies", "@aws-crypto/sha256-js", "2.0.0", true),

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/endpointsV2/EndpointsV2Generator.java

Lines changed: 110 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@
1919
import java.util.Map;
2020
import software.amazon.smithy.aws.traits.ServiceTrait;
2121
import software.amazon.smithy.aws.traits.auth.SigV4Trait;
22-
import software.amazon.smithy.build.FileManifest;
2322
import software.amazon.smithy.model.Model;
2423
import software.amazon.smithy.model.node.ObjectNode;
2524
import software.amazon.smithy.model.shapes.ServiceShape;
2625
import software.amazon.smithy.rulesengine.traits.EndpointRuleSetTrait;
2726
import software.amazon.smithy.typescript.codegen.CodegenUtils;
27+
import software.amazon.smithy.typescript.codegen.TypeScriptDelegator;
28+
import software.amazon.smithy.typescript.codegen.TypeScriptDependency;
2829
import software.amazon.smithy.typescript.codegen.TypeScriptSettings;
29-
import software.amazon.smithy.typescript.codegen.TypeScriptWriter;
3030
import software.amazon.smithy.utils.SmithyInternalApi;
3131

3232
/**
@@ -36,17 +36,20 @@
3636
public final class EndpointsV2Generator implements Runnable {
3737

3838
static final String ENDPOINT_FOLDER = "endpoint";
39+
static final String ENDPOINT_PARAMETERS_FILE = "EndpointParameters.ts";
40+
static final String ENDPOINT_RESOLVER_FILE = "endpointResolver.ts";
41+
static final String ENDPOINT_RULESET_FILE = "ruleset.ts";
3942

40-
private final FileManifest fileManifest;
43+
private final TypeScriptDelegator delegator;
4144
private final EndpointRuleSetTrait endpointRuleSetTrait;
4245
private final ServiceShape service;
4346

4447
public EndpointsV2Generator(
48+
TypeScriptDelegator delegator,
4549
TypeScriptSettings settings,
46-
Model model,
47-
FileManifest fileManifest
50+
Model model
4851
) {
49-
this.fileManifest = fileManifest;
52+
this.delegator = delegator;
5053
service = settings.getService(model);
5154
endpointRuleSetTrait = service.getTrait(EndpointRuleSetTrait.class)
5255
.orElseThrow(() -> new RuntimeException("service missing EndpointRuleSetTrait"));
@@ -63,140 +66,139 @@ public void run() {
6366
* Generate the EndpointParameters interface file specific to this service.
6467
*/
6568
private void generateEndpointParameters() {
66-
TypeScriptWriter writer = new TypeScriptWriter("");
69+
this.delegator.useFileWriter(
70+
Paths.get(CodegenUtils.SOURCE_FOLDER, ENDPOINT_FOLDER, ENDPOINT_PARAMETERS_FILE).toString(),
71+
writer -> {
72+
writer.addImport("EndpointParameters", "__EndpointParameters", "@aws-sdk/types");
73+
writer.addImport("Provider", null, "@aws-sdk/types");
6774

68-
writer.addImport("EndpointParameters", "__EndpointParameters", "@aws-sdk/types");
69-
writer.addImport("Provider", null, "@aws-sdk/types");
75+
writer.openBlock(
76+
"export interface ClientInputEndpointParameters {",
77+
"}",
78+
() -> {
79+
RuleSetParameterFinder ruleSetParameterFinder = new RuleSetParameterFinder(service);
7080

71-
writer.openBlock(
72-
"export interface ClientInputEndpointParameters {",
73-
"}",
74-
() -> {
75-
RuleSetParameterFinder ruleSetParameterFinder = new RuleSetParameterFinder(service);
81+
Map<String, String> clientInputParams = ruleSetParameterFinder.getClientContextParams();
82+
clientInputParams.putAll(ruleSetParameterFinder.getBuiltInParams());
7683

77-
Map<String, String> clientInputParams = ruleSetParameterFinder.getClientContextParams();
78-
clientInputParams.putAll(ruleSetParameterFinder.getBuiltInParams());
84+
ObjectNode ruleSet = endpointRuleSetTrait.getRuleSet().expectObjectNode();
85+
ruleSet.getObjectMember("parameters").ifPresent(parameters -> {
86+
parameters.accept(new RuleSetParametersVisitor(writer, clientInputParams, true));
87+
});
88+
}
89+
);
7990

80-
ObjectNode ruleSet = endpointRuleSetTrait.getRuleSet().expectObjectNode();
81-
ruleSet.getObjectMember("parameters").ifPresent(parameters -> {
82-
parameters.accept(new RuleSetParametersVisitor(writer, clientInputParams, true));
83-
});
84-
}
85-
);
91+
writer.write("");
92+
writer.openBlock(
93+
"export type ClientResolvedEndpointParameters = ClientInputEndpointParameters & {",
94+
"};",
95+
() -> {
96+
writer.write("defaultSigningName: string;");
97+
}
98+
);
99+
writer.write("");
86100

87-
writer.write("");
88-
writer.openBlock(
89-
"export type ClientResolvedEndpointParameters = ClientInputEndpointParameters & {",
90-
"};",
91-
() -> {
92-
writer.write("defaultSigningName: string;");
93-
}
94-
);
95-
writer.write("");
96-
97-
writer.openBlock(
98-
"export const resolveClientEndpointParameters = "
99-
+ "<T>(options: T & ClientInputEndpointParameters"
100-
+ "): T & ClientResolvedEndpointParameters => {",
101-
"}",
102-
() -> {
103-
writer.openBlock("return {", "}", () -> {
104-
writer.write("...options,");
105-
ObjectNode ruleSet = endpointRuleSetTrait.getRuleSet().expectObjectNode();
106-
ruleSet.getObjectMember("parameters").ifPresent(parameters -> {
107-
parameters.accept(new RuleSetParametersVisitor(writer, true));
108-
});
109-
ServiceTrait serviceTrait = service.getTrait(ServiceTrait.class).get();
110-
writer.write(
111-
"defaultSigningName: \"$L\",",
112-
service.getTrait(SigV4Trait.class).map(SigV4Trait::getName)
113-
.orElse(serviceTrait.getArnNamespace())
114-
);
115-
});
116-
}
117-
);
101+
writer.openBlock(
102+
"export const resolveClientEndpointParameters = "
103+
+ "<T>(options: T & ClientInputEndpointParameters"
104+
+ "): T & ClientResolvedEndpointParameters => {",
105+
"}",
106+
() -> {
107+
writer.openBlock("return {", "}", () -> {
108+
writer.write("...options,");
109+
ObjectNode ruleSet = endpointRuleSetTrait.getRuleSet().expectObjectNode();
110+
ruleSet.getObjectMember("parameters").ifPresent(parameters -> {
111+
parameters.accept(new RuleSetParametersVisitor(writer, true));
112+
});
113+
ServiceTrait serviceTrait = service.getTrait(ServiceTrait.class).get();
114+
writer.write(
115+
"defaultSigningName: \"$L\",",
116+
service.getTrait(SigV4Trait.class).map(SigV4Trait::getName)
117+
.orElse(serviceTrait.getArnNamespace())
118+
);
119+
});
120+
}
121+
);
118122

119-
writer.write("");
120-
writer.openBlock(
121-
"export interface EndpointParameters extends __EndpointParameters {",
122-
"}",
123-
() -> {
124-
ObjectNode ruleSet = endpointRuleSetTrait.getRuleSet().expectObjectNode();
125-
ruleSet.getObjectMember("parameters").ifPresent(parameters -> {
126-
parameters.accept(new RuleSetParametersVisitor(writer));
127-
});
123+
writer.write("");
124+
writer.openBlock(
125+
"export interface EndpointParameters extends __EndpointParameters {",
126+
"}",
127+
() -> {
128+
ObjectNode ruleSet = endpointRuleSetTrait.getRuleSet().expectObjectNode();
129+
ruleSet.getObjectMember("parameters").ifPresent(parameters -> {
130+
parameters.accept(new RuleSetParametersVisitor(writer));
131+
});
132+
}
133+
);
128134
}
129135
);
130-
131-
fileManifest.writeFile(
132-
Paths.get(CodegenUtils.SOURCE_FOLDER, ENDPOINT_FOLDER, "EndpointParameters.ts").toString(),
133-
writer.toString()
134-
);
135136
}
136137

137138
/**
138139
* Generate the resolver function for this service.
139140
*/
140141
private void generateEndpointResolver() {
141-
TypeScriptWriter writer = new TypeScriptWriter("");
142-
143-
writer.addImport("EndpointV2", null, "@aws-sdk/types");
144-
writer.addImport("Logger", null, "@aws-sdk/types");
142+
this.delegator.useFileWriter(
143+
Paths.get(CodegenUtils.SOURCE_FOLDER, ENDPOINT_FOLDER, ENDPOINT_RESOLVER_FILE).toString(),
144+
writer -> {
145+
writer.addImport("EndpointV2", null, "@aws-sdk/types");
146+
writer.addImport("Logger", null, "@aws-sdk/types");
147+
148+
writer.addDependency(TypeScriptDependency.AWS_SDK_UTIL_ENDPOINTS);
149+
writer.addImport("EndpointParams", null, TypeScriptDependency.AWS_SDK_UTIL_ENDPOINTS.packageName);
150+
writer.addImport("resolveEndpoint", null, TypeScriptDependency.AWS_SDK_UTIL_ENDPOINTS.packageName);
151+
writer.addImport("EndpointParameters", null,
152+
Paths.get(".", CodegenUtils.SOURCE_FOLDER, ENDPOINT_FOLDER,
153+
ENDPOINT_PARAMETERS_FILE.replace(".ts", "")).toString());
154+
writer.addImport("ruleSet", null,
155+
Paths.get(".", CodegenUtils.SOURCE_FOLDER, ENDPOINT_FOLDER,
156+
ENDPOINT_RULESET_FILE.replace(".ts", "")).toString());
145157

146-
writer.addImport("EndpointParams", null, "@aws-sdk/util-endpoints");
147-
writer.addImport("resolveEndpoint", null, "@aws-sdk/util-endpoints");
148-
writer.addImport("EndpointParameters", null, "../endpoint/EndpointParameters");
149-
writer.addImport("ruleSet", null, "../endpoint/ruleset");
150-
151-
writer.openBlock(
152-
"export const defaultEndpointResolver = ",
153-
"",
154-
() -> {
155158
writer.openBlock(
156-
"(endpointParams: EndpointParameters, context: { logger?: Logger } = {}): EndpointV2 => {",
157-
"};",
159+
"export const defaultEndpointResolver = ",
160+
"",
158161
() -> {
159162
writer.openBlock(
160-
"return resolveEndpoint(ruleSet, {",
161-
"});",
163+
"(endpointParams: EndpointParameters, context: { logger?: Logger } = {}): EndpointV2 => {",
164+
"};",
162165
() -> {
163-
writer.write("endpointParams: endpointParams as EndpointParams,");
164-
writer.write("logger: context.logger,");
166+
writer.openBlock(
167+
"return resolveEndpoint(ruleSet, {",
168+
"});",
169+
() -> {
170+
writer.write("endpointParams: endpointParams as EndpointParams,");
171+
writer.write("logger: context.logger,");
172+
}
173+
);
165174
}
166175
);
167176
}
168177
);
169178
}
170179
);
171-
172-
fileManifest.writeFile(
173-
Paths.get(CodegenUtils.SOURCE_FOLDER, ENDPOINT_FOLDER, "endpointResolver.ts").toString(),
174-
writer.toString()
175-
);
176180
}
177181

178182
/**
179183
* Generate the ruleset (dynamic resolution only).
180184
*/
181185
private void generateEndpointRuleset() {
182-
TypeScriptWriter writer = new TypeScriptWriter("");
183-
184-
writer.addImport("RuleSetObject", null, "@aws-sdk/util-endpoints");
185-
186-
writer.openBlock(
187-
"export const ruleSet: RuleSetObject = ",
188-
"",
189-
() -> {
190-
new RuleSetSerializer(
191-
endpointRuleSetTrait.getRuleSet(),
192-
writer
193-
).generate();
194-
}
195-
);
186+
this.delegator.useFileWriter(
187+
Paths.get(CodegenUtils.SOURCE_FOLDER, ENDPOINT_FOLDER, ENDPOINT_RULESET_FILE).toString(),
188+
writer -> {
189+
writer.addImport("RuleSetObject", null, "@aws-sdk/util-endpoints");
190+
writer.openBlock(
191+
"export const ruleSet: RuleSetObject = ",
192+
"",
193+
() -> {
194+
new RuleSetSerializer(
195+
endpointRuleSetTrait.getRuleSet(),
196+
writer
197+
).generate();
198+
}
199+
);
196200

197-
fileManifest.writeFile(
198-
Paths.get(CodegenUtils.SOURCE_FOLDER, ENDPOINT_FOLDER, "ruleset.ts").toString(),
199-
writer.toString()
201+
}
200202
);
201203
}
202204
}

0 commit comments

Comments
 (0)