// types.ts // FIXME: split this up into types used by app developers and types internal // to the framework. import { z } from "zod"; import { HttpCode, httpCodes } from "./http-codes.ts"; import { ContentType, contentTypes } from "./content-types.ts"; 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.toLowerCase()) return r; }; export type DenoRequest = globalThis.Request; export type DenoResponse=globalThis.Response; export type UserRequest = {}; export type Request = { pattern: string; path: string; method: Method; parameters: object; denoRequest: globalThis.Request; }; export type ProcessedRoute = { pattern: URLPattern; method: Method; handler: Handler; }; export type Response = { code: HttpCode; contentType: ContentType; result: string; }; export type Handler = (req: Request) => Promise; export type Route = { path: string; methods: Method[]; handler: Handler; interruptable?: boolean; }; export { massageMethod };