Skip to content

Commit

Permalink
use EventHandlerResponse when possible
Browse files Browse the repository at this point in the history
  • Loading branch information
pi0 committed Jul 26, 2023
1 parent 532df6c commit 721932f
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 12 deletions.
5 changes: 3 additions & 2 deletions src/event/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import type {
EventHandler,
LazyEventHandler,
EventHandlerRequest,
EventHandlerResponse,
} from "../types";

export function defineEventHandler<
Expand All @@ -12,7 +13,7 @@ export function defineEventHandler<
// This signature provides backwards compatibility with previous signature where first generic was return type
export function defineEventHandler<
Request = EventHandlerRequest,
Response = any
Response = EventHandlerResponse
>(
handler: EventHandler<
Request extends EventHandlerRequest ? Request : any,
Expand All @@ -24,7 +25,7 @@ export function defineEventHandler<
>;
export function defineEventHandler<
Request extends EventHandlerRequest = EventHandlerRequest,
Response = any
Response = EventHandlerResponse
>(handler: EventHandler<Request, Response>): EventHandler<Request, Response> {
handler.__is_handler__ = true;
return handler;
Expand Down
4 changes: 2 additions & 2 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,10 @@ export type InferEventInput<

export interface EventHandler<
Request extends EventHandlerRequest = EventHandlerRequest,
Response = EventHandlerResponse
Response extends EventHandlerResponse = EventHandlerResponse
> {
__is_handler__?: true;
(event: H3Event<Request>): EventHandlerResponse<Response>;
(event: H3Event<Request>): Response;
}

export type LazyEventHandler = () => EventHandler | Promise<EventHandler>;
Expand Down
12 changes: 4 additions & 8 deletions test/types.test-d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ import { describe, it, expectTypeOf } from "vitest";
import type { QueryObject } from "ufo";
import { eventHandler, H3Event, getQuery, readBody } from "../src";

type MaybePromise<T> = T | Promise<T>;

describe("types", () => {
describe("eventHandler", () => {
it("return type (inferred)", () => {
Expand All @@ -12,18 +10,16 @@ describe("types", () => {
foo: "bar",
};
});
expectTypeOf(handler({} as H3Event)).toEqualTypeOf<
MaybePromise<{ foo: string }>
>();
const response = handler({} as H3Event);
expectTypeOf(response).toEqualTypeOf<{ foo: string }>();
});

it("return type (simple generic)", () => {
const handler = eventHandler<string>(() => {
return "";
});
expectTypeOf(handler({} as H3Event)).toEqualTypeOf<
MaybePromise<string>
>();
const response = handler({} as H3Event);
expectTypeOf(response).toEqualTypeOf<string>();
});
});

Expand Down

0 comments on commit 721932f

Please sign in to comment.