vtex-css-sanitizer-cli 1.0.3 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,79 @@
1
+ # Workflow: Build & Release
2
+ # Se dispara cuando se hace push de un tag con formato v*.*.*
3
+ # Compila la GUI para Windows y Linux y crea un GitHub Release con los binarios.
4
+
5
+ name: Build & Release
6
+
7
+ on:
8
+ push:
9
+ tags:
10
+ - 'v*.*.*'
11
+
12
+ permissions:
13
+ contents: write
14
+
15
+ jobs:
16
+ build:
17
+ strategy:
18
+ matrix:
19
+ include:
20
+ - os: ubuntu-latest
21
+ platform: linux
22
+ build_script: build:linux
23
+ - os: windows-latest
24
+ platform: win
25
+ build_script: build:win
26
+
27
+ runs-on: ${{ matrix.os }}
28
+
29
+ steps:
30
+ - name: Checkout
31
+ uses: actions/checkout@v4
32
+
33
+ - name: Setup Node.js
34
+ uses: actions/setup-node@v4
35
+ with:
36
+ node-version: 20
37
+
38
+ - name: Install dependencies
39
+ working-directory: gui
40
+ run: yarn install --frozen-lockfile
41
+
42
+ - name: Sync version from tag
43
+ working-directory: gui
44
+ run: npm version "${GITHUB_REF_NAME#v}" --no-git-tag-version
45
+
46
+ - name: Build & Package
47
+ working-directory: gui
48
+ run: yarn ${{ matrix.build_script }}
49
+
50
+ - name: Upload artifacts
51
+ uses: actions/upload-artifact@v4
52
+ with:
53
+ name: release-${{ matrix.platform }}
54
+ path: |
55
+ gui/release/*.exe
56
+ gui/release/*.AppImage
57
+ if-no-files-found: warn
58
+
59
+ release:
60
+ needs: build
61
+ runs-on: ubuntu-latest
62
+
63
+ steps:
64
+ - name: Download all artifacts
65
+ uses: actions/download-artifact@v4
66
+ with:
67
+ path: artifacts
68
+ merge-multiple: true
69
+
70
+ - name: List artifacts
71
+ run: find artifacts -type f | head -20
72
+
73
+ - name: Create GitHub Release
74
+ uses: softprops/action-gh-release@v2
75
+ with:
76
+ generate_release_notes: true
77
+ files: |
78
+ artifacts/**/*.exe
79
+ artifacts/**/*.AppImage
package/PUBLISHING.md ADDED
@@ -0,0 +1,68 @@
1
+ # Guía de Publicación y Releases
2
+
3
+ Este repositorio actúa como un monorepo que contiene 3 proyectos independientes que conviven juntos. Cada uno tiene su propio flujo de publicación y distribución:
4
+
5
+ 1. **CLI (Línea de comandos)**: Publicado en el registro de `npm`.
6
+ 2. **GUI (Aplicación de Escritorio)**: Compilado y publicado en GitHub Releases a través de GitHub Actions.
7
+
8
+ A continuación se detalla cómo trabajar con cada uno de ellos cuando hay cambios.
9
+
10
+
11
+ ## 1. CLI (NPM Package)
12
+
13
+ La versión de línea de comandos se encuentra en la raíz del proyecto (`/src`) y se distribuye a través del registro de `npm` (`vtex-css-sanitizer-cli`).
14
+
15
+ **Cómo publicar una nueva versión:**
16
+
17
+ 1. Realiza tus cambios o correcciones en la carpeta `/src`.
18
+ 2. Asegúrate de compilar el código TypeScript:
19
+ ```bash
20
+ npm run build
21
+ ```
22
+ 3. Actualiza la versión en el `package.json` de la raíz del proyecto. Puedes usar el comando de npm para que te genere el commit y el tag automáticamente:
23
+ ```bash
24
+ npm version patch # Para fixes menores (ej: 1.0.4 -> 1.0.5)
25
+ npm version minor # Para nuevas funciones (ej: 1.0.4 -> 1.1.0)
26
+ npm version major # Para cambios que rompen compatibilidad (ej: 1.0.4 -> 2.0.0)
27
+ ```
28
+ 4. Publica el paquete en npm (requiere estar logueado previamente con `npm login` si no lo estás):
29
+ ```bash
30
+ npm publish
31
+ ```
32
+ 5. Empuja los commits y tags generados al repositorio remoto:
33
+ ```bash
34
+ git push origin main --follow-tags
35
+ ```
36
+
37
+ ---
38
+
39
+ ## 2. GUI (Aplicación de Escritorio)
40
+
41
+ La aplicación con interfaz gráfica y Electron se encuentra completamente autocontenida en la carpeta `/gui`. Las actualizaciones de esta aplicación se distribuyen a través de la pestaña de **Releases** en GitHub.
42
+
43
+ Los botones de "Descargar para Windows" o "Descargar para Linux" en la Landing Page siempre apuntan al tag especial genérico de `/releases/latest` en GitHub, garantizando que los usuarios siempre descarguen la versión más reciente publicada.
44
+
45
+ **Cómo generar y publicar una nueva versión de la GUI:**
46
+
47
+ 1. Realiza y prueba tus cambios dentro de la carpeta `/gui`.
48
+ 2. Haz commit y push de los cambios a la rama `main`:
49
+ ```bash
50
+ git add gui/
51
+ git commit -m "feat(gui): nueva funcionalidad"
52
+ git push origin main
53
+ ```
54
+ 3. **Dispara la creación del Release en GitHub creando un tag Git:**
55
+ Debes crear un tag en Git que comience con la letra `v` apuntando a la versión que quieres publicar:
56
+ ```bash
57
+ git tag v1.0.7
58
+ git push origin v1.0.7
59
+ ```
60
+ *(También puedes empujar tus tags de una vez usando `git push origin main --tags`)*
61
+
62
+ **¿Qué ocurre después de pushear el tag en Git?**
63
+
64
+ 1. GitHub intercepta el tag `v*.*.*` y automáticamente arranca la [GitHub Action programada](.github/workflows/release.yml).
65
+ 2. La Action levanta dos entornos virtuales en los servidores de GitHub (uno con Windows y otro con Ubuntu).
66
+ 3. Automáticamente ingresa a la carpeta `/gui`, instala dependencias, **sincroniza la versión del tag en `gui/package.json`**, compila el framework y genera los instaladores `.exe` (NSIS para Windows) y `.AppImage` (para Linux).
67
+ 4. La Action crea la entrada en la sección **Releases** de este repositorio y sube ambos binarios como *assets*.
68
+ 5. A partir de ese momento, los botones de la Landing Page empezarán a servir automáticamente esta nueva versión.
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  ---
9
9
 
10
- vtex-css-sanitizer es una herramienta de línea de comandos (CLI) diseñada para limpiar y optimizar las hojas de estilo en proyectos de **VTEX IO**. Analiza tu base de código para encontrar clases CSS huérfanas y declaraciones `blockClass` sin uso, ayudándote a mantener tu proyecto limpio, performante y fácil de mantener.
10
+ vtex-css-sanitizer es una herramienta diseñada para limpiar y optimizar las hojas de estilo en proyectos de **VTEX IO**. Analiza tu base de código para encontrar clases CSS huérfanas y declaraciones `blockClass` sin uso, ayudándote a mantener tu proyecto limpio, performante y fácil de mantener. Disponible como **Aplicación de Escritorio (GUI)** o como herramienta de **Línea de Comandos (CLI)**.
11
11
 
12
12
  ---
13
13
 
@@ -23,22 +23,35 @@ Estos restos de código aumentan el tamaño de los bundles y hacen que la base d
23
23
  ### ✨ Características
24
24
 
25
25
  - **Análisis Bidireccional:** Encuentra tanto CSS sin `blockClass` como `blockClass` sin CSS.
26
- - **Limpieza Interactiva:** El comando `fix` te guía a través de cada regla candidata, dándote el control total para decidir qué se elimina y qué se conserva.
26
+ - **Doble Interfaz:** Utilizalo desde tu terminal preferida (CLI) o a través de nuestra moderna Aplicación de Escritorio (GUI).
27
+ - **Limpieza Interactiva:** El proceso guiado te permite decidir qué se elimina y qué se conserva regla por regla.
27
28
  - **Inteligente:** Reconoce las clases de estado dinámicas de VTEX (ej. `--isActive`) y solo valida el `blockClass` principal.
28
29
  - **Seguro:** Ignora automáticamente los archivos CSS de componentes React custom para evitar falsos positivos.
29
30
  - **Informes Detallados:** Genera informes en formato Markdown de cada análisis y sesión de limpieza para un registro histórico.
30
31
 
31
- ### 📦 Instalación
32
+ ### 📦 Descargas e Instalación
32
33
 
33
- Para usar esta herramienta en cualquier proyecto de tu máquina, instálala globalmente:
34
+ Elegí la versión que mejor se adapte a tu necesidad:
35
+
36
+ #### 1. Versión GUI (Aplicación de Escritorio)
37
+
38
+ Interfaz visual intuitiva para analizar y limpiar tu proyecto sin tocar la terminal.
39
+ - **[Descargar para Windows (.exe)](https://github.com/emanueleelias/vtex-css-sanitizer/releases/latest)**
40
+ - **[Descargar para Linux (.AppImage)](https://github.com/emanueleelias/vtex-css-sanitizer/releases/latest)**
41
+
42
+ *(Los binarios se encuentran en la sección "Assets" de cada Release).*
43
+
44
+ #### 2. Versión CLI (Línea de Comandos)
45
+
46
+ Ideal para integrar en workflows de desarrollo. Para usar la herramienta en cualquier proyecto local, instálala globalmente vía npm:
34
47
 
35
48
  ```bash
36
49
  npm install -g vtex-css-sanitizer-cli
37
50
  ```
38
51
 
39
- ### 🚀 Uso
52
+ ### 🚀 Uso (Versión CLI)
40
53
 
41
- Navega a la carpeta raíz de tu proyecto VTEX IO y ejecuta los siguientes comandos.
54
+ Navega a la carpeta raíz de tu proyecto VTEX IO y ejecuta los siguientes comandos. *(Nota: La versión GUI proporciona botones visuales equivalentes a estos comandos).*
42
55
 
43
56
  #### 1. Analizar el Proyecto (`analyze`)
44
57
 
@@ -67,10 +67,9 @@ async function fixCommand(projectPath) {
67
67
  if (response.shouldDelete === undefined) {
68
68
  console.log('\n🛑 Proceso de limpieza cancelado por el usuario.');
69
69
  userCancelled = true;
70
- break; // Sale del bucle de reglas para este archivo
70
+ break;
71
71
  }
72
72
  if (response.shouldDelete) {
73
- // Se opera sobre la regla, pero el reporte se guarda temporalmente
74
73
  fileDeletedRules.push({ rule: ruleAsString, filePath });
75
74
  rule.remove();
76
75
  rulesRemovedInFile++;
@@ -82,7 +81,6 @@ async function fixCommand(projectPath) {
82
81
  }
83
82
  console.log('------------------------------------------------------------------');
84
83
  }
85
- // Si el usuario canceló, se detiene todo el proceso.
86
84
  if (userCancelled) {
87
85
  if (deletedRules.length > 0 || keptRules.length > 0) {
88
86
  await (0, report_generator_1.generateFixReport)(projectPath, deletedRules, keptRules);
@@ -90,7 +88,6 @@ async function fixCommand(projectPath) {
90
88
  }
91
89
  return;
92
90
  }
93
- // Si se completó el archivo y hubo cambios, se escriben en el disco.
94
91
  if (rulesRemovedInFile > 0) {
95
92
  const newContent = root.toString();
96
93
  await promises_1.default.writeFile(filePath, newContent, 'utf-8');
@@ -98,7 +95,6 @@ async function fixCommand(projectPath) {
98
95
  totalRulesRemoved += rulesRemovedInFile;
99
96
  await (0, prompts_1.default)({ type: 'invisible', name: 'continue', message: 'Presiona Enter para continuar con el siguiente archivo...' });
100
97
  }
101
- // Solo si el archivo se procesó por completo, se añaden las acciones al reporte final.
102
98
  deletedRules.push(...fileDeletedRules);
103
99
  keptRules.push(...fileKeptRules);
104
100
  }
@@ -7,12 +7,18 @@ exports.findJsonFiles = findJsonFiles;
7
7
  exports.findCssFiles = findCssFiles;
8
8
  const glob_1 = require("glob");
9
9
  const path_1 = __importDefault(require("path"));
10
+ /**
11
+ * Normaliza una ruta para que use forward slashes (/), requerido por glob en Windows.
12
+ */
13
+ function toGlobPath(p) {
14
+ return p.split(path_1.default.sep).join('/');
15
+ }
10
16
  /**
11
17
  * Encuentra todos los archivos .json y .jsonc en la carpeta /store.
12
18
  */
13
19
  function findJsonFiles(projectPath) {
14
20
  const storePath = path_1.default.join(projectPath, 'store');
15
- return (0, glob_1.sync)(`${storePath}/**/*.{json,jsonc}`);
21
+ return (0, glob_1.sync)(`${toGlobPath(storePath)}/**/*.{json,jsonc}`);
16
22
  }
17
23
  /**
18
24
  * Encuentra todos los archivos .css DE APPS NATIVAS (vtex.*) en la carpeta /styles/css.
@@ -20,7 +26,7 @@ function findJsonFiles(projectPath) {
20
26
  */
21
27
  function findCssFiles(projectPath) {
22
28
  const stylesPath = path_1.default.join(projectPath, 'styles/css');
23
- const allCssFiles = (0, glob_1.sync)(`${stylesPath}/**/*.css`);
29
+ const allCssFiles = (0, glob_1.sync)(`${toGlobPath(stylesPath)}/**/*.css`);
24
30
  const nativeVtexCssFiles = allCssFiles.filter(filePath => {
25
31
  const fileName = path_1.default.basename(filePath);
26
32
  return fileName.startsWith('vtex.');
@@ -0,0 +1,24 @@
1
+ appId: com.elilab.vtex-css-sanitizer
2
+ productName: VTEX CSS Sanitizer
3
+ directories:
4
+ buildResources: build
5
+ output: release
6
+ files:
7
+ - '!**/.vscode/*'
8
+ - '!src/*'
9
+ - '!electron.vite.config.*'
10
+ - '!{.eslintignore,.eslintrc.cjs,.prettierignore,.prettierrc.yaml,dev-app-update.yml,CHANGELOG.md,README.md}'
11
+ - '!{tsconfig.json,tsconfig.node.json,tsconfig.web.json}'
12
+ linux:
13
+ target:
14
+ - AppImage
15
+ category: Development
16
+ icon: build/icon.png
17
+ win:
18
+ target:
19
+ - nsis
20
+ icon: build/icon.png
21
+ nsis:
22
+ oneClick: false
23
+ allowToChangeInstallationDirectory: true
24
+ shortcutName: VTEX CSS Sanitizer
@@ -0,0 +1,21 @@
1
+ import { resolve } from 'path'
2
+ import { defineConfig, externalizeDepsPlugin } from 'electron-vite'
3
+ import react from '@vitejs/plugin-react'
4
+ import tailwindcss from '@tailwindcss/vite'
5
+
6
+ export default defineConfig({
7
+ main: {
8
+ plugins: [externalizeDepsPlugin()]
9
+ },
10
+ preload: {
11
+ plugins: [externalizeDepsPlugin()]
12
+ },
13
+ renderer: {
14
+ resolve: {
15
+ alias: {
16
+ '@renderer': resolve('src/renderer/src')
17
+ }
18
+ },
19
+ plugins: [react(), tailwindcss()]
20
+ }
21
+ })