@beignet/core
Version:
Core framework primitives for Beignet
50 lines (42 loc) • 1.21 kB
text/typescript
import type { HttpContractConfig } from "../contracts/index.js";
import type {
HttpRequestLike,
HttpResponseLike,
MaybePromise,
} from "./http.js";
export const responseFinalizerHook = Symbol(
"@beignet/core/server/responseFinalizer",
);
export type ResponseFinalizerResponseOwner =
| "route"
| "framework"
| "transport";
export type ResponseFinalizerValidationState =
| "validated"
| "disabled"
| "not-applicable";
export type ResponseFinalizerHookArgs<Ctx> = {
req: HttpRequestLike;
ctx?: Ctx;
contract: HttpContractConfig;
path?: unknown;
query?: unknown;
headers?: unknown;
body?: unknown;
response: HttpResponseLike;
error?: unknown;
native?: boolean;
owner: ResponseFinalizerResponseOwner;
responseValidation: ResponseFinalizerValidationState;
};
export type ResponseFinalizerHook<Ctx> = (
args: ResponseFinalizerHookArgs<Ctx>,
) => MaybePromise<void>;
export type ResponseFinalizerServerHook<Ctx> = {
[responseFinalizerHook]?: ResponseFinalizerHook<Ctx>;
};
export function getResponseFinalizerHook<Ctx>(
hook: unknown,
): ResponseFinalizerHook<Ctx> | undefined {
return (hook as ResponseFinalizerServerHook<Ctx>)[responseFinalizerHook];
}