@trpc/server 10.0.0-alpha.21 → 10.0.0-alpha.24

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 (172) hide show
  1. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.d.ts +1 -0
  2. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.dev.js +90 -0
  3. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.js +7 -0
  4. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.prod.js +90 -0
  5. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.esm.js +86 -0
  6. package/adapters/express/dist/trpc-server-adapters-express.cjs.dev.js +3 -3
  7. package/adapters/express/dist/trpc-server-adapters-express.cjs.prod.js +3 -3
  8. package/adapters/express/dist/trpc-server-adapters-express.esm.js +3 -3
  9. package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.dev.js +3 -3
  10. package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.prod.js +3 -3
  11. package/adapters/fastify/dist/trpc-server-adapters-fastify.esm.js +3 -3
  12. package/adapters/fastify/index.js +1 -1
  13. package/adapters/fetch/index.d.ts +1 -0
  14. package/adapters/fetch/index.js +1 -0
  15. package/adapters/next/dist/trpc-server-adapters-next.cjs.dev.js +3 -3
  16. package/adapters/next/dist/trpc-server-adapters-next.cjs.prod.js +3 -3
  17. package/adapters/next/dist/trpc-server-adapters-next.esm.js +3 -3
  18. package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.dev.js +3 -3
  19. package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.prod.js +3 -3
  20. package/adapters/node-http/dist/trpc-server-adapters-node-http.esm.js +3 -3
  21. package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.dev.js +3 -3
  22. package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.prod.js +3 -3
  23. package/adapters/standalone/dist/trpc-server-adapters-standalone.esm.js +3 -3
  24. package/dist/{transformTRPCResponse-9fdeecca.mjs → TRPCError-7971540a.mjs} +1 -53
  25. package/dist/{transformTRPCResponse-a57d3226.js → TRPCError-ddec3395.js} +0 -54
  26. package/dist/adapters/express.js +5 -4
  27. package/dist/adapters/express.mjs +5 -4
  28. package/dist/adapters/fastify/index.js +6 -6
  29. package/dist/adapters/fastify/index.mjs +6 -6
  30. package/dist/adapters/fetch/fetchRequestHandler.d.ts +8 -0
  31. package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -0
  32. package/dist/adapters/fetch/index.d.ts +3 -0
  33. package/dist/adapters/fetch/index.d.ts.map +1 -0
  34. package/dist/adapters/fetch/index.js +69 -0
  35. package/dist/adapters/fetch/index.mjs +65 -0
  36. package/dist/adapters/fetch/index.ts.js +1 -0
  37. package/dist/adapters/fetch/types.d.ts +21 -0
  38. package/dist/adapters/fetch/types.d.ts.map +1 -0
  39. package/dist/adapters/next.d.ts.map +1 -1
  40. package/dist/adapters/next.js +9 -9
  41. package/dist/adapters/next.mjs +8 -8
  42. package/dist/adapters/node-http/index.js +5 -4
  43. package/dist/adapters/node-http/index.mjs +5 -4
  44. package/dist/adapters/node-http/types.d.ts +6 -5
  45. package/dist/adapters/node-http/types.d.ts.map +1 -1
  46. package/dist/adapters/standalone.js +5 -4
  47. package/dist/adapters/standalone.mjs +5 -4
  48. package/dist/adapters/ws.d.ts +1 -1
  49. package/dist/adapters/ws.d.ts.map +1 -1
  50. package/dist/adapters/ws.js +117 -80
  51. package/dist/adapters/ws.mjs +111 -74
  52. package/dist/{codes-6c13cf43.mjs → envelopes-1deb2fa7.mjs} +17 -1
  53. package/dist/{codes-4e4d55a9.js → envelopes-a953b930.js} +16 -0
  54. package/dist/http/index.d.ts +1 -1
  55. package/dist/http/internals/types.d.ts +2 -2
  56. package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
  57. package/dist/http/{ResponseMeta.d.ts → responseMeta.d.ts} +1 -1
  58. package/dist/http/responseMeta.d.ts.map +1 -0
  59. package/dist/index.d.ts +0 -1
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +38 -52
  62. package/dist/index.mjs +31 -43
  63. package/dist/internals/{BaseHandlerOptions.d.ts → baseHandlerOptions.d.ts} +2 -2
  64. package/dist/internals/{BaseHandlerOptions.d.ts.map → baseHandlerOptions.d.ts.map} +1 -1
  65. package/dist/internals/callProcedure.d.ts +2 -2
  66. package/dist/internals/callProcedure.d.ts.map +1 -1
  67. package/dist/internals/middlewares.d.ts +3 -1
  68. package/dist/internals/middlewares.d.ts.map +1 -1
  69. package/dist/internals/{OnErrorFunction.d.ts → onErrorFunction.d.ts} +1 -1
  70. package/dist/internals/{OnErrorFunction.d.ts.map → onErrorFunction.d.ts.map} +1 -1
  71. package/dist/internals/procedure.d.ts +4 -3
  72. package/dist/internals/procedure.d.ts.map +1 -1
  73. package/dist/internals/transformTRPCResponse.d.ts +4 -2
  74. package/dist/internals/transformTRPCResponse.d.ts.map +1 -1
  75. package/dist/{nodeHTTPRequestHandler-13c4bded.mjs → nodeHTTPRequestHandler-1cdb6383.mjs} +2 -2
  76. package/dist/{nodeHTTPRequestHandler-745e43e5.js → nodeHTTPRequestHandler-848f07b5.js} +3 -3
  77. package/dist/observable/index.d.ts +5 -0
  78. package/dist/observable/index.d.ts.map +1 -0
  79. package/dist/observable/index.js +204 -0
  80. package/dist/observable/index.mjs +195 -0
  81. package/dist/observable/index.ts.js +1 -0
  82. package/dist/observable/internals/identity.d.ts +2 -0
  83. package/dist/observable/internals/identity.d.ts.map +1 -0
  84. package/dist/observable/internals/observableToPromise.d.ts +10 -0
  85. package/dist/observable/internals/observableToPromise.d.ts.map +1 -0
  86. package/dist/observable/internals/pipe.d.ts +4 -0
  87. package/dist/observable/internals/pipe.d.ts.map +1 -0
  88. package/dist/observable/observable.d.ts +5 -0
  89. package/dist/observable/observable.d.ts.map +1 -0
  90. package/dist/observable/operators/index.d.ts +4 -0
  91. package/dist/observable/operators/index.d.ts.map +1 -0
  92. package/dist/observable/operators/map.d.ts +3 -0
  93. package/dist/observable/operators/map.d.ts.map +1 -0
  94. package/dist/observable/operators/share.d.ts +6 -0
  95. package/dist/observable/operators/share.d.ts.map +1 -0
  96. package/dist/observable/operators/tap.d.ts +3 -0
  97. package/dist/observable/operators/tap.d.ts.map +1 -0
  98. package/dist/observable/types.d.ts +29 -0
  99. package/dist/observable/types.d.ts.map +1 -0
  100. package/dist/observable-137ea1bd.mjs +105 -0
  101. package/dist/observable-3aa4d911.js +108 -0
  102. package/dist/{resolveHTTPResponse-de40fda7.mjs → resolveHTTPResponse-54a79e6c.mjs} +14 -20
  103. package/dist/{resolveHTTPResponse-b1167b6a.js → resolveHTTPResponse-ec3dccaa.js} +21 -27
  104. package/dist/router.d.ts +6 -6
  105. package/dist/router.d.ts.map +1 -1
  106. package/dist/rpc/envelopes.d.ts +61 -39
  107. package/dist/rpc/envelopes.d.ts.map +1 -1
  108. package/dist/rpc/index.js +7 -3
  109. package/dist/rpc/index.mjs +1 -1
  110. package/dist/subscription.d.ts +3 -52
  111. package/dist/subscription.d.ts.map +1 -1
  112. package/dist/subscription.js +44 -0
  113. package/dist/subscription.mjs +40 -0
  114. package/dist/subscription.ts.js +1 -0
  115. package/dist/transformTRPCResponse-333bed6c.js +56 -0
  116. package/dist/transformTRPCResponse-e0cba527.mjs +53 -0
  117. package/dist/types.d.ts +8 -0
  118. package/dist/types.d.ts.map +1 -1
  119. package/observable/index.d.ts +1 -0
  120. package/observable/index.js +1 -0
  121. package/package.json +25 -7
  122. package/rpc/dist/trpc-server-rpc.cjs.dev.js +1 -1
  123. package/rpc/dist/trpc-server-rpc.cjs.prod.js +1 -1
  124. package/rpc/dist/trpc-server-rpc.esm.js +1 -1
  125. package/src/adapters/fastify/fastifyTRPCPlugin.ts +1 -1
  126. package/src/adapters/fetch/fetchRequestHandler.ts +61 -0
  127. package/src/adapters/fetch/index.ts +2 -0
  128. package/src/adapters/fetch/types.ts +28 -0
  129. package/src/adapters/next.ts +3 -5
  130. package/src/adapters/node-http/types.ts +6 -5
  131. package/src/adapters/ws.ts +110 -72
  132. package/src/http/index.ts +1 -1
  133. package/src/http/internals/types.ts +2 -2
  134. package/src/http/resolveHTTPResponse.ts +16 -20
  135. package/src/http/{ResponseMeta.ts → responseMeta.ts} +0 -0
  136. package/src/index.ts +0 -1
  137. package/src/internals/{BaseHandlerOptions.ts → baseHandlerOptions.ts} +1 -1
  138. package/src/internals/callProcedure.ts +6 -3
  139. package/src/internals/middlewares.ts +4 -1
  140. package/src/internals/{OnErrorFunction.ts → onErrorFunction.ts} +0 -0
  141. package/src/internals/procedure.ts +40 -27
  142. package/src/internals/transformTRPCResponse.ts +20 -15
  143. package/src/observable/index.ts +4 -0
  144. package/src/observable/internals/identity.ts +3 -0
  145. package/src/observable/internals/observableToPromise.ts +49 -0
  146. package/src/observable/internals/pipe.ts +22 -0
  147. package/src/observable/observable.test.ts +101 -0
  148. package/src/observable/observable.ts +75 -0
  149. package/src/observable/operators/index.ts +3 -0
  150. package/src/observable/operators/map.test.ts +92 -0
  151. package/src/observable/operators/map.ts +25 -0
  152. package/src/observable/operators/share.test.ts +60 -0
  153. package/src/observable/operators/share.ts +67 -0
  154. package/src/observable/operators/tap.ts +26 -0
  155. package/src/observable/types.ts +69 -0
  156. package/src/router.ts +7 -9
  157. package/src/rpc/envelopes.ts +87 -68
  158. package/src/subscription.ts +5 -123
  159. package/src/types.ts +7 -0
  160. package/dist/http/ResponseMeta.d.ts.map +0 -1
  161. package/dist/internals/wrapCallSafe.d.ts +0 -16
  162. package/dist/internals/wrapCallSafe.d.ts.map +0 -1
  163. package/dist/subscription-4b936ba3.js +0 -136
  164. package/dist/subscription-8a85f253.mjs +0 -133
  165. package/src/internals/wrapCallSafe.ts +0 -19
  166. package/ws/dist/trpc-server-ws.cjs.d.ts +0 -1
  167. package/ws/dist/trpc-server-ws.cjs.dev.js +0 -15
  168. package/ws/dist/trpc-server-ws.cjs.js +0 -7
  169. package/ws/dist/trpc-server-ws.cjs.prod.js +0 -15
  170. package/ws/dist/trpc-server-ws.esm.js +0 -11
  171. package/ws/index.d.ts +0 -1
  172. package/ws/index.js +0 -1
@@ -2,9 +2,9 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var transformTRPCResponse = require('../transformTRPCResponse-a57d3226.js');
6
- var subscription = require('../subscription-4b936ba3.js');
7
- require('events');
5
+ var TRPCError = require('../TRPCError-ddec3395.js');
6
+ var transformTRPCResponse = require('../transformTRPCResponse-333bed6c.js');
7
+ var observable = require('../observable-3aa4d911.js');
8
8
 
9
9
  /* istanbul ignore next */
10
10
  function assertIsObject(obj) {
@@ -59,8 +59,8 @@ function parseMessage(obj, transformer) {
59
59
  if (method === 'subscription.stop') {
60
60
  return {
61
61
  id,
62
- method,
63
- params: undefined
62
+ jsonrpc,
63
+ method
64
64
  };
65
65
  }
66
66
 
@@ -73,8 +73,8 @@ function parseMessage(obj, transformer) {
73
73
  assertIsString(path);
74
74
  const input = transformer.input.deserialize(rawInput);
75
75
  return {
76
- jsonrpc,
77
76
  id,
77
+ jsonrpc,
78
78
  method,
79
79
  params: {
80
80
  input,
@@ -103,6 +103,20 @@ function applyWSSHandler(opts) {
103
103
  client.send(JSON.stringify(transformTRPCResponse.transformTRPCResponse(router, untransformedJSON)));
104
104
  }
105
105
 
106
+ function stopSubscription(subscription, {
107
+ id,
108
+ jsonrpc
109
+ }) {
110
+ subscription.unsubscribe();
111
+ respond({
112
+ id,
113
+ jsonrpc,
114
+ result: {
115
+ type: 'stopped'
116
+ }
117
+ });
118
+ }
119
+
106
120
  const ctxPromise = createContext === null || createContext === void 0 ? void 0 : createContext({
107
121
  req,
108
122
  res: client
@@ -111,12 +125,13 @@ function applyWSSHandler(opts) {
111
125
 
112
126
  async function handleRequest(msg) {
113
127
  const {
114
- id
128
+ id,
129
+ jsonrpc
115
130
  } = msg;
116
131
  /* istanbul ignore next */
117
132
 
118
133
  if (id === null) {
119
- throw new transformTRPCResponse.TRPCError({
134
+ throw new TRPCError.TRPCError({
120
135
  code: 'BAD_REQUEST',
121
136
  message: '`id` is required'
122
137
  });
@@ -126,7 +141,10 @@ function applyWSSHandler(opts) {
126
141
  const sub = clientSubscriptions.get(id);
127
142
 
128
143
  if (sub) {
129
- sub.destroy();
144
+ stopSubscription(sub, {
145
+ id,
146
+ jsonrpc
147
+ });
130
148
  }
131
149
 
132
150
  clientSubscriptions.delete(id);
@@ -150,9 +168,18 @@ function applyWSSHandler(opts) {
150
168
  ctx
151
169
  });
152
170
 
153
- if (!(result instanceof subscription.Subscription)) {
171
+ if (type === 'subscription') {
172
+ if (!observable.isObservable(result)) {
173
+ throw new TRPCError.TRPCError({
174
+ message: `Subscription ${path} did not return an observable`,
175
+ code: 'INTERNAL_SERVER_ERROR'
176
+ });
177
+ }
178
+ } else {
179
+ // send the value as data if the method is not a subscription
154
180
  respond({
155
181
  id,
182
+ jsonrpc,
156
183
  result: {
157
184
  type: 'data',
158
185
  data: result
@@ -161,12 +188,61 @@ function applyWSSHandler(opts) {
161
188
  return;
162
189
  }
163
190
 
164
- const sub = result;
191
+ const observable$1 = result;
192
+ const sub = observable$1.subscribe({
193
+ next(data) {
194
+ respond({
195
+ id,
196
+ jsonrpc,
197
+ result: {
198
+ type: 'data',
199
+ data
200
+ }
201
+ });
202
+ },
203
+
204
+ error(err) {
205
+ var _opts$onError;
206
+
207
+ const error = TRPCError.getErrorFromUnknown(err);
208
+ (_opts$onError = opts.onError) === null || _opts$onError === void 0 ? void 0 : _opts$onError.call(opts, {
209
+ error,
210
+ path,
211
+ type,
212
+ ctx,
213
+ req,
214
+ input
215
+ });
216
+ respond({
217
+ id,
218
+ jsonrpc,
219
+ error: router.getErrorShape({
220
+ error,
221
+ type,
222
+ path,
223
+ input,
224
+ ctx
225
+ })
226
+ });
227
+ },
228
+
229
+ complete() {
230
+ respond({
231
+ id,
232
+ jsonrpc,
233
+ result: {
234
+ type: 'stopped'
235
+ }
236
+ });
237
+ }
238
+
239
+ });
165
240
  /* istanbul ignore next */
166
241
 
167
242
  if (client.readyState !== client.OPEN) {
168
243
  // if the client got disconnected whilst initializing the subscription
169
- sub.destroy();
244
+ // no need to send stopped message if the client is disconnected
245
+ sub.unsubscribe();
170
246
  return;
171
247
  }
172
248
  /* istanbul ignore next */
@@ -174,76 +250,31 @@ function applyWSSHandler(opts) {
174
250
 
175
251
  if (clientSubscriptions.has(id)) {
176
252
  // duplicate request ids for client
177
- sub.destroy();
178
- throw new transformTRPCResponse.TRPCError({
253
+ stopSubscription(sub, {
254
+ id,
255
+ jsonrpc
256
+ });
257
+ throw new TRPCError.TRPCError({
179
258
  message: `Duplicate id ${id}`,
180
259
  code: 'BAD_REQUEST'
181
260
  });
182
261
  }
183
262
 
184
263
  clientSubscriptions.set(id, sub);
185
- sub.on('data', data => {
186
- respond({
187
- id,
188
- result: {
189
- type: 'data',
190
- data
191
- }
192
- });
193
- });
194
- sub.on('error', _error => {
195
- var _opts$onError;
196
-
197
- const error = transformTRPCResponse.getErrorFromUnknown(_error);
198
- const json = {
199
- id,
200
- error: router.getErrorShape({
201
- error,
202
- type,
203
- path,
204
- input,
205
- ctx
206
- })
207
- };
208
- (_opts$onError = opts.onError) === null || _opts$onError === void 0 ? void 0 : _opts$onError.call(opts, {
209
- error,
210
- path,
211
- type,
212
- ctx,
213
- req,
214
- input
215
- });
216
- respond(json);
217
- });
218
- sub.on('destroy', () => {
219
- respond({
220
- id,
221
- result: {
222
- type: 'stopped'
223
- }
224
- });
225
- });
226
264
  respond({
227
265
  id,
266
+ jsonrpc,
228
267
  result: {
229
268
  type: 'started'
230
269
  }
231
270
  });
232
- await sub.start();
233
271
  } catch (cause)
234
272
  /* istanbul ignore next */
235
273
  {
236
274
  var _opts$onError2;
237
275
 
238
276
  // procedure threw an error
239
- const error = transformTRPCResponse.getErrorFromUnknown(cause);
240
- const json = router.getErrorShape({
241
- error,
242
- type,
243
- path,
244
- input,
245
- ctx
246
- });
277
+ const error = TRPCError.getErrorFromUnknown(cause);
247
278
  (_opts$onError2 = opts.onError) === null || _opts$onError2 === void 0 ? void 0 : _opts$onError2.call(opts, {
248
279
  error,
249
280
  path,
@@ -254,7 +285,14 @@ function applyWSSHandler(opts) {
254
285
  });
255
286
  respond({
256
287
  id,
257
- error: json
288
+ jsonrpc,
289
+ error: router.getErrorShape({
290
+ error,
291
+ type,
292
+ path,
293
+ input,
294
+ ctx
295
+ })
258
296
  });
259
297
  }
260
298
  }
@@ -266,9 +304,9 @@ function applyWSSHandler(opts) {
266
304
  const promises = msgs.map(raw => parseMessage(raw, transformer)).map(handleRequest);
267
305
  await Promise.all(promises);
268
306
  } catch (cause) {
269
- const error = new transformTRPCResponse.TRPCError({
307
+ const error = new TRPCError.TRPCError({
270
308
  code: 'PARSE_ERROR',
271
- cause: transformTRPCResponse.getCauseFromUnknown(cause)
309
+ cause: TRPCError.getCauseFromUnknown(cause)
272
310
  });
273
311
  respond({
274
312
  id: null,
@@ -284,7 +322,7 @@ function applyWSSHandler(opts) {
284
322
  });
285
323
  client.once('close', () => {
286
324
  for (const sub of clientSubscriptions.values()) {
287
- sub.destroy();
325
+ sub.unsubscribe();
288
326
  }
289
327
 
290
328
  clientSubscriptions.clear();
@@ -296,17 +334,7 @@ function applyWSSHandler(opts) {
296
334
  } catch (cause) {
297
335
  var _opts$onError3, _global$setImmediate;
298
336
 
299
- const error = transformTRPCResponse.getErrorFromUnknown(cause);
300
- const json = {
301
- id: null,
302
- error: router.getErrorShape({
303
- error,
304
- type: 'unknown',
305
- path: undefined,
306
- input: undefined,
307
- ctx
308
- })
309
- };
337
+ const error = TRPCError.getErrorFromUnknown(cause);
310
338
  (_opts$onError3 = opts.onError) === null || _opts$onError3 === void 0 ? void 0 : _opts$onError3.call(opts, {
311
339
  error,
312
340
  path: undefined,
@@ -315,7 +343,16 @@ function applyWSSHandler(opts) {
315
343
  req,
316
344
  input: undefined
317
345
  });
318
- respond(json); // close in next tick
346
+ respond({
347
+ id: null,
348
+ error: router.getErrorShape({
349
+ error,
350
+ type: 'unknown',
351
+ path: undefined,
352
+ input: undefined,
353
+ ctx
354
+ })
355
+ }); // close in next tick
319
356
 
320
357
  ((_global$setImmediate = global.setImmediate) !== null && _global$setImmediate !== void 0 ? _global$setImmediate : global.setTimeout)(() => {
321
358
  client.close();
@@ -1,6 +1,6 @@
1
- import { T as TRPCError, g as getCauseFromUnknown, t as transformTRPCResponse, c as callProcedure, a as getErrorFromUnknown } from '../transformTRPCResponse-9fdeecca.mjs';
2
- import { S as Subscription } from '../subscription-8a85f253.mjs';
3
- import 'events';
1
+ import { T as TRPCError, g as getCauseFromUnknown, a as getErrorFromUnknown } from '../TRPCError-7971540a.mjs';
2
+ import { t as transformTRPCResponse, c as callProcedure } from '../transformTRPCResponse-e0cba527.mjs';
3
+ import { i as isObservable } from '../observable-137ea1bd.mjs';
4
4
 
5
5
  /* istanbul ignore next */
6
6
  function assertIsObject(obj) {
@@ -55,8 +55,8 @@ function parseMessage(obj, transformer) {
55
55
  if (method === 'subscription.stop') {
56
56
  return {
57
57
  id,
58
- method,
59
- params: undefined
58
+ jsonrpc,
59
+ method
60
60
  };
61
61
  }
62
62
 
@@ -69,8 +69,8 @@ function parseMessage(obj, transformer) {
69
69
  assertIsString(path);
70
70
  const input = transformer.input.deserialize(rawInput);
71
71
  return {
72
- jsonrpc,
73
72
  id,
73
+ jsonrpc,
74
74
  method,
75
75
  params: {
76
76
  input,
@@ -99,6 +99,20 @@ function applyWSSHandler(opts) {
99
99
  client.send(JSON.stringify(transformTRPCResponse(router, untransformedJSON)));
100
100
  }
101
101
 
102
+ function stopSubscription(subscription, {
103
+ id,
104
+ jsonrpc
105
+ }) {
106
+ subscription.unsubscribe();
107
+ respond({
108
+ id,
109
+ jsonrpc,
110
+ result: {
111
+ type: 'stopped'
112
+ }
113
+ });
114
+ }
115
+
102
116
  const ctxPromise = createContext === null || createContext === void 0 ? void 0 : createContext({
103
117
  req,
104
118
  res: client
@@ -107,7 +121,8 @@ function applyWSSHandler(opts) {
107
121
 
108
122
  async function handleRequest(msg) {
109
123
  const {
110
- id
124
+ id,
125
+ jsonrpc
111
126
  } = msg;
112
127
  /* istanbul ignore next */
113
128
 
@@ -122,7 +137,10 @@ function applyWSSHandler(opts) {
122
137
  const sub = clientSubscriptions.get(id);
123
138
 
124
139
  if (sub) {
125
- sub.destroy();
140
+ stopSubscription(sub, {
141
+ id,
142
+ jsonrpc
143
+ });
126
144
  }
127
145
 
128
146
  clientSubscriptions.delete(id);
@@ -146,9 +164,18 @@ function applyWSSHandler(opts) {
146
164
  ctx
147
165
  });
148
166
 
149
- if (!(result instanceof Subscription)) {
167
+ if (type === 'subscription') {
168
+ if (!isObservable(result)) {
169
+ throw new TRPCError({
170
+ message: `Subscription ${path} did not return an observable`,
171
+ code: 'INTERNAL_SERVER_ERROR'
172
+ });
173
+ }
174
+ } else {
175
+ // send the value as data if the method is not a subscription
150
176
  respond({
151
177
  id,
178
+ jsonrpc,
152
179
  result: {
153
180
  type: 'data',
154
181
  data: result
@@ -157,12 +184,61 @@ function applyWSSHandler(opts) {
157
184
  return;
158
185
  }
159
186
 
160
- const sub = result;
187
+ const observable = result;
188
+ const sub = observable.subscribe({
189
+ next(data) {
190
+ respond({
191
+ id,
192
+ jsonrpc,
193
+ result: {
194
+ type: 'data',
195
+ data
196
+ }
197
+ });
198
+ },
199
+
200
+ error(err) {
201
+ var _opts$onError;
202
+
203
+ const error = getErrorFromUnknown(err);
204
+ (_opts$onError = opts.onError) === null || _opts$onError === void 0 ? void 0 : _opts$onError.call(opts, {
205
+ error,
206
+ path,
207
+ type,
208
+ ctx,
209
+ req,
210
+ input
211
+ });
212
+ respond({
213
+ id,
214
+ jsonrpc,
215
+ error: router.getErrorShape({
216
+ error,
217
+ type,
218
+ path,
219
+ input,
220
+ ctx
221
+ })
222
+ });
223
+ },
224
+
225
+ complete() {
226
+ respond({
227
+ id,
228
+ jsonrpc,
229
+ result: {
230
+ type: 'stopped'
231
+ }
232
+ });
233
+ }
234
+
235
+ });
161
236
  /* istanbul ignore next */
162
237
 
163
238
  if (client.readyState !== client.OPEN) {
164
239
  // if the client got disconnected whilst initializing the subscription
165
- sub.destroy();
240
+ // no need to send stopped message if the client is disconnected
241
+ sub.unsubscribe();
166
242
  return;
167
243
  }
168
244
  /* istanbul ignore next */
@@ -170,7 +246,10 @@ function applyWSSHandler(opts) {
170
246
 
171
247
  if (clientSubscriptions.has(id)) {
172
248
  // duplicate request ids for client
173
- sub.destroy();
249
+ stopSubscription(sub, {
250
+ id,
251
+ jsonrpc
252
+ });
174
253
  throw new TRPCError({
175
254
  message: `Duplicate id ${id}`,
176
255
  code: 'BAD_REQUEST'
@@ -178,54 +257,13 @@ function applyWSSHandler(opts) {
178
257
  }
179
258
 
180
259
  clientSubscriptions.set(id, sub);
181
- sub.on('data', data => {
182
- respond({
183
- id,
184
- result: {
185
- type: 'data',
186
- data
187
- }
188
- });
189
- });
190
- sub.on('error', _error => {
191
- var _opts$onError;
192
-
193
- const error = getErrorFromUnknown(_error);
194
- const json = {
195
- id,
196
- error: router.getErrorShape({
197
- error,
198
- type,
199
- path,
200
- input,
201
- ctx
202
- })
203
- };
204
- (_opts$onError = opts.onError) === null || _opts$onError === void 0 ? void 0 : _opts$onError.call(opts, {
205
- error,
206
- path,
207
- type,
208
- ctx,
209
- req,
210
- input
211
- });
212
- respond(json);
213
- });
214
- sub.on('destroy', () => {
215
- respond({
216
- id,
217
- result: {
218
- type: 'stopped'
219
- }
220
- });
221
- });
222
260
  respond({
223
261
  id,
262
+ jsonrpc,
224
263
  result: {
225
264
  type: 'started'
226
265
  }
227
266
  });
228
- await sub.start();
229
267
  } catch (cause)
230
268
  /* istanbul ignore next */
231
269
  {
@@ -233,13 +271,6 @@ function applyWSSHandler(opts) {
233
271
 
234
272
  // procedure threw an error
235
273
  const error = getErrorFromUnknown(cause);
236
- const json = router.getErrorShape({
237
- error,
238
- type,
239
- path,
240
- input,
241
- ctx
242
- });
243
274
  (_opts$onError2 = opts.onError) === null || _opts$onError2 === void 0 ? void 0 : _opts$onError2.call(opts, {
244
275
  error,
245
276
  path,
@@ -250,7 +281,14 @@ function applyWSSHandler(opts) {
250
281
  });
251
282
  respond({
252
283
  id,
253
- error: json
284
+ jsonrpc,
285
+ error: router.getErrorShape({
286
+ error,
287
+ type,
288
+ path,
289
+ input,
290
+ ctx
291
+ })
254
292
  });
255
293
  }
256
294
  }
@@ -280,7 +318,7 @@ function applyWSSHandler(opts) {
280
318
  });
281
319
  client.once('close', () => {
282
320
  for (const sub of clientSubscriptions.values()) {
283
- sub.destroy();
321
+ sub.unsubscribe();
284
322
  }
285
323
 
286
324
  clientSubscriptions.clear();
@@ -293,16 +331,6 @@ function applyWSSHandler(opts) {
293
331
  var _opts$onError3, _global$setImmediate;
294
332
 
295
333
  const error = getErrorFromUnknown(cause);
296
- const json = {
297
- id: null,
298
- error: router.getErrorShape({
299
- error,
300
- type: 'unknown',
301
- path: undefined,
302
- input: undefined,
303
- ctx
304
- })
305
- };
306
334
  (_opts$onError3 = opts.onError) === null || _opts$onError3 === void 0 ? void 0 : _opts$onError3.call(opts, {
307
335
  error,
308
336
  path: undefined,
@@ -311,7 +339,16 @@ function applyWSSHandler(opts) {
311
339
  req,
312
340
  input: undefined
313
341
  });
314
- respond(json); // close in next tick
342
+ respond({
343
+ id: null,
344
+ error: router.getErrorShape({
345
+ error,
346
+ type: 'unknown',
347
+ path: undefined,
348
+ input: undefined,
349
+ ctx
350
+ })
351
+ }); // close in next tick
315
352
 
316
353
  ((_global$setImmediate = global.setImmediate) !== null && _global$setImmediate !== void 0 ? _global$setImmediate : global.setTimeout)(() => {
317
354
  client.close();
@@ -55,4 +55,20 @@ const TRPC_ERROR_CODES_BY_KEY = {
55
55
  };
56
56
  const TRPC_ERROR_CODES_BY_NUMBER = /*#__PURE__*/invert(TRPC_ERROR_CODES_BY_KEY);
57
57
 
58
- export { TRPC_ERROR_CODES_BY_KEY as T, TRPC_ERROR_CODES_BY_NUMBER as a, invert as i };
58
+ /* eslint-disable @typescript-eslint/no-namespace */
59
+
60
+ /**
61
+ * Error response
62
+ */
63
+
64
+ /**
65
+ * JSON-RPC 2.0 Specification
66
+ */
67
+ let JSONRPC2;
68
+ /**
69
+ * TRPC HTTP Envelopes
70
+ */
71
+
72
+ (function (_JSONRPC) {})(JSONRPC2 || (JSONRPC2 = {}));
73
+
74
+ export { JSONRPC2 as J, TRPC_ERROR_CODES_BY_KEY as T, TRPC_ERROR_CODES_BY_NUMBER as a, invert as i };
@@ -57,6 +57,22 @@ const TRPC_ERROR_CODES_BY_KEY = {
57
57
  };
58
58
  const TRPC_ERROR_CODES_BY_NUMBER = /*#__PURE__*/invert(TRPC_ERROR_CODES_BY_KEY);
59
59
 
60
+ /* eslint-disable @typescript-eslint/no-namespace */
61
+
62
+ /**
63
+ * Error response
64
+ */
65
+
66
+ /**
67
+ * JSON-RPC 2.0 Specification
68
+ */
69
+ exports.JSONRPC2 = void 0;
70
+ /**
71
+ * TRPC HTTP Envelopes
72
+ */
73
+
74
+ (function (_JSONRPC) {})(exports.JSONRPC2 || (exports.JSONRPC2 = {}));
75
+
60
76
  exports.TRPC_ERROR_CODES_BY_KEY = TRPC_ERROR_CODES_BY_KEY;
61
77
  exports.TRPC_ERROR_CODES_BY_NUMBER = TRPC_ERROR_CODES_BY_NUMBER;
62
78
  exports.invert = invert;
@@ -1,3 +1,3 @@
1
1
  export * from './resolveHTTPResponse';
2
- export * from './ResponseMeta';
2
+ export * from './responseMeta';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1,9 +1,9 @@
1
1
  import { TRPCError } from '../../TRPCError';
2
- import { BaseHandlerOptions } from '../../internals/BaseHandlerOptions';
2
+ import { BaseHandlerOptions } from '../../internals/baseHandlerOptions';
3
3
  import { AnyRouter, ProcedureType, inferRouterContext, inferRouterError } from '../../router';
4
4
  import { TRPCResponse } from '../../rpc';
5
5
  import { Dict } from '../../types';
6
- import { ResponseMeta } from '../ResponseMeta';
6
+ import { ResponseMeta } from '../responseMeta';
7
7
  export declare type HTTPHeaders = Dict<string | string[]>;
8
8
  export interface HTTPResponse {
9
9
  status: number;
@@ -1 +1 @@
1
- {"version":3,"file":"resolveHTTPResponse.d.ts","sourceRoot":"","sources":["../../src/http/resolveHTTPResponse.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzC,OAAO,EACL,SAAS,EAET,kBAAkB,EAEnB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,OAAO,EACL,sBAAsB,EAEtB,WAAW,EACX,YAAY,EACb,MAAM,mBAAmB,CAAC;AA4B3B,UAAU,yBAAyB,CACjC,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,WAAW,CAC5B,SAAQ,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC;IACjD,aAAa,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,GAAG,EAAE,QAAQ,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;CAC1B;AAED,wBAAsB,mBAAmB,CACvC,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,WAAW,EAC5B,IAAI,EAAE,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAmM3E"}
1
+ {"version":3,"file":"resolveHTTPResponse.d.ts","sourceRoot":"","sources":["../../src/http/resolveHTTPResponse.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzC,OAAO,EACL,SAAS,EAET,kBAAkB,EAEnB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,OAAO,EACL,sBAAsB,EAEtB,WAAW,EACX,YAAY,EACb,MAAM,mBAAmB,CAAC;AA4B3B,UAAU,yBAAyB,CACjC,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,WAAW,CAC5B,SAAQ,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC;IACjD,aAAa,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,GAAG,EAAE,QAAQ,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;CAC1B;AAED,wBAAsB,mBAAmB,CACvC,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,WAAW,EAC5B,IAAI,EAAE,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CA+L3E"}
@@ -2,4 +2,4 @@ export interface ResponseMeta {
2
2
  status?: number;
3
3
  headers?: Record<string, string>;
4
4
  }
5
- //# sourceMappingURL=ResponseMeta.d.ts.map
5
+ //# sourceMappingURL=responseMeta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responseMeta.d.ts","sourceRoot":"","sources":["../../src/http/responseMeta.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  export * from './assertNotBrowser';
2
2
  export * from './http';
3
- export * from './subscription';
4
3
  export * from './transformer';
5
4
  export * from './TRPCError';
6
5
  export * from './types';