@trpc/server 10.0.0-proxy-beta.12 → 10.0.0-proxy-beta.14

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 (81) hide show
  1. package/dist/{TRPCError-281ac25a.mjs → TRPCError-e99e7cbe.mjs} +1 -1
  2. package/dist/adapters/aws-lambda/index.js +2 -3
  3. package/dist/adapters/aws-lambda/index.mjs +3 -4
  4. package/dist/adapters/express.js +3 -3
  5. package/dist/adapters/express.mjs +4 -4
  6. package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
  7. package/dist/adapters/fastify/index.js +2 -3
  8. package/dist/adapters/fastify/index.mjs +3 -4
  9. package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -1
  10. package/dist/adapters/fetch/index.js +2 -3
  11. package/dist/adapters/fetch/index.mjs +3 -4
  12. package/dist/adapters/next.js +3 -3
  13. package/dist/adapters/next.mjs +4 -4
  14. package/dist/adapters/node-http/index.js +3 -3
  15. package/dist/adapters/node-http/index.mjs +4 -4
  16. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
  17. package/dist/adapters/standalone.js +3 -3
  18. package/dist/adapters/standalone.mjs +4 -4
  19. package/dist/adapters/ws.d.ts.map +1 -1
  20. package/dist/adapters/ws.js +10 -3
  21. package/dist/adapters/ws.mjs +11 -4
  22. package/dist/core/index.d.ts +1 -1
  23. package/dist/core/index.d.ts.map +1 -1
  24. package/dist/core/initTRPC.d.ts +22 -5
  25. package/dist/core/initTRPC.d.ts.map +1 -1
  26. package/dist/core/internals/config.d.ts +13 -0
  27. package/dist/core/internals/config.d.ts.map +1 -1
  28. package/dist/core/internals/procedureBuilder.d.ts +24 -24
  29. package/dist/core/internals/procedureBuilder.d.ts.map +1 -1
  30. package/dist/core/middleware.d.ts +1 -1
  31. package/dist/core/middleware.d.ts.map +1 -1
  32. package/dist/core/procedure.d.ts +7 -15
  33. package/dist/core/procedure.d.ts.map +1 -1
  34. package/dist/core/router.d.ts +8 -3
  35. package/dist/core/router.d.ts.map +1 -1
  36. package/dist/deprecated/internals/procedure.d.ts.map +1 -1
  37. package/dist/deprecated/interop.d.ts +2 -2
  38. package/dist/deprecated/interop.d.ts.map +1 -1
  39. package/dist/deprecated/router.d.ts.map +1 -1
  40. package/dist/http/index.d.ts.map +1 -1
  41. package/dist/index.d.ts +0 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +739 -25
  44. package/dist/index.mjs +724 -9
  45. package/dist/internals.d.ts +1 -2
  46. package/dist/internals.d.ts.map +1 -1
  47. package/dist/{nodeHTTPRequestHandler-f627eff7.mjs → nodeHTTPRequestHandler-205f7545.mjs} +2 -3
  48. package/dist/{nodeHTTPRequestHandler-831afd20.js → nodeHTTPRequestHandler-efc38711.js} +1 -2
  49. package/dist/resolveHTTPResponse-4ceb1785.mjs +205 -0
  50. package/dist/resolveHTTPResponse-bf4c6ceb.js +207 -0
  51. package/dist/subscription.mjs +1 -1
  52. package/dist/{resolveHTTPResponse-190892ac.js → transformTRPCResponse-05aa84c1.js} +22 -202
  53. package/dist/{resolveHTTPResponse-75ea5653.mjs → transformTRPCResponse-959de787.mjs} +21 -202
  54. package/dist/types.d.ts +9 -2
  55. package/dist/types.d.ts.map +1 -1
  56. package/package.json +6 -6
  57. package/src/adapters/fastify/fastifyRequestHandler.ts +0 -3
  58. package/src/adapters/fetch/fetchRequestHandler.ts +0 -3
  59. package/src/adapters/node-http/nodeHTTPRequestHandler.ts +0 -3
  60. package/src/adapters/ws.ts +13 -3
  61. package/src/core/index.ts +1 -0
  62. package/src/core/initTRPC.ts +12 -0
  63. package/src/core/internals/config.ts +19 -0
  64. package/src/core/internals/procedureBuilder.ts +38 -47
  65. package/src/core/middleware.ts +1 -1
  66. package/src/core/procedure.ts +7 -18
  67. package/src/core/router.ts +20 -13
  68. package/src/deprecated/internals/procedure.ts +0 -3
  69. package/src/deprecated/interop.ts +2 -12
  70. package/src/deprecated/router.ts +0 -3
  71. package/src/http/index.ts +0 -4
  72. package/src/index.ts +0 -1
  73. package/src/internals.ts +4 -6
  74. package/src/types.ts +28 -7
  75. package/dist/assertNotBrowser.d.ts +0 -2
  76. package/dist/assertNotBrowser.d.ts.map +0 -1
  77. package/dist/router-133cf4a4.mjs +0 -718
  78. package/dist/router-3bad08e5.js +0 -724
  79. package/dist/transformTRPCResponse-11ac69cc.js +0 -27
  80. package/dist/transformTRPCResponse-c8138d5f.mjs +0 -25
  81. package/src/assertNotBrowser.ts +0 -12
@@ -1,718 +0,0 @@
1
- import { m as mergeWithoutOverrides, b as assertNotBrowser, c as createRouterFactory, d as defaultFormatter, f as getHTTPStatusCodeFromError, a as defaultTransformer } from './resolveHTTPResponse-75ea5653.mjs';
2
- import { T as TRPC_ERROR_CODES_BY_KEY } from './codes-7d21f749.mjs';
3
- import { T as TRPCError, a as getCauseFromUnknown, g as getTRPCErrorFromUnknown } from './TRPCError-281ac25a.mjs';
4
-
5
- /**
6
- * @internal
7
- */ // FIXME this should use RootConfig
8
- function createMiddlewareFactory() {
9
- return function createMiddleware(fn) {
10
- return fn;
11
- };
12
- }
13
- function isPlainObject(obj) {
14
- return obj && typeof obj === 'object' && !Array.isArray(obj);
15
- }
16
- /**
17
- * @internal
18
- * Please note, `trpc-openapi` uses this function.
19
- */ function createInputMiddleware(parse) {
20
- const inputMiddleware = async ({ next , rawInput , input , })=>{
21
- let parsedInput;
22
- try {
23
- parsedInput = await parse(rawInput);
24
- } catch (cause) {
25
- throw new TRPCError({
26
- code: 'BAD_REQUEST',
27
- cause: getCauseFromUnknown(cause)
28
- });
29
- }
30
- // Multiple input parsers
31
- const combinedInput = isPlainObject(input) && isPlainObject(parsedInput) ? {
32
- ...input,
33
- ...parsedInput
34
- } : parsedInput;
35
- // TODO fix this typing?
36
- return next({
37
- input: combinedInput
38
- });
39
- };
40
- inputMiddleware._type = 'input';
41
- return inputMiddleware;
42
- }
43
- /**
44
- * @internal
45
- */ function createOutputMiddleware(parse) {
46
- const outputMiddleware = async ({ next })=>{
47
- const result = await next();
48
- if (!result.ok) {
49
- // pass through failures without validating
50
- return result;
51
- }
52
- try {
53
- const data = await parse(result.data);
54
- return {
55
- ...result,
56
- data
57
- };
58
- } catch (cause) {
59
- throw new TRPCError({
60
- message: 'Output validation failed',
61
- code: 'INTERNAL_SERVER_ERROR',
62
- cause: getCauseFromUnknown(cause)
63
- });
64
- }
65
- };
66
- outputMiddleware._type = 'output';
67
- return outputMiddleware;
68
- }
69
-
70
- function getParseFn$1(procedureParser) {
71
- const parser = procedureParser;
72
- if (typeof parser === 'function') {
73
- // ProcedureParserCustomValidatorEsque
74
- return parser;
75
- }
76
- if (typeof parser.parseAsync === 'function') {
77
- // ProcedureParserZodEsque
78
- return parser.parseAsync.bind(parser);
79
- }
80
- if (typeof parser.parse === 'function') {
81
- // ProcedureParserZodEsque
82
- return parser.parse.bind(parser);
83
- }
84
- if (typeof parser.validateSync === 'function') {
85
- // ProcedureParserYupEsque
86
- return parser.validateSync.bind(parser);
87
- }
88
- if (typeof parser.create === 'function') {
89
- // ProcedureParserSuperstructEsque
90
- return parser.create.bind(parser);
91
- }
92
- throw new Error('Could not find a validator fn');
93
- }
94
- /**
95
- * @deprecated only for backwards compat
96
- * @internal
97
- */ function getParseFnOrPassThrough(procedureParser) {
98
- if (!procedureParser) {
99
- return (v)=>v;
100
- }
101
- return getParseFn$1(procedureParser);
102
- }
103
-
104
- /**
105
- * @internal
106
- */ const middlewareMarker$1 = 'middlewareMarker';
107
-
108
- function createNewBuilder(def1, def2) {
109
- const { middlewares =[] , inputs , ...rest } = def2;
110
- // TODO: maybe have a fn here to warn about calls
111
- return createBuilder({
112
- ...mergeWithoutOverrides(def1, rest),
113
- inputs: [
114
- ...def1.inputs,
115
- ...inputs ?? []
116
- ],
117
- middlewares: [
118
- ...def1.middlewares,
119
- ...middlewares
120
- ]
121
- });
122
- }
123
- function createBuilder(initDef) {
124
- const _def = initDef || {
125
- inputs: [],
126
- middlewares: []
127
- };
128
- return {
129
- _def,
130
- input (input) {
131
- const parser = getParseFn$1(input);
132
- return createNewBuilder(_def, {
133
- inputs: [
134
- input
135
- ],
136
- middlewares: [
137
- createInputMiddleware(parser)
138
- ]
139
- });
140
- },
141
- output (output) {
142
- const parseOutput = getParseFn$1(output);
143
- return createNewBuilder(_def, {
144
- output,
145
- middlewares: [
146
- createOutputMiddleware(parseOutput)
147
- ]
148
- });
149
- },
150
- meta (meta) {
151
- return createNewBuilder(_def, {
152
- meta: meta
153
- });
154
- },
155
- unstable_concat (builder) {
156
- return createNewBuilder(_def, builder._def);
157
- },
158
- use (middleware) {
159
- return createNewBuilder(_def, {
160
- middlewares: [
161
- middleware
162
- ]
163
- });
164
- },
165
- query (resolver) {
166
- return createResolver({
167
- ..._def,
168
- query: true
169
- }, resolver);
170
- },
171
- mutation (resolver) {
172
- return createResolver({
173
- ..._def,
174
- mutation: true
175
- }, resolver);
176
- },
177
- subscription (resolver) {
178
- return createResolver({
179
- ..._def,
180
- subscription: true
181
- }, resolver);
182
- }
183
- };
184
- }
185
- function createResolver(_def, resolver) {
186
- const finalBuilder = createNewBuilder(_def, {
187
- resolver,
188
- middlewares: [
189
- async function resolveMiddleware(opts) {
190
- const data = await resolver(opts);
191
- return {
192
- marker: middlewareMarker$1,
193
- ok: true,
194
- data,
195
- ctx: opts.ctx
196
- };
197
- }
198
- ]
199
- });
200
- return createProcedureCaller(finalBuilder._def);
201
- }
202
- const codeblock = `
203
- If you want to call this function on the server, you do the following:
204
- This is a client-only function.
205
-
206
- const caller = appRouter.createCaller({
207
- /* ... your context */
208
- });
209
-
210
- const result = await caller.call('myProcedure', input);
211
- `.trim();
212
- function createProcedureCaller(_def) {
213
- const procedure = async function resolve(opts) {
214
- // is direct server-side call
215
- if (!opts || !('rawInput' in opts)) {
216
- throw new Error(codeblock);
217
- }
218
- // run the middlewares recursively with the resolver as the last one
219
- const callRecursive = async (callOpts = {
220
- index: 0,
221
- ctx: opts.ctx
222
- })=>{
223
- try {
224
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
225
- const middleware = _def.middlewares[callOpts.index];
226
- const result = await middleware({
227
- ctx: callOpts.ctx,
228
- type: opts.type,
229
- path: opts.path,
230
- rawInput: opts.rawInput,
231
- meta: _def.meta,
232
- input: callOpts.input,
233
- next: async (nextOpts)=>{
234
- return await callRecursive({
235
- index: callOpts.index + 1,
236
- ctx: nextOpts && 'ctx' in nextOpts ? {
237
- ...callOpts.ctx,
238
- ...nextOpts.ctx
239
- } : callOpts.ctx,
240
- input: nextOpts && 'input' in nextOpts ? nextOpts.input : callOpts.input
241
- });
242
- }
243
- });
244
- return result;
245
- } catch (cause) {
246
- return {
247
- ok: false,
248
- error: getTRPCErrorFromUnknown(cause),
249
- marker: middlewareMarker$1
250
- };
251
- }
252
- };
253
- // there's always at least one "next" since we wrap this.resolver in a middleware
254
- const result = await callRecursive();
255
- if (!result) {
256
- throw new TRPCError({
257
- code: 'INTERNAL_SERVER_ERROR',
258
- message: 'No result from middlewares - did you forget to `return next()`?'
259
- });
260
- }
261
- if (!result.ok) {
262
- // re-throw original error
263
- throw result.error;
264
- }
265
- return result.data;
266
- };
267
- procedure._def = _def;
268
- procedure.meta = _def.meta;
269
- return procedure;
270
- }
271
-
272
- assertNotBrowser();
273
-
274
- /**
275
- * @deprecated
276
- */ const middlewareMarker = 'middlewareMarker';
277
-
278
- assertNotBrowser();
279
- function getParseFn(procedureParser) {
280
- const parser = procedureParser;
281
- if (typeof parser === 'function') {
282
- // ProcedureParserCustomValidatorEsque
283
- return parser;
284
- }
285
- if (typeof parser.parseAsync === 'function') {
286
- // ProcedureParserZodEsque
287
- return parser.parseAsync.bind(parser);
288
- }
289
- if (typeof parser.parse === 'function') {
290
- // ProcedureParserZodEsque
291
- return parser.parse.bind(parser);
292
- }
293
- if (typeof parser.validateSync === 'function') {
294
- // ProcedureParserYupEsque
295
- return parser.validateSync.bind(parser);
296
- }
297
- if (typeof parser.create === 'function') {
298
- // ProcedureParserSuperstructEsque
299
- return parser.create.bind(parser);
300
- }
301
- throw new Error('Could not find a validator fn');
302
- }
303
- /**
304
- * @internal
305
- * @deprecated
306
- */ class Procedure {
307
- _def() {
308
- return {
309
- middlewares: this.middlewares,
310
- resolver: this.resolver,
311
- inputParser: this.inputParser,
312
- outputParser: this.outputParser,
313
- meta: this.meta
314
- };
315
- }
316
- async parseInput(rawInput) {
317
- try {
318
- return await this.parseInputFn(rawInput);
319
- } catch (cause) {
320
- throw new TRPCError({
321
- code: 'BAD_REQUEST',
322
- cause: getCauseFromUnknown(cause)
323
- });
324
- }
325
- }
326
- async parseOutput(rawOutput) {
327
- try {
328
- return await this.parseOutputFn(rawOutput);
329
- } catch (cause) {
330
- throw new TRPCError({
331
- code: 'INTERNAL_SERVER_ERROR',
332
- cause: getCauseFromUnknown(cause),
333
- message: 'Output validation failed'
334
- });
335
- }
336
- }
337
- /**
338
- * Trigger middlewares in order, parse raw input, call resolver & parse raw output
339
- * @internal
340
- */ async call(opts) {
341
- // wrap the actual resolver and treat as the last "middleware"
342
- const middlewaresWithResolver = this.middlewares.concat([
343
- async ({ ctx })=>{
344
- const input = await this.parseInput(opts.rawInput);
345
- const rawOutput = await this.resolver({
346
- ...opts,
347
- ctx,
348
- input
349
- });
350
- const data = await this.parseOutput(rawOutput);
351
- return {
352
- marker: middlewareMarker,
353
- ok: true,
354
- data,
355
- ctx
356
- };
357
- }
358
- ]);
359
- // run the middlewares recursively with the resolver as the last one
360
- const callRecursive = async (callOpts = {
361
- index: 0,
362
- ctx: opts.ctx
363
- })=>{
364
- try {
365
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
366
- const result = await middlewaresWithResolver[callOpts.index]({
367
- ctx: callOpts.ctx,
368
- type: opts.type,
369
- path: opts.path,
370
- rawInput: opts.rawInput,
371
- meta: this.meta,
372
- next: async (nextOpts)=>{
373
- return await callRecursive({
374
- index: callOpts.index + 1,
375
- ctx: nextOpts ? nextOpts.ctx : callOpts.ctx
376
- });
377
- }
378
- });
379
- return result;
380
- } catch (cause) {
381
- return {
382
- ctx: callOpts.ctx,
383
- ok: false,
384
- error: getTRPCErrorFromUnknown(cause),
385
- marker: middlewareMarker
386
- };
387
- }
388
- };
389
- // there's always at least one "next" since we wrap this.resolver in a middleware
390
- const result = await callRecursive();
391
- if (!result) {
392
- throw new TRPCError({
393
- code: 'INTERNAL_SERVER_ERROR',
394
- message: 'No result from middlewares - did you forget to `return next()`?'
395
- });
396
- }
397
- if (!result.ok) {
398
- // re-throw original error
399
- throw result.error;
400
- }
401
- return result.data;
402
- }
403
- /**
404
- * Create new procedure with passed middlewares
405
- * @param middlewares
406
- */ inheritMiddlewares(middlewares) {
407
- const Constructor = this.constructor;
408
- const instance = new Constructor({
409
- middlewares: [
410
- ...middlewares,
411
- ...this.middlewares
412
- ],
413
- resolver: this.resolver,
414
- inputParser: this.inputParser,
415
- outputParser: this.outputParser,
416
- meta: this.meta
417
- });
418
- return instance;
419
- }
420
- constructor(opts){
421
- this.middlewares = opts.middlewares;
422
- this.resolver = opts.resolver;
423
- this.inputParser = opts.inputParser;
424
- this.parseInputFn = getParseFn(this.inputParser);
425
- this.outputParser = opts.outputParser;
426
- this.parseOutputFn = getParseFn(this.outputParser);
427
- this.meta = opts.meta;
428
- }
429
- }
430
- function createProcedure(opts) {
431
- const inputParser = 'input' in opts ? opts.input : (input)=>{
432
- if (input != null) {
433
- throw new TRPCError({
434
- code: 'BAD_REQUEST',
435
- message: 'No input expected'
436
- });
437
- }
438
- return undefined;
439
- };
440
- const outputParser = 'output' in opts && opts.output ? opts.output : (output)=>output;
441
- return new Procedure({
442
- inputParser: inputParser,
443
- resolver: opts.resolve,
444
- middlewares: [],
445
- outputParser: outputParser,
446
- meta: opts.meta
447
- });
448
- }
449
-
450
- function migrateProcedure(oldProc, type) {
451
- const def = oldProc._def();
452
- const inputParser = getParseFnOrPassThrough(def.inputParser);
453
- const outputParser = getParseFnOrPassThrough(def.outputParser);
454
- const inputMiddleware = createInputMiddleware(inputParser);
455
- const builder = createBuilder({
456
- inputs: [
457
- def.inputParser
458
- ],
459
- middlewares: [
460
- ...def.middlewares,
461
- inputMiddleware,
462
- createOutputMiddleware(outputParser)
463
- ],
464
- meta: def.meta,
465
- output: def.outputParser,
466
- mutation: type === 'mutation',
467
- query: type === 'query',
468
- subscription: type === 'subscription'
469
- });
470
- const proc = builder[type]((opts)=>def.resolver(opts));
471
- return proc;
472
- }
473
- function migrateRouter(oldRouter) {
474
- const errorFormatter = oldRouter._def.errorFormatter;
475
- const transformer = oldRouter._def.transformer;
476
- const queries = {};
477
- const mutations = {};
478
- const subscriptions = {};
479
- for (const [name, procedure] of Object.entries(oldRouter._def.queries)){
480
- queries[name] = migrateProcedure(procedure, 'query');
481
- }
482
- for (const [name1, procedure1] of Object.entries(oldRouter._def.mutations)){
483
- mutations[name1] = migrateProcedure(procedure1, 'mutation');
484
- }
485
- for (const [name2, procedure2] of Object.entries(oldRouter._def.subscriptions)){
486
- subscriptions[name2] = migrateProcedure(procedure2, 'subscription');
487
- }
488
- const procedures = mergeWithoutOverrides(queries, mutations, subscriptions);
489
- const newRouter = createRouterFactory({
490
- transformer,
491
- errorFormatter
492
- })(procedures);
493
- return newRouter;
494
- }
495
-
496
- assertNotBrowser();
497
- function getDataTransformer(transformer) {
498
- if ('input' in transformer) {
499
- return transformer;
500
- }
501
- return {
502
- input: transformer,
503
- output: transformer
504
- };
505
- }
506
- const PROCEDURE_DEFINITION_MAP = {
507
- query: 'queries',
508
- mutation: 'mutations',
509
- subscription: 'subscriptions'
510
- };
511
- function safeObject(...args) {
512
- return Object.assign(Object.create(null), ...args);
513
- }
514
- /**
515
- * @internal The type signature of this class may change without warning.
516
- * @deprecated
517
- */ class Router {
518
- static prefixProcedures(procedures, prefix) {
519
- const eps = safeObject();
520
- for (const [key, procedure] of Object.entries(procedures)){
521
- eps[prefix + key] = procedure;
522
- }
523
- return eps;
524
- }
525
- query(path, procedure) {
526
- const router = new Router({
527
- queries: safeObject({
528
- [path]: createProcedure(procedure)
529
- })
530
- });
531
- return this.merge(router);
532
- }
533
- mutation(path, procedure) {
534
- const router = new Router({
535
- mutations: safeObject({
536
- [path]: createProcedure(procedure)
537
- })
538
- });
539
- return this.merge(router);
540
- }
541
- subscription(path, procedure) {
542
- const router = new Router({
543
- subscriptions: safeObject({
544
- [path]: createProcedure(procedure)
545
- })
546
- });
547
- return this.merge(router);
548
- }
549
- merge(prefixOrRouter, maybeRouter) {
550
- let prefix = '';
551
- let childRouter;
552
- if (typeof prefixOrRouter === 'string' && maybeRouter instanceof Router) {
553
- prefix = prefixOrRouter;
554
- childRouter = maybeRouter;
555
- } else if (prefixOrRouter instanceof Router) {
556
- childRouter = prefixOrRouter;
557
- } else {
558
- throw new Error('Invalid args');
559
- }
560
- const duplicateQueries = Object.keys(childRouter._def.queries).filter((key)=>!!this._def['queries'][prefix + key]);
561
- const duplicateMutations = Object.keys(childRouter._def.mutations).filter((key)=>!!this._def['mutations'][prefix + key]);
562
- const duplicateSubscriptions = Object.keys(childRouter._def.subscriptions).filter((key)=>!!this._def['subscriptions'][prefix + key]);
563
- const duplicates = [
564
- ...duplicateQueries,
565
- ...duplicateMutations,
566
- ...duplicateSubscriptions
567
- ];
568
- if (duplicates.length) {
569
- throw new Error(`Duplicate endpoint(s): ${duplicates.join(', ')}`);
570
- }
571
- const mergeProcedures = (defs)=>{
572
- const newDefs = safeObject();
573
- for (const [key, procedure] of Object.entries(defs)){
574
- const newProcedure = procedure.inheritMiddlewares(this._def.middlewares);
575
- newDefs[key] = newProcedure;
576
- }
577
- return Router.prefixProcedures(newDefs, prefix);
578
- };
579
- return new Router({
580
- ...this._def,
581
- queries: safeObject(this._def.queries, mergeProcedures(childRouter._def.queries)),
582
- mutations: safeObject(this._def.mutations, mergeProcedures(childRouter._def.mutations)),
583
- subscriptions: safeObject(this._def.subscriptions, mergeProcedures(childRouter._def.subscriptions))
584
- });
585
- }
586
- /**
587
- * Invoke procedure. Only for internal use within library.
588
- */ async call(opts) {
589
- const { type , path } = opts;
590
- const defTarget = PROCEDURE_DEFINITION_MAP[type];
591
- const defs = this._def[defTarget];
592
- const procedure = defs[path];
593
- if (!procedure) {
594
- throw new TRPCError({
595
- code: 'NOT_FOUND',
596
- message: `No "${type}"-procedure on path "${path}"`
597
- });
598
- }
599
- return procedure.call(opts);
600
- }
601
- createCaller(ctx) {
602
- return {
603
- query: (path, ...args)=>{
604
- return this.call({
605
- type: 'query',
606
- ctx,
607
- path,
608
- rawInput: args[0]
609
- });
610
- },
611
- mutation: (path, ...args)=>{
612
- return this.call({
613
- type: 'mutation',
614
- ctx,
615
- path,
616
- rawInput: args[0]
617
- });
618
- },
619
- subscription: (path, ...args)=>{
620
- return this.call({
621
- type: 'subscription',
622
- ctx,
623
- path,
624
- rawInput: args[0]
625
- });
626
- }
627
- };
628
- }
629
- /**
630
- * Function to be called before any procedure is invoked
631
- * @link https://trpc.io/docs/middlewares
632
- */ middleware(middleware) {
633
- return new Router({
634
- ...this._def,
635
- middlewares: [
636
- ...this._def.middlewares,
637
- middleware
638
- ]
639
- });
640
- }
641
- /**
642
- * Format errors
643
- * @link https://trpc.io/docs/error-formatting
644
- */ formatError(errorFormatter) {
645
- if (this._def.errorFormatter !== defaultFormatter) {
646
- throw new Error('You seem to have double `formatError()`-calls in your router tree');
647
- }
648
- return new Router({
649
- ...this._def,
650
- errorFormatter: errorFormatter
651
- });
652
- }
653
- getErrorShape(opts) {
654
- const { path , error } = opts;
655
- const { code } = opts.error;
656
- const shape = {
657
- message: error.message,
658
- code: TRPC_ERROR_CODES_BY_KEY[code],
659
- data: {
660
- code,
661
- httpStatus: getHTTPStatusCodeFromError(error)
662
- }
663
- };
664
- if (process.env.NODE_ENV !== 'production' && typeof opts.error.stack === 'string') {
665
- shape.data.stack = opts.error.stack;
666
- }
667
- if (typeof path === 'string') {
668
- shape.data.path = path;
669
- }
670
- return this._def.errorFormatter({
671
- ...opts,
672
- shape
673
- });
674
- }
675
- /**
676
- * Add data transformer to serialize/deserialize input args + output
677
- * @link https://trpc.io/docs/data-transformers
678
- */ transformer(_transformer) {
679
- const transformer = getDataTransformer(_transformer);
680
- if (this._def.transformer !== defaultTransformer) {
681
- throw new Error('You seem to have double `transformer()`-calls in your router tree');
682
- }
683
- return new Router({
684
- ...this._def,
685
- transformer
686
- });
687
- }
688
- /**
689
- * Flattens the generics of TQueries/TMutations/TSubscriptions.
690
- * ⚠️ Experimental - might disappear. ⚠️
691
- *
692
- * @alpha
693
- */ flat() {
694
- return this;
695
- }
696
- /**
697
- * Interop mode for v9.x -> v10.x
698
- */ interop() {
699
- return migrateRouter(this);
700
- }
701
- constructor(def){
702
- this._def = {
703
- queries: def?.queries ?? safeObject(),
704
- mutations: def?.mutations ?? safeObject(),
705
- subscriptions: def?.subscriptions ?? safeObject(),
706
- middlewares: def?.middlewares ?? [],
707
- errorFormatter: def?.errorFormatter ?? defaultFormatter,
708
- transformer: def?.transformer ?? defaultTransformer
709
- };
710
- }
711
- }
712
- /**
713
- * @deprecated
714
- */ function router() {
715
- return new Router();
716
- }
717
-
718
- export { createMiddlewareFactory as a, createInputMiddleware as b, createBuilder as c, createOutputMiddleware as d, router as r };