📁 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);