@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,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var TRPCError = require('./TRPCError-fe9113e5.js');
|
|
4
|
-
var codes = require('./codes-
|
|
4
|
+
var codes = require('./codes-76c38a34.js');
|
|
5
5
|
var index = require('./index-ae2b3f4b.js');
|
|
6
6
|
var transformTRPCResponse = require('./transformTRPCResponse-11ac69cc.js');
|
|
7
7
|
|
|
@@ -28,7 +28,8 @@ const JSONRPC2_TO_HTTP_CODE = {
|
|
|
28
28
|
CLIENT_CLOSED_REQUEST: 499,
|
|
29
29
|
PRECONDITION_FAILED: 412,
|
|
30
30
|
PAYLOAD_TOO_LARGE: 413,
|
|
31
|
-
METHOD_NOT_SUPPORTED: 405
|
|
31
|
+
METHOD_NOT_SUPPORTED: 405,
|
|
32
|
+
TOO_MANY_REQUESTS: 429
|
|
32
33
|
};
|
|
33
34
|
function getStatusCodeFromKey(code) {
|
|
34
35
|
return JSONRPC2_TO_HTTP_CODE[code] ?? 500;
|
|
@@ -133,7 +134,7 @@ const emptyRouter = {
|
|
|
133
134
|
/**
|
|
134
135
|
* Then is a reserved word because otherwise we can't return a promise that returns a Proxy
|
|
135
136
|
* since JS will think that `.then` is something that exists
|
|
136
|
-
*/ 'then'
|
|
137
|
+
*/ 'then'
|
|
137
138
|
];
|
|
138
139
|
/**
|
|
139
140
|
*
|
|
@@ -255,273 +256,6 @@ const emptyRouter = {
|
|
|
255
256
|
return procedure(opts);
|
|
256
257
|
}
|
|
257
258
|
|
|
258
|
-
/**
|
|
259
|
-
* @internal
|
|
260
|
-
*/ // FIXME this should use RootConfig
|
|
261
|
-
function createMiddlewareFactory() {
|
|
262
|
-
return function createMiddleware(fn) {
|
|
263
|
-
return fn;
|
|
264
|
-
};
|
|
265
|
-
}
|
|
266
|
-
function isPlainObject(obj) {
|
|
267
|
-
return obj && typeof obj === 'object' && !Array.isArray(obj);
|
|
268
|
-
}
|
|
269
|
-
/**
|
|
270
|
-
* @internal
|
|
271
|
-
* Please note, `trpc-openapi` uses this function.
|
|
272
|
-
*/ function createInputMiddleware(parse) {
|
|
273
|
-
const inputMiddleware = async ({ next , rawInput , input , })=>{
|
|
274
|
-
let parsedInput;
|
|
275
|
-
try {
|
|
276
|
-
parsedInput = await parse(rawInput);
|
|
277
|
-
} catch (cause) {
|
|
278
|
-
throw new TRPCError.TRPCError({
|
|
279
|
-
code: 'BAD_REQUEST',
|
|
280
|
-
cause: TRPCError.getCauseFromUnknown(cause)
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
// Multiple input parsers
|
|
284
|
-
const combinedInput = isPlainObject(input) && isPlainObject(parsedInput) ? {
|
|
285
|
-
...input,
|
|
286
|
-
...parsedInput
|
|
287
|
-
} : parsedInput;
|
|
288
|
-
// TODO fix this typing?
|
|
289
|
-
return next({
|
|
290
|
-
input: combinedInput
|
|
291
|
-
});
|
|
292
|
-
};
|
|
293
|
-
inputMiddleware._type = 'input';
|
|
294
|
-
return inputMiddleware;
|
|
295
|
-
}
|
|
296
|
-
/**
|
|
297
|
-
* @internal
|
|
298
|
-
*/ function createOutputMiddleware(parse) {
|
|
299
|
-
const outputMiddleware = async ({ next })=>{
|
|
300
|
-
const result = await next();
|
|
301
|
-
if (!result.ok) {
|
|
302
|
-
// pass through failures without validating
|
|
303
|
-
return result;
|
|
304
|
-
}
|
|
305
|
-
try {
|
|
306
|
-
const data = await parse(result.data);
|
|
307
|
-
return {
|
|
308
|
-
...result,
|
|
309
|
-
data
|
|
310
|
-
};
|
|
311
|
-
} catch (cause) {
|
|
312
|
-
throw new TRPCError.TRPCError({
|
|
313
|
-
message: 'Output validation failed',
|
|
314
|
-
code: 'INTERNAL_SERVER_ERROR',
|
|
315
|
-
cause: TRPCError.getCauseFromUnknown(cause)
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
};
|
|
319
|
-
outputMiddleware._type = 'output';
|
|
320
|
-
return outputMiddleware;
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
function getParseFn(procedureParser) {
|
|
324
|
-
const parser = procedureParser;
|
|
325
|
-
if (typeof parser === 'function') {
|
|
326
|
-
// ProcedureParserCustomValidatorEsque
|
|
327
|
-
return parser;
|
|
328
|
-
}
|
|
329
|
-
if (typeof parser.parseAsync === 'function') {
|
|
330
|
-
// ProcedureParserZodEsque
|
|
331
|
-
return parser.parseAsync.bind(parser);
|
|
332
|
-
}
|
|
333
|
-
if (typeof parser.parse === 'function') {
|
|
334
|
-
// ProcedureParserZodEsque
|
|
335
|
-
return parser.parse.bind(parser);
|
|
336
|
-
}
|
|
337
|
-
if (typeof parser.validateSync === 'function') {
|
|
338
|
-
// ProcedureParserYupEsque
|
|
339
|
-
return parser.validateSync.bind(parser);
|
|
340
|
-
}
|
|
341
|
-
if (typeof parser.create === 'function') {
|
|
342
|
-
// ProcedureParserSuperstructEsque
|
|
343
|
-
return parser.create.bind(parser);
|
|
344
|
-
}
|
|
345
|
-
throw new Error('Could not find a validator fn');
|
|
346
|
-
}
|
|
347
|
-
/**
|
|
348
|
-
* @deprecated only for backwards compat
|
|
349
|
-
* @internal
|
|
350
|
-
*/ function getParseFnOrPassThrough(procedureParser) {
|
|
351
|
-
if (!procedureParser) {
|
|
352
|
-
return (v)=>v;
|
|
353
|
-
}
|
|
354
|
-
return getParseFn(procedureParser);
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
/**
|
|
358
|
-
* @internal
|
|
359
|
-
*/ const middlewareMarker = 'middlewareMarker';
|
|
360
|
-
|
|
361
|
-
function createNewBuilder(def1, def2) {
|
|
362
|
-
const { middlewares =[] , inputs , ...rest } = def2;
|
|
363
|
-
// TODO: maybe have a fn here to warn about calls
|
|
364
|
-
return createBuilder({
|
|
365
|
-
...mergeWithoutOverrides(def1, rest),
|
|
366
|
-
inputs: [
|
|
367
|
-
...def1.inputs,
|
|
368
|
-
...inputs ?? []
|
|
369
|
-
],
|
|
370
|
-
middlewares: [
|
|
371
|
-
...def1.middlewares,
|
|
372
|
-
...middlewares
|
|
373
|
-
]
|
|
374
|
-
});
|
|
375
|
-
}
|
|
376
|
-
function createBuilder(initDef) {
|
|
377
|
-
const _def = initDef || {
|
|
378
|
-
inputs: [],
|
|
379
|
-
middlewares: []
|
|
380
|
-
};
|
|
381
|
-
return {
|
|
382
|
-
_def,
|
|
383
|
-
input (input) {
|
|
384
|
-
const parser = getParseFn(input);
|
|
385
|
-
return createNewBuilder(_def, {
|
|
386
|
-
inputs: [
|
|
387
|
-
input
|
|
388
|
-
],
|
|
389
|
-
middlewares: [
|
|
390
|
-
createInputMiddleware(parser)
|
|
391
|
-
]
|
|
392
|
-
});
|
|
393
|
-
},
|
|
394
|
-
output (output) {
|
|
395
|
-
const parseOutput = getParseFn(output);
|
|
396
|
-
return createNewBuilder(_def, {
|
|
397
|
-
output,
|
|
398
|
-
middlewares: [
|
|
399
|
-
createOutputMiddleware(parseOutput)
|
|
400
|
-
]
|
|
401
|
-
});
|
|
402
|
-
},
|
|
403
|
-
meta (meta) {
|
|
404
|
-
return createNewBuilder(_def, {
|
|
405
|
-
meta: meta
|
|
406
|
-
});
|
|
407
|
-
},
|
|
408
|
-
unstable_concat (builder) {
|
|
409
|
-
return createNewBuilder(_def, builder._def);
|
|
410
|
-
},
|
|
411
|
-
use (middleware) {
|
|
412
|
-
return createNewBuilder(_def, {
|
|
413
|
-
middlewares: [
|
|
414
|
-
middleware
|
|
415
|
-
]
|
|
416
|
-
});
|
|
417
|
-
},
|
|
418
|
-
query (resolver) {
|
|
419
|
-
return createResolver({
|
|
420
|
-
..._def,
|
|
421
|
-
query: true
|
|
422
|
-
}, resolver);
|
|
423
|
-
},
|
|
424
|
-
mutation (resolver) {
|
|
425
|
-
return createResolver({
|
|
426
|
-
..._def,
|
|
427
|
-
mutation: true
|
|
428
|
-
}, resolver);
|
|
429
|
-
},
|
|
430
|
-
subscription (resolver) {
|
|
431
|
-
return createResolver({
|
|
432
|
-
..._def,
|
|
433
|
-
subscription: true
|
|
434
|
-
}, resolver);
|
|
435
|
-
}
|
|
436
|
-
};
|
|
437
|
-
}
|
|
438
|
-
function createResolver(_def, resolver) {
|
|
439
|
-
const finalBuilder = createNewBuilder(_def, {
|
|
440
|
-
resolver,
|
|
441
|
-
middlewares: [
|
|
442
|
-
async function resolveMiddleware(opts) {
|
|
443
|
-
const data = await resolver(opts);
|
|
444
|
-
return {
|
|
445
|
-
marker: middlewareMarker,
|
|
446
|
-
ok: true,
|
|
447
|
-
data,
|
|
448
|
-
ctx: opts.ctx
|
|
449
|
-
};
|
|
450
|
-
},
|
|
451
|
-
]
|
|
452
|
-
});
|
|
453
|
-
return createProcedureCaller(finalBuilder._def);
|
|
454
|
-
}
|
|
455
|
-
const codeblock = `
|
|
456
|
-
If you want to call this function on the server, you do the following:
|
|
457
|
-
This is a client-only function.
|
|
458
|
-
|
|
459
|
-
const caller = appRouter.createCaller({
|
|
460
|
-
/* ... your context */
|
|
461
|
-
});
|
|
462
|
-
|
|
463
|
-
const result = await caller.call('myProcedure', input);
|
|
464
|
-
`.trim();
|
|
465
|
-
function createProcedureCaller(_def) {
|
|
466
|
-
const procedure = async function resolve(opts) {
|
|
467
|
-
// is direct server-side call
|
|
468
|
-
if (!opts || !('rawInput' in opts)) {
|
|
469
|
-
throw new Error(codeblock);
|
|
470
|
-
}
|
|
471
|
-
// run the middlewares recursively with the resolver as the last one
|
|
472
|
-
const callRecursive = async (callOpts = {
|
|
473
|
-
index: 0,
|
|
474
|
-
ctx: opts.ctx
|
|
475
|
-
})=>{
|
|
476
|
-
try {
|
|
477
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
478
|
-
const middleware = _def.middlewares[callOpts.index];
|
|
479
|
-
const result = await middleware({
|
|
480
|
-
ctx: callOpts.ctx,
|
|
481
|
-
type: opts.type,
|
|
482
|
-
path: opts.path,
|
|
483
|
-
rawInput: opts.rawInput,
|
|
484
|
-
meta: _def.meta,
|
|
485
|
-
input: callOpts.input,
|
|
486
|
-
next: async (nextOpts)=>{
|
|
487
|
-
return await callRecursive({
|
|
488
|
-
index: callOpts.index + 1,
|
|
489
|
-
ctx: nextOpts && 'ctx' in nextOpts ? {
|
|
490
|
-
...callOpts.ctx,
|
|
491
|
-
...nextOpts.ctx
|
|
492
|
-
} : callOpts.ctx,
|
|
493
|
-
input: nextOpts && 'input' in nextOpts ? nextOpts.input : callOpts.input
|
|
494
|
-
});
|
|
495
|
-
}
|
|
496
|
-
});
|
|
497
|
-
return result;
|
|
498
|
-
} catch (cause) {
|
|
499
|
-
return {
|
|
500
|
-
ok: false,
|
|
501
|
-
error: TRPCError.getTRPCErrorFromUnknown(cause),
|
|
502
|
-
marker: middlewareMarker
|
|
503
|
-
};
|
|
504
|
-
}
|
|
505
|
-
};
|
|
506
|
-
// there's always at least one "next" since we wrap this.resolver in a middleware
|
|
507
|
-
const result = await callRecursive();
|
|
508
|
-
if (!result) {
|
|
509
|
-
throw new TRPCError.TRPCError({
|
|
510
|
-
code: 'INTERNAL_SERVER_ERROR',
|
|
511
|
-
message: 'No result from middlewares - did you forget to `return next()`?'
|
|
512
|
-
});
|
|
513
|
-
}
|
|
514
|
-
if (!result.ok) {
|
|
515
|
-
// re-throw original error
|
|
516
|
-
throw result.error;
|
|
517
|
-
}
|
|
518
|
-
return result.data;
|
|
519
|
-
};
|
|
520
|
-
procedure._def = _def;
|
|
521
|
-
procedure.meta = _def.meta;
|
|
522
|
-
return procedure;
|
|
523
|
-
}
|
|
524
|
-
|
|
525
259
|
const HTTP_METHOD_PROCEDURE_TYPE_MAP = {
|
|
526
260
|
GET: 'query',
|
|
527
261
|
POST: 'mutation'
|
|
@@ -725,16 +459,11 @@ async function resolveHTTPResponse(opts) {
|
|
|
725
459
|
|
|
726
460
|
exports.assertNotBrowser = assertNotBrowser;
|
|
727
461
|
exports.callProcedure = callProcedure;
|
|
728
|
-
exports.createBuilder = createBuilder;
|
|
729
|
-
exports.createInputMiddleware = createInputMiddleware;
|
|
730
|
-
exports.createMiddlewareFactory = createMiddlewareFactory;
|
|
731
|
-
exports.createOutputMiddleware = createOutputMiddleware;
|
|
732
462
|
exports.createRouterFactory = createRouterFactory;
|
|
733
463
|
exports.defaultFormatter = defaultFormatter;
|
|
734
464
|
exports.defaultTransformer = defaultTransformer;
|
|
735
465
|
exports.getDataTransformer = getDataTransformer;
|
|
736
466
|
exports.getHTTPStatusCodeFromError = getHTTPStatusCodeFromError;
|
|
737
|
-
exports.getParseFnOrPassThrough = getParseFnOrPassThrough;
|
|
738
467
|
exports.mergeWithoutOverrides = mergeWithoutOverrides;
|
|
739
468
|
exports.procedureTypes = procedureTypes;
|
|
740
469
|
exports.resolveHTTPResponse = resolveHTTPResponse;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { T as TRPCError, g as
|
|
2
|
-
import { i as invert, T as TRPC_ERROR_CODES_BY_KEY } from './codes-
|
|
1
|
+
import { T as TRPCError, g as getTRPCErrorFromUnknown, a as getCauseFromUnknown } from './TRPCError-281ac25a.mjs';
|
|
2
|
+
import { i as invert, T as TRPC_ERROR_CODES_BY_KEY } from './codes-7d21f749.mjs';
|
|
3
3
|
import { c as createProxy } from './index-5b2e87d4.mjs';
|
|
4
4
|
import { t as transformTRPCResponse } from './transformTRPCResponse-c8138d5f.mjs';
|
|
5
5
|
|
|
@@ -26,7 +26,8 @@ const JSONRPC2_TO_HTTP_CODE = {
|
|
|
26
26
|
CLIENT_CLOSED_REQUEST: 499,
|
|
27
27
|
PRECONDITION_FAILED: 412,
|
|
28
28
|
PAYLOAD_TOO_LARGE: 413,
|
|
29
|
-
METHOD_NOT_SUPPORTED: 405
|
|
29
|
+
METHOD_NOT_SUPPORTED: 405,
|
|
30
|
+
TOO_MANY_REQUESTS: 429
|
|
30
31
|
};
|
|
31
32
|
function getStatusCodeFromKey(code) {
|
|
32
33
|
return JSONRPC2_TO_HTTP_CODE[code] ?? 500;
|
|
@@ -131,7 +132,7 @@ const emptyRouter = {
|
|
|
131
132
|
/**
|
|
132
133
|
* Then is a reserved word because otherwise we can't return a promise that returns a Proxy
|
|
133
134
|
* since JS will think that `.then` is something that exists
|
|
134
|
-
*/ 'then'
|
|
135
|
+
*/ 'then'
|
|
135
136
|
];
|
|
136
137
|
/**
|
|
137
138
|
*
|
|
@@ -253,273 +254,6 @@ const emptyRouter = {
|
|
|
253
254
|
return procedure(opts);
|
|
254
255
|
}
|
|
255
256
|
|
|
256
|
-
/**
|
|
257
|
-
* @internal
|
|
258
|
-
*/ // FIXME this should use RootConfig
|
|
259
|
-
function createMiddlewareFactory() {
|
|
260
|
-
return function createMiddleware(fn) {
|
|
261
|
-
return fn;
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
|
-
function isPlainObject(obj) {
|
|
265
|
-
return obj && typeof obj === 'object' && !Array.isArray(obj);
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* @internal
|
|
269
|
-
* Please note, `trpc-openapi` uses this function.
|
|
270
|
-
*/ function createInputMiddleware(parse) {
|
|
271
|
-
const inputMiddleware = async ({ next , rawInput , input , })=>{
|
|
272
|
-
let parsedInput;
|
|
273
|
-
try {
|
|
274
|
-
parsedInput = await parse(rawInput);
|
|
275
|
-
} catch (cause) {
|
|
276
|
-
throw new TRPCError({
|
|
277
|
-
code: 'BAD_REQUEST',
|
|
278
|
-
cause: getCauseFromUnknown(cause)
|
|
279
|
-
});
|
|
280
|
-
}
|
|
281
|
-
// Multiple input parsers
|
|
282
|
-
const combinedInput = isPlainObject(input) && isPlainObject(parsedInput) ? {
|
|
283
|
-
...input,
|
|
284
|
-
...parsedInput
|
|
285
|
-
} : parsedInput;
|
|
286
|
-
// TODO fix this typing?
|
|
287
|
-
return next({
|
|
288
|
-
input: combinedInput
|
|
289
|
-
});
|
|
290
|
-
};
|
|
291
|
-
inputMiddleware._type = 'input';
|
|
292
|
-
return inputMiddleware;
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* @internal
|
|
296
|
-
*/ function createOutputMiddleware(parse) {
|
|
297
|
-
const outputMiddleware = async ({ next })=>{
|
|
298
|
-
const result = await next();
|
|
299
|
-
if (!result.ok) {
|
|
300
|
-
// pass through failures without validating
|
|
301
|
-
return result;
|
|
302
|
-
}
|
|
303
|
-
try {
|
|
304
|
-
const data = await parse(result.data);
|
|
305
|
-
return {
|
|
306
|
-
...result,
|
|
307
|
-
data
|
|
308
|
-
};
|
|
309
|
-
} catch (cause) {
|
|
310
|
-
throw new TRPCError({
|
|
311
|
-
message: 'Output validation failed',
|
|
312
|
-
code: 'INTERNAL_SERVER_ERROR',
|
|
313
|
-
cause: getCauseFromUnknown(cause)
|
|
314
|
-
});
|
|
315
|
-
}
|
|
316
|
-
};
|
|
317
|
-
outputMiddleware._type = 'output';
|
|
318
|
-
return outputMiddleware;
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
function getParseFn(procedureParser) {
|
|
322
|
-
const parser = procedureParser;
|
|
323
|
-
if (typeof parser === 'function') {
|
|
324
|
-
// ProcedureParserCustomValidatorEsque
|
|
325
|
-
return parser;
|
|
326
|
-
}
|
|
327
|
-
if (typeof parser.parseAsync === 'function') {
|
|
328
|
-
// ProcedureParserZodEsque
|
|
329
|
-
return parser.parseAsync.bind(parser);
|
|
330
|
-
}
|
|
331
|
-
if (typeof parser.parse === 'function') {
|
|
332
|
-
// ProcedureParserZodEsque
|
|
333
|
-
return parser.parse.bind(parser);
|
|
334
|
-
}
|
|
335
|
-
if (typeof parser.validateSync === 'function') {
|
|
336
|
-
// ProcedureParserYupEsque
|
|
337
|
-
return parser.validateSync.bind(parser);
|
|
338
|
-
}
|
|
339
|
-
if (typeof parser.create === 'function') {
|
|
340
|
-
// ProcedureParserSuperstructEsque
|
|
341
|
-
return parser.create.bind(parser);
|
|
342
|
-
}
|
|
343
|
-
throw new Error('Could not find a validator fn');
|
|
344
|
-
}
|
|
345
|
-
/**
|
|
346
|
-
* @deprecated only for backwards compat
|
|
347
|
-
* @internal
|
|
348
|
-
*/ function getParseFnOrPassThrough(procedureParser) {
|
|
349
|
-
if (!procedureParser) {
|
|
350
|
-
return (v)=>v;
|
|
351
|
-
}
|
|
352
|
-
return getParseFn(procedureParser);
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
/**
|
|
356
|
-
* @internal
|
|
357
|
-
*/ const middlewareMarker = 'middlewareMarker';
|
|
358
|
-
|
|
359
|
-
function createNewBuilder(def1, def2) {
|
|
360
|
-
const { middlewares =[] , inputs , ...rest } = def2;
|
|
361
|
-
// TODO: maybe have a fn here to warn about calls
|
|
362
|
-
return createBuilder({
|
|
363
|
-
...mergeWithoutOverrides(def1, rest),
|
|
364
|
-
inputs: [
|
|
365
|
-
...def1.inputs,
|
|
366
|
-
...inputs ?? []
|
|
367
|
-
],
|
|
368
|
-
middlewares: [
|
|
369
|
-
...def1.middlewares,
|
|
370
|
-
...middlewares
|
|
371
|
-
]
|
|
372
|
-
});
|
|
373
|
-
}
|
|
374
|
-
function createBuilder(initDef) {
|
|
375
|
-
const _def = initDef || {
|
|
376
|
-
inputs: [],
|
|
377
|
-
middlewares: []
|
|
378
|
-
};
|
|
379
|
-
return {
|
|
380
|
-
_def,
|
|
381
|
-
input (input) {
|
|
382
|
-
const parser = getParseFn(input);
|
|
383
|
-
return createNewBuilder(_def, {
|
|
384
|
-
inputs: [
|
|
385
|
-
input
|
|
386
|
-
],
|
|
387
|
-
middlewares: [
|
|
388
|
-
createInputMiddleware(parser)
|
|
389
|
-
]
|
|
390
|
-
});
|
|
391
|
-
},
|
|
392
|
-
output (output) {
|
|
393
|
-
const parseOutput = getParseFn(output);
|
|
394
|
-
return createNewBuilder(_def, {
|
|
395
|
-
output,
|
|
396
|
-
middlewares: [
|
|
397
|
-
createOutputMiddleware(parseOutput)
|
|
398
|
-
]
|
|
399
|
-
});
|
|
400
|
-
},
|
|
401
|
-
meta (meta) {
|
|
402
|
-
return createNewBuilder(_def, {
|
|
403
|
-
meta: meta
|
|
404
|
-
});
|
|
405
|
-
},
|
|
406
|
-
unstable_concat (builder) {
|
|
407
|
-
return createNewBuilder(_def, builder._def);
|
|
408
|
-
},
|
|
409
|
-
use (middleware) {
|
|
410
|
-
return createNewBuilder(_def, {
|
|
411
|
-
middlewares: [
|
|
412
|
-
middleware
|
|
413
|
-
]
|
|
414
|
-
});
|
|
415
|
-
},
|
|
416
|
-
query (resolver) {
|
|
417
|
-
return createResolver({
|
|
418
|
-
..._def,
|
|
419
|
-
query: true
|
|
420
|
-
}, resolver);
|
|
421
|
-
},
|
|
422
|
-
mutation (resolver) {
|
|
423
|
-
return createResolver({
|
|
424
|
-
..._def,
|
|
425
|
-
mutation: true
|
|
426
|
-
}, resolver);
|
|
427
|
-
},
|
|
428
|
-
subscription (resolver) {
|
|
429
|
-
return createResolver({
|
|
430
|
-
..._def,
|
|
431
|
-
subscription: true
|
|
432
|
-
}, resolver);
|
|
433
|
-
}
|
|
434
|
-
};
|
|
435
|
-
}
|
|
436
|
-
function createResolver(_def, resolver) {
|
|
437
|
-
const finalBuilder = createNewBuilder(_def, {
|
|
438
|
-
resolver,
|
|
439
|
-
middlewares: [
|
|
440
|
-
async function resolveMiddleware(opts) {
|
|
441
|
-
const data = await resolver(opts);
|
|
442
|
-
return {
|
|
443
|
-
marker: middlewareMarker,
|
|
444
|
-
ok: true,
|
|
445
|
-
data,
|
|
446
|
-
ctx: opts.ctx
|
|
447
|
-
};
|
|
448
|
-
},
|
|
449
|
-
]
|
|
450
|
-
});
|
|
451
|
-
return createProcedureCaller(finalBuilder._def);
|
|
452
|
-
}
|
|
453
|
-
const codeblock = `
|
|
454
|
-
If you want to call this function on the server, you do the following:
|
|
455
|
-
This is a client-only function.
|
|
456
|
-
|
|
457
|
-
const caller = appRouter.createCaller({
|
|
458
|
-
/* ... your context */
|
|
459
|
-
});
|
|
460
|
-
|
|
461
|
-
const result = await caller.call('myProcedure', input);
|
|
462
|
-
`.trim();
|
|
463
|
-
function createProcedureCaller(_def) {
|
|
464
|
-
const procedure = async function resolve(opts) {
|
|
465
|
-
// is direct server-side call
|
|
466
|
-
if (!opts || !('rawInput' in opts)) {
|
|
467
|
-
throw new Error(codeblock);
|
|
468
|
-
}
|
|
469
|
-
// run the middlewares recursively with the resolver as the last one
|
|
470
|
-
const callRecursive = async (callOpts = {
|
|
471
|
-
index: 0,
|
|
472
|
-
ctx: opts.ctx
|
|
473
|
-
})=>{
|
|
474
|
-
try {
|
|
475
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
476
|
-
const middleware = _def.middlewares[callOpts.index];
|
|
477
|
-
const result = await middleware({
|
|
478
|
-
ctx: callOpts.ctx,
|
|
479
|
-
type: opts.type,
|
|
480
|
-
path: opts.path,
|
|
481
|
-
rawInput: opts.rawInput,
|
|
482
|
-
meta: _def.meta,
|
|
483
|
-
input: callOpts.input,
|
|
484
|
-
next: async (nextOpts)=>{
|
|
485
|
-
return await callRecursive({
|
|
486
|
-
index: callOpts.index + 1,
|
|
487
|
-
ctx: nextOpts && 'ctx' in nextOpts ? {
|
|
488
|
-
...callOpts.ctx,
|
|
489
|
-
...nextOpts.ctx
|
|
490
|
-
} : callOpts.ctx,
|
|
491
|
-
input: nextOpts && 'input' in nextOpts ? nextOpts.input : callOpts.input
|
|
492
|
-
});
|
|
493
|
-
}
|
|
494
|
-
});
|
|
495
|
-
return result;
|
|
496
|
-
} catch (cause) {
|
|
497
|
-
return {
|
|
498
|
-
ok: false,
|
|
499
|
-
error: getTRPCErrorFromUnknown(cause),
|
|
500
|
-
marker: middlewareMarker
|
|
501
|
-
};
|
|
502
|
-
}
|
|
503
|
-
};
|
|
504
|
-
// there's always at least one "next" since we wrap this.resolver in a middleware
|
|
505
|
-
const result = await callRecursive();
|
|
506
|
-
if (!result) {
|
|
507
|
-
throw new TRPCError({
|
|
508
|
-
code: 'INTERNAL_SERVER_ERROR',
|
|
509
|
-
message: 'No result from middlewares - did you forget to `return next()`?'
|
|
510
|
-
});
|
|
511
|
-
}
|
|
512
|
-
if (!result.ok) {
|
|
513
|
-
// re-throw original error
|
|
514
|
-
throw result.error;
|
|
515
|
-
}
|
|
516
|
-
return result.data;
|
|
517
|
-
};
|
|
518
|
-
procedure._def = _def;
|
|
519
|
-
procedure.meta = _def.meta;
|
|
520
|
-
return procedure;
|
|
521
|
-
}
|
|
522
|
-
|
|
523
257
|
const HTTP_METHOD_PROCEDURE_TYPE_MAP = {
|
|
524
258
|
GET: 'query',
|
|
525
259
|
POST: 'mutation'
|
|
@@ -721,4 +455,4 @@ async function resolveHTTPResponse(opts) {
|
|
|
721
455
|
}
|
|
722
456
|
}
|
|
723
457
|
|
|
724
|
-
export { defaultTransformer as a,
|
|
458
|
+
export { defaultTransformer as a, assertNotBrowser as b, createRouterFactory as c, defaultFormatter as d, callProcedure as e, getHTTPStatusCodeFromError as f, getDataTransformer as g, mergeWithoutOverrides as m, procedureTypes as p, resolveHTTPResponse as r };
|