From 35e3691d6ce34db7fbda07f001351247fb5791a2 Mon Sep 17 00:00:00 2001 From: Victor Turansky Date: Tue, 24 Mar 2020 00:49:29 +0300 Subject: [PATCH] KT-34468 Yarn. Lock file check at the beginning --- .../gradle/targets/js/yarn/YarnBasics.kt | 94 ++++++++++--------- 1 file changed, 48 insertions(+), 46 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 e407b3ef431..40229909872 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 @@ -98,58 +98,60 @@ abstract class YarnBasics : NpmApi { nodeWorkDir: File, srcDependenciesList: Collection ) { - val yarnLock = nodeWorkDir.resolve("yarn.lock") - if (yarnLock.isFile) { - val byKey = YarnLock.parse(yarnLock).entries.associateBy { it.dependencyKey } - val visited = mutableMapOf() + val yarnLock = nodeWorkDir + .resolve("yarn.lock") + .takeIf { it.isFile } + ?: return - fun resolveRecursively(src: NpmDependency): NpmDependency { - val copy = visited[src] - if (copy != null) { - src.resolvedVersion = copy.resolvedVersion - src.integrity = copy.integrity - src.dependencies.addAll(copy.dependencies) - return src - } - visited[src] = src - - val key = dependencyKey(src.key, src.version) - val deps = if (src.version != "*") { - byKey[key] - } else { - val searchKey = dependencyKey(src.key, "") - byKey.entries - .firstOrNull { it.key.startsWith(searchKey) } - ?.value - } - - if (deps == null) { - error("Cannot find $key in yarn.lock") - } - - src.resolvedVersion = deps.version - src.integrity = deps.integrity - - deps.dependencies.mapTo(src.dependencies) { dep -> - val scopedName = dep.scopedName - val child = NpmDependency( - project = src.project, - name = scopedName.toString(), - version = dep.version ?: "*" - ) - child.parent = src - - resolveRecursively(child) - - child - } + val byKey = YarnLock.parse(yarnLock).entries.associateBy { it.dependencyKey } + val visited = mutableMapOf() + fun resolveRecursively(src: NpmDependency): NpmDependency { + val copy = visited[src] + if (copy != null) { + src.resolvedVersion = copy.resolvedVersion + src.integrity = copy.integrity + src.dependencies.addAll(copy.dependencies) return src } + visited[src] = src - srcDependenciesList.forEach { src -> - resolveRecursively(src) + val key = dependencyKey(src.key, src.version) + val deps = if (src.version != "*") { + byKey[key] + } else { + val searchKey = dependencyKey(src.key, "") + byKey.entries + .firstOrNull { it.key.startsWith(searchKey) } + ?.value } + + if (deps == null) { + error("Cannot find $key in yarn.lock") + } + + src.resolvedVersion = deps.version + src.integrity = deps.integrity + + deps.dependencies.mapTo(src.dependencies) { dep -> + val scopedName = dep.scopedName + val child = NpmDependency( + project = src.project, + name = scopedName.toString(), + version = dep.version ?: "*" + ) + child.parent = src + + resolveRecursively(child) + + child + } + + return src + } + + srcDependenciesList.forEach { src -> + resolveRecursively(src) } } }