Copy stdlib-js source map during JPS build

This commit is contained in:
Alexey Andreev
2017-07-07 12:57:35 +03:00
parent 0ce6bac7eb
commit 7edb352aeb
3 changed files with 21 additions and 11 deletions
@@ -30,16 +30,16 @@ object JsLibraryUtils {
private val META_INF_RESOURCES = "${LibraryUtils.META_INF}resources/"
@JvmStatic fun copyJsFilesFromLibraries(libraries: List<String>, outputLibraryJsPath: String) {
@JvmStatic fun copyJsFilesFromLibraries(libraries: List<String>, outputLibraryJsPath: String, copySourceMap: Boolean = false) {
for (library in libraries) {
val file = File(library)
assert(file.exists()) { "Library $library not found" }
if (file.isDirectory) {
copyJsFilesFromDirectory(file, outputLibraryJsPath)
copyJsFilesFromDirectory(file, outputLibraryJsPath, copySourceMap)
}
else {
copyJsFilesFromZip(file, outputLibraryJsPath)
copyJsFilesFromZip(file, outputLibraryJsPath, copySourceMap)
}
}
}
@@ -68,10 +68,8 @@ object JsLibraryUtils {
}
}
private fun copyJsFilesFromDirectory(dir: File, outputLibraryJsPath: String) {
traverseDirectory(dir) { (content, path) ->
FileUtil.writeToFile(File(outputLibraryJsPath, path), content)
}
private fun copyJsFilesFromDirectory(dir: File, outputLibraryJsPath: String, copySourceMap: Boolean) {
traverseDirectory(dir) { copyLibrary(outputLibraryJsPath, it, copySourceMap) }
}
private fun File.contentIfExists(): String? = if (exists()) readText() else null
@@ -99,9 +97,16 @@ object JsLibraryUtils {
}
}
private fun copyJsFilesFromZip(file: File, outputLibraryJsPath: String) {
traverseArchive(file) { library ->
FileUtil.writeToFile(File(outputLibraryJsPath, library.path), library.content)
private fun copyJsFilesFromZip(file: File, outputLibraryJsPath: String, copySourceMap: Boolean) {
traverseArchive(file) { copyLibrary(outputLibraryJsPath, it, copySourceMap) }
}
private fun copyLibrary(outputPath: String, library: JsLibrary, copySourceMap: Boolean) {
val targetFile = File(outputPath, library.path)
targetFile.parentFile.mkdirs()
targetFile.writeText(library.content)
if (copySourceMap) {
library.sourceMapContent?.let { File(targetFile.parent, targetFile.name + ".map").writeText(it) }
}
}
@@ -305,6 +305,9 @@ class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() {
val sourceMapContent = File(getOutputDir(PROJECT_NAME), "$PROJECT_NAME.js.map").readText()
val expectedPath = "prefix-dir/pkg/test1.kt"
assertTrue("Source map file should contain relative path ($expectedPath)", sourceMapContent.contains("\"$expectedPath\""))
val librarySourceMapFile = File(getOutputDir(PROJECT_NAME), "lib/kotlin.js.map")
assertTrue("Source map for stdlib should be copied to $librarySourceMapFile", librarySourceMapFile.exists())
}
fun testKotlinJavaScriptProjectWithTwoModules() {
@@ -679,11 +679,13 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
val representativeTarget = chunk.representativeTarget()
val outputDir = KotlinBuilderModuleScriptGenerator.getOutputDirSafe(representativeTarget)
val compilerSettings = JpsKotlinCompilerSettings.getCompilerSettings(representativeTarget.module)
val k2jsCompilerSettings = JpsKotlinCompilerSettings.getK2JsCompilerArguments(representativeTarget.module)
if (compilerSettings.copyJsLibraryFiles) {
val outputLibraryRuntimeDirectory = File(outputDir, compilerSettings.outputDirectoryForJsLibraryFiles).absolutePath
val libraryFilesToCopy = arrayListOf<String>()
JpsJsModuleUtils.getLibraryFiles(representativeTarget, libraryFilesToCopy)
JsLibraryUtils.copyJsFilesFromLibraries(libraryFilesToCopy, outputLibraryRuntimeDirectory)
JsLibraryUtils.copyJsFilesFromLibraries(libraryFilesToCopy, outputLibraryRuntimeDirectory,
copySourceMap = k2jsCompilerSettings.sourceMap)
}
}