@trpc/server 10.0.0-alpha.8 → 10.0.0-proxy-alpha.53

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 (355) 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 -7
  10. package/adapters/express/dist/trpc-server-adapters-express.cjs.prod.js +7 -7
  11. package/adapters/express/dist/trpc-server-adapters-express.esm.js +7 -7
  12. package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.dev.js +18 -11
  13. package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.prod.js +18 -11
  14. package/adapters/fastify/dist/trpc-server-adapters-fastify.esm.js +18 -11
  15. package/adapters/fastify/index.d.ts +1 -0
  16. package/adapters/fastify/index.js +1 -0
  17. package/adapters/fetch/index.d.ts +1 -0
  18. package/adapters/fetch/index.js +1 -0
  19. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.d.ts +1 -0
  20. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.dev.js +25 -0
  21. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.js +7 -0
  22. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.prod.js +25 -0
  23. package/adapters/lambda/dist/trpc-server-adapters-lambda.esm.js +21 -0
  24. package/adapters/next/dist/trpc-server-adapters-next.cjs.dev.js +4 -4
  25. package/adapters/next/dist/trpc-server-adapters-next.cjs.prod.js +4 -4
  26. package/adapters/next/dist/trpc-server-adapters-next.esm.js +4 -4
  27. package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.dev.js +4 -4
  28. package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.prod.js +4 -4
  29. package/adapters/node-http/dist/trpc-server-adapters-node-http.esm.js +4 -4
  30. package/adapters/node-http/index.js +1 -1
  31. package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.dev.js +5 -5
  32. package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.prod.js +5 -5
  33. package/adapters/standalone/dist/trpc-server-adapters-standalone.esm.js +5 -5
  34. package/adapters/ws/dist/trpc-server-adapters-ws.cjs.dev.js +24 -7
  35. package/adapters/ws/dist/trpc-server-adapters-ws.cjs.prod.js +24 -7
  36. package/adapters/ws/dist/trpc-server-adapters-ws.esm.js +24 -7
  37. package/dist/TRPCError-bcb38a84.js +61 -0
  38. package/dist/TRPCError-e6e632a5.mjs +57 -0
  39. package/dist/adapters/aws-lambda/index.d.ts +14 -0
  40. package/dist/adapters/aws-lambda/index.d.ts.map +1 -0
  41. package/dist/adapters/aws-lambda/index.js +153 -0
  42. package/dist/adapters/aws-lambda/index.mjs +149 -0
  43. package/dist/adapters/aws-lambda/utils.d.ts +35 -0
  44. package/dist/adapters/aws-lambda/utils.d.ts.map +1 -0
  45. package/dist/adapters/express.d.ts +1 -1
  46. package/dist/adapters/express.d.ts.map +1 -1
  47. package/dist/adapters/express.js +14 -13
  48. package/dist/adapters/express.mjs +14 -13
  49. package/dist/adapters/fastify/fastifyRequestHandler.d.ts +2 -2
  50. package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
  51. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +2 -2
  52. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -1
  53. package/dist/adapters/fastify/index.d.ts.map +1 -1
  54. package/dist/adapters/fastify/index.js +87 -0
  55. package/dist/adapters/fastify/index.mjs +82 -0
  56. package/dist/adapters/fetch/fetchRequestHandler.d.ts +8 -0
  57. package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -0
  58. package/dist/adapters/fetch/index.d.ts +3 -0
  59. package/dist/adapters/fetch/index.d.ts.map +1 -0
  60. package/dist/adapters/fetch/index.js +57 -0
  61. package/dist/adapters/fetch/index.mjs +53 -0
  62. package/dist/adapters/fetch/types.d.ts +21 -0
  63. package/dist/adapters/fetch/types.d.ts.map +1 -0
  64. package/dist/adapters/lambda/index.d.ts +12 -0
  65. package/dist/adapters/lambda/index.d.ts.map +1 -0
  66. package/dist/adapters/next.d.ts +2 -2
  67. package/dist/adapters/next.d.ts.map +1 -1
  68. package/dist/adapters/next.js +42 -46
  69. package/dist/adapters/next.mjs +42 -46
  70. package/dist/adapters/node-http/index.d.ts.map +1 -1
  71. package/dist/adapters/node-http/index.js +5 -4
  72. package/dist/adapters/node-http/index.mjs +5 -4
  73. package/dist/adapters/node-http/internals/getPostBody.d.ts +1 -1
  74. package/dist/adapters/node-http/internals/getPostBody.d.ts.map +1 -1
  75. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts +2 -2
  76. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
  77. package/dist/adapters/node-http/types.d.ts +11 -9
  78. package/dist/adapters/node-http/types.d.ts.map +1 -1
  79. package/dist/adapters/standalone.d.ts +2 -2
  80. package/dist/adapters/standalone.d.ts.map +1 -1
  81. package/dist/adapters/standalone.js +30 -28
  82. package/dist/adapters/standalone.mjs +30 -27
  83. package/dist/adapters/ws.d.ts +8 -6
  84. package/dist/adapters/ws.d.ts.map +1 -1
  85. package/dist/adapters/ws.js +284 -317
  86. package/dist/adapters/ws.mjs +284 -317
  87. package/dist/assertNotBrowser.d.ts.map +1 -1
  88. package/dist/codes-1c24d919.js +47 -0
  89. package/dist/codes-aaa7d554.mjs +44 -0
  90. package/dist/core/index.d.ts +6 -0
  91. package/dist/core/index.d.ts.map +1 -0
  92. package/dist/core/initTRPC.d.ts +95 -0
  93. package/dist/core/initTRPC.d.ts.map +1 -0
  94. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts +302 -0
  95. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts.map +1 -0
  96. package/dist/core/internals/config.d.ts +36 -0
  97. package/dist/core/internals/config.d.ts.map +1 -0
  98. package/dist/core/internals/getParseFn.d.ts +9 -0
  99. package/dist/core/internals/getParseFn.d.ts.map +1 -0
  100. package/dist/core/internals/mergeRouters.d.ts +3 -0
  101. package/dist/core/internals/mergeRouters.d.ts.map +1 -0
  102. package/dist/core/internals/mergeWithoutOverrides.d.ts +5 -0
  103. package/dist/core/internals/mergeWithoutOverrides.d.ts.map +1 -0
  104. package/dist/core/internals/omitPrototype.d.ts +6 -0
  105. package/dist/core/internals/omitPrototype.d.ts.map +1 -0
  106. package/dist/core/internals/prefixObjectKeys.d.ts +2 -0
  107. package/dist/core/internals/prefixObjectKeys.d.ts.map +1 -0
  108. package/dist/core/internals/procedureBuilder.d.ts +124 -0
  109. package/dist/core/internals/procedureBuilder.d.ts.map +1 -0
  110. package/dist/core/internals/utils.d.ts +44 -0
  111. package/dist/core/internals/utils.d.ts.map +1 -0
  112. package/dist/core/middleware.d.ts +87 -0
  113. package/dist/core/middleware.d.ts.map +1 -0
  114. package/dist/core/parser.d.ts +25 -0
  115. package/dist/core/parser.d.ts.map +1 -0
  116. package/dist/core/procedure.d.ts +89 -0
  117. package/dist/core/procedure.d.ts.map +1 -0
  118. package/dist/core/router.d.ts +136 -0
  119. package/dist/core/router.d.ts.map +1 -0
  120. package/dist/core/types.d.ts +19 -0
  121. package/dist/core/types.d.ts.map +1 -0
  122. package/dist/{internals → deprecated/internals}/callProcedure.d.ts +5 -2
  123. package/dist/deprecated/internals/callProcedure.d.ts.map +1 -0
  124. package/dist/{internals → deprecated/internals}/middlewares.d.ts +21 -3
  125. package/dist/deprecated/internals/middlewares.d.ts.map +1 -0
  126. package/dist/deprecated/internals/procedure.d.ts +96 -0
  127. package/dist/deprecated/internals/procedure.d.ts.map +1 -0
  128. package/dist/deprecated/interop.d.ts +61 -0
  129. package/dist/deprecated/interop.d.ts.map +1 -0
  130. package/dist/deprecated/router.d.ts +194 -0
  131. package/dist/deprecated/router.d.ts.map +1 -0
  132. package/dist/error/TRPCError.d.ts +11 -0
  133. package/dist/error/TRPCError.d.ts.map +1 -0
  134. package/dist/error/formatter.d.ts +33 -0
  135. package/dist/error/formatter.d.ts.map +1 -0
  136. package/dist/{internals/errors.d.ts → error/utils.d.ts} +3 -2
  137. package/dist/error/utils.d.ts.map +1 -0
  138. package/dist/http/index.d.ts +1 -1
  139. package/dist/http/index.d.ts.map +1 -1
  140. package/dist/http/internals/getHTTPStatusCode.d.ts +2 -1
  141. package/dist/http/internals/getHTTPStatusCode.d.ts.map +1 -1
  142. package/dist/http/internals/types.d.ts +11 -8
  143. package/dist/http/internals/types.d.ts.map +1 -1
  144. package/dist/http/resolveHTTPResponse.d.ts +4 -4
  145. package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
  146. package/dist/http/{ResponseMeta.d.ts → types.d.ts} +1 -1
  147. package/dist/http/types.d.ts.map +1 -0
  148. package/dist/index-47817162.mjs +26 -0
  149. package/dist/index-9d687d33.js +28 -0
  150. package/dist/index.d.ts +4 -5
  151. package/dist/index.d.ts.map +1 -1
  152. package/dist/index.js +78 -516
  153. package/dist/index.mjs +71 -508
  154. package/dist/internals/invert.d.ts.map +1 -1
  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-2c467c02.mjs +80 -0
  162. package/dist/nodeHTTPRequestHandler-6609461a.js +82 -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 +157 -0
  166. package/dist/observable/index.mjs +148 -0
  167. package/dist/observable/internals/identity.d.ts +2 -0
  168. package/dist/observable/internals/identity.d.ts.map +1 -0
  169. package/dist/observable/internals/observableToPromise.d.ts +10 -0
  170. package/dist/observable/internals/observableToPromise.d.ts.map +1 -0
  171. package/dist/observable/internals/pipe.d.ts +4 -0
  172. package/dist/observable/internals/pipe.d.ts.map +1 -0
  173. package/dist/observable/observable.d.ts +5 -0
  174. package/dist/observable/observable.d.ts.map +1 -0
  175. package/dist/observable/operators/index.d.ts +4 -0
  176. package/dist/observable/operators/index.d.ts.map +1 -0
  177. package/dist/observable/operators/map.d.ts +3 -0
  178. package/dist/observable/operators/map.d.ts.map +1 -0
  179. package/dist/observable/operators/share.d.ts +6 -0
  180. package/dist/observable/operators/share.d.ts.map +1 -0
  181. package/dist/observable/operators/tap.d.ts +3 -0
  182. package/dist/observable/operators/tap.d.ts.map +1 -0
  183. package/dist/observable/types.d.ts +29 -0
  184. package/dist/observable/types.d.ts.map +1 -0
  185. package/dist/observable-b651bf11.js +84 -0
  186. package/dist/observable-e129ac9d.mjs +81 -0
  187. package/dist/resolveHTTPResponse-11d52bd0.mjs +255 -0
  188. package/dist/resolveHTTPResponse-29d4b64a.js +259 -0
  189. package/dist/router-3ee4babe.js +903 -0
  190. package/dist/router-a2a75de3.mjs +893 -0
  191. package/dist/rpc/codes.d.ts +2 -0
  192. package/dist/rpc/codes.d.ts.map +1 -1
  193. package/dist/rpc/envelopes.d.ts +64 -41
  194. package/dist/rpc/envelopes.d.ts.map +1 -1
  195. package/dist/rpc/index.d.ts.map +1 -1
  196. package/dist/rpc/index.js +1 -1
  197. package/dist/rpc/index.mjs +1 -1
  198. package/dist/rpc/internals/invert.d.ts +18 -0
  199. package/dist/rpc/internals/invert.d.ts.map +1 -0
  200. package/dist/shared/createProxy/index.d.ts +12 -0
  201. package/dist/shared/createProxy/index.d.ts.map +1 -0
  202. package/dist/shared/index.d.ts +2 -0
  203. package/dist/shared/index.d.ts.map +1 -0
  204. package/dist/shared/index.js +9 -0
  205. package/dist/shared/index.mjs +1 -0
  206. package/dist/subscription.d.ts +3 -52
  207. package/dist/subscription.d.ts.map +1 -1
  208. package/dist/subscription.js +34 -0
  209. package/dist/subscription.mjs +30 -0
  210. package/dist/transformTRPCResponse-11ac69cc.js +27 -0
  211. package/dist/transformTRPCResponse-c8138d5f.mjs +25 -0
  212. package/dist/transformer.d.ts +14 -0
  213. package/dist/transformer.d.ts.map +1 -1
  214. package/dist/types.d.ts +37 -10
  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 +53 -25
  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/rpc/index.js +1 -1
  223. package/shared/index.d.ts +1 -0
  224. package/shared/index.js +1 -0
  225. package/src/adapters/aws-lambda/index.ts +173 -0
  226. package/src/adapters/aws-lambda/utils.ts +92 -0
  227. package/src/adapters/express.ts +4 -4
  228. package/src/adapters/fastify/fastifyRequestHandler.ts +6 -8
  229. package/src/adapters/fastify/fastifyTRPCPlugin.ts +17 -9
  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 +150 -91
  241. package/src/assertNotBrowser.ts +1 -0
  242. package/src/core/index.ts +15 -0
  243. package/src/core/initTRPC.ts +94 -0
  244. package/src/core/internals/__generated__/mergeRoutersGeneric.ts +406 -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 +430 -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 +121 -0
  256. package/src/core/router.ts +351 -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 +272 -0
  262. package/src/{router.ts → deprecated/router.ts} +221 -108
  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} +24 -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 +34 -39
  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 +94 -68
  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 +45 -15
  296. package/subscription/index.d.ts +1 -0
  297. package/subscription/index.js +1 -0
  298. package/adapters/fastify/package.json +0 -4
  299. package/dist/TRPCError.d.ts +0 -19
  300. package/dist/TRPCError.d.ts.map +0 -1
  301. package/dist/adapters/express.ts.js +0 -1
  302. package/dist/adapters/next.ts.js +0 -1
  303. package/dist/adapters/node-http/index.ts.js +0 -1
  304. package/dist/adapters/standalone.ts.js +0 -1
  305. package/dist/adapters/ws.ts.js +0 -1
  306. package/dist/codes-7a3d4f65.mjs +0 -56
  307. package/dist/codes-7f46544e.js +0 -60
  308. package/dist/deprecated/LegacyRouter.d.ts +0 -3
  309. package/dist/deprecated/LegacyRouter.d.ts.map +0 -1
  310. package/dist/deprecated/createHttpServer.d.ts +0 -19
  311. package/dist/deprecated/createHttpServer.d.ts.map +0 -1
  312. package/dist/deprecated/requestHandler.d.ts +0 -15
  313. package/dist/deprecated/requestHandler.d.ts.map +0 -1
  314. package/dist/http/ResponseMeta.d.ts.map +0 -1
  315. package/dist/index.ts.js +0 -1
  316. package/dist/internals/BaseHandlerOptions.d.ts +0 -13
  317. package/dist/internals/BaseHandlerOptions.d.ts.map +0 -1
  318. package/dist/internals/OnErrorFunction.d.ts +0 -11
  319. package/dist/internals/OnErrorFunction.d.ts.map +0 -1
  320. package/dist/internals/callProcedure.d.ts.map +0 -1
  321. package/dist/internals/errors.d.ts.map +0 -1
  322. package/dist/internals/middlewares.d.ts.map +0 -1
  323. package/dist/internals/procedure.d.ts +0 -74
  324. package/dist/internals/procedure.d.ts.map +0 -1
  325. package/dist/internals/wrapCallSafe.d.ts +0 -16
  326. package/dist/internals/wrapCallSafe.d.ts.map +0 -1
  327. package/dist/nodeHTTPRequestHandler-10e6d2f9.mjs +0 -394
  328. package/dist/nodeHTTPRequestHandler-d7c307d3.js +0 -399
  329. package/dist/router.d.ts +0 -176
  330. package/dist/router.d.ts.map +0 -1
  331. package/dist/rpc/index.ts.js +0 -1
  332. package/dist/subscription-5b7e1eba.js +0 -136
  333. package/dist/subscription-e1d42e69.mjs +0 -133
  334. package/dist/transformTRPCResponse-76e0c91e.mjs +0 -109
  335. package/dist/transformTRPCResponse-bd24f548.js +0 -114
  336. package/dist/ws/index.d.ts +0 -7
  337. package/dist/ws/index.d.ts.map +0 -1
  338. package/dist/ws/index.js +0 -15
  339. package/dist/ws/index.mjs +0 -11
  340. package/dist/ws/index.ts.js +0 -1
  341. package/src/deprecated/LegacyRouter.ts +0 -3
  342. package/src/deprecated/createHttpServer.ts +0 -29
  343. package/src/deprecated/requestHandler.ts +0 -26
  344. package/src/internals/BaseHandlerOptions.ts +0 -13
  345. package/src/internals/OnErrorFunction.ts +0 -11
  346. package/src/internals/procedure.ts +0 -283
  347. package/src/internals/wrapCallSafe.ts +0 -19
  348. package/src/ws/index.ts +0 -8
  349. package/ws/dist/trpc-server-ws.cjs.d.ts +0 -1
  350. package/ws/dist/trpc-server-ws.cjs.dev.js +0 -15
  351. package/ws/dist/trpc-server-ws.cjs.js +0 -7
  352. package/ws/dist/trpc-server-ws.cjs.prod.js +0 -15
  353. package/ws/dist/trpc-server-ws.esm.js +0 -11
  354. package/ws/index.d.ts +0 -1
  355. package/ws/index.js +0 -1
@@ -1,9 +1,12 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3
- import type { NextApiHandler, NextApiRequest, NextApiResponse } from 'next';
4
- import { AnyRouter } from '../router';
5
- import { TRPCErrorResponse } from '../rpc';
6
- import { TRPCError } from '../TRPCError';
3
+ import type {
4
+ NextApiHandler,
5
+ NextApiRequest,
6
+ NextApiResponse,
7
+ } from 'next/types';
8
+ import { AnyRouter } from '../core';
9
+ import { TRPCError } from '../error/TRPCError';
7
10
  import { nodeHTTPRequestHandler } from './node-http';
8
11
  import {
9
12
  NodeHTTPCreateContextFnOptions,
@@ -42,12 +45,11 @@ export function createNextApiHandler<TRouter extends AnyRouter>(
42
45
  path: undefined,
43
46
  input: undefined,
44
47
  });
45
- const json: TRPCErrorResponse = {
48
+ res.statusCode = 500;
49
+ res.json({
46
50
  id: -1,
47
51
  error,
48
- };
49
- res.statusCode = 500;
50
- res.json(json);
52
+ });
51
53
  return;
52
54
  }
53
55
 
@@ -1,5 +1,6 @@
1
- import { getPostBody } from './getPostBody';
2
1
  import { EventEmitter } from 'events';
2
+ import { getPostBody } from './getPostBody';
3
+
3
4
  test('has body', async () => {
4
5
  const body = {};
5
6
  const resolvedBody = await getPostBody({ req: { body } } as any);
@@ -1,4 +1,4 @@
1
- import { TRPCError } from '../../../TRPCError';
1
+ import { TRPCError } from '../../../error/TRPCError';
2
2
  import { NodeHTTPRequest } from '../types';
3
3
 
4
4
  export async function getPostBody({
@@ -1,15 +1,15 @@
1
1
  /* eslint-disable @typescript-eslint/no-non-null-assertion */
2
- import { URLSearchParams } from 'url';
3
2
  import { assertNotBrowser } from '../../assertNotBrowser';
3
+ import { AnyRouter } from '../../core';
4
+ import { inferRouterDef } from '../../core/types';
5
+ import { HTTPRequest } from '../../http/internals/types';
6
+ import { resolveHTTPResponse } from '../../http/resolveHTTPResponse';
7
+ import { getPostBody } from './internals/getPostBody';
4
8
  import {
9
+ NodeHTTPHandlerOptions,
5
10
  NodeHTTPRequest,
6
11
  NodeHTTPResponse,
7
- NodeHTTPHandlerOptions,
8
12
  } from './types';
9
- import { AnyRouter, inferRouterContext } from '../../router';
10
- import { getPostBody } from './internals/getPostBody';
11
- import { HTTPRequest } from '../../http/internals/types';
12
- import { resolveHTTPResponse } from '../../http/resolveHTTPResponse';
13
13
 
14
14
  assertNotBrowser();
15
15
 
@@ -29,7 +29,7 @@ export async function nodeHTTPRequestHandler<
29
29
  TResponse extends NodeHTTPResponse,
30
30
  >(opts: NodeHTTPRequestHandlerOptions<TRouter, TRequest, TResponse>) {
31
31
  const createContext = async function _createContext(): Promise<
32
- inferRouterContext<TRouter>
32
+ inferRouterDef<TRouter>['_ctx']
33
33
  > {
34
34
  return await opts.createContext?.(opts);
35
35
  };
@@ -1,15 +1,17 @@
1
- import http from 'http';
2
- import qs from 'qs';
3
- import { inferRouterContext } from '../..';
1
+ import { IncomingMessage, ServerResponse } from 'http';
2
+ import { AnyRouter, inferRouterContext } from '../../core';
3
+ import { inferRouterDef } from '../../core';
4
4
  import { HTTPBaseHandlerOptions } from '../../http/internals/types';
5
- import { AnyRouter } from '../../router';
6
5
 
7
- export type NodeHTTPRequest = http.IncomingMessage & {
8
- method?: string;
9
- query?: qs.ParsedQs;
6
+ interface ParsedQs {
7
+ [key: string]: undefined | string | string[] | ParsedQs | ParsedQs[];
8
+ }
9
+
10
+ export type NodeHTTPRequest = IncomingMessage & {
11
+ query?: ParsedQs;
10
12
  body?: unknown;
11
13
  };
12
- export type NodeHTTPResponse = http.ServerResponse;
14
+ export type NodeHTTPResponse = ServerResponse;
13
15
 
14
16
  export type NodeHTTPCreateContextOption<
15
17
  TRouter extends AnyRouter,
@@ -48,4 +50,4 @@ export type NodeHTTPCreateContextFn<
48
50
  TResponse,
49
51
  > = (
50
52
  opts: NodeHTTPCreateContextFnOptions<TRequest, TResponse>,
51
- ) => inferRouterContext<TRouter> | Promise<inferRouterContext<TRouter>>;
53
+ ) => inferRouterDef<TRouter>['_ctx'] | Promise<inferRouterDef<TRouter>['_ctx']>;
@@ -1,8 +1,8 @@
1
1
  /* eslint-disable @typescript-eslint/no-non-null-assertion */
2
+
2
3
  /* eslint-disable @typescript-eslint/no-explicit-any */
3
4
  import http from 'http';
4
- import url from 'url';
5
- import { AnyRouter } from '../router';
5
+ import { AnyRouter } from '../core';
6
6
  import {
7
7
  NodeHTTPCreateContextFnOptions,
8
8
  NodeHTTPHandlerOptions,
@@ -21,12 +21,20 @@ export function createHTTPHandler<TRouter extends AnyRouter>(
21
21
  opts: CreateHTTPHandlerOptions<TRouter>,
22
22
  ) {
23
23
  return async (req: http.IncomingMessage, res: http.ServerResponse) => {
24
- const endpoint = url.parse(req.url!).pathname!.substr(1);
24
+ // if no hostname, set a dummy one
25
+ const href = req.url!.startsWith('/')
26
+ ? `http://127.0.0.1${req.url}`
27
+ : req.url!;
28
+
29
+ // get procedure path and remove the leading slash
30
+ // /procedure -> procedure
31
+ const path = new URL(href).pathname.slice(1);
32
+
25
33
  await nodeHTTPRequestHandler({
26
34
  ...opts,
27
35
  req,
28
36
  res,
29
- path: endpoint,
37
+ path,
30
38
  });
31
39
  };
32
40
  }
@@ -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({
@@ -245,9 +290,24 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
245
290
  }
246
291
  });
247
292
 
293
+ // WebSocket errors should be handled, as otherwise unhandled exceptions will crash Node.js.
294
+ // This line was introduced after the following error brought down production systems:
295
+ // "RangeError: Invalid WebSocket frame: RSV2 and RSV3 must be clear"
296
+ // Here is the relevant discussion: https://github.com/websockets/ws/issues/1354#issuecomment-774616962
297
+ client.on('error', (cause) => {
298
+ opts.onError?.({
299
+ ctx,
300
+ error: getErrorFromUnknown(cause),
301
+ input: undefined,
302
+ path: undefined,
303
+ type: 'unknown',
304
+ req,
305
+ });
306
+ });
307
+
248
308
  client.once('close', () => {
249
309
  for (const sub of clientSubscriptions.values()) {
250
- sub.destroy();
310
+ sub.unsubscribe();
251
311
  }
252
312
  clientSubscriptions.clear();
253
313
  });
@@ -256,7 +316,15 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
256
316
  ctx = await ctxPromise;
257
317
  } catch (cause) {
258
318
  const error = getErrorFromUnknown(cause);
259
- const json: TRPCErrorResponse = {
319
+ opts.onError?.({
320
+ error,
321
+ path: undefined,
322
+ type: 'unknown',
323
+ ctx,
324
+ req,
325
+ input: undefined,
326
+ });
327
+ respond({
260
328
  id: null,
261
329
  error: router.getErrorShape({
262
330
  error,
@@ -265,16 +333,7 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
265
333
  input: undefined,
266
334
  ctx,
267
335
  }),
268
- };
269
- opts.onError?.({
270
- error,
271
- path: undefined,
272
- type: 'unknown',
273
- ctx,
274
- req,
275
- input: undefined,
276
336
  });
277
- respond(json);
278
337
 
279
338
  // close in next tick
280
339
  (global.setImmediate ?? global.setTimeout)(() => {
@@ -282,7 +341,7 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
282
341
  });
283
342
  }
284
343
  }
285
- createContextAsync();
344
+ await createContextAsync();
286
345
  });
287
346
 
288
347
  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,15 @@
1
+ export type {
2
+ AnyRouter,
3
+ ProcedureRecord,
4
+ ProcedureRouterRecord,
5
+ } from './router';
6
+ export { callProcedure } from './router';
7
+ export type {
8
+ Procedure,
9
+ ProcedureParams,
10
+ ProcedureArgs,
11
+ ProcedureOptions,
12
+ } from './procedure';
13
+
14
+ export { initTRPC } from './initTRPC';
15
+ export * from './types';
@@ -0,0 +1,94 @@
1
+ import { mergeRoutersGeneric } from './internals/__generated__/mergeRoutersGeneric';
2
+ import {
3
+ DefaultErrorShape,
4
+ ErrorFormatter,
5
+ ErrorFormatterShape,
6
+ defaultFormatter,
7
+ } from '../error/formatter';
8
+ import {
9
+ CombinedDataTransformer,
10
+ DataTransformerOptions,
11
+ DefaultDataTransformer,
12
+ defaultTransformer,
13
+ getDataTransformer,
14
+ } from '../transformer';
15
+ import {
16
+ CreateInitGenerics,
17
+ CreateRootConfig,
18
+ InitGenerics,
19
+ InitOptions,
20
+ } from './internals/config';
21
+ import { createBuilder } from './internals/procedureBuilder';
22
+ import { PickFirstDefined, ValidateShape } from './internals/utils';
23
+ import { createMiddlewareFactory } from './middleware';
24
+ import { createRouterFactory } from './router';
25
+
26
+ export function initTRPC<TParams extends Partial<InitGenerics> = {}>() {
27
+ type $Generics = CreateInitGenerics<{
28
+ ctx: TParams['ctx'] extends undefined ? {} : NonNullable<TParams['ctx']>;
29
+ meta: TParams['meta'] extends undefined ? {} : NonNullable<TParams['meta']>;
30
+ }>;
31
+
32
+ type $Context = $Generics['ctx'];
33
+ type $Meta = PickFirstDefined<$Generics['meta'], undefined>;
34
+ type $Options = Partial<InitOptions<$Generics>>;
35
+
36
+ return function initTRPCInner<TOptions extends $Options>(
37
+ options?: ValidateShape<TOptions, $Options>,
38
+ ) {
39
+ type $Formatter = PickFirstDefined<
40
+ TOptions['errorFormatter'],
41
+ ErrorFormatter<$Context, DefaultErrorShape>
42
+ >;
43
+ type $Transformer = TOptions['transformer'] extends DataTransformerOptions
44
+ ? TOptions['transformer'] extends DataTransformerOptions
45
+ ? CombinedDataTransformer
46
+ : DefaultDataTransformer
47
+ : DefaultDataTransformer;
48
+ type $ErrorShape = ErrorFormatterShape<$Formatter>;
49
+
50
+ type $Config = CreateRootConfig<{
51
+ ctx: $Context;
52
+ meta: $Meta;
53
+ errorShape: $ErrorShape;
54
+ transformer: $Transformer;
55
+ }>;
56
+
57
+ const errorFormatter = options?.errorFormatter ?? defaultFormatter;
58
+ const transformer = getDataTransformer(
59
+ options?.transformer ?? defaultTransformer,
60
+ ) as $Transformer;
61
+ const _config: $Config = {
62
+ transformer,
63
+ errorShape: null as any,
64
+ ctx: null as any,
65
+ meta: null as any,
66
+ };
67
+ return {
68
+ /**
69
+ * These are just types, they can't be used
70
+ * @internal
71
+ */
72
+ _config,
73
+ /**
74
+ * Builder object for creating procedures
75
+ */
76
+ procedure: createBuilder<$Config>(),
77
+ /**
78
+ * Create reusable middlewares
79
+ */
80
+ middleware: createMiddlewareFactory<$Config>(),
81
+ /**
82
+ * Create a router
83
+ */
84
+ router: createRouterFactory<$Config>({
85
+ errorFormatter,
86
+ transformer,
87
+ }),
88
+ /**
89
+ * Merge Routers
90
+ */
91
+ mergeRouters: mergeRoutersGeneric,
92
+ };
93
+ };
94
+ }