@trpc/client 10.0.0-alpha.20 → 10.0.0-alpha.23

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 (93) hide show
  1. package/dist/index.js +329 -275
  2. package/dist/index.mjs +317 -262
  3. package/dist/internals/TRPCClient.d.ts +12 -7
  4. package/dist/internals/TRPCClient.d.ts.map +1 -1
  5. package/dist/internals/dataLoader.d.ts +7 -6
  6. package/dist/internals/dataLoader.d.ts.map +1 -1
  7. package/dist/links/dedupeLink.d.ts.map +1 -1
  8. package/dist/links/httpBatchLink.d.ts +1 -1
  9. package/dist/links/httpBatchLink.d.ts.map +1 -1
  10. package/dist/links/index.d.ts +0 -2
  11. package/dist/links/index.d.ts.map +1 -1
  12. package/dist/links/internals/httpUtils.d.ts +15 -7
  13. package/dist/links/internals/httpUtils.d.ts.map +1 -1
  14. package/dist/links/internals/transformOperationResult.d.ts +17 -3
  15. package/dist/links/internals/transformOperationResult.d.ts.map +1 -1
  16. package/dist/links/loggerLink.d.ts.map +1 -1
  17. package/dist/links/retryLink.d.ts.map +1 -1
  18. package/dist/links/types.d.ts +10 -7
  19. package/dist/links/types.d.ts.map +1 -1
  20. package/dist/links/wsLink.d.ts +1 -1
  21. package/dist/links/wsLink.d.ts.map +1 -1
  22. package/links/httpBatchLink/dist/trpc-client-links-httpBatchLink.cjs.dev.js +4 -4
  23. package/links/httpBatchLink/dist/trpc-client-links-httpBatchLink.cjs.prod.js +4 -4
  24. package/links/httpBatchLink/dist/trpc-client-links-httpBatchLink.esm.js +4 -4
  25. package/links/wsLink/dist/trpc-client-links-wsLink.cjs.dev.js +2 -0
  26. package/links/wsLink/dist/trpc-client-links-wsLink.cjs.prod.js +2 -0
  27. package/links/wsLink/dist/trpc-client-links-wsLink.esm.js +2 -0
  28. package/package.json +13 -11
  29. package/src/internals/TRPCClient.ts +48 -24
  30. package/src/internals/dataLoader.ts +116 -53
  31. package/src/links/dedupeLink.test.ts +1 -1
  32. package/src/links/dedupeLink.ts +1 -2
  33. package/src/links/httpBatchLink.ts +54 -31
  34. package/src/links/httpLink.ts +3 -3
  35. package/src/links/index.ts +0 -2
  36. package/src/links/internals/createChain.test.ts +1 -1
  37. package/src/links/internals/createChain.ts +1 -1
  38. package/src/links/internals/httpUtils.ts +52 -31
  39. package/src/links/internals/transformOperationResult.ts +40 -12
  40. package/src/links/loggerLink.ts +1 -1
  41. package/src/links/retryLink.ts +1 -2
  42. package/src/links/splitLink.test.ts +1 -1
  43. package/src/links/splitLink.ts +4 -4
  44. package/src/links/types.ts +12 -7
  45. package/src/links/wsLink.ts +13 -10
  46. package/dist/links/transformerLink.d.ts +0 -4
  47. package/dist/links/transformerLink.d.ts.map +0 -1
  48. package/dist/observable/index.d.ts +0 -4
  49. package/dist/observable/index.d.ts.map +0 -1
  50. package/dist/observable/index.js +0 -38
  51. package/dist/observable/index.mjs +0 -31
  52. package/dist/observable/index.ts.js +0 -1
  53. package/dist/observable/internals/identity.d.ts +0 -2
  54. package/dist/observable/internals/identity.d.ts.map +0 -1
  55. package/dist/observable/internals/observableToPromise.d.ts +0 -10
  56. package/dist/observable/internals/observableToPromise.d.ts.map +0 -1
  57. package/dist/observable/internals/pipe.d.ts +0 -4
  58. package/dist/observable/internals/pipe.d.ts.map +0 -1
  59. package/dist/observable/observable.d.ts +0 -4
  60. package/dist/observable/observable.d.ts.map +0 -1
  61. package/dist/observable/operators/index.d.ts +0 -4
  62. package/dist/observable/operators/index.d.ts.map +0 -1
  63. package/dist/observable/operators/map.d.ts +0 -3
  64. package/dist/observable/operators/map.d.ts.map +0 -1
  65. package/dist/observable/operators/share.d.ts +0 -6
  66. package/dist/observable/operators/share.d.ts.map +0 -1
  67. package/dist/observable/operators/tap.d.ts +0 -3
  68. package/dist/observable/operators/tap.d.ts.map +0 -1
  69. package/dist/observable/types.d.ts +0 -29
  70. package/dist/observable/types.d.ts.map +0 -1
  71. package/dist/tap-0dcdee86.js +0 -243
  72. package/dist/tap-136a9a90.mjs +0 -239
  73. package/observable/dist/trpc-client-rx.cjs.d.ts +0 -1
  74. package/observable/dist/trpc-client-rx.cjs.dev.js +0 -9
  75. package/observable/dist/trpc-client-rx.cjs.js +0 -7
  76. package/observable/dist/trpc-client-rx.cjs.prod.js +0 -9
  77. package/observable/dist/trpc-client-rx.esm.js +0 -1
  78. package/observable/index.d.ts +0 -1
  79. package/observable/index.js +0 -1
  80. package/src/links/transformerLink.ts +0 -74
  81. package/src/observable/index.ts +0 -3
  82. package/src/observable/internals/identity.ts +0 -3
  83. package/src/observable/internals/observableToPromise.ts +0 -49
  84. package/src/observable/internals/pipe.ts +0 -22
  85. package/src/observable/observable.test.ts +0 -101
  86. package/src/observable/observable.ts +0 -70
  87. package/src/observable/operators/index.ts +0 -3
  88. package/src/observable/operators/map.test.ts +0 -92
  89. package/src/observable/operators/map.ts +0 -25
  90. package/src/observable/operators/share.test.ts +0 -60
  91. package/src/observable/operators/share.ts +0 -67
  92. package/src/observable/operators/tap.ts +0 -26
  93. package/src/observable/types.ts +0 -69
package/dist/index.mjs CHANGED
@@ -1,26 +1,26 @@
1
1
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
2
2
  import _createClass from '@babel/runtime/helpers/createClass';
3
+ import { observable, share, tap, observableToPromise } from '@trpc/server/observable';
3
4
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
5
  import _assertThisInitialized from '@babel/runtime/helpers/assertThisInitialized';
5
6
  import _inherits from '@babel/runtime/helpers/inherits';
6
7
  import _possibleConstructorReturn from '@babel/runtime/helpers/possibleConstructorReturn';
7
8
  import _getPrototypeOf from '@babel/runtime/helpers/getPrototypeOf';
8
9
  import _wrapNativeSuper from '@babel/runtime/helpers/wrapNativeSuper';
9
- import { o as observable, s as share, t as tap } from './tap-136a9a90.mjs';
10
10
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
11
11
 
12
12
  function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
13
13
 
14
14
  function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15
15
 
16
- function _createSuper$2(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$2(); 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); }; }
16
+ function _createSuper$1(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$1(); 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); }; }
17
17
 
18
- function _isNativeReflectConstruct$2() { 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; } }
18
+ function _isNativeReflectConstruct$1() { 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; } }
19
19
 
20
20
  var TRPCClientError = /*#__PURE__*/function (_Error) {
21
21
  _inherits(TRPCClientError, _Error);
22
22
 
23
- var _super = /*#__PURE__*/_createSuper$2(TRPCClientError);
23
+ var _super = /*#__PURE__*/_createSuper$1(TRPCClientError);
24
24
 
25
25
  function TRPCClientError(message, opts) {
26
26
  var _opts$result, _opts$result2;
@@ -161,81 +161,174 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
161
161
 
162
162
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
163
163
 
164
+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
165
+
166
+ /**
167
+ * A function that should never be called unless we messed something up.
168
+ */
169
+ var throwFatalError = function throwFatalError() {
170
+ throw new Error('Something went wrong. Please submit an issue at https://github.com/trpc/trpc/issues/new');
171
+ };
164
172
  /**
165
173
  * Dataloader that's very inspired by https://github.com/graphql/dataloader
166
174
  * Less configuration, no caching, and allows you to cancel requests
167
175
  * When cancelling a single fetch the whole batch will be cancelled only when _all_ items are cancelled
168
176
  */
169
- function dataLoader(fetchMany, opts) {
170
- var batch = null;
177
+
178
+
179
+ function dataLoader(batchLoader) {
180
+ var pendingItems = null;
171
181
  var dispatchTimer = null;
172
182
 
173
- var destroyTimerAndBatch = function destroyTimerAndBatch() {
183
+ var destroyTimerAndPendingItems = function destroyTimerAndPendingItems() {
174
184
  clearTimeout(dispatchTimer);
175
185
  dispatchTimer = null;
176
- batch = null;
186
+ pendingItems = null;
177
187
  };
188
+ /**
189
+ * Iterate through the items and split them into groups based on the `batchLoader`'s validate function
190
+ */
178
191
 
179
- function dispatch() {
180
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
181
- var batchCopy = batch;
182
- destroyTimerAndBatch();
183
-
184
- var _fetchMany = fetchMany(batchCopy.items.map(function (v) {
185
- return v.key;
186
- })),
187
- promise = _fetchMany.promise,
188
- cancel = _fetchMany.cancel;
189
-
190
- batchCopy.cancel = cancel;
191
- promise.then(function (result) {
192
- for (var i = 0; i < result.length; i++) {
193
- var _value = result[i];
194
- batchCopy.items[i].resolve(_value);
192
+
193
+ function groupItems(items) {
194
+ var groupedItems = [[]];
195
+ var index = 0;
196
+
197
+ while (true) {
198
+ var item = items[index];
199
+
200
+ if (!item) {
201
+ // we're done
202
+ break;
195
203
  }
196
- }).catch(function (cause) {
197
- var _iterator = _createForOfIteratorHelper(batchCopy.items),
198
- _step;
199
-
200
- try {
201
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
202
- var item = _step.value;
203
- item.reject(cause);
204
- }
205
- } catch (err) {
206
- _iterator.e(err);
207
- } finally {
208
- _iterator.f();
204
+
205
+ var lastGroup = groupedItems[groupedItems.length - 1];
206
+
207
+ if (item.aborted) {
208
+ // Item was aborted before it was dispatched
209
+ item.reject(new Error('Aborted'));
210
+ index++;
211
+ continue;
209
212
  }
210
- });
213
+
214
+ var isValid = batchLoader.validate(lastGroup.concat(item).map(function (it) {
215
+ return it.key;
216
+ }));
217
+
218
+ if (isValid) {
219
+ lastGroup.push(item);
220
+ index++;
221
+ continue;
222
+ }
223
+
224
+ if (lastGroup.length === 0) {
225
+ item.reject(new Error('Input is too big for a single dispatch'));
226
+ index++;
227
+ continue;
228
+ } // Create new group, next iteration will try to add the item to that
229
+
230
+
231
+ groupedItems.push([]);
232
+ }
233
+
234
+ return groupedItems;
211
235
  }
212
236
 
213
- function load(key) {
214
- var batchItem = {
215
- cancelled: false,
216
- key: key
217
- };
237
+ function dispatch() {
238
+ var groupedItems = groupItems(pendingItems);
239
+ destroyTimerAndPendingItems(); // Create batches for each group of items
240
+
241
+ var _iterator = _createForOfIteratorHelper(groupedItems),
242
+ _step;
243
+
244
+ try {
245
+ var _loop = function _loop() {
246
+ var items = _step.value;
247
+
248
+ if (!items.length) {
249
+ return "continue";
250
+ }
251
+
252
+ var batch = {
253
+ items: items,
254
+ cancel: throwFatalError
255
+ };
256
+
257
+ var _iterator2 = _createForOfIteratorHelper(items),
258
+ _step2;
218
259
 
219
- if (!batch) {
220
- batch = {
221
- items: [],
222
- cancel: function cancel() {
223
- destroyTimerAndBatch();
260
+ try {
261
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
262
+ var item = _step2.value;
263
+ item.batch = batch;
264
+ }
265
+ } catch (err) {
266
+ _iterator2.e(err);
267
+ } finally {
268
+ _iterator2.f();
224
269
  }
270
+
271
+ var _batchLoader$fetch = batchLoader.fetch(batch.items.map(function (_item) {
272
+ return _item.key;
273
+ })),
274
+ promise = _batchLoader$fetch.promise,
275
+ cancel = _batchLoader$fetch.cancel;
276
+
277
+ batch.cancel = cancel;
278
+ promise.then(function (result) {
279
+ for (var i = 0; i < result.length; i++) {
280
+ var _value = result[i];
281
+ var item = batch.items[i];
282
+ item.resolve(_value);
283
+ item.batch = null;
284
+ }
285
+ }).catch(function (cause) {
286
+ var _iterator3 = _createForOfIteratorHelper(batch.items),
287
+ _step3;
288
+
289
+ try {
290
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
291
+ var item = _step3.value;
292
+ item.reject(cause);
293
+ item.batch = null;
294
+ }
295
+ } catch (err) {
296
+ _iterator3.e(err);
297
+ } finally {
298
+ _iterator3.f();
299
+ }
300
+ });
225
301
  };
302
+
303
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
304
+ var _ret = _loop();
305
+
306
+ if (_ret === "continue") continue;
307
+ }
308
+ } catch (err) {
309
+ _iterator.e(err);
310
+ } finally {
311
+ _iterator.f();
226
312
  }
313
+ }
227
314
 
228
- var thisBatch = batch;
315
+ function load(key) {
316
+ var item = {
317
+ aborted: false,
318
+ key: key,
319
+ batch: null,
320
+ resolve: throwFatalError,
321
+ reject: throwFatalError
322
+ };
229
323
  var promise = new Promise(function (resolve, reject) {
230
- var item = batchItem;
231
324
  item.reject = reject;
232
325
  item.resolve = resolve;
233
- thisBatch.items.push(item);
234
326
 
235
- if (typeof (opts === null || opts === void 0 ? void 0 : opts.maxBatchSize) !== 'undefined' && thisBatch.items.length >= opts.maxBatchSize) {
236
- dispatch();
237
- return;
327
+ if (!pendingItems) {
328
+ pendingItems = [];
238
329
  }
330
+
331
+ pendingItems.push(item);
239
332
  });
240
333
 
241
334
  if (!dispatchTimer) {
@@ -243,16 +336,17 @@ function dataLoader(fetchMany, opts) {
243
336
  }
244
337
 
245
338
  var cancel = function cancel() {
246
- batchItem.cancelled = true;
339
+ var _item$batch;
340
+
341
+ item.aborted = true;
247
342
 
248
- if (thisBatch.items.some(function (item) {
249
- return !item.cancelled;
343
+ if ((_item$batch = item.batch) !== null && _item$batch !== void 0 && _item$batch.items.every(function (item) {
344
+ return item.aborted;
250
345
  })) {
251
- // there are still things that can be resolved
252
- return;
346
+ // All items in the batch have been cancelled
347
+ item.batch.cancel();
348
+ item.batch = null;
253
349
  }
254
-
255
- thisBatch.cancel();
256
350
  };
257
351
 
258
352
  return {
@@ -287,48 +381,56 @@ var METHOD = {
287
381
  mutation: 'POST',
288
382
  subscription: 'PATCH'
289
383
  };
290
- function httpRequest(props) {
291
- var type = props.type,
292
- rt = props.runtime,
293
- path = props.path;
294
- var ac = rt.AbortController ? new rt.AbortController() : null;
295
- var input = 'input' in props ? props.input : arrayToDict(props.inputs);
296
-
297
- function getUrl() {
298
- var url = props.url + '/' + path;
299
- var queryParts = [];
300
-
301
- if ('inputs' in props) {
302
- queryParts.push('batch=1');
303
- }
304
384
 
305
- if (type === 'query' && input !== undefined) {
306
- queryParts.push("input=".concat(encodeURIComponent(JSON.stringify(input))));
307
- }
385
+ function getInput(opts) {
386
+ return 'input' in opts ? opts.runtime.transformer.serialize(opts.input) : arrayToDict(opts.inputs.map(function (_input) {
387
+ return opts.runtime.transformer.serialize(_input);
388
+ }));
389
+ }
308
390
 
309
- if (queryParts.length) {
310
- url += '?' + queryParts.join('&');
311
- }
391
+ function getUrl(opts) {
392
+ var url = opts.url + '/' + opts.path;
393
+ var queryParts = [];
312
394
 
313
- return url;
395
+ if ('inputs' in opts) {
396
+ queryParts.push('batch=1');
314
397
  }
315
398
 
316
- function getBody() {
317
- if (type === 'query') {
318
- return undefined;
399
+ if (opts.type === 'query') {
400
+ var input = getInput(opts);
401
+
402
+ if (input !== undefined) {
403
+ queryParts.push("input=".concat(encodeURIComponent(JSON.stringify(input))));
319
404
  }
405
+ }
406
+
407
+ if (queryParts.length) {
408
+ url += '?' + queryParts.join('&');
409
+ }
320
410
 
321
- return input !== undefined ? JSON.stringify(input) : undefined;
411
+ return url;
412
+ }
413
+ function getBody(opts) {
414
+ if (opts.type === 'query') {
415
+ return undefined;
322
416
  }
323
417
 
418
+ var input = getInput(opts);
419
+ return input !== undefined ? JSON.stringify(input) : undefined;
420
+ }
421
+ function httpRequest(opts) {
422
+ var type = opts.type,
423
+ runtime = opts.runtime;
424
+ var ac = runtime.AbortController ? new runtime.AbortController() : null;
324
425
  var promise = new Promise(function (resolve, reject) {
325
- var url = getUrl();
426
+ var url = getUrl(opts);
427
+ var body = getBody(opts);
326
428
  var meta = {};
327
- Promise.resolve(rt.headers()).then(function (headers) {
328
- return rt.fetch(url, {
429
+ Promise.resolve(runtime.headers()).then(function (headers) {
430
+ return runtime.fetch(url, {
329
431
  method: METHOD[type],
330
432
  signal: ac === null || ac === void 0 ? void 0 : ac.signal,
331
- body: getBody(),
433
+ body: body,
332
434
  headers: _objectSpread$2({
333
435
  'content-type': 'application/json'
334
436
  }, headers)
@@ -355,31 +457,54 @@ function httpRequest(props) {
355
457
  }
356
458
 
357
459
  function httpBatchLink(opts) {
358
- var url = opts.url; // initialized config
359
-
460
+ // initialized config
360
461
  return function (runtime) {
361
- var fetcher = function fetcher(type) {
362
- return function (keyInputPairs) {
363
- var path = keyInputPairs.map(function (op) {
462
+ var maxURLLength = opts.maxURLLength || Infinity;
463
+
464
+ var batchLoader = function batchLoader(type) {
465
+ var validate = function validate(batchOps) {
466
+ if (maxURLLength === Infinity) {
467
+ // escape hatch for quick calcs
468
+ return true;
469
+ }
470
+
471
+ var path = batchOps.map(function (op) {
472
+ return op.path;
473
+ }).join(',');
474
+ var inputs = batchOps.map(function (op) {
475
+ return op.input;
476
+ });
477
+ var url = getUrl({
478
+ url: opts.url,
479
+ runtime: runtime,
480
+ type: type,
481
+ path: path,
482
+ inputs: inputs
483
+ });
484
+ return url.length <= maxURLLength;
485
+ };
486
+
487
+ var fetch = function fetch(batchOps) {
488
+ var path = batchOps.map(function (op) {
364
489
  return op.path;
365
490
  }).join(',');
366
- var inputs = keyInputPairs.map(function (op) {
491
+ var inputs = batchOps.map(function (op) {
367
492
  return op.input;
368
493
  });
369
494
 
370
495
  var _httpRequest = httpRequest({
371
- url: url,
372
- inputs: inputs,
373
- path: path,
496
+ url: opts.url,
374
497
  runtime: runtime,
375
- type: type
498
+ type: type,
499
+ path: path,
500
+ inputs: inputs
376
501
  }),
377
502
  promise = _httpRequest.promise,
378
503
  cancel = _httpRequest.cancel;
379
504
 
380
505
  return {
381
506
  promise: promise.then(function (res) {
382
- var resJSON = Array.isArray(res.json) ? res.json : keyInputPairs.map(function () {
507
+ var resJSON = Array.isArray(res.json) ? res.json : batchOps.map(function () {
383
508
  return res.json;
384
509
  });
385
510
  var result = resJSON.map(function (item) {
@@ -393,11 +518,16 @@ function httpBatchLink(opts) {
393
518
  cancel: cancel
394
519
  };
395
520
  };
521
+
522
+ return {
523
+ validate: validate,
524
+ fetch: fetch
525
+ };
396
526
  };
397
527
 
398
- var query = dataLoader(fetcher('query'), opts);
399
- var mutation = dataLoader(fetcher('mutation'), opts);
400
- var subscription = dataLoader(fetcher('subscription'), opts);
528
+ var query = dataLoader(batchLoader('query'));
529
+ var mutation = dataLoader(batchLoader('mutation'));
530
+ var subscription = dataLoader(batchLoader('subscription'));
401
531
  var loaders = {
402
532
  query: query,
403
533
  subscription: subscription,
@@ -440,11 +570,11 @@ function httpLink(opts) {
440
570
  type = op.type;
441
571
 
442
572
  var _httpRequest = httpRequest({
573
+ url: url,
443
574
  runtime: runtime,
444
- path: path,
445
- input: input,
446
575
  type: type,
447
- url: url
576
+ path: path,
577
+ input: input
448
578
  }),
449
579
  promise = _httpRequest.promise,
450
580
  cancel = _httpRequest.cancel;
@@ -646,12 +776,12 @@ function asArray(value) {
646
776
  }
647
777
 
648
778
  function splitLink(opts) {
649
- return function (rt) {
779
+ return function (runtime) {
650
780
  var yes = asArray(opts.true).map(function (link) {
651
- return link(rt);
781
+ return link(runtime);
652
782
  });
653
783
  var no = asArray(opts.false).map(function (link) {
654
- return link(rt);
784
+ return link(runtime);
655
785
  });
656
786
  return function (props) {
657
787
  return observable(function (observer) {
@@ -665,81 +795,14 @@ function splitLink(opts) {
665
795
  };
666
796
  }
667
797
 
668
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
669
-
670
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
671
-
672
- /**
673
- * @internal
674
- */
675
- function transformOperationResult$1(result, transformer) {
676
- if ('error' in result.data) {
677
- return _objectSpread(_objectSpread({}, result), {}, {
678
- data: _objectSpread(_objectSpread({}, result.data), {}, {
679
- error: transformer.deserialize(result.data.error)
680
- })
681
- });
682
- }
683
-
684
- if (result.data.result.type !== 'data') {
685
- return result;
686
- }
687
-
688
- return _objectSpread(_objectSpread({}, result), {}, {
689
- data: _objectSpread(_objectSpread({}, result.data), {}, {
690
- result: _objectSpread(_objectSpread({}, result.data.result), {}, {
691
- data: transformer.deserialize(result.data.result.data)
692
- })
693
- })
694
- });
695
- }
696
-
697
- function transformerLink(transformer) {
698
- var _transformer = transformer ? 'input' in transformer ? {
699
- serialize: transformer.input.serialize,
700
- deserialize: transformer.output.deserialize
701
- } : transformer : {
702
- serialize: function serialize(data) {
703
- return data;
704
- },
705
- deserialize: function deserialize(data) {
706
- return data;
707
- }
708
- };
709
-
710
- return function () {
711
- return function (props) {
712
- var input = _transformer.serialize(props.op.input);
713
-
714
- return observable(function (observer) {
715
- var subscription = props.next(_objectSpread(_objectSpread({}, props.op), {}, {
716
- input: input
717
- })).subscribe({
718
- next: function next(value) {
719
- var transformed = transformOperationResult$1(value, _transformer);
720
- observer.next(transformed);
721
- },
722
- error: function error(err) {
723
- observer.error(err);
724
- },
725
- complete: function complete() {
726
- observer.complete();
727
- }
728
- });
729
- return subscription;
730
- });
731
- };
732
- };
733
- }
734
-
735
798
  /* istanbul ignore next */
736
799
  var retryDelay = function retryDelay(attemptIndex) {
737
800
  return attemptIndex === 0 ? 0 : Math.min(1000 * Math.pow(2, attemptIndex), 30000);
738
801
  };
739
802
 
740
- function _createSuper$1(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$1(); 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); }; }
803
+ 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); }; }
741
804
 
742
- function _isNativeReflectConstruct$1() { 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; } }
805
+ 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; } }
743
806
  function createWSClient(opts) {
744
807
  var url = opts.url,
745
808
  _opts$WebSocket = opts.WebSocket,
@@ -951,7 +1014,6 @@ function createWSClient(opts) {
951
1014
  id = op.id;
952
1015
  var envelope = {
953
1016
  id: id,
954
- jsonrpc: '2.0',
955
1017
  method: type,
956
1018
  params: {
957
1019
  input: input,
@@ -980,8 +1042,7 @@ function createWSClient(opts) {
980
1042
  if (op.type === 'subscription') {
981
1043
  outgoing.push({
982
1044
  id: id,
983
- method: 'subscription.stop',
984
- params: undefined
1045
+ method: 'subscription.stop'
985
1046
  });
986
1047
  dispatch();
987
1048
  }
@@ -992,6 +1053,8 @@ function createWSClient(opts) {
992
1053
  close: function close() {
993
1054
  state = 'closed';
994
1055
  closeIfNoPending(activeConnection);
1056
+ clearTimeout(connectTimer);
1057
+ connectTimer = null;
995
1058
  },
996
1059
  request: request,
997
1060
  getConnection: function getConnection() {
@@ -1003,7 +1066,7 @@ function createWSClient(opts) {
1003
1066
  var TRPCWebSocketClosedError = /*#__PURE__*/function (_Error) {
1004
1067
  _inherits(TRPCWebSocketClosedError, _Error);
1005
1068
 
1006
- var _super = /*#__PURE__*/_createSuper$1(TRPCWebSocketClosedError);
1069
+ var _super = /*#__PURE__*/_createSuper(TRPCWebSocketClosedError);
1007
1070
 
1008
1071
  function TRPCWebSocketClosedError(message) {
1009
1072
  var _this;
@@ -1022,7 +1085,7 @@ var TRPCWebSocketClosedError = /*#__PURE__*/function (_Error) {
1022
1085
  var TRPCSubscriptionEndedError = /*#__PURE__*/function (_Error2) {
1023
1086
  _inherits(TRPCSubscriptionEndedError, _Error2);
1024
1087
 
1025
- var _super2 = /*#__PURE__*/_createSuper$1(TRPCSubscriptionEndedError);
1088
+ var _super2 = /*#__PURE__*/_createSuper(TRPCSubscriptionEndedError);
1026
1089
 
1027
1090
  function TRPCSubscriptionEndedError(message) {
1028
1091
  var _this2;
@@ -1039,16 +1102,16 @@ var TRPCSubscriptionEndedError = /*#__PURE__*/function (_Error2) {
1039
1102
  }( /*#__PURE__*/_wrapNativeSuper(Error));
1040
1103
 
1041
1104
  function wsLink(opts) {
1042
- return function () {
1105
+ return function (runtime) {
1043
1106
  var client = opts.client;
1044
1107
  return function (_ref2) {
1045
1108
  var op = _ref2.op;
1046
1109
  return observable(function (observer) {
1047
1110
  var type = op.type,
1048
- input = op.input,
1049
1111
  path = op.path,
1050
1112
  id = op.id,
1051
1113
  context = op.context;
1114
+ var input = runtime.transformer.serialize(op.input);
1052
1115
  var isDone = false;
1053
1116
  var unsub = client.request({
1054
1117
  type: type,
@@ -1090,12 +1153,18 @@ function wsLink(opts) {
1090
1153
  };
1091
1154
  }
1092
1155
 
1156
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1157
+
1158
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1159
+
1093
1160
  /** @internal */
1094
- function transformOperationResult(result) {
1161
+ function transformOperationResult(result, runtime) {
1095
1162
  var context = result.context;
1096
1163
 
1097
1164
  if ('error' in result.data) {
1098
- var error = TRPCClientError.from(result.data);
1165
+ var error = TRPCClientError.from(_objectSpread(_objectSpread({}, result.data), {}, {
1166
+ error: runtime.transformer.deserialize(result.data.error)
1167
+ }));
1099
1168
  return {
1100
1169
  ok: false,
1101
1170
  error: error,
@@ -1103,75 +1172,39 @@ function transformOperationResult(result) {
1103
1172
  };
1104
1173
  }
1105
1174
 
1106
- var data = result.data.result.data;
1175
+ var data = runtime.transformer.deserialize(result.data.result.data);
1107
1176
  return {
1108
1177
  ok: true,
1109
1178
  data: data,
1110
1179
  context: context
1111
1180
  };
1112
1181
  }
1113
-
1114
- 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); }; }
1115
-
1116
- 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; } }
1117
-
1118
- var ObservableAbortError = /*#__PURE__*/function (_Error) {
1119
- _inherits(ObservableAbortError, _Error);
1120
-
1121
- var _super = /*#__PURE__*/_createSuper(ObservableAbortError);
1122
-
1123
- function ObservableAbortError(message) {
1124
- var _this;
1125
-
1126
- _classCallCheck(this, ObservableAbortError);
1127
-
1128
- _this = _super.call(this, message);
1129
- _this.name = 'ObservableAbortError';
1130
- Object.setPrototypeOf(_assertThisInitialized(_this), ObservableAbortError.prototype);
1131
- return _this;
1132
- }
1133
-
1134
- return _createClass(ObservableAbortError);
1135
- }( /*#__PURE__*/_wrapNativeSuper(Error));
1136
1182
  /** @internal */
1137
1183
 
1138
- function observableToPromise(observable) {
1139
- var abort;
1140
- var promise = new Promise(function (resolve, reject) {
1141
- var isDone = false;
1142
-
1143
- function onDone() {
1144
- if (isDone) {
1145
- return;
1146
- }
1147
-
1148
- isDone = true;
1149
- reject(new ObservableAbortError('This operation was cancelled.'));
1150
- obs$.unsubscribe();
1151
- }
1184
+ function transformSubscriptionOperationResult(result, runtime) {
1185
+ var context = result.context;
1152
1186
 
1153
- var obs$ = observable.subscribe({
1154
- next: function next(data) {
1155
- isDone = true;
1156
- resolve(data);
1157
- onDone();
1158
- },
1159
- error: function error(data) {
1160
- isDone = true;
1161
- reject(data);
1162
- onDone();
1163
- },
1164
- complete: function complete() {
1165
- isDone = true;
1166
- onDone();
1167
- }
1187
+ if ('error' in result.data) {
1188
+ var error = TRPCClientError.from(_objectSpread(_objectSpread({}, result.data), {}, {
1189
+ error: runtime.transformer.deserialize(result.data.error)
1190
+ }), {
1191
+ meta: context
1168
1192
  });
1169
- abort = onDone;
1193
+ return {
1194
+ ok: false,
1195
+ error: error,
1196
+ context: context
1197
+ };
1198
+ }
1199
+
1200
+ var data = _objectSpread(_objectSpread({}, result.data.result), result.data.result.type === 'data' && {
1201
+ data: runtime.transformer.deserialize(result.data.result.data)
1170
1202
  });
1203
+
1171
1204
  return {
1172
- promise: promise,
1173
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
1174
- abort: abort
1205
+ ok: true,
1206
+ data: data,
1207
+ context: context
1175
1208
  };
1176
1209
  }
1177
1210
 
@@ -1207,10 +1240,22 @@ var TRPCClient = /*#__PURE__*/function () {
1207
1240
  };
1208
1241
  }
1209
1242
 
1243
+ var transformer = opts.transformer ? 'input' in opts.transformer ? {
1244
+ serialize: opts.transformer.input.serialize,
1245
+ deserialize: opts.transformer.output.deserialize
1246
+ } : opts.transformer : {
1247
+ serialize: function serialize(data) {
1248
+ return data;
1249
+ },
1250
+ deserialize: function deserialize(data) {
1251
+ return data;
1252
+ }
1253
+ };
1210
1254
  this.runtime = {
1211
1255
  AbortController: AC,
1212
1256
  fetch: _fetch,
1213
- headers: getHeadersFn()
1257
+ headers: getHeadersFn(),
1258
+ transformer: transformer
1214
1259
  };
1215
1260
 
1216
1261
  if ('links' in opts) {
@@ -1247,6 +1292,8 @@ var TRPCClient = /*#__PURE__*/function () {
1247
1292
  }, {
1248
1293
  key: "requestAsPromise",
1249
1294
  value: function requestAsPromise(opts) {
1295
+ var _this2 = this;
1296
+
1250
1297
  var req$ = this.$request(opts);
1251
1298
 
1252
1299
  var _observableToPromise = observableToPromise(req$),
@@ -1255,7 +1302,7 @@ var TRPCClient = /*#__PURE__*/function () {
1255
1302
 
1256
1303
  var cancellablePromise = new Promise(function (resolve, reject) {
1257
1304
  promise.then(function (result) {
1258
- var transformed = transformOperationResult(result);
1305
+ var transformed = transformOperationResult(result, _this2.runtime);
1259
1306
 
1260
1307
  if (transformed.ok) {
1261
1308
  resolve(transformed.data);
@@ -1273,26 +1320,34 @@ var TRPCClient = /*#__PURE__*/function () {
1273
1320
  }, {
1274
1321
  key: "query",
1275
1322
  value: function query(path) {
1276
- var _ref2;
1323
+ var _args$;
1324
+
1325
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
1326
+ args[_key - 1] = arguments[_key];
1327
+ }
1277
1328
 
1278
- var context = (_ref2 = arguments.length <= 2 ? undefined : arguments[2]) === null || _ref2 === void 0 ? void 0 : _ref2.context;
1329
+ var context = (_args$ = args[1]) === null || _args$ === void 0 ? void 0 : _args$.context;
1279
1330
  return this.requestAsPromise({
1280
1331
  type: 'query',
1281
1332
  path: path,
1282
- input: arguments.length <= 1 ? undefined : arguments[1],
1333
+ input: args[0],
1283
1334
  context: context
1284
1335
  });
1285
1336
  }
1286
1337
  }, {
1287
1338
  key: "mutation",
1288
1339
  value: function mutation(path) {
1289
- var _ref3;
1340
+ var _args$2;
1341
+
1342
+ for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
1343
+ args[_key2 - 1] = arguments[_key2];
1344
+ }
1290
1345
 
1291
- var context = (_ref3 = arguments.length <= 2 ? undefined : arguments[2]) === null || _ref3 === void 0 ? void 0 : _ref3.context;
1346
+ var context = (_args$2 = args[1]) === null || _args$2 === void 0 ? void 0 : _args$2.context;
1292
1347
  return this.requestAsPromise({
1293
1348
  type: 'mutation',
1294
1349
  path: path,
1295
- input: arguments.length <= 1 ? undefined : arguments[1],
1350
+ input: args[0],
1296
1351
  context: context
1297
1352
  });
1298
1353
  }
@@ -1305,21 +1360,21 @@ var TRPCClient = /*#__PURE__*/function () {
1305
1360
  input: input,
1306
1361
  context: opts.context
1307
1362
  });
1363
+ var runtime = this.runtime;
1308
1364
  return observable$.subscribe({
1309
1365
  next: function next(result) {
1310
- var _opts$next;
1366
+ var _opts$error;
1311
1367
 
1312
- if ('error' in result.data) {
1313
- var _opts$error;
1368
+ var transformed = transformSubscriptionOperationResult(result, runtime);
1314
1369
 
1315
- var err = TRPCClientError.from(result.data, {
1316
- meta: result.context
1317
- });
1318
- (_opts$error = opts.error) === null || _opts$error === void 0 ? void 0 : _opts$error.call(opts, err);
1370
+ if (transformed.ok) {
1371
+ var _opts$next;
1372
+
1373
+ (_opts$next = opts.next) === null || _opts$next === void 0 ? void 0 : _opts$next.call(opts, transformed.data);
1319
1374
  return;
1320
1375
  }
1321
1376
 
1322
- (_opts$next = opts.next) === null || _opts$next === void 0 ? void 0 : _opts$next.call(opts, result.data.result);
1377
+ (_opts$error = opts.error) === null || _opts$error === void 0 ? void 0 : _opts$error.call(opts, transformed.error);
1323
1378
  },
1324
1379
  error: function error(err) {
1325
1380
  var _opts$error2;
@@ -1343,4 +1398,4 @@ function createTRPCClient(opts) {
1343
1398
  return new TRPCClient(opts);
1344
1399
  }
1345
1400
 
1346
- export { TRPCClientError, createTRPCClient, createWSClient, dedupeLink, getFetch, httpBatchLink, httpLink, loggerLink, retryLink, splitLink, transformerLink, wsLink };
1401
+ export { TRPCClientError, createTRPCClient, createWSClient, dedupeLink, getFetch, httpBatchLink, httpLink, loggerLink, retryLink, splitLink, wsLink };