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

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 (87) hide show
  1. package/dist/index.js +313 -270
  2. package/dist/index.mjs +301 -257
  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/package.json +5 -11
  23. package/src/internals/TRPCClient.ts +48 -24
  24. package/src/internals/dataLoader.ts +116 -54
  25. package/src/links/dedupeLink.test.ts +1 -1
  26. package/src/links/dedupeLink.ts +1 -2
  27. package/src/links/httpBatchLink.ts +54 -31
  28. package/src/links/httpLink.ts +3 -3
  29. package/src/links/index.ts +0 -2
  30. package/src/links/internals/createChain.test.ts +1 -1
  31. package/src/links/internals/createChain.ts +1 -1
  32. package/src/links/internals/httpUtils.ts +52 -31
  33. package/src/links/internals/transformOperationResult.ts +40 -12
  34. package/src/links/loggerLink.ts +1 -1
  35. package/src/links/retryLink.ts +1 -2
  36. package/src/links/splitLink.test.ts +1 -1
  37. package/src/links/splitLink.ts +4 -4
  38. package/src/links/types.ts +12 -7
  39. package/src/links/wsLink.ts +11 -10
  40. package/dist/links/transformerLink.d.ts +0 -4
  41. package/dist/links/transformerLink.d.ts.map +0 -1
  42. package/dist/observable/index.d.ts +0 -4
  43. package/dist/observable/index.d.ts.map +0 -1
  44. package/dist/observable/index.js +0 -38
  45. package/dist/observable/index.mjs +0 -31
  46. package/dist/observable/index.ts.js +0 -1
  47. package/dist/observable/internals/identity.d.ts +0 -2
  48. package/dist/observable/internals/identity.d.ts.map +0 -1
  49. package/dist/observable/internals/observableToPromise.d.ts +0 -10
  50. package/dist/observable/internals/observableToPromise.d.ts.map +0 -1
  51. package/dist/observable/internals/pipe.d.ts +0 -4
  52. package/dist/observable/internals/pipe.d.ts.map +0 -1
  53. package/dist/observable/observable.d.ts +0 -4
  54. package/dist/observable/observable.d.ts.map +0 -1
  55. package/dist/observable/operators/index.d.ts +0 -4
  56. package/dist/observable/operators/index.d.ts.map +0 -1
  57. package/dist/observable/operators/map.d.ts +0 -3
  58. package/dist/observable/operators/map.d.ts.map +0 -1
  59. package/dist/observable/operators/share.d.ts +0 -6
  60. package/dist/observable/operators/share.d.ts.map +0 -1
  61. package/dist/observable/operators/tap.d.ts +0 -3
  62. package/dist/observable/operators/tap.d.ts.map +0 -1
  63. package/dist/observable/types.d.ts +0 -29
  64. package/dist/observable/types.d.ts.map +0 -1
  65. package/dist/tap-0dcdee86.js +0 -243
  66. package/dist/tap-136a9a90.mjs +0 -239
  67. package/observable/dist/trpc-client-rx.cjs.d.ts +0 -1
  68. package/observable/dist/trpc-client-rx.cjs.dev.js +0 -9
  69. package/observable/dist/trpc-client-rx.cjs.js +0 -7
  70. package/observable/dist/trpc-client-rx.cjs.prod.js +0 -9
  71. package/observable/dist/trpc-client-rx.esm.js +0 -1
  72. package/observable/index.d.ts +0 -1
  73. package/observable/index.js +0 -1
  74. package/src/links/transformerLink.ts +0 -74
  75. package/src/observable/index.ts +0 -3
  76. package/src/observable/internals/identity.ts +0 -3
  77. package/src/observable/internals/observableToPromise.ts +0 -49
  78. package/src/observable/internals/pipe.ts +0 -22
  79. package/src/observable/observable.test.ts +0 -101
  80. package/src/observable/observable.ts +0 -70
  81. package/src/observable/operators/index.ts +0 -3
  82. package/src/observable/operators/map.test.ts +0 -92
  83. package/src/observable/operators/map.ts +0 -25
  84. package/src/observable/operators/share.test.ts +0 -60
  85. package/src/observable/operators/share.ts +0 -67
  86. package/src/observable/operators/tap.ts +0 -26
  87. 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
+ };
219
256
 
220
- if (!batch) {
221
- batch = {
222
- items: [],
223
- cancel: function cancel() {
224
- destroyTimerAndBatch();
257
+ var _iterator2 = _createForOfIteratorHelper(items),
258
+ _step2;
259
+
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;
248
340
 
249
- if (thisBatch.items.some(function (item) {
250
- return !item.cancelled;
341
+ item.aborted = true;
342
+
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
  }
@@ -1004,7 +1064,7 @@ function createWSClient(opts) {
1004
1064
  var TRPCWebSocketClosedError = /*#__PURE__*/function (_Error) {
1005
1065
  _inherits(TRPCWebSocketClosedError, _Error);
1006
1066
 
1007
- var _super = /*#__PURE__*/_createSuper$1(TRPCWebSocketClosedError);
1067
+ var _super = /*#__PURE__*/_createSuper(TRPCWebSocketClosedError);
1008
1068
 
1009
1069
  function TRPCWebSocketClosedError(message) {
1010
1070
  var _this;
@@ -1023,7 +1083,7 @@ var TRPCWebSocketClosedError = /*#__PURE__*/function (_Error) {
1023
1083
  var TRPCSubscriptionEndedError = /*#__PURE__*/function (_Error2) {
1024
1084
  _inherits(TRPCSubscriptionEndedError, _Error2);
1025
1085
 
1026
- var _super2 = /*#__PURE__*/_createSuper$1(TRPCSubscriptionEndedError);
1086
+ var _super2 = /*#__PURE__*/_createSuper(TRPCSubscriptionEndedError);
1027
1087
 
1028
1088
  function TRPCSubscriptionEndedError(message) {
1029
1089
  var _this2;
@@ -1040,16 +1100,16 @@ var TRPCSubscriptionEndedError = /*#__PURE__*/function (_Error2) {
1040
1100
  }( /*#__PURE__*/_wrapNativeSuper(Error));
1041
1101
 
1042
1102
  function wsLink(opts) {
1043
- return function () {
1103
+ return function (runtime) {
1044
1104
  var client = opts.client;
1045
1105
  return function (_ref2) {
1046
1106
  var op = _ref2.op;
1047
1107
  return observable(function (observer) {
1048
1108
  var type = op.type,
1049
- input = op.input,
1050
1109
  path = op.path,
1051
1110
  id = op.id,
1052
1111
  context = op.context;
1112
+ var input = runtime.transformer.serialize(op.input);
1053
1113
  var isDone = false;
1054
1114
  var unsub = client.request({
1055
1115
  type: type,
@@ -1091,12 +1151,18 @@ function wsLink(opts) {
1091
1151
  };
1092
1152
  }
1093
1153
 
1154
+ 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; }
1155
+
1156
+ 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; }
1157
+
1094
1158
  /** @internal */
1095
- function transformOperationResult(result) {
1159
+ function transformOperationResult(result, runtime) {
1096
1160
  var context = result.context;
1097
1161
 
1098
1162
  if ('error' in result.data) {
1099
- var error = TRPCClientError.from(result.data);
1163
+ var error = TRPCClientError.from(_objectSpread(_objectSpread({}, result.data), {}, {
1164
+ error: runtime.transformer.deserialize(result.data.error)
1165
+ }));
1100
1166
  return {
1101
1167
  ok: false,
1102
1168
  error: error,
@@ -1104,75 +1170,39 @@ function transformOperationResult(result) {
1104
1170
  };
1105
1171
  }
1106
1172
 
1107
- var data = result.data.result.data;
1173
+ var data = runtime.transformer.deserialize(result.data.result.data);
1108
1174
  return {
1109
1175
  ok: true,
1110
1176
  data: data,
1111
1177
  context: context
1112
1178
  };
1113
1179
  }
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
1180
  /** @internal */
1138
1181
 
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
- }
1182
+ function transformSubscriptionOperationResult(result, runtime) {
1183
+ var context = result.context;
1153
1184
 
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
- }
1185
+ if ('error' in result.data) {
1186
+ var error = TRPCClientError.from(_objectSpread(_objectSpread({}, result.data), {}, {
1187
+ error: runtime.transformer.deserialize(result.data.error)
1188
+ }), {
1189
+ meta: context
1169
1190
  });
1170
- abort = onDone;
1191
+ return {
1192
+ ok: false,
1193
+ error: error,
1194
+ context: context
1195
+ };
1196
+ }
1197
+
1198
+ var data = _objectSpread(_objectSpread({}, result.data.result), result.data.result.type === 'data' && {
1199
+ data: runtime.transformer.deserialize(result.data.result.data)
1171
1200
  });
1201
+
1172
1202
  return {
1173
- promise: promise,
1174
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
1175
- abort: abort
1203
+ ok: true,
1204
+ data: data,
1205
+ context: context
1176
1206
  };
1177
1207
  }
1178
1208
 
@@ -1208,10 +1238,22 @@ var TRPCClient = /*#__PURE__*/function () {
1208
1238
  };
1209
1239
  }
1210
1240
 
1241
+ var transformer = opts.transformer ? 'input' in opts.transformer ? {
1242
+ serialize: opts.transformer.input.serialize,
1243
+ deserialize: opts.transformer.output.deserialize
1244
+ } : opts.transformer : {
1245
+ serialize: function serialize(data) {
1246
+ return data;
1247
+ },
1248
+ deserialize: function deserialize(data) {
1249
+ return data;
1250
+ }
1251
+ };
1211
1252
  this.runtime = {
1212
1253
  AbortController: AC,
1213
1254
  fetch: _fetch,
1214
- headers: getHeadersFn()
1255
+ headers: getHeadersFn(),
1256
+ transformer: transformer
1215
1257
  };
1216
1258
 
1217
1259
  if ('links' in opts) {
@@ -1248,6 +1290,8 @@ var TRPCClient = /*#__PURE__*/function () {
1248
1290
  }, {
1249
1291
  key: "requestAsPromise",
1250
1292
  value: function requestAsPromise(opts) {
1293
+ var _this2 = this;
1294
+
1251
1295
  var req$ = this.$request(opts);
1252
1296
 
1253
1297
  var _observableToPromise = observableToPromise(req$),
@@ -1256,7 +1300,7 @@ var TRPCClient = /*#__PURE__*/function () {
1256
1300
 
1257
1301
  var cancellablePromise = new Promise(function (resolve, reject) {
1258
1302
  promise.then(function (result) {
1259
- var transformed = transformOperationResult(result);
1303
+ var transformed = transformOperationResult(result, _this2.runtime);
1260
1304
 
1261
1305
  if (transformed.ok) {
1262
1306
  resolve(transformed.data);
@@ -1306,21 +1350,21 @@ var TRPCClient = /*#__PURE__*/function () {
1306
1350
  input: input,
1307
1351
  context: opts.context
1308
1352
  });
1353
+ var runtime = this.runtime;
1309
1354
  return observable$.subscribe({
1310
1355
  next: function next(result) {
1311
- var _opts$next;
1356
+ var _opts$error;
1312
1357
 
1313
- if ('error' in result.data) {
1314
- var _opts$error;
1358
+ var transformed = transformSubscriptionOperationResult(result, runtime);
1315
1359
 
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);
1360
+ if (transformed.ok) {
1361
+ var _opts$next;
1362
+
1363
+ (_opts$next = opts.next) === null || _opts$next === void 0 ? void 0 : _opts$next.call(opts, transformed.data);
1320
1364
  return;
1321
1365
  }
1322
1366
 
1323
- (_opts$next = opts.next) === null || _opts$next === void 0 ? void 0 : _opts$next.call(opts, result.data.result);
1367
+ (_opts$error = opts.error) === null || _opts$error === void 0 ? void 0 : _opts$error.call(opts, transformed.error);
1324
1368
  },
1325
1369
  error: function error(err) {
1326
1370
  var _opts$error2;
@@ -1344,4 +1388,4 @@ function createTRPCClient(opts) {
1344
1388
  return new TRPCClient(opts);
1345
1389
  }
1346
1390
 
1347
- export { TRPCClientError, createTRPCClient, createWSClient, dedupeLink, getFetch, httpBatchLink, httpLink, loggerLink, retryLink, splitLink, transformerLink, wsLink };
1391
+ export { TRPCClientError, createTRPCClient, createWSClient, dedupeLink, getFetch, httpBatchLink, httpLink, loggerLink, retryLink, splitLink, wsLink };