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