@@ -9,27 +9,37 @@ import org.gradle.api.Project
9
9
import org.gradle.kotlin.dsl.*
10
10
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsEnvSpec
11
11
import 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
15
19
import util.other.optionalProperty
16
20
import util.other.spacePassword
17
21
import util.other.useProxyRepositories
18
22
import java.io.File
19
23
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" ) {
24
34
if (! useProxyRepositories) {
25
- return @registering
35
+ return @register
26
36
}
27
37
28
38
val registryUrl = " https://packages.jetbrains.team/npm/p/krpc/build-deps/"
29
39
30
40
// 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" )
33
43
34
44
val spacePassword: String? = spacePassword
35
45
@@ -64,35 +74,46 @@ fun Project.configureNpm() {
64
74
outputs.file(buildNpmConfigFile).withPropertyName(" buildOutputNpmFile" )
65
75
}
66
76
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 > {
71
79
download = true
80
+
72
81
if (useProxy) {
73
82
downloadBaseUrl = " https://packages.jetbrains.team/files/p/krpc/build-deps/"
74
83
}
75
84
}
76
85
77
- tasks.named(" kotlinNpmInstall " ).configure {
78
- dependsOn(executeNpmLogin )
86
+ tasks.named(npmInstallTaskName ).configure {
87
+ dependsOn(task )
79
88
}
80
89
}
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
+ )
81
107
82
108
// 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 > {
85
111
ignoreScripts = false
86
- download = true
87
112
88
- yarnLockMismatchReport = if (useProxy && ! kotlinMasterBuild) {
89
- YarnLockMismatchReport .FAIL
113
+ packageLockMismatchReport = if (useProxy && ! kotlinMasterBuild) {
114
+ LockFileMismatchReport .FAIL
90
115
} else {
91
- YarnLockMismatchReport .WARNING
92
- }
93
-
94
- if (useProxy) {
95
- downloadBaseUrl = " https://packages.jetbrains.team/files/p/krpc/build-deps/"
116
+ LockFileMismatchReport .WARNING
96
117
}
97
118
}
98
119
}
0 commit comments