@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,29 @@
1
+ 'use strict';
2
+
3
+ function transformTRPCResponseItem(router, item) {
4
+ if ('error' in item) {
5
+ return { ...item,
6
+ error: router._def.transformer.output.serialize(item.error)
7
+ };
8
+ }
9
+
10
+ if ('data' in item.result) {
11
+ return { ...item,
12
+ result: { ...item.result,
13
+ data: router._def.transformer.output.serialize(item.result.data)
14
+ }
15
+ };
16
+ }
17
+
18
+ return item;
19
+ }
20
+ /**
21
+ * Takes a unserialized `TRPCResponse` and serializes it with the router's transformers
22
+ **/
23
+
24
+
25
+ function transformTRPCResponse(router, itemOrItems) {
26
+ return Array.isArray(itemOrItems) ? itemOrItems.map(item => transformTRPCResponseItem(router, item)) : transformTRPCResponseItem(router, itemOrItems);
27
+ }
28
+
29
+ exports.transformTRPCResponse = transformTRPCResponse;
@@ -0,0 +1,27 @@
1
+ function transformTRPCResponseItem(router, item) {
2
+ if ('error' in item) {
3
+ return { ...item,
4
+ error: router._def.transformer.output.serialize(item.error)
5
+ };
6
+ }
7
+
8
+ if ('data' in item.result) {
9
+ return { ...item,
10
+ result: { ...item.result,
11
+ data: router._def.transformer.output.serialize(item.result.data)
12
+ }
13
+ };
14
+ }
15
+
16
+ return item;
17
+ }
18
+ /**
19
+ * Takes a unserialized `TRPCResponse` and serializes it with the router's transformers
20
+ **/
21
+
22
+
23
+ function transformTRPCResponse(router, itemOrItems) {
24
+ return Array.isArray(itemOrItems) ? itemOrItems.map(item => transformTRPCResponseItem(router, item)) : transformTRPCResponseItem(router, itemOrItems);
25
+ }
26
+
27
+ export { transformTRPCResponse as t };
@@ -27,4 +27,18 @@ export declare type DataTransformerOptions = DataTransformer | CombinedDataTrans
27
27
  * @public
28
28
  */
29
29
  export declare type ClientDataTransformerOptions = DataTransformer | CombinedDataTransformerClient;
30
+ /**
31
+ * @internal
32
+ */
33
+ export declare function getDataTransformer(transformer: DataTransformerOptions): CombinedDataTransformer;
34
+ /**
35
+ * @internal
36
+ */
37
+ export declare type DefaultDataTransformer = CombinedDataTransformer & {
38
+ _default: true;
39
+ };
40
+ /**
41
+ * @internal
42
+ */
43
+ export declare const defaultTransformer: DefaultDataTransformer;
30
44
  //# sourceMappingURL=transformer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../src/transformer.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,oBAAY,eAAe,GAAG;IAC5B,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAC5B,WAAW,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,oBAAY,uBAAuB,GAAG;IACpC,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,eAAe,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,oBAAY,6BAA6B,GAAG;IAC1C,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;CAC9C,CAAC;AAEF;;GAEG;AACH,oBAAY,sBAAsB,GAAG,eAAe,GAAG,uBAAuB,CAAC;AAE/E;;GAEG;AACH,oBAAY,4BAA4B,GACpC,eAAe,GACf,6BAA6B,CAAC"}
1
+ {"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../src/transformer.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,oBAAY,eAAe,GAAG;IAC5B,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAC5B,WAAW,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,oBAAY,uBAAuB,GAAG;IACpC,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,eAAe,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,oBAAY,6BAA6B,GAAG;IAC1C,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;CAC9C,CAAC;AAEF;;GAEG;AACH,oBAAY,sBAAsB,GAAG,eAAe,GAAG,uBAAuB,CAAC;AAE/E;;GAEG;AACH,oBAAY,4BAA4B,GACpC,eAAe,GACf,6BAA6B,CAAC;AAElC;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,sBAAsB,GAClC,uBAAuB,CAKzB;AAED;;GAEG;AACH,oBAAY,sBAAsB,GAAG,uBAAuB,GAAG;IAC7D,QAAQ,EAAE,IAAI,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,sBAIhC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -4,16 +4,8 @@
4
4
  export declare type Prefix<K extends string, T extends string> = `${K}${T}`;
5
5
  /**
6
6
  * @internal
7
- * @deprecated will be removed in next major
8
7
  */
9
8
  export declare type identity<T> = T;
10
- /**
11
- * @internal
12
- * @deprecated will be removed in next major
13
- */
14
- export declare type format<T> = {
15
- [k in keyof T]: T[k];
16
- };
17
9
  /**
18
10
  * @internal
19
11
  */
@@ -38,4 +30,29 @@ export declare type ThenArg<T> = T extends PromiseLike<infer U> ? ThenArg<U> : T
38
30
  * @public
39
31
  */
40
32
  export declare type Dict<T> = Record<string, T | undefined>;
33
+ /**
34
+ * @public
35
+ */
36
+ export declare type MaybePromise<T> = T | Promise<T>;
37
+ /**
38
+ * @internal
39
+ *
40
+ * Creates a "lower-priority" type inference.
41
+ * https://github.com/microsoft/TypeScript/issues/14829#issuecomment-322267089
42
+ */
43
+ export declare type InferLast<T> = T & {
44
+ [K in keyof T]: T[K];
45
+ };
46
+ /**
47
+ * @public
48
+ */
49
+ export declare type inferAsyncReturnType<TFunction extends (...args: any) => any> = ThenArg<ReturnType<TFunction>>;
50
+ declare type FilterKeys<T extends object, K> = {
51
+ [TKey in keyof T]: T[TKey] extends K ? TKey : never;
52
+ }[keyof T];
53
+ /**
54
+ * @internal
55
+ */
56
+ export declare type Filter<T extends object, K> = Pick<T, FilterKeys<T, K>>;
57
+ export {};
41
58
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,oBAAY,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAEpE;;;GAGG;AACH,oBAAY,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAE5B;;;GAGG;AACH,oBAAY,MAAM,CAAC,CAAC,IAAI;KACrB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,oBAAY,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC;KAClC,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GACvC,CAAC,CAAC,CAAC,CAAC,GACJ,CAAC,SAAS,MAAM,CAAC,GACjB,CAAC,CAAC,CAAC,CAAC,GACJ,KAAK;CACV,CAAC,CAAC;AAEH;;GAEG;AACH,oBAAY,QAAQ,CAClB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,OAAO,SAAS,MAAM,IACpB;KACD,CAAC,IAAI,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF;;GAEG;AACH,oBAAY,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;AAE5C;;GAEG;AACH,oBAAY,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAEzE;;GAEG;AACH,oBAAY,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,oBAAY,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAEpE;;GAEG;AACH,oBAAY,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAE5B;;GAEG;AACH,oBAAY,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC;KAClC,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GACvC,CAAC,CAAC,CAAC,CAAC,GACJ,CAAC,SAAS,MAAM,CAAC,GACjB,CAAC,CAAC,CAAC,CAAC,GACJ,KAAK;CACV,CAAC,CAAC;AAEH;;GAEG;AACH,oBAAY,QAAQ,CAClB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,OAAO,SAAS,MAAM,IACpB;KACD,CAAC,IAAI,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF;;GAEG;AACH,oBAAY,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;AAE5C;;GAEG;AACH,oBAAY,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAEzE;;GAEG;AACH,oBAAY,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;AAEpD;;GAEG;AACH,oBAAY,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7C;;;;;GAKG;AACH,oBAAY,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAExD;;GAEG;AACH,oBAAY,oBAAoB,CAAC,SAAS,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,IACtE,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAEjC,aAAK,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI;KACpC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,KAAK;CACpD,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX;;GAEG;AACH,oBAAY,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export * from '../dist/observable';
@@ -0,0 +1 @@
1
+ module.exports = require('../dist/observable/index');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trpc/server",
3
- "version": "10.0.0-alpha.3",
3
+ "version": "10.0.0-alpha.32",
4
4
  "description": "tRPC Server",
5
5
  "author": "KATT",
6
6
  "license": "MIT",
@@ -12,12 +12,18 @@
12
12
  },
13
13
  "eslintConfig": {
14
14
  "rules": {
15
- "explicit-module-boundary-types": "off"
15
+ "explicit-module-boundary-types": "off",
16
+ "no-restricted-imports": [
17
+ "error",
18
+ "@trpc/server"
19
+ ]
16
20
  }
17
21
  },
18
22
  "scripts": {
19
23
  "test": "jest",
20
- "build": "rollup -c"
24
+ "build": "rollup -c",
25
+ "benchmark": "yarn tsc --project tsconfig.benchmark.json",
26
+ "ts-watch": "tsc --project tsconfig.watch.json"
21
27
  },
22
28
  "main": "dist/index.js",
23
29
  "module": "dist/index.mjs",
@@ -28,6 +34,11 @@
28
34
  "require": "./dist/index.js",
29
35
  "default": "./dist/index.js"
30
36
  },
37
+ "./adapters/aws-lambda": {
38
+ "import": "./dist/adapters/aws-lambda.mjs",
39
+ "require": "./dist/adapters/aws-lambda.js",
40
+ "default": "./dist/adapters/aws-lambda.js"
41
+ },
31
42
  "./adapters/express": {
32
43
  "import": "./dist/adapters/express.mjs",
33
44
  "require": "./dist/adapters/express.js",
@@ -48,56 +59,79 @@
48
59
  "require": "./dist/adapters/standalone.js",
49
60
  "default": "./dist/adapters/standalone.js"
50
61
  },
62
+ "./adapters/fastify": {
63
+ "import": "./dist/adapters/fastify/index.mjs",
64
+ "require": "./dist/adapters/fastify/index.js",
65
+ "default": "./dist/adapters/fastify/index.js"
66
+ },
51
67
  "./adapters/ws": {
52
68
  "import": "./dist/adapters/ws.mjs",
53
69
  "require": "./dist/adapters/ws.js",
54
70
  "default": "./dist/adapters/ws.js"
55
71
  },
56
- "./ws": {
57
- "import": "./dist/ws/index.mjs",
58
- "require": "./dist/ws/index.js",
59
- "default": "./dist/ws/index.js"
72
+ "./adapters/fetch": {
73
+ "import": "./dist/adapters/fetch/index.mjs",
74
+ "require": "./dist/adapters/fetch/index.js",
75
+ "default": "./dist/adapters/fetch/index.js"
60
76
  },
61
77
  "./rpc": {
62
78
  "import": "./dist/rpc/index.mjs",
63
79
  "require": "./dist/rpc/index.js",
64
80
  "default": "./dist/rpc/index.js"
81
+ },
82
+ "./observable": {
83
+ "import": "./dist/observable/index.mjs",
84
+ "require": "./dist/observable/index.js",
85
+ "default": "./dist/observable/index.js"
86
+ },
87
+ "./subscription": {
88
+ "import": "./dist/subscription.mjs",
89
+ "require": "./dist/subscription.js",
90
+ "default": "./dist/subscription.js"
65
91
  }
66
92
  },
67
93
  "files": [
68
94
  "README.md",
69
95
  "dist",
70
96
  "adapters",
71
- "ws",
72
97
  "rpc",
98
+ "observable",
73
99
  "src"
74
100
  ],
75
101
  "publishConfig": {
76
102
  "access": "public"
77
103
  },
78
104
  "devDependencies": {
79
- "@testing-library/jest-dom": "^5.14.1",
80
- "@testing-library/react": "^12.0.0",
81
- "@testing-library/user-event": "^13.2.1",
105
+ "@cloudflare/workers-types": "^3.8.0",
106
+ "@fastify/websocket": "^5.0.0",
107
+ "@miniflare/core": "^2.4.0",
108
+ "@types/aws-lambda": "^8.10.97",
82
109
  "@types/express": "^4.17.12",
83
110
  "@types/hash-sum": "^1.0.0",
84
111
  "@types/ws": "^8.2.0",
112
+ "abort-controller": "^3.0.0",
85
113
  "devalue": "^2.0.1",
114
+ "esbuild": "^0.14.38",
86
115
  "express": "^4.17.1",
87
- "fastify": "^3.17.0",
116
+ "fastify": "^3.27.1",
117
+ "fastify-plugin": "^3.0.1",
118
+ "fastify-websocket": "^4.0.0",
88
119
  "hash-sum": "^2.0.0",
89
120
  "jest": "^27.1.0",
121
+ "jest-environment-miniflare": "^2.4.0",
90
122
  "konn": "^0.7.0",
123
+ "miniflare": "^2.4.0",
91
124
  "myzod": "^1.3.1",
92
- "next": "^12.0.1",
125
+ "next": "^12.1.6",
126
+ "node-fetch": "^2.6.1",
93
127
  "superstruct": "^0.15.2",
94
- "typescript": "4.4.4",
128
+ "typescript": "4.7.4",
95
129
  "ws": "^8.0.0",
96
130
  "yup": "^0.32.8",
97
131
  "zod": "^3.0.0"
98
132
  },
99
- "gitHead": "cd71a2fe5d42efc838ae3d4cebe7a9e1a36d9110",
100
133
  "dependencies": {
101
134
  "tslib": "^2.1.0"
102
- }
135
+ },
136
+ "gitHead": "71757fddbbfd69453ecab6faa20a7a238856263d"
103
137
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var codes = require('../../dist/codes-33cef953.cjs.dev.js');
5
+ var codes = require('../../dist/codes-130e62df.cjs.dev.js');
6
6
 
7
7
 
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var codes = require('../../dist/codes-e0df67c4.cjs.prod.js');
5
+ var codes = require('../../dist/codes-aff770a3.cjs.prod.js');
6
6
 
7
7
 
8
8
 
@@ -1 +1 @@
1
- export { T as TRPC_ERROR_CODES_BY_KEY, a as TRPC_ERROR_CODES_BY_NUMBER } from '../../dist/codes-fe07bf82.esm.js';
1
+ export { T as TRPC_ERROR_CODES_BY_KEY, a as TRPC_ERROR_CODES_BY_NUMBER } from '../../dist/codes-5678cc97.esm.js';
@@ -0,0 +1,156 @@
1
+ import type {
2
+ Context as APIGWContext,
3
+ APIGatewayProxyEvent,
4
+ APIGatewayProxyEventV2,
5
+ APIGatewayProxyResult,
6
+ APIGatewayProxyStructuredResultV2,
7
+ } from 'aws-lambda';
8
+ import { TRPCError, resolveHTTPResponse } from '../..';
9
+ import { AnyRouter, inferRouterContext } from '../../core';
10
+ import { HTTPHeaders, HTTPRequest } from '../../http/internals/types';
11
+ import type { HTTPResponse } from '../../http/internals/types';
12
+ import {
13
+ APIGatewayEvent,
14
+ APIGatewayResult,
15
+ AWSLambdaOptions,
16
+ UNKNOWN_PAYLOAD_FORMAT_VERSION_ERROR_MESSAGE,
17
+ isPayloadV1,
18
+ isPayloadV2,
19
+ } from './utils';
20
+
21
+ export type { CreateAWSLambdaContextOptions, AWSLambdaOptions } from './utils';
22
+
23
+ function lambdaEventToHTTPRequest(event: APIGatewayEvent): HTTPRequest {
24
+ const query = new URLSearchParams();
25
+ for (const [key, value] of Object.entries(
26
+ event.queryStringParameters ?? {},
27
+ )) {
28
+ if (typeof value !== 'undefined') {
29
+ query.append(key, value);
30
+ }
31
+ }
32
+
33
+ return {
34
+ method: getHTTPMethod(event),
35
+ query: query,
36
+ headers: event.headers,
37
+ body: event.body,
38
+ };
39
+ }
40
+
41
+ function getHTTPMethod(event: APIGatewayEvent) {
42
+ if (isPayloadV1(event)) {
43
+ return event.httpMethod;
44
+ }
45
+ if (isPayloadV2(event)) {
46
+ return event.requestContext.http.method;
47
+ }
48
+ throw new TRPCError({
49
+ code: 'INTERNAL_SERVER_ERROR',
50
+ message: UNKNOWN_PAYLOAD_FORMAT_VERSION_ERROR_MESSAGE,
51
+ });
52
+ }
53
+ function getPath(event: APIGatewayEvent) {
54
+ if (isPayloadV1(event)) {
55
+ return event.path.slice(1);
56
+ }
57
+ if (isPayloadV2(event)) {
58
+ return event.rawPath.slice(1);
59
+ }
60
+ throw new TRPCError({
61
+ code: 'INTERNAL_SERVER_ERROR',
62
+ message: UNKNOWN_PAYLOAD_FORMAT_VERSION_ERROR_MESSAGE,
63
+ });
64
+ }
65
+ function transformHeaders(headers: HTTPHeaders): APIGatewayResult['headers'] {
66
+ const obj: APIGatewayResult['headers'] = {};
67
+
68
+ for (const [key, value] of Object.entries(headers)) {
69
+ if (typeof value === 'undefined') {
70
+ continue;
71
+ }
72
+ obj[key] = Array.isArray(value) ? value.join(',') : value;
73
+ }
74
+ return obj;
75
+ }
76
+ function tRPCOutputToAPIGatewayOutput<
77
+ TEvent extends APIGatewayEvent,
78
+ TResult extends APIGatewayResult,
79
+ >(event: TEvent, response: HTTPResponse): TResult {
80
+ if (isPayloadV1(event)) {
81
+ const resp: APIGatewayProxyResult = {
82
+ statusCode: response.status,
83
+ body: response.body ?? '',
84
+ headers: transformHeaders(response.headers ?? {}),
85
+ };
86
+ return resp as TResult;
87
+ } else if (isPayloadV2(event)) {
88
+ const resp: APIGatewayProxyStructuredResultV2 = {
89
+ statusCode: response.status,
90
+ body: response.body ?? undefined,
91
+ headers: transformHeaders(response.headers ?? {}),
92
+ };
93
+ return resp as TResult;
94
+ } else {
95
+ throw new TRPCError({
96
+ code: 'INTERNAL_SERVER_ERROR',
97
+ message: UNKNOWN_PAYLOAD_FORMAT_VERSION_ERROR_MESSAGE,
98
+ });
99
+ }
100
+ }
101
+
102
+ /** Will check the createContext of the TRouter and get the parameter of event.
103
+ * @internal
104
+ **/
105
+ type inferAPIGWEvent<
106
+ TRouter extends AnyRouter,
107
+ TEvent extends APIGatewayEvent,
108
+ > = AWSLambdaOptions<TRouter, TEvent>['createContext'] extends NonNullable<
109
+ AWSLambdaOptions<TRouter, TEvent>['createContext']
110
+ >
111
+ ? Parameters<AWSLambdaOptions<TRouter, TEvent>['createContext']>[0]['event']
112
+ : APIGatewayEvent;
113
+
114
+ /** 1:1 mapping of v1 or v2 input events, deduces which is which.
115
+ * @internal
116
+ **/
117
+ type inferAPIGWReturn<T> = T extends APIGatewayProxyEvent
118
+ ? APIGatewayProxyResult
119
+ : T extends APIGatewayProxyEventV2
120
+ ? APIGatewayProxyStructuredResultV2
121
+ : never;
122
+ export function awsLambdaRequestHandler<
123
+ TRouter extends AnyRouter,
124
+ TEvent extends inferAPIGWEvent<TRouter, TEvent>,
125
+ TResult extends inferAPIGWReturn<TEvent>,
126
+ >(
127
+ opts: AWSLambdaOptions<TRouter, TEvent>,
128
+ ): (event: TEvent, context: APIGWContext) => Promise<TResult> {
129
+ return async (event, context) => {
130
+ const req = lambdaEventToHTTPRequest(event);
131
+ const path = getPath(event);
132
+ const createContext = async function _createContext(): Promise<
133
+ inferRouterContext<TRouter>
134
+ > {
135
+ return await opts.createContext?.({ event, context });
136
+ };
137
+
138
+ const response = await resolveHTTPResponse({
139
+ router: opts.router,
140
+ batching: opts.batching,
141
+ responseMeta: opts?.responseMeta,
142
+ createContext,
143
+ req,
144
+ path,
145
+ error: null,
146
+ onError(o) {
147
+ opts?.onError?.({
148
+ ...o,
149
+ req: event,
150
+ });
151
+ },
152
+ });
153
+
154
+ return tRPCOutputToAPIGatewayOutput<TEvent, TResult>(event, response);
155
+ };
156
+ }
@@ -0,0 +1,91 @@
1
+ import type {
2
+ Context as APIGWContext,
3
+ APIGatewayProxyEvent,
4
+ APIGatewayProxyEventV2,
5
+ APIGatewayProxyResult,
6
+ APIGatewayProxyStructuredResultV2,
7
+ } from 'aws-lambda';
8
+ import type { AnyRouter, inferRouterContext } from '../../core';
9
+ import type { ResponseMetaFn } from '../../http/internals/types';
10
+
11
+ export type APIGatewayEvent = APIGatewayProxyEvent | APIGatewayProxyEventV2;
12
+ export type APIGatewayResult =
13
+ | APIGatewayProxyResult
14
+ | APIGatewayProxyStructuredResultV2;
15
+
16
+ export type CreateAWSLambdaContextOptions<T extends APIGatewayEvent> = {
17
+ event: T;
18
+ context: APIGWContext;
19
+ };
20
+ export type AWSLambdaCreateContextFn<
21
+ TRouter extends AnyRouter,
22
+ TEvent extends APIGatewayEvent,
23
+ > = ({
24
+ event,
25
+ context,
26
+ }: CreateAWSLambdaContextOptions<TEvent>) =>
27
+ | inferRouterContext<TRouter>
28
+ | Promise<inferRouterContext<TRouter>>;
29
+
30
+ export type AWSLambdaOptions<
31
+ TRouter extends AnyRouter,
32
+ TEvent extends APIGatewayEvent,
33
+ > =
34
+ | {
35
+ router: TRouter;
36
+ batching?: {
37
+ enabled: boolean;
38
+ };
39
+ onError?: (options: Record<string, unknown>) => void;
40
+ responseMeta?: ResponseMetaFn<TRouter>;
41
+ } & (
42
+ | {
43
+ /**
44
+ * @link https://trpc.io/docs/context
45
+ **/
46
+ createContext: AWSLambdaCreateContextFn<TRouter, TEvent>;
47
+ }
48
+ | {
49
+ /**
50
+ * @link https://trpc.io/docs/context
51
+ **/
52
+ createContext?: AWSLambdaCreateContextFn<TRouter, TEvent>;
53
+ }
54
+ );
55
+
56
+ export function isPayloadV1(
57
+ event: APIGatewayEvent,
58
+ ): event is APIGatewayProxyEvent {
59
+ return determinePayloadFormat(event) == '1.0';
60
+ }
61
+ export function isPayloadV2(
62
+ event: APIGatewayEvent,
63
+ ): event is APIGatewayProxyEventV2 {
64
+ return determinePayloadFormat(event) == '2.0';
65
+ }
66
+
67
+ function determinePayloadFormat(
68
+ event: APIGatewayEvent,
69
+ ): APIGatewayPayloadFormatVersion {
70
+ // https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html
71
+ // According to AWS support, version is is extracted from the version property in the event.
72
+ // If there is no version property, then the version is implied as 1.0
73
+ const unknownEvent = event as { version?: string };
74
+ if (typeof unknownEvent.version === 'undefined') {
75
+ return '1.0';
76
+ } else {
77
+ if (['1.0', '2.0'].includes(unknownEvent.version)) {
78
+ return unknownEvent.version as APIGatewayPayloadFormatVersion;
79
+ } else {
80
+ return 'custom';
81
+ }
82
+ }
83
+ }
84
+ export type DefinedAPIGatewayPayloadFormats = '1.0' | '2.0';
85
+ export type APIGatewayPayloadFormatVersion =
86
+ | DefinedAPIGatewayPayloadFormats
87
+ | 'custom';
88
+
89
+ export const UNKNOWN_PAYLOAD_FORMAT_VERSION_ERROR_MESSAGE =
90
+ 'Custom payload format version not handled by this adapter. Please use either 1.0 or 2.0. More information here' +
91
+ 'https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html';
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import type * as express from 'express';
3
- import { AnyRouter } from '../router';
3
+ import { AnyRouter } from '../core';
4
4
  import { nodeHTTPRequestHandler } from './node-http';
5
5
  import {
6
6
  NodeHTTPCreateContextFnOptions,
@@ -15,10 +15,10 @@ export type CreateExpressContextOptions = NodeHTTPCreateContextFnOptions<
15
15
  export function createExpressMiddleware<TRouter extends AnyRouter>(
16
16
  opts: NodeHTTPHandlerOptions<TRouter, express.Request, express.Response>,
17
17
  ): express.Handler {
18
- return (req, res) => {
19
- const endpoint = req.path.substr(1);
18
+ return async (req, res) => {
19
+ const endpoint = req.path.slice(1);
20
20
 
21
- nodeHTTPRequestHandler({
21
+ await nodeHTTPRequestHandler({
22
22
  ...opts,
23
23
  req,
24
24
  res,
@@ -0,0 +1,77 @@
1
+ import { FastifyReply, FastifyRequest } from 'fastify';
2
+ import { assertNotBrowser } from '../../assertNotBrowser';
3
+ import { AnyRouter, inferRouterContext } from '../../core';
4
+ import {
5
+ HTTPBaseHandlerOptions,
6
+ HTTPRequest,
7
+ } from '../../http/internals/types';
8
+ import { resolveHTTPResponse } from '../../http/resolveHTTPResponse';
9
+ import { NodeHTTPCreateContextOption } from '../node-http';
10
+
11
+ assertNotBrowser();
12
+
13
+ export type FastifyHandlerOptions<
14
+ TRouter extends AnyRouter,
15
+ TRequest extends FastifyRequest,
16
+ TResponse extends FastifyReply,
17
+ > = HTTPBaseHandlerOptions<TRouter, TRequest> &
18
+ NodeHTTPCreateContextOption<TRouter, TRequest, TResponse>;
19
+
20
+ type FastifyRequestHandlerOptions<
21
+ TRouter extends AnyRouter,
22
+ TRequest extends FastifyRequest,
23
+ TResponse extends FastifyReply,
24
+ > = {
25
+ req: TRequest;
26
+ res: TResponse;
27
+ path: string;
28
+ } & FastifyHandlerOptions<TRouter, TRequest, TResponse>;
29
+
30
+ export async function fastifyRequestHandler<
31
+ TRouter extends AnyRouter,
32
+ TRequest extends FastifyRequest,
33
+ TResponse extends FastifyReply,
34
+ >(opts: FastifyRequestHandlerOptions<TRouter, TRequest, TResponse>) {
35
+ const createContext = async function _createContext(): Promise<
36
+ inferRouterContext<TRouter>
37
+ > {
38
+ return opts.createContext?.(opts);
39
+ };
40
+
41
+ const query = opts.req.query
42
+ ? new URLSearchParams(opts.req.query as any)
43
+ : new URLSearchParams(opts.req.url.split('?')[1]);
44
+
45
+ const req: HTTPRequest = {
46
+ query,
47
+ method: opts.req.method,
48
+ headers: opts.req.headers,
49
+ body: opts.req.body ?? 'null',
50
+ };
51
+
52
+ const result = await resolveHTTPResponse({
53
+ req,
54
+ createContext,
55
+ path: opts.path,
56
+ router: opts.router,
57
+ batching: opts.batching,
58
+ responseMeta: opts.responseMeta,
59
+ onError(o) {
60
+ opts?.onError?.({ ...o, req: opts.req });
61
+ },
62
+ });
63
+
64
+ const { res } = opts;
65
+
66
+ if ('status' in result && (!res.statusCode || res.statusCode === 200)) {
67
+ res.statusCode = result.status;
68
+ }
69
+ for (const [key, value] of Object.entries(result.headers ?? {})) {
70
+ if (typeof value === 'undefined') {
71
+ continue;
72
+ }
73
+
74
+ void res.header(key, value);
75
+ }
76
+ await res.send(result.body);
77
+ }