@trpc/server 10.0.0-alpha.3 → 10.0.0-alpha.30

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 (326) hide show
  1. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.d.ts +1 -0
  2. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.dev.js +170 -0
  3. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.js +7 -0
  4. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.prod.js +170 -0
  5. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.esm.js +166 -0
  6. package/adapters/aws-lambda/index.d.ts +1 -0
  7. package/adapters/aws-lambda/index.js +1 -0
  8. package/adapters/express/dist/trpc-server-adapters-express.cjs.dev.js +7 -6
  9. package/adapters/express/dist/trpc-server-adapters-express.cjs.prod.js +7 -6
  10. package/adapters/express/dist/trpc-server-adapters-express.esm.js +7 -6
  11. package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.d.ts +1 -0
  12. package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.dev.js +109 -0
  13. package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.js +7 -0
  14. package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.prod.js +109 -0
  15. package/adapters/fastify/dist/trpc-server-adapters-fastify.esm.js +104 -0
  16. package/adapters/fastify/index.d.ts +1 -0
  17. package/adapters/fastify/index.js +1 -0
  18. package/adapters/fetch/index.d.ts +1 -0
  19. package/adapters/fetch/index.js +1 -0
  20. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.d.ts +1 -0
  21. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.dev.js +25 -0
  22. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.js +7 -0
  23. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.prod.js +25 -0
  24. package/adapters/lambda/dist/trpc-server-adapters-lambda.esm.js +21 -0
  25. package/adapters/next/dist/trpc-server-adapters-next.cjs.dev.js +4 -3
  26. package/adapters/next/dist/trpc-server-adapters-next.cjs.prod.js +4 -3
  27. package/adapters/next/dist/trpc-server-adapters-next.esm.js +4 -3
  28. package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.dev.js +4 -3
  29. package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.prod.js +4 -3
  30. package/adapters/node-http/dist/trpc-server-adapters-node-http.esm.js +4 -3
  31. package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.dev.js +5 -4
  32. package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.prod.js +5 -4
  33. package/adapters/standalone/dist/trpc-server-adapters-standalone.esm.js +5 -4
  34. package/adapters/ws/dist/trpc-server-adapters-ws.cjs.dev.js +6 -5
  35. package/adapters/ws/dist/trpc-server-adapters-ws.cjs.prod.js +6 -5
  36. package/adapters/ws/dist/trpc-server-adapters-ws.esm.js +6 -5
  37. package/dist/TRPCError-9050a68d.js +69 -0
  38. package/dist/TRPCError-b7fa0c31.mjs +65 -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/utils.d.ts +34 -0
  42. package/dist/adapters/aws-lambda/utils.d.ts.map +1 -0
  43. package/dist/adapters/express.d.ts +1 -1
  44. package/dist/adapters/express.d.ts.map +1 -1
  45. package/dist/adapters/express.js +8 -7
  46. package/dist/adapters/express.mjs +8 -7
  47. package/dist/adapters/fastify/fastifyRequestHandler.d.ts +13 -0
  48. package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -0
  49. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +12 -0
  50. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -0
  51. package/dist/adapters/fastify/index.d.ts +3 -0
  52. package/dist/adapters/fastify/index.d.ts.map +1 -0
  53. package/dist/adapters/fastify/index.js +108 -0
  54. package/dist/adapters/fastify/index.mjs +103 -0
  55. package/dist/{ws → adapters/fastify}/index.ts.js +0 -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 +69 -0
  61. package/dist/adapters/fetch/index.mjs +65 -0
  62. package/dist/adapters/fetch/index.ts.js +1 -0
  63. package/dist/adapters/fetch/types.d.ts +21 -0
  64. package/dist/adapters/fetch/types.d.ts.map +1 -0
  65. package/dist/adapters/lambda/index.d.ts +12 -0
  66. package/dist/adapters/lambda/index.d.ts.map +1 -0
  67. package/dist/adapters/next.d.ts +2 -2
  68. package/dist/adapters/next.d.ts.map +1 -1
  69. package/dist/adapters/next.js +9 -9
  70. package/dist/adapters/next.mjs +8 -8
  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 +11 -7
  82. package/dist/adapters/standalone.mjs +11 -6
  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 +123 -90
  86. package/dist/adapters/ws.mjs +118 -85
  87. package/dist/assertNotBrowser.d.ts.map +1 -1
  88. package/dist/core/index.d.ts +5 -0
  89. package/dist/core/index.d.ts.map +1 -0
  90. package/dist/core/initTRPC.d.ts +64 -0
  91. package/dist/core/initTRPC.d.ts.map +1 -0
  92. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts +222 -0
  93. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts.map +1 -0
  94. package/dist/core/internals/config.d.ts +36 -0
  95. package/dist/core/internals/config.d.ts.map +1 -0
  96. package/dist/core/internals/getParseFn.d.ts +9 -0
  97. package/dist/core/internals/getParseFn.d.ts.map +1 -0
  98. package/dist/core/internals/internalProcedure.d.ts +78 -0
  99. package/dist/core/internals/internalProcedure.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 +99 -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 +79 -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 +69 -0
  117. package/dist/core/procedure.d.ts.map +1 -0
  118. package/dist/core/router.d.ts +104 -0
  119. package/dist/core/router.d.ts.map +1 -0
  120. package/dist/core/types.d.ts +17 -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 +18 -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/{codes-7a3d4f65.mjs → envelopes-af8c2959.mjs} +30 -1
  133. package/dist/{codes-7f46544e.js → envelopes-b6dd0367.js} +29 -1
  134. package/dist/error/TRPCError.d.ts +11 -0
  135. package/dist/error/TRPCError.d.ts.map +1 -0
  136. package/dist/error/formatter.d.ts +33 -0
  137. package/dist/error/formatter.d.ts.map +1 -0
  138. package/dist/{internals/errors.d.ts → error/utils.d.ts} +3 -2
  139. package/dist/error/utils.d.ts.map +1 -0
  140. package/dist/http/index.d.ts +1 -1
  141. package/dist/http/index.d.ts.map +1 -1
  142. package/dist/http/internals/getHTTPStatusCode.d.ts +2 -1
  143. package/dist/http/internals/getHTTPStatusCode.d.ts.map +1 -1
  144. package/dist/http/internals/types.d.ts +11 -8
  145. package/dist/http/internals/types.d.ts.map +1 -1
  146. package/dist/http/resolveHTTPResponse.d.ts +4 -4
  147. package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
  148. package/dist/http/{ResponseMeta.d.ts → types.d.ts} +1 -1
  149. package/dist/http/types.d.ts.map +1 -0
  150. package/dist/index.d.ts +3 -5
  151. package/dist/index.d.ts.map +1 -1
  152. package/dist/index.js +797 -105
  153. package/dist/index.mjs +786 -90
  154. package/dist/internals/transformTRPCResponse.d.ts +5 -3
  155. package/dist/internals/transformTRPCResponse.d.ts.map +1 -1
  156. package/dist/internals/types.d.ts +23 -0
  157. package/dist/internals/types.d.ts.map +1 -0
  158. package/dist/nodeHTTPRequestHandler-174459c5.mjs +105 -0
  159. package/dist/nodeHTTPRequestHandler-6b7c8622.js +107 -0
  160. package/dist/observable/index.d.ts +5 -0
  161. package/dist/observable/index.d.ts.map +1 -0
  162. package/dist/observable/index.js +204 -0
  163. package/dist/observable/index.mjs +195 -0
  164. package/dist/observable/index.ts.js +1 -0
  165. package/dist/observable/internals/identity.d.ts +2 -0
  166. package/dist/observable/internals/identity.d.ts.map +1 -0
  167. package/dist/observable/internals/observableToPromise.d.ts +10 -0
  168. package/dist/observable/internals/observableToPromise.d.ts.map +1 -0
  169. package/dist/observable/internals/pipe.d.ts +4 -0
  170. package/dist/observable/internals/pipe.d.ts.map +1 -0
  171. package/dist/observable/observable.d.ts +5 -0
  172. package/dist/observable/observable.d.ts.map +1 -0
  173. package/dist/observable/operators/index.d.ts +4 -0
  174. package/dist/observable/operators/index.d.ts.map +1 -0
  175. package/dist/observable/operators/map.d.ts +3 -0
  176. package/dist/observable/operators/map.d.ts.map +1 -0
  177. package/dist/observable/operators/share.d.ts +6 -0
  178. package/dist/observable/operators/share.d.ts.map +1 -0
  179. package/dist/observable/operators/tap.d.ts +3 -0
  180. package/dist/observable/operators/tap.d.ts.map +1 -0
  181. package/dist/observable/types.d.ts +29 -0
  182. package/dist/observable/types.d.ts.map +1 -0
  183. package/dist/observable-137ea1bd.mjs +105 -0
  184. package/dist/observable-3aa4d911.js +108 -0
  185. package/dist/{nodeHTTPRequestHandler-10e6d2f9.mjs → resolveHTTPResponse-8657b8de.mjs} +32 -133
  186. package/dist/{nodeHTTPRequestHandler-d7c307d3.js → resolveHTTPResponse-fcc8f644.js} +37 -139
  187. package/dist/rpc/codes.d.ts +2 -0
  188. package/dist/rpc/codes.d.ts.map +1 -1
  189. package/dist/rpc/envelopes.d.ts +62 -40
  190. package/dist/rpc/envelopes.d.ts.map +1 -1
  191. package/dist/rpc/index.js +7 -3
  192. package/dist/rpc/index.mjs +1 -1
  193. package/dist/rpc/internals/invert.d.ts +18 -0
  194. package/dist/rpc/internals/invert.d.ts.map +1 -0
  195. package/dist/subscription.d.ts +3 -52
  196. package/dist/subscription.d.ts.map +1 -1
  197. package/dist/subscription.js +44 -0
  198. package/dist/subscription.mjs +40 -0
  199. package/dist/subscription.ts.js +1 -0
  200. package/dist/transformTRPCResponse-0c261655.js +29 -0
  201. package/dist/transformTRPCResponse-747b9a68.mjs +27 -0
  202. package/dist/transformer.d.ts +14 -0
  203. package/dist/transformer.d.ts.map +1 -1
  204. package/dist/types.d.ts +23 -8
  205. package/dist/types.d.ts.map +1 -1
  206. package/observable/index.d.ts +1 -0
  207. package/observable/index.js +1 -0
  208. package/package.json +50 -16
  209. package/rpc/dist/trpc-server-rpc.cjs.dev.js +1 -1
  210. package/rpc/dist/trpc-server-rpc.cjs.prod.js +1 -1
  211. package/rpc/dist/trpc-server-rpc.esm.js +1 -1
  212. package/src/adapters/aws-lambda/index.ts +156 -0
  213. package/src/adapters/aws-lambda/utils.ts +91 -0
  214. package/src/adapters/express.ts +4 -4
  215. package/src/adapters/fastify/fastifyRequestHandler.ts +77 -0
  216. package/src/adapters/fastify/fastifyTRPCPlugin.ts +56 -0
  217. package/src/adapters/fastify/index.ts +2 -0
  218. package/src/adapters/fetch/fetchRequestHandler.ts +61 -0
  219. package/src/adapters/fetch/index.ts +2 -0
  220. package/src/adapters/fetch/types.ts +28 -0
  221. package/src/adapters/lambda/index.ts +18 -0
  222. package/src/adapters/next.ts +10 -8
  223. package/src/adapters/node-http/internals/getPostBody.test.ts +2 -1
  224. package/src/adapters/node-http/internals/getPostBody.ts +1 -1
  225. package/src/adapters/node-http/nodeHTTPRequestHandler.ts +7 -7
  226. package/src/adapters/node-http/types.ts +11 -9
  227. package/src/adapters/standalone.ts +12 -4
  228. package/src/adapters/ws.ts +135 -91
  229. package/src/assertNotBrowser.ts +1 -0
  230. package/src/core/index.ts +5 -0
  231. package/src/core/initTRPC.ts +95 -0
  232. package/src/core/internals/__generated__/mergeRoutersGeneric.ts +326 -0
  233. package/src/core/internals/config.ts +42 -0
  234. package/src/core/internals/getParseFn.ts +47 -0
  235. package/src/core/internals/internalProcedure.ts +296 -0
  236. package/src/core/internals/mergeRouters.ts +45 -0
  237. package/src/core/internals/mergeWithoutOverrides.ts +19 -0
  238. package/src/core/internals/omitPrototype.ts +9 -0
  239. package/src/core/internals/prefixObjectKeys.ts +9 -0
  240. package/src/core/internals/procedureBuilder.ts +180 -0
  241. package/src/core/internals/utils.ts +64 -0
  242. package/src/core/middleware.ts +94 -0
  243. package/src/core/parser.ts +45 -0
  244. package/src/core/procedure.ts +95 -0
  245. package/src/core/router.ts +336 -0
  246. package/src/core/types.ts +53 -0
  247. package/src/{internals → deprecated/internals}/callProcedure.ts +9 -3
  248. package/src/{internals → deprecated/internals}/middlewares.ts +23 -3
  249. package/src/deprecated/internals/procedure.ts +415 -0
  250. package/src/deprecated/interop.ts +196 -0
  251. package/src/{router.ts → deprecated/router.ts} +216 -100
  252. package/src/{TRPCError.ts → error/TRPCError.ts} +6 -14
  253. package/src/error/formatter.ts +51 -0
  254. package/src/{internals/errors.ts → error/utils.ts} +21 -5
  255. package/src/http/index.ts +1 -1
  256. package/src/http/internals/getHTTPStatusCode.ts +3 -2
  257. package/src/http/internals/types.ts +11 -14
  258. package/src/http/resolveHTTPResponse.ts +28 -37
  259. package/src/http/{ResponseMeta.ts → types.ts} +0 -0
  260. package/src/index.ts +3 -7
  261. package/src/internals/transformTRPCResponse.ts +21 -16
  262. package/src/internals/types.ts +24 -0
  263. package/src/observable/index.ts +4 -0
  264. package/src/observable/internals/identity.ts +3 -0
  265. package/src/observable/internals/observableToPromise.ts +49 -0
  266. package/src/observable/internals/pipe.ts +22 -0
  267. package/src/observable/observable.test.ts +101 -0
  268. package/src/observable/observable.ts +78 -0
  269. package/src/observable/operators/index.ts +3 -0
  270. package/src/observable/operators/map.test.ts +92 -0
  271. package/src/observable/operators/map.ts +25 -0
  272. package/src/observable/operators/share.test.ts +60 -0
  273. package/src/observable/operators/share.ts +67 -0
  274. package/src/observable/operators/tap.ts +26 -0
  275. package/src/observable/types.ts +69 -0
  276. package/src/rpc/codes.ts +2 -1
  277. package/src/rpc/envelopes.ts +88 -69
  278. package/src/rpc/internals/invert.ts +27 -0
  279. package/src/subscription.ts +7 -125
  280. package/src/transformer.ts +28 -0
  281. package/src/types.ts +26 -9
  282. package/dist/TRPCError.d.ts +0 -19
  283. package/dist/TRPCError.d.ts.map +0 -1
  284. package/dist/deprecated/LegacyRouter.d.ts +0 -3
  285. package/dist/deprecated/LegacyRouter.d.ts.map +0 -1
  286. package/dist/deprecated/createHttpServer.d.ts +0 -19
  287. package/dist/deprecated/createHttpServer.d.ts.map +0 -1
  288. package/dist/deprecated/requestHandler.d.ts +0 -15
  289. package/dist/deprecated/requestHandler.d.ts.map +0 -1
  290. package/dist/http/ResponseMeta.d.ts.map +0 -1
  291. package/dist/internals/BaseHandlerOptions.d.ts +0 -13
  292. package/dist/internals/BaseHandlerOptions.d.ts.map +0 -1
  293. package/dist/internals/OnErrorFunction.d.ts +0 -11
  294. package/dist/internals/OnErrorFunction.d.ts.map +0 -1
  295. package/dist/internals/callProcedure.d.ts.map +0 -1
  296. package/dist/internals/errors.d.ts.map +0 -1
  297. package/dist/internals/middlewares.d.ts.map +0 -1
  298. package/dist/internals/procedure.d.ts +0 -74
  299. package/dist/internals/procedure.d.ts.map +0 -1
  300. package/dist/internals/wrapCallSafe.d.ts +0 -16
  301. package/dist/internals/wrapCallSafe.d.ts.map +0 -1
  302. package/dist/router.d.ts +0 -176
  303. package/dist/router.d.ts.map +0 -1
  304. package/dist/subscription-5b7e1eba.js +0 -136
  305. package/dist/subscription-e1d42e69.mjs +0 -133
  306. package/dist/transformTRPCResponse-76e0c91e.mjs +0 -109
  307. package/dist/transformTRPCResponse-bd24f548.js +0 -114
  308. package/dist/ws/index.d.ts +0 -7
  309. package/dist/ws/index.d.ts.map +0 -1
  310. package/dist/ws/index.js +0 -15
  311. package/dist/ws/index.mjs +0 -11
  312. package/src/deprecated/LegacyRouter.ts +0 -3
  313. package/src/deprecated/createHttpServer.ts +0 -29
  314. package/src/deprecated/requestHandler.ts +0 -26
  315. package/src/internals/BaseHandlerOptions.ts +0 -13
  316. package/src/internals/OnErrorFunction.ts +0 -11
  317. package/src/internals/procedure.ts +0 -283
  318. package/src/internals/wrapCallSafe.ts +0 -19
  319. package/src/ws/index.ts +0 -8
  320. package/ws/dist/trpc-server-ws.cjs.d.ts +0 -1
  321. package/ws/dist/trpc-server-ws.cjs.dev.js +0 -15
  322. package/ws/dist/trpc-server-ws.cjs.js +0 -7
  323. package/ws/dist/trpc-server-ws.cjs.prod.js +0 -15
  324. package/ws/dist/trpc-server-ws.esm.js +0 -11
  325. package/ws/index.d.ts +0 -1
  326. package/ws/index.js +0 -1
@@ -0,0 +1,94 @@
1
+ import { RootConfig } from './internals/config';
2
+ import { MiddlewareMarker } from './internals/utils';
3
+ import { ProcedureParams } from './procedure';
4
+ import { ProcedureType } from './types';
5
+
6
+ /**
7
+ * @internal
8
+ */
9
+ interface MiddlewareResultBase {
10
+ /**
11
+ * All middlewares should pass through their `next()`'s output.
12
+ * Requiring this marker makes sure that can't be forgotten at compile-time.
13
+ */
14
+ readonly marker: MiddlewareMarker;
15
+ }
16
+
17
+ /**
18
+ * @internal
19
+ */
20
+ interface MiddlewareOKResult<_TParams extends ProcedureParams>
21
+ extends MiddlewareResultBase {
22
+ ok: true;
23
+ data: unknown;
24
+ // this could be extended with `input`/`rawInput` later
25
+ }
26
+
27
+ /**
28
+ * @internal
29
+ */
30
+ interface MiddlewareErrorResult<_TParams extends ProcedureParams>
31
+ extends MiddlewareResultBase {
32
+ ok: false;
33
+ error: Error;
34
+ // we could guarantee it's always of this type
35
+ }
36
+
37
+ /**
38
+ * @internal
39
+ */
40
+ export type MiddlewareResult<TParams extends ProcedureParams> =
41
+ | MiddlewareOKResult<TParams>
42
+ | MiddlewareErrorResult<TParams>;
43
+
44
+ /**
45
+ * @internal
46
+ */
47
+ export type MiddlewareFunction<
48
+ TParams extends ProcedureParams,
49
+ TParamsAfter extends ProcedureParams,
50
+ > = (opts: {
51
+ ctx: TParams['_ctx_out'];
52
+ type: ProcedureType;
53
+ path: string;
54
+ input: TParams['_input_out'];
55
+ rawInput: unknown;
56
+ meta: TParams['_meta'];
57
+ next: {
58
+ (): Promise<MiddlewareResult<TParams>>;
59
+ <$TContext>(opts: { ctx: $TContext }): Promise<
60
+ MiddlewareResult<{
61
+ _ctx_in: TParams['_ctx_in'];
62
+ _ctx_out: $TContext;
63
+ _input_in: TParams['_input_in'];
64
+ _input_out: TParams['_input_out'];
65
+ _output_in: TParams['_output_in'];
66
+ _output_out: TParams['_output_out'];
67
+ _meta: TParams['_meta'];
68
+ }>
69
+ >;
70
+ };
71
+ }) => Promise<MiddlewareResult<TParamsAfter>>;
72
+
73
+ /**
74
+ * @internal
75
+ */
76
+ // FIXME this should use RootConfig
77
+ export function createMiddlewareFactory<TConfig extends RootConfig>() {
78
+ return function createMiddleware<$TNewParams extends ProcedureParams>(
79
+ fn: MiddlewareFunction<
80
+ {
81
+ _ctx_in: TConfig['ctx'];
82
+ _ctx_out: TConfig['ctx'];
83
+ _input_out: unknown;
84
+ _input_in: unknown;
85
+ _output_in: unknown;
86
+ _output_out: unknown;
87
+ _meta: TConfig['meta'];
88
+ },
89
+ $TNewParams
90
+ >,
91
+ ) {
92
+ return fn;
93
+ };
94
+ }
@@ -0,0 +1,45 @@
1
+ export type ParserZodEsque<TInput, TParsedInput> = {
2
+ _input: TInput;
3
+ _output: TParsedInput;
4
+ };
5
+
6
+ export type ParserMyZodEsque<TInput> = {
7
+ parse: (input: any) => TInput;
8
+ };
9
+
10
+ export type ParserSuperstructEsque<TInput> = {
11
+ create: (input: unknown) => TInput;
12
+ };
13
+
14
+ export type ParserCustomValidatorEsque<TInput> = (
15
+ input: unknown,
16
+ ) => TInput | Promise<TInput>;
17
+
18
+ export type ParserYupEsque<TInput> = {
19
+ validateSync: (input: unknown) => TInput;
20
+ };
21
+ export type ParserWithoutInput<TInput> =
22
+ | ParserYupEsque<TInput>
23
+ | ParserSuperstructEsque<TInput>
24
+ | ParserCustomValidatorEsque<TInput>
25
+ | ParserMyZodEsque<TInput>;
26
+
27
+ export type ParserWithInputOutput<TInput, TParsedInput> = ParserZodEsque<
28
+ TInput,
29
+ TParsedInput
30
+ >;
31
+
32
+ export type Parser = ParserWithoutInput<any> | ParserWithInputOutput<any, any>;
33
+
34
+ export type inferParser<TParser extends Parser> =
35
+ TParser extends ParserWithInputOutput<infer $TIn, infer $TOut>
36
+ ? {
37
+ in: $TIn;
38
+ out: $TOut;
39
+ }
40
+ : TParser extends ParserWithoutInput<infer $InOut>
41
+ ? {
42
+ in: $InOut;
43
+ out: $InOut;
44
+ }
45
+ : never;
@@ -0,0 +1,95 @@
1
+ import { UnsetMarker } from './internals/utils';
2
+
3
+ type ClientContext = Record<string, unknown>;
4
+ export interface ProcedureOptions {
5
+ /**
6
+ * Client-side context
7
+ */
8
+ context?: ClientContext;
9
+ }
10
+
11
+ /**
12
+ * @internal
13
+ */
14
+ export interface ProcedureParams<
15
+ TContextIn = unknown,
16
+ TContextOut = unknown,
17
+ TInputIn = unknown,
18
+ TInputOut = unknown,
19
+ TOutputIn = unknown,
20
+ TOutputOut = unknown,
21
+ TMeta = unknown,
22
+ > {
23
+ /**
24
+ * @internal
25
+ */
26
+ _meta: TMeta;
27
+ /**
28
+ * @internal
29
+ */
30
+ _ctx_in: TContextIn;
31
+ /**
32
+ * @internal
33
+ */
34
+ _ctx_out: TContextOut;
35
+ /**
36
+ * @internal
37
+ */
38
+ _output_in: TOutputIn;
39
+ /**
40
+ * @internal
41
+ */
42
+ _output_out: TOutputOut;
43
+ /**
44
+ * @internal
45
+ */
46
+ _input_in: TInputIn;
47
+ /**
48
+ * @internal
49
+ */
50
+ _input_out: TInputOut;
51
+ }
52
+
53
+ /**
54
+ * @internal
55
+ */
56
+ export type ProcedureArgs<TParams extends ProcedureParams> =
57
+ TParams['_input_in'] extends UnsetMarker
58
+ ? [input?: undefined | void, opts?: ProcedureOptions]
59
+ : undefined extends TParams['_input_in']
60
+ ? [input?: TParams['_input_in'] | void, opts?: ProcedureOptions]
61
+ : [input: TParams['_input_in'], opts?: ProcedureOptions];
62
+
63
+ /**
64
+ * @internal
65
+ */
66
+ export interface ProcedureBase<TParams extends ProcedureParams> {
67
+ /**
68
+ * @deprecated use `._def.meta` instead
69
+ */
70
+ meta?: TParams['_meta'];
71
+ }
72
+
73
+ export interface QueryProcedure<TParams extends ProcedureParams>
74
+ extends ProcedureBase<TParams> {
75
+ _query: true;
76
+ query(...args: ProcedureArgs<TParams>): Promise<TParams['_output_out']>;
77
+ }
78
+
79
+ export interface MutationProcedure<TParams extends ProcedureParams>
80
+ extends ProcedureBase<TParams> {
81
+ _mutation: true;
82
+ mutate(...args: ProcedureArgs<TParams>): Promise<TParams['_output_out']>;
83
+ }
84
+
85
+ export interface SubscriptionProcedure<TParams extends ProcedureParams>
86
+ extends ProcedureBase<TParams> {
87
+ _subscription: true;
88
+ subscription(
89
+ ...args: ProcedureArgs<TParams>
90
+ ): Promise<TParams['_output_out']>;
91
+ }
92
+ export type Procedure<TParams extends ProcedureParams> =
93
+ | QueryProcedure<TParams>
94
+ | MutationProcedure<TParams>
95
+ | SubscriptionProcedure<TParams>;
@@ -0,0 +1,336 @@
1
+ /* eslint-disable @typescript-eslint/ban-types */
2
+ import { inferProcedureOutput } from '.';
3
+ import { Filter } 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 { CombinedDataTransformer, defaultTransformer } from '../transformer';
13
+ import { RootConfig } from './internals/config';
14
+ import {
15
+ InternalProcedure,
16
+ InternalProcedureCallOptions,
17
+ } from './internals/internalProcedure';
18
+ import { mergeWithoutOverrides } from './internals/mergeWithoutOverrides';
19
+ import { omitPrototype } from './internals/omitPrototype';
20
+ import {
21
+ MutationProcedure,
22
+ Procedure,
23
+ QueryProcedure,
24
+ SubscriptionProcedure,
25
+ } from './procedure';
26
+ import { ProcedureType } 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
+ export interface RouterDef<
40
+ // FIXME this should use RootConfig
41
+ TContext,
42
+ TErrorShape extends TRPCErrorShape<number>,
43
+ TMeta extends Record<string, unknown>,
44
+ TProcedures extends ProcedureRouterRecord,
45
+ > {
46
+ /**
47
+ * @internal
48
+ */
49
+ _ctx: TContext;
50
+ /**
51
+ * @internal
52
+ */
53
+ _errorShape: TErrorShape;
54
+ /**
55
+ * @internal
56
+ */
57
+ _meta: TMeta;
58
+ errorFormatter: ErrorFormatter<TContext, TErrorShape>;
59
+ transformer: CombinedDataTransformer;
60
+ // FIXME: separate `procedures` and `children`-routers
61
+ procedures: TProcedures;
62
+ // FIXME decide if these are deprecated
63
+ /**
64
+ * @deprecated
65
+ */
66
+ subscriptions: Filter<TProcedures, SubscriptionProcedure<any>>;
67
+ /**
68
+ * @deprecated
69
+ */
70
+ queries: Filter<TProcedures, QueryProcedure<any>>;
71
+ /**
72
+ * @deprecated
73
+ */
74
+ mutations: Filter<TProcedures, MutationProcedure<any>>;
75
+ }
76
+
77
+ export type AnyRouterDef<TContext = any> = RouterDef<TContext, any, any, any>;
78
+
79
+ /**
80
+ * @internal
81
+ */
82
+ export type inferHandlerInput<TProcedure extends Procedure<any>> =
83
+ TProcedure extends Procedure<infer TDef>
84
+ ? undefined extends TDef['_input_in'] // ? is input optional
85
+ ? unknown extends TDef['_input_in'] // ? is input unset
86
+ ? [(null | undefined)?] // -> there is no input
87
+ : [(TDef['_input_in'] | null | undefined)?] // -> there is optional input
88
+ : [TDef['_input_in']] // -> input is required
89
+ : [(undefined | null)?]; // -> there is no input
90
+
91
+ /**
92
+ * @internal
93
+ */
94
+ type inferHandlerFn<TProcedures extends Record<string, Procedure<any>>> = <
95
+ TProcedure extends TProcedures[TPath],
96
+ TPath extends keyof TProcedures & string,
97
+ >(
98
+ path: TPath,
99
+ ...args: inferHandlerInput<TProcedure>
100
+ ) => inferProcedureOutput<TProcedure>;
101
+
102
+ /**
103
+ * This only exists b/c of interop mode
104
+ * @internal
105
+ */
106
+
107
+ type RouterCaller<TDef extends AnyRouterDef> = (ctx: TDef['_ctx']) => {
108
+ /**
109
+ * @deprecated
110
+ */
111
+ query: inferHandlerFn<TDef['queries']>;
112
+ /**
113
+ * @deprecated
114
+ */
115
+ mutation: inferHandlerFn<TDef['mutations']>;
116
+ /**
117
+ * @deprecated
118
+ */
119
+ subscription: inferHandlerFn<TDef['subscriptions']>;
120
+ };
121
+
122
+ export interface Router<TDef extends AnyRouterDef> {
123
+ _def: RouterDef<
124
+ TDef['_ctx'],
125
+ TDef['_errorShape'],
126
+ TDef['_meta'],
127
+ TDef['procedures']
128
+ >;
129
+ /** @deprecated **/
130
+ errorFormatter: TDef['errorFormatter'];
131
+ /** @deprecated **/
132
+ transformer: TDef['transformer'];
133
+
134
+ // FIXME rename me and deprecate
135
+ createCaller: RouterCaller<TDef>;
136
+ // FIXME rename me and deprecate
137
+ getErrorShape(opts: {
138
+ error: TRPCError;
139
+ type: ProcedureType | 'unknown';
140
+ path: string | undefined;
141
+ input: unknown;
142
+ ctx: undefined | TDef['_ctx'];
143
+ }): TDef['_errorShape'];
144
+ }
145
+
146
+ /**
147
+ * @internal
148
+ */
149
+ export type RouterDefaultOptions<TContext> = Pick<
150
+ AnyRouterDef<TContext>,
151
+ 'transformer' | 'errorFormatter'
152
+ >;
153
+
154
+ /**
155
+ * @internal
156
+ */
157
+ export type RouterBuildOptions<TContext> = Partial<
158
+ Pick<AnyRouterDef<TContext>, 'procedures'>
159
+ >;
160
+
161
+ export type AnyRouter = Router<any>;
162
+
163
+ function createRouterProxy(callback: (...args: [string, ...unknown[]]) => any) {
164
+ return new Proxy({} as any, {
165
+ get(_, path: string) {
166
+ return (...args: unknown[]) => callback(path, ...args);
167
+ },
168
+ });
169
+ }
170
+ const emptyRouter = {
171
+ _ctx: null as any,
172
+ _errorShape: null as any,
173
+ _meta: null as any,
174
+ queries: {},
175
+ mutations: {},
176
+ subscriptions: {},
177
+ errorFormatter: defaultFormatter,
178
+ transformer: defaultTransformer,
179
+ };
180
+
181
+ /**
182
+ *
183
+ * @internal
184
+ */
185
+ export function createRouterFactory<TConfig extends RootConfig>(
186
+ defaults?: RouterDefaultOptions<TConfig['ctx']>,
187
+ ) {
188
+ return function createRouterInner<TProcedures extends ProcedureRouterRecord>(
189
+ procedures: TProcedures,
190
+ ): Router<
191
+ RouterDef<
192
+ TConfig['ctx'],
193
+ TConfig['errorShape'],
194
+ TConfig['meta'],
195
+ TProcedures
196
+ >
197
+ > {
198
+ const routerProcedures: Record<string, Procedure<any>> = omitPrototype({});
199
+ function recursiveGetPaths(procedures: ProcedureRouterRecord, path = '') {
200
+ for (const [key, procedureOrRouter] of Object.entries(procedures ?? {})) {
201
+ const newPath = `${path}${key}`;
202
+
203
+ if (typeof procedureOrRouter === 'object') {
204
+ const router = procedureOrRouter as AnyRouter;
205
+ recursiveGetPaths(router._def.procedures, `${newPath}.`);
206
+ continue;
207
+ }
208
+
209
+ routerProcedures[newPath] = procedureOrRouter;
210
+ }
211
+ }
212
+
213
+ recursiveGetPaths(procedures);
214
+
215
+ const result = mergeWithoutOverrides<
216
+ RouterDefaultOptions<TConfig['ctx']> & RouterBuildOptions<TConfig['ctx']>
217
+ >(
218
+ {
219
+ transformer: defaults?.transformer ?? defaultTransformer,
220
+ errorFormatter: defaults?.errorFormatter ?? defaultFormatter,
221
+ },
222
+ { procedures: routerProcedures },
223
+ );
224
+
225
+ const _def: AnyRouterDef<TConfig['ctx']> = {
226
+ procedures: {},
227
+ ...emptyRouter,
228
+ ...result,
229
+ queries: Object.entries(result.procedures || {})
230
+ .filter((pair) => (pair[1] as any)._def.query)
231
+ .reduce((acc, [key, val]) => ({ ...acc, [key]: val }), {}),
232
+ mutations: Object.entries(result.procedures || {})
233
+ .filter((pair) => (pair[1] as any)._def.mutation)
234
+ .reduce((acc, [key, val]) => ({ ...acc, [key]: val }), {}),
235
+ subscriptions: Object.entries(result.procedures || {})
236
+ .filter((pair) => (pair[1] as any)._def.subscription)
237
+ .reduce((acc, [key, val]) => ({ ...acc, [key]: val }), {}),
238
+ };
239
+ const def = {
240
+ _def,
241
+ transformer: _def.transformer,
242
+ errorFormatter: _def.errorFormatter,
243
+ };
244
+
245
+ function callProcedure(opts: InternalProcedureCallOptions) {
246
+ const { type, path } = opts;
247
+
248
+ if (!(path in _def.procedures) || !_def.procedures[path]['_def'][type]) {
249
+ throw new TRPCError({
250
+ code: 'NOT_FOUND',
251
+ message: `No "${type}"-procedure on path "${path}"`,
252
+ });
253
+ }
254
+
255
+ const procedure = _def.procedures[path] as InternalProcedure;
256
+
257
+ return procedure(opts);
258
+ }
259
+ const router: AnyRouter = {
260
+ ...def,
261
+ createCaller(ctx) {
262
+ return {
263
+ query: (path, ...args) =>
264
+ callProcedure({
265
+ path,
266
+ rawInput: args[0],
267
+ ctx,
268
+ type: 'query',
269
+ }) as any,
270
+ mutation: (path, ...args) =>
271
+ callProcedure({
272
+ path,
273
+ rawInput: args[0],
274
+ ctx,
275
+ type: 'mutation',
276
+ }) as any,
277
+ subscription: (path, ...args) =>
278
+ callProcedure({
279
+ path,
280
+ rawInput: args[0],
281
+ ctx,
282
+ type: 'subscription',
283
+ }) as any,
284
+
285
+ queries: createRouterProxy((path, rawInput) =>
286
+ callProcedure({
287
+ path,
288
+ rawInput,
289
+ ctx,
290
+ type: 'query',
291
+ }),
292
+ ),
293
+ mutations: createRouterProxy((path, rawInput) =>
294
+ callProcedure({
295
+ path,
296
+ rawInput,
297
+ ctx,
298
+ type: 'mutation',
299
+ }),
300
+ ),
301
+ subscriptions: createRouterProxy((path, rawInput) =>
302
+ callProcedure({
303
+ path,
304
+ rawInput,
305
+ ctx,
306
+ type: 'subscription',
307
+ }),
308
+ ),
309
+ };
310
+ },
311
+ getErrorShape(opts) {
312
+ const { path, error } = opts;
313
+ const { code } = opts.error;
314
+ const shape: DefaultErrorShape = {
315
+ message: error.message,
316
+ code: TRPC_ERROR_CODES_BY_KEY[code],
317
+ data: {
318
+ code,
319
+ httpStatus: getHTTPStatusCodeFromError(error),
320
+ },
321
+ };
322
+ if (
323
+ process.env.NODE_ENV !== 'production' &&
324
+ typeof opts.error.stack === 'string'
325
+ ) {
326
+ shape.data.stack = opts.error.stack;
327
+ }
328
+ if (typeof path === 'string') {
329
+ shape.data.path = path;
330
+ }
331
+ return this._def.errorFormatter({ ...opts, shape });
332
+ },
333
+ };
334
+ return router as any;
335
+ };
336
+ }
@@ -0,0 +1,53 @@
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
+ /**
21
+ * @public
22
+ */
23
+ export type ProcedureType = 'query' | 'mutation' | 'subscription';
24
+
25
+ export type inferHandlerInput<TProcedure extends Procedure<any>> =
26
+ ProcedureArgs<inferProcedureParams<TProcedure>>;
27
+
28
+ export type inferProcedureInput<TProcedure extends Procedure<any>> =
29
+ inferHandlerInput<TProcedure>[0];
30
+
31
+ // /**
32
+ // * @internal
33
+ // */
34
+ // type inferProcedureFn<TProcedure extends Procedure<any>> =
35
+ // TProcedure extends QueryProcedure<any>
36
+ // ? TProcedure['query']
37
+ // : TProcedure extends SubscriptionProcedure<any>
38
+ // ? TProcedure['subscription']
39
+ // : TProcedure extends MutationProcedure<any>
40
+ // ? TProcedure['mutate']
41
+ // : never;
42
+
43
+ export type inferProcedureParams<TProcedure extends Procedure<any>> =
44
+ TProcedure extends Procedure<infer $Params> ? $Params : never;
45
+ export type inferProcedureOutput<TProcedure extends Procedure<any>> =
46
+ inferProcedureParams<TProcedure>['_output_out'];
47
+
48
+ export type inferSubscriptionOutput<
49
+ TRouter extends AnyRouter,
50
+ TPath extends keyof TRouter['_def']['subscriptions'] & string,
51
+ > = inferObservableValue<
52
+ inferProcedureOutput<TRouter['_def']['subscriptions'][TPath]>
53
+ >;
@@ -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 */