/** * Copyright (c) 2026, Salesforce, Inc., * All rights reserved. * For full license text, see the LICENSE.txt file */ import type { Logger } from "./logger.js"; /** * Schema structure from features.json files */ export interface FileCopySchema { /** Other features that must be installed first */ readonly featureDependencies?: readonly string[]; /** npm packages to add to dependencies */ readonly packageDependencies?: Readonly>; /** npm packages to add to devDependencies */ readonly packageDevDependencies?: Readonly>; /** File/directory copy operations */ readonly copy?: readonly CopyOperation[]; } /** * A single copy operation */ export interface CopyOperation { /** Source path relative to package's dist/ directory */ readonly from: string; /** Destination path (may contain placeholder) */ readonly to: string; /** Optional description of what this copies */ readonly description?: string; /** For __example__ files: the target file where patterns should be integrated */ readonly integrationTarget?: string; } /** * Conflict handling mode */ export type ConflictMode = "prompt" | "error" | "skip" | "overwrite"; /** * User's choice for handling a specific conflict */ export type ConflictResolution = "skip" | "overwrite" | "cancel"; /** * Map of file paths to conflict resolutions */ export type ConflictResolutionMap = Record; /** * Shared context for installation operations */ export interface InstallationContext { /** SFDX source directory (e.g., force-app/main/default) */ sfdxSource: string; /** Specific UI bundle directory (e.g., force-app/main/default/uiBundles/my-ui-bundle) */ uiBundleDir: string; /** UI bundle name extracted from uiBundleDir (e.g., "my-ui-bundle") */ uiBundleName: string; /** Enable verbose logging */ verbose: boolean; /** Dry run mode - show what would be done without changes */ dryRun: boolean; /** Conflict handling mode */ conflictMode: ConflictMode; /** Conflict resolution map (from file or interactive prompts) */ conflictResolutions: ConflictResolutionMap; /** Track installed features to prevent duplicates */ installedFeatures: Set; /** Track all copied example files with their integration targets */ copiedExampleFiles: { file: string; integrationTarget?: string; }[]; /** Logger instance (verbose-aware) */ logger: Logger; } /** * Feature registry entry */ export interface FeatureDefinition { /** Display name for the feature */ readonly name: string; /** npm package name */ readonly package: string; /** Optional description */ readonly description?: string; } /** * Feature registry mapping feature names to packages */ export type FeatureRegistry = Record; /** * Feature definition as exported from individual feature.ts files. * Each feature directory exports a default FeatureDefinitionFile. */ export interface FeatureDefinitionFile { /** Registry key for this feature (e.g., "authentication", "global-search") */ readonly key: string; /** Display name */ readonly name: string; /** npm package name */ readonly package: string; /** Short description (1-2 sentences) */ readonly shortDescription: string; /** Long description (detailed explanation) */ readonly longDescription: string; /** Search keywords */ readonly keywords: readonly string[]; /** Feature dependencies */ readonly featureDependencies?: readonly string[]; /** Package dependencies */ readonly packageDependencies?: Readonly>; /** Package dev dependencies */ readonly packageDevDependencies?: Readonly>; /** Copy operations (includes __example__ files with integrationTarget) */ readonly copy?: readonly CopyOperation[]; /** List of feature capabilities */ readonly features?: readonly string[]; /** List of included components */ readonly components?: readonly string[]; } /** * Detailed feature metadata */ export interface FeatureMetadata { /** Display name */ readonly name: string; /** npm package name */ readonly package: string; /** Short description (1-2 sentences) */ readonly shortDescription: string; /** Long description (detailed explanation) */ readonly longDescription: string; /** Search keywords */ readonly keywords: readonly string[]; /** Feature dependencies */ readonly featureDependencies?: readonly string[]; /** Package dependencies */ readonly packageDependencies?: Readonly>; /** Package dev dependencies */ readonly packageDevDependencies?: Readonly>; /** Copy operations (includes __example__ files with integrationTarget) */ readonly copy?: readonly CopyOperation[]; /** List of feature capabilities */ readonly features?: readonly string[]; /** List of included components */ readonly components?: readonly string[]; } /** * Features metadata collection */ export interface FeaturesMetadata { features: Record; } /** * Search result with scoring information */ export interface SearchResult { /** The feature that matched the search */ readonly feature: FeatureMetadata; /** Relevance score (higher = more relevant) */ readonly score: number; /** Fields that matched the search terms (for debugging) */ readonly matchedFields: readonly string[]; } /** * CLI options */ export interface CliOptions { sfdxSource?: string; uiBundleDir?: string; verbose?: boolean; dryRun?: boolean; yes?: boolean; onConflict?: ConflictMode; conflictResolution?: string; } //# sourceMappingURL=types.d.ts.map