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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.d.ts +1 -1
  2. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.dev.js +100 -20
  3. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.prod.js +100 -20
  4. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.esm.js +99 -19
  5. package/adapters/aws-lambda/index.d.ts +1 -0
  6. package/adapters/aws-lambda/index.js +1 -0
  7. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.d.ts +1 -0
  8. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.dev.js +25 -0
  9. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.js +7 -0
  10. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.prod.js +25 -0
  11. package/adapters/lambda/dist/trpc-server-adapters-lambda.esm.js +21 -0
  12. package/dist/TRPCError.d.ts.map +1 -1
  13. package/dist/adapters/aws-lambda/index.d.ts +14 -0
  14. package/dist/adapters/aws-lambda/index.d.ts.map +1 -0
  15. package/dist/adapters/aws-lambda/utils.d.ts +34 -0
  16. package/dist/adapters/aws-lambda/utils.d.ts.map +1 -0
  17. package/dist/adapters/express.d.ts +1 -1
  18. package/dist/adapters/express.d.ts.map +1 -1
  19. package/dist/adapters/express.js +4 -4
  20. package/dist/adapters/express.mjs +4 -4
  21. package/dist/adapters/fastify/fastifyRequestHandler.d.ts +1 -1
  22. package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
  23. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +1 -1
  24. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -1
  25. package/dist/adapters/fastify/index.js +3 -3
  26. package/dist/adapters/fastify/index.mjs +3 -3
  27. package/dist/adapters/fetch/fetchRequestHandler.d.ts +1 -1
  28. package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -1
  29. package/dist/adapters/fetch/index.js +3 -3
  30. package/dist/adapters/fetch/index.mjs +3 -3
  31. package/dist/adapters/fetch/types.d.ts +1 -1
  32. package/dist/adapters/fetch/types.d.ts.map +1 -1
  33. package/dist/adapters/lambda/index.d.ts +12 -0
  34. package/dist/adapters/lambda/index.d.ts.map +1 -0
  35. package/dist/adapters/next.d.ts +1 -1
  36. package/dist/adapters/next.d.ts.map +1 -1
  37. package/dist/adapters/next.js +4 -4
  38. package/dist/adapters/next.mjs +4 -4
  39. package/dist/adapters/node-http/index.js +4 -4
  40. package/dist/adapters/node-http/index.mjs +4 -4
  41. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts +1 -1
  42. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
  43. package/dist/adapters/node-http/types.d.ts +3 -3
  44. package/dist/adapters/node-http/types.d.ts.map +1 -1
  45. package/dist/adapters/standalone.d.ts +2 -2
  46. package/dist/adapters/standalone.d.ts.map +1 -1
  47. package/dist/adapters/standalone.js +4 -4
  48. package/dist/adapters/standalone.mjs +4 -4
  49. package/dist/adapters/ws.d.ts +3 -2
  50. package/dist/adapters/ws.d.ts.map +1 -1
  51. package/dist/adapters/ws.js +3 -8
  52. package/dist/adapters/ws.mjs +3 -8
  53. package/dist/core/index.d.ts +5 -0
  54. package/dist/core/index.d.ts.map +1 -0
  55. package/dist/core/initTRPC.d.ts +82 -0
  56. package/dist/core/initTRPC.d.ts.map +1 -0
  57. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts +202 -0
  58. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts.map +1 -0
  59. package/dist/core/internals/config.d.ts +38 -0
  60. package/dist/core/internals/config.d.ts.map +1 -0
  61. package/dist/core/internals/getParseFn.d.ts +9 -0
  62. package/dist/core/internals/getParseFn.d.ts.map +1 -0
  63. package/dist/core/internals/internalProcedure.d.ts +61 -0
  64. package/dist/core/internals/internalProcedure.d.ts.map +1 -0
  65. package/dist/core/internals/mergeRouters.d.ts +3 -0
  66. package/dist/core/internals/mergeRouters.d.ts.map +1 -0
  67. package/dist/core/internals/mergeWithoutOverrides.d.ts +5 -0
  68. package/dist/core/internals/mergeWithoutOverrides.d.ts.map +1 -0
  69. package/dist/core/internals/omitPrototype.d.ts +6 -0
  70. package/dist/core/internals/omitPrototype.d.ts.map +1 -0
  71. package/dist/core/internals/procedureBuilder.d.ts +71 -0
  72. package/dist/core/internals/procedureBuilder.d.ts.map +1 -0
  73. package/dist/core/internals/utils.d.ts +44 -0
  74. package/dist/core/internals/utils.d.ts.map +1 -0
  75. package/dist/core/middleware.d.ts +78 -0
  76. package/dist/core/middleware.d.ts.map +1 -0
  77. package/dist/core/parser.d.ts +25 -0
  78. package/dist/core/parser.d.ts.map +1 -0
  79. package/dist/core/procedure.d.ts +57 -0
  80. package/dist/core/procedure.d.ts.map +1 -0
  81. package/dist/core/router.d.ts +110 -0
  82. package/dist/core/router.d.ts.map +1 -0
  83. package/dist/core/types.d.ts +17 -0
  84. package/dist/core/types.d.ts.map +1 -0
  85. package/dist/{internals → deprecated/internals}/callProcedure.d.ts +4 -1
  86. package/dist/deprecated/internals/callProcedure.d.ts.map +1 -0
  87. package/dist/{internals → deprecated/internals}/middlewares.d.ts +16 -1
  88. package/dist/deprecated/internals/middlewares.d.ts.map +1 -0
  89. package/dist/{internals → deprecated/internals}/procedure.d.ts +10 -1
  90. package/dist/deprecated/internals/procedure.d.ts.map +1 -0
  91. package/dist/deprecated/interop.d.ts +34 -0
  92. package/dist/deprecated/interop.d.ts.map +1 -0
  93. package/dist/{router.d.ts → deprecated/router.d.ts} +27 -6
  94. package/dist/deprecated/router.d.ts.map +1 -0
  95. package/dist/{envelopes-1deb2fa7.mjs → envelopes-af8c2959.mjs} +12 -1
  96. package/dist/{envelopes-a953b930.js → envelopes-b6dd0367.js} +11 -1
  97. package/dist/error/TRPCError.d.ts +11 -0
  98. package/dist/error/TRPCError.d.ts.map +1 -0
  99. package/dist/error/formatter.d.ts +33 -0
  100. package/dist/error/formatter.d.ts.map +1 -0
  101. package/dist/error/utils.d.ts +5 -0
  102. package/dist/error/utils.d.ts.map +1 -0
  103. package/dist/http/index.d.ts +1 -1
  104. package/dist/http/index.d.ts.map +1 -1
  105. package/dist/http/internals/types.d.ts +9 -7
  106. package/dist/http/internals/types.d.ts.map +1 -1
  107. package/dist/http/resolveHTTPResponse.d.ts +1 -1
  108. package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
  109. package/dist/http/{responseMeta.d.ts → types.d.ts} +1 -1
  110. package/dist/http/types.d.ts.map +1 -0
  111. package/dist/index.d.ts +2 -1
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/index.js +686 -12
  114. package/dist/index.mjs +688 -16
  115. package/dist/internals/transformTRPCResponse.d.ts +1 -1
  116. package/dist/internals/transformTRPCResponse.d.ts.map +1 -1
  117. package/dist/internals/types.d.ts +23 -0
  118. package/dist/internals/types.d.ts.map +1 -0
  119. package/dist/{nodeHTTPRequestHandler-1cdb6383.mjs → nodeHTTPRequestHandler-5ad62229.mjs} +1 -1
  120. package/dist/{nodeHTTPRequestHandler-848f07b5.js → nodeHTTPRequestHandler-9ddd18f2.js} +1 -1
  121. package/dist/{resolveHTTPResponse-ec3dccaa.js → resolveHTTPResponse-5932d785.js} +16 -10
  122. package/dist/{resolveHTTPResponse-54a79e6c.mjs → resolveHTTPResponse-ccb9cfa1.mjs} +15 -9
  123. package/dist/rpc/envelopes.d.ts +1 -1
  124. package/dist/rpc/envelopes.d.ts.map +1 -1
  125. package/dist/rpc/index.js +1 -1
  126. package/dist/rpc/index.mjs +1 -1
  127. package/dist/rpc/internals/invert.d.ts +18 -0
  128. package/dist/rpc/internals/invert.d.ts.map +1 -0
  129. package/dist/{transformTRPCResponse-333bed6c.js → transformTRPCResponse-0c261655.js} +0 -27
  130. package/dist/{transformTRPCResponse-e0cba527.mjs → transformTRPCResponse-747b9a68.mjs} +1 -27
  131. package/dist/transformer.d.ts +14 -0
  132. package/dist/transformer.d.ts.map +1 -1
  133. package/dist/types.d.ts +9 -0
  134. package/dist/types.d.ts.map +1 -1
  135. package/package.json +11 -4
  136. package/src/TRPCError.ts +1 -1
  137. package/src/adapters/aws-lambda/index.ts +156 -0
  138. package/src/adapters/aws-lambda/utils.ts +91 -0
  139. package/src/adapters/express.ts +1 -1
  140. package/src/adapters/fastify/fastifyRequestHandler.ts +1 -1
  141. package/src/adapters/fastify/fastifyTRPCPlugin.ts +2 -2
  142. package/src/adapters/fetch/fetchRequestHandler.ts +1 -1
  143. package/src/adapters/fetch/types.ts +1 -1
  144. package/src/adapters/lambda/index.ts +18 -0
  145. package/src/adapters/next.ts +1 -1
  146. package/src/adapters/node-http/nodeHTTPRequestHandler.ts +3 -2
  147. package/src/adapters/node-http/types.ts +5 -3
  148. package/src/adapters/standalone.ts +1 -1
  149. package/src/adapters/ws.ts +5 -10
  150. package/src/core/index.ts +5 -0
  151. package/src/core/initTRPC.ts +90 -0
  152. package/src/core/internals/__generated__/mergeRoutersGeneric.ts +306 -0
  153. package/src/core/internals/config.ts +44 -0
  154. package/src/core/internals/getParseFn.ts +47 -0
  155. package/src/core/internals/internalProcedure.ts +265 -0
  156. package/src/core/internals/mergeRouters.ts +57 -0
  157. package/src/core/internals/mergeWithoutOverrides.ts +19 -0
  158. package/src/core/internals/omitPrototype.ts +9 -0
  159. package/src/core/internals/procedureBuilder.ts +100 -0
  160. package/src/core/internals/utils.ts +64 -0
  161. package/src/core/middleware.ts +93 -0
  162. package/src/core/parser.ts +45 -0
  163. package/src/core/procedure.ts +72 -0
  164. package/src/core/router.ts +313 -0
  165. package/src/core/types.ts +37 -0
  166. package/src/{internals → deprecated/internals}/callProcedure.ts +4 -1
  167. package/src/{internals → deprecated/internals}/middlewares.ts +17 -1
  168. package/src/{internals → deprecated/internals}/procedure.ts +19 -4
  169. package/src/deprecated/interop.ts +169 -0
  170. package/src/{router.ts → deprecated/router.ts} +49 -12
  171. package/src/error/TRPCError.ts +27 -0
  172. package/src/error/formatter.ts +51 -0
  173. package/src/error/utils.ts +49 -0
  174. package/src/http/index.ts +1 -1
  175. package/src/http/internals/types.ts +9 -11
  176. package/src/http/resolveHTTPResponse.ts +6 -11
  177. package/src/http/{responseMeta.ts → types.ts} +0 -0
  178. package/src/index.ts +2 -1
  179. package/src/internals/transformTRPCResponse.ts +1 -1
  180. package/src/internals/types.ts +24 -0
  181. package/src/rpc/codes.ts +1 -1
  182. package/src/rpc/envelopes.ts +1 -1
  183. package/src/rpc/internals/invert.ts +27 -0
  184. package/src/transformer.ts +28 -0
  185. package/src/types.ts +12 -0
  186. package/dist/http/responseMeta.d.ts.map +0 -1
  187. package/dist/internals/baseHandlerOptions.d.ts +0 -13
  188. package/dist/internals/baseHandlerOptions.d.ts.map +0 -1
  189. package/dist/internals/callProcedure.d.ts.map +0 -1
  190. package/dist/internals/middlewares.d.ts.map +0 -1
  191. package/dist/internals/onErrorFunction.d.ts +0 -11
  192. package/dist/internals/onErrorFunction.d.ts.map +0 -1
  193. package/dist/internals/procedure.d.ts.map +0 -1
  194. package/dist/router.d.ts.map +0 -1
  195. package/src/internals/baseHandlerOptions.ts +0 -13
  196. package/src/internals/onErrorFunction.ts +0 -11
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,12 +268,484 @@ 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
+
203
579
  /* eslint-disable @typescript-eslint/ban-types */
204
- resolveHTTPResponse.assertNotBrowser();
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
+ };
205
596
  /**
206
- * @public
597
+ *
598
+ * @internal
207
599
  */
208
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
+
746
+ /* eslint-disable @typescript-eslint/ban-types */
747
+ resolveHTTPResponse.assertNotBrowser();
748
+
209
749
  function getDataTransformer(transformer) {
210
750
  if ('input' in transformer) {
211
751
  return transformer;
@@ -218,6 +758,7 @@ function getDataTransformer(transformer) {
218
758
  }
219
759
  /**
220
760
  * @internal
761
+ * @deprecated
221
762
  */
222
763
 
223
764
 
@@ -228,6 +769,7 @@ const PROCEDURE_DEFINITION_MAP = {
228
769
  };
229
770
  /**
230
771
  * @internal
772
+ * @deprecated
231
773
  */
232
774
 
233
775
  function safeObject(...args) {
@@ -253,6 +795,7 @@ const defaultTransformer = {
253
795
 
254
796
  /**
255
797
  * @internal The type signature of this class may change without warning.
798
+ * @deprecated
256
799
  */
257
800
  class Router {
258
801
  constructor(def) {
@@ -493,14 +1036,145 @@ class Router {
493
1036
  flat() {
494
1037
  return this;
495
1038
  }
1039
+ /**
1040
+ * Interop mode for v9.x -> v10.x
1041
+ */
1042
+
1043
+
1044
+ interop() {
1045
+ return migrateRouter(this);
1046
+ }
496
1047
 
497
1048
  }
1049
+ /**
1050
+ * @deprecated
1051
+ */
1052
+
498
1053
  function router() {
499
1054
  return new Router();
500
1055
  }
501
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
+
502
1174
  exports.assertNotBrowser = resolveHTTPResponse.assertNotBrowser;
503
1175
  exports.resolveHTTPResponse = resolveHTTPResponse.resolveHTTPResponse;
504
1176
  exports.TRPCError = TRPCError.TRPCError;
505
- exports.Router = Router;
1177
+ exports.defaultTransformer = defaultTransformer$1;
1178
+ exports.getDataTransformer = getDataTransformer$1;
1179
+ exports.initTRPC = initTRPC;
506
1180
  exports.router = router;