18
18
import static software .amazon .smithy .typescript .codegen .CodegenUtils .getBlobStreamingMembers ;
19
19
import static software .amazon .smithy .typescript .codegen .CodegenUtils .writeInlineStreamingMemberType ;
20
20
21
- import java .util .Collection ;
22
21
import java .util .List ;
23
22
import java .util .stream .Collectors ;
24
23
import software .amazon .smithy .codegen .core .Symbol ;
@@ -140,6 +139,40 @@ private void renderNonErrorStructure() {
140
139
renderStructureNamespace (config , includeValidation );
141
140
}
142
141
142
+ private void renderStructureNamespace (StructuredMemberWriter structuredMemberWriter , boolean includeValidation ) {
143
+ Symbol symbol = symbolProvider .toSymbol (shape );
144
+ writer .openBlock ("export namespace $L {" , "}" , symbol .getName (), () -> {
145
+ String objectParam = "obj" ;
146
+ writer .writeDocs ("@internal" );
147
+ writer .openBlock ("export const filterSensitiveLog = ($L: $L): any => ({" , "})" ,
148
+ objectParam , symbol .getName (),
149
+ () -> {
150
+ structuredMemberWriter .writeFilterSensitiveLog (writer , objectParam );
151
+ }
152
+ );
153
+
154
+ if (!includeValidation ) {
155
+ return ;
156
+ }
157
+
158
+ structuredMemberWriter .writeMemberValidatorCache (writer , "memberValidators" );
159
+
160
+ writer .addImport ("ValidationFailure" , "__ValidationFailure" , "@aws-smithy/server-common" );
161
+ writer .writeDocs ("@internal" );
162
+ List <MemberShape > blobStreamingMembers = getBlobStreamingMembers (model , shape );
163
+ writer .writeInline ("export const validate = ($L: " , objectParam );
164
+ if (blobStreamingMembers .isEmpty ()) {
165
+ writer .writeInline ("$L" , symbol .getName ());
166
+ } else {
167
+ writeInlineStreamingMemberType (writer , symbol , blobStreamingMembers .get (0 ));
168
+ }
169
+ writer .openBlock (", path: string = \" \" ): __ValidationFailure[] => {" , "}" , () -> {
170
+ structuredMemberWriter .writeMemberValidatorFactory (writer , "memberValidators" );
171
+ structuredMemberWriter .writeValidateMethodContents (writer , objectParam );
172
+ });
173
+ });
174
+ }
175
+
143
176
/**
144
177
* Error structures generate interfaces that extend from SmithyException
145
178
* and add the appropriate fault property.
@@ -159,24 +192,22 @@ private void renderNonErrorStructure() {
159
192
* <p>The following TypeScript is generated:
160
193
*
161
194
* <pre>{@code
162
- * import { ServiceException as __ServiceException } from "@aws-sdk/smithy-client";
163
- * import { ResponseMetadata as __ResponseMetadata } from "@aws-sdk/smithy-client";
195
+ * import { ServiceException as __BaseException } from "@aws-sdk/smithy-client";
196
+ * import { ExceptionOptionType as __ExceptionOptionType } from "@aws-sdk/smithy-client";
164
197
*
165
- * export interface NoSuchResource extends __ServiceException {
198
+ * export interface NoSuchResource extends __BaseException {
166
199
* name: "NoSuchResource";
167
200
* $fault: "client";
168
201
* resourceType: string | undefined;
169
- * }
170
- *
171
- * export class NoSuchResource extends __ServiceException {
172
- * constructor(responseMetadata: __ResponseMetadata, deserialized: any) {
202
+ * // @internal
203
+ * constructor(opts: __ExceptionOptionType<NoSuchResource, __BaseException>) {
173
204
* super({
174
205
* name: "NoSuchResource",
175
206
* $fault: "client",
176
- * $metadata: responseMetadata,
207
+ * ...opts
177
208
* });
178
209
* Object.setPrototypeOf(this, NoSuchResource.prototype);
179
- * Object.assign( this, { ...deserialized }) ;
210
+ * this.resourceType = opts.resourceType ;
180
211
* }
181
212
* }
182
213
* }</pre>
@@ -185,74 +216,21 @@ private void renderErrorStructure() {
185
216
ErrorTrait errorTrait = shape .getTrait (ErrorTrait .class ).orElseThrow (IllegalStateException ::new );
186
217
Symbol symbol = symbolProvider .toSymbol (shape );
187
218
writer .writeShapeDocs (shape );
188
-
189
- writer .addImport ("ResponseMetadata" , "__ResponseMetadata" , "@aws-sdk/types" );
190
- writer .addImport ("ServiceException" , "__ServiceException" , "@aws-sdk/smithy-client" );
191
-
192
- writer .openBlock ("export interface $L extends __ServiceException {" , symbol .getName ());
193
- writer .write ("name: $S;" , shape .getId ().getName ());
194
- writer .write ("$$fault: $S;" , errorTrait .getValue ());
195
- HttpProtocolGeneratorUtils .writeRetryableTrait (writer , shape , ";" );
196
- Collection <MemberShape > allMembers = shape .getAllMembers ().values ().stream ().filter ((memberShape ) -> {
197
- // since any error interface must extend from JavaScript Error interface, message member is already required
198
- // in the JavaScript Error interface
199
- String memberName = memberShape .getMemberName ();
200
- return !memberName .equals ("message" );
201
- }).collect (Collectors .toList ());
202
- StructuredMemberWriter structuredMemberWriter = new StructuredMemberWriter (model , symbolProvider , allMembers );
219
+ boolean isServerSdk = this .includeValidation ;
220
+ writer .openBlock ("export class $L extends $L {" , symbol .getName (), "__BaseException" );
221
+ writer .write ("readonly name: $1S = $1S;" , shape .getId ().getName ());
222
+ writer .write ("readonly $$fault: $1S = $1S;" , errorTrait .getValue ());
223
+ if (!isServerSdk ) {
224
+ HttpProtocolGeneratorUtils .writeRetryableTrait (writer , shape , ";" );
225
+ }
226
+ StructuredMemberWriter structuredMemberWriter = new StructuredMemberWriter (model , symbolProvider ,
227
+ shape .getAllMembers ().values ());
228
+ // since any error interface must extend from JavaScript Error interface, message member is already
229
+ // required in the JavaScript Error interface
230
+ structuredMemberWriter .skipMembers .add ("message" );
203
231
structuredMemberWriter .writeMembers (writer , shape );
204
- writer .closeBlock ("}" ); // interface
205
- writer .write ("" );
206
- renderErrorStructureClass (symbol , errorTrait );
232
+ structuredMemberWriter .writeErrorConstructor (writer , shape , isServerSdk );
233
+ writer .closeBlock ("}" );
207
234
writer .write ("" );
208
235
}
209
-
210
- private void renderErrorStructureClass (Symbol symbol , ErrorTrait errorTrait ) {
211
- writer .openBlock ("export class $L extends __ServiceException {" , symbol .getName ());
212
- writer .addImport ("ResponseMetadata" , "__ResponseMetadata" , "@aws-sdk/types" );
213
- writer .openBlock ("constructor(responseMetadata: __ResponseMetadata, deserialized: any) {" , "}" , () -> {
214
- writer .openBlock ("super({" , "});" , () -> {
215
- writer .write ("name: $S," , shape .getId ().getName ());
216
- writer .write ("$$fault: $S," , errorTrait .getValue ());
217
- writer .write ("$$metadata: responseMetadata," );
218
- });
219
- writer .write ("Object.setPrototypeOf(this, $L.prototype);" , symbol .getName ());
220
- writer .write ("Object.assign(this, { ...deserialized });" );
221
- });
222
- writer .closeBlock ("}" ); // class
223
- }
224
-
225
- private void renderStructureNamespace (StructuredMemberWriter structuredMemberWriter , boolean includeValidation ) {
226
- Symbol symbol = symbolProvider .toSymbol (shape );
227
- writer .openBlock ("export namespace $L {" , "}" , symbol .getName (), () -> {
228
- String objectParam = "obj" ;
229
- writer .writeDocs ("@internal" );
230
- writer .openBlock ("export const filterSensitiveLog = ($L: $L): any => ({" , "})" ,
231
- objectParam , symbol .getName (),
232
- () -> {
233
- structuredMemberWriter .writeFilterSensitiveLog (writer , objectParam );
234
- }
235
- );
236
-
237
- if (!includeValidation ) {
238
- return ;
239
- }
240
-
241
- structuredMemberWriter .writeMemberValidatorCache (writer , "memberValidators" );
242
-
243
- writer .addImport ("ValidationFailure" , "__ValidationFailure" , "@aws-smithy/server-common" );
244
- writer .writeDocs ("@internal" );
245
- List <MemberShape > blobStreamingMembers = getBlobStreamingMembers (model , shape );
246
- writer .writeInline ("export const validate = ($L: " , objectParam );
247
- if (blobStreamingMembers .isEmpty ()) {
248
- writer .writeInline ("$L" , symbol .getName ());
249
- } else {
250
- writeInlineStreamingMemberType (writer , symbol , blobStreamingMembers .get (0 ));
251
- }
252
- writer .openBlock (", path: string = \" \" ): __ValidationFailure[] => {" , "}" , () -> {
253
- structuredMemberWriter .writeMemberValidatorFactory (writer , "memberValidators" );
254
- structuredMemberWriter .writeValidateMethodContents (writer , objectParam );
255
- });
256
- });
257
- }
258
236
}
0 commit comments