Skip to content

Commit 91b9756

Browse files
committed
fix(typescript-fetch): ResponseError prototype chain
1 parent d6c2905 commit 91b9756

2 files changed

Lines changed: 32 additions & 1 deletion

File tree

  • modules/openapi-generator/src/main/resources/typescript-fetch
  • samples/client/petstore/typescript-fetch/tests/default/test

modules/openapi-generator/src/main/resources/typescript-fetch/runtime.mustache

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,20 +251,44 @@ export class ResponseError extends Error {
251251
override name: "ResponseError" = "ResponseError";
252252
constructor(public response: Response, msg?: string) {
253253
super(msg);
254+
255+
// restore prototype chain
256+
const actualProto = new.target.prototype;
257+
if (Object.setPrototypeOf) {
258+
Object.setPrototypeOf(this, actualProto);
259+
} else {
260+
this.__proto__ = actualProto;
261+
}
254262
}
255263
}
256264

257265
export class FetchError extends Error {
258266
override name: "FetchError" = "FetchError";
259267
constructor(public cause: Error, msg?: string) {
260268
super(msg);
269+
270+
// restore prototype chain
271+
const actualProto = new.target.prototype;
272+
if (Object.setPrototypeOf) {
273+
Object.setPrototypeOf(this, actualProto);
274+
} else {
275+
this.__proto__ = actualProto;
276+
}
261277
}
262278
}
263279

264280
export class RequiredError extends Error {
265281
override name: "RequiredError" = "RequiredError";
266282
constructor(public field: string, msg?: string) {
267283
super(msg);
284+
285+
// restore prototype chain
286+
const actualProto = new.target.prototype;
287+
if (Object.setPrototypeOf) {
288+
Object.setPrototypeOf(this, actualProto);
289+
} else {
290+
this.__proto__ = actualProto;
291+
}
268292
}
269293
}
270294

samples/client/petstore/typescript-fetch/tests/default/test/PetApi.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { expect } from 'chai';
2-
import { PetApi, Pet, PetStatusEnum, Category } from '@swagger/typescript-fetch-petstore';
2+
import { PetApi, Pet, PetStatusEnum, Category, ResponseError } from '@swagger/typescript-fetch-petstore';
33
import { config } from '../configuration';
44

55
describe('PetApi', () => {
@@ -49,6 +49,13 @@ describe('PetApi', () => {
4949
});
5050
});
5151

52+
it('instanceof ResponseError not Error', () => {
53+
const response = new Response();
54+
const err = new ResponseError(response, 'test error message');
55+
expect(err instanceof ResponseError).to.be.true;
56+
expect(err instanceof Error).to.be.false;
57+
});
58+
5259
});
5360
}
5461

0 commit comments

Comments
 (0)