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