L. generar-listado-sw.js

1
const fs = require('fs/promises');
2
const path = require('path');
3
4
// Configuración de rutas
5
const PUBLIC_DIR = 'public';
6
const OUTPUT_FILE = 'lista_archivos_sw.txt';
7
8
// Restricciones basadas en tus instrucciones (Paso 4)
9
const EXCLUDED_DIRS = ['.vscode'];
10
const EXCLUDED_FILES = [
11
 '.firebaserc',
12
 '.gitignore',
13
 '.htaccess',
14
 '404.html',
15
 'sw.js',
16
 'lista_archivos_sw.txt',
17
 'generar-listado-sw.js',
18
 'firebase.json',
19
 'jsconfig.json',
20
 'LICENSE',
21
 'README.md',
22
];
23
const EXCLUDED_EXTENSIONS = ['.php', '.db'];
24
25
/**
26
 * Función recursiva para obtener todos los archivos de un directorio
27
 * @param {import("node:fs").PathLike} dir
28
 */
29
async function getFiles(dir) {
30
 /**
31
  * @type {any[]}
32
  */
33
 let results = [];
34
 const list = await fs.readdir(dir, { withFileTypes: true });
35
36
 for (const dirent of list) {
37
  const fullPath = path.join(dir, dirent.name);
38
39
  if (dirent.isDirectory()) {
40
   // Ignorar carpetas excluidas como .vscode
41
   if (!EXCLUDED_DIRS.includes(dirent.name)) {
42
    results = results.concat(await getFiles(fullPath));
43
   }
44
  } else {
45
   const fileName = dirent.name;
46
   const ext = path.extname(fileName).toLowerCase();
47
48
   // Filtrar archivos específicos y extensiones (.php, .db)
49
   if (!EXCLUDED_FILES.includes(fileName) && !EXCLUDED_EXTENSIONS.includes(ext)) {
50
51
    // Obtener ruta relativa respecto a la carpeta 'public'
52
    let relativePath = path.relative(PUBLIC_DIR, fullPath);
53
54
    // Convertir barras invertidas de Windows (\) a barras normales (/) (Paso 5 y 8)
55
    relativePath = relativePath.split(path.sep).join('/');
56
57
    // Guardar la ruta con el formato adecuado
58
    results.push(`"${ relativePath }"`);
59
   }
60
  }
61
 }
62
 return results;
63
}
64
65
/**
66
 * Función principal para generar el archivo
67
 */
68
async function generateSWList() {
69
 try {
70
  console.log(`Explorando la carpeta "${ PUBLIC_DIR }"...`);
71
  const files = await getFiles(PUBLIC_DIR);
72
73
  // Mantener el último elemento requerido por el Service Worker (Paso 10)
74
  files.push('"/"');
75
76
  // Dar formato de arreglo de JavaScript con saltos de línea y sangría (Paso 6 y 9)
77
  const arrayContent = `const ARCHIVOS = [\n  ${ files.join(',\n  ') }\n]`;
78
79
  // Escribir el resultado en un archivo de texto
80
  await fs.writeFile(OUTPUT_FILE, arrayContent, 'utf-8');
81
82
  console.log(`¡Éxito! El listado se ha generado correctamente.`);
83
  console.log(`Revisa el archivo "${ OUTPUT_FILE }" y copia el contenido a tu public/sw.js.`);
84
85
 } catch (error) {
86
  console.error('Error al generar el listado:', error.message);
87
 }
88
}
89
90
generateSWList();
skip_previous skip_next