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

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 +3 -21
  6. package/dist/core/initTRPC.d.ts.map +1 -1
  7. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts +41 -81
  8. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts.map +1 -1
  9. package/dist/core/internals/config.d.ts +1 -3
  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 +35 -8
  17. package/dist/core/internals/procedureBuilder.d.ts.map +1 -1
  18. package/dist/core/middleware.d.ts +8 -7
  19. package/dist/core/middleware.d.ts.map +1 -1
  20. package/dist/core/procedure.d.ts +14 -2
  21. package/dist/core/procedure.d.ts.map +1 -1
  22. package/dist/core/router.d.ts +42 -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 +8 -24
  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 +94 -58
  31. package/dist/index.mjs +94 -58
  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 +6 -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 +284 -324
  44. package/src/core/internals/config.ts +1 -3
  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 +88 -9
  49. package/src/core/middleware.ts +5 -4
  50. package/src/core/procedure.ts +25 -2
  51. package/src/core/router.ts +112 -134
  52. package/src/core/types.ts +31 -15
  53. package/src/deprecated/interop.ts +64 -37
  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 +7 -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
@@ -31,9 +31,7 @@ export type CreateInitGenerics<T extends InitGenerics> = T;
31
31
  * Combination of `InitTOptions` + `InitGenerics`
32
32
  * @internal
33
33
  */
34
- export interface RootConfig {
35
- ctx: Record<string, unknown>;
36
- meta: Record<string, unknown>;
34
+ export interface RootConfig extends InitGenerics {
37
35
  transformer: CombinedDataTransformer;
38
36
  errorShape: DefaultErrorShape;
39
37
  }
@@ -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 procedures = 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.procedures),
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
+ })(procedures);
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';
@@ -67,9 +74,8 @@ export interface ProcedureBuilder<TParams extends ProcedureParams> {
67
74
  ): $ProcedureReturnInput extends ProcedureBuilder<infer $TParams>
68
75
  ? CreateProcedureReturnInput<TParams, $TParams>
69
76
  : never;
70
- /**
71
- * Resolve the procedure
72
- */
77
+
78
+ /** @deprecated **/
73
79
  resolve<$TOutput>(
74
80
  resolver: (
75
81
  opts: ResolveOptions<TParams>,
@@ -85,17 +91,90 @@ export interface ProcedureBuilder<TParams extends ProcedureParams> {
85
91
  >
86
92
  >
87
93
  : Procedure<TParams>;
94
+ /**
95
+ * Query procedure
96
+ */
97
+ query<$TOutput>(
98
+ resolver: (
99
+ opts: ResolveOptions<TParams>,
100
+ ) => MaybePromise<FallbackValue<TParams['_output_in'], $TOutput>>,
101
+ ): UnsetMarker extends TParams['_output_out']
102
+ ? QueryProcedure<
103
+ Overwrite<
104
+ TParams,
105
+ {
106
+ _output_in: $TOutput;
107
+ _output_out: $TOutput;
108
+ }
109
+ >
110
+ >
111
+ : QueryProcedure<TParams>;
112
+ /**
113
+ * Query procedure
114
+ */
115
+ query<$TOutput>(
116
+ resolver: (
117
+ opts: ResolveOptions<TParams>,
118
+ ) => MaybePromise<FallbackValue<TParams['_output_in'], $TOutput>>,
119
+ ): UnsetMarker extends TParams['_output_out']
120
+ ? QueryProcedure<
121
+ Overwrite<
122
+ TParams,
123
+ {
124
+ _output_in: $TOutput;
125
+ _output_out: $TOutput;
126
+ }
127
+ >
128
+ >
129
+ : QueryProcedure<TParams>;
130
+
131
+ /**
132
+ * Mutation procedure
133
+ */
134
+ mutation<$TOutput>(
135
+ resolver: (
136
+ opts: ResolveOptions<TParams>,
137
+ ) => MaybePromise<FallbackValue<TParams['_output_in'], $TOutput>>,
138
+ ): UnsetMarker extends TParams['_output_out']
139
+ ? MutationProcedure<
140
+ Overwrite<
141
+ TParams,
142
+ {
143
+ _output_in: $TOutput;
144
+ _output_out: $TOutput;
145
+ }
146
+ >
147
+ >
148
+ : MutationProcedure<TParams>;
149
+
150
+ /**
151
+ * Mutation procedure
152
+ */
153
+ subscription<$TOutput>(
154
+ resolver: (
155
+ opts: ResolveOptions<TParams>,
156
+ ) => MaybePromise<FallbackValue<TParams['_output_in'], $TOutput>>,
157
+ ): UnsetMarker extends TParams['_output_out']
158
+ ? SubscriptionProcedure<
159
+ Overwrite<
160
+ TParams,
161
+ {
162
+ _output_in: $TOutput;
163
+ _output_out: $TOutput;
164
+ }
165
+ >
166
+ >
167
+ : SubscriptionProcedure<TParams>;
88
168
  }
89
169
 
90
- // TODO make this into a callbag?
91
- export function createBuilder<TContext, TMeta>(): ProcedureBuilder<{
92
- _ctx_in: TContext;
93
- _ctx_out: TContext;
170
+ export function createBuilder<TConfig extends RootConfig>(): ProcedureBuilder<{
171
+ _ctx_in: TConfig['ctx'];
172
+ _ctx_out: TConfig['ctx'];
94
173
  _input_out: UnsetMarker;
95
174
  _input_in: UnsetMarker;
96
175
  _output_in: UnsetMarker;
97
176
  _output_out: UnsetMarker;
98
- _meta: TMeta;
177
+ _meta: TConfig['meta'];
99
178
  }> {
100
179
  return createInternalBuilder() as any;
101
180
  }
@@ -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';
@@ -73,17 +74,17 @@ export type MiddlewareFunction<
73
74
  * @internal
74
75
  */
75
76
  // FIXME this should use RootConfig
76
- export function createMiddlewareFactory<TContext, TMeta>() {
77
+ export function createMiddlewareFactory<TConfig extends RootConfig>() {
77
78
  return function createMiddleware<$TNewParams extends ProcedureParams>(
78
79
  fn: MiddlewareFunction<
79
80
  {
80
- _ctx_in: TContext;
81
- _ctx_out: TContext;
81
+ _ctx_in: TConfig['ctx'];
82
+ _ctx_out: TConfig['ctx'];
82
83
  _input_out: unknown;
83
84
  _input_in: unknown;
84
85
  _output_in: unknown;
85
86
  _output_out: unknown;
86
- _meta: TMeta;
87
+ _meta: TConfig['meta'];
87
88
  },
88
89
  $TNewParams
89
90
  >,
@@ -63,10 +63,33 @@ export type ProcedureArgs<TParams extends ProcedureParams> =
63
63
  /**
64
64
  * @internal
65
65
  */
66
- export interface Procedure<TParams extends ProcedureParams> {
67
- (...args: ProcedureArgs<TParams>): Promise<TParams['_output_out']>;
66
+ export interface ProcedureBase<TParams extends ProcedureParams> {
68
67
  /**
69
68
  * @deprecated use `._def.meta` instead
70
69
  */
71
70
  meta?: TParams['_meta'];
72
71
  }
72
+
73
+ export interface QueryProcedure<TParams extends ProcedureParams>
74
+ extends ProcedureBase<TParams> {
75
+ _query: true;
76
+ query(...args: ProcedureArgs<TParams>): Promise<TParams['_output_out']>;
77
+ }
78
+
79
+ export interface MutationProcedure<TParams extends ProcedureParams>
80
+ extends ProcedureBase<TParams> {
81
+ _mutation: true;
82
+ mutate(...args: ProcedureArgs<TParams>): Promise<TParams['_output_out']>;
83
+ }
84
+
85
+ export interface SubscriptionProcedure<TParams extends ProcedureParams>
86
+ extends ProcedureBase<TParams> {
87
+ _subscription: true;
88
+ subscription(
89
+ ...args: ProcedureArgs<TParams>
90
+ ): Promise<TParams['_output_out']>;
91
+ }
92
+ export type Procedure<TParams extends ProcedureParams> =
93
+ | QueryProcedure<TParams>
94
+ | MutationProcedure<TParams>
95
+ | SubscriptionProcedure<TParams>;