diff --git a/deno/types.ts b/deno/types.ts index c99938c..c139deb 100644 --- a/deno/types.ts +++ b/deno/types.ts @@ -1,40 +1,57 @@ -// types.ts - -// FIXME: split this up into types used by app developers and types internal -// to the framework. - - -import { HttpCode, httpCodes } from "./http-codes.ts"; -import { ContentType, contentTypes } from "./content-types"; - - -export type Method = "get" | "post" | "put" | "patch" | "delete"; - - -export type DenoRequest = globalThis.Request; -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 -}; \ No newline at end of file +// 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 };