import type * as fs from 'fs'; import type * as smartrx from '@push.rocks/smartrx'; /** * File system event types that the watcher emits */ export type TWatchEventType = 'add' | 'addDir' | 'change' | 'unlink' | 'unlinkDir' | 'ready' | 'error'; /** * Data structure for watch events */ export interface IWatchEvent { type: TWatchEventType; path: string; stats?: fs.Stats; error?: Error; } /** * Options for creating a watcher */ export interface IWatcherOptions { /** Base paths to watch (extracted from glob patterns) */ basePaths: string[]; /** Maximum directory depth to watch */ depth: number; /** Whether to follow symbolic links */ followSymlinks: boolean; /** Stability threshold for write detection (ms) */ stabilityThreshold: number; /** Poll interval for write detection (ms) */ pollInterval: number; } /** * Common interface for file watchers across runtimes */ export interface IWatcher { /** Start watching files */ start(): Promise; /** Stop watching and clean up */ stop(): Promise; /** Whether the watcher is currently active */ readonly isWatching: boolean; /** Subject that emits watch events */ readonly events$: smartrx.rxjs.Subject; }