Initial commit

This commit is contained in:
2023-10-29 19:28:07 +00:00
commit b0d0353ba7
25 changed files with 7930 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
import { Static, TSchema } from "@sinclair/typebox";
import { Value } from "@sinclair/typebox/value";
import { HTTPMethods } from "fastify"
import { RouteOptions } from "fastify/types/route.js";
type URLString = string;
export type FirRouteInput<TPayloadSchema extends TSchema> = {
payload: Static<TPayloadSchema>,
}
export type FirRouteOptions<TIn extends TSchema = TSchema, TOut extends TSchema = TSchema> = {
method: HTTPMethods,
url: URLString,
payloadT: TIn,
responseT?: TOut,
handler: (input: FirRouteInput<TIn>) => Static<TOut> | Promise<Static<TOut>>,
}
export const route = <TIn extends TSchema, TOut extends TSchema>(routeOptions: FirRouteOptions<TIn, TOut>): RouteOptions => {
const {
method,
url,
payloadT,
handler,
} = routeOptions;
const augmentedHandler = (request: Parameters<RouteOptions["handler"]>[0]) => {
const {
body,
query,
} = request;
const payload = body ?? query;
if (Value.Check(payloadT, payload)) {
return handler({payload});
} else {
throw new Error("Payload wrong shape.");
}
}
return {
method,
url,
handler: augmentedHandler,
}
}