@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.
- package/dist/_virtual/rolldown_runtime.js +30 -0
- package/dist/index.d.mts +8 -0
- package/dist/index.d.ts +8 -10
- package/dist/index.js +6 -10
- package/dist/index.mjs +5 -3
- package/dist/internals/Context.d.mts +27 -0
- package/dist/internals/Context.d.mts.map +1 -0
- package/dist/internals/Context.d.ts +20 -14
- package/dist/internals/Context.d.ts.map +1 -1
- package/dist/internals/Context.js +42 -63
- package/dist/internals/Context.mjs +41 -41
- package/dist/internals/Context.mjs.map +1 -0
- package/dist/internals/createOptionsProxy.d.mts +160 -0
- package/dist/internals/createOptionsProxy.d.mts.map +1 -0
- package/dist/internals/createOptionsProxy.d.ts +140 -141
- package/dist/internals/createOptionsProxy.d.ts.map +1 -1
- package/dist/internals/createOptionsProxy.js +107 -109
- package/dist/internals/createOptionsProxy.mjs +106 -106
- package/dist/internals/createOptionsProxy.mjs.map +1 -0
- package/dist/internals/infiniteQueryOptions.d.mts +54 -0
- package/dist/internals/infiniteQueryOptions.d.mts.map +1 -0
- package/dist/internals/infiniteQueryOptions.d.ts +39 -46
- package/dist/internals/infiniteQueryOptions.d.ts.map +1 -1
- package/dist/internals/infiniteQueryOptions.js +28 -35
- package/dist/internals/infiniteQueryOptions.mjs +27 -32
- package/dist/internals/infiniteQueryOptions.mjs.map +1 -0
- package/dist/internals/mutationOptions.d.mts +33 -0
- package/dist/internals/mutationOptions.d.mts.map +1 -0
- package/dist/internals/mutationOptions.d.ts +24 -34
- package/dist/internals/mutationOptions.d.ts.map +1 -1
- package/dist/internals/mutationOptions.js +30 -36
- package/dist/internals/mutationOptions.mjs +30 -33
- package/dist/internals/mutationOptions.mjs.map +1 -0
- package/dist/internals/queryOptions.d.mts +45 -0
- package/dist/internals/queryOptions.d.mts.map +1 -0
- package/dist/internals/queryOptions.d.ts +36 -49
- package/dist/internals/queryOptions.d.ts.map +1 -1
- package/dist/internals/queryOptions.js +31 -39
- package/dist/internals/queryOptions.mjs +30 -36
- package/dist/internals/queryOptions.mjs.map +1 -0
- package/dist/internals/subscriptionOptions.d.mts +65 -0
- package/dist/internals/subscriptionOptions.d.mts.map +1 -0
- package/dist/internals/subscriptionOptions.d.ts +52 -60
- package/dist/internals/subscriptionOptions.d.ts.map +1 -1
- package/dist/internals/subscriptionOptions.js +123 -171
- package/dist/internals/subscriptionOptions.mjs +122 -149
- package/dist/internals/subscriptionOptions.mjs.map +1 -0
- package/dist/internals/types.d.mts +82 -0
- package/dist/internals/types.d.mts.map +1 -0
- package/dist/internals/types.d.ts +41 -42
- package/dist/internals/types.d.ts.map +1 -1
- package/dist/internals/utils.js +70 -99
- package/dist/internals/utils.mjs +69 -96
- package/dist/internals/utils.mjs.map +1 -0
- package/package.json +20 -17
- package/src/internals/mutationOptions.ts +2 -2
- package/src/internals/queryOptions.ts +1 -1
- package/src/internals/subscriptionOptions.ts +1 -0
- package/dist/bundle-analysis.json +0 -128
- package/dist/index.d.ts.map +0 -1
- package/dist/internals/utils.d.ts +0 -36
- package/dist/internals/utils.d.ts.map +0 -1
|
@@ -1,180 +1,132 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
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 {
|
|
2
|
-
import * as React from
|
|
3
|
-
import {
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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":"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"}
|