@trpc/client 10.2.0 → 10.4.0
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/{httpUtils-47077ecd.js → httpUtils-277fd63a.js} +1 -1
- package/dist/{httpUtils-01e0c677.mjs → httpUtils-939364d7.mjs} +1 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/links/dedupeLink.d.ts.map +1 -1
- package/dist/links/httpBatchLink.js +1 -1
- package/dist/links/httpBatchLink.mjs +1 -1
- package/dist/links/httpLink.js +1 -1
- package/dist/links/httpLink.mjs +1 -1
- package/dist/links/internals/httpUtils.d.ts.map +1 -1
- package/dist/links/retryLink.d.ts.map +1 -1
- package/dist/links/wsLink.d.ts.map +1 -1
- package/dist/links/wsLink.js +12 -5
- package/dist/links/wsLink.mjs +12 -5
- package/package.json +4 -4
- package/src/links/dedupeLink.ts +3 -3
- package/src/links/internals/httpUtils.ts +1 -0
- package/src/links/retryLink.ts +4 -11
- package/src/links/wsLink.ts +20 -9
|
@@ -79,7 +79,7 @@ function httpRequest(opts) {
|
|
|
79
79
|
const body = getBody(opts);
|
|
80
80
|
const meta = {};
|
|
81
81
|
Promise.resolve(opts.headers()).then((headers)=>{
|
|
82
|
-
if (type === 'subscription') {
|
|
82
|
+
/* istanbul ignore if */ if (type === 'subscription') {
|
|
83
83
|
throw new Error('Subscriptions should use wsLink');
|
|
84
84
|
}
|
|
85
85
|
return opts.fetch(url, {
|
|
@@ -77,7 +77,7 @@ function httpRequest(opts) {
|
|
|
77
77
|
const body = getBody(opts);
|
|
78
78
|
const meta = {};
|
|
79
79
|
Promise.resolve(opts.headers()).then((headers)=>{
|
|
80
|
-
if (type === 'subscription') {
|
|
80
|
+
/* istanbul ignore if */ if (type === 'subscription') {
|
|
81
81
|
throw new Error('Subscriptions should use wsLink');
|
|
82
82
|
}
|
|
83
83
|
return opts.fetch(url, {
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ var transformResult = require('./transformResult-000baed1.js');
|
|
|
7
7
|
var links_splitLink = require('./splitLink-f29e84be.js');
|
|
8
8
|
var links_httpBatchLink = require('./links/httpBatchLink.js');
|
|
9
9
|
var shared = require('@trpc/server/shared');
|
|
10
|
-
var httpUtils = require('./httpUtils-
|
|
10
|
+
var httpUtils = require('./httpUtils-277fd63a.js');
|
|
11
11
|
var links_httpLink = require('./links/httpLink.js');
|
|
12
12
|
var links_loggerLink = require('./links/loggerLink.js');
|
|
13
13
|
var links_wsLink = require('./links/wsLink.js');
|
package/dist/index.mjs
CHANGED
|
@@ -6,7 +6,7 @@ export { s as splitLink } from './splitLink-4c75f7be.mjs';
|
|
|
6
6
|
import { httpBatchLink } from './links/httpBatchLink.mjs';
|
|
7
7
|
export { httpBatchLink } from './links/httpBatchLink.mjs';
|
|
8
8
|
import { createFlatProxy, createRecursiveProxy } from '@trpc/server/shared';
|
|
9
|
-
export { g as getFetch } from './httpUtils-
|
|
9
|
+
export { g as getFetch } from './httpUtils-939364d7.mjs';
|
|
10
10
|
export { httpLink } from './links/httpLink.mjs';
|
|
11
11
|
export { loggerLink } from './links/loggerLink.mjs';
|
|
12
12
|
export { createWSClient, wsLink } from './links/wsLink.mjs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dedupeLink.d.ts","sourceRoot":"","sources":["../../src/links/dedupeLink.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dedupeLink.d.ts","sourceRoot":"","sources":["../../src/links/dedupeLink.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,wBAAgB,UAAU,CACxB,OAAO,SAAS,SAAS,GAAG,SAAS,KAClC,QAAQ,CAAC,OAAO,CAAC,CA2CrB"}
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var observable = require('@trpc/server/observable');
|
|
6
6
|
var transformResult = require('../transformResult-000baed1.js');
|
|
7
|
-
var httpUtils = require('../httpUtils-
|
|
7
|
+
var httpUtils = require('../httpUtils-277fd63a.js');
|
|
8
8
|
|
|
9
9
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */ /**
|
|
10
10
|
* A function that should never be called unless we messed something up.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { observable } from '@trpc/server/observable';
|
|
2
2
|
import { t as transformResult, T as TRPCClientError } from '../transformResult-b10d288d.mjs';
|
|
3
|
-
import { r as resolveHTTPLinkOptions, a as getUrl, h as httpRequest } from '../httpUtils-
|
|
3
|
+
import { r as resolveHTTPLinkOptions, a as getUrl, h as httpRequest } from '../httpUtils-939364d7.mjs';
|
|
4
4
|
|
|
5
5
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */ /**
|
|
6
6
|
* A function that should never be called unless we messed something up.
|
package/dist/links/httpLink.js
CHANGED
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var observable = require('@trpc/server/observable');
|
|
6
6
|
var transformResult = require('../transformResult-000baed1.js');
|
|
7
|
-
var httpUtils = require('../httpUtils-
|
|
7
|
+
var httpUtils = require('../httpUtils-277fd63a.js');
|
|
8
8
|
|
|
9
9
|
function httpLink(opts) {
|
|
10
10
|
const resolvedOpts = httpUtils.resolveHTTPLinkOptions(opts);
|
package/dist/links/httpLink.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { observable } from '@trpc/server/observable';
|
|
2
2
|
import { t as transformResult, T as TRPCClientError } from '../transformResult-b10d288d.mjs';
|
|
3
|
-
import { r as resolveHTTPLinkOptions, h as httpRequest } from '../httpUtils-
|
|
3
|
+
import { r as resolveHTTPLinkOptions, h as httpRequest } from '../httpUtils-939364d7.mjs';
|
|
4
4
|
|
|
5
5
|
function httpLink(opts) {
|
|
6
6
|
const resolvedOpts = resolveHTTPLinkOptions(opts);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpUtils.d.ts","sourceRoot":"","sources":["../../../src/links/internals/httpUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE5E,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,eAAe,GAAG,IAAI,CAAC;IAChD;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,eAAe,EAAE,OAAO,eAAe,GAAG,IAAI,CAAC;IAC/C;;;OAGG;IACH,OAAO,EAAE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACnD;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,eAAe,GACpB,uBAAuB,CAQzB;AAiBD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE;QACJ,QAAQ,EAAE,QAAQ,CAAC;KACpB,CAAC;CACH;AAED,aAAK,eAAe,GAAG;IACrB,OAAO,EAAE,iBAAiB,CAAC;CAC5B,GAAG,CAAC;IAAE,MAAM,EAAE,OAAO,EAAE,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAUjD,oBAAY,kBAAkB,GAAG,uBAAuB,GACtD,eAAe,GAAG;IAChB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEJ,wBAAgB,MAAM,CAAC,IAAI,EAAE,kBAAkB,UAgB9C;AAED,aAAK,cAAc,GAAG;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GAAG,eAAe,CAAC;AAEhE,wBAAgB,OAAO,CAAC,IAAI,EAAE,cAAc,sBAM3C;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,kBAAkB,GACvB,gBAAgB,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"httpUtils.d.ts","sourceRoot":"","sources":["../../../src/links/internals/httpUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE5E,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,eAAe,GAAG,IAAI,CAAC;IAChD;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,eAAe,EAAE,OAAO,eAAe,GAAG,IAAI,CAAC;IAC/C;;;OAGG;IACH,OAAO,EAAE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACnD;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,eAAe,GACpB,uBAAuB,CAQzB;AAiBD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE;QACJ,QAAQ,EAAE,QAAQ,CAAC;KACpB,CAAC;CACH;AAED,aAAK,eAAe,GAAG;IACrB,OAAO,EAAE,iBAAiB,CAAC;CAC5B,GAAG,CAAC;IAAE,MAAM,EAAE,OAAO,EAAE,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAUjD,oBAAY,kBAAkB,GAAG,uBAAuB,GACtD,eAAe,GAAG;IAChB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEJ,wBAAgB,MAAM,CAAC,IAAI,EAAE,kBAAkB,UAgB9C;AAED,aAAK,cAAc,GAAG;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GAAG,eAAe,CAAC;AAEhE,wBAAgB,OAAO,CAAC,IAAI,EAAE,cAAc,sBAM3C;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,kBAAkB,GACvB,gBAAgB,CAAC,UAAU,CAAC,CAyC9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retryLink.d.ts","sourceRoot":"","sources":["../../src/links/retryLink.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"retryLink.d.ts","sourceRoot":"","sources":["../../src/links/retryLink.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,wBAAgB,SAAS,CAAC,OAAO,SAAS,SAAS,GAAG,SAAS,EAAE,IAAI,EAAE;IACrE,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,QAAQ,CAAC,OAAO,CAAC,CAwCpB"}
|
|
@@ -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,aAAK,gBAAgB,CAAC,OAAO,SAAS,SAAS,EAAE,OAAO,IAAI,mBAAmB,CAC7E,OAAO,EACP,gBAAgB,CAAC,OAAO,CAAC,CAC1B,CAAC;AAEF,aAAK,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,CAAC;IACZ,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;;
|
|
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,aAAK,gBAAgB,CAAC,OAAO,SAAS,SAAS,EAAE,OAAO,IAAI,mBAAmB,CAC7E,OAAO,EACP,gBAAgB,CAAC,OAAO,CAAC,CAC1B,CAAC;AAEF,aAAK,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,CAAC;IACZ,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;;kBA+MpC,SAAS,wDAA0B,aAAa;;EAoDtE;AACD,oBAAY,mBAAmB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAEpE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAiBD,wBAAgB,MAAM,CAAC,OAAO,SAAS,SAAS,EAC9C,IAAI,EAAE,oBAAoB,GACzB,QAAQ,CAAC,OAAO,CAAC,CA4DnB"}
|
package/dist/links/wsLink.js
CHANGED
|
@@ -148,13 +148,20 @@ function createWSClient(opts) {
|
|
|
148
148
|
if (req.ws !== conn) {
|
|
149
149
|
continue;
|
|
150
150
|
}
|
|
151
|
-
|
|
152
|
-
|
|
151
|
+
if (state === 'closed') {
|
|
152
|
+
// If the connection was closed, we just call `complete()` on the request
|
|
153
153
|
delete pendingRequests[key];
|
|
154
154
|
req.callbacks.complete?.();
|
|
155
|
-
|
|
156
|
-
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
// The connection was closed either unexpectedly or because of a reconnect
|
|
158
|
+
if (req.type === 'subscription') {
|
|
159
|
+
// Subscriptions will resume after we've reconnected
|
|
157
160
|
resumeSubscriptionOnReconnect(req);
|
|
161
|
+
} else {
|
|
162
|
+
// Queries and mutations will error if interrupted
|
|
163
|
+
delete pendingRequests[key];
|
|
164
|
+
req.callbacks.error?.(transformResult.TRPCClientError.from(new TRPCWebSocketClosedError('WebSocket closed prematurely')));
|
|
158
165
|
}
|
|
159
166
|
}
|
|
160
167
|
});
|
|
@@ -184,7 +191,7 @@ function createWSClient(opts) {
|
|
|
184
191
|
delete pendingRequests[id];
|
|
185
192
|
outgoing = outgoing.filter((msg)=>msg.id !== id);
|
|
186
193
|
callbacks?.complete?.();
|
|
187
|
-
if (op.type === 'subscription') {
|
|
194
|
+
if (activeConnection.readyState === WebSocket.OPEN && op.type === 'subscription') {
|
|
188
195
|
outgoing.push({
|
|
189
196
|
id,
|
|
190
197
|
method: 'subscription.stop'
|
package/dist/links/wsLink.mjs
CHANGED
|
@@ -144,13 +144,20 @@ function createWSClient(opts) {
|
|
|
144
144
|
if (req.ws !== conn) {
|
|
145
145
|
continue;
|
|
146
146
|
}
|
|
147
|
-
|
|
148
|
-
|
|
147
|
+
if (state === 'closed') {
|
|
148
|
+
// If the connection was closed, we just call `complete()` on the request
|
|
149
149
|
delete pendingRequests[key];
|
|
150
150
|
req.callbacks.complete?.();
|
|
151
|
-
|
|
152
|
-
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
// The connection was closed either unexpectedly or because of a reconnect
|
|
154
|
+
if (req.type === 'subscription') {
|
|
155
|
+
// Subscriptions will resume after we've reconnected
|
|
153
156
|
resumeSubscriptionOnReconnect(req);
|
|
157
|
+
} else {
|
|
158
|
+
// Queries and mutations will error if interrupted
|
|
159
|
+
delete pendingRequests[key];
|
|
160
|
+
req.callbacks.error?.(TRPCClientError.from(new TRPCWebSocketClosedError('WebSocket closed prematurely')));
|
|
154
161
|
}
|
|
155
162
|
}
|
|
156
163
|
});
|
|
@@ -180,7 +187,7 @@ function createWSClient(opts) {
|
|
|
180
187
|
delete pendingRequests[id];
|
|
181
188
|
outgoing = outgoing.filter((msg)=>msg.id !== id);
|
|
182
189
|
callbacks?.complete?.();
|
|
183
|
-
if (op.type === 'subscription') {
|
|
190
|
+
if (activeConnection.readyState === WebSocket.OPEN && op.type === 'subscription') {
|
|
184
191
|
outgoing.push({
|
|
185
192
|
id,
|
|
186
193
|
method: 'subscription.stop'
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trpc/client",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.4.0",
|
|
4
4
|
"description": "tRPC Client lib",
|
|
5
5
|
"author": "KATT",
|
|
6
6
|
"license": "MIT",
|
|
@@ -66,11 +66,11 @@
|
|
|
66
66
|
"links"
|
|
67
67
|
],
|
|
68
68
|
"peerDependencies": {
|
|
69
|
-
"@trpc/server": "10.
|
|
69
|
+
"@trpc/server": "10.4.0"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
72
|
"@testing-library/dom": "^8.18.1",
|
|
73
|
-
"@trpc/server": "10.
|
|
73
|
+
"@trpc/server": "10.4.0",
|
|
74
74
|
"@types/node": "^18.7.20",
|
|
75
75
|
"rollup": "^2.79.1",
|
|
76
76
|
"tsx": "^3.9.0"
|
|
@@ -78,5 +78,5 @@
|
|
|
78
78
|
"publishConfig": {
|
|
79
79
|
"access": "public"
|
|
80
80
|
},
|
|
81
|
-
"gitHead": "
|
|
81
|
+
"gitHead": "e4f5c58e4e829539bcf45f2c13283179e3e67d1b"
|
|
82
82
|
}
|
package/src/links/dedupeLink.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/* istanbul ignore file */
|
|
2
|
+
// We're not actually exporting this link
|
|
1
3
|
import { AnyRouter } from '@trpc/server';
|
|
2
4
|
import { Observable, observable, share } from '@trpc/server/observable';
|
|
3
5
|
import { TRPCLink } from './types';
|
|
@@ -28,9 +30,7 @@ export function dedupeLink<
|
|
|
28
30
|
delete pending[key];
|
|
29
31
|
}
|
|
30
32
|
const subscription = next(op).subscribe({
|
|
31
|
-
|
|
32
|
-
observer.next(v);
|
|
33
|
-
},
|
|
33
|
+
...observer,
|
|
34
34
|
error(e) {
|
|
35
35
|
reset();
|
|
36
36
|
observer.error(e);
|
|
@@ -125,6 +125,7 @@ export function httpRequest(
|
|
|
125
125
|
const meta = {} as HTTPResult['meta'];
|
|
126
126
|
Promise.resolve(opts.headers())
|
|
127
127
|
.then((headers) => {
|
|
128
|
+
/* istanbul ignore if */
|
|
128
129
|
if (type === 'subscription') {
|
|
129
130
|
throw new Error('Subscriptions should use wsLink');
|
|
130
131
|
}
|
package/src/links/retryLink.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/* istanbul ignore file */
|
|
2
|
+
// We're not actually exporting this link
|
|
1
3
|
import { AnyRouter } from '@trpc/server';
|
|
2
4
|
import { Unsubscribable, observable } from '@trpc/server/observable';
|
|
3
5
|
import { TRPCLink } from './types';
|
|
@@ -19,6 +21,7 @@ export function retryLink<TRouter extends AnyRouter = AnyRouter>(opts: {
|
|
|
19
21
|
next$?.unsubscribe();
|
|
20
22
|
next$ = next(op).subscribe({
|
|
21
23
|
error(error) {
|
|
24
|
+
/* istanbul ignore if */
|
|
22
25
|
if (attempts >= opts.attempts) {
|
|
23
26
|
observer.error(error);
|
|
24
27
|
return;
|
|
@@ -26,17 +29,7 @@ export function retryLink<TRouter extends AnyRouter = AnyRouter>(opts: {
|
|
|
26
29
|
attempt();
|
|
27
30
|
},
|
|
28
31
|
next(result) {
|
|
29
|
-
|
|
30
|
-
isDone = true;
|
|
31
|
-
observer.next(result);
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
if (attempts >= opts.attempts) {
|
|
35
|
-
isDone = true;
|
|
36
|
-
observer.next(result);
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
attempt();
|
|
32
|
+
observer.next(result);
|
|
40
33
|
},
|
|
41
34
|
complete() {
|
|
42
35
|
if (isDone) {
|
package/src/links/wsLink.ts
CHANGED
|
@@ -212,17 +212,25 @@ export function createWSClient(opts: WebSocketClientOptions) {
|
|
|
212
212
|
if (req.ws !== conn) {
|
|
213
213
|
continue;
|
|
214
214
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
),
|
|
219
|
-
);
|
|
220
|
-
if (req.type !== 'subscription') {
|
|
215
|
+
|
|
216
|
+
if (state === 'closed') {
|
|
217
|
+
// If the connection was closed, we just call `complete()` on the request
|
|
221
218
|
delete pendingRequests[key];
|
|
222
219
|
req.callbacks.complete?.();
|
|
223
|
-
|
|
224
|
-
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
// The connection was closed either unexpectedly or because of a reconnect
|
|
223
|
+
if (req.type === 'subscription') {
|
|
224
|
+
// Subscriptions will resume after we've reconnected
|
|
225
225
|
resumeSubscriptionOnReconnect(req);
|
|
226
|
+
} else {
|
|
227
|
+
// Queries and mutations will error if interrupted
|
|
228
|
+
delete pendingRequests[key];
|
|
229
|
+
req.callbacks.error?.(
|
|
230
|
+
TRPCClientError.from(
|
|
231
|
+
new TRPCWebSocketClosedError('WebSocket closed prematurely'),
|
|
232
|
+
),
|
|
233
|
+
);
|
|
226
234
|
}
|
|
227
235
|
}
|
|
228
236
|
});
|
|
@@ -256,7 +264,10 @@ export function createWSClient(opts: WebSocketClientOptions) {
|
|
|
256
264
|
outgoing = outgoing.filter((msg) => msg.id !== id);
|
|
257
265
|
|
|
258
266
|
callbacks?.complete?.();
|
|
259
|
-
if (
|
|
267
|
+
if (
|
|
268
|
+
activeConnection.readyState === WebSocket.OPEN &&
|
|
269
|
+
op.type === 'subscription'
|
|
270
|
+
) {
|
|
260
271
|
outgoing.push({
|
|
261
272
|
id,
|
|
262
273
|
method: 'subscription.stop',
|