From 923ecaf6b9f7ee058faa9324467619b37be66ff7 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Sun, 29 Sep 2019 11:21:20 +0300 Subject: [PATCH] Fix js quoted strings for Windows --- .../kotlin/gradle/targets/js/Strings.kt | 13 +++++++++++++ .../targets/js/testing/karma/KotlinKarma.kt | 5 +++-- .../targets/js/webpack/KotlinWebpackConfig.kt | 16 ++++++---------- 3 files changed, 22 insertions(+), 12 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/Strings.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/Strings.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/Strings.kt new file mode 100644 index 00000000000..c47349a4cc5 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/Strings.kt @@ -0,0 +1,13 @@ +/* + * Copyright 2010-2019 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 + +import com.google.gson.stream.JsonWriter +import java.io.StringWriter + +fun String.jsQuoted(): String = StringWriter().also { + JsonWriter(it).value(this) +}.toString() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt index 1a5974fff0e..2919e20099b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.gradle.targets.js.NpmPackageVersion import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency import org.jetbrains.kotlin.gradle.targets.js.appendConfigsFromDir import org.jetbrains.kotlin.gradle.targets.js.internal.parseNodeJsStackTraceAsJvm +import org.jetbrains.kotlin.gradle.targets.js.jsQuoted import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.targets.js.testing.* @@ -238,10 +239,10 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF val adapterJs = npmProject.dir.resolve("adapter.js") adapterJs.printWriter().use { writer -> val karmaRunner = npmProject.require("kotlin-test-js-runner/kotlin-test-karma-runner.js") - writer.println("require('$karmaRunner')") + writer.println("require(${karmaRunner.jsQuoted()})") files.forEach { file -> - writer.println("require('$file')") + writer.println("require(${file.jsQuoted()})") } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt index 868d854b854..e3588a8183c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt @@ -8,10 +8,10 @@ package org.jetbrains.kotlin.gradle.targets.js.webpack import com.google.gson.GsonBuilder -import com.google.gson.stream.JsonWriter import org.jetbrains.kotlin.gradle.targets.js.NpmPackageVersion import org.jetbrains.kotlin.gradle.targets.js.NpmVersions import org.jetbrains.kotlin.gradle.targets.js.appendConfigsFromDir +import org.jetbrains.kotlin.gradle.targets.js.jsQuoted import java.io.File import java.io.Serializable import java.io.StringWriter @@ -127,7 +127,7 @@ data class KotlinWebpackConfig( private fun Appendable.appendEvaluatedFileReport() { if (reportEvaluatedConfigFile == null) return - val filePath = jsQuotedString(reportEvaluatedConfigFile.canonicalPath) + val filePath = reportEvaluatedConfigFile.canonicalPath.jsQuoted() //language=JavaScript 1.8 appendln( @@ -210,10 +210,10 @@ data class KotlinWebpackConfig( """ // entry if (!config.entry) config.entry = []; - config.entry.push(${jsQuotedString(entry.canonicalPath)}); + config.entry.push(${entry.canonicalPath.jsQuoted()}); config.output = { - path: ${jsQuotedString(outputPath.canonicalPath)}, - filename: ${jsQuotedString(outputFileName!!)} + path: ${outputPath.canonicalPath.jsQuoted()}, + filename: ${outputFileName!!.jsQuoted()} }; """.trimIndent() @@ -232,7 +232,7 @@ data class KotlinWebpackConfig( const handler = (percentage, message, ...args) => { let msg = Math.trunc(percentage * 100) + '% ' + message + ' ' + args.join(' '); ${if (progressReporterPathFilter == null) "" else """ - msg = msg.replace(new RegExp(${jsQuotedString(progressReporterPathFilter)}, 'g'), ''); + msg = msg.replace(new RegExp(${progressReporterPathFilter.jsQuoted()}, 'g'), ''); """.trimIndent()}; console.log(msg); }; @@ -247,8 +247,4 @@ data class KotlinWebpackConfig( private fun json(obj: Any) = StringWriter().also { GsonBuilder().setPrettyPrinting().create().toJson(obj, it) }.toString() - - private fun jsQuotedString(str: String) = StringWriter().also { - JsonWriter(it).value(str) - }.toString() } \ No newline at end of file