@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
@@ -0,0 +1,115 @@
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
+ export interface ProcedureOptions {
12
+ /**
13
+ * Client-side context
14
+ */
15
+ context?: ClientContext;
16
+ }
17
+
18
+ /**
19
+ * @internal
20
+ */
21
+ export interface ProcedureParams<
22
+ TConfig extends RootConfig = {
23
+ transformer: CombinedDataTransformer;
24
+ errorShape: DefaultErrorShape;
25
+ ctx: Record<string, unknown>;
26
+ meta: Record<string, unknown>;
27
+ },
28
+ TContextIn = unknown,
29
+ TContextOut = unknown,
30
+ TInputIn = unknown,
31
+ TInputOut = unknown,
32
+ TOutputIn = unknown,
33
+ TOutputOut = unknown,
34
+ TMeta = unknown,
35
+ > {
36
+ // FIXME make non-optional
37
+ _config: TConfig;
38
+ /**
39
+ * @internal
40
+ */
41
+ _meta: TMeta;
42
+ /**
43
+ * @internal
44
+ */
45
+ _ctx_in: TContextIn;
46
+ /**
47
+ * @internal
48
+ */
49
+ _ctx_out: TContextOut;
50
+ /**
51
+ * @internal
52
+ */
53
+ _input_in: TInputIn;
54
+ /**
55
+ * @internal
56
+ */
57
+ _input_out: TInputOut;
58
+ /**
59
+ * @internal
60
+ */
61
+ _output_in: TOutputIn;
62
+ /**
63
+ * @internal
64
+ */
65
+ _output_out: TOutputOut;
66
+ }
67
+
68
+ /**
69
+ * @internal
70
+ */
71
+ export type ProcedureArgs<TParams extends ProcedureParams> =
72
+ TParams['_input_in'] extends UnsetMarker
73
+ ? [input?: undefined | void, opts?: ProcedureOptions]
74
+ : undefined extends TParams['_input_in']
75
+ ? [input?: TParams['_input_in'] | void, opts?: ProcedureOptions]
76
+ : [input: TParams['_input_in'], opts?: ProcedureOptions];
77
+
78
+ /**
79
+ *
80
+ * @internal
81
+ */
82
+ export interface ProcedureBase<TParams extends ProcedureParams> {
83
+ _def: TParams & ProcedureBuilderDef;
84
+ /**
85
+ * @deprecated use `._def.meta` instead
86
+ */
87
+ meta?: TParams['_meta'];
88
+ _procedure: true;
89
+ /**
90
+ * @internal
91
+ */
92
+ (opts: ProcedureCallOptions): Promise<unknown>;
93
+ }
94
+
95
+ export interface QueryProcedure<TParams extends ProcedureParams>
96
+ extends ProcedureBase<TParams> {
97
+ _query: true;
98
+ }
99
+
100
+ export interface MutationProcedure<TParams extends ProcedureParams>
101
+ extends ProcedureBase<TParams> {
102
+ _mutation: true;
103
+ }
104
+
105
+ export interface SubscriptionProcedure<TParams extends ProcedureParams>
106
+ extends ProcedureBase<TParams> {
107
+ _subscription: true;
108
+ }
109
+
110
+ export type Procedure<TParams extends ProcedureParams> =
111
+ | QueryProcedure<TParams>
112
+ | MutationProcedure<TParams>
113
+ | SubscriptionProcedure<TParams>;
114
+
115
+ 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>>;