Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

bug(web): Intermediate directory nodes in buildFileTree receive child leaf paths instead of directory paths

Abierto Apto para principiantes
#1,707 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@riteshvish02 ya está trabajando en esto.

Desde el 3/10/2026.

  • #1708 de @riteshvish02 — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
88/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
typescript
Área
api, frontend

Línea de trabajo

Comienza en packages/web/src/features/git/utils.ts, en buildFileTree; después inspecciona packages/web/src/app/(app)/browse/components/fileTreePanel.tsx y el endpoint getTree. Reproduce el ejemplo de ruta anidada y verifica que los nodos de directorio intermedios expongan sus propias rutas de directorio, incluida la expansión correcta de carpetas y la salida de la API.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Describe the Bug

In packages/web/src/features/git/utils.ts, buildFileTree constructs a nested FileTreeNode hierarchy from a flat list of { type, path } objects.

When creating intermediate directory nodes (lines 68-74), the new node's path property is assigned item.path (the full path of the current leaf file being processed), instead of the path of that directory:

// packages/web/src/features/git/utils.ts:67-75
if (!next) {
    next = {
        name: part,
        path: item.path, // <--- Bug: assigns leaf file's path to intermediate directory node
        type: nodeType,
        children: [],
    };
    current.children.push(next);
}
Impact
  1. Broken Folder State & Expansion in UI: In packages/web/src/app/(app)/browse/components/fileTreePanel.tsx, folder expand/collapse state is tracked via openPaths.has(node.path) and route sync via pathParts.slice(0, i + 1).join('/'). Because directory nodes receive the child file's path instead of their own directory path, clicking folders or deep-linking to nested paths causes folder state tracking and auto-expansion to fail.
  2. Public API Corruption: The getTree endpoint (/api/git/tree) returns FileTreeNode with corrupted directory paths to API consumers.
Reproduction
const flatList = [
    { type: 'blob', path: 'src/components/buttons/PrimaryButton.tsx' }
];

const tree = buildFileTree(flatList);
const srcDir = tree.children[0];
console.log(srcDir.name); // "src"
console.log(srcDir.path); // Expected "src", but Got "src/components/buttons/PrimaryButton.tsx"
Proposed Fix

Reconstruct the directory node's path using parts.slice(0, i + 1).join('/'):

if (!next) {
    next = {
        name: part,
        path: parts.slice(0, i + 1).join('/'),
        type: nodeType,
        children: [],
    };
    current.children.push(next);
}

For intermediate directory levels (i < parts.length - 1), this evaluates to the proper directory path (e.g. "src", "src/components"), and for leaf files (i === parts.length - 1), it matches item.path.

Lenguaje dominante
TypeScript
Estrellas
3.9k
Forks
374
Merge medio
17 h 15 min
PR fusionados (30 d)
38

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de sourcebot-dev/sourcebot

Todos los issues de sourcebot-dev/sourcebot

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.