@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.
- package/dist/bundle-analysis.json +63 -48
- package/dist/internals/TRPCUntypedClient.d.ts +3 -20
- package/dist/internals/TRPCUntypedClient.d.ts.map +1 -1
- package/dist/internals/TRPCUntypedClient.js +1 -29
- package/dist/internals/TRPCUntypedClient.mjs +1 -29
- package/dist/links/HTTPBatchLinkOptions.d.ts +3 -2
- package/dist/links/HTTPBatchLinkOptions.d.ts.map +1 -1
- package/dist/links/httpBatchLink.d.ts +1 -1
- package/dist/links/httpBatchLink.d.ts.map +1 -1
- package/dist/links/httpBatchStreamLink.d.ts +4 -3
- package/dist/links/httpBatchStreamLink.d.ts.map +1 -1
- package/dist/links/httpFormDataLink.d.ts +1 -1
- package/dist/links/httpFormDataLink.d.ts.map +1 -1
- package/dist/links/httpLink.d.ts +5 -5
- package/dist/links/httpLink.d.ts.map +1 -1
- package/dist/links/httpLink.js +2 -3
- package/dist/links/httpLink.mjs +2 -3
- package/dist/links/internals/createHTTPBatchLink.d.ts +3 -3
- package/dist/links/internals/createHTTPBatchLink.d.ts.map +1 -1
- package/dist/links/internals/createHTTPBatchLink.js +1 -2
- package/dist/links/internals/createHTTPBatchLink.mjs +1 -2
- package/dist/links/internals/httpUtils.d.ts +8 -6
- package/dist/links/internals/httpUtils.d.ts.map +1 -1
- package/dist/links/internals/httpUtils.js +4 -2
- package/dist/links/internals/httpUtils.mjs +4 -2
- package/dist/links/types.d.ts +7 -9
- package/dist/links/types.d.ts.map +1 -1
- package/dist/links/wsLink.d.ts +5 -4
- package/dist/links/wsLink.d.ts.map +1 -1
- package/dist/links/wsLink.js +5 -3
- package/dist/links/wsLink.mjs +5 -3
- package/dist/unstable-internals.d.ts +33 -0
- package/dist/unstable-internals.d.ts.map +1 -0
- package/dist/unstable-internals.js +28 -0
- package/dist/unstable-internals.mjs +26 -0
- package/package.json +10 -4
- package/src/internals/TRPCUntypedClient.ts +6 -61
- package/src/links/HTTPBatchLinkOptions.ts +14 -12
- package/src/links/httpBatchLink.ts +4 -1
- package/src/links/httpBatchStreamLink.ts +11 -9
- package/src/links/httpLink.ts +17 -14
- package/src/links/internals/createHTTPBatchLink.ts +7 -6
- package/src/links/internals/httpUtils.ts +15 -11
- package/src/links/types.ts +13 -15
- package/src/links/wsLink.ts +10 -6
- package/src/unstable-internals.ts +67 -0
- package/unstable-internals/index.d.ts +1 -0
- 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
|
|
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
|
-
|
|
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.
|
|
86
|
+
? opts.transformer.input.serialize(opts.input)
|
|
83
87
|
: arrayToDict(
|
|
84
|
-
opts.inputs.map((_input) => opts.
|
|
88
|
+
opts.inputs.map((_input) => opts.transformer.input.serialize(_input)),
|
|
85
89
|
);
|
|
86
90
|
}
|
|
87
91
|
|
package/src/links/types.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import type { Observable, Observer } from '@trpc/server/observable';
|
|
2
2
|
import type {
|
|
3
|
-
|
|
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
|
-
|
|
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
|
-
|
|
77
|
+
TInferrable extends TRPCInferrable,
|
|
82
78
|
TOutput,
|
|
83
|
-
> = Observable<OperationResultEnvelope<TOutput>, TRPCClientError<
|
|
79
|
+
> = Observable<OperationResultEnvelope<TOutput>, TRPCClientError<TInferrable>>;
|
|
84
80
|
|
|
85
81
|
/**
|
|
86
82
|
* @internal
|
|
87
83
|
*/
|
|
88
84
|
export type OperationResultObserver<
|
|
89
|
-
|
|
85
|
+
TInferrable extends TRPCInferrable,
|
|
90
86
|
TOutput,
|
|
91
|
-
> = Observer<OperationResultEnvelope<TOutput>, TRPCClientError<
|
|
87
|
+
> = Observer<OperationResultEnvelope<TOutput>, TRPCClientError<TInferrable>>;
|
|
92
88
|
|
|
93
89
|
/**
|
|
94
90
|
* @internal
|
|
95
91
|
*/
|
|
96
92
|
export type OperationLink<
|
|
97
|
-
|
|
93
|
+
TInferrable extends TRPCInferrable,
|
|
98
94
|
TInput = unknown,
|
|
99
95
|
TOutput = unknown,
|
|
100
96
|
> = (opts: {
|
|
101
97
|
op: Operation<TInput>;
|
|
102
|
-
next: (
|
|
103
|
-
|
|
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<
|
|
106
|
+
export type TRPCLink<TInferrable extends TRPCInferrable> = (
|
|
109
107
|
opts: TRPCClientRuntime,
|
|
110
|
-
) => OperationLink<
|
|
108
|
+
) => OperationLink<TInferrable>;
|
package/src/links/wsLink.ts
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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 =
|
|
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,
|
|
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');
|