From 47904c351f9a6679183d4c066e482dc3fe9346e1 Mon Sep 17 00:00:00 2001 From: Roman Seidelsohn Date: Tue, 11 Apr 2023 22:01:21 +0200 Subject: [PATCH] fix: Fix the function for restricting to direct dependencies Add and improve documentation. Unfortunately, the read-installed-packages module returns undocumented attributes with unclear names. This has now been documented and improved locally. --- lib/index.js | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/lib/index.js b/lib/index.js index dcd676b..a0e01e2 100644 --- a/lib/index.js +++ b/lib/index.js @@ -371,24 +371,28 @@ const recursivelyCollectAllDependencies = (options) => { * the json result. */ // TODO: Add tests for this function -const deleteNonDirectDependencies = (json, options) => { - const allDependencies = Object.keys(json.dependencies); - let wantedDependencies = []; +const deleteNonDirectDependenciesFromAllDependencies = ( + { _dependencies: directDependencies, dependencies: allDependencies, devDependencies }, + options, +) => { + const allDependenciesArray = Object.keys(allDependencies); + const directDependenciesArray = Object.keys(directDependencies); + const devDependenciesArray = Object.keys(devDependencies); + let wantedDependenciesArray = []; if (options.production && !options.development) { - const devDependencies = Object.keys(json.devDependencies); - wantedDependencies = Object.keys(json.dependencies).filter( - (directDependency) => !devDependencies.includes(directDependency), + wantedDependenciesArray = directDependenciesArray.filter( + (directDependency) => !devDependenciesArray.includes(directDependency), ); } else if (!options.production && options.development) { - wantedDependencies = Object.keys(json.devDependencies); + wantedDependenciesArray = devDependenciesArray; } else { - wantedDependencies = Object.keys(json.dependencies); + wantedDependenciesArray = directDependenciesArray; } - allDependencies.forEach((currentDependency) => { - if (!wantedDependencies.includes(currentDependency)) { - delete json.dependencies[currentDependency]; + allDependenciesArray.forEach((currentDependency) => { + if (!wantedDependenciesArray.includes(currentDependency)) { + delete allDependencies[currentDependency]; } }); }; @@ -446,8 +450,12 @@ exports.init = function init(args, callback) { } readInstalledPackages(args.start, optionsForReadingInstalledPackages, (err, json) => { + // Good to know: + // The json object returned by readInstalledPackages stores all direct (prod and dev) dependencies from + // the package.json file in the property '_dependencies'. The property 'dependencies' contains all dependencies, + // including the ones that are only required by other dependencies. if (optionsForReadingInstalledPackages.depth === 0) { - deleteNonDirectDependencies(json, args); + deleteNonDirectDependenciesFromAllDependencies(json, args); } const data = recursivelyCollectAllDependencies({