@trpc/client 10.0.0-alpha.8 → 10.0.0-proxy-alpha.53

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 (180) hide show
  1. package/README.md +58 -1
  2. package/dist/TRPCClientError.d.ts +16 -20
  3. package/dist/TRPCClientError.d.ts.map +1 -1
  4. package/dist/createTRPCClient.d.ts +2 -3
  5. package/dist/createTRPCClient.d.ts.map +1 -1
  6. package/dist/createTRPCClientProxy.d.ts +37 -0
  7. package/dist/createTRPCClientProxy.d.ts.map +1 -0
  8. package/dist/httpUtils-44781613.mjs +76 -0
  9. package/dist/httpUtils-801112a6.js +79 -0
  10. package/dist/index.d.ts +2 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +260 -280
  13. package/dist/index.mjs +253 -271
  14. package/dist/internals/TRPCClient.d.ts +39 -21
  15. package/dist/internals/TRPCClient.d.ts.map +1 -1
  16. package/dist/internals/dataLoader.d.ts +7 -6
  17. package/dist/internals/dataLoader.d.ts.map +1 -1
  18. package/dist/internals/fetchHelpers.d.ts +1 -1
  19. package/dist/internals/fetchHelpers.d.ts.map +1 -1
  20. package/dist/internals/retryDelay.d.ts.map +1 -1
  21. package/dist/links/dedupeLink.d.ts.map +1 -1
  22. package/dist/links/httpBatchLink.d.ts +2 -2
  23. package/dist/links/httpBatchLink.d.ts.map +1 -1
  24. package/dist/links/httpBatchLink.js +189 -172
  25. package/dist/links/httpBatchLink.mjs +189 -172
  26. package/dist/links/httpLink.d.ts +1 -1
  27. package/dist/links/httpLink.d.ts.map +1 -1
  28. package/dist/links/httpLink.js +31 -35
  29. package/dist/links/httpLink.mjs +31 -35
  30. package/dist/links/index.d.ts +9 -0
  31. package/dist/links/index.d.ts.map +1 -0
  32. package/dist/links/internals/createChain.d.ts.map +1 -1
  33. package/dist/links/internals/httpUtils.d.ts +31 -0
  34. package/dist/links/internals/httpUtils.d.ts.map +1 -0
  35. package/dist/links/internals/transformResult.d.ts +28 -0
  36. package/dist/links/internals/transformResult.d.ts.map +1 -0
  37. package/dist/links/loggerLink.d.ts +3 -3
  38. package/dist/links/loggerLink.d.ts.map +1 -1
  39. package/dist/links/loggerLink.js +90 -96
  40. package/dist/links/loggerLink.mjs +90 -91
  41. package/dist/links/retryLink.d.ts.map +1 -1
  42. package/dist/links/splitLink.d.ts +1 -1
  43. package/dist/links/splitLink.d.ts.map +1 -1
  44. package/dist/links/splitLink.js +3 -25
  45. package/dist/links/splitLink.mjs +2 -28
  46. package/dist/links/types.d.ts +13 -12
  47. package/dist/links/types.d.ts.map +1 -1
  48. package/dist/links/wsLink.d.ts +12 -5
  49. package/dist/links/wsLink.d.ts.map +1 -1
  50. package/dist/links/wsLink.js +250 -358
  51. package/dist/links/wsLink.mjs +250 -348
  52. package/dist/splitLink-695ae288.js +48 -0
  53. package/dist/splitLink-ad44a55d.mjs +45 -0
  54. package/dist/transformResult-106791d7.mjs +62 -0
  55. package/dist/transformResult-e15ccdf6.js +65 -0
  56. package/links/httpBatchLink/dist/trpc-client-links-httpBatchLink.cjs.dev.js +15 -13
  57. package/links/httpBatchLink/dist/trpc-client-links-httpBatchLink.cjs.prod.js +15 -13
  58. package/links/httpBatchLink/dist/trpc-client-links-httpBatchLink.esm.js +12 -10
  59. package/links/httpLink/dist/trpc-client-links-httpLink.cjs.dev.js +4 -4
  60. package/links/httpLink/dist/trpc-client-links-httpLink.cjs.prod.js +4 -4
  61. package/links/httpLink/dist/trpc-client-links-httpLink.esm.js +1 -1
  62. package/links/wsLink/dist/trpc-client-links-wsLink.cjs.dev.js +3 -1
  63. package/links/wsLink/dist/trpc-client-links-wsLink.cjs.prod.js +3 -1
  64. package/links/wsLink/dist/trpc-client-links-wsLink.esm.js +3 -1
  65. package/package.json +23 -34
  66. package/src/TRPCClientError.ts +38 -28
  67. package/src/createTRPCClient.ts +8 -3
  68. package/src/createTRPCClientProxy.ts +113 -0
  69. package/src/index.ts +2 -1
  70. package/src/internals/TRPCClient.ts +118 -77
  71. package/src/internals/dataLoader.ts +116 -53
  72. package/src/internals/fetchHelpers.ts +2 -2
  73. package/src/links/dedupeLink.test.ts +9 -15
  74. package/src/links/dedupeLink.ts +6 -7
  75. package/src/links/httpBatchLink.ts +73 -36
  76. package/src/links/httpLink.ts +18 -6
  77. package/src/links/index.ts +8 -0
  78. package/src/links/internals/createChain.test.ts +23 -38
  79. package/src/links/internals/createChain.ts +8 -3
  80. package/src/links/internals/httpUtils.ts +117 -0
  81. package/src/links/internals/transformResult.ts +40 -0
  82. package/src/links/loggerLink.ts +6 -7
  83. package/src/links/retryLink.ts +2 -3
  84. package/src/links/splitLink.test.ts +3 -3
  85. package/src/links/splitLink.ts +5 -5
  86. package/src/links/types.ts +15 -12
  87. package/src/links/wsLink.ts +57 -23
  88. package/dist/TRPCClientError-17b117e1.mjs +0 -81
  89. package/dist/TRPCClientError-ec6bd2ca.js +0 -94
  90. package/dist/createChain-389cc116.mjs +0 -25
  91. package/dist/createChain-864dbb30.js +0 -27
  92. package/dist/httpUtils-1f9e4e3c.js +0 -97
  93. package/dist/httpUtils-c09d7b79.mjs +0 -91
  94. package/dist/index.ts.js +0 -1
  95. package/dist/internals/transformRPCResponse.d.ts +0 -15
  96. package/dist/internals/transformRPCResponse.d.ts.map +0 -1
  97. package/dist/links/httpBatchLink.ts.js +0 -1
  98. package/dist/links/httpLink.ts.js +0 -1
  99. package/dist/links/httpUtils.d.ts +0 -22
  100. package/dist/links/httpUtils.d.ts.map +0 -1
  101. package/dist/links/internals/transformOperationResult.d.ts +0 -16
  102. package/dist/links/internals/transformOperationResult.d.ts.map +0 -1
  103. package/dist/links/loggerLink.ts.js +0 -1
  104. package/dist/links/splitLink.ts.js +0 -1
  105. package/dist/links/transformerLink.d.ts +0 -4
  106. package/dist/links/transformerLink.d.ts.map +0 -1
  107. package/dist/links/transformerLink.js +0 -75
  108. package/dist/links/transformerLink.mjs +0 -67
  109. package/dist/links/transformerLink.ts.js +0 -1
  110. package/dist/links/wsLink.ts.js +0 -1
  111. package/dist/observable-7e66cb56.mjs +0 -102
  112. package/dist/observable-85669100.js +0 -104
  113. package/dist/rx/index.d.ts +0 -3
  114. package/dist/rx/index.d.ts.map +0 -1
  115. package/dist/rx/index.js +0 -9
  116. package/dist/rx/index.mjs +0 -1
  117. package/dist/rx/index.ts.js +0 -1
  118. package/dist/rx/observable.d.ts +0 -4
  119. package/dist/rx/observable.d.ts.map +0 -1
  120. package/dist/rx/operators/index.d.ts +0 -4
  121. package/dist/rx/operators/index.d.ts.map +0 -1
  122. package/dist/rx/operators/index.js +0 -38
  123. package/dist/rx/operators/index.mjs +0 -32
  124. package/dist/rx/operators/index.ts.js +0 -1
  125. package/dist/rx/operators/map.d.ts +0 -3
  126. package/dist/rx/operators/map.d.ts.map +0 -1
  127. package/dist/rx/operators/share.d.ts +0 -6
  128. package/dist/rx/operators/share.d.ts.map +0 -1
  129. package/dist/rx/operators/tap.d.ts +0 -3
  130. package/dist/rx/operators/tap.d.ts.map +0 -1
  131. package/dist/rx/types.d.ts +0 -29
  132. package/dist/rx/types.d.ts.map +0 -1
  133. package/dist/rx/util/identity.d.ts +0 -2
  134. package/dist/rx/util/identity.d.ts.map +0 -1
  135. package/dist/rx/util/observableToPromise.d.ts +0 -10
  136. package/dist/rx/util/observableToPromise.d.ts.map +0 -1
  137. package/dist/rx/util/pipe.d.ts +0 -4
  138. package/dist/rx/util/pipe.d.ts.map +0 -1
  139. package/dist/share-4d79dc49.js +0 -110
  140. package/dist/share-671b63fa.mjs +0 -108
  141. package/dist/tap-538fa07f.mjs +0 -30
  142. package/dist/tap-799a2d33.js +0 -32
  143. package/links/transformerLink/dist/trpc-client-links-transformerLink.cjs.d.ts +0 -1
  144. package/links/transformerLink/dist/trpc-client-links-transformerLink.cjs.dev.js +0 -67
  145. package/links/transformerLink/dist/trpc-client-links-transformerLink.cjs.js +0 -7
  146. package/links/transformerLink/dist/trpc-client-links-transformerLink.cjs.prod.js +0 -67
  147. package/links/transformerLink/dist/trpc-client-links-transformerLink.esm.js +0 -63
  148. package/links/transformerLink/index.d.ts +0 -1
  149. package/links/transformerLink/index.js +0 -1
  150. package/rx/dist/trpc-client-rx.cjs.d.ts +0 -1
  151. package/rx/dist/trpc-client-rx.cjs.dev.js +0 -9
  152. package/rx/dist/trpc-client-rx.cjs.js +0 -7
  153. package/rx/dist/trpc-client-rx.cjs.prod.js +0 -9
  154. package/rx/dist/trpc-client-rx.esm.js +0 -1
  155. package/rx/index.d.ts +0 -1
  156. package/rx/index.js +0 -1
  157. package/rx/operators/dist/trpc-client-rx-operators.cjs.d.ts +0 -1
  158. package/rx/operators/dist/trpc-client-rx-operators.cjs.dev.js +0 -39
  159. package/rx/operators/dist/trpc-client-rx-operators.cjs.js +0 -7
  160. package/rx/operators/dist/trpc-client-rx-operators.cjs.prod.js +0 -39
  161. package/rx/operators/dist/trpc-client-rx-operators.esm.js +0 -33
  162. package/rx/operators/index.d.ts +0 -1
  163. package/rx/operators/index.js +0 -1
  164. package/src/internals/transformRPCResponse.ts +0 -25
  165. package/src/links/httpUtils.ts +0 -94
  166. package/src/links/internals/transformOperationResult.ts +0 -25
  167. package/src/links/transformerLink.ts +0 -70
  168. package/src/rx/index.ts +0 -2
  169. package/src/rx/observable.test.ts +0 -83
  170. package/src/rx/observable.ts +0 -70
  171. package/src/rx/operators/index.ts +0 -3
  172. package/src/rx/operators/map.test.ts +0 -92
  173. package/src/rx/operators/map.ts +0 -25
  174. package/src/rx/operators/share.test.ts +0 -60
  175. package/src/rx/operators/share.ts +0 -67
  176. package/src/rx/operators/tap.ts +0 -26
  177. package/src/rx/types.ts +0 -69
  178. package/src/rx/util/identity.ts +0 -3
  179. package/src/rx/util/observableToPromise.ts +0 -49
  180. package/src/rx/util/pipe.ts +0 -22
package/dist/index.mjs CHANGED
@@ -1,299 +1,281 @@
1
- import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
2
- import _createClass from '@babel/runtime/helpers/createClass';
1
+ import { observable, share, observableToPromise } from '@trpc/server/observable';
2
+ import { T as TRPCClientError } from './transformResult-106791d7.mjs';
3
+ export { T as TRPCClientError } from './transformResult-106791d7.mjs';
3
4
  import { httpBatchLink } from './links/httpBatchLink.mjs';
4
- import { c as createChain } from './createChain-389cc116.mjs';
5
- import { T as TRPCClientError } from './TRPCClientError-17b117e1.mjs';
6
- export { T as TRPCClientError } from './TRPCClientError-17b117e1.mjs';
7
- import { s as share } from './share-671b63fa.mjs';
8
- import _assertThisInitialized from '@babel/runtime/helpers/assertThisInitialized';
9
- import _inherits from '@babel/runtime/helpers/inherits';
10
- import _possibleConstructorReturn from '@babel/runtime/helpers/possibleConstructorReturn';
11
- import _getPrototypeOf from '@babel/runtime/helpers/getPrototypeOf';
12
- import _wrapNativeSuper from '@babel/runtime/helpers/wrapNativeSuper';
13
- import './observable-7e66cb56.mjs';
14
- import './httpUtils-c09d7b79.mjs';
15
- import '@babel/runtime/helpers/defineProperty';
5
+ export { httpBatchLink } from './links/httpBatchLink.mjs';
6
+ import { c as createChain } from './splitLink-ad44a55d.mjs';
7
+ export { s as splitLink } from './splitLink-ad44a55d.mjs';
8
+ import { createProxy } from '@trpc/server/shared';
9
+ export { httpLink } from './links/httpLink.mjs';
10
+ export { loggerLink } from './links/loggerLink.mjs';
11
+ export { createWSClient, wsLink } from './links/wsLink.mjs';
12
+ import './httpUtils-44781613.mjs';
16
13
 
17
14
  function getWindow() {
18
- if (typeof window !== 'undefined') {
19
- return window;
20
- }
21
-
22
- return global;
15
+ if (typeof window !== 'undefined') {
16
+ return window;
17
+ }
18
+ return global;
23
19
  }
24
20
  function getAbortController(ac) {
25
- var win = getWindow();
26
- return ac || win.AbortController || null;
21
+ const win = getWindow();
22
+ return (ac ?? win.AbortController) ?? undefined;
27
23
  }
28
24
 
29
25
  function getFetch(f) {
30
- if (f) {
31
- return f;
32
- }
33
-
34
- var win = getWindow();
35
-
36
- if (win.fetch) {
37
- return typeof win.fetch.bind === 'function' ? win.fetch.bind(win) : win.fetch;
38
- }
39
-
40
- throw new Error('No fetch implementation found');
41
- }
42
-
43
- /** @internal */
44
- function transformOperationResult(result) {
45
- var context = result.context;
46
-
47
- if ('error' in result.data) {
48
- var error = TRPCClientError.from(result.data);
49
- return {
50
- ok: false,
51
- error: error,
52
- context: context
53
- };
54
- }
55
-
56
- var data = result.data.result.data;
57
- return {
58
- ok: true,
59
- data: data,
60
- context: context
61
- };
62
- }
63
-
64
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
65
-
66
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
67
-
68
- var ObservableAbortError = /*#__PURE__*/function (_Error) {
69
- _inherits(ObservableAbortError, _Error);
70
-
71
- var _super = /*#__PURE__*/_createSuper(ObservableAbortError);
72
-
73
- function ObservableAbortError(message) {
74
- var _this;
75
-
76
- _classCallCheck(this, ObservableAbortError);
77
-
78
- _this = _super.call(this, message);
79
- _this.name = 'ObservableAbortError';
80
- Object.setPrototypeOf(_assertThisInitialized(_this), ObservableAbortError.prototype);
81
- return _this;
82
- }
83
-
84
- return _createClass(ObservableAbortError);
85
- }( /*#__PURE__*/_wrapNativeSuper(Error));
86
- /** @internal */
87
-
88
- function observableToPromise(observable) {
89
- var abort;
90
- var promise = new Promise(function (resolve, reject) {
91
- var isDone = false;
92
-
93
- function onDone() {
94
- if (isDone) {
95
- return;
96
- }
97
-
98
- isDone = true;
99
- reject(new ObservableAbortError('This operation was cancelled.'));
100
- obs$.unsubscribe();
26
+ if (f) {
27
+ return f;
101
28
  }
102
-
103
- var obs$ = observable.subscribe({
104
- next: function next(data) {
105
- isDone = true;
106
- resolve(data);
107
- onDone();
108
- },
109
- error: function error(data) {
110
- isDone = true;
111
- reject(data);
112
- onDone();
113
- },
114
- complete: function complete() {
115
- isDone = true;
116
- onDone();
117
- }
118
- });
119
- abort = onDone;
120
- });
121
- return {
122
- promise: promise,
123
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
124
- abort: abort
125
- };
29
+ const win = getWindow();
30
+ if (win.fetch) {
31
+ return typeof win.fetch.bind === 'function' ? win.fetch.bind(win) : win.fetch;
32
+ }
33
+ throw new Error('No fetch implementation found');
126
34
  }
127
35
 
128
- var idCounter = 0;
129
-
130
- function getRequestId() {
131
- return ++idCounter;
36
+ function dedupeLink() {
37
+ // initialized config
38
+ return ()=>{
39
+ // initialized in app
40
+ const pending = {};
41
+ return ({ op , next })=>{
42
+ // initialized for request
43
+ if (op.type !== 'query') {
44
+ // pass through
45
+ return next(op);
46
+ }
47
+ const key = JSON.stringify([
48
+ op.path,
49
+ op.input
50
+ ]);
51
+ const obs$ = pending[key];
52
+ if (obs$) {
53
+ // console.log('hooking into pending', { op });
54
+ return observable((observer)=>obs$.subscribe(observer));
55
+ }
56
+ const shared$ = observable((observer)=>{
57
+ function reset() {
58
+ delete pending[key];
59
+ }
60
+ const subscription = next(op).subscribe({
61
+ next (v) {
62
+ observer.next(v);
63
+ },
64
+ error (e) {
65
+ reset();
66
+ observer.error(e);
67
+ },
68
+ complete () {
69
+ reset();
70
+ observer.complete();
71
+ }
72
+ });
73
+ return ()=>{
74
+ reset();
75
+ subscription.unsubscribe();
76
+ };
77
+ }).pipe(share());
78
+ pending[key] = shared$;
79
+ return shared$;
80
+ };
81
+ };
132
82
  }
133
83
 
134
- var TRPCClient = /*#__PURE__*/function () {
135
- function TRPCClient(opts) {
136
- var _this = this;
137
-
138
- _classCallCheck(this, TRPCClient);
139
-
140
- this.links = void 0;
141
- this.runtime = void 0;
142
-
143
- var _fetch = getFetch(opts === null || opts === void 0 ? void 0 : opts.fetch);
144
-
145
- var AC = getAbortController(opts === null || opts === void 0 ? void 0 : opts.AbortController);
146
-
147
- function getHeadersFn() {
148
- if (opts.headers) {
149
- var headers = opts.headers;
150
- return typeof headers === 'function' ? headers : function () {
151
- return headers;
84
+ function retryLink(opts) {
85
+ // initialized config
86
+ return ()=>{
87
+ // initialized in app
88
+ return ({ op , next })=>{
89
+ // initialized for request
90
+ return observable((observer)=>{
91
+ let next$ = null;
92
+ let attempts = 0;
93
+ let isDone = false;
94
+ function attempt() {
95
+ attempts++;
96
+ next$?.unsubscribe();
97
+ next$ = next(op).subscribe({
98
+ error (error) {
99
+ if (attempts >= opts.attempts) {
100
+ observer.error(error);
101
+ return;
102
+ }
103
+ attempt();
104
+ },
105
+ next (result) {
106
+ if ('result' in result.result) {
107
+ isDone = true;
108
+ observer.next(result);
109
+ return;
110
+ }
111
+ if (attempts >= opts.attempts) {
112
+ isDone = true;
113
+ observer.next(result);
114
+ return;
115
+ }
116
+ attempt();
117
+ },
118
+ complete () {
119
+ if (isDone) {
120
+ observer.complete();
121
+ }
122
+ }
123
+ });
124
+ }
125
+ attempt();
126
+ return ()=>{
127
+ isDone = true;
128
+ next$?.unsubscribe();
129
+ };
130
+ });
152
131
  };
153
- }
154
-
155
- return function () {
156
- return {};
157
- };
158
- }
159
-
160
- this.runtime = {
161
- AbortController: AC,
162
- fetch: _fetch,
163
- headers: getHeadersFn()
164
132
  };
133
+ }
165
134
 
166
- if ('links' in opts) {
167
- this.links = opts.links.map(function (link) {
168
- return link(_this.runtime);
169
- });
170
- } else {
171
- this.links = [httpBatchLink({
172
- url: opts.url
173
- })(this.runtime)];
135
+ class TRPCClient {
136
+ getRequestId() {
137
+ return ++this.requestId;
174
138
  }
175
- }
176
-
177
- _createClass(TRPCClient, [{
178
- key: "$request",
179
- value: function $request(_ref) {
180
- var type = _ref.type,
181
- input = _ref.input,
182
- path = _ref.path,
183
- _ref$context = _ref.context,
184
- context = _ref$context === void 0 ? {} : _ref$context;
185
- var chain$ = createChain({
186
- links: this.links,
187
- op: {
188
- id: getRequestId(),
189
- type: type,
190
- path: path,
191
- input: input,
192
- context: context
193
- }
194
- });
195
- return chain$.pipe(share());
139
+ $request({ type , input , path , context ={} }) {
140
+ const chain$ = createChain({
141
+ links: this.links,
142
+ op: {
143
+ id: this.getRequestId(),
144
+ type,
145
+ path,
146
+ input,
147
+ context
148
+ }
149
+ });
150
+ return chain$.pipe(share());
196
151
  }
197
- }, {
198
- key: "requestAsPromise",
199
- value: function requestAsPromise(opts) {
200
- var req$ = this.$request(opts);
201
-
202
- var _observableToPromise = observableToPromise(req$),
203
- promise = _observableToPromise.promise,
204
- abort = _observableToPromise.abort;
205
-
206
- var cancellablePromise = new Promise(function (resolve, reject) {
207
- promise.then(function (result) {
208
- var transformed = transformOperationResult(result);
209
-
210
- if (transformed.ok) {
211
- resolve(transformed.data);
212
- return;
213
- }
214
-
215
- reject(transformed.error);
216
- }).catch(function (err) {
217
- reject(TRPCClientError.from(err));
152
+ requestAsPromise(opts) {
153
+ const req$ = this.$request(opts);
154
+ const { promise , abort } = observableToPromise(req$);
155
+ const abortablePromise = new Promise((resolve, reject)=>{
156
+ opts.signal?.addEventListener('abort', abort);
157
+ promise.then((envelope)=>{
158
+ resolve(envelope.result.data);
159
+ }).catch((err)=>{
160
+ reject(TRPCClientError.from(err));
161
+ });
218
162
  });
219
- });
220
- cancellablePromise.cancel = abort;
221
- return cancellablePromise;
163
+ return abortablePromise;
222
164
  }
223
- }, {
224
- key: "query",
225
- value: function query(path) {
226
- var _ref2;
227
-
228
- var context = (_ref2 = arguments.length <= 2 ? undefined : arguments[2]) === null || _ref2 === void 0 ? void 0 : _ref2.context;
229
- return this.requestAsPromise({
230
- type: 'query',
231
- path: path,
232
- input: arguments.length <= 1 ? undefined : arguments[1],
233
- context: context
234
- });
165
+ query(path, ...args) {
166
+ // FIXME: Should be inferred from `args`
167
+ const context = args[1]?.context;
168
+ const signal = args[1]?.signal;
169
+ return this.requestAsPromise({
170
+ type: 'query',
171
+ path,
172
+ input: args[0],
173
+ context,
174
+ signal
175
+ });
235
176
  }
236
- }, {
237
- key: "mutation",
238
- value: function mutation(path) {
239
- var _ref3;
240
-
241
- var context = (_ref3 = arguments.length <= 2 ? undefined : arguments[2]) === null || _ref3 === void 0 ? void 0 : _ref3.context;
242
- return this.requestAsPromise({
243
- type: 'mutation',
244
- path: path,
245
- input: arguments.length <= 1 ? undefined : arguments[1],
246
- context: context
247
- });
177
+ mutation(path, ...args) {
178
+ // FIXME: Should be inferred from `args`
179
+ const context = args[1]?.context;
180
+ const signal = args[1]?.signal;
181
+ return this.requestAsPromise({
182
+ type: 'mutation',
183
+ path,
184
+ input: args[0],
185
+ context,
186
+ signal
187
+ });
248
188
  }
249
- }, {
250
- key: "subscription",
251
- value: function subscription(path, input, opts) {
252
- var observable$ = this.$request({
253
- type: 'subscription',
254
- path: path,
255
- input: input,
256
- context: opts.context
257
- });
258
- var observer = observable$.subscribe({
259
- next: function next(result) {
260
- var _opts$next;
261
-
262
- if ('error' in result.data) {
263
- var _opts$error;
264
-
265
- var err = TRPCClientError.from(result.data, {
266
- meta: result.context
267
- });
268
- (_opts$error = opts.error) === null || _opts$error === void 0 ? void 0 : _opts$error.call(opts, err);
269
- return;
270
- }
271
-
272
- (_opts$next = opts.next) === null || _opts$next === void 0 ? void 0 : _opts$next.call(opts, result.data.result);
273
- },
274
- error: function error(err) {
275
- var _opts$error2;
276
-
277
- (_opts$error2 = opts.error) === null || _opts$error2 === void 0 ? void 0 : _opts$error2.call(opts, err);
278
- },
279
- complete: function complete() {
280
- var _opts$complete;
281
-
282
- (_opts$complete = opts.complete) === null || _opts$complete === void 0 ? void 0 : _opts$complete.call(opts);
189
+ subscription(path, input, opts) {
190
+ const observable$ = this.$request({
191
+ type: 'subscription',
192
+ path,
193
+ input,
194
+ context: opts?.context
195
+ });
196
+ return observable$.subscribe({
197
+ next (envelope) {
198
+ if (envelope.result.type === 'started') {
199
+ opts.onStarted?.();
200
+ } else if (envelope.result.type === 'stopped') {
201
+ opts.onStopped?.();
202
+ } else {
203
+ opts.onData?.(envelope.result.data);
204
+ }
205
+ },
206
+ error (err) {
207
+ opts.onError?.(err);
208
+ },
209
+ complete () {
210
+ opts.onComplete?.();
211
+ }
212
+ });
213
+ }
214
+ constructor(opts){
215
+ const _fetch = getFetch(opts?.fetch);
216
+ const AC = getAbortController(opts?.AbortController);
217
+ this.requestId = 0;
218
+ function getHeadersFn() {
219
+ if (opts.headers) {
220
+ const headers = opts.headers;
221
+ return typeof headers === 'function' ? headers : ()=>headers;
222
+ }
223
+ return ()=>({});
224
+ }
225
+ const transformer = opts.transformer ? 'input' in opts.transformer ? {
226
+ serialize: opts.transformer.input.serialize,
227
+ deserialize: opts.transformer.output.deserialize
228
+ } : opts.transformer : {
229
+ serialize: (data)=>data,
230
+ deserialize: (data)=>data
231
+ };
232
+ this.runtime = {
233
+ AbortController: AC,
234
+ fetch: _fetch,
235
+ headers: getHeadersFn(),
236
+ transformer
237
+ };
238
+ if ('links' in opts) {
239
+ this.links = opts.links.map((link)=>link(this.runtime));
240
+ } else {
241
+ this.links = [
242
+ httpBatchLink({
243
+ url: opts.url
244
+ })(this.runtime),
245
+ ];
283
246
  }
284
- });
285
- return function () {
286
- observer.unsubscribe();
287
- };
288
247
  }
289
- }]);
290
-
291
- return TRPCClient;
292
- }();
248
+ }
293
249
 
294
- /* eslint-disable @typescript-eslint/no-explicit-any */
295
250
  function createTRPCClient(opts) {
296
- return new TRPCClient(opts);
251
+ const client = new TRPCClient(opts);
252
+ return client;
253
+ }
254
+
255
+ const clientCallTypeMap = {
256
+ query: 'query',
257
+ mutate: 'mutation',
258
+ subscribe: 'subscription'
259
+ };
260
+ /**
261
+ * @deprecated use createTRPCProxyClient instead
262
+ * @internal
263
+ */ function createTRPCClientProxy(client) {
264
+ const proxy = createProxy(({ path , args })=>{
265
+ const pathCopy = [
266
+ ...path
267
+ ];
268
+ const clientCallType = pathCopy.pop();
269
+ const procedureType = clientCallTypeMap[clientCallType];
270
+ const fullPath = pathCopy.join('.');
271
+ return client[procedureType](fullPath, ...args);
272
+ });
273
+ return proxy;
274
+ }
275
+ function createTRPCProxyClient(opts) {
276
+ const client = createTRPCClient(opts);
277
+ const proxy = createTRPCClientProxy(client);
278
+ return proxy;
297
279
  }
298
280
 
299
- export { createTRPCClient, getFetch };
281
+ export { createTRPCClient, createTRPCClientProxy, createTRPCProxyClient, dedupeLink, getFetch, retryLink };
@@ -1,20 +1,8 @@
1
- import { AnyRouter, inferHandlerInput, inferProcedureInput, inferSubscriptionOutput } from '@trpc/server';
2
- import { TRPCResult } from '@trpc/server/rpc';
3
- import { CancelFn } from '..';
4
- import { HTTPHeaders, LinkRuntime, OperationContext, TRPCLink } from '../links/types';
5
- import { UnsubscribeFn } from '../rx';
6
- import { Observer } from '../rx/types';
1
+ import { AnyRouter, ClientDataTransformerOptions, inferHandlerInput, inferProcedureInput, inferProcedureOutput, inferSubscriptionOutput } from '@trpc/server';
2
+ import { ProcedureRecord } from '@trpc/server';
3
+ import { Unsubscribable } from '@trpc/server/observable';
7
4
  import { TRPCClientError } from '../TRPCClientError';
8
- declare type CancellablePromise<T = unknown> = Promise<T> & {
9
- cancel: CancelFn;
10
- };
11
- /**
12
- * @deprecated no longer used
13
- */
14
- export interface FetchOptions {
15
- fetch?: typeof fetch;
16
- AbortController?: typeof AbortController;
17
- }
5
+ import { HTTPHeaders, OperationContext, TRPCClientRuntime, TRPCLink } from '../links/types';
18
6
  interface CreateTRPCClientBaseOptions {
19
7
  /**
20
8
  * Add ponyfill for fetch
@@ -28,6 +16,11 @@ interface CreateTRPCClientBaseOptions {
28
16
  * headers to be set on outgoing requests / callback that of said headers
29
17
  */
30
18
  headers?: HTTPHeaders | (() => HTTPHeaders | Promise<HTTPHeaders>);
19
+ /**
20
+ * Data transformer
21
+ * @link https://trpc.io/docs/data-transformers
22
+ **/
23
+ transformer?: ClientDataTransformerOptions;
31
24
  }
32
25
  /** @internal */
33
26
  export interface CreateTRPCClientWithURLOptions extends CreateTRPCClientBaseOptions {
@@ -39,7 +32,7 @@ export interface CreateTRPCClientWithURLOptions extends CreateTRPCClientBaseOpti
39
32
  /** @internal */
40
33
  export interface CreateTRPCClientWithLinksOptions<TRouter extends AnyRouter> extends CreateTRPCClientBaseOptions {
41
34
  /**
42
- * @link http://localhost:3000/docs/links
35
+ * @link https://trpc.io/docs/links
43
36
  **/
44
37
  links: TRPCLink<TRouter>[];
45
38
  }
@@ -48,18 +41,43 @@ export interface TRPCRequestOptions {
48
41
  * Pass additional context to links
49
42
  */
50
43
  context?: OperationContext;
44
+ signal?: AbortSignal;
45
+ }
46
+ export interface TRPCSubscriptionObserver<TValue, TError> {
47
+ onStarted: () => void;
48
+ onData: (value: TValue) => void;
49
+ onError: (err: TError) => void;
50
+ onStopped: () => void;
51
+ onComplete: () => void;
51
52
  }
52
53
  /** @internal */
53
54
  export declare type CreateTRPCClientOptions<TRouter extends AnyRouter> = CreateTRPCClientWithLinksOptions<TRouter> | CreateTRPCClientWithURLOptions;
55
+ export declare type AssertType<T, K> = T extends K ? T : never;
56
+ /**
57
+ * @deprecated
58
+ */
59
+ export declare type AssertLegacyDef<TRouter extends AnyRouter> = TRouter['_def']['legacy'] extends Record<'subscriptions' | 'queries' | 'mutations', ProcedureRecord> ? TRouter['_def']['legacy'] : {
60
+ subscriptions: {};
61
+ queries: {};
62
+ mutations: {};
63
+ };
54
64
  export declare class TRPCClient<TRouter extends AnyRouter> {
55
65
  private readonly links;
56
- readonly runtime: LinkRuntime;
66
+ readonly runtime: TRPCClientRuntime;
67
+ private requestId;
68
+ private getRequestId;
57
69
  constructor(opts: CreateTRPCClientOptions<TRouter>);
58
70
  private $request;
59
71
  private requestAsPromise;
60
- query<TQueries extends TRouter['_def']['queries'], TPath extends string & keyof TQueries>(path: TPath, ...args: [...inferHandlerInput<TQueries[TPath]>, TRPCRequestOptions?]): CancellablePromise<import("@trpc/server").ThenArg<ReturnType<TQueries[TPath]["call"]>>>;
61
- mutation<TMutations extends TRouter['_def']['mutations'], TPath extends string & keyof TMutations>(path: TPath, ...args: [...inferHandlerInput<TMutations[TPath]>, TRPCRequestOptions?]): CancellablePromise<import("@trpc/server").ThenArg<ReturnType<TMutations[TPath]["call"]>>>;
62
- subscription<TSubscriptions extends TRouter['_def']['subscriptions'], TPath extends string & keyof TSubscriptions, TOutput extends inferSubscriptionOutput<TRouter, TPath>, TInput extends inferProcedureInput<TSubscriptions[TPath]>>(path: TPath, input: TInput, opts: TRPCRequestOptions & Partial<Observer<TRPCResult<TOutput>, TRPCClientError<TRouter>>>): UnsubscribeFn;
72
+ query<TQueries extends AssertLegacyDef<TRouter>['queries'], TPath extends string & keyof TQueries>(path: TPath, ...args: [
73
+ ...inferHandlerInput<AssertType<TQueries, ProcedureRecord>[TPath]>,
74
+ TRPCRequestOptions?
75
+ ]): Promise<inferProcedureOutput<TQueries[TPath]>>;
76
+ mutation<TMutations extends AssertLegacyDef<TRouter>['mutations'], TPath extends string & keyof TMutations>(path: TPath, ...args: [
77
+ ...inferHandlerInput<AssertType<TMutations, ProcedureRecord>[TPath]>,
78
+ TRPCRequestOptions?
79
+ ]): Promise<inferProcedureOutput<TMutations[TPath]>>;
80
+ subscription<TSubscriptions extends AssertLegacyDef<TRouter>['subscriptions'], TPath extends string & keyof TSubscriptions, TOutput extends inferSubscriptionOutput<TRouter, TPath>, TInput extends inferProcedureInput<AssertType<TSubscriptions, ProcedureRecord>[TPath]>>(path: TPath, input: TInput, opts: TRPCRequestOptions & Partial<TRPCSubscriptionObserver<TOutput, TRPCClientError<TRouter>>>): Unsubscribable;
63
81
  }
64
82
  export {};
65
83
  //# sourceMappingURL=TRPCClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TRPCClient.d.ts","sourceRoot":"","sources":["../../src/internals/TRPCClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TRPCClient.d.ts","sourceRoot":"","sources":["../../../../packages/client/src/internals/TRPCClient.ts"],"names":[],"mappings":"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"}