Skip to content

Refactor lifecycle to be transport-agnostic#99

Open
trycatchal wants to merge 1 commit into
masterfrom
feat-support-non-http-adapters
Open

Refactor lifecycle to be transport-agnostic#99
trycatchal wants to merge 1 commit into
masterfrom
feat-support-non-http-adapters

Conversation

@trycatchal
Copy link
Copy Markdown
Owner

Collapse the three input sanitizers (sanitizeParams / sanitizeQueryParams / sanitizeBody) into a single sanitizeInputs slot, drop the respond stage, and introduce extractInputs between initPreContext and sanitizeInputs. doWork now returns the unsafe response value directly; per-handler status codes are declared via an optional successStatus field (number or function of context).

The express adapter contributes a baseline extractInputs that always runs first and produces the canonical {params, query, body, headers} shape; a handler-supplied extractInputs chains after via HTPipe's existing projector semantics, so common cases require no boilerplate. A new tRPC adapter demonstrates the same lifecycle with no HTTP plumbing.

For per-slot ergonomics on top of the single-slot core, add WithInputSlice plus Zod and Mongoose equivalents (SanitizeInputsSliceWithZod / SanitizeInputsSliceWithMongoose).

Type-level invariants are preserved: handlers missing sanitizeInputs, preAuthorize, finalAuthorize, doWork, or sanitizeResponse fail at compile time, and HTPipe still threads cumulative context types across mixins.

https://claude.ai/code/session_018hzYyAy5YyCDELimMeWf1B

Collapse the three input sanitizers (sanitizeParams / sanitizeQueryParams /
sanitizeBody) into a single sanitizeInputs slot, drop the respond stage, and
introduce extractInputs between initPreContext and sanitizeInputs. doWork now
returns the unsafe response value directly; per-handler status codes are
declared via an optional successStatus field (number or function of context).

The express adapter contributes a baseline extractInputs that always runs
first and produces the canonical {params, query, body, headers} shape; a
handler-supplied extractInputs chains after via HTPipe's existing projector
semantics, so common cases require no boilerplate. A new tRPC adapter
demonstrates the same lifecycle with no HTTP plumbing.

For per-slot ergonomics on top of the single-slot core, add WithInputSlice
plus Zod and Mongoose equivalents (SanitizeInputsSliceWithZod /
SanitizeInputsSliceWithMongoose).

Type-level invariants are preserved: handlers missing sanitizeInputs,
preAuthorize, finalAuthorize, doWork, or sanitizeResponse fail at compile
time, and HTPipe still threads cumulative context types across mixins.

https://claude.ai/code/session_018hzYyAy5YyCDELimMeWf1B
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants