@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
@@ -1,231 +1,332 @@
1
- import { getTRPCErrorFromUnknown } from '../error/TRPCError.mjs';
1
+ import { Unpromise } from '../../vendor/unpromise/unpromise.mjs';
2
2
  import { isObject, isFunction, isAsyncIterable, run } from '../utils.mjs';
3
+ import { iteratorResource } from './utils/asyncIterable.mjs';
3
4
  import { createDeferred } from './utils/createDeferred.mjs';
4
- import { createReadableStream } from './utils/createReadableStream.mjs';
5
+ import { makeAsyncResource, makeResource } from './utils/disposable.mjs';
6
+ import { readableStreamFrom } from './utils/readableStreamFrom.mjs';
5
7
 
8
+ function _define_property(obj, key, value) {
9
+ if (key in obj) {
10
+ Object.defineProperty(obj, key, {
11
+ value: value,
12
+ enumerable: true,
13
+ configurable: true,
14
+ writable: true
15
+ });
16
+ } else {
17
+ obj[key] = value;
18
+ }
19
+ return obj;
20
+ }
21
+ function _ts_add_disposable_resource(env, value, async) {
22
+ if (value !== null && value !== void 0) {
23
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
24
+ var dispose, inner;
25
+ if (async) {
26
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
27
+ dispose = value[Symbol.asyncDispose];
28
+ }
29
+ if (dispose === void 0) {
30
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
31
+ dispose = value[Symbol.dispose];
32
+ if (async) inner = dispose;
33
+ }
34
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
35
+ if (inner) dispose = function() {
36
+ try {
37
+ inner.call(this);
38
+ } catch (e) {
39
+ return Promise.reject(e);
40
+ }
41
+ };
42
+ env.stack.push({
43
+ value: value,
44
+ dispose: dispose,
45
+ async: async
46
+ });
47
+ } else if (async) {
48
+ env.stack.push({
49
+ async: true
50
+ });
51
+ }
52
+ return value;
53
+ }
54
+ function _ts_dispose_resources(env) {
55
+ var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
56
+ var e = new Error(message);
57
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
58
+ };
59
+ return (_ts_dispose_resources = function _ts_dispose_resources(env) {
60
+ function fail(e) {
61
+ env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
62
+ env.hasError = true;
63
+ }
64
+ var r, s = 0;
65
+ function next() {
66
+ while(r = env.stack.pop()){
67
+ try {
68
+ if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
69
+ if (r.dispose) {
70
+ var result = r.dispose.call(r.value);
71
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
72
+ fail(e);
73
+ return next();
74
+ });
75
+ } else s |= 1;
76
+ } catch (e) {
77
+ fail(e);
78
+ }
79
+ }
80
+ if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
81
+ if (env.hasError) throw env.error;
82
+ }
83
+ return next();
84
+ })(env);
85
+ }
86
+ // ---------- types
6
87
  // ---------- types
7
88
  const CHUNK_VALUE_TYPE_PROMISE = 0;
8
89
  const CHUNK_VALUE_TYPE_ASYNC_ITERABLE = 1;
9
90
  const PROMISE_STATUS_FULFILLED = 0;
10
91
  const PROMISE_STATUS_REJECTED = 1;
11
92
  const ASYNC_ITERABLE_STATUS_RETURN = 0;
12
- const ASYNC_ITERABLE_STATUS_VALUE = 1;
93
+ const ASYNC_ITERABLE_STATUS_YIELD = 1;
13
94
  const ASYNC_ITERABLE_STATUS_ERROR = 2;
14
95
  function isPromise(value) {
15
96
  return (isObject(value) || isFunction(value)) && typeof value?.['then'] === 'function' && typeof value?.['catch'] === 'function';
16
97
  }
17
98
  class MaxDepthError extends Error {
18
99
  constructor(path){
19
- super('Max depth reached at path: ' + path.join('.'));
20
- this.path = path;
100
+ super('Max depth reached at path: ' + path.join('.')), _define_property(this, "path", void 0), this.path = path;
21
101
  }
22
102
  }
23
- function createBatchStreamProducer(opts) {
24
- const { data } = opts;
25
- let counter = 0;
26
- const placeholder = 0;
27
- const stream = createReadableStream();
28
- const pending = new Set();
29
- function maybeClose() {
30
- if (pending.size === 0 && !stream.cancelled()) {
31
- stream.controller.close();
32
- }
33
- }
34
- function dehydratePromise(promise, path) {
35
- //
36
- const error = checkMaxDepth(path);
37
- if (error) {
38
- promise.catch(()=>{
39
- // ignore
103
+ async function* createBatchStreamProducer(opts) {
104
+ const env = {
105
+ stack: [],
106
+ error: void 0,
107
+ hasError: false
108
+ };
109
+ try {
110
+ const { data } = opts;
111
+ let counter = 0;
112
+ const placeholder = 0;
113
+ const queue = _ts_add_disposable_resource(env, makeAsyncResource(new Set(), async ()=>{
114
+ await Promise.all(Array.from(queue).map((it)=>it.iterator.return?.()));
115
+ }), true);
116
+ ;
117
+ function registerAsync(callback) {
118
+ const idx = counter++;
119
+ const iterator = callback(idx)[Symbol.asyncIterator]();
120
+ const nextPromise = iterator.next();
121
+ nextPromise.catch(()=>{
122
+ // prevent unhandled promise rejection
40
123
  });
41
- promise = Promise.reject(error);
42
- }
43
- const idx = counter++;
44
- pending.add(idx);
45
- Promise.race([
46
- promise,
47
- stream.cancelledPromise
48
- ]).then((it)=>{
49
- if (it === null) {
50
- return;
51
- }
52
- stream.controller.enqueue([
53
- idx,
54
- PROMISE_STATUS_FULFILLED,
55
- dehydrate(it, path)
56
- ]);
57
- }).catch((cause)=>{
58
- opts.onError?.({
59
- error: cause,
60
- path
124
+ queue.add({
125
+ iterator,
126
+ nextPromise
61
127
  });
62
- stream.controller.enqueue([
63
- idx,
64
- PROMISE_STATUS_REJECTED,
65
- opts.formatError?.({
66
- error: cause,
67
- path
68
- })
69
- ]);
70
- }).finally(()=>{
71
- pending.delete(idx);
72
- maybeClose();
73
- });
74
- return idx;
75
- }
76
- function dehydrateAsyncIterable(iterable, path) {
77
- const error = checkMaxDepth(path);
78
- if (error) {
79
- iterable = {
80
- [Symbol.asyncIterator] () {
81
- throw error;
82
- }
83
- };
128
+ return idx;
84
129
  }
85
- const idx = counter++;
86
- pending.add(idx);
87
- run(async ()=>{
88
- const iterator = iterable[Symbol.asyncIterator]();
89
- while(true){
90
- const next = await Promise.race([
91
- iterator.next().catch(getTRPCErrorFromUnknown),
92
- stream.cancelledPromise
93
- ]);
94
- if (next instanceof Error) {
130
+ function encodePromise(promise, path) {
131
+ return registerAsync(async function*(idx) {
132
+ const error = checkMaxDepth(path);
133
+ if (error) {
134
+ // Catch any errors from the original promise to ensure they're reported
135
+ promise.catch((cause)=>{
136
+ opts.onError?.({
137
+ error: cause,
138
+ path
139
+ });
140
+ });
141
+ // Replace the promise with a rejected one containing the max depth error
142
+ promise = Promise.reject(error);
143
+ }
144
+ try {
145
+ const next = await promise;
146
+ return [
147
+ idx,
148
+ PROMISE_STATUS_FULFILLED,
149
+ encode(next, path)
150
+ ];
151
+ } catch (cause) {
95
152
  opts.onError?.({
96
- error: next,
153
+ error: cause,
97
154
  path
98
155
  });
99
- stream.controller.enqueue([
156
+ return [
100
157
  idx,
101
- ASYNC_ITERABLE_STATUS_ERROR,
158
+ PROMISE_STATUS_REJECTED,
102
159
  opts.formatError?.({
103
- error: next,
160
+ error: cause,
104
161
  path
105
162
  })
106
- ]);
107
- return;
163
+ ];
108
164
  }
109
- if (next === 'cancelled') {
110
- await iterator.return?.();
111
- break;
112
- }
113
- if (next.done) {
114
- stream.controller.enqueue([
115
- idx,
116
- ASYNC_ITERABLE_STATUS_RETURN,
117
- dehydrate(next.value, path)
118
- ]);
119
- break;
165
+ });
166
+ }
167
+ function encodeAsyncIterable(iterable, path) {
168
+ return registerAsync(async function*(idx) {
169
+ const env = {
170
+ stack: [],
171
+ error: void 0,
172
+ hasError: false
173
+ };
174
+ try {
175
+ const error = checkMaxDepth(path);
176
+ if (error) {
177
+ throw error;
178
+ }
179
+ const iterator = _ts_add_disposable_resource(env, iteratorResource(iterable), true);
180
+ ;
181
+ try {
182
+ while(true){
183
+ const next = await iterator.next();
184
+ if (next.done) {
185
+ return [
186
+ idx,
187
+ ASYNC_ITERABLE_STATUS_RETURN,
188
+ encode(next.value, path)
189
+ ];
190
+ }
191
+ yield [
192
+ idx,
193
+ ASYNC_ITERABLE_STATUS_YIELD,
194
+ encode(next.value, path)
195
+ ];
196
+ }
197
+ } catch (cause) {
198
+ opts.onError?.({
199
+ error: cause,
200
+ path
201
+ });
202
+ return [
203
+ idx,
204
+ ASYNC_ITERABLE_STATUS_ERROR,
205
+ opts.formatError?.({
206
+ error: cause,
207
+ path
208
+ })
209
+ ];
210
+ }
211
+ } catch (e) {
212
+ env.error = e;
213
+ env.hasError = true;
214
+ } finally{
215
+ const result = _ts_dispose_resources(env);
216
+ if (result) await result;
120
217
  }
121
- stream.controller.enqueue([
122
- idx,
123
- ASYNC_ITERABLE_STATUS_VALUE,
124
- dehydrate(next.value, path)
125
- ]);
126
- }
127
- pending.delete(idx);
128
- maybeClose();
129
- }).catch((cause)=>{
130
- // this shouldn't happen, but node crashes if we don't catch it
131
- opts.onError?.({
132
- error: new Error('You found a bug - please report it on https://github.com/trpc/trpc', // eslint-disable-next-line @typescript-eslint/ban-ts-comment
133
- // @ts-ignore https://github.com/tc39/proposal-error-cause
134
- {
135
- cause
136
- }),
137
- path
138
218
  });
139
- });
140
- return idx;
141
- }
142
- function checkMaxDepth(path) {
143
- if (opts.maxDepth && path.length > opts.maxDepth) {
144
- return new MaxDepthError(path);
145
219
  }
146
- return null;
147
- }
148
- function dehydrateChunk(value, path) {
149
- if (isPromise(value)) {
150
- return [
151
- CHUNK_VALUE_TYPE_PROMISE,
152
- dehydratePromise(value, path)
153
- ];
220
+ function checkMaxDepth(path) {
221
+ if (opts.maxDepth && path.length > opts.maxDepth) {
222
+ return new MaxDepthError(path);
223
+ }
224
+ return null;
154
225
  }
155
- if (isAsyncIterable(value)) {
156
- if (opts.maxDepth && path.length >= opts.maxDepth) {
157
- throw new Error('Max depth reached');
226
+ function encodeAsync(value, path) {
227
+ if (isPromise(value)) {
228
+ return [
229
+ CHUNK_VALUE_TYPE_PROMISE,
230
+ encodePromise(value, path)
231
+ ];
158
232
  }
159
- return [
160
- CHUNK_VALUE_TYPE_ASYNC_ITERABLE,
161
- dehydrateAsyncIterable(value, path)
162
- ];
233
+ if (isAsyncIterable(value)) {
234
+ if (opts.maxDepth && path.length >= opts.maxDepth) {
235
+ throw new Error('Max depth reached');
236
+ }
237
+ return [
238
+ CHUNK_VALUE_TYPE_ASYNC_ITERABLE,
239
+ encodeAsyncIterable(value, path)
240
+ ];
241
+ }
242
+ return null;
163
243
  }
164
- return null;
165
- }
166
- function dehydrate(value, path) {
167
- const reg = dehydrateChunk(value, path);
168
- if (reg) {
244
+ function encode(value, path) {
245
+ if (value === undefined) {
246
+ return [
247
+ []
248
+ ];
249
+ }
250
+ if (!isObject(value)) {
251
+ return [
252
+ [
253
+ value
254
+ ]
255
+ ];
256
+ }
257
+ const reg = encodeAsync(value, path);
258
+ if (reg) {
259
+ return [
260
+ [
261
+ placeholder
262
+ ],
263
+ [
264
+ null,
265
+ ...reg
266
+ ]
267
+ ];
268
+ }
269
+ const newObj = {};
270
+ const asyncValues = [];
271
+ for (const [key, item] of Object.entries(value)){
272
+ const transformed = encodeAsync(item, [
273
+ ...path,
274
+ key
275
+ ]);
276
+ if (!transformed) {
277
+ newObj[key] = item;
278
+ continue;
279
+ }
280
+ newObj[key] = placeholder;
281
+ asyncValues.push([
282
+ key,
283
+ ...transformed
284
+ ]);
285
+ }
169
286
  return [
170
287
  [
171
- placeholder
288
+ newObj
172
289
  ],
173
- [
174
- null,
175
- ...reg
176
- ]
290
+ ...asyncValues
177
291
  ];
178
292
  }
179
- if (!isObject(value)) {
180
- return [
181
- [
182
- value
183
- ]
184
- ];
185
- }
186
- const newObj = {};
187
- const asyncValues = [];
188
- for (const [key, item] of Object.entries(value)){
189
- const transformed = dehydrateChunk(item, [
190
- ...path,
293
+ const newHead = {};
294
+ for (const [key, item] of Object.entries(data)){
295
+ newHead[key] = encode(item, [
191
296
  key
192
297
  ]);
193
- if (!transformed) {
194
- newObj[key] = item;
195
- continue;
298
+ }
299
+ yield newHead;
300
+ // Process all async iterables in parallel by racing their next values
301
+ while(queue.size > 0){
302
+ // Race all iterators to get the next value from any of them
303
+ const [entry, res] = await Unpromise.race(Array.from(queue).map(async (it)=>[
304
+ it,
305
+ await it.nextPromise
306
+ ]));
307
+ yield res.value;
308
+ // Remove current iterator and re-add if not done
309
+ queue.delete(entry);
310
+ if (!res.done) {
311
+ entry.nextPromise = entry.iterator.next();
312
+ queue.add(entry);
196
313
  }
197
- newObj[key] = placeholder;
198
- asyncValues.push([
199
- key,
200
- ...transformed
201
- ]);
202
314
  }
203
- return [
204
- [
205
- newObj
206
- ],
207
- ...asyncValues
208
- ];
315
+ } catch (e) {
316
+ env.error = e;
317
+ env.hasError = true;
318
+ } finally{
319
+ const result = _ts_dispose_resources(env);
320
+ if (result) await result;
209
321
  }
210
- const newHead = {};
211
- for (const [key, item] of Object.entries(data)){
212
- newHead[key] = dehydrate(item, [
213
- key
214
- ]);
215
- }
216
- return [
217
- newHead,
218
- stream.readable
219
- ];
220
322
  }
221
323
  /**
222
324
  * JSON Lines stream producer
223
325
  * @see https://jsonlines.org/
224
326
  */ function jsonlStreamProducer(opts) {
225
- let [head, stream] = createBatchStreamProducer(opts);
226
- const { serialize } = opts;
327
+ let stream = readableStreamFrom(createBatchStreamProducer(opts));
328
+ const { serialize } = opts;
227
329
  if (serialize) {
228
- head = serialize(head);
229
330
  stream = stream.pipeThrough(new TransformStream({
230
331
  transform (chunk, controller) {
231
332
  controller.enqueue(serialize(chunk));
@@ -233,9 +334,6 @@ function createBatchStreamProducer(opts) {
233
334
  }));
234
335
  }
235
336
  return stream.pipeThrough(new TransformStream({
236
- start (controller) {
237
- controller.enqueue(JSON.stringify(head) + '\n');
238
- },
239
337
  transform (chunk, controller) {
240
338
  controller.enqueue(JSON.stringify(chunk) + '\n');
241
339
  }
@@ -252,24 +350,26 @@ class StreamInterruptedError extends Error {
252
350
  }
253
351
  class AsyncError extends Error {
254
352
  constructor(data){
255
- super('Received error from server');
256
- this.data = data;
353
+ super('Received error from server'), _define_property(this, "data", void 0), this.data = data;
257
354
  }
258
355
  }
259
356
  const nodeJsStreamToReaderEsque = (source)=>{
260
357
  return {
261
358
  getReader () {
262
- const { readable , controller } = createReadableStream();
263
- source.on('data', (chunk)=>{
264
- controller.enqueue(chunk);
265
- });
266
- source.on('end', ()=>{
267
- controller.close();
268
- });
269
- source.on('error', (error)=>{
270
- controller.error(error);
359
+ const stream = new ReadableStream({
360
+ start (controller) {
361
+ source.on('data', (chunk)=>{
362
+ controller.enqueue(chunk);
363
+ });
364
+ source.on('end', ()=>{
365
+ controller.close();
366
+ });
367
+ source.on('error', (error)=>{
368
+ controller.error(error);
369
+ });
370
+ }
271
371
  });
272
- return readable.getReader();
372
+ return stream.getReader();
273
373
  }
274
374
  };
275
375
  };
@@ -278,7 +378,7 @@ function createLineAccumulator(from) {
278
378
  let lineAggregate = '';
279
379
  return new ReadableStream({
280
380
  async pull (controller) {
281
- const { done , value } = await reader.read();
381
+ const { done, value } = await reader.read();
282
382
  if (done) {
283
383
  controller.close();
284
384
  } else {
@@ -315,11 +415,84 @@ function createConsumerStream(from) {
315
415
  }
316
416
  }));
317
417
  }
418
+ /**
419
+ * Creates a handler for managing stream controllers and their lifecycle
420
+ */ function createStreamsManager(abortController) {
421
+ const controllerMap = new Map();
422
+ /**
423
+ * Checks if there are no pending controllers or deferred promises
424
+ */ function isEmpty() {
425
+ return Array.from(controllerMap.values()).every((c)=>c.closed);
426
+ }
427
+ /**
428
+ * Creates a stream controller
429
+ */ function createStreamController() {
430
+ let originalController;
431
+ const stream = new ReadableStream({
432
+ start (controller) {
433
+ originalController = controller;
434
+ }
435
+ });
436
+ const streamController = {
437
+ enqueue: (v)=>originalController.enqueue(v),
438
+ close: ()=>{
439
+ originalController.close();
440
+ // mark as closed and remove methods
441
+ Object.assign(streamController, {
442
+ closed: true,
443
+ close: ()=>{
444
+ // noop
445
+ },
446
+ enqueue: ()=>{
447
+ // noop
448
+ },
449
+ getReaderResource: null
450
+ });
451
+ if (isEmpty()) {
452
+ abortController.abort();
453
+ }
454
+ },
455
+ closed: false,
456
+ getReaderResource: ()=>{
457
+ const reader = stream.getReader();
458
+ return makeResource(reader, ()=>{
459
+ reader.releaseLock();
460
+ streamController.close();
461
+ });
462
+ }
463
+ };
464
+ return streamController;
465
+ }
466
+ /**
467
+ * Gets or creates a stream controller
468
+ */ function getOrCreate(chunkId) {
469
+ let c = controllerMap.get(chunkId);
470
+ if (!c) {
471
+ c = createStreamController();
472
+ controllerMap.set(chunkId, c);
473
+ }
474
+ return c;
475
+ }
476
+ /**
477
+ * Cancels all pending controllers and rejects deferred promises
478
+ */ function cancelAll(reason) {
479
+ const error = new StreamInterruptedError(reason);
480
+ for (const controller of controllerMap.values()){
481
+ controller.enqueue(error);
482
+ controller.close();
483
+ }
484
+ }
485
+ return {
486
+ getOrCreate,
487
+ isEmpty,
488
+ cancelAll
489
+ };
490
+ }
318
491
  /**
319
492
  * JSON Lines stream consumer
320
493
  * @see https://jsonlines.org/
321
494
  */ async function jsonlStreamConsumer(opts) {
322
- const { deserialize =(v)=>v } = opts;
495
+ const { deserialize = (v)=>v } = opts;
323
496
  let source = createConsumerStream(opts.from);
324
497
  if (deserialize) {
325
498
  source = source.pipeThrough(new TransformStream({
@@ -329,149 +502,105 @@ function createConsumerStream(from) {
329
502
  }));
330
503
  }
331
504
  let headDeferred = createDeferred();
332
- const chunkDeferred = new Map();
333
- const controllers = new Map();
334
- const maybeAbort = ()=>{
335
- if (chunkDeferred.size === 0 && Array.from(controllers.values()).every((it)=>it.returned)) {
336
- // nothing is listening to the stream anymore
337
- opts.abortController?.abort();
338
- }
339
- };
340
- function hydrateChunkDefinition(value) {
505
+ const streamManager = createStreamsManager(opts.abortController);
506
+ function decodeChunkDefinition(value) {
341
507
  const [_path, type, chunkId] = value;
342
- const { readable , controller } = createReadableStream();
343
- const wrapper = {
344
- controller,
345
- returned: false
346
- };
347
- controllers.set(chunkId, wrapper);
348
- // resolve chunk deferred if it exists
349
- const deferred = chunkDeferred.get(chunkId);
350
- if (deferred) {
351
- deferred.resolve(wrapper);
352
- chunkDeferred.delete(chunkId);
353
- }
508
+ const controller = streamManager.getOrCreate(chunkId);
354
509
  switch(type){
355
510
  case CHUNK_VALUE_TYPE_PROMISE:
356
511
  {
357
- return new Promise((resolve, reject)=>{
358
- // listen for next value in the stream
359
- const reader = readable.getReader();
360
- reader.read().then((it)=>{
361
- if (it.done) {
362
- reject(new Error('Promise chunk ended without value'));
363
- return;
364
- }
365
- if (it.value instanceof StreamInterruptedError) {
366
- reject(it.value);
367
- return;
512
+ return run(async ()=>{
513
+ const env = {
514
+ stack: [],
515
+ error: void 0,
516
+ hasError: false
517
+ };
518
+ try {
519
+ const reader = _ts_add_disposable_resource(env, controller.getReaderResource(), false);
520
+ ;
521
+ const { value } = await reader.read();
522
+ if (value instanceof StreamInterruptedError) {
523
+ throw value;
368
524
  }
369
- const value = it.value;
370
525
  const [_chunkId, status, data] = value;
371
526
  switch(status){
372
527
  case PROMISE_STATUS_FULFILLED:
373
- resolve(hydrate(data));
374
- break;
528
+ return decode(data);
375
529
  case PROMISE_STATUS_REJECTED:
376
- reject(opts.formatError?.({
530
+ throw opts.formatError?.({
377
531
  error: data
378
- }) ?? new AsyncError(data));
379
- break;
532
+ }) ?? new AsyncError(data);
380
533
  }
381
- }).catch(reject).finally(()=>{
382
- // reader.releaseLock();
383
- controllers.delete(chunkId);
384
- maybeAbort();
385
- });
534
+ } catch (e) {
535
+ env.error = e;
536
+ env.hasError = true;
537
+ } finally{
538
+ _ts_dispose_resources(env);
539
+ }
386
540
  });
387
541
  }
388
542
  case CHUNK_VALUE_TYPE_ASYNC_ITERABLE:
389
543
  {
390
- return {
391
- [Symbol.asyncIterator]: ()=>{
392
- const reader = readable.getReader();
393
- const iterator = {
394
- next: async ()=>{
395
- const { done , value } = await reader.read();
396
- if (value instanceof StreamInterruptedError) {
397
- throw value;
398
- }
399
- if (done) {
400
- controllers.delete(chunkId);
401
- maybeAbort();
402
- return {
403
- done: true,
404
- value: undefined
405
- };
406
- }
407
- const [_chunkId, status, data] = value;
408
- switch(status){
409
- case ASYNC_ITERABLE_STATUS_VALUE:
410
- return {
411
- done: false,
412
- value: hydrate(data)
413
- };
414
- case ASYNC_ITERABLE_STATUS_RETURN:
415
- controllers.delete(chunkId);
416
- maybeAbort();
417
- return {
418
- done: true,
419
- value: hydrate(data)
420
- };
421
- case ASYNC_ITERABLE_STATUS_ERROR:
422
- controllers.delete(chunkId);
423
- maybeAbort();
424
- throw opts.formatError?.({
425
- error: data
426
- }) ?? new AsyncError(data);
427
- }
428
- },
429
- return: async ()=>{
430
- wrapper.returned = true;
431
- maybeAbort();
432
- return {
433
- done: true,
434
- value: undefined
435
- };
544
+ return run(async function*() {
545
+ const env = {
546
+ stack: [],
547
+ error: void 0,
548
+ hasError: false
549
+ };
550
+ try {
551
+ const reader = _ts_add_disposable_resource(env, controller.getReaderResource(), false);
552
+ ;
553
+ while(true){
554
+ const { value } = await reader.read();
555
+ if (value instanceof StreamInterruptedError) {
556
+ throw value;
436
557
  }
437
- };
438
- return iterator;
558
+ const [_chunkId, status, data] = value;
559
+ switch(status){
560
+ case ASYNC_ITERABLE_STATUS_YIELD:
561
+ yield decode(data);
562
+ break;
563
+ case ASYNC_ITERABLE_STATUS_RETURN:
564
+ return decode(data);
565
+ case ASYNC_ITERABLE_STATUS_ERROR:
566
+ throw opts.formatError?.({
567
+ error: data
568
+ }) ?? new AsyncError(data);
569
+ }
570
+ }
571
+ } catch (e) {
572
+ env.error = e;
573
+ env.hasError = true;
574
+ } finally{
575
+ _ts_dispose_resources(env);
439
576
  }
440
- };
577
+ });
441
578
  }
442
579
  }
443
580
  }
444
- function hydrate(value) {
581
+ function decode(value) {
445
582
  const [[data], ...asyncProps] = value;
446
- for (const value1 of asyncProps){
447
- const [key] = value1;
448
- const hydrated = hydrateChunkDefinition(value1);
583
+ for (const value of asyncProps){
584
+ const [key] = value;
585
+ const decoded = decodeChunkDefinition(value);
449
586
  if (key === null) {
450
- return hydrated;
587
+ return decoded;
451
588
  }
452
- data[key] = hydrated;
589
+ data[key] = decoded;
453
590
  }
454
591
  return data;
455
592
  }
456
593
  const closeOrAbort = (reason)=>{
457
594
  const error = new StreamInterruptedError(reason);
458
595
  headDeferred?.reject(error);
459
- for (const deferred of chunkDeferred.values()){
460
- deferred.reject(error);
461
- }
462
- chunkDeferred.clear();
463
- for (const { controller } of controllers.values()){
464
- controller.enqueue(error);
465
- controller.close();
466
- }
467
- controllers.clear();
596
+ streamManager.cancelAll(error);
468
597
  };
469
598
  source.pipeTo(new WritableStream({
470
- async write (chunkOrHead) {
599
+ write (chunkOrHead) {
471
600
  if (headDeferred) {
472
601
  const head = chunkOrHead;
473
602
  for (const [key, value] of Object.entries(chunkOrHead)){
474
- const parsed = hydrate(value);
603
+ const parsed = decode(value);
475
604
  head[key] = parsed;
476
605
  }
477
606
  headDeferred.resolve(head);
@@ -480,20 +609,14 @@ function createConsumerStream(from) {
480
609
  }
481
610
  const chunk = chunkOrHead;
482
611
  const [idx] = chunk;
483
- let wrapper = controllers.get(idx);
484
- if (!wrapper) {
485
- let deferred = chunkDeferred.get(idx);
486
- if (!deferred) {
487
- deferred = createDeferred();
488
- chunkDeferred.set(idx, deferred);
489
- }
490
- wrapper = await deferred.promise;
491
- }
492
- wrapper.controller.enqueue(chunk);
612
+ const controller = streamManager.getOrCreate(idx);
613
+ controller.enqueue(chunk);
493
614
  },
494
615
  close: closeOrAbort,
495
616
  abort: closeOrAbort
496
- })).catch((error)=>{
617
+ }), {
618
+ signal: opts.abortController.signal
619
+ }).catch((error)=>{
497
620
  opts.onError?.({
498
621
  error
499
622
  });
@@ -501,9 +624,7 @@ function createConsumerStream(from) {
501
624
  });
502
625
  return [
503
626
  await headDeferred.promise,
504
- {
505
- controllers
506
- }
627
+ streamManager
507
628
  ];
508
629
  }
509
630