Skip to content

Commit 339b178

Browse files
committed
NextJs options added.
1 parent 9c277fb commit 339b178

File tree

4 files changed

+34
-2
lines changed

4 files changed

+34
-2
lines changed

packages/openapi-fetch/examples/nextjs/app/page.tsx

+4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ async function getFact() {
66
params: {
77
query: { max_length: 500 },
88
},
9+
next: {
10+
revalidate: 10,
11+
tags: ["cat"],
12+
}
913
});
1014
}
1115

packages/openapi-fetch/src/index.d.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,10 @@ export type RequestBodyOption<T> =
108108
: { body: OperationRequestBodyContent<T> };
109109

110110
export type FetchOptions<T> = RequestOptions<T> &
111-
Omit<RequestInit, "body" | "headers">;
111+
Omit<RequestInit, "body" | "headers"> & NextJsFetchOptions;
112+
113+
export type NextJsFetchOptions =
114+
{next?: {revalidate?: false | 0 | number, tags?: string[]}};
112115

113116
/** This type helper makes the 2nd function param required if params/requestBody are required; otherwise, optional */
114117
export type MaybeOptionalInit<P extends {}, M extends keyof P> =

packages/openapi-fetch/src/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ export default function createClient(clientOptions) {
9898
}
9999

100100
// fetch!
101-
let response = await fetch(request);
101+
let response = await fetch(request, init.next ? {next: init.next} : undefined);
102102

103103
// middleware (response)
104104
// execute in reverse-array order (first priority gets last transform)

packages/openapi-fetch/test/index.test.ts

+25
Original file line numberDiff line numberDiff line change
@@ -952,6 +952,31 @@ describe("client", () => {
952952
const req = fetchMocker.mock.calls[0][0];
953953
expect(req.credentials).toBe("include");
954954
});
955+
956+
it("passes NextJs specific options", async () => {
957+
function createCustomFetch(data: any) {
958+
const response = {
959+
clone: () => ({ ...response }),
960+
headers: new Headers(),
961+
json: async () => data,
962+
status: 200,
963+
ok: true,
964+
} as Response;
965+
return async (
966+
input: RequestInfo | URL,
967+
init?: RequestInit | undefined,
968+
) => {
969+
expect(init).toEqual({ next: { tags: ["tag"], revalidate: 10 } });
970+
return Promise.resolve(response);
971+
};
972+
}
973+
974+
const customFetch = createCustomFetch({});
975+
const client = createClient<paths>({ fetch: customFetch });
976+
977+
mockFetchOnce({ status: 200, body: "{}" });
978+
client.GET("/self", { next: { tags: ["tag"], revalidate: 10 } });
979+
});
955980
});
956981

957982
describe("responses", () => {

0 commit comments

Comments
 (0)