diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DtsResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DtsResolver.kt index 0cddb053f96..11afc5d9ef4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DtsResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DtsResolver.kt @@ -26,11 +26,36 @@ class DtsResolver(val npmProject: NpmProject) { .asSequence() .filter { !considerGeneratingFlag || it.generateExternals } .filter { it.scope == NORMAL || it.scope == OPTIONAL } - .mapNotNullTo(mutableSetOf()) { typeModules.resolve(it.key)?.let { file -> Dts(file.canonicalFile, it) } } + .mapNotNullTo(mutableSetOf()) { dependency -> + getDtsFromDependency(dependency, considerGeneratingFlag) + } .sortedBy { it.inputKey } .toList() } + private fun getDtsFromDependency( + dependency: NpmDependency, + considerGeneratingFlag: Boolean + ): Dts? { + val dts = typeModules.resolve(dependency.key) + ?.let { file -> + Dts(file.canonicalFile, dependency) + } + if (dts == null && considerGeneratingFlag) { + warningOnMissedDTs(dependency) + } + return dts + } + + private fun warningOnMissedDTs(dependency: NpmDependency) { + npmProject.project.logger.warn( + """ + No `types` or `typings` found for '$dependency'. + To find d.ts for dependency, fields `types` and `typings` should be declared in `package.json` + """.trimIndent() + ) + } + class Dts(val file: File, val npmDependency: NpmDependency) { val inputKey: String get() = npmDependency.key + "@" + npmDependency.resolvedVersion + "#" + npmDependency.integrity