Copy stdlib-js source map during JPS build
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user