@trpc/server 10.0.0-alpha.25 → 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 -2
  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} +26 -5
  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 +687 -10
  114. package/dist/index.mjs +689 -14
  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 -2
  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} +47 -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
package/dist/index.js CHANGED
@@ -2,19 +2,76 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var resolveHTTPResponse = require('./resolveHTTPResponse-ec3dccaa.js');
6
- var envelopes = require('./envelopes-a953b930.js');
5
+ var resolveHTTPResponse = require('./resolveHTTPResponse-5932d785.js');
6
+ var envelopes = require('./envelopes-b6dd0367.js');
7
7
  var TRPCError = require('./TRPCError-ddec3395.js');
8
- require('./transformTRPCResponse-333bed6c.js');
8
+ require('./transformTRPCResponse-0c261655.js');
9
9
 
10
10
  resolveHTTPResponse.assertNotBrowser();
11
11
 
12
- const middlewareMarker = 'middlewareMarker';
12
+ /* eslint-disable @typescript-eslint/no-explicit-any */
13
+
14
+ /**
15
+ * @public
16
+ */
17
+
18
+ /**
19
+ * @public
20
+ */
21
+
22
+ /**
23
+ * @public
24
+ */
25
+
26
+ /**
27
+ * @public
28
+ */
29
+
30
+ /**
31
+ * @public
32
+ */
33
+
34
+ /**
35
+ * @internal
36
+ */
37
+ function getDataTransformer$1(transformer) {
38
+ if ('input' in transformer) {
39
+ return transformer;
40
+ }
41
+
42
+ return {
43
+ input: transformer,
44
+ output: transformer
45
+ };
46
+ }
47
+ /**
48
+ * @internal
49
+ */
50
+
51
+ /**
52
+ * @internal
53
+ */
54
+ const defaultTransformer$1 = {
55
+ _default: true,
56
+ input: {
57
+ serialize: obj => obj,
58
+ deserialize: obj => obj
59
+ },
60
+ output: {
61
+ serialize: obj => obj,
62
+ deserialize: obj => obj
63
+ }
64
+ };
65
+
66
+ /**
67
+ * @deprecated
68
+ */
69
+ const middlewareMarker$1 = 'middlewareMarker';
13
70
 
14
71
  /* eslint-disable @typescript-eslint/no-explicit-any */
15
72
  resolveHTTPResponse.assertNotBrowser();
16
73
 
17
- function getParseFn(procedureParser) {
74
+ function getParseFn$1(procedureParser) {
18
75
  const parser = procedureParser;
19
76
 
20
77
  if (typeof parser === 'function') {
@@ -46,6 +103,7 @@ function getParseFn(procedureParser) {
46
103
  }
47
104
  /**
48
105
  * @internal
106
+ * @deprecated
49
107
  */
50
108
 
51
109
 
@@ -61,12 +119,22 @@ class Procedure {
61
119
  this.middlewares = opts.middlewares;
62
120
  this.resolver = opts.resolver;
63
121
  this.inputParser = opts.inputParser;
64
- this.parseInputFn = getParseFn(this.inputParser);
122
+ this.parseInputFn = getParseFn$1(this.inputParser);
65
123
  this.outputParser = opts.outputParser;
66
- this.parseOutputFn = getParseFn(this.outputParser);
124
+ this.parseOutputFn = getParseFn$1(this.outputParser);
67
125
  this.meta = opts.meta;
68
126
  }
69
127
 
128
+ _def() {
129
+ return {
130
+ middlewares: this.middlewares,
131
+ resolver: this.resolver,
132
+ inputParser: this.inputParser,
133
+ outputParser: this.outputParser,
134
+ meta: this.meta
135
+ };
136
+ }
137
+
70
138
  async parseInput(rawInput) {
71
139
  try {
72
140
  return await this.parseInputFn(rawInput);
@@ -107,7 +175,7 @@ class Procedure {
107
175
  });
108
176
  const data = await this.parseOutput(rawOutput);
109
177
  return {
110
- marker: middlewareMarker,
178
+ marker: middlewareMarker$1,
111
179
  ok: true,
112
180
  data,
113
181
  ctx
@@ -138,7 +206,7 @@ class Procedure {
138
206
  ctx: callOpts.ctx,
139
207
  ok: false,
140
208
  error: TRPCError.getErrorFromUnknown(cause),
141
- marker: middlewareMarker
209
+ marker: middlewareMarker$1
142
210
  };
143
211
  }
144
212
  }; // there's always at least one "next" since we wrap this.resolver in a middleware
@@ -200,6 +268,481 @@ function createProcedure(opts) {
200
268
  });
201
269
  }
202
270
 
271
+ function getParseFn(procedureParser) {
272
+ const parser = procedureParser;
273
+
274
+ if (typeof parser === 'function') {
275
+ // ProcedureParserCustomValidatorEsque
276
+ return parser;
277
+ }
278
+
279
+ if (typeof parser.parseAsync === 'function') {
280
+ // ProcedureParserZodEsque
281
+ return parser.parseAsync.bind(parser);
282
+ }
283
+
284
+ if (typeof parser.parse === 'function') {
285
+ // ProcedureParserZodEsque
286
+ return parser.parse.bind(parser);
287
+ }
288
+
289
+ if (typeof parser.validateSync === 'function') {
290
+ // ProcedureParserYupEsque
291
+ return parser.validateSync.bind(parser);
292
+ }
293
+
294
+ if (typeof parser.create === 'function') {
295
+ // ProcedureParserSuperstructEsque
296
+ return parser.create.bind(parser);
297
+ }
298
+
299
+ throw new Error('Could not find a validator fn');
300
+ }
301
+ /**
302
+ * @deprecated only for backwards compat
303
+ * @internal
304
+ */
305
+
306
+ function getParseFnOrPassThrough(procedureParser) {
307
+ if (!procedureParser) {
308
+ return v => v;
309
+ }
310
+
311
+ return getParseFn(procedureParser);
312
+ }
313
+
314
+ function getCauseFromUnknown(cause) {
315
+ if (cause instanceof Error) {
316
+ return cause;
317
+ }
318
+
319
+ return undefined;
320
+ }
321
+
322
+ /**
323
+ * Ensures there are no duplicate keys when building a procedure.
324
+ */
325
+ function mergeWithoutOverrides(obj1, ...objs) {
326
+ const newObj = Object.assign(Object.create(null), obj1);
327
+
328
+ for (const overrides of objs) {
329
+ for (const key in overrides) {
330
+ if (key in newObj && newObj[key] !== overrides[key]) {
331
+ throw new Error(`Duplicate key ${key}`);
332
+ }
333
+
334
+ newObj[key] = overrides[key];
335
+ }
336
+ }
337
+
338
+ return newObj;
339
+ }
340
+
341
+ /**
342
+ * @internal
343
+ */
344
+
345
+ /**
346
+ * @internal
347
+ */
348
+
349
+ /**
350
+ * @internal
351
+ */
352
+ const middlewareMarker = 'middlewareMarker';
353
+ /**
354
+ * @internal
355
+ */
356
+
357
+ /**
358
+ * This is the actual internal representation of a builder
359
+ * FIXME - I want to get rid of this and use the public API instead
360
+ */
361
+
362
+ function createNewInternalBuilder(def1, def2) {
363
+ const {
364
+ middlewares = [],
365
+ ...rest
366
+ } = def2; // TODO: maybe have a fn here to warn about calls
367
+
368
+ return createInternalBuilder({ ...mergeWithoutOverrides(def1, rest),
369
+ middlewares: [...def1.middlewares, ...middlewares]
370
+ });
371
+ }
372
+
373
+ const codeblock = /*#__PURE__*/`
374
+ If you want to call this function on the server, you do the following:
375
+ This is a client-only function.
376
+
377
+ const caller = appRouter.createCaller({
378
+ /* ... your context */
379
+ });
380
+
381
+ const result = await caller.call('myProcedure', input);
382
+ `.trim();
383
+
384
+ function createProcedureCaller(_def) {
385
+ const procedure = async function resolve(opts) {
386
+ if (!opts || !('rawInput' in opts)) {
387
+ throw new Error(codeblock);
388
+ } // run the middlewares recursively with the resolver as the last one
389
+
390
+
391
+ const callRecursive = async (callOpts = {
392
+ index: 0,
393
+ ctx: opts.ctx
394
+ }) => {
395
+ try {
396
+ const middleware = _def.middlewares[callOpts.index];
397
+ const result = await middleware({
398
+ ctx: callOpts.ctx,
399
+ type: opts.type,
400
+ path: opts.path,
401
+ rawInput: opts.rawInput,
402
+ meta: _def.meta,
403
+ input: callOpts.input,
404
+ next: async nextOpts => {
405
+ return await callRecursive({
406
+ index: callOpts.index + 1,
407
+ ctx: nextOpts && 'ctx' in nextOpts ? { ...callOpts.ctx,
408
+ ...nextOpts.ctx
409
+ } : callOpts.ctx,
410
+ input: nextOpts && 'input' in nextOpts ? nextOpts.input : callOpts.input
411
+ });
412
+ }
413
+ });
414
+ return result;
415
+ } catch (cause) {
416
+ return {
417
+ ok: false,
418
+ error: TRPCError.getErrorFromUnknown(cause),
419
+ marker: middlewareMarker
420
+ };
421
+ }
422
+ }; // there's always at least one "next" since we wrap this.resolver in a middleware
423
+
424
+
425
+ const result = await callRecursive();
426
+
427
+ if (!result) {
428
+ throw new TRPCError.TRPCError({
429
+ code: 'INTERNAL_SERVER_ERROR',
430
+ message: 'No result from middlewares - did you forget to `return next()`?'
431
+ });
432
+ }
433
+
434
+ if (!result.ok) {
435
+ // re-throw original error
436
+ throw result.error;
437
+ }
438
+
439
+ return result.data;
440
+ };
441
+
442
+ procedure._def = _def;
443
+ procedure.meta = _def.meta;
444
+ return procedure;
445
+ }
446
+
447
+ function createInputMiddleware(parse) {
448
+ return async function inputMiddleware({
449
+ next,
450
+ rawInput
451
+ }) {
452
+ let input;
453
+
454
+ try {
455
+ input = await parse(rawInput);
456
+ } catch (cause) {
457
+ throw new TRPCError.TRPCError({
458
+ code: 'BAD_REQUEST',
459
+ cause: getCauseFromUnknown(cause)
460
+ });
461
+ } // TODO fix this typing?
462
+
463
+
464
+ return next({
465
+ input
466
+ });
467
+ };
468
+ }
469
+ function createOutputMiddleware(parse) {
470
+ return async function outputMiddleware({
471
+ next
472
+ }) {
473
+ const result = await next();
474
+
475
+ if (!result.ok) {
476
+ // pass through failures without validating
477
+ return result;
478
+ }
479
+
480
+ try {
481
+ const data = await parse(result.data);
482
+ return { ...result,
483
+ data
484
+ };
485
+ } catch (cause) {
486
+ throw new TRPCError.TRPCError({
487
+ message: 'Output validation failed',
488
+ code: 'INTERNAL_SERVER_ERROR',
489
+ cause: getCauseFromUnknown(cause)
490
+ });
491
+ }
492
+ };
493
+ }
494
+ function createInternalBuilder(initDef) {
495
+ const _def = initDef || {
496
+ middlewares: []
497
+ };
498
+
499
+ return {
500
+ _def,
501
+
502
+ // _call: createProcedureCaller(_def),
503
+ input(input) {
504
+ const parser = getParseFn(input);
505
+ return createNewInternalBuilder(_def, {
506
+ input,
507
+ middlewares: [createInputMiddleware(parser)]
508
+ });
509
+ },
510
+
511
+ output(output) {
512
+ const parseOutput = getParseFn(output);
513
+ return createNewInternalBuilder(_def, {
514
+ output,
515
+ middlewares: [createOutputMiddleware(parseOutput)]
516
+ });
517
+ },
518
+
519
+ meta(meta) {
520
+ return createNewInternalBuilder(_def, {
521
+ meta
522
+ });
523
+ },
524
+
525
+ resolve(resolver) {
526
+ const finalBuilder = createNewInternalBuilder(_def, {
527
+ resolver,
528
+ middlewares: [async function resolveMiddleware(opts) {
529
+ const data = await resolver(opts);
530
+ return {
531
+ marker: middlewareMarker,
532
+ ok: true,
533
+ data,
534
+ ctx: opts.ctx
535
+ };
536
+ }]
537
+ });
538
+ return createProcedureCaller(finalBuilder._def);
539
+ },
540
+
541
+ concat(builder) {
542
+ return createNewInternalBuilder(_def, builder._def);
543
+ },
544
+
545
+ use(middleware) {
546
+ return createNewInternalBuilder(_def, {
547
+ middlewares: [middleware]
548
+ });
549
+ }
550
+
551
+ };
552
+ }
553
+
554
+ /**
555
+ * @internal
556
+ */
557
+
558
+ /**
559
+ * @internal
560
+ */
561
+
562
+ /**
563
+ * @internal
564
+ */
565
+ const defaultFormatter$1 = ({
566
+ shape
567
+ }) => {
568
+ return shape;
569
+ };
570
+
571
+ /**
572
+ * Create an object without inheriting anything from `Object.prototype`
573
+ * @internal
574
+ */
575
+ function omitPrototype(obj1) {
576
+ return Object.assign(Object.create(null), obj1);
577
+ }
578
+
579
+ /* eslint-disable @typescript-eslint/ban-types */
580
+ const emptyRouter = {
581
+ _ctx: null,
582
+ _errorShape: null,
583
+ _meta: null,
584
+ queries: {},
585
+ mutations: {},
586
+ subscriptions: {},
587
+ errorFormatter: defaultFormatter$1,
588
+ transformer: defaultTransformer$1
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$1,
607
+ errorFormatter: (_defaults$errorFormat = defaults === null || defaults === void 0 ? void 0 : defaults.errorFormatter) !== null && _defaults$errorFormat !== void 0 ? _defaults$errorFormat : defaultFormatter$1
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.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
+ };
663
+ },
664
+
665
+ getErrorShape(opts) {
666
+ const {
667
+ path,
668
+ error
669
+ } = opts;
670
+ const {
671
+ code
672
+ } = opts.error;
673
+ const shape = {
674
+ message: error.message,
675
+ code: envelopes.TRPC_ERROR_CODES_BY_KEY[code],
676
+ data: {
677
+ code,
678
+ httpStatus: resolveHTTPResponse.getHTTPStatusCodeFromError(error)
679
+ }
680
+ };
681
+
682
+ if (process.env.NODE_ENV !== 'production' && typeof opts.error.stack === 'string') {
683
+ shape.data.stack = opts.error.stack;
684
+ }
685
+
686
+ if (typeof path === 'string') {
687
+ shape.data.path = path;
688
+ }
689
+
690
+ return this._def.errorFormatter({ ...opts,
691
+ shape
692
+ });
693
+ }
694
+
695
+ };
696
+ return router;
697
+ };
698
+ }
699
+
700
+ function migrateProcedure(oldProc) {
701
+ const def = oldProc._def();
702
+
703
+ const inputParser = getParseFnOrPassThrough(def.inputParser);
704
+ const outputParser = getParseFnOrPassThrough(def.outputParser);
705
+ const inputMiddleware = createInputMiddleware(inputParser);
706
+ const builder = createInternalBuilder({
707
+ input: def.inputParser,
708
+ middlewares: [...def.middlewares, inputMiddleware, createOutputMiddleware(outputParser)],
709
+ meta: def.meta,
710
+ output: def.outputParser
711
+ });
712
+ const proc = builder.resolve(opts => def.resolver(opts));
713
+ return proc;
714
+ }
715
+
716
+ function migrateRouter(oldRouter) {
717
+ const errorFormatter = oldRouter._def.errorFormatter;
718
+ const transformer = oldRouter._def.transformer;
719
+ const queries = {};
720
+ const mutations = {};
721
+ const subscriptions = {};
722
+
723
+ for (const [name, procedure] of Object.entries(oldRouter._def.queries)) {
724
+ queries[name] = migrateProcedure(procedure);
725
+ }
726
+
727
+ for (const [name, procedure] of Object.entries(oldRouter._def.mutations)) {
728
+ mutations[name] = migrateProcedure(procedure);
729
+ }
730
+
731
+ for (const [name, procedure] of Object.entries(oldRouter._def.subscriptions)) {
732
+ subscriptions[name] = migrateProcedure(procedure);
733
+ }
734
+
735
+ const newRouter = createRouterFactory({
736
+ transformer,
737
+ errorFormatter
738
+ })({
739
+ mutations,
740
+ queries,
741
+ subscriptions
742
+ });
743
+ return newRouter;
744
+ }
745
+
203
746
  /* eslint-disable @typescript-eslint/ban-types */
204
747
  resolveHTTPResponse.assertNotBrowser();
205
748
 
@@ -215,6 +758,7 @@ function getDataTransformer(transformer) {
215
758
  }
216
759
  /**
217
760
  * @internal
761
+ * @deprecated
218
762
  */
219
763
 
220
764
 
@@ -225,6 +769,7 @@ const PROCEDURE_DEFINITION_MAP = {
225
769
  };
226
770
  /**
227
771
  * @internal
772
+ * @deprecated
228
773
  */
229
774
 
230
775
  function safeObject(...args) {
@@ -250,6 +795,7 @@ const defaultTransformer = {
250
795
 
251
796
  /**
252
797
  * @internal The type signature of this class may change without warning.
798
+ * @deprecated
253
799
  */
254
800
  class Router {
255
801
  constructor(def) {
@@ -490,14 +1036,145 @@ class Router {
490
1036
  flat() {
491
1037
  return this;
492
1038
  }
1039
+ /**
1040
+ * Interop mode for v9.x -> v10.x
1041
+ */
1042
+
1043
+
1044
+ interop() {
1045
+ return migrateRouter(this);
1046
+ }
493
1047
 
494
1048
  }
1049
+ /**
1050
+ * @deprecated
1051
+ */
1052
+
495
1053
  function router() {
496
1054
  return new Router();
497
1055
  }
498
1056
 
1057
+ function mergeRouters(...routerList) {
1058
+ const queries = mergeWithoutOverrides({}, ...routerList.map(r => r.queries));
1059
+ const mutations = mergeWithoutOverrides({}, ...routerList.map(r => r.mutations));
1060
+ const subscriptions = mergeWithoutOverrides({}, ...routerList.map(r => r.subscriptions));
1061
+ const errorFormatter = routerList.reduce((currentErrorFormatter, nextRouter) => {
1062
+ if (nextRouter.errorFormatter && nextRouter.errorFormatter !== defaultFormatter$1) {
1063
+ if (currentErrorFormatter !== defaultFormatter$1 && currentErrorFormatter !== nextRouter.errorFormatter) {
1064
+ throw new Error('You seem to have several error formatters');
1065
+ }
1066
+
1067
+ return nextRouter.errorFormatter;
1068
+ }
1069
+
1070
+ return currentErrorFormatter;
1071
+ }, defaultFormatter$1);
1072
+ const transformer = routerList.reduce((prev, current) => {
1073
+ if (current.transformer && current.transformer !== defaultTransformer$1) {
1074
+ if (prev !== defaultTransformer$1 && prev !== current.transformer) {
1075
+ throw new Error('You seem to have several transformers');
1076
+ }
1077
+
1078
+ return current.transformer;
1079
+ }
1080
+
1081
+ return prev;
1082
+ }, defaultTransformer$1);
1083
+ const router = createRouterFactory({
1084
+ errorFormatter,
1085
+ transformer
1086
+ })({
1087
+ queries,
1088
+ mutations,
1089
+ subscriptions
1090
+ });
1091
+ return router;
1092
+ }
1093
+
1094
+ function mergeRoutersGeneric(...args) {
1095
+ return mergeRouters(...args);
1096
+ }
1097
+
1098
+ // TODO make this into a callbag?
1099
+ function createBuilder() {
1100
+ return createInternalBuilder();
1101
+ }
1102
+
1103
+ /**
1104
+ * @internal
1105
+ */
1106
+
1107
+ /**
1108
+ * @internal
1109
+ */
1110
+
1111
+ /**
1112
+ * @internal
1113
+ */
1114
+
1115
+ /**
1116
+ * @internal
1117
+ */
1118
+
1119
+ /**
1120
+ * @internal
1121
+ */
1122
+
1123
+ /**
1124
+ * @internal
1125
+ */
1126
+ // FIXME this should use RootConfig
1127
+ function createMiddlewareFactory() {
1128
+ return function createMiddleware(fn) {
1129
+ return fn;
1130
+ };
1131
+ }
1132
+
1133
+ /* eslint-disable @typescript-eslint/ban-types */
1134
+ function initTRPC() {
1135
+ return function initTRPCInner(options) {
1136
+ var _options$errorFormatt, _options$transformer;
1137
+
1138
+ const errorFormatter = (_options$errorFormatt = options === null || options === void 0 ? void 0 : options.errorFormatter) !== null && _options$errorFormatt !== void 0 ? _options$errorFormatt : defaultFormatter$1;
1139
+ const transformer = getDataTransformer$1((_options$transformer = options === null || options === void 0 ? void 0 : options.transformer) !== null && _options$transformer !== void 0 ? _options$transformer : defaultTransformer$1);
1140
+ return {
1141
+ /**
1142
+ * These are just types, they can't be used
1143
+ * @internal
1144
+ */
1145
+ _config: null,
1146
+
1147
+ /**
1148
+ * Builder object for creating procedures
1149
+ */
1150
+ procedure: createBuilder(),
1151
+
1152
+ /**
1153
+ * Create reusable middlewares
1154
+ */
1155
+ middleware: createMiddlewareFactory(),
1156
+
1157
+ /**
1158
+ * Create a router
1159
+ * FIXME this should also use error formatter
1160
+ */
1161
+ router: createRouterFactory({
1162
+ errorFormatter,
1163
+ transformer
1164
+ }),
1165
+
1166
+ /**
1167
+ * Merge Routers
1168
+ */
1169
+ mergeRouters: mergeRoutersGeneric
1170
+ };
1171
+ };
1172
+ }
1173
+
499
1174
  exports.assertNotBrowser = resolveHTTPResponse.assertNotBrowser;
500
1175
  exports.resolveHTTPResponse = resolveHTTPResponse.resolveHTTPResponse;
501
1176
  exports.TRPCError = TRPCError.TRPCError;
502
- exports.Router = Router;
1177
+ exports.defaultTransformer = defaultTransformer$1;
1178
+ exports.getDataTransformer = getDataTransformer$1;
1179
+ exports.initTRPC = initTRPC;
503
1180
  exports.router = router;