@trpc/server 10.43.0 → 11.0.0-next.91

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 (164) hide show
  1. package/dist/adapters/aws-lambda/index.d.ts.map +1 -1
  2. package/dist/adapters/aws-lambda/index.js +6 -4
  3. package/dist/adapters/aws-lambda/index.mjs +6 -4
  4. package/dist/adapters/aws-lambda/utils.d.ts +3 -1
  5. package/dist/adapters/aws-lambda/utils.d.ts.map +1 -1
  6. package/dist/adapters/express.js +4 -3
  7. package/dist/adapters/express.mjs +4 -3
  8. package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
  9. package/dist/adapters/fastify/index.js +8 -5
  10. package/dist/adapters/fastify/index.mjs +8 -5
  11. package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -1
  12. package/dist/adapters/fetch/index.js +6 -4
  13. package/dist/adapters/fetch/index.mjs +6 -4
  14. package/dist/adapters/fetch/types.d.ts +2 -1
  15. package/dist/adapters/fetch/types.d.ts.map +1 -1
  16. package/dist/adapters/next.js +4 -3
  17. package/dist/adapters/next.mjs +4 -3
  18. package/dist/adapters/node-http/index.js +4 -3
  19. package/dist/adapters/node-http/index.mjs +4 -3
  20. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
  21. package/dist/adapters/node-http/types.d.ts +2 -1
  22. package/dist/adapters/node-http/types.d.ts.map +1 -1
  23. package/dist/adapters/standalone.d.ts +1 -6
  24. package/dist/adapters/standalone.d.ts.map +1 -1
  25. package/dist/adapters/standalone.js +8 -19
  26. package/dist/adapters/standalone.mjs +8 -19
  27. package/dist/adapters/ws.d.ts +25 -4
  28. package/dist/adapters/ws.d.ts.map +1 -1
  29. package/dist/adapters/ws.js +67 -14
  30. package/dist/adapters/ws.mjs +58 -6
  31. package/dist/bundle-analysis.json +910 -0
  32. package/dist/config-5de7eae5.js +10 -0
  33. package/dist/config-60fc2667.js +7 -0
  34. package/dist/config-ab4c1c6b.mjs +5 -0
  35. package/dist/core/index.d.ts +1 -1
  36. package/dist/core/index.d.ts.map +1 -1
  37. package/dist/core/initTRPC.d.ts +1 -1
  38. package/dist/core/internals/builderTypes.d.ts +11 -0
  39. package/dist/core/internals/builderTypes.d.ts.map +1 -0
  40. package/dist/core/internals/getParseFn.d.ts +0 -5
  41. package/dist/core/internals/getParseFn.d.ts.map +1 -1
  42. package/dist/core/internals/mergeRouters.d.ts +0 -3
  43. package/dist/core/internals/mergeRouters.d.ts.map +1 -1
  44. package/dist/core/internals/procedureBuilder.d.ts +24 -27
  45. package/dist/core/internals/procedureBuilder.d.ts.map +1 -1
  46. package/dist/core/internals/utils.d.ts +7 -8
  47. package/dist/core/internals/utils.d.ts.map +1 -1
  48. package/dist/core/middleware.d.ts +16 -15
  49. package/dist/core/middleware.d.ts.map +1 -1
  50. package/dist/core/procedure.d.ts +41 -42
  51. package/dist/core/procedure.d.ts.map +1 -1
  52. package/dist/core/router.d.ts +9 -56
  53. package/dist/core/router.d.ts.map +1 -1
  54. package/dist/core/types.d.ts +7 -12
  55. package/dist/core/types.d.ts.map +1 -1
  56. package/dist/http/index.js +3 -2
  57. package/dist/http/index.mjs +3 -2
  58. package/dist/http/resolveHTTPResponse.d.ts +3 -3
  59. package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
  60. package/dist/http/types.d.ts +22 -1
  61. package/dist/http/types.d.ts.map +1 -1
  62. package/dist/index.d.ts +10 -2
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +24 -811
  65. package/dist/index.mjs +15 -802
  66. package/dist/{nodeHTTPRequestHandler-cf01c646.mjs → nodeHTTPRequestHandler-0986c5a1.mjs} +8 -3
  67. package/dist/{nodeHTTPRequestHandler-b7d358fe.js → nodeHTTPRequestHandler-18f3370e.js} +8 -3
  68. package/dist/{nodeHTTPRequestHandler-9781faee.js → nodeHTTPRequestHandler-388f5fce.js} +8 -3
  69. package/dist/{resolveHTTPResponse-68c8befb.mjs → resolveHTTPResponse-55c648bd.mjs} +14 -12
  70. package/dist/{resolveHTTPResponse-79011e44.js → resolveHTTPResponse-5def1b0c.js} +15 -13
  71. package/dist/{resolveHTTPResponse-051b3a40.js → resolveHTTPResponse-8d474952.js} +12 -12
  72. package/dist/{config-3ab6b85e.js → router-3c22fe56.js} +9 -46
  73. package/dist/{config-4c0f8e88.mjs → router-5274e533.mjs} +10 -45
  74. package/dist/{config-f356f2fd.js → router-a1635eab.js} +9 -44
  75. package/dist/rpc/envelopes.d.ts +1 -5
  76. package/dist/rpc/envelopes.d.ts.map +1 -1
  77. package/dist/rpc/index.d.ts +0 -1
  78. package/dist/rpc/index.d.ts.map +1 -1
  79. package/dist/rpc/index.js +0 -2
  80. package/dist/rpc/index.mjs +0 -1
  81. package/dist/shared/getErrorShape.d.ts +1 -1
  82. package/dist/shared/getErrorShape.d.ts.map +1 -1
  83. package/dist/shared/index.d.ts +1 -0
  84. package/dist/shared/index.d.ts.map +1 -1
  85. package/dist/shared/jsonify.d.ts +3 -2
  86. package/dist/shared/jsonify.d.ts.map +1 -1
  87. package/dist/shared/transformTRPCResponse.d.ts +1 -1
  88. package/dist/shared/transformTRPCResponse.d.ts.map +1 -1
  89. package/dist/shared/types.d.ts +6 -0
  90. package/dist/shared/types.d.ts.map +1 -0
  91. package/dist/types.d.ts +5 -0
  92. package/dist/types.d.ts.map +1 -1
  93. package/dist/unstableInternalsExport-10cc2bae.mjs +353 -0
  94. package/dist/unstableInternalsExport-a064a7dd.js +349 -0
  95. package/dist/unstableInternalsExport-bf8496ea.js +363 -0
  96. package/dist/unstableInternalsExport.d.ts +11 -0
  97. package/dist/unstableInternalsExport.d.ts.map +1 -0
  98. package/dist/unstableInternalsExport.js +16 -0
  99. package/dist/unstableInternalsExport.mjs +5 -0
  100. package/package.json +9 -3
  101. package/src/adapters/aws-lambda/index.ts +11 -7
  102. package/src/adapters/aws-lambda/utils.ts +3 -0
  103. package/src/adapters/fastify/fastifyRequestHandler.ts +9 -5
  104. package/src/adapters/fetch/fetchRequestHandler.ts +9 -3
  105. package/src/adapters/fetch/types.ts +2 -1
  106. package/src/adapters/node-http/nodeHTTPRequestHandler.ts +15 -4
  107. package/src/adapters/node-http/types.ts +2 -1
  108. package/src/adapters/standalone.ts +4 -22
  109. package/src/adapters/ws.ts +110 -14
  110. package/src/core/index.ts +1 -0
  111. package/src/core/internals/builderTypes.ts +11 -0
  112. package/src/core/internals/getParseFn.ts +0 -13
  113. package/src/core/internals/mergeRouters.ts +0 -4
  114. package/src/core/internals/procedureBuilder.ts +50 -70
  115. package/src/core/internals/utils.ts +11 -8
  116. package/src/core/middleware.ts +37 -31
  117. package/src/core/procedure.ts +46 -54
  118. package/src/core/router.ts +19 -117
  119. package/src/core/types.ts +11 -20
  120. package/src/http/resolveHTTPResponse.ts +17 -14
  121. package/src/http/types.ts +24 -1
  122. package/src/index.ts +16 -2
  123. package/src/rpc/envelopes.ts +1 -6
  124. package/src/rpc/index.ts +0 -1
  125. package/src/shared/getErrorShape.ts +2 -1
  126. package/src/shared/index.ts +2 -0
  127. package/src/shared/jsonify.ts +9 -5
  128. package/src/shared/transformTRPCResponse.ts +1 -1
  129. package/src/shared/types.ts +9 -0
  130. package/src/types.ts +8 -0
  131. package/src/unstableInternalsExport.ts +10 -0
  132. package/unstableInternalsExport/index.d.ts +1 -0
  133. package/unstableInternalsExport/index.js +1 -0
  134. package/adapters/zodFileSchema/index.d.ts +0 -1
  135. package/adapters/zodFileSchema/index.js +0 -1
  136. package/dist/adapters/lambda/index.d.ts +0 -12
  137. package/dist/adapters/lambda/index.d.ts.map +0 -1
  138. package/dist/deprecated/internals/middlewares.d.ts +0 -52
  139. package/dist/deprecated/internals/middlewares.d.ts.map +0 -1
  140. package/dist/deprecated/internals/procedure.d.ts +0 -96
  141. package/dist/deprecated/internals/procedure.d.ts.map +0 -1
  142. package/dist/deprecated/interop.d.ts +0 -44
  143. package/dist/deprecated/interop.d.ts.map +0 -1
  144. package/dist/deprecated/router.d.ts +0 -204
  145. package/dist/deprecated/router.d.ts.map +0 -1
  146. package/dist/internals.d.ts +0 -10
  147. package/dist/internals.d.ts.map +0 -1
  148. package/dist/parseTRPCMessage-1377f305.js +0 -56
  149. package/dist/parseTRPCMessage-95955211.js +0 -63
  150. package/dist/parseTRPCMessage-a0f17853.mjs +0 -54
  151. package/dist/rpc/parseTRPCMessage.d.ts +0 -5
  152. package/dist/rpc/parseTRPCMessage.d.ts.map +0 -1
  153. package/dist/subscription.d.ts +0 -13
  154. package/dist/subscription.d.ts.map +0 -1
  155. package/dist/subscription.js +0 -38
  156. package/dist/subscription.mjs +0 -34
  157. package/src/adapters/lambda/index.ts +0 -18
  158. package/src/deprecated/internals/middlewares.ts +0 -61
  159. package/src/deprecated/internals/procedure.ts +0 -411
  160. package/src/deprecated/interop.ts +0 -232
  161. package/src/deprecated/router.ts +0 -945
  162. package/src/internals.ts +0 -12
  163. package/src/rpc/parseTRPCMessage.ts +0 -84
  164. package/src/subscription.ts +0 -43
@@ -1,38 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var TRPCError = require('./TRPCError-ae7b67e8.js');
6
- var observable = require('./observable-464116ac.js');
7
-
8
- /**
9
- * @deprecated
10
- * This functionality is deprecated and will be removed in the next major version.
11
- */ function subscriptionPullFactory(opts) {
12
- let timer;
13
- let stopped = false;
14
- async function _pull(emit) {
15
- /* istanbul ignore next -- @preserve */ if (stopped) {
16
- return;
17
- }
18
- try {
19
- await opts.pull(emit);
20
- } catch (err /* istanbul ignore next -- @preserve */ ) {
21
- emit.error(TRPCError.getTRPCErrorFromUnknown(err));
22
- }
23
- /* istanbul ignore else -- @preserve */ if (!stopped) {
24
- timer = setTimeout(()=>_pull(emit), opts.intervalMs);
25
- }
26
- }
27
- return observable.observable((emit)=>{
28
- _pull(emit).catch((err)=>{
29
- emit.error(TRPCError.getTRPCErrorFromUnknown(err));
30
- });
31
- return ()=>{
32
- clearTimeout(timer);
33
- stopped = true;
34
- };
35
- });
36
- }
37
-
38
- exports.subscriptionPullFactory = subscriptionPullFactory;
@@ -1,34 +0,0 @@
1
- import { g as getTRPCErrorFromUnknown } from './TRPCError-816ff32e.mjs';
2
- import { o as observable } from './observable-ade1bad8.mjs';
3
-
4
- /**
5
- * @deprecated
6
- * This functionality is deprecated and will be removed in the next major version.
7
- */ function subscriptionPullFactory(opts) {
8
- let timer;
9
- let stopped = false;
10
- async function _pull(emit) {
11
- /* istanbul ignore next -- @preserve */ if (stopped) {
12
- return;
13
- }
14
- try {
15
- await opts.pull(emit);
16
- } catch (err /* istanbul ignore next -- @preserve */ ) {
17
- emit.error(getTRPCErrorFromUnknown(err));
18
- }
19
- /* istanbul ignore else -- @preserve */ if (!stopped) {
20
- timer = setTimeout(()=>_pull(emit), opts.intervalMs);
21
- }
22
- }
23
- return observable((emit)=>{
24
- _pull(emit).catch((err)=>{
25
- emit.error(getTRPCErrorFromUnknown(err));
26
- });
27
- return ()=>{
28
- clearTimeout(timer);
29
- stopped = true;
30
- };
31
- });
32
- }
33
-
34
- export { subscriptionPullFactory };
@@ -1,18 +0,0 @@
1
- import {
2
- awsLambdaRequestHandler,
3
- CreateAWSLambdaContextOptions,
4
- } from '../aws-lambda';
5
- import { APIGatewayEvent } from '../aws-lambda/utils';
6
-
7
- export * from '../aws-lambda';
8
-
9
- /**
10
- * @deprecated use `aws-lambda` instead
11
- */
12
- export type CreateLambdaContextOptions<TEvent extends APIGatewayEvent> =
13
- CreateAWSLambdaContextOptions<TEvent>;
14
-
15
- /**
16
- * @deprecated use `aws-lambda` instead
17
- */
18
- export const lambdaRequestHandler = awsLambdaRequestHandler;
@@ -1,61 +0,0 @@
1
- import { TRPCError } from '../../error/TRPCError';
2
- import { ProcedureType } from '../router';
3
-
4
- /**
5
- * @deprecated
6
- */
7
- export const middlewareMarker = 'middlewareMarker' as 'middlewareMarker' & {
8
- __brand: 'middlewareMarker';
9
- };
10
-
11
- interface MiddlewareResultBase<TContext> {
12
- /**
13
- * All middlewares should pass through their `next()`'s output.
14
- * Requiring this marker makes sure that can't be forgotten at compile-time.
15
- */
16
- readonly marker: typeof middlewareMarker;
17
- ctx: TContext;
18
- }
19
-
20
- /**
21
- * @deprecated
22
- */
23
- interface MiddlewareOKResult<TContext> extends MiddlewareResultBase<TContext> {
24
- ok: true;
25
- data: unknown;
26
- // this could be extended with `input`/`rawInput` later
27
- }
28
-
29
- /**
30
- * @deprecated
31
- */
32
- interface MiddlewareErrorResult<TContext>
33
- extends MiddlewareResultBase<TContext> {
34
- ok: false;
35
- error: TRPCError;
36
- // we could guarantee it's always of this type
37
- }
38
-
39
- /**
40
- * @deprecated
41
- */
42
- export type MiddlewareResult<TContext> =
43
- | MiddlewareErrorResult<TContext>
44
- | MiddlewareOKResult<TContext>;
45
-
46
- /**
47
- * @deprecated
48
- */
49
- export type MiddlewareFunction<TInputContext, TContext, TMeta> = (opts: {
50
- ctx: TInputContext;
51
- type: ProcedureType;
52
- path: string;
53
- rawInput: unknown;
54
- meta?: TMeta;
55
- next: {
56
- (): Promise<MiddlewareResult<TInputContext>>;
57
- <TNewContext>(opts: { ctx: TNewContext }): Promise<
58
- MiddlewareResult<TNewContext>
59
- >;
60
- };
61
- }) => Promise<MiddlewareResult<TContext>>;
@@ -1,411 +0,0 @@
1
- import { getTRPCErrorFromUnknown, TRPCError } from '../../error/TRPCError';
2
- import { InferLast } from '../../types';
3
- import { ProcedureType } from '../router';
4
- import {
5
- MiddlewareFunction,
6
- middlewareMarker,
7
- MiddlewareResult,
8
- } from './middlewares';
9
-
10
- export type ProcedureParserZodEsque<TInput, TOutput> = {
11
- _input: TInput;
12
- _output: TOutput;
13
- };
14
-
15
- export type ProcedureParserMyZodEsque<TType> = {
16
- parse: (input: any) => TType;
17
- };
18
-
19
- export type ProcedureParserSuperstructEsque<TType> = {
20
- create: (input: unknown) => TType;
21
- };
22
-
23
- export type ProcedureParserCustomValidatorEsque<TType> = (
24
- input: unknown,
25
- ) => Promise<TType> | TType;
26
-
27
- export type ProcedureParserYupEsque<TType> = {
28
- validateSync: (input: unknown) => TType;
29
- };
30
-
31
- export type ProcedureParserWithInputOutput<TInput, TOutput> =
32
- ProcedureParserZodEsque<TInput, TOutput>;
33
-
34
- export type ProcedureParser<TType> =
35
- | ProcedureParserCustomValidatorEsque<TType>
36
- | ProcedureParserMyZodEsque<TType>
37
- | ProcedureParserSuperstructEsque<TType>
38
- | ProcedureParserYupEsque<TType>;
39
-
40
- export type ProcedureResolver<TContext, TInput, TOutput> = (opts: {
41
- ctx: TContext;
42
- input: TInput;
43
- type: ProcedureType;
44
- }) => Promise<TOutput> | TOutput;
45
-
46
- interface ProcedureOptions<TContext, TMeta, TInput, TOutput, TParsedOutput> {
47
- middlewares: MiddlewareFunction<any, any, any>[];
48
- resolver: ProcedureResolver<TContext, TInput, TOutput>;
49
- inputParser: ProcedureParser<TInput>;
50
- outputParser: ProcedureParser<TParsedOutput>;
51
- meta: TMeta;
52
- }
53
-
54
- /**
55
- * @internal
56
- * @deprecated
57
- */
58
- export interface ProcedureCallOptions<TContext> {
59
- ctx: TContext;
60
- rawInput: unknown;
61
- path: string;
62
- type: ProcedureType;
63
- }
64
-
65
- type ParseFn<TType> = (value: unknown) => Promise<TType> | TType;
66
-
67
- function getParseFn<TType>(
68
- procedureParser: ProcedureParser<TType>,
69
- ): ParseFn<TType> {
70
- const parser = procedureParser as any;
71
-
72
- if (typeof parser === 'function') {
73
- // ProcedureParserCustomValidatorEsque
74
- return parser;
75
- }
76
-
77
- if (typeof parser.parseAsync === 'function') {
78
- // ProcedureParserZodEsque
79
- return parser.parseAsync.bind(parser);
80
- }
81
-
82
- if (typeof parser.parse === 'function') {
83
- // ProcedureParserZodEsque
84
- return parser.parse.bind(parser);
85
- }
86
-
87
- if (typeof parser.validateSync === 'function') {
88
- // ProcedureParserYupEsque
89
- return parser.validateSync.bind(parser);
90
- }
91
-
92
- if (typeof parser.create === 'function') {
93
- // ProcedureParserSuperstructEsque
94
- return parser.create.bind(parser);
95
- }
96
-
97
- throw new Error('Could not find a validator fn');
98
- }
99
-
100
- /**
101
- * @internal
102
- * @deprecated
103
- */
104
- export class Procedure<
105
- TInputContext,
106
- TContext,
107
- TMeta,
108
- TInput,
109
- TParsedInput,
110
- TOutput,
111
- TParsedOutput,
112
- TFinalOutput = unknown extends TParsedOutput ? TOutput : TParsedOutput,
113
- > {
114
- private middlewares: Readonly<MiddlewareFunction<any, any, any>[]>;
115
- private resolver: ProcedureResolver<TContext, TParsedInput, TOutput>;
116
- private readonly inputParser: ProcedureParser<TParsedInput>;
117
- private parseInputFn: ParseFn<TParsedInput>;
118
- private readonly outputParser: ProcedureParser<TFinalOutput>;
119
- private parseOutputFn: ParseFn<TFinalOutput>;
120
- public readonly meta: TMeta;
121
-
122
- constructor(
123
- opts: ProcedureOptions<
124
- TContext,
125
- TMeta,
126
- TParsedInput,
127
- TOutput,
128
- TFinalOutput
129
- >,
130
- ) {
131
- this.middlewares = opts.middlewares;
132
- this.resolver = opts.resolver;
133
- this.inputParser = opts.inputParser;
134
- this.parseInputFn = getParseFn(this.inputParser);
135
- this.outputParser = opts.outputParser;
136
- this.parseOutputFn = getParseFn(this.outputParser);
137
- this.meta = opts.meta;
138
- }
139
-
140
- public _def() {
141
- return {
142
- middlewares: this.middlewares,
143
- resolver: this.resolver,
144
- inputParser: this.inputParser,
145
- outputParser: this.outputParser,
146
- meta: this.meta,
147
- };
148
- }
149
-
150
- private async parseInput(rawInput: unknown): Promise<TParsedInput> {
151
- try {
152
- return await this.parseInputFn(rawInput);
153
- } catch (cause) {
154
- throw new TRPCError({
155
- code: 'BAD_REQUEST',
156
- cause,
157
- });
158
- }
159
- }
160
-
161
- private async parseOutput(rawOutput: TOutput): Promise<TFinalOutput> {
162
- try {
163
- return await this.parseOutputFn(rawOutput);
164
- } catch (cause) {
165
- throw new TRPCError({
166
- code: 'INTERNAL_SERVER_ERROR',
167
- cause,
168
- message: 'Output validation failed',
169
- });
170
- }
171
- }
172
-
173
- /**
174
- * Trigger middlewares in order, parse raw input, call resolver & parse raw output
175
- * @internal
176
- */
177
- public async call(
178
- opts: ProcedureCallOptions<TInputContext>,
179
- ): Promise<TFinalOutput> {
180
- // wrap the actual resolver and treat as the last "middleware"
181
- const middlewaresWithResolver = this.middlewares.concat([
182
- async ({ ctx }: { ctx: any }) => {
183
- const input = await this.parseInput(opts.rawInput);
184
- const rawOutput = await this.resolver({
185
- ...opts,
186
- ctx,
187
- input,
188
- });
189
- const data = await this.parseOutput(rawOutput);
190
- return {
191
- marker: middlewareMarker,
192
- ok: true,
193
- data,
194
- ctx,
195
- } as const;
196
- },
197
- ]);
198
-
199
- // run the middlewares recursively with the resolver as the last one
200
- const callRecursive = async (
201
- callOpts: { ctx: any; index: number } = {
202
- index: 0,
203
- ctx: opts.ctx,
204
- },
205
- ): Promise<MiddlewareResult<any>> => {
206
- try {
207
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
208
- const result = await middlewaresWithResolver[callOpts.index]!({
209
- ctx: callOpts.ctx,
210
- type: opts.type,
211
- path: opts.path,
212
- rawInput: opts.rawInput,
213
- meta: this.meta,
214
- next: async (nextOpts?: { ctx: any }) => {
215
- return await callRecursive({
216
- index: callOpts.index + 1,
217
- ctx: nextOpts ? nextOpts.ctx : callOpts.ctx,
218
- });
219
- },
220
- });
221
- return result;
222
- } catch (cause) {
223
- return {
224
- ctx: callOpts.ctx,
225
- ok: false,
226
- error: getTRPCErrorFromUnknown(cause),
227
- marker: middlewareMarker,
228
- };
229
- }
230
- };
231
-
232
- // there's always at least one "next" since we wrap this.resolver in a middleware
233
- const result = await callRecursive();
234
- if (!result) {
235
- throw new TRPCError({
236
- code: 'INTERNAL_SERVER_ERROR',
237
- message:
238
- 'No result from middlewares - did you forget to `return next()`?',
239
- });
240
- }
241
- if (!result.ok) {
242
- // re-throw original error
243
- throw result.error;
244
- }
245
-
246
- return result.data as TFinalOutput;
247
- }
248
-
249
- /**
250
- * Create new procedure with passed middlewares
251
- * @param middlewares
252
- */
253
- public inheritMiddlewares(
254
- middlewares: MiddlewareFunction<TInputContext, TContext, TMeta>[],
255
- ): this {
256
- const Constructor: new (
257
- opts: ProcedureOptions<
258
- TContext,
259
- TMeta,
260
- TParsedInput,
261
- TOutput,
262
- TFinalOutput
263
- >,
264
- ) => Procedure<
265
- TInputContext,
266
- TContext,
267
- TMeta,
268
- TInput,
269
- TParsedInput,
270
- TOutput,
271
- TParsedOutput
272
- > = (this as any).constructor;
273
-
274
- const instance = new Constructor({
275
- middlewares: [...middlewares, ...this.middlewares],
276
- resolver: this.resolver,
277
- inputParser: this.inputParser,
278
- outputParser: this.outputParser,
279
- meta: this.meta,
280
- });
281
-
282
- return instance as any;
283
- }
284
- }
285
-
286
- export type CreateProcedureWithInput<TContext, TMeta, TInput, TOutput> = {
287
- input: ProcedureParser<TInput>;
288
- output?: ProcedureParser<TOutput>;
289
- meta?: TMeta;
290
- resolve: ProcedureResolver<TContext, TInput, InferLast<TOutput>>;
291
- };
292
-
293
- export type CreateProcedureWithInputOutputParser<
294
- TContext,
295
- TMeta,
296
- TInput,
297
- TParsedInput,
298
- TOutput,
299
- TParsedOutput,
300
- > = {
301
- input: ProcedureParserWithInputOutput<TInput, TParsedInput>;
302
- output?: ProcedureParserWithInputOutput<TOutput, TParsedOutput>;
303
- meta?: TMeta;
304
- resolve: ProcedureResolver<TContext, TParsedInput, InferLast<TOutput>>;
305
- };
306
-
307
- export type CreateProcedureWithoutInput<
308
- TContext,
309
- TMeta,
310
- TOutput,
311
- TParsedOutput,
312
- > = {
313
- output?:
314
- | ProcedureParser<TOutput>
315
- | ProcedureParserWithInputOutput<TOutput, TParsedOutput>;
316
- meta?: TMeta;
317
- resolve: ProcedureResolver<TContext, undefined, InferLast<TOutput>>;
318
- };
319
-
320
- export type CreateProcedureOptions<
321
- TContext,
322
- TMeta = undefined,
323
- TInput = undefined,
324
- TParsedInput = undefined,
325
- TOutput = undefined,
326
- TParsedOutput = undefined,
327
- > =
328
- | CreateProcedureWithInput<TContext, TMeta, TInput, TOutput>
329
- | CreateProcedureWithInputOutputParser<
330
- TContext,
331
- TMeta,
332
- TInput,
333
- TParsedInput,
334
- TOutput,
335
- TParsedOutput
336
- >
337
- | CreateProcedureWithoutInput<TContext, TMeta, TOutput, TParsedOutput>;
338
-
339
- export function createProcedure<
340
- TContext,
341
- TMeta,
342
- TInput,
343
- TParsedInput,
344
- TOutput,
345
- TParsedOutput,
346
- >(
347
- opts: CreateProcedureOptions<
348
- TContext,
349
- TMeta,
350
- TInput,
351
- TParsedInput,
352
- TOutput,
353
- TParsedOutput
354
- >,
355
- ): Procedure<
356
- unknown,
357
- TContext,
358
- TMeta,
359
- TInput,
360
- TParsedInput,
361
- TOutput,
362
- TParsedOutput
363
- > {
364
- const inputParser =
365
- 'input' in opts
366
- ? opts.input
367
- : (input: unknown) => {
368
- if (input != null) {
369
- throw new TRPCError({
370
- code: 'BAD_REQUEST',
371
- message: 'No input expected',
372
- });
373
- }
374
- return undefined;
375
- };
376
-
377
- const outputParser =
378
- 'output' in opts && opts.output
379
- ? opts.output
380
- : (output: unknown) => output as TOutput;
381
-
382
- return new Procedure({
383
- inputParser: inputParser as any,
384
- resolver: opts.resolve as any,
385
- middlewares: [],
386
- outputParser: outputParser as any,
387
- meta: opts.meta as any,
388
- });
389
- }
390
-
391
- export type inferProcedureFromOptions<
392
- TInputContext,
393
- TOptions extends CreateProcedureOptions<any, any, any, any, any, any>,
394
- > = TOptions extends CreateProcedureOptions<
395
- infer TContext,
396
- infer TMeta,
397
- infer TInput,
398
- infer TParsedInput,
399
- infer TOutput,
400
- infer TParsedOutput
401
- >
402
- ? Procedure<
403
- TInputContext,
404
- TContext,
405
- TMeta,
406
- unknown extends TInput ? undefined : TInput,
407
- unknown extends TParsedInput ? undefined : TParsedInput,
408
- TOutput,
409
- TParsedOutput
410
- >
411
- : never;