@trpc/server 10.0.0-alpha.38 → 10.0.0-alpha.39
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.
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.dev.js +20 -0
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.prod.js +20 -0
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.esm.js +20 -0
- package/dist/adapters/aws-lambda/index.d.ts.map +1 -1
- package/dist/core/index.d.ts +2 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/initTRPC.d.ts +1 -1
- package/dist/core/internals/procedureBuilder.d.ts +37 -13
- package/dist/core/internals/procedureBuilder.d.ts.map +1 -1
- package/dist/core/procedure.d.ts +12 -8
- package/dist/core/procedure.d.ts.map +1 -1
- package/dist/core/router.d.ts +17 -3
- package/dist/core/router.d.ts.map +1 -1
- package/dist/core/types.d.ts +3 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index-1a25ccbd.js +33 -0
- package/dist/index-a3bd54c7.mjs +31 -0
- package/dist/index.js +186 -191
- package/dist/index.mjs +185 -192
- package/dist/shared/index.js +2 -28
- package/dist/shared/index.mjs +1 -31
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/adapters/aws-lambda/index.ts +17 -0
- package/src/core/index.ts +2 -1
- package/src/core/internals/procedureBuilder.ts +264 -28
- package/src/core/procedure.ts +17 -10
- package/src/core/router.ts +79 -78
- package/src/core/types.ts +5 -1
- package/src/deprecated/interop.ts +4 -4
- package/src/types.ts +12 -0
- package/dist/core/internals/internalProcedure.d.ts +0 -78
- package/dist/core/internals/internalProcedure.d.ts.map +0 -1
- package/src/core/internals/internalProcedure.ts +0 -297
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { CombinedDataTransformer, ProcedureParams, ProcedureType } from '..';
|
|
2
2
|
import { CreateRootConfig, RootConfig } from '../core/internals/config';
|
|
3
3
|
import { getParseFnOrPassThrough } from '../core/internals/getParseFn';
|
|
4
|
+
import { mergeWithoutOverrides } from '../core/internals/mergeWithoutOverrides';
|
|
4
5
|
import {
|
|
6
|
+
createBuilder,
|
|
5
7
|
createInputMiddleware,
|
|
6
|
-
createInternalBuilder,
|
|
7
8
|
createOutputMiddleware,
|
|
8
|
-
} from '../core/internals/
|
|
9
|
-
import { mergeWithoutOverrides } from '../core/internals/mergeWithoutOverrides';
|
|
9
|
+
} from '../core/internals/procedureBuilder';
|
|
10
10
|
import {
|
|
11
11
|
MutationProcedure,
|
|
12
12
|
Procedure as NewProcedure,
|
|
@@ -175,7 +175,7 @@ function migrateProcedure<
|
|
|
175
175
|
|
|
176
176
|
const inputMiddleware = createInputMiddleware(inputParser);
|
|
177
177
|
|
|
178
|
-
const builder =
|
|
178
|
+
const builder = createBuilder({
|
|
179
179
|
input: def.inputParser,
|
|
180
180
|
middlewares: [
|
|
181
181
|
...(def.middlewares as any),
|
package/src/types.ts
CHANGED
|
@@ -74,3 +74,15 @@ type FilterKeys<T extends object, K> = {
|
|
|
74
74
|
* @internal
|
|
75
75
|
*/
|
|
76
76
|
export type Filter<T extends object, K> = Pick<T, FilterKeys<T, K>>;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* @internal
|
|
80
|
+
*/
|
|
81
|
+
export type NeverKeys<T> = {
|
|
82
|
+
[TKey in keyof T]: T[TKey] extends never ? TKey : never;
|
|
83
|
+
}[keyof T];
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @internal
|
|
87
|
+
*/
|
|
88
|
+
export type OmitNeverKeys<T> = Omit<T, NeverKeys<T>>;
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { MaybePromise } from '../../types';
|
|
2
|
-
import { MiddlewareFunction } from '../middleware';
|
|
3
|
-
import { Parser } from '../parser';
|
|
4
|
-
import { ProcedureType } from '../types';
|
|
5
|
-
import { ParseFn } from './getParseFn';
|
|
6
|
-
import { ResolveOptions } from './utils';
|
|
7
|
-
export interface InternalProcedureCallOptions {
|
|
8
|
-
ctx: unknown;
|
|
9
|
-
rawInput: unknown;
|
|
10
|
-
input?: unknown;
|
|
11
|
-
path: string;
|
|
12
|
-
type: ProcedureType;
|
|
13
|
-
}
|
|
14
|
-
export interface InternalProcedure {
|
|
15
|
-
_def: ProcedureBuilderInternal['_def'];
|
|
16
|
-
/**
|
|
17
|
-
* @deprecated use `._def.meta` instead
|
|
18
|
-
*/
|
|
19
|
-
meta: ProcedureBuilderInternal['_def']['meta'];
|
|
20
|
-
mutation?: boolean;
|
|
21
|
-
query?: boolean;
|
|
22
|
-
subscription?: boolean;
|
|
23
|
-
(opts: InternalProcedureCallOptions): Promise<unknown>;
|
|
24
|
-
}
|
|
25
|
-
declare type ProcedureBuilderInternalResolver = (opts: ResolveOptions<any>) => Promise<unknown>;
|
|
26
|
-
export declare type ProcedureBuilderInternalMiddleware = MiddlewareFunction<any, any>;
|
|
27
|
-
declare type TResolver = (opts: ResolveOptions<any>) => MaybePromise<any>;
|
|
28
|
-
interface ProcedureBuilderInternal {
|
|
29
|
-
_def: {
|
|
30
|
-
input?: Parser;
|
|
31
|
-
output?: Parser;
|
|
32
|
-
meta?: Record<string, unknown>;
|
|
33
|
-
resolver?: ProcedureBuilderInternalResolver;
|
|
34
|
-
middlewares: ProcedureBuilderInternalMiddleware[];
|
|
35
|
-
mutation?: boolean;
|
|
36
|
-
query?: boolean;
|
|
37
|
-
subscription?: boolean;
|
|
38
|
-
};
|
|
39
|
-
/**
|
|
40
|
-
* @internal
|
|
41
|
-
*/
|
|
42
|
-
input: (parser: Parser) => ProcedureBuilderInternal;
|
|
43
|
-
/**
|
|
44
|
-
* @internal
|
|
45
|
-
*/
|
|
46
|
-
output: (parser: Parser) => ProcedureBuilderInternal;
|
|
47
|
-
/**
|
|
48
|
-
* @internal
|
|
49
|
-
*/
|
|
50
|
-
unstable_concat: (proc: ProcedureBuilderInternal) => ProcedureBuilderInternal;
|
|
51
|
-
/**
|
|
52
|
-
* @internal
|
|
53
|
-
*/
|
|
54
|
-
use: (fn: MiddlewareFunction<any, any>) => ProcedureBuilderInternal;
|
|
55
|
-
/**
|
|
56
|
-
* @internal
|
|
57
|
-
*/
|
|
58
|
-
meta: (meta: Record<string, unknown>) => ProcedureBuilderInternal;
|
|
59
|
-
/** @deprecated **/
|
|
60
|
-
resolve: (resolver: TResolver) => InternalProcedure;
|
|
61
|
-
/**
|
|
62
|
-
* @internal
|
|
63
|
-
*/
|
|
64
|
-
query: (resolver: TResolver) => InternalProcedure;
|
|
65
|
-
/**
|
|
66
|
-
* @internal
|
|
67
|
-
*/
|
|
68
|
-
mutation: (resolver: TResolver) => InternalProcedure;
|
|
69
|
-
/**
|
|
70
|
-
* @internal
|
|
71
|
-
*/
|
|
72
|
-
subscription: (resolver: TResolver) => InternalProcedure;
|
|
73
|
-
}
|
|
74
|
-
export declare function createInputMiddleware<T>(parse: ParseFn<T>): ProcedureBuilderInternalMiddleware;
|
|
75
|
-
export declare function createOutputMiddleware<T>(parse: ParseFn<T>): ProcedureBuilderInternalMiddleware;
|
|
76
|
-
export declare function createInternalBuilder(initDef?: ProcedureBuilderInternal['_def']): ProcedureBuilderInternal;
|
|
77
|
-
export {};
|
|
78
|
-
//# sourceMappingURL=internalProcedure.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"internalProcedure.d.ts","sourceRoot":"","sources":["../../../src/core/internals/internalProcedure.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,297 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This is the actual internal representation of a builder
|
|
3
|
-
* FIXME - I want to get rid of this and use the public API instead
|
|
4
|
-
*/
|
|
5
|
-
import { TRPCError } from '../../error/TRPCError';
|
|
6
|
-
import { getCauseFromUnknown } from '../../error/utils';
|
|
7
|
-
import { getErrorFromUnknown } from '../../error/utils';
|
|
8
|
-
import { MaybePromise } from '../../types';
|
|
9
|
-
import { MiddlewareFunction, MiddlewareResult } from '../middleware';
|
|
10
|
-
import { Parser } from '../parser';
|
|
11
|
-
import { ProcedureType } from '../types';
|
|
12
|
-
import { ParseFn, getParseFn } from './getParseFn';
|
|
13
|
-
import { mergeWithoutOverrides } from './mergeWithoutOverrides';
|
|
14
|
-
import { ResolveOptions, middlewareMarker } from './utils';
|
|
15
|
-
|
|
16
|
-
export interface InternalProcedureCallOptions {
|
|
17
|
-
ctx: unknown;
|
|
18
|
-
rawInput: unknown;
|
|
19
|
-
input?: unknown;
|
|
20
|
-
path: string;
|
|
21
|
-
type: ProcedureType;
|
|
22
|
-
}
|
|
23
|
-
export interface InternalProcedure {
|
|
24
|
-
_def: ProcedureBuilderInternal['_def'];
|
|
25
|
-
/**
|
|
26
|
-
* @deprecated use `._def.meta` instead
|
|
27
|
-
*/
|
|
28
|
-
meta: ProcedureBuilderInternal['_def']['meta'];
|
|
29
|
-
mutation?: boolean;
|
|
30
|
-
query?: boolean;
|
|
31
|
-
subscription?: boolean;
|
|
32
|
-
(opts: InternalProcedureCallOptions): Promise<unknown>;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
type ProcedureBuilderInternalResolver = (
|
|
36
|
-
opts: ResolveOptions<any>,
|
|
37
|
-
) => Promise<unknown>;
|
|
38
|
-
|
|
39
|
-
export type ProcedureBuilderInternalMiddleware = MiddlewareFunction<any, any>;
|
|
40
|
-
type TResolver = (opts: ResolveOptions<any>) => MaybePromise<any>;
|
|
41
|
-
|
|
42
|
-
interface ProcedureBuilderInternal {
|
|
43
|
-
_def: {
|
|
44
|
-
input?: Parser;
|
|
45
|
-
output?: Parser;
|
|
46
|
-
meta?: Record<string, unknown>;
|
|
47
|
-
resolver?: ProcedureBuilderInternalResolver;
|
|
48
|
-
middlewares: ProcedureBuilderInternalMiddleware[];
|
|
49
|
-
mutation?: boolean;
|
|
50
|
-
query?: boolean;
|
|
51
|
-
subscription?: boolean;
|
|
52
|
-
};
|
|
53
|
-
/**
|
|
54
|
-
* @internal
|
|
55
|
-
*/
|
|
56
|
-
input: (parser: Parser) => ProcedureBuilderInternal;
|
|
57
|
-
/**
|
|
58
|
-
* @internal
|
|
59
|
-
*/
|
|
60
|
-
output: (parser: Parser) => ProcedureBuilderInternal;
|
|
61
|
-
/**
|
|
62
|
-
* @internal
|
|
63
|
-
*/
|
|
64
|
-
unstable_concat: (proc: ProcedureBuilderInternal) => ProcedureBuilderInternal;
|
|
65
|
-
/**
|
|
66
|
-
* @internal
|
|
67
|
-
*/
|
|
68
|
-
use: (fn: MiddlewareFunction<any, any>) => ProcedureBuilderInternal;
|
|
69
|
-
/**
|
|
70
|
-
* @internal
|
|
71
|
-
*/
|
|
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
|
-
|
|
84
|
-
/**
|
|
85
|
-
* @internal
|
|
86
|
-
*/
|
|
87
|
-
subscription: (resolver: TResolver) => InternalProcedure;
|
|
88
|
-
}
|
|
89
|
-
function createNewInternalBuilder(
|
|
90
|
-
def1: ProcedureBuilderInternal['_def'],
|
|
91
|
-
def2: Partial<ProcedureBuilderInternal['_def']>,
|
|
92
|
-
): ProcedureBuilderInternal {
|
|
93
|
-
const { middlewares = [], ...rest } = def2;
|
|
94
|
-
|
|
95
|
-
// TODO: maybe have a fn here to warn about calls
|
|
96
|
-
return createInternalBuilder({
|
|
97
|
-
...mergeWithoutOverrides(def1, rest),
|
|
98
|
-
middlewares: [...def1.middlewares, ...middlewares],
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
const codeblock = `
|
|
103
|
-
If you want to call this function on the server, you do the following:
|
|
104
|
-
This is a client-only function.
|
|
105
|
-
|
|
106
|
-
const caller = appRouter.createCaller({
|
|
107
|
-
/* ... your context */
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
const result = await caller.call('myProcedure', input);
|
|
111
|
-
`.trim();
|
|
112
|
-
|
|
113
|
-
function createProcedureCaller(
|
|
114
|
-
_def: InternalProcedure['_def'],
|
|
115
|
-
): InternalProcedure {
|
|
116
|
-
const procedure = async function resolve(opts: InternalProcedureCallOptions) {
|
|
117
|
-
if (!opts || !('rawInput' in opts)) {
|
|
118
|
-
throw new Error(codeblock);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// run the middlewares recursively with the resolver as the last one
|
|
122
|
-
const callRecursive = async (
|
|
123
|
-
callOpts: { ctx: any; index: number; input?: unknown } = {
|
|
124
|
-
index: 0,
|
|
125
|
-
ctx: opts.ctx,
|
|
126
|
-
},
|
|
127
|
-
): Promise<MiddlewareResult<any>> => {
|
|
128
|
-
try {
|
|
129
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
130
|
-
const middleware = _def.middlewares[callOpts.index]!;
|
|
131
|
-
const result = await middleware({
|
|
132
|
-
ctx: callOpts.ctx,
|
|
133
|
-
type: opts.type,
|
|
134
|
-
path: opts.path,
|
|
135
|
-
rawInput: opts.rawInput,
|
|
136
|
-
meta: _def.meta,
|
|
137
|
-
input: callOpts.input,
|
|
138
|
-
next: async (nextOpts?: { ctx: any; input?: any }) => {
|
|
139
|
-
return await callRecursive({
|
|
140
|
-
index: callOpts.index + 1,
|
|
141
|
-
ctx:
|
|
142
|
-
nextOpts && 'ctx' in nextOpts
|
|
143
|
-
? { ...callOpts.ctx, ...nextOpts.ctx }
|
|
144
|
-
: callOpts.ctx,
|
|
145
|
-
input:
|
|
146
|
-
nextOpts && 'input' in nextOpts
|
|
147
|
-
? nextOpts.input
|
|
148
|
-
: callOpts.input,
|
|
149
|
-
});
|
|
150
|
-
},
|
|
151
|
-
});
|
|
152
|
-
return result;
|
|
153
|
-
} catch (cause) {
|
|
154
|
-
return {
|
|
155
|
-
ok: false,
|
|
156
|
-
error: getErrorFromUnknown(cause),
|
|
157
|
-
marker: middlewareMarker,
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
};
|
|
161
|
-
|
|
162
|
-
// there's always at least one "next" since we wrap this.resolver in a middleware
|
|
163
|
-
const result = await callRecursive();
|
|
164
|
-
|
|
165
|
-
if (!result) {
|
|
166
|
-
throw new TRPCError({
|
|
167
|
-
code: 'INTERNAL_SERVER_ERROR',
|
|
168
|
-
message:
|
|
169
|
-
'No result from middlewares - did you forget to `return next()`?',
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
if (!result.ok) {
|
|
173
|
-
// re-throw original error
|
|
174
|
-
throw result.error;
|
|
175
|
-
}
|
|
176
|
-
return result.data;
|
|
177
|
-
};
|
|
178
|
-
procedure._def = _def;
|
|
179
|
-
procedure.meta = _def.meta;
|
|
180
|
-
|
|
181
|
-
return procedure;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
export function createInputMiddleware<T>(
|
|
185
|
-
parse: ParseFn<T>,
|
|
186
|
-
): ProcedureBuilderInternalMiddleware {
|
|
187
|
-
return async function inputMiddleware({ next, rawInput }) {
|
|
188
|
-
let input: ReturnType<typeof parse>;
|
|
189
|
-
try {
|
|
190
|
-
input = await parse(rawInput);
|
|
191
|
-
} catch (cause) {
|
|
192
|
-
throw new TRPCError({
|
|
193
|
-
code: 'BAD_REQUEST',
|
|
194
|
-
cause: getCauseFromUnknown(cause),
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
// TODO fix this typing?
|
|
198
|
-
return next({ input } as any);
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
export function createOutputMiddleware<T>(
|
|
203
|
-
parse: ParseFn<T>,
|
|
204
|
-
): ProcedureBuilderInternalMiddleware {
|
|
205
|
-
return async function outputMiddleware({ next }) {
|
|
206
|
-
const result = await next();
|
|
207
|
-
if (!result.ok) {
|
|
208
|
-
// pass through failures without validating
|
|
209
|
-
return result;
|
|
210
|
-
}
|
|
211
|
-
try {
|
|
212
|
-
const data = await parse(result.data);
|
|
213
|
-
return {
|
|
214
|
-
...result,
|
|
215
|
-
data,
|
|
216
|
-
};
|
|
217
|
-
} catch (cause) {
|
|
218
|
-
throw new TRPCError({
|
|
219
|
-
message: 'Output validation failed',
|
|
220
|
-
code: 'INTERNAL_SERVER_ERROR',
|
|
221
|
-
cause: getCauseFromUnknown(cause),
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
function createResolver(
|
|
228
|
-
_def: ProcedureBuilderInternal['_def'],
|
|
229
|
-
resolver: TResolver,
|
|
230
|
-
) {
|
|
231
|
-
const finalBuilder = createNewInternalBuilder(_def, {
|
|
232
|
-
resolver,
|
|
233
|
-
middlewares: [
|
|
234
|
-
async function resolveMiddleware(opts) {
|
|
235
|
-
const data = await resolver(opts);
|
|
236
|
-
return {
|
|
237
|
-
marker: middlewareMarker,
|
|
238
|
-
ok: true,
|
|
239
|
-
data,
|
|
240
|
-
ctx: opts.ctx,
|
|
241
|
-
} as const;
|
|
242
|
-
},
|
|
243
|
-
],
|
|
244
|
-
});
|
|
245
|
-
|
|
246
|
-
return createProcedureCaller(finalBuilder._def);
|
|
247
|
-
}
|
|
248
|
-
export function createInternalBuilder(
|
|
249
|
-
initDef?: ProcedureBuilderInternal['_def'],
|
|
250
|
-
): ProcedureBuilderInternal {
|
|
251
|
-
const _def: ProcedureBuilderInternal['_def'] = initDef || {
|
|
252
|
-
middlewares: [],
|
|
253
|
-
};
|
|
254
|
-
|
|
255
|
-
return {
|
|
256
|
-
_def,
|
|
257
|
-
// _call: createProcedureCaller(_def),
|
|
258
|
-
input(input: Parser) {
|
|
259
|
-
const parser = getParseFn(input);
|
|
260
|
-
return createNewInternalBuilder(_def, {
|
|
261
|
-
input,
|
|
262
|
-
middlewares: [createInputMiddleware(parser)],
|
|
263
|
-
});
|
|
264
|
-
},
|
|
265
|
-
output(output: Parser) {
|
|
266
|
-
const parseOutput = getParseFn(output);
|
|
267
|
-
return createNewInternalBuilder(_def, {
|
|
268
|
-
output,
|
|
269
|
-
middlewares: [createOutputMiddleware(parseOutput)],
|
|
270
|
-
});
|
|
271
|
-
},
|
|
272
|
-
meta(meta) {
|
|
273
|
-
return createNewInternalBuilder(_def, { meta });
|
|
274
|
-
},
|
|
275
|
-
/** @deprecated **/
|
|
276
|
-
resolve(resolver) {
|
|
277
|
-
return createResolver(_def, resolver);
|
|
278
|
-
},
|
|
279
|
-
unstable_concat(builder) {
|
|
280
|
-
return createNewInternalBuilder(_def, builder._def);
|
|
281
|
-
},
|
|
282
|
-
use(middleware) {
|
|
283
|
-
return createNewInternalBuilder(_def, {
|
|
284
|
-
middlewares: [middleware],
|
|
285
|
-
});
|
|
286
|
-
},
|
|
287
|
-
query(resolver) {
|
|
288
|
-
return createResolver({ ..._def, query: true }, resolver);
|
|
289
|
-
},
|
|
290
|
-
mutation(resolver) {
|
|
291
|
-
return createResolver({ ..._def, mutation: true }, resolver);
|
|
292
|
-
},
|
|
293
|
-
subscription(resolver) {
|
|
294
|
-
return createResolver({ ..._def, subscription: true }, resolver);
|
|
295
|
-
},
|
|
296
|
-
};
|
|
297
|
-
}
|