// types.ts // FIXME: split this up into types used by app developers and types internal // to the framework. import { Request as ExpressRequest, Response as ExpressResponse, } from "express"; import { MatchFunction } from "path-to-regexp"; import { z } from "zod"; import { ContentType, contentTypes } from "./content-types"; import { HttpCode, httpCodes } from "./http-codes"; const methodParser = z.union([ z.literal("GET"), z.literal("POST"), z.literal("PUT"), z.literal("PATCH"), z.literal("DELETE"), ]); export type Method = z.infer; const massageMethod = (input: string): Method => { const r = methodParser.parse(input.toUpperCase()); return r; }; export type Call = { pattern: string; path: string; method: Method; parameters: object; request: ExpressRequest; }; export type InternalHandler = (req: ExpressRequest) => Promise; export type Handler = (call: Call) => Promise; export type ProcessedRoute = { matcher: MatchFunction>; method: Method; handler: InternalHandler; }; export type Result = { code: HttpCode; contentType: ContentType; result: string; }; export type Route = { path: string; methods: Method[]; handler: Handler; interruptable?: boolean; }; export { methodParser, massageMethod };