@cyclone-lib/migrate
v0.0.1
Published
CLI de migración a Cyclone. Migra proyectos Angular con PrimeNG 15 a @cyclone-lib/angular: plantillas, módulos, servicios, iconos, tema y dependencias.
Maintainers
Readme
@cyclone-lib/migrate
CLI para migrar a Cyclone. De momento, de PrimeNG 15 a @cyclone-lib/angular.
npx @cyclone-lib/migrate primeng # simulación: muestra qué cambiaría
npx @cyclone-lib/migrate primeng --diff # …con el diff de cada archivo
npx @cyclone-lib/migrate primeng --write # aplica los cambios y guarda el informeHaz un commit antes de --write: así revisas el resultado con git diff y puedes deshacerlo.
Qué migra
| Ámbito | Qué hace |
|---|---|
| Plantillas (.html y template: en línea) | p-* y directivas (pButton, pInputText, pTooltip, pBadge…) → cy-*, con sus propiedades, eventos ((onChange) → (cyChange) con $event.detail) y plantillas pTemplate → slots. Respeta el formato del resto del archivo. |
| Formularios | ngModel/formControlName siguen funcionando (CY_FORMS). Los <label for> pasan a la propiedad label, y los radios o checkboxes con el mismo modelo se agrupan en cy-radio-group/cy-checkbox-group. |
| Datos | p-table sencilla (celdas {{ fila.campo }}, pipes currency/date/number/percent) → cy-data-grid con columnas; optionLabel/optionValue → pipe cyOptions. |
| Menús y navegación | [model] de p-menu, p-menubar, p-splitButton, p-speedDial, p-breadcrumb y p-steps → bucles @for con los items de Cyclone. |
| Módulos | Los XxxModule de PrimeNG → las clases de @cyclone-lib/angular que usa cada plantilla (standalone) o los componentes declarados (NgModule). |
| Servicios | MessageService.add() → toast(); ConfirmationService.confirm() → confirm().then(…) con accept/reject; PrimeNGConfig fuera. Si ya no se usan, se quitan del constructor y de providers. |
| Tipos | MenuItem, SelectItem, TreeNode, Message… de primeng/api → cyclone-compat.ts (generado). PrimeIcons.X → 'pi pi-x'. |
| Iconos | PrimeIcons → iconos de Cyclone. Los que no tienen equivalente se siguen pintando con PrimeIcons (library="primeicons", registrado en cyclone-setup.ts). |
| Tema | El tema de PrimeNG (lara-light-indigo, saga-green, vela-blue…) → cyclone-theme.json + cyclone-theme.css con el mismo color primario, radios y modo. |
| Estilos y dependencias | Quita los CSS de PrimeNG de angular.json/SCSS, avisa de los selectores .p-*, añade @cyclone-lib/* y quita primeng cuando ya no queda nada. |
Lo que no puede convertir con seguridad lo deja como estaba y lo apunta en el informe (cyclone-migration.md) con archivo y línea: p-chart, tablas con celdas complejas, menús emergentes, plantillas con let-*…
Opciones
| Opción | |
|---|---|
| -w, --write | Escribe los cambios. |
| -d, --diff | Muestra el diff. |
| -r, --report <ruta> | Guarda el informe Markdown (por defecto cyclone-migration.md con --write). |
| --json | Resultado en JSON. |
| --check | Código de salida 1 si queda algo pendiente (CI). |
| --no-theme / --no-deps | No genera el tema / no toca package.json. |
Después de migrar
- Revisa el diff y los pendientes del informe.
@cyclone-lib/angularnecesita Angular 22: actualiza conng update, una versión mayor cada vez. Los componentes de NgModule ya llevanstandalone: false.npm installyng build: constrictTemplates, el compilador señala lo que falta.cy-date-pickertrabaja con cadenas ISO (yyyy-mm-dd), no conDate.
API
import { migrateProject, markdownReport } from '@cyclone-lib/migrate';
const result = migrateProject({ root: './mi-app' }); // no escribe nada
result.changes; // [{ path, before, after }]
result.notes; // [{ file, line, level: 'todo' | 'warn' | 'info', message }]Cómo se prueba
Además de los tests unitarios, pnpm --filter @cyclone-lib/migrate check:compile migra una app de ejemplo
con PrimeNG 15 (NgModule, componente standalone, servicios, tabla, formularios, menús…) y compila el
resultado con Angular y strictTemplates contra @cyclone-lib/angular. Las propiedades y eventos que genera
se validan contra la API real de los componentes (src/meta.generated.ts, que se regenera en cada build).
