diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/TasksRequirements.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/TasksRequirements.kt index 83367097f07..7339324692e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/TasksRequirements.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/TasksRequirements.kt @@ -5,20 +5,22 @@ package org.jetbrains.kotlin.gradle.targets.js.nodejs -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency +import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependencyDeclaration import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies +import org.jetbrains.kotlin.gradle.targets.js.npm.toDeclaration class TasksRequirements { + @Transient private val _byTask = mutableMapOf>() - private val byCompilation = mutableMapOf>() + private val byCompilation = mutableMapOf>() val byTask: Map> get() = _byTask - fun getCompilationNpmRequirements(compilation: KotlinJsCompilation): Set = - byCompilation[compilation] + internal fun getCompilationNpmRequirements(compilationName: String): Set = + byCompilation[compilationName] ?: setOf() fun addTaskRequirements(task: RequiresNpmDependencies) { @@ -32,11 +34,11 @@ class TasksRequirements { .filterIsInstance() .toMutableSet() - val compilation = task.compilation + val compilation = task.compilation.name if (compilation in byCompilation) { - byCompilation[compilation]!!.addAll(requiredNpmDependencies) + byCompilation[compilation]!!.addAll(requiredNpmDependencies.map { it.toDeclaration() }) } else { - byCompilation[compilation] = requiredNpmDependencies + byCompilation[compilation] = requiredNpmDependencies.map { it.toDeclaration() }.toMutableSet() } } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependencyDeclaration.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependencyDeclaration.kt new file mode 100644 index 00000000000..f01d90edc15 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependencyDeclaration.kt @@ -0,0 +1,27 @@ +/* + * Copyright 2010-2020 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.gradle.api.tasks.Input + +data class NpmDependencyDeclaration( + @Input + val scope: NpmDependency.Scope, + @Input + val name: String, + @Input + val version: String, + @Input + val generateExternals: Boolean +) + +internal fun NpmDependency.toDeclaration(): NpmDependencyDeclaration = + NpmDependencyDeclaration( + scope = this.scope, + name = this.name, + version = this.version, + generateExternals = this.generateExternals + ) \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJson.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJson.kt index 757784b23fe..5807b96f2b8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJson.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJson.kt @@ -124,11 +124,11 @@ fun fromSrcPackageJson(packageJson: File?): PackageJson? = Gson().fromJson(it, PackageJson::class.java) } -fun packageJson( +internal fun packageJson( name: String, version: String, main: String, - npmDependencies: Collection + npmDependencies: Collection ): PackageJson { val packageJson = PackageJson( @@ -141,17 +141,17 @@ fun packageJson( val dependencies = mutableMapOf() npmDependencies.forEach { - val module = it.key + val module = it.name dependencies[module] = chooseVersion(module, dependencies[module], it.version) } npmDependencies.forEach { - val dependency = dependencies.getValue(it.key) + val dependency = dependencies.getValue(it.name) when (it.scope) { - NpmDependency.Scope.NORMAL -> packageJson.dependencies[it.key] = dependency - NpmDependency.Scope.DEV -> packageJson.devDependencies[it.key] = dependency - NpmDependency.Scope.OPTIONAL -> packageJson.optionalDependencies[it.key] = dependency - NpmDependency.Scope.PEER -> packageJson.peerDependencies[it.key] = dependency + NpmDependency.Scope.NORMAL -> packageJson.dependencies[it.name] = dependency + NpmDependency.Scope.DEV -> packageJson.devDependencies[it.name] = dependency + NpmDependency.Scope.OPTIONAL -> packageJson.optionalDependencies[it.name] = dependency + NpmDependency.Scope.PEER -> packageJson.peerDependencies[it.name] = dependency } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt index 5ad8535bfe1..c568f79e504 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt @@ -11,7 +11,6 @@ import org.gradle.api.tasks.Nested import org.gradle.api.tasks.OutputFile import org.gradle.api.tasks.TaskAction import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation -import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject.Companion.PACKAGE_JSON import org.jetbrains.kotlin.gradle.utils.disableTaskOnConfigurationCacheBuild import org.jetbrains.kotlin.gradle.utils.property @@ -43,19 +42,17 @@ constructor( }.customFields @get:Nested - internal val externalDependencies: Collection + internal val externalDependencies: Collection get() = compilationResolution.externalNpmDependencies .map { - NestedNpmDependency( + NpmDependencyDeclaration( scope = it.scope, name = it.name, - version = it.version + version = it.version, + generateExternals = it.generateExternals ) } - private val realExternalDependencies: Collection - get() = compilationResolution.externalNpmDependencies - private val publicPackageJsonTaskName = npmProject.publicPackageJsonTaskName @get:OutputFile @@ -101,13 +98,4 @@ constructor( companion object { const val NAME = "publicPackageJson" } -} - -internal data class NestedNpmDependency( - @Input - val scope: NpmDependency.Scope, - @Input - val name: String, - @Input - val version: String -) \ No newline at end of file +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/KotlinCompilationNpmResolution.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/KotlinCompilationNpmResolution.kt index 430f5883ac1..881aaa72be3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/KotlinCompilationNpmResolution.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/KotlinCompilationNpmResolution.kt @@ -6,10 +6,7 @@ package org.jetbrains.kotlin.gradle.targets.js.npm.resolved import org.gradle.api.Project -import org.jetbrains.kotlin.gradle.targets.js.npm.GradleNodeModule -import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency -import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject -import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson +import org.jetbrains.kotlin.gradle.targets.js.npm.* /** * Resolved [NpmProject] @@ -22,11 +19,23 @@ class KotlinCompilationNpmResolution( val internalDependencies: Collection, val internalCompositeDependencies: Collection, val externalGradleDependencies: Collection, - val externalNpmDependencies: Collection, + private val _externalNpmDependencies: Collection, val packageJson: PackageJson ) { val project get() = _project!! val npmProject get() = _npmProject!! + + val externalNpmDependencies + get() = _externalNpmDependencies + .map { + NpmDependency( + project = project, + name = it.name, + version = it.version, + scope = it.scope, + generateExternals = it.generateExternals + ) + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt index 1121e87b082..dff0a5a262c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt @@ -62,6 +62,8 @@ internal class KotlinCompilationNpmResolver( @Transient val npmProject = compilation.npmProject + val compilationName = compilation.name + val npmName by lazy { npmProject.name } @@ -80,6 +82,10 @@ internal class KotlinCompilationNpmResolver( val nodeJs get() = resolver.nodeJs + val taskRequirements by lazy { + nodeJs.taskRequirements + } + val target get() = compilation.target val project get() = target.project @@ -415,10 +421,10 @@ internal class KotlinCompilationNpmResolver( } .filterNotNull() -// val toolsNpmDependencies = nodeJs.taskRequirements -// .getCompilationNpmRequirements(compilation) + val toolsNpmDependencies = taskRequirements + .getCompilationNpmRequirements(compilationName) - val allNpmDependencies = externalNpmDependencies/* + toolsNpmDependencies*/ + val allNpmDependencies = externalNpmDependencies.map { it.toDeclaration() } + toolsNpmDependencies val packageJson = packageJson( npmName, diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt index 606d69337c1..02d2a638cb4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt @@ -33,6 +33,10 @@ open class KotlinPackageJsonTask : DefaultTask() { @Transient private lateinit var compilation: KotlinJsCompilation + private val compilationName by lazy { + compilation.name + } + @Input val projectPath = project.path @@ -60,8 +64,8 @@ open class KotlinPackageJsonTask : DefaultTask() { @get:Input internal val toolsNpmDependencies: List by lazy { nodeJs.taskRequirements - .getCompilationNpmRequirements(compilation) - .map { it.uniqueRepresentation() } + .getCompilationNpmRequirements(compilationName) + .map { it.toString() } } @get:Nested