[JS IR] add a flag which prepends a custom prefix to the per-module .js files

This commit is contained in:
Anton Bannykh
2020-09-30 16:58:32 +03:00
committed by TeamCityServer
parent 7bd9462ffb
commit 6e40c814c8
4 changed files with 15 additions and 3 deletions
@@ -157,6 +157,9 @@ class K2JSCompilerArguments : CommonCompilerArguments() {
@Argument(value = "-Xir-per-module", description = "Splits generated .js per-module")
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(
value = "-Xinclude",
valueDescription = "<path>",
@@ -274,6 +274,7 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
relativeRequirePath = true,
propertyLazyInitialization = arguments.irPropertyLazyInitialization,
legacyPropertyAccess = arguments.irLegacyPropertyAccess,
irPerModulePrefix = arguments.irPerModulePrefix
)
val jsCode = if (arguments.irDce && !arguments.irDceDriven) compiledModule.dceJsCode!! else compiledModule.jsCode!!
@@ -53,6 +53,7 @@ fun compile(
relativeRequirePath: Boolean = false,
propertyLazyInitialization: Boolean,
legacyPropertyAccess: Boolean = false,
irPerModulePrefix: String? = null,
): CompilerResult {
val (moduleFragment: IrModuleFragment, dependencyModules, irBuiltIns, symbolTable, deserializer, moduleToName) =
loadIr(project, mainModule, analyzer, configuration, allDependencies, friendDependencies, irFactory)
@@ -111,6 +112,7 @@ fun compile(
multiModule = multiModule,
relativeRequirePath = relativeRequirePath,
moduleToName = moduleToName,
irPerModulePrefix = irPerModulePrefix,
)
return transformer.generateModule(allModules)
} else {
@@ -123,6 +125,7 @@ fun compile(
multiModule = multiModule,
relativeRequirePath = relativeRequirePath,
moduleToName = moduleToName,
irPerModulePrefix = irPerModulePrefix,
)
return transformer.generateModule(allModules)
}
@@ -32,7 +32,8 @@ class IrModuleToJsTransformer(
private val dceJs: Boolean = false,
private val multiModule: 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)
@@ -92,7 +93,7 @@ class IrModuleToJsTransformer(
)
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) } }
@@ -191,6 +192,10 @@ class IrModuleToJsTransformer(
return program.toString()
}
private fun IrModuleFragment.externalModuleName(): String {
return (irPerModulePrefix ?: "") + (moduleToName[this] ?: sanitizeName(safeName))
}
private fun generateCrossModuleImports(
namerWithImports: IrNamerWithImports,
currentModules: Iterable<IrModuleFragment>,
@@ -207,7 +212,7 @@ class IrModuleToJsTransformer(
}
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 {
imports += JsVars(JsVars.JsVar(JsName(it), JsNameRef(it, JsNameRef("\$crossModule\$", moduleName.makeRef()))))