@trpc/server 10.0.0-proxy-beta.12 → 10.0.0-proxy-beta.14
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-281ac25a.mjs → TRPCError-e99e7cbe.mjs} +1 -1
- package/dist/adapters/aws-lambda/index.js +2 -3
- package/dist/adapters/aws-lambda/index.mjs +3 -4
- package/dist/adapters/express.js +3 -3
- package/dist/adapters/express.mjs +4 -4
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
- package/dist/adapters/fastify/index.js +2 -3
- package/dist/adapters/fastify/index.mjs +3 -4
- package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -1
- package/dist/adapters/fetch/index.js +2 -3
- package/dist/adapters/fetch/index.mjs +3 -4
- 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/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
- package/dist/adapters/standalone.js +3 -3
- package/dist/adapters/standalone.mjs +4 -4
- package/dist/adapters/ws.d.ts.map +1 -1
- package/dist/adapters/ws.js +10 -3
- package/dist/adapters/ws.mjs +11 -4
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/initTRPC.d.ts +22 -5
- package/dist/core/initTRPC.d.ts.map +1 -1
- package/dist/core/internals/config.d.ts +13 -0
- package/dist/core/internals/config.d.ts.map +1 -1
- package/dist/core/internals/procedureBuilder.d.ts +24 -24
- package/dist/core/internals/procedureBuilder.d.ts.map +1 -1
- package/dist/core/middleware.d.ts +1 -1
- package/dist/core/middleware.d.ts.map +1 -1
- package/dist/core/procedure.d.ts +7 -15
- package/dist/core/procedure.d.ts.map +1 -1
- package/dist/core/router.d.ts +8 -3
- package/dist/core/router.d.ts.map +1 -1
- package/dist/deprecated/internals/procedure.d.ts.map +1 -1
- package/dist/deprecated/interop.d.ts +2 -2
- package/dist/deprecated/interop.d.ts.map +1 -1
- package/dist/deprecated/router.d.ts.map +1 -1
- package/dist/http/index.d.ts.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +739 -25
- package/dist/index.mjs +724 -9
- package/dist/internals.d.ts +1 -2
- package/dist/internals.d.ts.map +1 -1
- package/dist/{nodeHTTPRequestHandler-f627eff7.mjs → nodeHTTPRequestHandler-205f7545.mjs} +2 -3
- package/dist/{nodeHTTPRequestHandler-831afd20.js → nodeHTTPRequestHandler-efc38711.js} +1 -2
- package/dist/resolveHTTPResponse-4ceb1785.mjs +205 -0
- package/dist/resolveHTTPResponse-bf4c6ceb.js +207 -0
- package/dist/subscription.mjs +1 -1
- package/dist/{resolveHTTPResponse-190892ac.js → transformTRPCResponse-05aa84c1.js} +22 -202
- package/dist/{resolveHTTPResponse-75ea5653.mjs → transformTRPCResponse-959de787.mjs} +21 -202
- package/dist/types.d.ts +9 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/adapters/fastify/fastifyRequestHandler.ts +0 -3
- package/src/adapters/fetch/fetchRequestHandler.ts +0 -3
- package/src/adapters/node-http/nodeHTTPRequestHandler.ts +0 -3
- package/src/adapters/ws.ts +13 -3
- package/src/core/index.ts +1 -0
- package/src/core/initTRPC.ts +12 -0
- package/src/core/internals/config.ts +19 -0
- package/src/core/internals/procedureBuilder.ts +38 -47
- package/src/core/middleware.ts +1 -1
- package/src/core/procedure.ts +7 -18
- package/src/core/router.ts +20 -13
- package/src/deprecated/internals/procedure.ts +0 -3
- package/src/deprecated/interop.ts +2 -12
- package/src/deprecated/router.ts +0 -3
- package/src/http/index.ts +0 -4
- package/src/index.ts +0 -1
- package/src/internals.ts +4 -6
- package/src/types.ts +28 -7
- package/dist/assertNotBrowser.d.ts +0 -2
- package/dist/assertNotBrowser.d.ts.map +0 -1
- package/dist/router-133cf4a4.mjs +0 -718
- package/dist/router-3bad08e5.js +0 -724
- package/dist/transformTRPCResponse-11ac69cc.js +0 -27
- package/dist/transformTRPCResponse-c8138d5f.mjs +0 -25
- package/src/assertNotBrowser.ts +0 -12
|
@@ -3,13 +3,6 @@
|
|
|
3
3
|
var TRPCError = require('./TRPCError-fe9113e5.js');
|
|
4
4
|
var codes = require('./codes-76c38a34.js');
|
|
5
5
|
var index = require('./index-62d46c97.js');
|
|
6
|
-
var transformTRPCResponse = require('./transformTRPCResponse-11ac69cc.js');
|
|
7
|
-
|
|
8
|
-
/* istanbul ignore file */ function assertNotBrowser() {
|
|
9
|
-
if (typeof window !== 'undefined' && !('Deno' in window) && process.env.NODE_ENV !== 'test' && process.env.JEST_WORKER_ID === undefined) {
|
|
10
|
-
throw new Error('Imported server-only code in the browser');
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
6
|
|
|
14
7
|
const defaultFormatter = ({ shape })=>{
|
|
15
8
|
return shape;
|
|
@@ -137,7 +130,6 @@ const emptyRouter = {
|
|
|
137
130
|
*/ 'then'
|
|
138
131
|
];
|
|
139
132
|
/**
|
|
140
|
-
*
|
|
141
133
|
* @internal
|
|
142
134
|
*/ function createRouterFactory(defaults) {
|
|
143
135
|
return function createRouterInner(opts) {
|
|
@@ -256,214 +248,42 @@ const emptyRouter = {
|
|
|
256
248
|
return procedure(opts);
|
|
257
249
|
}
|
|
258
250
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
function
|
|
264
|
-
|
|
265
|
-
if (req.method === 'GET') {
|
|
266
|
-
if (!req.query.has('input')) {
|
|
267
|
-
return undefined;
|
|
268
|
-
}
|
|
269
|
-
const raw = req.query.get('input');
|
|
270
|
-
return JSON.parse(raw);
|
|
271
|
-
}
|
|
272
|
-
if (typeof req.body === 'string') {
|
|
273
|
-
// A mutation with no inputs will have req.body === ''
|
|
274
|
-
return req.body.length === 0 ? undefined : JSON.parse(req.body);
|
|
275
|
-
}
|
|
276
|
-
return req.body;
|
|
277
|
-
} catch (err) {
|
|
278
|
-
throw new TRPCError.TRPCError({
|
|
279
|
-
code: 'PARSE_ERROR',
|
|
280
|
-
cause: TRPCError.getCauseFromUnknown(err)
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
async function resolveHTTPResponse(opts) {
|
|
285
|
-
const { createContext , onError , router , req } = opts;
|
|
286
|
-
const batchingEnabled = opts.batching?.enabled ?? true;
|
|
287
|
-
if (req.method === 'HEAD') {
|
|
288
|
-
// can be used for lambda warmup
|
|
251
|
+
/**
|
|
252
|
+
* The default check to see if we're in a server
|
|
253
|
+
*/ const isServerDefault = typeof window === 'undefined' || 'Deno' in window || process.env.NODE_ENV === 'test' || !!process.env.JEST_WORKER_ID;
|
|
254
|
+
|
|
255
|
+
function transformTRPCResponseItem(router, item) {
|
|
256
|
+
if ('error' in item) {
|
|
289
257
|
return {
|
|
290
|
-
|
|
258
|
+
...item,
|
|
259
|
+
error: router._def.transformer.output.serialize(item.error)
|
|
291
260
|
};
|
|
292
261
|
}
|
|
293
|
-
|
|
294
|
-
let ctx = undefined;
|
|
295
|
-
let paths = undefined;
|
|
296
|
-
const isBatchCall = !!req.query.get('batch');
|
|
297
|
-
function endResponse(untransformedJSON, errors) {
|
|
298
|
-
let status = getHTTPStatusCode(untransformedJSON);
|
|
299
|
-
const headers = {
|
|
300
|
-
'Content-Type': 'application/json'
|
|
301
|
-
};
|
|
302
|
-
const meta = opts.responseMeta?.({
|
|
303
|
-
ctx,
|
|
304
|
-
paths,
|
|
305
|
-
type,
|
|
306
|
-
data: Array.isArray(untransformedJSON) ? untransformedJSON : [
|
|
307
|
-
untransformedJSON
|
|
308
|
-
],
|
|
309
|
-
errors
|
|
310
|
-
}) ?? {};
|
|
311
|
-
for (const [key, value] of Object.entries(meta.headers ?? {})){
|
|
312
|
-
headers[key] = value;
|
|
313
|
-
}
|
|
314
|
-
if (meta.status) {
|
|
315
|
-
status = meta.status;
|
|
316
|
-
}
|
|
317
|
-
const transformedJSON = transformTRPCResponse.transformTRPCResponse(router, untransformedJSON);
|
|
318
|
-
const body = JSON.stringify(transformedJSON);
|
|
262
|
+
if ('data' in item.result) {
|
|
319
263
|
return {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
}
|
|
325
|
-
try {
|
|
326
|
-
if (opts.error) {
|
|
327
|
-
throw opts.error;
|
|
328
|
-
}
|
|
329
|
-
if (isBatchCall && !batchingEnabled) {
|
|
330
|
-
throw new Error(`Batching is not enabled on the server`);
|
|
331
|
-
}
|
|
332
|
-
if (type === 'subscription') {
|
|
333
|
-
throw new TRPCError.TRPCError({
|
|
334
|
-
message: 'Subscriptions should use wsLink',
|
|
335
|
-
code: 'METHOD_NOT_SUPPORTED'
|
|
336
|
-
});
|
|
337
|
-
}
|
|
338
|
-
if (type === 'unknown') {
|
|
339
|
-
throw new TRPCError.TRPCError({
|
|
340
|
-
message: `Unexpected request method ${req.method}`,
|
|
341
|
-
code: 'METHOD_NOT_SUPPORTED'
|
|
342
|
-
});
|
|
343
|
-
}
|
|
344
|
-
const rawInput = getRawProcedureInputOrThrow(req);
|
|
345
|
-
paths = isBatchCall ? opts.path.split(',') : [
|
|
346
|
-
opts.path
|
|
347
|
-
];
|
|
348
|
-
ctx = await createContext();
|
|
349
|
-
const deserializeInputValue = (rawValue)=>{
|
|
350
|
-
return typeof rawValue !== 'undefined' ? router._def.transformer.input.deserialize(rawValue) : rawValue;
|
|
351
|
-
};
|
|
352
|
-
const getInputs = ()=>{
|
|
353
|
-
if (!isBatchCall) {
|
|
354
|
-
return {
|
|
355
|
-
0: deserializeInputValue(rawInput)
|
|
356
|
-
};
|
|
357
|
-
}
|
|
358
|
-
if (rawInput == null || typeof rawInput !== 'object' || Array.isArray(rawInput)) {
|
|
359
|
-
throw new TRPCError.TRPCError({
|
|
360
|
-
code: 'BAD_REQUEST',
|
|
361
|
-
message: '"input" needs to be an object when doing a batch call'
|
|
362
|
-
});
|
|
363
|
-
}
|
|
364
|
-
const input = {};
|
|
365
|
-
for(const key in rawInput){
|
|
366
|
-
const k = key;
|
|
367
|
-
const rawValue = rawInput[k];
|
|
368
|
-
const value = deserializeInputValue(rawValue);
|
|
369
|
-
input[k] = value;
|
|
264
|
+
...item,
|
|
265
|
+
result: {
|
|
266
|
+
...item.result,
|
|
267
|
+
data: router._def.transformer.output.serialize(item.result.data)
|
|
370
268
|
}
|
|
371
|
-
return input;
|
|
372
269
|
};
|
|
373
|
-
const inputs = getInputs();
|
|
374
|
-
const rawResults = await Promise.all(paths.map(async (path, index)=>{
|
|
375
|
-
const input = inputs[index];
|
|
376
|
-
try {
|
|
377
|
-
const output = await callProcedure({
|
|
378
|
-
procedures: router._def.procedures,
|
|
379
|
-
path,
|
|
380
|
-
rawInput: input,
|
|
381
|
-
ctx,
|
|
382
|
-
type
|
|
383
|
-
});
|
|
384
|
-
return {
|
|
385
|
-
input,
|
|
386
|
-
path,
|
|
387
|
-
data: output
|
|
388
|
-
};
|
|
389
|
-
} catch (cause) {
|
|
390
|
-
const error = TRPCError.getTRPCErrorFromUnknown(cause);
|
|
391
|
-
onError?.({
|
|
392
|
-
error,
|
|
393
|
-
path,
|
|
394
|
-
input,
|
|
395
|
-
ctx,
|
|
396
|
-
type: type,
|
|
397
|
-
req
|
|
398
|
-
});
|
|
399
|
-
return {
|
|
400
|
-
input,
|
|
401
|
-
path,
|
|
402
|
-
error
|
|
403
|
-
};
|
|
404
|
-
}
|
|
405
|
-
}));
|
|
406
|
-
const errors = rawResults.flatMap((obj)=>obj.error ? [
|
|
407
|
-
obj.error
|
|
408
|
-
] : []);
|
|
409
|
-
const resultEnvelopes = rawResults.map((obj)=>{
|
|
410
|
-
const { path , input } = obj;
|
|
411
|
-
if (obj.error) {
|
|
412
|
-
return {
|
|
413
|
-
error: router.getErrorShape({
|
|
414
|
-
error: obj.error,
|
|
415
|
-
type,
|
|
416
|
-
path,
|
|
417
|
-
input,
|
|
418
|
-
ctx
|
|
419
|
-
})
|
|
420
|
-
};
|
|
421
|
-
} else {
|
|
422
|
-
return {
|
|
423
|
-
result: {
|
|
424
|
-
data: obj.data
|
|
425
|
-
}
|
|
426
|
-
};
|
|
427
|
-
}
|
|
428
|
-
});
|
|
429
|
-
const result = isBatchCall ? resultEnvelopes : resultEnvelopes[0];
|
|
430
|
-
return endResponse(result, errors);
|
|
431
|
-
} catch (cause) {
|
|
432
|
-
// we get here if
|
|
433
|
-
// - batching is called when it's not enabled
|
|
434
|
-
// - `createContext()` throws
|
|
435
|
-
// - post body is too large
|
|
436
|
-
// - input deserialization fails
|
|
437
|
-
const error = TRPCError.getTRPCErrorFromUnknown(cause);
|
|
438
|
-
onError?.({
|
|
439
|
-
error,
|
|
440
|
-
path: undefined,
|
|
441
|
-
input: undefined,
|
|
442
|
-
ctx,
|
|
443
|
-
type: type,
|
|
444
|
-
req
|
|
445
|
-
});
|
|
446
|
-
return endResponse({
|
|
447
|
-
error: router.getErrorShape({
|
|
448
|
-
error,
|
|
449
|
-
type,
|
|
450
|
-
path: undefined,
|
|
451
|
-
input: undefined,
|
|
452
|
-
ctx
|
|
453
|
-
})
|
|
454
|
-
}, [
|
|
455
|
-
error
|
|
456
|
-
]);
|
|
457
270
|
}
|
|
271
|
+
return item;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Takes a unserialized `TRPCResponse` and serializes it with the router's transformers
|
|
275
|
+
**/ function transformTRPCResponse(router, itemOrItems) {
|
|
276
|
+
return Array.isArray(itemOrItems) ? itemOrItems.map((item)=>transformTRPCResponseItem(router, item)) : transformTRPCResponseItem(router, itemOrItems);
|
|
458
277
|
}
|
|
459
278
|
|
|
460
|
-
exports.assertNotBrowser = assertNotBrowser;
|
|
461
279
|
exports.callProcedure = callProcedure;
|
|
462
280
|
exports.createRouterFactory = createRouterFactory;
|
|
463
281
|
exports.defaultFormatter = defaultFormatter;
|
|
464
282
|
exports.defaultTransformer = defaultTransformer;
|
|
465
283
|
exports.getDataTransformer = getDataTransformer;
|
|
284
|
+
exports.getHTTPStatusCode = getHTTPStatusCode;
|
|
466
285
|
exports.getHTTPStatusCodeFromError = getHTTPStatusCodeFromError;
|
|
286
|
+
exports.isServerDefault = isServerDefault;
|
|
467
287
|
exports.mergeWithoutOverrides = mergeWithoutOverrides;
|
|
468
288
|
exports.procedureTypes = procedureTypes;
|
|
469
|
-
exports.
|
|
289
|
+
exports.transformTRPCResponse = transformTRPCResponse;
|
|
@@ -1,13 +1,6 @@
|
|
|
1
|
-
import { T as TRPCError
|
|
1
|
+
import { T as TRPCError } from './TRPCError-e99e7cbe.mjs';
|
|
2
2
|
import { i as invert, T as TRPC_ERROR_CODES_BY_KEY } from './codes-7d21f749.mjs';
|
|
3
3
|
import { c as createRecursiveProxy } from './index-5a6a2e91.mjs';
|
|
4
|
-
import { t as transformTRPCResponse } from './transformTRPCResponse-c8138d5f.mjs';
|
|
5
|
-
|
|
6
|
-
/* istanbul ignore file */ function assertNotBrowser() {
|
|
7
|
-
if (typeof window !== 'undefined' && !('Deno' in window) && process.env.NODE_ENV !== 'test' && process.env.JEST_WORKER_ID === undefined) {
|
|
8
|
-
throw new Error('Imported server-only code in the browser');
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
4
|
|
|
12
5
|
const defaultFormatter = ({ shape })=>{
|
|
13
6
|
return shape;
|
|
@@ -135,7 +128,6 @@ const emptyRouter = {
|
|
|
135
128
|
*/ 'then'
|
|
136
129
|
];
|
|
137
130
|
/**
|
|
138
|
-
*
|
|
139
131
|
* @internal
|
|
140
132
|
*/ function createRouterFactory(defaults) {
|
|
141
133
|
return function createRouterInner(opts) {
|
|
@@ -254,205 +246,32 @@ const emptyRouter = {
|
|
|
254
246
|
return procedure(opts);
|
|
255
247
|
}
|
|
256
248
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
function
|
|
262
|
-
|
|
263
|
-
if (req.method === 'GET') {
|
|
264
|
-
if (!req.query.has('input')) {
|
|
265
|
-
return undefined;
|
|
266
|
-
}
|
|
267
|
-
const raw = req.query.get('input');
|
|
268
|
-
return JSON.parse(raw);
|
|
269
|
-
}
|
|
270
|
-
if (typeof req.body === 'string') {
|
|
271
|
-
// A mutation with no inputs will have req.body === ''
|
|
272
|
-
return req.body.length === 0 ? undefined : JSON.parse(req.body);
|
|
273
|
-
}
|
|
274
|
-
return req.body;
|
|
275
|
-
} catch (err) {
|
|
276
|
-
throw new TRPCError({
|
|
277
|
-
code: 'PARSE_ERROR',
|
|
278
|
-
cause: getCauseFromUnknown(err)
|
|
279
|
-
});
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
async function resolveHTTPResponse(opts) {
|
|
283
|
-
const { createContext , onError , router , req } = opts;
|
|
284
|
-
const batchingEnabled = opts.batching?.enabled ?? true;
|
|
285
|
-
if (req.method === 'HEAD') {
|
|
286
|
-
// can be used for lambda warmup
|
|
249
|
+
/**
|
|
250
|
+
* The default check to see if we're in a server
|
|
251
|
+
*/ const isServerDefault = typeof window === 'undefined' || 'Deno' in window || process.env.NODE_ENV === 'test' || !!process.env.JEST_WORKER_ID;
|
|
252
|
+
|
|
253
|
+
function transformTRPCResponseItem(router, item) {
|
|
254
|
+
if ('error' in item) {
|
|
287
255
|
return {
|
|
288
|
-
|
|
256
|
+
...item,
|
|
257
|
+
error: router._def.transformer.output.serialize(item.error)
|
|
289
258
|
};
|
|
290
259
|
}
|
|
291
|
-
|
|
292
|
-
let ctx = undefined;
|
|
293
|
-
let paths = undefined;
|
|
294
|
-
const isBatchCall = !!req.query.get('batch');
|
|
295
|
-
function endResponse(untransformedJSON, errors) {
|
|
296
|
-
let status = getHTTPStatusCode(untransformedJSON);
|
|
297
|
-
const headers = {
|
|
298
|
-
'Content-Type': 'application/json'
|
|
299
|
-
};
|
|
300
|
-
const meta = opts.responseMeta?.({
|
|
301
|
-
ctx,
|
|
302
|
-
paths,
|
|
303
|
-
type,
|
|
304
|
-
data: Array.isArray(untransformedJSON) ? untransformedJSON : [
|
|
305
|
-
untransformedJSON
|
|
306
|
-
],
|
|
307
|
-
errors
|
|
308
|
-
}) ?? {};
|
|
309
|
-
for (const [key, value] of Object.entries(meta.headers ?? {})){
|
|
310
|
-
headers[key] = value;
|
|
311
|
-
}
|
|
312
|
-
if (meta.status) {
|
|
313
|
-
status = meta.status;
|
|
314
|
-
}
|
|
315
|
-
const transformedJSON = transformTRPCResponse(router, untransformedJSON);
|
|
316
|
-
const body = JSON.stringify(transformedJSON);
|
|
260
|
+
if ('data' in item.result) {
|
|
317
261
|
return {
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
}
|
|
323
|
-
try {
|
|
324
|
-
if (opts.error) {
|
|
325
|
-
throw opts.error;
|
|
326
|
-
}
|
|
327
|
-
if (isBatchCall && !batchingEnabled) {
|
|
328
|
-
throw new Error(`Batching is not enabled on the server`);
|
|
329
|
-
}
|
|
330
|
-
if (type === 'subscription') {
|
|
331
|
-
throw new TRPCError({
|
|
332
|
-
message: 'Subscriptions should use wsLink',
|
|
333
|
-
code: 'METHOD_NOT_SUPPORTED'
|
|
334
|
-
});
|
|
335
|
-
}
|
|
336
|
-
if (type === 'unknown') {
|
|
337
|
-
throw new TRPCError({
|
|
338
|
-
message: `Unexpected request method ${req.method}`,
|
|
339
|
-
code: 'METHOD_NOT_SUPPORTED'
|
|
340
|
-
});
|
|
341
|
-
}
|
|
342
|
-
const rawInput = getRawProcedureInputOrThrow(req);
|
|
343
|
-
paths = isBatchCall ? opts.path.split(',') : [
|
|
344
|
-
opts.path
|
|
345
|
-
];
|
|
346
|
-
ctx = await createContext();
|
|
347
|
-
const deserializeInputValue = (rawValue)=>{
|
|
348
|
-
return typeof rawValue !== 'undefined' ? router._def.transformer.input.deserialize(rawValue) : rawValue;
|
|
349
|
-
};
|
|
350
|
-
const getInputs = ()=>{
|
|
351
|
-
if (!isBatchCall) {
|
|
352
|
-
return {
|
|
353
|
-
0: deserializeInputValue(rawInput)
|
|
354
|
-
};
|
|
355
|
-
}
|
|
356
|
-
if (rawInput == null || typeof rawInput !== 'object' || Array.isArray(rawInput)) {
|
|
357
|
-
throw new TRPCError({
|
|
358
|
-
code: 'BAD_REQUEST',
|
|
359
|
-
message: '"input" needs to be an object when doing a batch call'
|
|
360
|
-
});
|
|
361
|
-
}
|
|
362
|
-
const input = {};
|
|
363
|
-
for(const key in rawInput){
|
|
364
|
-
const k = key;
|
|
365
|
-
const rawValue = rawInput[k];
|
|
366
|
-
const value = deserializeInputValue(rawValue);
|
|
367
|
-
input[k] = value;
|
|
262
|
+
...item,
|
|
263
|
+
result: {
|
|
264
|
+
...item.result,
|
|
265
|
+
data: router._def.transformer.output.serialize(item.result.data)
|
|
368
266
|
}
|
|
369
|
-
return input;
|
|
370
267
|
};
|
|
371
|
-
const inputs = getInputs();
|
|
372
|
-
const rawResults = await Promise.all(paths.map(async (path, index)=>{
|
|
373
|
-
const input = inputs[index];
|
|
374
|
-
try {
|
|
375
|
-
const output = await callProcedure({
|
|
376
|
-
procedures: router._def.procedures,
|
|
377
|
-
path,
|
|
378
|
-
rawInput: input,
|
|
379
|
-
ctx,
|
|
380
|
-
type
|
|
381
|
-
});
|
|
382
|
-
return {
|
|
383
|
-
input,
|
|
384
|
-
path,
|
|
385
|
-
data: output
|
|
386
|
-
};
|
|
387
|
-
} catch (cause) {
|
|
388
|
-
const error = getTRPCErrorFromUnknown(cause);
|
|
389
|
-
onError?.({
|
|
390
|
-
error,
|
|
391
|
-
path,
|
|
392
|
-
input,
|
|
393
|
-
ctx,
|
|
394
|
-
type: type,
|
|
395
|
-
req
|
|
396
|
-
});
|
|
397
|
-
return {
|
|
398
|
-
input,
|
|
399
|
-
path,
|
|
400
|
-
error
|
|
401
|
-
};
|
|
402
|
-
}
|
|
403
|
-
}));
|
|
404
|
-
const errors = rawResults.flatMap((obj)=>obj.error ? [
|
|
405
|
-
obj.error
|
|
406
|
-
] : []);
|
|
407
|
-
const resultEnvelopes = rawResults.map((obj)=>{
|
|
408
|
-
const { path , input } = obj;
|
|
409
|
-
if (obj.error) {
|
|
410
|
-
return {
|
|
411
|
-
error: router.getErrorShape({
|
|
412
|
-
error: obj.error,
|
|
413
|
-
type,
|
|
414
|
-
path,
|
|
415
|
-
input,
|
|
416
|
-
ctx
|
|
417
|
-
})
|
|
418
|
-
};
|
|
419
|
-
} else {
|
|
420
|
-
return {
|
|
421
|
-
result: {
|
|
422
|
-
data: obj.data
|
|
423
|
-
}
|
|
424
|
-
};
|
|
425
|
-
}
|
|
426
|
-
});
|
|
427
|
-
const result = isBatchCall ? resultEnvelopes : resultEnvelopes[0];
|
|
428
|
-
return endResponse(result, errors);
|
|
429
|
-
} catch (cause) {
|
|
430
|
-
// we get here if
|
|
431
|
-
// - batching is called when it's not enabled
|
|
432
|
-
// - `createContext()` throws
|
|
433
|
-
// - post body is too large
|
|
434
|
-
// - input deserialization fails
|
|
435
|
-
const error = getTRPCErrorFromUnknown(cause);
|
|
436
|
-
onError?.({
|
|
437
|
-
error,
|
|
438
|
-
path: undefined,
|
|
439
|
-
input: undefined,
|
|
440
|
-
ctx,
|
|
441
|
-
type: type,
|
|
442
|
-
req
|
|
443
|
-
});
|
|
444
|
-
return endResponse({
|
|
445
|
-
error: router.getErrorShape({
|
|
446
|
-
error,
|
|
447
|
-
type,
|
|
448
|
-
path: undefined,
|
|
449
|
-
input: undefined,
|
|
450
|
-
ctx
|
|
451
|
-
})
|
|
452
|
-
}, [
|
|
453
|
-
error
|
|
454
|
-
]);
|
|
455
268
|
}
|
|
269
|
+
return item;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Takes a unserialized `TRPCResponse` and serializes it with the router's transformers
|
|
273
|
+
**/ function transformTRPCResponse(router, itemOrItems) {
|
|
274
|
+
return Array.isArray(itemOrItems) ? itemOrItems.map((item)=>transformTRPCResponseItem(router, item)) : transformTRPCResponseItem(router, itemOrItems);
|
|
456
275
|
}
|
|
457
276
|
|
|
458
|
-
export { defaultTransformer as a,
|
|
277
|
+
export { defaultTransformer as a, getHTTPStatusCodeFromError as b, createRouterFactory as c, defaultFormatter as d, callProcedure as e, getHTTPStatusCode as f, getDataTransformer as g, isServerDefault as i, mergeWithoutOverrides as m, procedureTypes as p, transformTRPCResponse as t };
|
package/dist/types.d.ts
CHANGED
|
@@ -2,12 +2,19 @@
|
|
|
2
2
|
* @internal
|
|
3
3
|
*/
|
|
4
4
|
export declare type identity<TType> = TType;
|
|
5
|
+
declare type InferOptional<TType, TKeys extends keyof TType> = Partial<Pick<TType, TKeys>> & Omit<TType, TKeys>;
|
|
6
|
+
declare type OmitNever<TType> = Pick<TType, {
|
|
7
|
+
[K in keyof TType]: TType[K] extends never ? never : K;
|
|
8
|
+
}[keyof TType]>;
|
|
9
|
+
declare type UndefinedKeys<TType> = keyof OmitNever<{
|
|
10
|
+
[K in keyof TType]: TType[K] extends undefined ? TType : never;
|
|
11
|
+
}>;
|
|
5
12
|
/**
|
|
6
13
|
* @internal
|
|
7
14
|
*/
|
|
8
|
-
export declare type FlatOverwrite<TType, TWith> =
|
|
15
|
+
export declare type FlatOverwrite<TType, TWith> = Simplify<InferOptional<{
|
|
9
16
|
[TKey in keyof TWith | keyof TType]: TKey extends keyof TWith ? TWith[TKey] : TKey extends keyof TType ? TType[TKey] : never;
|
|
10
|
-
}
|
|
17
|
+
}, UndefinedKeys<TType> | UndefinedKeys<TWith>>>;
|
|
11
18
|
/**
|
|
12
19
|
* @public
|
|
13
20
|
*/
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,oBAAY,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC;AAEpC;;GAEG;AACH,oBAAY,aAAa,CAAC,KAAK,EAAE,KAAK,IAAI,QAAQ,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,oBAAY,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC;AAEpC,aAAK,aAAa,CAAC,KAAK,EAAE,KAAK,SAAS,MAAM,KAAK,IAAI,OAAO,CAC5D,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CACnB,GACC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAErB,aAAK,SAAS,CAAC,KAAK,IAAI,IAAI,CAC1B,KAAK,EACL;KACG,CAAC,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,GAAG,CAAC;CACvD,CAAC,MAAM,KAAK,CAAC,CACf,CAAC;AAEF,aAAK,aAAa,CAAC,KAAK,IAAI,MAAM,SAAS,CAAC;KACzC,CAAC,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;CAC/D,CAAC,CAAC;AAEH;;GAEG;AACH,oBAAY,aAAa,CAAC,KAAK,EAAE,KAAK,IAAI,QAAQ,CAChD,aAAa,CACX;KACG,IAAI,IAAI,MAAM,KAAK,GAAG,MAAM,KAAK,GAAG,IAAI,SAAS,MAAM,KAAK,GACzD,KAAK,CAAC,IAAI,CAAC,GACX,IAAI,SAAS,MAAM,KAAK,GACxB,KAAK,CAAC,IAAI,CAAC,GACX,KAAK;CACV,EACD,aAAa,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAC5C,CACF,CAAC;AAEF;;GAEG;AACH,oBAAY,KAAK,CAAC,KAAK,IAAI,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC;AAEpD;;GAEG;AACH,oBAAY,OAAO,CAAC,KAAK,IAAI,KAAK,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAC3D,OAAO,CAAC,CAAC,CAAC,GACV,KAAK,CAAC;AAEV;;GAEG;AACH,oBAAY,QAAQ,CAAC,KAAK,IAAI;KAAG,OAAO,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;CAAE,CAAC;AAE3E;;GAEG;AACH,oBAAY,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,SAAS,CAAC,CAAC;AAE5D;;GAEG;AACH,oBAAY,YAAY,CAAC,KAAK,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAEzD;;;;;GAKG;AACH,oBAAY,SAAS,CAAC,KAAK,IAAI,KAAK,GAAG;KACpC,OAAO,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;CACzC,CAAC;AAEF;;GAEG;AACH,oBAAY,oBAAoB,CAAC,SAAS,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,IACtE,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAEjC,aAAK,UAAU,CAAC,IAAI,SAAS,MAAM,EAAE,OAAO,IAAI;KAC7C,IAAI,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,OAAO,GAAG,IAAI,GAAG,KAAK;CAChE,CAAC,MAAM,IAAI,CAAC,CAAC;AAEd;;GAEG;AACH,oBAAY,MAAM,CAAC,IAAI,SAAS,MAAM,EAAE,OAAO,IAAI,IAAI,CACrD,IAAI,EACJ,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAC1B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trpc/server",
|
|
3
|
-
"version": "10.0.0-proxy-beta.
|
|
3
|
+
"version": "10.0.0-proxy-beta.14",
|
|
4
4
|
"description": "tRPC Server",
|
|
5
5
|
"author": "KATT",
|
|
6
6
|
"license": "MIT",
|
|
@@ -122,10 +122,10 @@
|
|
|
122
122
|
"@testing-library/jest-dom": "^5.16.5",
|
|
123
123
|
"@testing-library/react": "^13.4.0",
|
|
124
124
|
"@testing-library/user-event": "^14.4.3",
|
|
125
|
-
"@trpc/client": "10.0.0-proxy-beta.
|
|
126
|
-
"@trpc/next": "10.0.0-proxy-beta.
|
|
127
|
-
"@trpc/react": "10.0.0-proxy-beta.
|
|
128
|
-
"@trpc/server": "10.0.0-proxy-beta.
|
|
125
|
+
"@trpc/client": "10.0.0-proxy-beta.14",
|
|
126
|
+
"@trpc/next": "10.0.0-proxy-beta.14",
|
|
127
|
+
"@trpc/react": "10.0.0-proxy-beta.14",
|
|
128
|
+
"@trpc/server": "10.0.0-proxy-beta.14",
|
|
129
129
|
"@types/aws-lambda": "^8.10.97",
|
|
130
130
|
"@types/express": "^4.17.12",
|
|
131
131
|
"@types/hash-sum": "^1.0.0",
|
|
@@ -161,5 +161,5 @@
|
|
|
161
161
|
"yup": "^0.32.8",
|
|
162
162
|
"zod": "^3.0.0"
|
|
163
163
|
},
|
|
164
|
-
"gitHead": "
|
|
164
|
+
"gitHead": "55d4775d90e8620889a6828a4a3d3373c1bdd5f5"
|
|
165
165
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { FastifyReply, FastifyRequest } from 'fastify';
|
|
2
|
-
import { assertNotBrowser } from '../../assertNotBrowser';
|
|
3
2
|
import { AnyRouter, inferRouterContext } from '../../core';
|
|
4
3
|
import {
|
|
5
4
|
HTTPBaseHandlerOptions,
|
|
@@ -8,8 +7,6 @@ import {
|
|
|
8
7
|
import { resolveHTTPResponse } from '../../http/resolveHTTPResponse';
|
|
9
8
|
import { NodeHTTPCreateContextOption } from '../node-http';
|
|
10
9
|
|
|
11
|
-
assertNotBrowser();
|
|
12
|
-
|
|
13
10
|
export type FastifyHandlerOptions<
|
|
14
11
|
TRouter extends AnyRouter,
|
|
15
12
|
TRequest extends FastifyRequest,
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
import { assertNotBrowser } from '../../assertNotBrowser';
|
|
2
1
|
import { AnyRouter } from '../../core';
|
|
3
2
|
import { HTTPRequest } from '../../http/internals/types';
|
|
4
3
|
import { resolveHTTPResponse } from '../../http/resolveHTTPResponse';
|
|
5
4
|
import { FetchHandlerOptions } from './types';
|
|
6
5
|
|
|
7
|
-
assertNotBrowser();
|
|
8
|
-
|
|
9
6
|
export type FetchHandlerRequestOptions<TRouter extends AnyRouter> = {
|
|
10
7
|
req: Request;
|
|
11
8
|
endpoint: string;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
2
|
-
import { assertNotBrowser } from '../../assertNotBrowser';
|
|
3
2
|
import { AnyRouter } from '../../core';
|
|
4
3
|
import { inferRouterDef } from '../../core/types';
|
|
5
4
|
import { HTTPRequest } from '../../http/internals/types';
|
|
@@ -11,8 +10,6 @@ import {
|
|
|
11
10
|
NodeHTTPResponse,
|
|
12
11
|
} from './types';
|
|
13
12
|
|
|
14
|
-
assertNotBrowser();
|
|
15
|
-
|
|
16
13
|
type NodeHTTPRequestHandlerOptions<
|
|
17
14
|
TRouter extends AnyRouter,
|
|
18
15
|
TRequest extends NodeHTTPRequest,
|
package/src/adapters/ws.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { IncomingMessage } from 'http';
|
|
2
2
|
import ws from 'ws';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
AnyRouter,
|
|
5
|
+
ProcedureType,
|
|
6
|
+
callProcedure,
|
|
7
|
+
inferRouterContext,
|
|
8
|
+
} from '../core';
|
|
4
9
|
import { TRPCError } from '../error/TRPCError';
|
|
5
10
|
import { getCauseFromUnknown, getTRPCErrorFromUnknown } from '../error/utils';
|
|
6
11
|
import { transformTRPCResponse } from '../internals/transformTRPCResponse';
|
|
@@ -160,8 +165,13 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
160
165
|
try {
|
|
161
166
|
await ctxPromise; // asserts context has been set
|
|
162
167
|
|
|
163
|
-
const
|
|
164
|
-
|
|
168
|
+
const result = await callProcedure({
|
|
169
|
+
procedures: router._def.procedures,
|
|
170
|
+
path,
|
|
171
|
+
rawInput: input,
|
|
172
|
+
ctx,
|
|
173
|
+
type,
|
|
174
|
+
});
|
|
165
175
|
|
|
166
176
|
if (type === 'subscription') {
|
|
167
177
|
if (!isObservable(result)) {
|
package/src/core/index.ts
CHANGED
package/src/core/initTRPC.ts
CHANGED
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
CreateRootConfig,
|
|
19
19
|
InitGenerics,
|
|
20
20
|
InitOptions,
|
|
21
|
+
isServerDefault,
|
|
21
22
|
} from './internals/config';
|
|
22
23
|
import { createBuilder } from './internals/procedureBuilder';
|
|
23
24
|
import { PickFirstDefined, ValidateShape } from './internals/utils';
|
|
@@ -95,6 +96,17 @@ function createTRPCInner<TParams extends Partial<InitGenerics>>() {
|
|
|
95
96
|
transformer: $Transformer;
|
|
96
97
|
}>;
|
|
97
98
|
|
|
99
|
+
{
|
|
100
|
+
// Server check
|
|
101
|
+
const isServer: boolean = options?.isServer ?? isServerDefault;
|
|
102
|
+
|
|
103
|
+
if (!isServer && options?.allowOutsideOfServer !== true) {
|
|
104
|
+
throw new Error(
|
|
105
|
+
`You're trying to use @trpc/server in a non-server environment. This is not supported by default.`,
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
98
110
|
const errorFormatter = options?.errorFormatter ?? defaultFormatter;
|
|
99
111
|
const transformer = getDataTransformer(
|
|
100
112
|
options?.transformer ?? defaultTransformer,
|