Skip to content

Releases: devlusoft/devix

v0.4.1-beta.9

24 Mar 16:29

Choose a tag to compare

v0.4.1-beta.9 Pre-release
Pre-release

devix v0.4.1-beta.9

Bug fixes

Fix en carga de config con dependencias externas

Al transpilar devix.config.ts, el archivo temporal se generaba en el directorio del sistema (%TEMP% en
Windows, /tmp en Unix). Esto causaba ERR_MODULE_NOT_FOUND al intentar resolver paquetes como
@devlusoft/devix porque Node busca node_modules relativo a la ubicación del archivo importado.

El archivo temporal ahora se escribe en la raíz del proyecto del usuario, donde la resolución de módulos
funciona correctamente.

v0.4.1-beta.8

24 Mar 16:12

Choose a tag to compare

v0.4.1-beta.8 Pre-release
Pre-release

devix v0.4.1-beta.8

Bug fixes

Fix de compatibilidad con Node.js 22 en Windows

Los comandos dev, build, generate y start fallaban en Node 22 con ERR_UNKNOWN_FILE_EXTENSION al intentar
importar devix.config.ts directamente. Node 22 (LTS) no soporta archivos .ts nativamente — ese
comportamiento solo está disponible desde Node 23.6+.

La carga del config ahora se hace a través de una utilidad centralizada (loadConfig) que usa esbuild para
transpilar el archivo antes de importarlo, funcionando correctamente en Node 18, 20, 22 y 25.

v0.4.1-beta.7

24 Mar 15:50

Choose a tag to compare

v0.4.1-beta.7 Pre-release
Pre-release

devix v0.4.1-beta.7

Nuevas features

Soporte para iconos en Metadata

Ahora puedes definir favicons y otros íconos directamente desde el objeto Metadata de tu página:

export const metadata: Metadata = {
title: 'Mi app',
icons: '/favicon.ico',
// o también
icons: [
{ href: '/favicon.ico', rel: 'icon', type: 'image/x-icon' },
{ href: '/apple-touch-icon.png', rel: 'apple-touch-icon', sizes: '180x180' },
]
}

El campo icons acepta:

  • Un string (URL del ícono)
  • Un objeto MetadataIcon con href, rel, type y sizes
  • Un array de MetadataIcon

Bug fixes

Fix crítico para Windows — los comandos dev, build, generate y start fallaban en Windows con
ERR_UNSUPPORTED_ESM_URL_SCHEME al cargar módulos con rutas absolutas. Las rutas ahora se convierten
correctamente a file:// URLs antes de pasarse al loader ESM de Node.

v0.4.1-beta.6

21 Mar 22:58

Choose a tag to compare

v0.4.1-beta.6 Pre-release
Pre-release

Bug Fixes

  • Fix: Navegación SPA rota en modo static
    El cliente siempre fetcha /_data/ al navegar, pero en modo static no había servidor que respondiera
    ese endpoint. Ahora devix generate pre-genera un archivo JSON por ruta en dist/client/_data/ y devix start
    los sirve en modo static.
  • Fix: dist/server se generaba innecesariamente en modo static
    El build SSR es necesario durante la generación para pre-renderizar el HTML, pero no para servir el sitio.
    Ahora devix generate elimina dist/server al finalizar cuando output: "static".

v0.4.1-beta.5

21 Mar 22:35

Choose a tag to compare

v0.4.1-beta.5 Pre-release
Pre-release

fix: typos

v0.4.1-beta.4

21 Mar 22:20

Choose a tag to compare

v0.4.1-beta.4 Pre-release
Pre-release

Bug Fixes

  • Fix: scroll-behavior: smooth ignorado en navegación cliente
    scrollIntoView() y window.scrollTo() no leían el scroll-behavior del CSS automáticamente. Ahora se lee el
    valor computado del documento y se pasa explícitamente, respetando la preferencia del usuario tanto en
    scroll al hash como en scroll al top.
  • Fix: scroll-behavior: smooth ignorado en carga directa con hash
    El mismo problema aplicaba al scroll inicial tras la hidratación. Corregido en el entry client con el mismo
    enfoque.

v0.4.1-beta.3

21 Mar 22:11

Choose a tag to compare

v0.4.1-beta.3 Pre-release
Pre-release

Bug Fixes

  • Fix: Dev server no iniciaba tras implementar autoreload
    El proceso hijo buscaba devix-dev-server.js relativo al proyecto del usuario en lugar del directorio del
    CLI. La lógica del servidor fue separada a dev-server.ts y la ruta se resuelve ahora con import.meta.url.
  • Fix: no scrolleaba al elemento
    Al navegar cliente a una URL con hash, window.scrollTo(0, 0) sobreescribía el scroll al elemento. Ahora se
    scrollea al elemento con id correspondiente al hash si existe, y al top solo si no hay hash.
  • Fix: Scroll al hash en navegación cross-page
    El scroll al hash ocurría antes de que React commitiera el nuevo DOM, por lo que el elemento aún no existía.
    El scroll ahora se ejecuta dentro de requestAnimationFrame para garantizar que corre después del render.
  • Fix: Hash ignorado en carga directa
    Al entrar directamente a una URL con hash (ej. /#section), la hidratación de React desplazaba el layout
    después de que el browser intentaba el scroll nativo. Ahora se fuerza el scroll al elemento tras el primer
    frame pintado.

v0.4.1-beta.2

21 Mar 21:58

Choose a tag to compare

v0.4.1-beta.2 Pre-release
Pre-release

fix: dev server

v0.4.1-beta.1

21 Mar 21:52

Choose a tag to compare

v0.4.1-beta.1 Pre-release
Pre-release

Bug Fixes

  • Fix: #tag en URLs causa 404 en navegación cliente
    Los fragmentos hash (/page#section) no se stripeaban antes del route matching, causando que la ruta no se
    encontrara y devolviera 404.
  • Fix: CSS URLs rotas en rutas anidadas
    En dev mode, Vite genera módulos CSS internos para inline styles (html-proxy) cuyas URLs no son paths
    válidos. Al inyectarlos como se resolvían como relativos a la ruta actual, causando requests con URLs
    corruptas.

Improvements

  • Feat: Autoreload al modificar devix.config.ts
    El dev server ahora detecta cambios en devix.config.ts y reinicia el proceso automáticamente.
  • Feat: Imports server-only en page/layout files
    Los exports loader, guard, generateStaticParams y headers son automáticamente stripeados del bundle cliente
    durante el build. Esto permite usar imports de node:* u otros módulos server-only en el top-level del
    archivo sin errores de browser compatibility. No requiere cambios en el código del usuario.

v0.4.0

19 Mar 04:52

Choose a tag to compare

v0.4.0

Nuevas funcionalidades

  • useNavigate() — navegación programática con soporte de replace y View Transitions API
    const navigate = useNavigate()                                                                            
    navigate('/dashboard')
    navigate('/login', { replace: true })                                                                     
    navigate('/shop', { viewTransition: true })                                                               
  • useRevalidate() — re-fetch de los datos del loader sin recargar la página
    const revalidate = useRevalidate()
    await revalidate()
  • redirect() con opciones — soporte de replace para no agregar entrada al historial del cliente
    return redirect('/login', { replace: true })
  • Autocompletado de rutas en $fetch — TypeScript sugiere los paths de las rutas API existentes del proyecto
  • Tipado de params en PageProps — tipado directo sin necesidad de un loader
    export default function Page({ params }: PageProps<{ id: string }>) {}
  • publicDir configurable — nueva opción en devix.config.ts para cambiar el directorio de archivos estáticos
    (default: 'public')

Corrección de bugs

  • Corregido mismatch de hidratación con Radix UI y librerías que usan useId — el servidor ahora renderiza la
    misma estructura de árbol de fibras que el cliente
  • Corregido error useRequest() called outside of a request handler causado por instancias duplicadas de
    AsyncLocalStorage en el bundle de esbuild
  • Corregido crash en layouts (data=undefined) cuando un guard redirigía — los errores del loader ahora
    retornan 500 y muestran la página de error
  • Corregido tipo de retorno never en $fetch cuando el handler retorna un Response plano
  • Corregido useNavigate / useRevalidate lanzando error durante SSR fuera de un RouterProvider
  • Corregido: los archivos de la carpeta public ahora se sirven correctamente en producción — publicDir se
    resuelve con ruta absoluta y el build SSR ya no copia archivos estáticos innecesariamente