Skip to content

Remove __type and isa function #208

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Sep 9, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,7 @@ private void generateErrorResponseTest(
writer.write("try {\n"
+ " await client.send(command);\n"
+ "} catch (err) {\n"
+ " if (!$T.isa(err)) {\n"
+ " if (err.name !== \"$T\") {\n"
+ " console.log(err);\n"
+ " fail(`Expected a $L to be thrown, got $${err.name} instead`);\n"
+ " return;\n"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,16 +69,13 @@ public void run() {
* <p>The following TypeScript is rendered:
*
* <pre>{@code
* import { isa as __isa } from "@aws-sdk/smithy-client";
*
* export interface Person {
* __type?: "Person";
* name: string | undefined;
* age?: number | null;
* }
*
* export namespace Person {
* export const isa = (o: any): o is Person => __isa(o, "Person");
* export const filterSensitiveLog = (obj: Person): any => ({...obj});
* }
* }</pre>
*/
Expand All @@ -98,7 +95,6 @@ private void renderNonErrorStructure() {
writer.openBlock("export interface $L extends $L {", symbol.getName(), extendsFrom);
}

writer.write("__type?: $S;", shape.getId().getName());
StructuredMemberWriter config = new StructuredMemberWriter(
model, symbolProvider, shape.getAllMembers().values());
config.writeMembers(writer, shape);
Expand Down Expand Up @@ -127,8 +123,7 @@ private void renderNonErrorStructure() {
*
* <pre>{@code
* import {
* SmithyException as __SmithyException,
* isa as __isa
* SmithyException as __SmithyException
* } from "@aws-sdk/smithy-client";
*
* export interface NoSuchResource extends __SmithyException, $MetadataBearer {
Expand All @@ -138,7 +133,7 @@ private void renderNonErrorStructure() {
* }
*
* export namespace NoSuchResource {
* export const isa = (o: any): o is NoSuchResource => __isa(o, "NoSuchResource");
* export const filterSensitiveLog = (obj: NoSuchResource): any => ({...obj});
* }
* }</pre>
*/
Expand Down Expand Up @@ -169,7 +164,6 @@ private void renderErrorStructure() {
}

private void renderStructureNamespace() {
writer.addImport("isa", "__isa", "@aws-sdk/smithy-client");
writer.addImport("SENSITIVE_STRING", "SENSITIVE_STRING", "@aws-sdk/smithy-client");
Symbol symbol = symbolProvider.toSymbol(shape);
writer.openBlock("export namespace $L {", "}", symbol.getName(), () -> {
Expand All @@ -182,9 +176,6 @@ private void renderStructureNamespace() {
structuredMemberWriter.writeFilterSensitiveLog(writer, objectParam);
}
);
writer.write("export const isa = (o: any): o is $L => __isa(o, $S);",
symbol.getName(), shape.getId().getName()
);
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,39 +59,42 @@
* | Attacker.$UnknownMember;
*
* export namespace Attacker {
* export const ID = "smithy.example#Attacker";
* interface $Base {
* __type?: "Attacker",
* }
* export interface LionMember extends $Base {
*
* export interface LionMember {
* lion: Lion;
* tiger?: never;
* bear?: never;
* $unknown?: never;
* }
* export interface TigerMember extends $Base {
*
* export interface TigerMember {
* lion?: never;
* tiger?: Tiger;
* bear?: never;
* $unknown?: never;
* }
* export interface BearMember extends $Base {
*
* export interface BearMember {
* lion?: never;
* tiger?: never;
* bear: Bear;
* $unknown: never;
* }
* export interface $UnknownMember extends $Base {
*
* export interface $UnknownMember {
* lion?: never;
* tiger?: never;
* bear?: never;
* $unknown: [string, any];
* }
*
* export interface Visitor<T> {
* lion: (value: Lion) => T;
* tiger: (value: Tiger) => T;
* bear: (value: Bear) => T;
* _: (name: string, value: any) => T;
* }
*
* export const visit = <T>(
* value: Attacker,
* visitor: Visitor<T>
Expand All @@ -101,6 +104,7 @@
* if (value.bear !== undefined) return visitor.bear(value.bear);
* return visitor._(value.$unknown[0], value.$unknown[1]);
* }
*
* export const filterSensitiveLog = (obj: Attacker) => {
* if (obj.lion !== undefined)
* return { lion: Lion.filterSensitiveLog(obj.lion) };
Expand Down Expand Up @@ -163,15 +167,12 @@ public void run() {
}

private void writeUnionMemberInterfaces() {
writer.openBlock("interface $$Base {", "}", () -> {
writer.write("__type?: $S;", shape.getId().getName());
});
writer.write("");

for (MemberShape member : shape.getAllMembers().values()) {
String name = variantMap.get(member.getMemberName());
writer.writeMemberDocs(model, member);
writer.openBlock("export interface $L extends $$Base {", "}", name, () -> {
writer.openBlock("export interface $L {", "}", name, () -> {
for (MemberShape variantMember : shape.getAllMembers().values()) {
if (variantMember.getMemberName().equals(member.getMemberName())) {
writer.write("$L: $T;", symbolProvider.toMemberName(variantMember),
Expand All @@ -186,7 +187,7 @@ private void writeUnionMemberInterfaces() {
}

// Write out the unknown variant.
writer.openBlock("export interface $$UnknownMember extends $$Base {", "}", () -> {
writer.openBlock("export interface $$UnknownMember {", "}", () -> {
for (MemberShape member : shape.getAllMembers().values()) {
writer.write("$L?: never;", symbolProvider.toMemberName(member));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,6 @@ protected Void getDefault(Shape shape) {
*
* <pre>{@code
* let contents: any = {
* __type: "Field",
* fooValue: undefined,
* barValue: undefined,
* };
Expand Down Expand Up @@ -479,7 +478,6 @@ public final Void setShape(SetShape shape) {
* context: SerdeContext
* ): Field => {
* let field: any = {
* __type: "Field",
* fooValue: undefined,
* barValue: undefined,
* };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -845,7 +845,6 @@ private void generateOperationDeserializer(

// Only set a type and the members if we have output.
operation.getOutput().ifPresent(outputId -> {
writer.write("__type: $S,", outputId.getName());
// Set all the members to undefined to meet type constraints.
StructureShape target = model.expectShape(outputId).asStructureShape().get();
new TreeMap<>(target.getAllMembers())
Expand Down Expand Up @@ -1141,11 +1140,7 @@ private void generateEventDeserializer(GenerationContext context, StructureShape
if (event.hasTrait(ErrorTrait.class)) {
generateErrorEventDeserializer(context, event);
} else {
writer.openBlock("let contents: $L = {", "} as any;", symbol.getName(), () -> {
if (!event.getAllMembers().values().isEmpty()) {
writer.write("__type: $S,", event.getId().getName());
}
});
writer.write("let contents: $L = {} as any;", symbol.getName());
readEventHeaders(context, event);
readEventBody(context, event);
writer.write("return contents;");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,6 @@ private void generateOperationDeserializer(GenerationContext context, OperationS
writer.openBlock("const response: $T = {", "};", outputType, () -> {
writer.write("$$metadata: deserializeMetadata(output),");
operation.getOutput().ifPresent(outputId -> {
writer.write("__type: $S,", outputId.getName());
writer.write("...contents,");
});
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ const compareParts = (expectedParts: comparableParts, generatedParts: comparable

/**
* Compares all types for equivalent contents, doing nested
* equality checks based on non-'__type', non-`$$metadata`
* equality checks based on non-`$$metadata`
* properties that have defined values.
*/
const equivalentContents = (expected: any, generated: any): boolean => {
Expand All @@ -109,8 +109,6 @@ const equivalentContents = (expected: any, generated: any): boolean => {
// If a test fails with an issue in the below 6 lines, it's likely
// due to an issue in the nestedness or existence of the property
// being compared.
delete localExpected['__type'];
delete generated['__type'];
delete localExpected['$$metadata'];
delete generated['$$metadata'];
Object.keys(localExpected).forEach(key => localExpected[key] === undefined && delete localExpected[key])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,6 @@ public void generatesServiceClients() {
Assertions.assertTrue(manifest.hasFile("models/index.ts"));
assertThat(manifest.getFileString("models/index.ts").get(),
containsString("export interface Bar {\n" +
" __type?: \"Bar\";\n" +
" baz: string | undefined;\n" +
"}"));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -480,11 +480,8 @@ private String testStructureCodegen(String file, String expectedType) {
private void testErrorStructureCodegen(String file, String expectedType) {
String contents = testStructureCodegen(file, expectedType);

assertThat(contents, containsString("as __isa"));
assertThat(contents, containsString("as __SmithyException"));
assertThat(contents, containsString("namespace Err {"));
assertThat(contents, containsString(" export const isa = (o: any): o is Err => "
+ "__isa(o, \"Err\");\n"));
}

@Test
Expand All @@ -498,13 +495,9 @@ public void generatesNonErrorStructures() {
new StructureGenerator(model, TypeScriptCodegenPlugin.createSymbolProvider(model), writer, struct).run();
String output = writer.toString();

assertThat(output, containsString("as __isa"));
assertThat(output, containsString("export interface Bar {"));
assertThat(output, containsString("__type?: \"Bar\";"));
assertThat(output, containsString("foo?: string;"));
assertThat(output, containsString("export namespace Bar {"));
assertThat(output, containsString(
"export const isa = (o: any): o is Bar => __isa(o, \"Bar\");"));
}

private StructureShape createNonErrorStructure() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,29 +47,29 @@ public void generatesTaggedUnions() {
assertThat(output, containsString("export namespace Example {"));

// It generates an unknown variant
assertThat(output, containsString("export interface $UnknownMember extends $Base {\n"
assertThat(output, containsString("export interface $UnknownMember {\n"
+ " A?: never;\n"
+ " B?: never;\n"
+ " C?: never;\n"
+ " $unknown: [string, any];\n"
+ " }"));

// It generates a variant for each member.
assertThat(output, containsString("export interface AMember extends $Base {\n"
assertThat(output, containsString("export interface AMember {\n"
+ " A: string;\n"
+ " B?: never;\n"
+ " C?: never;\n"
+ " $unknown?: never;\n"
+ " }"));

assertThat(output, containsString("export interface BMember extends $Base {\n"
assertThat(output, containsString("export interface BMember {\n"
+ " A?: never;\n"
+ " B: number;\n"
+ " C?: never;\n"
+ " $unknown?: never;\n"
+ " }"));

assertThat(output, containsString("export interface CMember extends $Base {\n"
assertThat(output, containsString("export interface CMember {\n"
+ " A?: never;\n"
+ " B?: never;\n"
+ " C: boolean;\n"
Expand Down