[JS IR] add a flag which prepends a custom prefix to the per-module .js files
This commit is contained in:
committed by
TeamCityServer
parent
7bd9462ffb
commit
6e40c814c8
+3
@@ -157,6 +157,9 @@ class K2JSCompilerArguments : CommonCompilerArguments() {
|
|||||||
@Argument(value = "-Xir-per-module", description = "Splits generated .js per-module")
|
@Argument(value = "-Xir-per-module", description = "Splits generated .js per-module")
|
||||||
var irPerModule: Boolean by FreezableVar(false)
|
var irPerModule: Boolean by FreezableVar(false)
|
||||||
|
|
||||||
|
@Argument(value = "-Xir-per-module-prefix", description = "Adds a custom prefix to the splitted js files")
|
||||||
|
var irPerModulePrefix: String? by NullableStringFreezableVar(null)
|
||||||
|
|
||||||
@Argument(
|
@Argument(
|
||||||
value = "-Xinclude",
|
value = "-Xinclude",
|
||||||
valueDescription = "<path>",
|
valueDescription = "<path>",
|
||||||
|
|||||||
@@ -274,6 +274,7 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
|
|||||||
relativeRequirePath = true,
|
relativeRequirePath = true,
|
||||||
propertyLazyInitialization = arguments.irPropertyLazyInitialization,
|
propertyLazyInitialization = arguments.irPropertyLazyInitialization,
|
||||||
legacyPropertyAccess = arguments.irLegacyPropertyAccess,
|
legacyPropertyAccess = arguments.irLegacyPropertyAccess,
|
||||||
|
irPerModulePrefix = arguments.irPerModulePrefix
|
||||||
)
|
)
|
||||||
|
|
||||||
val jsCode = if (arguments.irDce && !arguments.irDceDriven) compiledModule.dceJsCode!! else compiledModule.jsCode!!
|
val jsCode = if (arguments.irDce && !arguments.irDceDriven) compiledModule.dceJsCode!! else compiledModule.jsCode!!
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ fun compile(
|
|||||||
relativeRequirePath: Boolean = false,
|
relativeRequirePath: Boolean = false,
|
||||||
propertyLazyInitialization: Boolean,
|
propertyLazyInitialization: Boolean,
|
||||||
legacyPropertyAccess: Boolean = false,
|
legacyPropertyAccess: Boolean = false,
|
||||||
|
irPerModulePrefix: String? = null,
|
||||||
): CompilerResult {
|
): CompilerResult {
|
||||||
val (moduleFragment: IrModuleFragment, dependencyModules, irBuiltIns, symbolTable, deserializer, moduleToName) =
|
val (moduleFragment: IrModuleFragment, dependencyModules, irBuiltIns, symbolTable, deserializer, moduleToName) =
|
||||||
loadIr(project, mainModule, analyzer, configuration, allDependencies, friendDependencies, irFactory)
|
loadIr(project, mainModule, analyzer, configuration, allDependencies, friendDependencies, irFactory)
|
||||||
@@ -111,6 +112,7 @@ fun compile(
|
|||||||
multiModule = multiModule,
|
multiModule = multiModule,
|
||||||
relativeRequirePath = relativeRequirePath,
|
relativeRequirePath = relativeRequirePath,
|
||||||
moduleToName = moduleToName,
|
moduleToName = moduleToName,
|
||||||
|
irPerModulePrefix = irPerModulePrefix,
|
||||||
)
|
)
|
||||||
return transformer.generateModule(allModules)
|
return transformer.generateModule(allModules)
|
||||||
} else {
|
} else {
|
||||||
@@ -123,6 +125,7 @@ fun compile(
|
|||||||
multiModule = multiModule,
|
multiModule = multiModule,
|
||||||
relativeRequirePath = relativeRequirePath,
|
relativeRequirePath = relativeRequirePath,
|
||||||
moduleToName = moduleToName,
|
moduleToName = moduleToName,
|
||||||
|
irPerModulePrefix = irPerModulePrefix,
|
||||||
)
|
)
|
||||||
return transformer.generateModule(allModules)
|
return transformer.generateModule(allModules)
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-3
@@ -32,7 +32,8 @@ class IrModuleToJsTransformer(
|
|||||||
private val dceJs: Boolean = false,
|
private val dceJs: Boolean = false,
|
||||||
private val multiModule: Boolean = false,
|
private val multiModule: Boolean = false,
|
||||||
private val relativeRequirePath: Boolean = false,
|
private val relativeRequirePath: Boolean = false,
|
||||||
private val moduleToName: Map<IrModuleFragment, String> = emptyMap()
|
private val moduleToName: Map<IrModuleFragment, String> = emptyMap(),
|
||||||
|
private val irPerModulePrefix: String? = null,
|
||||||
) {
|
) {
|
||||||
private val generateRegionComments = backendContext.configuration.getBoolean(JSConfigurationKeys.GENERATE_REGION_COMMENTS)
|
private val generateRegionComments = backendContext.configuration.getBoolean(JSConfigurationKeys.GENERATE_REGION_COMMENTS)
|
||||||
|
|
||||||
@@ -92,7 +93,7 @@ class IrModuleToJsTransformer(
|
|||||||
)
|
)
|
||||||
|
|
||||||
val dependencies = others.mapIndexed { index, module ->
|
val dependencies = others.mapIndexed { index, module ->
|
||||||
val moduleName = moduleToName[module] ?: sanitizeName(module.safeName)
|
val moduleName = module.externalModuleName()
|
||||||
|
|
||||||
val exportedDeclarations = ExportModelGenerator(backendContext).let { module.files.flatMap { file -> it.generateExport(file) } }
|
val exportedDeclarations = ExportModelGenerator(backendContext).let { module.files.flatMap { file -> it.generateExport(file) } }
|
||||||
|
|
||||||
@@ -191,6 +192,10 @@ class IrModuleToJsTransformer(
|
|||||||
return program.toString()
|
return program.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun IrModuleFragment.externalModuleName(): String {
|
||||||
|
return (irPerModulePrefix ?: "") + (moduleToName[this] ?: sanitizeName(safeName))
|
||||||
|
}
|
||||||
|
|
||||||
private fun generateCrossModuleImports(
|
private fun generateCrossModuleImports(
|
||||||
namerWithImports: IrNamerWithImports,
|
namerWithImports: IrNamerWithImports,
|
||||||
currentModules: Iterable<IrModuleFragment>,
|
currentModules: Iterable<IrModuleFragment>,
|
||||||
@@ -207,7 +212,7 @@ class IrModuleToJsTransformer(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val moduleName = declareFreshGlobal(module.safeName)
|
val moduleName = declareFreshGlobal(module.safeName)
|
||||||
modules += JsImportedModule(moduleToName[module] ?: moduleName.ident, moduleName, moduleName.makeRef(), relativeRequirePath)
|
modules += JsImportedModule(module.externalModuleName(), moduleName, moduleName.makeRef(), relativeRequirePath)
|
||||||
|
|
||||||
names.forEach {
|
names.forEach {
|
||||||
imports += JsVars(JsVars.JsVar(JsName(it), JsNameRef(it, JsNameRef("\$crossModule\$", moduleName.makeRef()))))
|
imports += JsVars(JsVars.JsVar(JsName(it), JsNameRef(it, JsNameRef("\$crossModule\$", moduleName.makeRef()))))
|
||||||
|
|||||||
Reference in New Issue
Block a user