diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt index b2c34ad50e5..126d7ecfc3d 100644 --- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt @@ -114,7 +114,7 @@ class K2JsIrCompiler : CLICompiler() { return K2JSCompilerArguments() } - private data class TransformResult(val out: CompilationOutputs, val dts: String) + private data class TransformResult(val out: CompilationOutputs, val dts: String?) private class Ir2JsTransformer( val arguments: K2JSCompilerArguments, @@ -145,7 +145,7 @@ class K2JsIrCompiler : CLICompiler() { ) } - private fun makeJsCodeGeneratorAndDts(): Pair { + private fun makeJsCodeGeneratorAndDts(): Pair { val ir = lowerIr() val transformer = IrModuleToJsTransformer(ir.context, mainCallArguments, ir.moduleFragmentToUniqueName) @@ -225,6 +225,7 @@ class K2JsIrCompiler : CLICompiler() { configurationJs.put(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME, arguments.renderInternalDiagnosticNames) configurationJs.put(JSConfigurationKeys.PROPERTY_LAZY_INITIALIZATION, arguments.irPropertyLazyInitialization) configurationJs.put(JSConfigurationKeys.GENERATE_POLYFILLS, arguments.generatePolyfills) + configurationJs.put(JSConfigurationKeys.GENERATE_DTS, arguments.generateDts) configurationJs.put(JSConfigurationKeys.GENERATE_INLINE_ANONYMOUS_FUNCTIONS, arguments.irGenerateInlineAnonymousFunctions) if (!checkKotlinPackageUsage(environmentForJS.configuration, sourcesFiles)) return COMPILATION_ERROR @@ -382,7 +383,7 @@ class K2JsIrCompiler : CLICompiler() { outputs.write(outputDir, outputName) - if (arguments.generateDts) { + if (tsDefinitions != null) { val dtsFile = outputDir.resolve("$outputName.d.ts") dtsFile.writeText(tsDefinitions) } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt index a9fb22e78ea..f8845599f27 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.js.sourceMap.SourceMap3Builder import org.jetbrains.kotlin.js.sourceMap.SourceMapBuilderConsumer import org.jetbrains.kotlin.js.util.TextOutputImpl import org.jetbrains.kotlin.serialization.js.ModuleKind +import org.jetbrains.kotlin.utils.addToStdlib.runIf import java.io.ByteArrayOutputStream import java.io.File import java.util.* @@ -99,6 +100,7 @@ class IrModuleToJsTransformer( ) { private val shouldGeneratePolyfills = backendContext.configuration.getBoolean(JSConfigurationKeys.GENERATE_POLYFILLS) private val generateRegionComments = backendContext.configuration.getBoolean(JSConfigurationKeys.GENERATE_REGION_COMMENTS) + private val shouldGenerateTypeScriptDefinitions = backendContext.configuration.getBoolean(JSConfigurationKeys.GENERATE_DTS) private val mainModuleName = backendContext.configuration[CommonConfigurationKeys.MODULE_NAME]!! private val moduleKind = backendContext.configuration[JSConfigurationKeys.MODULE_KIND]!! @@ -142,7 +144,9 @@ class IrModuleToJsTransformer( fun generateModule(modules: Iterable, modes: Set, relativeRequirePath: Boolean): CompilerResult { val exportData = associateIrAndExport(modules) - val dts = ExportedModule(mainModuleName, moduleKind, exportData.flatExportedDeclarations()).toTypeScript() + val dts = runIf(shouldGenerateTypeScriptDefinitions) { + ExportedModule(mainModuleName, moduleKind, exportData.flatExportedDeclarations()).toTypeScript() + } doStaticMembersLowering(modules) val result = EnumMap(TranslationMode::class.java) @@ -162,9 +166,11 @@ class IrModuleToJsTransformer( return CompilerResult(result, dts) } - fun makeJsCodeGeneratorAndDts(modules: Iterable, mode: TranslationMode): Pair { + fun makeJsCodeGeneratorAndDts(modules: Iterable, mode: TranslationMode): Pair { val exportData = associateIrAndExport(modules) - val dts = ExportedModule(mainModuleName, moduleKind, exportData.flatExportedDeclarations()).toTypeScript() + val dts = runIf(shouldGenerateTypeScriptDefinitions) { + ExportedModule(mainModuleName, moduleKind, exportData.flatExportedDeclarations()).toTypeScript() + } doStaticMembersLowering(modules) if (mode.dce) { @@ -252,7 +258,7 @@ class IrModuleToJsTransformer( result.exports.statements += exportStatements - if (exports.isNotEmpty()) { + if (shouldGenerateTypeScriptDefinitions && exports.isNotEmpty()) { result.dts = exports.toTypeScript(moduleKind) } diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/CompilerConfigurationProvider.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/CompilerConfigurationProvider.kt index 6aedd32bb5d..0a84f75e9b4 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/CompilerConfigurationProvider.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/CompilerConfigurationProvider.kt @@ -131,6 +131,10 @@ fun createCompilerConfiguration(module: TestModule, configurators: List GENERATE_POLYFILLS = CompilerConfigurationKey.create("generate polyfills for newest properties, methods and classes from ES6+"); + public static final CompilerConfigurationKey GENERATE_DTS = + CompilerConfigurationKey.create("generate TypeScript definition file"); + public static final CompilerConfigurationKey GENERATE_REGION_COMMENTS = CompilerConfigurationKey.create("generate special comments at the start and the end of each file block, " + "it allows to fold them and navigate to them in the IDEA");