Comparar y actualizar instalaciones de código fuente
Cuando instalas primitivos en modo source, los archivos viven en tu proyecto y pueden modificarse localmente. Los comandos solidiom diff y solidiom update te ayudan a rastrear cambios y actualizar desde upstream de forma segura.
Comparar cambios con diff
solidiom diff compara los archivos instalados contra los dígitos almacenados en .solidiom/lock.json:
solidiom diffSalida:
M src/ui/primitives/dialog/Dialog.tsx
D src/ui/primitives/dialog/utils.tsM— archivo modificado localmenteD— archivo eliminadoA— archivo nuevo
Para filtrar por primitivo:
solidiom diff --primitive dialogSin cambios:
solidiom diff
# No local modifications.Actualizar primitivos
solidiom update actualiza un primitivo a la versión upstream más reciente usando un algoritmo de fusión de tres vías:
solidiom update dialogAlgoritmo de fusión
La fusión compara tres estados:
- Base — el dígito original registrado en
.solidiom/lock.json - Local — el contenido actual del archivo (posiblemente modificado por el usuario)
- Upstream — la nueva versión del registro o monorepo
La matriz de decisiones:
| Local | Upstream | Acción |
|---|---|---|
| Sin cambios | Cambiado | Sobrescribir con upstream (actualización segura) |
| Cambiado | Sin cambios | Mantener local (la versión del usuario es más reciente) |
| Cambiado | Cambiado | Intentar fusión línea por línea, o escribir archivo de conflicto |
| Sin cambios | Sin cambios | Omitir |
Estados de actualización
| Estado | Descripción |
|---|---|
updated | Archivo sobrescrito con versión upstream |
merged | Fusión limpia sin conflictos |
conflict | Ambos lados cambiaron lo mismo; requiere resolución manual |
skipped-detached | Archivo desvinculado; se omite |
skipped-unchanged | Sin cambios en upstream |
skipped-deleted | Archivo eliminado localmente |
Salida:
↑ src/ui/primitives/dialog/Dialog.tsx
⇄ src/ui/primitives/dialog/Context.tsx (auto-merged)
⚡ src/ui/primitives/dialog/Overlay.tsx (CONFLICT)
○ src/ui/primitives/dialog/Custom.tsx (detached)
3 files updated.
1 conflicts - resolve manually:
• src/ui/primitives/dialog/Overlay.tsx
Compare: Overlay.tsx.local vs Overlay.tsx.upstreamEjecución simulada
solidiom update dialog --dry-runMuestra los cambios que se aplicarían sin escribir archivos.
Manejo de conflictos
Cuando ambos lados modifican las mismas líneas, solidiom update genera marcadores de conflicto estilo diff3:
<<<<<<< local
contenido local
=======
contenido upstream
>>>>>>> upstreamAdemás, crea archivos de referencia:
<archivo>.local— versión local<archivo>.upstream— versión upstream
Resuelve el conflicto manualmente y elimina los archivos .local y .upstream cuando termines.
Archivos desvinculados
Los archivos marcados como “detached” se omiten durante solidiom update. Para desvincular un primitivo:
solidiom detach dialogEsta operación solo actualiza los metadatos de .solidiom/lock.json; no modifica ni elimina archivos.
Reescritura de importaciones
Durante la actualización, las importaciones se reescriben automáticamente para reflejar la configuración actual del proyecto:
- Los archivos
.tsxy.jsxusan transformación AST con ts-morph para preservar la estructura - Los demás archivos usan reescritura basada en expresiones regulares
- Si la transformación AST falla, se usa el método de respaldo basado en expresiones regulares
Lockfile
Después de una actualización exitosa, .solidiom/lock.json se actualiza con los nuevos dígitos y versiones. El archivo lockfile mantiene el registro de:
digest— SHA-256 del contenido originalversion— versión en el momento de instalacióndetached— si el archivo está desvinculadomanifestFilesHash— hash de integridad del manifiesto del registroverifiedAt— marca de tiempo de verificaciónprovenance— “verified” o “unverified”
Salida JSON
solidiom diff --json
solidiom update dialog --jsonOpciones de diff
| Bandera | Descripción |
|---|---|
--primitive <nombre> | Filtrar por nombre de primitivo |
--json | Salida en formato JSON |
Opciones de update
| Bandera | Descripción |
|---|---|
--dry-run | Mostrar cambios sin escribir |
--json | Salida en formato JSON |