22
22
import software .amazon .smithy .model .Model ;
23
23
import software .amazon .smithy .model .shapes .CollectionShape ;
24
24
import software .amazon .smithy .model .shapes .ListShape ;
25
+ import software .amazon .smithy .model .shapes .MapShape ;
25
26
import software .amazon .smithy .model .shapes .MemberShape ;
26
27
import software .amazon .smithy .model .shapes .SetShape ;
27
28
import software .amazon .smithy .model .shapes .Shape ;
@@ -72,7 +73,7 @@ void writeMembers(TypeScriptWriter writer, Shape shape) {
72
73
}
73
74
74
75
/**
75
- * Recursively writes filterSensitiveLog for list members
76
+ * Recursively writes filterSensitiveLog for arrays (ListShape|SetShape)
76
77
*/
77
78
void writeFilterSensitiveLogForArray (TypeScriptWriter writer , MemberShape arrayMember ) {
78
79
Shape memberShape = model .expectShape (arrayMember .getTarget ());
@@ -93,6 +94,24 @@ void writeFilterSensitiveLogForArray(TypeScriptWriter writer, MemberShape arrayM
93
94
}
94
95
}
95
96
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
+
96
115
void writeFilterSensitiveLog (TypeScriptWriter writer , Shape shape ) {
97
116
writer .write ("...obj," );
98
117
for (MemberShape member : members ) {
@@ -113,7 +132,19 @@ void writeFilterSensitiveLog(TypeScriptWriter writer, Shape shape) {
113
132
memberName , memberName , memberName ,
114
133
() -> {
115
134
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
+ );
117
148
}
118
149
}
119
150
}
0 commit comments