@trpc/server 10.0.0-alpha.19 → 10.0.0-alpha.21

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.
Files changed (106) hide show
  1. package/adapters/express/dist/trpc-server-adapters-express.cjs.dev.js +5 -5
  2. package/adapters/express/dist/trpc-server-adapters-express.cjs.prod.js +5 -5
  3. package/adapters/express/dist/trpc-server-adapters-express.esm.js +5 -5
  4. package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.dev.js +16 -9
  5. package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.prod.js +16 -9
  6. package/adapters/fastify/dist/trpc-server-adapters-fastify.esm.js +16 -9
  7. package/adapters/next/dist/trpc-server-adapters-next.cjs.dev.js +3 -3
  8. package/adapters/next/dist/trpc-server-adapters-next.cjs.prod.js +3 -3
  9. package/adapters/next/dist/trpc-server-adapters-next.esm.js +3 -3
  10. package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.dev.js +3 -3
  11. package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.prod.js +3 -3
  12. package/adapters/node-http/dist/trpc-server-adapters-node-http.esm.js +3 -3
  13. package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.dev.js +3 -3
  14. package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.prod.js +3 -3
  15. package/adapters/standalone/dist/trpc-server-adapters-standalone.esm.js +3 -3
  16. package/adapters/ws/dist/trpc-server-adapters-ws.cjs.dev.js +4 -4
  17. package/adapters/ws/dist/trpc-server-adapters-ws.cjs.prod.js +4 -4
  18. package/adapters/ws/dist/trpc-server-adapters-ws.esm.js +4 -4
  19. package/dist/TRPCError.d.ts +3 -3
  20. package/dist/TRPCError.d.ts.map +1 -1
  21. package/dist/adapters/express.js +6 -7
  22. package/dist/adapters/express.mjs +6 -7
  23. package/dist/adapters/fastify/fastifyRequestHandler.d.ts +2 -2
  24. package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
  25. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +1 -1
  26. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -1
  27. package/dist/adapters/fastify/index.js +18 -12
  28. package/dist/adapters/fastify/index.mjs +17 -11
  29. package/dist/adapters/next.d.ts +1 -1
  30. package/dist/adapters/next.d.ts.map +1 -1
  31. package/dist/adapters/next.js +4 -5
  32. package/dist/adapters/next.mjs +4 -5
  33. package/dist/adapters/node-http/index.js +4 -5
  34. package/dist/adapters/node-http/index.mjs +4 -5
  35. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts +1 -1
  36. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
  37. package/dist/adapters/node-http/types.d.ts +3 -3
  38. package/dist/adapters/node-http/types.d.ts.map +1 -1
  39. package/dist/adapters/standalone.d.ts.map +1 -1
  40. package/dist/adapters/standalone.js +10 -8
  41. package/dist/adapters/standalone.mjs +10 -7
  42. package/dist/adapters/ws.d.ts +3 -3
  43. package/dist/adapters/ws.d.ts.map +1 -1
  44. package/dist/adapters/ws.js +5 -5
  45. package/dist/adapters/ws.mjs +5 -5
  46. package/dist/assertNotBrowser.d.ts.map +1 -1
  47. package/dist/{codes-7f46544e.js → codes-4e4d55a9.js} +2 -0
  48. package/dist/{codes-7a3d4f65.mjs → codes-6c13cf43.mjs} +2 -0
  49. package/dist/http/internals/getHTTPStatusCode.d.ts +2 -1
  50. package/dist/http/internals/getHTTPStatusCode.d.ts.map +1 -1
  51. package/dist/http/internals/types.d.ts +4 -3
  52. package/dist/http/internals/types.d.ts.map +1 -1
  53. package/dist/http/resolveHTTPResponse.d.ts +3 -3
  54. package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
  55. package/dist/index.js +44 -19
  56. package/dist/index.mjs +46 -21
  57. package/dist/internals/BaseHandlerOptions.d.ts +1 -1
  58. package/dist/internals/BaseHandlerOptions.d.ts.map +1 -1
  59. package/dist/internals/OnErrorFunction.d.ts +1 -1
  60. package/dist/internals/OnErrorFunction.d.ts.map +1 -1
  61. package/dist/internals/errors.d.ts +1 -0
  62. package/dist/internals/errors.d.ts.map +1 -1
  63. package/dist/internals/middlewares.d.ts +3 -2
  64. package/dist/internals/middlewares.d.ts.map +1 -1
  65. package/dist/internals/procedure.d.ts +44 -32
  66. package/dist/internals/procedure.d.ts.map +1 -1
  67. package/dist/{nodeHTTPRequestHandler-f9b7cd2d.mjs → nodeHTTPRequestHandler-13c4bded.mjs} +2 -3
  68. package/dist/{nodeHTTPRequestHandler-e02d6e5d.js → nodeHTTPRequestHandler-745e43e5.js} +3 -4
  69. package/dist/{resolveHTTPResponse-d4da195d.js → resolveHTTPResponse-b1167b6a.js} +6 -5
  70. package/dist/{resolveHTTPResponse-ca8bc869.mjs → resolveHTTPResponse-de40fda7.mjs} +6 -5
  71. package/dist/router.d.ts +33 -29
  72. package/dist/router.d.ts.map +1 -1
  73. package/dist/rpc/codes.d.ts +2 -0
  74. package/dist/rpc/codes.d.ts.map +1 -1
  75. package/dist/rpc/index.js +1 -1
  76. package/dist/rpc/index.mjs +1 -1
  77. package/dist/{subscription-f36af4f8.js → subscription-4b936ba3.js} +2 -2
  78. package/dist/{subscription-7ec5884e.mjs → subscription-8a85f253.mjs} +2 -2
  79. package/dist/{transformTRPCResponse-f9337285.mjs → transformTRPCResponse-9fdeecca.mjs} +50 -38
  80. package/dist/{transformTRPCResponse-eeeb5300.js → transformTRPCResponse-a57d3226.js} +50 -37
  81. package/package.json +7 -3
  82. package/src/TRPCError.ts +3 -3
  83. package/src/adapters/express.ts +2 -2
  84. package/src/adapters/fastify/fastifyRequestHandler.ts +6 -8
  85. package/src/adapters/fastify/fastifyTRPCPlugin.ts +14 -6
  86. package/src/adapters/next.ts +6 -2
  87. package/src/adapters/node-http/internals/getPostBody.test.ts +2 -1
  88. package/src/adapters/node-http/nodeHTTPRequestHandler.ts +5 -6
  89. package/src/adapters/node-http/types.ts +3 -3
  90. package/src/adapters/standalone.ts +11 -3
  91. package/src/adapters/ws.ts +9 -9
  92. package/src/assertNotBrowser.ts +1 -0
  93. package/src/http/internals/getHTTPStatusCode.ts +2 -1
  94. package/src/http/internals/types.ts +6 -7
  95. package/src/http/resolveHTTPResponse.ts +7 -7
  96. package/src/internals/BaseHandlerOptions.ts +1 -1
  97. package/src/internals/OnErrorFunction.ts +1 -1
  98. package/src/internals/errors.ts +20 -4
  99. package/src/internals/middlewares.ts +3 -2
  100. package/src/internals/procedure.ts +175 -68
  101. package/src/router.ts +165 -49
  102. package/src/rpc/codes.ts +1 -0
  103. package/src/subscription.ts +1 -1
  104. package/ws/dist/trpc-server-ws.cjs.dev.js +2 -2
  105. package/ws/dist/trpc-server-ws.cjs.prod.js +2 -2
  106. package/ws/dist/trpc-server-ws.esm.js +2 -2
@@ -1,10 +1,10 @@
1
1
  /// <reference types="fastify-websocket" />
2
2
  import { FastifyInstance, FastifyReply, FastifyRequest } from 'fastify';
3
- import { fastifyRequestHandler } from './fastifyRequestHandler';
4
- import { NodeHTTPCreateContextFnOptions } from '../node-http';
5
- import { applyWSSHandler, WSSHandlerOptions } from '../ws';
6
3
  import { FastifyHandlerOptions } from '.';
7
4
  import { AnyRouter } from '../..';
5
+ import { NodeHTTPCreateContextFnOptions } from '../node-http';
6
+ import { WSSHandlerOptions, applyWSSHandler } from '../ws';
7
+ import { fastifyRequestHandler } from './fastifyRequestHandler';
8
8
 
9
9
  export interface FastifyTRPCPluginOptions<TRouter extends AnyRouter> {
10
10
  prefix?: string;
@@ -30,9 +30,17 @@ export function fastifyTRPCPlugin<TRouter extends AnyRouter>(
30
30
  },
31
31
  );
32
32
 
33
- fastify.all(`${opts.prefix ?? ''}/:path`, (req, res) => {
33
+ let prefix = opts.prefix ?? '';
34
+
35
+ // https://github.com/fastify/fastify-plugin/blob/fe079bef6557a83794bf437e14b9b9edb8a74104/plugin.js#L11
36
+ // @ts-expect-error property 'default' does not exists on type ...
37
+ if (typeof fastifyTRPCPlugin.default !== 'function') {
38
+ prefix = ''; // handled by fastify internally
39
+ }
40
+
41
+ fastify.all(`${prefix}/:path`, async (req, res) => {
34
42
  const path = (req.params as any).path;
35
- fastifyRequestHandler({ ...opts.trpcOptions, req, res, path });
43
+ await fastifyRequestHandler({ ...opts.trpcOptions, req, res, path });
36
44
  });
37
45
 
38
46
  if (opts.useWSS) {
@@ -41,7 +49,7 @@ export function fastifyTRPCPlugin<TRouter extends AnyRouter>(
41
49
  wss: fastify.websocketServer,
42
50
  });
43
51
  // eslint-disable-next-line @typescript-eslint/no-empty-function
44
- fastify.get(opts.prefix ?? '/', { websocket: true }, () => {});
52
+ fastify.get(prefix ?? '/', { websocket: true }, () => {});
45
53
  }
46
54
 
47
55
  done();
@@ -1,9 +1,13 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3
- import type { NextApiHandler, NextApiRequest, NextApiResponse } from 'next';
3
+ import type {
4
+ NextApiHandler,
5
+ NextApiRequest,
6
+ NextApiResponse,
7
+ } from 'next/types';
8
+ import { TRPCError } from '../TRPCError';
4
9
  import { AnyRouter } from '../router';
5
10
  import { TRPCErrorResponse } from '../rpc';
6
- import { TRPCError } from '../TRPCError';
7
11
  import { nodeHTTPRequestHandler } from './node-http';
8
12
  import {
9
13
  NodeHTTPCreateContextFnOptions,
@@ -1,5 +1,6 @@
1
- import { getPostBody } from './getPostBody';
2
1
  import { EventEmitter } from 'events';
2
+ import { getPostBody } from './getPostBody';
3
+
3
4
  test('has body', async () => {
4
5
  const body = {};
5
6
  const resolvedBody = await getPostBody({ req: { body } } as any);
@@ -1,15 +1,14 @@
1
1
  /* eslint-disable @typescript-eslint/no-non-null-assertion */
2
- import { URLSearchParams } from 'url';
3
2
  import { assertNotBrowser } from '../../assertNotBrowser';
3
+ import { HTTPRequest } from '../../http/internals/types';
4
+ import { resolveHTTPResponse } from '../../http/resolveHTTPResponse';
5
+ import { AnyRouter, inferRouterContext } from '../../router';
6
+ import { getPostBody } from './internals/getPostBody';
4
7
  import {
8
+ NodeHTTPHandlerOptions,
5
9
  NodeHTTPRequest,
6
10
  NodeHTTPResponse,
7
- NodeHTTPHandlerOptions,
8
11
  } from './types';
9
- import { AnyRouter, inferRouterContext } from '../../router';
10
- import { getPostBody } from './internals/getPostBody';
11
- import { HTTPRequest } from '../../http/internals/types';
12
- import { resolveHTTPResponse } from '../../http/resolveHTTPResponse';
13
12
 
14
13
  assertNotBrowser();
15
14
 
@@ -1,15 +1,15 @@
1
- import http from 'http';
1
+ import { IncomingMessage, ServerResponse } from 'http';
2
2
  import qs from 'qs';
3
3
  import { inferRouterContext } from '../..';
4
4
  import { HTTPBaseHandlerOptions } from '../../http/internals/types';
5
5
  import { AnyRouter } from '../../router';
6
6
 
7
- export type NodeHTTPRequest = http.IncomingMessage & {
7
+ export type NodeHTTPRequest = IncomingMessage & {
8
8
  method?: string;
9
9
  query?: qs.ParsedQs;
10
10
  body?: unknown;
11
11
  };
12
- export type NodeHTTPResponse = http.ServerResponse;
12
+ export type NodeHTTPResponse = ServerResponse;
13
13
 
14
14
  export type NodeHTTPCreateContextOption<
15
15
  TRouter extends AnyRouter,
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-non-null-assertion */
2
+
2
3
  /* eslint-disable @typescript-eslint/no-explicit-any */
3
4
  import http from 'http';
4
- import url from 'url';
5
5
  import { AnyRouter } from '../router';
6
6
  import {
7
7
  NodeHTTPCreateContextFnOptions,
@@ -21,12 +21,20 @@ export function createHTTPHandler<TRouter extends AnyRouter>(
21
21
  opts: CreateHTTPHandlerOptions<TRouter>,
22
22
  ) {
23
23
  return async (req: http.IncomingMessage, res: http.ServerResponse) => {
24
- const endpoint = url.parse(req.url!).pathname!.slice(1);
24
+ // if no hostname, set a dummy one
25
+ const href = req.url!.startsWith('/')
26
+ ? `http://127.0.0.1${req.url}`
27
+ : req.url!;
28
+
29
+ // get procedure path and remove the leading slash
30
+ // /procedure -> procedure
31
+ const path = new URL(href).pathname.slice(1);
32
+
25
33
  await nodeHTTPRequestHandler({
26
34
  ...opts,
27
35
  req,
28
36
  res,
29
- path: endpoint,
37
+ path,
30
38
  });
31
39
  };
32
40
  }
@@ -1,10 +1,11 @@
1
- import http from 'http';
1
+ import { IncomingMessage } from 'http';
2
2
  import ws from 'ws';
3
+ import { TRPCError } from '../TRPCError';
3
4
  import { BaseHandlerOptions } from '../internals/BaseHandlerOptions';
4
5
  import { callProcedure } from '../internals/callProcedure';
5
- import { getErrorFromUnknown } from '../internals/errors';
6
+ import { getCauseFromUnknown, getErrorFromUnknown } from '../internals/errors';
6
7
  import { transformTRPCResponse } from '../internals/transformTRPCResponse';
7
- import { AnyRouter, inferRouterContext, ProcedureType } from '../router';
8
+ import { AnyRouter, ProcedureType, inferRouterContext } from '../router';
8
9
  import {
9
10
  TRPCErrorResponse,
10
11
  TRPCReconnectNotification,
@@ -13,7 +14,6 @@ import {
13
14
  } from '../rpc';
14
15
  import { Subscription } from '../subscription';
15
16
  import { CombinedDataTransformer } from '../transformer';
16
- import { TRPCError } from '../TRPCError';
17
17
  import { NodeHTTPCreateContextOption } from './node-http';
18
18
 
19
19
  /* istanbul ignore next */
@@ -84,11 +84,11 @@ function parseMessage(
84
84
  */
85
85
  export type WSSHandlerOptions<TRouter extends AnyRouter> = BaseHandlerOptions<
86
86
  TRouter,
87
- http.IncomingMessage
87
+ IncomingMessage
88
88
  > & {
89
89
  wss: ws.Server;
90
90
  process?: NodeJS.Process;
91
- } & NodeHTTPCreateContextOption<TRouter, http.IncomingMessage, ws>;
91
+ } & NodeHTTPCreateContextOption<TRouter, IncomingMessage, ws>;
92
92
 
93
93
  export function applyWSSHandler<TRouter extends AnyRouter>(
94
94
  opts: WSSHandlerOptions<TRouter>,
@@ -96,7 +96,7 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
96
96
  const { wss, createContext, router } = opts;
97
97
 
98
98
  const { transformer } = router._def;
99
- wss.on('connection', (client, req) => {
99
+ wss.on('connection', async (client, req) => {
100
100
  const clientSubscriptions = new Map<
101
101
  number | string,
102
102
  Subscription<TRouter>
@@ -232,7 +232,7 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
232
232
  } catch (cause) {
233
233
  const error = new TRPCError({
234
234
  code: 'PARSE_ERROR',
235
- cause,
235
+ cause: getCauseFromUnknown(cause),
236
236
  });
237
237
 
238
238
  respond({
@@ -285,7 +285,7 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
285
285
  });
286
286
  }
287
287
  }
288
- createContextAsync();
288
+ await createContextAsync();
289
289
  });
290
290
 
291
291
  return {
@@ -3,6 +3,7 @@
3
3
  export function assertNotBrowser() {
4
4
  if (
5
5
  typeof window !== 'undefined' &&
6
+ !('Deno' in window) &&
6
7
  process.env.NODE_ENV !== 'test' &&
7
8
  process.env.JEST_WORKER_ID === undefined
8
9
  ) {
@@ -1,6 +1,6 @@
1
- import { TRPCResponse, TRPC_ERROR_CODES_BY_KEY } from '../../rpc';
2
1
  import { TRPCError } from '../../TRPCError';
3
2
  import { invert } from '../../internals/invert';
3
+ import { TRPCResponse, TRPC_ERROR_CODES_BY_KEY } from '../../rpc';
4
4
 
5
5
  export const TRPC_ERROR_CODES_BY_NUMBER = invert(TRPC_ERROR_CODES_BY_KEY);
6
6
  type ValueOf<T> = T[keyof T];
@@ -17,6 +17,7 @@ const JSONRPC2_TO_HTTP_CODE: Record<
17
17
  UNAUTHORIZED: 401,
18
18
  FORBIDDEN: 403,
19
19
  TIMEOUT: 408,
20
+ CONFLICT: 409,
20
21
  CLIENT_CLOSED_REQUEST: 499,
21
22
  PRECONDITION_FAILED: 412,
22
23
  PAYLOAD_TOO_LARGE: 413,
@@ -1,15 +1,14 @@
1
+ import { TRPCError } from '../../TRPCError';
2
+ import { BaseHandlerOptions } from '../../internals/BaseHandlerOptions';
1
3
  import {
2
4
  AnyRouter,
3
- Dict,
5
+ ProcedureType,
4
6
  inferRouterContext,
5
7
  inferRouterError,
6
- ProcedureType,
7
- ResponseMeta,
8
- TRPCError,
9
- } from '@trpc/server';
10
- import { URLSearchParams } from 'url';
11
- import { BaseHandlerOptions } from '../../internals/BaseHandlerOptions';
8
+ } from '../../router';
12
9
  import { TRPCResponse } from '../../rpc';
10
+ import { Dict } from '../../types';
11
+ import { ResponseMeta } from '../ResponseMeta';
13
12
 
14
13
  export type HTTPHeaders = Dict<string | string[]>;
15
14
 
@@ -1,22 +1,22 @@
1
1
  /* eslint-disable @typescript-eslint/no-non-null-assertion */
2
- import { Maybe } from '@trpc/server';
2
+ import { TRPCError } from '../TRPCError';
3
3
  import { callProcedure } from '../internals/callProcedure';
4
- import { getErrorFromUnknown } from '../internals/errors';
4
+ import { getCauseFromUnknown, getErrorFromUnknown } from '../internals/errors';
5
5
  import { transformTRPCResponse } from '../internals/transformTRPCResponse';
6
6
  import {
7
7
  AnyRouter,
8
+ ProcedureType,
8
9
  inferRouterContext,
9
10
  inferRouterError,
10
- ProcedureType,
11
11
  } from '../router';
12
12
  import { TRPCErrorResponse, TRPCResponse, TRPCResultResponse } from '../rpc';
13
- import { TRPCError } from '../TRPCError';
13
+ import { Maybe } from '../types';
14
14
  import { getHTTPStatusCode } from './internals/getHTTPStatusCode';
15
15
  import {
16
+ HTTPBaseHandlerOptions,
16
17
  HTTPHeaders,
17
18
  HTTPRequest,
18
19
  HTTPResponse,
19
- HTTPBaseHandlerOptions,
20
20
  } from './internals/types';
21
21
 
22
22
  const HTTP_METHOD_PROCEDURE_TYPE_MAP: Record<
@@ -37,10 +37,10 @@ function getRawProcedureInputOrThrow(req: HTTPRequest) {
37
37
  return JSON.parse(raw!);
38
38
  }
39
39
  return typeof req.body === 'string' ? JSON.parse(req.body) : req.body;
40
- } catch (cause) {
40
+ } catch (err) {
41
41
  throw new TRPCError({
42
42
  code: 'PARSE_ERROR',
43
- cause,
43
+ cause: getCauseFromUnknown(err),
44
44
  });
45
45
  }
46
46
  }
@@ -1,5 +1,5 @@
1
- import { OnErrorFunction } from './OnErrorFunction';
2
1
  import { AnyRouter } from '../router';
2
+ import { OnErrorFunction } from './OnErrorFunction';
3
3
 
4
4
  /**
5
5
  * Base interface for any response handler
@@ -1,5 +1,5 @@
1
- import { AnyRouter, inferRouterContext, ProcedureType } from '../router';
2
1
  import { TRPCError } from '../TRPCError';
2
+ import { AnyRouter, ProcedureType, inferRouterContext } from '../router';
3
3
 
4
4
  export type OnErrorFunction<TRouter extends AnyRouter, TRequest> = (opts: {
5
5
  error: TRPCError;
@@ -20,14 +20,30 @@ export function getErrorFromUnknown(cause: unknown): TRPCError {
20
20
  if (cause instanceof Error && cause.name === 'TRPCError') {
21
21
  return cause as TRPCError;
22
22
  }
23
+
24
+ let errorCause: Error | undefined = undefined;
25
+ let stack: string | undefined = undefined;
26
+
27
+ if (cause instanceof Error) {
28
+ errorCause = cause;
29
+ // take stack trace from cause
30
+ stack = cause.stack;
31
+ }
32
+
23
33
  const err = new TRPCError({
24
34
  code: 'INTERNAL_SERVER_ERROR',
25
- cause,
35
+ cause: errorCause,
26
36
  });
27
37
 
28
- // take stack trace from cause
38
+ err.stack = stack;
39
+
40
+ return err;
41
+ }
42
+
43
+ export function getCauseFromUnknown(cause: unknown) {
29
44
  if (cause instanceof Error) {
30
- err.stack = cause.stack;
45
+ return cause;
31
46
  }
32
- return err;
47
+
48
+ return undefined;
33
49
  }
@@ -1,5 +1,5 @@
1
- import { ProcedureType } from '../router';
2
1
  import { TRPCError } from '../TRPCError';
2
+ import { ProcedureType } from '../router';
3
3
 
4
4
  export const middlewareMarker = Symbol('middlewareMarker');
5
5
  interface MiddlewareResultBase<TContext> {
@@ -27,11 +27,12 @@ export type MiddlewareResult<TContext> =
27
27
  | MiddlewareOKResult<TContext>
28
28
  | MiddlewareErrorResult<TContext>;
29
29
 
30
- export type MiddlewareFunction<TInputContext, TContext> = (opts: {
30
+ export type MiddlewareFunction<TInputContext, TContext, TMeta> = (opts: {
31
31
  ctx: TInputContext;
32
32
  type: ProcedureType;
33
33
  path: string;
34
34
  rawInput: unknown;
35
+ meta?: TMeta;
35
36
  next: {
36
37
  (): Promise<MiddlewareResult<TInputContext>>;
37
38
  <T>(opts: { ctx: T }): Promise<MiddlewareResult<T>>;