@effector-tanstack-query/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +40 -0
  2. package/dist/createBaseQuery.cjs +208 -0
  3. package/dist/createBaseQuery.cjs.map +1 -0
  4. package/dist/createBaseQuery.d.cts +114 -0
  5. package/dist/createBaseQuery.d.ts +114 -0
  6. package/dist/createBaseQuery.js +204 -0
  7. package/dist/createBaseQuery.js.map +1 -0
  8. package/dist/createInfiniteQuery.cjs +193 -0
  9. package/dist/createInfiniteQuery.cjs.map +1 -0
  10. package/dist/createInfiniteQuery.d.cts +8 -0
  11. package/dist/createInfiniteQuery.d.ts +8 -0
  12. package/dist/createInfiniteQuery.js +191 -0
  13. package/dist/createInfiniteQuery.js.map +1 -0
  14. package/dist/createInvalidate.cjs +37 -0
  15. package/dist/createInvalidate.cjs.map +1 -0
  16. package/dist/createInvalidate.d.cts +50 -0
  17. package/dist/createInvalidate.d.ts +50 -0
  18. package/dist/createInvalidate.js +35 -0
  19. package/dist/createInvalidate.js.map +1 -0
  20. package/dist/createMutation.cjs +177 -0
  21. package/dist/createMutation.cjs.map +1 -0
  22. package/dist/createMutation.d.cts +7 -0
  23. package/dist/createMutation.d.ts +7 -0
  24. package/dist/createMutation.js +175 -0
  25. package/dist/createMutation.js.map +1 -0
  26. package/dist/createQuery.cjs +98 -0
  27. package/dist/createQuery.cjs.map +1 -0
  28. package/dist/createQuery.d.cts +8 -0
  29. package/dist/createQuery.d.ts +8 -0
  30. package/dist/createQuery.js +96 -0
  31. package/dist/createQuery.js.map +1 -0
  32. package/dist/index.cjs +36 -0
  33. package/dist/index.cjs.map +1 -0
  34. package/dist/index.d.cts +8 -0
  35. package/dist/index.d.ts +8 -0
  36. package/dist/index.js +7 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/queryClient.cjs +20 -0
  39. package/dist/queryClient.cjs.map +1 -0
  40. package/dist/queryClient.d.cts +15 -0
  41. package/dist/queryClient.d.ts +15 -0
  42. package/dist/queryClient.js +17 -0
  43. package/dist/queryClient.js.map +1 -0
  44. package/dist/resolve.cjs +37 -0
  45. package/dist/resolve.cjs.map +1 -0
  46. package/dist/resolve.d.cts +17 -0
  47. package/dist/resolve.d.ts +17 -0
  48. package/dist/resolve.js +33 -0
  49. package/dist/resolve.js.map +1 -0
  50. package/dist/types.cjs +4 -0
  51. package/dist/types.cjs.map +1 -0
  52. package/dist/types.d.cts +209 -0
  53. package/dist/types.d.ts +209 -0
  54. package/dist/types.js +3 -0
  55. package/dist/types.js.map +1 -0
  56. package/package.json +60 -0
  57. package/src/createBaseQuery.ts +428 -0
  58. package/src/createInfiniteQuery.ts +291 -0
  59. package/src/createInvalidate.ts +104 -0
  60. package/src/createMutation.ts +271 -0
  61. package/src/createQuery.ts +155 -0
  62. package/src/index.ts +17 -0
  63. package/src/queryClient.ts +23 -0
  64. package/src/resolve.ts +50 -0
  65. package/src/types.ts +270 -0
@@ -0,0 +1,7 @@
1
+ import { QueryClient } from '@tanstack/query-core';
2
+ import { CreateMutationOptions, MutationResult } from './types.js';
3
+ import 'effector';
4
+
5
+ declare function createMutation<TData = unknown, TError = Error, TVariables = void, TOnMutateResult = unknown>(arg1: QueryClient | CreateMutationOptions<TData, TError, TVariables, TOnMutateResult>, arg2?: CreateMutationOptions<TData, TError, TVariables, TOnMutateResult>): MutationResult<TData, TError, TVariables>;
6
+
7
+ export { createMutation };
@@ -0,0 +1,175 @@
1
+ import { createStore, createEvent, attach, scopeBind, sample } from 'effector';
2
+ import { MutationObserver } from '@tanstack/query-core';
3
+ import { $queryClient } from './queryClient.js';
4
+ import { warnMissingName, sidConfig } from './createBaseQuery.js';
5
+
6
+ // src/createMutation.ts
7
+ function createMutation(arg1, arg2) {
8
+ const [explicitClient, options] = parseMutationArgs(arg1, arg2);
9
+ const { name, ...observerOptions } = options;
10
+ if (!name) warnMissingName("createMutation");
11
+ const $effectiveClient = explicitClient ? createStore(explicitClient, {
12
+ serialize: "ignore"
13
+ }) : $queryClient;
14
+ const dataUpdated = createEvent();
15
+ const errorUpdated = createEvent();
16
+ const statusUpdated = createEvent();
17
+ const variablesUpdated = createEvent();
18
+ const isPausedUpdated = createEvent();
19
+ const finishedSuccess = createEvent();
20
+ const finishedFailure = createEvent();
21
+ const $data = createStore(void 0, {
22
+ skipVoid: false,
23
+ ...sidConfig(name, "$data")
24
+ }).on(dataUpdated, (_, v) => v);
25
+ const $error = createStore(null, {
26
+ skipVoid: false,
27
+ ...sidConfig(name, "$error")
28
+ }).on(errorUpdated, (_, v) => v);
29
+ const $status = createStore("idle", {
30
+ ...sidConfig(name, "$status")
31
+ }).on(statusUpdated, (_, v) => v);
32
+ const $variables = createStore(void 0, {
33
+ skipVoid: false,
34
+ ...sidConfig(name, "$variables")
35
+ }).on(variablesUpdated, (_, v) => v);
36
+ const $isPaused = createStore(false, {
37
+ ...sidConfig(name, "$isPaused")
38
+ }).on(isPausedUpdated, (_, v) => v);
39
+ const $isPending = $status.map((s) => s === "pending");
40
+ const $isSuccess = $status.map((s) => s === "success");
41
+ const $isError = $status.map((s) => s === "error");
42
+ const $isIdle = $status.map((s) => s === "idle");
43
+ const $observer = createStore(null, {
44
+ serialize: "ignore"
45
+ });
46
+ const observerCreated = createEvent();
47
+ $observer.on(observerCreated, (_, obs) => obs);
48
+ const observerSubscriptions = /* @__PURE__ */ new WeakMap();
49
+ const start = createEvent();
50
+ const unmounted = createEvent();
51
+ const startFx = attach({
52
+ source: { qc: $effectiveClient, observer: $observer },
53
+ effect: ({ qc, observer: existingObserver }) => {
54
+ if (!qc) {
55
+ throw new Error(
56
+ "[@tanstack/query-effector] No QueryClient is set for createMutation. Call setQueryClient(qc) before start, pass it to fork({ values: [[$queryClient, qc]] }), or pass it explicitly to the factory."
57
+ );
58
+ }
59
+ const observer = existingObserver ?? new MutationObserver(
60
+ qc,
61
+ observerOptions
62
+ );
63
+ const dispatchData = scopeBind(dataUpdated, { safe: true });
64
+ const dispatchError = scopeBind(errorUpdated, { safe: true });
65
+ const dispatchStatus = scopeBind(statusUpdated, { safe: true });
66
+ const dispatchVariables = scopeBind(variablesUpdated, { safe: true });
67
+ const dispatchIsPaused = scopeBind(isPausedUpdated, { safe: true });
68
+ const dispatchFinishedSuccess = scopeBind(finishedSuccess, { safe: true });
69
+ const dispatchFinishedFailure = scopeBind(finishedFailure, { safe: true });
70
+ observerSubscriptions.get(observer)?.();
71
+ let prevStatus = "idle";
72
+ const unsubscribe = observer.subscribe((result) => {
73
+ dispatchData(result.data);
74
+ dispatchError(result.error);
75
+ dispatchStatus(result.status);
76
+ dispatchVariables(result.variables);
77
+ dispatchIsPaused(result.isPaused);
78
+ if (prevStatus === "pending") {
79
+ if (result.status === "success") {
80
+ dispatchFinishedSuccess({
81
+ params: result.variables,
82
+ result: result.data
83
+ });
84
+ } else if (result.status === "error") {
85
+ dispatchFinishedFailure({
86
+ params: result.variables,
87
+ error: result.error
88
+ });
89
+ }
90
+ }
91
+ prevStatus = result.status;
92
+ });
93
+ observerSubscriptions.set(observer, unsubscribe);
94
+ return observer;
95
+ }
96
+ });
97
+ sample({ clock: start, target: startFx });
98
+ sample({ clock: startFx.doneData, target: observerCreated });
99
+ const unmountFx = attach({
100
+ source: $observer,
101
+ effect: (observer) => {
102
+ if (!observer) return;
103
+ observerSubscriptions.get(observer)?.();
104
+ observerSubscriptions.delete(observer);
105
+ }
106
+ });
107
+ sample({ clock: unmounted, target: unmountFx });
108
+ const mutate = createEvent();
109
+ const mutateFx = attach({
110
+ source: $observer,
111
+ effect: (observer, variables) => {
112
+ if (!observer) return;
113
+ observer.mutate(variables).catch(() => {
114
+ });
115
+ }
116
+ });
117
+ sample({ clock: mutate, target: mutateFx });
118
+ const mutateWith = createEvent();
119
+ const mutateWithFx = attach({
120
+ source: $observer,
121
+ effect: (observer, {
122
+ variables,
123
+ ...callbacks
124
+ }) => {
125
+ if (!observer) return;
126
+ observer.mutate(variables, callbacks).catch(() => {
127
+ });
128
+ }
129
+ });
130
+ sample({ clock: mutateWith, target: mutateWithFx });
131
+ const reset = createEvent();
132
+ const resetFx = attach({
133
+ source: $observer,
134
+ effect: (observer) => {
135
+ if (!observer) return;
136
+ observer.reset();
137
+ }
138
+ });
139
+ sample({ clock: reset, target: resetFx });
140
+ return {
141
+ $data,
142
+ $error,
143
+ $status,
144
+ $variables,
145
+ $isPaused,
146
+ $isPending,
147
+ $isSuccess,
148
+ $isError,
149
+ $isIdle,
150
+ $observer,
151
+ $queryClient: $effectiveClient,
152
+ mutate,
153
+ mutateWith,
154
+ reset,
155
+ start,
156
+ unmounted,
157
+ finished: {
158
+ success: finishedSuccess,
159
+ failure: finishedFailure
160
+ }
161
+ };
162
+ }
163
+ function parseMutationArgs(arg1, arg2) {
164
+ if (arg2 !== void 0) {
165
+ return [arg1, arg2];
166
+ }
167
+ return [
168
+ null,
169
+ arg1
170
+ ];
171
+ }
172
+
173
+ export { createMutation };
174
+ //# sourceMappingURL=createMutation.js.map
175
+ //# sourceMappingURL=createMutation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/createMutation.ts"],"names":[],"mappings":"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","file":"createMutation.js","sourcesContent":["import {\n attach,\n createEvent,\n createStore,\n sample,\n scopeBind,\n} from 'effector'\nimport type { Store } from 'effector'\nimport { MutationObserver } from '@tanstack/query-core'\nimport type { MutateOptions, QueryClient } from '@tanstack/query-core'\nimport { $queryClient } from './queryClient'\nimport { sidConfig, warnMissingName } from './createBaseQuery'\nimport type { CreateMutationOptions, MutationResult } from './types'\n\ntype MutationStatus = 'idle' | 'pending' | 'success' | 'error'\n\nexport function createMutation<\n TData = unknown,\n TError = Error,\n TVariables = void,\n TOnMutateResult = unknown,\n>(\n arg1:\n | QueryClient\n | CreateMutationOptions<TData, TError, TVariables, TOnMutateResult>,\n arg2?: CreateMutationOptions<TData, TError, TVariables, TOnMutateResult>,\n): MutationResult<TData, TError, TVariables> {\n const [explicitClient, options] = parseMutationArgs<\n TData,\n TError,\n TVariables,\n TOnMutateResult\n >(arg1, arg2)\n\n const { name, ...observerOptions } = options\n\n if (!name) warnMissingName('createMutation')\n\n const $effectiveClient: Store<QueryClient | null> = explicitClient\n ? createStore(explicitClient as QueryClient | null, {\n serialize: 'ignore',\n })\n : $queryClient\n\n const dataUpdated = createEvent<TData | undefined>()\n const errorUpdated = createEvent<TError | null>()\n const statusUpdated = createEvent<MutationStatus>()\n const variablesUpdated = createEvent<TVariables | undefined>()\n const isPausedUpdated = createEvent<boolean>()\n const finishedSuccess = createEvent<{ params: TVariables; result: TData }>()\n const finishedFailure = createEvent<{ params: TVariables; error: TError }>()\n\n const $data = createStore<TData | undefined>(undefined, {\n skipVoid: false,\n ...sidConfig(name, '$data'),\n }).on(dataUpdated, (_, v) => v)\n const $error = createStore<TError | null>(null, {\n skipVoid: false,\n ...sidConfig(name, '$error'),\n }).on(errorUpdated, (_, v) => v)\n const $status = createStore<MutationStatus>('idle', {\n ...sidConfig(name, '$status'),\n }).on(statusUpdated, (_, v) => v)\n const $variables = createStore<TVariables | undefined>(undefined, {\n skipVoid: false,\n ...sidConfig(name, '$variables'),\n }).on(variablesUpdated, (_, v) => v)\n const $isPaused = createStore(false, {\n ...sidConfig(name, '$isPaused'),\n }).on(isPausedUpdated, (_, v) => v)\n\n // Derived stores via .map don't take sid — they recompute from $status on\n // the client after fork({ values }).\n const $isPending = $status.map((s) => s === 'pending')\n const $isSuccess = $status.map((s) => s === 'success')\n const $isError = $status.map((s) => s === 'error')\n const $isIdle = $status.map((s) => s === 'idle')\n\n // Per-scope observer — same pattern as createBaseQuery. Each fork scope\n // gets its own MutationObserver bound to its scope's QueryClient.\n type Observer = MutationObserver<TData, TError, TVariables, TOnMutateResult>\n const $observer = createStore<Observer | null>(null, {\n serialize: 'ignore',\n })\n const observerCreated = createEvent<Observer>()\n $observer.on(observerCreated, (_, obs) => obs)\n\n const observerSubscriptions = new WeakMap<Observer, () => void>()\n\n const start = createEvent<void>()\n const unmounted = createEvent<void>()\n\n const startFx = attach({\n source: { qc: $effectiveClient, observer: $observer },\n effect: ({ qc, observer: existingObserver }) => {\n if (!qc) {\n throw new Error(\n '[@tanstack/query-effector] No QueryClient is set for createMutation. Call setQueryClient(qc) before start, ' +\n 'pass it to fork({ values: [[$queryClient, qc]] }), or pass it explicitly to the factory.',\n )\n }\n\n const observer =\n existingObserver ??\n new MutationObserver<TData, TError, TVariables, TOnMutateResult>(\n qc,\n observerOptions,\n )\n\n const dispatchData = scopeBind(dataUpdated, { safe: true })\n const dispatchError = scopeBind(errorUpdated, { safe: true })\n const dispatchStatus = scopeBind(statusUpdated, { safe: true })\n const dispatchVariables = scopeBind(variablesUpdated, { safe: true })\n const dispatchIsPaused = scopeBind(isPausedUpdated, { safe: true })\n const dispatchFinishedSuccess = scopeBind(finishedSuccess, { safe: true })\n const dispatchFinishedFailure = scopeBind(finishedFailure, { safe: true })\n\n observerSubscriptions.get(observer)?.()\n\n // Track status transitions to emit `finished.success` / `finished.failure`\n // exactly once per pending → terminal transition. The observer holds at\n // most one inflight mutation at a time, so a single previous-status flag\n // is sufficient.\n let prevStatus: MutationStatus = 'idle'\n\n const unsubscribe = observer.subscribe((result) => {\n dispatchData(result.data)\n dispatchError(result.error)\n dispatchStatus(result.status)\n dispatchVariables(result.variables)\n dispatchIsPaused(result.isPaused)\n\n if (prevStatus === 'pending') {\n if (result.status === 'success') {\n dispatchFinishedSuccess({\n params: result.variables as TVariables,\n result: result.data as TData,\n })\n } else if (result.status === 'error') {\n dispatchFinishedFailure({\n params: result.variables as TVariables,\n error: result.error as TError,\n })\n }\n }\n prevStatus = result.status\n })\n\n observerSubscriptions.set(observer, unsubscribe)\n\n return observer\n },\n })\n\n sample({ clock: start, target: startFx })\n sample({ clock: startFx.doneData, target: observerCreated })\n\n // Mutation observers (unlike query observers) live across mount cycles —\n // their data state survives unmount and can be observed again on re-start.\n // Match that by keeping `$observer` populated; we only drop the\n // subscription so listeners stop receiving updates after unmount.\n const unmountFx = attach({\n source: $observer,\n effect: (observer) => {\n if (!observer) return\n observerSubscriptions.get(observer)?.()\n observerSubscriptions.delete(observer)\n },\n })\n sample({ clock: unmounted, target: unmountFx })\n\n const mutate = createEvent<TVariables>()\n\n // Fire-and-forget: don't return the promise so allSettled doesn't block\n // (would deadlock under fake timers since observer.mutate awaits the user's\n // mutationFn). Errors are tracked via the observer subscription which\n // updates $error/$status and emits `finished.failure`.\n const mutateFx = attach({\n source: $observer,\n effect: (observer, variables: TVariables) => {\n if (!observer) return\n observer.mutate(variables).catch(() => {})\n },\n })\n\n sample({ clock: mutate, target: mutateFx })\n\n // Per-call callbacks variant: forwards onSuccess/onError/onSettled to\n // observer.mutate(vars, opts). Use this for component-local reactions\n // that don't fit module-level `sample({ clock: finished.success })` wiring.\n const mutateWith = createEvent<{\n variables: TVariables\n onSuccess?: MutateOptions<TData, TError, TVariables>['onSuccess']\n onError?: MutateOptions<TData, TError, TVariables>['onError']\n onSettled?: MutateOptions<TData, TError, TVariables>['onSettled']\n }>()\n\n const mutateWithFx = attach({\n source: $observer,\n effect: (\n observer,\n {\n variables,\n ...callbacks\n }: {\n variables: TVariables\n onSuccess?: MutateOptions<TData, TError, TVariables>['onSuccess']\n onError?: MutateOptions<TData, TError, TVariables>['onError']\n onSettled?: MutateOptions<TData, TError, TVariables>['onSettled']\n },\n ) => {\n if (!observer) return\n observer.mutate(variables, callbacks).catch(() => {})\n },\n })\n\n sample({ clock: mutateWith, target: mutateWithFx })\n\n const reset = createEvent<void>()\n\n const resetFx = attach({\n source: $observer,\n effect: (observer) => {\n if (!observer) return\n observer.reset()\n },\n })\n\n sample({ clock: reset, target: resetFx })\n\n return {\n $data,\n $error,\n $status,\n $variables,\n $isPaused,\n $isPending,\n $isSuccess,\n $isError,\n $isIdle,\n $observer,\n $queryClient: $effectiveClient,\n mutate,\n mutateWith,\n reset,\n start,\n unmounted,\n finished: {\n success: finishedSuccess,\n failure: finishedFailure,\n },\n }\n}\n\nfunction parseMutationArgs<TData, TError, TVariables, TOnMutateResult>(\n arg1:\n | QueryClient\n | CreateMutationOptions<TData, TError, TVariables, TOnMutateResult>,\n arg2?: CreateMutationOptions<TData, TError, TVariables, TOnMutateResult>,\n): [\n QueryClient | null,\n CreateMutationOptions<TData, TError, TVariables, TOnMutateResult>,\n] {\n if (arg2 !== undefined) {\n return [arg1 as QueryClient, arg2]\n }\n return [\n null,\n arg1 as CreateMutationOptions<TData, TError, TVariables, TOnMutateResult>,\n ]\n}\n"]}
@@ -0,0 +1,98 @@
1
+ 'use strict';
2
+
3
+ var effector = require('effector');
4
+ var queryCore = require('@tanstack/query-core');
5
+ var createBaseQuery_cjs = require('./createBaseQuery.cjs');
6
+ var resolve_cjs = require('./resolve.cjs');
7
+
8
+ // src/createQuery.ts
9
+ function createQuery(arg1, arg2) {
10
+ const [explicitClient, options] = parseQueryArgs(
11
+ arg1,
12
+ arg2
13
+ );
14
+ const { queryKey, enabled, name, ...restOptions } = options;
15
+ if (!name) createBaseQuery_cjs.warnMissingName("createQuery");
16
+ const reactiveRefetchInterval = resolve_cjs.resolveReactiveRefetchInterval(
17
+ restOptions.refetchInterval
18
+ );
19
+ if (reactiveRefetchInterval) {
20
+ delete restOptions.refetchInterval;
21
+ }
22
+ const base = createBaseQuery_cjs.createBaseQuery(
23
+ explicitClient,
24
+ { queryKey, enabled, name, reactiveRefetchInterval },
25
+ {
26
+ createObserver: (qc, { queryKey: key, enabled: isEnabled }) => (
27
+ // Cast: restOptions's `refetchInterval` may still type as
28
+ // `Store | number | false | fn`; the Store form is deleted at runtime
29
+ // above, but TS can't narrow that here.
30
+ new queryCore.QueryObserver(qc, {
31
+ ...restOptions,
32
+ queryKey: key,
33
+ enabled: isEnabled
34
+ })
35
+ )
36
+ }
37
+ );
38
+ const prefetch = effector.createEvent();
39
+ const prefetchFx = effector.attach({
40
+ source: {
41
+ qc: base.$queryClient,
42
+ key: base.$resolvedKey,
43
+ enabled: base.$enabled
44
+ },
45
+ effect: ({ qc, key, enabled: enabled2 }) => {
46
+ if (!qc || !enabled2) return;
47
+ return qc.fetchQuery({
48
+ ...restOptions,
49
+ queryKey: key
50
+ });
51
+ }
52
+ });
53
+ effector.sample({ clock: prefetch, target: prefetchFx });
54
+ const result = {
55
+ $data: base.$data,
56
+ $error: base.$error,
57
+ $status: base.$status,
58
+ $isPending: base.$isPending,
59
+ $isFetching: base.$isFetching,
60
+ $isSuccess: base.$isSuccess,
61
+ $isError: base.$isError,
62
+ $isPlaceholderData: base.$isPlaceholderData,
63
+ $fetchStatus: base.$fetchStatus,
64
+ $observer: base.$observer,
65
+ $queryClient: base.$queryClient,
66
+ refresh: base.refresh,
67
+ prefetch,
68
+ mounted: base.mounted,
69
+ unmounted: base.unmounted
70
+ };
71
+ Object.defineProperty(result, "__createObserver", {
72
+ enumerable: false,
73
+ value: (qc, init) => new queryCore.QueryObserver(qc, {
74
+ ...restOptions,
75
+ queryKey: init.queryKey,
76
+ enabled: init.enabled
77
+ })
78
+ });
79
+ Object.defineProperty(result, "__resolvedKey", {
80
+ enumerable: false,
81
+ value: base.$resolvedKey
82
+ });
83
+ Object.defineProperty(result, "__enabled", {
84
+ enumerable: false,
85
+ value: base.$enabled
86
+ });
87
+ return result;
88
+ }
89
+ function parseQueryArgs(arg1, arg2) {
90
+ if (arg2 !== void 0) {
91
+ return [arg1, arg2];
92
+ }
93
+ return [null, arg1];
94
+ }
95
+
96
+ exports.createQuery = createQuery;
97
+ //# sourceMappingURL=createQuery.cjs.map
98
+ //# sourceMappingURL=createQuery.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/createQuery.ts"],"names":["warnMissingName","resolveReactiveRefetchInterval","createBaseQuery","QueryObserver","createEvent","attach","enabled","sample"],"mappings":"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","file":"createQuery.cjs","sourcesContent":["import { attach, createEvent, sample } from 'effector'\nimport { QueryObserver } from '@tanstack/query-core'\nimport type { QueryClient } from '@tanstack/query-core'\nimport { createBaseQuery, warnMissingName } from './createBaseQuery'\nimport { resolveReactiveRefetchInterval } from './resolve'\nimport type { CreateQueryOptions, QueryResult } from './types'\n\nexport function createQuery<\n TQueryFnData = unknown,\n TError = Error,\n TData = TQueryFnData,\n>(\n options: CreateQueryOptions<TQueryFnData, TError, TData>,\n): QueryResult<TData, TError>\nexport function createQuery<\n TQueryFnData = unknown,\n TError = Error,\n TData = TQueryFnData,\n>(\n queryClient: QueryClient,\n options: CreateQueryOptions<TQueryFnData, TError, TData>,\n): QueryResult<TData, TError>\nexport function createQuery<\n TQueryFnData = unknown,\n TError = Error,\n TData = TQueryFnData,\n>(\n arg1:\n | QueryClient\n | CreateQueryOptions<TQueryFnData, TError, TData>,\n arg2?: CreateQueryOptions<TQueryFnData, TError, TData>,\n): QueryResult<TData, TError> {\n const [explicitClient, options] = parseQueryArgs<TQueryFnData, TError, TData>(\n arg1,\n arg2,\n )\n const { queryKey, enabled, name, ...restOptions } = options\n\n if (!name) warnMissingName('createQuery')\n\n // If `refetchInterval` is a Store, pull it out for reactive wiring in\n // createBaseQuery — otherwise leave it in restOptions for the observer\n // constructor (handles plain values and function forms unchanged).\n const reactiveRefetchInterval = resolveReactiveRefetchInterval(\n (restOptions as { refetchInterval?: unknown }).refetchInterval,\n )\n if (reactiveRefetchInterval) {\n delete (restOptions as { refetchInterval?: unknown }).refetchInterval\n }\n\n const base = createBaseQuery<\n TData,\n TError,\n ReturnType<QueryObserver<TQueryFnData, TError, TData>['getCurrentResult']>,\n QueryObserver<TQueryFnData, TError, TData>\n >(\n explicitClient,\n { queryKey, enabled, name, reactiveRefetchInterval },\n {\n createObserver: (qc, { queryKey: key, enabled: isEnabled }) =>\n // Cast: restOptions's `refetchInterval` may still type as\n // `Store | number | false | fn`; the Store form is deleted at runtime\n // above, but TS can't narrow that here.\n new QueryObserver<TQueryFnData, TError, TData>(qc, {\n ...restOptions,\n queryKey: key,\n enabled: isEnabled,\n } as any),\n },\n )\n\n // Prefetch event: drives `queryClient.fetchQuery` directly (no Observer)\n // and **awaits** the result, so `allSettled(query.prefetch, { scope })` on\n // the server returns only after the cache has the data. Unlike `mounted`,\n // which kicks off a background subscription and resolves immediately, this\n // is the right primitive for SSR / route loaders. The current resolved key\n // + enabled is read from the scope via attach — reactive keys work.\n const prefetch = createEvent<void>()\n const prefetchFx = attach({\n source: {\n qc: base.$queryClient,\n key: base.$resolvedKey,\n enabled: base.$enabled,\n },\n effect: ({ qc, key, enabled }) => {\n if (!qc || !enabled) return\n return qc.fetchQuery({\n ...restOptions,\n queryKey: key,\n } as any)\n },\n })\n sample({ clock: prefetch, target: prefetchFx })\n\n // Lazy `observer` field for backward compatibility — returns the\n // default-scope observer (non-fork). Tests and advanced consumers that read\n // `query.observer` after `query.mounted()` see the live observer. For\n // fork-aware consumers, use `query.$observer` via `useUnit`.\n const result: QueryResult<TData, TError> = {\n $data: base.$data,\n $error: base.$error,\n $status: base.$status,\n $isPending: base.$isPending,\n $isFetching: base.$isFetching,\n $isSuccess: base.$isSuccess,\n $isError: base.$isError,\n $isPlaceholderData: base.$isPlaceholderData,\n $fetchStatus: base.$fetchStatus,\n $observer: base.$observer as unknown as QueryResult<\n TData,\n TError\n >['$observer'],\n $queryClient: base.$queryClient,\n refresh: base.refresh,\n prefetch,\n mounted: base.mounted,\n unmounted: base.unmounted,\n }\n\n // Internal: used by useSuspenseQuery to construct a transient observer\n // when the suspense hook renders before mountFx has populated the scope's\n // $observer (mountFx runs from useEffect, which is skipped while\n // suspended). Not part of the public API; not in TS types.\n Object.defineProperty(result, '__createObserver', {\n enumerable: false,\n value: (qc: QueryClient, init: { queryKey: any; enabled: boolean }) =>\n new QueryObserver<TQueryFnData, TError, TData>(qc, {\n ...restOptions,\n queryKey: init.queryKey,\n enabled: init.enabled,\n } as any),\n })\n Object.defineProperty(result, '__resolvedKey', {\n enumerable: false,\n value: base.$resolvedKey,\n })\n Object.defineProperty(result, '__enabled', {\n enumerable: false,\n value: base.$enabled,\n })\n\n return result\n}\n\nfunction parseQueryArgs<TQueryFnData, TError, TData>(\n arg1:\n | QueryClient\n | CreateQueryOptions<TQueryFnData, TError, TData>,\n arg2?: CreateQueryOptions<TQueryFnData, TError, TData>,\n): [QueryClient | null, CreateQueryOptions<TQueryFnData, TError, TData>] {\n if (arg2 !== undefined) {\n return [arg1 as QueryClient, arg2]\n }\n return [null, arg1 as CreateQueryOptions<TQueryFnData, TError, TData>]\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { QueryClient } from '@tanstack/query-core';
2
+ import { CreateQueryOptions, QueryResult } from './types.cjs';
3
+ import 'effector';
4
+
5
+ declare function createQuery<TQueryFnData = unknown, TError = Error, TData = TQueryFnData>(options: CreateQueryOptions<TQueryFnData, TError, TData>): QueryResult<TData, TError>;
6
+ declare function createQuery<TQueryFnData = unknown, TError = Error, TData = TQueryFnData>(queryClient: QueryClient, options: CreateQueryOptions<TQueryFnData, TError, TData>): QueryResult<TData, TError>;
7
+
8
+ export { createQuery };
@@ -0,0 +1,8 @@
1
+ import { QueryClient } from '@tanstack/query-core';
2
+ import { CreateQueryOptions, QueryResult } from './types.js';
3
+ import 'effector';
4
+
5
+ declare function createQuery<TQueryFnData = unknown, TError = Error, TData = TQueryFnData>(options: CreateQueryOptions<TQueryFnData, TError, TData>): QueryResult<TData, TError>;
6
+ declare function createQuery<TQueryFnData = unknown, TError = Error, TData = TQueryFnData>(queryClient: QueryClient, options: CreateQueryOptions<TQueryFnData, TError, TData>): QueryResult<TData, TError>;
7
+
8
+ export { createQuery };
@@ -0,0 +1,96 @@
1
+ import { createEvent, attach, sample } from 'effector';
2
+ import { QueryObserver } from '@tanstack/query-core';
3
+ import { warnMissingName, createBaseQuery } from './createBaseQuery.js';
4
+ import { resolveReactiveRefetchInterval } from './resolve.js';
5
+
6
+ // src/createQuery.ts
7
+ function createQuery(arg1, arg2) {
8
+ const [explicitClient, options] = parseQueryArgs(
9
+ arg1,
10
+ arg2
11
+ );
12
+ const { queryKey, enabled, name, ...restOptions } = options;
13
+ if (!name) warnMissingName("createQuery");
14
+ const reactiveRefetchInterval = resolveReactiveRefetchInterval(
15
+ restOptions.refetchInterval
16
+ );
17
+ if (reactiveRefetchInterval) {
18
+ delete restOptions.refetchInterval;
19
+ }
20
+ const base = createBaseQuery(
21
+ explicitClient,
22
+ { queryKey, enabled, name, reactiveRefetchInterval },
23
+ {
24
+ createObserver: (qc, { queryKey: key, enabled: isEnabled }) => (
25
+ // Cast: restOptions's `refetchInterval` may still type as
26
+ // `Store | number | false | fn`; the Store form is deleted at runtime
27
+ // above, but TS can't narrow that here.
28
+ new QueryObserver(qc, {
29
+ ...restOptions,
30
+ queryKey: key,
31
+ enabled: isEnabled
32
+ })
33
+ )
34
+ }
35
+ );
36
+ const prefetch = createEvent();
37
+ const prefetchFx = attach({
38
+ source: {
39
+ qc: base.$queryClient,
40
+ key: base.$resolvedKey,
41
+ enabled: base.$enabled
42
+ },
43
+ effect: ({ qc, key, enabled: enabled2 }) => {
44
+ if (!qc || !enabled2) return;
45
+ return qc.fetchQuery({
46
+ ...restOptions,
47
+ queryKey: key
48
+ });
49
+ }
50
+ });
51
+ sample({ clock: prefetch, target: prefetchFx });
52
+ const result = {
53
+ $data: base.$data,
54
+ $error: base.$error,
55
+ $status: base.$status,
56
+ $isPending: base.$isPending,
57
+ $isFetching: base.$isFetching,
58
+ $isSuccess: base.$isSuccess,
59
+ $isError: base.$isError,
60
+ $isPlaceholderData: base.$isPlaceholderData,
61
+ $fetchStatus: base.$fetchStatus,
62
+ $observer: base.$observer,
63
+ $queryClient: base.$queryClient,
64
+ refresh: base.refresh,
65
+ prefetch,
66
+ mounted: base.mounted,
67
+ unmounted: base.unmounted
68
+ };
69
+ Object.defineProperty(result, "__createObserver", {
70
+ enumerable: false,
71
+ value: (qc, init) => new QueryObserver(qc, {
72
+ ...restOptions,
73
+ queryKey: init.queryKey,
74
+ enabled: init.enabled
75
+ })
76
+ });
77
+ Object.defineProperty(result, "__resolvedKey", {
78
+ enumerable: false,
79
+ value: base.$resolvedKey
80
+ });
81
+ Object.defineProperty(result, "__enabled", {
82
+ enumerable: false,
83
+ value: base.$enabled
84
+ });
85
+ return result;
86
+ }
87
+ function parseQueryArgs(arg1, arg2) {
88
+ if (arg2 !== void 0) {
89
+ return [arg1, arg2];
90
+ }
91
+ return [null, arg1];
92
+ }
93
+
94
+ export { createQuery };
95
+ //# sourceMappingURL=createQuery.js.map
96
+ //# sourceMappingURL=createQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/createQuery.ts"],"names":["enabled"],"mappings":"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","file":"createQuery.js","sourcesContent":["import { attach, createEvent, sample } from 'effector'\nimport { QueryObserver } from '@tanstack/query-core'\nimport type { QueryClient } from '@tanstack/query-core'\nimport { createBaseQuery, warnMissingName } from './createBaseQuery'\nimport { resolveReactiveRefetchInterval } from './resolve'\nimport type { CreateQueryOptions, QueryResult } from './types'\n\nexport function createQuery<\n TQueryFnData = unknown,\n TError = Error,\n TData = TQueryFnData,\n>(\n options: CreateQueryOptions<TQueryFnData, TError, TData>,\n): QueryResult<TData, TError>\nexport function createQuery<\n TQueryFnData = unknown,\n TError = Error,\n TData = TQueryFnData,\n>(\n queryClient: QueryClient,\n options: CreateQueryOptions<TQueryFnData, TError, TData>,\n): QueryResult<TData, TError>\nexport function createQuery<\n TQueryFnData = unknown,\n TError = Error,\n TData = TQueryFnData,\n>(\n arg1:\n | QueryClient\n | CreateQueryOptions<TQueryFnData, TError, TData>,\n arg2?: CreateQueryOptions<TQueryFnData, TError, TData>,\n): QueryResult<TData, TError> {\n const [explicitClient, options] = parseQueryArgs<TQueryFnData, TError, TData>(\n arg1,\n arg2,\n )\n const { queryKey, enabled, name, ...restOptions } = options\n\n if (!name) warnMissingName('createQuery')\n\n // If `refetchInterval` is a Store, pull it out for reactive wiring in\n // createBaseQuery — otherwise leave it in restOptions for the observer\n // constructor (handles plain values and function forms unchanged).\n const reactiveRefetchInterval = resolveReactiveRefetchInterval(\n (restOptions as { refetchInterval?: unknown }).refetchInterval,\n )\n if (reactiveRefetchInterval) {\n delete (restOptions as { refetchInterval?: unknown }).refetchInterval\n }\n\n const base = createBaseQuery<\n TData,\n TError,\n ReturnType<QueryObserver<TQueryFnData, TError, TData>['getCurrentResult']>,\n QueryObserver<TQueryFnData, TError, TData>\n >(\n explicitClient,\n { queryKey, enabled, name, reactiveRefetchInterval },\n {\n createObserver: (qc, { queryKey: key, enabled: isEnabled }) =>\n // Cast: restOptions's `refetchInterval` may still type as\n // `Store | number | false | fn`; the Store form is deleted at runtime\n // above, but TS can't narrow that here.\n new QueryObserver<TQueryFnData, TError, TData>(qc, {\n ...restOptions,\n queryKey: key,\n enabled: isEnabled,\n } as any),\n },\n )\n\n // Prefetch event: drives `queryClient.fetchQuery` directly (no Observer)\n // and **awaits** the result, so `allSettled(query.prefetch, { scope })` on\n // the server returns only after the cache has the data. Unlike `mounted`,\n // which kicks off a background subscription and resolves immediately, this\n // is the right primitive for SSR / route loaders. The current resolved key\n // + enabled is read from the scope via attach — reactive keys work.\n const prefetch = createEvent<void>()\n const prefetchFx = attach({\n source: {\n qc: base.$queryClient,\n key: base.$resolvedKey,\n enabled: base.$enabled,\n },\n effect: ({ qc, key, enabled }) => {\n if (!qc || !enabled) return\n return qc.fetchQuery({\n ...restOptions,\n queryKey: key,\n } as any)\n },\n })\n sample({ clock: prefetch, target: prefetchFx })\n\n // Lazy `observer` field for backward compatibility — returns the\n // default-scope observer (non-fork). Tests and advanced consumers that read\n // `query.observer` after `query.mounted()` see the live observer. For\n // fork-aware consumers, use `query.$observer` via `useUnit`.\n const result: QueryResult<TData, TError> = {\n $data: base.$data,\n $error: base.$error,\n $status: base.$status,\n $isPending: base.$isPending,\n $isFetching: base.$isFetching,\n $isSuccess: base.$isSuccess,\n $isError: base.$isError,\n $isPlaceholderData: base.$isPlaceholderData,\n $fetchStatus: base.$fetchStatus,\n $observer: base.$observer as unknown as QueryResult<\n TData,\n TError\n >['$observer'],\n $queryClient: base.$queryClient,\n refresh: base.refresh,\n prefetch,\n mounted: base.mounted,\n unmounted: base.unmounted,\n }\n\n // Internal: used by useSuspenseQuery to construct a transient observer\n // when the suspense hook renders before mountFx has populated the scope's\n // $observer (mountFx runs from useEffect, which is skipped while\n // suspended). Not part of the public API; not in TS types.\n Object.defineProperty(result, '__createObserver', {\n enumerable: false,\n value: (qc: QueryClient, init: { queryKey: any; enabled: boolean }) =>\n new QueryObserver<TQueryFnData, TError, TData>(qc, {\n ...restOptions,\n queryKey: init.queryKey,\n enabled: init.enabled,\n } as any),\n })\n Object.defineProperty(result, '__resolvedKey', {\n enumerable: false,\n value: base.$resolvedKey,\n })\n Object.defineProperty(result, '__enabled', {\n enumerable: false,\n value: base.$enabled,\n })\n\n return result\n}\n\nfunction parseQueryArgs<TQueryFnData, TError, TData>(\n arg1:\n | QueryClient\n | CreateQueryOptions<TQueryFnData, TError, TData>,\n arg2?: CreateQueryOptions<TQueryFnData, TError, TData>,\n): [QueryClient | null, CreateQueryOptions<TQueryFnData, TError, TData>] {\n if (arg2 !== undefined) {\n return [arg1 as QueryClient, arg2]\n }\n return [null, arg1 as CreateQueryOptions<TQueryFnData, TError, TData>]\n}\n"]}
package/dist/index.cjs ADDED
@@ -0,0 +1,36 @@
1
+ 'use strict';
2
+
3
+ var createQuery_cjs = require('./createQuery.cjs');
4
+ var createInfiniteQuery_cjs = require('./createInfiniteQuery.cjs');
5
+ var createMutation_cjs = require('./createMutation.cjs');
6
+ var createInvalidate_cjs = require('./createInvalidate.cjs');
7
+ var queryClient_cjs = require('./queryClient.cjs');
8
+
9
+
10
+
11
+ Object.defineProperty(exports, "createQuery", {
12
+ enumerable: true,
13
+ get: function () { return createQuery_cjs.createQuery; }
14
+ });
15
+ Object.defineProperty(exports, "createInfiniteQuery", {
16
+ enumerable: true,
17
+ get: function () { return createInfiniteQuery_cjs.createInfiniteQuery; }
18
+ });
19
+ Object.defineProperty(exports, "createMutation", {
20
+ enumerable: true,
21
+ get: function () { return createMutation_cjs.createMutation; }
22
+ });
23
+ Object.defineProperty(exports, "createInvalidate", {
24
+ enumerable: true,
25
+ get: function () { return createInvalidate_cjs.createInvalidate; }
26
+ });
27
+ Object.defineProperty(exports, "$queryClient", {
28
+ enumerable: true,
29
+ get: function () { return queryClient_cjs.$queryClient; }
30
+ });
31
+ Object.defineProperty(exports, "setQueryClient", {
32
+ enumerable: true,
33
+ get: function () { return queryClient_cjs.setQueryClient; }
34
+ });
35
+ //# sourceMappingURL=index.cjs.map
36
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs","sourcesContent":[]}
@@ -0,0 +1,8 @@
1
+ export { createQuery } from './createQuery.cjs';
2
+ export { createInfiniteQuery } from './createInfiniteQuery.cjs';
3
+ export { createMutation } from './createMutation.cjs';
4
+ export { CreateInvalidateOptions, createInvalidate } from './createInvalidate.cjs';
5
+ export { $queryClient, setQueryClient } from './queryClient.cjs';
6
+ export { CreateInfiniteQueryOptions, CreateMutationOptions, CreateQueryOptions, EffectorQueryKey, InfiniteQueryResult, MutationResult, MutationStatus, QueryResult, StoreOrValue } from './types.cjs';
7
+ import '@tanstack/query-core';
8
+ import 'effector';
@@ -0,0 +1,8 @@
1
+ export { createQuery } from './createQuery.js';
2
+ export { createInfiniteQuery } from './createInfiniteQuery.js';
3
+ export { createMutation } from './createMutation.js';
4
+ export { CreateInvalidateOptions, createInvalidate } from './createInvalidate.js';
5
+ export { $queryClient, setQueryClient } from './queryClient.js';
6
+ export { CreateInfiniteQueryOptions, CreateMutationOptions, CreateQueryOptions, EffectorQueryKey, InfiniteQueryResult, MutationResult, MutationStatus, QueryResult, StoreOrValue } from './types.js';
7
+ import '@tanstack/query-core';
8
+ import 'effector';
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export { createQuery } from './createQuery.js';
2
+ export { createInfiniteQuery } from './createInfiniteQuery.js';
3
+ export { createMutation } from './createMutation.js';
4
+ export { createInvalidate } from './createInvalidate.js';
5
+ export { $queryClient, setQueryClient } from './queryClient.js';
6
+ //# sourceMappingURL=index.js.map
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ var effector = require('effector');
4
+
5
+ // src/queryClient.ts
6
+ var $queryClient = effector.createStore(null, {
7
+ name: "@tanstack/query-effector.$queryClient",
8
+ sid: "@tanstack/query-effector.$queryClient",
9
+ // Carries a runtime-only object (`QueryClient` instance) — must not
10
+ // round-trip through `serialize(scope)`. Per-scope injection happens
11
+ // via `fork({ values: [[$queryClient, qc]] })` instead.
12
+ serialize: "ignore"
13
+ });
14
+ var setQueryClient = effector.createEvent();
15
+ $queryClient.on(setQueryClient, (_, qc) => qc);
16
+
17
+ exports.$queryClient = $queryClient;
18
+ exports.setQueryClient = setQueryClient;
19
+ //# sourceMappingURL=queryClient.cjs.map
20
+ //# sourceMappingURL=queryClient.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/queryClient.ts"],"names":["createStore","createEvent"],"mappings":";;;;;AAWO,IAAM,YAAA,GAAeA,qBAAgC,IAAA,EAAM;AAAA,EAChE,IAAA,EAAM,uCAAA;AAAA,EACN,GAAA,EAAK,uCAAA;AAAA;AAAA;AAAA;AAAA,EAIL,SAAA,EAAW;AACb,CAAC;AAEM,IAAM,iBAAiBC,oBAAA;AAE9B,YAAA,CAAa,EAAA,CAAG,cAAA,EAAgB,CAAC,CAAA,EAAG,OAAO,EAAE,CAAA","file":"queryClient.cjs","sourcesContent":["import { createEvent, createStore } from 'effector'\nimport type { QueryClient } from '@tanstack/query-core'\n\n/**\n * Holds the default `QueryClient` used when a factory (`createQuery`,\n * `createInfiniteQuery`, `createMutation`) is called without an explicit one.\n *\n * Per-scope isolation: under `fork({ values: [[$queryClient, qc]] })`, every\n * factory in that scope uses its own client. Observers are created lazily on\n * mount, reading this store via `attach`, so each scope gets its own observer.\n */\nexport const $queryClient = createStore<QueryClient | null>(null, {\n name: '@tanstack/query-effector.$queryClient',\n sid: '@tanstack/query-effector.$queryClient',\n // Carries a runtime-only object (`QueryClient` instance) — must not\n // round-trip through `serialize(scope)`. Per-scope injection happens\n // via `fork({ values: [[$queryClient, qc]] })` instead.\n serialize: 'ignore',\n})\n\nexport const setQueryClient = createEvent<QueryClient>()\n\n$queryClient.on(setQueryClient, (_, qc) => qc)\n"]}
@@ -0,0 +1,15 @@
1
+ import * as effector from 'effector';
2
+ import { QueryClient } from '@tanstack/query-core';
3
+
4
+ /**
5
+ * Holds the default `QueryClient` used when a factory (`createQuery`,
6
+ * `createInfiniteQuery`, `createMutation`) is called without an explicit one.
7
+ *
8
+ * Per-scope isolation: under `fork({ values: [[$queryClient, qc]] })`, every
9
+ * factory in that scope uses its own client. Observers are created lazily on
10
+ * mount, reading this store via `attach`, so each scope gets its own observer.
11
+ */
12
+ declare const $queryClient: effector.StoreWritable<QueryClient | null>;
13
+ declare const setQueryClient: effector.EventCallable<QueryClient>;
14
+
15
+ export { $queryClient, setQueryClient };
@@ -0,0 +1,15 @@
1
+ import * as effector from 'effector';
2
+ import { QueryClient } from '@tanstack/query-core';
3
+
4
+ /**
5
+ * Holds the default `QueryClient` used when a factory (`createQuery`,
6
+ * `createInfiniteQuery`, `createMutation`) is called without an explicit one.
7
+ *
8
+ * Per-scope isolation: under `fork({ values: [[$queryClient, qc]] })`, every
9
+ * factory in that scope uses its own client. Observers are created lazily on
10
+ * mount, reading this store via `attach`, so each scope gets its own observer.
11
+ */
12
+ declare const $queryClient: effector.StoreWritable<QueryClient | null>;
13
+ declare const setQueryClient: effector.EventCallable<QueryClient>;
14
+
15
+ export { $queryClient, setQueryClient };
@@ -0,0 +1,17 @@
1
+ import { createStore, createEvent } from 'effector';
2
+
3
+ // src/queryClient.ts
4
+ var $queryClient = createStore(null, {
5
+ name: "@tanstack/query-effector.$queryClient",
6
+ sid: "@tanstack/query-effector.$queryClient",
7
+ // Carries a runtime-only object (`QueryClient` instance) — must not
8
+ // round-trip through `serialize(scope)`. Per-scope injection happens
9
+ // via `fork({ values: [[$queryClient, qc]] })` instead.
10
+ serialize: "ignore"
11
+ });
12
+ var setQueryClient = createEvent();
13
+ $queryClient.on(setQueryClient, (_, qc) => qc);
14
+
15
+ export { $queryClient, setQueryClient };
16
+ //# sourceMappingURL=queryClient.js.map
17
+ //# sourceMappingURL=queryClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/queryClient.ts"],"names":[],"mappings":";;;AAWO,IAAM,YAAA,GAAe,YAAgC,IAAA,EAAM;AAAA,EAChE,IAAA,EAAM,uCAAA;AAAA,EACN,GAAA,EAAK,uCAAA;AAAA;AAAA;AAAA;AAAA,EAIL,SAAA,EAAW;AACb,CAAC;AAEM,IAAM,iBAAiB,WAAA;AAE9B,YAAA,CAAa,EAAA,CAAG,cAAA,EAAgB,CAAC,CAAA,EAAG,OAAO,EAAE,CAAA","file":"queryClient.js","sourcesContent":["import { createEvent, createStore } from 'effector'\nimport type { QueryClient } from '@tanstack/query-core'\n\n/**\n * Holds the default `QueryClient` used when a factory (`createQuery`,\n * `createInfiniteQuery`, `createMutation`) is called without an explicit one.\n *\n * Per-scope isolation: under `fork({ values: [[$queryClient, qc]] })`, every\n * factory in that scope uses its own client. Observers are created lazily on\n * mount, reading this store via `attach`, so each scope gets its own observer.\n */\nexport const $queryClient = createStore<QueryClient | null>(null, {\n name: '@tanstack/query-effector.$queryClient',\n sid: '@tanstack/query-effector.$queryClient',\n // Carries a runtime-only object (`QueryClient` instance) — must not\n // round-trip through `serialize(scope)`. Per-scope injection happens\n // via `fork({ values: [[$queryClient, qc]] })` instead.\n serialize: 'ignore',\n})\n\nexport const setQueryClient = createEvent<QueryClient>()\n\n$queryClient.on(setQueryClient, (_, qc) => qc)\n"]}