[Gradle, JS] Correct require relative path
This commit is contained in:
+1
-1
@@ -253,7 +253,7 @@ class IrModuleToJsTransformer(
|
||||
}
|
||||
|
||||
val moduleName = declareFreshGlobal(module.safeName)
|
||||
modules += JsImportedModule(module.externalModuleName(), moduleName, null, relativeRequirePath)
|
||||
modules += JsImportedModule(module.externalModuleName(), moduleName, null, null)
|
||||
|
||||
names.forEach {
|
||||
imports += JsVars(JsVars.JsVar(JsName(it, false), JsNameRef(it, ReservedJsNames.makeCrossModuleNameRef(moduleName))))
|
||||
|
||||
+24
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.ir.backend.js.transformers.irToJs
|
||||
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.toJsIdentifier
|
||||
import org.jetbrains.kotlin.js.backend.ast.*
|
||||
import java.io.File
|
||||
|
||||
class JsIrProgramFragment(val packageFqn: String) {
|
||||
val nameBindings = mutableMapOf<String, JsName>()
|
||||
@@ -128,7 +129,14 @@ private class JsIrModuleCrossModuleReferecenceBuilder(val header: JsIrModuleHead
|
||||
fun import(moduleHeader: JsIrModuleHeader): JsName {
|
||||
return importedModules.getOrPut(moduleHeader) {
|
||||
val jsModuleName = JsName(moduleHeader.moduleName, false)
|
||||
JsImportedModule(moduleHeader.externalModuleName, jsModuleName, null, relativeRequirePath)
|
||||
val relativeRequirePath = relativeRequirePath(moduleHeader)
|
||||
|
||||
JsImportedModule(
|
||||
moduleHeader.externalModuleName,
|
||||
jsModuleName,
|
||||
null,
|
||||
relativeRequirePath
|
||||
)
|
||||
}.internalName
|
||||
}
|
||||
|
||||
@@ -149,6 +157,21 @@ private class JsIrModuleCrossModuleReferecenceBuilder(val header: JsIrModuleHead
|
||||
}
|
||||
return CrossModuleReferences(importedModules.values.toList(), transitiveExport, exportNames, resultImports)
|
||||
}
|
||||
|
||||
private fun relativeRequirePath(moduleHeader: JsIrModuleHeader): String? {
|
||||
if (!this.relativeRequirePath) return null
|
||||
|
||||
val parentMain = File(header.externalModuleName).parentFile
|
||||
|
||||
if (parentMain == null) return "./${moduleHeader.externalModuleName}"
|
||||
|
||||
val relativePath = File(moduleHeader.externalModuleName)
|
||||
.toRelativeString(parentMain)
|
||||
.replace(File.separator, "/")
|
||||
|
||||
return relativePath.takeIf { it.startsWith("../") }
|
||||
?: "./$relativePath"
|
||||
}
|
||||
}
|
||||
|
||||
class CrossModuleImport(val exportedAs: String, val moduleExporter: JsName)
|
||||
|
||||
@@ -21,12 +21,12 @@ class JsImportedModule @JvmOverloads constructor(
|
||||
val externalName: String,
|
||||
var internalName: JsName,
|
||||
val plainReference: JsExpression?,
|
||||
val relativeRequirePath: Boolean = false
|
||||
val relativeRequirePath: String? = null
|
||||
) {
|
||||
val key = JsImportedModuleKey(externalName, plainReference?.toString())
|
||||
}
|
||||
|
||||
val JsImportedModule.requireName: String
|
||||
get() = if (relativeRequirePath) "./$externalName.js" else externalName
|
||||
get() = relativeRequirePath?.let { "$it.js" } ?: externalName
|
||||
|
||||
data class JsImportedModuleKey(val baseName: String, val plainName: String?)
|
||||
Reference in New Issue
Block a user