-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rework routes/plugins #55
Conversation
@tnfAngel Como crees que sería la mejor forma de manejar las rutas? Ahora mismo el Para los alias he pensado en inicializar las rutas en un Array y luego registrar cada ruta como se está haciendo ahora en la rama "dev" pero no sé si hay métodos mejores. |
Por qué aparecen en la raíz si se usa el group precisamente para evitar eso? |
Hasta donde yo he podido llegar a ver, como estoy definiendo los path con la ruta completa, al añadir el |
Ahh, y no se puede de alguna forma remover la parte de /documents/api/v2 inicial (con un split a / o replace) y en el group poner el /documents/api/v2 en cuestión? |
No sé si Elysia permite sobreescribir o eliminar rutas, si registro ":key" se podrá acceder por |
Entonces simplemente podemos prescindir del group y registrarla de forma "absoluta" no? tampoco hay mucho problema, el scope de plugins por ejemplo será general de todas formas, no por grupos |
¿Pero entonces como se registra "/documents" para la V2? Se itera mil veces para registrar cada alias que se quiera meter? No sé las repercusiones de esto si Elysia cargara todo lo que haya en |
Para los alias se registra la V2 y los alias a la vez (comprobando obviamente que la versión es la última), en la misma iteración, a no ser que el sistema de alias se haga más "genérico" y registrarlo a parte, en vez de usarlo solo para este caso, y register solo se deberia llamar 1 vez por ruta no? |
Se puede llamar |
Creo que tendría el mismo efecto/impacto que usando grupos, al final el group es solo una forma de agregarle prefijo y scope, pero todas las rutas se guardan en el Array interno Elysia.routes tenga grupo o no |
Parece funcionar correctamente de esta forma y sin hacer apaños cutres |
Ya de paso que lo tengo fácil para probar el tope de rutas que aguanta una clase de Elysia, he creado 350 endpoints y lo único que ha petado ha sido mi navegador al abrir los docs así que esta implementación es muy viable. En total, con esos 350 endpoints llega a 84 MB de memoria, por lo que no será un problema añadir tantos alias como haga falta. |
@tnfAngel El plugin de ErrorSender lleva ya unos cuantos commits que no actualiza los types de Elysia cuando lo cargas. |
probablemente por el override del return type de servidor elysia al cargar el plugin, ya que esos plugins registran genericos en el tipo, y en el override se devuelve el tipo sin genericos |
voy a ver |
No ya, pero y en las rutas? No puedo dejar el constructor de AbstractRoute sin un type específico |
ese es el problema.. hmmm |
quedaría muy feo hardcodear Elysia<"", { |
exportando el typeof server e importandolo en la clase AbstractRoute ? |
No funciona |
diría de registrar los plugins necesarios que se usen en la ruta en la propia ruta, pero eso impediría el tema de solo tener una instancia |
aunque elysia hace deduplicacion de plugins si se nombran, pero no se que tal seria eso.... |
El ErrorSender no se podría instanciar en DocumentHandler y así ya no involucraría a las rutas? |
claro, pero no se que tan buena idea sea instanciarlo en cada request, aunque haya deduplicacion |
De momento lo dejaré así, por suerte solo son los types y a Bun se la pela compilar el código con este fallo. |
Curioso, en la documentación se puede ver el orden en que los endpoints han sido registrados |
sip, y creo que seria mejor que la última versión sea la primera siempre (por eso el .toReversed()) |
Ya está puesto, digo que cada path se ordena de forma manual, en este caso cuando se registran. Si comparas https://jspaste.eu/docs con la de este branch se puede apreciar que ahora están por orden alfabético (depende de como lo pongas en el Array obvio no hay ningun sorter), cosa que antes no pasaba |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Este PR reimplementa todas las rutas y plugins a un sistema mejor organizado y compatible para futuras novedades. Una de ellas es la posibilidad de minificar y compilar a un binario standalone, este cambio permitirá imágenes de contenedor y ejecuciones en crudo considerablemente más compactas, rápidas y potencialmente más seguras.
Ejec. crudo:
Antes 74,3 MB
Ahora 269,8 KB (Solo con el index.js) (No se tiene en cuenta el runtime de Bun)
Imágenes:
Antes 173.1 MB (
2024.02.09-339e4ba
)Ahora 98.1 MB (
424e791
)