diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt index 28dc6297977..891f7553ade 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt @@ -362,7 +362,7 @@ class Kotlin2JsIrGradlePluginIT : AbstractKotlin2JsGradlePluginIT(true) { fun testKotlinJsPackageModuleName(gradleVersion: GradleVersion) { project("kotlin-js-package-module-name", gradleVersion) { build("assemble") { - assertFileInProjectExists("build/${Distribution.JS_DIST}/productionExecutable/kotlin-js-package-module-name.js") + assertFileInProjectExists("build/${Distribution.DIST}/js/productionExecutable/kotlin-js-package-module-name.js") assertFileInProjectExists("build/js/packages/@foo/bar/kotlin/@foo/bar.js") } } @@ -1149,7 +1149,7 @@ abstract class AbstractKotlin2JsGradlePluginIT(protected val irBackend: Boolean) assertDirectoryInProjectExists("build/js/packages/kotlin-js-browser-app") if (irBackend) { - assertFileInProjectExists("app/build/${Distribution.JS_DIST}/productionExecutable/app.js") + assertFileInProjectExists("app/build/${Distribution.DIST}/js/productionExecutable/app.js") } else { assertFileInProjectExists("app/build/distributions/app.js") } @@ -1175,7 +1175,7 @@ abstract class AbstractKotlin2JsGradlePluginIT(protected val irBackend: Boolean) ) if (irBackend) { - assertFileInProjectExists("app/build/${Distribution.JS_DIST}/productionExecutable/index.html") + assertFileInProjectExists("app/build/${Distribution.DIST}/js/productionExecutable/index.html") } else { assertFileInProjectExists("app/build/distributions/index.html") } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJsLibraryGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJsLibraryGradlePluginIT.kt index 890b34f1fad..899bc813c61 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJsLibraryGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJsLibraryGradlePluginIT.kt @@ -9,10 +9,9 @@ import com.google.gson.Gson import com.google.gson.JsonObject import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType -import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution.Companion.JS_DIST +import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution.Companion.DIST import org.jetbrains.kotlin.gradle.testbase.* import org.junit.jupiter.api.DisplayName -import java.util.zip.ZipFile import kotlin.io.path.reader import kotlin.test.assertNotNull @@ -32,10 +31,10 @@ abstract class KotlinJsIrLibraryGradlePluginITBase : KGPBaseTest() { fun testSimpleJsBinaryLibrary(gradleVersion: GradleVersion) { project("simple-js-library", gradleVersion) { build("build") { - assertFileInProjectExists("build/$JS_DIST/productionLibrary/js-library.js") - assertFileInProjectExists("build/$JS_DIST/productionLibrary/package.json") - assertFileInProjectExists("build/$JS_DIST/productionLibrary/main.js") - projectPath.resolve("build/$JS_DIST/productionLibrary/package.json").reader() + assertFileInProjectExists("build/$DIST/js/productionLibrary/js-library.js") + assertFileInProjectExists("build/$DIST/js/productionLibrary/package.json") + assertFileInProjectExists("build/$DIST/js/productionLibrary/main.js") + projectPath.resolve("build/$DIST/js/productionLibrary/package.json").reader() .use { Gson().fromJson(it, JsonObject::class.java) } .getAsJsonObject("dependencies") ?.entrySet()?.associate { (k, v) -> k to v.asString } @@ -52,9 +51,9 @@ abstract class KotlinJsIrLibraryGradlePluginITBase : KGPBaseTest() { fun testJsBinaryLibraryAndExecutable(gradleVersion: GradleVersion) { project("js-library-with-executable", gradleVersion) { build("build") { - assertFileInProjectExists("build/$JS_DIST/productionLibrary/js-library.js") - assertFileInProjectExists("build/$JS_DIST/productionLibrary/package.json") - assertFileInProjectExists("build/$JS_DIST/productionLibrary/main.js") + assertFileInProjectExists("build/$DIST/js/productionLibrary/js-library.js") + assertFileInProjectExists("build/$DIST/js/productionLibrary/package.json") + assertFileInProjectExists("build/$DIST/js/productionLibrary/main.js") } } } @@ -64,11 +63,11 @@ abstract class KotlinJsIrLibraryGradlePluginITBase : KGPBaseTest() { fun testJsBinaryLibraryAndExecutableForBrowserAndNodejs(gradleVersion: GradleVersion) { project("js-library-with-executable-browser-nodejs", gradleVersion) { build("build") { - assertFileInProjectExists("build/$JS_DIST/productionLibrary/js-library.js") - assertFileInProjectExists("build/$JS_DIST/productionLibrary/package.json") - assertFileInProjectExists("build/$JS_DIST/productionLibrary/main.js") + assertFileInProjectExists("build/$DIST/js/productionLibrary/js-library.js") + assertFileInProjectExists("build/$DIST/js/productionLibrary/package.json") + assertFileInProjectExists("build/$DIST/js/productionLibrary/main.js") - assertFileInProjectExists("build/$JS_DIST/productionExecutable/js-library.js") + assertFileInProjectExists("build/$DIST/js/productionExecutable/js-library.js") } } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-library/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-library/build.gradle.kts index 26bf7facb4c..9cac82ba7f3 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-library/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-library/build.gradle.kts @@ -18,7 +18,7 @@ kotlin { sourceSets { main { dependencies { - implementation("org.jetbrains.kotlinx:kotlinx-datetime:latest.release") + implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.3.3") implementation(npm("kotlin", "*")) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/Distribution.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/Distribution.kt index b621ebb4932..e111ddf6ddd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/Distribution.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/Distribution.kt @@ -21,6 +21,6 @@ interface Distribution { val outputDirectory: DirectoryProperty companion object { - const val JS_DIST = "js-dist" + const val DIST = "dist" } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt index 159b6adb920..7d2c299a8d7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt @@ -32,7 +32,7 @@ sealed class JsIrBinary( override val mode: KotlinJsBinaryMode ) : JsBinary { override val distribution: Distribution = - createDefaultDistribution(compilation.target.project, name) + createDefaultDistribution(compilation.target.project, compilation.target.targetName, name) val linkTaskName: String = linkTaskName() @@ -95,6 +95,7 @@ class Executable( override val distribution: Distribution = createDefaultDistribution( compilation.target.project, + compilation.target.targetName, super.distribution.distributionName ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt index d85eb8969be..a8697e0318e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt @@ -114,7 +114,7 @@ constructor( override val compilation: KotlinJsCompilation = jsCompilation override val name: String = name override val mode: KotlinJsBinaryMode = type - override val distribution: Distribution = createDefaultDistribution(jsCompilation.target.project) + override val distribution: Distribution = createDefaultDistribution(jsCompilation.target.project, jsCompilation.target.targetName) } } ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt index 1635f87019d..ad56fc8ed49 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt @@ -78,10 +78,10 @@ abstract class PublicPackageJsonTask : externalDependencies, packageJsonHandlers ).let { packageJson -> - packageJson.main = "${npmProjectName}.js" + packageJson.main = "${npmProjectName.get()}.js" if (jsIrCompilation.get()) { - packageJson.types = "${npmProjectName}.d.ts" + packageJson.types = "${npmProjectName.get()}.d.ts" } packageJson.apply { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolution.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolution.kt index d3c4dfcaae1..18e98ffd4fb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolution.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolution.kt @@ -9,8 +9,8 @@ import org.gradle.api.logging.Logger import org.jetbrains.kotlin.gradle.targets.js.nodejs.TasksRequirements import org.jetbrains.kotlin.gradle.targets.js.npm.* import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.PreparedKotlinCompilationNpmResolution -import java.io.Serializable import java.io.File +import java.io.Serializable class KotlinCompilationNpmResolution( var internalDependencies: Collection, @@ -88,13 +88,15 @@ class KotlinCompilationNpmResolution( ): PreparedKotlinCompilationNpmResolution { val rootResolver = npmResolutionManager.parameters.resolution.get() - internalDependencies.map { - val compilationNpmResolution: KotlinCompilationNpmResolution = rootResolver[it.projectPath][it.compilationName] - compilationNpmResolution.getResolutionOrPrepare( - npmResolutionManager, - logger - ) - } + val internalNpmDependencies = internalDependencies + .map { + val compilationNpmResolution: KotlinCompilationNpmResolution = rootResolver[it.projectPath][it.compilationName] + compilationNpmResolution.getResolutionOrPrepare( + npmResolutionManager, + logger + ) + } + .flatMap { it.externalNpmDependencies } val importedExternalGradleDependencies = externalGradleDependencies.mapNotNull { npmResolutionManager.parameters.gradleNodeModulesProvider.get().get(it.dependencyName, it.dependencyVersion, it.file) } + fileCollectionDependencies.flatMap { dependency -> @@ -109,9 +111,9 @@ class KotlinCompilationNpmResolution( ) } }.filterNotNull() - val transitiveNpmDependencies = importedExternalGradleDependencies.flatMap { + val transitiveNpmDependencies = (importedExternalGradleDependencies.flatMap { it.dependencies - }.filter { it.scope != NpmDependency.Scope.DEV } + } + internalNpmDependencies).filter { it.scope != NpmDependency.Scope.DEV } val toolsNpmDependencies = tasksRequirements .getCompilationNpmRequirements(projectPath, compilationDisambiguatedName) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/DefaultDistribution.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/DefaultDistribution.kt index 790762379db..4d96d5a1f0d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/DefaultDistribution.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/DefaultDistribution.kt @@ -8,17 +8,26 @@ package org.jetbrains.kotlin.gradle.targets.js.subtargets import org.gradle.api.Project import org.gradle.api.file.DirectoryProperty import org.gradle.api.provider.Property +import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.distsDirectory import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution -import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution.Companion.JS_DIST +import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution.Companion.DIST import org.jetbrains.kotlin.gradle.utils.property import java.io.File -internal fun createDefaultDistribution(project: Project, name: String? = null) = - DefaultDistribution(project, project.objects.property(name)) +internal fun createDefaultDistribution( + project: Project, + targetName: String, + name: String? = null +) = + DefaultDistribution(project, project.objects.property(targetName), project.objects.property(name)) -internal fun createDefaultDistribution(project: Project, name: Property?) = - DefaultDistribution(project, project.objects.property().apply { +internal fun createDefaultDistribution( + project: Project, + targetName: String, + name: Property? +) = + DefaultDistribution(project, project.objects.property(targetName), project.objects.property().apply { if (name != null) { value(name) } @@ -26,6 +35,7 @@ internal fun createDefaultDistribution(project: Project, name: Property? class DefaultDistribution( private val project: Project, + private val targetName: Property, override val distributionName: Property, ) : Distribution { @Deprecated("Use `distributionName` instead", ReplaceWith("distributionName")) @@ -43,6 +53,6 @@ class DefaultDistribution( } override val outputDirectory: DirectoryProperty = project.objects.directoryProperty().convention( - distributionName.flatMap { project.layout.buildDirectory.dir("$JS_DIST/$it") }.orElse(project.distsDirectory) + distributionName.flatMap { project.layout.buildDirectory.dir("$DIST/${targetName.get()}/$it") }.orElse(project.distsDirectory) ) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt index b8910e82e7f..b86436429f1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt @@ -48,7 +48,7 @@ abstract class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : private val webpackTaskConfigurations: MutableList> = mutableListOf() private val runTaskConfigurations: MutableList> = mutableListOf() private val dceConfigurations: MutableList> = mutableListOf() - private val distribution: Distribution = createDefaultDistribution(project) + private val distribution: Distribution = createDefaultDistribution(project, target.targetName) override val testTaskDescription: String get() = "Run all ${target.name} tests inside browser using karma and webpack" diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinJsIrLinkConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinJsIrLinkConfig.kt index c37a1b99abe..7801485dfd0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinJsIrLinkConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinJsIrLinkConfig.kt @@ -38,7 +38,7 @@ internal open class KotlinJsIrLinkConfig( task.destinationDirectory.convention( project.layout.buildDirectory .dir(COMPILE_SYNC) - .map { it.dir(if (compilation.platformType == KotlinPlatformType.wasm) "wasm" else "js") } + .map { it.dir(compilation.target.targetName) } .map { it.dir(compilation.name) } .map { it.dir(binary.name) } .map { it.dir(NpmProject.DIST_FOLDER) }