Advertisement

← vibesdk

worker/agents/domain/pure/DependencyManagement.ts

1.9 KB Download file
/**
 * Pure functions for dependency management
 * No side effects, handles package.json and dependency merging
 */

import type { StructuredLogger } from '../../../logger';
export class DependencyManagement {
    /**
     * Merge dependencies from template and package.json
     * Preserves exact behavior from original implementation
     */
    static mergeDependencies(
        templateDeps: Record<string, string> = {},
        lastPackageJson?: string,
        logger?: Pick<StructuredLogger, 'info' | 'warn'>
    ): Record<string, string> {
        const deps = { ...templateDeps };
        
        // Add additional dependencies from the last package.json
        if (lastPackageJson) {
            try {
                const parsedPackageJson = JSON.parse(lastPackageJson);
                const packageDeps = parsedPackageJson.dependencies as Record<string, string>;
                
                if (packageDeps) {
                    Object.assign(deps, packageDeps);
                    logger?.info(`Adding dependencies from last package.json: ${Object.keys(packageDeps).join(', ')}`);
                }
            } catch (error) {
                logger?.warn('Failed to parse lastPackageJson:', error);
            }
        }
        
        return deps;
    }

    /**
     * Extract dependencies from package.json string
     */
    static extractDependenciesFromPackageJson(packageJson: string): Record<string, string> {
        try {
            const parsed = JSON.parse(packageJson);
            return parsed.dependencies || {};
        } catch {
            return {};
        }
    }

    /**
     * Format dependency list for display
     */
    static formatDependencyList(deps: Record<string, string>): string {
        return Object.entries(deps)
            .map(([name, version]) => `${name}@${version}`)
            .join(', ');
    }
}