@trpc/server
Version:
49 lines (45 loc) • 1.34 kB
text/typescript
/**
* If you're making an adapter for tRPC and looking at this file for reference, you should import types and functions from `@trpc/server` and `@trpc/server/http`
*
* @example
* ```ts
* import type { AnyTRPCRouter } from '@trpc/server'
* import type { HTTPBaseHandlerOptions } from '@trpc/server/http'
* ```
*/
import type * as express from 'express';
import type { AnyRouter } from '../@trpc/server';
// eslint-disable-next-line no-restricted-imports
import { run } from '../unstable-core-do-not-import';
import type {
NodeHTTPCreateContextFnOptions,
NodeHTTPHandlerOptions,
} from './node-http';
import { internal_exceptionHandler, nodeHTTPRequestHandler } from './node-http';
export type CreateExpressContextOptions = NodeHTTPCreateContextFnOptions<
express.Request,
express.Response
>;
export function createExpressMiddleware<TRouter extends AnyRouter>(
opts: NodeHTTPHandlerOptions<TRouter, express.Request, express.Response>,
): express.Handler {
return (req, res) => {
let path = '';
run(async () => {
path = req.path.slice(req.path.lastIndexOf('/') + 1);
await nodeHTTPRequestHandler({
...(opts as any),
req,
res,
path,
});
}).catch(
internal_exceptionHandler({
req,
res,
path,
...opts,
}),
);
};
}