Saltar al contenido
Buscar
Ver todo el radar
Svelte 5.57

Svelte 5.57: ajustes en forms, reactividad y SSR

Una tanda grande de fixes y algunas APIs nuevas para SvelteMap, createContext y svelte/server. Sin cambios de superficie grandes, pero con varios bugs de larga data resueltos.

APIs nuevas

svelte/server ahora exporta RenderOutput, SyncRenderOutput, Csp y Sha256Source, tipos que antes tenías que reconstruir a mano si trabajabas con SSR manual. createContext suma un método has para chequear si existe un contexto sin lanzar error al leerlo. El elemento <select> soporta el atributo defaultValue. SvelteMap incorpora getOrInsert y getOrInsertComputed, útiles para el patrón de 'si no existe la clave, la creo'.

Fixes en formularios

Hay una serie de correcciones puntuales sobre <select>, <option>, <textarea> y radios: se arregla un AST malformado cuando <select> tenía un value estático, se preserva defaultChecked en radios hidratados con spread de atributos, y el valor estático de textarea ahora se aplica bien durante client-side rendering. También se corrigió que selectedcontent pudiera mutar la opción seleccionada, y bind:focused ya no aparece en el output SSR porque no tiene atributo HTML equivalente. Si tu formulario dependía de alguno de estos comportamientos raros, revisá el changelog del PR correspondiente.

Reactividad y manejo de errores

Varios fixes tocan cómo se comportan $derived y las reacciones frente a errores: los errores de teardown en $derived ahora pasan por el error boundary correspondiente, y una reacción que lanza error conserva sus dependencias en vez de perderlas o quedar atascada en estado de error. También se corrigió que declarar export let x = $derived(...) en modo runes ahora reporta el error derived_invalid_export como corresponde, y que instancias de componente guardadas en $state ya no se convierten en proxies de estado.

Rendimiento

El ordenamiento de sentencias reactivas legacy ($:) pasó de O(n²) a O(n) usando lookups por Map, algo que se nota en componentes con muchas declaraciones reactivas. También se optimizó el destructuring simple de objetos en @const, se cambió el caché de setters de Array a Set, y se agregaron optimizaciones puntuales para templates de un solo comentario y para elementos con un único hijo.

Correcciones en SSR

Del lado del servidor se corrigieron varios casos: onDestroy ahora se ejecuta si el render del servidor lanza una excepción, los snippets que fallan dentro de un boundary quedan acotados a ese boundary en vez de propagarse, y las asignaciones a $derived junto con bindings de función en <select> ahora se transforman correctamente durante SSR. También se preservan los atributos booleanos con valor de string vacío al renderizar objetos de atributos en el servidor.

Qué te llevas

  • Si usás SvelteMap, ahora tenés getOrInsert y getOrInsertComputed para evitar el patrón manual de chequeo y creación.

  • Si trabajás con SSR manual, svelte/server expone más tipos (RenderOutput, Csp, Sha256Source, etc.).

  • El ordenamiento de $: reactivo mejora de O(n²) a O(n), relevante si tenés componentes con muchas sentencias reactivas legacy.

  • Hay una cantidad importante de fixes en <select>, <option> y <textarea>: si tuviste comportamientos raros con estos elementos, revisá si tu caso está en la lista.

Este resumen lo escribimos a partir de las notas oficiales del release. Lo que no estaba ahí, no está acá.

Anuncio original de Svelte

¿Quieres una clase de esto?

Si varias personas lo piden, entra al programa. No hace falta dejar mail ni nombre.