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