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

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