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

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 (345) 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-97212592.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/index.js +190 -0
  43. package/dist/adapters/aws-lambda/index.mjs +186 -0
  44. package/dist/{ws → adapters/aws-lambda}/index.ts.js +0 -0
  45. package/dist/adapters/aws-lambda/utils.d.ts +35 -0
  46. package/dist/adapters/aws-lambda/utils.d.ts.map +1 -0
  47. package/dist/adapters/express.d.ts +1 -1
  48. package/dist/adapters/express.d.ts.map +1 -1
  49. package/dist/adapters/express.js +8 -7
  50. package/dist/adapters/express.mjs +8 -7
  51. package/dist/adapters/fastify/fastifyRequestHandler.d.ts +13 -0
  52. package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -0
  53. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +12 -0
  54. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -0
  55. package/dist/adapters/fastify/index.d.ts +3 -0
  56. package/dist/adapters/fastify/index.d.ts.map +1 -0
  57. package/dist/adapters/fastify/index.js +108 -0
  58. package/dist/adapters/fastify/index.mjs +103 -0
  59. package/dist/adapters/fastify/index.ts.js +1 -0
  60. package/dist/adapters/fetch/fetchRequestHandler.d.ts +8 -0
  61. package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -0
  62. package/dist/adapters/fetch/index.d.ts +3 -0
  63. package/dist/adapters/fetch/index.d.ts.map +1 -0
  64. package/dist/adapters/fetch/index.js +69 -0
  65. package/dist/adapters/fetch/index.mjs +65 -0
  66. package/dist/adapters/fetch/index.ts.js +1 -0
  67. package/dist/adapters/fetch/types.d.ts +21 -0
  68. package/dist/adapters/fetch/types.d.ts.map +1 -0
  69. package/dist/adapters/lambda/index.d.ts +12 -0
  70. package/dist/adapters/lambda/index.d.ts.map +1 -0
  71. package/dist/adapters/next.d.ts +2 -2
  72. package/dist/adapters/next.d.ts.map +1 -1
  73. package/dist/adapters/next.js +9 -9
  74. package/dist/adapters/next.mjs +8 -8
  75. package/dist/adapters/node-http/index.js +5 -4
  76. package/dist/adapters/node-http/index.mjs +5 -4
  77. package/dist/adapters/node-http/internals/getPostBody.d.ts +1 -1
  78. package/dist/adapters/node-http/internals/getPostBody.d.ts.map +1 -1
  79. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts +2 -2
  80. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
  81. package/dist/adapters/node-http/types.d.ts +11 -9
  82. package/dist/adapters/node-http/types.d.ts.map +1 -1
  83. package/dist/adapters/standalone.d.ts +2 -2
  84. package/dist/adapters/standalone.d.ts.map +1 -1
  85. package/dist/adapters/standalone.js +11 -7
  86. package/dist/adapters/standalone.mjs +11 -6
  87. package/dist/adapters/ws.d.ts +8 -6
  88. package/dist/adapters/ws.d.ts.map +1 -1
  89. package/dist/adapters/ws.js +123 -90
  90. package/dist/adapters/ws.mjs +118 -85
  91. package/dist/assertNotBrowser.d.ts.map +1 -1
  92. package/dist/core/index.d.ts +6 -0
  93. package/dist/core/index.d.ts.map +1 -0
  94. package/dist/core/initTRPC.d.ts +87 -0
  95. package/dist/core/initTRPC.d.ts.map +1 -0
  96. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts +282 -0
  97. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts.map +1 -0
  98. package/dist/core/internals/config.d.ts +36 -0
  99. package/dist/core/internals/config.d.ts.map +1 -0
  100. package/dist/core/internals/getParseFn.d.ts +9 -0
  101. package/dist/core/internals/getParseFn.d.ts.map +1 -0
  102. package/dist/core/internals/mergeRouters.d.ts +3 -0
  103. package/dist/core/internals/mergeRouters.d.ts.map +1 -0
  104. package/dist/core/internals/mergeWithoutOverrides.d.ts +5 -0
  105. package/dist/core/internals/mergeWithoutOverrides.d.ts.map +1 -0
  106. package/dist/core/internals/omitPrototype.d.ts +6 -0
  107. package/dist/core/internals/omitPrototype.d.ts.map +1 -0
  108. package/dist/core/internals/prefixObjectKeys.d.ts +2 -0
  109. package/dist/core/internals/prefixObjectKeys.d.ts.map +1 -0
  110. package/dist/core/internals/procedureBuilder.d.ts +122 -0
  111. package/dist/core/internals/procedureBuilder.d.ts.map +1 -0
  112. package/dist/core/internals/utils.d.ts +44 -0
  113. package/dist/core/internals/utils.d.ts.map +1 -0
  114. package/dist/core/middleware.d.ts +87 -0
  115. package/dist/core/middleware.d.ts.map +1 -0
  116. package/dist/core/parser.d.ts +25 -0
  117. package/dist/core/parser.d.ts.map +1 -0
  118. package/dist/core/procedure.d.ts +88 -0
  119. package/dist/core/procedure.d.ts.map +1 -0
  120. package/dist/core/router.d.ts +128 -0
  121. package/dist/core/router.d.ts.map +1 -0
  122. package/dist/core/types.d.ts +19 -0
  123. package/dist/core/types.d.ts.map +1 -0
  124. package/dist/{internals → deprecated/internals}/callProcedure.d.ts +5 -2
  125. package/dist/deprecated/internals/callProcedure.d.ts.map +1 -0
  126. package/dist/{internals → deprecated/internals}/middlewares.d.ts +21 -3
  127. package/dist/deprecated/internals/middlewares.d.ts.map +1 -0
  128. package/dist/deprecated/internals/procedure.d.ts +96 -0
  129. package/dist/deprecated/internals/procedure.d.ts.map +1 -0
  130. package/dist/deprecated/interop.d.ts +34 -0
  131. package/dist/deprecated/interop.d.ts.map +1 -0
  132. package/dist/deprecated/router.d.ts +194 -0
  133. package/dist/deprecated/router.d.ts.map +1 -0
  134. package/dist/{codes-7a3d4f65.mjs → envelopes-af8c2959.mjs} +30 -1
  135. package/dist/{codes-7f46544e.js → envelopes-b6dd0367.js} +29 -1
  136. package/dist/error/TRPCError.d.ts +11 -0
  137. package/dist/error/TRPCError.d.ts.map +1 -0
  138. package/dist/error/formatter.d.ts +33 -0
  139. package/dist/error/formatter.d.ts.map +1 -0
  140. package/dist/{internals/errors.d.ts → error/utils.d.ts} +3 -2
  141. package/dist/error/utils.d.ts.map +1 -0
  142. package/dist/http/index.d.ts +1 -1
  143. package/dist/http/index.d.ts.map +1 -1
  144. package/dist/http/internals/getHTTPStatusCode.d.ts +2 -1
  145. package/dist/http/internals/getHTTPStatusCode.d.ts.map +1 -1
  146. package/dist/http/internals/types.d.ts +11 -8
  147. package/dist/http/internals/types.d.ts.map +1 -1
  148. package/dist/http/resolveHTTPResponse.d.ts +4 -4
  149. package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
  150. package/dist/http/{ResponseMeta.d.ts → types.d.ts} +1 -1
  151. package/dist/http/types.d.ts.map +1 -0
  152. package/dist/index-1a25ccbd.js +33 -0
  153. package/dist/index-a3bd54c7.mjs +31 -0
  154. package/dist/index.d.ts +4 -5
  155. package/dist/index.d.ts.map +1 -1
  156. package/dist/index.js +95 -496
  157. package/dist/index.mjs +88 -488
  158. package/dist/internals/transformTRPCResponse.d.ts +5 -3
  159. package/dist/internals/transformTRPCResponse.d.ts.map +1 -1
  160. package/dist/internals/types.d.ts +23 -0
  161. package/dist/internals/types.d.ts.map +1 -0
  162. package/dist/internals.d.ts +11 -0
  163. package/dist/internals.d.ts.map +1 -0
  164. package/dist/nodeHTTPRequestHandler-65cf2218.mjs +105 -0
  165. package/dist/nodeHTTPRequestHandler-6b7c8622.js +107 -0
  166. package/dist/observable/index.d.ts +5 -0
  167. package/dist/observable/index.d.ts.map +1 -0
  168. package/dist/observable/index.js +204 -0
  169. package/dist/observable/index.mjs +195 -0
  170. package/dist/observable/index.ts.js +1 -0
  171. package/dist/observable/internals/identity.d.ts +2 -0
  172. package/dist/observable/internals/identity.d.ts.map +1 -0
  173. package/dist/observable/internals/observableToPromise.d.ts +10 -0
  174. package/dist/observable/internals/observableToPromise.d.ts.map +1 -0
  175. package/dist/observable/internals/pipe.d.ts +4 -0
  176. package/dist/observable/internals/pipe.d.ts.map +1 -0
  177. package/dist/observable/observable.d.ts +5 -0
  178. package/dist/observable/observable.d.ts.map +1 -0
  179. package/dist/observable/operators/index.d.ts +4 -0
  180. package/dist/observable/operators/index.d.ts.map +1 -0
  181. package/dist/observable/operators/map.d.ts +3 -0
  182. package/dist/observable/operators/map.d.ts.map +1 -0
  183. package/dist/observable/operators/share.d.ts +6 -0
  184. package/dist/observable/operators/share.d.ts.map +1 -0
  185. package/dist/observable/operators/tap.d.ts +3 -0
  186. package/dist/observable/operators/tap.d.ts.map +1 -0
  187. package/dist/observable/types.d.ts +29 -0
  188. package/dist/observable/types.d.ts.map +1 -0
  189. package/dist/observable-341a0506.js +109 -0
  190. package/dist/observable-cfedfa30.mjs +106 -0
  191. package/dist/{nodeHTTPRequestHandler-10e6d2f9.mjs → resolveHTTPResponse-95634936.mjs} +32 -133
  192. package/dist/{nodeHTTPRequestHandler-d7c307d3.js → resolveHTTPResponse-fcc8f644.js} +37 -139
  193. package/dist/router-6665b0ee.mjs +1093 -0
  194. package/dist/router-9d12560f.js +1103 -0
  195. package/dist/rpc/codes.d.ts +2 -0
  196. package/dist/rpc/codes.d.ts.map +1 -1
  197. package/dist/rpc/envelopes.d.ts +62 -40
  198. package/dist/rpc/envelopes.d.ts.map +1 -1
  199. package/dist/rpc/index.js +7 -3
  200. package/dist/rpc/index.mjs +1 -1
  201. package/dist/rpc/internals/invert.d.ts +18 -0
  202. package/dist/rpc/internals/invert.d.ts.map +1 -0
  203. package/dist/shared/createProxy/index.d.ts +12 -0
  204. package/dist/shared/createProxy/index.d.ts.map +1 -0
  205. package/dist/shared/index.d.ts +2 -0
  206. package/dist/shared/index.d.ts.map +1 -0
  207. package/dist/shared/index.js +9 -0
  208. package/dist/shared/index.mjs +1 -0
  209. package/dist/shared/index.ts.js +1 -0
  210. package/dist/subscription.d.ts +3 -52
  211. package/dist/subscription.d.ts.map +1 -1
  212. package/dist/subscription.js +44 -0
  213. package/dist/subscription.mjs +40 -0
  214. package/dist/subscription.ts.js +1 -0
  215. package/dist/transformTRPCResponse-0c261655.js +29 -0
  216. package/dist/transformTRPCResponse-747b9a68.mjs +27 -0
  217. package/dist/transformer.d.ts +14 -0
  218. package/dist/transformer.d.ts.map +1 -1
  219. package/dist/types.d.ts +35 -8
  220. package/dist/types.d.ts.map +1 -1
  221. package/observable/index.d.ts +1 -0
  222. package/observable/index.js +1 -0
  223. package/package.json +57 -16
  224. package/rpc/dist/trpc-server-rpc.cjs.dev.js +1 -1
  225. package/rpc/dist/trpc-server-rpc.cjs.prod.js +1 -1
  226. package/rpc/dist/trpc-server-rpc.esm.js +1 -1
  227. package/shared/index.d.ts +1 -0
  228. package/shared/index.js +1 -0
  229. package/src/adapters/aws-lambda/index.ts +173 -0
  230. package/src/adapters/aws-lambda/utils.ts +92 -0
  231. package/src/adapters/express.ts +4 -4
  232. package/src/adapters/fastify/fastifyRequestHandler.ts +77 -0
  233. package/src/adapters/fastify/fastifyTRPCPlugin.ts +56 -0
  234. package/src/adapters/fastify/index.ts +2 -0
  235. package/src/adapters/fetch/fetchRequestHandler.ts +61 -0
  236. package/src/adapters/fetch/index.ts +2 -0
  237. package/src/adapters/fetch/types.ts +28 -0
  238. package/src/adapters/lambda/index.ts +18 -0
  239. package/src/adapters/next.ts +10 -8
  240. package/src/adapters/node-http/internals/getPostBody.test.ts +2 -1
  241. package/src/adapters/node-http/internals/getPostBody.ts +1 -1
  242. package/src/adapters/node-http/nodeHTTPRequestHandler.ts +7 -7
  243. package/src/adapters/node-http/types.ts +11 -9
  244. package/src/adapters/standalone.ts +12 -4
  245. package/src/adapters/ws.ts +135 -91
  246. package/src/assertNotBrowser.ts +1 -0
  247. package/src/core/index.ts +11 -0
  248. package/src/core/initTRPC.ts +95 -0
  249. package/src/core/internals/__generated__/mergeRoutersGeneric.ts +386 -0
  250. package/src/core/internals/config.ts +43 -0
  251. package/src/core/internals/getParseFn.ts +47 -0
  252. package/src/core/internals/mergeRouters.ts +45 -0
  253. package/src/core/internals/mergeWithoutOverrides.ts +19 -0
  254. package/src/core/internals/omitPrototype.ts +9 -0
  255. package/src/core/internals/prefixObjectKeys.ts +9 -0
  256. package/src/core/internals/procedureBuilder.ts +398 -0
  257. package/src/core/internals/utils.ts +64 -0
  258. package/src/core/middleware.ts +96 -0
  259. package/src/core/parser.ts +45 -0
  260. package/src/core/procedure.ts +120 -0
  261. package/src/core/router.ts +366 -0
  262. package/src/core/types.ts +58 -0
  263. package/src/{internals → deprecated/internals}/callProcedure.ts +9 -3
  264. package/src/{internals → deprecated/internals}/middlewares.ts +23 -3
  265. package/src/deprecated/internals/procedure.ts +415 -0
  266. package/src/deprecated/interop.ts +229 -0
  267. package/src/{router.ts → deprecated/router.ts} +219 -104
  268. package/src/{TRPCError.ts → error/TRPCError.ts} +6 -14
  269. package/src/error/formatter.ts +51 -0
  270. package/src/{internals/errors.ts → error/utils.ts} +21 -5
  271. package/src/http/index.ts +1 -1
  272. package/src/http/internals/getHTTPStatusCode.ts +3 -2
  273. package/src/http/internals/types.ts +11 -14
  274. package/src/http/resolveHTTPResponse.ts +29 -38
  275. package/src/http/{ResponseMeta.ts → types.ts} +0 -0
  276. package/src/index.ts +4 -7
  277. package/src/internals/transformTRPCResponse.ts +21 -16
  278. package/src/internals/types.ts +24 -0
  279. package/src/internals.ts +14 -0
  280. package/src/observable/index.ts +4 -0
  281. package/src/observable/internals/identity.ts +3 -0
  282. package/src/observable/internals/observableToPromise.ts +49 -0
  283. package/src/observable/internals/pipe.ts +23 -0
  284. package/src/observable/observable.test.ts +101 -0
  285. package/src/observable/observable.ts +78 -0
  286. package/src/observable/operators/index.ts +3 -0
  287. package/src/observable/operators/map.test.ts +92 -0
  288. package/src/observable/operators/map.ts +25 -0
  289. package/src/observable/operators/share.test.ts +60 -0
  290. package/src/observable/operators/share.ts +67 -0
  291. package/src/observable/operators/tap.ts +26 -0
  292. package/src/observable/types.ts +69 -0
  293. package/src/rpc/codes.ts +2 -1
  294. package/src/rpc/envelopes.ts +88 -69
  295. package/src/rpc/internals/invert.ts +27 -0
  296. package/src/shared/createProxy/index.ts +38 -0
  297. package/src/shared/index.ts +1 -0
  298. package/src/subscription.ts +7 -125
  299. package/src/transformer.ts +28 -0
  300. package/src/types.ts +40 -9
  301. package/dist/TRPCError.d.ts +0 -19
  302. package/dist/TRPCError.d.ts.map +0 -1
  303. package/dist/deprecated/LegacyRouter.d.ts +0 -3
  304. package/dist/deprecated/LegacyRouter.d.ts.map +0 -1
  305. package/dist/deprecated/createHttpServer.d.ts +0 -19
  306. package/dist/deprecated/createHttpServer.d.ts.map +0 -1
  307. package/dist/deprecated/requestHandler.d.ts +0 -15
  308. package/dist/deprecated/requestHandler.d.ts.map +0 -1
  309. package/dist/http/ResponseMeta.d.ts.map +0 -1
  310. package/dist/internals/BaseHandlerOptions.d.ts +0 -13
  311. package/dist/internals/BaseHandlerOptions.d.ts.map +0 -1
  312. package/dist/internals/OnErrorFunction.d.ts +0 -11
  313. package/dist/internals/OnErrorFunction.d.ts.map +0 -1
  314. package/dist/internals/callProcedure.d.ts.map +0 -1
  315. package/dist/internals/errors.d.ts.map +0 -1
  316. package/dist/internals/middlewares.d.ts.map +0 -1
  317. package/dist/internals/procedure.d.ts +0 -74
  318. package/dist/internals/procedure.d.ts.map +0 -1
  319. package/dist/internals/wrapCallSafe.d.ts +0 -16
  320. package/dist/internals/wrapCallSafe.d.ts.map +0 -1
  321. package/dist/router.d.ts +0 -176
  322. package/dist/router.d.ts.map +0 -1
  323. package/dist/subscription-5b7e1eba.js +0 -136
  324. package/dist/subscription-e1d42e69.mjs +0 -133
  325. package/dist/transformTRPCResponse-76e0c91e.mjs +0 -109
  326. package/dist/transformTRPCResponse-bd24f548.js +0 -114
  327. package/dist/ws/index.d.ts +0 -7
  328. package/dist/ws/index.d.ts.map +0 -1
  329. package/dist/ws/index.js +0 -15
  330. package/dist/ws/index.mjs +0 -11
  331. package/src/deprecated/LegacyRouter.ts +0 -3
  332. package/src/deprecated/createHttpServer.ts +0 -29
  333. package/src/deprecated/requestHandler.ts +0 -26
  334. package/src/internals/BaseHandlerOptions.ts +0 -13
  335. package/src/internals/OnErrorFunction.ts +0 -11
  336. package/src/internals/procedure.ts +0 -283
  337. package/src/internals/wrapCallSafe.ts +0 -19
  338. package/src/ws/index.ts +0 -8
  339. package/ws/dist/trpc-server-ws.cjs.d.ts +0 -1
  340. package/ws/dist/trpc-server-ws.cjs.dev.js +0 -15
  341. package/ws/dist/trpc-server-ws.cjs.js +0 -7
  342. package/ws/dist/trpc-server-ws.cjs.prod.js +0 -15
  343. package/ws/dist/trpc-server-ws.esm.js +0 -11
  344. package/ws/index.d.ts +0 -1
  345. package/ws/index.js +0 -1
@@ -0,0 +1,120 @@
1
+ import { DefaultErrorShape } from '../error/formatter';
2
+ import { CombinedDataTransformer } from '../transformer';
3
+ import { RootConfig } from './internals/config';
4
+ import {
5
+ ProcedureBuilderDef,
6
+ ProcedureCallOptions,
7
+ } from './internals/procedureBuilder';
8
+ import { UnsetMarker } from './internals/utils';
9
+
10
+ type ClientContext = Record<string, unknown>;
11
+
12
+ /**
13
+ * @internal
14
+ */
15
+ export interface ProcedureOptions {
16
+ /**
17
+ * Client-side context
18
+ */
19
+ context?: ClientContext;
20
+ }
21
+
22
+ /**
23
+ * FIXME: this should only take 1 generic argument instead of a list
24
+ * @internal
25
+ */
26
+ export interface ProcedureParams<
27
+ TConfig extends RootConfig = {
28
+ transformer: CombinedDataTransformer;
29
+ errorShape: DefaultErrorShape;
30
+ ctx: Record<string, unknown>;
31
+ meta: Record<string, unknown>;
32
+ },
33
+ TContextIn = unknown,
34
+ TContextOut = unknown,
35
+ TInputIn = unknown,
36
+ TInputOut = unknown,
37
+ TOutputIn = unknown,
38
+ TOutputOut = unknown,
39
+ TMeta = unknown,
40
+ > {
41
+ // FIXME make non-optional
42
+ _config: TConfig;
43
+ /**
44
+ * @internal
45
+ */
46
+ _meta: TMeta;
47
+ /**
48
+ * @internal
49
+ */
50
+ _ctx_in: TContextIn;
51
+ /**
52
+ * @internal
53
+ */
54
+ _ctx_out: TContextOut;
55
+ /**
56
+ * @internal
57
+ */
58
+ _input_in: TInputIn;
59
+ /**
60
+ * @internal
61
+ */
62
+ _input_out: TInputOut;
63
+ /**
64
+ * @internal
65
+ */
66
+ _output_in: TOutputIn;
67
+ /**
68
+ * @internal
69
+ */
70
+ _output_out: TOutputOut;
71
+ }
72
+
73
+ /**
74
+ * @internal
75
+ */
76
+ export type ProcedureArgs<TParams extends ProcedureParams> =
77
+ TParams['_input_in'] extends UnsetMarker
78
+ ? [input?: undefined | void, opts?: ProcedureOptions]
79
+ : undefined extends TParams['_input_in']
80
+ ? [input?: TParams['_input_in'] | void, opts?: ProcedureOptions]
81
+ : [input: TParams['_input_in'], opts?: ProcedureOptions];
82
+
83
+ /**
84
+ *
85
+ * @internal
86
+ */
87
+ export interface ProcedureBase<TParams extends ProcedureParams> {
88
+ _def: TParams & ProcedureBuilderDef;
89
+ /**
90
+ * @deprecated use `._def.meta` instead
91
+ */
92
+ meta?: TParams['_meta'];
93
+ _procedure: true;
94
+ /**
95
+ * @internal
96
+ */
97
+ (opts: ProcedureCallOptions): Promise<unknown>;
98
+ }
99
+
100
+ export interface QueryProcedure<TParams extends ProcedureParams>
101
+ extends ProcedureBase<TParams> {
102
+ _query: true;
103
+ }
104
+
105
+ export interface MutationProcedure<TParams extends ProcedureParams>
106
+ extends ProcedureBase<TParams> {
107
+ _mutation: true;
108
+ }
109
+
110
+ export interface SubscriptionProcedure<TParams extends ProcedureParams>
111
+ extends ProcedureBase<TParams> {
112
+ _subscription: true;
113
+ }
114
+
115
+ export type Procedure<TParams extends ProcedureParams> =
116
+ | QueryProcedure<TParams>
117
+ | MutationProcedure<TParams>
118
+ | SubscriptionProcedure<TParams>;
119
+
120
+ export type AnyProcedure = Procedure<any>;
@@ -0,0 +1,366 @@
1
+ /* eslint-disable @typescript-eslint/ban-types */
2
+ import { inferProcedureOutput } from '.';
3
+ import { Filter, Prefixer } from '..';
4
+ import { TRPCError } from '../error/TRPCError';
5
+ import {
6
+ DefaultErrorShape,
7
+ ErrorFormatter,
8
+ defaultFormatter,
9
+ } from '../error/formatter';
10
+ import { getHTTPStatusCodeFromError } from '../http/internals/getHTTPStatusCode';
11
+ import { TRPCErrorShape, TRPC_ERROR_CODES_BY_KEY } from '../rpc';
12
+ import { createProxy } from '../shared';
13
+ import { CombinedDataTransformer, defaultTransformer } from '../transformer';
14
+ import { RootConfig } from './internals/config';
15
+ import { mergeWithoutOverrides } from './internals/mergeWithoutOverrides';
16
+ import { omitPrototype } from './internals/omitPrototype';
17
+ import { ProcedureCallOptions } from './internals/procedureBuilder';
18
+ import {
19
+ AnyProcedure,
20
+ MutationProcedure,
21
+ Procedure,
22
+ ProcedureArgs,
23
+ QueryProcedure,
24
+ SubscriptionProcedure,
25
+ } from './procedure';
26
+ import { ProcedureType, procedureTypes } from './types';
27
+
28
+ type ProcedureRecord = Record<string, Procedure<any>>;
29
+
30
+ export type ProcedureRouterRecord = Record<string, Procedure<any> | AnyRouter>;
31
+
32
+ export interface ProcedureStructure {
33
+ queries: Record<string, QueryProcedure<any>>;
34
+ mutations: Record<string, MutationProcedure<any>>;
35
+ subscriptions: Record<string, SubscriptionProcedure<any>>;
36
+ procedures: ProcedureRecord;
37
+ }
38
+
39
+ type ObjKeyof<T> = T extends object ? keyof T : never;
40
+ type KeyofKeyof<T> = ObjKeyof<T> | { [K in keyof T]: ObjKeyof<T[K]> }[keyof T];
41
+ type StripNever<T> = Pick<
42
+ T,
43
+ { [K in keyof T]: [T[K]] extends [never] ? never : K }[keyof T]
44
+ >;
45
+ type Lookup<T, K> = T extends any ? (K extends keyof T ? T[K] : never) : never;
46
+ type SimpleFlatten<T> = T extends object
47
+ ? StripNever<{
48
+ [K in KeyofKeyof<T>]:
49
+ | Exclude<K extends keyof T ? T[K] : never, object>
50
+ | { [P in keyof T]: Lookup<T[P], K> }[keyof T];
51
+ }>
52
+ : T;
53
+
54
+ type PrefixedProcedures<T extends ProcedureRouterRecord> = {
55
+ [K in keyof T]: T[K] extends AnyRouter
56
+ ? T[K] extends Procedure<any>
57
+ ? never
58
+ : Prefixer<T[K]['_def']['procedures'], `${K & string}.`>
59
+ : never;
60
+ };
61
+ export interface RouterDef<
62
+ // FIXME this should use RootConfig
63
+ TContext,
64
+ TErrorShape extends TRPCErrorShape<number>,
65
+ TMeta extends Record<string, unknown>,
66
+ TRecord extends ProcedureRouterRecord,
67
+ > {
68
+ router: true;
69
+ /**
70
+ * @internal
71
+ */
72
+ _ctx: TContext;
73
+ /**
74
+ * @internal
75
+ */
76
+ _errorShape: TErrorShape;
77
+ /**
78
+ * @internal
79
+ */
80
+ _meta: TMeta;
81
+ errorFormatter: ErrorFormatter<TContext, TErrorShape>;
82
+ transformer: CombinedDataTransformer;
83
+ // FIXME this is slow
84
+ procedures: Filter<TRecord, Procedure<any>> &
85
+ SimpleFlatten<PrefixedProcedures<TRecord>>;
86
+ routers: Filter<TRecord, Router<any>>;
87
+ record: TRecord;
88
+ // FIXME this is slow
89
+ subscriptions: Filter<TRecord, SubscriptionProcedure<any>> &
90
+ Filter<
91
+ SimpleFlatten<PrefixedProcedures<TRecord>>,
92
+ SubscriptionProcedure<any>
93
+ >;
94
+ queries: Filter<TRecord, QueryProcedure<any>> &
95
+ Filter<SimpleFlatten<PrefixedProcedures<TRecord>>, QueryProcedure<any>>;
96
+ mutations: Filter<TRecord, MutationProcedure<any>> &
97
+ Filter<SimpleFlatten<PrefixedProcedures<TRecord>>, MutationProcedure<any>>;
98
+ }
99
+
100
+ export type AnyRouterDef<TContext = any> = RouterDef<TContext, any, any, any>;
101
+
102
+ /**
103
+ * @internal
104
+ */
105
+ export type inferHandlerInput<TProcedure extends Procedure<any>> =
106
+ TProcedure extends Procedure<infer TDef>
107
+ ? undefined extends TDef['_input_in'] // ? is input optional
108
+ ? unknown extends TDef['_input_in'] // ? is input unset
109
+ ? [(null | undefined)?] // -> there is no input
110
+ : [(TDef['_input_in'] | null | undefined)?] // -> there is optional input
111
+ : [TDef['_input_in']] // -> input is required
112
+ : [(undefined | null)?]; // -> there is no input
113
+
114
+ /**
115
+ * @internal
116
+ */
117
+ type inferHandlerFn<TProcedures extends Record<string, Procedure<any>>> = <
118
+ TProcedure extends TProcedures[TPath],
119
+ TPath extends keyof TProcedures & string,
120
+ >(
121
+ path: TPath,
122
+ ...args: inferHandlerInput<TProcedure>
123
+ ) => Promise<inferProcedureOutput<TProcedure>>;
124
+
125
+ type DecorateProcedure<TProcedure extends Procedure<any>> = (
126
+ input: ProcedureArgs<TProcedure['_def']>[0],
127
+ ) => Promise<TProcedure['_def']['_output_out']>;
128
+
129
+ type assertProcedure<T> = T extends Procedure<any> ? T : never;
130
+
131
+ /**
132
+ * @internal
133
+ */
134
+ type DecoratedProcedureRecord<TProcedures extends ProcedureRouterRecord> = {
135
+ [TKey in keyof TProcedures]: TProcedures[TKey] extends AnyRouter
136
+ ? DecoratedProcedureRecord<TProcedures[TKey]['_def']['record']>
137
+ : DecorateProcedure<assertProcedure<TProcedures[TKey]>>;
138
+ };
139
+
140
+ /**
141
+ * @internal
142
+ */
143
+ type RouterCaller<TDef extends AnyRouterDef> = (ctx: TDef['_ctx']) => {
144
+ /**
145
+ * @deprecated
146
+ */
147
+ query: inferHandlerFn<TDef['queries']>;
148
+ /**
149
+ * @deprecated
150
+ */
151
+ mutation: inferHandlerFn<TDef['mutations']>;
152
+ /**
153
+ * @deprecated
154
+ */
155
+ subscription: inferHandlerFn<TDef['subscriptions']>;
156
+ } & DecoratedProcedureRecord<TDef['record']>;
157
+
158
+ export interface Router<TDef extends AnyRouterDef> {
159
+ _def: RouterDef<
160
+ TDef['_ctx'],
161
+ TDef['_errorShape'],
162
+ TDef['_meta'],
163
+ TDef['record']
164
+ >;
165
+ /** @deprecated **/
166
+ errorFormatter: TDef['errorFormatter'];
167
+ /** @deprecated **/
168
+ transformer: TDef['transformer'];
169
+ createCaller: RouterCaller<TDef>;
170
+ // FIXME rename me and deprecate
171
+ getErrorShape(opts: {
172
+ error: TRPCError;
173
+ type: ProcedureType | 'unknown';
174
+ path: string | undefined;
175
+ input: unknown;
176
+ ctx: undefined | TDef['_ctx'];
177
+ }): TDef['_errorShape'];
178
+ }
179
+
180
+ /**
181
+ * @internal
182
+ */
183
+ export type RouterDefaultOptions<TContext> = Pick<
184
+ AnyRouterDef<TContext>,
185
+ 'transformer' | 'errorFormatter'
186
+ >;
187
+
188
+ /**
189
+ * @internal
190
+ */
191
+ export type RouterBuildOptions<TContext> = Partial<
192
+ Pick<AnyRouterDef<TContext>, 'procedures'>
193
+ >;
194
+
195
+ export type AnyRouter = Router<any>;
196
+
197
+ function isRouter(
198
+ procedureOrRouter: AnyProcedure | AnyRouter,
199
+ ): procedureOrRouter is AnyRouter {
200
+ return 'router' in procedureOrRouter._def;
201
+ }
202
+
203
+ const emptyRouter = {
204
+ _ctx: null as any,
205
+ _errorShape: null as any,
206
+ _meta: null as any,
207
+ queries: {},
208
+ mutations: {},
209
+ subscriptions: {},
210
+ errorFormatter: defaultFormatter,
211
+ transformer: defaultTransformer,
212
+ };
213
+
214
+ /**
215
+ *
216
+ * @internal
217
+ */
218
+ export function createRouterFactory<TConfig extends RootConfig>(
219
+ defaults?: RouterDefaultOptions<TConfig['ctx']>,
220
+ ) {
221
+ return function createRouterInner<
222
+ TProcRouterRecord extends ProcedureRouterRecord,
223
+ >(
224
+ opts: TProcRouterRecord,
225
+ ): Router<
226
+ RouterDef<
227
+ TConfig['ctx'],
228
+ TConfig['errorShape'],
229
+ TConfig['meta'],
230
+ TProcRouterRecord
231
+ >
232
+ > &
233
+ TProcRouterRecord {
234
+ const routerProcedures: Record<string, Procedure<any>> = omitPrototype({});
235
+ function recursiveGetPaths(procedures: ProcedureRouterRecord, path = '') {
236
+ for (const [key, procedureOrRouter] of Object.entries(procedures ?? {})) {
237
+ const newPath = `${path}${key}`;
238
+
239
+ if (isRouter(procedureOrRouter)) {
240
+ recursiveGetPaths(procedureOrRouter._def.procedures, `${newPath}.`);
241
+ continue;
242
+ }
243
+
244
+ routerProcedures[newPath] = procedureOrRouter;
245
+ }
246
+ }
247
+
248
+ recursiveGetPaths(opts);
249
+
250
+ const result = mergeWithoutOverrides<
251
+ RouterDefaultOptions<TConfig['ctx']> & RouterBuildOptions<TConfig['ctx']>
252
+ >(
253
+ {
254
+ transformer: defaults?.transformer ?? defaultTransformer,
255
+ errorFormatter: defaults?.errorFormatter ?? defaultFormatter,
256
+ },
257
+ { procedures: routerProcedures },
258
+ );
259
+
260
+ const _def: AnyRouterDef<TConfig['ctx']> = {
261
+ router: true,
262
+ procedures: {},
263
+ ...emptyRouter,
264
+ ...result,
265
+ record: opts,
266
+ queries: Object.entries(result.procedures || {})
267
+ .filter((pair) => (pair[1] as any)._def.query)
268
+ .reduce((acc, [key, val]) => ({ ...acc, [key]: val }), {}),
269
+ mutations: Object.entries(result.procedures || {})
270
+ .filter((pair) => (pair[1] as any)._def.mutation)
271
+ .reduce((acc, [key, val]) => ({ ...acc, [key]: val }), {}),
272
+ subscriptions: Object.entries(result.procedures || {})
273
+ .filter((pair) => (pair[1] as any)._def.subscription)
274
+ .reduce((acc, [key, val]) => ({ ...acc, [key]: val }), {}),
275
+ routers: Object.entries(result.procedures || {})
276
+ .filter((pair) => (pair[1] as any)._def._router)
277
+ .reduce((acc, [key, val]) => ({ ...acc, [key]: val }), {}),
278
+ };
279
+
280
+ const router: AnyRouter = {
281
+ ...opts,
282
+ _def,
283
+ transformer: _def.transformer,
284
+ errorFormatter: _def.errorFormatter,
285
+ createCaller(ctx) {
286
+ const proxy = createProxy(({ path, args }) => {
287
+ // interop mode
288
+ if (
289
+ path.length === 1 &&
290
+ procedureTypes.includes(path[0] as ProcedureType)
291
+ ) {
292
+ return callProcedure({
293
+ procedures: _def.procedures,
294
+ path: args[0] as string,
295
+ rawInput: args[1],
296
+ ctx,
297
+ type: path[0] as ProcedureType,
298
+ });
299
+ }
300
+
301
+ const fullPath = path.join('.');
302
+ const procedure = _def.procedures[fullPath] as AnyProcedure;
303
+
304
+ let type: ProcedureType = 'query';
305
+ if (procedure._def.mutation) {
306
+ type = 'mutation';
307
+ } else if (procedure._def.subscription) {
308
+ type = 'subscription';
309
+ }
310
+
311
+ return procedure({
312
+ path: fullPath,
313
+ rawInput: args[0],
314
+ ctx,
315
+ type,
316
+ });
317
+ });
318
+
319
+ return proxy as ReturnType<RouterCaller<any>>;
320
+ },
321
+ getErrorShape(opts) {
322
+ const { path, error } = opts;
323
+ const { code } = opts.error;
324
+ const shape: DefaultErrorShape = {
325
+ message: error.message,
326
+ code: TRPC_ERROR_CODES_BY_KEY[code],
327
+ data: {
328
+ code,
329
+ httpStatus: getHTTPStatusCodeFromError(error),
330
+ },
331
+ };
332
+ if (
333
+ process.env.NODE_ENV !== 'production' &&
334
+ typeof opts.error.stack === 'string'
335
+ ) {
336
+ shape.data.stack = opts.error.stack;
337
+ }
338
+ if (typeof path === 'string') {
339
+ shape.data.path = path;
340
+ }
341
+ return this._def.errorFormatter({ ...opts, shape });
342
+ },
343
+ };
344
+ return router as any;
345
+ };
346
+ }
347
+
348
+ /**
349
+ * @internal
350
+ */
351
+ export function callProcedure(
352
+ opts: ProcedureCallOptions & { procedures: ProcedureRouterRecord },
353
+ ) {
354
+ const { type, path } = opts;
355
+
356
+ if (!(path in opts.procedures) || !opts.procedures[path]?._def[type]) {
357
+ throw new TRPCError({
358
+ code: 'NOT_FOUND',
359
+ message: `No "${type}"-procedure on path "${path}"`,
360
+ });
361
+ }
362
+
363
+ const procedure = opts.procedures[path] as AnyProcedure;
364
+
365
+ return procedure(opts);
366
+ }
@@ -0,0 +1,58 @@
1
+ import { inferObservableValue } from '../observable';
2
+ import { Procedure, ProcedureArgs } from './procedure';
3
+ import { AnyRouter, AnyRouterDef, Router } from './router';
4
+
5
+ export type inferRouterDef<TRouter extends AnyRouter> = TRouter extends Router<
6
+ infer TParams
7
+ >
8
+ ? TParams extends AnyRouterDef<any>
9
+ ? TParams
10
+ : never
11
+ : never;
12
+
13
+ export type inferRouterContext<TRouter extends AnyRouter> =
14
+ inferRouterDef<TRouter>['_ctx'];
15
+ export type inferRouterError<TRouter extends AnyRouter> =
16
+ inferRouterDef<TRouter>['_errorShape'];
17
+ export type inferRouterMeta<TRouter extends AnyRouter> =
18
+ inferRouterDef<TRouter>['_meta'];
19
+
20
+ export const procedureTypes = ['query', 'mutation', 'subscription'] as const;
21
+ /**
22
+ * @public
23
+ */
24
+ export type ProcedureType = typeof procedureTypes[number];
25
+
26
+ export type inferHandlerInput<TProcedure extends Procedure<any>> =
27
+ ProcedureArgs<inferProcedureParams<TProcedure>>;
28
+
29
+ export type inferProcedureInput<TProcedure extends Procedure<any>> =
30
+ inferHandlerInput<TProcedure>[0];
31
+
32
+ // /**
33
+ // * @internal
34
+ // */
35
+ // type inferProcedureFn<TProcedure extends Procedure<any>> =
36
+ // TProcedure extends QueryProcedure<any>
37
+ // ? TProcedure['query']
38
+ // : TProcedure extends SubscriptionProcedure<any>
39
+ // ? TProcedure['subscription']
40
+ // : TProcedure extends MutationProcedure<any>
41
+ // ? TProcedure['mutate']
42
+ // : never;
43
+
44
+ export type inferProcedureParams<TProcedure> = TProcedure extends Procedure<any>
45
+ ? TProcedure['_def']
46
+ : never;
47
+ export type inferProcedureOutput<TProcedure> =
48
+ inferProcedureParams<TProcedure>['_output_out'];
49
+
50
+ export type inferSubscriptionOutput<
51
+ TRouter extends AnyRouter,
52
+ TPath extends keyof TRouter['_def']['subscriptions'] & string,
53
+ > = inferObservableValue<
54
+ inferProcedureOutput<TRouter['_def']['subscriptions'][TPath]>
55
+ >;
56
+
57
+ export type inferProcedureClientError<T extends Procedure<any>> =
58
+ inferProcedureParams<T>['_config']['errorShape'];
@@ -1,6 +1,9 @@
1
+ import { Observable } from '../../observable';
1
2
  import { AnyRouter, ProcedureType } from '../router';
2
- import { Subscription } from '../subscription';
3
3
 
4
+ /**
5
+ * @deprecated
6
+ */
4
7
  export async function callProcedure<
5
8
  TRouter extends AnyRouter<TContext>,
6
9
  TContext,
@@ -10,7 +13,7 @@ export async function callProcedure<
10
13
  router: TRouter;
11
14
  ctx: TContext;
12
15
  type: ProcedureType;
13
- }): Promise<unknown | Subscription<TRouter>> {
16
+ }): Promise<unknown | Observable<TRouter, any>> {
14
17
  const { type, path, input } = opts;
15
18
 
16
19
  const caller = opts.router.createCaller(opts.ctx);
@@ -21,7 +24,10 @@ export async function callProcedure<
21
24
  return caller.mutation(path, input as any);
22
25
  }
23
26
  if (type === 'subscription') {
24
- const sub = (await caller.subscription(path, input as any)) as Subscription;
27
+ const sub = (await caller.subscription(path, input as any)) as Observable<
28
+ any,
29
+ any
30
+ >;
25
31
  return sub;
26
32
  }
27
33
  /* istanbul ignore next */
@@ -1,7 +1,13 @@
1
+ import { TRPCError } from '../../error/TRPCError';
1
2
  import { ProcedureType } from '../router';
2
- import { TRPCError } from '../TRPCError';
3
3
 
4
- export const middlewareMarker = Symbol('middlewareMarker');
4
+ /**
5
+ * @deprecated
6
+ */
7
+ export const middlewareMarker = 'middlewareMarker' as 'middlewareMarker' & {
8
+ __brand: 'middlewareMarker';
9
+ };
10
+
5
11
  interface MiddlewareResultBase<TContext> {
6
12
  /**
7
13
  * All middlewares should pass through their `next()`'s output.
@@ -11,11 +17,18 @@ interface MiddlewareResultBase<TContext> {
11
17
  ctx: TContext;
12
18
  }
13
19
 
20
+ /**
21
+ * @deprecated
22
+ */
14
23
  interface MiddlewareOKResult<TContext> extends MiddlewareResultBase<TContext> {
15
24
  ok: true;
16
25
  data: unknown;
17
26
  // this could be extended with `input`/`rawInput` later
18
27
  }
28
+
29
+ /**
30
+ * @deprecated
31
+ */
19
32
  interface MiddlewareErrorResult<TContext>
20
33
  extends MiddlewareResultBase<TContext> {
21
34
  ok: false;
@@ -23,15 +36,22 @@ interface MiddlewareErrorResult<TContext>
23
36
  // we could guarantee it's always of this type
24
37
  }
25
38
 
39
+ /**
40
+ * @deprecated
41
+ */
26
42
  export type MiddlewareResult<TContext> =
27
43
  | MiddlewareOKResult<TContext>
28
44
  | MiddlewareErrorResult<TContext>;
29
45
 
30
- export type MiddlewareFunction<TInputContext, TContext> = (opts: {
46
+ /**
47
+ * @deprecated
48
+ */
49
+ export type MiddlewareFunction<TInputContext, TContext, TMeta> = (opts: {
31
50
  ctx: TInputContext;
32
51
  type: ProcedureType;
33
52
  path: string;
34
53
  rawInput: unknown;
54
+ meta?: TMeta;
35
55
  next: {
36
56
  (): Promise<MiddlewareResult<TInputContext>>;
37
57
  <T>(opts: { ctx: T }): Promise<MiddlewareResult<T>>;