qraft
Version:
A powerful CLI tool to qraft structured project setups from GitHub template repositories
176 lines • 6.93 kB
TypeScript
/**
* 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