From 339b178e7abcf0a525c2cb260e4b2572096d4ed9 Mon Sep 17 00:00:00 2001 From: petercsaki Date: Wed, 28 Feb 2024 11:36:38 +0000 Subject: [PATCH 1/3] NextJs options added. --- .../examples/nextjs/app/page.tsx | 4 +++ packages/openapi-fetch/src/index.d.ts | 5 +++- packages/openapi-fetch/src/index.js | 2 +- packages/openapi-fetch/test/index.test.ts | 25 +++++++++++++++++++ 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/packages/openapi-fetch/examples/nextjs/app/page.tsx b/packages/openapi-fetch/examples/nextjs/app/page.tsx index 74509faca..ae6869fae 100644 --- a/packages/openapi-fetch/examples/nextjs/app/page.tsx +++ b/packages/openapi-fetch/examples/nextjs/app/page.tsx @@ -6,6 +6,10 @@ async function getFact() { params: { query: { max_length: 500 }, }, + next: { + revalidate: 10, + tags: ["cat"], + } }); } diff --git a/packages/openapi-fetch/src/index.d.ts b/packages/openapi-fetch/src/index.d.ts index 5743cce33..7cc3149b3 100644 --- a/packages/openapi-fetch/src/index.d.ts +++ b/packages/openapi-fetch/src/index.d.ts @@ -108,7 +108,10 @@ export type RequestBodyOption = : { body: OperationRequestBodyContent }; export type FetchOptions = RequestOptions & - Omit; + Omit & NextJsFetchOptions; + +export type NextJsFetchOptions = + {next?: {revalidate?: false | 0 | number, tags?: string[]}}; /** This type helper makes the 2nd function param required if params/requestBody are required; otherwise, optional */ export type MaybeOptionalInit

= diff --git a/packages/openapi-fetch/src/index.js b/packages/openapi-fetch/src/index.js index b9a1bcc37..be671894f 100644 --- a/packages/openapi-fetch/src/index.js +++ b/packages/openapi-fetch/src/index.js @@ -98,7 +98,7 @@ export default function createClient(clientOptions) { } // fetch! - let response = await fetch(request); + let response = await fetch(request, init.next ? {next: init.next} : undefined); // middleware (response) // execute in reverse-array order (first priority gets last transform) diff --git a/packages/openapi-fetch/test/index.test.ts b/packages/openapi-fetch/test/index.test.ts index 5fe7506b3..6a2a6038e 100644 --- a/packages/openapi-fetch/test/index.test.ts +++ b/packages/openapi-fetch/test/index.test.ts @@ -952,6 +952,31 @@ describe("client", () => { const req = fetchMocker.mock.calls[0][0]; expect(req.credentials).toBe("include"); }); + + it("passes NextJs specific options", async () => { + function createCustomFetch(data: any) { + const response = { + clone: () => ({ ...response }), + headers: new Headers(), + json: async () => data, + status: 200, + ok: true, + } as Response; + return async ( + input: RequestInfo | URL, + init?: RequestInit | undefined, + ) => { + expect(init).toEqual({ next: { tags: ["tag"], revalidate: 10 } }); + return Promise.resolve(response); + }; + } + + const customFetch = createCustomFetch({}); + const client = createClient({ fetch: customFetch }); + + mockFetchOnce({ status: 200, body: "{}" }); + client.GET("/self", { next: { tags: ["tag"], revalidate: 10 } }); + }); }); describe("responses", () => { From e96ead16ecfc047d5d4f435e2072511b1b4b02ee Mon Sep 17 00:00:00 2001 From: petercsaki Date: Wed, 28 Feb 2024 16:15:29 +0000 Subject: [PATCH 2/3] Changeset --- .changeset/rare-pets-lie.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/rare-pets-lie.md diff --git a/.changeset/rare-pets-lie.md b/.changeset/rare-pets-lie.md new file mode 100644 index 000000000..d38d60a28 --- /dev/null +++ b/.changeset/rare-pets-lie.md @@ -0,0 +1,5 @@ +--- +"openapi-fetch": patch +--- + +Fixed fetch options used by NextJs to be passed to fetch. From 719185979bf314d339134330a9795ea4fc5e36eb Mon Sep 17 00:00:00 2001 From: petercsaki Date: Wed, 28 Feb 2024 16:48:52 +0000 Subject: [PATCH 3/3] Prettier --- packages/openapi-fetch/examples/nextjs/app/page.tsx | 2 +- packages/openapi-fetch/src/index.d.ts | 8 +++++--- packages/openapi-fetch/src/index.js | 5 ++++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/openapi-fetch/examples/nextjs/app/page.tsx b/packages/openapi-fetch/examples/nextjs/app/page.tsx index ae6869fae..b70360bc0 100644 --- a/packages/openapi-fetch/examples/nextjs/app/page.tsx +++ b/packages/openapi-fetch/examples/nextjs/app/page.tsx @@ -9,7 +9,7 @@ async function getFact() { next: { revalidate: 10, tags: ["cat"], - } + }, }); } diff --git a/packages/openapi-fetch/src/index.d.ts b/packages/openapi-fetch/src/index.d.ts index 7cc3149b3..bacc28f8e 100644 --- a/packages/openapi-fetch/src/index.d.ts +++ b/packages/openapi-fetch/src/index.d.ts @@ -108,10 +108,12 @@ export type RequestBodyOption = : { body: OperationRequestBodyContent }; export type FetchOptions = RequestOptions & - Omit & NextJsFetchOptions; + Omit & + NextJsFetchOptions; -export type NextJsFetchOptions = - {next?: {revalidate?: false | 0 | number, tags?: string[]}}; +export type NextJsFetchOptions = { + next?: { revalidate?: false | 0 | number; tags?: string[] }; +}; /** This type helper makes the 2nd function param required if params/requestBody are required; otherwise, optional */ export type MaybeOptionalInit

= diff --git a/packages/openapi-fetch/src/index.js b/packages/openapi-fetch/src/index.js index be671894f..a16326ce1 100644 --- a/packages/openapi-fetch/src/index.js +++ b/packages/openapi-fetch/src/index.js @@ -98,7 +98,10 @@ export default function createClient(clientOptions) { } // fetch! - let response = await fetch(request, init.next ? {next: init.next} : undefined); + let response = await fetch( + request, + init.next ? { next: init.next } : undefined, + ); // middleware (response) // execute in reverse-array order (first priority gets last transform)