UNPKG

@quiltjs/quilt

Version:

Lightweight, type-safe handler and router abstraction for Node HTTP servers.

37 lines 1.5 kB
/** * Represents the outputs of dependencies as a record with keys. */ export type HandlerOutputs<D extends Record<string, Handler<any, any, any>>> = { [K in keyof D]: D[K] extends Handler<infer O, any, any> ? O : never; }; /** * Represents a handler with its named dependencies and handler function. * * `Ctx` is an arbitrary context type (for example `{ req, res }` in HTTP * adapters). Quilt itself does not assume anything about this shape. */ export type Handler<O, Ctx, D extends Record<string, Handler<any, Ctx, any>> = Record<string, Handler<any, Ctx, any>>> = { /** * Named dependency handlers. Their outputs are made available to this * handler as the `deps` parameter. */ dependencies: D; /** * Executes the handler. * * @param ctx - The execution context (e.g. `{ req, res }`). * @param deps - The outputs from dependencies. */ execute: (ctx: Ctx, deps: HandlerOutputs<D>) => Promise<O> | O; }; /** * Creates a "terminal" handler in a dependency graph. * * Works for both "middleware-like" handlers (that produce values for others) * and "terminal" handlers at the edge of the system. */ export declare function createHandler<O = any, Ctx = any, D extends Record<string, Handler<any, Ctx, any>> = Record<string, Handler<any, Ctx, any>>>({ execute, dependencies, }: { execute: (ctx: Ctx, deps: HandlerOutputs<D>) => Promise<O> | O; dependencies?: D; }): Handler<O, Ctx, D>; //# sourceMappingURL=Handler.d.ts.map