generated from actions/typescript-action
/
getUpdatedDependencies.ts
69 lines (59 loc) · 2 KB
/
getUpdatedDependencies.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import {PackageDependency, PackageFile} from 'renovate/dist/manager/types'
import {UpdatedDependency} from './types'
export function* getUpdatedDependencies(
baseDependencies: Record<string, PackageFile[]>,
headDependencies: Record<string, PackageFile[]>
): IterableIterator<UpdatedDependency> {
for (const managerName in baseDependencies) {
const basePackageList = baseDependencies[managerName]
const headPackageList = headDependencies[managerName]
if (
!headPackageList ||
headPackageList.length === 0 ||
basePackageList.length === 0
) {
continue
}
for (const basePackage of basePackageList) {
const headPackage = headPackageList.find(
x => x.packageFile === basePackage.packageFile
)
if (!headPackage) {
// the package seems to be removed from the head
continue
}
for (const baseDependency of basePackage.deps) {
const headDependency = headPackage.deps.find(
x =>
x.depName === baseDependency.depName &&
x.depType === baseDependency.depType
)
if (!headDependency) {
// the dependency seems to be removed from the head
continue
}
if (!isSameVersion(baseDependency, headDependency)) {
if (!baseDependency.updates || baseDependency.updates.length === 0) {
continue
}
const [update] = baseDependency.updates // there should be a single update because we `fetchUpdates` on the base and use the rangeStrategy of 'update-lockfile'
yield {
manager: managerName,
packageFile: basePackage,
update,
dependency: baseDependency
}
}
}
}
}
}
function isSameVersion(
a: PackageDependency<Record<string, unknown>>,
b: PackageDependency<Record<string, unknown>>
): boolean {
if (a.lockedVersion && b.lockedVersion) {
return a.lockedVersion === b.lockedVersion
}
return a.currentValue === b.currentValue
}