import type { BaseBuilder } from './builders/index.js'; import type { Logger } from './logger.js'; import type { BuildNotifier } from './notifier.js'; import type { PoltergeistState, PostBuildResult } from './state.js'; import type { BuildStatus, PoltergeistConfig, Target } from './types.js'; /** * Interface for Watchman client operations. * Abstracts Facebook's Watchman file watching service for testability. * Handles project subscriptions and file change notifications. */ export interface IWatchmanClient { connect(): Promise; disconnect(): Promise; watchProject(projectPath: string): Promise; subscribe(root: string, name: string, config: { expression: Array>; fields: string[]; }, callback: (files: Array<{ name: string; exists: boolean; type?: string; }>) => void, exclusionExpressions?: Array<[string, string[]]>): Promise; unsubscribe(subscriptionName: string): Promise; isConnected(): boolean; } /** * Interface for state management operations. * Handles persistent state files for inter-process coordination. * Manages build status, process liveness, and target metadata. */ export interface IStateManager { initializeState(target: Target): Promise; readState(targetName: string): Promise; updateState(targetName: string, updates: Partial): Promise; updateBuildStatus(targetName: string, buildStatus: BuildStatus): Promise; updatePostBuildResult(targetName: string, hookName: string, updates: Partial): Promise; forceUnlock(targetName: string): Promise; removeState(targetName: string): Promise; isLocked(targetName: string): Promise; discoverStates(): Promise>>; startHeartbeat(): void; stopHeartbeat(): void; cleanup(): Promise; } /** * Interface for builder factory operations. * Creates appropriate builder instances based on target type. * Supports executable, app-bundle, library, framework, test, docker, and custom targets. */ export interface IBuilderFactory { createBuilder(target: Target, projectRoot: string, logger: Logger, stateManager?: IStateManager): BaseBuilder; } /** * Dependencies that must be injected into Poltergeist for operation. * Uses dependency injection pattern for better testability and modularity. * All dependencies except stateManager and builderFactory are optional. */ export interface PoltergeistDependencies { watchmanClient?: IWatchmanClient; stateManager: IStateManager; builderFactory: IBuilderFactory; notifier?: BuildNotifier; watchmanConfigManager?: IWatchmanConfigManager; } /** * Interface for Watchman configuration management. * Handles automatic .watchmanconfig generation with smart exclusions. * Optimizes file watching performance based on project type and size. */ export interface IWatchmanConfigManager { /** Ensures .watchmanconfig is current with optimal exclusions */ ensureConfigUpToDate(config: PoltergeistConfig): Promise; /** Analyzes project and suggests performance optimizations */ suggestOptimizations(): Promise; /** Converts exclusion rules to Watchman expression format */ createExclusionExpressions(config: PoltergeistConfig): Array<[string, string[]]>; /** Normalizes watch patterns to be more lenient */ normalizeWatchPattern(pattern: string): string; /** Validates glob pattern syntax */ validateWatchPattern(pattern: string): void; } //# sourceMappingURL=interfaces.d.ts.map