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

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 +87 -0
  91. package/dist/core/initTRPC.d.ts.map +1 -0
  92. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts +282 -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 +103 -0
  109. package/dist/core/internals/procedureBuilder.d.ts.map +1 -0
  110. package/dist/core/internals/utils.d.ts +44 -0
  111. package/dist/core/internals/utils.d.ts.map +1 -0
  112. package/dist/core/middleware.d.ts +87 -0
  113. package/dist/core/middleware.d.ts.map +1 -0
  114. package/dist/core/parser.d.ts +25 -0
  115. package/dist/core/parser.d.ts.map +1 -0
  116. package/dist/core/procedure.d.ts +80 -0
  117. package/dist/core/procedure.d.ts.map +1 -0
  118. package/dist/core/router.d.ts +114 -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 +34 -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 +800 -105
  153. package/dist/index.mjs +789 -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 +25 -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 +386 -0
  233. package/src/core/internals/config.ts +43 -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 +184 -0
  241. package/src/core/internals/utils.ts +64 -0
  242. package/src/core/middleware.ts +96 -0
  243. package/src/core/parser.ts +45 -0
  244. package/src/core/procedure.ts +108 -0
  245. package/src/core/router.ts +365 -0
  246. package/src/core/types.ts +54 -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 +229 -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 +28 -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,96 @@
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
+ _config: any;
62
+ _ctx_in: TParams['_ctx_in'];
63
+ _ctx_out: $TContext;
64
+ _input_in: TParams['_input_in'];
65
+ _input_out: TParams['_input_out'];
66
+ _output_in: TParams['_output_in'];
67
+ _output_out: TParams['_output_out'];
68
+ _meta: TParams['_meta'];
69
+ }>
70
+ >;
71
+ };
72
+ }) => Promise<MiddlewareResult<TParamsAfter>>;
73
+
74
+ /**
75
+ * @internal
76
+ */
77
+ // FIXME this should use RootConfig
78
+ export function createMiddlewareFactory<TConfig extends RootConfig>() {
79
+ return function createMiddleware<$TNewParams extends ProcedureParams>(
80
+ fn: MiddlewareFunction<
81
+ {
82
+ _config: TConfig;
83
+ _ctx_in: TConfig['ctx'];
84
+ _ctx_out: TConfig['ctx'];
85
+ _input_out: unknown;
86
+ _input_in: unknown;
87
+ _output_in: unknown;
88
+ _output_out: unknown;
89
+ _meta: TConfig['meta'];
90
+ },
91
+ $TNewParams
92
+ >,
93
+ ) {
94
+ return fn;
95
+ };
96
+ }
@@ -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,108 @@
1
+ import { DefaultErrorShape } from '../error/formatter';
2
+ import { CombinedDataTransformer } from '../transformer';
3
+ import { RootConfig } from './internals/config';
4
+ import { UnsetMarker } from './internals/utils';
5
+
6
+ type ClientContext = Record<string, unknown>;
7
+ export interface ProcedureOptions {
8
+ /**
9
+ * Client-side context
10
+ */
11
+ context?: ClientContext;
12
+ }
13
+
14
+ /**
15
+ * @internal
16
+ */
17
+ export interface ProcedureParams<
18
+ TConfig extends RootConfig = {
19
+ transformer: CombinedDataTransformer;
20
+ errorShape: DefaultErrorShape;
21
+ ctx: Record<string, unknown>;
22
+ meta: Record<string, unknown>;
23
+ },
24
+ TContextIn = unknown,
25
+ TContextOut = unknown,
26
+ TInputIn = unknown,
27
+ TInputOut = unknown,
28
+ TOutputIn = unknown,
29
+ TOutputOut = unknown,
30
+ TMeta = unknown,
31
+ > {
32
+ // FIXME make non-optional
33
+ _config: TConfig;
34
+ /**
35
+ * @internal
36
+ */
37
+ _meta: TMeta;
38
+ /**
39
+ * @internal
40
+ */
41
+ _ctx_in: TContextIn;
42
+ /**
43
+ * @internal
44
+ */
45
+ _ctx_out: TContextOut;
46
+ /**
47
+ * @internal
48
+ */
49
+ _output_in: TOutputIn;
50
+ /**
51
+ * @internal
52
+ */
53
+ _output_out: TOutputOut;
54
+ /**
55
+ * @internal
56
+ */
57
+ _input_in: TInputIn;
58
+ /**
59
+ * @internal
60
+ */
61
+ _input_out: TInputOut;
62
+ }
63
+
64
+ /**
65
+ * @internal
66
+ */
67
+ export type ProcedureArgs<TParams extends ProcedureParams> =
68
+ TParams['_input_in'] extends UnsetMarker
69
+ ? [input?: undefined | void, opts?: ProcedureOptions]
70
+ : undefined extends TParams['_input_in']
71
+ ? [input?: TParams['_input_in'] | void, opts?: ProcedureOptions]
72
+ : [input: TParams['_input_in'], opts?: ProcedureOptions];
73
+
74
+ /**
75
+ * @internal
76
+ */
77
+ export interface ProcedureBase<TParams extends ProcedureParams> {
78
+ _def: TParams;
79
+ /**
80
+ * @deprecated use `._def.meta` instead
81
+ */
82
+ meta?: TParams['_meta'];
83
+ _procedure: true;
84
+ }
85
+
86
+ export interface QueryProcedure<TParams extends ProcedureParams>
87
+ extends ProcedureBase<TParams> {
88
+ _query: true;
89
+ query(...args: ProcedureArgs<TParams>): Promise<TParams['_output_out']>;
90
+ }
91
+
92
+ export interface MutationProcedure<TParams extends ProcedureParams>
93
+ extends ProcedureBase<TParams> {
94
+ _mutation: true;
95
+ mutate(...args: ProcedureArgs<TParams>): Promise<TParams['_output_out']>;
96
+ }
97
+
98
+ export interface SubscriptionProcedure<TParams extends ProcedureParams>
99
+ extends ProcedureBase<TParams> {
100
+ _subscription: true;
101
+ subscription(
102
+ ...args: ProcedureArgs<TParams>
103
+ ): Promise<TParams['_output_out']>;
104
+ }
105
+ export type Procedure<TParams extends ProcedureParams> =
106
+ | QueryProcedure<TParams>
107
+ | MutationProcedure<TParams>
108
+ | SubscriptionProcedure<TParams>;
@@ -0,0 +1,365 @@
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 { 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
+ 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
+ /**
126
+ * This only exists b/c of interop mode
127
+ * @internal
128
+ */
129
+
130
+ type RouterCaller<TDef extends AnyRouterDef> = (ctx: TDef['_ctx']) => {
131
+ /**
132
+ * @deprecated
133
+ */
134
+ query: inferHandlerFn<TDef['queries']>;
135
+ /**
136
+ * @deprecated
137
+ */
138
+ mutation: inferHandlerFn<TDef['mutations']>;
139
+ /**
140
+ * @deprecated
141
+ */
142
+ subscription: inferHandlerFn<TDef['subscriptions']>;
143
+ };
144
+
145
+ export interface Router<TDef extends AnyRouterDef> {
146
+ _def: RouterDef<
147
+ TDef['_ctx'],
148
+ TDef['_errorShape'],
149
+ TDef['_meta'],
150
+ TDef['record']
151
+ >;
152
+ /** @deprecated **/
153
+ errorFormatter: TDef['errorFormatter'];
154
+ /** @deprecated **/
155
+ transformer: TDef['transformer'];
156
+
157
+ // FIXME rename me and deprecate
158
+ createCaller: RouterCaller<TDef>;
159
+ // FIXME rename me and deprecate
160
+ getErrorShape(opts: {
161
+ error: TRPCError;
162
+ type: ProcedureType | 'unknown';
163
+ path: string | undefined;
164
+ input: unknown;
165
+ ctx: undefined | TDef['_ctx'];
166
+ }): TDef['_errorShape'];
167
+ }
168
+
169
+ /**
170
+ * @internal
171
+ */
172
+ export type RouterDefaultOptions<TContext> = Pick<
173
+ AnyRouterDef<TContext>,
174
+ 'transformer' | 'errorFormatter'
175
+ >;
176
+
177
+ /**
178
+ * @internal
179
+ */
180
+ export type RouterBuildOptions<TContext> = Partial<
181
+ Pick<AnyRouterDef<TContext>, 'procedures'>
182
+ >;
183
+
184
+ export type AnyRouter = Router<any>;
185
+
186
+ function createRouterProxy(callback: (...args: [string, ...unknown[]]) => any) {
187
+ return new Proxy({} as any, {
188
+ get(_, path: string) {
189
+ return (...args: unknown[]) => callback(path, ...args);
190
+ },
191
+ });
192
+ }
193
+ const emptyRouter = {
194
+ _ctx: null as any,
195
+ _errorShape: null as any,
196
+ _meta: null as any,
197
+ queries: {},
198
+ mutations: {},
199
+ subscriptions: {},
200
+ errorFormatter: defaultFormatter,
201
+ transformer: defaultTransformer,
202
+ };
203
+
204
+ /**
205
+ *
206
+ * @internal
207
+ */
208
+ export function createRouterFactory<TConfig extends RootConfig>(
209
+ defaults?: RouterDefaultOptions<TConfig['ctx']>,
210
+ ) {
211
+ return function createRouterInner<
212
+ TProcRouterRecord extends ProcedureRouterRecord,
213
+ >(
214
+ opts: TProcRouterRecord,
215
+ ): Router<
216
+ RouterDef<
217
+ TConfig['ctx'],
218
+ TConfig['errorShape'],
219
+ TConfig['meta'],
220
+ TProcRouterRecord
221
+ >
222
+ > &
223
+ TProcRouterRecord {
224
+ const routerProcedures: Record<string, Procedure<any>> = omitPrototype({});
225
+ function recursiveGetPaths(procedures: ProcedureRouterRecord, path = '') {
226
+ for (const [key, procedureOrRouter] of Object.entries(procedures ?? {})) {
227
+ const newPath = `${path}${key}`;
228
+
229
+ if (typeof procedureOrRouter === 'object') {
230
+ const router = procedureOrRouter as AnyRouter;
231
+ recursiveGetPaths(router._def.procedures, `${newPath}.`);
232
+ continue;
233
+ }
234
+
235
+ routerProcedures[newPath] = procedureOrRouter;
236
+ }
237
+ }
238
+
239
+ recursiveGetPaths(opts);
240
+
241
+ const result = mergeWithoutOverrides<
242
+ RouterDefaultOptions<TConfig['ctx']> & RouterBuildOptions<TConfig['ctx']>
243
+ >(
244
+ {
245
+ transformer: defaults?.transformer ?? defaultTransformer,
246
+ errorFormatter: defaults?.errorFormatter ?? defaultFormatter,
247
+ },
248
+ { procedures: routerProcedures },
249
+ );
250
+
251
+ const _def: AnyRouterDef<TConfig['ctx']> = {
252
+ router: true,
253
+ procedures: {},
254
+ ...emptyRouter,
255
+ ...result,
256
+ record: opts,
257
+ queries: Object.entries(result.procedures || {})
258
+ .filter((pair) => (pair[1] as any)._def.query)
259
+ .reduce((acc, [key, val]) => ({ ...acc, [key]: val }), {}),
260
+ mutations: Object.entries(result.procedures || {})
261
+ .filter((pair) => (pair[1] as any)._def.mutation)
262
+ .reduce((acc, [key, val]) => ({ ...acc, [key]: val }), {}),
263
+ subscriptions: Object.entries(result.procedures || {})
264
+ .filter((pair) => (pair[1] as any)._def.subscription)
265
+ .reduce((acc, [key, val]) => ({ ...acc, [key]: val }), {}),
266
+ routers: Object.entries(result.procedures || {})
267
+ .filter((pair) => (pair[1] as any)._def._router)
268
+ .reduce((acc, [key, val]) => ({ ...acc, [key]: val }), {}),
269
+ };
270
+
271
+ function callProcedure(opts: InternalProcedureCallOptions) {
272
+ const { type, path } = opts;
273
+
274
+ if (!(path in _def.procedures) || !_def.procedures[path]['_def'][type]) {
275
+ throw new TRPCError({
276
+ code: 'NOT_FOUND',
277
+ message: `No "${type}"-procedure on path "${path}"`,
278
+ });
279
+ }
280
+
281
+ const procedure = _def.procedures[path] as InternalProcedure;
282
+
283
+ return procedure(opts);
284
+ }
285
+ const router: AnyRouter = {
286
+ ...opts,
287
+ _def,
288
+ transformer: _def.transformer,
289
+ errorFormatter: _def.errorFormatter,
290
+ createCaller(ctx) {
291
+ return {
292
+ query: (path, ...args) =>
293
+ callProcedure({
294
+ path,
295
+ rawInput: args[0],
296
+ ctx,
297
+ type: 'query',
298
+ }) as any,
299
+ mutation: (path, ...args) =>
300
+ callProcedure({
301
+ path,
302
+ rawInput: args[0],
303
+ ctx,
304
+ type: 'mutation',
305
+ }) as any,
306
+ subscription: (path, ...args) =>
307
+ callProcedure({
308
+ path,
309
+ rawInput: args[0],
310
+ ctx,
311
+ type: 'subscription',
312
+ }) as any,
313
+
314
+ queries: createRouterProxy((path, rawInput) =>
315
+ callProcedure({
316
+ path,
317
+ rawInput,
318
+ ctx,
319
+ type: 'query',
320
+ }),
321
+ ),
322
+ mutations: createRouterProxy((path, rawInput) =>
323
+ callProcedure({
324
+ path,
325
+ rawInput,
326
+ ctx,
327
+ type: 'mutation',
328
+ }),
329
+ ),
330
+ subscriptions: createRouterProxy((path, rawInput) =>
331
+ callProcedure({
332
+ path,
333
+ rawInput,
334
+ ctx,
335
+ type: 'subscription',
336
+ }),
337
+ ),
338
+ };
339
+ },
340
+ getErrorShape(opts) {
341
+ const { path, error } = opts;
342
+ const { code } = opts.error;
343
+ const shape: DefaultErrorShape = {
344
+ message: error.message,
345
+ code: TRPC_ERROR_CODES_BY_KEY[code],
346
+ data: {
347
+ code,
348
+ httpStatus: getHTTPStatusCodeFromError(error),
349
+ },
350
+ };
351
+ if (
352
+ process.env.NODE_ENV !== 'production' &&
353
+ typeof opts.error.stack === 'string'
354
+ ) {
355
+ shape.data.stack = opts.error.stack;
356
+ }
357
+ if (typeof path === 'string') {
358
+ shape.data.path = path;
359
+ }
360
+ return this._def.errorFormatter({ ...opts, shape });
361
+ },
362
+ };
363
+ return router as any;
364
+ };
365
+ }
@@ -0,0 +1,54 @@
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> = TProcedure extends Procedure<any>
44
+ ? TProcedure['_def']
45
+ : never;
46
+ export type inferProcedureOutput<TProcedure> =
47
+ inferProcedureParams<TProcedure>['_output_out'];
48
+
49
+ export type inferSubscriptionOutput<
50
+ TRouter extends AnyRouter,
51
+ TPath extends keyof TRouter['_def']['subscriptions'] & string,
52
+ > = inferObservableValue<
53
+ inferProcedureOutput<TRouter['_def']['subscriptions'][TPath]>
54
+ >;
@@ -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 */