|
5 | 5 | NowRequest, |
6 | 6 | NowResponse, |
7 | 7 | } from '@vercel/node'; |
8 | | -import { IncomingMessage, ServerResponse } from 'http'; |
| 8 | +import { IncomingMessage, ServerResponse, Server, RequestListener } from 'http'; |
9 | 9 | import { parse } from 'cookie'; |
10 | 10 | import { parse as parseContentType } from 'content-type'; |
11 | 11 | import { parse as parseQS } from 'querystring'; |
@@ -109,11 +109,32 @@ export const enhanceResponse = (res: ServerResponse): NowResponse => { |
109 | 109 | return nowRes; |
110 | 110 | }; |
111 | 111 |
|
112 | | -export const createServer = ( |
113 | | - route: (req: NowRequest, res: NowResponse) => any | Promise<any> |
114 | | -) => |
115 | | - micro(async (req: IncomingMessage, res: ServerResponse) => { |
116 | | - const nowReq = await enhanceRequest(req); |
117 | | - const nowRes = enhanceResponse(res); |
118 | | - return await route(nowReq, nowRes); |
119 | | - }); |
| 112 | +export interface Config { |
| 113 | + disableHelpers?: boolean; |
| 114 | +} |
| 115 | + |
| 116 | +interface DefaultConfig { |
| 117 | + disableHelpers: false; |
| 118 | +} |
| 119 | + |
| 120 | +type NowRoute = (req: NowRequest, res: NowResponse) => void; |
| 121 | + |
| 122 | +export const createServer = <C extends Config = DefaultConfig>( |
| 123 | + route: C extends undefined |
| 124 | + ? NowRoute |
| 125 | + : C['disableHelpers'] extends true |
| 126 | + ? RequestListener |
| 127 | + : NowRoute, |
| 128 | + config?: C |
| 129 | +) => { |
| 130 | + if (config != null && config.disableHelpers) { |
| 131 | + // @ts-expect-error |
| 132 | + return new Server(route); |
| 133 | + } else { |
| 134 | + return micro(async (req: IncomingMessage, res: ServerResponse) => { |
| 135 | + const nowReq = await enhanceRequest(req); |
| 136 | + const nowRes = enhanceResponse(res); |
| 137 | + return await route(nowReq, nowRes); |
| 138 | + }); |
| 139 | + } |
| 140 | +}; |
0 commit comments