@trpc/tanstack-react-query
Version:
TanStack React Query Integration for tRPC
721 lines (704 loc) • 28.6 kB
JavaScript
//#region rolldown:runtime
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __commonJS = (cb, mod) => function() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
key = keys[i];
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
get: ((k) => from[k]).bind(null, key),
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
});
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
value: mod,
enumerable: true
}) : target, mod));
//#endregion
const react = __toESM(require("react"));
const __trpc_client = __toESM(require("@trpc/client"));
const __trpc_server = __toESM(require("@trpc/server"));
const __tanstack_react_query = __toESM(require("@tanstack/react-query"));
const __trpc_server_unstable_core_do_not_import = __toESM(require("@trpc/server/unstable-core-do-not-import"));
const react_jsx_runtime = __toESM(require("react/jsx-runtime"));
//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/typeof.js
var require_typeof = __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/typeof.js"(exports, module) {
function _typeof$2(o) {
"@babel/helpers - typeof";
return module.exports = _typeof$2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o$1) {
return typeof o$1;
} : function(o$1) {
return o$1 && "function" == typeof Symbol && o$1.constructor === Symbol && o$1 !== Symbol.prototype ? "symbol" : typeof o$1;
}, module.exports.__esModule = true, module.exports["default"] = module.exports, _typeof$2(o);
}
module.exports = _typeof$2, module.exports.__esModule = true, module.exports["default"] = module.exports;
} });
//#endregion
//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js
var require_toPrimitive = __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js"(exports, module) {
var _typeof$1 = require_typeof()["default"];
function toPrimitive$1(t, r) {
if ("object" != _typeof$1(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof$1(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
module.exports = toPrimitive$1, module.exports.__esModule = true, module.exports["default"] = module.exports;
} });
//#endregion
//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js
var require_toPropertyKey = __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js"(exports, module) {
var _typeof = require_typeof()["default"];
var toPrimitive = require_toPrimitive();
function toPropertyKey$1(t) {
var i = toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
module.exports = toPropertyKey$1, module.exports.__esModule = true, module.exports["default"] = module.exports;
} });
//#endregion
//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js
var require_defineProperty = __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js"(exports, module) {
var toPropertyKey = require_toPropertyKey();
function _defineProperty(e, r, t) {
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
value: t,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[r] = t, e;
}
module.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports;
} });
//#endregion
//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js
var require_objectSpread2 = __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js"(exports, module) {
var defineProperty = require_defineProperty();
function ownKeys(e, r) {
var t = Object.keys(e);
if (Object.getOwnPropertySymbols) {
var o = Object.getOwnPropertySymbols(e);
r && (o = o.filter(function(r$1) {
return Object.getOwnPropertyDescriptor(e, r$1).enumerable;
})), t.push.apply(t, o);
}
return t;
}
function _objectSpread2(e) {
for (var r = 1; r < arguments.length; r++) {
var t = null != arguments[r] ? arguments[r] : {};
r % 2 ? ownKeys(Object(t), !0).forEach(function(r$1) {
defineProperty(e, r$1, t[r$1]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r$1) {
Object.defineProperty(e, r$1, Object.getOwnPropertyDescriptor(t, r$1));
});
}
return e;
}
module.exports = _objectSpread2, module.exports.__esModule = true, module.exports["default"] = module.exports;
} });
//#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 ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectWithoutPropertiesLoose.js
var require_objectWithoutPropertiesLoose = __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectWithoutPropertiesLoose.js"(exports, module) {
function _objectWithoutPropertiesLoose(r, e) {
if (null == r) return {};
var t = {};
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
if (e.includes(n)) continue;
t[n] = r[n];
}
return t;
}
module.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports["default"] = module.exports;
} });
//#endregion
//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectWithoutProperties.js
var require_objectWithoutProperties = __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectWithoutProperties.js"(exports, module) {
var objectWithoutPropertiesLoose = require_objectWithoutPropertiesLoose();
function _objectWithoutProperties$1(e, t) {
if (null == e) return {};
var o, r, i = objectWithoutPropertiesLoose(e, t);
if (Object.getOwnPropertySymbols) {
var s = Object.getOwnPropertySymbols(e);
for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
}
return i;
}
module.exports = _objectWithoutProperties$1, module.exports.__esModule = true, module.exports["default"] = module.exports;
} });
//#endregion
//#region src/internals/utils.ts
var import_objectSpread2$5 = __toESM(require_objectSpread2(), 1);
var import_asyncIterator = __toESM(require_asyncIterator(), 1);
var import_objectWithoutProperties = __toESM(require_objectWithoutProperties(), 1);
const _excluded = ["cursor", "direction"];
/**
* @internal
*/
function createTRPCOptionsResult(value) {
const path = value.path.join(".");
return { path };
}
function isPrefixedQueryKey(queryKey) {
return queryKey.length >= 3;
}
function readQueryKey(queryKey) {
if (isPrefixedQueryKey(queryKey)) return {
type: "prefixed",
prefix: queryKey[0],
path: queryKey[1],
args: queryKey[2]
};
else return {
type: "unprefixed",
prefix: void 0,
path: queryKey[0],
args: queryKey[1]
};
}
/**
* @internal
*/
function getClientArgs(queryKey, opts, infiniteParams) {
var _queryKeyData$args;
const queryKeyData = readQueryKey(queryKey);
let input = (_queryKeyData$args = queryKeyData.args) === null || _queryKeyData$args === void 0 ? void 0 : _queryKeyData$args.input;
if (infiniteParams) {
var _queryKeyData$args$in, _queryKeyData$args2;
input = (0, import_objectSpread2$5.default)((0, import_objectSpread2$5.default)((0, import_objectSpread2$5.default)({}, (_queryKeyData$args$in = (_queryKeyData$args2 = queryKeyData.args) === null || _queryKeyData$args2 === void 0 ? void 0 : _queryKeyData$args2.input) !== null && _queryKeyData$args$in !== void 0 ? _queryKeyData$args$in : {}), infiniteParams.pageParam !== void 0 ? { cursor: infiniteParams.pageParam } : {}), {}, { direction: infiniteParams.direction });
}
return [
queryKeyData.path.join("."),
input,
opts === null || opts === void 0 ? void 0 : opts.trpc
];
}
/**
* @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;
}
/**
* To allow easy interactions with groups of related queries, such as
* invalidating all queries of a router, we use an array as the path when
* storing in tanstack query.
*
* @internal
*/
function getQueryKeyInternal(opts) {
const key = (0, __trpc_server_unstable_core_do_not_import.run)(() => {
const { input, type } = opts;
const splitPath = opts.path.flatMap((part) => part.split("."));
if (!input && type === "any") return splitPath.length ? [splitPath] : [];
if (type === "infinite" && (0, __trpc_server_unstable_core_do_not_import.isObject)(input) && ("direction" in input || "cursor" in input)) {
const { cursor: _, direction: __ } = input, inputWithoutCursorAndDirection = (0, import_objectWithoutProperties.default)(input, _excluded);
return [splitPath, {
input: inputWithoutCursorAndDirection,
type: "infinite"
}];
}
return [splitPath, (0, import_objectSpread2$5.default)((0, import_objectSpread2$5.default)({}, typeof input !== "undefined" && input !== __tanstack_react_query.skipToken && { input }), type && type !== "any" && { type })];
});
if (opts.prefix) key.unshift([opts.prefix]);
return key;
}
/**
* @internal
*/
function getMutationKeyInternal(opts) {
const key = [opts.path.flatMap((part) => part.split("."))];
if (opts.prefix) key.unshift([opts.prefix]);
return key;
}
/**
* @internal
*/
function unwrapLazyArg(valueOrLazy) {
return (0, __trpc_server_unstable_core_do_not_import.isFunction)(valueOrLazy) ? valueOrLazy() : valueOrLazy;
}
//#endregion
//#region src/internals/infiniteQueryOptions.ts
var import_objectSpread2$4 = __toESM(require_objectSpread2(), 1);
function trpcInfiniteQueryOptions(args) {
var _opts$initialCursor;
const { input, query, path, queryKey, opts } = args;
const inputIsSkipToken = input === __tanstack_react_query.skipToken;
const queryFn = async (queryFnContext) => {
var _opts$trpc;
const actualOpts = (0, import_objectSpread2$4.default)((0, import_objectSpread2$4.default)({}, opts), {}, { trpc: (0, import_objectSpread2$4.default)((0, import_objectSpread2$4.default)({}, opts === null || opts === void 0 ? void 0 : opts.trpc), (opts === null || opts === void 0 || (_opts$trpc = opts.trpc) === null || _opts$trpc === void 0 ? void 0 : _opts$trpc.abortOnUnmount) ? { signal: queryFnContext.signal } : { signal: null }) });
const result = await query(...getClientArgs(queryKey, actualOpts, {
direction: queryFnContext.direction,
pageParam: queryFnContext.pageParam
}));
return result;
};
return Object.assign((0, __tanstack_react_query.infiniteQueryOptions)((0, import_objectSpread2$4.default)((0, import_objectSpread2$4.default)({}, opts !== null && opts !== void 0 ? opts : {}), {}, {
queryKey,
queryFn: inputIsSkipToken ? __tanstack_react_query.skipToken : queryFn,
initialPageParam: (_opts$initialCursor = opts === null || opts === void 0 ? void 0 : opts.initialCursor) !== null && _opts$initialCursor !== void 0 ? _opts$initialCursor : input === null || input === void 0 ? void 0 : input.cursor
})), { trpc: createTRPCOptionsResult({ path }) });
}
//#endregion
//#region src/internals/mutationOptions.ts
var import_objectSpread2$3 = __toESM(require_objectSpread2(), 1);
/**
* @internal
*/
function trpcMutationOptions(args) {
var _overrides$onSuccess;
const { mutate, path, opts, overrides } = args;
const queryClient = unwrapLazyArg(args.queryClient);
const mutationKey = getMutationKeyInternal({
path,
prefix: opts === null || opts === void 0 ? void 0 : opts.keyPrefix
});
const defaultOpts = queryClient.defaultMutationOptions(queryClient.getMutationDefaults(mutationKey));
const mutationSuccessOverride = (_overrides$onSuccess = overrides === null || overrides === void 0 ? void 0 : overrides.onSuccess) !== null && _overrides$onSuccess !== void 0 ? _overrides$onSuccess : (options) => options.originalFn();
const mutationFn = async (input) => {
const result = await mutate(...getClientArgs([...mutationKey, { input }], opts));
return result;
};
return (0, import_objectSpread2$3.default)((0, import_objectSpread2$3.default)({}, opts), {}, {
mutationKey,
mutationFn,
onSuccess(...args$1) {
var _ref, _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$1)) !== 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$1);
};
return mutationSuccessOverride({
originalFn,
queryClient,
meta: (_ref = (_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 && _ref !== void 0 ? _ref : {}
});
},
trpc: createTRPCOptionsResult({ path })
});
}
//#endregion
//#region src/internals/queryOptions.ts
var import_objectSpread2$2 = __toESM(require_objectSpread2(), 1);
/**
* @internal
*/
function trpcQueryOptions(args) {
const { input, query, path, queryKey, opts } = args;
const queryClient = unwrapLazyArg(args.queryClient);
const inputIsSkipToken = input === __tanstack_react_query.skipToken;
const queryFn = async (queryFnContext) => {
var _opts$trpc;
const actualOpts = (0, import_objectSpread2$2.default)((0, import_objectSpread2$2.default)({}, opts), {}, { trpc: (0, import_objectSpread2$2.default)((0, import_objectSpread2$2.default)({}, opts === null || opts === void 0 ? void 0 : opts.trpc), (opts === null || opts === void 0 || (_opts$trpc = opts.trpc) === null || _opts$trpc === void 0 ? void 0 : _opts$trpc.abortOnUnmount) ? { signal: queryFnContext.signal } : { signal: null }) });
const queryKey$1 = queryFnContext.queryKey;
const result = await query(...getClientArgs(queryKey$1, actualOpts));
if ((0, __trpc_server_unstable_core_do_not_import.isAsyncIterable)(result)) return buildQueryFromAsyncIterable(result, queryClient, queryKey$1);
return result;
};
return Object.assign((0, __tanstack_react_query.queryOptions)((0, import_objectSpread2$2.default)((0, import_objectSpread2$2.default)({}, opts), {}, {
queryKey,
queryFn: inputIsSkipToken ? __tanstack_react_query.skipToken : queryFn
})), { trpc: createTRPCOptionsResult({ path }) });
}
//#endregion
//#region src/internals/subscriptionOptions.ts
var import_objectSpread2$1 = __toESM(require_objectSpread2(), 1);
/**
* @internal
*/
const trpcSubscriptionOptions = (args) => {
var _readQueryKey;
const { subscribe, path, queryKey, opts = {} } = args;
const input = (_readQueryKey = readQueryKey(queryKey)) === null || _readQueryKey === void 0 || (_readQueryKey = _readQueryKey.args) === null || _readQueryKey === void 0 ? void 0 : _readQueryKey.input;
const enabled = "enabled" in opts ? !!opts.enabled : input !== __tanstack_react_query.skipToken;
const _subscribe = (innerOpts) => {
return subscribe(path.join("."), input !== null && input !== void 0 ? input : void 0, innerOpts);
};
return (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, opts), {}, {
enabled,
subscribe: _subscribe,
queryKey,
trpc: createTRPCOptionsResult({ path })
});
};
function useSubscription(opts) {
const optsRef = react.useRef(opts);
optsRef.current = opts;
const trackedProps = react.useRef(new Set([]));
const addTrackedProp = react.useCallback((key) => {
trackedProps.current.add(key);
}, []);
const currentSubscriptionRef = react.useRef(() => {});
const reset = react.useCallback(() => {
var _currentSubscriptionR;
(_currentSubscriptionR = currentSubscriptionRef.current) === null || _currentSubscriptionR === void 0 || _currentSubscriptionR.call(currentSubscriptionRef);
updateState(getInitialState);
if (!opts.enabled) return;
const subscription = opts.subscribe({
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$1.default)((0, import_objectSpread2$1.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$1.default)((0, import_objectSpread2$1.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$1.default)((0, import_objectSpread2$1.default)({}, prev), {}, {
status: "error",
error
}));
},
onConnectionStateChange: (result) => {
var _optsRef$current$onCo, _optsRef$current4;
(_optsRef$current$onCo = (_optsRef$current4 = optsRef.current).onConnectionStateChange) === null || _optsRef$current$onCo === void 0 || _optsRef$current$onCo.call(_optsRef$current4, result);
updateState((prev) => {
switch (result.state) {
case "connecting": return (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, prev), {}, {
status: "connecting",
error: result.error
});
case "pending": return prev;
case "idle": return (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, prev), {}, {
status: "idle",
data: void 0,
error: null
});
}
});
}
});
currentSubscriptionRef.current = () => {
subscription.unsubscribe();
};
}, [(0, __tanstack_react_query.hashKey)(opts.queryKey), opts.enabled]);
const getInitialState = react.useCallback(() => {
return opts.enabled ? {
data: void 0,
error: null,
status: "connecting",
reset
} : {
data: void 0,
error: null,
status: "idle",
reset
};
}, [opts.enabled, reset]);
const resultRef = react.useRef(getInitialState());
const [state, setState] = react.useState(trackResult(resultRef, addTrackedProp));
state.reset = reset;
const updateState = react.useCallback((callback) => {
const prev = resultRef.current;
const next = resultRef.current = callback(prev);
let shouldUpdate = false;
for (const key of trackedProps.current) if (prev[key] !== next[key]) {
shouldUpdate = true;
break;
}
if (shouldUpdate) setState(trackResult(resultRef, addTrackedProp));
}, [addTrackedProp]);
react.useEffect(() => {
if (!opts.enabled) return;
reset();
return () => {
var _currentSubscriptionR2;
(_currentSubscriptionR2 = currentSubscriptionRef.current) === null || _currentSubscriptionR2 === void 0 || _currentSubscriptionR2.call(currentSubscriptionRef);
};
}, [reset, opts.enabled]);
return state;
}
function trackResult(result, onTrackResult) {
const trackedResult = new Proxy(result.current, { get(_target, prop) {
onTrackResult(prop);
return result.current[prop];
} });
return trackedResult;
}
//#endregion
//#region src/internals/createOptionsProxy.ts
var import_objectSpread2 = __toESM(require_objectSpread2(), 1);
/**
* Create a typed proxy from your router types. Can also be used on the server.
*
* @see https://trpc.io/docs/client/tanstack-react-query/setup#3b-setup-without-react-context
* @see https://trpc.io/docs/client/tanstack-react-query/server-components#5-create-a-trpc-caller-for-server-components
*/
function createTRPCOptionsProxy(opts) {
const prefix = opts.keyPrefix;
const callIt = (type) => {
return (path, input, trpcOpts) => {
if ("router" in opts) return Promise.resolve(unwrapLazyArg(opts.ctx)).then((ctx) => (0, __trpc_server.callTRPCProcedure)({
router: opts.router,
path,
getRawInput: async () => input,
ctx,
type,
signal: void 0,
batchIndex: 0
}));
const untypedClient = opts.client instanceof __trpc_client.TRPCUntypedClient ? opts.client : (0, __trpc_client.getUntypedClient)(opts.client);
return untypedClient[type](path, input, trpcOpts);
};
};
return (0, __trpc_server.createTRPCRecursiveProxy)(({ args, path: _path }) => {
const path = [..._path];
const utilName = path.pop();
const [arg1, arg2] = args;
const contextMap = {
"~types": void 0,
pathKey: () => {
return getQueryKeyInternal({
path,
type: "any",
prefix
});
},
pathFilter: () => {
return (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, arg1), {}, { queryKey: getQueryKeyInternal({
path,
type: "any",
prefix
}) });
},
queryOptions: () => {
return trpcQueryOptions({
input: arg1,
opts: arg2,
path,
queryClient: opts.queryClient,
queryKey: getQueryKeyInternal({
path,
input: arg1,
type: "query",
prefix
}),
query: callIt("query")
});
},
queryKey: () => {
return getQueryKeyInternal({
path,
input: arg1,
type: "query",
prefix
});
},
queryFilter: () => {
return (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, arg2), {}, { queryKey: getQueryKeyInternal({
path,
input: arg1,
type: "query",
prefix
}) });
},
infiniteQueryOptions: () => {
return trpcInfiniteQueryOptions({
input: arg1,
opts: arg2,
path,
queryClient: opts.queryClient,
queryKey: getQueryKeyInternal({
path,
input: arg1,
type: "infinite",
prefix
}),
query: callIt("query")
});
},
infiniteQueryKey: () => {
return getQueryKeyInternal({
path,
input: arg1,
type: "infinite",
prefix
});
},
infiniteQueryFilter: () => {
return (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, arg2), {}, { queryKey: getQueryKeyInternal({
path,
input: arg1,
type: "infinite",
prefix
}) });
},
mutationOptions: () => {
var _opts$overrides;
return trpcMutationOptions({
opts: arg1,
path,
queryClient: opts.queryClient,
mutate: callIt("mutation"),
overrides: (_opts$overrides = opts.overrides) === null || _opts$overrides === void 0 ? void 0 : _opts$overrides.mutations
});
},
mutationKey: () => {
return getMutationKeyInternal({
path,
prefix
});
},
subscriptionOptions: () => {
return trpcSubscriptionOptions({
opts: arg2,
path,
queryKey: getQueryKeyInternal({
path,
input: arg1,
type: "any",
prefix
}),
subscribe: callIt("subscription")
});
}
};
return contextMap[utilName]();
});
}
//#endregion
//#region src/internals/Context.tsx
/**
* Create a set of type-safe provider-consumers
*
* @see https://trpc.io/docs/client/tanstack-react-query/setup#3a-setup-the-trpc-context-provider
*/
function createTRPCContext() {
const TRPCClientContext = react.createContext(null);
const TRPCContext = react.createContext(null);
const TRPCProvider = (props) => {
const value = react.useMemo(() => createTRPCOptionsProxy({
client: props.trpcClient,
queryClient: props.queryClient,
keyPrefix: props.keyPrefix
}), [
props.trpcClient,
props.queryClient,
props.keyPrefix
]);
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TRPCClientContext.Provider, {
value: props.trpcClient,
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TRPCContext.Provider, {
value,
children: props.children
})
});
};
TRPCProvider.displayName = "TRPCProvider";
function useTRPC() {
const utils = react.useContext(TRPCContext);
if (!utils) throw new Error("useTRPC() can only be used inside of a <TRPCProvider>");
return utils;
}
function useTRPCClient() {
const client = react.useContext(TRPCClientContext);
if (!client) throw new Error("useTRPCClient() can only be used inside of a <TRPCProvider>");
return client;
}
return {
TRPCProvider,
useTRPC,
useTRPCClient
};
}
//#endregion
exports.createTRPCContext = createTRPCContext;
exports.createTRPCOptionsProxy = createTRPCOptionsProxy;
exports.useSubscription = useSubscription;