@trpc/tanstack-react-query 11.1.3-alpha-tmp-issues-6785.34 → 11.1.3-alpha-tmp-tsdown.24

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 (62) hide show
  1. package/dist/_virtual/rolldown_runtime.js +30 -0
  2. package/dist/index.d.mts +8 -0
  3. package/dist/index.d.ts +8 -10
  4. package/dist/index.js +6 -10
  5. package/dist/index.mjs +5 -3
  6. package/dist/internals/Context.d.mts +27 -0
  7. package/dist/internals/Context.d.mts.map +1 -0
  8. package/dist/internals/Context.d.ts +20 -14
  9. package/dist/internals/Context.d.ts.map +1 -1
  10. package/dist/internals/Context.js +42 -63
  11. package/dist/internals/Context.mjs +41 -41
  12. package/dist/internals/Context.mjs.map +1 -0
  13. package/dist/internals/createOptionsProxy.d.mts +160 -0
  14. package/dist/internals/createOptionsProxy.d.mts.map +1 -0
  15. package/dist/internals/createOptionsProxy.d.ts +140 -141
  16. package/dist/internals/createOptionsProxy.d.ts.map +1 -1
  17. package/dist/internals/createOptionsProxy.js +107 -109
  18. package/dist/internals/createOptionsProxy.mjs +106 -106
  19. package/dist/internals/createOptionsProxy.mjs.map +1 -0
  20. package/dist/internals/infiniteQueryOptions.d.mts +54 -0
  21. package/dist/internals/infiniteQueryOptions.d.mts.map +1 -0
  22. package/dist/internals/infiniteQueryOptions.d.ts +39 -46
  23. package/dist/internals/infiniteQueryOptions.d.ts.map +1 -1
  24. package/dist/internals/infiniteQueryOptions.js +28 -35
  25. package/dist/internals/infiniteQueryOptions.mjs +27 -32
  26. package/dist/internals/infiniteQueryOptions.mjs.map +1 -0
  27. package/dist/internals/mutationOptions.d.mts +33 -0
  28. package/dist/internals/mutationOptions.d.mts.map +1 -0
  29. package/dist/internals/mutationOptions.d.ts +24 -34
  30. package/dist/internals/mutationOptions.d.ts.map +1 -1
  31. package/dist/internals/mutationOptions.js +30 -36
  32. package/dist/internals/mutationOptions.mjs +30 -33
  33. package/dist/internals/mutationOptions.mjs.map +1 -0
  34. package/dist/internals/queryOptions.d.mts +45 -0
  35. package/dist/internals/queryOptions.d.mts.map +1 -0
  36. package/dist/internals/queryOptions.d.ts +36 -49
  37. package/dist/internals/queryOptions.d.ts.map +1 -1
  38. package/dist/internals/queryOptions.js +31 -39
  39. package/dist/internals/queryOptions.mjs +30 -36
  40. package/dist/internals/queryOptions.mjs.map +1 -0
  41. package/dist/internals/subscriptionOptions.d.mts +65 -0
  42. package/dist/internals/subscriptionOptions.d.mts.map +1 -0
  43. package/dist/internals/subscriptionOptions.d.ts +52 -60
  44. package/dist/internals/subscriptionOptions.d.ts.map +1 -1
  45. package/dist/internals/subscriptionOptions.js +123 -171
  46. package/dist/internals/subscriptionOptions.mjs +122 -149
  47. package/dist/internals/subscriptionOptions.mjs.map +1 -0
  48. package/dist/internals/types.d.mts +82 -0
  49. package/dist/internals/types.d.mts.map +1 -0
  50. package/dist/internals/types.d.ts +41 -42
  51. package/dist/internals/types.d.ts.map +1 -1
  52. package/dist/internals/utils.js +70 -99
  53. package/dist/internals/utils.mjs +69 -96
  54. package/dist/internals/utils.mjs.map +1 -0
  55. package/package.json +20 -17
  56. package/src/internals/mutationOptions.ts +2 -2
  57. package/src/internals/queryOptions.ts +1 -1
  58. package/src/internals/subscriptionOptions.ts +1 -0
  59. package/dist/bundle-analysis.json +0 -128
  60. package/dist/index.d.ts.map +0 -1
  61. package/dist/internals/utils.d.ts +0 -36
  62. package/dist/internals/utils.d.ts.map +0 -1
@@ -1,180 +1,132 @@
1
- 'use strict';
2
-
3
- var reactQuery = require('@tanstack/react-query');
4
- var React = require('react');
5
- var utils = require('./utils.js');
6
-
7
- function _interopNamespaceDefault(e) {
8
- var n = Object.create(null);
9
- if (e) {
10
- Object.keys(e).forEach(function (k) {
11
- if (k !== 'default') {
12
- var d = Object.getOwnPropertyDescriptor(e, k);
13
- Object.defineProperty(n, k, d.get ? d : {
14
- enumerable: true,
15
- get: function () { return e[k]; }
16
- });
17
- }
18
- });
19
- }
20
- n.default = e;
21
- return Object.freeze(n);
22
- }
23
-
24
- var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
1
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
2
+ const require_utils = require('./utils.js');
3
+ const react = require_rolldown_runtime.__toESM(require("react"));
4
+ const __tanstack_react_query = require_rolldown_runtime.__toESM(require("@tanstack/react-query"));
25
5
 
6
+ //#region src/internals/subscriptionOptions.ts
26
7
  /**
27
- * @internal
28
- */ const trpcSubscriptionOptions = (args)=>{
29
- const { subscribe, path, queryKey, opts = {} } = args;
30
- const input = queryKey[1]?.input;
31
- const enabled = 'enabled' in opts ? !!opts.enabled : input !== reactQuery.skipToken;
32
- const _subscribe = (innerOpts)=>{
33
- return subscribe(path.join('.'), input ?? undefined, innerOpts);
34
- };
35
- return {
36
- ...opts,
37
- enabled,
38
- subscribe: _subscribe,
39
- queryKey,
40
- trpc: utils.createTRPCOptionsResult({
41
- path
42
- })
43
- };
8
+ * @internal
9
+ */
10
+ const trpcSubscriptionOptions = (args) => {
11
+ const { subscribe, path, queryKey, opts = {} } = args;
12
+ const input = queryKey[1]?.input;
13
+ const enabled = "enabled" in opts ? !!opts.enabled : input !== __tanstack_react_query.skipToken;
14
+ const _subscribe = (innerOpts) => {
15
+ return subscribe(path.join("."), input ?? void 0, innerOpts);
16
+ };
17
+ return {
18
+ ...opts,
19
+ enabled,
20
+ subscribe: _subscribe,
21
+ queryKey,
22
+ trpc: require_utils.createTRPCOptionsResult({ path })
23
+ };
44
24
  };
45
25
  function useSubscription(opts) {
46
- const optsRef = React__namespace.useRef(opts);
47
- optsRef.current = opts;
48
- const trackedProps = React__namespace.useRef(new Set([]));
49
- const addTrackedProp = React__namespace.useCallback((key)=>{
50
- trackedProps.current.add(key);
51
- }, []);
52
- const currentSubscriptionRef = React__namespace.useRef(()=>{
53
- // noop
54
- });
55
- const reset = React__namespace.useCallback(()=>{
56
- // unsubscribe from the previous subscription
57
- currentSubscriptionRef.current?.();
58
- updateState(getInitialState);
59
- if (!opts.enabled) {
60
- return;
61
- }
62
- const subscription = opts.subscribe({
63
- onStarted: ()=>{
64
- optsRef.current.onStarted?.();
65
- updateState((prev)=>({
66
- ...prev,
67
- status: 'pending',
68
- error: null
69
- }));
70
- },
71
- onData: (data)=>{
72
- optsRef.current.onData?.(data);
73
- updateState((prev)=>({
74
- ...prev,
75
- status: 'pending',
76
- data,
77
- error: null
78
- }));
79
- },
80
- onError: (error)=>{
81
- optsRef.current.onError?.(error);
82
- updateState((prev)=>({
83
- ...prev,
84
- status: 'error',
85
- error
86
- }));
87
- },
88
- onConnectionStateChange: (result)=>{
89
- updateState((prev)=>{
90
- switch(result.state){
91
- case 'connecting':
92
- return {
93
- ...prev,
94
- status: 'connecting',
95
- error: result.error
96
- };
97
- case 'pending':
98
- // handled in onStarted
99
- return prev;
100
- case 'idle':
101
- return {
102
- ...prev,
103
- status: 'idle',
104
- data: undefined,
105
- error: null
106
- };
107
- }
108
- });
109
- }
110
- });
111
- currentSubscriptionRef.current = ()=>{
112
- subscription.unsubscribe();
113
- };
114
- // eslint-disable-next-line react-hooks/react-compiler
115
- // eslint-disable-next-line react-hooks/exhaustive-deps
116
- }, [
117
- reactQuery.hashKey(opts.queryKey),
118
- opts.enabled
119
- ]);
120
- const getInitialState = React__namespace.useCallback(()=>{
121
- return opts.enabled ? {
122
- data: undefined,
123
- error: null,
124
- status: 'connecting',
125
- reset
126
- } : {
127
- data: undefined,
128
- error: null,
129
- status: 'idle',
130
- reset
131
- };
132
- }, [
133
- opts.enabled,
134
- reset
135
- ]);
136
- const resultRef = React__namespace.useRef(getInitialState());
137
- const [state, setState] = React__namespace.useState(trackResult(resultRef.current, addTrackedProp));
138
- state.reset = reset;
139
- const updateState = React__namespace.useCallback((callback)=>{
140
- const prev = resultRef.current;
141
- const next = resultRef.current = callback(prev);
142
- let shouldUpdate = false;
143
- for (const key of trackedProps.current){
144
- if (prev[key] !== next[key]) {
145
- shouldUpdate = true;
146
- break;
147
- }
148
- }
149
- if (shouldUpdate) {
150
- setState(trackResult(next, addTrackedProp));
151
- }
152
- }, [
153
- addTrackedProp
154
- ]);
155
- React__namespace.useEffect(()=>{
156
- if (!opts.enabled) {
157
- return;
158
- }
159
- reset();
160
- return ()=>{
161
- currentSubscriptionRef.current?.();
162
- };
163
- }, [
164
- reset,
165
- opts.enabled
166
- ]);
167
- return state;
26
+ const optsRef = react.useRef(opts);
27
+ optsRef.current = opts;
28
+ const trackedProps = react.useRef(new Set([]));
29
+ const addTrackedProp = react.useCallback((key) => {
30
+ trackedProps.current.add(key);
31
+ }, []);
32
+ const currentSubscriptionRef = react.useRef(() => {});
33
+ const reset = react.useCallback(() => {
34
+ currentSubscriptionRef.current?.();
35
+ updateState(getInitialState);
36
+ if (!opts.enabled) return;
37
+ const subscription = opts.subscribe({
38
+ onStarted: () => {
39
+ optsRef.current.onStarted?.();
40
+ updateState((prev) => ({
41
+ ...prev,
42
+ status: "pending",
43
+ error: null
44
+ }));
45
+ },
46
+ onData: (data) => {
47
+ optsRef.current.onData?.(data);
48
+ updateState((prev) => ({
49
+ ...prev,
50
+ status: "pending",
51
+ data,
52
+ error: null
53
+ }));
54
+ },
55
+ onError: (error) => {
56
+ optsRef.current.onError?.(error);
57
+ updateState((prev) => ({
58
+ ...prev,
59
+ status: "error",
60
+ error
61
+ }));
62
+ },
63
+ onConnectionStateChange: (result) => {
64
+ optsRef.current.onConnectionStateChange?.(result);
65
+ updateState((prev) => {
66
+ switch (result.state) {
67
+ case "connecting": return {
68
+ ...prev,
69
+ status: "connecting",
70
+ error: result.error
71
+ };
72
+ case "pending": return prev;
73
+ case "idle": return {
74
+ ...prev,
75
+ status: "idle",
76
+ data: void 0,
77
+ error: null
78
+ };
79
+ }
80
+ });
81
+ }
82
+ });
83
+ currentSubscriptionRef.current = () => {
84
+ subscription.unsubscribe();
85
+ };
86
+ }, [(0, __tanstack_react_query.hashKey)(opts.queryKey), opts.enabled]);
87
+ const getInitialState = react.useCallback(() => {
88
+ return opts.enabled ? {
89
+ data: void 0,
90
+ error: null,
91
+ status: "connecting",
92
+ reset
93
+ } : {
94
+ data: void 0,
95
+ error: null,
96
+ status: "idle",
97
+ reset
98
+ };
99
+ }, [opts.enabled, reset]);
100
+ const resultRef = react.useRef(getInitialState());
101
+ const [state, setState] = react.useState(trackResult(resultRef.current, addTrackedProp));
102
+ state.reset = reset;
103
+ const updateState = react.useCallback((callback) => {
104
+ const prev = resultRef.current;
105
+ const next = resultRef.current = callback(prev);
106
+ let shouldUpdate = false;
107
+ for (const key of trackedProps.current) if (prev[key] !== next[key]) {
108
+ shouldUpdate = true;
109
+ break;
110
+ }
111
+ if (shouldUpdate) setState(trackResult(next, addTrackedProp));
112
+ }, [addTrackedProp]);
113
+ react.useEffect(() => {
114
+ if (!opts.enabled) return;
115
+ reset();
116
+ return () => {
117
+ currentSubscriptionRef.current?.();
118
+ };
119
+ }, [reset, opts.enabled]);
120
+ return state;
168
121
  }
169
122
  function trackResult(result, onTrackResult) {
170
- const trackedResult = new Proxy(result, {
171
- get (target, prop) {
172
- onTrackResult(prop);
173
- return target[prop];
174
- }
175
- });
176
- return trackedResult;
123
+ const trackedResult = new Proxy(result, { get(target, prop) {
124
+ onTrackResult(prop);
125
+ return target[prop];
126
+ } });
127
+ return trackedResult;
177
128
  }
178
129
 
130
+ //#endregion
179
131
  exports.trpcSubscriptionOptions = trpcSubscriptionOptions;
180
- exports.useSubscription = useSubscription;
132
+ exports.useSubscription = useSubscription;
@@ -1,158 +1,131 @@
1
- import { hashKey, skipToken } from '@tanstack/react-query';
2
- import * as React from 'react';
3
- import { createTRPCOptionsResult } from './utils.mjs';
1
+ import { createTRPCOptionsResult } from "./utils.mjs";
2
+ import * as React from "react";
3
+ import { hashKey, skipToken } from "@tanstack/react-query";
4
4
 
5
+ //#region src/internals/subscriptionOptions.ts
5
6
  /**
6
- * @internal
7
- */ const trpcSubscriptionOptions = (args)=>{
8
- const { subscribe, path, queryKey, opts = {} } = args;
9
- const input = queryKey[1]?.input;
10
- const enabled = 'enabled' in opts ? !!opts.enabled : input !== skipToken;
11
- const _subscribe = (innerOpts)=>{
12
- return subscribe(path.join('.'), input ?? undefined, innerOpts);
13
- };
14
- return {
15
- ...opts,
16
- enabled,
17
- subscribe: _subscribe,
18
- queryKey,
19
- trpc: createTRPCOptionsResult({
20
- path
21
- })
22
- };
7
+ * @internal
8
+ */
9
+ const trpcSubscriptionOptions = (args) => {
10
+ const { subscribe, path, queryKey, opts = {} } = args;
11
+ const input = queryKey[1]?.input;
12
+ const enabled = "enabled" in opts ? !!opts.enabled : input !== skipToken;
13
+ const _subscribe = (innerOpts) => {
14
+ return subscribe(path.join("."), input ?? void 0, innerOpts);
15
+ };
16
+ return {
17
+ ...opts,
18
+ enabled,
19
+ subscribe: _subscribe,
20
+ queryKey,
21
+ trpc: createTRPCOptionsResult({ path })
22
+ };
23
23
  };
24
24
  function useSubscription(opts) {
25
- const optsRef = React.useRef(opts);
26
- optsRef.current = opts;
27
- const trackedProps = React.useRef(new Set([]));
28
- const addTrackedProp = React.useCallback((key)=>{
29
- trackedProps.current.add(key);
30
- }, []);
31
- const currentSubscriptionRef = React.useRef(()=>{
32
- // noop
33
- });
34
- const reset = React.useCallback(()=>{
35
- // unsubscribe from the previous subscription
36
- currentSubscriptionRef.current?.();
37
- updateState(getInitialState);
38
- if (!opts.enabled) {
39
- return;
40
- }
41
- const subscription = opts.subscribe({
42
- onStarted: ()=>{
43
- optsRef.current.onStarted?.();
44
- updateState((prev)=>({
45
- ...prev,
46
- status: 'pending',
47
- error: null
48
- }));
49
- },
50
- onData: (data)=>{
51
- optsRef.current.onData?.(data);
52
- updateState((prev)=>({
53
- ...prev,
54
- status: 'pending',
55
- data,
56
- error: null
57
- }));
58
- },
59
- onError: (error)=>{
60
- optsRef.current.onError?.(error);
61
- updateState((prev)=>({
62
- ...prev,
63
- status: 'error',
64
- error
65
- }));
66
- },
67
- onConnectionStateChange: (result)=>{
68
- updateState((prev)=>{
69
- switch(result.state){
70
- case 'connecting':
71
- return {
72
- ...prev,
73
- status: 'connecting',
74
- error: result.error
75
- };
76
- case 'pending':
77
- // handled in onStarted
78
- return prev;
79
- case 'idle':
80
- return {
81
- ...prev,
82
- status: 'idle',
83
- data: undefined,
84
- error: null
85
- };
86
- }
87
- });
88
- }
89
- });
90
- currentSubscriptionRef.current = ()=>{
91
- subscription.unsubscribe();
92
- };
93
- // eslint-disable-next-line react-hooks/react-compiler
94
- // eslint-disable-next-line react-hooks/exhaustive-deps
95
- }, [
96
- hashKey(opts.queryKey),
97
- opts.enabled
98
- ]);
99
- const getInitialState = React.useCallback(()=>{
100
- return opts.enabled ? {
101
- data: undefined,
102
- error: null,
103
- status: 'connecting',
104
- reset
105
- } : {
106
- data: undefined,
107
- error: null,
108
- status: 'idle',
109
- reset
110
- };
111
- }, [
112
- opts.enabled,
113
- reset
114
- ]);
115
- const resultRef = React.useRef(getInitialState());
116
- const [state, setState] = React.useState(trackResult(resultRef.current, addTrackedProp));
117
- state.reset = reset;
118
- const updateState = React.useCallback((callback)=>{
119
- const prev = resultRef.current;
120
- const next = resultRef.current = callback(prev);
121
- let shouldUpdate = false;
122
- for (const key of trackedProps.current){
123
- if (prev[key] !== next[key]) {
124
- shouldUpdate = true;
125
- break;
126
- }
127
- }
128
- if (shouldUpdate) {
129
- setState(trackResult(next, addTrackedProp));
130
- }
131
- }, [
132
- addTrackedProp
133
- ]);
134
- React.useEffect(()=>{
135
- if (!opts.enabled) {
136
- return;
137
- }
138
- reset();
139
- return ()=>{
140
- currentSubscriptionRef.current?.();
141
- };
142
- }, [
143
- reset,
144
- opts.enabled
145
- ]);
146
- return state;
25
+ const optsRef = React.useRef(opts);
26
+ optsRef.current = opts;
27
+ const trackedProps = React.useRef(new Set([]));
28
+ const addTrackedProp = React.useCallback((key) => {
29
+ trackedProps.current.add(key);
30
+ }, []);
31
+ const currentSubscriptionRef = React.useRef(() => {});
32
+ const reset = React.useCallback(() => {
33
+ currentSubscriptionRef.current?.();
34
+ updateState(getInitialState);
35
+ if (!opts.enabled) return;
36
+ const subscription = opts.subscribe({
37
+ onStarted: () => {
38
+ optsRef.current.onStarted?.();
39
+ updateState((prev) => ({
40
+ ...prev,
41
+ status: "pending",
42
+ error: null
43
+ }));
44
+ },
45
+ onData: (data) => {
46
+ optsRef.current.onData?.(data);
47
+ updateState((prev) => ({
48
+ ...prev,
49
+ status: "pending",
50
+ data,
51
+ error: null
52
+ }));
53
+ },
54
+ onError: (error) => {
55
+ optsRef.current.onError?.(error);
56
+ updateState((prev) => ({
57
+ ...prev,
58
+ status: "error",
59
+ error
60
+ }));
61
+ },
62
+ onConnectionStateChange: (result) => {
63
+ optsRef.current.onConnectionStateChange?.(result);
64
+ updateState((prev) => {
65
+ switch (result.state) {
66
+ case "connecting": return {
67
+ ...prev,
68
+ status: "connecting",
69
+ error: result.error
70
+ };
71
+ case "pending": return prev;
72
+ case "idle": return {
73
+ ...prev,
74
+ status: "idle",
75
+ data: void 0,
76
+ error: null
77
+ };
78
+ }
79
+ });
80
+ }
81
+ });
82
+ currentSubscriptionRef.current = () => {
83
+ subscription.unsubscribe();
84
+ };
85
+ }, [hashKey(opts.queryKey), opts.enabled]);
86
+ const getInitialState = React.useCallback(() => {
87
+ return opts.enabled ? {
88
+ data: void 0,
89
+ error: null,
90
+ status: "connecting",
91
+ reset
92
+ } : {
93
+ data: void 0,
94
+ error: null,
95
+ status: "idle",
96
+ reset
97
+ };
98
+ }, [opts.enabled, reset]);
99
+ const resultRef = React.useRef(getInitialState());
100
+ const [state, setState] = React.useState(trackResult(resultRef.current, addTrackedProp));
101
+ state.reset = reset;
102
+ const updateState = React.useCallback((callback) => {
103
+ const prev = resultRef.current;
104
+ const next = resultRef.current = callback(prev);
105
+ let shouldUpdate = false;
106
+ for (const key of trackedProps.current) if (prev[key] !== next[key]) {
107
+ shouldUpdate = true;
108
+ break;
109
+ }
110
+ if (shouldUpdate) setState(trackResult(next, addTrackedProp));
111
+ }, [addTrackedProp]);
112
+ React.useEffect(() => {
113
+ if (!opts.enabled) return;
114
+ reset();
115
+ return () => {
116
+ currentSubscriptionRef.current?.();
117
+ };
118
+ }, [reset, opts.enabled]);
119
+ return state;
147
120
  }
148
121
  function trackResult(result, onTrackResult) {
149
- const trackedResult = new Proxy(result, {
150
- get (target, prop) {
151
- onTrackResult(prop);
152
- return target[prop];
153
- }
154
- });
155
- return trackedResult;
122
+ const trackedResult = new Proxy(result, { get(target, prop) {
123
+ onTrackResult(prop);
124
+ return target[prop];
125
+ } });
126
+ return trackedResult;
156
127
  }
157
128
 
129
+ //#endregion
158
130
  export { trpcSubscriptionOptions, useSubscription };
131
+ //# sourceMappingURL=subscriptionOptions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriptionOptions.mjs","names":["args: {\n subscribe: typeof TRPCUntypedClient.prototype.subscription;\n path: readonly string[];\n queryKey: TRPCQueryKey;\n opts?: AnyTRPCSubscriptionOptionsIn;\n}","_subscribe: ReturnType<TRPCSubscriptionOptions<any>>['subscribe']","opts: TRPCSubscriptionOptionsOut<TOutput, TError>","key: keyof $Result","callback: (prevState: $Result) => $Result","result: T","onTrackResult: (key: keyof T) => void"],"sources":["../../src/internals/subscriptionOptions.ts"],"sourcesContent":["import type { SkipToken } from '@tanstack/react-query';\nimport { hashKey, skipToken } from '@tanstack/react-query';\nimport type { TRPCClientErrorLike, TRPCUntypedClient } from '@trpc/client';\nimport type { TRPCConnectionState } from '@trpc/client/unstable-internals';\nimport type { Unsubscribable } from '@trpc/server/observable';\nimport type { inferAsyncIterableYield } from '@trpc/server/unstable-core-do-not-import';\nimport * as React from 'react';\nimport type {\n ResolverDef,\n TRPCQueryKey,\n TRPCQueryOptionsResult,\n} from './types';\nimport { createTRPCOptionsResult } from './utils';\n\ninterface BaseTRPCSubscriptionOptionsIn<TOutput, TError> {\n enabled?: boolean;\n onStarted?: () => void;\n onData?: (data: inferAsyncIterableYield<TOutput>) => void;\n onError?: (err: TError) => void;\n onConnectionStateChange?: (state: TRPCConnectionState<TError>) => void;\n}\n\ninterface UnusedSkipTokenTRPCSubscriptionOptionsIn<TOutput, TError> {\n onStarted?: () => void;\n onData?: (data: inferAsyncIterableYield<TOutput>) => void;\n onError?: (err: TError) => void;\n onConnectionStateChange?: (state: TRPCConnectionState<TError>) => void;\n}\n\ninterface TRPCSubscriptionOptionsOut<TOutput, TError>\n extends UnusedSkipTokenTRPCSubscriptionOptionsIn<TOutput, TError>,\n TRPCQueryOptionsResult {\n enabled: boolean;\n queryKey: TRPCQueryKey;\n subscribe: (\n innerOpts: UnusedSkipTokenTRPCSubscriptionOptionsIn<TOutput, TError>,\n ) => Unsubscribable;\n}\n\nexport interface TRPCSubscriptionOptions<TDef extends ResolverDef> {\n (\n input: TDef['input'],\n opts?: UnusedSkipTokenTRPCSubscriptionOptionsIn<\n inferAsyncIterableYield<TDef['output']>,\n TRPCClientErrorLike<TDef>\n >,\n ): TRPCSubscriptionOptionsOut<\n inferAsyncIterableYield<TDef['output']>,\n TRPCClientErrorLike<TDef>\n >;\n (\n input: TDef['input'] | SkipToken,\n opts?: BaseTRPCSubscriptionOptionsIn<\n inferAsyncIterableYield<TDef['output']>,\n TRPCClientErrorLike<TDef>\n >,\n ): TRPCSubscriptionOptionsOut<\n inferAsyncIterableYield<TDef['output']>,\n TRPCClientErrorLike<TDef>\n >;\n}\nexport type TRPCSubscriptionStatus =\n | 'idle'\n | 'connecting'\n | 'pending'\n | 'error';\n\nexport interface TRPCSubscriptionBaseResult<TOutput, TError> {\n status: TRPCSubscriptionStatus;\n data: undefined | TOutput;\n error: null | TError;\n /**\n * Reset the subscription\n */\n reset: () => void;\n}\n\nexport interface TRPCSubscriptionIdleResult<TOutput>\n extends TRPCSubscriptionBaseResult<TOutput, null> {\n status: 'idle';\n data: undefined;\n error: null;\n}\n\nexport interface TRPCSubscriptionConnectingResult<TOutput, TError>\n extends TRPCSubscriptionBaseResult<TOutput, TError> {\n status: 'connecting';\n data: undefined | TOutput;\n error: TError | null;\n}\n\nexport interface TRPCSubscriptionPendingResult<TOutput>\n extends TRPCSubscriptionBaseResult<TOutput, undefined> {\n status: 'pending';\n data: TOutput | undefined;\n error: null;\n}\n\nexport interface TRPCSubscriptionErrorResult<TOutput, TError>\n extends TRPCSubscriptionBaseResult<TOutput, TError> {\n status: 'error';\n data: TOutput | undefined;\n error: TError;\n}\n\nexport type TRPCSubscriptionResult<TOutput, TError> =\n | TRPCSubscriptionIdleResult<TOutput>\n | TRPCSubscriptionConnectingResult<TOutput, TError>\n | TRPCSubscriptionErrorResult<TOutput, TError>\n | TRPCSubscriptionPendingResult<TOutput>;\n\ntype AnyTRPCSubscriptionOptionsIn =\n | BaseTRPCSubscriptionOptionsIn<unknown, unknown>\n | UnusedSkipTokenTRPCSubscriptionOptionsIn<unknown, unknown>;\n\ntype AnyTRPCSubscriptionOptionsOut = TRPCSubscriptionOptionsOut<\n unknown,\n unknown\n>;\n\n/**\n * @internal\n */\nexport const trpcSubscriptionOptions = (args: {\n subscribe: typeof TRPCUntypedClient.prototype.subscription;\n path: readonly string[];\n queryKey: TRPCQueryKey;\n opts?: AnyTRPCSubscriptionOptionsIn;\n}): AnyTRPCSubscriptionOptionsOut => {\n const { subscribe, path, queryKey, opts = {} } = args;\n const input = queryKey[1]?.input;\n const enabled = 'enabled' in opts ? !!opts.enabled : input !== skipToken;\n\n const _subscribe: ReturnType<TRPCSubscriptionOptions<any>>['subscribe'] = (\n innerOpts,\n ) => {\n return subscribe(path.join('.'), input ?? undefined, innerOpts);\n };\n\n return {\n ...opts,\n enabled,\n subscribe: _subscribe,\n queryKey,\n trpc: createTRPCOptionsResult({ path }),\n };\n};\n\nexport function useSubscription<TOutput, TError>(\n opts: TRPCSubscriptionOptionsOut<TOutput, TError>,\n): TRPCSubscriptionResult<TOutput, TError> {\n type $Result = TRPCSubscriptionResult<TOutput, TError>;\n\n const optsRef = React.useRef(opts);\n optsRef.current = opts;\n\n const trackedProps = React.useRef(new Set<keyof $Result>([]));\n\n const addTrackedProp = React.useCallback((key: keyof $Result) => {\n trackedProps.current.add(key);\n }, []);\n\n type Unsubscribe = () => void;\n const currentSubscriptionRef = React.useRef<Unsubscribe>(() => {\n // noop\n });\n\n const reset = React.useCallback((): void => {\n // unsubscribe from the previous subscription\n currentSubscriptionRef.current?.();\n\n updateState(getInitialState);\n if (!opts.enabled) {\n return;\n }\n const subscription = opts.subscribe({\n onStarted: () => {\n optsRef.current.onStarted?.();\n updateState((prev) => ({\n ...(prev as any),\n status: 'pending',\n error: null,\n }));\n },\n onData: (data) => {\n optsRef.current.onData?.(data);\n updateState((prev) => ({\n ...(prev as any),\n status: 'pending',\n data,\n error: null,\n }));\n },\n onError: (error) => {\n optsRef.current.onError?.(error);\n updateState((prev) => ({\n ...(prev as any),\n status: 'error',\n error,\n }));\n },\n onConnectionStateChange: (result) => {\n optsRef.current.onConnectionStateChange?.(result);\n updateState((prev) => {\n switch (result.state) {\n case 'connecting':\n return {\n ...prev,\n status: 'connecting',\n error: result.error,\n };\n case 'pending':\n // handled in onStarted\n return prev;\n case 'idle':\n return {\n ...prev,\n status: 'idle',\n data: undefined,\n error: null,\n };\n }\n });\n },\n });\n\n currentSubscriptionRef.current = () => {\n subscription.unsubscribe();\n };\n // eslint-disable-next-line react-hooks/react-compiler\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [hashKey(opts.queryKey), opts.enabled]);\n\n const getInitialState = React.useCallback((): $Result => {\n return opts.enabled\n ? {\n data: undefined,\n error: null,\n status: 'connecting',\n reset,\n }\n : {\n data: undefined,\n error: null,\n status: 'idle',\n reset,\n };\n }, [opts.enabled, reset]);\n\n const resultRef = React.useRef<$Result>(getInitialState());\n\n const [state, setState] = React.useState<$Result>(\n trackResult(resultRef.current, addTrackedProp),\n );\n\n state.reset = reset;\n\n const updateState = React.useCallback(\n (callback: (prevState: $Result) => $Result) => {\n const prev = resultRef.current;\n const next = (resultRef.current = callback(prev));\n\n let shouldUpdate = false;\n for (const key of trackedProps.current) {\n if (prev[key] !== next[key]) {\n shouldUpdate = true;\n break;\n }\n }\n if (shouldUpdate) {\n setState(trackResult(next, addTrackedProp));\n }\n },\n [addTrackedProp],\n );\n\n React.useEffect(() => {\n if (!opts.enabled) {\n return;\n }\n reset();\n\n return () => {\n currentSubscriptionRef.current?.();\n };\n }, [reset, opts.enabled]);\n\n return state;\n}\n\nfunction trackResult<T extends object>(\n result: T,\n onTrackResult: (key: keyof T) => void,\n): T {\n const trackedResult = new Proxy(result, {\n get(target, prop) {\n onTrackResult(prop as keyof T);\n return target[prop as keyof T];\n },\n });\n\n return trackedResult;\n}\n"],"mappings":";;;;;;;;AA2HA,MAAa,0BAA0B,CAACA,SAKH;CACnC,MAAM,EAAE,WAAW,MAAM,UAAU,OAAO,CAAE,GAAE,GAAG;CACjD,MAAM,QAAQ,SAAS,IAAI;CAC3B,MAAM,UAAU,aAAa,SAAS,KAAK,UAAU,UAAU;CAE/D,MAAMC,aAAoE,CACxE,cACG;AACH,SAAO,UAAU,KAAK,KAAK,IAAI,EAAE,iBAAoB,UAAU;CAChE;AAED,QAAO;EACL,GAAG;EACH;EACA,WAAW;EACX;EACA,MAAM,wBAAwB,EAAE,KAAM,EAAC;CACxC;AACF;AAED,SAAgB,gBACdC,MACyC;CAGzC,MAAM,UAAU,MAAM,OAAO,KAAK;AAClC,SAAQ,UAAU;CAElB,MAAM,eAAe,MAAM,OAAO,IAAI,IAAmB,CAAE,GAAE;CAE7D,MAAM,iBAAiB,MAAM,YAAY,CAACC,QAAuB;AAC/D,eAAa,QAAQ,IAAI,IAAI;CAC9B,GAAE,CAAE,EAAC;CAGN,MAAM,yBAAyB,MAAM,OAAoB,MAAM,CAE9D,EAAC;CAEF,MAAM,QAAQ,MAAM,YAAY,MAAY;AAE1C,yBAAuB,WAAW;AAElC,cAAY,gBAAgB;AAC5B,OAAK,KAAK,QACR;EAEF,MAAM,eAAe,KAAK,UAAU;GAClC,WAAW,MAAM;AACf,YAAQ,QAAQ,aAAa;AAC7B,gBAAY,CAAC,UAAU;KACrB,GAAI;KACJ,QAAQ;KACR,OAAO;IACR,GAAE;GACJ;GACD,QAAQ,CAAC,SAAS;AAChB,YAAQ,QAAQ,SAAS,KAAK;AAC9B,gBAAY,CAAC,UAAU;KACrB,GAAI;KACJ,QAAQ;KACR;KACA,OAAO;IACR,GAAE;GACJ;GACD,SAAS,CAAC,UAAU;AAClB,YAAQ,QAAQ,UAAU,MAAM;AAChC,gBAAY,CAAC,UAAU;KACrB,GAAI;KACJ,QAAQ;KACR;IACD,GAAE;GACJ;GACD,yBAAyB,CAAC,WAAW;AACnC,YAAQ,QAAQ,0BAA0B,OAAO;AACjD,gBAAY,CAAC,SAAS;AACpB,aAAQ,OAAO,OAAf;MACE,KAAK,aACH,QAAO;OACL,GAAG;OACH,QAAQ;OACR,OAAO,OAAO;MACf;MACH,KAAK,UAEH,QAAO;MACT,KAAK,OACH,QAAO;OACL,GAAG;OACH,QAAQ;OACR;OACA,OAAO;MACR;KACJ;IACF,EAAC;GACH;EACF,EAAC;AAEF,yBAAuB,UAAU,MAAM;AACrC,gBAAa,aAAa;EAC3B;CAGF,GAAE,CAAC,QAAQ,KAAK,SAAS,EAAE,KAAK,OAAQ,EAAC;CAE1C,MAAM,kBAAkB,MAAM,YAAY,MAAe;AACvD,SAAO,KAAK,UACR;GACE;GACA,OAAO;GACP,QAAQ;GACR;EACD,IACD;GACE;GACA,OAAO;GACP,QAAQ;GACR;EACD;CACN,GAAE,CAAC,KAAK,SAAS,KAAM,EAAC;CAEzB,MAAM,YAAY,MAAM,OAAgB,iBAAiB,CAAC;CAE1D,MAAM,CAAC,OAAO,SAAS,GAAG,MAAM,SAC9B,YAAY,UAAU,SAAS,eAAe,CAC/C;AAED,OAAM,QAAQ;CAEd,MAAM,cAAc,MAAM,YACxB,CAACC,aAA8C;EAC7C,MAAM,OAAO,UAAU;EACvB,MAAM,OAAQ,UAAU,UAAU,SAAS,KAAK;EAEhD,IAAI,eAAe;AACnB,OAAK,MAAM,OAAO,aAAa,QAC7B,KAAI,KAAK,SAAS,KAAK,MAAM;AAC3B,kBAAe;AACf;EACD;AAEH,MAAI,aACF,UAAS,YAAY,MAAM,eAAe,CAAC;CAE9C,GACD,CAAC,cAAe,EACjB;AAED,OAAM,UAAU,MAAM;AACpB,OAAK,KAAK,QACR;AAEF,SAAO;AAEP,SAAO,MAAM;AACX,0BAAuB,WAAW;EACnC;CACF,GAAE,CAAC,OAAO,KAAK,OAAQ,EAAC;AAEzB,QAAO;AACR;AAED,SAAS,YACPC,QACAC,eACG;CACH,MAAM,gBAAgB,IAAI,MAAM,QAAQ,EACtC,IAAI,QAAQ,MAAM;AAChB,gBAAc,KAAgB;AAC9B,SAAO,OAAO;CACf,EACF;AAED,QAAO;AACR"}