@trpc/server 10.0.0-alpha.25 → 10.0.0-alpha.28

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 (210) 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-ddec3395.js → TRPCError-9050a68d.js} +0 -0
  13. package/dist/{TRPCError-7971540a.mjs → TRPCError-b7fa0c31.mjs} +0 -0
  14. package/dist/adapters/aws-lambda/index.d.ts +14 -0
  15. package/dist/adapters/aws-lambda/index.d.ts.map +1 -0
  16. package/dist/adapters/aws-lambda/utils.d.ts +34 -0
  17. package/dist/adapters/aws-lambda/utils.d.ts.map +1 -0
  18. package/dist/adapters/express.d.ts +1 -1
  19. package/dist/adapters/express.d.ts.map +1 -1
  20. package/dist/adapters/express.js +5 -5
  21. package/dist/adapters/express.mjs +5 -5
  22. package/dist/adapters/fastify/fastifyRequestHandler.d.ts +1 -1
  23. package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
  24. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +1 -1
  25. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -1
  26. package/dist/adapters/fastify/index.js +4 -4
  27. package/dist/adapters/fastify/index.mjs +4 -4
  28. package/dist/adapters/fetch/fetchRequestHandler.d.ts +1 -1
  29. package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -1
  30. package/dist/adapters/fetch/index.js +4 -4
  31. package/dist/adapters/fetch/index.mjs +4 -4
  32. package/dist/adapters/fetch/types.d.ts +1 -1
  33. package/dist/adapters/fetch/types.d.ts.map +1 -1
  34. package/dist/adapters/lambda/index.d.ts +12 -0
  35. package/dist/adapters/lambda/index.d.ts.map +1 -0
  36. package/dist/adapters/next.d.ts +1 -1
  37. package/dist/adapters/next.d.ts.map +1 -1
  38. package/dist/adapters/next.js +5 -5
  39. package/dist/adapters/next.mjs +5 -5
  40. package/dist/adapters/node-http/index.js +5 -5
  41. package/dist/adapters/node-http/index.mjs +5 -5
  42. package/dist/adapters/node-http/internals/getPostBody.d.ts +1 -1
  43. package/dist/adapters/node-http/internals/getPostBody.d.ts.map +1 -1
  44. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts +1 -1
  45. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
  46. package/dist/adapters/node-http/types.d.ts +3 -2
  47. package/dist/adapters/node-http/types.d.ts.map +1 -1
  48. package/dist/adapters/standalone.d.ts +2 -2
  49. package/dist/adapters/standalone.d.ts.map +1 -1
  50. package/dist/adapters/standalone.js +5 -5
  51. package/dist/adapters/standalone.mjs +5 -5
  52. package/dist/adapters/ws.d.ts +5 -3
  53. package/dist/adapters/ws.d.ts.map +1 -1
  54. package/dist/adapters/ws.js +4 -9
  55. package/dist/adapters/ws.mjs +4 -9
  56. package/dist/core/index.d.ts +5 -0
  57. package/dist/core/index.d.ts.map +1 -0
  58. package/dist/core/initTRPC.d.ts +82 -0
  59. package/dist/core/initTRPC.d.ts.map +1 -0
  60. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts +262 -0
  61. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts.map +1 -0
  62. package/dist/core/internals/config.d.ts +38 -0
  63. package/dist/core/internals/config.d.ts.map +1 -0
  64. package/dist/core/internals/getParseFn.d.ts +9 -0
  65. package/dist/core/internals/getParseFn.d.ts.map +1 -0
  66. package/dist/core/internals/internalProcedure.d.ts +61 -0
  67. package/dist/core/internals/internalProcedure.d.ts.map +1 -0
  68. package/dist/core/internals/mergeRouters.d.ts +3 -0
  69. package/dist/core/internals/mergeRouters.d.ts.map +1 -0
  70. package/dist/core/internals/mergeRoutersGeneric.d.ts +21 -0
  71. package/dist/core/internals/mergeRoutersGeneric.d.ts.map +1 -0
  72. package/dist/core/internals/mergeWithoutOverrides.d.ts +5 -0
  73. package/dist/core/internals/mergeWithoutOverrides.d.ts.map +1 -0
  74. package/dist/core/internals/omitPrototype.d.ts +6 -0
  75. package/dist/core/internals/omitPrototype.d.ts.map +1 -0
  76. package/dist/core/internals/procedureBuilder.d.ts +72 -0
  77. package/dist/core/internals/procedureBuilder.d.ts.map +1 -0
  78. package/dist/core/internals/utils.d.ts +44 -0
  79. package/dist/core/internals/utils.d.ts.map +1 -0
  80. package/dist/core/middleware.d.ts +78 -0
  81. package/dist/core/middleware.d.ts.map +1 -0
  82. package/dist/core/parser.d.ts +25 -0
  83. package/dist/core/parser.d.ts.map +1 -0
  84. package/dist/core/procedure.d.ts +57 -0
  85. package/dist/core/procedure.d.ts.map +1 -0
  86. package/dist/core/router.d.ts +122 -0
  87. package/dist/core/router.d.ts.map +1 -0
  88. package/dist/core/types.d.ts +17 -0
  89. package/dist/core/types.d.ts.map +1 -0
  90. package/dist/{internals → deprecated/internals}/callProcedure.d.ts +4 -1
  91. package/dist/deprecated/internals/callProcedure.d.ts.map +1 -0
  92. package/dist/{internals → deprecated/internals}/middlewares.d.ts +16 -1
  93. package/dist/deprecated/internals/middlewares.d.ts.map +1 -0
  94. package/dist/{internals → deprecated/internals}/procedure.d.ts +10 -1
  95. package/dist/deprecated/internals/procedure.d.ts.map +1 -0
  96. package/dist/deprecated/interop.d.ts +34 -0
  97. package/dist/deprecated/interop.d.ts.map +1 -0
  98. package/dist/{router.d.ts → deprecated/router.d.ts} +26 -5
  99. package/dist/deprecated/router.d.ts.map +1 -0
  100. package/dist/{envelopes-1deb2fa7.mjs → envelopes-af8c2959.mjs} +12 -1
  101. package/dist/{envelopes-a953b930.js → envelopes-b6dd0367.js} +11 -1
  102. package/dist/{TRPCError.d.ts → error/TRPCError.d.ts} +2 -2
  103. package/dist/error/TRPCError.d.ts.map +1 -0
  104. package/dist/error/formatter.d.ts +33 -0
  105. package/dist/error/formatter.d.ts.map +1 -0
  106. package/dist/{internals/errors.d.ts → error/utils.d.ts} +2 -2
  107. package/dist/error/utils.d.ts.map +1 -0
  108. package/dist/http/index.d.ts +1 -1
  109. package/dist/http/index.d.ts.map +1 -1
  110. package/dist/http/internals/getHTTPStatusCode.d.ts +1 -1
  111. package/dist/http/internals/getHTTPStatusCode.d.ts.map +1 -1
  112. package/dist/http/internals/types.d.ts +10 -8
  113. package/dist/http/internals/types.d.ts.map +1 -1
  114. package/dist/http/resolveHTTPResponse.d.ts +2 -2
  115. package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
  116. package/dist/http/{responseMeta.d.ts → types.d.ts} +1 -1
  117. package/dist/http/types.d.ts.map +1 -0
  118. package/dist/index.d.ts +3 -2
  119. package/dist/index.d.ts.map +1 -1
  120. package/dist/index.js +713 -28
  121. package/dist/index.mjs +713 -30
  122. package/dist/internals/transformTRPCResponse.d.ts +1 -1
  123. package/dist/internals/transformTRPCResponse.d.ts.map +1 -1
  124. package/dist/internals/types.d.ts +23 -0
  125. package/dist/internals/types.d.ts.map +1 -0
  126. package/dist/{nodeHTTPRequestHandler-1cdb6383.mjs → nodeHTTPRequestHandler-174459c5.mjs} +2 -2
  127. package/dist/{nodeHTTPRequestHandler-848f07b5.js → nodeHTTPRequestHandler-6b7c8622.js} +2 -2
  128. package/dist/{resolveHTTPResponse-54a79e6c.mjs → resolveHTTPResponse-8657b8de.mjs} +16 -10
  129. package/dist/{resolveHTTPResponse-ec3dccaa.js → resolveHTTPResponse-fcc8f644.js} +17 -11
  130. package/dist/rpc/envelopes.d.ts +1 -1
  131. package/dist/rpc/envelopes.d.ts.map +1 -1
  132. package/dist/rpc/index.js +1 -1
  133. package/dist/rpc/index.mjs +1 -1
  134. package/dist/rpc/internals/invert.d.ts +18 -0
  135. package/dist/rpc/internals/invert.d.ts.map +1 -0
  136. package/dist/subscription.js +1 -1
  137. package/dist/subscription.mjs +1 -1
  138. package/dist/{transformTRPCResponse-333bed6c.js → transformTRPCResponse-0c261655.js} +0 -27
  139. package/dist/{transformTRPCResponse-e0cba527.mjs → transformTRPCResponse-747b9a68.mjs} +1 -27
  140. package/dist/transformer.d.ts +14 -0
  141. package/dist/transformer.d.ts.map +1 -1
  142. package/dist/types.d.ts +9 -0
  143. package/dist/types.d.ts.map +1 -1
  144. package/package.json +12 -4
  145. package/src/adapters/aws-lambda/index.ts +156 -0
  146. package/src/adapters/aws-lambda/utils.ts +91 -0
  147. package/src/adapters/express.ts +1 -1
  148. package/src/adapters/fastify/fastifyRequestHandler.ts +1 -1
  149. package/src/adapters/fastify/fastifyTRPCPlugin.ts +2 -2
  150. package/src/adapters/fetch/fetchRequestHandler.ts +1 -1
  151. package/src/adapters/fetch/types.ts +1 -1
  152. package/src/adapters/lambda/index.ts +18 -0
  153. package/src/adapters/next.ts +2 -2
  154. package/src/adapters/node-http/internals/getPostBody.ts +1 -1
  155. package/src/adapters/node-http/nodeHTTPRequestHandler.ts +3 -2
  156. package/src/adapters/node-http/types.ts +5 -2
  157. package/src/adapters/standalone.ts +1 -1
  158. package/src/adapters/ws.ts +16 -13
  159. package/src/core/index.ts +5 -0
  160. package/src/core/initTRPC.ts +90 -0
  161. package/src/core/internals/__generated__/mergeRoutersGeneric.ts +366 -0
  162. package/src/core/internals/config.ts +44 -0
  163. package/src/core/internals/getParseFn.ts +47 -0
  164. package/src/core/internals/internalProcedure.ts +265 -0
  165. package/src/core/internals/mergeRouters.ts +57 -0
  166. package/src/core/internals/mergeRoutersGeneric.ts +35 -0
  167. package/src/core/internals/mergeWithoutOverrides.ts +19 -0
  168. package/src/core/internals/omitPrototype.ts +9 -0
  169. package/src/core/internals/procedureBuilder.ts +101 -0
  170. package/src/core/internals/utils.ts +64 -0
  171. package/src/core/middleware.ts +93 -0
  172. package/src/core/parser.ts +45 -0
  173. package/src/core/procedure.ts +72 -0
  174. package/src/core/router.ts +358 -0
  175. package/src/core/types.ts +37 -0
  176. package/src/{internals → deprecated/internals}/callProcedure.ts +4 -1
  177. package/src/{internals → deprecated/internals}/middlewares.ts +17 -1
  178. package/src/{internals → deprecated/internals}/procedure.ts +16 -4
  179. package/src/deprecated/interop.ts +169 -0
  180. package/src/{router.ts → deprecated/router.ts} +49 -24
  181. package/src/{TRPCError.ts → error/TRPCError.ts} +3 -3
  182. package/src/error/formatter.ts +51 -0
  183. package/src/{internals/errors.ts → error/utils.ts} +1 -1
  184. package/src/http/index.ts +1 -1
  185. package/src/http/internals/getHTTPStatusCode.ts +1 -1
  186. package/src/http/internals/types.ts +10 -12
  187. package/src/http/resolveHTTPResponse.ts +7 -12
  188. package/src/http/{responseMeta.ts → types.ts} +0 -0
  189. package/src/index.ts +3 -2
  190. package/src/internals/transformTRPCResponse.ts +1 -1
  191. package/src/internals/types.ts +24 -0
  192. package/src/rpc/codes.ts +1 -1
  193. package/src/rpc/envelopes.ts +1 -1
  194. package/src/rpc/internals/invert.ts +27 -0
  195. package/src/subscription.ts +1 -1
  196. package/src/transformer.ts +28 -0
  197. package/src/types.ts +12 -0
  198. package/dist/TRPCError.d.ts.map +0 -1
  199. package/dist/http/responseMeta.d.ts.map +0 -1
  200. package/dist/internals/baseHandlerOptions.d.ts +0 -13
  201. package/dist/internals/baseHandlerOptions.d.ts.map +0 -1
  202. package/dist/internals/callProcedure.d.ts.map +0 -1
  203. package/dist/internals/errors.d.ts.map +0 -1
  204. package/dist/internals/middlewares.d.ts.map +0 -1
  205. package/dist/internals/onErrorFunction.d.ts +0 -11
  206. package/dist/internals/onErrorFunction.d.ts.map +0 -1
  207. package/dist/internals/procedure.d.ts.map +0 -1
  208. package/dist/router.d.ts.map +0 -1
  209. package/src/internals/baseHandlerOptions.ts +0 -13
  210. package/src/internals/onErrorFunction.ts +0 -11
package/dist/index.mjs CHANGED
@@ -1,18 +1,92 @@
1
- import { a as assertNotBrowser, g as getHTTPStatusCodeFromError } from './resolveHTTPResponse-54a79e6c.mjs';
2
- export { a as assertNotBrowser, r as resolveHTTPResponse } from './resolveHTTPResponse-54a79e6c.mjs';
3
- import { T as TRPC_ERROR_CODES_BY_KEY } from './envelopes-1deb2fa7.mjs';
4
- import { T as TRPCError, g as getCauseFromUnknown, a as getErrorFromUnknown } from './TRPCError-7971540a.mjs';
5
- export { T as TRPCError } from './TRPCError-7971540a.mjs';
6
- import './transformTRPCResponse-e0cba527.mjs';
1
+ import { a as assertNotBrowser, g as getHTTPStatusCodeFromError } from './resolveHTTPResponse-8657b8de.mjs';
2
+ export { a as assertNotBrowser, r as resolveHTTPResponse } from './resolveHTTPResponse-8657b8de.mjs';
3
+ import { T as TRPC_ERROR_CODES_BY_KEY } from './envelopes-af8c2959.mjs';
4
+ import { T as TRPCError, g as getCauseFromUnknown, a as getErrorFromUnknown } from './TRPCError-b7fa0c31.mjs';
5
+ export { T as TRPCError } from './TRPCError-b7fa0c31.mjs';
6
+ import './transformTRPCResponse-747b9a68.mjs';
7
7
 
8
8
  assertNotBrowser();
9
9
 
10
- const middlewareMarker = 'middlewareMarker';
10
+ /* eslint-disable @typescript-eslint/no-explicit-any */
11
+
12
+ /**
13
+ * @public
14
+ */
15
+
16
+ /**
17
+ * @public
18
+ */
19
+
20
+ /**
21
+ * @public
22
+ */
23
+
24
+ /**
25
+ * @public
26
+ */
27
+
28
+ /**
29
+ * @public
30
+ */
31
+
32
+ /**
33
+ * @internal
34
+ */
35
+ function getDataTransformer$1(transformer) {
36
+ if ('input' in transformer) {
37
+ return transformer;
38
+ }
39
+
40
+ return {
41
+ input: transformer,
42
+ output: transformer
43
+ };
44
+ }
45
+ /**
46
+ * @internal
47
+ */
48
+
49
+ /**
50
+ * @internal
51
+ */
52
+ const defaultTransformer = {
53
+ _default: true,
54
+ input: {
55
+ serialize: obj => obj,
56
+ deserialize: obj => obj
57
+ },
58
+ output: {
59
+ serialize: obj => obj,
60
+ deserialize: obj => obj
61
+ }
62
+ };
63
+
64
+ /**
65
+ * @internal
66
+ */
67
+
68
+ /**
69
+ * @internal
70
+ */
71
+
72
+ /**
73
+ * @internal
74
+ */
75
+ const defaultFormatter = ({
76
+ shape
77
+ }) => {
78
+ return shape;
79
+ };
80
+
81
+ /**
82
+ * @deprecated
83
+ */
84
+ const middlewareMarker$1 = 'middlewareMarker';
11
85
 
12
86
  /* eslint-disable @typescript-eslint/no-explicit-any */
13
87
  assertNotBrowser();
14
88
 
15
- function getParseFn(procedureParser) {
89
+ function getParseFn$1(procedureParser) {
16
90
  const parser = procedureParser;
17
91
 
18
92
  if (typeof parser === 'function') {
@@ -44,6 +118,7 @@ function getParseFn(procedureParser) {
44
118
  }
45
119
  /**
46
120
  * @internal
121
+ * @deprecated
47
122
  */
48
123
 
49
124
 
@@ -59,12 +134,22 @@ class Procedure {
59
134
  this.middlewares = opts.middlewares;
60
135
  this.resolver = opts.resolver;
61
136
  this.inputParser = opts.inputParser;
62
- this.parseInputFn = getParseFn(this.inputParser);
137
+ this.parseInputFn = getParseFn$1(this.inputParser);
63
138
  this.outputParser = opts.outputParser;
64
- this.parseOutputFn = getParseFn(this.outputParser);
139
+ this.parseOutputFn = getParseFn$1(this.outputParser);
65
140
  this.meta = opts.meta;
66
141
  }
67
142
 
143
+ _def() {
144
+ return {
145
+ middlewares: this.middlewares,
146
+ resolver: this.resolver,
147
+ inputParser: this.inputParser,
148
+ outputParser: this.outputParser,
149
+ meta: this.meta
150
+ };
151
+ }
152
+
68
153
  async parseInput(rawInput) {
69
154
  try {
70
155
  return await this.parseInputFn(rawInput);
@@ -105,7 +190,7 @@ class Procedure {
105
190
  });
106
191
  const data = await this.parseOutput(rawOutput);
107
192
  return {
108
- marker: middlewareMarker,
193
+ marker: middlewareMarker$1,
109
194
  ok: true,
110
195
  data,
111
196
  ctx
@@ -136,7 +221,7 @@ class Procedure {
136
221
  ctx: callOpts.ctx,
137
222
  ok: false,
138
223
  error: getErrorFromUnknown(cause),
139
- marker: middlewareMarker
224
+ marker: middlewareMarker$1
140
225
  };
141
226
  }
142
227
  }; // there's always at least one "next" since we wrap this.resolver in a middleware
@@ -198,6 +283,484 @@ function createProcedure(opts) {
198
283
  });
199
284
  }
200
285
 
286
+ function getParseFn(procedureParser) {
287
+ const parser = procedureParser;
288
+
289
+ if (typeof parser === 'function') {
290
+ // ProcedureParserCustomValidatorEsque
291
+ return parser;
292
+ }
293
+
294
+ if (typeof parser.parseAsync === 'function') {
295
+ // ProcedureParserZodEsque
296
+ return parser.parseAsync.bind(parser);
297
+ }
298
+
299
+ if (typeof parser.parse === 'function') {
300
+ // ProcedureParserZodEsque
301
+ return parser.parse.bind(parser);
302
+ }
303
+
304
+ if (typeof parser.validateSync === 'function') {
305
+ // ProcedureParserYupEsque
306
+ return parser.validateSync.bind(parser);
307
+ }
308
+
309
+ if (typeof parser.create === 'function') {
310
+ // ProcedureParserSuperstructEsque
311
+ return parser.create.bind(parser);
312
+ }
313
+
314
+ throw new Error('Could not find a validator fn');
315
+ }
316
+ /**
317
+ * @deprecated only for backwards compat
318
+ * @internal
319
+ */
320
+
321
+ function getParseFnOrPassThrough(procedureParser) {
322
+ if (!procedureParser) {
323
+ return v => v;
324
+ }
325
+
326
+ return getParseFn(procedureParser);
327
+ }
328
+
329
+ /**
330
+ * Ensures there are no duplicate keys when building a procedure.
331
+ */
332
+ function mergeWithoutOverrides(obj1, ...objs) {
333
+ const newObj = Object.assign(Object.create(null), obj1);
334
+
335
+ for (const overrides of objs) {
336
+ for (const key in overrides) {
337
+ if (key in newObj && newObj[key] !== overrides[key]) {
338
+ throw new Error(`Duplicate key ${key}`);
339
+ }
340
+
341
+ newObj[key] = overrides[key];
342
+ }
343
+ }
344
+
345
+ return newObj;
346
+ }
347
+
348
+ /**
349
+ * @internal
350
+ */
351
+
352
+ /**
353
+ * @internal
354
+ */
355
+
356
+ /**
357
+ * @internal
358
+ */
359
+ const middlewareMarker = 'middlewareMarker';
360
+ /**
361
+ * @internal
362
+ */
363
+
364
+ /**
365
+ * This is the actual internal representation of a builder
366
+ * FIXME - I want to get rid of this and use the public API instead
367
+ */
368
+
369
+ function createNewInternalBuilder(def1, def2) {
370
+ const {
371
+ middlewares = [],
372
+ ...rest
373
+ } = def2; // TODO: maybe have a fn here to warn about calls
374
+
375
+ return createInternalBuilder({ ...mergeWithoutOverrides(def1, rest),
376
+ middlewares: [...def1.middlewares, ...middlewares]
377
+ });
378
+ }
379
+
380
+ const codeblock = /*#__PURE__*/`
381
+ If you want to call this function on the server, you do the following:
382
+ This is a client-only function.
383
+
384
+ const caller = appRouter.createCaller({
385
+ /* ... your context */
386
+ });
387
+
388
+ const result = await caller.call('myProcedure', input);
389
+ `.trim();
390
+
391
+ function createProcedureCaller(_def) {
392
+ const procedure = async function resolve(opts) {
393
+ if (!opts || !('rawInput' in opts)) {
394
+ throw new Error(codeblock);
395
+ } // run the middlewares recursively with the resolver as the last one
396
+
397
+
398
+ const callRecursive = async (callOpts = {
399
+ index: 0,
400
+ ctx: opts.ctx
401
+ }) => {
402
+ try {
403
+ const middleware = _def.middlewares[callOpts.index];
404
+ const result = await middleware({
405
+ ctx: callOpts.ctx,
406
+ type: opts.type,
407
+ path: opts.path,
408
+ rawInput: opts.rawInput,
409
+ meta: _def.meta,
410
+ input: callOpts.input,
411
+ next: async nextOpts => {
412
+ return await callRecursive({
413
+ index: callOpts.index + 1,
414
+ ctx: nextOpts && 'ctx' in nextOpts ? { ...callOpts.ctx,
415
+ ...nextOpts.ctx
416
+ } : callOpts.ctx,
417
+ input: nextOpts && 'input' in nextOpts ? nextOpts.input : callOpts.input
418
+ });
419
+ }
420
+ });
421
+ return result;
422
+ } catch (cause) {
423
+ return {
424
+ ok: false,
425
+ error: getErrorFromUnknown(cause),
426
+ marker: middlewareMarker
427
+ };
428
+ }
429
+ }; // there's always at least one "next" since we wrap this.resolver in a middleware
430
+
431
+
432
+ const result = await callRecursive();
433
+
434
+ if (!result) {
435
+ throw new TRPCError({
436
+ code: 'INTERNAL_SERVER_ERROR',
437
+ message: 'No result from middlewares - did you forget to `return next()`?'
438
+ });
439
+ }
440
+
441
+ if (!result.ok) {
442
+ // re-throw original error
443
+ throw result.error;
444
+ }
445
+
446
+ return result.data;
447
+ };
448
+
449
+ procedure._def = _def;
450
+ procedure.meta = _def.meta;
451
+ return procedure;
452
+ }
453
+
454
+ function createInputMiddleware(parse) {
455
+ return async function inputMiddleware({
456
+ next,
457
+ rawInput
458
+ }) {
459
+ let input;
460
+
461
+ try {
462
+ input = await parse(rawInput);
463
+ } catch (cause) {
464
+ throw new TRPCError({
465
+ code: 'BAD_REQUEST',
466
+ cause: getCauseFromUnknown(cause)
467
+ });
468
+ } // TODO fix this typing?
469
+
470
+
471
+ return next({
472
+ input
473
+ });
474
+ };
475
+ }
476
+ function createOutputMiddleware(parse) {
477
+ return async function outputMiddleware({
478
+ next
479
+ }) {
480
+ const result = await next();
481
+
482
+ if (!result.ok) {
483
+ // pass through failures without validating
484
+ return result;
485
+ }
486
+
487
+ try {
488
+ const data = await parse(result.data);
489
+ return { ...result,
490
+ data
491
+ };
492
+ } catch (cause) {
493
+ throw new TRPCError({
494
+ message: 'Output validation failed',
495
+ code: 'INTERNAL_SERVER_ERROR',
496
+ cause: getCauseFromUnknown(cause)
497
+ });
498
+ }
499
+ };
500
+ }
501
+ function createInternalBuilder(initDef) {
502
+ const _def = initDef || {
503
+ middlewares: []
504
+ };
505
+
506
+ return {
507
+ _def,
508
+
509
+ // _call: createProcedureCaller(_def),
510
+ input(input) {
511
+ const parser = getParseFn(input);
512
+ return createNewInternalBuilder(_def, {
513
+ input,
514
+ middlewares: [createInputMiddleware(parser)]
515
+ });
516
+ },
517
+
518
+ output(output) {
519
+ const parseOutput = getParseFn(output);
520
+ return createNewInternalBuilder(_def, {
521
+ output,
522
+ middlewares: [createOutputMiddleware(parseOutput)]
523
+ });
524
+ },
525
+
526
+ meta(meta) {
527
+ return createNewInternalBuilder(_def, {
528
+ meta
529
+ });
530
+ },
531
+
532
+ resolve(resolver) {
533
+ const finalBuilder = createNewInternalBuilder(_def, {
534
+ resolver,
535
+ middlewares: [async function resolveMiddleware(opts) {
536
+ const data = await resolver(opts);
537
+ return {
538
+ marker: middlewareMarker,
539
+ ok: true,
540
+ data,
541
+ ctx: opts.ctx
542
+ };
543
+ }]
544
+ });
545
+ return createProcedureCaller(finalBuilder._def);
546
+ },
547
+
548
+ unstable_concat(builder) {
549
+ return createNewInternalBuilder(_def, builder._def);
550
+ },
551
+
552
+ use(middleware) {
553
+ return createNewInternalBuilder(_def, {
554
+ middlewares: [middleware]
555
+ });
556
+ }
557
+
558
+ };
559
+ }
560
+
561
+ /**
562
+ * Create an object without inheriting anything from `Object.prototype`
563
+ * @internal
564
+ */
565
+ function omitPrototype(obj1) {
566
+ return Object.assign(Object.create(null), obj1);
567
+ }
568
+
569
+ /* eslint-disable @typescript-eslint/ban-types */
570
+
571
+ function createRouterProxy(callback) {
572
+ return new Proxy({}, {
573
+ get(_, path) {
574
+ return (...args) => callback(path, ...args);
575
+ }
576
+
577
+ });
578
+ }
579
+
580
+ const emptyRouter = {
581
+ _ctx: null,
582
+ _errorShape: null,
583
+ _meta: null,
584
+ queries: {},
585
+ mutations: {},
586
+ subscriptions: {},
587
+ errorFormatter: defaultFormatter,
588
+ transformer: defaultTransformer
589
+ }; // type EmptyRouter = typeof emptyRouter;
590
+
591
+ const PROCEDURE_DEFINITION_MAP$1 = {
592
+ query: 'queries',
593
+ mutation: 'mutations',
594
+ subscription: 'subscriptions'
595
+ };
596
+ /**
597
+ *
598
+ * @internal
599
+ */
600
+
601
+ function createRouterFactory(defaults) {
602
+ return function createRouterInner(procedures) {
603
+ var _defaults$transformer, _defaults$errorFormat;
604
+
605
+ const result = mergeWithoutOverrides({
606
+ transformer: (_defaults$transformer = defaults === null || defaults === void 0 ? void 0 : defaults.transformer) !== null && _defaults$transformer !== void 0 ? _defaults$transformer : defaultTransformer,
607
+ errorFormatter: (_defaults$errorFormat = defaults === null || defaults === void 0 ? void 0 : defaults.errorFormatter) !== null && _defaults$errorFormat !== void 0 ? _defaults$errorFormat : defaultFormatter
608
+ }, {
609
+ queries: omitPrototype(procedures.queries),
610
+ mutations: omitPrototype(procedures.mutations),
611
+ subscriptions: omitPrototype(procedures.subscriptions)
612
+ });
613
+ const _def = { ...emptyRouter,
614
+ ...result
615
+ };
616
+ const def = {
617
+ _def,
618
+ ..._def
619
+ };
620
+
621
+ function callProcedure(opts) {
622
+ const {
623
+ type,
624
+ path
625
+ } = opts;
626
+ const defTarget = PROCEDURE_DEFINITION_MAP$1[type];
627
+ const defs = def[defTarget];
628
+
629
+ if (!(path in defs)) {
630
+ throw new TRPCError({
631
+ code: 'NOT_FOUND',
632
+ message: `No "${type}"-procedure on path "${path}"`
633
+ });
634
+ }
635
+
636
+ const procedure = defs[path];
637
+ return procedure(opts);
638
+ }
639
+
640
+ const router = { ...def,
641
+
642
+ createCaller(ctx) {
643
+ return {
644
+ query: (path, ...args) => callProcedure({
645
+ path,
646
+ rawInput: args[0],
647
+ ctx,
648
+ type: 'query'
649
+ }),
650
+ mutation: (path, ...args) => callProcedure({
651
+ path,
652
+ rawInput: args[0],
653
+ ctx,
654
+ type: 'mutation'
655
+ }),
656
+ subscription: (path, ...args) => callProcedure({
657
+ path,
658
+ rawInput: args[0],
659
+ ctx,
660
+ type: 'subscription'
661
+ }),
662
+ queries: createRouterProxy((path, rawInput) => callProcedure({
663
+ path,
664
+ rawInput,
665
+ ctx,
666
+ type: 'query'
667
+ })),
668
+ mutations: createRouterProxy((path, rawInput) => callProcedure({
669
+ path,
670
+ rawInput,
671
+ ctx,
672
+ type: 'mutation'
673
+ })),
674
+ subscriptions: createRouterProxy((path, rawInput) => callProcedure({
675
+ path,
676
+ rawInput,
677
+ ctx,
678
+ type: 'subscription'
679
+ }))
680
+ };
681
+ },
682
+
683
+ getErrorShape(opts) {
684
+ const {
685
+ path,
686
+ error
687
+ } = opts;
688
+ const {
689
+ code
690
+ } = opts.error;
691
+ const shape = {
692
+ message: error.message,
693
+ code: TRPC_ERROR_CODES_BY_KEY[code],
694
+ data: {
695
+ code,
696
+ httpStatus: getHTTPStatusCodeFromError(error)
697
+ }
698
+ };
699
+
700
+ if (process.env.NODE_ENV !== 'production' && typeof opts.error.stack === 'string') {
701
+ shape.data.stack = opts.error.stack;
702
+ }
703
+
704
+ if (typeof path === 'string') {
705
+ shape.data.path = path;
706
+ }
707
+
708
+ return this._def.errorFormatter({ ...opts,
709
+ shape
710
+ });
711
+ }
712
+
713
+ };
714
+ return router;
715
+ };
716
+ }
717
+
718
+ function migrateProcedure(oldProc) {
719
+ const def = oldProc._def();
720
+
721
+ const inputParser = getParseFnOrPassThrough(def.inputParser);
722
+ const outputParser = getParseFnOrPassThrough(def.outputParser);
723
+ const inputMiddleware = createInputMiddleware(inputParser);
724
+ const builder = createInternalBuilder({
725
+ input: def.inputParser,
726
+ middlewares: [...def.middlewares, inputMiddleware, createOutputMiddleware(outputParser)],
727
+ meta: def.meta,
728
+ output: def.outputParser
729
+ });
730
+ const proc = builder.resolve(opts => def.resolver(opts));
731
+ return proc;
732
+ }
733
+
734
+ function migrateRouter(oldRouter) {
735
+ const errorFormatter = oldRouter._def.errorFormatter;
736
+ const transformer = oldRouter._def.transformer;
737
+ const queries = {};
738
+ const mutations = {};
739
+ const subscriptions = {};
740
+
741
+ for (const [name, procedure] of Object.entries(oldRouter._def.queries)) {
742
+ queries[name] = migrateProcedure(procedure);
743
+ }
744
+
745
+ for (const [name, procedure] of Object.entries(oldRouter._def.mutations)) {
746
+ mutations[name] = migrateProcedure(procedure);
747
+ }
748
+
749
+ for (const [name, procedure] of Object.entries(oldRouter._def.subscriptions)) {
750
+ subscriptions[name] = migrateProcedure(procedure);
751
+ }
752
+
753
+ const newRouter = createRouterFactory({
754
+ transformer,
755
+ errorFormatter
756
+ })({
757
+ mutations,
758
+ queries,
759
+ subscriptions
760
+ });
761
+ return newRouter;
762
+ }
763
+
201
764
  /* eslint-disable @typescript-eslint/ban-types */
202
765
  assertNotBrowser();
203
766
 
@@ -213,6 +776,7 @@ function getDataTransformer(transformer) {
213
776
  }
214
777
  /**
215
778
  * @internal
779
+ * @deprecated
216
780
  */
217
781
 
218
782
 
@@ -223,31 +787,16 @@ const PROCEDURE_DEFINITION_MAP = {
223
787
  };
224
788
  /**
225
789
  * @internal
790
+ * @deprecated
226
791
  */
227
792
 
228
793
  function safeObject(...args) {
229
794
  return Object.assign(Object.create(null), ...args);
230
795
  }
231
796
 
232
- const defaultFormatter = ({
233
- shape
234
- }) => {
235
- return shape;
236
- };
237
-
238
- const defaultTransformer = {
239
- input: {
240
- serialize: obj => obj,
241
- deserialize: obj => obj
242
- },
243
- output: {
244
- serialize: obj => obj,
245
- deserialize: obj => obj
246
- }
247
- };
248
-
249
797
  /**
250
798
  * @internal The type signature of this class may change without warning.
799
+ * @deprecated
251
800
  */
252
801
  class Router {
253
802
  constructor(def) {
@@ -488,10 +1037,144 @@ class Router {
488
1037
  flat() {
489
1038
  return this;
490
1039
  }
1040
+ /**
1041
+ * Interop mode for v9.x -> v10.x
1042
+ */
1043
+
1044
+
1045
+ interop() {
1046
+ return migrateRouter(this);
1047
+ }
491
1048
 
492
1049
  }
1050
+ /**
1051
+ * @deprecated
1052
+ */
1053
+
493
1054
  function router() {
494
1055
  return new Router();
495
1056
  }
496
1057
 
497
- export { Router, router };
1058
+ function mergeRouters(...routerList) {
1059
+ const queries = mergeWithoutOverrides({}, ...routerList.map(r => r.queries));
1060
+ const mutations = mergeWithoutOverrides({}, ...routerList.map(r => r.mutations));
1061
+ const subscriptions = mergeWithoutOverrides({}, ...routerList.map(r => r.subscriptions));
1062
+ const errorFormatter = routerList.reduce((currentErrorFormatter, nextRouter) => {
1063
+ if (nextRouter.errorFormatter && nextRouter.errorFormatter !== defaultFormatter) {
1064
+ if (currentErrorFormatter !== defaultFormatter && currentErrorFormatter !== nextRouter.errorFormatter) {
1065
+ throw new Error('You seem to have several error formatters');
1066
+ }
1067
+
1068
+ return nextRouter.errorFormatter;
1069
+ }
1070
+
1071
+ return currentErrorFormatter;
1072
+ }, defaultFormatter);
1073
+ const transformer = routerList.reduce((prev, current) => {
1074
+ if (current.transformer && current.transformer !== defaultTransformer) {
1075
+ if (prev !== defaultTransformer && prev !== current.transformer) {
1076
+ throw new Error('You seem to have several transformers');
1077
+ }
1078
+
1079
+ return current.transformer;
1080
+ }
1081
+
1082
+ return prev;
1083
+ }, defaultTransformer);
1084
+ const router = createRouterFactory({
1085
+ errorFormatter,
1086
+ transformer
1087
+ })({
1088
+ queries,
1089
+ mutations,
1090
+ subscriptions
1091
+ });
1092
+ return router;
1093
+ }
1094
+
1095
+ /**
1096
+ * Thanks to @phryneas!
1097
+ *
1098
+ * @link https://twitter.com/phry/status/1538516854058242048
1099
+ */
1100
+ function mergeRoutersGeneric(...routers) {
1101
+ return mergeRouters(...routers);
1102
+ }
1103
+
1104
+ // TODO make this into a callbag?
1105
+ function createBuilder() {
1106
+ return createInternalBuilder();
1107
+ }
1108
+
1109
+ /**
1110
+ * @internal
1111
+ */
1112
+
1113
+ /**
1114
+ * @internal
1115
+ */
1116
+
1117
+ /**
1118
+ * @internal
1119
+ */
1120
+
1121
+ /**
1122
+ * @internal
1123
+ */
1124
+
1125
+ /**
1126
+ * @internal
1127
+ */
1128
+
1129
+ /**
1130
+ * @internal
1131
+ */
1132
+ // FIXME this should use RootConfig
1133
+ function createMiddlewareFactory() {
1134
+ return function createMiddleware(fn) {
1135
+ return fn;
1136
+ };
1137
+ }
1138
+
1139
+ /* eslint-disable @typescript-eslint/ban-types */
1140
+ function initTRPC() {
1141
+ return function initTRPCInner(options) {
1142
+ var _options$errorFormatt, _options$transformer;
1143
+
1144
+ const errorFormatter = (_options$errorFormatt = options === null || options === void 0 ? void 0 : options.errorFormatter) !== null && _options$errorFormatt !== void 0 ? _options$errorFormatt : defaultFormatter;
1145
+ const transformer = getDataTransformer$1((_options$transformer = options === null || options === void 0 ? void 0 : options.transformer) !== null && _options$transformer !== void 0 ? _options$transformer : defaultTransformer);
1146
+ return {
1147
+ /**
1148
+ * These are just types, they can't be used
1149
+ * @internal
1150
+ */
1151
+ _config: null,
1152
+
1153
+ /**
1154
+ * Builder object for creating procedures
1155
+ */
1156
+ procedure: createBuilder(),
1157
+
1158
+ /**
1159
+ * Create reusable middlewares
1160
+ */
1161
+ middleware: createMiddlewareFactory(),
1162
+
1163
+ /**
1164
+ * Create a router
1165
+ * FIXME this should also use error formatter
1166
+ */
1167
+ router: createRouterFactory({
1168
+ errorFormatter,
1169
+ transformer
1170
+ }),
1171
+
1172
+ /**
1173
+ * Merge Routers
1174
+ */
1175
+ mergeRouters: mergeRoutersGeneric
1176
+ };
1177
+ };
1178
+ }
1179
+
1180
+ export { defaultTransformer, getDataTransformer$1 as getDataTransformer, initTRPC, router };