diff --git a/.changeset/empty-rooms-attack.md b/.changeset/empty-rooms-attack.md new file mode 100644 index 000000000..0f04b3e57 --- /dev/null +++ b/.changeset/empty-rooms-attack.md @@ -0,0 +1,5 @@ +--- +"openapi-fetch": patch +--- + +Fix Request parameter being ignored by client methods diff --git a/packages/openapi-fetch/src/index.js b/packages/openapi-fetch/src/index.js index 4b226c870..261f5b147 100644 --- a/packages/openapi-fetch/src/index.js +++ b/packages/openapi-fetch/src/index.js @@ -109,7 +109,7 @@ export default function createClient(clientOptions) { let id; let options; - let request = new CustomRequest( + let request = new Request( createFinalURL(schemaPath, { baseUrl: finalBaseUrl, params, querySerializer }), requestInit, ); @@ -143,7 +143,7 @@ export default function createClient(clientOptions) { id, }); if (result) { - if (result instanceof CustomRequest) { + if (result instanceof Request) { request = result; } else if (result instanceof Response) { response = result; diff --git a/packages/openapi-fetch/test/common/request.test.ts b/packages/openapi-fetch/test/common/request.test.ts index f5fb7c309..6648d5532 100644 --- a/packages/openapi-fetch/test/common/request.test.ts +++ b/packages/openapi-fetch/test/common/request.test.ts @@ -296,7 +296,7 @@ describe("request", () => { }); test("uses provided Request class", async () => { - // santity check to make sure the profided fetch function is actually called + // sanity check to make sure the provided fetch function is actually called expect.assertions(1); class SpecialRequestImplementation extends Request {} @@ -316,6 +316,30 @@ describe("request", () => { await client.GET("/resources"); }); + describe("custom Request", () => { + const ALL_METHODS = [["GET"], ["HEAD"], ["PUT"], ["POST"], ["DELETE"], ["OPTIONS"], ["PATCH"]] as const; + + test.each(ALL_METHODS)("uses custom Request class - %s", async (method) => { + // sanity check to make sure the provided fetch function is actually called + expect.assertions(1); + + class SpecialRequestImplementation extends Request {} + + const customFetch = async (input: Request) => { + // make sure that the request is actually an instance of the custom request we provided + expect(input).instanceOf(SpecialRequestImplementation); + return Promise.resolve(Response.json({ hello: "world" })); + }; + + const client = createClient({ + baseUrl: "https://fakeurl.example", + fetch: customFetch, + }); + + await (client as any)[method]("/resources", { Request: SpecialRequestImplementation }); + }); + }); + test("can attach custom properties to request", async () => { function createCustomFetch(data: any) { const response = {