@ts-dev-tools/core
Version:
TS dev tools Core
55 lines (54 loc) • 3.05 kB
JavaScript
;
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;