@trpc/client 10.0.0-alpha.21 → 10.0.0-alpha.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/dist/index.js +329 -276
  2. package/dist/index.mjs +317 -263
  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/wsLink/dist/trpc-client-links-wsLink.cjs.dev.js +2 -0
  23. package/links/wsLink/dist/trpc-client-links-wsLink.cjs.prod.js +2 -0
  24. package/links/wsLink/dist/trpc-client-links-wsLink.esm.js +2 -0
  25. package/package.json +5 -11
  26. package/src/internals/TRPCClient.ts +48 -24
  27. package/src/internals/dataLoader.ts +116 -54
  28. package/src/links/dedupeLink.test.ts +1 -1
  29. package/src/links/dedupeLink.ts +1 -2
  30. package/src/links/httpBatchLink.ts +54 -31
  31. package/src/links/httpLink.ts +3 -3
  32. package/src/links/index.ts +0 -2
  33. package/src/links/internals/createChain.test.ts +1 -1
  34. package/src/links/internals/createChain.ts +1 -1
  35. package/src/links/internals/httpUtils.ts +52 -31
  36. package/src/links/internals/transformOperationResult.ts +40 -12
  37. package/src/links/loggerLink.ts +1 -1
  38. package/src/links/retryLink.ts +1 -2
  39. package/src/links/splitLink.test.ts +1 -1
  40. package/src/links/splitLink.ts +4 -4
  41. package/src/links/types.ts +12 -7
  42. package/src/links/wsLink.ts +13 -10
  43. package/dist/links/transformerLink.d.ts +0 -4
  44. package/dist/links/transformerLink.d.ts.map +0 -1
  45. package/dist/observable/index.d.ts +0 -4
  46. package/dist/observable/index.d.ts.map +0 -1
  47. package/dist/observable/index.js +0 -38
  48. package/dist/observable/index.mjs +0 -31
  49. package/dist/observable/index.ts.js +0 -1
  50. package/dist/observable/internals/identity.d.ts +0 -2
  51. package/dist/observable/internals/identity.d.ts.map +0 -1
  52. package/dist/observable/internals/observableToPromise.d.ts +0 -10
  53. package/dist/observable/internals/observableToPromise.d.ts.map +0 -1
  54. package/dist/observable/internals/pipe.d.ts +0 -4
  55. package/dist/observable/internals/pipe.d.ts.map +0 -1
  56. package/dist/observable/observable.d.ts +0 -4
  57. package/dist/observable/observable.d.ts.map +0 -1
  58. package/dist/observable/operators/index.d.ts +0 -4
  59. package/dist/observable/operators/index.d.ts.map +0 -1
  60. package/dist/observable/operators/map.d.ts +0 -3
  61. package/dist/observable/operators/map.d.ts.map +0 -1
  62. package/dist/observable/operators/share.d.ts +0 -6
  63. package/dist/observable/operators/share.d.ts.map +0 -1
  64. package/dist/observable/operators/tap.d.ts +0 -3
  65. package/dist/observable/operators/tap.d.ts.map +0 -1
  66. package/dist/observable/types.d.ts +0 -29
  67. package/dist/observable/types.d.ts.map +0 -1
  68. package/dist/tap-0dcdee86.js +0 -243
  69. package/dist/tap-136a9a90.mjs +0 -239
  70. package/observable/dist/trpc-client-rx.cjs.d.ts +0 -1
  71. package/observable/dist/trpc-client-rx.cjs.dev.js +0 -9
  72. package/observable/dist/trpc-client-rx.cjs.js +0 -7
  73. package/observable/dist/trpc-client-rx.cjs.prod.js +0 -9
  74. package/observable/dist/trpc-client-rx.esm.js +0 -1
  75. package/observable/index.d.ts +0 -1
  76. package/observable/index.js +0 -1
  77. package/src/links/transformerLink.ts +0 -74
  78. package/src/observable/index.ts +0 -3
  79. package/src/observable/internals/identity.ts +0 -3
  80. package/src/observable/internals/observableToPromise.ts +0 -49
  81. package/src/observable/internals/pipe.ts +0 -22
  82. package/src/observable/observable.test.ts +0 -101
  83. package/src/observable/observable.ts +0 -70
  84. package/src/observable/operators/index.ts +0 -3
  85. package/src/observable/operators/map.test.ts +0 -92
  86. package/src/observable/operators/map.ts +0 -25
  87. package/src/observable/operators/share.test.ts +0 -60
  88. package/src/observable/operators/share.ts +0 -67
  89. package/src/observable/operators/tap.ts +0 -26
  90. 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,82 +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]; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
194
-
195
- 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;
196
203
  }
197
- }).catch(function (cause) {
198
- var _iterator = _createForOfIteratorHelper(batchCopy.items),
199
- _step;
200
-
201
- try {
202
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
203
- var item = _step.value;
204
- item.reject(cause);
205
- }
206
- } catch (err) {
207
- _iterator.e(err);
208
- } finally {
209
- _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;
210
212
  }
211
- });
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;
212
235
  }
213
236
 
214
- function load(key) {
215
- var batchItem = {
216
- cancelled: false,
217
- key: key
218
- };
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;
219
259
 
220
- if (!batch) {
221
- batch = {
222
- items: [],
223
- cancel: function cancel() {
224
- 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();
225
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
+ });
226
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();
227
312
  }
313
+ }
228
314
 
229
- 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
+ };
230
323
  var promise = new Promise(function (resolve, reject) {
231
- var item = batchItem;
232
324
  item.reject = reject;
233
325
  item.resolve = resolve;
234
- thisBatch.items.push(item);
235
326
 
236
- if (typeof (opts === null || opts === void 0 ? void 0 : opts.maxBatchSize) !== 'undefined' && thisBatch.items.length >= opts.maxBatchSize) {
237
- dispatch();
238
- return;
327
+ if (!pendingItems) {
328
+ pendingItems = [];
239
329
  }
330
+
331
+ pendingItems.push(item);
240
332
  });
241
333
 
242
334
  if (!dispatchTimer) {
@@ -244,16 +336,17 @@ function dataLoader(fetchMany, opts) {
244
336
  }
245
337
 
246
338
  var cancel = function cancel() {
247
- batchItem.cancelled = true;
339
+ var _item$batch;
340
+
341
+ item.aborted = true;
248
342
 
249
- if (thisBatch.items.some(function (item) {
250
- return !item.cancelled;
343
+ if ((_item$batch = item.batch) !== null && _item$batch !== void 0 && _item$batch.items.every(function (item) {
344
+ return item.aborted;
251
345
  })) {
252
- // there are still things that can be resolved
253
- return;
346
+ // All items in the batch have been cancelled
347
+ item.batch.cancel();
348
+ item.batch = null;
254
349
  }
255
-
256
- thisBatch.cancel();
257
350
  };
258
351
 
259
352
  return {
@@ -288,48 +381,56 @@ var METHOD = {
288
381
  mutation: 'POST',
289
382
  subscription: 'PATCH'
290
383
  };
291
- function httpRequest(props) {
292
- var type = props.type,
293
- rt = props.runtime,
294
- path = props.path;
295
- var ac = rt.AbortController ? new rt.AbortController() : null;
296
- var input = 'input' in props ? props.input : arrayToDict(props.inputs);
297
-
298
- function getUrl() {
299
- var url = props.url + '/' + path;
300
- var queryParts = [];
301
-
302
- if ('inputs' in props) {
303
- queryParts.push('batch=1');
304
- }
305
384
 
306
- if (type === 'query' && input !== undefined) {
307
- queryParts.push("input=".concat(encodeURIComponent(JSON.stringify(input))));
308
- }
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
+ }
309
390
 
310
- if (queryParts.length) {
311
- url += '?' + queryParts.join('&');
312
- }
391
+ function getUrl(opts) {
392
+ var url = opts.url + '/' + opts.path;
393
+ var queryParts = [];
313
394
 
314
- return url;
395
+ if ('inputs' in opts) {
396
+ queryParts.push('batch=1');
315
397
  }
316
398
 
317
- function getBody() {
318
- if (type === 'query') {
319
- 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))));
320
404
  }
405
+ }
406
+
407
+ if (queryParts.length) {
408
+ url += '?' + queryParts.join('&');
409
+ }
321
410
 
322
- return input !== undefined ? JSON.stringify(input) : undefined;
411
+ return url;
412
+ }
413
+ function getBody(opts) {
414
+ if (opts.type === 'query') {
415
+ return undefined;
323
416
  }
324
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;
325
425
  var promise = new Promise(function (resolve, reject) {
326
- var url = getUrl();
426
+ var url = getUrl(opts);
427
+ var body = getBody(opts);
327
428
  var meta = {};
328
- Promise.resolve(rt.headers()).then(function (headers) {
329
- return rt.fetch(url, {
429
+ Promise.resolve(runtime.headers()).then(function (headers) {
430
+ return runtime.fetch(url, {
330
431
  method: METHOD[type],
331
432
  signal: ac === null || ac === void 0 ? void 0 : ac.signal,
332
- body: getBody(),
433
+ body: body,
333
434
  headers: _objectSpread$2({
334
435
  'content-type': 'application/json'
335
436
  }, headers)
@@ -356,31 +457,54 @@ function httpRequest(props) {
356
457
  }
357
458
 
358
459
  function httpBatchLink(opts) {
359
- var url = opts.url; // initialized config
360
-
460
+ // initialized config
361
461
  return function (runtime) {
362
- var fetcher = function fetcher(type) {
363
- return function (keyInputPairs) {
364
- 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) {
365
489
  return op.path;
366
490
  }).join(',');
367
- var inputs = keyInputPairs.map(function (op) {
491
+ var inputs = batchOps.map(function (op) {
368
492
  return op.input;
369
493
  });
370
494
 
371
495
  var _httpRequest = httpRequest({
372
- url: url,
373
- inputs: inputs,
374
- path: path,
496
+ url: opts.url,
375
497
  runtime: runtime,
376
- type: type
498
+ type: type,
499
+ path: path,
500
+ inputs: inputs
377
501
  }),
378
502
  promise = _httpRequest.promise,
379
503
  cancel = _httpRequest.cancel;
380
504
 
381
505
  return {
382
506
  promise: promise.then(function (res) {
383
- var resJSON = Array.isArray(res.json) ? res.json : keyInputPairs.map(function () {
507
+ var resJSON = Array.isArray(res.json) ? res.json : batchOps.map(function () {
384
508
  return res.json;
385
509
  });
386
510
  var result = resJSON.map(function (item) {
@@ -394,11 +518,16 @@ function httpBatchLink(opts) {
394
518
  cancel: cancel
395
519
  };
396
520
  };
521
+
522
+ return {
523
+ validate: validate,
524
+ fetch: fetch
525
+ };
397
526
  };
398
527
 
399
- var query = dataLoader(fetcher('query'), opts);
400
- var mutation = dataLoader(fetcher('mutation'), opts);
401
- var subscription = dataLoader(fetcher('subscription'), opts);
528
+ var query = dataLoader(batchLoader('query'));
529
+ var mutation = dataLoader(batchLoader('mutation'));
530
+ var subscription = dataLoader(batchLoader('subscription'));
402
531
  var loaders = {
403
532
  query: query,
404
533
  subscription: subscription,
@@ -441,11 +570,11 @@ function httpLink(opts) {
441
570
  type = op.type;
442
571
 
443
572
  var _httpRequest = httpRequest({
573
+ url: url,
444
574
  runtime: runtime,
445
- path: path,
446
- input: input,
447
575
  type: type,
448
- url: url
576
+ path: path,
577
+ input: input
449
578
  }),
450
579
  promise = _httpRequest.promise,
451
580
  cancel = _httpRequest.cancel;
@@ -647,12 +776,12 @@ function asArray(value) {
647
776
  }
648
777
 
649
778
  function splitLink(opts) {
650
- return function (rt) {
779
+ return function (runtime) {
651
780
  var yes = asArray(opts.true).map(function (link) {
652
- return link(rt);
781
+ return link(runtime);
653
782
  });
654
783
  var no = asArray(opts.false).map(function (link) {
655
- return link(rt);
784
+ return link(runtime);
656
785
  });
657
786
  return function (props) {
658
787
  return observable(function (observer) {
@@ -666,81 +795,14 @@ function splitLink(opts) {
666
795
  };
667
796
  }
668
797
 
669
- 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; }
670
-
671
- 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; }
672
-
673
- /**
674
- * @internal
675
- */
676
- function transformOperationResult$1(result, transformer) {
677
- if ('error' in result.data) {
678
- return _objectSpread(_objectSpread({}, result), {}, {
679
- data: _objectSpread(_objectSpread({}, result.data), {}, {
680
- error: transformer.deserialize(result.data.error)
681
- })
682
- });
683
- }
684
-
685
- if (result.data.result.type !== 'data') {
686
- return result;
687
- }
688
-
689
- return _objectSpread(_objectSpread({}, result), {}, {
690
- data: _objectSpread(_objectSpread({}, result.data), {}, {
691
- result: _objectSpread(_objectSpread({}, result.data.result), {}, {
692
- data: transformer.deserialize(result.data.result.data)
693
- })
694
- })
695
- });
696
- }
697
-
698
- function transformerLink(transformer) {
699
- var _transformer = transformer ? 'input' in transformer ? {
700
- serialize: transformer.input.serialize,
701
- deserialize: transformer.output.deserialize
702
- } : transformer : {
703
- serialize: function serialize(data) {
704
- return data;
705
- },
706
- deserialize: function deserialize(data) {
707
- return data;
708
- }
709
- };
710
-
711
- return function () {
712
- return function (props) {
713
- var input = _transformer.serialize(props.op.input);
714
-
715
- return observable(function (observer) {
716
- var subscription = props.next(_objectSpread(_objectSpread({}, props.op), {}, {
717
- input: input
718
- })).subscribe({
719
- next: function next(value) {
720
- var transformed = transformOperationResult$1(value, _transformer);
721
- observer.next(transformed);
722
- },
723
- error: function error(err) {
724
- observer.error(err);
725
- },
726
- complete: function complete() {
727
- observer.complete();
728
- }
729
- });
730
- return subscription;
731
- });
732
- };
733
- };
734
- }
735
-
736
798
  /* istanbul ignore next */
737
799
  var retryDelay = function retryDelay(attemptIndex) {
738
800
  return attemptIndex === 0 ? 0 : Math.min(1000 * Math.pow(2, attemptIndex), 30000);
739
801
  };
740
802
 
741
- 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); }; }
742
804
 
743
- 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; } }
744
806
  function createWSClient(opts) {
745
807
  var url = opts.url,
746
808
  _opts$WebSocket = opts.WebSocket,
@@ -952,7 +1014,6 @@ function createWSClient(opts) {
952
1014
  id = op.id;
953
1015
  var envelope = {
954
1016
  id: id,
955
- jsonrpc: '2.0',
956
1017
  method: type,
957
1018
  params: {
958
1019
  input: input,
@@ -981,8 +1042,7 @@ function createWSClient(opts) {
981
1042
  if (op.type === 'subscription') {
982
1043
  outgoing.push({
983
1044
  id: id,
984
- method: 'subscription.stop',
985
- params: undefined
1045
+ method: 'subscription.stop'
986
1046
  });
987
1047
  dispatch();
988
1048
  }
@@ -993,6 +1053,8 @@ function createWSClient(opts) {
993
1053
  close: function close() {
994
1054
  state = 'closed';
995
1055
  closeIfNoPending(activeConnection);
1056
+ clearTimeout(connectTimer);
1057
+ connectTimer = null;
996
1058
  },
997
1059
  request: request,
998
1060
  getConnection: function getConnection() {
@@ -1004,7 +1066,7 @@ function createWSClient(opts) {
1004
1066
  var TRPCWebSocketClosedError = /*#__PURE__*/function (_Error) {
1005
1067
  _inherits(TRPCWebSocketClosedError, _Error);
1006
1068
 
1007
- var _super = /*#__PURE__*/_createSuper$1(TRPCWebSocketClosedError);
1069
+ var _super = /*#__PURE__*/_createSuper(TRPCWebSocketClosedError);
1008
1070
 
1009
1071
  function TRPCWebSocketClosedError(message) {
1010
1072
  var _this;
@@ -1023,7 +1085,7 @@ var TRPCWebSocketClosedError = /*#__PURE__*/function (_Error) {
1023
1085
  var TRPCSubscriptionEndedError = /*#__PURE__*/function (_Error2) {
1024
1086
  _inherits(TRPCSubscriptionEndedError, _Error2);
1025
1087
 
1026
- var _super2 = /*#__PURE__*/_createSuper$1(TRPCSubscriptionEndedError);
1088
+ var _super2 = /*#__PURE__*/_createSuper(TRPCSubscriptionEndedError);
1027
1089
 
1028
1090
  function TRPCSubscriptionEndedError(message) {
1029
1091
  var _this2;
@@ -1040,16 +1102,16 @@ var TRPCSubscriptionEndedError = /*#__PURE__*/function (_Error2) {
1040
1102
  }( /*#__PURE__*/_wrapNativeSuper(Error));
1041
1103
 
1042
1104
  function wsLink(opts) {
1043
- return function () {
1105
+ return function (runtime) {
1044
1106
  var client = opts.client;
1045
1107
  return function (_ref2) {
1046
1108
  var op = _ref2.op;
1047
1109
  return observable(function (observer) {
1048
1110
  var type = op.type,
1049
- input = op.input,
1050
1111
  path = op.path,
1051
1112
  id = op.id,
1052
1113
  context = op.context;
1114
+ var input = runtime.transformer.serialize(op.input);
1053
1115
  var isDone = false;
1054
1116
  var unsub = client.request({
1055
1117
  type: type,
@@ -1091,12 +1153,18 @@ function wsLink(opts) {
1091
1153
  };
1092
1154
  }
1093
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
+
1094
1160
  /** @internal */
1095
- function transformOperationResult(result) {
1161
+ function transformOperationResult(result, runtime) {
1096
1162
  var context = result.context;
1097
1163
 
1098
1164
  if ('error' in result.data) {
1099
- var error = TRPCClientError.from(result.data);
1165
+ var error = TRPCClientError.from(_objectSpread(_objectSpread({}, result.data), {}, {
1166
+ error: runtime.transformer.deserialize(result.data.error)
1167
+ }));
1100
1168
  return {
1101
1169
  ok: false,
1102
1170
  error: error,
@@ -1104,75 +1172,39 @@ function transformOperationResult(result) {
1104
1172
  };
1105
1173
  }
1106
1174
 
1107
- var data = result.data.result.data;
1175
+ var data = runtime.transformer.deserialize(result.data.result.data);
1108
1176
  return {
1109
1177
  ok: true,
1110
1178
  data: data,
1111
1179
  context: context
1112
1180
  };
1113
1181
  }
1114
-
1115
- 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); }; }
1116
-
1117
- 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; } }
1118
-
1119
- var ObservableAbortError = /*#__PURE__*/function (_Error) {
1120
- _inherits(ObservableAbortError, _Error);
1121
-
1122
- var _super = /*#__PURE__*/_createSuper(ObservableAbortError);
1123
-
1124
- function ObservableAbortError(message) {
1125
- var _this;
1126
-
1127
- _classCallCheck(this, ObservableAbortError);
1128
-
1129
- _this = _super.call(this, message);
1130
- _this.name = 'ObservableAbortError';
1131
- Object.setPrototypeOf(_assertThisInitialized(_this), ObservableAbortError.prototype);
1132
- return _this;
1133
- }
1134
-
1135
- return _createClass(ObservableAbortError);
1136
- }( /*#__PURE__*/_wrapNativeSuper(Error));
1137
1182
  /** @internal */
1138
1183
 
1139
- function observableToPromise(observable) {
1140
- var abort;
1141
- var promise = new Promise(function (resolve, reject) {
1142
- var isDone = false;
1143
-
1144
- function onDone() {
1145
- if (isDone) {
1146
- return;
1147
- }
1148
-
1149
- isDone = true;
1150
- reject(new ObservableAbortError('This operation was cancelled.'));
1151
- obs$.unsubscribe();
1152
- }
1184
+ function transformSubscriptionOperationResult(result, runtime) {
1185
+ var context = result.context;
1153
1186
 
1154
- var obs$ = observable.subscribe({
1155
- next: function next(data) {
1156
- isDone = true;
1157
- resolve(data);
1158
- onDone();
1159
- },
1160
- error: function error(data) {
1161
- isDone = true;
1162
- reject(data);
1163
- onDone();
1164
- },
1165
- complete: function complete() {
1166
- isDone = true;
1167
- onDone();
1168
- }
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
1169
1192
  });
1170
- 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)
1171
1202
  });
1203
+
1172
1204
  return {
1173
- promise: promise,
1174
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
1175
- abort: abort
1205
+ ok: true,
1206
+ data: data,
1207
+ context: context
1176
1208
  };
1177
1209
  }
1178
1210
 
@@ -1208,10 +1240,22 @@ var TRPCClient = /*#__PURE__*/function () {
1208
1240
  };
1209
1241
  }
1210
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
+ };
1211
1254
  this.runtime = {
1212
1255
  AbortController: AC,
1213
1256
  fetch: _fetch,
1214
- headers: getHeadersFn()
1257
+ headers: getHeadersFn(),
1258
+ transformer: transformer
1215
1259
  };
1216
1260
 
1217
1261
  if ('links' in opts) {
@@ -1248,6 +1292,8 @@ var TRPCClient = /*#__PURE__*/function () {
1248
1292
  }, {
1249
1293
  key: "requestAsPromise",
1250
1294
  value: function requestAsPromise(opts) {
1295
+ var _this2 = this;
1296
+
1251
1297
  var req$ = this.$request(opts);
1252
1298
 
1253
1299
  var _observableToPromise = observableToPromise(req$),
@@ -1256,7 +1302,7 @@ var TRPCClient = /*#__PURE__*/function () {
1256
1302
 
1257
1303
  var cancellablePromise = new Promise(function (resolve, reject) {
1258
1304
  promise.then(function (result) {
1259
- var transformed = transformOperationResult(result);
1305
+ var transformed = transformOperationResult(result, _this2.runtime);
1260
1306
 
1261
1307
  if (transformed.ok) {
1262
1308
  resolve(transformed.data);
@@ -1274,26 +1320,34 @@ var TRPCClient = /*#__PURE__*/function () {
1274
1320
  }, {
1275
1321
  key: "query",
1276
1322
  value: function query(path) {
1277
- 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
+ }
1278
1328
 
1279
- 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;
1280
1330
  return this.requestAsPromise({
1281
1331
  type: 'query',
1282
1332
  path: path,
1283
- input: arguments.length <= 1 ? undefined : arguments[1],
1333
+ input: args[0],
1284
1334
  context: context
1285
1335
  });
1286
1336
  }
1287
1337
  }, {
1288
1338
  key: "mutation",
1289
1339
  value: function mutation(path) {
1290
- 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
+ }
1291
1345
 
1292
- 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;
1293
1347
  return this.requestAsPromise({
1294
1348
  type: 'mutation',
1295
1349
  path: path,
1296
- input: arguments.length <= 1 ? undefined : arguments[1],
1350
+ input: args[0],
1297
1351
  context: context
1298
1352
  });
1299
1353
  }
@@ -1306,21 +1360,21 @@ var TRPCClient = /*#__PURE__*/function () {
1306
1360
  input: input,
1307
1361
  context: opts.context
1308
1362
  });
1363
+ var runtime = this.runtime;
1309
1364
  return observable$.subscribe({
1310
1365
  next: function next(result) {
1311
- var _opts$next;
1366
+ var _opts$error;
1312
1367
 
1313
- if ('error' in result.data) {
1314
- var _opts$error;
1368
+ var transformed = transformSubscriptionOperationResult(result, runtime);
1315
1369
 
1316
- var err = TRPCClientError.from(result.data, {
1317
- meta: result.context
1318
- });
1319
- (_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);
1320
1374
  return;
1321
1375
  }
1322
1376
 
1323
- (_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);
1324
1378
  },
1325
1379
  error: function error(err) {
1326
1380
  var _opts$error2;
@@ -1344,4 +1398,4 @@ function createTRPCClient(opts) {
1344
1398
  return new TRPCClient(opts);
1345
1399
  }
1346
1400
 
1347
- 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 };