Compilador

Complemento de SWC de gt-next basado en Rust.

Compilador

gt-next incluye un plugin de SWC escrito en Rust que realiza análisis en tiempo de compilación para detectar errores de traducción comunes y optimizar el rendimiento.

Funciones

Detección de contenido dinámico

Detecta contenido dinámico no envuelto en componentes de traducción:

// ❌ No válido: contenido dinámico sin encapsular
<T>Hola {userName}</T>

// ✅ Válido: contenido dinámico encapsulado en el componente <Var>  
<T>Hola <Var>{userName}</Var></T>

Validación de llamadas a funciones

Detecta argumentos no literales que se pasan a las funciones de traducción:

const t = useGT();

// ❌ No válido: literales de plantilla y concatenación
t(`Hola ${name}`)
t("Hola " + name)

// ✅ Válido: literales de cadena con sustitución de variables
t("¡Hola, {name}!", { name })

Generación de hash en tiempo de compilación

Precalcula hashes de traducción para mejorar el rendimiento en tiempo de ejecución:

// Entrada
<T>Hola, mundo</T>

// Salida (cuando está habilitado)
<T _hash="a1b2c3d4">Hola, mundo</T>

Configuración

Configura el complemento de SWC en tu next.config.js:

import { withGTConfig } from 'gt-next/config';

export default withGTConfig(nextConfig, {
  locales: ['en', 'es'],
  swcPluginOptions: {
    logLevel: 'silent',     // Controlar salida de advertencias
    compileTimeHash: false, // Activar generación de hash
  },
});

Options

  • logLevel: Controla el nivel de salida de advertencias

    • 'silent' - Sin advertencias (valor predeterminado en producción)
    • 'error' - Mostrar como errores de compilación
    • 'warn' - Mostrar como advertencias (valor predeterminado en desarrollo)
    • 'info' - Mostrar mensajes informativos
    • 'debug' - Mostrar toda la información de depuración
  • compileTimeHash: Habilita la generación de hashes en tiempo de compilación

    • false - Deshabilitado (valor predeterminado)
    • true - Genera hashes en tiempo de compilación para mejorar el rendimiento

Limitaciones

El plugin de SWC procesa los files de forma individual y no puede detectar infracciones en componentes reexportados:

// Archivo A: export { T as Translate } from 'gt-next'
// Archivo B: import { Translate } from './A'
<Translate>Hello {name}</Translate> // No se detectará

¿Qué te parece esta guía?