@trpc/server 10.0.0-alpha.23 → 10.0.0-alpha.26

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 (196) hide show
  1. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.d.ts +1 -1
  2. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.dev.js +100 -20
  3. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.prod.js +100 -20
  4. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.esm.js +99 -19
  5. package/adapters/aws-lambda/index.d.ts +1 -0
  6. package/adapters/aws-lambda/index.js +1 -0
  7. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.d.ts +1 -0
  8. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.dev.js +25 -0
  9. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.js +7 -0
  10. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.prod.js +25 -0
  11. package/adapters/lambda/dist/trpc-server-adapters-lambda.esm.js +21 -0
  12. package/dist/TRPCError.d.ts.map +1 -1
  13. package/dist/adapters/aws-lambda/index.d.ts +14 -0
  14. package/dist/adapters/aws-lambda/index.d.ts.map +1 -0
  15. package/dist/adapters/aws-lambda/utils.d.ts +34 -0
  16. package/dist/adapters/aws-lambda/utils.d.ts.map +1 -0
  17. package/dist/adapters/express.d.ts +1 -1
  18. package/dist/adapters/express.d.ts.map +1 -1
  19. package/dist/adapters/express.js +4 -4
  20. package/dist/adapters/express.mjs +4 -4
  21. package/dist/adapters/fastify/fastifyRequestHandler.d.ts +1 -1
  22. package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
  23. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +1 -1
  24. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -1
  25. package/dist/adapters/fastify/index.js +3 -3
  26. package/dist/adapters/fastify/index.mjs +3 -3
  27. package/dist/adapters/fetch/fetchRequestHandler.d.ts +1 -1
  28. package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -1
  29. package/dist/adapters/fetch/index.js +3 -3
  30. package/dist/adapters/fetch/index.mjs +3 -3
  31. package/dist/adapters/fetch/types.d.ts +1 -1
  32. package/dist/adapters/fetch/types.d.ts.map +1 -1
  33. package/dist/adapters/lambda/index.d.ts +12 -0
  34. package/dist/adapters/lambda/index.d.ts.map +1 -0
  35. package/dist/adapters/next.d.ts +1 -1
  36. package/dist/adapters/next.d.ts.map +1 -1
  37. package/dist/adapters/next.js +4 -4
  38. package/dist/adapters/next.mjs +4 -4
  39. package/dist/adapters/node-http/index.js +4 -4
  40. package/dist/adapters/node-http/index.mjs +4 -4
  41. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts +1 -1
  42. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
  43. package/dist/adapters/node-http/types.d.ts +3 -3
  44. package/dist/adapters/node-http/types.d.ts.map +1 -1
  45. package/dist/adapters/standalone.d.ts +2 -2
  46. package/dist/adapters/standalone.d.ts.map +1 -1
  47. package/dist/adapters/standalone.js +4 -4
  48. package/dist/adapters/standalone.mjs +4 -4
  49. package/dist/adapters/ws.d.ts +3 -2
  50. package/dist/adapters/ws.d.ts.map +1 -1
  51. package/dist/adapters/ws.js +3 -8
  52. package/dist/adapters/ws.mjs +3 -8
  53. package/dist/core/index.d.ts +5 -0
  54. package/dist/core/index.d.ts.map +1 -0
  55. package/dist/core/initTRPC.d.ts +82 -0
  56. package/dist/core/initTRPC.d.ts.map +1 -0
  57. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts +202 -0
  58. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts.map +1 -0
  59. package/dist/core/internals/config.d.ts +38 -0
  60. package/dist/core/internals/config.d.ts.map +1 -0
  61. package/dist/core/internals/getParseFn.d.ts +9 -0
  62. package/dist/core/internals/getParseFn.d.ts.map +1 -0
  63. package/dist/core/internals/internalProcedure.d.ts +61 -0
  64. package/dist/core/internals/internalProcedure.d.ts.map +1 -0
  65. package/dist/core/internals/mergeRouters.d.ts +3 -0
  66. package/dist/core/internals/mergeRouters.d.ts.map +1 -0
  67. package/dist/core/internals/mergeWithoutOverrides.d.ts +5 -0
  68. package/dist/core/internals/mergeWithoutOverrides.d.ts.map +1 -0
  69. package/dist/core/internals/omitPrototype.d.ts +6 -0
  70. package/dist/core/internals/omitPrototype.d.ts.map +1 -0
  71. package/dist/core/internals/procedureBuilder.d.ts +71 -0
  72. package/dist/core/internals/procedureBuilder.d.ts.map +1 -0
  73. package/dist/core/internals/utils.d.ts +44 -0
  74. package/dist/core/internals/utils.d.ts.map +1 -0
  75. package/dist/core/middleware.d.ts +78 -0
  76. package/dist/core/middleware.d.ts.map +1 -0
  77. package/dist/core/parser.d.ts +25 -0
  78. package/dist/core/parser.d.ts.map +1 -0
  79. package/dist/core/procedure.d.ts +57 -0
  80. package/dist/core/procedure.d.ts.map +1 -0
  81. package/dist/core/router.d.ts +110 -0
  82. package/dist/core/router.d.ts.map +1 -0
  83. package/dist/core/types.d.ts +17 -0
  84. package/dist/core/types.d.ts.map +1 -0
  85. package/dist/{internals → deprecated/internals}/callProcedure.d.ts +4 -1
  86. package/dist/deprecated/internals/callProcedure.d.ts.map +1 -0
  87. package/dist/{internals → deprecated/internals}/middlewares.d.ts +16 -1
  88. package/dist/deprecated/internals/middlewares.d.ts.map +1 -0
  89. package/dist/{internals → deprecated/internals}/procedure.d.ts +10 -1
  90. package/dist/deprecated/internals/procedure.d.ts.map +1 -0
  91. package/dist/deprecated/interop.d.ts +34 -0
  92. package/dist/deprecated/interop.d.ts.map +1 -0
  93. package/dist/{router.d.ts → deprecated/router.d.ts} +27 -6
  94. package/dist/deprecated/router.d.ts.map +1 -0
  95. package/dist/{envelopes-1deb2fa7.mjs → envelopes-af8c2959.mjs} +12 -1
  96. package/dist/{envelopes-a953b930.js → envelopes-b6dd0367.js} +11 -1
  97. package/dist/error/TRPCError.d.ts +11 -0
  98. package/dist/error/TRPCError.d.ts.map +1 -0
  99. package/dist/error/formatter.d.ts +33 -0
  100. package/dist/error/formatter.d.ts.map +1 -0
  101. package/dist/error/utils.d.ts +5 -0
  102. package/dist/error/utils.d.ts.map +1 -0
  103. package/dist/http/index.d.ts +1 -1
  104. package/dist/http/index.d.ts.map +1 -1
  105. package/dist/http/internals/types.d.ts +9 -7
  106. package/dist/http/internals/types.d.ts.map +1 -1
  107. package/dist/http/resolveHTTPResponse.d.ts +1 -1
  108. package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
  109. package/dist/http/{responseMeta.d.ts → types.d.ts} +1 -1
  110. package/dist/http/types.d.ts.map +1 -0
  111. package/dist/index.d.ts +2 -1
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/index.js +686 -12
  114. package/dist/index.mjs +688 -16
  115. package/dist/internals/transformTRPCResponse.d.ts +1 -1
  116. package/dist/internals/transformTRPCResponse.d.ts.map +1 -1
  117. package/dist/internals/types.d.ts +23 -0
  118. package/dist/internals/types.d.ts.map +1 -0
  119. package/dist/{nodeHTTPRequestHandler-1cdb6383.mjs → nodeHTTPRequestHandler-5ad62229.mjs} +1 -1
  120. package/dist/{nodeHTTPRequestHandler-848f07b5.js → nodeHTTPRequestHandler-9ddd18f2.js} +1 -1
  121. package/dist/{resolveHTTPResponse-ec3dccaa.js → resolveHTTPResponse-5932d785.js} +16 -10
  122. package/dist/{resolveHTTPResponse-54a79e6c.mjs → resolveHTTPResponse-ccb9cfa1.mjs} +15 -9
  123. package/dist/rpc/envelopes.d.ts +1 -1
  124. package/dist/rpc/envelopes.d.ts.map +1 -1
  125. package/dist/rpc/index.js +1 -1
  126. package/dist/rpc/index.mjs +1 -1
  127. package/dist/rpc/internals/invert.d.ts +18 -0
  128. package/dist/rpc/internals/invert.d.ts.map +1 -0
  129. package/dist/{transformTRPCResponse-333bed6c.js → transformTRPCResponse-0c261655.js} +0 -27
  130. package/dist/{transformTRPCResponse-e0cba527.mjs → transformTRPCResponse-747b9a68.mjs} +1 -27
  131. package/dist/transformer.d.ts +14 -0
  132. package/dist/transformer.d.ts.map +1 -1
  133. package/dist/types.d.ts +9 -0
  134. package/dist/types.d.ts.map +1 -1
  135. package/package.json +11 -4
  136. package/src/TRPCError.ts +1 -1
  137. package/src/adapters/aws-lambda/index.ts +156 -0
  138. package/src/adapters/aws-lambda/utils.ts +91 -0
  139. package/src/adapters/express.ts +1 -1
  140. package/src/adapters/fastify/fastifyRequestHandler.ts +1 -1
  141. package/src/adapters/fastify/fastifyTRPCPlugin.ts +2 -2
  142. package/src/adapters/fetch/fetchRequestHandler.ts +1 -1
  143. package/src/adapters/fetch/types.ts +1 -1
  144. package/src/adapters/lambda/index.ts +18 -0
  145. package/src/adapters/next.ts +1 -1
  146. package/src/adapters/node-http/nodeHTTPRequestHandler.ts +3 -2
  147. package/src/adapters/node-http/types.ts +5 -3
  148. package/src/adapters/standalone.ts +1 -1
  149. package/src/adapters/ws.ts +5 -10
  150. package/src/core/index.ts +5 -0
  151. package/src/core/initTRPC.ts +90 -0
  152. package/src/core/internals/__generated__/mergeRoutersGeneric.ts +306 -0
  153. package/src/core/internals/config.ts +44 -0
  154. package/src/core/internals/getParseFn.ts +47 -0
  155. package/src/core/internals/internalProcedure.ts +265 -0
  156. package/src/core/internals/mergeRouters.ts +57 -0
  157. package/src/core/internals/mergeWithoutOverrides.ts +19 -0
  158. package/src/core/internals/omitPrototype.ts +9 -0
  159. package/src/core/internals/procedureBuilder.ts +100 -0
  160. package/src/core/internals/utils.ts +64 -0
  161. package/src/core/middleware.ts +93 -0
  162. package/src/core/parser.ts +45 -0
  163. package/src/core/procedure.ts +72 -0
  164. package/src/core/router.ts +313 -0
  165. package/src/core/types.ts +37 -0
  166. package/src/{internals → deprecated/internals}/callProcedure.ts +4 -1
  167. package/src/{internals → deprecated/internals}/middlewares.ts +17 -1
  168. package/src/{internals → deprecated/internals}/procedure.ts +19 -4
  169. package/src/deprecated/interop.ts +169 -0
  170. package/src/{router.ts → deprecated/router.ts} +49 -12
  171. package/src/error/TRPCError.ts +27 -0
  172. package/src/error/formatter.ts +51 -0
  173. package/src/error/utils.ts +49 -0
  174. package/src/http/index.ts +1 -1
  175. package/src/http/internals/types.ts +9 -11
  176. package/src/http/resolveHTTPResponse.ts +6 -11
  177. package/src/http/{responseMeta.ts → types.ts} +0 -0
  178. package/src/index.ts +2 -1
  179. package/src/internals/transformTRPCResponse.ts +1 -1
  180. package/src/internals/types.ts +24 -0
  181. package/src/rpc/codes.ts +1 -1
  182. package/src/rpc/envelopes.ts +1 -1
  183. package/src/rpc/internals/invert.ts +27 -0
  184. package/src/transformer.ts +28 -0
  185. package/src/types.ts +12 -0
  186. package/dist/http/responseMeta.d.ts.map +0 -1
  187. package/dist/internals/baseHandlerOptions.d.ts +0 -13
  188. package/dist/internals/baseHandlerOptions.d.ts.map +0 -1
  189. package/dist/internals/callProcedure.d.ts.map +0 -1
  190. package/dist/internals/middlewares.d.ts.map +0 -1
  191. package/dist/internals/onErrorFunction.d.ts +0 -11
  192. package/dist/internals/onErrorFunction.d.ts.map +0 -1
  193. package/dist/internals/procedure.d.ts.map +0 -1
  194. package/dist/router.d.ts.map +0 -1
  195. package/src/internals/baseHandlerOptions.ts +0 -13
  196. package/src/internals/onErrorFunction.ts +0 -11
@@ -0,0 +1,169 @@
1
+ import { getParseFnOrPassThrough } from '../core/internals/getParseFn';
2
+ import {
3
+ createInputMiddleware,
4
+ createInternalBuilder,
5
+ createOutputMiddleware,
6
+ } from '../core/internals/internalProcedure';
7
+ import { Procedure as NewProcedure } from '../core/procedure';
8
+ import { Router as NewRouter, createRouterFactory } from '../core/router';
9
+ import {
10
+ AnyRouter as AnyOldRouter,
11
+ Router as OldRouter,
12
+ } from '../deprecated/router';
13
+ import { TRPCErrorShape } from '../rpc';
14
+ import { CombinedDataTransformer } from '../transformer';
15
+ import { Procedure as OldProcedure } from './internals/procedure';
16
+ import { ProcedureRecord } from './router';
17
+
18
+ type AnyOldProcedure = OldProcedure<any, any, any, any, any, any, any, any>;
19
+ type MigrateProcedure<TProcedure extends AnyOldProcedure> =
20
+ TProcedure extends OldProcedure<
21
+ infer TInputContext,
22
+ infer TContext,
23
+ infer TMeta,
24
+ infer TInput,
25
+ infer TParsedInput,
26
+ infer TOutput,
27
+ infer _TParsedOutput,
28
+ infer TFinalInput
29
+ >
30
+ ? NewProcedure<{
31
+ _ctx_in: TInputContext;
32
+ _ctx_out: TContext;
33
+ _meta: TMeta;
34
+ _input_in: TInput;
35
+ _input_out: TParsedInput;
36
+ _output_in: TOutput;
37
+ _output_out: TFinalInput;
38
+ }>
39
+ : never;
40
+
41
+ export type MigrateProcedureRecord<T extends ProcedureRecord<any>> = {
42
+ [K in keyof T]: MigrateProcedure<T[K]>;
43
+ };
44
+
45
+ export type MigrateRouter<
46
+ TInputContext,
47
+ TContext,
48
+ TMeta extends Record<string, any>,
49
+ TQueries extends ProcedureRecord<
50
+ TInputContext,
51
+ TContext,
52
+ any,
53
+ any,
54
+ any,
55
+ any,
56
+ any
57
+ >,
58
+ TMutations extends ProcedureRecord<
59
+ TInputContext,
60
+ TContext,
61
+ any,
62
+ any,
63
+ any,
64
+ any,
65
+ any
66
+ >,
67
+ TSubscriptions extends ProcedureRecord<
68
+ TInputContext,
69
+ TContext,
70
+ unknown,
71
+ unknown,
72
+ any,
73
+ unknown,
74
+ unknown
75
+ >,
76
+ TErrorShape extends TRPCErrorShape<number>,
77
+ > = NewRouter<{
78
+ _ctx: TInputContext;
79
+ _errorShape: TErrorShape;
80
+ _meta: TMeta;
81
+ errorFormatter: never;
82
+ mutations: MigrateProcedureRecord<TMutations>;
83
+ queries: MigrateProcedureRecord<TQueries>;
84
+ subscriptions: MigrateProcedureRecord<TSubscriptions>;
85
+ transformer: CombinedDataTransformer;
86
+ }>;
87
+
88
+ export type MigrateOldRouter<TRouter extends AnyOldRouter> =
89
+ TRouter extends OldRouter<
90
+ infer TInputContext,
91
+ infer TContext,
92
+ infer TMeta,
93
+ infer TQueries,
94
+ infer TMutations,
95
+ infer TSubscriptions,
96
+ infer TErrorShape
97
+ >
98
+ ? MigrateRouter<
99
+ TInputContext,
100
+ TContext,
101
+ TMeta,
102
+ TQueries,
103
+ TMutations,
104
+ TSubscriptions,
105
+ TErrorShape
106
+ >
107
+ : never;
108
+
109
+ function migrateProcedure<TProcedure extends AnyOldProcedure>(
110
+ oldProc: TProcedure,
111
+ ): MigrateProcedure<TProcedure> {
112
+ const def = oldProc._def();
113
+
114
+ const inputParser = getParseFnOrPassThrough(def.inputParser);
115
+ const outputParser = getParseFnOrPassThrough(def.outputParser);
116
+
117
+ const inputMiddleware = createInputMiddleware(inputParser);
118
+
119
+ const builder = createInternalBuilder({
120
+ input: def.inputParser,
121
+ middlewares: [
122
+ ...(def.middlewares as any),
123
+ inputMiddleware,
124
+ createOutputMiddleware(outputParser),
125
+ ],
126
+ meta: def.meta,
127
+ output: def.outputParser,
128
+ });
129
+
130
+ const proc = builder.resolve((opts) => def.resolver(opts as any));
131
+
132
+ return proc as any;
133
+ }
134
+ export function migrateRouter<TOldRouter extends AnyOldRouter>(
135
+ oldRouter: TOldRouter,
136
+ ): MigrateOldRouter<TOldRouter> {
137
+ const errorFormatter = oldRouter._def.errorFormatter;
138
+ const transformer = oldRouter._def.transformer;
139
+
140
+ type ProcRecord = Record<string, NewProcedure<any>>;
141
+
142
+ const queries: ProcRecord = {};
143
+ const mutations: ProcRecord = {};
144
+ const subscriptions: ProcRecord = {};
145
+ for (const [name, procedure] of Object.entries(oldRouter._def.queries)) {
146
+ queries[name] = migrateProcedure(procedure as any);
147
+ }
148
+
149
+ for (const [name, procedure] of Object.entries(oldRouter._def.mutations)) {
150
+ mutations[name] = migrateProcedure(procedure as any);
151
+ }
152
+
153
+ for (const [name, procedure] of Object.entries(
154
+ oldRouter._def.subscriptions,
155
+ )) {
156
+ subscriptions[name] = migrateProcedure(procedure as any);
157
+ }
158
+
159
+ const newRouter = createRouterFactory<any>({
160
+ transformer,
161
+ errorFormatter,
162
+ })({
163
+ mutations,
164
+ queries,
165
+ subscriptions,
166
+ });
167
+
168
+ return newRouter as any;
169
+ }
@@ -1,9 +1,21 @@
1
1
  /* eslint-disable @typescript-eslint/ban-types */
2
2
 
3
3
  /* eslint-disable @typescript-eslint/no-explicit-any */
4
- import { TRPCError } from './TRPCError';
5
- import { assertNotBrowser } from './assertNotBrowser';
6
- import { getHTTPStatusCodeFromError } from './http/internals/getHTTPStatusCode';
4
+ import { TRPCError } from '../TRPCError';
5
+ import { assertNotBrowser } from '../assertNotBrowser';
6
+ import { getHTTPStatusCodeFromError } from '../http/internals/getHTTPStatusCode';
7
+ import { Observable, inferObservableValue } from '../observable';
8
+ import {
9
+ TRPCErrorShape,
10
+ TRPC_ERROR_CODES_BY_KEY,
11
+ TRPC_ERROR_CODE_KEY,
12
+ TRPC_ERROR_CODE_NUMBER,
13
+ } from '../rpc';
14
+ import {
15
+ CombinedDataTransformer,
16
+ DataTransformerOptions,
17
+ } from '../transformer';
18
+ import { Prefixer, ThenArg, flatten } from '../types';
7
19
  import { MiddlewareFunction } from './internals/middlewares';
8
20
  import {
9
21
  CreateProcedureOptions,
@@ -15,25 +27,21 @@ import {
15
27
  createProcedure,
16
28
  inferProcedureFromOptions,
17
29
  } from './internals/procedure';
18
- import { Observable, inferObservableValue } from './observable';
19
- import {
20
- TRPCErrorShape,
21
- TRPC_ERROR_CODES_BY_KEY,
22
- TRPC_ERROR_CODE_KEY,
23
- TRPC_ERROR_CODE_NUMBER,
24
- } from './rpc';
25
- import { CombinedDataTransformer, DataTransformerOptions } from './transformer';
26
- import { Prefixer, ThenArg, flatten } from './types';
30
+ import { MigrateRouter, migrateRouter } from './interop';
27
31
 
28
32
  assertNotBrowser();
29
33
 
34
+ export type { Procedure } from './internals/procedure';
35
+
30
36
  /**
31
37
  * @public
38
+ * @deprecated
32
39
  */
33
40
  export type ProcedureType = 'query' | 'mutation' | 'subscription';
34
41
 
35
42
  /**
36
43
  * @internal
44
+ * @deprecated
37
45
  */
38
46
  export type ProcedureRecord<
39
47
  TInputContext = any,
@@ -58,6 +66,7 @@ export type ProcedureRecord<
58
66
 
59
67
  /**
60
68
  * @public
69
+ * @deprecated
61
70
  */
62
71
  export type inferProcedureInput<
63
72
  TProcedure extends Procedure<any, any, any, any, any, any, any>,
@@ -69,12 +78,14 @@ export type inferProcedureInput<
69
78
 
70
79
  /**
71
80
  * @public
81
+ * @deprecated
72
82
  */
73
83
  export type inferAsyncReturnType<TFunction extends (...args: any) => any> =
74
84
  ThenArg<ReturnType<TFunction>>;
75
85
 
76
86
  /**
77
87
  * @public
88
+ * @deprecated
78
89
  */
79
90
  export type inferProcedureOutput<
80
91
  TProcedure extends Procedure<any, any, any, any, any, any, any>,
@@ -83,6 +94,7 @@ export type inferProcedureOutput<
83
94
  /**
84
95
  * @public
85
96
  * @beta
97
+ * @deprecated
86
98
  */
87
99
  export type inferSubscriptionOutput<
88
100
  TRouter extends AnyRouter,
@@ -101,6 +113,7 @@ function getDataTransformer(
101
113
  }
102
114
  /**
103
115
  * @internal
116
+ * @deprecated
104
117
  */
105
118
  export type inferHandlerInput<
106
119
  TProcedure extends Procedure<any, any, any, any, any, any, any>,
@@ -122,6 +135,7 @@ type inferHandlerFn<TProcedures extends ProcedureRecord> = <
122
135
 
123
136
  /**
124
137
  * @internal
138
+ * @deprecated
125
139
  */
126
140
  export type inferRouterContext<TRouter extends AnyRouter> = Parameters<
127
141
  TRouter['createCaller']
@@ -144,6 +158,7 @@ export type inferRouterMeta<TRouter extends AnyRouter> = TRouter extends Router<
144
158
 
145
159
  /**
146
160
  * @public
161
+ * @deprecated
147
162
  */
148
163
  export type AnyRouter<TContext = any> = Router<
149
164
  any,
@@ -157,6 +172,7 @@ export type AnyRouter<TContext = any> = Router<
157
172
 
158
173
  /**
159
174
  * @internal
175
+ * @deprecated
160
176
  */
161
177
  export type inferRouterError<TRouter extends AnyRouter> = ReturnType<
162
178
  TRouter['getErrorShape']
@@ -172,6 +188,7 @@ const PROCEDURE_DEFINITION_MAP: Record<
172
188
 
173
189
  /**
174
190
  * @internal
191
+ * @deprecated
175
192
  */
176
193
  export type ErrorFormatter<TContext, TShape extends TRPCErrorShape<number>> = ({
177
194
  error,
@@ -193,6 +210,7 @@ type DefaultErrorData = {
193
210
 
194
211
  /**
195
212
  * @internal
213
+ * @deprecated
196
214
  */
197
215
  export interface DefaultErrorShape
198
216
  extends TRPCErrorShape<TRPC_ERROR_CODE_NUMBER, DefaultErrorData> {
@@ -262,6 +280,7 @@ type SwapContext<
262
280
 
263
281
  /**
264
282
  * @internal The type signature of this class may change without warning.
283
+ * @deprecated
265
284
  */
266
285
  export class Router<
267
286
  TInputContext,
@@ -852,8 +871,26 @@ export class Router<
852
871
  > {
853
872
  return this as any;
854
873
  }
874
+
875
+ /**
876
+ * Interop mode for v9.x -> v10.x
877
+ */
878
+ public interop(): MigrateRouter<
879
+ TInputContext,
880
+ TContext,
881
+ TMeta,
882
+ TQueries,
883
+ TMutations,
884
+ TSubscriptions,
885
+ TErrorShape
886
+ > {
887
+ return migrateRouter(this);
888
+ }
855
889
  }
856
890
 
891
+ /**
892
+ * @deprecated
893
+ */
857
894
  export function router<TContext, TMeta extends Record<string, any> = {}>() {
858
895
  return new Router<TContext, TContext, TMeta, {}, {}, {}, DefaultErrorShape>();
859
896
  }
@@ -0,0 +1,27 @@
1
+ import { TRPC_ERROR_CODE_KEY } from '../rpc/codes';
2
+ import { getMessageFromUnkownError } from './utils';
3
+
4
+ export class TRPCError extends Error {
5
+ public readonly cause?: Error | undefined;
6
+ public readonly code;
7
+
8
+ constructor(opts: {
9
+ message?: string;
10
+ code: TRPC_ERROR_CODE_KEY;
11
+ cause?: Error;
12
+ }) {
13
+ const cause = opts.cause;
14
+ const code = opts.code;
15
+ const message = opts.message ?? getMessageFromUnkownError(cause, code);
16
+
17
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
18
+ // @ts-ignore https://github.com/tc39/proposal-error-cause
19
+ super(message, { cause });
20
+
21
+ this.code = code;
22
+ this.cause = cause;
23
+ this.name = 'TRPCError';
24
+
25
+ Object.setPrototypeOf(this, new.target.prototype);
26
+ }
27
+ }
@@ -0,0 +1,51 @@
1
+ import { ProcedureType } from '../core';
2
+ import {
3
+ TRPCErrorShape,
4
+ TRPC_ERROR_CODE_KEY,
5
+ TRPC_ERROR_CODE_NUMBER,
6
+ } from '../rpc';
7
+ import { TRPCError } from './TRPCError';
8
+
9
+ /**
10
+ * @internal
11
+ */
12
+ export type ErrorFormatter<TContext, TShape extends TRPCErrorShape<number>> = ({
13
+ error,
14
+ }: {
15
+ error: TRPCError;
16
+ type: ProcedureType | 'unknown';
17
+ path: string | undefined;
18
+ input: unknown;
19
+ ctx: undefined | TContext;
20
+ shape: DefaultErrorShape;
21
+ }) => TShape;
22
+
23
+ export type ErrorFormatterShape<T> = T extends ErrorFormatter<any, infer TShape>
24
+ ? TShape
25
+ : DefaultErrorShape;
26
+ /**
27
+ * @internal
28
+ */
29
+ export type DefaultErrorData = {
30
+ code: TRPC_ERROR_CODE_KEY;
31
+ httpStatus: number;
32
+ path?: string;
33
+ stack?: string;
34
+ };
35
+
36
+ /**
37
+ * @internal
38
+ */
39
+ export interface DefaultErrorShape
40
+ extends TRPCErrorShape<TRPC_ERROR_CODE_NUMBER, DefaultErrorData> {
41
+ message: string;
42
+ code: TRPC_ERROR_CODE_NUMBER;
43
+ }
44
+
45
+ export const defaultFormatter: ErrorFormatter<any, any> = ({
46
+ shape,
47
+ }: {
48
+ shape: DefaultErrorShape;
49
+ }) => {
50
+ return shape;
51
+ };
@@ -0,0 +1,49 @@
1
+ import { TRPCError } from './TRPCError';
2
+
3
+ export function getMessageFromUnkownError(
4
+ err: unknown,
5
+ fallback: string,
6
+ ): string {
7
+ if (typeof err === 'string') {
8
+ return err;
9
+ }
10
+
11
+ if (err instanceof Error && typeof err.message === 'string') {
12
+ return err.message;
13
+ }
14
+ return fallback;
15
+ }
16
+
17
+ export function getErrorFromUnknown(cause: unknown): TRPCError {
18
+ // this should ideally be an `instanceof TRPCError` but for some reason that isn't working
19
+ // ref https://github.com/trpc/trpc/issues/331
20
+ if (cause instanceof Error && cause.name === 'TRPCError') {
21
+ return cause as TRPCError;
22
+ }
23
+
24
+ let errorCause: Error | undefined = undefined;
25
+ let stack: string | undefined = undefined;
26
+
27
+ if (cause instanceof Error) {
28
+ errorCause = cause;
29
+ // take stack trace from cause
30
+ stack = cause.stack;
31
+ }
32
+
33
+ const err = new TRPCError({
34
+ code: 'INTERNAL_SERVER_ERROR',
35
+ cause: errorCause,
36
+ });
37
+
38
+ err.stack = stack;
39
+
40
+ return err;
41
+ }
42
+
43
+ export function getCauseFromUnknown(cause: unknown) {
44
+ if (cause instanceof Error) {
45
+ return cause;
46
+ }
47
+
48
+ return undefined;
49
+ }
package/src/http/index.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { assertNotBrowser } from '../assertNotBrowser';
2
2
 
3
3
  export * from './resolveHTTPResponse';
4
- export * from './responseMeta';
4
+ export * from './types';
5
5
 
6
6
  assertNotBrowser();
@@ -1,14 +1,9 @@
1
1
  import { TRPCError } from '../../TRPCError';
2
- import { BaseHandlerOptions } from '../../internals/baseHandlerOptions';
3
- import {
4
- AnyRouter,
5
- ProcedureType,
6
- inferRouterContext,
7
- inferRouterError,
8
- } from '../../router';
2
+ import { AnyRouter, ProcedureType, inferRouterParams } from '../../core';
3
+ import { BaseHandlerOptions } from '../../internals/types';
9
4
  import { TRPCResponse } from '../../rpc';
10
5
  import { Dict } from '../../types';
11
- import { ResponseMeta } from '../responseMeta';
6
+ import { ResponseMeta } from '../types';
12
7
 
13
8
  export type HTTPHeaders = Dict<string | string[]>;
14
9
 
@@ -25,9 +20,12 @@ export interface HTTPRequest {
25
20
  body: unknown;
26
21
  }
27
22
 
28
- type ResponseMetaFn<TRouter extends AnyRouter> = (opts: {
29
- data: TRPCResponse<unknown, inferRouterError<TRouter>>[];
30
- ctx?: inferRouterContext<TRouter>;
23
+ /**
24
+ * @internal
25
+ */
26
+ export type ResponseMetaFn<TRouter extends AnyRouter> = (opts: {
27
+ data: TRPCResponse<unknown, inferRouterParams<TRouter>['_error']>[];
28
+ ctx?: inferRouterParams<TRouter>['_ctx'];
31
29
  /**
32
30
  * The different tRPC paths requested
33
31
  **/
@@ -1,14 +1,13 @@
1
1
  /* eslint-disable @typescript-eslint/no-non-null-assertion */
2
2
  import { TRPCError } from '../TRPCError';
3
- import { callProcedure } from '../internals/callProcedure';
4
- import { getCauseFromUnknown, getErrorFromUnknown } from '../internals/errors';
5
- import { transformTRPCResponse } from '../internals/transformTRPCResponse';
6
3
  import {
7
4
  AnyRouter,
8
5
  ProcedureType,
9
6
  inferRouterContext,
10
7
  inferRouterError,
11
- } from '../router';
8
+ } from '../core';
9
+ import { getCauseFromUnknown, getErrorFromUnknown } from '../internals/errors';
10
+ import { transformTRPCResponse } from '../internals/transformTRPCResponse';
12
11
  import { TRPCResponse } from '../rpc';
13
12
  import { Maybe } from '../types';
14
13
  import { getHTTPStatusCode } from './internals/getHTTPStatusCode';
@@ -170,14 +169,10 @@ export async function resolveHTTPResponse<
170
169
  const rawResults = await Promise.all(
171
170
  paths.map(async (path, index) => {
172
171
  const input = inputs[index];
172
+
173
173
  try {
174
- const output = await callProcedure({
175
- ctx,
176
- router,
177
- path,
178
- input,
179
- type,
180
- });
174
+ const caller = router.createCaller(ctx);
175
+ const output = await caller[type](path, input as any);
181
176
  return {
182
177
  input,
183
178
  path,
File without changes
package/src/index.ts CHANGED
@@ -3,4 +3,5 @@ export * from './http';
3
3
  export * from './transformer';
4
4
  export * from './TRPCError';
5
5
  export * from './types';
6
- export * from './router';
6
+ export { router } from './deprecated/router';
7
+ export * from './core';
@@ -1,4 +1,4 @@
1
- import { AnyRouter } from '../router';
1
+ import { AnyRouter } from '../core/router';
2
2
  import { TRPCResponse, TRPCResponseMessage } from '../rpc';
3
3
 
4
4
  function transformTRPCResponseItem<
@@ -0,0 +1,24 @@
1
+ import { TRPCError } from '../TRPCError';
2
+ import { inferRouterParams } from '../core';
3
+ import { ProcedureType } from '../core';
4
+ import { AnyRouter } from '../core/router';
5
+
6
+ /**
7
+ * Base interface for any response handler
8
+ */
9
+ export interface BaseHandlerOptions<TRouter extends AnyRouter, TRequest> {
10
+ onError?: OnErrorFunction<TRouter, TRequest>;
11
+ batching?: {
12
+ enabled: boolean;
13
+ };
14
+ router: TRouter;
15
+ }
16
+
17
+ export type OnErrorFunction<TRouter extends AnyRouter, TRequest> = (opts: {
18
+ error: TRPCError;
19
+ type: ProcedureType | 'unknown';
20
+ path: string | undefined;
21
+ req: TRequest;
22
+ input: unknown;
23
+ ctx: undefined | inferRouterParams<TRouter>['_ctx'];
24
+ }) => void;
package/src/rpc/codes.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { invert } from '../internals/invert';
1
+ import { invert } from './internals/invert';
2
2
 
3
3
  // reference: https://www.jsonrpc.org/specification
4
4
 
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable @typescript-eslint/no-namespace */
2
- import { ProcedureType } from '../router';
2
+ import { ProcedureType } from '../deprecated/router';
3
3
  import { TRPC_ERROR_CODE_NUMBER } from './codes';
4
4
 
5
5
  /**
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @internal
3
+ */
4
+ type KeyFromValue<V, T extends Record<PropertyKey, PropertyKey>> = {
5
+ [K in keyof T]: V extends T[K] ? K : never;
6
+ }[keyof T];
7
+
8
+ /**
9
+ * @internal
10
+ */
11
+ type Invert<T extends Record<PropertyKey, PropertyKey>> = {
12
+ [V in T[keyof T]]: KeyFromValue<V, T>;
13
+ };
14
+
15
+ /**
16
+ * @internal
17
+ */
18
+ export function invert<T extends Record<PropertyKey, PropertyKey>>(
19
+ obj: T,
20
+ ): Invert<T> {
21
+ const newObj = Object.create(null) as any;
22
+ for (const key in obj) {
23
+ const v = obj[key];
24
+ newObj[v] = key;
25
+ }
26
+ return newObj;
27
+ }
@@ -35,3 +35,31 @@ export type DataTransformerOptions = DataTransformer | CombinedDataTransformer;
35
35
  export type ClientDataTransformerOptions =
36
36
  | DataTransformer
37
37
  | CombinedDataTransformerClient;
38
+
39
+ /**
40
+ * @internal
41
+ */
42
+ export function getDataTransformer(
43
+ transformer: DataTransformerOptions,
44
+ ): CombinedDataTransformer {
45
+ if ('input' in transformer) {
46
+ return transformer;
47
+ }
48
+ return { input: transformer, output: transformer };
49
+ }
50
+
51
+ /**
52
+ * @internal
53
+ */
54
+ export type DefaultDataTransformer = CombinedDataTransformer & {
55
+ _default: true;
56
+ };
57
+
58
+ /**
59
+ * @internal
60
+ */
61
+ export const defaultTransformer: DefaultDataTransformer = {
62
+ _default: true,
63
+ input: { serialize: (obj) => obj, deserialize: (obj) => obj },
64
+ output: { serialize: (obj) => obj, deserialize: (obj) => obj },
65
+ };
package/src/types.ts CHANGED
@@ -47,9 +47,21 @@ export type ThenArg<T> = T extends PromiseLike<infer U> ? ThenArg<U> : T;
47
47
  */
48
48
  export type Dict<T> = Record<string, T | undefined>;
49
49
 
50
+ /**
51
+ * @public
52
+ */
53
+ export type MaybePromise<T> = T | Promise<T>;
54
+
50
55
  /**
51
56
  * @internal
57
+ *
52
58
  * Creates a "lower-priority" type inference.
53
59
  * https://github.com/microsoft/TypeScript/issues/14829#issuecomment-322267089
54
60
  */
55
61
  export type InferLast<T> = T & { [K in keyof T]: T[K] };
62
+
63
+ /**
64
+ * @public
65
+ */
66
+ export type inferAsyncReturnType<TFunction extends (...args: any) => any> =
67
+ ThenArg<ReturnType<TFunction>>;
@@ -1 +0,0 @@
1
- {"version":3,"file":"responseMeta.d.ts","sourceRoot":"","sources":["../../src/http/responseMeta.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC"}