gather-ts
Version:
A powerful code analysis and packaging tool designed for creating AI-friendly code representations for javascript and typescript projects.
121 lines (120 loc) • 3.77 kB
TypeScript
import { IService } from "@/types/services";
import { IFileSystem } from "@/utils/filesystem/interfaces/IFileSystem";
import { ILogger } from "@/utils/logging/interfaces/ILogger";
import { IValidator } from "@/utils/validation/interfaces/IValidator";
import { IGatherTSConfig, IConfigValidationResult } from "@/types/config";
/**
* Dependencies required by ConfigManager
*/
export interface IConfigManagerDeps {
fileSystem: IFileSystem;
logger: ILogger;
validator: IValidator;
}
/**
* Configuration options for ConfigManager
*/
export interface IConfigManagerOptions {
/** Custom config file path */
configPath?: string;
/** Enable debug mode */
debug?: boolean;
/** Watch for config changes */
watch?: boolean;
}
/**
* Options for loading configuration
*/
export interface IConfigLoadOptions {
/** Whether the load is triggered by watch */
isWatch?: boolean;
/** Skip validation */
skipValidation?: boolean;
/** Merge strategy for arrays */
arrayMergeStrategy?: "replace" | "concat" | "unique";
}
/**
* Configuration change event data
*/
export interface IConfigChangeEvent {
/** Type of change */
type: "update" | "reset";
/** Previous configuration */
oldConfig?: IGatherTSConfig;
/** New configuration */
newConfig: IGatherTSConfig;
/** Timestamp of change */
timestamp: number;
/** Whether change was from watch */
isWatch?: boolean;
}
export interface IConfigValidator {
validateConfig(config: Partial<IGatherTSConfig>): void;
validateTokenizerConfig(config: Partial<IGatherTSConfig>): void;
validateOutputFormat(config: Partial<IGatherTSConfig>): void;
validateCustomText(config: Partial<IGatherTSConfig>): void;
validateAll(config: Partial<IGatherTSConfig>): IConfigValidationResult;
}
/**
* Configuration validation event data
*/
export interface IConfigValidationEvent {
/** Validation result */
result: IConfigValidationResult;
/** Configuration being validated */
config: Partial<IGatherTSConfig>;
/** Timestamp of validation */
timestamp: number;
}
/**
* Configuration metrics
*/
export interface IConfigMetrics {
/** Number of configuration loads */
loads: number;
/** Number of configuration updates */
updates: number;
/** Number of validation errors */
validationErrors: number;
/** Last update timestamp */
lastUpdate?: number;
}
/**
* Core ConfigManager interface
*/
export interface IConfigManager extends IService {
on(event: string | symbol, listener: (...args: any[]) => void): this;
emit(event: string | symbol, ...args: any[]): boolean;
removeAllListeners(event?: string | symbol): this;
getConfig(): IGatherTSConfig;
updateConfig(updates: Partial<IGatherTSConfig>): Promise<IGatherTSConfig>;
saveConfig(): Promise<void>;
reset(): void;
getMetrics(): IConfigMetrics;
onConfigChange(callback: (event: IConfigChangeEvent) => void): void;
getProjectRoot(): string;
getTokenizerModel(): string;
getMaxDepth(): number | undefined;
shouldShowTokenCount(): boolean;
getTopFilesCount(): number;
isDebugEnabled(): boolean;
getModelTokenLimit(): number;
getTokenWarning(totalTokens: number): string | null;
validateConfig(config: Partial<IGatherTSConfig>): IConfigValidationResult;
}
/**
* Static methods for ConfigManager
*/
export interface IConfigManagerStatic {
/** Generate default configuration file */
generateDefaultConfig(outputPath: string, fileSystem: IFileSystem): void;
}
/**
* ConfigManager events map
*/
export interface IConfigManagerEvents {
configChange: IConfigChangeEvent;
configValidation: IConfigValidationEvent;
error: Error;
warning: string;
}