From e1bc44308850b612b0f30593eda0ef92cf6e81c7 Mon Sep 17 00:00:00 2001 From: stdavis Date: Fri, 8 Jan 2021 09:34:28 -0700 Subject: [PATCH] feat: add search-sub-deps flag Only search sub deps when flag is passed. Don't ever include dev dependencies of sub-deps. --- __mocks__/package-json.js | 19 +++++++++++++++++-- src/index.js | 8 +++++++- src/packages.js | 21 +++++++++++---------- src/packages.test.js | 12 ++++++++++++ 4 files changed, 47 insertions(+), 13 deletions(-) diff --git a/__mocks__/package-json.js b/__mocks__/package-json.js index 81ba5ae..e2f7125 100644 --- a/__mocks__/package-json.js +++ b/__mocks__/package-json.js @@ -3,6 +3,12 @@ module.exports = (packageName) => { dep1: { repository: { url: 'https://github.com/stdavis/a-good-module' + }, + dependencies: { + subDep: '1.1.1' + }, + devDependencies: { + skip: '0.0.0' } }, dep2: { @@ -12,12 +18,21 @@ module.exports = (packageName) => { }, devDep1: {}, devDep2: { - repository: {} + repository: {}, + dependencies: { + subDep2: '2.2.2' + } }, noRepoUrl: { repository: {} }, - noRepo: {} + noRepo: {}, + subDep: { + repository: {} + }, + subDep2: { + repository: {} + } }; return packages[packageName]; diff --git a/src/index.js b/src/index.js index e93ca63..27c4e0b 100644 --- a/src/index.js +++ b/src/index.js @@ -10,7 +10,7 @@ class GoodSamaritanCommand extends Command { const token = await getToken(flags['reset-token']); - const dependencies = await getCurrentProjectDependencies(); + const dependencies = await getCurrentProjectDependencies(flags['search-sub-deps']); const issues = await getIssues(dependencies, token, flags['labels']); @@ -37,6 +37,12 @@ GoodSamaritanCommand.flags = { Labels are specified as a comma-separated list. For example: "help wanted,good first issue". Only issues that have *all* of the labels will be shown.`, default: 'help wanted' + }), + 'search-sub-deps': flags.boolean({ + char: 's', + description: `[default: false] search sub-dependencies (dependencies of your project's dependencies) +Note: devDependencies of sub-dependencies are not searched.`, + default: false }) }; diff --git a/src/packages.js b/src/packages.js index 5167259..cd52b58 100644 --- a/src/packages.js +++ b/src/packages.js @@ -2,7 +2,7 @@ const readPackage = require('read-pkg'); const packageInfo = require('package-json'); -const getCurrentProjectDependencies = async () => { +const getCurrentProjectDependencies = async (searchSubDeps=false) => { const packageJson = await readPackage(); let dependencies = { @@ -10,14 +10,16 @@ const getCurrentProjectDependencies = async () => { ...packageJson.devDependencies }; - for (let packageName in dependencies) { - const subPackageDependencies = await getDependencies(packageName, dependencies[packageName]); + if (searchSubDeps) { + for (let packageName in dependencies) { + const subPackageDependencies = await getDependencies(packageName, dependencies[packageName]); - dependencies = { - ...subPackageDependencies, - // preference for root-level dependencies - ...dependencies - }; + dependencies = { + ...subPackageDependencies, + // preference for root-level dependencies + ...dependencies + }; + } } return dependencies; @@ -31,8 +33,7 @@ const getDependencies = async (packageName, version) => { }); return { - ...info.dependencies, - ...info.devDependencies + ...info.dependencies }; }; diff --git a/src/packages.test.js b/src/packages.test.js index 9965cbb..011aa1a 100644 --- a/src/packages.test.js +++ b/src/packages.test.js @@ -23,5 +23,17 @@ describe('packages', () => { expect(await getCurrentProjectDependencies()).toEqual(expected); }); + it('searches sub-deps', async () => { + const expected = { + dep1: '^1.0.1', + dep2: '1.0.2', + devDep1: '^5.0.0', + devDep2: '3.0.0', + subDep: '1.1.1', + subDep2: '2.2.2' + }; + + expect(await getCurrentProjectDependencies(true)).toEqual(expected); + }); }); });