diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModuleBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModuleBuilder.kt index dfe4ea959ef..6c0e1f51df7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModuleBuilder.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModuleBuilder.kt @@ -42,9 +42,8 @@ internal class GradleNodeModuleBuilder( fun rebuild(): File? { if (files.isEmpty()) return null - val packageJson = srcPackageJsonFile?.reader()?.use { - Gson().fromJson(it, PackageJson::class.java) - } ?: PackageJson(dependency.moduleName, dependency.moduleVersion) + val packageJson = fromSrcPackageJson(srcPackageJsonFile) + ?: PackageJson(dependency.moduleName, dependency.moduleVersion) val jsFiles = files.filter { it.name.endsWith(".js") } if (jsFiles.size == 1) { @@ -65,6 +64,11 @@ internal class GradleNodeModuleBuilder( } } +internal fun fromSrcPackageJson(packageJson: File?): PackageJson? = + packageJson?.reader()?.use { + Gson().fromJson(it, PackageJson::class.java) + } + private val File.isZip get() = isFile && (name.endsWith(".jar") || name.endsWith(".zip")) diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModuleBuilderTest.kt b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModuleBuilderTest.kt new file mode 100644 index 00000000000..4463d0fb350 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModuleBuilderTest.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle.targets.js.npm + +import org.junit.Test +import java.io.File +import kotlin.test.assertNotNull + +class GradleNodeModuleBuilderTest { + @Test + fun validPackageJsonWithoutDependencies() { + val packageJson = fromSrcPackageJson( + File("src/test/resources/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModuleBuilderTest/package.json") + ) + assertNotNull(packageJson, "package.json should be deserialized") + + with(packageJson!!) { + listOf( + dependencies, + devDependencies, + peerDependencies, + optionalDependencies, + bundledDependencies + ).forEach { + assertNotNull(it, "Dependencies should deserialized correctly without null") + } + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModuleBuilderTest/package.json b/libraries/tools/kotlin-gradle-plugin/src/test/resources/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModuleBuilderTest/package.json new file mode 100644 index 00000000000..266b0c294dc --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModuleBuilderTest/package.json @@ -0,0 +1,4 @@ +{ + "name": "npm", + "version": "1.0.0" +}