UNPKG

@workspace-fs/core

Version:

Multi-project workspace manager for Firesystem with support for multiple sources

56 lines (49 loc) 1.54 kB
import { TypedEventEmitter, FileSystemEvents, } from "@firesystem/core"; import type { Project, WorkspaceEventPayloads } from "../types"; export class EventManager { constructor( private events: TypedEventEmitter<WorkspaceEventPayloads>, ) {} /** * Setup event forwarding from project to workspace */ setupEventForwarding(project: Project): void { if (!project.fs.events) return; // Forward file system events with project context const events = [ FileSystemEvents.FILE_READING, FileSystemEvents.FILE_READ, FileSystemEvents.FILE_WRITING, FileSystemEvents.FILE_WRITTEN, FileSystemEvents.FILE_DELETING, FileSystemEvents.FILE_DELETED, FileSystemEvents.DIR_CREATING, FileSystemEvents.DIR_CREATED, FileSystemEvents.DIR_DELETING, FileSystemEvents.DIR_DELETED, ]; events.forEach((event) => { project.fs.events!.on(event, (payload: any) => { // Map to project-specific event const projectEvent = `project:${event.toLowerCase().replace(/_/g, ":")}` as keyof WorkspaceEventPayloads; // Add projectId to payload const enrichedPayload = { projectId: project.id, ...payload }; // Emit on workspace events (this.events as any).emit(projectEvent, enrichedPayload); }); }); } /** * Emit workspace event */ emit<K extends keyof WorkspaceEventPayloads>( event: K, payload: WorkspaceEventPayloads[K], ): void { this.events.emit(event, payload); } }