Skip to content

Commit 2990eb9

Browse files
atbreuer11Aaron Breuer
and
Aaron Breuer
authored
fix: model bucketing edge case with resource shape (#1123)
Co-authored-by: Aaron Breuer <[email protected]>
1 parent 9972041 commit 2990eb9

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -463,9 +463,9 @@ public String formatModuleName(Shape shape, String name) {
463463
}
464464
// Add models into buckets no bigger than chunk size.
465465
String path;
466-
if (shape.getId().equals(UnitTypeTrait.UNIT)) {
467-
// Unit should only be put in the zero bucket, since it does not
468-
// generate anything. It also does not contribute to bucket size.
466+
if (shape.getId().equals(UnitTypeTrait.UNIT) || shape.isResourceShape()) {
467+
// Unit or Resource shapes should only be put in the zero bucket, since they do not
468+
// generate anything. They also do not contribute to bucket size.
469469
path = String.join("/", ".", SHAPE_NAMESPACE_PREFIX, "models_0");
470470
} else {
471471
path = String.join("/", ".", SHAPE_NAMESPACE_PREFIX, "models_" + bucketCount);

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

+27
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import software.amazon.smithy.model.shapes.IntEnumShape;
1515
import software.amazon.smithy.model.shapes.ListShape;
1616
import software.amazon.smithy.model.shapes.MemberShape;
17+
import software.amazon.smithy.model.shapes.ResourceShape;
1718
import software.amazon.smithy.model.shapes.Shape;
1819
import software.amazon.smithy.model.shapes.ShapeId;
1920
import software.amazon.smithy.model.shapes.StringShape;
@@ -249,4 +250,30 @@ public void omitsUnknownNumberIntEnumVariant() {
249250
assertThat(memberSymbol.getName(), equalTo("Foo"));
250251
}
251252

253+
@Test
254+
public void placesResourceShapeIntoInitialBucket() {
255+
Shape shape1 = StructureShape.builder().id("com.foo#Hello").build();
256+
Shape shape2 = ResourceShape.builder().id("com.foo.baz#Hello").build();
257+
Model model = Model.assembler()
258+
.addImport(getClass().getResource("simple-service.smithy"))
259+
.addShapes(shape1, shape2)
260+
.assemble()
261+
.unwrap();
262+
TypeScriptSettings settings = TypeScriptSettings.from(model, Node.objectNodeBuilder()
263+
.withMember("package", Node.from("example"))
264+
.withMember("packageVersion", Node.from("1.0.0"))
265+
.build());
266+
SymbolProvider provider = new SymbolVisitor(model, settings, 1);
267+
Symbol symbol1 = provider.toSymbol(shape1);
268+
Symbol symbol2 = provider.toSymbol(shape2);
269+
MockManifest manifest = new MockManifest();
270+
SymbolVisitor.writeModelIndex(Arrays.asList(shape1, shape2), provider, manifest);
271+
272+
assertThat(symbol1.getNamespace(), equalTo("./" + CodegenUtils.SOURCE_FOLDER + "/models/models_0"));
273+
assertThat(symbol1.getDefinitionFile(), equalTo("./" + CodegenUtils.SOURCE_FOLDER + "/models/models_0.ts"));
274+
assertThat(symbol2.getNamespace(), equalTo("./" + CodegenUtils.SOURCE_FOLDER + "/models/models_0"));
275+
assertThat(symbol2.getDefinitionFile(), equalTo("./" + CodegenUtils.SOURCE_FOLDER + "/models/models_0.ts"));
276+
assertThat(manifest.getFileString(CodegenUtils.SOURCE_FOLDER + "/models/index.ts").get(),
277+
containsString("export * from \"./models_0\";"));
278+
}
252279
}

0 commit comments

Comments
 (0)