Pipelines de middleware componibles en TypeScript

El middleware es uno de esos patrones que todo desarrollador backend usa constantemente y que casi nadie diseña de forma deliberada. Heredas una app de Express con cuarenta llamadas a app.use(), o un proyecto de Next.js donde cada ruta reimplementa la autenticación y el logging de forma distinta, y lo aceptas como el estado natural de las cosas. No tiene por qué ser así.

Construir middleware como primitivas componibles y tipadas —en lugar de callbacks de framework atornillados entre sí— hace que los pipelines sean testeables de forma aislada, reordenables sin miedo y legibles como flujo de datos en lugar de efectos secundarios.