@trpc/client 10.0.0-alpha.42 → 10.0.0-alpha.45
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/TRPCClientError.d.ts +14 -10
- package/dist/TRPCClientError.d.ts.map +1 -1
- package/dist/createTRPCClient.d.ts +1 -1
- package/dist/createTRPCClient.d.ts.map +1 -1
- package/dist/createTRPCClientProxy.d.ts +9 -3
- package/dist/createTRPCClientProxy.d.ts.map +1 -1
- package/dist/index.js +33 -97
- package/dist/index.mjs +30 -94
- package/dist/internals/TRPCClient.d.ts +19 -3
- package/dist/internals/TRPCClient.d.ts.map +1 -1
- package/dist/links/httpBatchLink.d.ts.map +1 -1
- package/dist/links/httpBatchLink.js +18 -1
- package/dist/links/httpBatchLink.mjs +18 -1
- package/dist/links/httpLink.d.ts.map +1 -1
- package/dist/links/httpLink.js +21 -2
- package/dist/links/httpLink.mjs +21 -2
- package/dist/links/internals/httpUtils.d.ts +4 -3
- package/dist/links/internals/httpUtils.d.ts.map +1 -1
- package/dist/links/internals/transformResult.d.ts +28 -0
- package/dist/links/internals/transformResult.d.ts.map +1 -0
- package/dist/links/loggerLink.d.ts +3 -3
- package/dist/links/loggerLink.d.ts.map +1 -1
- package/dist/links/loggerLink.js +1 -1
- package/dist/links/loggerLink.mjs +1 -1
- package/dist/links/types.d.ts +6 -8
- package/dist/links/types.d.ts.map +1 -1
- package/dist/links/wsLink.d.ts +9 -4
- package/dist/links/wsLink.d.ts.map +1 -1
- package/dist/links/wsLink.js +400 -12
- package/dist/links/wsLink.mjs +391 -10
- package/dist/transformResult-06bec648.mjs +108 -0
- package/dist/transformResult-3ccc74ea.js +122 -0
- package/links/httpBatchLink/dist/trpc-client-links-httpBatchLink.cjs.dev.js +4 -4
- package/links/httpBatchLink/dist/trpc-client-links-httpBatchLink.cjs.prod.js +4 -4
- package/links/httpBatchLink/dist/trpc-client-links-httpBatchLink.esm.js +1 -1
- package/links/httpLink/dist/trpc-client-links-httpLink.cjs.dev.js +4 -4
- package/links/httpLink/dist/trpc-client-links-httpLink.cjs.prod.js +4 -4
- package/links/httpLink/dist/trpc-client-links-httpLink.esm.js +1 -1
- package/package.json +4 -4
- package/src/TRPCClientError.ts +35 -17
- package/src/createTRPCClient.ts +1 -0
- package/src/createTRPCClientProxy.ts +17 -2
- package/src/internals/TRPCClient.ts +43 -35
- package/src/links/dedupeLink.test.ts +8 -14
- package/src/links/httpBatchLink.ts +17 -7
- package/src/links/httpLink.ts +14 -2
- package/src/links/internals/createChain.test.ts +18 -33
- package/src/links/internals/httpUtils.ts +6 -5
- package/src/links/internals/transformResult.ts +40 -0
- package/src/links/loggerLink.ts +5 -5
- package/src/links/retryLink.ts +1 -1
- package/src/links/types.ts +8 -10
- package/src/links/wsLink.ts +27 -8
- package/dist/links/internals/transformOperationResult.d.ts +0 -30
- package/dist/links/internals/transformOperationResult.d.ts.map +0 -1
- package/dist/wsLink-27b93bd0.mjs +0 -451
- package/dist/wsLink-44703a83.js +0 -467
- package/src/links/internals/transformOperationResult.ts +0 -53
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ProcedureType } from '@trpc/server';
|
|
2
|
+
import { TRPCResponse } from '@trpc/server/rpc';
|
|
2
3
|
import { PromiseAndCancel, TRPCClientRuntime } from '../types';
|
|
3
4
|
|
|
4
5
|
export interface HTTPLinkOptions {
|
|
@@ -21,8 +22,8 @@ const METHOD = {
|
|
|
21
22
|
subscription: 'PATCH',
|
|
22
23
|
} as const;
|
|
23
24
|
|
|
24
|
-
export interface
|
|
25
|
-
json:
|
|
25
|
+
export interface HTTPResult {
|
|
26
|
+
json: TRPCResponse;
|
|
26
27
|
meta: {
|
|
27
28
|
response: Response;
|
|
28
29
|
};
|
|
@@ -76,15 +77,15 @@ export function getBody(opts: GetBodyOptions) {
|
|
|
76
77
|
|
|
77
78
|
export function httpRequest(
|
|
78
79
|
opts: HTTPRequestOptions,
|
|
79
|
-
): PromiseAndCancel<
|
|
80
|
+
): PromiseAndCancel<HTTPResult> {
|
|
80
81
|
const { type, runtime } = opts;
|
|
81
82
|
const ac = runtime.AbortController ? new runtime.AbortController() : null;
|
|
82
83
|
|
|
83
|
-
const promise = new Promise<
|
|
84
|
+
const promise = new Promise<HTTPResult>((resolve, reject) => {
|
|
84
85
|
const url = getUrl(opts);
|
|
85
86
|
const body = getBody(opts);
|
|
86
87
|
|
|
87
|
-
const meta = {} as any as
|
|
88
|
+
const meta = {} as any as HTTPResult['meta'];
|
|
88
89
|
Promise.resolve(runtime.headers())
|
|
89
90
|
.then((headers) =>
|
|
90
91
|
runtime.fetch(url, {
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { AnyRouter, inferRouterError } from '@trpc/server';
|
|
2
|
+
import {
|
|
3
|
+
TRPCResponse,
|
|
4
|
+
TRPCResponseMessage,
|
|
5
|
+
TRPCResultMessage,
|
|
6
|
+
} from '@trpc/server/rpc';
|
|
7
|
+
import { TRPCClientRuntime } from '..';
|
|
8
|
+
|
|
9
|
+
// FIXME:
|
|
10
|
+
// - the generics here are probably unnecessary
|
|
11
|
+
// - the RPC-spec could probably be simplified to combine HTTP + WS
|
|
12
|
+
/** @internal */
|
|
13
|
+
export function transformResult<TRouter extends AnyRouter, TOutput>(
|
|
14
|
+
response:
|
|
15
|
+
| TRPCResponseMessage<TOutput, inferRouterError<TRouter>>
|
|
16
|
+
| TRPCResponse<TOutput, inferRouterError<TRouter>>,
|
|
17
|
+
runtime: TRPCClientRuntime,
|
|
18
|
+
) {
|
|
19
|
+
if ('error' in response) {
|
|
20
|
+
const error = runtime.transformer.deserialize(
|
|
21
|
+
response.error,
|
|
22
|
+
) as inferRouterError<TRouter>;
|
|
23
|
+
return {
|
|
24
|
+
ok: false,
|
|
25
|
+
error: {
|
|
26
|
+
...response,
|
|
27
|
+
error,
|
|
28
|
+
},
|
|
29
|
+
} as const;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const result = {
|
|
33
|
+
...response.result,
|
|
34
|
+
...((!response.result.type || response.result.type === 'data') && {
|
|
35
|
+
type: 'data',
|
|
36
|
+
data: runtime.transformer.deserialize(response.result.data),
|
|
37
|
+
}),
|
|
38
|
+
} as TRPCResultMessage<TOutput>['result'];
|
|
39
|
+
return { ok: true, result } as const;
|
|
40
|
+
}
|
package/src/links/loggerLink.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AnyRouter } from '@trpc/server';
|
|
2
2
|
import { observable, tap } from '@trpc/server/observable';
|
|
3
3
|
import { TRPCClientError } from '..';
|
|
4
|
-
import { Operation,
|
|
4
|
+
import { Operation, OperationResultEnvelope, TRPCLink } from './types';
|
|
5
5
|
|
|
6
6
|
type ConsoleEsque = {
|
|
7
7
|
log: (...args: any[]) => void;
|
|
@@ -14,7 +14,7 @@ type EnableFnOptions<TRouter extends AnyRouter> =
|
|
|
14
14
|
})
|
|
15
15
|
| {
|
|
16
16
|
direction: 'down';
|
|
17
|
-
result:
|
|
17
|
+
result: OperationResultEnvelope<unknown> | TRPCClientError<TRouter>;
|
|
18
18
|
};
|
|
19
19
|
type EnabledFn<TRouter extends AnyRouter> = (
|
|
20
20
|
opts: EnableFnOptions<TRouter>,
|
|
@@ -33,7 +33,7 @@ type LogFnOptions<TRouter extends AnyRouter> = Operation &
|
|
|
33
33
|
* Request result
|
|
34
34
|
*/
|
|
35
35
|
direction: 'down';
|
|
36
|
-
result:
|
|
36
|
+
result: OperationResultEnvelope<unknown> | TRPCClientError<TRouter>;
|
|
37
37
|
elapsedMs: number;
|
|
38
38
|
}
|
|
39
39
|
);
|
|
@@ -92,7 +92,7 @@ const defaultLogger =
|
|
|
92
92
|
const fn: 'error' | 'log' =
|
|
93
93
|
props.direction === 'down' &&
|
|
94
94
|
props.result &&
|
|
95
|
-
(props.result instanceof Error || 'error' in props.result.
|
|
95
|
+
(props.result instanceof Error || 'error' in props.result.result)
|
|
96
96
|
? 'error'
|
|
97
97
|
: 'log';
|
|
98
98
|
|
|
@@ -116,7 +116,7 @@ export function loggerLink<TRouter extends AnyRouter = AnyRouter>(
|
|
|
116
116
|
});
|
|
117
117
|
const requestStartTime = Date.now();
|
|
118
118
|
function logResult(
|
|
119
|
-
result:
|
|
119
|
+
result: OperationResultEnvelope<unknown> | TRPCClientError<TRouter>,
|
|
120
120
|
) {
|
|
121
121
|
const elapsedMs = Date.now() - requestStartTime;
|
|
122
122
|
|
package/src/links/retryLink.ts
CHANGED
package/src/links/types.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { AnyRouter, DataTransformer
|
|
1
|
+
import { AnyRouter, DataTransformer } from '@trpc/server';
|
|
2
2
|
import { Observable, Observer } from '@trpc/server/observable';
|
|
3
|
-
import {
|
|
3
|
+
import { TRPCResultMessage, TRPCSuccessResponse } from '@trpc/server/rpc';
|
|
4
4
|
import { TRPCClientError } from '../TRPCClientError';
|
|
5
5
|
|
|
6
6
|
export type CancelFn = () => void;
|
|
@@ -37,24 +37,22 @@ export interface TRPCClientRuntime {
|
|
|
37
37
|
transformer: DataTransformer;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
export interface OperationResult<TRouter extends AnyRouter, TOutput> {
|
|
45
|
-
data: OperationResultData<TRouter, TOutput>;
|
|
40
|
+
export interface OperationResultEnvelope<TOutput> {
|
|
41
|
+
result:
|
|
42
|
+
| TRPCSuccessResponse<TOutput>['result']
|
|
43
|
+
| TRPCResultMessage<TOutput>['result'];
|
|
46
44
|
context?: OperationContext;
|
|
47
45
|
}
|
|
48
46
|
|
|
49
47
|
export type OperationResultObservable<
|
|
50
48
|
TRouter extends AnyRouter,
|
|
51
49
|
TOutput,
|
|
52
|
-
> = Observable<
|
|
50
|
+
> = Observable<OperationResultEnvelope<TOutput>, TRPCClientError<TRouter>>;
|
|
53
51
|
|
|
54
52
|
export type OperationResultObserver<
|
|
55
53
|
TRouter extends AnyRouter,
|
|
56
54
|
TOutput,
|
|
57
|
-
> = Observer<
|
|
55
|
+
> = Observer<OperationResultEnvelope<TOutput>, TRPCClientError<TRouter>>;
|
|
58
56
|
|
|
59
57
|
export type OperationLink<
|
|
60
58
|
TRouter extends AnyRouter,
|
package/src/links/wsLink.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AnyRouter, ProcedureType } from '@trpc/server';
|
|
2
|
-
import { UnsubscribeFn, observable } from '@trpc/server/observable';
|
|
1
|
+
import { AnyRouter, ProcedureType, inferRouterError } from '@trpc/server';
|
|
2
|
+
import { Observer, UnsubscribeFn, observable } from '@trpc/server/observable';
|
|
3
3
|
import {
|
|
4
4
|
TRPCClientIncomingMessage,
|
|
5
5
|
TRPCClientIncomingRequest,
|
|
@@ -9,7 +9,18 @@ import {
|
|
|
9
9
|
} from '@trpc/server/rpc';
|
|
10
10
|
import { TRPCClientError } from '../TRPCClientError';
|
|
11
11
|
import { retryDelay } from '../internals/retryDelay';
|
|
12
|
-
import {
|
|
12
|
+
import { transformResult } from './internals/transformResult';
|
|
13
|
+
import { Operation, TRPCLink } from './types';
|
|
14
|
+
|
|
15
|
+
type WSCallbackResult<TRouter extends AnyRouter, TOutput> = TRPCResponseMessage<
|
|
16
|
+
TOutput,
|
|
17
|
+
inferRouterError<TRouter>
|
|
18
|
+
>;
|
|
19
|
+
|
|
20
|
+
type WSCallbackObserver<TRouter extends AnyRouter, TOutput> = Observer<
|
|
21
|
+
WSCallbackResult<TRouter, TOutput>,
|
|
22
|
+
TRPCClientError<TRouter>
|
|
23
|
+
>;
|
|
13
24
|
|
|
14
25
|
export interface WebSocketClientOptions {
|
|
15
26
|
url: string;
|
|
@@ -40,7 +51,7 @@ export function createWSClient(opts: WebSocketClientOptions) {
|
|
|
40
51
|
/**
|
|
41
52
|
* pending outgoing requests that are awaiting callback
|
|
42
53
|
*/
|
|
43
|
-
type TCallbacks =
|
|
54
|
+
type TCallbacks = WSCallbackObserver<AnyRouter, unknown>;
|
|
44
55
|
type TRequest = {
|
|
45
56
|
/**
|
|
46
57
|
* Reference to the WebSocket instance this request was made to
|
|
@@ -157,7 +168,7 @@ export function createWSClient(opts: WebSocketClientOptions) {
|
|
|
157
168
|
return;
|
|
158
169
|
}
|
|
159
170
|
|
|
160
|
-
req.callbacks.next?.(
|
|
171
|
+
req.callbacks.next?.(data);
|
|
161
172
|
if (req.ws !== activeConnection && conn === activeConnection) {
|
|
162
173
|
const oldWs = req.ws;
|
|
163
174
|
// gracefully replace old connection with this
|
|
@@ -306,7 +317,7 @@ export function wsLink<TRouter extends AnyRouter>(
|
|
|
306
317
|
{
|
|
307
318
|
error(err) {
|
|
308
319
|
isDone = true;
|
|
309
|
-
observer.error(err);
|
|
320
|
+
observer.error(err as any);
|
|
310
321
|
unsub();
|
|
311
322
|
},
|
|
312
323
|
complete() {
|
|
@@ -323,8 +334,16 @@ export function wsLink<TRouter extends AnyRouter>(
|
|
|
323
334
|
observer.complete();
|
|
324
335
|
}
|
|
325
336
|
},
|
|
326
|
-
next(
|
|
327
|
-
|
|
337
|
+
next(message) {
|
|
338
|
+
const transformed = transformResult(message, runtime);
|
|
339
|
+
|
|
340
|
+
if (!transformed.ok) {
|
|
341
|
+
observer.error(TRPCClientError.from(transformed.error));
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
observer.next({
|
|
345
|
+
result: transformed.result,
|
|
346
|
+
});
|
|
328
347
|
|
|
329
348
|
if (op.type !== 'subscription') {
|
|
330
349
|
// if it isn't a subscription we don't care about next response
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { AnyRouter } from '@trpc/server';
|
|
2
|
-
import { TRPCResultMessage } from '@trpc/server/rpc';
|
|
3
|
-
import { TRPCClientRuntime } from '..';
|
|
4
|
-
import { TRPCClientError } from '../../TRPCClientError';
|
|
5
|
-
import { OperationResult } from '../types';
|
|
6
|
-
/** @internal */
|
|
7
|
-
export declare function transformOperationResult<TRouter extends AnyRouter, TOutput>(result: OperationResult<TRouter, TOutput>, runtime: TRPCClientRuntime): {
|
|
8
|
-
readonly ok: false;
|
|
9
|
-
readonly error: TRPCClientError<TRouter>;
|
|
10
|
-
readonly context: import("..").OperationContext | undefined;
|
|
11
|
-
readonly data?: undefined;
|
|
12
|
-
} | {
|
|
13
|
-
readonly ok: true;
|
|
14
|
-
readonly data: TOutput;
|
|
15
|
-
readonly context: import("..").OperationContext | undefined;
|
|
16
|
-
readonly error?: undefined;
|
|
17
|
-
};
|
|
18
|
-
/** @internal */
|
|
19
|
-
export declare function transformSubscriptionOperationResult<TRouter extends AnyRouter, TOutput>(result: OperationResult<TRouter, TOutput>, runtime: TRPCClientRuntime): {
|
|
20
|
-
readonly ok: false;
|
|
21
|
-
readonly error: TRPCClientError<TRouter>;
|
|
22
|
-
readonly context: import("..").OperationContext | undefined;
|
|
23
|
-
readonly data?: undefined;
|
|
24
|
-
} | {
|
|
25
|
-
readonly ok: true;
|
|
26
|
-
readonly data: TRPCResultMessage<TOutput>;
|
|
27
|
-
readonly context: import("..").OperationContext | undefined;
|
|
28
|
-
readonly error?: undefined;
|
|
29
|
-
};
|
|
30
|
-
//# sourceMappingURL=transformOperationResult.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transformOperationResult.d.ts","sourceRoot":"","sources":["../../../src/links/internals/transformOperationResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,gBAAgB;AAChB,wBAAgB,wBAAwB,CAAC,OAAO,SAAS,SAAS,EAAE,OAAO,EACzE,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,EACzC,OAAO,EAAE,iBAAiB;;;;;;;;;;EAgB3B;AAED,gBAAgB;AAChB,wBAAgB,oCAAoC,CAClD,OAAO,SAAS,SAAS,EACzB,OAAO,EACP,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,iBAAiB;;;;;;;;;;EAqBtE"}
|