Skip to content

Support request-typed route definitions#1

Closed
EmanFateen wants to merge 3 commits into
2.xfrom
allow-helpers-to-be-generic
Closed

Support request-typed route definitions#1
EmanFateen wants to merge 3 commits into
2.xfrom
allow-helpers-to-be-generic

Conversation

@EmanFateen

Copy link
Copy Markdown
Owner

Summary

This PR carries the request generic through the function-first route definition APIs so typed route handlers and middleware can be registered without casts.

Specifically, it updates:

  • RouteDefinition<TRequest> to preserve the request type for route middleware and handlers.
  • createRouteDefinition<TRequest> to accept typed middleware and handlers and return the typed route definition.
  • Route<TRequest> to return the same typed route definition it creates.
  • HTTP verb helper overloads to return RouteDefinition<TRequest> when a request generic is supplied.

Why

HttpScope<TRequest> and HttpMiddleware<TRequest> already support typed requests, but the routing registration path erased that type information back to the default HttpRequest. As a result, application code like this could not be registered without internal casts:

Post<CreateSourceRequest>(
  '/workspaces/:workspaceId/sources',
  'create',
  validateCreateSourceRequest,
  createSourceHandler,
);

This change aligns the function-first routing API with the existing request-generic HTTP types.

Validation

  • docker exec koalats-framework-container npm run build
  • docker exec koalats-framework-container npx eslint src/routing/definition/route-definition.ts src/routing/definition/create-route-definition.ts src/routing/route.ts src/routing/helpers/http-verb-helpers.ts tests/function-first-routing.e2e.test.ts
  • docker exec koalats-framework-container npx tsc -p tsconfig.eslint.json

Note: the test-inclusive typecheck still reports two pre-existing unrelated E2E type errors in tests/decorator-routing.e2e.test.ts and tests/security-authentication.e2e.test.ts.

Related to koala-ts#183

@EmanFateen EmanFateen closed this May 31, 2026
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.

1 participant