UNPKG

@trpc/react-query

Version:

The tRPC React library

772 lines (761 loc) • 39.1 kB
import { __commonJS, __toESM, getMutationKeyInternal, getQueryKeyInternal, require_objectSpread2 } from "./getQueryKey-BY58RNzP.mjs"; import { TRPCUntypedClient, createTRPCClient, createTRPCClientProxy, getUntypedClient } from "@trpc/client"; import { QueryClient, hashKey, infiniteQueryOptions, queryOptions, skipToken, useInfiniteQuery, useMutation, usePrefetchInfiniteQuery, usePrefetchQuery, useQueries, useQuery, useSuspenseInfiniteQuery, useSuspenseQueries, useSuspenseQuery } from "@tanstack/react-query"; import { createFlatProxy, createRecursiveProxy, isAsyncIterable } from "@trpc/server/unstable-core-do-not-import"; import * as React$2 from "react"; import * as React$1 from "react"; import * as React from "react"; import { jsx } from "react/jsx-runtime"; //#region src/shared/proxy/decorationProxy.ts /** * Create proxy for decorating procedures * @internal */ function createReactDecoration(hooks) { return createRecursiveProxy(({ path, args }) => { var _rest$; const pathCopy = [...path]; const lastArg = pathCopy.pop(); if (lastArg === "useMutation") return hooks[lastArg](pathCopy, ...args); if (lastArg === "_def") return { path: pathCopy }; const [input, ...rest] = args; const opts = (_rest$ = rest[0]) !== null && _rest$ !== void 0 ? _rest$ : {}; return hooks[lastArg](pathCopy, input, opts); }); } //#endregion //#region src/internals/context.tsx var _React$createContext; const contextProps = [ "client", "ssrContext", "ssrState", "abortOnUnmount" ]; const TRPCContext = (_React$createContext = React$2.createContext) === null || _React$createContext === void 0 ? void 0 : _React$createContext.call(React$2, null); //#endregion //#region src/shared/proxy/utilsProxy.ts const getQueryType = (utilName) => { switch (utilName) { case "queryOptions": case "fetch": case "ensureData": case "prefetch": case "getData": case "setData": case "setQueriesData": return "query"; case "infiniteQueryOptions": case "fetchInfinite": case "prefetchInfinite": case "getInfiniteData": case "setInfiniteData": return "infinite"; case "setMutationDefaults": case "getMutationDefaults": case "isMutating": case "cancel": case "invalidate": case "refetch": case "reset": return "any"; } }; /** * @internal */ function createRecursiveUtilsProxy(context) { return createRecursiveProxy((opts) => { const path = [...opts.path]; const utilName = path.pop(); const args = [...opts.args]; const input = args.shift(); const queryType = getQueryType(utilName); const queryKey = getQueryKeyInternal(path, input, queryType); const contextMap = { infiniteQueryOptions: () => context.infiniteQueryOptions(path, queryKey, args[0]), queryOptions: () => context.queryOptions(path, queryKey, ...args), fetch: () => context.fetchQuery(queryKey, ...args), fetchInfinite: () => context.fetchInfiniteQuery(queryKey, args[0]), prefetch: () => context.prefetchQuery(queryKey, ...args), prefetchInfinite: () => context.prefetchInfiniteQuery(queryKey, args[0]), ensureData: () => context.ensureQueryData(queryKey, ...args), invalidate: () => context.invalidateQueries(queryKey, ...args), reset: () => context.resetQueries(queryKey, ...args), refetch: () => context.refetchQueries(queryKey, ...args), cancel: () => context.cancelQuery(queryKey, ...args), setData: () => { context.setQueryData(queryKey, args[0], args[1]); }, setQueriesData: () => context.setQueriesData(queryKey, args[0], args[1], args[2]), setInfiniteData: () => { context.setInfiniteQueryData(queryKey, args[0], args[1]); }, getData: () => context.getQueryData(queryKey), getInfiniteData: () => context.getInfiniteQueryData(queryKey), setMutationDefaults: () => context.setMutationDefaults(getMutationKeyInternal(path), input), getMutationDefaults: () => context.getMutationDefaults(getMutationKeyInternal(path)), isMutating: () => context.isMutating({ mutationKey: getMutationKeyInternal(path) }) }; return contextMap[utilName](); }); } /** * @internal */ function createReactQueryUtils(context) { const clientProxy = createTRPCClientProxy(context.client); const proxy = createRecursiveUtilsProxy(context); return createFlatProxy((key) => { const contextName = key; if (contextName === "client") return clientProxy; if (contextProps.includes(contextName)) return context[contextName]; return proxy[key]; }); } /** * @internal */ function createQueryUtilsProxy(context) { return createRecursiveUtilsProxy(context); } //#endregion //#region src/shared/proxy/useQueriesProxy.ts var import_objectSpread2$3 = __toESM(require_objectSpread2(), 1); /** * Create proxy for `useQueries` options * @internal */ function createUseQueries(client) { const untypedClient = client instanceof TRPCUntypedClient ? client : getUntypedClient(client); return createRecursiveProxy((opts) => { const arrayPath = opts.path; const dotPath = arrayPath.join("."); const [input, _opts] = opts.args; const options = (0, import_objectSpread2$3.default)({ queryKey: getQueryKeyInternal(arrayPath, input, "query"), queryFn: () => { return untypedClient.query(dotPath, input, _opts === null || _opts === void 0 ? void 0 : _opts.trpc); } }, _opts); return options; }); } //#endregion //#region src/internals/getClientArgs.ts var import_objectSpread2$2 = __toESM(require_objectSpread2(), 1); /** * @internal */ function getClientArgs(queryKey, opts, infiniteParams) { var _queryKey$; const path = queryKey[0]; let input = (_queryKey$ = queryKey[1]) === null || _queryKey$ === void 0 ? void 0 : _queryKey$.input; if (infiniteParams) { var _input; input = (0, import_objectSpread2$2.default)((0, import_objectSpread2$2.default)((0, import_objectSpread2$2.default)({}, (_input = input) !== null && _input !== void 0 ? _input : {}), infiniteParams.pageParam ? { cursor: infiniteParams.pageParam } : {}), {}, { direction: infiniteParams.direction }); } return [ path.join("."), input, opts === null || opts === void 0 ? void 0 : opts.trpc ]; } //#endregion //#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/asyncIterator.js var require_asyncIterator = __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/asyncIterator.js"(exports, module) { function _asyncIterator$1(r) { var n, t, o, e = 2; for ("undefined" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) { if (t && null != (n = r[t])) return n.call(r); if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r)); t = "@@asyncIterator", o = "@@iterator"; } throw new TypeError("Object is not async iterable"); } function AsyncFromSyncIterator(r) { function AsyncFromSyncIteratorContinuation(r$1) { if (Object(r$1) !== r$1) return Promise.reject(new TypeError(r$1 + " is not an object.")); var n = r$1.done; return Promise.resolve(r$1.value).then(function(r$2) { return { value: r$2, done: n }; }); } return AsyncFromSyncIterator = function AsyncFromSyncIterator$1(r$1) { this.s = r$1, this.n = r$1.next; }, AsyncFromSyncIterator.prototype = { s: null, n: null, next: function next() { return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); }, "return": function _return(r$1) { var n = this.s["return"]; return void 0 === n ? Promise.resolve({ value: r$1, done: !0 }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); }, "throw": function _throw(r$1) { var n = this.s["return"]; return void 0 === n ? Promise.reject(r$1) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); } }, new AsyncFromSyncIterator(r); } module.exports = _asyncIterator$1, module.exports.__esModule = true, module.exports["default"] = module.exports; } }); //#endregion //#region src/internals/trpcResult.ts var import_asyncIterator = __toESM(require_asyncIterator(), 1); function createTRPCOptionsResult(value) { const path = value.path.join("."); return { path }; } /** * Makes a stable reference of the `trpc` prop */ function useHookResult(value) { const result = createTRPCOptionsResult(value); return React$1.useMemo(() => result, [result]); } /** * @internal */ async function buildQueryFromAsyncIterable(asyncIterable, queryClient, queryKey) { const queryCache = queryClient.getQueryCache(); const query = queryCache.build(queryClient, { queryKey }); query.setState({ data: [], status: "success" }); const aggregate = []; var _iteratorAbruptCompletion = false; var _didIteratorError = false; var _iteratorError; try { for (var _iterator = (0, import_asyncIterator.default)(asyncIterable), _step; _iteratorAbruptCompletion = !(_step = await _iterator.next()).done; _iteratorAbruptCompletion = false) { const value = _step.value; { aggregate.push(value); query.setState({ data: [...aggregate] }); } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (_iteratorAbruptCompletion && _iterator.return != null) await _iterator.return(); } finally { if (_didIteratorError) throw _iteratorError; } } return aggregate; } //#endregion //#region src/utils/createUtilityFunctions.ts var import_objectSpread2$1 = __toESM(require_objectSpread2(), 1); /** * Creates a set of utility functions that can be used to interact with `react-query` * @param opts the `TRPCClient` and `QueryClient` to use * @returns a set of utility functions that can be used to interact with `react-query` * @internal */ function createUtilityFunctions(opts) { const { client, queryClient } = opts; const untypedClient = client instanceof TRPCUntypedClient ? client : getUntypedClient(client); return { infiniteQueryOptions: (path, queryKey, opts$1) => { var _queryKey$, _ref; const inputIsSkipToken = ((_queryKey$ = queryKey[1]) === null || _queryKey$ === void 0 ? void 0 : _queryKey$.input) === skipToken; const queryFn = async (queryFnContext) => { var _opts$trpc; const actualOpts = (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, opts$1), {}, { trpc: (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, opts$1 === null || opts$1 === void 0 ? void 0 : opts$1.trpc), (opts$1 === null || opts$1 === void 0 || (_opts$trpc = opts$1.trpc) === null || _opts$trpc === void 0 ? void 0 : _opts$trpc.abortOnUnmount) ? { signal: queryFnContext.signal } : { signal: null }) }); const result = await untypedClient.query(...getClientArgs(queryKey, actualOpts, { direction: queryFnContext.direction, pageParam: queryFnContext.pageParam })); return result; }; return Object.assign(infiniteQueryOptions((0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, opts$1), {}, { initialData: opts$1 === null || opts$1 === void 0 ? void 0 : opts$1.initialData, queryKey, queryFn: inputIsSkipToken ? skipToken : queryFn, initialPageParam: (_ref = opts$1 === null || opts$1 === void 0 ? void 0 : opts$1.initialCursor) !== null && _ref !== void 0 ? _ref : null })), { trpc: createTRPCOptionsResult({ path }) }); }, queryOptions: (path, queryKey, opts$1) => { var _queryKey$2; const inputIsSkipToken = ((_queryKey$2 = queryKey[1]) === null || _queryKey$2 === void 0 ? void 0 : _queryKey$2.input) === skipToken; const queryFn = async (queryFnContext) => { var _opts$trpc2; const actualOpts = (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, opts$1), {}, { trpc: (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, opts$1 === null || opts$1 === void 0 ? void 0 : opts$1.trpc), (opts$1 === null || opts$1 === void 0 || (_opts$trpc2 = opts$1.trpc) === null || _opts$trpc2 === void 0 ? void 0 : _opts$trpc2.abortOnUnmount) ? { signal: queryFnContext.signal } : { signal: null }) }); const result = await untypedClient.query(...getClientArgs(queryKey, actualOpts)); if (isAsyncIterable(result)) return buildQueryFromAsyncIterable(result, queryClient, queryKey); return result; }; return Object.assign(queryOptions((0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, opts$1), {}, { initialData: opts$1 === null || opts$1 === void 0 ? void 0 : opts$1.initialData, queryKey, queryFn: inputIsSkipToken ? skipToken : queryFn })), { trpc: createTRPCOptionsResult({ path }) }); }, fetchQuery: (queryKey, opts$1) => { return queryClient.fetchQuery((0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, opts$1), {}, { queryKey, queryFn: () => untypedClient.query(...getClientArgs(queryKey, opts$1)) })); }, fetchInfiniteQuery: (queryKey, opts$1) => { var _opts$initialCursor; return queryClient.fetchInfiniteQuery((0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, opts$1), {}, { queryKey, queryFn: ({ pageParam, direction }) => { return untypedClient.query(...getClientArgs(queryKey, opts$1, { pageParam, direction })); }, initialPageParam: (_opts$initialCursor = opts$1 === null || opts$1 === void 0 ? void 0 : opts$1.initialCursor) !== null && _opts$initialCursor !== void 0 ? _opts$initialCursor : null })); }, prefetchQuery: (queryKey, opts$1) => { return queryClient.prefetchQuery((0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, opts$1), {}, { queryKey, queryFn: () => untypedClient.query(...getClientArgs(queryKey, opts$1)) })); }, prefetchInfiniteQuery: (queryKey, opts$1) => { var _opts$initialCursor2; return queryClient.prefetchInfiniteQuery((0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, opts$1), {}, { queryKey, queryFn: ({ pageParam, direction }) => { return untypedClient.query(...getClientArgs(queryKey, opts$1, { pageParam, direction })); }, initialPageParam: (_opts$initialCursor2 = opts$1 === null || opts$1 === void 0 ? void 0 : opts$1.initialCursor) !== null && _opts$initialCursor2 !== void 0 ? _opts$initialCursor2 : null })); }, ensureQueryData: (queryKey, opts$1) => { return queryClient.ensureQueryData((0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, opts$1), {}, { queryKey, queryFn: () => untypedClient.query(...getClientArgs(queryKey, opts$1)) })); }, invalidateQueries: (queryKey, filters, options) => { return queryClient.invalidateQueries((0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, filters), {}, { queryKey }), options); }, resetQueries: (queryKey, filters, options) => { return queryClient.resetQueries((0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, filters), {}, { queryKey }), options); }, refetchQueries: (queryKey, filters, options) => { return queryClient.refetchQueries((0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, filters), {}, { queryKey }), options); }, cancelQuery: (queryKey, options) => { return queryClient.cancelQueries({ queryKey }, options); }, setQueryData: (queryKey, updater, options) => { return queryClient.setQueryData(queryKey, updater, options); }, setQueriesData: (queryKey, filters, updater, options) => { return queryClient.setQueriesData((0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, filters), {}, { queryKey }), updater, options); }, getQueryData: (queryKey) => { return queryClient.getQueryData(queryKey); }, setInfiniteQueryData: (queryKey, updater, options) => { return queryClient.setQueryData(queryKey, updater, options); }, getInfiniteQueryData: (queryKey) => { return queryClient.getQueryData(queryKey); }, setMutationDefaults: (mutationKey, options) => { const path = mutationKey[0]; const canonicalMutationFn = (input) => { return untypedClient.mutation(...getClientArgs([path, { input }], opts)); }; return queryClient.setMutationDefaults(mutationKey, typeof options === "function" ? options({ canonicalMutationFn }) : options); }, getMutationDefaults: (mutationKey) => { return queryClient.getMutationDefaults(mutationKey); }, isMutating: (filters) => { return queryClient.isMutating((0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, filters), {}, { exact: true })); } }; } //#endregion //#region src/shared/hooks/createHooksInternal.tsx var import_objectSpread2 = __toESM(require_objectSpread2()); const trackResult = (result, onTrackResult) => { const trackedResult = new Proxy(result, { get(target, prop) { onTrackResult(prop); return target[prop]; } }); return trackedResult; }; /** * @internal */ function createRootHooks(config) { var _config$overrides$use, _config$overrides, _config$context; const mutationSuccessOverride = (_config$overrides$use = config === null || config === void 0 || (_config$overrides = config.overrides) === null || _config$overrides === void 0 || (_config$overrides = _config$overrides.useMutation) === null || _config$overrides === void 0 ? void 0 : _config$overrides.onSuccess) !== null && _config$overrides$use !== void 0 ? _config$overrides$use : (options) => options.originalFn(); const Context = (_config$context = config === null || config === void 0 ? void 0 : config.context) !== null && _config$context !== void 0 ? _config$context : TRPCContext; const createClient = createTRPCClient; const TRPCProvider = (props) => { var _props$ssrState; const { abortOnUnmount = false, queryClient, ssrContext } = props; const [ssrState, setSSRState] = React.useState((_props$ssrState = props.ssrState) !== null && _props$ssrState !== void 0 ? _props$ssrState : false); const client = props.client instanceof TRPCUntypedClient ? props.client : getUntypedClient(props.client); const fns = React.useMemo(() => createUtilityFunctions({ client, queryClient }), [client, queryClient]); const contextValue = React.useMemo(() => (0, import_objectSpread2.default)({ abortOnUnmount, queryClient, client, ssrContext: ssrContext !== null && ssrContext !== void 0 ? ssrContext : null, ssrState }, fns), [ abortOnUnmount, client, fns, queryClient, ssrContext, ssrState ]); React.useEffect(() => { setSSRState((state) => state ? "mounted" : false); }, []); return /* @__PURE__ */ jsx(Context.Provider, { value: contextValue, children: props.children }); }; function useContext() { const context = React.useContext(Context); if (!context) throw new Error("Unable to find tRPC Context. Did you forget to wrap your App inside `withTRPC` HoC?"); return context; } /** * Hack to make sure errors return `status`='error` when doing SSR * @see https://github.com/trpc/trpc/pull/1645 */ function useSSRQueryOptionsIfNeeded(queryKey, opts) { var _queryClient$getQuery; const { queryClient, ssrState } = useContext(); return ssrState && ssrState !== "mounted" && ((_queryClient$getQuery = queryClient.getQueryCache().find({ queryKey })) === null || _queryClient$getQuery === void 0 ? void 0 : _queryClient$getQuery.state.status) === "error" ? (0, import_objectSpread2.default)({ retryOnMount: false }, opts) : opts; } function useQuery$1(path, input, opts) { var _opts$trpc, _opts$enabled, _ref, _opts$trpc$abortOnUnm, _opts$trpc2; const context = useContext(); const { abortOnUnmount, client, ssrState, queryClient, prefetchQuery } = context; const queryKey = getQueryKeyInternal(path, input, "query"); const defaultOpts = queryClient.getQueryDefaults(queryKey); const isInputSkipToken = input === skipToken; if (typeof window === "undefined" && ssrState === "prepass" && (opts === null || opts === void 0 || (_opts$trpc = opts.trpc) === null || _opts$trpc === void 0 ? void 0 : _opts$trpc.ssr) !== false && ((_opts$enabled = opts === null || opts === void 0 ? void 0 : opts.enabled) !== null && _opts$enabled !== void 0 ? _opts$enabled : defaultOpts === null || defaultOpts === void 0 ? void 0 : defaultOpts.enabled) !== false && !isInputSkipToken && !queryClient.getQueryCache().find({ queryKey })) prefetchQuery(queryKey, opts); const ssrOpts = useSSRQueryOptionsIfNeeded(queryKey, (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, defaultOpts), opts)); const shouldAbortOnUnmount = (_ref = (_opts$trpc$abortOnUnm = opts === null || opts === void 0 || (_opts$trpc2 = opts.trpc) === null || _opts$trpc2 === void 0 ? void 0 : _opts$trpc2.abortOnUnmount) !== null && _opts$trpc$abortOnUnm !== void 0 ? _opts$trpc$abortOnUnm : config === null || config === void 0 ? void 0 : config.abortOnUnmount) !== null && _ref !== void 0 ? _ref : abortOnUnmount; const hook = useQuery((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, ssrOpts), {}, { queryKey, queryFn: isInputSkipToken ? input : async (queryFunctionContext) => { const actualOpts = (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, ssrOpts), {}, { trpc: (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, ssrOpts === null || ssrOpts === void 0 ? void 0 : ssrOpts.trpc), shouldAbortOnUnmount ? { signal: queryFunctionContext.signal } : { signal: null }) }); const result = await client.query(...getClientArgs(queryKey, actualOpts)); if (isAsyncIterable(result)) return buildQueryFromAsyncIterable(result, queryClient, queryKey); return result; } }), queryClient); hook.trpc = useHookResult({ path }); return hook; } function usePrefetchQuery$1(path, input, opts) { var _ref2, _opts$trpc$abortOnUnm2, _opts$trpc3; const context = useContext(); const queryKey = getQueryKeyInternal(path, input, "query"); const isInputSkipToken = input === skipToken; const shouldAbortOnUnmount = (_ref2 = (_opts$trpc$abortOnUnm2 = opts === null || opts === void 0 || (_opts$trpc3 = opts.trpc) === null || _opts$trpc3 === void 0 ? void 0 : _opts$trpc3.abortOnUnmount) !== null && _opts$trpc$abortOnUnm2 !== void 0 ? _opts$trpc$abortOnUnm2 : config === null || config === void 0 ? void 0 : config.abortOnUnmount) !== null && _ref2 !== void 0 ? _ref2 : context.abortOnUnmount; usePrefetchQuery((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, { queryKey, queryFn: isInputSkipToken ? input : (queryFunctionContext) => { const actualOpts = { trpc: (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts === null || opts === void 0 ? void 0 : opts.trpc), shouldAbortOnUnmount ? { signal: queryFunctionContext.signal } : {}) }; return context.client.query(...getClientArgs(queryKey, actualOpts)); } })); } function useSuspenseQuery$1(path, input, opts) { var _ref3, _opts$trpc$abortOnUnm3, _opts$trpc4; const context = useContext(); const queryKey = getQueryKeyInternal(path, input, "query"); const shouldAbortOnUnmount = (_ref3 = (_opts$trpc$abortOnUnm3 = opts === null || opts === void 0 || (_opts$trpc4 = opts.trpc) === null || _opts$trpc4 === void 0 ? void 0 : _opts$trpc4.abortOnUnmount) !== null && _opts$trpc$abortOnUnm3 !== void 0 ? _opts$trpc$abortOnUnm3 : config === null || config === void 0 ? void 0 : config.abortOnUnmount) !== null && _ref3 !== void 0 ? _ref3 : context.abortOnUnmount; const hook = useSuspenseQuery((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, { queryKey, queryFn: (queryFunctionContext) => { const actualOpts = (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, { trpc: (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts === null || opts === void 0 ? void 0 : opts.trpc), shouldAbortOnUnmount ? { signal: queryFunctionContext.signal } : { signal: null }) }); return context.client.query(...getClientArgs(queryKey, actualOpts)); } }), context.queryClient); hook.trpc = useHookResult({ path }); return [hook.data, hook]; } function useMutation$1(path, opts) { const { client, queryClient } = useContext(); const mutationKey = getMutationKeyInternal(path); const defaultOpts = queryClient.defaultMutationOptions(queryClient.getMutationDefaults(mutationKey)); const hook = useMutation((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, { mutationKey, mutationFn: (input) => { return client.mutation(...getClientArgs([path, { input }], opts)); }, onSuccess(...args) { var _ref4, _opts$meta; const originalFn = () => { var _opts$onSuccess, _opts$onSuccess2, _defaultOpts$onSucces; return (_opts$onSuccess = opts === null || opts === void 0 || (_opts$onSuccess2 = opts.onSuccess) === null || _opts$onSuccess2 === void 0 ? void 0 : _opts$onSuccess2.call(opts, ...args)) !== null && _opts$onSuccess !== void 0 ? _opts$onSuccess : defaultOpts === null || defaultOpts === void 0 || (_defaultOpts$onSucces = defaultOpts.onSuccess) === null || _defaultOpts$onSucces === void 0 ? void 0 : _defaultOpts$onSucces.call(defaultOpts, ...args); }; return mutationSuccessOverride({ originalFn, queryClient, meta: (_ref4 = (_opts$meta = opts === null || opts === void 0 ? void 0 : opts.meta) !== null && _opts$meta !== void 0 ? _opts$meta : defaultOpts === null || defaultOpts === void 0 ? void 0 : defaultOpts.meta) !== null && _ref4 !== void 0 ? _ref4 : {} }); } }), queryClient); hook.trpc = useHookResult({ path }); return hook; } const initialStateIdle = { data: void 0, error: null, status: "idle" }; const initialStateConnecting = { data: void 0, error: null, status: "connecting" }; /* istanbul ignore next -- @preserve */ function useSubscription(path, input, opts) { var _opts$enabled2; const enabled = (_opts$enabled2 = opts === null || opts === void 0 ? void 0 : opts.enabled) !== null && _opts$enabled2 !== void 0 ? _opts$enabled2 : input !== skipToken; const queryKey = hashKey(getQueryKeyInternal(path, input, "any")); const { client } = useContext(); const optsRef = React.useRef(opts); React.useEffect(() => { optsRef.current = opts; }); const [trackedProps] = React.useState(new Set([])); const addTrackedProp = React.useCallback((key) => { trackedProps.add(key); }, [trackedProps]); const currentSubscriptionRef = React.useRef(null); const updateState = React.useCallback((callback) => { const prev = resultRef.current; const next = resultRef.current = callback(prev); let shouldUpdate = false; for (const key of trackedProps) if (prev[key] !== next[key]) { shouldUpdate = true; break; } if (shouldUpdate) setState(trackResult(next, addTrackedProp)); }, [addTrackedProp, trackedProps]); const reset = React.useCallback(() => { var _currentSubscriptionR; (_currentSubscriptionR = currentSubscriptionRef.current) === null || _currentSubscriptionR === void 0 || _currentSubscriptionR.unsubscribe(); if (!enabled) { updateState(() => (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, initialStateIdle), {}, { reset })); return; } updateState(() => (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, initialStateConnecting), {}, { reset })); const subscription = client.subscription(path.join("."), input !== null && input !== void 0 ? input : void 0, { onStarted: () => { var _optsRef$current$onSt, _optsRef$current; (_optsRef$current$onSt = (_optsRef$current = optsRef.current).onStarted) === null || _optsRef$current$onSt === void 0 || _optsRef$current$onSt.call(_optsRef$current); updateState((prev) => (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, prev), {}, { status: "pending", error: null })); }, onData: (data) => { var _optsRef$current$onDa, _optsRef$current2; (_optsRef$current$onDa = (_optsRef$current2 = optsRef.current).onData) === null || _optsRef$current$onDa === void 0 || _optsRef$current$onDa.call(_optsRef$current2, data); updateState((prev) => (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, prev), {}, { status: "pending", data, error: null })); }, onError: (error) => { var _optsRef$current$onEr, _optsRef$current3; (_optsRef$current$onEr = (_optsRef$current3 = optsRef.current).onError) === null || _optsRef$current$onEr === void 0 || _optsRef$current$onEr.call(_optsRef$current3, error); updateState((prev) => (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, prev), {}, { status: "error", error })); }, onConnectionStateChange: (result) => { updateState((prev) => { switch (result.state) { case "idle": return (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, prev), {}, { status: result.state, error: null, data: void 0 }); case "connecting": return (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, prev), {}, { error: result.error, status: result.state }); case "pending": return prev; } }); }, onComplete: () => { var _optsRef$current$onCo, _optsRef$current4; (_optsRef$current$onCo = (_optsRef$current4 = optsRef.current).onComplete) === null || _optsRef$current$onCo === void 0 || _optsRef$current$onCo.call(_optsRef$current4); updateState((prev) => (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, prev), {}, { status: "idle", error: null, data: void 0 })); } }); currentSubscriptionRef.current = subscription; }, [ client, queryKey, enabled, updateState ]); React.useEffect(() => { reset(); return () => { var _currentSubscriptionR2; (_currentSubscriptionR2 = currentSubscriptionRef.current) === null || _currentSubscriptionR2 === void 0 || _currentSubscriptionR2.unsubscribe(); }; }, [reset]); const resultRef = React.useRef(enabled ? (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, initialStateConnecting), {}, { reset }) : (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, initialStateIdle), {}, { reset })); const [state, setState] = React.useState(trackResult(resultRef.current, addTrackedProp)); return state; } function useInfiniteQuery$1(path, input, opts) { var _opts$trpc5, _opts$enabled3, _opts$trpc$abortOnUnm4, _opts$trpc6, _opts$initialCursor; const { client, ssrState, prefetchInfiniteQuery, queryClient, abortOnUnmount } = useContext(); const queryKey = getQueryKeyInternal(path, input, "infinite"); const defaultOpts = queryClient.getQueryDefaults(queryKey); const isInputSkipToken = input === skipToken; if (typeof window === "undefined" && ssrState === "prepass" && (opts === null || opts === void 0 || (_opts$trpc5 = opts.trpc) === null || _opts$trpc5 === void 0 ? void 0 : _opts$trpc5.ssr) !== false && ((_opts$enabled3 = opts === null || opts === void 0 ? void 0 : opts.enabled) !== null && _opts$enabled3 !== void 0 ? _opts$enabled3 : defaultOpts === null || defaultOpts === void 0 ? void 0 : defaultOpts.enabled) !== false && !isInputSkipToken && !queryClient.getQueryCache().find({ queryKey })) prefetchInfiniteQuery(queryKey, (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, defaultOpts), opts)); const ssrOpts = useSSRQueryOptionsIfNeeded(queryKey, (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, defaultOpts), opts)); const shouldAbortOnUnmount = (_opts$trpc$abortOnUnm4 = opts === null || opts === void 0 || (_opts$trpc6 = opts.trpc) === null || _opts$trpc6 === void 0 ? void 0 : _opts$trpc6.abortOnUnmount) !== null && _opts$trpc$abortOnUnm4 !== void 0 ? _opts$trpc$abortOnUnm4 : abortOnUnmount; const hook = useInfiniteQuery((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, ssrOpts), {}, { initialPageParam: (_opts$initialCursor = opts.initialCursor) !== null && _opts$initialCursor !== void 0 ? _opts$initialCursor : null, persister: opts.persister, queryKey, queryFn: isInputSkipToken ? input : (queryFunctionContext) => { var _queryFunctionContext; const actualOpts = (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, ssrOpts), {}, { trpc: (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, ssrOpts === null || ssrOpts === void 0 ? void 0 : ssrOpts.trpc), shouldAbortOnUnmount ? { signal: queryFunctionContext.signal } : { signal: null }) }); return client.query(...getClientArgs(queryKey, actualOpts, { pageParam: (_queryFunctionContext = queryFunctionContext.pageParam) !== null && _queryFunctionContext !== void 0 ? _queryFunctionContext : opts.initialCursor, direction: queryFunctionContext.direction })); } }), queryClient); hook.trpc = useHookResult({ path }); return hook; } function usePrefetchInfiniteQuery$1(path, input, opts) { var _opts$trpc$abortOnUnm5, _opts$trpc7, _opts$initialCursor2; const context = useContext(); const queryKey = getQueryKeyInternal(path, input, "infinite"); const defaultOpts = context.queryClient.getQueryDefaults(queryKey); const isInputSkipToken = input === skipToken; const ssrOpts = useSSRQueryOptionsIfNeeded(queryKey, (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, defaultOpts), opts)); const shouldAbortOnUnmount = (_opts$trpc$abortOnUnm5 = opts === null || opts === void 0 || (_opts$trpc7 = opts.trpc) === null || _opts$trpc7 === void 0 ? void 0 : _opts$trpc7.abortOnUnmount) !== null && _opts$trpc$abortOnUnm5 !== void 0 ? _opts$trpc$abortOnUnm5 : context.abortOnUnmount; usePrefetchInfiniteQuery((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, { initialPageParam: (_opts$initialCursor2 = opts.initialCursor) !== null && _opts$initialCursor2 !== void 0 ? _opts$initialCursor2 : null, queryKey, queryFn: isInputSkipToken ? input : (queryFunctionContext) => { var _queryFunctionContext2; const actualOpts = (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, ssrOpts), {}, { trpc: (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, ssrOpts === null || ssrOpts === void 0 ? void 0 : ssrOpts.trpc), shouldAbortOnUnmount ? { signal: queryFunctionContext.signal } : {}) }); return context.client.query(...getClientArgs(queryKey, actualOpts, { pageParam: (_queryFunctionContext2 = queryFunctionContext.pageParam) !== null && _queryFunctionContext2 !== void 0 ? _queryFunctionContext2 : opts.initialCursor, direction: queryFunctionContext.direction })); } })); } function useSuspenseInfiniteQuery$1(path, input, opts) { var _opts$trpc$abortOnUnm6, _opts$trpc8, _opts$initialCursor3; const context = useContext(); const queryKey = getQueryKeyInternal(path, input, "infinite"); const defaultOpts = context.queryClient.getQueryDefaults(queryKey); const ssrOpts = useSSRQueryOptionsIfNeeded(queryKey, (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, defaultOpts), opts)); const shouldAbortOnUnmount = (_opts$trpc$abortOnUnm6 = opts === null || opts === void 0 || (_opts$trpc8 = opts.trpc) === null || _opts$trpc8 === void 0 ? void 0 : _opts$trpc8.abortOnUnmount) !== null && _opts$trpc$abortOnUnm6 !== void 0 ? _opts$trpc$abortOnUnm6 : context.abortOnUnmount; const hook = useSuspenseInfiniteQuery((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, { initialPageParam: (_opts$initialCursor3 = opts.initialCursor) !== null && _opts$initialCursor3 !== void 0 ? _opts$initialCursor3 : null, queryKey, queryFn: (queryFunctionContext) => { var _queryFunctionContext3; const actualOpts = (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, ssrOpts), {}, { trpc: (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, ssrOpts === null || ssrOpts === void 0 ? void 0 : ssrOpts.trpc), shouldAbortOnUnmount ? { signal: queryFunctionContext.signal } : {}) }); return context.client.query(...getClientArgs(queryKey, actualOpts, { pageParam: (_queryFunctionContext3 = queryFunctionContext.pageParam) !== null && _queryFunctionContext3 !== void 0 ? _queryFunctionContext3 : opts.initialCursor, direction: queryFunctionContext.direction })); } }), context.queryClient); hook.trpc = useHookResult({ path }); return [hook.data, hook]; } const useQueries$1 = (queriesCallback, options) => { const { ssrState, queryClient, prefetchQuery, client } = useContext(); const proxy = createUseQueries(client); const queries = queriesCallback(proxy); if (typeof window === "undefined" && ssrState === "prepass") for (const query of queries) { var _queryOption$trpc; const queryOption = query; if (((_queryOption$trpc = queryOption.trpc) === null || _queryOption$trpc === void 0 ? void 0 : _queryOption$trpc.ssr) !== false && !queryClient.getQueryCache().find({ queryKey: queryOption.queryKey })) prefetchQuery(queryOption.queryKey, queryOption); } return useQueries({ queries: queries.map((query) => (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, query), {}, { queryKey: query.queryKey })), combine: options === null || options === void 0 ? void 0 : options.combine }, queryClient); }; const useSuspenseQueries$1 = (queriesCallback) => { const { queryClient, client } = useContext(); const proxy = createUseQueries(client); const queries = queriesCallback(proxy); const hook = useSuspenseQueries({ queries: queries.map((query) => (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, query), {}, { queryFn: query.queryFn, queryKey: query.queryKey })) }, queryClient); return [hook.map((h) => h.data), hook]; }; return { Provider: TRPCProvider, createClient, useContext, useUtils: useContext, useQuery: useQuery$1, usePrefetchQuery: usePrefetchQuery$1, useSuspenseQuery: useSuspenseQuery$1, useQueries: useQueries$1, useSuspenseQueries: useSuspenseQueries$1, useMutation: useMutation$1, useSubscription, useInfiniteQuery: useInfiniteQuery$1, usePrefetchInfiniteQuery: usePrefetchInfiniteQuery$1, useSuspenseInfiniteQuery: useSuspenseInfiniteQuery$1 }; } //#endregion //#region src/shared/queryClient.ts /** * @internal */ const getQueryClient = (config) => { var _config$queryClient; return (_config$queryClient = config.queryClient) !== null && _config$queryClient !== void 0 ? _config$queryClient : new QueryClient(config.queryClientConfig); }; //#endregion export { TRPCContext, contextProps, createQueryUtilsProxy, createReactDecoration, createReactQueryUtils, createRootHooks, createUseQueries, createUtilityFunctions, getClientArgs, getQueryClient, getQueryType }; //# sourceMappingURL=shared-JtnEvJvB.mjs.map