29
29
import software .amazon .smithy .model .traits .ErrorTrait ;
30
30
import software .amazon .smithy .typescript .codegen .TypeScriptSettings .RequiredMemberMode ;
31
31
import software .amazon .smithy .typescript .codegen .integration .HttpProtocolGeneratorUtils ;
32
+ import software .amazon .smithy .typescript .codegen .validation .SensitiveDataFinder ;
32
33
import software .amazon .smithy .utils .SmithyInternalApi ;
33
34
34
35
/**
35
36
* Generates normal structures and error structures.
36
37
*
37
38
* Renders structures as interfaces.
38
39
*
39
- * <p>A namespace is created with the same name as the structure to
40
+ * <p>
41
+ * A namespace is created with the same name as the structure to
40
42
* provide helper functionality for checking if a given value is
41
43
* known to be of the same type as the structure. This will be
42
44
* even more useful if/when inheritance is added to Smithy.
43
45
*
44
- * <p>Note that the {@code required} trait on structures is used to
46
+ * <p>
47
+ * Note that the {@code required} trait on structures is used to
45
48
* determine whether or not a generated TypeScript interface uses
46
49
* required members. This is typically not recommended in other languages
47
50
* since it's documented as backward-compatible for a model to migrate a
55
58
* deserializers will need to set previously required properties to
56
59
* undefined too.
57
60
*
58
- * <p>The generator will explicitly state that a required property can
61
+ * <p>
62
+ * The generator will explicitly state that a required property can
59
63
* be set to {@code undefined}. This makes it clear that undefined checks
60
64
* need to be made when using {@code --strictNullChecks}, but has no
61
65
* effect otherwise.
@@ -69,22 +73,23 @@ final class StructureGenerator implements Runnable {
69
73
private final StructureShape shape ;
70
74
private final boolean includeValidation ;
71
75
private final RequiredMemberMode requiredMemberMode ;
76
+ private final SensitiveDataFinder sensitiveDataFinder = new SensitiveDataFinder ();
72
77
73
78
/**
74
79
* sets 'includeValidation' to 'false' and requiredMemberMode
75
80
* to {@link RequiredMemberMode#NULLABLE}.
76
81
*/
77
82
StructureGenerator (Model model , SymbolProvider symbolProvider , TypeScriptWriter writer , StructureShape shape ) {
78
83
this (model , symbolProvider , writer , shape , false ,
79
- RequiredMemberMode .NULLABLE );
84
+ RequiredMemberMode .NULLABLE );
80
85
}
81
86
82
87
StructureGenerator (Model model ,
83
- SymbolProvider symbolProvider ,
84
- TypeScriptWriter writer ,
85
- StructureShape shape ,
86
- boolean includeValidation ,
87
- RequiredMemberMode requiredMemberMode ) {
88
+ SymbolProvider symbolProvider ,
89
+ TypeScriptWriter writer ,
90
+ StructureShape shape ,
91
+ boolean includeValidation ,
92
+ RequiredMemberMode requiredMemberMode ) {
88
93
this .model = model ;
89
94
this .symbolProvider = symbolProvider ;
90
95
this .writer = writer ;
@@ -105,20 +110,24 @@ public void run() {
105
110
/**
106
111
* Renders a normal, non-error structure.
107
112
*
108
- * <p>For example, given the following Smithy model:
113
+ * <p>
114
+ * For example, given the following Smithy model:
109
115
*
110
- * <pre>{@code
116
+ * <pre>
117
+ * {@code
111
118
* namespace smithy.example
112
119
*
113
120
* structure Person {
114
- * @ required
121
+ * @ required
115
122
* name: String,
116
- * @ range(min: 1)
123
+ * @ range(min: 1)
117
124
* age: Integer,
118
125
* }
119
- * }</pre>
126
+ * }
127
+ * </pre>
120
128
*
121
- * <p>The following TypeScript is rendered:
129
+ * <p>
130
+ * The following TypeScript is rendered:
122
131
*
123
132
* <pre>{@code
124
133
* export interface Person {
@@ -129,7 +138,8 @@ public void run() {
129
138
* export const PersonFilterSensitiveLog = (obj: Person): any => ({...obj});
130
139
* }</pre>
131
140
*
132
- * <p>If validation is enabled, it generates the following:
141
+ * <p>
142
+ * If validation is enabled, it generates the following:
133
143
*
134
144
* <pre>{@code
135
145
* export interface Person {
@@ -174,15 +184,17 @@ private void renderNonErrorStructure() {
174
184
private void renderStructureNamespace (StructuredMemberWriter structuredMemberWriter , boolean includeValidation ) {
175
185
Symbol symbol = symbolProvider .toSymbol (shape );
176
186
String objectParam = "obj" ;
177
- writer .writeDocs ("@internal" );
178
- writer .openBlock ("export const $LFilterSensitiveLog = ($L: $L): any => ({" , "})" ,
179
- symbol .getName (),
180
- objectParam ,
181
- symbol .getName (),
182
- () -> {
183
- structuredMemberWriter .writeFilterSensitiveLog (writer , objectParam );
184
- }
185
- );
187
+
188
+ if (sensitiveDataFinder .findsSensitiveData (shape , model )) {
189
+ writer .writeDocs ("@internal" );
190
+ writer .openBlock ("export const $LFilterSensitiveLog = ($L: $L): any => ({" , "})" ,
191
+ symbol .getName (),
192
+ objectParam ,
193
+ symbol .getName (),
194
+ () -> {
195
+ structuredMemberWriter .writeFilterSensitiveLog (writer , objectParam );
196
+ });
197
+ }
186
198
187
199
if (!includeValidation ) {
188
200
return ;
@@ -212,19 +224,23 @@ private void renderStructureNamespace(StructuredMemberWriter structuredMemberWri
212
224
* (ServiceException in case of server SDK), and add the appropriate fault
213
225
* property.
214
226
*
215
- * <p>Given the following Smithy structure:
227
+ * <p>
228
+ * Given the following Smithy structure:
216
229
*
217
- * <pre>{@code
230
+ * <pre>
231
+ * {@code
218
232
* namespace smithy.example
219
233
*
220
- * @ error("client")
234
+ * @ error("client")
221
235
* structure NoSuchResource {
222
- * @ required
236
+ * @ required
223
237
* resourceType: String
224
238
* }
225
- * }</pre>
239
+ * }
240
+ * </pre>
226
241
*
227
- * <p>The following TypeScript is generated:
242
+ * <p>
243
+ * The following TypeScript is generated:
228
244
*
229
245
* <pre>{@code
230
246
* import { ExceptionOptionType as __ExceptionOptionType } from "@aws-sdk/smithy-client";
@@ -262,7 +278,8 @@ private void renderErrorStructure() {
262
278
}
263
279
StructuredMemberWriter structuredMemberWriter = new StructuredMemberWriter (model , symbolProvider ,
264
280
shape .getAllMembers ().values (), this .requiredMemberMode );
265
- // since any error interface must extend from JavaScript Error interface, message member is already
281
+ // since any error interface must extend from JavaScript Error interface,
282
+ // message member is already
266
283
// required in the JavaScript Error interface
267
284
structuredMemberWriter .skipMembers .add ("message" );
268
285
structuredMemberWriter .writeMembers (writer , shape );
0 commit comments