Skip to content

Commit 4d2b59e

Browse files
committed
Update default package description base on artifact type
1 parent ac8fb3f commit 4d2b59e

File tree

4 files changed

+107
-6
lines changed

4 files changed

+107
-6
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
@SmithyInternalApi
3131
final class PackageJsonGenerator {
3232

33+
public static final String PACKAGE_JSON_FILENAME = "package.json";
34+
3335
private PackageJsonGenerator() {}
3436

3537
static void writePackageJson(
@@ -74,6 +76,6 @@ static void writePackageJson(
7476
template = template.replace("${packageDescription}", settings.getPackageDescription());
7577
template = template.replace("${packageVersion}", settings.getPackageVersion());
7678
template = template.replace("${packageManager}", settings.getPackageManager().getCommand());
77-
manifest.writeFile("package.json", template);
79+
manifest.writeFile(PACKAGE_JSON_FILENAME, template);
7880
}
7981
}

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public static TypeScriptSettings from(Model model, ObjectNode config, ArtifactTy
9393
settings.setPackageName(config.expectStringMember(PACKAGE).getValue());
9494
settings.setPackageVersion(config.expectStringMember(PACKAGE_VERSION).getValue());
9595
settings.setPackageDescription(config.getStringMemberOrDefault(
96-
PACKAGE_DESCRIPTION, settings.getPackageName() + " client"));
96+
PACKAGE_DESCRIPTION, settings.getDefaultDescription()));
9797
settings.packageJson = config.getObjectMember(PACKAGE_JSON).orElse(Node.objectNode());
9898
config.getStringMember(PROTOCOL).map(StringNode::getValue).map(ShapeId::from).ifPresent(settings::setProtocol);
9999
settings.setPrivate(config.getBooleanMember(PRIVATE).map(BooleanNode::getValue).orElse(false));
@@ -110,6 +110,20 @@ public static TypeScriptSettings from(Model model, ObjectNode config, ArtifactTy
110110
return settings;
111111
}
112112

113+
private String getDefaultDescription() {
114+
String description = getPackageName();
115+
switch (artifactType) {
116+
case CLIENT:
117+
description += " client";
118+
break;
119+
case SSDK:
120+
description += " server";
121+
break;
122+
default:
123+
}
124+
return description;
125+
}
126+
113127
// TODO: this seems reusable across generators.
114128
private static ShapeId inferService(Model model) {
115129
List<ShapeId> services = model
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package software.amazon.smithy.typescript.codegen;
2+
3+
import org.junit.jupiter.params.ParameterizedTest;
4+
import org.junit.jupiter.params.provider.Arguments;
5+
import org.junit.jupiter.params.provider.MethodSource;
6+
import software.amazon.smithy.build.MockManifest;
7+
import software.amazon.smithy.model.Model;
8+
import software.amazon.smithy.model.node.Node;
9+
import software.amazon.smithy.model.node.ObjectNode;
10+
11+
import java.util.HashMap;
12+
import java.util.stream.Stream;
13+
14+
import static org.hamcrest.MatcherAssert.assertThat;
15+
import static org.hamcrest.Matchers.containsString;
16+
import static org.junit.jupiter.api.Assertions.assertTrue;
17+
18+
class PackageJsonGeneratorTest {
19+
@ParameterizedTest
20+
@MethodSource("providePackageDescriptionTestCases")
21+
void expectPackageDescriptionUpdatedByArtifactType(TypeScriptSettings.ArtifactType artifactType, String expectedDescription) {
22+
Model model = Model.assembler()
23+
.addImport(getClass().getResource("simple-service.smithy"))
24+
.assemble()
25+
.unwrap();
26+
27+
MockManifest manifest = new MockManifest();
28+
29+
ObjectNode settings = Node.objectNodeBuilder()
30+
.withMember("service", Node.from("smithy.example#Example"))
31+
.withMember("package", Node.from("example"))
32+
.withMember("packageVersion", Node.from("1.0.0"))
33+
.build();
34+
35+
final TypeScriptSettings typeScriptSettings = TypeScriptSettings.from(model, settings, artifactType);
36+
37+
PackageJsonGenerator.writePackageJson(typeScriptSettings, manifest, new HashMap<>());
38+
39+
assertTrue(manifest.getFileString(PackageJsonGenerator.PACKAGE_JSON_FILENAME).isPresent());
40+
41+
String packageJson = manifest.getFileString(PackageJsonGenerator.PACKAGE_JSON_FILENAME).get();
42+
43+
assertThat(packageJson, containsString(String.format("\"description\": \"%s\"", expectedDescription)));
44+
}
45+
46+
private static Stream<Arguments> providePackageDescriptionTestCases() {
47+
return Stream.of(
48+
Arguments.of(TypeScriptSettings.ArtifactType.SSDK, "example server"),
49+
Arguments.of(TypeScriptSettings.ArtifactType.CLIENT, "example client")
50+
);
51+
}
52+
}

smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/TypeScriptSettingsTest.java

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
package software.amazon.smithy.typescript.codegen;
22

3-
import static org.hamcrest.MatcherAssert.assertThat;
4-
import static org.hamcrest.Matchers.equalTo;
5-
import static org.junit.jupiter.api.Assertions.assertEquals;
6-
73
import org.junit.jupiter.api.Test;
4+
import org.junit.jupiter.params.ParameterizedTest;
5+
import org.junit.jupiter.params.provider.Arguments;
6+
import org.junit.jupiter.params.provider.MethodSource;
87
import software.amazon.smithy.model.Model;
98
import software.amazon.smithy.model.node.Node;
9+
import software.amazon.smithy.model.node.ObjectNode;
1010
import software.amazon.smithy.model.shapes.ShapeId;
1111

12+
import java.util.stream.Stream;
13+
14+
import static org.hamcrest.MatcherAssert.assertThat;
15+
import static org.hamcrest.Matchers.equalTo;
16+
import static org.junit.jupiter.api.Assertions.assertEquals;
17+
1218
public class TypeScriptSettingsTest {
1319

1420
@Test
@@ -54,6 +60,33 @@ public void canBeConfiguredToNpm() {
5460
assertEquals(TypeScriptSettings.PackageManager.NPM, settings.getPackageManager());
5561
}
5662

63+
64+
@ParameterizedTest
65+
@MethodSource("providePackageDescriptionTestCases")
66+
void expectPackageDescriptionUpdatedByArtifactType(TypeScriptSettings.ArtifactType artifactType, String expectedDescription) {
67+
Model model = Model.assembler()
68+
.addImport(getClass().getResource("simple-service.smithy"))
69+
.assemble()
70+
.unwrap();
71+
72+
ObjectNode settings = Node.objectNodeBuilder()
73+
.withMember("service", Node.from("smithy.example#Example"))
74+
.withMember("package", Node.from("example"))
75+
.withMember("packageVersion", Node.from("1.0.0"))
76+
.build();
77+
78+
final TypeScriptSettings typeScriptSettings = TypeScriptSettings.from(model, settings, artifactType);
79+
80+
assertEquals(typeScriptSettings.getPackageDescription(), expectedDescription);
81+
}
82+
83+
private static Stream<Arguments> providePackageDescriptionTestCases() {
84+
return Stream.of(
85+
Arguments.of(TypeScriptSettings.ArtifactType.SSDK, "example server"),
86+
Arguments.of(TypeScriptSettings.ArtifactType.CLIENT, "example client")
87+
);
88+
}
89+
5790
@Test
5891
public void resolvesSupportProtocols() {
5992
// TODO

0 commit comments

Comments
 (0)