From d02a212c462d7d1691351bad288ce99d3b4283a6 Mon Sep 17 00:00:00 2001 From: ghe Date: Tue, 25 Aug 2020 16:15:23 +0100 Subject: [PATCH] feat: simplify multi scan check with a function --- src/cli/commands/monitor/index.ts | 3 ++- src/cli/commands/test/index.ts | 4 ++-- src/lib/is-multi-project-scan.ts | 7 +++++++ src/lib/options-validator.ts | 3 ++- src/lib/reachable-vulns.ts | 4 ++-- src/lib/snyk-test/index.js | 4 ++-- 6 files changed, 17 insertions(+), 8 deletions(-) create mode 100644 src/lib/is-multi-project-scan.ts diff --git a/src/cli/commands/monitor/index.ts b/src/cli/commands/monitor/index.ts index 6d19f692c0a..00e2bd29b41 100644 --- a/src/cli/commands/monitor/index.ts +++ b/src/cli/commands/monitor/index.ts @@ -43,6 +43,7 @@ import { execShell, } from '../../../lib/monitor/dev-count-analysis'; import { FailedToRunTestError, MonitorError } from '../../../lib/errors'; +import { isMultiProjectScan } from '../../../lib/is-multi-project-scan'; const SEPARATOR = '\n-------------------------------------------------------\n'; const debug = Debug('snyk'); @@ -120,7 +121,7 @@ async function monitor(...args0: MethodArgs): Promise { validateMonitorPath(path, options.docker); let analysisType = 'all'; let packageManager; - if (options.allProjects || options.yarnWorkspaces) { + if (isMultiProjectScan(options)) { analysisType = 'all'; } else if (options.docker) { analysisType = 'docker'; diff --git a/src/cli/commands/test/index.ts b/src/cli/commands/test/index.ts index 695d0ba6713..64bf945a51a 100644 --- a/src/cli/commands/test/index.ts +++ b/src/cli/commands/test/index.ts @@ -50,6 +50,7 @@ import * as utils from './utils'; import { getIacDisplayedOutput } from './iac-output'; import { getEcosystem, testEcosystem } from '../../../lib/ecosystems'; import { TestLimitReachedError } from '../../../lib/errors'; +import { isMultiProjectScan } from '../../../lib/is-multi-project-scan'; const debug = Debug('snyk-test'); const SEPARATOR = '\n-------------------------------------------------------\n'; @@ -449,8 +450,7 @@ function displayResult( } const advertiseAllProjectsCount = projectType !== 'gradle' && - !options.allProjects && - !options.yarnWorkspaces && + !isMultiProjectScan(options) && foundProjectCount; if (advertiseAllProjectsCount) { multiProjAdvice = chalk.bold.white( diff --git a/src/lib/is-multi-project-scan.ts b/src/lib/is-multi-project-scan.ts new file mode 100644 index 00000000000..faf528b05e3 --- /dev/null +++ b/src/lib/is-multi-project-scan.ts @@ -0,0 +1,7 @@ +import { Options, TestOptions, MonitorOptions, PolicyOptions } from './types'; + +export function isMultiProjectScan( + options: Partial, +): boolean { + return !!(options.allProjects || options.yarnWorkspaces); +} diff --git a/src/lib/options-validator.ts b/src/lib/options-validator.ts index 7abd5f9f352..9beb23e11aa 100644 --- a/src/lib/options-validator.ts +++ b/src/lib/options-validator.ts @@ -2,6 +2,7 @@ import { MonitorOptions, Options, TestOptions } from './types'; import * as config from './config'; import { SupportedPackageManagers } from './package-managers'; import * as reachableVulns from './reachable-vulns'; +import { isMultiProjectScan } from './is-multi-project-scan'; export async function validateOptions( options: (Options & TestOptions) | (Options & MonitorOptions), @@ -9,7 +10,7 @@ export async function validateOptions( ): Promise { if (options.reachableVulns) { // Throwing error only in case when both packageManager and allProjects not defined - if (!packageManager && !options.allProjects && !options.yarnWorkspaces) { + if (!packageManager && !isMultiProjectScan(options)) { throw new Error('Could not determine package manager'); } const org = options.org || config.org; diff --git a/src/lib/reachable-vulns.ts b/src/lib/reachable-vulns.ts index 8c734b96837..258c64d5905 100644 --- a/src/lib/reachable-vulns.ts +++ b/src/lib/reachable-vulns.ts @@ -12,6 +12,7 @@ import { UnsupportedFeatureFlagError, } from './errors'; import { MonitorOptions, Options, TestOptions } from './types'; +import { isMultiProjectScan } from './is-multi-project-scan'; const featureFlag = 'reachableVulns'; @@ -36,8 +37,7 @@ export async function validatePayload( ): Promise { if ( packageManager && - !options.allProjects && - !options.yarnWorkspaces && + !isMultiProjectScan(options) && !REACHABLE_VULNS_SUPPORTED_PACKAGE_MANAGERS.includes(packageManager) ) { throw new FeatureNotSupportedByPackageManagerError( diff --git a/src/lib/snyk-test/index.js b/src/lib/snyk-test/index.js index d7e0b52f63f..307211de816 100644 --- a/src/lib/snyk-test/index.js +++ b/src/lib/snyk-test/index.js @@ -9,6 +9,7 @@ const { UnsupportedPackageManagerError, NotSupportedIacFileError, } = require('../errors'); +const { isMultiProjectScan } = require('../is-multi-project-scan'); async function test(root, options, callback) { if (typeof options === 'function') { @@ -69,8 +70,7 @@ function validateProjectType(options, projectType) { if ( !( options.docker || - options.allProjects || - options.yarnWorkspaces || + isMultiProjectScan(options) || pm.SUPPORTED_PACKAGE_MANAGER_NAME[projectType] ) ) {