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

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 +412 -310
  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
@@ -4,23 +4,95 @@ import { run, isObject, isAsyncIterable } from '../unstable-core-do-not-import/u
4
4
  import { parseConnectionParamsFromUnknown } from '../unstable-core-do-not-import/http/parseConnectionParams.mjs';
5
5
  import { parseTRPCMessage } from '../unstable-core-do-not-import/rpc/parseTRPCMessage.mjs';
6
6
  import { isObservable, observableToAsyncIterable } from '../observable/observable.mjs';
7
+ import { Unpromise } from '../vendor/unpromise/unpromise.mjs';
8
+ import { iteratorResource } from '../unstable-core-do-not-import/stream/utils/asyncIterable.mjs';
9
+ import '../unstable-core-do-not-import/stream/utils/disposable.mjs';
7
10
  import { isTrackedEnvelope } from '../unstable-core-do-not-import/stream/tracked.mjs';
8
11
  import { transformTRPCResponse } from '../unstable-core-do-not-import/transformer.mjs';
9
- import { toURL } from '../unstable-core-do-not-import/http/toURL.mjs';
10
12
  import '../unstable-core-do-not-import/rootConfig.mjs';
11
13
  import { callProcedure } from '../unstable-core-do-not-import/router.mjs';
14
+ import { createURL } from './node-http/incomingMessageToRequest.mjs';
12
15
 
16
+ function _ts_add_disposable_resource(env, value, async) {
17
+ if (value !== null && value !== void 0) {
18
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
19
+ var dispose, inner;
20
+ {
21
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
22
+ dispose = value[Symbol.asyncDispose];
23
+ }
24
+ if (dispose === void 0) {
25
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
26
+ dispose = value[Symbol.dispose];
27
+ inner = dispose;
28
+ }
29
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
30
+ if (inner) dispose = function() {
31
+ try {
32
+ inner.call(this);
33
+ } catch (e) {
34
+ return Promise.reject(e);
35
+ }
36
+ };
37
+ env.stack.push({
38
+ value: value,
39
+ dispose: dispose,
40
+ async: async
41
+ });
42
+ } else {
43
+ env.stack.push({
44
+ async: true
45
+ });
46
+ }
47
+ return value;
48
+ }
49
+ function _ts_dispose_resources(env) {
50
+ var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
51
+ var e = new Error(message);
52
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
53
+ };
54
+ return (_ts_dispose_resources = function _ts_dispose_resources(env) {
55
+ function fail(e) {
56
+ env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
57
+ env.hasError = true;
58
+ }
59
+ var r, s = 0;
60
+ function next() {
61
+ while(r = env.stack.pop()){
62
+ try {
63
+ if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
64
+ if (r.dispose) {
65
+ var result = r.dispose.call(r.value);
66
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
67
+ fail(e);
68
+ return next();
69
+ });
70
+ } else s |= 1;
71
+ } catch (e) {
72
+ fail(e);
73
+ }
74
+ }
75
+ if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
76
+ if (env.hasError) throw env.error;
77
+ }
78
+ return next();
79
+ })(env);
80
+ }
13
81
  /**
14
82
  * Importing ws causes a build error
15
- * @link https://github.com/trpc/trpc/pull/5279
83
+ * @see https://github.com/trpc/trpc/pull/5279
16
84
  */ const WEBSOCKET_OPEN = 1; /* ws.WebSocket.OPEN */
17
85
  const unsetContextPromiseSymbol = Symbol('unsetContextPromise');
18
86
  function getWSConnectionHandler(opts) {
19
- const { createContext , router } = opts;
20
- const { transformer } = router._def._config;
87
+ const { createContext, router } = opts;
88
+ const { transformer } = router._def._config;
21
89
  return async (client, req)=>{
22
90
  const clientSubscriptions = new Map();
23
91
  const abortController = new AbortController();
92
+ if (opts.keepAlive?.enabled) {
93
+ const { pingMs, pongWaitMs } = opts.keepAlive;
94
+ handleKeepAlive(client, pingMs, pongWaitMs);
95
+ }
24
96
  function respond(untransformedJSON) {
25
97
  client.send(JSON.stringify(transformTRPCResponse(router._def._config, untransformedJSON)));
26
98
  }
@@ -73,9 +145,9 @@ function getWSConnectionHandler(opts) {
73
145
  *
74
146
  * - the context promise will be created immediately on connection if no connectionParams are expected
75
147
  * - if connection params are expected, they will be created once received
76
- */ let ctxPromise = toURL(req.url ?? '').searchParams.get('connectionParams') === '1' ? unsetContextPromiseSymbol : createCtxPromise(()=>null);
148
+ */ let ctxPromise = createURL(req).searchParams.get('connectionParams') === '1' ? unsetContextPromiseSymbol : createCtxPromise(()=>null);
77
149
  async function handleRequest(msg) {
78
- const { id , jsonrpc } = msg;
150
+ const { id, jsonrpc } = msg;
79
151
  /* istanbul ignore next -- @preserve */ if (id === null) {
80
152
  throw new TRPCError({
81
153
  code: 'BAD_REQUEST',
@@ -86,8 +158,8 @@ function getWSConnectionHandler(opts) {
86
158
  clientSubscriptions.get(id)?.abort();
87
159
  return;
88
160
  }
89
- const { path , lastEventId } = msg.params;
90
- let { input } = msg.params;
161
+ const { path, lastEventId } = msg.params;
162
+ let { input } = msg.params;
91
163
  const type = msg.method;
92
164
  try {
93
165
  if (lastEventId !== undefined) {
@@ -103,12 +175,14 @@ function getWSConnectionHandler(opts) {
103
175
  }
104
176
  }
105
177
  await ctxPromise; // asserts context has been set
178
+ const abortController = new AbortController();
106
179
  const result = await callProcedure({
107
180
  procedures: router._def.procedures,
108
181
  path,
109
182
  getRawInput: async ()=>input,
110
183
  ctx,
111
- type
184
+ type,
185
+ signal: abortController.signal
112
186
  });
113
187
  const isIterableResult = isAsyncIterable(result) || isObservable(result);
114
188
  if (type !== 'subscription') {
@@ -147,76 +221,95 @@ function getWSConnectionHandler(opts) {
147
221
  code: 'BAD_REQUEST'
148
222
  });
149
223
  }
150
- const iterable = isObservable(result) ? observableToAsyncIterable(result) : result;
151
- const iterator = iterable[Symbol.asyncIterator]();
152
- const abortController = new AbortController();
153
- const abortPromise = new Promise((resolve)=>{
154
- abortController.signal.onabort = ()=>resolve('abort');
155
- });
224
+ const iterable = isObservable(result) ? observableToAsyncIterable(result, abortController.signal) : result;
156
225
  run(async ()=>{
157
- while(true){
158
- const next = await Promise.race([
159
- iterator.next().catch(getTRPCErrorFromUnknown),
160
- abortPromise
161
- ]);
162
- if (next === 'abort') {
163
- await iterator.return?.();
164
- break;
165
- }
166
- if (next instanceof Error) {
167
- const error = getTRPCErrorFromUnknown(next);
168
- opts.onError?.({
169
- error,
170
- path,
171
- type,
172
- ctx,
173
- req,
174
- input
175
- });
226
+ const env = {
227
+ stack: [],
228
+ error: void 0,
229
+ hasError: false
230
+ };
231
+ try {
232
+ const iterator = _ts_add_disposable_resource(env, iteratorResource(iterable), true);
233
+ ;
234
+ const abortPromise = new Promise((resolve)=>{
235
+ abortController.signal.onabort = ()=>resolve('abort');
236
+ });
237
+ // We need those declarations outside the loop for garbage collection reasons. If they
238
+ // were declared inside, they would not be freed until the next value is present.
239
+ let next;
240
+ let result;
241
+ while(true){
242
+ next = await Unpromise.race([
243
+ iterator.next().catch(getTRPCErrorFromUnknown),
244
+ abortPromise
245
+ ]);
246
+ if (next === 'abort') {
247
+ await iterator.return?.();
248
+ break;
249
+ }
250
+ if (next instanceof Error) {
251
+ const error = getTRPCErrorFromUnknown(next);
252
+ opts.onError?.({
253
+ error,
254
+ path,
255
+ type,
256
+ ctx,
257
+ req,
258
+ input
259
+ });
260
+ respond({
261
+ id,
262
+ jsonrpc,
263
+ error: getErrorShape({
264
+ config: router._def._config,
265
+ error,
266
+ type,
267
+ path,
268
+ input,
269
+ ctx
270
+ })
271
+ });
272
+ break;
273
+ }
274
+ if (next.done) {
275
+ break;
276
+ }
277
+ result = {
278
+ type: 'data',
279
+ data: next.value
280
+ };
281
+ if (isTrackedEnvelope(next.value)) {
282
+ const [id, data] = next.value;
283
+ result.id = id;
284
+ result.data = {
285
+ id,
286
+ data
287
+ };
288
+ }
176
289
  respond({
177
290
  id,
178
291
  jsonrpc,
179
- error: getErrorShape({
180
- config: router._def._config,
181
- error,
182
- type,
183
- path,
184
- input,
185
- ctx
186
- })
292
+ result
187
293
  });
188
- break;
189
- }
190
- if (next.done) {
191
- break;
192
- }
193
- const result = {
194
- type: 'data',
195
- data: next.value
196
- };
197
- if (isTrackedEnvelope(next.value)) {
198
- const [id1, data] = next.value;
199
- result.id = id1;
200
- result.data = {
201
- id: id1,
202
- data
203
- };
294
+ // free up references for garbage collection
295
+ next = null;
296
+ result = null;
204
297
  }
205
298
  respond({
206
299
  id,
207
300
  jsonrpc,
208
- result
301
+ result: {
302
+ type: 'stopped'
303
+ }
209
304
  });
305
+ clientSubscriptions.delete(id);
306
+ } catch (e) {
307
+ env.error = e;
308
+ env.hasError = true;
309
+ } finally{
310
+ const result = _ts_dispose_resources(env);
311
+ if (result) await result;
210
312
  }
211
- await iterator.return?.();
212
- respond({
213
- id,
214
- jsonrpc,
215
- result: {
216
- type: 'stopped'
217
- }
218
- });
219
- clientSubscriptions.delete(id);
220
313
  }).catch((cause)=>{
221
314
  const error = getTRPCErrorFromUnknown(cause);
222
315
  opts.onError?.({
@@ -274,13 +367,24 @@ function getWSConnectionHandler(opts) {
274
367
  });
275
368
  }
276
369
  }
277
- client.on('message', async (message)=>{
370
+ client.on('message', async (rawData)=>{
371
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
372
+ const msgStr = rawData.toString();
373
+ if (msgStr === 'PONG') {
374
+ return;
375
+ }
376
+ if (msgStr === 'PING') {
377
+ if (!opts.dangerouslyDisablePong) {
378
+ client.send('PONG');
379
+ }
380
+ return;
381
+ }
278
382
  if (ctxPromise === unsetContextPromiseSymbol) {
279
383
  // If the ctxPromise wasn't created immediately, we're expecting the first message to be a TRPCConnectionParamsMessage
280
384
  ctxPromise = createCtxPromise(()=>{
281
385
  let msg;
282
386
  try {
283
- msg = JSON.parse(message.toString());
387
+ msg = JSON.parse(msgStr);
284
388
  if (!isObject(msg)) {
285
389
  throw new Error('Message was not an object');
286
390
  }
@@ -297,7 +401,7 @@ function getWSConnectionHandler(opts) {
297
401
  return;
298
402
  }
299
403
  try {
300
- const msgJSON = JSON.parse(message.toString());
404
+ const msgJSON = JSON.parse(msgStr);
301
405
  const msgs = Array.isArray(msgJSON) ? msgJSON : [
302
406
  msgJSON
303
407
  ];
@@ -343,48 +447,59 @@ function getWSConnectionHandler(opts) {
343
447
  abortController.abort();
344
448
  });
345
449
  if (ctxPromise !== unsetContextPromiseSymbol) {
346
- // prevent unhandled promise rejection errors
347
- await ctxPromise.catch(()=>null);
450
+ await ctxPromise;
348
451
  }
349
452
  };
350
453
  }
351
454
  /**
352
455
  * Handle WebSocket keep-alive messages
353
456
  */ function handleKeepAlive(client, pingMs = 30000, pongWaitMs = 5000) {
354
- let heartbeatTimeout;
355
- const heartbeatInterval = setInterval(()=>{
356
- if (client.readyState !== WEBSOCKET_OPEN) {
357
- return;
358
- }
359
- // First we send a ping message and wait for a pong
360
- client.ping();
361
- // We set a timeout to close the connection if the pong is not received
362
- heartbeatTimeout = setTimeout(()=>{
363
- client.terminate();
364
- clearInterval(heartbeatInterval);
365
- }, pongWaitMs);
366
- }, pingMs).unref();
367
- // When we receive a pong message, we clear the timeout
368
- client.on('pong', ()=>{
369
- heartbeatTimeout && clearTimeout(heartbeatTimeout);
370
- });
371
- // If the connection is closed, we clear the interval
457
+ let timeout = undefined;
458
+ let ping = undefined;
459
+ const schedulePing = ()=>{
460
+ const scheduleTimeout = ()=>{
461
+ timeout = setTimeout(()=>{
462
+ client.terminate();
463
+ }, pongWaitMs);
464
+ };
465
+ ping = setTimeout(()=>{
466
+ client.send('PING');
467
+ scheduleTimeout();
468
+ }, pingMs);
469
+ };
470
+ const onMessage = ()=>{
471
+ clearTimeout(ping);
472
+ clearTimeout(timeout);
473
+ schedulePing();
474
+ };
475
+ client.on('message', onMessage);
372
476
  client.on('close', ()=>{
373
- clearInterval(heartbeatInterval);
477
+ clearTimeout(ping);
478
+ clearTimeout(timeout);
374
479
  });
480
+ schedulePing();
375
481
  }
376
482
  function applyWSSHandler(opts) {
377
- const { wss , prefix , keepAlive } = opts;
378
483
  const onConnection = getWSConnectionHandler(opts);
379
- wss.on('connection', async (client, req)=>{
380
- if (prefix && !req.url?.startsWith(prefix)) {
484
+ opts.wss.on('connection', (client, req)=>{
485
+ if (opts.prefix && !req.url?.startsWith(opts.prefix)) {
381
486
  return;
382
487
  }
383
- await onConnection(client, req);
384
- if (keepAlive?.enabled) {
385
- const { pingMs , pongWaitMs } = keepAlive;
386
- handleKeepAlive(client, pingMs, pongWaitMs);
387
- }
488
+ onConnection(client, req).catch((cause)=>{
489
+ opts.onError?.({
490
+ error: new TRPCError({
491
+ code: 'INTERNAL_SERVER_ERROR',
492
+ cause,
493
+ message: 'Failed to handle WebSocket connection'
494
+ }),
495
+ req: req,
496
+ path: undefined,
497
+ type: 'unknown',
498
+ ctx: undefined,
499
+ input: undefined
500
+ });
501
+ client.close();
502
+ });
388
503
  });
389
504
  return {
390
505
  broadcastReconnectNotification: ()=>{
@@ -393,7 +508,7 @@ function applyWSSHandler(opts) {
393
508
  method: 'reconnect'
394
509
  };
395
510
  const data = JSON.stringify(response);
396
- for (const client of wss.clients){
511
+ for (const client of opts.wss.clients){
397
512
  if (client.readyState === WEBSOCKET_OPEN) {
398
513
  client.send(data);
399
514
  }
@@ -402,4 +517,4 @@ function applyWSSHandler(opts) {
402
517
  };
403
518
  }
404
519
 
405
- export { applyWSSHandler, getWSConnectionHandler };
520
+ export { applyWSSHandler, getWSConnectionHandler, handleKeepAlive };