UNPKG

qraft

Version:

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

284 lines 10.9 kB
import { BoxManifest } from '../types'; /** * Information about a directory containing a manifest */ export interface ManifestDirectoryInfo { /** Path to the directory */ path: string; /** Path to the .qraft directory */ qraftPath: string; /** Number of files in .qraft directory */ fileCount: number; /** Total size of .qraft directory in bytes */ totalSize: number; /** Last modified timestamp */ lastModified: Date; /** Whether manifest.json exists */ hasManifest: boolean; /** Whether metadata.json exists */ hasMetadata: boolean; } /** * Disk usage information for .qraft directory */ export interface DiskUsage { /** Total size in bytes */ totalSize: number; /** Total number of files */ fileCount: number; /** Directory breakdown */ directories: Array<{ path: string; size: number; files: number; }>; } /** * Validation result for directory suitability */ export interface ValidationResult { /** Whether the directory is valid for manifest storage */ isValid: boolean; /** Critical issues that prevent manifest storage */ issues: string[]; /** Warnings that should be considered */ warnings: string[]; } /** * Manifest file paths for a directory */ export interface ManifestPaths { /** Absolute path to target directory */ targetDirectory: string; /** Absolute path to .qraft directory */ qraftDirectory: string; /** Absolute path to manifest.json */ manifestFile: string; /** Absolute path to metadata.json */ metadataFile: string; /** Relative paths from target directory */ relativePaths: { qraftDirectory: string; manifestFile: string; metadataFile: string; }; } /** * Compatibility assessment result */ export interface CompatibilityResult { /** Compatibility level */ compatibilityLevel: 'compatible' | 'warning' | 'incompatible'; /** Whether an existing manifest was found */ hasExistingManifest: boolean; /** Detailed validation result */ validation: ValidationResult; /** Recommendations for the user */ recommendations: string[]; } /** * Constants for manifest storage */ export declare const MANIFEST_CONSTANTS: { readonly QRAFT_DIR: ".qraft"; readonly MANIFEST_FILE: "manifest.json"; readonly METADATA_FILE: "metadata.json"; }; /** * Utility functions for manifest path resolution and directory management */ export declare class ManifestUtils { /** * Get the .qraft directory path for a target directory * @param targetDirectory Target directory path * @returns string Path to .qraft directory */ static getQraftDirectoryPath(targetDirectory: string): string; /** * Get the manifest.json file path for a target directory * @param targetDirectory Target directory path * @returns string Path to manifest.json file */ static getManifestFilePath(targetDirectory: string): string; /** * Get the metadata.json file path for a target directory * @param targetDirectory Target directory path * @returns string Path to metadata.json file */ static getMetadataFilePath(targetDirectory: string): string; /** * Ensure the .qraft directory exists in the target directory * @param targetDirectory Target directory path * @returns Promise<void> */ static ensureQraftDirectory(targetDirectory: string): Promise<void>; /** * Check if .qraft directory exists in the target directory * @param targetDirectory Target directory path * @returns Promise<boolean> True if .qraft directory exists */ static qraftDirectoryExists(targetDirectory: string): Promise<boolean>; /** * Check if manifest.json exists in the target directory * @param targetDirectory Target directory path * @returns Promise<boolean> True if manifest.json exists */ static manifestFileExists(targetDirectory: string): Promise<boolean>; /** * Check if metadata.json exists in the target directory * @param targetDirectory Target directory path * @returns Promise<boolean> True if metadata.json exists */ static metadataFileExists(targetDirectory: string): Promise<boolean>; /** * Check if both manifest and metadata files exist (complete local manifest) * @param targetDirectory Target directory path * @returns Promise<boolean> True if both files exist */ static hasCompleteLocalManifest(targetDirectory: string): Promise<boolean>; /** * Validate manifest structure and required fields * @param manifest Manifest object to validate * @returns boolean True if manifest is valid * @throws Error if manifest is invalid with specific error message */ static validateManifest(manifest: any): manifest is BoxManifest; /** * Read and parse manifest.json file with validation * @param targetDirectory Target directory path * @returns Promise<BoxManifest> Parsed and validated manifest * @throws Error if file doesn't exist, can't be parsed, or is invalid */ static readManifestFile(targetDirectory: string): Promise<BoxManifest>; /** * Write manifest to manifest.json file with proper formatting * @param targetDirectory Target directory path * @param manifest Manifest to write * @returns Promise<void> */ static writeManifestFile(targetDirectory: string, manifest: BoxManifest): Promise<void>; /** * Read metadata.json file * @param targetDirectory Target directory path * @returns Promise<any> Parsed metadata object * @throws Error if file doesn't exist or can't be parsed */ static readMetadataFile(targetDirectory: string): Promise<any>; /** * Write metadata to metadata.json file * @param targetDirectory Target directory path * @param metadata Metadata object to write * @returns Promise<void> */ static writeMetadataFile(targetDirectory: string, metadata: any): Promise<void>; /** * Remove the entire .qraft directory and all its contents * @param targetDirectory Target directory path * @returns Promise<void> */ static removeQraftDirectory(targetDirectory: string): Promise<void>; /** * Get relative path from target directory to .qraft directory (for exclude patterns) * @param targetDirectory Target directory path * @returns string Relative path to .qraft directory */ static getQraftDirectoryRelativePath(): string; /** * Check if a path is within the .qraft directory * @param filePath File path to check * @returns boolean True if path is within .qraft directory */ static isQraftPath(filePath: string): boolean; /** * Get default exclude patterns that should include .qraft directory * @param existingExcludes Existing exclude patterns * @returns string[] Updated exclude patterns including .qraft */ static getUpdatedExcludePatterns(existingExcludes?: string[]): string[]; /** * Find all directories containing .qraft manifests within a parent directory * @param parentDirectory Parent directory to search * @param maxDepth Maximum depth to search (default: 3) * @returns Promise<string[]> Array of directories containing manifests */ static findManifestDirectories(parentDirectory: string, maxDepth?: number): Promise<string[]>; /** * Get manifest directory info including size and file count * @param targetDirectory Directory to analyze * @returns Promise<ManifestDirectoryInfo | null> Directory info or null if no manifest */ static getManifestDirectoryInfo(targetDirectory: string): Promise<ManifestDirectoryInfo | null>; /** * Resolve relative paths within manifest context * @param basePath Base directory path * @param relativePath Relative path to resolve * @returns string Resolved absolute path */ static resolveManifestPath(basePath: string, relativePath: string): string; /** * Get relative path from one directory to another * @param from Source directory * @param to Target directory * @returns string Relative path */ static getRelativePath(from: string, to: string): string; /** * Normalize path separators for cross-platform compatibility * @param filePath Path to normalize * @returns string Normalized path */ static normalizePath(filePath: string): string; /** * Check if a path is safe (doesn't escape parent directory) * @param basePath Base directory * @param targetPath Path to check * @returns boolean True if path is safe */ static isSafePath(basePath: string, targetPath: string): boolean; /** * Create backup of .qraft directory * @param targetDirectory Directory containing .qraft * @param backupSuffix Suffix for backup directory (default: timestamp) * @returns Promise<string> Path to backup directory */ static backupQraftDirectory(targetDirectory: string, backupSuffix?: string): Promise<string>; /** * Restore .qraft directory from backup * @param targetDirectory Directory to restore to * @param backupPath Path to backup directory * @returns Promise<void> */ static restoreQraftDirectory(targetDirectory: string, backupPath: string): Promise<void>; /** * Clean up old backup directories * @param targetDirectory Directory to clean * @param maxAge Maximum age in days (default: 30) * @returns Promise<string[]> Array of removed backup paths */ static cleanupOldBackups(targetDirectory: string, maxAge?: number): Promise<string[]>; /** * Get disk usage for .qraft directory * @param targetDirectory Directory containing .qraft * @returns Promise<DiskUsage> Disk usage information */ static getQraftDiskUsage(targetDirectory: string): Promise<DiskUsage>; /** * Validate that a directory is suitable for manifest storage * @param targetDirectory Directory to validate * @returns Promise<ValidationResult> Validation result with details */ static validateDirectoryForManifest(targetDirectory: string): Promise<ValidationResult>; /** * Get manifest file paths for a given directory * @param targetDirectory Target directory * @returns ManifestPaths Object containing all relevant paths */ static getManifestPaths(targetDirectory: string): ManifestPaths; /** * Check if a directory structure is compatible with manifest storage * @param targetDirectory Directory to check * @returns Promise<CompatibilityResult> Compatibility assessment */ static checkManifestCompatibility(targetDirectory: string): Promise<CompatibilityResult>; } //# sourceMappingURL=manifestUtils.d.ts.map