Skip to content

Commit dc2907a

Browse files
aeb-siamacjohnny
aeb-sia
authored andcommitted
typescript-node: Use HttpError class when rejecting promises (#3876)
* Use HttpError class when rejecting promises Fixes #3872 * Update samples * Test the new code in client.ts
1 parent 3242949 commit dc2907a

File tree

11 files changed

+88
-42
lines changed

11 files changed

+88
-42
lines changed

modules/openapi-generator/src/main/resources/typescript-node/api-all.mustache

+7
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,12 @@ import { {{ classname }} } from './{{ classFilename }}';
88
export * from './{{ classFilename }}Interface'
99
{{/withInterfaces}}
1010
{{/apis}}
11+
import http = require('http');
12+
export class HttpError extends Error {
13+
constructor (public response: http.{{#supportsES6}}IncomingMessage{{/supportsES6}}{{^supportsES6}}ClientResponse{{/supportsES6}}, public body: any, public statusCode?: number) {
14+
super('HTTP request failed');
15+
this.name = 'HttpError';
16+
}
17+
}
1118
export const APIS = [{{#apis}}{{#operations}}{{ classname }}{{/operations}}{{^-last}}, {{/-last}}{{/apis}}];
1219
{{/apiInfo}}

modules/openapi-generator/src/main/resources/typescript-node/api-single.mustache

+3-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import { OAuth } from '../model/models';
2222
{{/authMethods}}
2323
{{/hasAuthMethods}}
2424

25+
import { HttpError } from './apis';
26+
2527
let defaultBasePath = '{{{basePath}}}';
2628

2729
// ===============================================
@@ -222,7 +224,7 @@ export class {{classname}} {
222224
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
223225
resolve({ response: response, body: body });
224226
} else {
225-
reject({ response: response, body: body });
227+
reject(new HttpError(response, body, response.statusCode));
226228
}
227229
}
228230
});

samples/client/petstore/typescript-node/default/api/apis.ts

+7
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,11 @@ export * from './storeApi';
44
import { StoreApi } from './storeApi';
55
export * from './userApi';
66
import { UserApi } from './userApi';
7+
import http = require('http');
8+
export class HttpError extends Error {
9+
constructor (public response: http.ClientResponse, public body: any, public statusCode?: number) {
10+
super('HTTP request failed');
11+
this.name = 'HttpError';
12+
}
13+
}
714
export const APIS = [PetApi, StoreApi, UserApi];

samples/client/petstore/typescript-node/default/api/petApi.ts

+10-8
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import { ObjectSerializer, Authentication, VoidAuth } from '../model/models';
2121
import { OAuth } from '../model/models';
2222
import { ApiKeyAuth } from '../model/models';
2323

24+
import { HttpError } from './apis';
25+
2426
let defaultBasePath = 'http://petstore.swagger.io/v2';
2527

2628
// ===============================================
@@ -129,7 +131,7 @@ export class PetApi {
129131
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
130132
resolve({ response: response, body: body });
131133
} else {
132-
reject({ response: response, body: body });
134+
reject(new HttpError(response, body, response.statusCode));
133135
}
134136
}
135137
});
@@ -188,7 +190,7 @@ export class PetApi {
188190
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
189191
resolve({ response: response, body: body });
190192
} else {
191-
reject({ response: response, body: body });
193+
reject(new HttpError(response, body, response.statusCode));
192194
}
193195
}
194196
});
@@ -249,7 +251,7 @@ export class PetApi {
249251
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
250252
resolve({ response: response, body: body });
251253
} else {
252-
reject({ response: response, body: body });
254+
reject(new HttpError(response, body, response.statusCode));
253255
}
254256
}
255257
});
@@ -310,7 +312,7 @@ export class PetApi {
310312
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
311313
resolve({ response: response, body: body });
312314
} else {
313-
reject({ response: response, body: body });
315+
reject(new HttpError(response, body, response.statusCode));
314316
}
315317
}
316318
});
@@ -368,7 +370,7 @@ export class PetApi {
368370
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
369371
resolve({ response: response, body: body });
370372
} else {
371-
reject({ response: response, body: body });
373+
reject(new HttpError(response, body, response.statusCode));
372374
}
373375
}
374376
});
@@ -425,7 +427,7 @@ export class PetApi {
425427
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
426428
resolve({ response: response, body: body });
427429
} else {
428-
reject({ response: response, body: body });
430+
reject(new HttpError(response, body, response.statusCode));
429431
}
430432
}
431433
});
@@ -492,7 +494,7 @@ export class PetApi {
492494
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
493495
resolve({ response: response, body: body });
494496
} else {
495-
reject({ response: response, body: body });
497+
reject(new HttpError(response, body, response.statusCode));
496498
}
497499
}
498500
});
@@ -561,7 +563,7 @@ export class PetApi {
561563
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
562564
resolve({ response: response, body: body });
563565
} else {
564-
reject({ response: response, body: body });
566+
reject(new HttpError(response, body, response.statusCode));
565567
}
566568
}
567569
});

samples/client/petstore/typescript-node/default/api/storeApi.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import { Order } from '../model/order';
1919
import { ObjectSerializer, Authentication, VoidAuth } from '../model/models';
2020
import { ApiKeyAuth } from '../model/models';
2121

22+
import { HttpError } from './apis';
23+
2224
let defaultBasePath = 'http://petstore.swagger.io/v2';
2325

2426
// ===============================================
@@ -120,7 +122,7 @@ export class StoreApi {
120122
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
121123
resolve({ response: response, body: body });
122124
} else {
123-
reject({ response: response, body: body });
125+
reject(new HttpError(response, body, response.statusCode));
124126
}
125127
}
126128
});
@@ -171,7 +173,7 @@ export class StoreApi {
171173
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
172174
resolve({ response: response, body: body });
173175
} else {
174-
reject({ response: response, body: body });
176+
reject(new HttpError(response, body, response.statusCode));
175177
}
176178
}
177179
});
@@ -227,7 +229,7 @@ export class StoreApi {
227229
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
228230
resolve({ response: response, body: body });
229231
} else {
230-
reject({ response: response, body: body });
232+
reject(new HttpError(response, body, response.statusCode));
231233
}
232234
}
233235
});
@@ -283,7 +285,7 @@ export class StoreApi {
283285
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
284286
resolve({ response: response, body: body });
285287
} else {
286-
reject({ response: response, body: body });
288+
reject(new HttpError(response, body, response.statusCode));
287289
}
288290
}
289291
});

samples/client/petstore/typescript-node/default/api/userApi.ts

+10-8
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import { User } from '../model/user';
1818

1919
import { ObjectSerializer, Authentication, VoidAuth } from '../model/models';
2020

21+
import { HttpError } from './apis';
22+
2123
let defaultBasePath = 'http://petstore.swagger.io/v2';
2224

2325
// ===============================================
@@ -117,7 +119,7 @@ export class UserApi {
117119
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
118120
resolve({ response: response, body: body });
119121
} else {
120-
reject({ response: response, body: body });
122+
reject(new HttpError(response, body, response.statusCode));
121123
}
122124
}
123125
});
@@ -172,7 +174,7 @@ export class UserApi {
172174
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
173175
resolve({ response: response, body: body });
174176
} else {
175-
reject({ response: response, body: body });
177+
reject(new HttpError(response, body, response.statusCode));
176178
}
177179
}
178180
});
@@ -227,7 +229,7 @@ export class UserApi {
227229
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
228230
resolve({ response: response, body: body });
229231
} else {
230-
reject({ response: response, body: body });
232+
reject(new HttpError(response, body, response.statusCode));
231233
}
232234
}
233235
});
@@ -282,7 +284,7 @@ export class UserApi {
282284
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
283285
resolve({ response: response, body: body });
284286
} else {
285-
reject({ response: response, body: body });
287+
reject(new HttpError(response, body, response.statusCode));
286288
}
287289
}
288290
});
@@ -338,7 +340,7 @@ export class UserApi {
338340
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
339341
resolve({ response: response, body: body });
340342
} else {
341-
reject({ response: response, body: body });
343+
reject(new HttpError(response, body, response.statusCode));
342344
}
343345
}
344346
});
@@ -407,7 +409,7 @@ export class UserApi {
407409
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
408410
resolve({ response: response, body: body });
409411
} else {
410-
reject({ response: response, body: body });
412+
reject(new HttpError(response, body, response.statusCode));
411413
}
412414
}
413415
});
@@ -455,7 +457,7 @@ export class UserApi {
455457
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
456458
resolve({ response: response, body: body });
457459
} else {
458-
reject({ response: response, body: body });
460+
reject(new HttpError(response, body, response.statusCode));
459461
}
460462
}
461463
});
@@ -517,7 +519,7 @@ export class UserApi {
517519
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
518520
resolve({ response: response, body: body });
519521
} else {
520-
reject({ response: response, body: body });
522+
reject(new HttpError(response, body, response.statusCode));
521523
}
522524
}
523525
});

samples/client/petstore/typescript-node/npm/api/apis.ts

+7
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,11 @@ export * from './storeApi';
44
import { StoreApi } from './storeApi';
55
export * from './userApi';
66
import { UserApi } from './userApi';
7+
import http = require('http');
8+
export class HttpError extends Error {
9+
constructor (public response: http.ClientResponse, public body: any, public statusCode?: number) {
10+
super('HTTP request failed');
11+
this.name = 'HttpError';
12+
}
13+
}
714
export const APIS = [PetApi, StoreApi, UserApi];

samples/client/petstore/typescript-node/npm/api/petApi.ts

+10-8
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import { ObjectSerializer, Authentication, VoidAuth } from '../model/models';
2121
import { OAuth } from '../model/models';
2222
import { ApiKeyAuth } from '../model/models';
2323

24+
import { HttpError } from './apis';
25+
2426
let defaultBasePath = 'http://petstore.swagger.io/v2';
2527

2628
// ===============================================
@@ -129,7 +131,7 @@ export class PetApi {
129131
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
130132
resolve({ response: response, body: body });
131133
} else {
132-
reject({ response: response, body: body });
134+
reject(new HttpError(response, body, response.statusCode));
133135
}
134136
}
135137
});
@@ -188,7 +190,7 @@ export class PetApi {
188190
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
189191
resolve({ response: response, body: body });
190192
} else {
191-
reject({ response: response, body: body });
193+
reject(new HttpError(response, body, response.statusCode));
192194
}
193195
}
194196
});
@@ -249,7 +251,7 @@ export class PetApi {
249251
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
250252
resolve({ response: response, body: body });
251253
} else {
252-
reject({ response: response, body: body });
254+
reject(new HttpError(response, body, response.statusCode));
253255
}
254256
}
255257
});
@@ -310,7 +312,7 @@ export class PetApi {
310312
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
311313
resolve({ response: response, body: body });
312314
} else {
313-
reject({ response: response, body: body });
315+
reject(new HttpError(response, body, response.statusCode));
314316
}
315317
}
316318
});
@@ -368,7 +370,7 @@ export class PetApi {
368370
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
369371
resolve({ response: response, body: body });
370372
} else {
371-
reject({ response: response, body: body });
373+
reject(new HttpError(response, body, response.statusCode));
372374
}
373375
}
374376
});
@@ -425,7 +427,7 @@ export class PetApi {
425427
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
426428
resolve({ response: response, body: body });
427429
} else {
428-
reject({ response: response, body: body });
430+
reject(new HttpError(response, body, response.statusCode));
429431
}
430432
}
431433
});
@@ -492,7 +494,7 @@ export class PetApi {
492494
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
493495
resolve({ response: response, body: body });
494496
} else {
495-
reject({ response: response, body: body });
497+
reject(new HttpError(response, body, response.statusCode));
496498
}
497499
}
498500
});
@@ -561,7 +563,7 @@ export class PetApi {
561563
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
562564
resolve({ response: response, body: body });
563565
} else {
564-
reject({ response: response, body: body });
566+
reject(new HttpError(response, body, response.statusCode));
565567
}
566568
}
567569
});

samples/client/petstore/typescript-node/npm/api/storeApi.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import { Order } from '../model/order';
1919
import { ObjectSerializer, Authentication, VoidAuth } from '../model/models';
2020
import { ApiKeyAuth } from '../model/models';
2121

22+
import { HttpError } from './apis';
23+
2224
let defaultBasePath = 'http://petstore.swagger.io/v2';
2325

2426
// ===============================================
@@ -120,7 +122,7 @@ export class StoreApi {
120122
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
121123
resolve({ response: response, body: body });
122124
} else {
123-
reject({ response: response, body: body });
125+
reject(new HttpError(response, body, response.statusCode));
124126
}
125127
}
126128
});
@@ -171,7 +173,7 @@ export class StoreApi {
171173
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
172174
resolve({ response: response, body: body });
173175
} else {
174-
reject({ response: response, body: body });
176+
reject(new HttpError(response, body, response.statusCode));
175177
}
176178
}
177179
});
@@ -227,7 +229,7 @@ export class StoreApi {
227229
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
228230
resolve({ response: response, body: body });
229231
} else {
230-
reject({ response: response, body: body });
232+
reject(new HttpError(response, body, response.statusCode));
231233
}
232234
}
233235
});
@@ -283,7 +285,7 @@ export class StoreApi {
283285
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
284286
resolve({ response: response, body: body });
285287
} else {
286-
reject({ response: response, body: body });
288+
reject(new HttpError(response, body, response.statusCode));
287289
}
288290
}
289291
});

0 commit comments

Comments
 (0)