@trpc/server 10.0.0-alpha.4 → 10.0.0-alpha.40

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 (340) hide show
  1. package/README.md +79 -1
  2. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.d.ts +1 -0
  3. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.dev.js +190 -0
  4. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.js +7 -0
  5. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.prod.js +190 -0
  6. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.esm.js +186 -0
  7. package/adapters/aws-lambda/index.d.ts +1 -0
  8. package/adapters/aws-lambda/index.js +1 -0
  9. package/adapters/express/dist/trpc-server-adapters-express.cjs.dev.js +7 -6
  10. package/adapters/express/dist/trpc-server-adapters-express.cjs.prod.js +7 -6
  11. package/adapters/express/dist/trpc-server-adapters-express.esm.js +7 -6
  12. package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.d.ts +1 -0
  13. package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.dev.js +109 -0
  14. package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.js +7 -0
  15. package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.prod.js +109 -0
  16. package/adapters/fastify/dist/trpc-server-adapters-fastify.esm.js +104 -0
  17. package/adapters/fastify/index.d.ts +1 -0
  18. package/adapters/fastify/index.js +1 -0
  19. package/adapters/fetch/index.d.ts +1 -0
  20. package/adapters/fetch/index.js +1 -0
  21. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.d.ts +1 -0
  22. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.dev.js +25 -0
  23. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.js +7 -0
  24. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.prod.js +25 -0
  25. package/adapters/lambda/dist/trpc-server-adapters-lambda.esm.js +21 -0
  26. package/adapters/next/dist/trpc-server-adapters-next.cjs.dev.js +4 -3
  27. package/adapters/next/dist/trpc-server-adapters-next.cjs.prod.js +4 -3
  28. package/adapters/next/dist/trpc-server-adapters-next.esm.js +4 -3
  29. package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.dev.js +4 -3
  30. package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.prod.js +4 -3
  31. package/adapters/node-http/dist/trpc-server-adapters-node-http.esm.js +4 -3
  32. package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.dev.js +5 -4
  33. package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.prod.js +5 -4
  34. package/adapters/standalone/dist/trpc-server-adapters-standalone.esm.js +5 -4
  35. package/adapters/ws/dist/trpc-server-adapters-ws.cjs.dev.js +6 -5
  36. package/adapters/ws/dist/trpc-server-adapters-ws.cjs.prod.js +6 -5
  37. package/adapters/ws/dist/trpc-server-adapters-ws.esm.js +6 -5
  38. package/dist/TRPCError-9050a68d.js +69 -0
  39. package/dist/TRPCError-b7fa0c31.mjs +65 -0
  40. package/dist/adapters/aws-lambda/index.d.ts +14 -0
  41. package/dist/adapters/aws-lambda/index.d.ts.map +1 -0
  42. package/dist/adapters/aws-lambda/utils.d.ts +35 -0
  43. package/dist/adapters/aws-lambda/utils.d.ts.map +1 -0
  44. package/dist/adapters/express.d.ts +1 -1
  45. package/dist/adapters/express.d.ts.map +1 -1
  46. package/dist/adapters/express.js +8 -7
  47. package/dist/adapters/express.mjs +8 -7
  48. package/dist/adapters/fastify/fastifyRequestHandler.d.ts +13 -0
  49. package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -0
  50. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +12 -0
  51. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -0
  52. package/dist/adapters/fastify/index.d.ts +3 -0
  53. package/dist/adapters/fastify/index.d.ts.map +1 -0
  54. package/dist/adapters/fastify/index.js +108 -0
  55. package/dist/adapters/fastify/index.mjs +103 -0
  56. package/dist/{ws → adapters/fastify}/index.ts.js +0 -0
  57. package/dist/adapters/fetch/fetchRequestHandler.d.ts +8 -0
  58. package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -0
  59. package/dist/adapters/fetch/index.d.ts +3 -0
  60. package/dist/adapters/fetch/index.d.ts.map +1 -0
  61. package/dist/adapters/fetch/index.js +69 -0
  62. package/dist/adapters/fetch/index.mjs +65 -0
  63. package/dist/adapters/fetch/index.ts.js +1 -0
  64. package/dist/adapters/fetch/types.d.ts +21 -0
  65. package/dist/adapters/fetch/types.d.ts.map +1 -0
  66. package/dist/adapters/lambda/index.d.ts +12 -0
  67. package/dist/adapters/lambda/index.d.ts.map +1 -0
  68. package/dist/adapters/next.d.ts +2 -2
  69. package/dist/adapters/next.d.ts.map +1 -1
  70. package/dist/adapters/next.js +9 -9
  71. package/dist/adapters/next.mjs +8 -8
  72. package/dist/adapters/node-http/index.js +5 -4
  73. package/dist/adapters/node-http/index.mjs +5 -4
  74. package/dist/adapters/node-http/internals/getPostBody.d.ts +1 -1
  75. package/dist/adapters/node-http/internals/getPostBody.d.ts.map +1 -1
  76. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts +2 -2
  77. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
  78. package/dist/adapters/node-http/types.d.ts +11 -9
  79. package/dist/adapters/node-http/types.d.ts.map +1 -1
  80. package/dist/adapters/standalone.d.ts +2 -2
  81. package/dist/adapters/standalone.d.ts.map +1 -1
  82. package/dist/adapters/standalone.js +11 -7
  83. package/dist/adapters/standalone.mjs +11 -6
  84. package/dist/adapters/ws.d.ts +8 -6
  85. package/dist/adapters/ws.d.ts.map +1 -1
  86. package/dist/adapters/ws.js +123 -90
  87. package/dist/adapters/ws.mjs +118 -85
  88. package/dist/assertNotBrowser.d.ts.map +1 -1
  89. package/dist/core/index.d.ts +6 -0
  90. package/dist/core/index.d.ts.map +1 -0
  91. package/dist/core/initTRPC.d.ts +87 -0
  92. package/dist/core/initTRPC.d.ts.map +1 -0
  93. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts +282 -0
  94. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts.map +1 -0
  95. package/dist/core/internals/config.d.ts +36 -0
  96. package/dist/core/internals/config.d.ts.map +1 -0
  97. package/dist/core/internals/getParseFn.d.ts +9 -0
  98. package/dist/core/internals/getParseFn.d.ts.map +1 -0
  99. package/dist/core/internals/mergeRouters.d.ts +3 -0
  100. package/dist/core/internals/mergeRouters.d.ts.map +1 -0
  101. package/dist/core/internals/mergeWithoutOverrides.d.ts +5 -0
  102. package/dist/core/internals/mergeWithoutOverrides.d.ts.map +1 -0
  103. package/dist/core/internals/omitPrototype.d.ts +6 -0
  104. package/dist/core/internals/omitPrototype.d.ts.map +1 -0
  105. package/dist/core/internals/prefixObjectKeys.d.ts +2 -0
  106. package/dist/core/internals/prefixObjectKeys.d.ts.map +1 -0
  107. package/dist/core/internals/procedureBuilder.d.ts +127 -0
  108. package/dist/core/internals/procedureBuilder.d.ts.map +1 -0
  109. package/dist/core/internals/utils.d.ts +44 -0
  110. package/dist/core/internals/utils.d.ts.map +1 -0
  111. package/dist/core/middleware.d.ts +87 -0
  112. package/dist/core/middleware.d.ts.map +1 -0
  113. package/dist/core/parser.d.ts +25 -0
  114. package/dist/core/parser.d.ts.map +1 -0
  115. package/dist/core/procedure.d.ts +84 -0
  116. package/dist/core/procedure.d.ts.map +1 -0
  117. package/dist/core/router.d.ts +128 -0
  118. package/dist/core/router.d.ts.map +1 -0
  119. package/dist/core/types.d.ts +19 -0
  120. package/dist/core/types.d.ts.map +1 -0
  121. package/dist/{internals → deprecated/internals}/callProcedure.d.ts +5 -2
  122. package/dist/deprecated/internals/callProcedure.d.ts.map +1 -0
  123. package/dist/{internals → deprecated/internals}/middlewares.d.ts +21 -3
  124. package/dist/deprecated/internals/middlewares.d.ts.map +1 -0
  125. package/dist/deprecated/internals/procedure.d.ts +96 -0
  126. package/dist/deprecated/internals/procedure.d.ts.map +1 -0
  127. package/dist/deprecated/interop.d.ts +34 -0
  128. package/dist/deprecated/interop.d.ts.map +1 -0
  129. package/dist/deprecated/router.d.ts +194 -0
  130. package/dist/deprecated/router.d.ts.map +1 -0
  131. package/dist/{codes-7a3d4f65.mjs → envelopes-af8c2959.mjs} +30 -1
  132. package/dist/{codes-7f46544e.js → envelopes-b6dd0367.js} +29 -1
  133. package/dist/error/TRPCError.d.ts +11 -0
  134. package/dist/error/TRPCError.d.ts.map +1 -0
  135. package/dist/error/formatter.d.ts +33 -0
  136. package/dist/error/formatter.d.ts.map +1 -0
  137. package/dist/{internals/errors.d.ts → error/utils.d.ts} +3 -2
  138. package/dist/error/utils.d.ts.map +1 -0
  139. package/dist/http/index.d.ts +1 -1
  140. package/dist/http/index.d.ts.map +1 -1
  141. package/dist/http/internals/getHTTPStatusCode.d.ts +2 -1
  142. package/dist/http/internals/getHTTPStatusCode.d.ts.map +1 -1
  143. package/dist/http/internals/types.d.ts +11 -8
  144. package/dist/http/internals/types.d.ts.map +1 -1
  145. package/dist/http/resolveHTTPResponse.d.ts +4 -4
  146. package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
  147. package/dist/http/{ResponseMeta.d.ts → types.d.ts} +1 -1
  148. package/dist/http/types.d.ts.map +1 -0
  149. package/dist/index-1a25ccbd.js +33 -0
  150. package/dist/index-a3bd54c7.mjs +31 -0
  151. package/dist/index.d.ts +4 -5
  152. package/dist/index.d.ts.map +1 -1
  153. package/dist/index.js +798 -108
  154. package/dist/index.mjs +785 -93
  155. package/dist/internals/transformTRPCResponse.d.ts +5 -3
  156. package/dist/internals/transformTRPCResponse.d.ts.map +1 -1
  157. package/dist/internals/types.d.ts +23 -0
  158. package/dist/internals/types.d.ts.map +1 -0
  159. package/dist/internals.d.ts +11 -0
  160. package/dist/internals.d.ts.map +1 -0
  161. package/dist/nodeHTTPRequestHandler-174459c5.mjs +105 -0
  162. package/dist/nodeHTTPRequestHandler-6b7c8622.js +107 -0
  163. package/dist/observable/index.d.ts +5 -0
  164. package/dist/observable/index.d.ts.map +1 -0
  165. package/dist/observable/index.js +204 -0
  166. package/dist/observable/index.mjs +195 -0
  167. package/dist/observable/index.ts.js +1 -0
  168. package/dist/observable/internals/identity.d.ts +2 -0
  169. package/dist/observable/internals/identity.d.ts.map +1 -0
  170. package/dist/observable/internals/observableToPromise.d.ts +10 -0
  171. package/dist/observable/internals/observableToPromise.d.ts.map +1 -0
  172. package/dist/observable/internals/pipe.d.ts +4 -0
  173. package/dist/observable/internals/pipe.d.ts.map +1 -0
  174. package/dist/observable/observable.d.ts +5 -0
  175. package/dist/observable/observable.d.ts.map +1 -0
  176. package/dist/observable/operators/index.d.ts +4 -0
  177. package/dist/observable/operators/index.d.ts.map +1 -0
  178. package/dist/observable/operators/map.d.ts +3 -0
  179. package/dist/observable/operators/map.d.ts.map +1 -0
  180. package/dist/observable/operators/share.d.ts +6 -0
  181. package/dist/observable/operators/share.d.ts.map +1 -0
  182. package/dist/observable/operators/tap.d.ts +3 -0
  183. package/dist/observable/operators/tap.d.ts.map +1 -0
  184. package/dist/observable/types.d.ts +29 -0
  185. package/dist/observable/types.d.ts.map +1 -0
  186. package/dist/observable-341a0506.js +109 -0
  187. package/dist/observable-cfedfa30.mjs +106 -0
  188. package/dist/{nodeHTTPRequestHandler-10e6d2f9.mjs → resolveHTTPResponse-8657b8de.mjs} +32 -133
  189. package/dist/{nodeHTTPRequestHandler-d7c307d3.js → resolveHTTPResponse-fcc8f644.js} +37 -139
  190. package/dist/rpc/codes.d.ts +2 -0
  191. package/dist/rpc/codes.d.ts.map +1 -1
  192. package/dist/rpc/envelopes.d.ts +62 -40
  193. package/dist/rpc/envelopes.d.ts.map +1 -1
  194. package/dist/rpc/index.js +7 -3
  195. package/dist/rpc/index.mjs +1 -1
  196. package/dist/rpc/internals/invert.d.ts +18 -0
  197. package/dist/rpc/internals/invert.d.ts.map +1 -0
  198. package/dist/shared/createProxy/index.d.ts +12 -0
  199. package/dist/shared/createProxy/index.d.ts.map +1 -0
  200. package/dist/shared/index.d.ts +2 -0
  201. package/dist/shared/index.d.ts.map +1 -0
  202. package/dist/shared/index.js +9 -0
  203. package/dist/shared/index.mjs +1 -0
  204. package/dist/shared/index.ts.js +1 -0
  205. package/dist/subscription.d.ts +3 -52
  206. package/dist/subscription.d.ts.map +1 -1
  207. package/dist/subscription.js +44 -0
  208. package/dist/subscription.mjs +40 -0
  209. package/dist/subscription.ts.js +1 -0
  210. package/dist/transformTRPCResponse-0c261655.js +29 -0
  211. package/dist/transformTRPCResponse-747b9a68.mjs +27 -0
  212. package/dist/transformer.d.ts +14 -0
  213. package/dist/transformer.d.ts.map +1 -1
  214. package/dist/types.d.ts +35 -8
  215. package/dist/types.d.ts.map +1 -1
  216. package/observable/index.d.ts +1 -0
  217. package/observable/index.js +1 -0
  218. package/package.json +56 -16
  219. package/rpc/dist/trpc-server-rpc.cjs.dev.js +1 -1
  220. package/rpc/dist/trpc-server-rpc.cjs.prod.js +1 -1
  221. package/rpc/dist/trpc-server-rpc.esm.js +1 -1
  222. package/shared/index.d.ts +1 -0
  223. package/shared/index.js +1 -0
  224. package/src/adapters/aws-lambda/index.ts +173 -0
  225. package/src/adapters/aws-lambda/utils.ts +92 -0
  226. package/src/adapters/express.ts +4 -4
  227. package/src/adapters/fastify/fastifyRequestHandler.ts +77 -0
  228. package/src/adapters/fastify/fastifyTRPCPlugin.ts +56 -0
  229. package/src/adapters/fastify/index.ts +2 -0
  230. package/src/adapters/fetch/fetchRequestHandler.ts +61 -0
  231. package/src/adapters/fetch/index.ts +2 -0
  232. package/src/adapters/fetch/types.ts +28 -0
  233. package/src/adapters/lambda/index.ts +18 -0
  234. package/src/adapters/next.ts +10 -8
  235. package/src/adapters/node-http/internals/getPostBody.test.ts +2 -1
  236. package/src/adapters/node-http/internals/getPostBody.ts +1 -1
  237. package/src/adapters/node-http/nodeHTTPRequestHandler.ts +7 -7
  238. package/src/adapters/node-http/types.ts +11 -9
  239. package/src/adapters/standalone.ts +12 -4
  240. package/src/adapters/ws.ts +135 -91
  241. package/src/assertNotBrowser.ts +1 -0
  242. package/src/core/index.ts +6 -0
  243. package/src/core/initTRPC.ts +95 -0
  244. package/src/core/internals/__generated__/mergeRoutersGeneric.ts +386 -0
  245. package/src/core/internals/config.ts +43 -0
  246. package/src/core/internals/getParseFn.ts +47 -0
  247. package/src/core/internals/mergeRouters.ts +45 -0
  248. package/src/core/internals/mergeWithoutOverrides.ts +19 -0
  249. package/src/core/internals/omitPrototype.ts +9 -0
  250. package/src/core/internals/prefixObjectKeys.ts +9 -0
  251. package/src/core/internals/procedureBuilder.ts +420 -0
  252. package/src/core/internals/utils.ts +64 -0
  253. package/src/core/middleware.ts +96 -0
  254. package/src/core/parser.ts +45 -0
  255. package/src/core/procedure.ts +115 -0
  256. package/src/core/router.ts +366 -0
  257. package/src/core/types.ts +58 -0
  258. package/src/{internals → deprecated/internals}/callProcedure.ts +9 -3
  259. package/src/{internals → deprecated/internals}/middlewares.ts +23 -3
  260. package/src/deprecated/internals/procedure.ts +415 -0
  261. package/src/deprecated/interop.ts +229 -0
  262. package/src/{router.ts → deprecated/router.ts} +219 -104
  263. package/src/{TRPCError.ts → error/TRPCError.ts} +6 -14
  264. package/src/error/formatter.ts +51 -0
  265. package/src/{internals/errors.ts → error/utils.ts} +21 -5
  266. package/src/http/index.ts +1 -1
  267. package/src/http/internals/getHTTPStatusCode.ts +3 -2
  268. package/src/http/internals/types.ts +11 -14
  269. package/src/http/resolveHTTPResponse.ts +29 -38
  270. package/src/http/{ResponseMeta.ts → types.ts} +0 -0
  271. package/src/index.ts +4 -7
  272. package/src/internals/transformTRPCResponse.ts +21 -16
  273. package/src/internals/types.ts +24 -0
  274. package/src/internals.ts +14 -0
  275. package/src/observable/index.ts +4 -0
  276. package/src/observable/internals/identity.ts +3 -0
  277. package/src/observable/internals/observableToPromise.ts +49 -0
  278. package/src/observable/internals/pipe.ts +23 -0
  279. package/src/observable/observable.test.ts +101 -0
  280. package/src/observable/observable.ts +78 -0
  281. package/src/observable/operators/index.ts +3 -0
  282. package/src/observable/operators/map.test.ts +92 -0
  283. package/src/observable/operators/map.ts +25 -0
  284. package/src/observable/operators/share.test.ts +60 -0
  285. package/src/observable/operators/share.ts +67 -0
  286. package/src/observable/operators/tap.ts +26 -0
  287. package/src/observable/types.ts +69 -0
  288. package/src/rpc/codes.ts +2 -1
  289. package/src/rpc/envelopes.ts +88 -69
  290. package/src/rpc/internals/invert.ts +27 -0
  291. package/src/shared/createProxy/index.ts +38 -0
  292. package/src/shared/index.ts +1 -0
  293. package/src/subscription.ts +7 -125
  294. package/src/transformer.ts +28 -0
  295. package/src/types.ts +40 -9
  296. package/dist/TRPCError.d.ts +0 -19
  297. package/dist/TRPCError.d.ts.map +0 -1
  298. package/dist/deprecated/LegacyRouter.d.ts +0 -3
  299. package/dist/deprecated/LegacyRouter.d.ts.map +0 -1
  300. package/dist/deprecated/createHttpServer.d.ts +0 -19
  301. package/dist/deprecated/createHttpServer.d.ts.map +0 -1
  302. package/dist/deprecated/requestHandler.d.ts +0 -15
  303. package/dist/deprecated/requestHandler.d.ts.map +0 -1
  304. package/dist/http/ResponseMeta.d.ts.map +0 -1
  305. package/dist/internals/BaseHandlerOptions.d.ts +0 -13
  306. package/dist/internals/BaseHandlerOptions.d.ts.map +0 -1
  307. package/dist/internals/OnErrorFunction.d.ts +0 -11
  308. package/dist/internals/OnErrorFunction.d.ts.map +0 -1
  309. package/dist/internals/callProcedure.d.ts.map +0 -1
  310. package/dist/internals/errors.d.ts.map +0 -1
  311. package/dist/internals/middlewares.d.ts.map +0 -1
  312. package/dist/internals/procedure.d.ts +0 -74
  313. package/dist/internals/procedure.d.ts.map +0 -1
  314. package/dist/internals/wrapCallSafe.d.ts +0 -16
  315. package/dist/internals/wrapCallSafe.d.ts.map +0 -1
  316. package/dist/router.d.ts +0 -176
  317. package/dist/router.d.ts.map +0 -1
  318. package/dist/subscription-5b7e1eba.js +0 -136
  319. package/dist/subscription-e1d42e69.mjs +0 -133
  320. package/dist/transformTRPCResponse-76e0c91e.mjs +0 -109
  321. package/dist/transformTRPCResponse-bd24f548.js +0 -114
  322. package/dist/ws/index.d.ts +0 -7
  323. package/dist/ws/index.d.ts.map +0 -1
  324. package/dist/ws/index.js +0 -15
  325. package/dist/ws/index.mjs +0 -11
  326. package/src/deprecated/LegacyRouter.ts +0 -3
  327. package/src/deprecated/createHttpServer.ts +0 -29
  328. package/src/deprecated/requestHandler.ts +0 -26
  329. package/src/internals/BaseHandlerOptions.ts +0 -13
  330. package/src/internals/OnErrorFunction.ts +0 -11
  331. package/src/internals/procedure.ts +0 -283
  332. package/src/internals/wrapCallSafe.ts +0 -19
  333. package/src/ws/index.ts +0 -8
  334. package/ws/dist/trpc-server-ws.cjs.d.ts +0 -1
  335. package/ws/dist/trpc-server-ws.cjs.dev.js +0 -15
  336. package/ws/dist/trpc-server-ws.cjs.js +0 -7
  337. package/ws/dist/trpc-server-ws.cjs.prod.js +0 -15
  338. package/ws/dist/trpc-server-ws.esm.js +0 -11
  339. package/ws/index.d.ts +0 -1
  340. package/ws/index.js +0 -1
@@ -1,20 +1,22 @@
1
- import http from 'http';
1
+ import { IncomingMessage } from 'http';
2
2
  import ws from 'ws';
3
- import { BaseHandlerOptions } from '../internals/BaseHandlerOptions';
4
- import { callProcedure } from '../internals/callProcedure';
5
- import { getErrorFromUnknown } from '../internals/errors';
3
+ import { AnyRouter, ProcedureType, inferRouterContext } from '../core';
4
+ import { TRPCError } from '../error/TRPCError';
5
+ import { getCauseFromUnknown, getErrorFromUnknown } from '../error/utils';
6
6
  import { transformTRPCResponse } from '../internals/transformTRPCResponse';
7
- import { AnyRouter, inferRouterContext, ProcedureType } from '../router';
7
+ import { BaseHandlerOptions } from '../internals/types';
8
+ import { Unsubscribable, isObservable } from '../observable';
8
9
  import {
9
- TRPCErrorResponse,
10
+ JSONRPC2,
11
+ TRPCClientOutgoingMessage,
10
12
  TRPCReconnectNotification,
11
- TRPCRequest,
12
- TRPCResponse,
13
+ TRPCResponseMessage,
13
14
  } from '../rpc';
14
- import { Subscription } from '../subscription';
15
15
  import { CombinedDataTransformer } from '../transformer';
16
- import { TRPCError } from '../TRPCError';
17
- import { NodeHTTPCreateContextOption } from './node-http';
16
+ import {
17
+ NodeHTTPCreateContextFnOptions,
18
+ NodeHTTPCreateContextOption,
19
+ } from './node-http';
18
20
 
19
21
  /* istanbul ignore next */
20
22
  function assertIsObject(obj: unknown): asserts obj is Record<string, unknown> {
@@ -58,7 +60,7 @@ function assertIsJSONRPC2OrUndefined(
58
60
  function parseMessage(
59
61
  obj: unknown,
60
62
  transformer: CombinedDataTransformer,
61
- ): TRPCRequest {
63
+ ): TRPCClientOutgoingMessage {
62
64
  assertIsObject(obj);
63
65
  const { method, params, id, jsonrpc } = obj;
64
66
  assertIsRequestId(id);
@@ -66,8 +68,8 @@ function parseMessage(
66
68
  if (method === 'subscription.stop') {
67
69
  return {
68
70
  id,
71
+ jsonrpc,
69
72
  method,
70
- params: undefined,
71
73
  };
72
74
  }
73
75
  assertIsProcedureType(method);
@@ -76,7 +78,15 @@ function parseMessage(
76
78
  const { input: rawInput, path } = params;
77
79
  assertIsString(path);
78
80
  const input = transformer.input.deserialize(rawInput);
79
- return { jsonrpc, id, method, params: { input, path } };
81
+ return {
82
+ id,
83
+ jsonrpc,
84
+ method,
85
+ params: {
86
+ input,
87
+ path,
88
+ },
89
+ };
80
90
  }
81
91
 
82
92
  /**
@@ -84,11 +94,16 @@ function parseMessage(
84
94
  */
85
95
  export type WSSHandlerOptions<TRouter extends AnyRouter> = BaseHandlerOptions<
86
96
  TRouter,
87
- http.IncomingMessage
97
+ IncomingMessage
88
98
  > & {
89
99
  wss: ws.Server;
90
100
  process?: NodeJS.Process;
91
- } & NodeHTTPCreateContextOption<TRouter, http.IncomingMessage, ws>;
101
+ } & NodeHTTPCreateContextOption<TRouter, IncomingMessage, ws>;
102
+
103
+ export type CreateWSSContextFnOptions = NodeHTTPCreateContextFnOptions<
104
+ IncomingMessage,
105
+ ws
106
+ >;
92
107
 
93
108
  export function applyWSSHandler<TRouter extends AnyRouter>(
94
109
  opts: WSSHandlerOptions<TRouter>,
@@ -96,22 +111,35 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
96
111
  const { wss, createContext, router } = opts;
97
112
 
98
113
  const { transformer } = router._def;
99
- wss.on('connection', (client, req) => {
100
- const clientSubscriptions = new Map<
101
- number | string,
102
- Subscription<TRouter>
103
- >();
114
+ wss.on('connection', async (client, req) => {
115
+ const clientSubscriptions = new Map<number | string, Unsubscribable>();
104
116
 
105
- function respond(untransformedJSON: TRPCResponse) {
117
+ function respond(untransformedJSON: TRPCResponseMessage) {
106
118
  client.send(
107
119
  JSON.stringify(transformTRPCResponse(router, untransformedJSON)),
108
120
  );
109
121
  }
122
+
123
+ function stopSubscription(
124
+ subscription: Unsubscribable,
125
+ { id, jsonrpc }: { id: JSONRPC2.RequestId } & JSONRPC2.BaseEnvelope,
126
+ ) {
127
+ subscription.unsubscribe();
128
+
129
+ respond({
130
+ id,
131
+ jsonrpc,
132
+ result: {
133
+ type: 'stopped',
134
+ },
135
+ });
136
+ }
137
+
110
138
  const ctxPromise = createContext?.({ req, res: client });
111
139
  let ctx: inferRouterContext<TRouter> | undefined = undefined;
112
140
 
113
- async function handleRequest(msg: TRPCRequest) {
114
- const { id } = msg;
141
+ async function handleRequest(msg: TRPCClientOutgoingMessage) {
142
+ const { id, jsonrpc } = msg;
115
143
  /* istanbul ignore next */
116
144
  if (id === null) {
117
145
  throw new TRPCError({
@@ -122,7 +150,7 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
122
150
  if (msg.method === 'subscription.stop') {
123
151
  const sub = clientSubscriptions.get(id);
124
152
  if (sub) {
125
- sub.destroy();
153
+ stopSubscription(sub, { id, jsonrpc });
126
154
  }
127
155
  clientSubscriptions.delete(id);
128
156
  return;
@@ -131,17 +159,22 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
131
159
  const type = msg.method;
132
160
  try {
133
161
  await ctxPromise; // asserts context has been set
134
- const result = await callProcedure({
135
- path,
136
- input,
137
- type,
138
- router,
139
- ctx,
140
- });
141
162
 
142
- if (!(result instanceof Subscription)) {
163
+ const caller = router.createCaller(ctx);
164
+ const result = await caller[type](path, input as any);
165
+
166
+ if (type === 'subscription') {
167
+ if (!isObservable(result)) {
168
+ throw new TRPCError({
169
+ message: `Subscription ${path} did not return an observable`,
170
+ code: 'INTERNAL_SERVER_ERROR',
171
+ });
172
+ }
173
+ } else {
174
+ // send the value as data if the method is not a subscription
143
175
  respond({
144
176
  id,
177
+ jsonrpc,
145
178
  result: {
146
179
  type: 'data',
147
180
  data: result,
@@ -150,86 +183,98 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
150
183
  return;
151
184
  }
152
185
 
153
- const sub = result;
186
+ const observable = result;
187
+ const sub = observable.subscribe({
188
+ next(data) {
189
+ respond({
190
+ id,
191
+ jsonrpc,
192
+ result: {
193
+ type: 'data',
194
+ data,
195
+ },
196
+ });
197
+ },
198
+ error(err) {
199
+ const error = getErrorFromUnknown(err);
200
+ opts.onError?.({ error, path, type, ctx, req, input });
201
+ respond({
202
+ id,
203
+ jsonrpc,
204
+ error: router.getErrorShape({
205
+ error,
206
+ type,
207
+ path,
208
+ input,
209
+ ctx,
210
+ }),
211
+ });
212
+ },
213
+ complete() {
214
+ respond({
215
+ id,
216
+ jsonrpc,
217
+ result: {
218
+ type: 'stopped',
219
+ },
220
+ });
221
+ },
222
+ });
154
223
  /* istanbul ignore next */
155
224
  if (client.readyState !== client.OPEN) {
156
225
  // if the client got disconnected whilst initializing the subscription
157
- sub.destroy();
226
+ // no need to send stopped message if the client is disconnected
227
+ sub.unsubscribe();
158
228
  return;
159
229
  }
230
+
160
231
  /* istanbul ignore next */
161
232
  if (clientSubscriptions.has(id)) {
162
233
  // duplicate request ids for client
163
- sub.destroy();
234
+ stopSubscription(sub, { id, jsonrpc });
164
235
  throw new TRPCError({
165
236
  message: `Duplicate id ${id}`,
166
237
  code: 'BAD_REQUEST',
167
238
  });
168
239
  }
169
240
  clientSubscriptions.set(id, sub);
170
- sub.on('data', (data: unknown) => {
171
- respond({
172
- id,
173
- result: {
174
- type: 'data',
175
- data,
176
- },
177
- });
178
- });
179
- sub.on('error', (_error: unknown) => {
180
- const error = getErrorFromUnknown(_error);
181
- const json: TRPCErrorResponse = {
182
- id,
183
- error: router.getErrorShape({
184
- error,
185
- type,
186
- path,
187
- input,
188
- ctx,
189
- }),
190
- };
191
- opts.onError?.({ error, path, type, ctx, req, input });
192
- respond(json);
193
- });
194
- sub.on('destroy', () => {
195
- respond({
196
- id,
197
- result: {
198
- type: 'stopped',
199
- },
200
- });
201
- });
202
241
 
203
242
  respond({
204
243
  id,
244
+ jsonrpc,
205
245
  result: {
206
246
  type: 'started',
207
247
  },
208
248
  });
209
- await sub.start();
210
249
  } catch (cause) /* istanbul ignore next */ {
211
250
  // procedure threw an error
212
251
  const error = getErrorFromUnknown(cause);
213
- const json = router.getErrorShape({
214
- error,
215
- type,
216
- path,
217
- input,
218
- ctx,
219
- });
220
252
  opts.onError?.({ error, path, type, ctx, req, input });
221
- respond({ id, error: json });
253
+ respond({
254
+ id,
255
+ jsonrpc,
256
+ error: router.getErrorShape({
257
+ error,
258
+ type,
259
+ path,
260
+ input,
261
+ ctx,
262
+ }),
263
+ });
222
264
  }
223
265
  }
224
266
  client.on('message', async (message) => {
225
267
  try {
226
268
  const msgJSON: unknown = JSON.parse(message.toString());
227
269
  const msgs: unknown[] = Array.isArray(msgJSON) ? msgJSON : [msgJSON];
228
- msgs.map((raw) => parseMessage(raw, transformer)).map(handleRequest);
270
+ const promises = msgs
271
+ .map((raw) => parseMessage(raw, transformer))
272
+ .map(handleRequest);
273
+ await Promise.all(promises);
229
274
  } catch (cause) {
230
275
  const error = new TRPCError({
231
276
  code: 'PARSE_ERROR',
232
- cause,
277
+ cause: getCauseFromUnknown(cause),
233
278
  });
234
279
 
235
280
  respond({
@@ -247,7 +292,7 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
247
292
 
248
293
  client.once('close', () => {
249
294
  for (const sub of clientSubscriptions.values()) {
250
- sub.destroy();
295
+ sub.unsubscribe();
251
296
  }
252
297
  clientSubscriptions.clear();
253
298
  });
@@ -256,7 +301,15 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
256
301
  ctx = await ctxPromise;
257
302
  } catch (cause) {
258
303
  const error = getErrorFromUnknown(cause);
259
- const json: TRPCErrorResponse = {
304
+ opts.onError?.({
305
+ error,
306
+ path: undefined,
307
+ type: 'unknown',
308
+ ctx,
309
+ req,
310
+ input: undefined,
311
+ });
312
+ respond({
260
313
  id: null,
261
314
  error: router.getErrorShape({
262
315
  error,
@@ -265,16 +318,7 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
265
318
  input: undefined,
266
319
  ctx,
267
320
  }),
268
- };
269
- opts.onError?.({
270
- error,
271
- path: undefined,
272
- type: 'unknown',
273
- ctx,
274
- req,
275
- input: undefined,
276
321
  });
277
- respond(json);
278
322
 
279
323
  // close in next tick
280
324
  (global.setImmediate ?? global.setTimeout)(() => {
@@ -282,7 +326,7 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
282
326
  });
283
327
  }
284
328
  }
285
- createContextAsync();
329
+ await createContextAsync();
286
330
  });
287
331
 
288
332
  return {
@@ -3,6 +3,7 @@
3
3
  export function assertNotBrowser() {
4
4
  if (
5
5
  typeof window !== 'undefined' &&
6
+ !('Deno' in window) &&
6
7
  process.env.NODE_ENV !== 'test' &&
7
8
  process.env.JEST_WORKER_ID === undefined
8
9
  ) {
@@ -0,0 +1,6 @@
1
+ export type { AnyRouter, ProcedureRouterRecord } from './router';
2
+ export { callProcedure } from './router';
3
+ export type { Procedure, ProcedureParams, ProcedureArgs } from './procedure';
4
+
5
+ export { initTRPC } from './initTRPC';
6
+ export * from './types';
@@ -0,0 +1,95 @@
1
+ /* eslint-disable @typescript-eslint/ban-types */
2
+ import { mergeRoutersGeneric } from './internals/__generated__/mergeRoutersGeneric';
3
+ import {
4
+ DefaultErrorShape,
5
+ ErrorFormatter,
6
+ ErrorFormatterShape,
7
+ defaultFormatter,
8
+ } from '../error/formatter';
9
+ import {
10
+ CombinedDataTransformer,
11
+ DataTransformerOptions,
12
+ DefaultDataTransformer,
13
+ defaultTransformer,
14
+ getDataTransformer,
15
+ } from '../transformer';
16
+ import {
17
+ CreateInitGenerics,
18
+ CreateRootConfig,
19
+ InitGenerics,
20
+ InitOptions,
21
+ } from './internals/config';
22
+ import { createBuilder } from './internals/procedureBuilder';
23
+ import { PickFirstDefined, ValidateShape } from './internals/utils';
24
+ import { createMiddlewareFactory } from './middleware';
25
+ import { createRouterFactory } from './router';
26
+
27
+ export function initTRPC<TParams extends Partial<InitGenerics> = {}>() {
28
+ type $Generics = CreateInitGenerics<{
29
+ ctx: TParams['ctx'] extends undefined ? {} : NonNullable<TParams['ctx']>;
30
+ meta: TParams['meta'] extends undefined ? {} : NonNullable<TParams['meta']>;
31
+ }>;
32
+
33
+ type $Context = $Generics['ctx'];
34
+ type $Meta = PickFirstDefined<$Generics['meta'], undefined>;
35
+ type $Options = Partial<InitOptions<$Generics>>;
36
+
37
+ return function initTRPCInner<TOptions extends $Options>(
38
+ options?: ValidateShape<TOptions, $Options>,
39
+ ) {
40
+ type $Formatter = PickFirstDefined<
41
+ TOptions['errorFormatter'],
42
+ ErrorFormatter<$Context, DefaultErrorShape>
43
+ >;
44
+ type $Transformer = TOptions['transformer'] extends DataTransformerOptions
45
+ ? TOptions['transformer'] extends DataTransformerOptions
46
+ ? CombinedDataTransformer
47
+ : DefaultDataTransformer
48
+ : DefaultDataTransformer;
49
+ type $ErrorShape = ErrorFormatterShape<$Formatter>;
50
+
51
+ type $Config = CreateRootConfig<{
52
+ ctx: $Context;
53
+ meta: $Meta;
54
+ errorShape: $ErrorShape;
55
+ transformer: $Transformer;
56
+ }>;
57
+
58
+ const errorFormatter = options?.errorFormatter ?? defaultFormatter;
59
+ const transformer = getDataTransformer(
60
+ options?.transformer ?? defaultTransformer,
61
+ ) as $Transformer;
62
+ const _config: $Config = {
63
+ transformer,
64
+ errorShape: null as any,
65
+ ctx: null as any,
66
+ meta: null as any,
67
+ };
68
+ return {
69
+ /**
70
+ * These are just types, they can't be used
71
+ * @internal
72
+ */
73
+ _config,
74
+ /**
75
+ * Builder object for creating procedures
76
+ */
77
+ procedure: createBuilder<$Config>(),
78
+ /**
79
+ * Create reusable middlewares
80
+ */
81
+ middleware: createMiddlewareFactory<$Config>(),
82
+ /**
83
+ * Create a router
84
+ */
85
+ router: createRouterFactory<$Config>({
86
+ errorFormatter,
87
+ transformer,
88
+ }),
89
+ /**
90
+ * Merge Routers
91
+ */
92
+ mergeRouters: mergeRoutersGeneric,
93
+ };
94
+ };
95
+ }