Arquitectura interna
La arquitectura de BricksShift tiene una sola idea central: una representación intermedia de tokens (DTIR) desacopla los sistemas origen y destino, permitiendo añadir vectores sin reescribir el motor.
Diagrama
┌──────────┐
│ Scanner │ Detecta plugins activos, tokens en uso, entorno
└────┬─────┘
│
▼
┌──────────────┐
│ Parser │ Lee wp_options, CSS generado, _bricks_data
│ (origen) │
└────┬─────────┘
│
▼
┌──────────────┐
│ DTIR (origen)│ Design Token Intermediate Representation
└────┬─────────┘
│
▼
┌──────────────┐
│ Transformer │ Aplica mapa Nivel 1 + lógica específica
└────┬─────────┘
│
▼
┌──────────────┐
│ DTIR (destino)│
└────┬─────────┘
│
▼
┌──────────────┐ ┌──────────┐
│ Writer │──────▶ │ Backup │ Snapshot previo obligatorio
│ (destino) │ └──────────┘
└────┬─────────┘
│
▼
┌──────────┐
│ Logger │ Persiste cada acción en wp_bricksshift_logs
└──────────┘
Capas
Scanner
Detecta el entorno: plugins activos (ACSS, AT, CF), archivos CSS en uploads/, heurísticas para framework "huella". Resultado: un array con disponibilidad de los 7 vectores y razón si alguno está deshabilitado.
Parsers
Uno por sistema origen:
ParserACSS— el más complejo. Leewp_options, CSS generado (ground truth), normaliza nombres entre v3 y el modelo interno.ParserBricks— lee paleta, variables y clases globales de Bricks.ParserBricksAT— decorator sobreParserBricks. Detecta escala Utopia y valores fluidos.ParserBricksCF— decorator sobreParserBricks. Agrupa variantes de transparencia.ParserCFFile— lee exports.core/JSONsin necesidad de CF instalado.ParserTailwind— lee CSS con@themey@layer components.
Todos producen un DTIR.
DTIR (Design Token Intermediate Representation)
Modelo en memoria independiente de origen y destino. Tokens clasificados por categoría (colors, typography, spacing, borders, shadows, other), cada uno con metadata (formato original, si es fluido, etc.). Permite añadir nuevos vectores sin tocar parsers o writers existentes.
Transformer
Motor central. Aplica:
- Mapa Nivel 1: token a token (identidad si no hay mapeo explícito).
- Mapa Nivel 2 (solo destinos Tailwind): propiedad CSS → utility Tailwind.
- Helpers:
normalize_colors_for_bricks,make_color_variants_reactive,apply_static_fallbacks,apply_fluid_dual_write,filter_transparency_variants.
Writers
WriterBricks— escribe awp_optionsconupdate_option(). Merge con datos existentes, no sobrescritura ciega.WriterTailwind— genera archivos CSS enwp-content/themes/{theme}/bricksshift/.
Backup y Logger
Backup: snapshot obligatorio antes de cualquier escritura. Logger: persiste cada acción en wp_bricksshift_logs para auditoría posterior.
Namespaces PHP
| Namespace | Clases |
|---|---|
BricksShift\ | Core, Scanner, Backup, Logger, License |
BricksShift\Parsers\ | ParserACSS, ParserBricks, ParserBricksAT, ParserBricksCF, ParserCFFile, ParserTailwind |
BricksShift\Transformers\ | DTIR, Transformer |
BricksShift\Writers\ | WriterBricks, WriterTailwind |
BricksShift\Utils\ | ColorConverter, FluidValue, CSSVariableExtractor |
BricksShift\Licensing\ | LicenseManager, Updater |
Decisiones de diseño
- El HTML de templates nunca se modifica.
- Los valores del destino son siempre los del proyecto origen, nunca defaults.
- DTIR como capa de abstracción: añadir nuevos vectores no requiere tocar el motor.
- Backup obligatorio antes de cualquier escritura.
- Dry-run disponible en todos los vectores.
- Writers hacen merge, no sobrescritura.
- Parsers AT/CF son decorators sobre
ParserBricks, no standalone. - Licencia obligatoria (
License::is_active()) para todas las operaciones de conversión.