@trpc/client 11.0.0-next-beta.248 → 11.0.0-next-beta.285

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 (48) hide show
  1. package/dist/bundle-analysis.json +63 -48
  2. package/dist/internals/TRPCUntypedClient.d.ts +3 -20
  3. package/dist/internals/TRPCUntypedClient.d.ts.map +1 -1
  4. package/dist/internals/TRPCUntypedClient.js +1 -29
  5. package/dist/internals/TRPCUntypedClient.mjs +1 -29
  6. package/dist/links/HTTPBatchLinkOptions.d.ts +3 -2
  7. package/dist/links/HTTPBatchLinkOptions.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/httpBatchStreamLink.d.ts +4 -3
  11. package/dist/links/httpBatchStreamLink.d.ts.map +1 -1
  12. package/dist/links/httpFormDataLink.d.ts +1 -1
  13. package/dist/links/httpFormDataLink.d.ts.map +1 -1
  14. package/dist/links/httpLink.d.ts +5 -5
  15. package/dist/links/httpLink.d.ts.map +1 -1
  16. package/dist/links/httpLink.js +2 -3
  17. package/dist/links/httpLink.mjs +2 -3
  18. package/dist/links/internals/createHTTPBatchLink.d.ts +3 -3
  19. package/dist/links/internals/createHTTPBatchLink.d.ts.map +1 -1
  20. package/dist/links/internals/createHTTPBatchLink.js +1 -2
  21. package/dist/links/internals/createHTTPBatchLink.mjs +1 -2
  22. package/dist/links/internals/httpUtils.d.ts +8 -6
  23. package/dist/links/internals/httpUtils.d.ts.map +1 -1
  24. package/dist/links/internals/httpUtils.js +4 -2
  25. package/dist/links/internals/httpUtils.mjs +4 -2
  26. package/dist/links/types.d.ts +7 -9
  27. package/dist/links/types.d.ts.map +1 -1
  28. package/dist/links/wsLink.d.ts +5 -4
  29. package/dist/links/wsLink.d.ts.map +1 -1
  30. package/dist/links/wsLink.js +5 -3
  31. package/dist/links/wsLink.mjs +5 -3
  32. package/dist/unstable-internals.d.ts +33 -0
  33. package/dist/unstable-internals.d.ts.map +1 -0
  34. package/dist/unstable-internals.js +28 -0
  35. package/dist/unstable-internals.mjs +26 -0
  36. package/package.json +10 -4
  37. package/src/internals/TRPCUntypedClient.ts +6 -61
  38. package/src/links/HTTPBatchLinkOptions.ts +14 -12
  39. package/src/links/httpBatchLink.ts +4 -1
  40. package/src/links/httpBatchStreamLink.ts +11 -9
  41. package/src/links/httpLink.ts +17 -14
  42. package/src/links/internals/createHTTPBatchLink.ts +7 -6
  43. package/src/links/internals/httpUtils.ts +15 -11
  44. package/src/links/types.ts +13 -15
  45. package/src/links/wsLink.ts +10 -6
  46. package/src/unstable-internals.ts +67 -0
  47. package/unstable-internals/index.d.ts +1 -0
  48. package/unstable-internals/index.js +1 -0
@@ -1,4 +1,6 @@
1
1
  import type {
2
+ AnyRootTypes,
3
+ CombinedDataTransformer,
2
4
  ProcedureType,
3
5
  TRPCResponse,
4
6
  } from '@trpc/server/unstable-core-do-not-import';
@@ -12,17 +14,17 @@ import type {
12
14
  ResponseEsque,
13
15
  } from '../../internals/types';
14
16
  import { TRPCClientError } from '../../TRPCClientError';
17
+ import type { TransformerOptions } from '../../unstable-internals';
18
+ import { getTransformer } from '../../unstable-internals';
15
19
  import type { TextDecoderEsque } from '../internals/streamingUtils';
16
- import type {
17
- HTTPHeaders,
18
- PromiseAndCancel,
19
- TRPCClientRuntime,
20
- } from '../types';
20
+ import type { HTTPHeaders, PromiseAndCancel } from '../types';
21
21
 
22
22
  /**
23
23
  * @internal
24
24
  */
25
- export interface HTTPLinkBaseOptions {
25
+ export type HTTPLinkBaseOptions<
26
+ TRoot extends Pick<AnyRootTypes, 'transformer'>,
27
+ > = {
26
28
  url: string | URL;
27
29
  /**
28
30
  * Add ponyfill for fetch
@@ -32,21 +34,23 @@ export interface HTTPLinkBaseOptions {
32
34
  * Add ponyfill for AbortController
33
35
  */
34
36
  AbortController?: AbortControllerEsque | null;
35
- }
37
+ } & TransformerOptions<TRoot>;
36
38
 
37
39
  export interface ResolvedHTTPLinkOptions {
38
40
  url: string;
39
41
  fetch?: FetchEsque;
40
42
  AbortController: AbortControllerEsque | null;
43
+ transformer: CombinedDataTransformer;
41
44
  }
42
45
 
43
46
  export function resolveHTTPLinkOptions(
44
- opts: HTTPLinkBaseOptions,
47
+ opts: HTTPLinkBaseOptions<AnyRootTypes>,
45
48
  ): ResolvedHTTPLinkOptions {
46
49
  return {
47
50
  url: opts.url.toString().replace(/\/$/, ''), // Remove any trailing slashes
48
51
  fetch: opts.fetch,
49
52
  AbortController: getAbortController(opts.AbortController),
53
+ transformer: getTransformer(opts.transformer),
50
54
  };
51
55
  }
52
56
 
@@ -74,14 +78,14 @@ export interface HTTPResult {
74
78
  }
75
79
 
76
80
  type GetInputOptions = {
77
- runtime: TRPCClientRuntime;
81
+ transformer: CombinedDataTransformer;
78
82
  } & ({ input: unknown } | { inputs: unknown[] });
79
83
 
80
84
  function getInput(opts: GetInputOptions) {
81
85
  return 'input' in opts
82
- ? opts.runtime.transformer.serialize(opts.input)
86
+ ? opts.transformer.input.serialize(opts.input)
83
87
  : arrayToDict(
84
- opts.inputs.map((_input) => opts.runtime.transformer.serialize(_input)),
88
+ opts.inputs.map((_input) => opts.transformer.input.serialize(_input)),
85
89
  );
86
90
  }
87
91
 
@@ -1,8 +1,6 @@
1
1
  import type { Observable, Observer } from '@trpc/server/observable';
2
2
  import type {
3
- AnyRouter,
4
- CombinedDataTransformer,
5
- DataTransformer,
3
+ TRPCInferrable,
6
4
  TRPCResultMessage,
7
5
  TRPCSuccessResponse,
8
6
  } from '@trpc/server/unstable-core-do-not-import';
@@ -59,9 +57,7 @@ export type TRPCFetch = (
59
57
  ) => Promise<ResponseEsque>;
60
58
 
61
59
  export interface TRPCClientRuntime {
62
- transformer: DataTransformer;
63
- // FIXME: we should be able to remove this - added as `withTRPC()` needs it, but we can have it as an extra option on SSR instead
64
- combinedTransformer: CombinedDataTransformer;
60
+ // nothing here anymore
65
61
  }
66
62
 
67
63
  /**
@@ -78,33 +74,35 @@ export interface OperationResultEnvelope<TOutput> {
78
74
  * @internal
79
75
  */
80
76
  export type OperationResultObservable<
81
- TRouter extends AnyRouter,
77
+ TInferrable extends TRPCInferrable,
82
78
  TOutput,
83
- > = Observable<OperationResultEnvelope<TOutput>, TRPCClientError<TRouter>>;
79
+ > = Observable<OperationResultEnvelope<TOutput>, TRPCClientError<TInferrable>>;
84
80
 
85
81
  /**
86
82
  * @internal
87
83
  */
88
84
  export type OperationResultObserver<
89
- TRouter extends AnyRouter,
85
+ TInferrable extends TRPCInferrable,
90
86
  TOutput,
91
- > = Observer<OperationResultEnvelope<TOutput>, TRPCClientError<TRouter>>;
87
+ > = Observer<OperationResultEnvelope<TOutput>, TRPCClientError<TInferrable>>;
92
88
 
93
89
  /**
94
90
  * @internal
95
91
  */
96
92
  export type OperationLink<
97
- TRouter extends AnyRouter,
93
+ TInferrable extends TRPCInferrable,
98
94
  TInput = unknown,
99
95
  TOutput = unknown,
100
96
  > = (opts: {
101
97
  op: Operation<TInput>;
102
- next: (op: Operation<TInput>) => OperationResultObservable<TRouter, TOutput>;
103
- }) => OperationResultObservable<TRouter, TOutput>;
98
+ next: (
99
+ op: Operation<TInput>,
100
+ ) => OperationResultObservable<TInferrable, TOutput>;
101
+ }) => OperationResultObservable<TInferrable, TOutput>;
104
102
 
105
103
  /**
106
104
  * @public
107
105
  */
108
- export type TRPCLink<TRouter extends AnyRouter> = (
106
+ export type TRPCLink<TInferrable extends TRPCInferrable> = (
109
107
  opts: TRPCClientRuntime,
110
- ) => OperationLink<TRouter>;
108
+ ) => OperationLink<TInferrable>;
@@ -2,6 +2,7 @@ import type { Observer, UnsubscribeFn } from '@trpc/server/observable';
2
2
  import { observable } from '@trpc/server/observable';
3
3
  import type {
4
4
  AnyRouter,
5
+ inferRootTypes,
5
6
  inferRouterError,
6
7
  MaybePromise,
7
8
  ProcedureType,
@@ -13,6 +14,8 @@ import type {
13
14
  } from '@trpc/server/unstable-core-do-not-import';
14
15
  import { transformResult } from '@trpc/server/unstable-core-do-not-import';
15
16
  import { TRPCClientError } from '../TRPCClientError';
17
+ import type { TransformerOptions } from '../unstable-internals';
18
+ import { getTransformer } from '../unstable-internals';
16
19
  import type { Operation, TRPCLink } from './types';
17
20
 
18
21
  const run = <TResult>(fn: () => TResult): TResult => fn();
@@ -429,9 +432,9 @@ export function createWSClient(opts: WebSocketClientOptions) {
429
432
  }
430
433
  export type TRPCWebSocketClient = ReturnType<typeof createWSClient>;
431
434
 
432
- export interface WebSocketLinkOptions {
435
+ export type WebSocketLinkOptions<TRouter extends AnyRouter> = {
433
436
  client: TRPCWebSocketClient;
434
- }
437
+ } & TransformerOptions<inferRootTypes<TRouter>>;
435
438
  class TRPCWebSocketClosedError extends Error {
436
439
  constructor(message: string) {
437
440
  super(message);
@@ -444,15 +447,16 @@ class TRPCWebSocketClosedError extends Error {
444
447
  * @link https://trpc.io/docs/v11/client/links/wsLink
445
448
  */
446
449
  export function wsLink<TRouter extends AnyRouter>(
447
- opts: WebSocketLinkOptions,
450
+ opts: WebSocketLinkOptions<TRouter>,
448
451
  ): TRPCLink<TRouter> {
449
- return (runtime) => {
452
+ const transformer = getTransformer(opts.transformer);
453
+ return () => {
450
454
  const { client } = opts;
451
455
  return ({ op }) => {
452
456
  return observable((observer) => {
453
457
  const { type, path, id, context } = op;
454
458
 
455
- const input = runtime.transformer.serialize(op.input);
459
+ const input = transformer.input.serialize(op.input);
456
460
 
457
461
  const unsub = client.request(
458
462
  { type, path, input, id, context },
@@ -465,7 +469,7 @@ export function wsLink<TRouter extends AnyRouter>(
465
469
  observer.complete();
466
470
  },
467
471
  next(message) {
468
- const transformed = transformResult(message, runtime.transformer);
472
+ const transformed = transformResult(message, transformer.output);
469
473
 
470
474
  if (!transformed.ok) {
471
475
  observer.error(TRPCClientError.from(transformed.error));
@@ -0,0 +1,67 @@
1
+ import type {
2
+ AnyRootTypes,
3
+ CombinedDataTransformer,
4
+ DataTransformerOptions,
5
+ TypeError,
6
+ } from '@trpc/server/unstable-core-do-not-import';
7
+
8
+ export type CoercedTransformerParameters = {
9
+ transformer?: DataTransformerOptions;
10
+ };
11
+
12
+ type TransformerOptionYes = {
13
+ /**
14
+ * Data transformer
15
+ *
16
+ * You must use the same transformer on the backend and frontend
17
+ * @link https://trpc.io/docs/v11/data-transformers
18
+ **/
19
+ transformer: DataTransformerOptions;
20
+ };
21
+ type TransformerOptionNo = {
22
+ /**
23
+ * Data transformer
24
+ *
25
+ * You must use the same transformer on the backend and frontend
26
+ * @link https://trpc.io/docs/v11/data-transformers
27
+ **/
28
+ transformer?: TypeError<'You must define a transformer on your your `initTRPC`-object first'>;
29
+ };
30
+
31
+ export type TransformerOptions<
32
+ TRoot extends Pick<AnyRootTypes, 'transformer'>,
33
+ > = TRoot['transformer'] extends true
34
+ ? TransformerOptionYes
35
+ : TransformerOptionNo;
36
+ /**
37
+ * @internal
38
+ */
39
+
40
+ export function getTransformer(
41
+ transformer:
42
+ | TransformerOptions<{ transformer: false }>['transformer']
43
+ | TransformerOptions<{ transformer: true }>['transformer']
44
+ | undefined,
45
+ ): CombinedDataTransformer {
46
+ const _transformer =
47
+ transformer as CoercedTransformerParameters['transformer'];
48
+ if (!_transformer) {
49
+ return {
50
+ input: {
51
+ serialize: (data) => data,
52
+ deserialize: (data) => data,
53
+ },
54
+ output: {
55
+ serialize: (data) => data,
56
+ deserialize: (data) => data,
57
+ },
58
+ };
59
+ }
60
+ if ('input' in _transformer) {
61
+ return _transformer;
62
+ }
63
+ return {
64
+ input: _transformer,
65
+ output: _transformer,
66
+ };
67
+ }
@@ -0,0 +1 @@
1
+ export * from '../dist/unstable-internals';
@@ -0,0 +1 @@
1
+ module.exports = require('../dist/unstable-internals');