Skip to content

📁 File Reader Plugin

El plugin @fireflyjs/file-reader es el proveedor de capacidades oficial para descubrir y leer archivos en el workspace, proporcionando una estructura de árbol en memoria.

🏗️ Configuración

Se configura pasando las opciones de inclusión y exclusión al constructor en el firefly.config.ts.

ts
import { FileReaderPlugin } from '@fireflyjs/file-reader'

export default defineConfig({
  plugins: [
    new FileReaderPlugin({
      include: ["./**/*.ts", "./**/*.tsx"],
      exclude: ["**/node_modules/**", "**/dist/**"]
    })
  ]
})

📊 Estructura del Workspace

El plugin devuelve un objeto Workspace que representa el estado del sistema de archivos filtrado por tu configuración.

Interfaz Workspace

ts
export interface Workspace {
  value: WorkspaceTree; // El nodo raíz del proyecto
  read(path: string): Promise<string>; // Método para leer contenido de archivos
}

Interfaz WorkspaceTree

Representa un nodo jerárquico que puede ser un archivo o una carpeta.

ts
export interface WorkspaceTree {
  value: File | Folder;
  childrens: WorkspaceTree[]; // Hijos del nodo (vacío si es un archivo)
}

Tipos File y Folder

ts
export type File = {
  type: "file";
  name: string;
  path: string; // Path absoluto
  extension?: string;
};

export type Folder = {
  type: "folder";
  name: string;
  path: string; // Path absoluto
};

🛠️ Uso en Tools

Las herramientas pueden solicitar el procesamiento del plugin para obtener el árbol y luego recorrerlo recursivamente.

ts
const reader = kernel.getPlugin<FileReaderPlugin>("fireflyjs-plugin-file-reader");
const workspace = reader.process();

// Ejemplo de recorrido recursivo
function printNode(node: WorkspaceTree) {
  const icon = node.value.type === "folder" ? "📁" : "📄";
  console.log(`${icon} ${node.value.name}`);
  node.childrens.forEach(printNode);
}

printNode(workspace.value);