@trpc/server 10.0.0-alpha.29 → 10.0.0-alpha.31

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 (60) hide show
  1. package/dist/adapters/node-http/types.d.ts +2 -2
  2. package/dist/adapters/node-http/types.d.ts.map +1 -1
  3. package/dist/core/index.d.ts +1 -1
  4. package/dist/core/index.d.ts.map +1 -1
  5. package/dist/core/initTRPC.d.ts +30 -25
  6. package/dist/core/initTRPC.d.ts.map +1 -1
  7. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts +121 -41
  8. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts.map +1 -1
  9. package/dist/core/internals/config.d.ts +3 -5
  10. package/dist/core/internals/config.d.ts.map +1 -1
  11. package/dist/core/internals/internalProcedure.d.ts +18 -1
  12. package/dist/core/internals/internalProcedure.d.ts.map +1 -1
  13. package/dist/core/internals/mergeRouters.d.ts.map +1 -1
  14. package/dist/core/internals/prefixObjectKeys.d.ts +2 -0
  15. package/dist/core/internals/prefixObjectKeys.d.ts.map +1 -0
  16. package/dist/core/internals/procedureBuilder.d.ts +39 -8
  17. package/dist/core/internals/procedureBuilder.d.ts.map +1 -1
  18. package/dist/core/middleware.d.ts +16 -7
  19. package/dist/core/middleware.d.ts.map +1 -1
  20. package/dist/core/procedure.d.ts +26 -3
  21. package/dist/core/procedure.d.ts.map +1 -1
  22. package/dist/core/router.d.ts +52 -60
  23. package/dist/core/router.d.ts.map +1 -1
  24. package/dist/core/types.d.ts +9 -9
  25. package/dist/core/types.d.ts.map +1 -1
  26. package/dist/deprecated/interop.d.ts +23 -23
  27. package/dist/deprecated/interop.d.ts.map +1 -1
  28. package/dist/http/internals/types.d.ts +3 -3
  29. package/dist/http/internals/types.d.ts.map +1 -1
  30. package/dist/index.js +100 -56
  31. package/dist/index.mjs +100 -56
  32. package/dist/internals/types.d.ts +2 -2
  33. package/dist/internals/types.d.ts.map +1 -1
  34. package/dist/observable/observable.d.ts +1 -1
  35. package/dist/observable/observable.d.ts.map +1 -1
  36. package/dist/types.d.ts +8 -0
  37. package/dist/types.d.ts.map +1 -1
  38. package/package.json +2 -2
  39. package/src/adapters/node-http/nodeHTTPRequestHandler.ts +2 -2
  40. package/src/adapters/node-http/types.ts +2 -4
  41. package/src/core/index.ts +1 -1
  42. package/src/core/initTRPC.ts +14 -9
  43. package/src/core/internals/__generated__/mergeRoutersGeneric.ts +184 -104
  44. package/src/core/internals/config.ts +4 -5
  45. package/src/core/internals/internalProcedure.ts +52 -21
  46. package/src/core/internals/mergeRouters.ts +3 -15
  47. package/src/core/internals/prefixObjectKeys.ts +9 -0
  48. package/src/core/internals/procedureBuilder.ts +92 -9
  49. package/src/core/middleware.ts +7 -4
  50. package/src/core/procedure.ts +38 -2
  51. package/src/core/router.ts +143 -136
  52. package/src/core/types.ts +33 -16
  53. package/src/deprecated/interop.ts +110 -50
  54. package/src/http/internals/types.ts +3 -3
  55. package/src/internals/types.ts +2 -2
  56. package/src/observable/observable.ts +6 -3
  57. package/src/types.ts +9 -0
  58. package/dist/core/internals/mergeRoutersGeneric.d.ts +0 -21
  59. package/dist/core/internals/mergeRoutersGeneric.d.ts.map +0 -1
  60. package/src/core/internals/mergeRoutersGeneric.ts +0 -35
@@ -26,6 +26,9 @@ export interface InternalProcedure {
26
26
  * @deprecated use `._def.meta` instead
27
27
  */
28
28
  meta: ProcedureBuilderInternal['_def']['meta'];
29
+ mutation?: boolean;
30
+ query?: boolean;
31
+ subscription?: boolean;
29
32
  (opts: InternalProcedureCallOptions): Promise<unknown>;
30
33
  }
31
34
 
@@ -34,6 +37,8 @@ type ProcedureBuilderInternalResolver = (
34
37
  ) => Promise<unknown>;
35
38
 
36
39
  export type ProcedureBuilderInternalMiddleware = MiddlewareFunction<any, any>;
40
+ type TResolver = (opts: ResolveOptions<any>) => MaybePromise<any>;
41
+
37
42
  interface ProcedureBuilderInternal {
38
43
  _def: {
39
44
  input?: Parser;
@@ -41,9 +46,10 @@ interface ProcedureBuilderInternal {
41
46
  meta?: Record<string, unknown>;
42
47
  resolver?: ProcedureBuilderInternalResolver;
43
48
  middlewares: ProcedureBuilderInternalMiddleware[];
49
+ mutation?: boolean;
50
+ query?: boolean;
51
+ subscription?: boolean;
44
52
  };
45
- // FIXME
46
- // _call: (opts: ResolveOptions<any>) => Promise<unknown>;
47
53
  /**
48
54
  * @internal
49
55
  */
@@ -64,12 +70,21 @@ interface ProcedureBuilderInternal {
64
70
  * @internal
65
71
  */
66
72
  meta: (meta: Record<string, unknown>) => ProcedureBuilderInternal;
73
+ /** @deprecated **/
74
+ resolve: (resolver: TResolver) => InternalProcedure;
75
+ /**
76
+ * @internal
77
+ */
78
+ query: (resolver: TResolver) => InternalProcedure;
79
+ /**
80
+ * @internal
81
+ */
82
+ mutation: (resolver: TResolver) => InternalProcedure;
83
+
67
84
  /**
68
85
  * @internal
69
86
  */
70
- resolve: (
71
- resolver: (opts: ResolveOptions<any>) => MaybePromise<any>,
72
- ) => InternalProcedure;
87
+ subscription: (resolver: TResolver) => InternalProcedure;
73
88
  }
74
89
  function createNewInternalBuilder(
75
90
  def1: ProcedureBuilderInternal['_def'],
@@ -208,6 +223,27 @@ export function createOutputMiddleware<T>(
208
223
  };
209
224
  }
210
225
 
226
+ function createResolver(
227
+ _def: ProcedureBuilderInternal['_def'],
228
+ resolver: TResolver,
229
+ ) {
230
+ const finalBuilder = createNewInternalBuilder(_def, {
231
+ resolver,
232
+ middlewares: [
233
+ async function resolveMiddleware(opts) {
234
+ const data = await resolver(opts);
235
+ return {
236
+ marker: middlewareMarker,
237
+ ok: true,
238
+ data,
239
+ ctx: opts.ctx,
240
+ } as const;
241
+ },
242
+ ],
243
+ });
244
+
245
+ return createProcedureCaller(finalBuilder._def);
246
+ }
211
247
  export function createInternalBuilder(
212
248
  initDef?: ProcedureBuilderInternal['_def'],
213
249
  ): ProcedureBuilderInternal {
@@ -235,23 +271,9 @@ export function createInternalBuilder(
235
271
  meta(meta) {
236
272
  return createNewInternalBuilder(_def, { meta });
237
273
  },
274
+ /** @deprecated **/
238
275
  resolve(resolver) {
239
- const finalBuilder = createNewInternalBuilder(_def, {
240
- resolver,
241
- middlewares: [
242
- async function resolveMiddleware(opts) {
243
- const data = await resolver(opts);
244
- return {
245
- marker: middlewareMarker,
246
- ok: true,
247
- data,
248
- ctx: opts.ctx,
249
- } as const;
250
- },
251
- ],
252
- });
253
-
254
- return createProcedureCaller(finalBuilder._def);
276
+ return createResolver(_def, resolver);
255
277
  },
256
278
  unstable_concat(builder) {
257
279
  return createNewInternalBuilder(_def, builder._def);
@@ -261,5 +283,14 @@ export function createInternalBuilder(
261
283
  middlewares: [middleware],
262
284
  });
263
285
  },
286
+ query(resolver) {
287
+ return createResolver({ ..._def, query: true }, resolver);
288
+ },
289
+ mutation(resolver) {
290
+ return createResolver({ ..._def, mutation: true }, resolver);
291
+ },
292
+ subscription(resolver) {
293
+ return createResolver({ ..._def, subscription: true }, resolver);
294
+ },
264
295
  };
265
296
  }
@@ -4,17 +4,9 @@ import { AnyRouter, createRouterFactory } from '../router';
4
4
  import { mergeWithoutOverrides } from './mergeWithoutOverrides';
5
5
 
6
6
  export function mergeRouters(...routerList: AnyRouter[]): AnyRouter {
7
- const queries = mergeWithoutOverrides(
7
+ const record = mergeWithoutOverrides(
8
8
  {},
9
- ...routerList.map((r) => r.queries),
10
- );
11
- const mutations = mergeWithoutOverrides(
12
- {},
13
- ...routerList.map((r) => r.mutations),
14
- );
15
- const subscriptions = mergeWithoutOverrides(
16
- {},
17
- ...routerList.map((r) => r.subscriptions),
9
+ ...routerList.map((r) => r._def.record),
18
10
  );
19
11
  const errorFormatter = routerList.reduce(
20
12
  (currentErrorFormatter, nextRouter) => {
@@ -48,10 +40,6 @@ export function mergeRouters(...routerList: AnyRouter[]): AnyRouter {
48
40
  const router = createRouterFactory({
49
41
  errorFormatter,
50
42
  transformer,
51
- })({
52
- queries,
53
- mutations,
54
- subscriptions,
55
- });
43
+ })(record);
56
44
  return router;
57
45
  }
@@ -0,0 +1,9 @@
1
+ import { omitPrototype } from './omitPrototype';
2
+
3
+ export function prefixObjectKeys(obj: Record<string, unknown>, prefix: string) {
4
+ const newObj: Record<string, unknown> = omitPrototype({});
5
+ for (const key in obj ?? {}) {
6
+ newObj[prefix + key] = obj[key];
7
+ }
8
+ return newObj;
9
+ }
@@ -1,7 +1,14 @@
1
1
  import { MaybePromise } from '../../types';
2
2
  import { MiddlewareFunction } from '../middleware';
3
3
  import { Parser, inferParser } from '../parser';
4
- import { Procedure, ProcedureParams } from '../procedure';
4
+ import {
5
+ MutationProcedure,
6
+ Procedure,
7
+ ProcedureParams,
8
+ QueryProcedure,
9
+ SubscriptionProcedure,
10
+ } from '../procedure';
11
+ import { RootConfig } from './config';
5
12
  import { createInternalBuilder } from './internalProcedure';
6
13
  import { ResolveOptions } from './utils';
7
14
  import { DefaultValue as FallbackValue, Overwrite, UnsetMarker } from './utils';
@@ -10,6 +17,7 @@ type CreateProcedureReturnInput<
10
17
  TPrev extends ProcedureParams,
11
18
  TNext extends ProcedureParams,
12
19
  > = ProcedureBuilder<{
20
+ _config: TPrev['_config'];
13
21
  _meta: TPrev['_meta'];
14
22
  _ctx_in: TPrev['_ctx_in'];
15
23
  _ctx_out: Overwrite<TPrev['_ctx_out'], TNext['_ctx_out']>;
@@ -26,6 +34,7 @@ export interface ProcedureBuilder<TParams extends ProcedureParams> {
26
34
  input<$TParser extends Parser>(
27
35
  schema: $TParser,
28
36
  ): ProcedureBuilder<{
37
+ _config: TParams['_config'];
29
38
  _meta: TParams['_meta'];
30
39
  _ctx_in: TParams['_ctx_in'];
31
40
  _ctx_out: TParams['_ctx_out'];
@@ -40,6 +49,7 @@ export interface ProcedureBuilder<TParams extends ProcedureParams> {
40
49
  output<$TParser extends Parser>(
41
50
  schema: $TParser,
42
51
  ): ProcedureBuilder<{
52
+ _config: TParams['_config'];
43
53
  _meta: TParams['_meta'];
44
54
  _ctx_in: TParams['_ctx_in'];
45
55
  _ctx_out: TParams['_ctx_out'];
@@ -67,9 +77,8 @@ export interface ProcedureBuilder<TParams extends ProcedureParams> {
67
77
  ): $ProcedureReturnInput extends ProcedureBuilder<infer $TParams>
68
78
  ? CreateProcedureReturnInput<TParams, $TParams>
69
79
  : never;
70
- /**
71
- * Resolve the procedure
72
- */
80
+
81
+ /** @deprecated **/
73
82
  resolve<$TOutput>(
74
83
  resolver: (
75
84
  opts: ResolveOptions<TParams>,
@@ -85,17 +94,91 @@ export interface ProcedureBuilder<TParams extends ProcedureParams> {
85
94
  >
86
95
  >
87
96
  : Procedure<TParams>;
97
+ /**
98
+ * Query procedure
99
+ */
100
+ query<$TOutput>(
101
+ resolver: (
102
+ opts: ResolveOptions<TParams>,
103
+ ) => MaybePromise<FallbackValue<TParams['_output_in'], $TOutput>>,
104
+ ): UnsetMarker extends TParams['_output_out']
105
+ ? QueryProcedure<
106
+ Overwrite<
107
+ TParams,
108
+ {
109
+ _output_in: $TOutput;
110
+ _output_out: $TOutput;
111
+ }
112
+ >
113
+ >
114
+ : QueryProcedure<TParams>;
115
+ /**
116
+ * Query procedure
117
+ */
118
+ query<$TOutput>(
119
+ resolver: (
120
+ opts: ResolveOptions<TParams>,
121
+ ) => MaybePromise<FallbackValue<TParams['_output_in'], $TOutput>>,
122
+ ): UnsetMarker extends TParams['_output_out']
123
+ ? QueryProcedure<
124
+ Overwrite<
125
+ TParams,
126
+ {
127
+ _output_in: $TOutput;
128
+ _output_out: $TOutput;
129
+ }
130
+ >
131
+ >
132
+ : QueryProcedure<TParams>;
133
+
134
+ /**
135
+ * Mutation procedure
136
+ */
137
+ mutation<$TOutput>(
138
+ resolver: (
139
+ opts: ResolveOptions<TParams>,
140
+ ) => MaybePromise<FallbackValue<TParams['_output_in'], $TOutput>>,
141
+ ): UnsetMarker extends TParams['_output_out']
142
+ ? MutationProcedure<
143
+ Overwrite<
144
+ TParams,
145
+ {
146
+ _output_in: $TOutput;
147
+ _output_out: $TOutput;
148
+ }
149
+ >
150
+ >
151
+ : MutationProcedure<TParams>;
152
+
153
+ /**
154
+ * Mutation procedure
155
+ */
156
+ subscription<$TOutput>(
157
+ resolver: (
158
+ opts: ResolveOptions<TParams>,
159
+ ) => MaybePromise<FallbackValue<TParams['_output_in'], $TOutput>>,
160
+ ): UnsetMarker extends TParams['_output_out']
161
+ ? SubscriptionProcedure<
162
+ Overwrite<
163
+ TParams,
164
+ {
165
+ _output_in: $TOutput;
166
+ _output_out: $TOutput;
167
+ }
168
+ >
169
+ >
170
+ : SubscriptionProcedure<TParams>;
88
171
  }
89
172
 
90
- // TODO make this into a callbag?
91
- export function createBuilder<TContext, TMeta>(): ProcedureBuilder<{
92
- _ctx_in: TContext;
93
- _ctx_out: TContext;
173
+ export function createBuilder<TConfig extends RootConfig>(): ProcedureBuilder<{
174
+ _config: TConfig;
175
+ _ctx_in: TConfig['ctx'];
176
+ _ctx_out: TConfig['ctx'];
94
177
  _input_out: UnsetMarker;
95
178
  _input_in: UnsetMarker;
96
179
  _output_in: UnsetMarker;
97
180
  _output_out: UnsetMarker;
98
- _meta: TMeta;
181
+ _meta: TConfig['meta'];
99
182
  }> {
100
183
  return createInternalBuilder() as any;
101
184
  }
@@ -1,3 +1,4 @@
1
+ import { RootConfig } from './internals/config';
1
2
  import { MiddlewareMarker } from './internals/utils';
2
3
  import { ProcedureParams } from './procedure';
3
4
  import { ProcedureType } from './types';
@@ -57,6 +58,7 @@ export type MiddlewareFunction<
57
58
  (): Promise<MiddlewareResult<TParams>>;
58
59
  <$TContext>(opts: { ctx: $TContext }): Promise<
59
60
  MiddlewareResult<{
61
+ _config: any;
60
62
  _ctx_in: TParams['_ctx_in'];
61
63
  _ctx_out: $TContext;
62
64
  _input_in: TParams['_input_in'];
@@ -73,17 +75,18 @@ export type MiddlewareFunction<
73
75
  * @internal
74
76
  */
75
77
  // FIXME this should use RootConfig
76
- export function createMiddlewareFactory<TContext, TMeta>() {
78
+ export function createMiddlewareFactory<TConfig extends RootConfig>() {
77
79
  return function createMiddleware<$TNewParams extends ProcedureParams>(
78
80
  fn: MiddlewareFunction<
79
81
  {
80
- _ctx_in: TContext;
81
- _ctx_out: TContext;
82
+ _config: TConfig;
83
+ _ctx_in: TConfig['ctx'];
84
+ _ctx_out: TConfig['ctx'];
82
85
  _input_out: unknown;
83
86
  _input_in: unknown;
84
87
  _output_in: unknown;
85
88
  _output_out: unknown;
86
- _meta: TMeta;
89
+ _meta: TConfig['meta'];
87
90
  },
88
91
  $TNewParams
89
92
  >,
@@ -1,3 +1,6 @@
1
+ import { DefaultErrorShape } from '../error/formatter';
2
+ import { CombinedDataTransformer } from '../transformer';
3
+ import { RootConfig } from './internals/config';
1
4
  import { UnsetMarker } from './internals/utils';
2
5
 
3
6
  type ClientContext = Record<string, unknown>;
@@ -12,6 +15,12 @@ export interface ProcedureOptions {
12
15
  * @internal
13
16
  */
14
17
  export interface ProcedureParams<
18
+ TConfig extends RootConfig = {
19
+ transformer: CombinedDataTransformer;
20
+ errorShape: DefaultErrorShape;
21
+ ctx: Record<string, unknown>;
22
+ meta: Record<string, unknown>;
23
+ },
15
24
  TContextIn = unknown,
16
25
  TContextOut = unknown,
17
26
  TInputIn = unknown,
@@ -20,6 +29,8 @@ export interface ProcedureParams<
20
29
  TOutputOut = unknown,
21
30
  TMeta = unknown,
22
31
  > {
32
+ // FIXME make non-optional
33
+ _config: TConfig;
23
34
  /**
24
35
  * @internal
25
36
  */
@@ -63,10 +74,35 @@ export type ProcedureArgs<TParams extends ProcedureParams> =
63
74
  /**
64
75
  * @internal
65
76
  */
66
- export interface Procedure<TParams extends ProcedureParams> {
67
- (...args: ProcedureArgs<TParams>): Promise<TParams['_output_out']>;
77
+ export interface ProcedureBase<TParams extends ProcedureParams> {
78
+ _def: TParams;
68
79
  /**
69
80
  * @deprecated use `._def.meta` instead
70
81
  */
71
82
  meta?: TParams['_meta'];
83
+ _procedure: true;
72
84
  }
85
+
86
+ export interface QueryProcedure<TParams extends ProcedureParams>
87
+ extends ProcedureBase<TParams> {
88
+ _query: true;
89
+ query(...args: ProcedureArgs<TParams>): Promise<TParams['_output_out']>;
90
+ }
91
+
92
+ export interface MutationProcedure<TParams extends ProcedureParams>
93
+ extends ProcedureBase<TParams> {
94
+ _mutation: true;
95
+ mutate(...args: ProcedureArgs<TParams>): Promise<TParams['_output_out']>;
96
+ }
97
+
98
+ export interface SubscriptionProcedure<TParams extends ProcedureParams>
99
+ extends ProcedureBase<TParams> {
100
+ _subscription: true;
101
+ subscription(
102
+ ...args: ProcedureArgs<TParams>
103
+ ): Promise<TParams['_output_out']>;
104
+ }
105
+ export type Procedure<TParams extends ProcedureParams> =
106
+ | QueryProcedure<TParams>
107
+ | MutationProcedure<TParams>
108
+ | SubscriptionProcedure<TParams>;