UNPKG

@ts-dev-tools/core

Version:
55 lines (54 loc) 3.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DuplicateDependenciesService = void 0; const PackageJson_1 = require("./PackageJson"); const PluginService_1 = require("./PluginService"); class DuplicateDependenciesService { constructor() { } static executeDeduplication(absoluteProjectDir) { console.info(`Checking for duplicate dev dependencies...`); const duplicateDependencies = new Map(); DuplicateDependenciesService.getProjectDuplicateDependencies(absoluteProjectDir, duplicateDependencies); DuplicateDependenciesService.printDuplicatedDependencies(duplicateDependencies); console.info(`Check for duplicate dev dependencies done!`); } static getProjectDuplicateDependencies(absoluteProjectDir, duplicateDependencies) { const installedPlugins = PluginService_1.PluginService.getInstalledPlugins(absoluteProjectDir); const projectPackageJson = PackageJson_1.PackageJson.fromDirPath(absoluteProjectDir); const projectDevDependencies = projectPackageJson.getDevDependenciesPackageNames(); for (const plugin of installedPlugins) { DuplicateDependenciesService.getPluginDuplicateDependencies(plugin, projectDevDependencies, duplicateDependencies); } return duplicateDependencies; } static getPluginDuplicateDependencies(plugin, projectDevDependencies, duplicateDependencies) { // First check for duplicate of inherited plugins DuplicateDependenciesService.getProjectDuplicateDependencies(plugin.path, duplicateDependencies); const pluginPackageJson = PackageJson_1.PackageJson.fromDirPath(plugin.path); const pluginDependencies = pluginPackageJson.getDependenciesPackageNames(); let pluginDuplicateDependencies = duplicateDependencies.get(plugin.fullname); if (!pluginDuplicateDependencies) { pluginDuplicateDependencies = new Set(); duplicateDependencies.set(plugin.fullname, pluginDuplicateDependencies); } for (const projectDevDependency of projectDevDependencies) { if (pluginDependencies.includes(projectDevDependency)) { pluginDuplicateDependencies.add(projectDevDependency); } } } static printDuplicatedDependencies(duplicateDependencies) { let hasDuplicates = false; duplicateDependencies.forEach((pluginDuplicateDependencies, plugin) => { if (pluginDuplicateDependencies.size) { const pluginDuplicateDependenciesValue = Array.from(pluginDuplicateDependencies); hasDuplicates = true; console.info(`Some dev dependencies are unnecessarily installed as their are already required by "${plugin}":\n - ${pluginDuplicateDependenciesValue.join("\n - ")}\n`); } }); if (!hasDuplicates) { console.info(`No duplicate dev dependencies found.`); } } } exports.DuplicateDependenciesService = DuplicateDependenciesService;