Skip to content

Commit d5d704d

Browse files
committed
fix(core): keep query context signal lazy when merging meta
1 parent af721fe commit d5d704d

7 files changed

Lines changed: 38 additions & 24 deletions

File tree

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { prepareQueryContext } from ".";
2+
3+
describe("prepareQueryContext", () => {
4+
it("should keep signal lazy when merging it into meta", () => {
5+
const signal = new AbortController().signal;
6+
const signalGetter = vi.fn(() => signal);
7+
const context = {
8+
queryKey: ["posts", "list"],
9+
get signal() {
10+
return signalGetter();
11+
},
12+
} as any;
13+
14+
const meta = prepareQueryContext(context, { foo: "bar" });
15+
16+
expect(meta.foo).toBe("bar");
17+
expect(meta.queryKey).toEqual(["posts", "list"]);
18+
expect(signalGetter).not.toHaveBeenCalled();
19+
20+
expect(meta.signal).toBe(signal);
21+
expect(signalGetter).toHaveBeenCalledTimes(1);
22+
});
23+
});

packages/core/src/definitions/helpers/prepare-query-context/index.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,19 @@ type Context =
44
| QueryFunctionContext<QueryKey, any>
55
| QueryFunctionContext<QueryKey, never>;
66

7+
type QueryContextMeta<TMeta extends Record<string, unknown> | undefined> = (
8+
TMeta extends Record<string, unknown> ? TMeta : Record<string, never>
9+
) &
10+
Pick<Context, "queryKey" | "signal">;
11+
712
export const prepareQueryContext = (
813
context: Context,
9-
): Pick<Context, "queryKey" | "signal"> => {
10-
const queryContext: Pick<Context, "queryKey" | "signal"> = {
14+
meta?: Record<string, unknown>,
15+
): QueryContextMeta<typeof meta> => {
16+
const queryContext = {
17+
...(meta ?? {}),
1118
queryKey: context.queryKey,
12-
signal: undefined as any,
13-
};
19+
} as QueryContextMeta<typeof meta>;
1420

1521
Object.defineProperty(queryContext, "signal", {
1622
enumerable: true,

packages/core/src/hooks/data/useCustom.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,10 +173,7 @@ export const useCustom = <
173173
url,
174174
method,
175175
...config,
176-
meta: {
177-
...combinedMeta,
178-
...prepareQueryContext(context as any),
179-
},
176+
meta: prepareQueryContext(context as any, combinedMeta),
180177
}),
181178
...queryOptions,
182179
meta: {

packages/core/src/hooks/data/useInfiniteList.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -254,10 +254,7 @@ export const useInfiniteList = <
254254
(context.pageParam as number) ?? prefferedPagination.currentPage,
255255
};
256256

257-
const meta = {
258-
...combinedMeta,
259-
...prepareQueryContext(context),
260-
};
257+
const meta = prepareQueryContext(context, combinedMeta);
261258

262259
return getList<TQueryFnData>({
263260
resource: resource?.name || "",

packages/core/src/hooks/data/useList.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -254,10 +254,7 @@ export const useList = <
254254
})
255255
.get(),
256256
queryFn: (context) => {
257-
const meta = {
258-
...combinedMeta,
259-
...prepareQueryContext(context),
260-
};
257+
const meta = prepareQueryContext(context, combinedMeta);
261258
return getList<TQueryFnData>({
262259
resource: resource?.name ?? "",
263260
pagination: prefferedPagination,

packages/core/src/hooks/data/useMany.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -188,10 +188,7 @@ export const useMany = <
188188
})
189189
.get(),
190190
queryFn: (context) => {
191-
const meta = {
192-
...combinedMeta,
193-
...prepareQueryContext(context as any),
194-
};
191+
const meta = prepareQueryContext(context as any, combinedMeta);
195192

196193
if (getMany) {
197194
return getMany({

packages/core/src/hooks/data/useOne.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,10 +185,7 @@ export const useOne = <
185185
getOne<TQueryFnData>({
186186
resource: resource?.name ?? "",
187187
id: id!,
188-
meta: {
189-
...combinedMeta,
190-
...prepareQueryContext(context as any),
191-
},
188+
meta: prepareQueryContext(context as any, combinedMeta),
192189
}),
193190
...queryOptions,
194191
enabled: isEnabled,

0 commit comments

Comments
 (0)