@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.
- package/README.md +6 -6
- package/adapters/next-app-dir/index.d.ts +1 -0
- package/adapters/next-app-dir/index.js +1 -0
- package/dist/@trpc/server/http.d.ts +8 -0
- package/dist/@trpc/server/http.d.ts.map +1 -0
- package/dist/@trpc/server/index.d.ts +61 -0
- package/dist/@trpc/server/index.d.ts.map +1 -0
- package/dist/@trpc/server/rpc.d.ts +3 -0
- package/dist/@trpc/server/rpc.d.ts.map +1 -0
- package/dist/adapters/aws-lambda/index.d.ts +11 -2
- package/dist/adapters/aws-lambda/index.d.ts.map +1 -1
- package/dist/adapters/aws-lambda/index.js +27 -106
- package/dist/adapters/aws-lambda/index.mjs +14 -91
- package/dist/adapters/aws-lambda/utils.d.ts +14 -14
- package/dist/adapters/aws-lambda/utils.d.ts.map +1 -1
- package/dist/adapters/aws-lambda/utils.js +100 -0
- package/dist/adapters/aws-lambda/utils.mjs +93 -0
- package/dist/adapters/express.d.ts +11 -2
- package/dist/adapters/express.d.ts.map +1 -1
- package/dist/adapters/express.js +2 -14
- package/dist/adapters/express.mjs +2 -12
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts +4 -4
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
- package/dist/adapters/fastify/fastifyRequestHandler.js +80 -0
- package/dist/adapters/fastify/fastifyRequestHandler.mjs +78 -0
- package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +13 -4
- package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -1
- package/dist/adapters/fastify/fastifyTRPCPlugin.js +48 -0
- package/dist/adapters/fastify/fastifyTRPCPlugin.mjs +46 -0
- package/dist/adapters/fastify/index.js +4 -126
- package/dist/adapters/fastify/index.mjs +2 -126
- package/dist/adapters/fetch/fetchRequestHandler.d.ts +11 -2
- package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -1
- package/dist/adapters/fetch/fetchRequestHandler.js +118 -0
- package/dist/adapters/fetch/fetchRequestHandler.mjs +116 -0
- package/dist/adapters/fetch/index.js +2 -106
- package/dist/adapters/fetch/index.mjs +1 -107
- package/dist/adapters/fetch/types.d.ts +13 -4
- package/dist/adapters/fetch/types.d.ts.map +1 -1
- package/dist/adapters/next-app-dir/formDataToObject.d.ts +2 -0
- package/dist/adapters/next-app-dir/formDataToObject.d.ts.map +1 -0
- package/dist/adapters/next-app-dir/formDataToObject.js +34 -0
- package/dist/adapters/next-app-dir/formDataToObject.mjs +32 -0
- package/dist/adapters/next-app-dir/nextAppDirCaller.d.ts +24 -0
- package/dist/adapters/next-app-dir/nextAppDirCaller.d.ts.map +1 -0
- package/dist/adapters/next-app-dir/nextAppDirCaller.js +85 -0
- package/dist/adapters/next-app-dir/nextAppDirCaller.mjs +83 -0
- package/dist/adapters/next-app-dir/notFound.d.ts +7 -0
- package/dist/adapters/next-app-dir/notFound.d.ts.map +1 -0
- package/dist/adapters/next-app-dir/notFound.js +15 -0
- package/dist/adapters/next-app-dir/notFound.mjs +13 -0
- package/dist/adapters/next-app-dir/redirect.d.ts +18 -0
- package/dist/adapters/next-app-dir/redirect.d.ts.map +1 -0
- package/dist/adapters/next-app-dir/redirect.js +33 -0
- package/dist/adapters/next-app-dir/redirect.mjs +30 -0
- package/dist/adapters/next-app-dir/rethrowNextErrors.d.ts +6 -0
- package/dist/adapters/next-app-dir/rethrowNextErrors.d.ts.map +1 -0
- package/dist/adapters/next-app-dir/rethrowNextErrors.js +23 -0
- package/dist/adapters/next-app-dir/rethrowNextErrors.mjs +21 -0
- package/dist/adapters/next-app-dir.d.ts +4 -0
- package/dist/adapters/next-app-dir.d.ts.map +1 -0
- package/dist/adapters/next-app-dir.js +11 -0
- package/dist/adapters/next-app-dir.mjs +3 -0
- package/dist/adapters/next.d.ts +16 -3
- package/dist/adapters/next.d.ts.map +1 -1
- package/dist/adapters/next.js +19 -19
- package/dist/adapters/next.mjs +18 -16
- package/dist/adapters/node-http/content-type/form-data/fileUploadHandler.d.ts +6 -3
- package/dist/adapters/node-http/content-type/form-data/fileUploadHandler.d.ts.map +1 -1
- package/dist/adapters/node-http/content-type/form-data/fileUploadHandler.js +161 -0
- package/dist/adapters/node-http/content-type/form-data/fileUploadHandler.mjs +157 -0
- package/dist/adapters/node-http/content-type/form-data/index.d.ts +6 -8
- package/dist/adapters/node-http/content-type/form-data/index.d.ts.map +1 -1
- package/dist/adapters/node-http/content-type/form-data/index.js +21 -647
- package/dist/adapters/node-http/content-type/form-data/index.mjs +10 -632
- package/dist/adapters/node-http/content-type/form-data/memoryUploadHandler.d.ts +2 -2
- package/dist/adapters/node-http/content-type/form-data/memoryUploadHandler.d.ts.map +1 -1
- package/dist/adapters/node-http/content-type/form-data/memoryUploadHandler.js +29 -0
- package/dist/adapters/node-http/content-type/form-data/memoryUploadHandler.mjs +27 -0
- package/dist/adapters/node-http/content-type/form-data/streamSlice.d.ts +2 -1
- package/dist/adapters/node-http/content-type/form-data/streamSlice.d.ts.map +1 -1
- package/dist/adapters/node-http/content-type/form-data/streamSlice.js +46 -0
- package/dist/adapters/node-http/content-type/form-data/streamSlice.mjs +44 -0
- package/dist/adapters/node-http/content-type/form-data/uploadHandler.d.ts +2 -2
- package/dist/adapters/node-http/content-type/form-data/uploadHandler.d.ts.map +1 -1
- package/dist/adapters/node-http/content-type/form-data/uploadHandler.js +30 -0
- package/dist/adapters/node-http/content-type/form-data/uploadHandler.mjs +26 -0
- package/dist/adapters/node-http/content-type/json/getPostBody.d.ts +2 -2
- package/dist/adapters/node-http/content-type/json/getPostBody.d.ts.map +1 -1
- package/dist/adapters/node-http/content-type/json/getPostBody.js +53 -0
- package/dist/adapters/node-http/content-type/json/getPostBody.mjs +51 -0
- package/dist/adapters/node-http/content-type/json/index.js +5 -42
- package/dist/adapters/node-http/content-type/json/index.mjs +4 -39
- package/dist/adapters/node-http/index.js +1 -14
- package/dist/adapters/node-http/index.mjs +1 -12
- package/dist/adapters/node-http/internals/contentType.d.ts +3 -3
- package/dist/adapters/node-http/internals/contentType.d.ts.map +1 -1
- package/dist/{contentType-8c16408e.js → adapters/node-http/internals/contentType.js} +1 -0
- package/dist/{contentType-3194ed5f.mjs → adapters/node-http/internals/contentType.mjs} +2 -1
- package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts +11 -2
- package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
- package/dist/{nodeHTTPRequestHandler-18f3370e.js → adapters/node-http/nodeHTTPRequestHandler.js} +18 -10
- package/dist/{nodeHTTPRequestHandler-0986c5a1.mjs → adapters/node-http/nodeHTTPRequestHandler.mjs} +18 -10
- package/dist/adapters/node-http/types.d.ts +18 -9
- package/dist/adapters/node-http/types.d.ts.map +1 -1
- package/dist/adapters/standalone.d.ts +11 -2
- package/dist/adapters/standalone.d.ts.map +1 -1
- package/dist/adapters/standalone.js +9 -22
- package/dist/adapters/standalone.mjs +9 -16
- package/dist/adapters/ws.d.ts +18 -17
- package/dist/adapters/ws.d.ts.map +1 -1
- package/dist/adapters/ws.js +34 -22
- package/dist/adapters/ws.mjs +27 -14
- package/dist/bundle-analysis.json +382 -495
- package/dist/http.d.ts +2 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +17 -0
- package/dist/http.mjs +6 -0
- package/dist/index.d.ts +1 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -86
- package/dist/index.mjs +8 -81
- package/dist/observable/index.d.ts +4 -4
- package/dist/observable/index.d.ts.map +1 -1
- package/dist/observable/index.js +6 -149
- package/dist/observable/index.mjs +2 -147
- package/dist/observable/observable.d.ts +9 -1
- package/dist/observable/observable.d.ts.map +1 -1
- package/dist/{observable-464116ac.js → observable/observable.js} +50 -20
- package/dist/{observable-ade1bad8.mjs → observable/observable.mjs} +50 -21
- package/dist/observable/operators.d.ts +8 -0
- package/dist/observable/operators.d.ts.map +1 -0
- package/dist/observable/operators.js +99 -0
- package/dist/observable/operators.mjs +95 -0
- package/dist/observable/types.d.ts +2 -5
- package/dist/observable/types.d.ts.map +1 -1
- package/dist/rpc.d.ts +2 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/{rpc/index.js → rpc.js} +3 -4
- package/dist/rpc.mjs +3 -0
- package/dist/shared.d.ts +26 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +10 -0
- package/dist/shared.mjs +3 -0
- package/dist/unstable-core-do-not-import/clientish/inference.d.ts +17 -0
- package/dist/unstable-core-do-not-import/clientish/inference.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/clientish/inferrable.d.ts +32 -0
- package/dist/unstable-core-do-not-import/clientish/inferrable.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/clientish/serialize.d.ts +62 -0
- package/dist/unstable-core-do-not-import/clientish/serialize.d.ts.map +1 -0
- package/dist/{shared/createProxy/index.d.ts → unstable-core-do-not-import/createProxy.d.ts} +1 -1
- package/dist/unstable-core-do-not-import/createProxy.d.ts.map +1 -0
- package/dist/{index-784ff647.js → unstable-core-do-not-import/createProxy.js} +0 -51
- package/dist/unstable-core-do-not-import/createProxy.mjs +49 -0
- package/dist/{error → unstable-core-do-not-import/error}/TRPCError.d.ts +3 -2
- package/dist/unstable-core-do-not-import/error/TRPCError.d.ts.map +1 -0
- package/dist/{TRPCError-ae7b67e8.js → unstable-core-do-not-import/error/TRPCError.js} +25 -25
- package/dist/{TRPCError-816ff32e.mjs → unstable-core-do-not-import/error/TRPCError.mjs} +24 -25
- package/dist/{error → unstable-core-do-not-import/error}/formatter.d.ts +11 -6
- package/dist/unstable-core-do-not-import/error/formatter.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/error/formatter.js +7 -0
- package/dist/unstable-core-do-not-import/error/formatter.mjs +5 -0
- package/dist/unstable-core-do-not-import/error/getErrorShape.d.ts +15 -0
- package/dist/unstable-core-do-not-import/error/getErrorShape.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/error/getErrorShape.js +31 -0
- package/dist/unstable-core-do-not-import/error/getErrorShape.mjs +29 -0
- package/dist/unstable-core-do-not-import/http/batchStreamFormatter.d.ts.map +1 -0
- package/dist/{batchStreamFormatter-fc1ffb26.mjs → unstable-core-do-not-import/http/batchStreamFormatter.mjs} +1 -1
- package/dist/{http → unstable-core-do-not-import/http}/contentType.d.ts +3 -3
- package/dist/unstable-core-do-not-import/http/contentType.d.ts.map +1 -0
- package/dist/{contentType-90bad7bb.js → unstable-core-do-not-import/http/contentType.js} +1 -1
- package/dist/{contentType-93515a46.mjs → unstable-core-do-not-import/http/contentType.mjs} +2 -2
- package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.d.ts +5 -0
- package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.js +52 -0
- package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.mjs +49 -0
- package/dist/unstable-core-do-not-import/http/index.d.ts +12 -0
- package/dist/unstable-core-do-not-import/http/index.d.ts.map +1 -0
- package/dist/{http → unstable-core-do-not-import/http}/resolveHTTPResponse.d.ts +4 -5
- package/dist/unstable-core-do-not-import/http/resolveHTTPResponse.d.ts.map +1 -0
- package/dist/{resolveHTTPResponse-5def1b0c.js → unstable-core-do-not-import/http/resolveHTTPResponse.js} +60 -63
- package/dist/{resolveHTTPResponse-55c648bd.mjs → unstable-core-do-not-import/http/resolveHTTPResponse.mjs} +54 -57
- package/dist/unstable-core-do-not-import/http/toURL.d.ts +2 -0
- package/dist/unstable-core-do-not-import/http/toURL.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/http/toURL.js +8 -0
- package/dist/unstable-core-do-not-import/http/toURL.mjs +6 -0
- package/dist/unstable-core-do-not-import/http/types.d.ts +109 -0
- package/dist/unstable-core-do-not-import/http/types.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/initTRPC.d.ts +102 -0
- package/dist/unstable-core-do-not-import/initTRPC.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/initTRPC.js +81 -0
- package/dist/unstable-core-do-not-import/initTRPC.mjs +79 -0
- package/dist/unstable-core-do-not-import/middleware.d.ts +106 -0
- package/dist/unstable-core-do-not-import/middleware.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/middleware.js +96 -0
- package/dist/unstable-core-do-not-import/middleware.mjs +90 -0
- package/dist/{core → unstable-core-do-not-import}/parser.d.ts +3 -7
- package/dist/unstable-core-do-not-import/parser.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/parser.js +37 -0
- package/dist/unstable-core-do-not-import/parser.mjs +35 -0
- package/dist/unstable-core-do-not-import/procedure.d.ts +75 -0
- package/dist/unstable-core-do-not-import/procedure.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/procedure.js +9 -0
- package/dist/unstable-core-do-not-import/procedure.mjs +7 -0
- package/dist/unstable-core-do-not-import/procedureBuilder.d.ts +134 -0
- package/dist/unstable-core-do-not-import/procedureBuilder.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/procedureBuilder.js +204 -0
- package/dist/unstable-core-do-not-import/procedureBuilder.mjs +201 -0
- package/dist/{core/internals/config.d.ts → unstable-core-do-not-import/rootConfig.d.ts} +19 -27
- package/dist/unstable-core-do-not-import/rootConfig.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/rootConfig.js +8 -0
- package/dist/unstable-core-do-not-import/rootConfig.mjs +6 -0
- package/dist/unstable-core-do-not-import/router.d.ts +81 -0
- package/dist/unstable-core-do-not-import/router.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/router.js +168 -0
- package/dist/unstable-core-do-not-import/router.mjs +163 -0
- package/dist/{rpc → unstable-core-do-not-import/rpc}/codes.d.ts +8 -16
- package/dist/unstable-core-do-not-import/rpc/codes.d.ts.map +1 -0
- package/dist/{codes-87f6824b.js → unstable-core-do-not-import/rpc/codes.js} +19 -13
- package/dist/{codes-c924c3db.mjs → unstable-core-do-not-import/rpc/codes.mjs} +20 -13
- package/dist/{rpc → unstable-core-do-not-import/rpc}/envelopes.d.ts +6 -4
- package/dist/unstable-core-do-not-import/rpc/envelopes.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/rpc/index.d.ts +5 -0
- package/dist/unstable-core-do-not-import/rpc/index.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/rpc/parseTRPCMessage.d.ts.map +1 -0
- package/dist/{parseTRPCMessage-1377f305.js → unstable-core-do-not-import/rpc/parseTRPCMessage.js} +5 -2
- package/dist/{parseTRPCMessage-a0f17853.mjs → unstable-core-do-not-import/rpc/parseTRPCMessage.mjs} +6 -3
- package/dist/unstable-core-do-not-import/transformer.d.ts +101 -0
- package/dist/unstable-core-do-not-import/transformer.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/transformer.js +106 -0
- package/dist/unstable-core-do-not-import/transformer.mjs +101 -0
- package/dist/unstable-core-do-not-import/types.d.ts +103 -0
- package/dist/unstable-core-do-not-import/types.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/types.js +11 -0
- package/dist/unstable-core-do-not-import/types.mjs +9 -0
- package/dist/unstable-core-do-not-import/utils.d.ts +19 -0
- package/dist/unstable-core-do-not-import/utils.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/utils.js +37 -0
- package/dist/unstable-core-do-not-import/utils.mjs +32 -0
- package/dist/unstable-core-do-not-import.d.ts +31 -0
- package/dist/unstable-core-do-not-import.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import.js +66 -0
- package/dist/unstable-core-do-not-import.mjs +21 -0
- package/package.json +51 -69
- package/src/@trpc/server/http.ts +27 -0
- package/src/@trpc/server/index.ts +100 -0
- package/src/@trpc/server/rpc.ts +26 -0
- package/src/adapters/aws-lambda/index.ts +21 -10
- package/src/adapters/aws-lambda/utils.ts +33 -26
- package/src/adapters/express.ts +18 -4
- package/src/adapters/fastify/fastifyRequestHandler.ts +22 -12
- package/src/adapters/fastify/fastifyTRPCPlugin.ts +21 -9
- package/src/adapters/fetch/fetchRequestHandler.ts +36 -12
- package/src/adapters/fetch/types.ts +18 -4
- package/src/adapters/next-app-dir/formDataToObject.ts +36 -0
- package/src/adapters/next-app-dir/nextAppDirCaller.ts +129 -0
- package/src/adapters/next-app-dir/notFound.ts +12 -0
- package/src/adapters/next-app-dir/redirect.ts +30 -0
- package/src/adapters/next-app-dir/rethrowNextErrors.ts +25 -0
- package/src/adapters/next-app-dir.ts +3 -0
- package/src/adapters/next.ts +30 -14
- package/src/adapters/node-http/content-type/form-data/fileUploadHandler.ts +11 -4
- package/src/adapters/node-http/content-type/form-data/index.ts +18 -18
- package/src/adapters/node-http/content-type/form-data/memoryUploadHandler.ts +3 -2
- package/src/adapters/node-http/content-type/form-data/streamSlice.ts +7 -2
- package/src/adapters/node-http/content-type/form-data/uploadHandler.ts +2 -2
- package/src/adapters/node-http/content-type/json/getPostBody.ts +20 -3
- package/src/adapters/node-http/content-type/json/index.ts +1 -1
- package/src/adapters/node-http/internals/contentType.ts +5 -3
- package/src/adapters/node-http/nodeHTTPRequestHandler.ts +28 -16
- package/src/adapters/node-http/types.ts +24 -9
- package/src/adapters/standalone.ts +22 -8
- package/src/adapters/ws.ts +68 -39
- package/src/http.ts +1 -0
- package/src/index.ts +1 -20
- package/src/observable/index.ts +10 -4
- package/src/observable/observable.ts +63 -3
- package/src/observable/operators.ts +114 -0
- package/src/observable/types.ts +1 -5
- package/src/rpc.ts +1 -0
- package/src/shared.ts +26 -0
- package/src/unstable-core-do-not-import/clientish/inference.ts +60 -0
- package/src/unstable-core-do-not-import/clientish/inferrable.ts +49 -0
- package/src/unstable-core-do-not-import/clientish/serialize.ts +122 -0
- package/src/{error → unstable-core-do-not-import/error}/TRPCError.ts +33 -27
- package/src/{error → unstable-core-do-not-import/error}/formatter.ts +12 -19
- package/src/{shared → unstable-core-do-not-import/error}/getErrorShape.ts +8 -8
- package/src/{http → unstable-core-do-not-import/http}/contentType.ts +4 -4
- package/src/{http → unstable-core-do-not-import/http}/getHTTPStatusCode.ts +8 -8
- package/src/unstable-core-do-not-import/http/index.ts +29 -0
- package/src/{http → unstable-core-do-not-import/http}/resolveHTTPResponse.ts +69 -69
- package/src/unstable-core-do-not-import/http/toURL.ts +7 -0
- package/src/unstable-core-do-not-import/http/types.ts +126 -0
- package/src/unstable-core-do-not-import/initTRPC.ts +151 -0
- package/src/unstable-core-do-not-import/middleware.ts +238 -0
- package/src/unstable-core-do-not-import/parser.ts +94 -0
- package/src/unstable-core-do-not-import/procedure.ts +94 -0
- package/src/unstable-core-do-not-import/procedureBuilder.ts +623 -0
- package/src/{core/internals/config.ts → unstable-core-do-not-import/rootConfig.ts} +22 -33
- package/src/unstable-core-do-not-import/router.ts +363 -0
- package/src/{rpc → unstable-core-do-not-import/rpc}/codes.ts +30 -3
- package/src/{rpc → unstable-core-do-not-import/rpc}/envelopes.ts +6 -9
- package/src/unstable-core-do-not-import/rpc/index.ts +21 -0
- package/src/{rpc → unstable-core-do-not-import/rpc}/parseTRPCMessage.ts +4 -3
- package/src/unstable-core-do-not-import/transformer.ts +194 -0
- package/src/unstable-core-do-not-import/types.ts +157 -0
- package/src/unstable-core-do-not-import/utils.ts +43 -0
- package/src/unstable-core-do-not-import.ts +30 -0
- package/unstable-core-do-not-import/index.d.ts +1 -0
- package/unstable-core-do-not-import/index.js +1 -0
- package/dist/TRPCError-efecb077.js +0 -63
- package/dist/batchStreamFormatter-2c1405a1.js +0 -31
- package/dist/codes-e5bb4d58.js +0 -48
- package/dist/config-5de7eae5.js +0 -10
- package/dist/config-60fc2667.js +0 -7
- package/dist/config-ab4c1c6b.mjs +0 -5
- package/dist/contentType-24c44bba.js +0 -5
- package/dist/contentType-9940f5d7.js +0 -58
- package/dist/core/index.d.ts +0 -9
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/initTRPC.d.ts +0 -105
- package/dist/core/initTRPC.d.ts.map +0 -1
- package/dist/core/internals/builderTypes.d.ts +0 -11
- package/dist/core/internals/builderTypes.d.ts.map +0 -1
- package/dist/core/internals/config.d.ts.map +0 -1
- package/dist/core/internals/getParseFn.d.ts +0 -4
- package/dist/core/internals/getParseFn.d.ts.map +0 -1
- package/dist/core/internals/mergeRouters.d.ts +0 -15
- package/dist/core/internals/mergeRouters.d.ts.map +0 -1
- package/dist/core/internals/mergeWithoutOverrides.d.ts +0 -5
- package/dist/core/internals/mergeWithoutOverrides.d.ts.map +0 -1
- package/dist/core/internals/omitPrototype.d.ts +0 -6
- package/dist/core/internals/omitPrototype.d.ts.map +0 -1
- package/dist/core/internals/procedureBuilder.d.ts +0 -113
- package/dist/core/internals/procedureBuilder.d.ts.map +0 -1
- package/dist/core/internals/utils.d.ts +0 -51
- package/dist/core/internals/utils.d.ts.map +0 -1
- package/dist/core/middleware.d.ts +0 -158
- package/dist/core/middleware.d.ts.map +0 -1
- package/dist/core/parser.d.ts.map +0 -1
- package/dist/core/procedure.d.ts +0 -72
- package/dist/core/procedure.d.ts.map +0 -1
- package/dist/core/router.d.ts +0 -65
- package/dist/core/router.d.ts.map +0 -1
- package/dist/core/types.d.ts +0 -24
- package/dist/core/types.d.ts.map +0 -1
- package/dist/error/TRPCError.d.ts.map +0 -1
- package/dist/error/formatter.d.ts.map +0 -1
- package/dist/error/utils.d.ts +0 -9
- package/dist/error/utils.d.ts.map +0 -1
- package/dist/http/batchStreamFormatter.d.ts.map +0 -1
- package/dist/http/contentType.d.ts.map +0 -1
- package/dist/http/getHTTPStatusCode.d.ts +0 -24
- package/dist/http/getHTTPStatusCode.d.ts.map +0 -1
- package/dist/http/index.d.ts +0 -5
- package/dist/http/index.d.ts.map +0 -1
- package/dist/http/index.js +0 -21
- package/dist/http/index.mjs +0 -9
- package/dist/http/internals/types.d.ts +0 -32
- package/dist/http/internals/types.d.ts.map +0 -1
- package/dist/http/resolveHTTPResponse.d.ts.map +0 -1
- package/dist/http/types.d.ts +0 -46
- package/dist/http/types.d.ts.map +0 -1
- package/dist/index-46cb3130.js +0 -94
- package/dist/index-f91d720c.mjs +0 -97
- package/dist/internals/invert.d.ts +0 -12
- package/dist/internals/invert.d.ts.map +0 -1
- package/dist/internals/types.d.ts +0 -26
- package/dist/internals/types.d.ts.map +0 -1
- package/dist/nodeHTTPRequestHandler-388f5fce.js +0 -107
- package/dist/observable/internals/identity.d.ts +0 -2
- package/dist/observable/internals/identity.d.ts.map +0 -1
- package/dist/observable/internals/observableToPromise.d.ts +0 -10
- package/dist/observable/internals/observableToPromise.d.ts.map +0 -1
- package/dist/observable/internals/pipe.d.ts +0 -4
- package/dist/observable/internals/pipe.d.ts.map +0 -1
- package/dist/observable/operators/index.d.ts +0 -4
- package/dist/observable/operators/index.d.ts.map +0 -1
- package/dist/observable/operators/map.d.ts +0 -3
- package/dist/observable/operators/map.d.ts.map +0 -1
- package/dist/observable/operators/share.d.ts +0 -6
- package/dist/observable/operators/share.d.ts.map +0 -1
- package/dist/observable/operators/tap.d.ts +0 -3
- package/dist/observable/operators/tap.d.ts.map +0 -1
- package/dist/observable-15588f28.js +0 -83
- package/dist/parseTRPCMessage-95955211.js +0 -63
- package/dist/resolveHTTPResponse-8d474952.js +0 -267
- package/dist/router-3c22fe56.js +0 -159
- package/dist/router-5274e533.mjs +0 -153
- package/dist/router-a1635eab.js +0 -147
- package/dist/rpc/codes.d.ts.map +0 -1
- package/dist/rpc/envelopes.d.ts.map +0 -1
- package/dist/rpc/index.d.ts +0 -4
- package/dist/rpc/index.d.ts.map +0 -1
- package/dist/rpc/index.mjs +0 -2
- package/dist/rpc/parseTRPCMessage.d.ts.map +0 -1
- package/dist/shared/createProxy/index.d.ts.map +0 -1
- package/dist/shared/getErrorShape.d.ts +0 -15
- package/dist/shared/getErrorShape.d.ts.map +0 -1
- package/dist/shared/index.d.ts +0 -7
- package/dist/shared/index.d.ts.map +0 -1
- package/dist/shared/index.js +0 -14
- package/dist/shared/index.mjs +0 -3
- package/dist/shared/internal/serialize.d.ts +0 -30
- package/dist/shared/internal/serialize.d.ts.map +0 -1
- package/dist/shared/jsonify.d.ts +0 -11
- package/dist/shared/jsonify.d.ts.map +0 -1
- package/dist/shared/transformTRPCResponse.d.ts +0 -9
- package/dist/shared/transformTRPCResponse.d.ts.map +0 -1
- package/dist/shared/types.d.ts +0 -6
- package/dist/shared/types.d.ts.map +0 -1
- package/dist/transformTRPCResponse-1153b421.mjs +0 -53
- package/dist/transformTRPCResponse-20ce3b68.js +0 -54
- package/dist/transformTRPCResponse-e65f34e9.js +0 -56
- package/dist/transformer.d.ts +0 -74
- package/dist/transformer.d.ts.map +0 -1
- package/dist/types.d.ts +0 -83
- package/dist/types.d.ts.map +0 -1
- package/dist/unstableInternalsExport-10cc2bae.mjs +0 -353
- package/dist/unstableInternalsExport-a064a7dd.js +0 -349
- package/dist/unstableInternalsExport-bf8496ea.js +0 -363
- package/dist/unstableInternalsExport.d.ts +0 -11
- package/dist/unstableInternalsExport.d.ts.map +0 -1
- package/dist/unstableInternalsExport.js +0 -16
- package/dist/unstableInternalsExport.mjs +0 -5
- package/src/core/index.ts +0 -28
- package/src/core/initTRPC.ts +0 -169
- package/src/core/internals/builderTypes.ts +0 -11
- package/src/core/internals/getParseFn.ts +0 -43
- package/src/core/internals/mergeRouters.ts +0 -90
- package/src/core/internals/mergeWithoutOverrides.ts +0 -19
- package/src/core/internals/omitPrototype.ts +0 -9
- package/src/core/internals/procedureBuilder.ts +0 -394
- package/src/core/internals/utils.ts +0 -84
- package/src/core/middleware.ts +0 -295
- package/src/core/parser.ts +0 -57
- package/src/core/procedure.ts +0 -88
- package/src/core/router.ts +0 -226
- package/src/core/types.ts +0 -67
- package/src/error/utils.ts +0 -23
- package/src/http/index.ts +0 -4
- package/src/http/internals/types.ts +0 -40
- package/src/http/types.ts +0 -51
- package/src/internals/invert.ts +0 -21
- package/src/internals/types.ts +0 -27
- package/src/observable/internals/identity.ts +0 -3
- package/src/observable/internals/observableToPromise.ts +0 -49
- package/src/observable/internals/pipe.ts +0 -23
- package/src/observable/operators/index.ts +0 -3
- package/src/observable/operators/map.ts +0 -25
- package/src/observable/operators/share.ts +0 -65
- package/src/observable/operators/tap.ts +0 -26
- package/src/rpc/index.ts +0 -3
- package/src/shared/index.ts +0 -10
- package/src/shared/internal/serialize.ts +0 -65
- package/src/shared/jsonify.ts +0 -22
- package/src/shared/transformTRPCResponse.ts +0 -40
- package/src/shared/types.ts +0 -9
- package/src/transformer.ts +0 -94
- package/src/types.ts +0 -125
- package/src/unstableInternalsExport.ts +0 -10
- package/subscription/index.d.ts +0 -1
- package/subscription/index.js +0 -1
- package/unstableInternalsExport/index.d.ts +0 -1
- package/unstableInternalsExport/index.js +0 -1
- /package/dist/{http → unstable-core-do-not-import/http}/batchStreamFormatter.d.ts +0 -0
- /package/dist/{batchStreamFormatter-93cdcdd4.js → unstable-core-do-not-import/http/batchStreamFormatter.js} +0 -0
- /package/dist/{rpc → unstable-core-do-not-import/rpc}/parseTRPCMessage.d.ts +0 -0
- /package/src/{shared/createProxy/index.ts → unstable-core-do-not-import/createProxy.ts} +0 -0
- /package/src/{http → unstable-core-do-not-import/http}/batchStreamFormatter.ts +0 -0
|
@@ -1,12 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* If you're making an adapter for tRPC and looking at this file for reference, you should import types and functions from `@trpc/server` and `@trpc/server/http`
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* import type { AnyTRPCRouter } from '@trpc/server'
|
|
7
|
+
* import type { HTTPBaseHandlerOptions } from '@trpc/server/http'
|
|
8
|
+
* ```
|
|
9
|
+
*/
|
|
10
|
+
// @trpc/server
|
|
11
|
+
|
|
12
|
+
import type { AnyRouter } from '../../@trpc/server';
|
|
13
|
+
import type {
|
|
4
14
|
HTTPRequest,
|
|
15
|
+
HTTPResponse,
|
|
5
16
|
ResolveHTTPRequestOptionsContextFn,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import {
|
|
9
|
-
|
|
17
|
+
ResponseChunk,
|
|
18
|
+
} from '../../@trpc/server/http';
|
|
19
|
+
import {
|
|
20
|
+
getBatchStreamFormatter,
|
|
21
|
+
resolveHTTPResponse,
|
|
22
|
+
toURL,
|
|
23
|
+
} from '../../@trpc/server/http';
|
|
24
|
+
import type { FetchHandlerOptions } from './types';
|
|
10
25
|
|
|
11
26
|
export type FetchHandlerRequestOptions<TRouter extends AnyRouter> =
|
|
12
27
|
FetchHandlerOptions<TRouter> & {
|
|
@@ -14,6 +29,13 @@ export type FetchHandlerRequestOptions<TRouter extends AnyRouter> =
|
|
|
14
29
|
endpoint: string;
|
|
15
30
|
};
|
|
16
31
|
|
|
32
|
+
const trimSlashes = (path: string): string => {
|
|
33
|
+
path = path.startsWith('/') ? path.slice(1) : path;
|
|
34
|
+
path = path.endsWith('/') ? path.slice(0, -1) : path;
|
|
35
|
+
|
|
36
|
+
return path;
|
|
37
|
+
};
|
|
38
|
+
|
|
17
39
|
export async function fetchRequestHandler<TRouter extends AnyRouter>(
|
|
18
40
|
opts: FetchHandlerRequestOptions<TRouter>,
|
|
19
41
|
): Promise<Response> {
|
|
@@ -25,8 +47,12 @@ export async function fetchRequestHandler<TRouter extends AnyRouter>(
|
|
|
25
47
|
return opts.createContext?.({ req: opts.req, resHeaders, ...innerOpts });
|
|
26
48
|
};
|
|
27
49
|
|
|
28
|
-
const url =
|
|
29
|
-
|
|
50
|
+
const url = toURL(opts.req.url);
|
|
51
|
+
|
|
52
|
+
const pathname = trimSlashes(url.pathname);
|
|
53
|
+
const endpoint = trimSlashes(opts.endpoint);
|
|
54
|
+
const path = trimSlashes(pathname.slice(endpoint.length));
|
|
55
|
+
|
|
30
56
|
const req: HTTPRequest = {
|
|
31
57
|
query: url.searchParams,
|
|
32
58
|
method: opts.req.method,
|
|
@@ -92,12 +118,10 @@ export async function fetchRequestHandler<TRouter extends AnyRouter>(
|
|
|
92
118
|
};
|
|
93
119
|
|
|
94
120
|
resolveHTTPResponse({
|
|
121
|
+
...opts,
|
|
95
122
|
req,
|
|
96
123
|
createContext,
|
|
97
124
|
path,
|
|
98
|
-
router: opts.router,
|
|
99
|
-
batching: opts.batching,
|
|
100
|
-
responseMeta: opts.responseMeta,
|
|
101
125
|
onError(o) {
|
|
102
126
|
opts?.onError?.({ ...o, req: opts.req });
|
|
103
127
|
},
|
|
@@ -1,5 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* If you're making an adapter for tRPC and looking at this file for reference, you should import types and functions from `@trpc/server` and `@trpc/server/http`
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* import type { AnyTRPCRouter } from '@trpc/server'
|
|
7
|
+
* import type { HTTPBaseHandlerOptions } from '@trpc/server/http'
|
|
8
|
+
* ```
|
|
9
|
+
*/
|
|
10
|
+
// @trpc/server
|
|
11
|
+
import type { AnyRouter, inferRouterContext } from '../../@trpc/server';
|
|
12
|
+
// @trpc/server/http
|
|
13
|
+
import type {
|
|
14
|
+
HTTPBaseHandlerOptions,
|
|
15
|
+
TRPCRequestInfo,
|
|
16
|
+
} from '../../@trpc/server/http';
|
|
3
17
|
|
|
4
18
|
export type FetchCreateContextFnOptions = {
|
|
5
19
|
req: Request;
|
|
@@ -15,13 +29,13 @@ export type FetchCreateContextOption<TRouter extends AnyRouter> =
|
|
|
15
29
|
unknown extends inferRouterContext<TRouter>
|
|
16
30
|
? {
|
|
17
31
|
/**
|
|
18
|
-
* @link https://trpc.io/docs/context
|
|
32
|
+
* @link https://trpc.io/docs/v11/context
|
|
19
33
|
**/
|
|
20
34
|
createContext?: FetchCreateContextFn<TRouter>;
|
|
21
35
|
}
|
|
22
36
|
: {
|
|
23
37
|
/**
|
|
24
|
-
* @link https://trpc.io/docs/context
|
|
38
|
+
* @link https://trpc.io/docs/v11/context
|
|
25
39
|
**/
|
|
26
40
|
createContext: FetchCreateContextFn<TRouter>;
|
|
27
41
|
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
2
|
+
function set(
|
|
3
|
+
obj: Record<string, any>,
|
|
4
|
+
path: string[] | string,
|
|
5
|
+
value: unknown,
|
|
6
|
+
): void {
|
|
7
|
+
if (typeof path === 'string') {
|
|
8
|
+
path = path.split(/[\.\[\]]/).filter(Boolean);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
if (path.length > 1) {
|
|
12
|
+
const p = path.shift()!;
|
|
13
|
+
const isArrayIndex = /^\d+$/.test(path[0]!);
|
|
14
|
+
obj[p] = obj[p] || (isArrayIndex ? [] : {});
|
|
15
|
+
set(obj[p], path, value);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const p = path[0]!;
|
|
19
|
+
if (obj[p] === undefined) {
|
|
20
|
+
obj[p] = value;
|
|
21
|
+
} else if (Array.isArray(obj[p])) {
|
|
22
|
+
obj[p].push(value);
|
|
23
|
+
} else {
|
|
24
|
+
obj[p] = [obj[p], value];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function formDataToObject(formData: FormData) {
|
|
29
|
+
const obj: Record<string, unknown> = {};
|
|
30
|
+
|
|
31
|
+
for (const [key, value] of formData.entries()) {
|
|
32
|
+
set(obj, key, value);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return obj;
|
|
36
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { getTRPCErrorFromUnknown, TRPCError } from '../../@trpc/server';
|
|
2
|
+
// FIXME: fix lint rule, this is ok
|
|
3
|
+
// eslint-disable-next-line no-restricted-imports
|
|
4
|
+
import type { ErrorHandlerOptions } from '../../unstable-core-do-not-import/procedure';
|
|
5
|
+
// FIXME: fix lint rule, this is ok
|
|
6
|
+
// eslint-disable-next-line no-restricted-imports
|
|
7
|
+
import type { CallerOverride } from '../../unstable-core-do-not-import/procedureBuilder';
|
|
8
|
+
// FIXME: fix lint rule, this is ok
|
|
9
|
+
// eslint-disable-next-line no-restricted-imports
|
|
10
|
+
import type {
|
|
11
|
+
MaybePromise,
|
|
12
|
+
Simplify,
|
|
13
|
+
} from '../../unstable-core-do-not-import/types';
|
|
14
|
+
import { formDataToObject } from './formDataToObject';
|
|
15
|
+
import { TRPCRedirectError } from './redirect';
|
|
16
|
+
import { rethrowNextErrors } from './rethrowNextErrors';
|
|
17
|
+
|
|
18
|
+
type ContextCallback<TContext> = object extends TContext
|
|
19
|
+
? {
|
|
20
|
+
createContext?: () => MaybePromise<TContext>;
|
|
21
|
+
}
|
|
22
|
+
: {
|
|
23
|
+
createContext: () => MaybePromise<TContext>;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Create a caller that works with Next.js React Server Components & Server Actions
|
|
28
|
+
*/
|
|
29
|
+
export function nextAppDirCaller<TContext>(
|
|
30
|
+
config: Simplify<
|
|
31
|
+
{
|
|
32
|
+
/**
|
|
33
|
+
* Transform form data to a `Record` before passing it to the procedure
|
|
34
|
+
* @default true
|
|
35
|
+
*/
|
|
36
|
+
normalizeFormData?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Called when an error occurs in the handler
|
|
39
|
+
*/
|
|
40
|
+
onError?: (opts: ErrorHandlerOptions<TContext>) => void;
|
|
41
|
+
} & ContextCallback<TContext>
|
|
42
|
+
>,
|
|
43
|
+
): CallerOverride<TContext> {
|
|
44
|
+
const {
|
|
45
|
+
normalizeFormData = true,
|
|
46
|
+
|
|
47
|
+
// rethrowNextErrors = true
|
|
48
|
+
} = config;
|
|
49
|
+
const createContext = async (): Promise<TContext> => {
|
|
50
|
+
return config?.createContext?.() ?? ({} as TContext);
|
|
51
|
+
};
|
|
52
|
+
return async (opts) => {
|
|
53
|
+
const ctx: TContext = await createContext().catch((cause) => {
|
|
54
|
+
const error = new TRPCError({
|
|
55
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
56
|
+
message: 'Failed to create context',
|
|
57
|
+
cause,
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
throw error;
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
const handleError = (cause: unknown) => {
|
|
64
|
+
const error = getTRPCErrorFromUnknown(cause);
|
|
65
|
+
|
|
66
|
+
config.onError?.({
|
|
67
|
+
ctx,
|
|
68
|
+
error,
|
|
69
|
+
input: opts.args[0],
|
|
70
|
+
path: '',
|
|
71
|
+
type: opts._def.type,
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
rethrowNextErrors(error);
|
|
75
|
+
|
|
76
|
+
throw error;
|
|
77
|
+
};
|
|
78
|
+
switch (opts._def.type) {
|
|
79
|
+
case 'mutation': {
|
|
80
|
+
/**
|
|
81
|
+
* When you wrap an action with useFormState, it gets an extra argument as its first argument.
|
|
82
|
+
* The submitted form data is therefore its second argument instead of its first as it would usually be.
|
|
83
|
+
* The new first argument that gets added is the current state of the form.
|
|
84
|
+
* @see https://react.dev/reference/react-dom/hooks/useFormState#my-action-can-no-longer-read-the-submitted-form-data
|
|
85
|
+
*/
|
|
86
|
+
let input = opts.args.length === 1 ? opts.args[0] : opts.args[1];
|
|
87
|
+
if (normalizeFormData && input instanceof FormData) {
|
|
88
|
+
input = formDataToObject(input);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return await opts
|
|
92
|
+
.invoke({
|
|
93
|
+
type: opts._def.type,
|
|
94
|
+
ctx,
|
|
95
|
+
getRawInput: async () => input,
|
|
96
|
+
path: '',
|
|
97
|
+
input,
|
|
98
|
+
})
|
|
99
|
+
.then((data) => {
|
|
100
|
+
if (data instanceof TRPCRedirectError) throw data;
|
|
101
|
+
return data;
|
|
102
|
+
})
|
|
103
|
+
.catch(handleError);
|
|
104
|
+
}
|
|
105
|
+
case 'query': {
|
|
106
|
+
const input = opts.args[0];
|
|
107
|
+
return await opts
|
|
108
|
+
.invoke({
|
|
109
|
+
type: opts._def.type,
|
|
110
|
+
ctx,
|
|
111
|
+
getRawInput: async () => input,
|
|
112
|
+
path: '',
|
|
113
|
+
input,
|
|
114
|
+
})
|
|
115
|
+
.then((data) => {
|
|
116
|
+
if (data instanceof TRPCRedirectError) throw data;
|
|
117
|
+
return data;
|
|
118
|
+
})
|
|
119
|
+
.catch(handleError);
|
|
120
|
+
}
|
|
121
|
+
default: {
|
|
122
|
+
throw new TRPCError({
|
|
123
|
+
code: 'NOT_IMPLEMENTED',
|
|
124
|
+
message: `Not implemented for type ${opts._def.type}`,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { notFound as __notFound } from 'next/navigation';
|
|
2
|
+
import { TRPCError } from '../../@trpc/server';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Like `next/navigation`'s `notFound()` but throws a `TRPCError` that later will be handled by Next.js
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export const notFound: typeof __notFound = () => {
|
|
9
|
+
throw new TRPCError({
|
|
10
|
+
code: 'NOT_FOUND',
|
|
11
|
+
});
|
|
12
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { RedirectType } from 'next/navigation';
|
|
2
|
+
import { TRPCError } from '../../@trpc/server';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export class TRPCRedirectError extends TRPCError {
|
|
8
|
+
public readonly args;
|
|
9
|
+
constructor(url: URL | string, redirectType?: RedirectType) {
|
|
10
|
+
super({
|
|
11
|
+
// TODO(?): This should maybe a custom error code
|
|
12
|
+
code: 'UNPROCESSABLE_CONTENT',
|
|
13
|
+
message: `Redirect error to "${url}" that will be handled by Next.js`,
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
this.args = [url.toString(), redirectType] as const;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Like `next/navigation`'s `redirect()` but throws a `TRPCError` that later will be handled by Next.js
|
|
22
|
+
* This provides better typesafety than the `next/navigation`'s `redirect()` since the action continues
|
|
23
|
+
* to execute on the frontend even if Next's `redirect()` has a return type of `never`.
|
|
24
|
+
* @public
|
|
25
|
+
* @remark You should only use this if you're also using `nextAppDirCaller`.
|
|
26
|
+
*/
|
|
27
|
+
export const redirect = (url: URL | string, redirectType?: RedirectType) => {
|
|
28
|
+
// We rethrow this internally so the returntype on the client is undefined.
|
|
29
|
+
return new TRPCRedirectError(url, redirectType) as unknown as undefined;
|
|
30
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { isNotFoundError } from 'next/dist/client/components/not-found';
|
|
2
|
+
import { isRedirectError } from 'next/dist/client/components/redirect';
|
|
3
|
+
import {
|
|
4
|
+
notFound as __notFound,
|
|
5
|
+
redirect as __redirect,
|
|
6
|
+
} from 'next/navigation';
|
|
7
|
+
import type { TRPCError } from '../../@trpc/server';
|
|
8
|
+
import { TRPCRedirectError } from './redirect';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Rethrow errors that should be handled by Next.js
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
export const rethrowNextErrors = (error: TRPCError) => {
|
|
15
|
+
if (error.code === 'NOT_FOUND') {
|
|
16
|
+
__notFound();
|
|
17
|
+
}
|
|
18
|
+
if (error instanceof TRPCRedirectError) {
|
|
19
|
+
__redirect(...error.args);
|
|
20
|
+
}
|
|
21
|
+
const { cause } = error;
|
|
22
|
+
if (isRedirectError(cause) || isNotFoundError(cause)) {
|
|
23
|
+
throw error.cause;
|
|
24
|
+
}
|
|
25
|
+
};
|
package/src/adapters/next.ts
CHANGED
|
@@ -1,32 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* If you're making an adapter for tRPC and looking at this file for reference, you should import types and functions from `@trpc/server` and `@trpc/server/http`
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* import type { AnyTRPCRouter } from '@trpc/server'
|
|
7
|
+
* import type { HTTPBaseHandlerOptions } from '@trpc/server/http'
|
|
8
|
+
* ```
|
|
9
|
+
*/
|
|
10
|
+
import type { NextApiHandler, NextApiRequest, NextApiResponse } from 'next';
|
|
11
|
+
// @trpc/server
|
|
12
|
+
import type { AnyRouter } from '../@trpc/server';
|
|
13
|
+
// @trpc/server
|
|
14
|
+
import { getErrorShape, TRPCError } from '../@trpc/server';
|
|
1
15
|
import type {
|
|
2
|
-
NextApiHandler,
|
|
3
|
-
NextApiRequest,
|
|
4
|
-
NextApiResponse,
|
|
5
|
-
} from 'next/types';
|
|
6
|
-
import { AnyRouter } from '../core';
|
|
7
|
-
import { TRPCError } from '../error/TRPCError';
|
|
8
|
-
import { getErrorShape } from '../shared/getErrorShape';
|
|
9
|
-
import {
|
|
10
16
|
NodeHTTPCreateContextFnOptions,
|
|
11
17
|
NodeHTTPHandlerOptions,
|
|
12
|
-
nodeHTTPRequestHandler,
|
|
13
18
|
} from './node-http';
|
|
19
|
+
import { nodeHTTPRequestHandler } from './node-http';
|
|
14
20
|
|
|
15
21
|
export type CreateNextContextOptions = NodeHTTPCreateContextFnOptions<
|
|
16
22
|
NextApiRequest,
|
|
17
23
|
NextApiResponse
|
|
18
24
|
>;
|
|
19
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Preventing "TypeScript where it's tough not to get "The inferred type of 'xxxx' cannot be named without a reference to [...]"
|
|
28
|
+
*/
|
|
29
|
+
export type { NextApiHandler, NextApiRequest, NextApiResponse } from 'next';
|
|
30
|
+
|
|
20
31
|
export function createNextApiHandler<TRouter extends AnyRouter>(
|
|
21
32
|
opts: NodeHTTPHandlerOptions<TRouter, NextApiRequest, NextApiResponse>,
|
|
22
33
|
): NextApiHandler {
|
|
23
34
|
return async (req, res) => {
|
|
24
35
|
function getPath(): string | null {
|
|
25
|
-
if (typeof req.query
|
|
26
|
-
return req.query
|
|
36
|
+
if (typeof req.query['trpc'] === 'string') {
|
|
37
|
+
return req.query['trpc'];
|
|
27
38
|
}
|
|
28
|
-
if (Array.isArray(req.query
|
|
29
|
-
return req.query
|
|
39
|
+
if (Array.isArray(req.query['trpc'])) {
|
|
40
|
+
return req.query['trpc'].join('/');
|
|
30
41
|
}
|
|
31
42
|
return null;
|
|
32
43
|
}
|
|
@@ -54,7 +65,12 @@ export function createNextApiHandler<TRouter extends AnyRouter>(
|
|
|
54
65
|
}
|
|
55
66
|
|
|
56
67
|
await nodeHTTPRequestHandler({
|
|
57
|
-
|
|
68
|
+
// FIXME: no typecasting should be needed here
|
|
69
|
+
...(opts as NodeHTTPHandlerOptions<
|
|
70
|
+
AnyRouter,
|
|
71
|
+
NextApiRequest,
|
|
72
|
+
NextApiResponse
|
|
73
|
+
>),
|
|
58
74
|
req,
|
|
59
75
|
res,
|
|
60
76
|
path,
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
* @
|
|
11
|
+
* @link https://github.com/remix-run/remix/blob/0bcb4a304dd2f08f6032c3bf0c3aa7eb5b976901/packages/remix-node/upload/fileUploadHandler.ts
|
|
12
12
|
*/
|
|
13
13
|
import { randomBytes } from 'node:crypto';
|
|
14
14
|
import { createReadStream, createWriteStream, statSync } from 'node:fs';
|
|
@@ -18,7 +18,8 @@ import { basename, dirname, extname, resolve as resolvePath } from 'node:path';
|
|
|
18
18
|
import { finished, Readable } from 'node:stream';
|
|
19
19
|
import { promisify } from 'node:util';
|
|
20
20
|
import { streamSlice } from './streamSlice';
|
|
21
|
-
import {
|
|
21
|
+
import type { UploadHandler } from './uploadHandler';
|
|
22
|
+
import { MaxPartSizeExceededError } from './uploadHandler';
|
|
22
23
|
|
|
23
24
|
export async function readableStreamToString(
|
|
24
25
|
stream: ReadableStream<Uint8Array>,
|
|
@@ -183,6 +184,12 @@ export function createFileUploadHandler({
|
|
|
183
184
|
return new NodeOnDiskFile(filepath, contentType);
|
|
184
185
|
};
|
|
185
186
|
}
|
|
187
|
+
type NodeJSReadableStreamEsque = {
|
|
188
|
+
on(
|
|
189
|
+
eventName: string | symbol,
|
|
190
|
+
listener: (...args: any[]) => void,
|
|
191
|
+
): NodeJSReadableStreamEsque;
|
|
192
|
+
};
|
|
186
193
|
|
|
187
194
|
export class NodeOnDiskFile {
|
|
188
195
|
name: string;
|
|
@@ -245,8 +252,8 @@ export class NodeOnDiskFile {
|
|
|
245
252
|
}
|
|
246
253
|
|
|
247
254
|
stream(): ReadableStream<any>;
|
|
248
|
-
stream():
|
|
249
|
-
stream():
|
|
255
|
+
stream(): NodeJSReadableStreamEsque;
|
|
256
|
+
stream(): NodeJSReadableStreamEsque | ReadableStream<any> {
|
|
250
257
|
let stream: Readable = createReadStream(this.filepath);
|
|
251
258
|
if (this.slicer) {
|
|
252
259
|
stream = stream.pipe(streamSlice(this.slicer.start, this.slicer.end));
|
|
@@ -6,20 +6,19 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* @
|
|
9
|
+
* @link https://github.com/remix-run/remix/blob/0bcb4a304dd2f08f6032c3bf0c3aa7eb5b976901/packages/remix-server-runtime/formData.ts
|
|
10
10
|
*/
|
|
11
11
|
import * as fs from 'fs/promises';
|
|
12
12
|
import { Readable } from 'node:stream';
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
14
|
+
// @ts-ignore the type definitions for this package are borked
|
|
13
15
|
import { streamMultipart } from '@web3-storage/multipart-parser';
|
|
14
|
-
|
|
16
|
+
// @trpc/server
|
|
15
17
|
import { createNodeHTTPContentTypeHandler } from '../../internals/contentType';
|
|
16
|
-
import { NodeHTTPRequest } from '../../types';
|
|
18
|
+
import type { NodeHTTPRequest } from '../../types';
|
|
17
19
|
import { NodeOnDiskFile } from './fileUploadHandler';
|
|
18
|
-
import {
|
|
19
|
-
|
|
20
|
-
UploadHandler,
|
|
21
|
-
UploadHandlerPart,
|
|
22
|
-
} from './uploadHandler';
|
|
20
|
+
import type { UploadHandler, UploadHandlerPart } from './uploadHandler';
|
|
21
|
+
import { MaxBodySizeExceededError } from './uploadHandler';
|
|
23
22
|
|
|
24
23
|
const utfTextDecoder = new TextDecoder('utf-8');
|
|
25
24
|
|
|
@@ -31,7 +30,7 @@ const utfTextDecoder = new TextDecoder('utf-8');
|
|
|
31
30
|
* @param uploadHandler A function that handles file uploads and returns a value to be used in the request body. If uploaded to disk, the returned value is a NodeOnDiskFile. If uploaded to memory, the returned value is a File.
|
|
32
31
|
* @param maxBodySize The maximum size of the request body in bytes. Defaults to Infinity.
|
|
33
32
|
*
|
|
34
|
-
* @
|
|
33
|
+
* @link https://remix.run/utils/parse-multipart-form-data
|
|
35
34
|
*/
|
|
36
35
|
async function parseMultipartFormData(
|
|
37
36
|
request: NodeHTTPRequest,
|
|
@@ -136,8 +135,7 @@ export const nodeHTTPFormDataContentTypeHandler =
|
|
|
136
135
|
0: undefined,
|
|
137
136
|
};
|
|
138
137
|
}
|
|
139
|
-
const transformer = opts.router._def._config
|
|
140
|
-
.transformer as CombinedDataTransformer;
|
|
138
|
+
const transformer = opts.router._def._config.transformer;
|
|
141
139
|
|
|
142
140
|
const deserializedInput = transformer.input.deserialize(
|
|
143
141
|
JSON.parse(unparsedInput),
|
|
@@ -148,16 +146,18 @@ export const nodeHTTPFormDataContentTypeHandler =
|
|
|
148
146
|
},
|
|
149
147
|
});
|
|
150
148
|
|
|
151
|
-
export { parseMultipartFormData as experimental_parseMultipartFormData };
|
|
152
|
-
export { createMemoryUploadHandler as experimental_createMemoryUploadHandler } from './memoryUploadHandler';
|
|
153
149
|
export {
|
|
154
|
-
createFileUploadHandler as experimental_createFileUploadHandler,
|
|
155
150
|
NodeOnDiskFile as experimental_NodeOnDiskFile,
|
|
151
|
+
createFileUploadHandler as experimental_createFileUploadHandler,
|
|
156
152
|
} from './fileUploadHandler';
|
|
153
|
+
export { createMemoryUploadHandler as experimental_createMemoryUploadHandler } from './memoryUploadHandler';
|
|
157
154
|
export {
|
|
158
|
-
composeUploadHandlers as experimental_composeUploadHandlers,
|
|
159
|
-
MaxPartSizeExceededError,
|
|
160
155
|
MaxBodySizeExceededError,
|
|
156
|
+
MaxPartSizeExceededError,
|
|
157
|
+
composeUploadHandlers as experimental_composeUploadHandlers,
|
|
158
|
+
type UploadHandler,
|
|
161
159
|
} from './uploadHandler';
|
|
162
|
-
export {
|
|
163
|
-
|
|
160
|
+
export {
|
|
161
|
+
isMultipartFormDataRequest as experimental_isMultipartFormDataRequest,
|
|
162
|
+
parseMultipartFormData as experimental_parseMultipartFormData,
|
|
163
|
+
};
|
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* @
|
|
9
|
+
* @link https://github.com/remix-run/remix/blob/0bcb4a304dd2f08f6032c3bf0c3aa7eb5b976901/packages/remix-server-runtime/upload/memoryUploadHandler.ts
|
|
10
10
|
*/
|
|
11
|
-
import {
|
|
11
|
+
import type { UploadHandler } from './uploadHandler';
|
|
12
|
+
import { MaxPartSizeExceededError } from './uploadHandler';
|
|
12
13
|
|
|
13
14
|
export type MemoryUploadHandlerFilterArgs = {
|
|
14
15
|
filename?: string;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { TransformCallback } from 'node:stream';
|
|
2
|
+
import { Transform } from 'node:stream';
|
|
2
3
|
|
|
3
4
|
class SliceStream extends Transform {
|
|
4
5
|
private indexOffset = 0;
|
|
@@ -9,7 +10,11 @@ class SliceStream extends Transform {
|
|
|
9
10
|
super();
|
|
10
11
|
}
|
|
11
12
|
|
|
12
|
-
_transform(
|
|
13
|
+
override _transform(
|
|
14
|
+
chunk: any,
|
|
15
|
+
_: BufferEncoding,
|
|
16
|
+
done: TransformCallback,
|
|
17
|
+
): void {
|
|
13
18
|
this.indexOffset += chunk.length;
|
|
14
19
|
|
|
15
20
|
if (!this.emitUp && this.indexOffset >= this.startIndex) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { NodeOnDiskFile } from './fileUploadHandler';
|
|
1
|
+
import type { NodeOnDiskFile } from './fileUploadHandler';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @
|
|
4
|
+
* @link https://github.com/remix-run/remix/blob/0bcb4a304dd2f08f6032c3bf0c3aa7eb5b976901/packages/remix-server-runtime/formData.ts
|
|
5
5
|
*/
|
|
6
6
|
export type UploadHandlerPart = {
|
|
7
7
|
name: string;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
// @trpc/server
|
|
2
|
+
import { TRPCError } from '../../../../@trpc/server';
|
|
3
|
+
import type { BodyResult } from '../../../../@trpc/server/http';
|
|
4
|
+
import type { NodeHTTPRequest } from '../../types';
|
|
4
5
|
|
|
5
6
|
export async function getPostBody(opts: {
|
|
6
7
|
req: NodeHTTPRequest;
|
|
@@ -8,6 +9,22 @@ export async function getPostBody(opts: {
|
|
|
8
9
|
}): Promise<BodyResult> {
|
|
9
10
|
const { req, maxBodySize = Infinity } = opts;
|
|
10
11
|
return new Promise((resolve) => {
|
|
12
|
+
if (
|
|
13
|
+
!req.headers['content-type']?.startsWith('application/json') &&
|
|
14
|
+
(!req.method ||
|
|
15
|
+
(req.method !== 'GET' &&
|
|
16
|
+
req.method !== 'OPTIONS' &&
|
|
17
|
+
req.method !== 'HEAD'))
|
|
18
|
+
) {
|
|
19
|
+
resolve({
|
|
20
|
+
ok: false,
|
|
21
|
+
error: new TRPCError({
|
|
22
|
+
code: 'UNSUPPORTED_MEDIA_TYPE',
|
|
23
|
+
message: 'Invalid Content-Type header (expected application/json)',
|
|
24
|
+
}),
|
|
25
|
+
});
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
11
28
|
if ('body' in req) {
|
|
12
29
|
resolve({
|
|
13
30
|
ok: true,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getJsonContentTypeInputs } from '
|
|
1
|
+
import { getJsonContentTypeInputs } from '../../../../@trpc/server/http';
|
|
2
2
|
import { createNodeHTTPContentTypeHandler } from '../../internals/contentType';
|
|
3
3
|
import { getPostBody } from './getPostBody';
|
|
4
4
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
// @trpc/server
|
|
2
|
+
import type { AnyRouter } from '../../../@trpc/server';
|
|
3
|
+
// @trpc/server/http
|
|
4
|
+
import type { BaseContentTypeHandler } from '../../../@trpc/server/http';
|
|
5
|
+
import type {
|
|
4
6
|
NodeHTTPRequest,
|
|
5
7
|
NodeHTTPRequestHandlerOptions,
|
|
6
8
|
NodeHTTPResponse,
|