Fix frontend ignore dependency and use native folder filtering

This commit is contained in:
Paco POR-CORREO 2026-04-06 23:04:22 +02:00
parent 8a2eceb877
commit e3770b69ed
3 changed files with 14 additions and 15 deletions

View file

@ -47,4 +47,5 @@ Dar continuidad al RAG en `RAG/` a partir del estado actual documentado.
- Limpieza ejecutada exitosamente sobre el `scope` del código fuente antiguo (`RAG/src`). - Limpieza ejecutada exitosamente sobre el `scope` del código fuente antiguo (`RAG/src`).
- Reingesta del directorio `RAG/src` con el código actualizado. - Reingesta del directorio `RAG/src` con el código actualizado.
- Documento de seguimiento `RAG/docs/TASK_LIMPIEZA.md` y documentacion API `RAG/docs/API_RAG.md` actualizados. - Documento de seguimiento `RAG/docs/TASK_LIMPIEZA.md` y documentacion API `RAG/docs/API_RAG.md` actualizados.
- Implementacion de ingesta directa de carpetas locales desde el playground: el navegador respeta `.gitignore`, empaqueta la carpeta en un `.zip` en memoria y el backend usa `adm-zip` para extraerla de forma segura en un directorio temporal antes de la ingesta. - Implementacion de ingesta directa de carpetas locales desde el playground: el navegador empaqueta la carpeta en un `.zip` en memoria (filtrando `node_modules`, `dist`, `.git`, etc. con logica nativa) y el backend usa `adm-zip` para extraerla de forma segura en un directorio temporal antes de la ingesta.
- Correccion de error `ReferenceError: ignore is not defined` eliminando dependencia externa en el frontend.

View file

@ -355,25 +355,24 @@ ingestButton.addEventListener("click", async () => {
ingestResult.textContent = "Empaquetando carpeta local (esto puede tardar unos segundos)..."; ingestResult.textContent = "Empaquetando carpeta local (esto puede tardar unos segundos)...";
const zip = new JSZip(); const zip = new JSZip();
const ig = ignore();
// Buscar .gitignore en la raiz
const gitignoreFile = Array.from(ingestUploadFolder.files).find(f => f.webkitRelativePath.match(/^[^\/]+\/\.gitignore$/));
if (gitignoreFile) {
const content = await gitignoreFile.text();
ig.add(content);
}
// Reglas hardcodeadas de seguridad
ig.add(['node_modules/', '.git/', '.venv/', 'dist/', 'build/']);
let addedCount = 0; let addedCount = 0;
for (const file of ingestUploadFolder.files) { for (const file of ingestUploadFolder.files) {
// webkitRelativePath format: "FolderName/path/to/file.ext" // webkitRelativePath format: "FolderName/path/to/file.ext"
// Le quitamos el primer segmento (FolderName) para validar con ignore correctamente // Le quitamos el primer segmento (FolderName) para la ruta interna
const relativePath = file.webkitRelativePath.split('/').slice(1).join('/'); const relativePath = file.webkitRelativePath.split('/').slice(1).join('/');
if (relativePath && !ig.ignores(relativePath)) { // Filtro nativo simple sin depender de la libreria ignore
const isIgnored =
relativePath.startsWith('node_modules/') ||
relativePath.startsWith('.git/') ||
relativePath.startsWith('.venv/') ||
relativePath.startsWith('dist/') ||
relativePath.startsWith('build/') ||
relativePath.includes('/node_modules/') ||
relativePath.includes('/.git/');
if (relativePath && !isIgnored) {
zip.file(relativePath, file); zip.file(relativePath, file);
addedCount++; addedCount++;
} }

View file

@ -6,7 +6,6 @@
<title>RAG Playground</title> <title>RAG Playground</title>
<link rel="stylesheet" href="/playground/styles.css" /> <link rel="stylesheet" href="/playground/styles.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ignore/5.3.1/ignore.min.js"></script>
</head> </head>
<body> <body>
<main class="layout"> <main class="layout">