Skip to content

Commit fdd21e5

Browse files
committed
chore(codegen): pull dependency versions from package.jsons
1 parent 8b05bdd commit fdd21e5

File tree

2 files changed

+116
-35
lines changed

2 files changed

+116
-35
lines changed

codegen/smithy-aws-typescript-codegen/build.gradle.kts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,54 @@
1313
* permissions and limitations under the License.
1414
*/
1515

16+
import software.amazon.smithy.model.node.Node
17+
18+
1619
description = "Generates TypeScript code for AWS protocols from Smithy models"
1720
extra["displayName"] = "Smithy :: AWS :: Typescript :: Codegen"
1821
extra["moduleName"] = "software.amazon.smithy.aws.typescript.codegen"
1922

23+
buildscript {
24+
repositories {
25+
mavenCentral()
26+
}
27+
dependencies {
28+
classpath("software.amazon.smithy:smithy-model:[1.7.0, 1.8.0[")
29+
}
30+
}
31+
2032
dependencies {
2133
api("software.amazon.smithy:smithy-aws-cloudformation-traits:[1.8.0, 1.9.0[")
2234
api("software.amazon.smithy:smithy-aws-traits:[1.8.0, 1.9.0[")
2335
api("software.amazon.smithy:smithy-waiters:[1.8.0, 1.9.0[")
2436
api("software.amazon.smithy:smithy-aws-iam-traits:[1.8.0, 1.9.0[")
2537
api("software.amazon.smithy.typescript:smithy-typescript-codegen:0.3.0")
2638
}
39+
40+
tasks.register("set-aws-sdk-versions") {
41+
doLast {
42+
mkdir("$buildDir/generated/resources/software/amazon/smithy/aws/typescript/codegen")
43+
var versionsFile =
44+
file("$buildDir/generated/resources/software/amazon/smithy/aws/typescript/codegen/sdkVersions.properties")
45+
var roots = project.file("../../packages").listFiles().toMutableList() + project.file("../../clients").listFiles().toList()
46+
roots.forEach { packageDir ->
47+
var packageJsonFile = File(packageDir, "package.json")
48+
if (packageJsonFile.isFile()) {
49+
var packageJson = Node.parse(packageJsonFile.readText()).expectObjectNode()
50+
var packageName = packageJson.expectStringMember("name").getValue()
51+
var packageVersion = packageJson.expectStringMember("version").getValue()
52+
versionsFile.appendText("$packageName=$packageVersion\n")
53+
}
54+
}
55+
}
56+
}
57+
58+
sourceSets {
59+
main {
60+
resources {
61+
setSrcDirs(listOf("src/main/resources", "$buildDir/generated/resources"))
62+
}
63+
}
64+
}
65+
66+
tasks["processResources"].dependsOn(tasks["set-aws-sdk-versions"])

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

Lines changed: 76 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,16 @@
1818
import static software.amazon.smithy.typescript.codegen.TypeScriptDependency.DEV_DEPENDENCY;
1919
import static software.amazon.smithy.typescript.codegen.TypeScriptDependency.NORMAL_DEPENDENCY;
2020

21+
import java.io.IOException;
22+
import java.io.StringReader;
2123
import java.util.Collections;
24+
import java.util.HashMap;
2225
import java.util.List;
26+
import java.util.Map;
27+
import java.util.Properties;
2328
import software.amazon.smithy.codegen.core.SymbolDependency;
2429
import software.amazon.smithy.codegen.core.SymbolDependencyContainer;
30+
import software.amazon.smithy.utils.IoUtils;
2531
import software.amazon.smithy.utils.SmithyInternalApi;
2632

2733
/**
@@ -31,58 +37,93 @@
3137
@SmithyInternalApi
3238
public enum AwsDependency implements SymbolDependencyContainer {
3339

34-
MIDDLEWARE_SIGNING(NORMAL_DEPENDENCY, "@aws-sdk/middleware-signing", "3.15.0"),
35-
CREDENTIAL_PROVIDER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/credential-provider-node", "3.15.0"),
36-
ACCEPT_HEADER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-api-gateway", "3.15.0"),
37-
S3_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-s3", "3.15.0"),
38-
ADD_EXPECT_CONTINUE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-expect-continue", "3.15.0"),
39-
GLACIER_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-glacier", "3.15.0"),
40-
MACHINELEARNING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-machinelearning", "3.15.0"),
41-
S3_CONTROL_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-s3-control", "3.15.0"),
42-
SSEC_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-ssec", "3.15.0"),
43-
RDS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-rds", "3.15.0"),
44-
LOCATION_CONSTRAINT(NORMAL_DEPENDENCY, "@aws-sdk/middleware-location-constraint", "3.15.0"),
45-
MD5_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/md5-js", "3.15.0"),
46-
STREAM_HASHER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/hash-stream-node", "3.15.0"),
47-
STREAM_HASHER_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/hash-blob-browser", "3.15.0"),
48-
ROUTE53_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-route53", "3.15.0"),
49-
EC2_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-ec2", "3.15.0"),
50-
BUCKET_ENDPOINT_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-bucket-endpoint", "3.15.0"),
51-
BODY_CHECKSUM(NORMAL_DEPENDENCY, "@aws-sdk/middleware-apply-body-checksum", "3.15.0"),
52-
MIDDLEWARE_HOST_HEADER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-host-header", "3.15.0"),
53-
SQS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sqs", "3.15.0"),
54-
BODY_CHECKSUM_GENERATOR_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-browser", "3.15.0"),
55-
BODY_CHECKSUM_GENERATOR_NODE(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-node", "3.15.0"),
56-
XML_BUILDER(NORMAL_DEPENDENCY, "@aws-sdk/xml-builder", "3.14.0"),
40+
MIDDLEWARE_SIGNING(NORMAL_DEPENDENCY, "@aws-sdk/middleware-signing"),
41+
CREDENTIAL_PROVIDER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/credential-provider-node"),
42+
ACCEPT_HEADER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-api-gateway"),
43+
S3_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-s3"),
44+
ADD_EXPECT_CONTINUE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-expect-continue"),
45+
GLACIER_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-glacier"),
46+
MACHINELEARNING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-machinelearning"),
47+
S3_CONTROL_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-s3-control"),
48+
SSEC_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-ssec"),
49+
RDS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-rds"),
50+
LOCATION_CONSTRAINT(NORMAL_DEPENDENCY, "@aws-sdk/middleware-location-constraint"),
51+
MD5_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/md5-js"),
52+
STREAM_HASHER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/hash-stream-node"),
53+
STREAM_HASHER_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/hash-blob-browser"),
54+
ROUTE53_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-route53"),
55+
EC2_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-ec2"),
56+
BUCKET_ENDPOINT_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-bucket-endpoint"),
57+
BODY_CHECKSUM(NORMAL_DEPENDENCY, "@aws-sdk/middleware-apply-body-checksum"),
58+
MIDDLEWARE_HOST_HEADER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-host-header"),
59+
SQS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sqs"),
60+
BODY_CHECKSUM_GENERATOR_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-browser"),
61+
BODY_CHECKSUM_GENERATOR_NODE(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-node"),
62+
XML_BUILDER(NORMAL_DEPENDENCY, "@aws-sdk/xml-builder"),
5763
XML_PARSER(NORMAL_DEPENDENCY, "fast-xml-parser", "3.19.0"),
5864
HTML_ENTITIES(NORMAL_DEPENDENCY, "entities", "2.2.0"),
5965
UUID_GENERATOR(NORMAL_DEPENDENCY, "uuid", "^8.3.2"),
6066
UUID_GENERATOR_TYPES(DEV_DEPENDENCY, "@types/uuid", "^8.3.0"),
61-
MIDDLEWARE_EVENTSTREAM(NORMAL_DEPENDENCY, "@aws-sdk/middleware-eventstream", "3.15.0"),
62-
AWS_SDK_EVENTSTREAM_HANDLER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/eventstream-handler-node", "3.15.0"),
63-
TRANSCRIBE_STREAMING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-transcribe-streaming",
64-
"3.15.0"),
65-
STS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sts", "3.15.0"),
66-
STS_CLIENT(NORMAL_DEPENDENCY, "@aws-sdk/client-sts", "3.15.0"),
67-
NODE_CONFIG_PROVIDER(NORMAL_DEPENDENCY, "@aws-sdk/node-config-provider", "3.15.0"),
68-
MIDDLEWARE_LOGGER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-logger", "3.15.0"),
69-
MIDDLEWARE_USER_AGENT("dependencies", "@aws-sdk/middleware-user-agent", "3.15.0"),
70-
AWS_SDK_UTIL_USER_AGENT_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-browser", "3.15.0"),
71-
AWS_SDK_UTIL_USER_AGENT_NODE(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-node", "3.15.0"),
72-
MIDDLEWARE_ENDPOINT_DISCOVERY(NORMAL_DEPENDENCY, "@aws-sdk/middleware-endpoint-discovery", "3.0.0");
67+
MIDDLEWARE_EVENTSTREAM(NORMAL_DEPENDENCY, "@aws-sdk/middleware-eventstream"),
68+
AWS_SDK_EVENTSTREAM_HANDLER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/eventstream-handler-node"),
69+
TRANSCRIBE_STREAMING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-transcribe-streaming"),
70+
STS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sts"),
71+
STS_CLIENT(NORMAL_DEPENDENCY, "@aws-sdk/client-sts"),
72+
NODE_CONFIG_PROVIDER(NORMAL_DEPENDENCY, "@aws-sdk/node-config-provider"),
73+
MIDDLEWARE_LOGGER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-logger"),
74+
MIDDLEWARE_USER_AGENT("dependencies", "@aws-sdk/middleware-user-agent"),
75+
AWS_SDK_UTIL_USER_AGENT_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-browser"),
76+
AWS_SDK_UTIL_USER_AGENT_NODE(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-node"),
77+
MIDDLEWARE_ENDPOINT_DISCOVERY(NORMAL_DEPENDENCY, "@aws-sdk/middleware-endpoint-discovery");
7378

7479
public final String packageName;
7580
public final String version;
7681
public final SymbolDependency dependency;
7782

83+
AwsDependency(String type, String name) {
84+
this(type, name, SdkVersion.expectVersion(name));
85+
}
86+
7887
AwsDependency(String type, String name, String version) {
7988
this.dependency = SymbolDependency.builder().dependencyType(type).packageName(name).version(version).build();
8089
this.packageName = name;
8190
this.version = version;
8291
}
8392

93+
8494
@Override
8595
public List<SymbolDependency> getDependencies() {
8696
return Collections.singletonList(dependency);
8797
}
98+
99+
private static final class SdkVersion {
100+
private static final Map<String, String> VERSIONS;
101+
102+
static {
103+
String rawProperties =
104+
IoUtils.readUtf8Url(AwsDependency.class.getResource("sdkVersions.properties")).trim();
105+
Properties p = new Properties();
106+
try {
107+
p.load(new StringReader(rawProperties));
108+
} catch (IOException e) {
109+
throw new IllegalArgumentException("Could not read sdkVersions.properties");
110+
}
111+
112+
final Map<String, String> versions = new HashMap<>(p.size());
113+
p.forEach((k, v) -> {
114+
if (versions.put(k.toString(), v.toString()) != null) {
115+
throw new IllegalArgumentException("Multiple versions defined for " + k.toString());
116+
}
117+
});
118+
VERSIONS = Collections.unmodifiableMap(versions);
119+
}
120+
121+
private static String expectVersion(String packageName) {
122+
if (!VERSIONS.containsKey(packageName)) {
123+
throw new IllegalArgumentException("No version for " + packageName);
124+
}
125+
return VERSIONS.get(packageName);
126+
}
127+
}
88128
}
129+

0 commit comments

Comments
 (0)