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