@trpc/server 11.0.0-alpha-tmp-subscription-connection-state.488 → 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 (276) 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 +5 -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 +236 -90
  55. package/dist/adapters/ws.mjs +237 -92
  56. package/dist/bundle-analysis.json +411 -294
  57. package/dist/http.js +2 -4
  58. package/dist/http.mjs +2 -2
  59. package/dist/index.js +6 -2
  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 +187 -92
  107. package/dist/unstable-core-do-not-import/http/resolveResponse.mjs +189 -94
  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 +32 -13
  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 +11 -6
  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.d.ts.map +1 -1
  138. package/dist/unstable-core-do-not-import/rpc/parseTRPCMessage.js +7 -3
  139. package/dist/unstable-core-do-not-import/rpc/parseTRPCMessage.mjs +7 -3
  140. package/dist/unstable-core-do-not-import/stream/jsonl.d.ts +31 -16
  141. package/dist/unstable-core-do-not-import/stream/jsonl.d.ts.map +1 -1
  142. package/dist/unstable-core-do-not-import/stream/jsonl.js +440 -318
  143. package/dist/unstable-core-do-not-import/stream/jsonl.mjs +440 -318
  144. package/dist/unstable-core-do-not-import/stream/sse.d.ts +63 -41
  145. package/dist/unstable-core-do-not-import/stream/sse.d.ts.map +1 -1
  146. package/dist/unstable-core-do-not-import/stream/sse.js +300 -119
  147. package/dist/unstable-core-do-not-import/stream/sse.mjs +302 -119
  148. package/dist/unstable-core-do-not-import/stream/sse.types.d.ts +31 -0
  149. package/dist/unstable-core-do-not-import/stream/sse.types.d.ts.map +1 -0
  150. package/dist/unstable-core-do-not-import/stream/tracked.d.ts +31 -0
  151. package/dist/unstable-core-do-not-import/stream/tracked.d.ts.map +1 -0
  152. package/dist/unstable-core-do-not-import/stream/tracked.js +29 -0
  153. package/dist/unstable-core-do-not-import/stream/tracked.mjs +25 -0
  154. package/dist/unstable-core-do-not-import/stream/utils/asyncIterable.d.ts +17 -0
  155. package/dist/unstable-core-do-not-import/stream/utils/asyncIterable.d.ts.map +1 -0
  156. package/dist/unstable-core-do-not-import/stream/utils/asyncIterable.js +171 -0
  157. package/dist/unstable-core-do-not-import/stream/utils/asyncIterable.mjs +167 -0
  158. package/dist/unstable-core-do-not-import/stream/utils/createDeferred.d.ts +0 -11
  159. package/dist/unstable-core-do-not-import/stream/utils/createDeferred.d.ts.map +1 -1
  160. package/dist/unstable-core-do-not-import/stream/utils/createDeferred.js +0 -29
  161. package/dist/unstable-core-do-not-import/stream/utils/createDeferred.mjs +1 -29
  162. package/dist/unstable-core-do-not-import/stream/utils/disposable.d.ts +17 -0
  163. package/dist/unstable-core-do-not-import/stream/utils/disposable.d.ts.map +1 -0
  164. package/dist/unstable-core-do-not-import/stream/utils/disposable.js +44 -0
  165. package/dist/unstable-core-do-not-import/stream/utils/disposable.mjs +41 -0
  166. package/dist/unstable-core-do-not-import/stream/utils/readableStreamFrom.d.ts +8 -0
  167. package/dist/unstable-core-do-not-import/stream/utils/readableStreamFrom.d.ts.map +1 -0
  168. package/dist/unstable-core-do-not-import/stream/utils/readableStreamFrom.js +25 -0
  169. package/dist/unstable-core-do-not-import/stream/utils/readableStreamFrom.mjs +23 -0
  170. package/dist/unstable-core-do-not-import/stream/utils/timerResource.d.ts +5 -0
  171. package/dist/unstable-core-do-not-import/stream/utils/timerResource.d.ts.map +1 -0
  172. package/dist/unstable-core-do-not-import/stream/utils/timerResource.js +26 -0
  173. package/dist/unstable-core-do-not-import/stream/utils/timerResource.mjs +23 -0
  174. package/dist/unstable-core-do-not-import/stream/utils/withPing.d.ts +7 -0
  175. package/dist/unstable-core-do-not-import/stream/utils/withPing.d.ts.map +1 -0
  176. package/dist/unstable-core-do-not-import/stream/utils/withPing.js +130 -0
  177. package/dist/unstable-core-do-not-import/stream/utils/withPing.mjs +127 -0
  178. package/dist/unstable-core-do-not-import/transformer.d.ts +2 -4
  179. package/dist/unstable-core-do-not-import/transformer.d.ts.map +1 -1
  180. package/dist/unstable-core-do-not-import/transformer.js +1 -1
  181. package/dist/unstable-core-do-not-import/transformer.mjs +1 -1
  182. package/dist/unstable-core-do-not-import/types.d.ts +26 -3
  183. package/dist/unstable-core-do-not-import/types.d.ts.map +1 -1
  184. package/dist/unstable-core-do-not-import/utils.d.ts +15 -0
  185. package/dist/unstable-core-do-not-import/utils.d.ts.map +1 -1
  186. package/dist/unstable-core-do-not-import/utils.js +49 -1
  187. package/dist/unstable-core-do-not-import/utils.mjs +45 -2
  188. package/dist/unstable-core-do-not-import.d.ts +4 -2
  189. package/dist/unstable-core-do-not-import.d.ts.map +1 -1
  190. package/dist/unstable-core-do-not-import.js +18 -9
  191. package/dist/unstable-core-do-not-import.mjs +7 -7
  192. package/dist/vendor/unpromise/index.d.ts +3 -0
  193. package/dist/vendor/unpromise/index.d.ts.map +1 -0
  194. package/dist/vendor/unpromise/types.d.ts +28 -0
  195. package/dist/vendor/unpromise/types.d.ts.map +1 -0
  196. package/dist/vendor/unpromise/unpromise.d.ts +121 -0
  197. package/dist/vendor/unpromise/unpromise.d.ts.map +1 -0
  198. package/dist/vendor/unpromise/unpromise.js +292 -0
  199. package/dist/vendor/unpromise/unpromise.mjs +289 -0
  200. package/package.json +20 -17
  201. package/src/@trpc/server/http.ts +0 -2
  202. package/src/@trpc/server/index.ts +6 -0
  203. package/src/adapters/aws-lambda/getPlanner.ts +2 -2
  204. package/src/adapters/aws-lambda/index.ts +5 -6
  205. package/src/adapters/express.ts +21 -9
  206. package/src/adapters/fastify/fastifyRequestHandler.ts +1 -1
  207. package/src/adapters/fastify/fastifyTRPCPlugin.ts +16 -5
  208. package/src/adapters/fetch/fetchRequestHandler.ts +2 -2
  209. package/src/adapters/next-app-dir/nextAppDirCaller.ts +3 -0
  210. package/src/adapters/next-app-dir/rethrowNextErrors.ts +3 -2
  211. package/src/adapters/next.ts +29 -34
  212. package/src/adapters/node-http/incomingMessageToRequest.ts +110 -40
  213. package/src/adapters/node-http/nodeHTTPRequestHandler.ts +85 -63
  214. package/src/adapters/node-http/writeResponse.ts +94 -0
  215. package/src/adapters/standalone.ts +35 -18
  216. package/src/adapters/ws.ts +152 -62
  217. package/src/observable/behaviorSubject.ts +55 -0
  218. package/src/observable/index.ts +22 -3
  219. package/src/observable/observable.ts +32 -14
  220. package/src/observable/operators.ts +47 -0
  221. package/src/unstable-core-do-not-import/clientish/inference.ts +4 -4
  222. package/src/unstable-core-do-not-import/clientish/inferrable.ts +6 -6
  223. package/src/unstable-core-do-not-import/clientish/serialize.ts +5 -5
  224. package/src/unstable-core-do-not-import/http/getHTTPStatusCode.ts +37 -4
  225. package/src/unstable-core-do-not-import/http/isAbortError.ts +7 -0
  226. package/src/unstable-core-do-not-import/http/resolveResponse.ts +192 -85
  227. package/src/unstable-core-do-not-import/http/types.ts +1 -1
  228. package/src/unstable-core-do-not-import/initTRPC.ts +14 -20
  229. package/src/unstable-core-do-not-import/middleware.ts +5 -4
  230. package/src/unstable-core-do-not-import/parser.ts +17 -6
  231. package/src/unstable-core-do-not-import/procedure.ts +17 -2
  232. package/src/unstable-core-do-not-import/procedureBuilder.ts +138 -123
  233. package/src/unstable-core-do-not-import/rootConfig.ts +20 -17
  234. package/src/unstable-core-do-not-import/router.ts +15 -16
  235. package/src/unstable-core-do-not-import/rpc/codes.ts +2 -10
  236. package/src/unstable-core-do-not-import/rpc/envelopes.ts +18 -7
  237. package/src/unstable-core-do-not-import/rpc/parseTRPCMessage.ts +5 -1
  238. package/src/unstable-core-do-not-import/stream/jsonl.ts +293 -294
  239. package/src/unstable-core-do-not-import/stream/sse.ts +349 -191
  240. package/src/unstable-core-do-not-import/stream/sse.types.ts +44 -0
  241. package/src/unstable-core-do-not-import/stream/tracked.ts +49 -0
  242. package/src/unstable-core-do-not-import/stream/utils/asyncIterable.ts +89 -0
  243. package/src/unstable-core-do-not-import/stream/utils/createDeferred.ts +0 -36
  244. package/src/unstable-core-do-not-import/stream/utils/disposable.ts +52 -0
  245. package/src/unstable-core-do-not-import/stream/utils/readableStreamFrom.ts +28 -0
  246. package/src/unstable-core-do-not-import/stream/utils/timerResource.ts +29 -0
  247. package/src/unstable-core-do-not-import/stream/utils/withPing.ts +47 -0
  248. package/src/unstable-core-do-not-import/transformer.ts +1 -1
  249. package/src/unstable-core-do-not-import/types.ts +35 -10
  250. package/src/unstable-core-do-not-import/utils.ts +56 -1
  251. package/src/unstable-core-do-not-import.ts +4 -2
  252. package/src/vendor/unpromise/ATTRIBUTION.txt +1 -0
  253. package/src/vendor/unpromise/LICENSE +20 -0
  254. package/src/vendor/unpromise/index.ts +7 -0
  255. package/src/vendor/unpromise/types.ts +55 -0
  256. package/src/vendor/unpromise/unpromise.ts +380 -0
  257. package/dist/unstable-core-do-not-import/http/batchStreamFormatter.d.ts +0 -24
  258. package/dist/unstable-core-do-not-import/http/batchStreamFormatter.d.ts.map +0 -1
  259. package/dist/unstable-core-do-not-import/http/batchStreamFormatter.js +0 -32
  260. package/dist/unstable-core-do-not-import/http/batchStreamFormatter.mjs +0 -30
  261. package/dist/unstable-core-do-not-import/http/toURL.d.ts +0 -2
  262. package/dist/unstable-core-do-not-import/http/toURL.d.ts.map +0 -1
  263. package/dist/unstable-core-do-not-import/http/toURL.js +0 -8
  264. package/dist/unstable-core-do-not-import/http/toURL.mjs +0 -6
  265. package/dist/unstable-core-do-not-import/stream/utils/createReadableStream.d.ts +0 -10
  266. package/dist/unstable-core-do-not-import/stream/utils/createReadableStream.d.ts.map +0 -1
  267. package/dist/unstable-core-do-not-import/stream/utils/createReadableStream.js +0 -31
  268. package/dist/unstable-core-do-not-import/stream/utils/createReadableStream.mjs +0 -29
  269. package/dist/unstable-core-do-not-import/stream/utils/createServer.d.ts +0 -7
  270. package/dist/unstable-core-do-not-import/stream/utils/createServer.d.ts.map +0 -1
  271. package/dist/unstable-core-do-not-import/types.js +0 -11
  272. package/dist/unstable-core-do-not-import/types.mjs +0 -9
  273. package/src/unstable-core-do-not-import/http/batchStreamFormatter.ts +0 -29
  274. package/src/unstable-core-do-not-import/http/toURL.ts +0 -7
  275. package/src/unstable-core-do-not-import/stream/utils/createReadableStream.ts +0 -31
  276. package/src/unstable-core-do-not-import/stream/utils/createServer.ts +0 -44
@@ -1,230 +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
- const ASYNC_ITERABLE_STATUS_DONE = 0;
12
- const ASYNC_ITERABLE_STATUS_VALUE = 1;
92
+ const ASYNC_ITERABLE_STATUS_RETURN = 0;
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_DONE
117
- ]);
118
- 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;
119
217
  }
120
- stream.controller.enqueue([
121
- idx,
122
- ASYNC_ITERABLE_STATUS_VALUE,
123
- dehydrate(next.value, path)
124
- ]);
125
- }
126
- pending.delete(idx);
127
- maybeClose();
128
- }).catch((cause)=>{
129
- // this shouldn't happen, but node crashes if we don't catch it
130
- opts.onError?.({
131
- 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
132
- // @ts-ignore https://github.com/tc39/proposal-error-cause
133
- {
134
- cause
135
- }),
136
- path
137
218
  });
138
- });
139
- return idx;
140
- }
141
- function checkMaxDepth(path) {
142
- if (opts.maxDepth && path.length > opts.maxDepth) {
143
- return new MaxDepthError(path);
144
219
  }
145
- return null;
146
- }
147
- function dehydrateChunk(value, path) {
148
- if (isPromise(value)) {
149
- return [
150
- CHUNK_VALUE_TYPE_PROMISE,
151
- dehydratePromise(value, path)
152
- ];
220
+ function checkMaxDepth(path) {
221
+ if (opts.maxDepth && path.length > opts.maxDepth) {
222
+ return new MaxDepthError(path);
223
+ }
224
+ return null;
153
225
  }
154
- if (isAsyncIterable(value)) {
155
- if (opts.maxDepth && path.length >= opts.maxDepth) {
156
- 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
+ ];
157
232
  }
158
- return [
159
- CHUNK_VALUE_TYPE_ASYNC_ITERABLE,
160
- dehydrateAsyncIterable(value, path)
161
- ];
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;
162
243
  }
163
- return null;
164
- }
165
- function dehydrate(value, path) {
166
- const reg = dehydrateChunk(value, path);
167
- 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
+ }
168
286
  return [
169
287
  [
170
- placeholder
288
+ newObj
171
289
  ],
172
- [
173
- null,
174
- ...reg
175
- ]
290
+ ...asyncValues
176
291
  ];
177
292
  }
178
- if (!isObject(value)) {
179
- return [
180
- [
181
- value
182
- ]
183
- ];
184
- }
185
- const newObj = {};
186
- const asyncValues = [];
187
- for (const [key, item] of Object.entries(value)){
188
- const transformed = dehydrateChunk(item, [
189
- ...path,
293
+ const newHead = {};
294
+ for (const [key, item] of Object.entries(data)){
295
+ newHead[key] = encode(item, [
190
296
  key
191
297
  ]);
192
- if (!transformed) {
193
- newObj[key] = item;
194
- 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);
195
313
  }
196
- newObj[key] = placeholder;
197
- asyncValues.push([
198
- key,
199
- ...transformed
200
- ]);
201
314
  }
202
- return [
203
- [
204
- newObj
205
- ],
206
- ...asyncValues
207
- ];
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;
208
321
  }
209
- const newHead = {};
210
- for (const [key, item] of Object.entries(data)){
211
- newHead[key] = dehydrate(item, [
212
- key
213
- ]);
214
- }
215
- return [
216
- newHead,
217
- stream.readable
218
- ];
219
322
  }
220
323
  /**
221
324
  * JSON Lines stream producer
222
325
  * @see https://jsonlines.org/
223
326
  */ function jsonlStreamProducer(opts) {
224
- let [head, stream] = createBatchStreamProducer(opts);
225
- const { serialize } = opts;
327
+ let stream = readableStreamFrom(createBatchStreamProducer(opts));
328
+ const { serialize } = opts;
226
329
  if (serialize) {
227
- head = serialize(head);
228
330
  stream = stream.pipeThrough(new TransformStream({
229
331
  transform (chunk, controller) {
230
332
  controller.enqueue(serialize(chunk));
@@ -232,9 +334,6 @@ function createBatchStreamProducer(opts) {
232
334
  }));
233
335
  }
234
336
  return stream.pipeThrough(new TransformStream({
235
- start (controller) {
236
- controller.enqueue(JSON.stringify(head) + '\n');
237
- },
238
337
  transform (chunk, controller) {
239
338
  controller.enqueue(JSON.stringify(chunk) + '\n');
240
339
  }
@@ -251,24 +350,26 @@ class StreamInterruptedError extends Error {
251
350
  }
252
351
  class AsyncError extends Error {
253
352
  constructor(data){
254
- super('Received error from server');
255
- this.data = data;
353
+ super('Received error from server'), _define_property(this, "data", void 0), this.data = data;
256
354
  }
257
355
  }
258
356
  const nodeJsStreamToReaderEsque = (source)=>{
259
357
  return {
260
358
  getReader () {
261
- const { readable , controller } = createReadableStream();
262
- source.on('data', (chunk)=>{
263
- controller.enqueue(chunk);
264
- });
265
- source.on('end', ()=>{
266
- controller.close();
267
- });
268
- source.on('error', (error)=>{
269
- 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
+ }
270
371
  });
271
- return readable.getReader();
372
+ return stream.getReader();
272
373
  }
273
374
  };
274
375
  };
@@ -277,7 +378,7 @@ function createLineAccumulator(from) {
277
378
  let lineAggregate = '';
278
379
  return new ReadableStream({
279
380
  async pull (controller) {
280
- const { done , value } = await reader.read();
381
+ const { done, value } = await reader.read();
281
382
  if (done) {
282
383
  controller.close();
283
384
  } else {
@@ -314,11 +415,84 @@ function createConsumerStream(from) {
314
415
  }
315
416
  }));
316
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
+ }
317
491
  /**
318
492
  * JSON Lines stream consumer
319
493
  * @see https://jsonlines.org/
320
494
  */ async function jsonlStreamConsumer(opts) {
321
- const { deserialize =(v)=>v } = opts;
495
+ const { deserialize = (v)=>v } = opts;
322
496
  let source = createConsumerStream(opts.from);
323
497
  if (deserialize) {
324
498
  source = source.pipeThrough(new TransformStream({
@@ -328,149 +502,105 @@ function createConsumerStream(from) {
328
502
  }));
329
503
  }
330
504
  let headDeferred = createDeferred();
331
- const chunkDeferred = new Map();
332
- const controllers = new Map();
333
- const maybeAbort = ()=>{
334
- if (chunkDeferred.size === 0 && Array.from(controllers.values()).every((it)=>it.returned)) {
335
- // nothing is listening to the stream anymore
336
- opts.abortController?.abort();
337
- }
338
- };
339
- function hydrateChunkDefinition(value) {
505
+ const streamManager = createStreamsManager(opts.abortController);
506
+ function decodeChunkDefinition(value) {
340
507
  const [_path, type, chunkId] = value;
341
- const { readable , controller } = createReadableStream();
342
- const wrapper = {
343
- controller,
344
- returned: false
345
- };
346
- controllers.set(chunkId, wrapper);
347
- // resolve chunk deferred if it exists
348
- const deferred = chunkDeferred.get(chunkId);
349
- if (deferred) {
350
- deferred.resolve(wrapper);
351
- chunkDeferred.delete(chunkId);
352
- }
508
+ const controller = streamManager.getOrCreate(chunkId);
353
509
  switch(type){
354
510
  case CHUNK_VALUE_TYPE_PROMISE:
355
511
  {
356
- return new Promise((resolve, reject)=>{
357
- // listen for next value in the stream
358
- const reader = readable.getReader();
359
- reader.read().then((it)=>{
360
- if (it.done) {
361
- reject(new Error('Promise chunk ended without value'));
362
- return;
363
- }
364
- if (it.value instanceof StreamInterruptedError) {
365
- reject(it.value);
366
- 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;
367
524
  }
368
- const value = it.value;
369
525
  const [_chunkId, status, data] = value;
370
526
  switch(status){
371
527
  case PROMISE_STATUS_FULFILLED:
372
- resolve(hydrate(data));
373
- break;
528
+ return decode(data);
374
529
  case PROMISE_STATUS_REJECTED:
375
- reject(opts.formatError?.({
530
+ throw opts.formatError?.({
376
531
  error: data
377
- }) ?? new AsyncError(data));
378
- break;
532
+ }) ?? new AsyncError(data);
379
533
  }
380
- }).catch(reject).finally(()=>{
381
- // reader.releaseLock();
382
- controllers.delete(chunkId);
383
- maybeAbort();
384
- });
534
+ } catch (e) {
535
+ env.error = e;
536
+ env.hasError = true;
537
+ } finally{
538
+ _ts_dispose_resources(env);
539
+ }
385
540
  });
386
541
  }
387
542
  case CHUNK_VALUE_TYPE_ASYNC_ITERABLE:
388
543
  {
389
- return {
390
- [Symbol.asyncIterator]: ()=>{
391
- const reader = readable.getReader();
392
- const iterator = {
393
- next: async ()=>{
394
- const { done , value } = await reader.read();
395
- if (value instanceof StreamInterruptedError) {
396
- throw value;
397
- }
398
- if (done) {
399
- controllers.delete(chunkId);
400
- maybeAbort();
401
- return {
402
- done: true,
403
- value: undefined
404
- };
405
- }
406
- const [_chunkId, status, data] = value;
407
- switch(status){
408
- case ASYNC_ITERABLE_STATUS_VALUE:
409
- return {
410
- done: false,
411
- value: hydrate(data)
412
- };
413
- case ASYNC_ITERABLE_STATUS_DONE:
414
- controllers.delete(chunkId);
415
- maybeAbort();
416
- return {
417
- done: true,
418
- value: undefined
419
- };
420
- case ASYNC_ITERABLE_STATUS_ERROR:
421
- controllers.delete(chunkId);
422
- maybeAbort();
423
- throw opts.formatError?.({
424
- error: data
425
- }) ?? new AsyncError(data);
426
- }
427
- },
428
- return: async ()=>{
429
- wrapper.returned = true;
430
- maybeAbort();
431
- return {
432
- done: true,
433
- value: undefined
434
- };
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;
435
557
  }
436
- };
437
- 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);
438
576
  }
439
- };
577
+ });
440
578
  }
441
579
  }
442
580
  }
443
- function hydrate(value) {
581
+ function decode(value) {
444
582
  const [[data], ...asyncProps] = value;
445
- for (const value1 of asyncProps){
446
- const [key] = value1;
447
- const hydrated = hydrateChunkDefinition(value1);
583
+ for (const value of asyncProps){
584
+ const [key] = value;
585
+ const decoded = decodeChunkDefinition(value);
448
586
  if (key === null) {
449
- return hydrated;
587
+ return decoded;
450
588
  }
451
- data[key] = hydrated;
589
+ data[key] = decoded;
452
590
  }
453
591
  return data;
454
592
  }
455
593
  const closeOrAbort = (reason)=>{
456
594
  const error = new StreamInterruptedError(reason);
457
595
  headDeferred?.reject(error);
458
- for (const deferred of chunkDeferred.values()){
459
- deferred.reject(error);
460
- }
461
- chunkDeferred.clear();
462
- for (const { controller } of controllers.values()){
463
- controller.enqueue(error);
464
- controller.close();
465
- }
466
- controllers.clear();
596
+ streamManager.cancelAll(error);
467
597
  };
468
598
  source.pipeTo(new WritableStream({
469
- async write (chunkOrHead) {
599
+ write (chunkOrHead) {
470
600
  if (headDeferred) {
471
601
  const head = chunkOrHead;
472
602
  for (const [key, value] of Object.entries(chunkOrHead)){
473
- const parsed = hydrate(value);
603
+ const parsed = decode(value);
474
604
  head[key] = parsed;
475
605
  }
476
606
  headDeferred.resolve(head);
@@ -479,20 +609,14 @@ function createConsumerStream(from) {
479
609
  }
480
610
  const chunk = chunkOrHead;
481
611
  const [idx] = chunk;
482
- let wrapper = controllers.get(idx);
483
- if (!wrapper) {
484
- let deferred = chunkDeferred.get(idx);
485
- if (!deferred) {
486
- deferred = createDeferred();
487
- chunkDeferred.set(idx, deferred);
488
- }
489
- wrapper = await deferred.promise;
490
- }
491
- wrapper.controller.enqueue(chunk);
612
+ const controller = streamManager.getOrCreate(idx);
613
+ controller.enqueue(chunk);
492
614
  },
493
615
  close: closeOrAbort,
494
616
  abort: closeOrAbort
495
- })).catch((error)=>{
617
+ }), {
618
+ signal: opts.abortController.signal
619
+ }).catch((error)=>{
496
620
  opts.onError?.({
497
621
  error
498
622
  });
@@ -500,9 +624,7 @@ function createConsumerStream(from) {
500
624
  });
501
625
  return [
502
626
  await headDeferred.promise,
503
- {
504
- controllers
505
- }
627
+ streamManager
506
628
  ];
507
629
  }
508
630