From e8df15ac27dc2b86c36d4a335611fe0d61026e2c Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Wed, 25 Mar 2020 11:27:28 +0300 Subject: [PATCH] [Gradle, JS] Support file npm dependencies #KT-37207 fixed --- .../gradle/targets/js/yarn/YarnBasics.kt | 21 +++++++++++++++++-- .../kotlin/gradle/targets/js/yarn/YarnLock.kt | 3 --- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnBasics.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnBasics.kt index 2d24d01bf4b..732c2171f72 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnBasics.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnBasics.kt @@ -12,7 +12,6 @@ import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution -import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLock.Companion.dependencyKey import java.io.File abstract class YarnBasics : NpmApi { @@ -145,7 +144,7 @@ abstract class YarnBasics : NpmApi { } } -private class YarnEntryRegistry(lockFile: File) { +private class YarnEntryRegistry(private val lockFile: File) { val entryMap = YarnLock.parse(lockFile) .entries .associateBy { it.dependencyKey } @@ -168,4 +167,22 @@ private class YarnEntryRegistry(lockFile: File) { "Cannot find $key in yarn.lock" } } + + val YarnLock.Entry.dependencyKey: String + get() = key.correctDependencyKey() + + private fun dependencyKey(packageKey: String, version: String) = + YarnLock.dependencyKey(packageKey, version).correctDependencyKey() + + private fun String.correctDependencyKey(): String { + var correctedKey = replace("@github:", "@") + + if ("@file:" in correctedKey) { + val location = correctedKey.substringAfter("@file:") + val path = lockFile.parentFile.resolve(location).canonicalPath + correctedKey = correctedKey.replaceAfter("@file:", path) + } + + return correctedKey + } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnLock.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnLock.kt index a9ce7f87acc..e7039af9837 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnLock.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnLock.kt @@ -25,9 +25,6 @@ data class YarnLock(val entries: List) { } companion object { - val Entry.dependencyKey: String - get() = key.replace("@github:", "@") - fun dependencyKey(packageKey: String, version: String) = "$packageKey@$version" private class Node(val parent: Node?, val value: String? = null) {