{"version":3,"sources":["../../../src/validation/file-system-validator.ts"],"names":["path"],"mappings":"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","file":"file-system-validator.cjs","sourcesContent":["import { ValidationResult } from '../types.js';\nimport { FileSystemAdapter } from '../utils/file-system-adapter.js';\nimport path from 'path';\n\nexport class FileSystemValidator {\n  constructor(private fs: FileSystemAdapter) {}\n\n  /**\n   * Validates file operations\n   */\n  async validateFileOperation(targetPath: string): Promise<ValidationResult> {\n    const errors: string[] = [];\n\n    // Check if target directory exists\n    const targetDir = path.dirname(targetPath);\n    if (!await this.fs.exists(targetDir)) {\n      errors.push(`Target directory does not exist: ${targetDir}`);\n    }\n\n    // Check if target file already exists\n    if (await this.fs.exists(targetPath)) {\n      errors.push(`Target file already exists: ${targetPath}`);\n    }\n\n    return {\n      valid: errors.length === 0,\n      errors,\n      warnings: []\n    };\n  }\n\n  /**\n   * Validates file paths for move operations\n   */\n  async validateFilePath(sourcePath: string, targetPath: string): Promise<ValidationResult> {\n    const errors: string[] = [];\n\n    // Check if source file exists\n    if (!await this.fs.exists(sourcePath)) {\n      errors.push(`Source file does not exist: ${sourcePath}`);\n    }\n\n    // Check if target directory exists\n    const targetDir = path.dirname(targetPath);\n    if (!await this.fs.exists(targetDir)) {\n      errors.push(`Target directory does not exist: ${targetDir}`);\n    }\n\n    // Check if target file already exists and is different from source\n    if (sourcePath !== targetPath && await this.fs.exists(targetPath)) {\n      errors.push(`Target file already exists: ${targetPath}`);\n    }\n\n    // Check if paths are absolute\n    if (!path.isAbsolute(sourcePath)) {\n      errors.push('Source path must be absolute');\n    }\n    if (!path.isAbsolute(targetPath)) {\n      errors.push('Target path must be absolute');\n    }\n\n    return {\n      valid: errors.length === 0,\n      errors,\n      warnings: []\n    };\n  }\n\n  /**\n   * Validates directory structure\n   */\n  validateDirectoryStructure(dirPath: string): ValidationResult {\n    const errors: string[] = [];\n\n    // Check if path is absolute\n    if (!path.isAbsolute(dirPath)) {\n      errors.push('Directory path must be absolute');\n    }\n\n    // Check for parent directory traversal by looking at raw path components\n    const parts = dirPath.split(path.sep);\n    if (parts.some(part => part === '..')) {\n      errors.push('Directory path cannot contain \"..\"');\n    }\n\n    return {\n      valid: errors.length === 0,\n      errors,\n      warnings: []\n    };\n  }\n\n  async validateFileExists(filePath: string): Promise<ValidationResult> {\n    const errors: string[] = [];\n    \n    if (!(await this.fs.exists(filePath))) {\n      errors.push(`File does not exist: ${filePath}`);\n    }\n\n    return {\n      valid: errors.length === 0,\n      errors,\n      warnings: []\n    };\n  }\n\n  async validateFileDoesNotExist(filePath: string): Promise<ValidationResult> {\n    const errors: string[] = [];\n    \n    if (await this.fs.exists(filePath)) {\n      errors.push(`File already exists: ${filePath}`);\n    }\n\n    return {\n      valid: errors.length === 0,\n      errors,\n      warnings: []\n    };\n  }\n\n  async validateDirectoryExists(dirPath: string): Promise<ValidationResult> {\n    const errors: string[] = [];\n    \n    if (!(await this.fs.exists(dirPath))) {\n      errors.push(`Directory does not exist: ${dirPath}`);\n    } else {\n      const stats = await this.fs.stat(dirPath);\n      if (!stats.isDirectory()) {\n        errors.push(`Path exists but is not a directory: ${dirPath}`);\n      }\n    }\n\n    return {\n      valid: errors.length === 0,\n      errors,\n      warnings: []\n    };\n  }\n} "]}