Skip to content

Commit 0e8df50

Browse files
committed
filterSensitiveLog for MapShape inside Structure
1 parent 0e0e209 commit 0e8df50

File tree

1 file changed

+33
-2
lines changed

1 file changed

+33
-2
lines changed

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

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import software.amazon.smithy.model.Model;
2323
import software.amazon.smithy.model.shapes.CollectionShape;
2424
import software.amazon.smithy.model.shapes.ListShape;
25+
import software.amazon.smithy.model.shapes.MapShape;
2526
import software.amazon.smithy.model.shapes.MemberShape;
2627
import software.amazon.smithy.model.shapes.SetShape;
2728
import software.amazon.smithy.model.shapes.Shape;
@@ -72,7 +73,7 @@ void writeMembers(TypeScriptWriter writer, Shape shape) {
7273
}
7374

7475
/**
75-
* Recursively writes filterSensitiveLog for list members
76+
* Recursively writes filterSensitiveLog for arrays (ListShape|SetShape)
7677
*/
7778
void writeFilterSensitiveLogForArray(TypeScriptWriter writer, MemberShape arrayMember) {
7879
Shape memberShape = model.expectShape(arrayMember.getTarget());
@@ -93,6 +94,24 @@ void writeFilterSensitiveLogForArray(TypeScriptWriter writer, MemberShape arrayM
9394
}
9495
}
9596

97+
/**
98+
* Recursively writes filterSensitiveLog for MapShape
99+
*/
100+
void writeFilterSensitiveLogForMap(TypeScriptWriter writer, MemberShape mapMember) {
101+
Shape memberShape = model.expectShape(mapMember.getTarget());
102+
if (memberShape instanceof StructureShape) {
103+
// Call filterSensitiveLog on Structure in reducer
104+
writer.openBlock("(acc: any, [key, value]: [string, ${T}]) => {", "}, {}",
105+
symbolProvider.toSymbol(mapMember),
106+
() -> {
107+
writer.write("acc[key] = ${T}.filterSensitiveLog(value);",
108+
symbolProvider.toSymbol(mapMember));
109+
writer.write("return acc;");
110+
}
111+
);
112+
}
113+
}
114+
96115
void writeFilterSensitiveLog(TypeScriptWriter writer, Shape shape) {
97116
writer.write("...obj,");
98117
for (MemberShape member : members) {
@@ -113,7 +132,19 @@ void writeFilterSensitiveLog(TypeScriptWriter writer, Shape shape) {
113132
memberName, memberName, memberName,
114133
() -> {
115134
writeFilterSensitiveLogForArray(writer, arrayMember);
116-
});
135+
}
136+
);
137+
}
138+
} else if (memberShape instanceof MapShape) {
139+
MemberShape mapMember = ((MapShape) memberShape).getValue();
140+
if (!(model.expectShape(mapMember.getTarget()) instanceof SimpleShape)) {
141+
// Iterate over Object entries, and call reduce to repopulate map
142+
writer.openBlock("...(obj.${L} && { ${L}: Object.entries(obj.${L}).reduce(", ")}),",
143+
memberName, memberName, memberName,
144+
() -> {
145+
writeFilterSensitiveLogForMap(writer, mapMember);
146+
}
147+
);
117148
}
118149
}
119150
}

0 commit comments

Comments
 (0)