@trpc/server 10.0.0-proxy-beta.4 → 10.0.0-proxy-beta.6
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/dist/{TRPCError-e99e7cbe.mjs → TRPCError-281ac25a.mjs} +1 -1
- package/dist/adapters/aws-lambda/index.js +3 -3
- package/dist/adapters/aws-lambda/index.mjs +4 -4
- package/dist/adapters/express.js +3 -3
- package/dist/adapters/express.mjs +4 -4
- package/dist/adapters/fastify/index.js +2 -2
- package/dist/adapters/fastify/index.mjs +3 -3
- package/dist/adapters/fetch/index.js +2 -2
- package/dist/adapters/fetch/index.mjs +3 -3
- package/dist/adapters/next.js +3 -3
- package/dist/adapters/next.mjs +4 -4
- package/dist/adapters/node-http/index.js +3 -3
- package/dist/adapters/node-http/index.mjs +4 -4
- package/dist/adapters/standalone.d.ts +1 -1
- package/dist/adapters/standalone.js +4 -4
- package/dist/adapters/standalone.mjs +5 -5
- package/dist/adapters/ws.mjs +1 -1
- package/dist/{codes-731f0a7c.js → codes-76c38a34.js} +1 -0
- package/dist/{codes-f164ac85.mjs → codes-7d21f749.mjs} +1 -0
- package/dist/error/TRPCError.d.ts +1 -1
- package/dist/error/TRPCError.d.ts.map +1 -1
- package/dist/http/internals/getHTTPStatusCode.d.ts +1 -0
- package/dist/http/internals/getHTTPStatusCode.d.ts.map +1 -1
- package/dist/index.js +7 -7
- package/dist/index.mjs +6 -5
- package/dist/{nodeHTTPRequestHandler-ffd87be6.mjs → nodeHTTPRequestHandler-b59d2c10.mjs} +2 -2
- package/dist/{nodeHTTPRequestHandler-407721f8.js → nodeHTTPRequestHandler-d30a4185.js} +1 -1
- package/dist/{resolveHTTPResponse-a52a77cb.js → resolveHTTPResponse-0a8e47b8.js} +4 -275
- package/dist/{resolveHTTPResponse-3c852af0.mjs → resolveHTTPResponse-24d99c94.mjs} +6 -272
- package/dist/{router-a33b17a3.mjs → router-6e04fa44.mjs} +274 -7
- package/dist/{router-c87a28f9.js → router-bf52be2e.js} +280 -9
- package/dist/rpc/codes.d.ts +2 -0
- package/dist/rpc/codes.d.ts.map +1 -1
- package/dist/rpc/index.js +1 -1
- package/dist/rpc/index.mjs +1 -1
- package/dist/subscription.mjs +1 -1
- package/package.json +25 -12
- package/src/http/internals/getHTTPStatusCode.ts +1 -0
- package/src/rpc/codes.ts +1 -0
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.d.ts +0 -1
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.dev.js +0 -190
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.js +0 -7
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.prod.js +0 -190
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.esm.js +0 -186
- package/adapters/express/dist/trpc-server-adapters-express.cjs.d.ts +0 -1
- package/adapters/express/dist/trpc-server-adapters-express.cjs.dev.js +0 -23
- package/adapters/express/dist/trpc-server-adapters-express.cjs.js +0 -7
- package/adapters/express/dist/trpc-server-adapters-express.cjs.prod.js +0 -23
- package/adapters/express/dist/trpc-server-adapters-express.esm.js +0 -19
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.d.ts +0 -1
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.dev.js +0 -109
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.js +0 -7
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.prod.js +0 -109
- package/adapters/fastify/dist/trpc-server-adapters-fastify.esm.js +0 -104
- package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.d.ts +0 -1
- package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.dev.js +0 -25
- package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.js +0 -7
- package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.prod.js +0 -25
- package/adapters/lambda/dist/trpc-server-adapters-lambda.esm.js +0 -21
- package/adapters/next/dist/trpc-server-adapters-next.cjs.d.ts +0 -1
- package/adapters/next/dist/trpc-server-adapters-next.cjs.dev.js +0 -56
- package/adapters/next/dist/trpc-server-adapters-next.cjs.js +0 -7
- package/adapters/next/dist/trpc-server-adapters-next.cjs.prod.js +0 -56
- package/adapters/next/dist/trpc-server-adapters-next.esm.js +0 -52
- package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.d.ts +0 -1
- package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.dev.js +0 -13
- package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.js +0 -7
- package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.prod.js +0 -13
- package/adapters/node-http/dist/trpc-server-adapters-node-http.esm.js +0 -5
- package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.d.ts +0 -1
- package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.dev.js +0 -46
- package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.js +0 -7
- package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.prod.js +0 -46
- package/adapters/standalone/dist/trpc-server-adapters-standalone.esm.js +0 -36
- package/adapters/ws/dist/trpc-server-adapters-ws.cjs.d.ts +0 -1
- package/adapters/ws/dist/trpc-server-adapters-ws.cjs.dev.js +0 -363
- package/adapters/ws/dist/trpc-server-adapters-ws.cjs.js +0 -7
- package/adapters/ws/dist/trpc-server-adapters-ws.cjs.prod.js +0 -363
- package/adapters/ws/dist/trpc-server-adapters-ws.esm.js +0 -359
- package/rpc/dist/trpc-server-rpc.cjs.d.ts +0 -1
- package/rpc/dist/trpc-server-rpc.cjs.dev.js +0 -10
- package/rpc/dist/trpc-server-rpc.cjs.js +0 -7
- package/rpc/dist/trpc-server-rpc.cjs.prod.js +0 -10
- package/rpc/dist/trpc-server-rpc.esm.js +0 -1
|
@@ -1,6 +1,273 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { T as TRPC_ERROR_CODES_BY_KEY } from './codes-
|
|
3
|
-
import { T as TRPCError,
|
|
1
|
+
import { m as mergeWithoutOverrides, b as assertNotBrowser, c as createRouterFactory, d as defaultFormatter, f as getHTTPStatusCodeFromError, a as defaultTransformer } from './resolveHTTPResponse-24d99c94.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
|
+
}
|
|
4
271
|
|
|
5
272
|
assertNotBrowser();
|
|
6
273
|
|
|
@@ -87,7 +354,7 @@ function getParseFn(procedureParser) {
|
|
|
87
354
|
data,
|
|
88
355
|
ctx
|
|
89
356
|
};
|
|
90
|
-
}
|
|
357
|
+
}
|
|
91
358
|
]);
|
|
92
359
|
// run the middlewares recursively with the resolver as the last one
|
|
93
360
|
const callRecursive = async (callOpts = {
|
|
@@ -192,7 +459,7 @@ function migrateProcedure(oldProc, type) {
|
|
|
192
459
|
middlewares: [
|
|
193
460
|
...def.middlewares,
|
|
194
461
|
inputMiddleware,
|
|
195
|
-
createOutputMiddleware(outputParser)
|
|
462
|
+
createOutputMiddleware(outputParser)
|
|
196
463
|
],
|
|
197
464
|
meta: def.meta,
|
|
198
465
|
output: def.outputParser,
|
|
@@ -296,7 +563,7 @@ function safeObject(...args) {
|
|
|
296
563
|
const duplicates = [
|
|
297
564
|
...duplicateQueries,
|
|
298
565
|
...duplicateMutations,
|
|
299
|
-
...duplicateSubscriptions
|
|
566
|
+
...duplicateSubscriptions
|
|
300
567
|
];
|
|
301
568
|
if (duplicates.length) {
|
|
302
569
|
throw new Error(`Duplicate endpoint(s): ${duplicates.join(', ')}`);
|
|
@@ -448,4 +715,4 @@ function safeObject(...args) {
|
|
|
448
715
|
return new Router();
|
|
449
716
|
}
|
|
450
717
|
|
|
451
|
-
export { router as r };
|
|
718
|
+
export { createMiddlewareFactory as a, createInputMiddleware as b, createBuilder as c, createOutputMiddleware as d, router as r };
|
|
@@ -1,9 +1,276 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var resolveHTTPResponse = require('./resolveHTTPResponse-
|
|
4
|
-
var codes = require('./codes-
|
|
3
|
+
var resolveHTTPResponse = require('./resolveHTTPResponse-0a8e47b8.js');
|
|
4
|
+
var codes = require('./codes-76c38a34.js');
|
|
5
5
|
var TRPCError = require('./TRPCError-fe9113e5.js');
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* @internal
|
|
9
|
+
*/ // FIXME this should use RootConfig
|
|
10
|
+
function createMiddlewareFactory() {
|
|
11
|
+
return function createMiddleware(fn) {
|
|
12
|
+
return fn;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function isPlainObject(obj) {
|
|
16
|
+
return obj && typeof obj === 'object' && !Array.isArray(obj);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* @internal
|
|
20
|
+
* Please note, `trpc-openapi` uses this function.
|
|
21
|
+
*/ function createInputMiddleware(parse) {
|
|
22
|
+
const inputMiddleware = async ({ next , rawInput , input , })=>{
|
|
23
|
+
let parsedInput;
|
|
24
|
+
try {
|
|
25
|
+
parsedInput = await parse(rawInput);
|
|
26
|
+
} catch (cause) {
|
|
27
|
+
throw new TRPCError.TRPCError({
|
|
28
|
+
code: 'BAD_REQUEST',
|
|
29
|
+
cause: TRPCError.getCauseFromUnknown(cause)
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
// Multiple input parsers
|
|
33
|
+
const combinedInput = isPlainObject(input) && isPlainObject(parsedInput) ? {
|
|
34
|
+
...input,
|
|
35
|
+
...parsedInput
|
|
36
|
+
} : parsedInput;
|
|
37
|
+
// TODO fix this typing?
|
|
38
|
+
return next({
|
|
39
|
+
input: combinedInput
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
inputMiddleware._type = 'input';
|
|
43
|
+
return inputMiddleware;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @internal
|
|
47
|
+
*/ function createOutputMiddleware(parse) {
|
|
48
|
+
const outputMiddleware = async ({ next })=>{
|
|
49
|
+
const result = await next();
|
|
50
|
+
if (!result.ok) {
|
|
51
|
+
// pass through failures without validating
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
const data = await parse(result.data);
|
|
56
|
+
return {
|
|
57
|
+
...result,
|
|
58
|
+
data
|
|
59
|
+
};
|
|
60
|
+
} catch (cause) {
|
|
61
|
+
throw new TRPCError.TRPCError({
|
|
62
|
+
message: 'Output validation failed',
|
|
63
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
64
|
+
cause: TRPCError.getCauseFromUnknown(cause)
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
outputMiddleware._type = 'output';
|
|
69
|
+
return outputMiddleware;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function getParseFn$1(procedureParser) {
|
|
73
|
+
const parser = procedureParser;
|
|
74
|
+
if (typeof parser === 'function') {
|
|
75
|
+
// ProcedureParserCustomValidatorEsque
|
|
76
|
+
return parser;
|
|
77
|
+
}
|
|
78
|
+
if (typeof parser.parseAsync === 'function') {
|
|
79
|
+
// ProcedureParserZodEsque
|
|
80
|
+
return parser.parseAsync.bind(parser);
|
|
81
|
+
}
|
|
82
|
+
if (typeof parser.parse === 'function') {
|
|
83
|
+
// ProcedureParserZodEsque
|
|
84
|
+
return parser.parse.bind(parser);
|
|
85
|
+
}
|
|
86
|
+
if (typeof parser.validateSync === 'function') {
|
|
87
|
+
// ProcedureParserYupEsque
|
|
88
|
+
return parser.validateSync.bind(parser);
|
|
89
|
+
}
|
|
90
|
+
if (typeof parser.create === 'function') {
|
|
91
|
+
// ProcedureParserSuperstructEsque
|
|
92
|
+
return parser.create.bind(parser);
|
|
93
|
+
}
|
|
94
|
+
throw new Error('Could not find a validator fn');
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* @deprecated only for backwards compat
|
|
98
|
+
* @internal
|
|
99
|
+
*/ function getParseFnOrPassThrough(procedureParser) {
|
|
100
|
+
if (!procedureParser) {
|
|
101
|
+
return (v)=>v;
|
|
102
|
+
}
|
|
103
|
+
return getParseFn$1(procedureParser);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* @internal
|
|
108
|
+
*/ const middlewareMarker$1 = 'middlewareMarker';
|
|
109
|
+
|
|
110
|
+
function createNewBuilder(def1, def2) {
|
|
111
|
+
const { middlewares =[] , inputs , ...rest } = def2;
|
|
112
|
+
// TODO: maybe have a fn here to warn about calls
|
|
113
|
+
return createBuilder({
|
|
114
|
+
...resolveHTTPResponse.mergeWithoutOverrides(def1, rest),
|
|
115
|
+
inputs: [
|
|
116
|
+
...def1.inputs,
|
|
117
|
+
...inputs ?? []
|
|
118
|
+
],
|
|
119
|
+
middlewares: [
|
|
120
|
+
...def1.middlewares,
|
|
121
|
+
...middlewares
|
|
122
|
+
]
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
function createBuilder(initDef) {
|
|
126
|
+
const _def = initDef || {
|
|
127
|
+
inputs: [],
|
|
128
|
+
middlewares: []
|
|
129
|
+
};
|
|
130
|
+
return {
|
|
131
|
+
_def,
|
|
132
|
+
input (input) {
|
|
133
|
+
const parser = getParseFn$1(input);
|
|
134
|
+
return createNewBuilder(_def, {
|
|
135
|
+
inputs: [
|
|
136
|
+
input
|
|
137
|
+
],
|
|
138
|
+
middlewares: [
|
|
139
|
+
createInputMiddleware(parser)
|
|
140
|
+
]
|
|
141
|
+
});
|
|
142
|
+
},
|
|
143
|
+
output (output) {
|
|
144
|
+
const parseOutput = getParseFn$1(output);
|
|
145
|
+
return createNewBuilder(_def, {
|
|
146
|
+
output,
|
|
147
|
+
middlewares: [
|
|
148
|
+
createOutputMiddleware(parseOutput)
|
|
149
|
+
]
|
|
150
|
+
});
|
|
151
|
+
},
|
|
152
|
+
meta (meta) {
|
|
153
|
+
return createNewBuilder(_def, {
|
|
154
|
+
meta: meta
|
|
155
|
+
});
|
|
156
|
+
},
|
|
157
|
+
unstable_concat (builder) {
|
|
158
|
+
return createNewBuilder(_def, builder._def);
|
|
159
|
+
},
|
|
160
|
+
use (middleware) {
|
|
161
|
+
return createNewBuilder(_def, {
|
|
162
|
+
middlewares: [
|
|
163
|
+
middleware
|
|
164
|
+
]
|
|
165
|
+
});
|
|
166
|
+
},
|
|
167
|
+
query (resolver) {
|
|
168
|
+
return createResolver({
|
|
169
|
+
..._def,
|
|
170
|
+
query: true
|
|
171
|
+
}, resolver);
|
|
172
|
+
},
|
|
173
|
+
mutation (resolver) {
|
|
174
|
+
return createResolver({
|
|
175
|
+
..._def,
|
|
176
|
+
mutation: true
|
|
177
|
+
}, resolver);
|
|
178
|
+
},
|
|
179
|
+
subscription (resolver) {
|
|
180
|
+
return createResolver({
|
|
181
|
+
..._def,
|
|
182
|
+
subscription: true
|
|
183
|
+
}, resolver);
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
function createResolver(_def, resolver) {
|
|
188
|
+
const finalBuilder = createNewBuilder(_def, {
|
|
189
|
+
resolver,
|
|
190
|
+
middlewares: [
|
|
191
|
+
async function resolveMiddleware(opts) {
|
|
192
|
+
const data = await resolver(opts);
|
|
193
|
+
return {
|
|
194
|
+
marker: middlewareMarker$1,
|
|
195
|
+
ok: true,
|
|
196
|
+
data,
|
|
197
|
+
ctx: opts.ctx
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
]
|
|
201
|
+
});
|
|
202
|
+
return createProcedureCaller(finalBuilder._def);
|
|
203
|
+
}
|
|
204
|
+
const codeblock = `
|
|
205
|
+
If you want to call this function on the server, you do the following:
|
|
206
|
+
This is a client-only function.
|
|
207
|
+
|
|
208
|
+
const caller = appRouter.createCaller({
|
|
209
|
+
/* ... your context */
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
const result = await caller.call('myProcedure', input);
|
|
213
|
+
`.trim();
|
|
214
|
+
function createProcedureCaller(_def) {
|
|
215
|
+
const procedure = async function resolve(opts) {
|
|
216
|
+
// is direct server-side call
|
|
217
|
+
if (!opts || !('rawInput' in opts)) {
|
|
218
|
+
throw new Error(codeblock);
|
|
219
|
+
}
|
|
220
|
+
// run the middlewares recursively with the resolver as the last one
|
|
221
|
+
const callRecursive = async (callOpts = {
|
|
222
|
+
index: 0,
|
|
223
|
+
ctx: opts.ctx
|
|
224
|
+
})=>{
|
|
225
|
+
try {
|
|
226
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
227
|
+
const middleware = _def.middlewares[callOpts.index];
|
|
228
|
+
const result = await middleware({
|
|
229
|
+
ctx: callOpts.ctx,
|
|
230
|
+
type: opts.type,
|
|
231
|
+
path: opts.path,
|
|
232
|
+
rawInput: opts.rawInput,
|
|
233
|
+
meta: _def.meta,
|
|
234
|
+
input: callOpts.input,
|
|
235
|
+
next: async (nextOpts)=>{
|
|
236
|
+
return await callRecursive({
|
|
237
|
+
index: callOpts.index + 1,
|
|
238
|
+
ctx: nextOpts && 'ctx' in nextOpts ? {
|
|
239
|
+
...callOpts.ctx,
|
|
240
|
+
...nextOpts.ctx
|
|
241
|
+
} : callOpts.ctx,
|
|
242
|
+
input: nextOpts && 'input' in nextOpts ? nextOpts.input : callOpts.input
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
return result;
|
|
247
|
+
} catch (cause) {
|
|
248
|
+
return {
|
|
249
|
+
ok: false,
|
|
250
|
+
error: TRPCError.getTRPCErrorFromUnknown(cause),
|
|
251
|
+
marker: middlewareMarker$1
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
// there's always at least one "next" since we wrap this.resolver in a middleware
|
|
256
|
+
const result = await callRecursive();
|
|
257
|
+
if (!result) {
|
|
258
|
+
throw new TRPCError.TRPCError({
|
|
259
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
260
|
+
message: 'No result from middlewares - did you forget to `return next()`?'
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
if (!result.ok) {
|
|
264
|
+
// re-throw original error
|
|
265
|
+
throw result.error;
|
|
266
|
+
}
|
|
267
|
+
return result.data;
|
|
268
|
+
};
|
|
269
|
+
procedure._def = _def;
|
|
270
|
+
procedure.meta = _def.meta;
|
|
271
|
+
return procedure;
|
|
272
|
+
}
|
|
273
|
+
|
|
7
274
|
resolveHTTPResponse.assertNotBrowser();
|
|
8
275
|
|
|
9
276
|
/**
|
|
@@ -89,7 +356,7 @@ function getParseFn(procedureParser) {
|
|
|
89
356
|
data,
|
|
90
357
|
ctx
|
|
91
358
|
};
|
|
92
|
-
}
|
|
359
|
+
}
|
|
93
360
|
]);
|
|
94
361
|
// run the middlewares recursively with the resolver as the last one
|
|
95
362
|
const callRecursive = async (callOpts = {
|
|
@@ -184,17 +451,17 @@ function createProcedure(opts) {
|
|
|
184
451
|
|
|
185
452
|
function migrateProcedure(oldProc, type) {
|
|
186
453
|
const def = oldProc._def();
|
|
187
|
-
const inputParser =
|
|
188
|
-
const outputParser =
|
|
189
|
-
const inputMiddleware =
|
|
190
|
-
const builder =
|
|
454
|
+
const inputParser = getParseFnOrPassThrough(def.inputParser);
|
|
455
|
+
const outputParser = getParseFnOrPassThrough(def.outputParser);
|
|
456
|
+
const inputMiddleware = createInputMiddleware(inputParser);
|
|
457
|
+
const builder = createBuilder({
|
|
191
458
|
inputs: [
|
|
192
459
|
def.inputParser
|
|
193
460
|
],
|
|
194
461
|
middlewares: [
|
|
195
462
|
...def.middlewares,
|
|
196
463
|
inputMiddleware,
|
|
197
|
-
|
|
464
|
+
createOutputMiddleware(outputParser)
|
|
198
465
|
],
|
|
199
466
|
meta: def.meta,
|
|
200
467
|
output: def.outputParser,
|
|
@@ -298,7 +565,7 @@ function safeObject(...args) {
|
|
|
298
565
|
const duplicates = [
|
|
299
566
|
...duplicateQueries,
|
|
300
567
|
...duplicateMutations,
|
|
301
|
-
...duplicateSubscriptions
|
|
568
|
+
...duplicateSubscriptions
|
|
302
569
|
];
|
|
303
570
|
if (duplicates.length) {
|
|
304
571
|
throw new Error(`Duplicate endpoint(s): ${duplicates.join(', ')}`);
|
|
@@ -450,4 +717,8 @@ function safeObject(...args) {
|
|
|
450
717
|
return new Router();
|
|
451
718
|
}
|
|
452
719
|
|
|
720
|
+
exports.createBuilder = createBuilder;
|
|
721
|
+
exports.createInputMiddleware = createInputMiddleware;
|
|
722
|
+
exports.createMiddlewareFactory = createMiddlewareFactory;
|
|
723
|
+
exports.createOutputMiddleware = createOutputMiddleware;
|
|
453
724
|
exports.router = router;
|
package/dist/rpc/codes.d.ts
CHANGED
|
@@ -26,6 +26,7 @@ export declare const TRPC_ERROR_CODES_BY_KEY: {
|
|
|
26
26
|
readonly CONFLICT: -32009;
|
|
27
27
|
readonly PRECONDITION_FAILED: -32012;
|
|
28
28
|
readonly PAYLOAD_TOO_LARGE: -32013;
|
|
29
|
+
readonly TOO_MANY_REQUESTS: -32029;
|
|
29
30
|
readonly CLIENT_CLOSED_REQUEST: -32099;
|
|
30
31
|
};
|
|
31
32
|
export declare const TRPC_ERROR_CODES_BY_NUMBER: {
|
|
@@ -40,6 +41,7 @@ export declare const TRPC_ERROR_CODES_BY_NUMBER: {
|
|
|
40
41
|
[-32009]: "CONFLICT";
|
|
41
42
|
[-32012]: "PRECONDITION_FAILED";
|
|
42
43
|
[-32013]: "PAYLOAD_TOO_LARGE";
|
|
44
|
+
[-32029]: "TOO_MANY_REQUESTS";
|
|
43
45
|
[-32099]: "CLIENT_CLOSED_REQUEST";
|
|
44
46
|
};
|
|
45
47
|
declare type ValueOf<TObj> = TObj[keyof TObj];
|
package/dist/rpc/codes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../../../../packages/server/src/rpc/codes.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB;IAClC;;;OAGG;;IAEH;;OAEG;;IAEH;;OAEG
|
|
1
|
+
{"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../../../../packages/server/src/rpc/codes.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB;IAClC;;;OAGG;;IAEH;;OAEG;;IAEH;;OAEG;;;;;;;;;;;;CAaK,CAAC;AAEX,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;CAAkC,CAAC;AAC1E,aAAK,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;AAEtC,oBAAY,sBAAsB,GAAG,OAAO,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC7E,oBAAY,mBAAmB,GAAG,MAAM,OAAO,uBAAuB,CAAC"}
|
package/dist/rpc/index.js
CHANGED
package/dist/rpc/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { T as TRPC_ERROR_CODES_BY_KEY, a as TRPC_ERROR_CODES_BY_NUMBER } from '../codes-
|
|
1
|
+
export { T as TRPC_ERROR_CODES_BY_KEY, a as TRPC_ERROR_CODES_BY_NUMBER } from '../codes-7d21f749.mjs';
|
package/dist/subscription.mjs
CHANGED