From daa7ded9b08b32bff63a91e59ac068f77ab16aad Mon Sep 17 00:00:00 2001 From: Frank Viernau Date: Wed, 6 Nov 2024 15:05:54 +0100 Subject: [PATCH 1/5] refactor(node): Move the `logger` variable to the top Make more clear that all functions could make use of it. Signed-off-by: Frank Viernau --- .../package-managers/node/src/main/kotlin/utils/NpmSupport.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/package-managers/node/src/main/kotlin/utils/NpmSupport.kt b/plugins/package-managers/node/src/main/kotlin/utils/NpmSupport.kt index 1f3766e3ff386..e3c4e43c13637 100644 --- a/plugins/package-managers/node/src/main/kotlin/utils/NpmSupport.kt +++ b/plugins/package-managers/node/src/main/kotlin/utils/NpmSupport.kt @@ -45,6 +45,8 @@ import org.ossreviewtoolkit.utils.spdx.SpdxConstants internal const val NON_EXISTING_SEMVER = "0.0.0" +private val logger = loggerOf(MethodHandles.lookup().lookupClass()) + /** * Expand an NPM shortcut [url] to a regular URL as used for dependencies, see * https://docs.npmjs.com/cli/v7/configuring-npm/package-json#urls-as-dependencies. @@ -247,8 +249,6 @@ internal fun parsePackage( return module } -private val logger = loggerOf(MethodHandles.lookup().lookupClass()) - internal fun parseProject(packageJsonFile: File, analysisRoot: File, managerName: String): Project { logger.debug { "Parsing project info from '$packageJsonFile'." } From 90a150a09c1e4d4e7bfee880cca4f5c83e6c870c Mon Sep 17 00:00:00 2001 From: Frank Viernau Date: Wed, 6 Nov 2024 15:07:28 +0100 Subject: [PATCH 2/5] chore(npm): Add a missing import This is a fix-up for 31592d4. Signed-off-by: Frank Viernau --- plugins/package-managers/node/src/main/kotlin/npm/Npm.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/package-managers/node/src/main/kotlin/npm/Npm.kt b/plugins/package-managers/node/src/main/kotlin/npm/Npm.kt index 6a5d30173c6b6..16b805f5066d6 100644 --- a/plugins/package-managers/node/src/main/kotlin/npm/Npm.kt +++ b/plugins/package-managers/node/src/main/kotlin/npm/Npm.kt @@ -30,6 +30,7 @@ import org.ossreviewtoolkit.model.config.AnalyzerConfiguration import org.ossreviewtoolkit.model.config.PackageManagerConfiguration import org.ossreviewtoolkit.model.config.RepositoryConfiguration import org.ossreviewtoolkit.plugins.packagemanagers.node.PackageJson +import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackageJson import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NodePackageManager import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NpmDetection import org.ossreviewtoolkit.plugins.packagemanagers.node.yarn.Yarn @@ -95,7 +96,7 @@ class Npm( return runCatching { val process = run(workingDir, "info", "--json", packageName) - org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackageJson(process.stdout) + parsePackageJson(process.stdout) }.onFailure { e -> logger.warn { "Error getting details for $packageName in directory $workingDir: ${e.message.orEmpty()}" } }.onSuccess { From bbd34ee2daaffe64be67b1ece36a7035f68cf082 Mon Sep 17 00:00:00 2001 From: Frank Viernau Date: Wed, 6 Nov 2024 15:15:25 +0100 Subject: [PATCH 3/5] test(node): Re-align test class name and location This is a fix-up for 743fd64. Signed-off-by: Frank Viernau --- .../YarnDependencyHandlerTest.kt} | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) rename plugins/package-managers/node/src/test/kotlin/{utils/NpmDependencyHandlerTest.kt => yarn/YarnDependencyHandlerTest.kt} (93%) diff --git a/plugins/package-managers/node/src/test/kotlin/utils/NpmDependencyHandlerTest.kt b/plugins/package-managers/node/src/test/kotlin/yarn/YarnDependencyHandlerTest.kt similarity index 93% rename from plugins/package-managers/node/src/test/kotlin/utils/NpmDependencyHandlerTest.kt rename to plugins/package-managers/node/src/test/kotlin/yarn/YarnDependencyHandlerTest.kt index cc13e2aa85a49..b5d85cc5fba23 100644 --- a/plugins/package-managers/node/src/test/kotlin/utils/NpmDependencyHandlerTest.kt +++ b/plugins/package-managers/node/src/test/kotlin/yarn/YarnDependencyHandlerTest.kt @@ -17,7 +17,7 @@ * License-Filename: LICENSE */ -package org.ossreviewtoolkit.plugins.packagemanagers.node.utils +package org.ossreviewtoolkit.plugins.packagemanagers.node.yarn import io.kotest.core.spec.style.StringSpec import io.kotest.matchers.collections.containExactly @@ -32,11 +32,9 @@ import org.ossreviewtoolkit.model.PackageLinkage import org.ossreviewtoolkit.model.config.AnalyzerConfiguration import org.ossreviewtoolkit.model.config.RepositoryConfiguration import org.ossreviewtoolkit.plugins.packagemanagers.node.npm.Npm -import org.ossreviewtoolkit.plugins.packagemanagers.node.yarn.NpmModuleInfo -import org.ossreviewtoolkit.plugins.packagemanagers.node.yarn.YarnDependencyHandler import org.ossreviewtoolkit.utils.test.USER_DIR -class NpmDependencyHandlerTest : StringSpec({ +class YarnDependencyHandlerTest : StringSpec({ "identifierFor extracts the correct identifier" { val id = createIdentifier("foo") val module = createModuleInfo(id) From 1a691fc5515fdd694123240808a75359da0eaf8f Mon Sep 17 00:00:00 2001 From: Frank Viernau Date: Wed, 6 Nov 2024 15:18:26 +0100 Subject: [PATCH 4/5] refactor(node)!: Move all files from `utils` one level up As each package manager has its own dedicated directory, use the root package as the location for common code. Signed-off-by: Frank Viernau --- .../src/main/kotlin/{utils => }/NpmDetection.kt | 2 +- .../node/src/main/kotlin/{utils => }/NpmSupport.kt | 4 +--- .../node/src/main/kotlin/npm/Npm.kt | 4 ++-- .../node/src/main/kotlin/pnpm/Pnpm.kt | 6 +++--- .../src/main/kotlin/pnpm/PnpmDependencyHandler.kt | 2 +- .../node/src/main/kotlin/yarn/Yarn.kt | 8 ++++---- .../src/main/kotlin/yarn/YarnDependencyHandler.kt | 2 +- .../node/src/main/kotlin/yarn2/Yarn2.kt | 14 +++++++------- .../test/kotlin/{utils => }/NpmDetectionTest.kt | 10 +++++----- .../src/test/kotlin/{utils => }/NpmSupportTest.kt | 3 +-- 10 files changed, 26 insertions(+), 29 deletions(-) rename plugins/package-managers/node/src/main/kotlin/{utils => }/NpmDetection.kt (99%) rename plugins/package-managers/node/src/main/kotlin/{utils => }/NpmSupport.kt (98%) rename plugins/package-managers/node/src/test/kotlin/{utils => }/NpmDetectionTest.kt (96%) rename plugins/package-managers/node/src/test/kotlin/{utils => }/NpmSupportTest.kt (97%) diff --git a/plugins/package-managers/node/src/main/kotlin/utils/NpmDetection.kt b/plugins/package-managers/node/src/main/kotlin/NpmDetection.kt similarity index 99% rename from plugins/package-managers/node/src/main/kotlin/utils/NpmDetection.kt rename to plugins/package-managers/node/src/main/kotlin/NpmDetection.kt index d3fd8776675d1..4c2bfb51c464c 100644 --- a/plugins/package-managers/node/src/main/kotlin/utils/NpmDetection.kt +++ b/plugins/package-managers/node/src/main/kotlin/NpmDetection.kt @@ -17,7 +17,7 @@ * License-Filename: LICENSE */ -package org.ossreviewtoolkit.plugins.packagemanagers.node.utils +package org.ossreviewtoolkit.plugins.packagemanagers.node import java.io.File import java.nio.file.FileSystems diff --git a/plugins/package-managers/node/src/main/kotlin/utils/NpmSupport.kt b/plugins/package-managers/node/src/main/kotlin/NpmSupport.kt similarity index 98% rename from plugins/package-managers/node/src/main/kotlin/utils/NpmSupport.kt rename to plugins/package-managers/node/src/main/kotlin/NpmSupport.kt index e3c4e43c13637..074576d16c85c 100644 --- a/plugins/package-managers/node/src/main/kotlin/utils/NpmSupport.kt +++ b/plugins/package-managers/node/src/main/kotlin/NpmSupport.kt @@ -17,7 +17,7 @@ * License-Filename: LICENSE */ -package org.ossreviewtoolkit.plugins.packagemanagers.node.utils +package org.ossreviewtoolkit.plugins.packagemanagers.node import java.io.File import java.lang.invoke.MethodHandles @@ -37,8 +37,6 @@ import org.ossreviewtoolkit.model.Project import org.ossreviewtoolkit.model.RemoteArtifact import org.ossreviewtoolkit.model.VcsInfo import org.ossreviewtoolkit.model.VcsType -import org.ossreviewtoolkit.plugins.packagemanagers.node.PackageJson -import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackageJson import org.ossreviewtoolkit.utils.common.realFile import org.ossreviewtoolkit.utils.common.toUri import org.ossreviewtoolkit.utils.spdx.SpdxConstants diff --git a/plugins/package-managers/node/src/main/kotlin/npm/Npm.kt b/plugins/package-managers/node/src/main/kotlin/npm/Npm.kt index 16b805f5066d6..3c24b7bed216b 100644 --- a/plugins/package-managers/node/src/main/kotlin/npm/Npm.kt +++ b/plugins/package-managers/node/src/main/kotlin/npm/Npm.kt @@ -29,10 +29,10 @@ import org.ossreviewtoolkit.analyzer.AbstractPackageManagerFactory import org.ossreviewtoolkit.model.config.AnalyzerConfiguration import org.ossreviewtoolkit.model.config.PackageManagerConfiguration import org.ossreviewtoolkit.model.config.RepositoryConfiguration +import org.ossreviewtoolkit.plugins.packagemanagers.node.NodePackageManager +import org.ossreviewtoolkit.plugins.packagemanagers.node.NpmDetection import org.ossreviewtoolkit.plugins.packagemanagers.node.PackageJson import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackageJson -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NodePackageManager -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NpmDetection import org.ossreviewtoolkit.plugins.packagemanagers.node.yarn.Yarn import org.ossreviewtoolkit.utils.common.Os import org.ossreviewtoolkit.utils.common.ProcessCapture diff --git a/plugins/package-managers/node/src/main/kotlin/pnpm/Pnpm.kt b/plugins/package-managers/node/src/main/kotlin/pnpm/Pnpm.kt index 90a3a88109c98..f62ae55eb2624 100644 --- a/plugins/package-managers/node/src/main/kotlin/pnpm/Pnpm.kt +++ b/plugins/package-managers/node/src/main/kotlin/pnpm/Pnpm.kt @@ -31,11 +31,11 @@ import org.ossreviewtoolkit.model.ProjectAnalyzerResult import org.ossreviewtoolkit.model.config.AnalyzerConfiguration import org.ossreviewtoolkit.model.config.RepositoryConfiguration import org.ossreviewtoolkit.model.utils.DependencyGraphBuilder +import org.ossreviewtoolkit.plugins.packagemanagers.node.NodePackageManager +import org.ossreviewtoolkit.plugins.packagemanagers.node.NpmDetection import org.ossreviewtoolkit.plugins.packagemanagers.node.PackageJson import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackageJson -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NodePackageManager -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NpmDetection -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.parseProject +import org.ossreviewtoolkit.plugins.packagemanagers.node.parseProject import org.ossreviewtoolkit.utils.common.CommandLineTool import org.ossreviewtoolkit.utils.common.Os import org.ossreviewtoolkit.utils.common.stashDirectories diff --git a/plugins/package-managers/node/src/main/kotlin/pnpm/PnpmDependencyHandler.kt b/plugins/package-managers/node/src/main/kotlin/pnpm/PnpmDependencyHandler.kt index a3b0f29fa12d3..edeff23ef7562 100644 --- a/plugins/package-managers/node/src/main/kotlin/pnpm/PnpmDependencyHandler.kt +++ b/plugins/package-managers/node/src/main/kotlin/pnpm/PnpmDependencyHandler.kt @@ -27,9 +27,9 @@ import org.ossreviewtoolkit.model.Package import org.ossreviewtoolkit.model.PackageLinkage import org.ossreviewtoolkit.model.utils.DependencyHandler import org.ossreviewtoolkit.plugins.packagemanagers.node.PackageJson +import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackage import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackageJson import org.ossreviewtoolkit.plugins.packagemanagers.node.pnpm.ModuleInfo.Dependency -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.parsePackage import org.ossreviewtoolkit.utils.common.realFile internal class PnpmDependencyHandler(private val pnpm: Pnpm) : DependencyHandler { diff --git a/plugins/package-managers/node/src/main/kotlin/yarn/Yarn.kt b/plugins/package-managers/node/src/main/kotlin/yarn/Yarn.kt index bd1be49ff8e1f..d2c990ff8891f 100644 --- a/plugins/package-managers/node/src/main/kotlin/yarn/Yarn.kt +++ b/plugins/package-managers/node/src/main/kotlin/yarn/Yarn.kt @@ -50,13 +50,13 @@ import org.ossreviewtoolkit.model.config.RepositoryConfiguration import org.ossreviewtoolkit.model.createAndLogIssue import org.ossreviewtoolkit.model.readTree import org.ossreviewtoolkit.model.utils.DependencyGraphBuilder +import org.ossreviewtoolkit.plugins.packagemanagers.node.NodePackageManager +import org.ossreviewtoolkit.plugins.packagemanagers.node.NpmDetection import org.ossreviewtoolkit.plugins.packagemanagers.node.PackageJson import org.ossreviewtoolkit.plugins.packagemanagers.node.npm.groupLines import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackageJson -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NodePackageManager -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NpmDetection -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.parseProject -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.splitNpmNamespaceAndName +import org.ossreviewtoolkit.plugins.packagemanagers.node.parseProject +import org.ossreviewtoolkit.plugins.packagemanagers.node.splitNpmNamespaceAndName import org.ossreviewtoolkit.utils.common.CommandLineTool import org.ossreviewtoolkit.utils.common.DiskCache import org.ossreviewtoolkit.utils.common.Os diff --git a/plugins/package-managers/node/src/main/kotlin/yarn/YarnDependencyHandler.kt b/plugins/package-managers/node/src/main/kotlin/yarn/YarnDependencyHandler.kt index b40409e274876..0ecc3962e22da 100644 --- a/plugins/package-managers/node/src/main/kotlin/yarn/YarnDependencyHandler.kt +++ b/plugins/package-managers/node/src/main/kotlin/yarn/YarnDependencyHandler.kt @@ -27,7 +27,7 @@ import org.ossreviewtoolkit.model.Package import org.ossreviewtoolkit.model.PackageLinkage import org.ossreviewtoolkit.model.Project import org.ossreviewtoolkit.model.utils.DependencyHandler -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.parsePackage +import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackage /** * A data class storing information about a specific NPM module and its dependencies. diff --git a/plugins/package-managers/node/src/main/kotlin/yarn2/Yarn2.kt b/plugins/package-managers/node/src/main/kotlin/yarn2/Yarn2.kt index 067cf0e9a6f35..8ce2afd47a9d5 100644 --- a/plugins/package-managers/node/src/main/kotlin/yarn2/Yarn2.kt +++ b/plugins/package-managers/node/src/main/kotlin/yarn2/Yarn2.kt @@ -53,16 +53,16 @@ import org.ossreviewtoolkit.model.config.RepositoryConfiguration import org.ossreviewtoolkit.model.createAndLogIssue import org.ossreviewtoolkit.model.utils.DependencyGraphBuilder import org.ossreviewtoolkit.model.utils.DependencyHandler +import org.ossreviewtoolkit.plugins.packagemanagers.node.NodePackageManager +import org.ossreviewtoolkit.plugins.packagemanagers.node.NpmDetection import org.ossreviewtoolkit.plugins.packagemanagers.node.PackageJson +import org.ossreviewtoolkit.plugins.packagemanagers.node.fixNpmDownloadUrl +import org.ossreviewtoolkit.plugins.packagemanagers.node.mapNpmLicenses +import org.ossreviewtoolkit.plugins.packagemanagers.node.parseNpmAuthor +import org.ossreviewtoolkit.plugins.packagemanagers.node.parseNpmVcsInfo import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackageJson import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackageJsons -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NodePackageManager -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NpmDetection -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.fixNpmDownloadUrl -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.mapNpmLicenses -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.parseNpmAuthor -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.parseNpmVcsInfo -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.splitNpmNamespaceAndName +import org.ossreviewtoolkit.plugins.packagemanagers.node.splitNpmNamespaceAndName import org.ossreviewtoolkit.utils.common.CommandLineTool import org.ossreviewtoolkit.utils.common.Os import org.ossreviewtoolkit.utils.ort.runBlocking diff --git a/plugins/package-managers/node/src/test/kotlin/utils/NpmDetectionTest.kt b/plugins/package-managers/node/src/test/kotlin/NpmDetectionTest.kt similarity index 96% rename from plugins/package-managers/node/src/test/kotlin/utils/NpmDetectionTest.kt rename to plugins/package-managers/node/src/test/kotlin/NpmDetectionTest.kt index 5a5da244be844..c9c9a82f4f73e 100644 --- a/plugins/package-managers/node/src/test/kotlin/utils/NpmDetectionTest.kt +++ b/plugins/package-managers/node/src/test/kotlin/NpmDetectionTest.kt @@ -17,7 +17,7 @@ * License-Filename: LICENSE */ -package org.ossreviewtoolkit.plugins.packagemanagers.node.utils +package org.ossreviewtoolkit.plugins.packagemanagers.node import io.kotest.core.spec.style.WordSpec import io.kotest.engine.spec.tempdir @@ -30,10 +30,10 @@ import io.kotest.matchers.should import io.kotest.matchers.shouldBe import org.ossreviewtoolkit.analyzer.PackageManager -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NodePackageManager.NPM -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NodePackageManager.PNPM -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NodePackageManager.YARN -import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NodePackageManager.YARN2 +import org.ossreviewtoolkit.plugins.packagemanagers.node.NodePackageManager.NPM +import org.ossreviewtoolkit.plugins.packagemanagers.node.NodePackageManager.PNPM +import org.ossreviewtoolkit.plugins.packagemanagers.node.NodePackageManager.YARN +import org.ossreviewtoolkit.plugins.packagemanagers.node.NodePackageManager.YARN2 import org.ossreviewtoolkit.utils.common.withoutPrefix import org.ossreviewtoolkit.utils.test.getAssetFile diff --git a/plugins/package-managers/node/src/test/kotlin/utils/NpmSupportTest.kt b/plugins/package-managers/node/src/test/kotlin/NpmSupportTest.kt similarity index 97% rename from plugins/package-managers/node/src/test/kotlin/utils/NpmSupportTest.kt rename to plugins/package-managers/node/src/test/kotlin/NpmSupportTest.kt index 51d0ffc91153b..8d9e33ff7f998 100644 --- a/plugins/package-managers/node/src/test/kotlin/utils/NpmSupportTest.kt +++ b/plugins/package-managers/node/src/test/kotlin/NpmSupportTest.kt @@ -17,7 +17,7 @@ * License-Filename: LICENSE */ -package org.ossreviewtoolkit.plugins.packagemanagers.node.utils +package org.ossreviewtoolkit.plugins.packagemanagers.node import io.kotest.core.spec.style.WordSpec import io.kotest.inspectors.forAll @@ -25,7 +25,6 @@ import io.kotest.matchers.shouldBe import org.ossreviewtoolkit.model.VcsInfo import org.ossreviewtoolkit.model.VcsType -import org.ossreviewtoolkit.plugins.packagemanagers.node.PackageJson import org.ossreviewtoolkit.plugins.packagemanagers.node.PackageJson.Author import org.ossreviewtoolkit.plugins.packagemanagers.node.PackageJson.Repository From 9c93b99e9b0aa00e2f54e4a3586eaa2a8481736b Mon Sep 17 00:00:00 2001 From: Frank Viernau Date: Wed, 6 Nov 2024 15:22:45 +0100 Subject: [PATCH 5/5] refactor(node)!: Limit visibility of `NpmDetection` code to `internal` There is no need to expose this. Signed-off-by: Frank Viernau --- plugins/package-managers/node/src/main/kotlin/NpmDetection.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/package-managers/node/src/main/kotlin/NpmDetection.kt b/plugins/package-managers/node/src/main/kotlin/NpmDetection.kt index 4c2bfb51c464c..e07a1d6e5f763 100644 --- a/plugins/package-managers/node/src/main/kotlin/NpmDetection.kt +++ b/plugins/package-managers/node/src/main/kotlin/NpmDetection.kt @@ -31,7 +31,7 @@ import org.ossreviewtoolkit.utils.common.collectMessages /** * A class to detect the package managers used for the give [definitionFiles]. */ -class NpmDetection(private val definitionFiles: Collection) { +internal class NpmDetection(private val definitionFiles: Collection) { /** * A map of project directories to the set of package managers that are most likely responsible for the project. If * the set is empty, none of the package managers is responsible. @@ -110,7 +110,7 @@ class NpmDetection(private val definitionFiles: Collection) { /** * An enum of all supported Node package managers. */ -enum class NodePackageManager( +internal enum class NodePackageManager( val lockfileName: String, val markerFileName: String? = null, val workspaceFileName: String = NodePackageManager.DEFINITION_FILE