UNPKG

qraft

Version:

A powerful CLI tool to qraft structured project setups from GitHub template repositories

176 lines 6.93 kB
/** * Custom error types for GitignoreManager operations */ export declare class GitignoreError extends Error { readonly code: string; readonly cause?: Error | undefined; constructor(message: string, code: string, cause?: Error | undefined); } export declare class GitignorePermissionError extends GitignoreError { constructor(message: string, cause?: Error); } export declare class GitignoreFileError extends GitignoreError { constructor(message: string, cause?: Error); } /** * Result of a gitignore operation */ export interface GitignoreOperationResult { success: boolean; created: boolean; modified: boolean; patternsAdded: string[]; patternsSkipped: string[]; error?: string; errorCode?: string; } /** * Options for gitignore operations */ export interface GitignoreOptions { dryRun?: boolean; force?: boolean; verbose?: boolean; } /** * GitignoreManager handles reading, writing, and managing .gitignore files */ export declare class GitignoreManager { private readonly gitignoreFileName; /** * Handle and classify file system errors * @param error Original error * @param operation Description of the operation that failed * @param filePath Optional file path for context * @returns GitignoreError Classified error */ private handleFileSystemError; /** * Safely execute a file system operation with error handling * @param operation Function to execute * @param operationName Description of the operation * @param filePath Optional file path for context * @returns Promise<T> Result of the operation */ private safeFileOperation; /** * Get the path to the .gitignore file in the specified directory * @param targetDirectory Directory containing the .gitignore file * @returns string Path to .gitignore file */ getGitignorePath(targetDirectory: string): string; /** * Check if a .gitignore file exists in the target directory * @param targetDirectory Directory to check * @returns Promise<boolean> True if .gitignore exists */ exists(targetDirectory: string): Promise<boolean>; /** * Read the contents of a .gitignore file * @param targetDirectory Directory containing the .gitignore file * @returns Promise<string> Contents of the .gitignore file, empty string if file doesn't exist */ read(targetDirectory: string): Promise<string>; /** * Write content to a .gitignore file * @param targetDirectory Directory to write the .gitignore file * @param content Content to write * @param options Operation options * @returns Promise<void> */ write(targetDirectory: string, content: string, options?: GitignoreOptions): Promise<void>; /** * Check if the target directory is writable * @param targetDirectory Directory to check * @returns Promise<boolean> True if directory is writable */ isWritable(targetDirectory: string): Promise<boolean>; /** * Check if a .gitignore file is writable (if it exists) * @param targetDirectory Directory containing the .gitignore file * @returns Promise<boolean> True if file is writable or doesn't exist */ isGitignoreWritable(targetDirectory: string): Promise<boolean>; /** * Check if we have permission to create a .gitignore file * @param targetDirectory Directory where .gitignore would be created * @returns Promise<boolean> True if file can be created */ canCreateGitignore(targetDirectory: string): Promise<boolean>; /** * Perform comprehensive permission checks * @param targetDirectory Directory to check * @returns Promise<object> Object with permission check results */ checkPermissions(targetDirectory: string): Promise<{ canWrite: boolean; fileExists: boolean; fileWritable: boolean; canCreate: boolean; error?: string; }>; /** * Ensure the target directory exists and is writable * @param targetDirectory Directory to validate * @returns Promise<void> * @throws Error if directory cannot be created or is not writable */ validateTargetDirectory(targetDirectory: string): Promise<void>; /** * Parse .gitignore content into individual patterns * @param content Raw .gitignore file content * @returns string[] Array of patterns (excluding comments and empty lines) */ parsePatterns(content: string): string[]; /** * Normalize a gitignore pattern for comparison * @param pattern Raw pattern from .gitignore * @returns string Normalized pattern */ normalizePattern(pattern: string): string; /** * Check if a pattern already exists in the .gitignore content * @param content Current .gitignore content * @param pattern Pattern to check for * @returns boolean True if pattern exists */ hasPattern(content: string, pattern: string): boolean; /** * Filter out patterns that already exist in the .gitignore file * @param content Current .gitignore content * @param patterns Array of patterns to check * @returns object Object with newPatterns and existingPatterns arrays */ filterDuplicatePatterns(content: string, patterns: string[]): { newPatterns: string[]; existingPatterns: string[]; }; /** * Format patterns into a properly commented section * @param patterns Array of patterns to format * @param sectionTitle Title for the section * @param description Optional description for the section * @returns string Formatted section with comments and patterns */ formatPatternSection(patterns: string[], sectionTitle: string, description?: string): string; /** * Insert patterns into existing .gitignore content * @param existingContent Current .gitignore content * @param patterns Array of patterns to insert * @param sectionTitle Title for the new section * @param description Optional description for the section * @returns string Updated .gitignore content */ insertPatterns(existingContent: string, patterns: string[], sectionTitle: string, description?: string): string; /** * Create or update .gitignore file with new patterns * @param targetDirectory Directory containing the .gitignore file * @param patterns Array of patterns to add * @param sectionTitle Title for the section * @param description Optional description for the section * @param options Operation options * @returns Promise<GitignoreOperationResult> Result of the operation */ addPatterns(targetDirectory: string, patterns: string[], sectionTitle: string, description?: string, options?: GitignoreOptions): Promise<GitignoreOperationResult>; } //# sourceMappingURL=gitignoreManager.d.ts.map