Skip to content

Commit d7f5cda

Browse files
authored
feat: remove "| string" and "| number" from enum targeted members (#1028)
* feat: remove "| string" from enum targeted members * feat: closed enums for numbers
1 parent 0170356 commit d7f5cda

File tree

6 files changed

+16
-27
lines changed

6 files changed

+16
-27
lines changed

.changeset/selfish-planes-give.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
---
2+
---

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
* import { TypedYesNo } from "./TypedYesNo";
5050
*
5151
* interface MyStructure {
52-
* "yesNo": TypedYesNo | string;
52+
* "yesNo": TypedYesNo;
5353
* }
5454
* }</pre>
5555
*/

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
* import { FaceCard } from "./FaceCard";
5252
*
5353
* interface MyStructure {
54-
* "facecard": FaceCard | number;
54+
* "facecard": FaceCard;
5555
* }
5656
* }</pre>
5757
*/

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

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -353,11 +353,7 @@ public Symbol memberShape(MemberShape shape) {
353353
.orElseThrow(() -> new CodegenException("Shape not found: " + shape.getTarget()));
354354
Symbol targetSymbol = toSymbol(targetShape);
355355

356-
if (targetShape.isIntEnumShape()) {
357-
return createMemberSymbolWithIntEnumTarget(targetSymbol);
358-
}
359-
360-
if (targetSymbol.getProperties().containsKey(EnumTrait.class.getName())) {
356+
if (targetSymbol.getProperties().containsKey(EnumTrait.class.getName()) || targetShape.isIntEnumShape()) {
361357
return createMemberSymbolWithEnumTarget(targetSymbol);
362358
}
363359

@@ -371,24 +367,15 @@ public Symbol memberShape(MemberShape shape) {
371367
return targetSymbol;
372368
}
373369

374-
// Enums are considered "open", meaning it is a backward compatible change to add new
375-
// members. Adding the `string` variant allows for previously generated clients to be
376-
// able to handle unknown enum values that may be added in the future.
370+
// Enums were considered "open" with the union `| string` or `| number`, meaning it was a backwards
371+
// compatible change to add new members. This behavior was later removed to improve the helpfulness
372+
// of closed enumerated union types.
373+
// For overrides, users should use available type system overrides such as "as any" or
374+
// pragma comments.
377375
private Symbol createMemberSymbolWithEnumTarget(Symbol targetSymbol) {
378376
return targetSymbol.toBuilder()
379377
.namespace(null, "/")
380-
.name(targetSymbol.getName() + " | string")
381-
.addReference(targetSymbol)
382-
.build();
383-
}
384-
385-
// IntEnums are considered "open", meaning it is a backward compatible change to add new
386-
// members. Adding the `number` variant allows for previously generated clients to be
387-
// able to handle unknown int enum values that may be added in the future.
388-
private Symbol createMemberSymbolWithIntEnumTarget(Symbol targetSymbol) {
389-
return targetSymbol.toBuilder()
390-
.namespace(null, "/")
391-
.name(targetSymbol.getName() + " | number")
378+
.name(targetSymbol.getName())
392379
.addReference(targetSymbol)
393380
.build();
394381
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ private static boolean isValidPropertyName(String value) {
6666
/**
6767
* Creates a list of sorted, pipe separated enum variants as a union.
6868
*
69-
* <p>For example, `"foo" | "baz" | string`. Note: special characters
69+
* <p>For example, `"foo" | "baz"`. Note: special characters
7070
* and quotes are escaped as needed.
7171
*
7272
* @param values Values to create into a union.

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ public void usesLazyJsonStringForJsonMediaType() {
194194
}
195195

196196
@Test
197-
public void addsUnknownStringEnumVariant() {
197+
public void omitsUnknownStringEnumVariant() {
198198
EnumTrait trait = EnumTrait.builder()
199199
.addEnum(EnumDefinition.builder().value("FOO").name("FOO").build())
200200
.addEnum(EnumDefinition.builder().value("BAR").name("BAR").build())
@@ -218,11 +218,11 @@ public void addsUnknownStringEnumVariant() {
218218
SymbolProvider provider = new SymbolVisitor(model, settings);
219219
Symbol memberSymbol = provider.toSymbol(member);
220220

221-
assertThat(memberSymbol.getName(), equalTo("EnumString | string"));
221+
assertThat(memberSymbol.getName(), equalTo("EnumString"));
222222
}
223223

224224
@Test
225-
public void addsUnknownNumberIntEnumVariant() {
225+
public void omitsUnknownNumberIntEnumVariant() {
226226
IntEnumShape shape = IntEnumShape.builder()
227227
.id("com.foo#Foo")
228228
.addMember("BAR", 2)
@@ -246,7 +246,7 @@ public void addsUnknownNumberIntEnumVariant() {
246246
SymbolProvider provider = new SymbolVisitor(model, settings);
247247
Symbol memberSymbol = provider.toSymbol(member);
248248

249-
assertThat(memberSymbol.getName(), equalTo("Foo | number"));
249+
assertThat(memberSymbol.getName(), equalTo("Foo"));
250250
}
251251

252252
}

0 commit comments

Comments
 (0)