@trpc/client 10.27.3 → 10.28.1
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 +25 -25
- package/dist/TRPCClientError.d.ts.map +1 -1
- package/dist/createTRPCClient.d.ts +19 -19
- package/dist/createTRPCClientProxy.d.ts +38 -38
- package/dist/createTRPCClientProxy.d.ts.map +1 -1
- package/dist/createTRPCUntypedClient.d.ts +4 -4
- package/dist/getFetch.d.ts +2 -2
- package/dist/{httpUtils-1a07b2e6.js → httpUtils-00c8b54e.js} +125 -125
- package/dist/index.d.ts +6 -6
- package/dist/internals/TRPCUntypedClient.d.ts +61 -61
- package/dist/internals/TRPCUntypedClient.d.ts.map +1 -1
- package/dist/internals/dataLoader.d.ts +17 -17
- package/dist/internals/dataLoader.d.ts.map +1 -1
- package/dist/internals/getAbortController.d.ts +3 -3
- package/dist/internals/retryDelay.d.ts +1 -1
- package/dist/internals/types.d.ts +75 -102
- package/dist/internals/types.d.ts.map +1 -1
- package/dist/links/dedupeLink.d.ts +3 -3
- package/dist/links/httpBatchLink.d.ts +15 -15
- package/dist/links/httpFormDataLink.d.ts +1 -1
- package/dist/links/httpLink.d.ts +16 -16
- package/dist/links/index.d.ts +7 -7
- package/dist/links/internals/createChain.d.ts +7 -7
- package/dist/links/internals/httpUtils.d.ts +59 -59
- package/dist/links/internals/httpUtils.d.ts.map +1 -1
- package/dist/links/internals/isObject.d.ts +1 -1
- package/dist/links/loggerLink.d.ts +39 -39
- package/dist/links/loggerLink.d.ts.map +1 -1
- package/dist/links/retryLink.d.ts +5 -5
- package/dist/links/splitLink.d.ts +13 -13
- package/dist/links/types.d.ts +69 -69
- package/dist/links/types.d.ts.map +1 -1
- package/dist/links/wsLink.d.ts +28 -28
- package/dist/links/wsLink.d.ts.map +1 -1
- package/dist/links/wsLink.js +9 -17
- package/dist/links/wsLink.mjs +9 -17
- package/dist/shared/index.d.ts +1 -1
- package/dist/shared/transformResult.d.ts +33 -33
- package/dist/{splitLink-aebd28df.js → splitLink-0df96fdc.js} +34 -34
- package/dist/{transformResult-fc4863b8.js → transformResult-ae8e970c.js} +80 -80
- package/package.json +11 -7
- package/src/internals/types.ts +0 -39
- package/src/links/wsLink.ts +10 -24
- package/src/internals/types.test.ts +0 -66
- package/src/links/dedupeLink.test.ts +0 -128
- package/src/links/internals/createChain.test.ts +0 -117
- package/src/links/splitLink.test.ts +0 -55
package/dist/links/types.d.ts
CHANGED
|
@@ -1,70 +1,70 @@
|
|
|
1
|
-
import { AnyRouter, CombinedDataTransformer, DataTransformer } from '@trpc/server';
|
|
2
|
-
import { Observable, Observer } from '@trpc/server/observable';
|
|
3
|
-
import { TRPCResultMessage, TRPCSuccessResponse } from '@trpc/server/rpc';
|
|
4
|
-
import { TRPCClientError } from '../TRPCClientError';
|
|
5
|
-
import { ResponseEsque } from '../internals/types';
|
|
6
|
-
/**
|
|
7
|
-
* @internal
|
|
8
|
-
*/
|
|
9
|
-
export
|
|
10
|
-
/**
|
|
11
|
-
* @internal
|
|
12
|
-
*/
|
|
13
|
-
export
|
|
14
|
-
promise: Promise<TValue>;
|
|
15
|
-
cancel: CancelFn;
|
|
16
|
-
};
|
|
17
|
-
/**
|
|
18
|
-
* @internal
|
|
19
|
-
*/
|
|
20
|
-
export
|
|
21
|
-
/**
|
|
22
|
-
* @internal
|
|
23
|
-
*/
|
|
24
|
-
export
|
|
25
|
-
id: number;
|
|
26
|
-
type: 'query' | 'mutation' | 'subscription';
|
|
27
|
-
input: TInput;
|
|
28
|
-
path: string;
|
|
29
|
-
context: OperationContext;
|
|
30
|
-
};
|
|
31
|
-
/**
|
|
32
|
-
* @internal
|
|
33
|
-
*/
|
|
34
|
-
export
|
|
35
|
-
/**
|
|
36
|
-
* The default `fetch` implementation has an overloaded signature. By convention this library
|
|
37
|
-
* only uses the overload taking a string and options object.
|
|
38
|
-
*/
|
|
39
|
-
export
|
|
40
|
-
export interface TRPCClientRuntime {
|
|
41
|
-
transformer: DataTransformer;
|
|
42
|
-
combinedTransformer: CombinedDataTransformer;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* @internal
|
|
46
|
-
*/
|
|
47
|
-
export interface OperationResultEnvelope<TOutput> {
|
|
48
|
-
result: TRPCSuccessResponse<TOutput>['result'] | TRPCResultMessage<TOutput>['result'];
|
|
49
|
-
context?: OperationContext;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* @internal
|
|
53
|
-
*/
|
|
54
|
-
export
|
|
55
|
-
/**
|
|
56
|
-
* @internal
|
|
57
|
-
*/
|
|
58
|
-
export
|
|
59
|
-
/**
|
|
60
|
-
* @internal
|
|
61
|
-
*/
|
|
62
|
-
export
|
|
63
|
-
op: Operation<TInput>;
|
|
64
|
-
next: (op: Operation<TInput>) => OperationResultObservable<TRouter, TOutput>;
|
|
65
|
-
}) => OperationResultObservable<TRouter, TOutput>;
|
|
66
|
-
/**
|
|
67
|
-
* @public
|
|
68
|
-
*/
|
|
69
|
-
export
|
|
1
|
+
import { AnyRouter, CombinedDataTransformer, DataTransformer } from '@trpc/server';
|
|
2
|
+
import { Observable, Observer } from '@trpc/server/observable';
|
|
3
|
+
import { TRPCResultMessage, TRPCSuccessResponse } from '@trpc/server/rpc';
|
|
4
|
+
import { TRPCClientError } from '../TRPCClientError';
|
|
5
|
+
import { ResponseEsque } from '../internals/types';
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export type CancelFn = () => void;
|
|
10
|
+
/**
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export type PromiseAndCancel<TValue> = {
|
|
14
|
+
promise: Promise<TValue>;
|
|
15
|
+
cancel: CancelFn;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
export type OperationContext = Record<string, unknown>;
|
|
21
|
+
/**
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
export type Operation<TInput = unknown> = {
|
|
25
|
+
id: number;
|
|
26
|
+
type: 'query' | 'mutation' | 'subscription';
|
|
27
|
+
input: TInput;
|
|
28
|
+
path: string;
|
|
29
|
+
context: OperationContext;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
export type HTTPHeaders = Record<string, string | string[] | undefined>;
|
|
35
|
+
/**
|
|
36
|
+
* The default `fetch` implementation has an overloaded signature. By convention this library
|
|
37
|
+
* only uses the overload taking a string and options object.
|
|
38
|
+
*/
|
|
39
|
+
export type TRPCFetch = (url: string, options?: RequestInit) => Promise<ResponseEsque>;
|
|
40
|
+
export interface TRPCClientRuntime {
|
|
41
|
+
transformer: DataTransformer;
|
|
42
|
+
combinedTransformer: CombinedDataTransformer;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* @internal
|
|
46
|
+
*/
|
|
47
|
+
export interface OperationResultEnvelope<TOutput> {
|
|
48
|
+
result: TRPCSuccessResponse<TOutput>['result'] | TRPCResultMessage<TOutput>['result'];
|
|
49
|
+
context?: OperationContext;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @internal
|
|
53
|
+
*/
|
|
54
|
+
export type OperationResultObservable<TRouter extends AnyRouter, TOutput> = Observable<OperationResultEnvelope<TOutput>, TRPCClientError<TRouter>>;
|
|
55
|
+
/**
|
|
56
|
+
* @internal
|
|
57
|
+
*/
|
|
58
|
+
export type OperationResultObserver<TRouter extends AnyRouter, TOutput> = Observer<OperationResultEnvelope<TOutput>, TRPCClientError<TRouter>>;
|
|
59
|
+
/**
|
|
60
|
+
* @internal
|
|
61
|
+
*/
|
|
62
|
+
export type OperationLink<TRouter extends AnyRouter, TInput = unknown, TOutput = unknown> = (opts: {
|
|
63
|
+
op: Operation<TInput>;
|
|
64
|
+
next: (op: Operation<TInput>) => OperationResultObservable<TRouter, TOutput>;
|
|
65
|
+
}) => OperationResultObservable<TRouter, TOutput>;
|
|
66
|
+
/**
|
|
67
|
+
* @public
|
|
68
|
+
*/
|
|
69
|
+
export type TRPCLink<TRouter extends AnyRouter> = (opts: TRPCClientRuntime) => OperationLink<TRouter>;
|
|
70
70
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/links/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,uBAAuB,EACvB,eAAe,EAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/links/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,uBAAuB,EACvB,eAAe,EAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC;AAElC;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,MAAM,IAAI;IACrC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,MAAM,EAAE,QAAQ,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACvD;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,MAAM,GAAG,OAAO,IAAI;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;AAExE;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,CACtB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,WAAW,KAClB,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5B,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,eAAe,CAAC;IAE7B,mBAAmB,EAAE,uBAAuB,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB,CAAC,OAAO;IAC9C,MAAM,EACF,mBAAmB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,GACtC,iBAAiB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,MAAM,yBAAyB,CACnC,OAAO,SAAS,SAAS,EACzB,OAAO,IACL,UAAU,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;AAE3E;;GAEG;AACH,MAAM,MAAM,uBAAuB,CACjC,OAAO,SAAS,SAAS,EACzB,OAAO,IACL,QAAQ,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;AAEzE;;GAEG;AACH,MAAM,MAAM,aAAa,CACvB,OAAO,SAAS,SAAS,EACzB,MAAM,GAAG,OAAO,EAChB,OAAO,GAAG,OAAO,IACf,CAAC,IAAI,EAAE;IACT,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACtB,IAAI,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,yBAAyB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;CAC9E,KAAK,yBAAyB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,QAAQ,CAAC,OAAO,SAAS,SAAS,IAAI,CAChD,IAAI,EAAE,iBAAiB,KACpB,aAAa,CAAC,OAAO,CAAC,CAAC"}
|
package/dist/links/wsLink.d.ts
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import { AnyRouter, inferRouterError } from '@trpc/server';
|
|
2
|
-
import { Observer, UnsubscribeFn } from '@trpc/server/observable';
|
|
3
|
-
import { TRPCResponseMessage } from '@trpc/server/rpc';
|
|
4
|
-
import { TRPCClientError } from '../TRPCClientError';
|
|
5
|
-
import { retryDelay } from '../internals/retryDelay';
|
|
6
|
-
import { Operation, TRPCLink } from './types';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export interface WebSocketClientOptions {
|
|
10
|
-
url: string | (() => string);
|
|
11
|
-
WebSocket?: typeof WebSocket;
|
|
12
|
-
retryDelayMs?: typeof retryDelay;
|
|
13
|
-
onOpen?: () => void;
|
|
14
|
-
onClose?: (cause?: {
|
|
15
|
-
code?: number;
|
|
16
|
-
}) => void;
|
|
17
|
-
}
|
|
18
|
-
export declare function createWSClient(opts: WebSocketClientOptions): {
|
|
19
|
-
close: () => void;
|
|
20
|
-
request: (op: Operation, callbacks: WSCallbackObserver<AnyRouter, unknown>) => UnsubscribeFn;
|
|
21
|
-
getConnection(): WebSocket;
|
|
22
|
-
};
|
|
23
|
-
export
|
|
24
|
-
export interface WebSocketLinkOptions {
|
|
25
|
-
client: TRPCWebSocketClient;
|
|
26
|
-
}
|
|
27
|
-
export declare function wsLink<TRouter extends AnyRouter>(opts: WebSocketLinkOptions): TRPCLink<TRouter>;
|
|
28
|
-
export {};
|
|
1
|
+
import { AnyRouter, inferRouterError } from '@trpc/server';
|
|
2
|
+
import { Observer, UnsubscribeFn } from '@trpc/server/observable';
|
|
3
|
+
import { TRPCResponseMessage } from '@trpc/server/rpc';
|
|
4
|
+
import { TRPCClientError } from '../TRPCClientError';
|
|
5
|
+
import { retryDelay } from '../internals/retryDelay';
|
|
6
|
+
import { Operation, TRPCLink } from './types';
|
|
7
|
+
type WSCallbackResult<TRouter extends AnyRouter, TOutput> = TRPCResponseMessage<TOutput, inferRouterError<TRouter>>;
|
|
8
|
+
type WSCallbackObserver<TRouter extends AnyRouter, TOutput> = Observer<WSCallbackResult<TRouter, TOutput>, TRPCClientError<TRouter>>;
|
|
9
|
+
export interface WebSocketClientOptions {
|
|
10
|
+
url: string | (() => string);
|
|
11
|
+
WebSocket?: typeof WebSocket;
|
|
12
|
+
retryDelayMs?: typeof retryDelay;
|
|
13
|
+
onOpen?: () => void;
|
|
14
|
+
onClose?: (cause?: {
|
|
15
|
+
code?: number;
|
|
16
|
+
}) => void;
|
|
17
|
+
}
|
|
18
|
+
export declare function createWSClient(opts: WebSocketClientOptions): {
|
|
19
|
+
close: () => void;
|
|
20
|
+
request: (op: Operation, callbacks: WSCallbackObserver<AnyRouter, unknown>) => UnsubscribeFn;
|
|
21
|
+
getConnection(): WebSocket;
|
|
22
|
+
};
|
|
23
|
+
export type TRPCWebSocketClient = ReturnType<typeof createWSClient>;
|
|
24
|
+
export interface WebSocketLinkOptions {
|
|
25
|
+
client: TRPCWebSocketClient;
|
|
26
|
+
}
|
|
27
|
+
export declare function wsLink<TRouter extends AnyRouter>(opts: WebSocketLinkOptions): TRPCLink<TRouter>;
|
|
28
|
+
export {};
|
|
29
29
|
//# sourceMappingURL=wsLink.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wsLink.d.ts","sourceRoot":"","sources":["../../src/links/wsLink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAiB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAc,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAKL,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE9C,
|
|
1
|
+
{"version":3,"file":"wsLink.d.ts","sourceRoot":"","sources":["../../src/links/wsLink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAiB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAc,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAKL,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE9C,KAAK,gBAAgB,CAAC,OAAO,SAAS,SAAS,EAAE,OAAO,IAAI,mBAAmB,CAC7E,OAAO,EACP,gBAAgB,CAAC,OAAO,CAAC,CAC1B,CAAC;AAEF,KAAK,kBAAkB,CAAC,OAAO,SAAS,SAAS,EAAE,OAAO,IAAI,QAAQ,CACpE,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,EAClC,eAAe,CAAC,OAAO,CAAC,CACzB,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,UAAU,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC/C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,sBAAsB;;kBAwNpC,SAAS,wDAA0B,aAAa;;EAqDtE;AACD,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAEpE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AASD,wBAAgB,MAAM,CAAC,OAAO,SAAS,SAAS,EAC9C,IAAI,EAAE,oBAAoB,GACzB,QAAQ,CAAC,OAAO,CAAC,CA6CnB"}
|
package/dist/links/wsLink.js
CHANGED
|
@@ -67,6 +67,13 @@ function createWSClient(opts) {
|
|
|
67
67
|
conn.close();
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
+
function closeActiveSubscriptions() {
|
|
71
|
+
Object.values(pendingRequests).forEach((req)=>{
|
|
72
|
+
if (req.type === 'subscription') {
|
|
73
|
+
req.callbacks.complete();
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
70
77
|
function resumeSubscriptionOnReconnect(req) {
|
|
71
78
|
if (outgoing.some((r)=>r.id === req.op.id)) {
|
|
72
79
|
return;
|
|
@@ -205,6 +212,7 @@ function createWSClient(opts) {
|
|
|
205
212
|
close: ()=>{
|
|
206
213
|
state = 'closed';
|
|
207
214
|
onClose?.();
|
|
215
|
+
closeActiveSubscriptions();
|
|
208
216
|
closeIfNoPending(activeConnection);
|
|
209
217
|
clearTimeout(connectTimer);
|
|
210
218
|
connectTimer = null;
|
|
@@ -222,13 +230,6 @@ class TRPCWebSocketClosedError extends Error {
|
|
|
222
230
|
Object.setPrototypeOf(this, TRPCWebSocketClosedError.prototype);
|
|
223
231
|
}
|
|
224
232
|
}
|
|
225
|
-
class TRPCSubscriptionEndedError extends Error {
|
|
226
|
-
constructor(message){
|
|
227
|
-
super(message);
|
|
228
|
-
this.name = 'TRPCSubscriptionEndedError';
|
|
229
|
-
Object.setPrototypeOf(this, TRPCSubscriptionEndedError.prototype);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
233
|
function wsLink(opts) {
|
|
233
234
|
return (runtime)=>{
|
|
234
235
|
const { client } = opts;
|
|
@@ -236,7 +237,6 @@ function wsLink(opts) {
|
|
|
236
237
|
return observable.observable((observer)=>{
|
|
237
238
|
const { type , path , id , context } = op;
|
|
238
239
|
const input = runtime.transformer.serialize(op.input);
|
|
239
|
-
let isDone = false;
|
|
240
240
|
const unsub = client.request({
|
|
241
241
|
type,
|
|
242
242
|
path,
|
|
@@ -245,17 +245,11 @@ function wsLink(opts) {
|
|
|
245
245
|
context
|
|
246
246
|
}, {
|
|
247
247
|
error (err) {
|
|
248
|
-
isDone = true;
|
|
249
248
|
observer.error(err);
|
|
250
249
|
unsub();
|
|
251
250
|
},
|
|
252
251
|
complete () {
|
|
253
|
-
|
|
254
|
-
isDone = true;
|
|
255
|
-
observer.error(transformResult.TRPCClientError.from(new TRPCSubscriptionEndedError('Operation ended prematurely')));
|
|
256
|
-
} else {
|
|
257
|
-
observer.complete();
|
|
258
|
-
}
|
|
252
|
+
observer.complete();
|
|
259
253
|
},
|
|
260
254
|
next (message) {
|
|
261
255
|
const transformed = transformResult.transformResult(message, runtime);
|
|
@@ -268,14 +262,12 @@ function wsLink(opts) {
|
|
|
268
262
|
});
|
|
269
263
|
if (op.type !== 'subscription') {
|
|
270
264
|
// if it isn't a subscription we don't care about next response
|
|
271
|
-
isDone = true;
|
|
272
265
|
unsub();
|
|
273
266
|
observer.complete();
|
|
274
267
|
}
|
|
275
268
|
}
|
|
276
269
|
});
|
|
277
270
|
return ()=>{
|
|
278
|
-
isDone = true;
|
|
279
271
|
unsub();
|
|
280
272
|
};
|
|
281
273
|
});
|
package/dist/links/wsLink.mjs
CHANGED
|
@@ -63,6 +63,13 @@ function createWSClient(opts) {
|
|
|
63
63
|
conn.close();
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
|
+
function closeActiveSubscriptions() {
|
|
67
|
+
Object.values(pendingRequests).forEach((req)=>{
|
|
68
|
+
if (req.type === 'subscription') {
|
|
69
|
+
req.callbacks.complete();
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
66
73
|
function resumeSubscriptionOnReconnect(req) {
|
|
67
74
|
if (outgoing.some((r)=>r.id === req.op.id)) {
|
|
68
75
|
return;
|
|
@@ -201,6 +208,7 @@ function createWSClient(opts) {
|
|
|
201
208
|
close: ()=>{
|
|
202
209
|
state = 'closed';
|
|
203
210
|
onClose?.();
|
|
211
|
+
closeActiveSubscriptions();
|
|
204
212
|
closeIfNoPending(activeConnection);
|
|
205
213
|
clearTimeout(connectTimer);
|
|
206
214
|
connectTimer = null;
|
|
@@ -218,13 +226,6 @@ class TRPCWebSocketClosedError extends Error {
|
|
|
218
226
|
Object.setPrototypeOf(this, TRPCWebSocketClosedError.prototype);
|
|
219
227
|
}
|
|
220
228
|
}
|
|
221
|
-
class TRPCSubscriptionEndedError extends Error {
|
|
222
|
-
constructor(message){
|
|
223
|
-
super(message);
|
|
224
|
-
this.name = 'TRPCSubscriptionEndedError';
|
|
225
|
-
Object.setPrototypeOf(this, TRPCSubscriptionEndedError.prototype);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
229
|
function wsLink(opts) {
|
|
229
230
|
return (runtime)=>{
|
|
230
231
|
const { client } = opts;
|
|
@@ -232,7 +233,6 @@ function wsLink(opts) {
|
|
|
232
233
|
return observable((observer)=>{
|
|
233
234
|
const { type , path , id , context } = op;
|
|
234
235
|
const input = runtime.transformer.serialize(op.input);
|
|
235
|
-
let isDone = false;
|
|
236
236
|
const unsub = client.request({
|
|
237
237
|
type,
|
|
238
238
|
path,
|
|
@@ -241,17 +241,11 @@ function wsLink(opts) {
|
|
|
241
241
|
context
|
|
242
242
|
}, {
|
|
243
243
|
error (err) {
|
|
244
|
-
isDone = true;
|
|
245
244
|
observer.error(err);
|
|
246
245
|
unsub();
|
|
247
246
|
},
|
|
248
247
|
complete () {
|
|
249
|
-
|
|
250
|
-
isDone = true;
|
|
251
|
-
observer.error(TRPCClientError.from(new TRPCSubscriptionEndedError('Operation ended prematurely')));
|
|
252
|
-
} else {
|
|
253
|
-
observer.complete();
|
|
254
|
-
}
|
|
248
|
+
observer.complete();
|
|
255
249
|
},
|
|
256
250
|
next (message) {
|
|
257
251
|
const transformed = transformResult(message, runtime);
|
|
@@ -264,14 +258,12 @@ function wsLink(opts) {
|
|
|
264
258
|
});
|
|
265
259
|
if (op.type !== 'subscription') {
|
|
266
260
|
// if it isn't a subscription we don't care about next response
|
|
267
|
-
isDone = true;
|
|
268
261
|
unsub();
|
|
269
262
|
observer.complete();
|
|
270
263
|
}
|
|
271
264
|
}
|
|
272
265
|
});
|
|
273
266
|
return ()=>{
|
|
274
|
-
isDone = true;
|
|
275
267
|
unsub();
|
|
276
268
|
};
|
|
277
269
|
});
|
package/dist/shared/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './transformResult';
|
|
1
|
+
export * from './transformResult';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import type { AnyRouter, inferRouterError } from '@trpc/server';
|
|
2
|
-
import type { TRPCResponse, TRPCResponseMessage } from '@trpc/server/rpc';
|
|
3
|
-
import type { TRPCClientRuntime } from '../links';
|
|
4
|
-
/** @internal */
|
|
5
|
-
declare function transformResultInner<TRouter extends AnyRouter, TOutput>(response: TRPCResponseMessage<TOutput, inferRouterError<TRouter>> | TRPCResponse<TOutput, inferRouterError<TRouter>>, runtime: TRPCClientRuntime): {
|
|
6
|
-
readonly ok: false;
|
|
7
|
-
readonly error: {
|
|
8
|
-
readonly error: inferRouterError<TRouter>;
|
|
9
|
-
readonly id?: import("@trpc/server/rpc").JSONRPC2.RequestId | undefined;
|
|
10
|
-
readonly jsonrpc?: "2.0" | undefined;
|
|
11
|
-
} | {
|
|
12
|
-
readonly error: inferRouterError<TRouter>;
|
|
13
|
-
readonly id: string | number | null;
|
|
14
|
-
readonly jsonrpc?: "2.0" | undefined;
|
|
15
|
-
};
|
|
16
|
-
readonly result?: undefined;
|
|
17
|
-
} | {
|
|
18
|
-
readonly ok: true;
|
|
19
|
-
readonly result: {
|
|
20
|
-
type: "started";
|
|
21
|
-
} | {
|
|
22
|
-
type: "stopped";
|
|
23
|
-
} | (import("@trpc/server/rpc").TRPCResult<TOutput> & {
|
|
24
|
-
type: "data";
|
|
25
|
-
});
|
|
26
|
-
readonly error?: undefined;
|
|
27
|
-
};
|
|
28
|
-
/**
|
|
29
|
-
* Transforms and validates that the result is a valid TRPCResponse
|
|
30
|
-
* @internal
|
|
31
|
-
*/
|
|
32
|
-
export declare function transformResult<TRouter extends AnyRouter, TOutput>(response: TRPCResponseMessage<TOutput, inferRouterError<TRouter>> | TRPCResponse<TOutput, inferRouterError<TRouter>>, runtime: TRPCClientRuntime): ReturnType<typeof transformResultInner>;
|
|
33
|
-
export {};
|
|
1
|
+
import type { AnyRouter, inferRouterError } from '@trpc/server';
|
|
2
|
+
import type { TRPCResponse, TRPCResponseMessage } from '@trpc/server/rpc';
|
|
3
|
+
import type { TRPCClientRuntime } from '../links';
|
|
4
|
+
/** @internal */
|
|
5
|
+
declare function transformResultInner<TRouter extends AnyRouter, TOutput>(response: TRPCResponseMessage<TOutput, inferRouterError<TRouter>> | TRPCResponse<TOutput, inferRouterError<TRouter>>, runtime: TRPCClientRuntime): {
|
|
6
|
+
readonly ok: false;
|
|
7
|
+
readonly error: {
|
|
8
|
+
readonly error: inferRouterError<TRouter>;
|
|
9
|
+
readonly id?: import("@trpc/server/rpc").JSONRPC2.RequestId | undefined;
|
|
10
|
+
readonly jsonrpc?: "2.0" | undefined;
|
|
11
|
+
} | {
|
|
12
|
+
readonly error: inferRouterError<TRouter>;
|
|
13
|
+
readonly id: string | number | null;
|
|
14
|
+
readonly jsonrpc?: "2.0" | undefined;
|
|
15
|
+
};
|
|
16
|
+
readonly result?: undefined;
|
|
17
|
+
} | {
|
|
18
|
+
readonly ok: true;
|
|
19
|
+
readonly result: {
|
|
20
|
+
type: "started";
|
|
21
|
+
} | {
|
|
22
|
+
type: "stopped";
|
|
23
|
+
} | (import("@trpc/server/rpc").TRPCResult<TOutput> & {
|
|
24
|
+
type: "data";
|
|
25
|
+
});
|
|
26
|
+
readonly error?: undefined;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Transforms and validates that the result is a valid TRPCResponse
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
export declare function transformResult<TRouter extends AnyRouter, TOutput>(response: TRPCResponseMessage<TOutput, inferRouterError<TRouter>> | TRPCResponse<TOutput, inferRouterError<TRouter>>, runtime: TRPCClientRuntime): ReturnType<typeof transformResultInner>;
|
|
33
|
+
export {};
|
|
34
34
|
//# sourceMappingURL=transformResult.d.ts.map
|
|
@@ -1,41 +1,41 @@
|
|
|
1
1
|
import { observable } from '@trpc/server/observable';
|
|
2
2
|
|
|
3
|
-
/** @internal */
|
|
4
|
-
function createChain(opts) {
|
|
5
|
-
return observable((observer) => {
|
|
6
|
-
function execute(index = 0, op = opts.op) {
|
|
7
|
-
const next = opts.links[index];
|
|
8
|
-
if (!next) {
|
|
9
|
-
throw new Error('No more links to execute - did you forget to add an ending link?');
|
|
10
|
-
}
|
|
11
|
-
const subscription = next({
|
|
12
|
-
op,
|
|
13
|
-
next(nextOp) {
|
|
14
|
-
const nextObserver = execute(index + 1, nextOp);
|
|
15
|
-
return nextObserver;
|
|
16
|
-
},
|
|
17
|
-
});
|
|
18
|
-
return subscription;
|
|
19
|
-
}
|
|
20
|
-
const obs$ = execute();
|
|
21
|
-
return obs$.subscribe(observer);
|
|
22
|
-
});
|
|
3
|
+
/** @internal */
|
|
4
|
+
function createChain(opts) {
|
|
5
|
+
return observable((observer) => {
|
|
6
|
+
function execute(index = 0, op = opts.op) {
|
|
7
|
+
const next = opts.links[index];
|
|
8
|
+
if (!next) {
|
|
9
|
+
throw new Error('No more links to execute - did you forget to add an ending link?');
|
|
10
|
+
}
|
|
11
|
+
const subscription = next({
|
|
12
|
+
op,
|
|
13
|
+
next(nextOp) {
|
|
14
|
+
const nextObserver = execute(index + 1, nextOp);
|
|
15
|
+
return nextObserver;
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
return subscription;
|
|
19
|
+
}
|
|
20
|
+
const obs$ = execute();
|
|
21
|
+
return obs$.subscribe(observer);
|
|
22
|
+
});
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
function asArray(value) {
|
|
26
|
-
return Array.isArray(value) ? value : [value];
|
|
27
|
-
}
|
|
28
|
-
function splitLink(opts) {
|
|
29
|
-
return (runtime) => {
|
|
30
|
-
const yes = asArray(opts.true).map((link) => link(runtime));
|
|
31
|
-
const no = asArray(opts.false).map((link) => link(runtime));
|
|
32
|
-
return (props) => {
|
|
33
|
-
return observable((observer) => {
|
|
34
|
-
const links = opts.condition(props.op) ? yes : no;
|
|
35
|
-
return createChain({ op: props.op, links }).subscribe(observer);
|
|
36
|
-
});
|
|
37
|
-
};
|
|
38
|
-
};
|
|
25
|
+
function asArray(value) {
|
|
26
|
+
return Array.isArray(value) ? value : [value];
|
|
27
|
+
}
|
|
28
|
+
function splitLink(opts) {
|
|
29
|
+
return (runtime) => {
|
|
30
|
+
const yes = asArray(opts.true).map((link) => link(runtime));
|
|
31
|
+
const no = asArray(opts.false).map((link) => link(runtime));
|
|
32
|
+
return (props) => {
|
|
33
|
+
return observable((observer) => {
|
|
34
|
+
const links = opts.condition(props.op) ? yes : no;
|
|
35
|
+
return createChain({ op: props.op, links }).subscribe(observer);
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
export { createChain as c, splitLink as s };
|