import { EventEmitter } from 'events'; import { WorkspaceFolder } from 'vscode-languageserver-protocol'; import { URI } from 'vscode-uri'; import { DirectoryWalker } from './dir'; export type WorkspaceFileUpdate = { fileUri: URI; event: 'add' | 'change' | 'unlink'; workspaceFolder: WorkspaceFolder; }; export type WorkspaceFilesUpdate = { files: URI[]; workspaceFolder: WorkspaceFolder; }; export declare enum VirtualFileSystemEvents { WorkspaceFileEvent = "workspaceFileEvent", WorkspaceFilesEvent = "workspaceFilesEvent" } export interface FileSystemEventMap { [VirtualFileSystemEvents.WorkspaceFileEvent]: WorkspaceFileUpdate; [VirtualFileSystemEvents.WorkspaceFilesEvent]: WorkspaceFilesUpdate; } export interface FileSystemEventListener { (eventType: T, data: FileSystemEventMap[T]): void; } export interface VirtualFileSystemService extends DefaultVirtualFileSystemService { } export declare const VirtualFileSystemService: import("@gitlab-org/di").InterfaceId; export declare class DefaultVirtualFileSystemService { #private; constructor(directoryWalker: DirectoryWalker); /** * Emits a workspace files update event for the given workspace folder. * This is used to notify consumers of the virtual file system that the files in the workspace have changed. */ emitFilesForWorkspace(workspaceFolder: WorkspaceFolder): Promise; /** * Adds a listener for the file system event. * This can be of type `WorkspaceFileUpdate` or `WorkspaceFilesUpdate`. * * @param listener - The listener to add. * @returns A disposable object that can be used to remove the listener. */ onFileSystemEvent(listener: FileSystemEventListener): { dispose: () => EventEmitter; }; }