@trpc/server 11.0.0-alpha-tmp-subscription-connection-state.489 → 11.0.0-alpha-tmp-12-06-react.667

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 (274) hide show
  1. package/dist/@trpc/server/http.d.ts +1 -1
  2. package/dist/@trpc/server/http.d.ts.map +1 -1
  3. package/dist/@trpc/server/index.d.ts +1 -1
  4. package/dist/@trpc/server/index.d.ts.map +1 -1
  5. package/dist/adapters/aws-lambda/getPlanner.d.ts.map +1 -1
  6. package/dist/adapters/aws-lambda/getPlanner.js +2 -2
  7. package/dist/adapters/aws-lambda/getPlanner.mjs +2 -2
  8. package/dist/adapters/aws-lambda/index.d.ts.map +1 -1
  9. package/dist/adapters/aws-lambda/index.js +2 -0
  10. package/dist/adapters/aws-lambda/index.mjs +2 -0
  11. package/dist/adapters/express.d.ts.map +1 -1
  12. package/dist/adapters/express.js +27 -7
  13. package/dist/adapters/express.mjs +27 -7
  14. package/dist/adapters/fastify/fastifyRequestHandler.js +3 -1
  15. package/dist/adapters/fastify/fastifyRequestHandler.mjs +3 -1
  16. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -1
  17. package/dist/adapters/fastify/fastifyTRPCPlugin.js +9 -2
  18. package/dist/adapters/fastify/fastifyTRPCPlugin.mjs +10 -3
  19. package/dist/adapters/fetch/fetchRequestHandler.js +9 -8
  20. package/dist/adapters/fetch/fetchRequestHandler.mjs +9 -8
  21. package/dist/adapters/next-app-dir/nextAppDirCaller.d.ts.map +1 -1
  22. package/dist/adapters/next-app-dir/nextAppDirCaller.js +10 -5
  23. package/dist/adapters/next-app-dir/nextAppDirCaller.mjs +10 -5
  24. package/dist/adapters/next-app-dir/notFound.js +2 -0
  25. package/dist/adapters/next-app-dir/notFound.mjs +2 -0
  26. package/dist/adapters/next-app-dir/redirect.js +16 -1
  27. package/dist/adapters/next-app-dir/redirect.mjs +16 -1
  28. package/dist/adapters/next-app-dir/rethrowNextErrors.d.ts.map +1 -1
  29. package/dist/adapters/next-app-dir/rethrowNextErrors.js +4 -3
  30. package/dist/adapters/next-app-dir/rethrowNextErrors.mjs +4 -3
  31. package/dist/adapters/next.d.ts.map +1 -1
  32. package/dist/adapters/next.js +23 -30
  33. package/dist/adapters/next.mjs +24 -31
  34. package/dist/adapters/node-http/incomingMessageToRequest.d.ts +2 -1
  35. package/dist/adapters/node-http/incomingMessageToRequest.d.ts.map +1 -1
  36. package/dist/adapters/node-http/incomingMessageToRequest.js +83 -40
  37. package/dist/adapters/node-http/incomingMessageToRequest.mjs +83 -41
  38. package/dist/adapters/node-http/index.js +2 -0
  39. package/dist/adapters/node-http/index.mjs +2 -2
  40. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts +7 -0
  41. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
  42. package/dist/adapters/node-http/nodeHTTPRequestHandler.js +70 -58
  43. package/dist/adapters/node-http/nodeHTTPRequestHandler.mjs +70 -59
  44. package/dist/adapters/node-http/writeResponse.d.ts +18 -0
  45. package/dist/adapters/node-http/writeResponse.d.ts.map +1 -0
  46. package/dist/adapters/node-http/writeResponse.js +82 -0
  47. package/dist/adapters/node-http/writeResponse.mjs +79 -0
  48. package/dist/adapters/standalone.d.ts +5 -2
  49. package/dist/adapters/standalone.d.ts.map +1 -1
  50. package/dist/adapters/standalone.js +25 -13
  51. package/dist/adapters/standalone.mjs +26 -14
  52. package/dist/adapters/ws.d.ts +14 -4
  53. package/dist/adapters/ws.d.ts.map +1 -1
  54. package/dist/adapters/ws.js +217 -101
  55. package/dist/adapters/ws.mjs +217 -102
  56. package/dist/bundle-analysis.json +415 -313
  57. package/dist/http.js +2 -4
  58. package/dist/http.mjs +2 -2
  59. package/dist/index.js +3 -0
  60. package/dist/index.mjs +3 -1
  61. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.1_rollup@4.27.4_tslib@2.8.1_typescript@5.7.2/node_modules/tslib/tslib.es6.js +73 -0
  62. package/dist/observable/behaviorSubject.d.ts +15 -0
  63. package/dist/observable/behaviorSubject.d.ts.map +1 -0
  64. package/dist/observable/behaviorSubject.js +40 -0
  65. package/dist/observable/behaviorSubject.mjs +38 -0
  66. package/dist/observable/index.d.ts +3 -3
  67. package/dist/observable/index.d.ts.map +1 -1
  68. package/dist/observable/index.js +5 -0
  69. package/dist/observable/index.mjs +3 -2
  70. package/dist/observable/observable.d.ts +2 -1
  71. package/dist/observable/observable.d.ts.map +1 -1
  72. package/dist/observable/observable.js +31 -8
  73. package/dist/observable/observable.mjs +31 -8
  74. package/dist/observable/operators.d.ts +2 -0
  75. package/dist/observable/operators.d.ts.map +1 -1
  76. package/dist/observable/operators.js +35 -0
  77. package/dist/observable/operators.mjs +34 -1
  78. package/dist/rpc.js +2 -0
  79. package/dist/rpc.mjs +2 -0
  80. package/dist/shared.js +2 -0
  81. package/dist/shared.mjs +2 -0
  82. package/dist/unstable-core-do-not-import/clientish/inference.d.ts.map +1 -1
  83. package/dist/unstable-core-do-not-import/clientish/inferrable.d.ts.map +1 -1
  84. package/dist/unstable-core-do-not-import/clientish/serialize.d.ts +2 -2
  85. package/dist/unstable-core-do-not-import/clientish/serialize.d.ts.map +1 -1
  86. package/dist/unstable-core-do-not-import/createProxy.js +1 -1
  87. package/dist/unstable-core-do-not-import/createProxy.mjs +1 -1
  88. package/dist/unstable-core-do-not-import/error/TRPCError.d.ts +1 -1
  89. package/dist/unstable-core-do-not-import/error/TRPCError.js +16 -1
  90. package/dist/unstable-core-do-not-import/error/TRPCError.mjs +16 -1
  91. package/dist/unstable-core-do-not-import/error/formatter.js +1 -1
  92. package/dist/unstable-core-do-not-import/error/formatter.mjs +1 -1
  93. package/dist/unstable-core-do-not-import/error/getErrorShape.js +2 -2
  94. package/dist/unstable-core-do-not-import/error/getErrorShape.mjs +2 -2
  95. package/dist/unstable-core-do-not-import/http/contentType.js +3 -3
  96. package/dist/unstable-core-do-not-import/http/contentType.mjs +3 -3
  97. package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.d.ts +6 -1
  98. package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.d.ts.map +1 -1
  99. package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.js +28 -0
  100. package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.mjs +25 -1
  101. package/dist/unstable-core-do-not-import/http/isAbortError.d.ts +4 -0
  102. package/dist/unstable-core-do-not-import/http/isAbortError.d.ts.map +1 -0
  103. package/dist/unstable-core-do-not-import/http/isAbortError.js +9 -0
  104. package/dist/unstable-core-do-not-import/http/isAbortError.mjs +7 -0
  105. package/dist/unstable-core-do-not-import/http/resolveResponse.d.ts.map +1 -1
  106. package/dist/unstable-core-do-not-import/http/resolveResponse.js +180 -96
  107. package/dist/unstable-core-do-not-import/http/resolveResponse.mjs +182 -98
  108. package/dist/unstable-core-do-not-import/http/types.d.ts +1 -1
  109. package/dist/unstable-core-do-not-import/initTRPC.d.ts +11 -11
  110. package/dist/unstable-core-do-not-import/initTRPC.d.ts.map +1 -1
  111. package/dist/unstable-core-do-not-import/initTRPC.js +11 -11
  112. package/dist/unstable-core-do-not-import/initTRPC.mjs +11 -11
  113. package/dist/unstable-core-do-not-import/middleware.d.ts +2 -1
  114. package/dist/unstable-core-do-not-import/middleware.d.ts.map +1 -1
  115. package/dist/unstable-core-do-not-import/middleware.js +2 -2
  116. package/dist/unstable-core-do-not-import/middleware.mjs +2 -2
  117. package/dist/unstable-core-do-not-import/parser.d.ts +5 -1
  118. package/dist/unstable-core-do-not-import/parser.d.ts.map +1 -1
  119. package/dist/unstable-core-do-not-import/parser.js +4 -0
  120. package/dist/unstable-core-do-not-import/parser.mjs +4 -0
  121. package/dist/unstable-core-do-not-import/procedure.d.ts +8 -2
  122. package/dist/unstable-core-do-not-import/procedure.d.ts.map +1 -1
  123. package/dist/unstable-core-do-not-import/procedureBuilder.d.ts +31 -12
  124. package/dist/unstable-core-do-not-import/procedureBuilder.d.ts.map +1 -1
  125. package/dist/unstable-core-do-not-import/procedureBuilder.js +33 -39
  126. package/dist/unstable-core-do-not-import/procedureBuilder.mjs +33 -39
  127. package/dist/unstable-core-do-not-import/rootConfig.d.ts +17 -17
  128. package/dist/unstable-core-do-not-import/rootConfig.d.ts.map +1 -1
  129. package/dist/unstable-core-do-not-import/router.d.ts +4 -3
  130. package/dist/unstable-core-do-not-import/router.d.ts.map +1 -1
  131. package/dist/unstable-core-do-not-import/router.js +6 -5
  132. package/dist/unstable-core-do-not-import/router.mjs +6 -5
  133. package/dist/unstable-core-do-not-import/rpc/codes.d.ts +2 -9
  134. package/dist/unstable-core-do-not-import/rpc/codes.d.ts.map +1 -1
  135. package/dist/unstable-core-do-not-import/rpc/envelopes.d.ts +7 -10
  136. package/dist/unstable-core-do-not-import/rpc/envelopes.d.ts.map +1 -1
  137. package/dist/unstable-core-do-not-import/rpc/parseTRPCMessage.js +2 -2
  138. package/dist/unstable-core-do-not-import/rpc/parseTRPCMessage.mjs +2 -2
  139. package/dist/unstable-core-do-not-import/stream/jsonl.d.ts +25 -14
  140. package/dist/unstable-core-do-not-import/stream/jsonl.d.ts.map +1 -1
  141. package/dist/unstable-core-do-not-import/stream/jsonl.js +439 -318
  142. package/dist/unstable-core-do-not-import/stream/jsonl.mjs +439 -318
  143. package/dist/unstable-core-do-not-import/stream/sse.d.ts +58 -18
  144. package/dist/unstable-core-do-not-import/stream/sse.d.ts.map +1 -1
  145. package/dist/unstable-core-do-not-import/stream/sse.js +297 -122
  146. package/dist/unstable-core-do-not-import/stream/sse.mjs +298 -123
  147. package/dist/unstable-core-do-not-import/stream/sse.types.d.ts +31 -0
  148. package/dist/unstable-core-do-not-import/stream/sse.types.d.ts.map +1 -0
  149. package/dist/unstable-core-do-not-import/stream/tracked.d.ts +2 -2
  150. package/dist/unstable-core-do-not-import/stream/tracked.d.ts.map +1 -1
  151. package/dist/unstable-core-do-not-import/stream/tracked.js +1 -1
  152. package/dist/unstable-core-do-not-import/stream/tracked.mjs +1 -1
  153. package/dist/unstable-core-do-not-import/stream/utils/asyncIterable.d.ts +17 -0
  154. package/dist/unstable-core-do-not-import/stream/utils/asyncIterable.d.ts.map +1 -0
  155. package/dist/unstable-core-do-not-import/stream/utils/asyncIterable.js +171 -0
  156. package/dist/unstable-core-do-not-import/stream/utils/asyncIterable.mjs +167 -0
  157. package/dist/unstable-core-do-not-import/stream/utils/createDeferred.d.ts +0 -11
  158. package/dist/unstable-core-do-not-import/stream/utils/createDeferred.d.ts.map +1 -1
  159. package/dist/unstable-core-do-not-import/stream/utils/createDeferred.js +0 -29
  160. package/dist/unstable-core-do-not-import/stream/utils/createDeferred.mjs +1 -29
  161. package/dist/unstable-core-do-not-import/stream/utils/disposable.d.ts +17 -0
  162. package/dist/unstable-core-do-not-import/stream/utils/disposable.d.ts.map +1 -0
  163. package/dist/unstable-core-do-not-import/stream/utils/disposable.js +44 -0
  164. package/dist/unstable-core-do-not-import/stream/utils/disposable.mjs +41 -0
  165. package/dist/unstable-core-do-not-import/stream/utils/readableStreamFrom.d.ts +8 -0
  166. package/dist/unstable-core-do-not-import/stream/utils/readableStreamFrom.d.ts.map +1 -0
  167. package/dist/unstable-core-do-not-import/stream/utils/readableStreamFrom.js +25 -0
  168. package/dist/unstable-core-do-not-import/stream/utils/readableStreamFrom.mjs +23 -0
  169. package/dist/unstable-core-do-not-import/stream/utils/timerResource.d.ts +5 -0
  170. package/dist/unstable-core-do-not-import/stream/utils/timerResource.d.ts.map +1 -0
  171. package/dist/unstable-core-do-not-import/stream/utils/timerResource.js +26 -0
  172. package/dist/unstable-core-do-not-import/stream/utils/timerResource.mjs +23 -0
  173. package/dist/unstable-core-do-not-import/stream/utils/withPing.d.ts +7 -0
  174. package/dist/unstable-core-do-not-import/stream/utils/withPing.d.ts.map +1 -0
  175. package/dist/unstable-core-do-not-import/stream/utils/withPing.js +130 -0
  176. package/dist/unstable-core-do-not-import/stream/utils/withPing.mjs +127 -0
  177. package/dist/unstable-core-do-not-import/transformer.d.ts +2 -5
  178. package/dist/unstable-core-do-not-import/transformer.d.ts.map +1 -1
  179. package/dist/unstable-core-do-not-import/transformer.js +1 -1
  180. package/dist/unstable-core-do-not-import/transformer.mjs +1 -1
  181. package/dist/unstable-core-do-not-import/types.d.ts +26 -3
  182. package/dist/unstable-core-do-not-import/types.d.ts.map +1 -1
  183. package/dist/unstable-core-do-not-import/utils.d.ts +15 -0
  184. package/dist/unstable-core-do-not-import/utils.d.ts.map +1 -1
  185. package/dist/unstable-core-do-not-import/utils.js +49 -1
  186. package/dist/unstable-core-do-not-import/utils.mjs +45 -2
  187. package/dist/unstable-core-do-not-import.d.ts +3 -2
  188. package/dist/unstable-core-do-not-import.d.ts.map +1 -1
  189. package/dist/unstable-core-do-not-import.js +14 -7
  190. package/dist/unstable-core-do-not-import.mjs +5 -6
  191. package/dist/vendor/unpromise/index.d.ts +3 -0
  192. package/dist/vendor/unpromise/index.d.ts.map +1 -0
  193. package/dist/vendor/unpromise/types.d.ts +28 -0
  194. package/dist/vendor/unpromise/types.d.ts.map +1 -0
  195. package/dist/vendor/unpromise/unpromise.d.ts +121 -0
  196. package/dist/vendor/unpromise/unpromise.d.ts.map +1 -0
  197. package/dist/vendor/unpromise/unpromise.js +292 -0
  198. package/dist/vendor/unpromise/unpromise.mjs +289 -0
  199. package/package.json +20 -17
  200. package/src/@trpc/server/http.ts +0 -2
  201. package/src/@trpc/server/index.ts +2 -0
  202. package/src/adapters/aws-lambda/getPlanner.ts +2 -2
  203. package/src/adapters/aws-lambda/index.ts +5 -6
  204. package/src/adapters/express.ts +21 -9
  205. package/src/adapters/fastify/fastifyRequestHandler.ts +1 -1
  206. package/src/adapters/fastify/fastifyTRPCPlugin.ts +16 -5
  207. package/src/adapters/fetch/fetchRequestHandler.ts +2 -2
  208. package/src/adapters/next-app-dir/nextAppDirCaller.ts +3 -0
  209. package/src/adapters/next-app-dir/rethrowNextErrors.ts +3 -2
  210. package/src/adapters/next.ts +29 -34
  211. package/src/adapters/node-http/incomingMessageToRequest.ts +110 -40
  212. package/src/adapters/node-http/nodeHTTPRequestHandler.ts +85 -63
  213. package/src/adapters/node-http/writeResponse.ts +94 -0
  214. package/src/adapters/standalone.ts +35 -18
  215. package/src/adapters/ws.ts +111 -57
  216. package/src/observable/behaviorSubject.ts +55 -0
  217. package/src/observable/index.ts +22 -3
  218. package/src/observable/observable.ts +32 -14
  219. package/src/observable/operators.ts +47 -0
  220. package/src/unstable-core-do-not-import/clientish/inference.ts +4 -4
  221. package/src/unstable-core-do-not-import/clientish/inferrable.ts +6 -6
  222. package/src/unstable-core-do-not-import/clientish/serialize.ts +5 -5
  223. package/src/unstable-core-do-not-import/http/getHTTPStatusCode.ts +37 -4
  224. package/src/unstable-core-do-not-import/http/isAbortError.ts +7 -0
  225. package/src/unstable-core-do-not-import/http/resolveResponse.ts +185 -90
  226. package/src/unstable-core-do-not-import/http/types.ts +1 -1
  227. package/src/unstable-core-do-not-import/initTRPC.ts +14 -20
  228. package/src/unstable-core-do-not-import/middleware.ts +5 -4
  229. package/src/unstable-core-do-not-import/parser.ts +17 -6
  230. package/src/unstable-core-do-not-import/procedure.ts +17 -2
  231. package/src/unstable-core-do-not-import/procedureBuilder.ts +137 -122
  232. package/src/unstable-core-do-not-import/rootConfig.ts +20 -20
  233. package/src/unstable-core-do-not-import/router.ts +15 -16
  234. package/src/unstable-core-do-not-import/rpc/codes.ts +2 -10
  235. package/src/unstable-core-do-not-import/rpc/envelopes.ts +7 -12
  236. package/src/unstable-core-do-not-import/stream/jsonl.ts +287 -296
  237. package/src/unstable-core-do-not-import/stream/sse.ts +338 -171
  238. package/src/unstable-core-do-not-import/stream/sse.types.ts +44 -0
  239. package/src/unstable-core-do-not-import/stream/tracked.ts +5 -11
  240. package/src/unstable-core-do-not-import/stream/utils/asyncIterable.ts +89 -0
  241. package/src/unstable-core-do-not-import/stream/utils/createDeferred.ts +0 -36
  242. package/src/unstable-core-do-not-import/stream/utils/disposable.ts +52 -0
  243. package/src/unstable-core-do-not-import/stream/utils/readableStreamFrom.ts +28 -0
  244. package/src/unstable-core-do-not-import/stream/utils/timerResource.ts +29 -0
  245. package/src/unstable-core-do-not-import/stream/utils/withPing.ts +47 -0
  246. package/src/unstable-core-do-not-import/transformer.ts +1 -1
  247. package/src/unstable-core-do-not-import/types.ts +35 -10
  248. package/src/unstable-core-do-not-import/utils.ts +56 -1
  249. package/src/unstable-core-do-not-import.ts +3 -2
  250. package/src/vendor/unpromise/ATTRIBUTION.txt +1 -0
  251. package/src/vendor/unpromise/LICENSE +20 -0
  252. package/src/vendor/unpromise/index.ts +7 -0
  253. package/src/vendor/unpromise/types.ts +55 -0
  254. package/src/vendor/unpromise/unpromise.ts +380 -0
  255. package/dist/unstable-core-do-not-import/http/batchStreamFormatter.d.ts +0 -24
  256. package/dist/unstable-core-do-not-import/http/batchStreamFormatter.d.ts.map +0 -1
  257. package/dist/unstable-core-do-not-import/http/batchStreamFormatter.js +0 -32
  258. package/dist/unstable-core-do-not-import/http/batchStreamFormatter.mjs +0 -30
  259. package/dist/unstable-core-do-not-import/http/toURL.d.ts +0 -2
  260. package/dist/unstable-core-do-not-import/http/toURL.d.ts.map +0 -1
  261. package/dist/unstable-core-do-not-import/http/toURL.js +0 -8
  262. package/dist/unstable-core-do-not-import/http/toURL.mjs +0 -6
  263. package/dist/unstable-core-do-not-import/stream/utils/createReadableStream.d.ts +0 -10
  264. package/dist/unstable-core-do-not-import/stream/utils/createReadableStream.d.ts.map +0 -1
  265. package/dist/unstable-core-do-not-import/stream/utils/createReadableStream.js +0 -31
  266. package/dist/unstable-core-do-not-import/stream/utils/createReadableStream.mjs +0 -29
  267. package/dist/unstable-core-do-not-import/stream/utils/createServer.d.ts +0 -7
  268. package/dist/unstable-core-do-not-import/stream/utils/createServer.d.ts.map +0 -1
  269. package/dist/unstable-core-do-not-import/types.js +0 -11
  270. package/dist/unstable-core-do-not-import/types.mjs +0 -9
  271. package/src/unstable-core-do-not-import/http/batchStreamFormatter.ts +0 -29
  272. package/src/unstable-core-do-not-import/http/toURL.ts +0 -7
  273. package/src/unstable-core-do-not-import/stream/utils/createReadableStream.ts +0 -31
  274. package/src/unstable-core-do-not-import/stream/utils/createServer.ts +0 -44
@@ -10,6 +10,11 @@ var utils = require('../utils.js');
10
10
  var contentType = require('./contentType.js');
11
11
  var getHTTPStatusCode = require('./getHTTPStatusCode.js');
12
12
 
13
+ function errorToAsyncIterable(err) {
14
+ return utils.run(async function*() {
15
+ throw err;
16
+ });
17
+ }
13
18
  const TYPE_ACCEPTED_METHOD_MAP = {
14
19
  mutation: [
15
20
  'POST'
@@ -36,7 +41,7 @@ const TYPE_ACCEPTED_METHOD_MAP_WITH_METHOD_OVERRIDE = {
36
41
  ]
37
42
  };
38
43
  function initResponse(initOpts) {
39
- const { ctx , info , responseMeta , untransformedJSON , errors =[] , headers , } = initOpts;
44
+ const { ctx, info, responseMeta, untransformedJSON, errors = [], headers } = initOpts;
40
45
  let status = untransformedJSON ? getHTTPStatusCode.getHTTPStatusCode(untransformedJSON) : 200;
41
46
  const eagerGeneration = !untransformedJSON;
42
47
  const data = eagerGeneration ? [] : Array.isArray(untransformedJSON) ? untransformedJSON : [
@@ -59,13 +64,13 @@ function initResponse(initOpts) {
59
64
  } else {
60
65
  /**
61
66
  * @deprecated, delete in v12
62
- */ for (const [key1, value1] of Object.entries(meta.headers)){
63
- if (Array.isArray(value1)) {
64
- for (const v of value1){
65
- headers.append(key1, v);
67
+ */ for (const [key, value] of Object.entries(meta.headers)){
68
+ if (Array.isArray(value)) {
69
+ for (const v of value){
70
+ headers.append(key, v);
66
71
  }
67
- } else if (typeof value1 === 'string') {
68
- headers.set(key1, value1);
72
+ } else if (typeof value === 'string') {
73
+ headers.set(key, value);
69
74
  }
70
75
  }
71
76
  }
@@ -78,7 +83,7 @@ function initResponse(initOpts) {
78
83
  };
79
84
  }
80
85
  function caughtErrorToData(cause, errorOpts) {
81
- const { router , req , onError } = errorOpts.opts;
86
+ const { router, req, onError } = errorOpts.opts;
82
87
  const error = TRPCError.getTRPCErrorFromUnknown(cause);
83
88
  onError?.({
84
89
  error,
@@ -120,7 +125,7 @@ function caughtErrorToData(cause, errorOpts) {
120
125
  return Object.values(v).some(jsonl.isPromise) || Object.values(v).some(utils.isAsyncIterable);
121
126
  }
122
127
  async function resolveResponse(opts) {
123
- const { router , req } = opts;
128
+ const { router, req } = opts;
124
129
  const headers = new Headers([
125
130
  [
126
131
  'vary',
@@ -137,28 +142,72 @@ async function resolveResponse(opts) {
137
142
  }
138
143
  const allowBatching = opts.allowBatching ?? opts.batching?.enabled ?? true;
139
144
  const allowMethodOverride = (opts.allowMethodOverride ?? false) && req.method === 'POST';
140
- let ctx = undefined;
141
- let info = undefined;
145
+ const infoTuple = utils.run(()=>{
146
+ try {
147
+ return [
148
+ undefined,
149
+ contentType.getRequestInfo({
150
+ req,
151
+ path: decodeURIComponent(opts.path),
152
+ router,
153
+ searchParams: url.searchParams,
154
+ headers: opts.req.headers
155
+ })
156
+ ];
157
+ } catch (cause) {
158
+ return [
159
+ TRPCError.getTRPCErrorFromUnknown(cause),
160
+ undefined
161
+ ];
162
+ }
163
+ });
164
+ const ctxManager = utils.run(()=>{
165
+ let result = undefined;
166
+ return {
167
+ valueOrUndefined: ()=>{
168
+ if (!result) {
169
+ return undefined;
170
+ }
171
+ return result[1];
172
+ },
173
+ value: ()=>{
174
+ const [err, ctx] = result;
175
+ if (err) {
176
+ throw err;
177
+ }
178
+ return ctx;
179
+ },
180
+ create: async (info)=>{
181
+ if (result) {
182
+ throw new Error('This should only be called once - report a bug in tRPC');
183
+ }
184
+ try {
185
+ const ctx = await opts.createContext({
186
+ info
187
+ });
188
+ result = [
189
+ undefined,
190
+ ctx
191
+ ];
192
+ } catch (cause) {
193
+ result = [
194
+ TRPCError.getTRPCErrorFromUnknown(cause),
195
+ undefined
196
+ ];
197
+ }
198
+ }
199
+ };
200
+ });
142
201
  const methodMapper = allowMethodOverride ? TYPE_ACCEPTED_METHOD_MAP_WITH_METHOD_OVERRIDE : TYPE_ACCEPTED_METHOD_MAP;
143
202
  /**
144
203
  * @deprecated
145
204
  */ const isStreamCall = req.headers.get('trpc-accept') === 'application/jsonl';
146
- const experimentalIterablesAndDeferreds = router._def._config.experimental?.iterablesAndDeferreds ?? true;
147
- const experimentalSSE = router._def._config.experimental?.sseSubscriptions?.enabled ?? true;
205
+ const experimentalIterablesAndDeferreds = config.iterablesAndDeferreds ?? true;
206
+ const experimentalSSE = config.sse?.enabled ?? true;
148
207
  try {
149
- info = contentType.getRequestInfo({
150
- req,
151
- path: decodeURIComponent(opts.path),
152
- router,
153
- searchParams: url.searchParams,
154
- headers: opts.req.headers
155
- });
156
- // we create context early so that error handlers may access context information
157
- ctx = await opts.createContext({
158
- info
159
- });
160
- if (opts.error) {
161
- throw opts.error;
208
+ const [infoError, info] = infoTuple;
209
+ if (infoError) {
210
+ throw infoError;
162
211
  }
163
212
  if (info.isBatchCall && !allowBatching) {
164
213
  throw new TRPCError.TRPCError({
@@ -172,9 +221,13 @@ async function resolveResponse(opts) {
172
221
  code: 'BAD_REQUEST'
173
222
  });
174
223
  }
224
+ await ctxManager.create(info);
175
225
  const rpcCalls = info.calls.map(async (call)=>{
176
226
  const proc = call.procedure;
177
227
  try {
228
+ if (opts.error) {
229
+ throw opts.error;
230
+ }
178
231
  if (!proc) {
179
232
  throw new TRPCError.TRPCError({
180
233
  code: 'NOT_FOUND',
@@ -187,20 +240,26 @@ async function resolveResponse(opts) {
187
240
  message: `Unsupported ${req.method}-request to ${proc._def.type} procedure at path "${call.path}"`
188
241
  });
189
242
  }
190
- /* istanbul ignore if -- @preserve */ if (proc._def.type === 'subscription' && info.isBatchCall) {
191
- throw new TRPCError.TRPCError({
192
- code: 'BAD_REQUEST',
193
- message: `Cannot batch subscription calls`
194
- });
243
+ if (proc._def.type === 'subscription') {
244
+ /* istanbul ignore if -- @preserve */ if (info.isBatchCall) {
245
+ throw new TRPCError.TRPCError({
246
+ code: 'BAD_REQUEST',
247
+ message: `Cannot batch subscription calls`
248
+ });
249
+ }
195
250
  }
196
251
  const data = await proc({
197
252
  path: call.path,
198
253
  getRawInput: call.getRawInput,
199
- ctx,
200
- type: proc._def.type
254
+ ctx: ctxManager.value(),
255
+ type: proc._def.type,
256
+ signal: opts.req.signal
201
257
  });
202
258
  return [
203
- data
259
+ undefined,
260
+ {
261
+ data
262
+ }
204
263
  ];
205
264
  } catch (cause) {
206
265
  const error = TRPCError.getTRPCErrorFromUnknown(cause);
@@ -209,20 +268,20 @@ async function resolveResponse(opts) {
209
268
  error,
210
269
  path: call.path,
211
270
  input,
212
- ctx,
271
+ ctx: ctxManager.valueOrUndefined(),
213
272
  type: call.procedure?._def.type ?? 'unknown',
214
273
  req: opts.req
215
274
  });
216
275
  return [
217
- null,
218
- error
276
+ error,
277
+ undefined
219
278
  ];
220
279
  }
221
280
  });
222
281
  // ----------- response handlers -----------
223
282
  if (!info.isBatchCall) {
224
283
  const [call] = info.calls;
225
- const [data, error] = await rpcCalls[0];
284
+ const [error, result] = await rpcCalls[0];
226
285
  switch(info.type){
227
286
  case 'unknown':
228
287
  case 'mutation':
@@ -230,7 +289,7 @@ async function resolveResponse(opts) {
230
289
  {
231
290
  // httpLink
232
291
  headers.set('content-type', 'application/json');
233
- if (isDataStream(data)) {
292
+ if (isDataStream(result?.data)) {
234
293
  throw new TRPCError.TRPCError({
235
294
  code: 'UNSUPPORTED_MEDIA_TYPE',
236
295
  message: 'Cannot use stream-like response in non-streaming request - use httpBatchStreamLink'
@@ -239,7 +298,7 @@ async function resolveResponse(opts) {
239
298
  const res = error ? {
240
299
  error: getErrorShape.getErrorShape({
241
300
  config,
242
- ctx,
301
+ ctx: ctxManager.valueOrUndefined(),
243
302
  error,
244
303
  input: call.result(),
245
304
  path: call.path,
@@ -247,11 +306,11 @@ async function resolveResponse(opts) {
247
306
  })
248
307
  } : {
249
308
  result: {
250
- data
309
+ data: result.data
251
310
  }
252
311
  };
253
312
  const headResponse = initResponse({
254
- ctx,
313
+ ctx: ctxManager.valueOrUndefined(),
255
314
  info,
256
315
  responseMeta: opts.responseMeta,
257
316
  errors: error ? [
@@ -270,31 +329,49 @@ async function resolveResponse(opts) {
270
329
  case 'subscription':
271
330
  {
272
331
  // httpSubscriptionLink
273
- if (!experimentalSSE) {
274
- throw new TRPCError.TRPCError({
275
- code: 'METHOD_NOT_SUPPORTED',
276
- message: 'Missing experimental flag "sseSubscriptions"'
277
- });
278
- }
279
- if (!observable.isObservable(data) && !utils.isAsyncIterable(data)) {
280
- throw new TRPCError.TRPCError({
281
- message: `Subscription ${call.path} did not return an observable or a AsyncGenerator`,
282
- code: 'INTERNAL_SERVER_ERROR'
283
- });
284
- }
285
- const dataAsIterable = observable.isObservable(data) ? observable.observableToAsyncIterable(data) : data;
332
+ const iterable = utils.run(()=>{
333
+ if (error) {
334
+ return errorToAsyncIterable(error);
335
+ }
336
+ if (!experimentalSSE) {
337
+ return errorToAsyncIterable(new TRPCError.TRPCError({
338
+ code: 'METHOD_NOT_SUPPORTED',
339
+ message: 'Missing experimental flag "sseSubscriptions"'
340
+ }));
341
+ }
342
+ if (!observable.isObservable(result.data) && !utils.isAsyncIterable(result.data)) {
343
+ return errorToAsyncIterable(new TRPCError.TRPCError({
344
+ message: `Subscription ${call.path} did not return an observable or a AsyncGenerator`,
345
+ code: 'INTERNAL_SERVER_ERROR'
346
+ }));
347
+ }
348
+ const dataAsIterable = observable.isObservable(result.data) ? observable.observableToAsyncIterable(result.data, opts.req.signal) : result.data;
349
+ return dataAsIterable;
350
+ });
286
351
  const stream = sse.sseStreamProducer({
287
- ...config.experimental?.sseSubscriptions,
288
- data: dataAsIterable,
352
+ ...config.sse,
353
+ data: iterable,
289
354
  serialize: (v)=>config.transformer.output.serialize(v),
290
355
  formatError (errorOpts) {
356
+ const error = TRPCError.getTRPCErrorFromUnknown(errorOpts.error);
357
+ const input = call?.result();
358
+ const path = call?.path;
359
+ const type = call?.procedure?._def.type ?? 'unknown';
360
+ opts.onError?.({
361
+ error,
362
+ path,
363
+ input,
364
+ ctx: ctxManager.valueOrUndefined(),
365
+ req: opts.req,
366
+ type
367
+ });
291
368
  const shape = getErrorShape.getErrorShape({
292
369
  config,
293
- ctx,
294
- error: TRPCError.getTRPCErrorFromUnknown(errorOpts.error),
295
- input: call?.result(),
296
- path: call?.path,
297
- type: call?.procedure?._def.type ?? 'unknown'
370
+ ctx: ctxManager.valueOrUndefined(),
371
+ error,
372
+ input,
373
+ path,
374
+ type
298
375
  });
299
376
  return shape;
300
377
  }
@@ -302,8 +379,8 @@ async function resolveResponse(opts) {
302
379
  for (const [key, value] of Object.entries(sse.sseHeaders)){
303
380
  headers.set(key, value);
304
381
  }
305
- const headResponse1 = initResponse({
306
- ctx,
382
+ const headResponse = initResponse({
383
+ ctx: ctxManager.valueOrUndefined(),
307
384
  info,
308
385
  responseMeta: opts.responseMeta,
309
386
  errors: [],
@@ -312,7 +389,7 @@ async function resolveResponse(opts) {
312
389
  });
313
390
  return new Response(stream, {
314
391
  headers,
315
- status: headResponse1.status
392
+ status: headResponse.status
316
393
  });
317
394
  }
318
395
  }
@@ -322,15 +399,15 @@ async function resolveResponse(opts) {
322
399
  // httpBatchStreamLink
323
400
  headers.set('content-type', 'application/json');
324
401
  headers.set('transfer-encoding', 'chunked');
325
- const headResponse2 = initResponse({
326
- ctx,
402
+ const headResponse = initResponse({
403
+ ctx: ctxManager.valueOrUndefined(),
327
404
  info,
328
405
  responseMeta: opts.responseMeta,
329
406
  errors: [],
330
407
  headers,
331
408
  untransformedJSON: null
332
409
  });
333
- const stream1 = jsonl.jsonlStreamProducer({
410
+ const stream = jsonl.jsonlStreamProducer({
334
411
  /**
335
412
  * Example structure for `maxDepth: 4`:
336
413
  * {
@@ -345,13 +422,13 @@ async function resolveResponse(opts) {
345
422
  * }
346
423
  */ maxDepth: experimentalIterablesAndDeferreds ? 4 : 3,
347
424
  data: rpcCalls.map(async (res)=>{
348
- const [result, error] = await res;
425
+ const [error, result] = await res;
349
426
  const call = info.calls[0];
350
427
  if (error) {
351
428
  return {
352
429
  error: getErrorShape.getErrorShape({
353
430
  config,
354
- ctx,
431
+ ctx: ctxManager.valueOrUndefined(),
355
432
  error,
356
433
  input: call.result(),
357
434
  path: call.path,
@@ -362,10 +439,10 @@ async function resolveResponse(opts) {
362
439
  /**
363
440
  * Not very pretty, but we need to wrap nested data in promises
364
441
  * Our stream producer will only resolve top-level async values or async values that are directly nested in another async value
365
- */ const data = observable.isObservable(result) ? observable.observableToAsyncIterable(result) : Promise.resolve(result);
442
+ */ const iterable = observable.isObservable(result.data) ? observable.observableToAsyncIterable(result.data, opts.req.signal) : Promise.resolve(result.data);
366
443
  return {
367
444
  result: Promise.resolve({
368
- data
445
+ data: iterable
369
446
  })
370
447
  };
371
448
  }),
@@ -375,27 +452,32 @@ async function resolveResponse(opts) {
375
452
  error: TRPCError.getTRPCErrorFromUnknown(cause),
376
453
  path: undefined,
377
454
  input: undefined,
378
- ctx,
455
+ ctx: ctxManager.valueOrUndefined(),
379
456
  req: opts.req,
380
457
  type: info?.type ?? 'unknown'
381
458
  });
382
459
  },
383
460
  formatError (errorOpts) {
384
461
  const call = info?.calls[errorOpts.path[0]];
462
+ const error = TRPCError.getTRPCErrorFromUnknown(errorOpts.error);
463
+ const input = call?.result();
464
+ const path = call?.path;
465
+ const type = call?.procedure?._def.type ?? 'unknown';
466
+ // no need to call `onError` here as it will be propagated through the stream itself
385
467
  const shape = getErrorShape.getErrorShape({
386
468
  config,
387
- ctx,
388
- error: TRPCError.getTRPCErrorFromUnknown(errorOpts.error),
389
- input: call?.result(),
390
- path: call?.path,
391
- type: call?.procedure?._def.type ?? 'unknown'
469
+ ctx: ctxManager.valueOrUndefined(),
470
+ error,
471
+ input,
472
+ path,
473
+ type
392
474
  });
393
475
  return shape;
394
476
  }
395
477
  });
396
- return new Response(stream1, {
478
+ return new Response(stream, {
397
479
  headers,
398
- status: headResponse2.status
480
+ status: headResponse.status
399
481
  });
400
482
  }
401
483
  // httpBatchLink
@@ -406,28 +488,28 @@ async function resolveResponse(opts) {
406
488
  * - return a complete HTTPResponse
407
489
  */ headers.set('content-type', 'application/json');
408
490
  const results = (await Promise.all(rpcCalls)).map((res)=>{
409
- const [data, error] = res;
491
+ const [error, result] = res;
410
492
  if (error) {
411
493
  return res;
412
494
  }
413
- if (isDataStream(data)) {
495
+ if (isDataStream(result.data)) {
414
496
  return [
415
- null,
416
497
  new TRPCError.TRPCError({
417
498
  code: 'UNSUPPORTED_MEDIA_TYPE',
418
499
  message: 'Cannot use stream-like response in non-streaming request - use httpBatchStreamLink'
419
- })
500
+ }),
501
+ undefined
420
502
  ];
421
503
  }
422
504
  return res;
423
505
  });
424
- const resultAsRPCResponse = results.map(([data, error], index)=>{
506
+ const resultAsRPCResponse = results.map(([error, result], index)=>{
425
507
  const call = info.calls[index];
426
508
  if (error) {
427
509
  return {
428
510
  error: getErrorShape.getErrorShape({
429
511
  config,
430
- ctx,
512
+ ctx: ctxManager.valueOrUndefined(),
431
513
  error,
432
514
  input: call.result(),
433
515
  path: call.path,
@@ -437,13 +519,13 @@ async function resolveResponse(opts) {
437
519
  }
438
520
  return {
439
521
  result: {
440
- data
522
+ data: result.data
441
523
  }
442
524
  };
443
525
  });
444
- const errors = results.map(([_, error])=>error).filter(Boolean);
445
- const headResponse3 = initResponse({
446
- ctx,
526
+ const errors = results.map(([error])=>error).filter(Boolean);
527
+ const headResponse = initResponse({
528
+ ctx: ctxManager.valueOrUndefined(),
447
529
  info,
448
530
  responseMeta: opts.responseMeta,
449
531
  untransformedJSON: resultAsRPCResponse,
@@ -451,10 +533,12 @@ async function resolveResponse(opts) {
451
533
  headers
452
534
  });
453
535
  return new Response(JSON.stringify(transformer.transformTRPCResponse(config, resultAsRPCResponse)), {
454
- status: headResponse3.status,
536
+ status: headResponse.status,
455
537
  headers
456
538
  });
457
539
  } catch (cause) {
540
+ const [_infoError, info] = infoTuple;
541
+ const ctx = ctxManager.valueOrUndefined();
458
542
  // we get here if
459
543
  // - batching is called when it's not enabled
460
544
  // - `createContext()` throws
@@ -462,23 +546,23 @@ async function resolveResponse(opts) {
462
546
  // - post body is too large
463
547
  // - input deserialization fails
464
548
  // - `errorFormatter` return value is malformed
465
- const { error: error1 , untransformedJSON , body } = caughtErrorToData(cause, {
549
+ const { error, untransformedJSON, body } = caughtErrorToData(cause, {
466
550
  opts,
467
- ctx,
551
+ ctx: ctxManager.valueOrUndefined(),
468
552
  type: info?.type ?? 'unknown'
469
553
  });
470
- const headResponse4 = initResponse({
554
+ const headResponse = initResponse({
471
555
  ctx,
472
556
  info,
473
557
  responseMeta: opts.responseMeta,
474
558
  untransformedJSON,
475
559
  errors: [
476
- error1
560
+ error
477
561
  ],
478
562
  headers
479
563
  });
480
564
  return new Response(body, {
481
- status: headResponse4.status,
565
+ status: headResponse.status,
482
566
  headers
483
567
  });
484
568
  }