Skip to content

Commit 8b37669

Browse files
committed
[Wasm] Use invariant paths for static paths
1 parent d0ab888 commit 8b37669

File tree

2 files changed

+38
-9
lines changed

2 files changed

+38
-9
lines changed

libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/WebpackConfigurator.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,12 +185,12 @@ class WebpackConfigurator(private val subTarget: KotlinJsIrSubTarget) : SubTarge
185185
)
186186
)
187187
).apply {
188-
static(distDirectory.asFile.normalize().relativeOrAbsolute(dir.asFile))
189-
static(resourcesDir.normalize().relativeOrAbsolute(dir.asFile))
188+
static(distDirectory.asFile.normalize().relativeTo(dir.asFile).invariantSeparatorsPath)
189+
static(resourcesDir.normalize().relativeTo(dir.asFile).invariantSeparatorsPath)
190190

191191
if (mode == KotlinJsBinaryMode.DEVELOPMENT) {
192192
static(
193-
rootDir.normalize().relativeOrAbsolute(dir.asFile)
193+
rootDir.normalize().relativeTo(dir.asFile).invariantSeparatorsPath
194194
)
195195
}
196196
}

libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77

88
package org.jetbrains.kotlin.gradle.targets.js.webpack
99

10-
import com.google.gson.GsonBuilder
10+
import com.google.gson.*
11+
import com.google.gson.annotations.JsonAdapter
1112
import com.google.gson.annotations.SerializedName
1213
import org.gradle.api.provider.Provider
1314
import org.jetbrains.kotlin.gradle.targets.js.NpmVersions
@@ -17,10 +18,10 @@ import org.jetbrains.kotlin.gradle.targets.js.dsl.WebpackRulesDsl
1718
import org.jetbrains.kotlin.gradle.targets.js.internal.appendConfigsFromDir
1819
import org.jetbrains.kotlin.gradle.targets.js.internal.jsQuoted
1920
import org.jetbrains.kotlin.gradle.utils.appendLine
20-
import org.jetbrains.kotlin.gradle.utils.relativeOrAbsolute
2121
import java.io.File
2222
import java.io.Serializable
2323
import java.io.StringWriter
24+
import java.lang.reflect.Type
2425

2526
/**
2627
* Configuration options used to generate [webpack](https://webpack.js.org/)
@@ -64,10 +65,10 @@ data class KotlinWebpackConfig(
6465
) : WebpackRulesDsl {
6566

6667
val entryInput: String?
67-
get() = npmProjectDir?.get()?.let { npmProjectDir -> entry?.relativeOrAbsolute(npmProjectDir) }
68+
get() = npmProjectDir?.get()?.let { npmProjectDir -> entry?.relativeTo(npmProjectDir)?.invariantSeparatorsPath }
6869

6970
val outputPathInput: String?
70-
get() = npmProjectDir?.get()?.let { npmProjectDir -> outputPath?.relativeOrAbsolute(npmProjectDir) }
71+
get() = npmProjectDir?.get()?.let { npmProjectDir -> outputPath?.relativeTo(npmProjectDir)?.invariantSeparatorsPath }
7172

7273
fun getRequiredDependencies(versions: NpmVersions) =
7374
mutableSetOf<RequiredKotlinJsDependency>().also {
@@ -148,10 +149,28 @@ data class KotlinWebpackConfig(
148149
val changeOrigin: Boolean? = null,
149150
) : Serializable
150151

152+
@JsonAdapter(Static.StaticSerializer::class)
151153
data class Static(
152154
val directory: String,
153155
val watch: Boolean = false,
154-
)
156+
) {
157+
internal object StaticSerializer : JsonSerializer<Static> {
158+
override fun serialize(
159+
src: Static,
160+
typeOfSrc: Type,
161+
context: JsonSerializationContext,
162+
): JsonElement {
163+
val obj = JsonObject()
164+
obj.addProperty(
165+
"directory",
166+
src.directory.quoteRawJs()
167+
)
168+
obj.addProperty("watch", src.watch)
169+
return obj
170+
}
171+
}
172+
173+
}
155174
}
156175

157176
@Suppress("unused")
@@ -235,7 +254,7 @@ data class KotlinWebpackConfig(
235254
if (devServer != null) {
236255

237256
appendLine("// dev server")
238-
appendLine("config.devServer = ${json(devServer!!)};")
257+
appendLine("config.devServer = ${json(devServer!!).unquoteRawJs()};")
239258
appendLine()
240259
}
241260

@@ -376,3 +395,13 @@ data class KotlinWebpackConfig(
376395
GsonBuilder().setPrettyPrinting().create().toJson(obj, it)
377396
}.toString()
378397
}
398+
399+
internal fun String.quoteRawJs(): String {
400+
return "__RAW_JS__($this)__"
401+
}
402+
403+
private fun String.unquoteRawJs(): String {
404+
return replace("\"__RAW_JS__\\((.*?)\\)__\"".toRegex()) { match ->
405+
"require('path').resolve(__dirname, \"" + match.groupValues[1] + "\")"
406+
}
407+
}

0 commit comments

Comments
 (0)