@trpc/server 10.0.0-alpha.24 → 10.0.0-alpha.27

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 +3 -2
  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} +27 -6
  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 +711 -30
  121. package/dist/index.mjs +711 -32
  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 +7 -12
  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} +51 -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,12 +283,487 @@ 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
+
201
569
  /* eslint-disable @typescript-eslint/ban-types */
202
- assertNotBrowser();
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
+ };
203
596
  /**
204
- * @public
597
+ *
598
+ * @internal
205
599
  */
206
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
+
764
+ /* eslint-disable @typescript-eslint/ban-types */
765
+ assertNotBrowser();
766
+
207
767
  function getDataTransformer(transformer) {
208
768
  if ('input' in transformer) {
209
769
  return transformer;
@@ -216,6 +776,7 @@ function getDataTransformer(transformer) {
216
776
  }
217
777
  /**
218
778
  * @internal
779
+ * @deprecated
219
780
  */
220
781
 
221
782
 
@@ -226,31 +787,16 @@ const PROCEDURE_DEFINITION_MAP = {
226
787
  };
227
788
  /**
228
789
  * @internal
790
+ * @deprecated
229
791
  */
230
792
 
231
793
  function safeObject(...args) {
232
794
  return Object.assign(Object.create(null), ...args);
233
795
  }
234
796
 
235
- const defaultFormatter = ({
236
- shape
237
- }) => {
238
- return shape;
239
- };
240
-
241
- const defaultTransformer = {
242
- input: {
243
- serialize: obj => obj,
244
- deserialize: obj => obj
245
- },
246
- output: {
247
- serialize: obj => obj,
248
- deserialize: obj => obj
249
- }
250
- };
251
-
252
797
  /**
253
798
  * @internal The type signature of this class may change without warning.
799
+ * @deprecated
254
800
  */
255
801
  class Router {
256
802
  constructor(def) {
@@ -491,10 +1037,143 @@ class Router {
491
1037
  flat() {
492
1038
  return this;
493
1039
  }
1040
+ /**
1041
+ * Interop mode for v9.x -> v10.x
1042
+ */
1043
+
1044
+
1045
+ interop() {
1046
+ return migrateRouter(this);
1047
+ }
494
1048
 
495
1049
  }
1050
+ /**
1051
+ * @deprecated
1052
+ */
1053
+
496
1054
  function router() {
497
1055
  return new Router();
498
1056
  }
499
1057
 
500
- 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
+ * @deprecated Only keeping this for future reference if our testing was a false-positive
1097
+ */
1098
+
1099
+ function mergeRoutersGeneric(...args) {
1100
+ return mergeRouters(...args);
1101
+ }
1102
+
1103
+ // TODO make this into a callbag?
1104
+ function createBuilder() {
1105
+ return createInternalBuilder();
1106
+ }
1107
+
1108
+ /**
1109
+ * @internal
1110
+ */
1111
+
1112
+ /**
1113
+ * @internal
1114
+ */
1115
+
1116
+ /**
1117
+ * @internal
1118
+ */
1119
+
1120
+ /**
1121
+ * @internal
1122
+ */
1123
+
1124
+ /**
1125
+ * @internal
1126
+ */
1127
+
1128
+ /**
1129
+ * @internal
1130
+ */
1131
+ // FIXME this should use RootConfig
1132
+ function createMiddlewareFactory() {
1133
+ return function createMiddleware(fn) {
1134
+ return fn;
1135
+ };
1136
+ }
1137
+
1138
+ /* eslint-disable @typescript-eslint/ban-types */
1139
+ function initTRPC() {
1140
+ return function initTRPCInner(options) {
1141
+ var _options$errorFormatt, _options$transformer;
1142
+
1143
+ const errorFormatter = (_options$errorFormatt = options === null || options === void 0 ? void 0 : options.errorFormatter) !== null && _options$errorFormatt !== void 0 ? _options$errorFormatt : defaultFormatter;
1144
+ const transformer = getDataTransformer$1((_options$transformer = options === null || options === void 0 ? void 0 : options.transformer) !== null && _options$transformer !== void 0 ? _options$transformer : defaultTransformer);
1145
+ return {
1146
+ /**
1147
+ * These are just types, they can't be used
1148
+ * @internal
1149
+ */
1150
+ _config: null,
1151
+
1152
+ /**
1153
+ * Builder object for creating procedures
1154
+ */
1155
+ procedure: createBuilder(),
1156
+
1157
+ /**
1158
+ * Create reusable middlewares
1159
+ */
1160
+ middleware: createMiddlewareFactory(),
1161
+
1162
+ /**
1163
+ * Create a router
1164
+ * FIXME this should also use error formatter
1165
+ */
1166
+ router: createRouterFactory({
1167
+ errorFormatter,
1168
+ transformer
1169
+ }),
1170
+
1171
+ /**
1172
+ * Merge Routers
1173
+ */
1174
+ mergeRouters: mergeRoutersGeneric
1175
+ };
1176
+ };
1177
+ }
1178
+
1179
+ export { defaultTransformer, getDataTransformer$1 as getDataTransformer, initTRPC, router };