58 lines
1.2 KiB
TypeScript
58 lines
1.2 KiB
TypeScript
// 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<typeof methodParser>;
|
|
|
|
const massageMethod = (input: string): Method => {
|
|
const r = methodParser.parse(input.toUpperCase())
|
|
|
|
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<Response>;
|
|
|
|
export type Route = {
|
|
path: string;
|
|
methods: Method[];
|
|
handler: Handler;
|
|
interruptable?: boolean;
|
|
};
|
|
|
|
export { massageMethod };
|