1313 * permissions and limitations under the License.
1414 */
1515
16+ import software.amazon.smithy.model.Model
17+ import software.amazon.smithy.model.shapes.ServiceShape
1618import software.amazon.smithy.model.node.Node
1719import software.amazon.smithy.gradle.tasks.SmithyBuild
20+ import software.amazon.smithy.aws.traits.ServiceTrait
21+ import kotlin.streams.toList
22+
23+ buildscript {
24+ dependencies {
25+ " classpath" (" software.amazon.smithy:smithy-aws-traits:[1.5.1,2.0.0[" )
26+ }
27+ }
1828
1929plugins {
2030 id(" software.amazon.smithy" ) version " 0.5.3"
@@ -44,8 +54,24 @@ tasks.register("generate-smithy-build") {
4454 val modelsDirProp: String by project
4555 val models = project.file(modelsDirProp);
4656
47- fileTree(models).filter { it.isFile }.files.forEach { file ->
48- val (sdkId, version, remaining) = file.name.split(" ." )
57+ fileTree(models).filter { it.isFile }.files.forEach eachFile@{ file ->
58+ val model = Model .assembler()
59+ .addImport(file.absolutePath)
60+ .assemble().result.get();
61+ val services = model.shapes(ServiceShape ::class .javaObjectType).sorted().toList();
62+ if (services.size != 1 ) {
63+ throw Exception (" There must be exactly one service in each aws model file, but found " +
64+ " ${services.size} in ${file.name} : ${services.map { it.id }} " );
65+ }
66+ val service = services[0 ]
67+
68+ val serviceTrait = service.getTrait(ServiceTrait ::class .javaObjectType).get();
69+
70+ val sdkId = serviceTrait.sdkId
71+ .replace(" " , " -" )
72+ .toLowerCase();
73+ val version = service.version.toLowerCase();
74+
4975 val clientName = sdkId.split(" -" ).toTypedArray()
5076 .map { it.capitalize() }
5177 .joinToString(separator = " " )
@@ -59,7 +85,7 @@ tasks.register("generate-smithy-build") {
5985 .withMember(" typescript-codegen" , Node .objectNodeBuilder()
6086 .withMember(" package" , " @aws-sdk/client-" + sdkId.toLowerCase())
6187 // Note that this version is replaced by Lerna when publishing.
62- .withMember(" packageVersion" , " 1 .0.0-rc.1 " )
88+ .withMember(" packageVersion" , " 3 .0.0" )
6389 .withMember(" packageJson" , manifestOverwrites)
6490 .withMember(" packageDescription" , " AWS SDK for JavaScript "
6591 + clientName + " Client for Node.js, Browser and React Native" )
0 commit comments