Skip to content

Commit

Permalink
fix: Fix the function for restricting to direct dependencies
Browse files Browse the repository at this point in the history
Add and improve documentation. Unfortunately, the
read-installed-packages module returns undocumented attributes with
unclear names. This has now been documented and improved locally.
  • Loading branch information
RSeidelsohn committed Apr 11, 2023
1 parent cb0e96a commit 47904c3
Showing 1 changed file with 20 additions and 12 deletions.
32 changes: 20 additions & 12 deletions lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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];
}
});
};
Expand Down Expand Up @@ -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({
Expand Down

0 comments on commit 47904c3

Please sign in to comment.