From 34b0235d6006f73289b87cc88bfe36797512f704 Mon Sep 17 00:00:00 2001 From: Kevin Wang Date: Thu, 19 Dec 2024 22:15:45 -0500 Subject: [PATCH 1/2] Drop init argument when not needed in query key For urls that do not include an init param, generate a query key of length 2. This allows the value to be passed directly to `invalidateQueries()`. Without this change, the package generates `["get", "/foo", undefined]` which does not correctly match the corresponding get query. Related to https://github.com/openapi-ts/openapi-typescript/issues/1806 --- packages/openapi-react-query/src/index.ts | 9 +++++++-- packages/openapi-react-query/test/index.test.tsx | 10 ++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) 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", () => { From 3751ad8ad8c44ba714dd4cc4c12ab97abfab1820 Mon Sep 17 00:00:00 2001 From: Kevin Wang Date: Sat, 25 Jan 2025 11:32:29 -0800 Subject: [PATCH 2/2] Create sour-steaks-double.md --- .changeset/sour-steaks-double.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/sour-steaks-double.md 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