@incoqnito.io/ts-request-dispatcher
v2.0.0
Published
A typescript module to provide a configurable express middleware to declare and dispatch requests and responses
Downloads
0
Keywords
Readme
Examples
Dispatcher
Creation
import { RDS_TO_JSON_BODY_HANDLER, zodValidator, Dispatcher } from "ts-request-dispatcher";
const dispatcher: Dispatcher = Dispatcher
.newBuilder()
.withParameterValidator(zodValidator)
.withResultHandler((result, context) => {
if (result && typeof result == "object" && "_id" in result) {
delete result["_id"];
}
return RDS_TO_JSON_BODY_HANDLER(result, context);
})
.build();path configuration
function configurePathsStuff(dispatcher: Dispatcher) => {
dispatcher.post("/editStuff", EditOneStuff);
dispatcher.get("/getStuff", GetStuff);
};
function configurePathsUser(dispatcher: Dispatcher) => {
dispatcher.post("/login", Login);
};
configurePathsStuff(dispatcher);
configurePathsUser(dispatcher);Handler
without validation
import { Dispatcher, IRequestContext, IPrincipal } from "ts-request-dispatcher";
import { Stuff } from "../openapi/models.js";
export interface IUser extends IPrincipal {};
const GetStuff: IRequest<any, Stuff[]> = {
handler: async function (context: IRequestContext<any, Stuff[]>): Promise<Stuff[]> {
const ret = await db.getAllStuff(context.principal as IUser);
return ret.map(oneStuff => {
const { xvalue, ...rem } = oneStuff;
return {
...rem,
xvalue: "somethingOther",
};
});
},
skipPipelineValidation: true,
};with zod validation
import { Dispatcher, IRequestContext, IZodValidatedRequest, IPrincipal } from "ts-request-dispatcher";
import { EditStuffRequest, Stuff } from "../openapi/models.js";
import { editStuffRequestSchema } from "../openapi/models-validator.js";
export interface IUser extends IPrincipal {};
const EditOneStuff: IZodValidatedRequest<EditStuffRequest, Stuff> = {
handler: async function (context: IRequestContext<EditStuffRequest, Stuff>): Promise<Stuff> {
const { stuffID, content } = context.params;
return await db.editStuff({
id: stuffID,
content,
user: context.principal as IUser,
});
},
schema: editStuffRequestSchema,
};