Skip to content

Commit 9144509

Browse files
chore(codegen): pull dependency versions from package.json (#2481)
Co-authored-by: Trivikram Kamat <16024985+trivikr@users.noreply.github.com>
1 parent d966629 commit 9144509

File tree

2 files changed

+112
-31
lines changed

2 files changed

+112
-31
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,10 +13,22 @@
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[")
@@ -25,3 +37,31 @@ dependencies {
2537
api("software.amazon.smithy:smithy-protocol-test-traits:[1.8.0, 1.9.0[")
2638
api("software.amazon.smithy.typescript:smithy-typescript-codegen:0.3.0")
2739
}
40+
41+
tasks.register("set-aws-sdk-versions") {
42+
doLast {
43+
mkdir("$buildDir/generated/resources/software/amazon/smithy/aws/typescript/codegen")
44+
var versionsFile =
45+
file("$buildDir/generated/resources/software/amazon/smithy/aws/typescript/codegen/sdkVersions.properties")
46+
var roots = project.file("../../packages").listFiles().toMutableList() + project.file("../../clients").listFiles().toList()
47+
roots.forEach { packageDir ->
48+
var packageJsonFile = File(packageDir, "package.json")
49+
if (packageJsonFile.isFile()) {
50+
var packageJson = Node.parse(packageJsonFile.readText()).expectObjectNode()
51+
var packageName = packageJson.expectStringMember("name").getValue()
52+
var packageVersion = packageJson.expectStringMember("version").getValue()
53+
versionsFile.appendText("$packageName=$packageVersion\n")
54+
}
55+
}
56+
}
57+
}
58+
59+
sourceSets {
60+
main {
61+
resources {
62+
setSrcDirs(listOf("src/main/resources", "$buildDir/generated/resources"))
63+
}
64+
}
65+
}
66+
67+
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: 72 additions & 31 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,54 +37,89 @@
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-
ROUTE53_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-route53", "3.15.0"),
46-
EC2_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-ec2", "3.15.0"),
47-
BUCKET_ENDPOINT_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-bucket-endpoint", "3.15.0"),
48-
MIDDLEWARE_HOST_HEADER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-host-header", "3.15.0"),
49-
SQS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sqs", "3.15.0"),
50-
BODY_CHECKSUM_GENERATOR_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-browser", "3.15.0"),
51-
BODY_CHECKSUM_GENERATOR_NODE(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-node", "3.15.0"),
52-
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+
ROUTE53_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-route53"),
52+
EC2_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-ec2"),
53+
BUCKET_ENDPOINT_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-bucket-endpoint"),
54+
MIDDLEWARE_HOST_HEADER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-host-header"),
55+
SQS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sqs"),
56+
BODY_CHECKSUM_GENERATOR_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-browser"),
57+
BODY_CHECKSUM_GENERATOR_NODE(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-node"),
58+
XML_BUILDER(NORMAL_DEPENDENCY, "@aws-sdk/xml-builder"),
5359
XML_PARSER(NORMAL_DEPENDENCY, "fast-xml-parser", "3.19.0"),
5460
HTML_ENTITIES(NORMAL_DEPENDENCY, "entities", "2.2.0"),
5561
UUID_GENERATOR(NORMAL_DEPENDENCY, "uuid", "^8.3.2"),
5662
UUID_GENERATOR_TYPES(DEV_DEPENDENCY, "@types/uuid", "^8.3.0"),
57-
MIDDLEWARE_EVENTSTREAM(NORMAL_DEPENDENCY, "@aws-sdk/middleware-eventstream", "3.15.0"),
58-
AWS_SDK_EVENTSTREAM_HANDLER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/eventstream-handler-node", "3.15.0"),
59-
TRANSCRIBE_STREAMING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-transcribe-streaming",
60-
"3.15.0"),
61-
STS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sts", "3.15.0"),
62-
STS_CLIENT(NORMAL_DEPENDENCY, "@aws-sdk/client-sts", "3.15.0"),
63-
NODE_CONFIG_PROVIDER(NORMAL_DEPENDENCY, "@aws-sdk/node-config-provider", "3.15.0"),
64-
MIDDLEWARE_LOGGER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-logger", "3.15.0"),
65-
MIDDLEWARE_USER_AGENT("dependencies", "@aws-sdk/middleware-user-agent", "3.15.0"),
66-
AWS_SDK_UTIL_USER_AGENT_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-browser", "3.15.0"),
67-
AWS_SDK_UTIL_USER_AGENT_NODE(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-node", "3.15.0"),
68-
MIDDLEWARE_ENDPOINT_DISCOVERY(NORMAL_DEPENDENCY, "@aws-sdk/middleware-endpoint-discovery", "3.0.0");
63+
MIDDLEWARE_EVENTSTREAM(NORMAL_DEPENDENCY, "@aws-sdk/middleware-eventstream"),
64+
AWS_SDK_EVENTSTREAM_HANDLER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/eventstream-handler-node"),
65+
TRANSCRIBE_STREAMING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-transcribe-streaming"),
66+
STS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sts"),
67+
STS_CLIENT(NORMAL_DEPENDENCY, "@aws-sdk/client-sts"),
68+
NODE_CONFIG_PROVIDER(NORMAL_DEPENDENCY, "@aws-sdk/node-config-provider"),
69+
MIDDLEWARE_LOGGER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-logger"),
70+
MIDDLEWARE_USER_AGENT("dependencies", "@aws-sdk/middleware-user-agent"),
71+
AWS_SDK_UTIL_USER_AGENT_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-browser"),
72+
AWS_SDK_UTIL_USER_AGENT_NODE(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-node"),
73+
MIDDLEWARE_ENDPOINT_DISCOVERY(NORMAL_DEPENDENCY, "@aws-sdk/middleware-endpoint-discovery");
6974

7075
public final String packageName;
7176
public final String version;
7277
public final SymbolDependency dependency;
7378

79+
AwsDependency(String type, String name) {
80+
this(type, name, SdkVersion.expectVersion(name));
81+
}
82+
7483
AwsDependency(String type, String name, String version) {
7584
this.dependency = SymbolDependency.builder().dependencyType(type).packageName(name).version(version).build();
7685
this.packageName = name;
7786
this.version = version;
7887
}
7988

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

0 commit comments

Comments
 (0)