@@ -9,27 +9,37 @@ import org.gradle.api.Project
99import org.gradle.kotlin.dsl.*
1010import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsEnvSpec
1111import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
12- import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockMismatchReport
13- import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnPlugin
14- import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnRootEnvSpec
12+ import org.jetbrains.kotlin.gradle.targets.js.npm.BaseNpmExtension
13+ import org.jetbrains.kotlin.gradle.targets.js.npm.LockFileMismatchReport
14+ import org.jetbrains.kotlin.gradle.targets.wasm.nodejs.WasmNodeJsEnvSpec
15+ import org.jetbrains.kotlin.gradle.targets.wasm.nodejs.WasmNodeJsRootPlugin
16+ import org.jetbrains.kotlin.gradle.targets.web.nodejs.BaseNodeJsEnvSpec
17+ import org.jetbrains.kotlin.gradle.targets.web.nodejs.CommonNodeJsRootPlugin
18+ import org.jetbrains.kotlin.gradle.targets.web.npm.CommonNpmResolverPlugin
1519import util.other.optionalProperty
1620import util.other.spacePassword
1721import util.other.useProxyRepositories
1822import java.io.File
1923
20- fun Project.configureNpm () {
21- val kotlinMasterBuild by optionalProperty()
22-
23- val executeNpmLogin by tasks.registering {
24+ private inline fun <
25+ reified Plugin : CommonNodeJsRootPlugin ,
26+ reified Spec : BaseNodeJsEnvSpec
27+ > Project.registerExecuteNpmLoginTask (
28+ target : String ,
29+ npmInstallTaskName : String ,
30+ useProxy : Boolean ,
31+ ) {
32+ val capitalizedTarget = target.replaceFirstChar { it.titlecase() }
33+ val task = tasks.register(" execute${capitalizedTarget} NpmLogin" ) {
2434 if (! useProxyRepositories) {
25- return @registering
35+ return @register
2636 }
2737
2838 val registryUrl = " https://packages.jetbrains.team/npm/p/krpc/build-deps/"
2939
3040 // To prevent leaking of credentials in VCS on dev machine use the build directory config file
31- val buildYarnConfigFile = File (project.rootDir, " build/js /.yarnrc" )
32- val buildNpmConfigFile = File (project.rootDir, " build/js /.npmrc" )
41+ val buildYarnConfigFile = File (project.rootDir, " build/$target /.yarnrc" )
42+ val buildNpmConfigFile = File (project.rootDir, " build/$target /.npmrc" )
3343
3444 val spacePassword: String? = spacePassword
3545
@@ -64,35 +74,46 @@ fun Project.configureNpm() {
6474 outputs.file(buildNpmConfigFile).withPropertyName(" buildOutputNpmFile" )
6575 }
6676
67- val useProxy = useProxyRepositories
68-
69- plugins.withType(NodeJsRootPlugin ::class .java).configureEach {
70- rootProject.extensions.configure<NodeJsEnvSpec > {
77+ plugins.withType<Plugin >().configureEach {
78+ rootProject.extensions.configure<Spec > {
7179 download = true
80+
7281 if (useProxy) {
7382 downloadBaseUrl = " https://packages.jetbrains.team/files/p/krpc/build-deps/"
7483 }
7584 }
7685
77- tasks.named(" kotlinNpmInstall " ).configure {
78- dependsOn(executeNpmLogin )
86+ tasks.named(npmInstallTaskName ).configure {
87+ dependsOn(task )
7988 }
8089 }
90+ }
91+
92+ fun Project.configureNpm () {
93+ val kotlinMasterBuild by optionalProperty()
94+ val useProxy = useProxyRepositories
95+
96+ registerExecuteNpmLoginTask<NodeJsRootPlugin , NodeJsEnvSpec >(
97+ target = " js" ,
98+ npmInstallTaskName = " kotlinNpmInstall" ,
99+ useProxy = useProxy,
100+ )
101+
102+ registerExecuteNpmLoginTask<WasmNodeJsRootPlugin , WasmNodeJsEnvSpec >(
103+ target = " wasm" ,
104+ npmInstallTaskName = " kotlinWasmNpmInstall" ,
105+ useProxy = useProxy,
106+ )
81107
82108 // necessary for CI js tests
83- rootProject.plugins.withType<YarnPlugin > {
84- rootProject.extensions.configure<YarnRootEnvSpec > {
109+ rootProject.plugins.withType<CommonNpmResolverPlugin > {
110+ rootProject.extensions.configure<BaseNpmExtension > {
85111 ignoreScripts = false
86- download = true
87112
88- yarnLockMismatchReport = if (useProxy && ! kotlinMasterBuild) {
89- YarnLockMismatchReport .FAIL
113+ packageLockMismatchReport = if (useProxy && ! kotlinMasterBuild) {
114+ LockFileMismatchReport .FAIL
90115 } else {
91- YarnLockMismatchReport .WARNING
92- }
93-
94- if (useProxy) {
95- downloadBaseUrl = " https://packages.jetbrains.team/files/p/krpc/build-deps/"
116+ LockFileMismatchReport .WARNING
96117 }
97118 }
98119 }
0 commit comments