diff --git a/.changeset/sour-steaks-double.md b/.changeset/sour-steaks-double.md new file mode 100644 index 000000000..00168c56e --- /dev/null +++ b/.changeset/sour-steaks-double.md @@ -0,0 +1,5 @@ +--- +"openapi-react-query": patch +--- + +Drop init argument when not needed in query key diff --git a/packages/openapi-react-query/src/index.ts b/packages/openapi-react-query/src/index.ts index cbee066c0..becd88008 100644 --- a/packages/openapi-react-query/src/index.ts +++ b/packages/openapi-react-query/src/index.ts @@ -21,7 +21,8 @@ export type QueryKey< Paths extends Record>, Method extends HttpMethod, Path extends PathsWithMethod, -> = readonly [Method, Path, MaybeOptionalInit]; + Init = MaybeOptionalInit, +> = Init extends undefined ? readonly [Method, Path] : readonly [Method, Path, Init]; export type QueryOptionsFunction>, Media extends MediaType> = < Method extends HttpMethod, @@ -123,7 +124,11 @@ export default function createClient = (method, path, ...[init, options]) => ({ - queryKey: [method, path, init as InitWithUnknowns] as const, + queryKey: (init === undefined ? ([method, path] as const) : ([method, path, init] as const)) as QueryKey< + Paths, + typeof method, + typeof path + >, queryFn, ...options, }); diff --git a/packages/openapi-react-query/test/index.test.tsx b/packages/openapi-react-query/test/index.test.tsx index 294175df9..9c3bbf2fb 100644 --- a/packages/openapi-react-query/test/index.test.tsx +++ b/packages/openapi-react-query/test/index.test.tsx @@ -231,6 +231,16 @@ describe("client", () => { expectTypeOf(result.current.data).toEqualTypeOf<"select(true)">(); expectTypeOf(result.current.error).toEqualTypeOf(); }); + + it("returns query options without an init", async () => { + const fetchClient = createFetchClient({ + baseUrl, + fetch: () => Promise.resolve(Response.json(true)), + }); + const client = createClient(fetchClient); + + expect(client.queryOptions("get", "/foo").queryKey.length).toBe(2); + }); }); describe("useQuery", () => {