4 Commits

Author SHA1 Message Date
Michael Wolf
6d2779ba83 Fix import and avoid type defn nonsense 2025-03-07 15:23:47 -06:00
Michael Wolf
c19e6a9537 Refmt 2025-03-07 15:23:38 -06:00
Michael Wolf
d48a533d42 Fix import 2025-03-07 15:23:29 -06:00
Michael Wolf
d6fda3fdb3 Massage types 2025-03-07 15:23:20 -06:00
4 changed files with 80 additions and 63 deletions

View File

@@ -1,4 +1,4 @@
import { Extensible } from "./interfaces"; import { Extensible } from "./interfaces.ts";
export type HttpCode = { export type HttpCode = {
code: number; code: number;
@@ -11,8 +11,10 @@ type CodeDefinitions = {
[K: string]: HttpCode; [K: string]: HttpCode;
}; };
}; };
// FIXME: Figure out how to brand CodeDefinitions in a way that isn't
// tedious.
const httpCodes: CodeDefinitions & Extensible = { const httpCodes: CodeDefinitions = {
success: { success: {
OK: { code: 200, name: "OK", "description": "" }, OK: { code: 200, name: "OK", "description": "" },
Created: { code: 201, name: "Created" }, Created: { code: 201, name: "Created" },

View File

@@ -3,14 +3,20 @@
import { sleep } from "https://deno.land/x/sleep/mod.ts"; import { sleep } from "https://deno.land/x/sleep/mod.ts";
import { HttpCode, httpCodes } from "./http-codes.ts"; import { HttpCode, httpCodes } from "./http-codes.ts";
import { ContentType, contentTypes } from "./content-types"; import { ContentType, contentTypes } from "./content-types.ts";
import { services } from "./services"; import { services } from "./services.ts";
import {DenoRequest, Handler, Response, Method, UserRequest, Request, Route, ProcessedRoute } from './types.ts' import {
DenoRequest,
Handler,
Method,
ProcessedRoute,
Request,
Response,
Route,
UserRequest,
} from "./types.ts";
const phandler: Handler = async (_req: Request) => {
const phandler: Handler = async (req: Request) => {
const code = httpCodes.success.OK; const code = httpCodes.success.OK;
return { return {
code, code,
@@ -19,8 +25,6 @@ const phandler: Handler = async (req: Request) => {
}; };
}; };
// FIXME: Obviously put this somewhere else // FIXME: Obviously put this somewhere else
const okText = (out: string) => { const okText = (out: string) => {
const code = httpCodes.success.OK; const code = httpCodes.success.OK;
@@ -37,9 +41,10 @@ const routes: Route[] = [
path: "/slow", path: "/slow",
methods: ["get"], methods: ["get"],
handler: async (_req) => { handler: async (_req) => {
console.log("starting slow request") ; console.log("starting slow request");
await sleep(10); await sleep(10);
console.log("finishing slow request"); return okText("that was slow"); console.log("finishing slow request");
return okText("that was slow");
}, },
}, },
{ {
@@ -91,11 +96,4 @@ const routes: Route[] = [
}, },
]; ];
export { routes };
export {routes}

View File

@@ -2,7 +2,7 @@
import { randomNumber } from "https://deno.land/x/random_number/mod.ts"; import { randomNumber } from "https://deno.land/x/random_number/mod.ts";
import { config } from "./config.ts"; import { config } from "./config.ts";
import { getLogs, log } from "./logging"; import { getLogs, log } from "./logging.ts";
//const database = Client({ //const database = Client({

View File

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