Skip to content

Commit bc2ca33

Browse files
committed
feat: support fromPlainHandler
1 parent 563313d commit bc2ca33

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

src/adapters/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
export * from "./node";
22

3-
export { type WebHandler, toWebHandler } from "./web";
3+
export { type WebHandler, toWebHandler, fromWebHandler } from "./web";
44

55
export {
66
type PlainHandler,
77
type PlainRequest,
88
type PlainResponse,
99
toPlainHandler,
10+
fromPlainHandler,
1011
} from "./plain";

src/adapters/plain.ts

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@ import { ServerResponse as NodeServerResponse } from "unenv/runtime/node/http/_r
33
import type { App } from "../app";
44
import type { HTTPMethod } from "../types";
55
import { createError, isError, sendError } from "../error";
6-
import { H3Event, createEvent } from "../event";
7-
import { splitCookiesString } from "../utils";
6+
import { H3Event, createEvent, eventHandler } from "../event";
7+
import {
8+
setResponseHeader,
9+
setResponseStatus,
10+
splitCookiesString,
11+
} from "../utils";
812

913
export interface PlainRequest {
1014
_eventOverrides?: Partial<H3Event>;
@@ -33,6 +37,24 @@ export function toPlainHandler(app: App) {
3337
return handler;
3438
}
3539

40+
/** @experimental */
41+
export function fromPlainHandler(handler: PlainHandler) {
42+
return eventHandler(async (event) => {
43+
const res = await handler({
44+
method: event.method,
45+
path: event.path,
46+
headers: Object.fromEntries(event.headers.entries()),
47+
body: event.rawBody,
48+
context: event.context,
49+
});
50+
setResponseStatus(event, res.status, res.statusText);
51+
for (const [key, value] of res.headers) {
52+
setResponseHeader(event, key, value);
53+
}
54+
return res.body;
55+
});
56+
}
57+
3658
// --- Internal ---
3759

3860
export async function _handlePlainRequest(app: App, request: PlainRequest) {

0 commit comments

Comments
 (0)