@trpc/server 11.0.0-next.92 → 11.0.0-rc.330

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 (470) hide show
  1. package/README.md +6 -6
  2. package/adapters/next-app-dir/index.d.ts +1 -0
  3. package/adapters/next-app-dir/index.js +1 -0
  4. package/dist/@trpc/server/http.d.ts +8 -0
  5. package/dist/@trpc/server/http.d.ts.map +1 -0
  6. package/dist/@trpc/server/index.d.ts +61 -0
  7. package/dist/@trpc/server/index.d.ts.map +1 -0
  8. package/dist/@trpc/server/rpc.d.ts +3 -0
  9. package/dist/@trpc/server/rpc.d.ts.map +1 -0
  10. package/dist/adapters/aws-lambda/index.d.ts +11 -2
  11. package/dist/adapters/aws-lambda/index.d.ts.map +1 -1
  12. package/dist/adapters/aws-lambda/index.js +27 -106
  13. package/dist/adapters/aws-lambda/index.mjs +14 -91
  14. package/dist/adapters/aws-lambda/utils.d.ts +14 -14
  15. package/dist/adapters/aws-lambda/utils.d.ts.map +1 -1
  16. package/dist/adapters/aws-lambda/utils.js +100 -0
  17. package/dist/adapters/aws-lambda/utils.mjs +93 -0
  18. package/dist/adapters/express.d.ts +11 -2
  19. package/dist/adapters/express.d.ts.map +1 -1
  20. package/dist/adapters/express.js +2 -14
  21. package/dist/adapters/express.mjs +2 -12
  22. package/dist/adapters/fastify/fastifyRequestHandler.d.ts +4 -4
  23. package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
  24. package/dist/adapters/fastify/fastifyRequestHandler.js +80 -0
  25. package/dist/adapters/fastify/fastifyRequestHandler.mjs +78 -0
  26. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +13 -4
  27. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -1
  28. package/dist/adapters/fastify/fastifyTRPCPlugin.js +48 -0
  29. package/dist/adapters/fastify/fastifyTRPCPlugin.mjs +46 -0
  30. package/dist/adapters/fastify/index.js +4 -126
  31. package/dist/adapters/fastify/index.mjs +2 -126
  32. package/dist/adapters/fetch/fetchRequestHandler.d.ts +11 -2
  33. package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -1
  34. package/dist/adapters/fetch/fetchRequestHandler.js +118 -0
  35. package/dist/adapters/fetch/fetchRequestHandler.mjs +116 -0
  36. package/dist/adapters/fetch/index.js +2 -106
  37. package/dist/adapters/fetch/index.mjs +1 -107
  38. package/dist/adapters/fetch/types.d.ts +13 -4
  39. package/dist/adapters/fetch/types.d.ts.map +1 -1
  40. package/dist/adapters/next-app-dir/formDataToObject.d.ts +2 -0
  41. package/dist/adapters/next-app-dir/formDataToObject.d.ts.map +1 -0
  42. package/dist/adapters/next-app-dir/formDataToObject.js +34 -0
  43. package/dist/adapters/next-app-dir/formDataToObject.mjs +32 -0
  44. package/dist/adapters/next-app-dir/nextAppDirCaller.d.ts +24 -0
  45. package/dist/adapters/next-app-dir/nextAppDirCaller.d.ts.map +1 -0
  46. package/dist/adapters/next-app-dir/nextAppDirCaller.js +85 -0
  47. package/dist/adapters/next-app-dir/nextAppDirCaller.mjs +83 -0
  48. package/dist/adapters/next-app-dir/notFound.d.ts +7 -0
  49. package/dist/adapters/next-app-dir/notFound.d.ts.map +1 -0
  50. package/dist/adapters/next-app-dir/notFound.js +15 -0
  51. package/dist/adapters/next-app-dir/notFound.mjs +13 -0
  52. package/dist/adapters/next-app-dir/redirect.d.ts +18 -0
  53. package/dist/adapters/next-app-dir/redirect.d.ts.map +1 -0
  54. package/dist/adapters/next-app-dir/redirect.js +33 -0
  55. package/dist/adapters/next-app-dir/redirect.mjs +30 -0
  56. package/dist/adapters/next-app-dir/rethrowNextErrors.d.ts +6 -0
  57. package/dist/adapters/next-app-dir/rethrowNextErrors.d.ts.map +1 -0
  58. package/dist/adapters/next-app-dir/rethrowNextErrors.js +23 -0
  59. package/dist/adapters/next-app-dir/rethrowNextErrors.mjs +21 -0
  60. package/dist/adapters/next-app-dir.d.ts +4 -0
  61. package/dist/adapters/next-app-dir.d.ts.map +1 -0
  62. package/dist/adapters/next-app-dir.js +11 -0
  63. package/dist/adapters/next-app-dir.mjs +3 -0
  64. package/dist/adapters/next.d.ts +16 -3
  65. package/dist/adapters/next.d.ts.map +1 -1
  66. package/dist/adapters/next.js +19 -19
  67. package/dist/adapters/next.mjs +18 -16
  68. package/dist/adapters/node-http/content-type/form-data/fileUploadHandler.d.ts +6 -3
  69. package/dist/adapters/node-http/content-type/form-data/fileUploadHandler.d.ts.map +1 -1
  70. package/dist/adapters/node-http/content-type/form-data/fileUploadHandler.js +161 -0
  71. package/dist/adapters/node-http/content-type/form-data/fileUploadHandler.mjs +157 -0
  72. package/dist/adapters/node-http/content-type/form-data/index.d.ts +6 -8
  73. package/dist/adapters/node-http/content-type/form-data/index.d.ts.map +1 -1
  74. package/dist/adapters/node-http/content-type/form-data/index.js +21 -647
  75. package/dist/adapters/node-http/content-type/form-data/index.mjs +10 -632
  76. package/dist/adapters/node-http/content-type/form-data/memoryUploadHandler.d.ts +2 -2
  77. package/dist/adapters/node-http/content-type/form-data/memoryUploadHandler.d.ts.map +1 -1
  78. package/dist/adapters/node-http/content-type/form-data/memoryUploadHandler.js +29 -0
  79. package/dist/adapters/node-http/content-type/form-data/memoryUploadHandler.mjs +27 -0
  80. package/dist/adapters/node-http/content-type/form-data/streamSlice.d.ts +2 -1
  81. package/dist/adapters/node-http/content-type/form-data/streamSlice.d.ts.map +1 -1
  82. package/dist/adapters/node-http/content-type/form-data/streamSlice.js +46 -0
  83. package/dist/adapters/node-http/content-type/form-data/streamSlice.mjs +44 -0
  84. package/dist/adapters/node-http/content-type/form-data/uploadHandler.d.ts +2 -2
  85. package/dist/adapters/node-http/content-type/form-data/uploadHandler.d.ts.map +1 -1
  86. package/dist/adapters/node-http/content-type/form-data/uploadHandler.js +30 -0
  87. package/dist/adapters/node-http/content-type/form-data/uploadHandler.mjs +26 -0
  88. package/dist/adapters/node-http/content-type/json/getPostBody.d.ts +2 -2
  89. package/dist/adapters/node-http/content-type/json/getPostBody.d.ts.map +1 -1
  90. package/dist/adapters/node-http/content-type/json/getPostBody.js +53 -0
  91. package/dist/adapters/node-http/content-type/json/getPostBody.mjs +51 -0
  92. package/dist/adapters/node-http/content-type/json/index.js +5 -42
  93. package/dist/adapters/node-http/content-type/json/index.mjs +4 -39
  94. package/dist/adapters/node-http/index.js +1 -14
  95. package/dist/adapters/node-http/index.mjs +1 -12
  96. package/dist/adapters/node-http/internals/contentType.d.ts +3 -3
  97. package/dist/adapters/node-http/internals/contentType.d.ts.map +1 -1
  98. package/dist/{contentType-8c16408e.js → adapters/node-http/internals/contentType.js} +1 -0
  99. package/dist/{contentType-3194ed5f.mjs → adapters/node-http/internals/contentType.mjs} +2 -1
  100. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts +11 -2
  101. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
  102. package/dist/{nodeHTTPRequestHandler-18f3370e.js → adapters/node-http/nodeHTTPRequestHandler.js} +18 -10
  103. package/dist/{nodeHTTPRequestHandler-0986c5a1.mjs → adapters/node-http/nodeHTTPRequestHandler.mjs} +18 -10
  104. package/dist/adapters/node-http/types.d.ts +18 -9
  105. package/dist/adapters/node-http/types.d.ts.map +1 -1
  106. package/dist/adapters/standalone.d.ts +11 -2
  107. package/dist/adapters/standalone.d.ts.map +1 -1
  108. package/dist/adapters/standalone.js +9 -22
  109. package/dist/adapters/standalone.mjs +9 -16
  110. package/dist/adapters/ws.d.ts +18 -17
  111. package/dist/adapters/ws.d.ts.map +1 -1
  112. package/dist/adapters/ws.js +34 -22
  113. package/dist/adapters/ws.mjs +27 -14
  114. package/dist/bundle-analysis.json +382 -495
  115. package/dist/http.d.ts +2 -0
  116. package/dist/http.d.ts.map +1 -0
  117. package/dist/http.js +17 -0
  118. package/dist/http.mjs +6 -0
  119. package/dist/index.d.ts +1 -14
  120. package/dist/index.d.ts.map +1 -1
  121. package/dist/index.js +16 -86
  122. package/dist/index.mjs +8 -81
  123. package/dist/observable/index.d.ts +4 -4
  124. package/dist/observable/index.d.ts.map +1 -1
  125. package/dist/observable/index.js +6 -149
  126. package/dist/observable/index.mjs +2 -147
  127. package/dist/observable/observable.d.ts +9 -1
  128. package/dist/observable/observable.d.ts.map +1 -1
  129. package/dist/{observable-464116ac.js → observable/observable.js} +50 -20
  130. package/dist/{observable-ade1bad8.mjs → observable/observable.mjs} +50 -21
  131. package/dist/observable/operators.d.ts +8 -0
  132. package/dist/observable/operators.d.ts.map +1 -0
  133. package/dist/observable/operators.js +99 -0
  134. package/dist/observable/operators.mjs +95 -0
  135. package/dist/observable/types.d.ts +2 -5
  136. package/dist/observable/types.d.ts.map +1 -1
  137. package/dist/rpc.d.ts +2 -0
  138. package/dist/rpc.d.ts.map +1 -0
  139. package/dist/{rpc/index.js → rpc.js} +3 -4
  140. package/dist/rpc.mjs +3 -0
  141. package/dist/shared.d.ts +26 -0
  142. package/dist/shared.d.ts.map +1 -0
  143. package/dist/shared.js +10 -0
  144. package/dist/shared.mjs +3 -0
  145. package/dist/unstable-core-do-not-import/clientish/inference.d.ts +17 -0
  146. package/dist/unstable-core-do-not-import/clientish/inference.d.ts.map +1 -0
  147. package/dist/unstable-core-do-not-import/clientish/inferrable.d.ts +32 -0
  148. package/dist/unstable-core-do-not-import/clientish/inferrable.d.ts.map +1 -0
  149. package/dist/unstable-core-do-not-import/clientish/serialize.d.ts +62 -0
  150. package/dist/unstable-core-do-not-import/clientish/serialize.d.ts.map +1 -0
  151. package/dist/{shared/createProxy/index.d.ts → unstable-core-do-not-import/createProxy.d.ts} +1 -1
  152. package/dist/unstable-core-do-not-import/createProxy.d.ts.map +1 -0
  153. package/dist/{index-784ff647.js → unstable-core-do-not-import/createProxy.js} +0 -51
  154. package/dist/unstable-core-do-not-import/createProxy.mjs +49 -0
  155. package/dist/{error → unstable-core-do-not-import/error}/TRPCError.d.ts +3 -2
  156. package/dist/unstable-core-do-not-import/error/TRPCError.d.ts.map +1 -0
  157. package/dist/{TRPCError-ae7b67e8.js → unstable-core-do-not-import/error/TRPCError.js} +25 -25
  158. package/dist/{TRPCError-816ff32e.mjs → unstable-core-do-not-import/error/TRPCError.mjs} +24 -25
  159. package/dist/{error → unstable-core-do-not-import/error}/formatter.d.ts +11 -6
  160. package/dist/unstable-core-do-not-import/error/formatter.d.ts.map +1 -0
  161. package/dist/unstable-core-do-not-import/error/formatter.js +7 -0
  162. package/dist/unstable-core-do-not-import/error/formatter.mjs +5 -0
  163. package/dist/unstable-core-do-not-import/error/getErrorShape.d.ts +15 -0
  164. package/dist/unstable-core-do-not-import/error/getErrorShape.d.ts.map +1 -0
  165. package/dist/unstable-core-do-not-import/error/getErrorShape.js +31 -0
  166. package/dist/unstable-core-do-not-import/error/getErrorShape.mjs +29 -0
  167. package/dist/unstable-core-do-not-import/http/batchStreamFormatter.d.ts.map +1 -0
  168. package/dist/{batchStreamFormatter-fc1ffb26.mjs → unstable-core-do-not-import/http/batchStreamFormatter.mjs} +1 -1
  169. package/dist/{http → unstable-core-do-not-import/http}/contentType.d.ts +3 -3
  170. package/dist/unstable-core-do-not-import/http/contentType.d.ts.map +1 -0
  171. package/dist/{contentType-90bad7bb.js → unstable-core-do-not-import/http/contentType.js} +1 -1
  172. package/dist/{contentType-93515a46.mjs → unstable-core-do-not-import/http/contentType.mjs} +2 -2
  173. package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.d.ts +5 -0
  174. package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.d.ts.map +1 -0
  175. package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.js +52 -0
  176. package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.mjs +49 -0
  177. package/dist/unstable-core-do-not-import/http/index.d.ts +12 -0
  178. package/dist/unstable-core-do-not-import/http/index.d.ts.map +1 -0
  179. package/dist/{http → unstable-core-do-not-import/http}/resolveHTTPResponse.d.ts +4 -5
  180. package/dist/unstable-core-do-not-import/http/resolveHTTPResponse.d.ts.map +1 -0
  181. package/dist/{resolveHTTPResponse-5def1b0c.js → unstable-core-do-not-import/http/resolveHTTPResponse.js} +60 -63
  182. package/dist/{resolveHTTPResponse-55c648bd.mjs → unstable-core-do-not-import/http/resolveHTTPResponse.mjs} +54 -57
  183. package/dist/unstable-core-do-not-import/http/toURL.d.ts +2 -0
  184. package/dist/unstable-core-do-not-import/http/toURL.d.ts.map +1 -0
  185. package/dist/unstable-core-do-not-import/http/toURL.js +8 -0
  186. package/dist/unstable-core-do-not-import/http/toURL.mjs +6 -0
  187. package/dist/unstable-core-do-not-import/http/types.d.ts +109 -0
  188. package/dist/unstable-core-do-not-import/http/types.d.ts.map +1 -0
  189. package/dist/unstable-core-do-not-import/initTRPC.d.ts +102 -0
  190. package/dist/unstable-core-do-not-import/initTRPC.d.ts.map +1 -0
  191. package/dist/unstable-core-do-not-import/initTRPC.js +81 -0
  192. package/dist/unstable-core-do-not-import/initTRPC.mjs +79 -0
  193. package/dist/unstable-core-do-not-import/middleware.d.ts +106 -0
  194. package/dist/unstable-core-do-not-import/middleware.d.ts.map +1 -0
  195. package/dist/unstable-core-do-not-import/middleware.js +96 -0
  196. package/dist/unstable-core-do-not-import/middleware.mjs +90 -0
  197. package/dist/{core → unstable-core-do-not-import}/parser.d.ts +3 -7
  198. package/dist/unstable-core-do-not-import/parser.d.ts.map +1 -0
  199. package/dist/unstable-core-do-not-import/parser.js +37 -0
  200. package/dist/unstable-core-do-not-import/parser.mjs +35 -0
  201. package/dist/unstable-core-do-not-import/procedure.d.ts +75 -0
  202. package/dist/unstable-core-do-not-import/procedure.d.ts.map +1 -0
  203. package/dist/unstable-core-do-not-import/procedure.js +9 -0
  204. package/dist/unstable-core-do-not-import/procedure.mjs +7 -0
  205. package/dist/unstable-core-do-not-import/procedureBuilder.d.ts +134 -0
  206. package/dist/unstable-core-do-not-import/procedureBuilder.d.ts.map +1 -0
  207. package/dist/unstable-core-do-not-import/procedureBuilder.js +204 -0
  208. package/dist/unstable-core-do-not-import/procedureBuilder.mjs +201 -0
  209. package/dist/{core/internals/config.d.ts → unstable-core-do-not-import/rootConfig.d.ts} +19 -27
  210. package/dist/unstable-core-do-not-import/rootConfig.d.ts.map +1 -0
  211. package/dist/unstable-core-do-not-import/rootConfig.js +8 -0
  212. package/dist/unstable-core-do-not-import/rootConfig.mjs +6 -0
  213. package/dist/unstable-core-do-not-import/router.d.ts +81 -0
  214. package/dist/unstable-core-do-not-import/router.d.ts.map +1 -0
  215. package/dist/unstable-core-do-not-import/router.js +168 -0
  216. package/dist/unstable-core-do-not-import/router.mjs +163 -0
  217. package/dist/{rpc → unstable-core-do-not-import/rpc}/codes.d.ts +8 -16
  218. package/dist/unstable-core-do-not-import/rpc/codes.d.ts.map +1 -0
  219. package/dist/{codes-87f6824b.js → unstable-core-do-not-import/rpc/codes.js} +19 -13
  220. package/dist/{codes-c924c3db.mjs → unstable-core-do-not-import/rpc/codes.mjs} +20 -13
  221. package/dist/{rpc → unstable-core-do-not-import/rpc}/envelopes.d.ts +6 -4
  222. package/dist/unstable-core-do-not-import/rpc/envelopes.d.ts.map +1 -0
  223. package/dist/unstable-core-do-not-import/rpc/index.d.ts +5 -0
  224. package/dist/unstable-core-do-not-import/rpc/index.d.ts.map +1 -0
  225. package/dist/unstable-core-do-not-import/rpc/parseTRPCMessage.d.ts.map +1 -0
  226. package/dist/{parseTRPCMessage-1377f305.js → unstable-core-do-not-import/rpc/parseTRPCMessage.js} +5 -2
  227. package/dist/{parseTRPCMessage-a0f17853.mjs → unstable-core-do-not-import/rpc/parseTRPCMessage.mjs} +6 -3
  228. package/dist/unstable-core-do-not-import/transformer.d.ts +101 -0
  229. package/dist/unstable-core-do-not-import/transformer.d.ts.map +1 -0
  230. package/dist/unstable-core-do-not-import/transformer.js +106 -0
  231. package/dist/unstable-core-do-not-import/transformer.mjs +101 -0
  232. package/dist/unstable-core-do-not-import/types.d.ts +103 -0
  233. package/dist/unstable-core-do-not-import/types.d.ts.map +1 -0
  234. package/dist/unstable-core-do-not-import/types.js +11 -0
  235. package/dist/unstable-core-do-not-import/types.mjs +9 -0
  236. package/dist/unstable-core-do-not-import/utils.d.ts +19 -0
  237. package/dist/unstable-core-do-not-import/utils.d.ts.map +1 -0
  238. package/dist/unstable-core-do-not-import/utils.js +37 -0
  239. package/dist/unstable-core-do-not-import/utils.mjs +32 -0
  240. package/dist/unstable-core-do-not-import.d.ts +31 -0
  241. package/dist/unstable-core-do-not-import.d.ts.map +1 -0
  242. package/dist/unstable-core-do-not-import.js +66 -0
  243. package/dist/unstable-core-do-not-import.mjs +21 -0
  244. package/package.json +51 -69
  245. package/src/@trpc/server/http.ts +27 -0
  246. package/src/@trpc/server/index.ts +100 -0
  247. package/src/@trpc/server/rpc.ts +26 -0
  248. package/src/adapters/aws-lambda/index.ts +21 -10
  249. package/src/adapters/aws-lambda/utils.ts +33 -26
  250. package/src/adapters/express.ts +18 -4
  251. package/src/adapters/fastify/fastifyRequestHandler.ts +22 -12
  252. package/src/adapters/fastify/fastifyTRPCPlugin.ts +21 -9
  253. package/src/adapters/fetch/fetchRequestHandler.ts +36 -12
  254. package/src/adapters/fetch/types.ts +18 -4
  255. package/src/adapters/next-app-dir/formDataToObject.ts +36 -0
  256. package/src/adapters/next-app-dir/nextAppDirCaller.ts +129 -0
  257. package/src/adapters/next-app-dir/notFound.ts +12 -0
  258. package/src/adapters/next-app-dir/redirect.ts +30 -0
  259. package/src/adapters/next-app-dir/rethrowNextErrors.ts +25 -0
  260. package/src/adapters/next-app-dir.ts +3 -0
  261. package/src/adapters/next.ts +30 -14
  262. package/src/adapters/node-http/content-type/form-data/fileUploadHandler.ts +11 -4
  263. package/src/adapters/node-http/content-type/form-data/index.ts +18 -18
  264. package/src/adapters/node-http/content-type/form-data/memoryUploadHandler.ts +3 -2
  265. package/src/adapters/node-http/content-type/form-data/streamSlice.ts +7 -2
  266. package/src/adapters/node-http/content-type/form-data/uploadHandler.ts +2 -2
  267. package/src/adapters/node-http/content-type/json/getPostBody.ts +20 -3
  268. package/src/adapters/node-http/content-type/json/index.ts +1 -1
  269. package/src/adapters/node-http/internals/contentType.ts +5 -3
  270. package/src/adapters/node-http/nodeHTTPRequestHandler.ts +28 -16
  271. package/src/adapters/node-http/types.ts +24 -9
  272. package/src/adapters/standalone.ts +22 -8
  273. package/src/adapters/ws.ts +68 -39
  274. package/src/http.ts +1 -0
  275. package/src/index.ts +1 -20
  276. package/src/observable/index.ts +10 -4
  277. package/src/observable/observable.ts +63 -3
  278. package/src/observable/operators.ts +114 -0
  279. package/src/observable/types.ts +1 -5
  280. package/src/rpc.ts +1 -0
  281. package/src/shared.ts +26 -0
  282. package/src/unstable-core-do-not-import/clientish/inference.ts +60 -0
  283. package/src/unstable-core-do-not-import/clientish/inferrable.ts +49 -0
  284. package/src/unstable-core-do-not-import/clientish/serialize.ts +122 -0
  285. package/src/{error → unstable-core-do-not-import/error}/TRPCError.ts +33 -27
  286. package/src/{error → unstable-core-do-not-import/error}/formatter.ts +12 -19
  287. package/src/{shared → unstable-core-do-not-import/error}/getErrorShape.ts +8 -8
  288. package/src/{http → unstable-core-do-not-import/http}/contentType.ts +4 -4
  289. package/src/{http → unstable-core-do-not-import/http}/getHTTPStatusCode.ts +8 -8
  290. package/src/unstable-core-do-not-import/http/index.ts +29 -0
  291. package/src/{http → unstable-core-do-not-import/http}/resolveHTTPResponse.ts +69 -69
  292. package/src/unstable-core-do-not-import/http/toURL.ts +7 -0
  293. package/src/unstable-core-do-not-import/http/types.ts +126 -0
  294. package/src/unstable-core-do-not-import/initTRPC.ts +151 -0
  295. package/src/unstable-core-do-not-import/middleware.ts +238 -0
  296. package/src/unstable-core-do-not-import/parser.ts +94 -0
  297. package/src/unstable-core-do-not-import/procedure.ts +94 -0
  298. package/src/unstable-core-do-not-import/procedureBuilder.ts +623 -0
  299. package/src/{core/internals/config.ts → unstable-core-do-not-import/rootConfig.ts} +22 -33
  300. package/src/unstable-core-do-not-import/router.ts +363 -0
  301. package/src/{rpc → unstable-core-do-not-import/rpc}/codes.ts +30 -3
  302. package/src/{rpc → unstable-core-do-not-import/rpc}/envelopes.ts +6 -9
  303. package/src/unstable-core-do-not-import/rpc/index.ts +21 -0
  304. package/src/{rpc → unstable-core-do-not-import/rpc}/parseTRPCMessage.ts +4 -3
  305. package/src/unstable-core-do-not-import/transformer.ts +194 -0
  306. package/src/unstable-core-do-not-import/types.ts +157 -0
  307. package/src/unstable-core-do-not-import/utils.ts +43 -0
  308. package/src/unstable-core-do-not-import.ts +30 -0
  309. package/unstable-core-do-not-import/index.d.ts +1 -0
  310. package/unstable-core-do-not-import/index.js +1 -0
  311. package/dist/TRPCError-efecb077.js +0 -63
  312. package/dist/batchStreamFormatter-2c1405a1.js +0 -31
  313. package/dist/codes-e5bb4d58.js +0 -48
  314. package/dist/config-5de7eae5.js +0 -10
  315. package/dist/config-60fc2667.js +0 -7
  316. package/dist/config-ab4c1c6b.mjs +0 -5
  317. package/dist/contentType-24c44bba.js +0 -5
  318. package/dist/contentType-9940f5d7.js +0 -58
  319. package/dist/core/index.d.ts +0 -9
  320. package/dist/core/index.d.ts.map +0 -1
  321. package/dist/core/initTRPC.d.ts +0 -105
  322. package/dist/core/initTRPC.d.ts.map +0 -1
  323. package/dist/core/internals/builderTypes.d.ts +0 -11
  324. package/dist/core/internals/builderTypes.d.ts.map +0 -1
  325. package/dist/core/internals/config.d.ts.map +0 -1
  326. package/dist/core/internals/getParseFn.d.ts +0 -4
  327. package/dist/core/internals/getParseFn.d.ts.map +0 -1
  328. package/dist/core/internals/mergeRouters.d.ts +0 -15
  329. package/dist/core/internals/mergeRouters.d.ts.map +0 -1
  330. package/dist/core/internals/mergeWithoutOverrides.d.ts +0 -5
  331. package/dist/core/internals/mergeWithoutOverrides.d.ts.map +0 -1
  332. package/dist/core/internals/omitPrototype.d.ts +0 -6
  333. package/dist/core/internals/omitPrototype.d.ts.map +0 -1
  334. package/dist/core/internals/procedureBuilder.d.ts +0 -113
  335. package/dist/core/internals/procedureBuilder.d.ts.map +0 -1
  336. package/dist/core/internals/utils.d.ts +0 -51
  337. package/dist/core/internals/utils.d.ts.map +0 -1
  338. package/dist/core/middleware.d.ts +0 -158
  339. package/dist/core/middleware.d.ts.map +0 -1
  340. package/dist/core/parser.d.ts.map +0 -1
  341. package/dist/core/procedure.d.ts +0 -72
  342. package/dist/core/procedure.d.ts.map +0 -1
  343. package/dist/core/router.d.ts +0 -65
  344. package/dist/core/router.d.ts.map +0 -1
  345. package/dist/core/types.d.ts +0 -24
  346. package/dist/core/types.d.ts.map +0 -1
  347. package/dist/error/TRPCError.d.ts.map +0 -1
  348. package/dist/error/formatter.d.ts.map +0 -1
  349. package/dist/error/utils.d.ts +0 -9
  350. package/dist/error/utils.d.ts.map +0 -1
  351. package/dist/http/batchStreamFormatter.d.ts.map +0 -1
  352. package/dist/http/contentType.d.ts.map +0 -1
  353. package/dist/http/getHTTPStatusCode.d.ts +0 -24
  354. package/dist/http/getHTTPStatusCode.d.ts.map +0 -1
  355. package/dist/http/index.d.ts +0 -5
  356. package/dist/http/index.d.ts.map +0 -1
  357. package/dist/http/index.js +0 -21
  358. package/dist/http/index.mjs +0 -9
  359. package/dist/http/internals/types.d.ts +0 -32
  360. package/dist/http/internals/types.d.ts.map +0 -1
  361. package/dist/http/resolveHTTPResponse.d.ts.map +0 -1
  362. package/dist/http/types.d.ts +0 -46
  363. package/dist/http/types.d.ts.map +0 -1
  364. package/dist/index-46cb3130.js +0 -94
  365. package/dist/index-f91d720c.mjs +0 -97
  366. package/dist/internals/invert.d.ts +0 -12
  367. package/dist/internals/invert.d.ts.map +0 -1
  368. package/dist/internals/types.d.ts +0 -26
  369. package/dist/internals/types.d.ts.map +0 -1
  370. package/dist/nodeHTTPRequestHandler-388f5fce.js +0 -107
  371. package/dist/observable/internals/identity.d.ts +0 -2
  372. package/dist/observable/internals/identity.d.ts.map +0 -1
  373. package/dist/observable/internals/observableToPromise.d.ts +0 -10
  374. package/dist/observable/internals/observableToPromise.d.ts.map +0 -1
  375. package/dist/observable/internals/pipe.d.ts +0 -4
  376. package/dist/observable/internals/pipe.d.ts.map +0 -1
  377. package/dist/observable/operators/index.d.ts +0 -4
  378. package/dist/observable/operators/index.d.ts.map +0 -1
  379. package/dist/observable/operators/map.d.ts +0 -3
  380. package/dist/observable/operators/map.d.ts.map +0 -1
  381. package/dist/observable/operators/share.d.ts +0 -6
  382. package/dist/observable/operators/share.d.ts.map +0 -1
  383. package/dist/observable/operators/tap.d.ts +0 -3
  384. package/dist/observable/operators/tap.d.ts.map +0 -1
  385. package/dist/observable-15588f28.js +0 -83
  386. package/dist/parseTRPCMessage-95955211.js +0 -63
  387. package/dist/resolveHTTPResponse-8d474952.js +0 -267
  388. package/dist/router-3c22fe56.js +0 -159
  389. package/dist/router-5274e533.mjs +0 -153
  390. package/dist/router-a1635eab.js +0 -147
  391. package/dist/rpc/codes.d.ts.map +0 -1
  392. package/dist/rpc/envelopes.d.ts.map +0 -1
  393. package/dist/rpc/index.d.ts +0 -4
  394. package/dist/rpc/index.d.ts.map +0 -1
  395. package/dist/rpc/index.mjs +0 -2
  396. package/dist/rpc/parseTRPCMessage.d.ts.map +0 -1
  397. package/dist/shared/createProxy/index.d.ts.map +0 -1
  398. package/dist/shared/getErrorShape.d.ts +0 -15
  399. package/dist/shared/getErrorShape.d.ts.map +0 -1
  400. package/dist/shared/index.d.ts +0 -7
  401. package/dist/shared/index.d.ts.map +0 -1
  402. package/dist/shared/index.js +0 -14
  403. package/dist/shared/index.mjs +0 -3
  404. package/dist/shared/internal/serialize.d.ts +0 -30
  405. package/dist/shared/internal/serialize.d.ts.map +0 -1
  406. package/dist/shared/jsonify.d.ts +0 -11
  407. package/dist/shared/jsonify.d.ts.map +0 -1
  408. package/dist/shared/transformTRPCResponse.d.ts +0 -9
  409. package/dist/shared/transformTRPCResponse.d.ts.map +0 -1
  410. package/dist/shared/types.d.ts +0 -6
  411. package/dist/shared/types.d.ts.map +0 -1
  412. package/dist/transformTRPCResponse-1153b421.mjs +0 -53
  413. package/dist/transformTRPCResponse-20ce3b68.js +0 -54
  414. package/dist/transformTRPCResponse-e65f34e9.js +0 -56
  415. package/dist/transformer.d.ts +0 -74
  416. package/dist/transformer.d.ts.map +0 -1
  417. package/dist/types.d.ts +0 -83
  418. package/dist/types.d.ts.map +0 -1
  419. package/dist/unstableInternalsExport-10cc2bae.mjs +0 -353
  420. package/dist/unstableInternalsExport-a064a7dd.js +0 -349
  421. package/dist/unstableInternalsExport-bf8496ea.js +0 -363
  422. package/dist/unstableInternalsExport.d.ts +0 -11
  423. package/dist/unstableInternalsExport.d.ts.map +0 -1
  424. package/dist/unstableInternalsExport.js +0 -16
  425. package/dist/unstableInternalsExport.mjs +0 -5
  426. package/src/core/index.ts +0 -28
  427. package/src/core/initTRPC.ts +0 -169
  428. package/src/core/internals/builderTypes.ts +0 -11
  429. package/src/core/internals/getParseFn.ts +0 -43
  430. package/src/core/internals/mergeRouters.ts +0 -90
  431. package/src/core/internals/mergeWithoutOverrides.ts +0 -19
  432. package/src/core/internals/omitPrototype.ts +0 -9
  433. package/src/core/internals/procedureBuilder.ts +0 -394
  434. package/src/core/internals/utils.ts +0 -84
  435. package/src/core/middleware.ts +0 -295
  436. package/src/core/parser.ts +0 -57
  437. package/src/core/procedure.ts +0 -88
  438. package/src/core/router.ts +0 -226
  439. package/src/core/types.ts +0 -67
  440. package/src/error/utils.ts +0 -23
  441. package/src/http/index.ts +0 -4
  442. package/src/http/internals/types.ts +0 -40
  443. package/src/http/types.ts +0 -51
  444. package/src/internals/invert.ts +0 -21
  445. package/src/internals/types.ts +0 -27
  446. package/src/observable/internals/identity.ts +0 -3
  447. package/src/observable/internals/observableToPromise.ts +0 -49
  448. package/src/observable/internals/pipe.ts +0 -23
  449. package/src/observable/operators/index.ts +0 -3
  450. package/src/observable/operators/map.ts +0 -25
  451. package/src/observable/operators/share.ts +0 -65
  452. package/src/observable/operators/tap.ts +0 -26
  453. package/src/rpc/index.ts +0 -3
  454. package/src/shared/index.ts +0 -10
  455. package/src/shared/internal/serialize.ts +0 -65
  456. package/src/shared/jsonify.ts +0 -22
  457. package/src/shared/transformTRPCResponse.ts +0 -40
  458. package/src/shared/types.ts +0 -9
  459. package/src/transformer.ts +0 -94
  460. package/src/types.ts +0 -125
  461. package/src/unstableInternalsExport.ts +0 -10
  462. package/subscription/index.d.ts +0 -1
  463. package/subscription/index.js +0 -1
  464. package/unstableInternalsExport/index.d.ts +0 -1
  465. package/unstableInternalsExport/index.js +0 -1
  466. /package/dist/{http → unstable-core-do-not-import/http}/batchStreamFormatter.d.ts +0 -0
  467. /package/dist/{batchStreamFormatter-93cdcdd4.js → unstable-core-do-not-import/http/batchStreamFormatter.js} +0 -0
  468. /package/dist/{rpc → unstable-core-do-not-import/rpc}/parseTRPCMessage.d.ts +0 -0
  469. /package/src/{shared/createProxy/index.ts → unstable-core-do-not-import/createProxy.ts} +0 -0
  470. /package/src/{http → unstable-core-do-not-import/http}/batchStreamFormatter.ts +0 -0
@@ -0,0 +1,363 @@
1
+ import type { Observable } from '../observable';
2
+ import { createRecursiveProxy } from './createProxy';
3
+ import { defaultFormatter } from './error/formatter';
4
+ import { getTRPCErrorFromUnknown, TRPCError } from './error/TRPCError';
5
+ import type {
6
+ AnyProcedure,
7
+ ErrorHandlerOptions,
8
+ inferProcedureInput,
9
+ inferProcedureOutput,
10
+ } from './procedure';
11
+ import type { ProcedureCallOptions } from './procedureBuilder';
12
+ import type { AnyRootTypes, RootConfig } from './rootConfig';
13
+ import { defaultTransformer } from './transformer';
14
+ import type { MaybePromise, ValueOf } from './types';
15
+ import { isFunction, mergeWithoutOverrides, omitPrototype } from './utils';
16
+
17
+ export interface RouterRecord {
18
+ [key: string]: AnyProcedure | RouterRecord;
19
+ }
20
+
21
+ type DecorateProcedure<TProcedure extends AnyProcedure> = (
22
+ input: inferProcedureInput<TProcedure>,
23
+ ) => Promise<
24
+ TProcedure['_def']['type'] extends 'subscription'
25
+ ? Observable<inferProcedureOutput<TProcedure>, TRPCError>
26
+ : inferProcedureOutput<TProcedure>
27
+ >;
28
+
29
+ /**
30
+ * @internal
31
+ */
32
+ export type DecorateRouterRecord<TRecord extends RouterRecord> = {
33
+ [TKey in keyof TRecord]: TRecord[TKey] extends AnyProcedure
34
+ ? DecorateProcedure<TRecord[TKey]>
35
+ : TRecord[TKey] extends RouterRecord
36
+ ? DecorateRouterRecord<TRecord[TKey]>
37
+ : never;
38
+ };
39
+
40
+ /**
41
+ * @internal
42
+ */
43
+
44
+ export type RouterCallerErrorHandler<TContext> = (
45
+ opts: ErrorHandlerOptions<TContext>,
46
+ ) => void;
47
+
48
+ /**
49
+ * @internal
50
+ */
51
+ export type RouterCaller<
52
+ TRoot extends AnyRootTypes,
53
+ TRecord extends RouterRecord,
54
+ > = (
55
+ /**
56
+ * @note
57
+ * If passing a function, we recommend it's a cached function
58
+ * e.g. wrapped in `React.cache` to avoid unnecessary computations
59
+ */
60
+ ctx: TRoot['ctx'] | (() => MaybePromise<TRoot['ctx']>),
61
+ options?: {
62
+ onError?: RouterCallerErrorHandler<TRoot['ctx']>;
63
+ },
64
+ ) => DecorateRouterRecord<TRecord>;
65
+
66
+ export interface Router<
67
+ TRoot extends AnyRootTypes,
68
+ TRecord extends RouterRecord,
69
+ > {
70
+ _def: {
71
+ _config: RootConfig<TRoot>;
72
+ router: true;
73
+ procedure?: never;
74
+ procedures: TRecord;
75
+ record: TRecord;
76
+ };
77
+ /**
78
+ * @deprecated use `t.createCallerFactory(router)` instead
79
+ * @link https://trpc.io/docs/v11/server/server-side-calls
80
+ */
81
+ createCaller: RouterCaller<TRoot, TRecord>;
82
+ }
83
+
84
+ export type BuiltRouter<
85
+ TRoot extends AnyRootTypes,
86
+ TDef extends RouterRecord,
87
+ > = Router<TRoot, TDef> & TDef;
88
+
89
+ export type AnyRouter = Router<any, any>;
90
+
91
+ export type inferRouterRootTypes<TRouter extends AnyRouter> =
92
+ TRouter['_def']['_config']['$types'];
93
+
94
+ export type inferRouterContext<TRouter extends AnyRouter> =
95
+ inferRouterRootTypes<TRouter>['ctx'];
96
+ export type inferRouterError<TRouter extends AnyRouter> =
97
+ inferRouterRootTypes<TRouter>['errorShape'];
98
+ export type inferRouterMeta<TRouter extends AnyRouter> =
99
+ inferRouterRootTypes<TRouter>['meta'];
100
+
101
+ function isRouter(
102
+ procedureOrRouter: ValueOf<CreateRouterOptions>,
103
+ ): procedureOrRouter is AnyRouter {
104
+ return procedureOrRouter._def && 'router' in procedureOrRouter._def;
105
+ }
106
+
107
+ const emptyRouter = {
108
+ _ctx: null as any,
109
+ _errorShape: null as any,
110
+ _meta: null as any,
111
+ queries: {},
112
+ mutations: {},
113
+ subscriptions: {},
114
+ errorFormatter: defaultFormatter,
115
+ transformer: defaultTransformer,
116
+ };
117
+
118
+ /**
119
+ * Reserved words that can't be used as router or procedure names
120
+ */
121
+ const reservedWords = [
122
+ /**
123
+ * Then is a reserved word because otherwise we can't return a promise that returns a Proxy
124
+ * since JS will think that `.then` is something that exists
125
+ */
126
+ 'then',
127
+ ];
128
+
129
+ export type CreateRouterOptions = {
130
+ [key: string]: AnyProcedure | AnyRouter | CreateRouterOptions;
131
+ };
132
+
133
+ export type DecorateCreateRouterOptions<
134
+ TRouterOptions extends CreateRouterOptions,
135
+ > = {
136
+ [K in keyof TRouterOptions]: TRouterOptions[K] extends infer $Value
137
+ ? $Value extends AnyProcedure
138
+ ? $Value
139
+ : $Value extends Router<any, infer TRecord>
140
+ ? TRecord
141
+ : $Value extends CreateRouterOptions
142
+ ? DecorateCreateRouterOptions<$Value>
143
+ : never
144
+ : never;
145
+ };
146
+
147
+ /**
148
+ * @internal
149
+ */
150
+ export function createRouterFactory<TRoot extends AnyRootTypes>(
151
+ config: RootConfig<TRoot>,
152
+ ) {
153
+ function createRouterInner<TInput extends RouterRecord>(
154
+ input: TInput,
155
+ ): BuiltRouter<TRoot, TInput>;
156
+ function createRouterInner<TInput extends CreateRouterOptions>(
157
+ input: TInput,
158
+ ): BuiltRouter<TRoot, DecorateCreateRouterOptions<TInput>>;
159
+ function createRouterInner(input: RouterRecord | CreateRouterOptions) {
160
+ const reservedWordsUsed = new Set(
161
+ Object.keys(input).filter((v) => reservedWords.includes(v)),
162
+ );
163
+ if (reservedWordsUsed.size > 0) {
164
+ throw new Error(
165
+ 'Reserved words used in `router({})` call: ' +
166
+ Array.from(reservedWordsUsed).join(', '),
167
+ );
168
+ }
169
+
170
+ const procedures: Record<string, AnyProcedure> = omitPrototype({});
171
+
172
+ function step(from: CreateRouterOptions, path: string[] = []) {
173
+ const aggregate: RouterRecord = omitPrototype({});
174
+ for (const [key, item] of Object.entries(from ?? {})) {
175
+ if (isRouter(item)) {
176
+ aggregate[key] = step(item._def.record, [...path, key]);
177
+ continue;
178
+ }
179
+ if (!isProcedure(item)) {
180
+ // RouterRecord
181
+ aggregate[key] = step(item, [...path, key]);
182
+ continue;
183
+ }
184
+
185
+ const newPath = [...path, key].join('.');
186
+
187
+ if (procedures[newPath]) {
188
+ throw new Error(`Duplicate key: ${newPath}`);
189
+ }
190
+
191
+ procedures[newPath] = item;
192
+ aggregate[key] = item;
193
+ }
194
+
195
+ return aggregate;
196
+ }
197
+ const record = step(input);
198
+
199
+ const _def: AnyRouter['_def'] = {
200
+ _config: config,
201
+ router: true,
202
+ procedures,
203
+ ...emptyRouter,
204
+ record,
205
+ };
206
+
207
+ return {
208
+ ...record,
209
+ _def,
210
+ createCaller: createCallerFactory<TRoot>()({
211
+ _def,
212
+ }),
213
+ };
214
+ }
215
+
216
+ return createRouterInner;
217
+ }
218
+
219
+ function isProcedure(
220
+ procedureOrRouter: ValueOf<CreateRouterOptions>,
221
+ ): procedureOrRouter is AnyProcedure {
222
+ return typeof procedureOrRouter === 'function';
223
+ }
224
+ /**
225
+ * @internal
226
+ */
227
+ export function callProcedure(
228
+ opts: ProcedureCallOptions<unknown> & {
229
+ procedures: RouterRecord;
230
+ allowMethodOverride?: boolean;
231
+ },
232
+ ) {
233
+ const { type, path } = opts;
234
+ const proc = opts.procedures[path];
235
+ if (
236
+ !proc ||
237
+ !isProcedure(proc) ||
238
+ (proc._def.type !== type && !opts.allowMethodOverride)
239
+ ) {
240
+ throw new TRPCError({
241
+ code: 'NOT_FOUND',
242
+ message: `No "${type}"-procedure on path "${path}"`,
243
+ });
244
+ }
245
+
246
+ return proc(opts);
247
+ }
248
+
249
+ export function createCallerFactory<TRoot extends AnyRootTypes>() {
250
+ return function createCallerInner<TRecord extends RouterRecord>(
251
+ router: Pick<Router<TRoot, TRecord>, '_def'>,
252
+ ): RouterCaller<TRoot, TRecord> {
253
+ const _def = router._def;
254
+ type Context = TRoot['ctx'];
255
+
256
+ return function createCaller(
257
+ ctxOrCallback,
258
+ options?: {
259
+ onError?: RouterCallerErrorHandler<Context>;
260
+ },
261
+ ) {
262
+ const proxy = createRecursiveProxy(async ({ path, args }) => {
263
+ const fullPath = path.join('.');
264
+
265
+ const procedure = _def.procedures[fullPath] as AnyProcedure;
266
+
267
+ let ctx: Context | undefined = undefined;
268
+ try {
269
+ ctx = isFunction(ctxOrCallback)
270
+ ? await Promise.resolve(ctxOrCallback())
271
+ : ctxOrCallback;
272
+
273
+ return await procedure({
274
+ path: fullPath,
275
+ getRawInput: async () => args[0],
276
+ ctx,
277
+ type: procedure._def.type,
278
+ });
279
+ } catch (cause) {
280
+ options?.onError?.({
281
+ ctx,
282
+ error: getTRPCErrorFromUnknown(cause),
283
+ input: args[0],
284
+ path: fullPath,
285
+ type: procedure._def.type,
286
+ });
287
+ throw cause;
288
+ }
289
+ });
290
+
291
+ return proxy as ReturnType<RouterCaller<any, any>>;
292
+ };
293
+ };
294
+ }
295
+
296
+ /** @internal */
297
+ type MergeRouters<
298
+ TRouters extends AnyRouter[],
299
+ TRoot extends AnyRootTypes = TRouters[0]['_def']['_config']['$types'],
300
+ // eslint-disable-next-line @typescript-eslint/ban-types
301
+ TRecord extends RouterRecord = {},
302
+ > = TRouters extends [
303
+ infer Head extends AnyRouter,
304
+ ...infer Tail extends AnyRouter[],
305
+ ]
306
+ ? MergeRouters<Tail, TRoot, Head['_def']['record'] & TRecord>
307
+ : BuiltRouter<TRoot, TRecord>;
308
+
309
+ export function mergeRouters<TRouters extends AnyRouter[]>(
310
+ ...routerList: [...TRouters]
311
+ ): MergeRouters<TRouters> {
312
+ const record = mergeWithoutOverrides(
313
+ {},
314
+ ...routerList.map((r) => r._def.record),
315
+ );
316
+ const errorFormatter = routerList.reduce(
317
+ (currentErrorFormatter, nextRouter) => {
318
+ if (
319
+ nextRouter._def._config.errorFormatter &&
320
+ nextRouter._def._config.errorFormatter !== defaultFormatter
321
+ ) {
322
+ if (
323
+ currentErrorFormatter !== defaultFormatter &&
324
+ currentErrorFormatter !== nextRouter._def._config.errorFormatter
325
+ ) {
326
+ throw new Error('You seem to have several error formatters');
327
+ }
328
+ return nextRouter._def._config.errorFormatter;
329
+ }
330
+ return currentErrorFormatter;
331
+ },
332
+ defaultFormatter,
333
+ );
334
+
335
+ const transformer = routerList.reduce((prev, current) => {
336
+ if (
337
+ current._def._config.transformer &&
338
+ current._def._config.transformer !== defaultTransformer
339
+ ) {
340
+ if (
341
+ prev !== defaultTransformer &&
342
+ prev !== current._def._config.transformer
343
+ ) {
344
+ throw new Error('You seem to have several transformers');
345
+ }
346
+ return current._def._config.transformer;
347
+ }
348
+ return prev;
349
+ }, defaultTransformer);
350
+
351
+ const router = createRouterFactory({
352
+ errorFormatter,
353
+ transformer,
354
+ isDev: routerList.every((r) => r._def._config.isDev),
355
+ allowOutsideOfServer: routerList.every(
356
+ (r) => r._def._config.allowOutsideOfServer,
357
+ ),
358
+ isServer: routerList.every((r) => r._def._config.isServer),
359
+ $types: routerList[0]?._def._config.$types,
360
+ })(record);
361
+
362
+ return router as MergeRouters<TRouters>;
363
+ }
@@ -1,4 +1,4 @@
1
- import { invert } from '../internals/invert';
1
+ import type { ValueOf } from '../types';
2
2
 
3
3
  // reference: https://www.jsonrpc.org/specification
4
4
 
@@ -31,14 +31,41 @@ export const TRPC_ERROR_CODES_BY_KEY = {
31
31
  TIMEOUT: -32008, // 408
32
32
  CONFLICT: -32009, // 409
33
33
  PRECONDITION_FAILED: -32012, // 412
34
+ UNSUPPORTED_MEDIA_TYPE: -32015, // 415
34
35
  PAYLOAD_TOO_LARGE: -32013, // 413
35
36
  UNPROCESSABLE_CONTENT: -32022, // 422
36
37
  TOO_MANY_REQUESTS: -32029, // 429
37
38
  CLIENT_CLOSED_REQUEST: -32099, // 499
38
39
  } as const;
39
40
 
40
- export const TRPC_ERROR_CODES_BY_NUMBER = invert(TRPC_ERROR_CODES_BY_KEY);
41
- type ValueOf<TObj> = TObj[keyof TObj];
41
+ type KeyFromValue<TValue, TType extends Record<PropertyKey, PropertyKey>> = {
42
+ [K in keyof TType]: TValue extends TType[K] ? K : never;
43
+ }[keyof TType];
44
+
45
+ type Invert<TType extends Record<PropertyKey, PropertyKey>> = {
46
+ [TValue in TType[keyof TType]]: KeyFromValue<TValue, TType>;
47
+ };
48
+
49
+ // pure
50
+ export const TRPC_ERROR_CODES_BY_NUMBER: Invert<
51
+ typeof TRPC_ERROR_CODES_BY_KEY
52
+ > = {
53
+ [-32700]: 'PARSE_ERROR',
54
+ [-32600]: 'BAD_REQUEST',
55
+ [-32603]: 'INTERNAL_SERVER_ERROR',
56
+ [-32001]: 'UNAUTHORIZED',
57
+ [-32003]: 'FORBIDDEN',
58
+ [-32004]: 'NOT_FOUND',
59
+ [-32005]: 'METHOD_NOT_SUPPORTED',
60
+ [-32008]: 'TIMEOUT',
61
+ [-32009]: 'CONFLICT',
62
+ [-32012]: 'PRECONDITION_FAILED',
63
+ [-32013]: 'PAYLOAD_TOO_LARGE',
64
+ [-32015]: 'UNSUPPORTED_MEDIA_TYPE',
65
+ [-32022]: 'UNPROCESSABLE_CONTENT',
66
+ [-32029]: 'TOO_MANY_REQUESTS',
67
+ [-32099]: 'CLIENT_CLOSED_REQUEST',
68
+ };
42
69
 
43
70
  export type TRPC_ERROR_CODE_NUMBER = ValueOf<typeof TRPC_ERROR_CODES_BY_KEY>;
44
71
  export type TRPC_ERROR_CODE_KEY = keyof typeof TRPC_ERROR_CODES_BY_KEY;
@@ -1,15 +1,12 @@
1
1
  /* eslint-disable @typescript-eslint/no-namespace */
2
- import { ProcedureType } from '../core';
3
- import { TRPC_ERROR_CODE_NUMBER } from './codes';
2
+ import type { ProcedureType } from '../procedure';
3
+ import type { TRPC_ERROR_CODE_NUMBER } from './codes';
4
4
 
5
5
  /**
6
6
  * Error response
7
7
  */
8
- export interface TRPCErrorShape<
9
- TCode extends number = TRPC_ERROR_CODE_NUMBER,
10
- TData extends Record<string, unknown> = Record<string, unknown>,
11
- > {
12
- code: TCode;
8
+ export interface TRPCErrorShape<TData extends object = object> {
9
+ code: TRPC_ERROR_CODE_NUMBER;
13
10
  message: string;
14
11
  data: TData;
15
12
  }
@@ -101,8 +98,8 @@ export type TRPCClientOutgoingMessage =
101
98
 
102
99
  export interface TRPCResultMessage<TData>
103
100
  extends JSONRPC2.ResultResponse<
104
- | { type: 'started' }
105
- | { type: 'stopped' }
101
+ | { type: 'started'; data?: never }
102
+ | { type: 'stopped'; data?: never }
106
103
  | (TRPCResult<TData> & { type: 'data' })
107
104
  > {}
108
105
 
@@ -0,0 +1,21 @@
1
+ export { TRPC_ERROR_CODES_BY_KEY, TRPC_ERROR_CODES_BY_NUMBER } from './codes';
2
+ export type { TRPC_ERROR_CODE_KEY, TRPC_ERROR_CODE_NUMBER } from './codes';
3
+ export type {
4
+ JSONRPC2,
5
+ TRPCClientIncomingMessage,
6
+ TRPCClientIncomingRequest,
7
+ TRPCClientOutgoingMessage,
8
+ TRPCClientOutgoingRequest,
9
+ TRPCErrorResponse,
10
+ TRPCErrorShape,
11
+ TRPCReconnectNotification,
12
+ TRPCRequest,
13
+ TRPCRequestMessage,
14
+ TRPCResponse,
15
+ TRPCResponseMessage,
16
+ TRPCResult,
17
+ TRPCResultMessage,
18
+ TRPCSubscriptionStopNotification,
19
+ TRPCSuccessResponse,
20
+ } from './envelopes';
21
+ export { parseTRPCMessage } from './parseTRPCMessage';
@@ -1,17 +1,18 @@
1
- import type { ProcedureType } from '../core';
1
+ import { procedureTypes, type ProcedureType } from '../procedure';
2
2
  import type { CombinedDataTransformer } from '../transformer';
3
+ import { isObject } from '../utils';
3
4
  import type { TRPCClientOutgoingMessage } from './envelopes';
4
5
 
5
6
  /* istanbul ignore next -- @preserve */
6
7
  function assertIsObject(obj: unknown): asserts obj is Record<string, unknown> {
7
- if (typeof obj !== 'object' || Array.isArray(obj) || !obj) {
8
+ if (!isObject(obj)) {
8
9
  throw new Error('Not an object');
9
10
  }
10
11
  }
11
12
 
12
13
  /* istanbul ignore next -- @preserve */
13
14
  function assertIsProcedureType(obj: unknown): asserts obj is ProcedureType {
14
- if (obj !== 'query' && obj !== 'subscription' && obj !== 'mutation') {
15
+ if (!procedureTypes.includes(obj as any)) {
15
16
  throw new Error('Invalid procedure type');
16
17
  }
17
18
  }
@@ -0,0 +1,194 @@
1
+ import type { AnyRootTypes, RootConfig } from './rootConfig';
2
+ import type { AnyRouter, inferRouterError } from './router';
3
+ import type {
4
+ TRPCResponse,
5
+ TRPCResponseMessage,
6
+ TRPCResultMessage,
7
+ } from './rpc';
8
+ import { isObject } from './utils';
9
+
10
+ /**
11
+ * @public
12
+ */
13
+ export interface DataTransformer {
14
+ serialize: (object: any) => any;
15
+ deserialize: (object: any) => any;
16
+ }
17
+
18
+ interface InputDataTransformer extends DataTransformer {
19
+ /**
20
+ * This function runs **on the client** before sending the data to the server.
21
+ */
22
+ serialize: (object: any) => any;
23
+ /**
24
+ * This function runs **on the server** to transform the data before it is passed to the resolver
25
+ */
26
+ deserialize: (object: any) => any;
27
+ }
28
+
29
+ interface OutputDataTransformer extends DataTransformer {
30
+ /**
31
+ * This function runs **on the server** before sending the data to the client.
32
+ */
33
+ serialize: (object: any) => any;
34
+ /**
35
+ * This function runs **only on the client** to transform the data sent from the server.
36
+ */
37
+ deserialize: (object: any) => any;
38
+ }
39
+
40
+ /**
41
+ * @public
42
+ */
43
+ export interface CombinedDataTransformer {
44
+ /**
45
+ * Specify how the data sent from the client to the server should be transformed.
46
+ */
47
+ input: InputDataTransformer;
48
+ /**
49
+ * Specify how the data sent from the server to the client should be transformed.
50
+ */
51
+ output: OutputDataTransformer;
52
+ }
53
+
54
+ /**
55
+ * @public
56
+ */
57
+ export type CombinedDataTransformerClient = {
58
+ input: Pick<CombinedDataTransformer['input'], 'serialize'>;
59
+ output: Pick<CombinedDataTransformer['output'], 'deserialize'>;
60
+ };
61
+
62
+ /**
63
+ * @public
64
+ */
65
+ export type DataTransformerOptions = CombinedDataTransformer | DataTransformer;
66
+
67
+ /**
68
+ * @internal
69
+ */
70
+ export function getDataTransformer(
71
+ transformer: DataTransformerOptions,
72
+ ): CombinedDataTransformer {
73
+ if ('input' in transformer) {
74
+ return transformer;
75
+ }
76
+ return { input: transformer, output: transformer };
77
+ }
78
+
79
+ /**
80
+ * @internal
81
+ */
82
+ export const defaultTransformer: CombinedDataTransformer = {
83
+ input: { serialize: (obj) => obj, deserialize: (obj) => obj },
84
+ output: { serialize: (obj) => obj, deserialize: (obj) => obj },
85
+ };
86
+
87
+ function transformTRPCResponseItem<
88
+ TResponseItem extends TRPCResponse | TRPCResponseMessage,
89
+ >(config: RootConfig<AnyRootTypes>, item: TResponseItem): TResponseItem {
90
+ if ('error' in item) {
91
+ return {
92
+ ...item,
93
+ error: config.transformer.output.serialize(item.error),
94
+ };
95
+ }
96
+
97
+ if ('data' in item.result) {
98
+ return {
99
+ ...item,
100
+ result: {
101
+ ...item.result,
102
+ data: config.transformer.output.serialize(item.result.data),
103
+ },
104
+ };
105
+ }
106
+
107
+ return item;
108
+ }
109
+
110
+ /**
111
+ * Takes a unserialized `TRPCResponse` and serializes it with the router's transformers
112
+ **/
113
+ export function transformTRPCResponse<
114
+ TResponse extends
115
+ | TRPCResponse
116
+ | TRPCResponse[]
117
+ | TRPCResponseMessage
118
+ | TRPCResponseMessage[],
119
+ >(config: RootConfig<AnyRootTypes>, itemOrItems: TResponse) {
120
+ return Array.isArray(itemOrItems)
121
+ ? itemOrItems.map((item) => transformTRPCResponseItem(config, item))
122
+ : transformTRPCResponseItem(config, itemOrItems);
123
+ }
124
+
125
+ // FIXME:
126
+ // - the generics here are probably unnecessary
127
+ // - the RPC-spec could probably be simplified to combine HTTP + WS
128
+ /** @internal */
129
+ function transformResultInner<TRouter extends AnyRouter, TOutput>(
130
+ response:
131
+ | TRPCResponse<TOutput, inferRouterError<TRouter>>
132
+ | TRPCResponseMessage<TOutput, inferRouterError<TRouter>>,
133
+ transformer: DataTransformer,
134
+ ) {
135
+ if ('error' in response) {
136
+ const error = transformer.deserialize(
137
+ response.error,
138
+ ) as inferRouterError<TRouter>;
139
+ return {
140
+ ok: false,
141
+ error: {
142
+ ...response,
143
+ error,
144
+ },
145
+ } as const;
146
+ }
147
+
148
+ const result = {
149
+ ...response.result,
150
+ ...((!response.result.type || response.result.type === 'data') && {
151
+ type: 'data',
152
+ data: transformer.deserialize(response.result.data),
153
+ }),
154
+ } as TRPCResultMessage<TOutput>['result'];
155
+ return { ok: true, result } as const;
156
+ }
157
+
158
+ class TransformResultError extends Error {
159
+ constructor() {
160
+ super('Unable to transform response from server');
161
+ }
162
+ }
163
+
164
+ /**
165
+ * Transforms and validates that the result is a valid TRPCResponse
166
+ * @internal
167
+ */
168
+ export function transformResult<TRouter extends AnyRouter, TOutput>(
169
+ response:
170
+ | TRPCResponse<TOutput, inferRouterError<TRouter>>
171
+ | TRPCResponseMessage<TOutput, inferRouterError<TRouter>>,
172
+ transformer: DataTransformer,
173
+ ): ReturnType<typeof transformResultInner> {
174
+ let result: ReturnType<typeof transformResultInner>;
175
+ try {
176
+ // Use the data transformers on the JSON-response
177
+ result = transformResultInner(response, transformer);
178
+ } catch (err) {
179
+ throw new TransformResultError();
180
+ }
181
+
182
+ // check that output of the transformers is a valid TRPCResponse
183
+ if (
184
+ !result.ok &&
185
+ (!isObject(result.error.error) ||
186
+ typeof result.error.error['code'] !== 'number')
187
+ ) {
188
+ throw new TransformResultError();
189
+ }
190
+ if (result.ok && !isObject(result.result)) {
191
+ throw new TransformResultError();
192
+ }
193
+ return result;
194
+ }