From cc33d34ca827f2acc5a00d69f38328b26ab06939 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Mon, 20 Feb 2023 15:58:49 +0100 Subject: [PATCH] refactor: PackageFile types (#20498) Co-authored-by: RahulGautamSingh Co-authored-by: Michael Kriese --- lib/modules/manager/batect/extract.spec.ts | 2 +- lib/modules/manager/batect/extract.ts | 10 +-- lib/modules/manager/flux/extract.ts | 5 +- lib/modules/manager/gitlabci/extract.ts | 5 +- lib/modules/manager/gradle/extract.ts | 12 ++-- lib/modules/manager/index.ts | 3 +- .../maven/__snapshots__/extract.spec.ts.snap | 9 +-- lib/modules/manager/maven/extract.spec.ts | 22 +++--- lib/modules/manager/maven/extract.ts | 26 +++---- lib/modules/manager/maven/index.spec.ts | 29 +++++--- lib/modules/manager/npm/extract/index.ts | 9 +-- .../npm/extract/locked-versions.spec.ts | 44 +++++++----- .../manager/npm/extract/locked-versions.ts | 6 +- .../manager/npm/extract/monorepo.spec.ts | 16 ++--- lib/modules/manager/npm/extract/monorepo.ts | 4 +- lib/modules/manager/npm/extract/pnpm.ts | 4 +- lib/modules/manager/npm/post-update/index.ts | 8 +-- lib/modules/manager/npm/post-update/lerna.ts | 8 ++- lib/modules/manager/npm/post-update/types.ts | 4 +- lib/modules/manager/pub/extract.spec.ts | 1 - lib/modules/manager/pub/extract.ts | 1 - .../swift/__snapshots__/index.spec.ts.snap | 1 - lib/modules/manager/swift/extract.ts | 6 +- lib/modules/manager/types.ts | 8 ++- lib/util/cache/repository/types.ts | 4 +- .../repository/dependency-dashboard.spec.ts | 6 +- .../repository/dependency-dashboard.ts | 4 +- .../repository/errors-warnings.spec.ts | 14 ++-- lib/workers/repository/errors-warnings.ts | 10 +-- .../repository/extract/manager-files.ts | 8 +-- .../onboarding/pr/config-description.spec.ts | 4 +- .../onboarding/pr/config-description.ts | 4 +- .../repository/onboarding/pr/index.spec.ts | 4 +- lib/workers/repository/onboarding/pr/index.ts | 7 +- lib/workers/repository/package-files.ts | 16 ++--- lib/workers/repository/process/deprecated.ts | 6 +- .../repository/process/extract-update.spec.ts | 4 +- .../repository/process/extract-update.ts | 14 ++-- lib/workers/repository/process/fetch.spec.ts | 10 +-- lib/workers/repository/process/fetch.ts | 10 +-- lib/workers/repository/process/index.ts | 4 +- .../process/vulnerabilities.spec.ts | 71 +++++++++++++------ .../repository/process/vulnerabilities.ts | 12 ++-- .../repository/update/pr/body/index.spec.ts | 4 +- lib/workers/types.ts | 6 +- 45 files changed, 245 insertions(+), 220 deletions(-) diff --git a/lib/modules/manager/batect/extract.spec.ts b/lib/modules/manager/batect/extract.spec.ts index e36c85ece5e344..91f1aff458f11a 100644 --- a/lib/modules/manager/batect/extract.spec.ts +++ b/lib/modules/manager/batect/extract.spec.ts @@ -78,7 +78,7 @@ describe('modules/manager/batect/extract', () => { // TODO: #7154 expect( - result?.sort((a, b) => a.packageFile!.localeCompare(b.packageFile!)) + result?.sort((a, b) => a.packageFile.localeCompare(b.packageFile)) ).toEqual([ { packageFile: `${fixturesDir}/valid/another-include.yml`, diff --git a/lib/modules/manager/batect/extract.ts b/lib/modules/manager/batect/extract.ts index 0aaf155894d38b..81d668729fe87d 100644 --- a/lib/modules/manager/batect/extract.ts +++ b/lib/modules/manager/batect/extract.ts @@ -7,11 +7,7 @@ import { GitTagsDatasource } from '../../datasource/git-tags'; import { id as dockerVersioning } from '../../versioning/docker'; import { id as semverVersioning } from '../../versioning/semver'; import { getDep } from '../dockerfile/extract'; -import type { - ExtractConfig, - PackageDependency, - PackageFileContent, -} from '../types'; +import type { ExtractConfig, PackageDependency, PackageFile } from '../types'; import type { BatectConfig, BatectFileInclude, @@ -153,10 +149,10 @@ export function extractPackageFile( export async function extractAllPackageFiles( config: ExtractConfig, packageFiles: string[] -): Promise { +): Promise { const filesToExamine = new Set(packageFiles); const filesAlreadyExamined = new Set(); - const results: PackageFileContent[] = []; + const results: PackageFile[] = []; while (filesToExamine.size > 0) { const packageFile = filesToExamine.values().next().value; diff --git a/lib/modules/manager/flux/extract.ts b/lib/modules/manager/flux/extract.ts index 974920b9a56809..91db3749a90c17 100644 --- a/lib/modules/manager/flux/extract.ts +++ b/lib/modules/manager/flux/extract.ts @@ -13,6 +13,7 @@ import { getDep } from '../dockerfile/extract'; import type { ExtractConfig, PackageDependency, + PackageFile, PackageFileContent, } from '../types'; import { isSystemManifest } from './common'; @@ -268,9 +269,9 @@ export function extractPackageFile( export async function extractAllPackageFiles( _config: ExtractConfig, packageFiles: string[] -): Promise[] | null> { +): Promise[] | null> { const manifests: FluxManifest[] = []; - const results: PackageFileContent[] = []; + const results: PackageFile[] = []; for (const file of packageFiles) { const content = await readLocalFile(file, 'utf8'); diff --git a/lib/modules/manager/gitlabci/extract.ts b/lib/modules/manager/gitlabci/extract.ts index f108472d066991..6601e91580e198 100644 --- a/lib/modules/manager/gitlabci/extract.ts +++ b/lib/modules/manager/gitlabci/extract.ts @@ -6,6 +6,7 @@ import { trimLeadingSlash } from '../../../util/url'; import type { ExtractConfig, PackageDependency, + PackageFile, PackageFileContent, } from '../types'; import { isGitlabIncludeLocal } from './common'; @@ -123,10 +124,10 @@ export function extractPackageFile( export async function extractAllPackageFiles( config: ExtractConfig, packageFiles: string[] -): Promise { +): Promise { const filesToExamine = [...packageFiles]; const seen = new Set(packageFiles); - const results: PackageFileContent[] = []; + const results: PackageFile[] = []; // extract all includes from the files while (filesToExamine.length > 0) { diff --git a/lib/modules/manager/gradle/extract.ts b/lib/modules/manager/gradle/extract.ts index 68937dad0c6484..31d3355426d211 100644 --- a/lib/modules/manager/gradle/extract.ts +++ b/lib/modules/manager/gradle/extract.ts @@ -2,11 +2,7 @@ import upath from 'upath'; import { logger } from '../../../logger'; import { getLocalFiles } from '../../../util/fs'; import { MavenDatasource } from '../../datasource/maven'; -import type { - ExtractConfig, - PackageDependency, - PackageFileContent, -} from '../types'; +import type { ExtractConfig, PackageDependency, PackageFile } from '../types'; import { parseCatalog } from './extract/catalog'; import { isGcvPropsFile, @@ -52,10 +48,10 @@ function getRegistryUrlsForDep( export async function extractAllPackageFiles( config: ExtractConfig, packageFiles: string[] -): Promise { +): Promise { const extractedDeps: PackageDependency[] = []; const varRegistry: VariableRegistry = {}; - const packageFilesByName: Record = {}; + const packageFilesByName: Record = {}; const packageRegistries: PackageRegistry[] = []; const reorderedFiles = reorderFiles(packageFiles); const fileContents = await getLocalFiles(packageFiles); @@ -131,7 +127,7 @@ export async function extractAllPackageFiles( const key = dep.managerData?.packageFile; // istanbul ignore else if (key) { - let pkgFile: PackageFileContent = packageFilesByName[key]; + let pkgFile: PackageFile = packageFilesByName[key]; // istanbul ignore if: won't happen if "apply from" processes only initially known files if (!pkgFile) { pkgFile = { diff --git a/lib/modules/manager/index.ts b/lib/modules/manager/index.ts index f51df899c3c91d..4d7500b8836129 100644 --- a/lib/modules/manager/index.ts +++ b/lib/modules/manager/index.ts @@ -5,6 +5,7 @@ import type { ExtractConfig, GlobalManagerConfig, ManagerApi, + PackageFile, PackageFileContent, RangeConfig, Result, @@ -40,7 +41,7 @@ export async function extractAllPackageFiles( manager: string, config: ExtractConfig, files: string[] -): Promise { +): Promise { if (!managers.has(manager)) { return null; } diff --git a/lib/modules/manager/maven/__snapshots__/extract.spec.ts.snap b/lib/modules/manager/maven/__snapshots__/extract.spec.ts.snap index f65c5d6a5a2bb0..2475744fd6b2d3 100644 --- a/lib/modules/manager/maven/__snapshots__/extract.spec.ts.snap +++ b/lib/modules/manager/maven/__snapshots__/extract.spec.ts.snap @@ -205,21 +205,22 @@ exports[`modules/manager/maven/extract extractDependencies extract dependencies "mavenProps": { "quuxGroup": { "fileReplacePosition": 631, - "packageFile": null, + "packageFile": "some-file", "val": "org.example", }, "quuxId": { "fileReplacePosition": 667, - "packageFile": null, + "packageFile": "some-file", "val": "quux", }, "quuxVersion": { "fileReplacePosition": 698, - "packageFile": null, + "packageFile": "some-file", "val": "1.2.3.4", }, }, - "packageFile": null, + "packageFile": "some-file", "packageFileVersion": "0.0.1", + "parent": "../pom.xml", } `; diff --git a/lib/modules/manager/maven/extract.spec.ts b/lib/modules/manager/maven/extract.spec.ts index 28b22bd0adfa5c..84d256cf641497 100644 --- a/lib/modules/manager/maven/extract.spec.ts +++ b/lib/modules/manager/maven/extract.spec.ts @@ -11,14 +11,14 @@ const complexSettingsContent = Fixtures.get(`complex.settings.xml`); describe('modules/manager/maven/extract', () => { describe('extractDependencies', () => { it('returns null for invalid XML', () => { - expect(extractPackage('')).toBeNull(); - expect(extractPackage('invalid xml content')).toBeNull(); - expect(extractPackage('')).toBeNull(); - expect(extractPackage('')).toBeNull(); + expect(extractPackage('', 'some-file')).toBeNull(); + expect(extractPackage('invalid xml content', 'some-file')).toBeNull(); + expect(extractPackage('', 'some-file')).toBeNull(); + expect(extractPackage('', 'some-file')).toBeNull(); }); it('extract dependencies from any XML position', () => { - const res = extractPackage(simpleContent); + const res = extractPackage(simpleContent, 'some-file'); expect(res).toMatchSnapshot({ deps: [ { @@ -113,29 +113,29 @@ describe('modules/manager/maven/extract', () => { ], mavenProps: { quuxGroup: { - packageFile: null, + packageFile: 'some-file', val: 'org.example', }, quuxId: { - packageFile: null, + packageFile: 'some-file', val: 'quux', }, quuxVersion: { - packageFile: null, + packageFile: 'some-file', val: '1.2.3.4', }, }, - packageFile: null, + packageFile: 'some-file', }); }); it('tries minimum manifests', () => { - const res = extractPackage(minimumContent); + const res = extractPackage(minimumContent, 'some-file'); expect(res).toEqual({ datasource: 'maven', deps: [], mavenProps: {}, - packageFile: null, + packageFile: 'some-file', packageFileVersion: '1', }); }); diff --git a/lib/modules/manager/maven/extract.ts b/lib/modules/manager/maven/extract.ts index 54d7427ff127e9..2bdcc0f3506373 100644 --- a/lib/modules/manager/maven/extract.ts +++ b/lib/modules/manager/maven/extract.ts @@ -6,11 +6,7 @@ import { readLocalFile } from '../../../util/fs'; import { regEx } from '../../../util/regex'; import { MavenDatasource } from '../../datasource/maven'; import { MAVEN_REPO } from '../../datasource/maven/common'; -import type { - ExtractConfig, - PackageDependency, - PackageFileContent, -} from '../types'; +import type { ExtractConfig, PackageDependency, PackageFile } from '../types'; import type { MavenProp } from './types'; export function parsePom(raw: string): XmlDocument | null { @@ -249,15 +245,15 @@ function resolveParentFile(packageFile: string, parentPath: string): string { return upath.normalize(upath.join(dir, parentDir, parentFile)); } -interface MavenInterimPackageFile extends PackageFileContent { +interface MavenInterimPackageFile extends PackageFile { mavenProps?: Record; parent?: string; } export function extractPackage( rawContent: string, - packageFile: string | null = null -): PackageFileContent> | null { + packageFile: string +): PackageFile | null { if (!rawContent) { return null; } @@ -373,16 +369,14 @@ export function parseSettings(raw: string): XmlDocument | null { return null; } -export function resolveParents( - packages: PackageFileContent[] -): PackageFileContent[] { +export function resolveParents(packages: PackageFile[]): PackageFile[] { const packageFileNames: string[] = []; const extractedPackages: Record = {}; const extractedDeps: Record = {}; const extractedProps: Record = {}; const registryUrls: Record> = {}; packages.forEach((pkg) => { - const name = pkg.packageFile!; + const name = pkg.packageFile; packageFileNames.push(name); extractedPackages[name] = pkg; extractedDeps[name] = []; @@ -460,9 +454,7 @@ export function resolveParents( return packageFiles; } -function cleanResult( - packageFiles: MavenInterimPackageFile[] -): PackageFileContent>[] { +function cleanResult(packageFiles: MavenInterimPackageFile[]): PackageFile[] { packageFiles.forEach((packageFile) => { delete packageFile.mavenProps; delete packageFile.parent; @@ -476,8 +468,8 @@ function cleanResult( export async function extractAllPackageFiles( _config: ExtractConfig, packageFiles: string[] -): Promise { - const packages: PackageFileContent[] = []; +): Promise { + const packages: PackageFile[] = []; const additionalRegistryUrls: string[] = []; for (const packageFile of packageFiles) { diff --git a/lib/modules/manager/maven/index.spec.ts b/lib/modules/manager/maven/index.spec.ts index f515099c90f0e2..91fd88621e49ee 100644 --- a/lib/modules/manager/maven/index.spec.ts +++ b/lib/modules/manager/maven/index.spec.ts @@ -212,14 +212,16 @@ describe('modules/manager/maven/index', () => { it('should update an existing dependency', () => { const newValue = '9.9.9.9-final'; - const { deps } = extractPackage(pomContent)!; + const { deps } = extractPackage(pomContent, 'some-file')!; const dep = selectDep(deps); const upgrade = { ...dep, newValue }; const updatedContent = updateDependency({ fileContent: pomContent, upgrade, })!; - const updatedDep = selectDep(extractPackage(updatedContent)!.deps); + const updatedDep = selectDep( + extractPackage(updatedContent, 'some-file')!.deps + ); expect(updatedDep?.currentValue).toEqual(newValue); }); @@ -252,7 +254,7 @@ describe('modules/manager/maven/index', () => { it('should apply props recursively', () => { const [{ deps }] = resolveParents([ - extractPackage(Fixtures.get('recursive_props.pom.xml'))!, + extractPackage(Fixtures.get('recursive_props.pom.xml'), 'some-file')!, ]); expect(deps).toMatchObject([ { @@ -264,7 +266,10 @@ describe('modules/manager/maven/index', () => { it('should apply props multiple times', () => { const [{ deps }] = resolveParents([ - extractPackage(Fixtures.get('multiple_usages_props.pom.xml'))!, + extractPackage( + Fixtures.get('multiple_usages_props.pom.xml'), + 'some-file' + )!, ]); expect(deps).toMatchObject([ { @@ -276,7 +281,10 @@ describe('modules/manager/maven/index', () => { it('should detect props infinitely recursing props', () => { const [{ deps }] = resolveParents([ - extractPackage(Fixtures.get('infinite_recursive_props.pom.xml'))!, + extractPackage( + Fixtures.get('infinite_recursive_props.pom.xml'), + 'some-file' + )!, ]); expect(deps).toMatchObject([ { @@ -317,7 +325,7 @@ describe('modules/manager/maven/index', () => { it('should not touch content if new and old versions are equal', () => { const newValue = '1.2.3'; - const { deps } = extractPackage(pomContent)!; + const { deps } = extractPackage(pomContent, 'some-file')!; const dep = selectDep(deps); const upgrade = { ...dep, newValue }; const updatedContent = updateDependency({ @@ -388,7 +396,7 @@ describe('modules/manager/maven/index', () => { const currentValue = '1.2.2'; const newValue = '1.2.4'; - const { deps } = extractPackage(pomContent)!; + const { deps } = extractPackage(pomContent, 'some-file')!; const dep = selectDep(deps); const upgrade = { ...dep, currentValue, newValue }; const updatedContent = updateDependency({ @@ -403,11 +411,12 @@ describe('modules/manager/maven/index', () => { const newValue = '[1.2.3]'; const select = (depSet: PackageFileContent) => selectDep(depSet.deps, 'org.example:hard-range'); - const oldContent = extractPackage(pomContent); + const oldContent = extractPackage(pomContent, 'some-file'); const dep = select(oldContent!); const upgrade = { ...dep, newValue }; const newContent = extractPackage( - updateDependency({ fileContent: pomContent, upgrade })! + updateDependency({ fileContent: pomContent, upgrade })!, + 'some-file' ); const newDep = select(newContent!); expect(newDep?.currentValue).toEqual(newValue); @@ -417,7 +426,7 @@ describe('modules/manager/maven/index', () => { const newValue = '[1.0.0]'; const select = (depSet: PackageFileContent) => depSet?.deps ? selectDep(depSet.deps, 'org.example:hard-range') : null; - const oldContent = extractPackage(pomContent); + const oldContent = extractPackage(pomContent, 'some-file'); const dep = select(oldContent!); expect(dep).not.toBeNull(); const upgrade = { ...dep, newValue }; diff --git a/lib/modules/manager/npm/extract/index.ts b/lib/modules/manager/npm/extract/index.ts index 25c8f3317b8de1..05803936be9f3e 100644 --- a/lib/modules/manager/npm/extract/index.ts +++ b/lib/modules/manager/npm/extract/index.ts @@ -12,6 +12,7 @@ import { api, isValid, isVersion } from '../../../versioning/npm'; import type { ExtractConfig, PackageDependency, + PackageFile, PackageFileContent, } from '../../types'; import type { NpmLockFiles, NpmManagerData } from '../types'; @@ -502,7 +503,7 @@ export async function extractPackageFile( } export async function postExtract( - packageFiles: PackageFileContent[] + packageFiles: PackageFile[] ): Promise { await detectMonorepos(packageFiles); await getLockedVersions(packageFiles); @@ -511,8 +512,8 @@ export async function postExtract( export async function extractAllPackageFiles( config: ExtractConfig, packageFiles: string[] -): Promise[]> { - const npmFiles: PackageFileContent[] = []; +): Promise[]> { + const npmFiles: PackageFile[] = []; for (const packageFile of packageFiles) { const content = await readLocalFile(packageFile, 'utf8'); // istanbul ignore else @@ -520,8 +521,8 @@ export async function extractAllPackageFiles( const deps = await extractPackageFile(content, packageFile, config); if (deps) { npmFiles.push({ - packageFile, ...deps, + packageFile, }); } } else { diff --git a/lib/modules/manager/npm/extract/locked-versions.spec.ts b/lib/modules/manager/npm/extract/locked-versions.spec.ts index d812d13b5b66c6..8a9ff6b1f6863e 100644 --- a/lib/modules/manager/npm/extract/locked-versions.spec.ts +++ b/lib/modules/manager/npm/extract/locked-versions.spec.ts @@ -1,4 +1,4 @@ -import type { PackageFileContent } from '../../types'; +import type { PackageFile } from '../../types'; import type { NpmManagerData } from '../types'; import { getLockedVersions } from './locked-versions'; @@ -14,7 +14,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { describe('.getLockedVersions()', () => { function getPackageFiles( yarnVersion: string - ): PackageFileContent[] { + ): PackageFile[] { return [ { managerData: { npmLock: 'package-lock.json', yarnLock: 'yarn.lock' }, @@ -33,6 +33,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { currentValue: `${yarnVersion}`, }, ], + packageFile: 'some-file', }, ]; } @@ -74,6 +75,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { }, ], lockFiles: ['yarn.lock'], + packageFile: 'some-file', managerData: { npmLock: 'package-lock.json', yarnLock: 'yarn.lock' }, }, ]); @@ -120,6 +122,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { }, ], lockFiles: ['yarn.lock'], + packageFile: 'some-file', managerData: { npmLock: 'package-lock.json', yarnLock: 'yarn.lock' }, }, ]); @@ -166,6 +169,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { }, ], lockFiles: ['yarn.lock'], + packageFile: 'some-file', managerData: { npmLock: 'package-lock.json', yarnLock: 'yarn.lock' }, }, ]); @@ -204,6 +208,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { }, ], lockFiles: ['yarn.lock'], + packageFile: 'some-file', managerData: { npmLock: 'package-lock.json', yarnLock: 'yarn.lock' }, }, ]); @@ -243,6 +248,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { }, ], lockFiles: ['yarn.lock'], + packageFile: 'some-file', managerData: { npmLock: 'package-lock.json', yarnLock: 'yarn.lock' }, }, ]); @@ -261,6 +267,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { { depName: 'a', currentValue: '1.0.0' }, { depName: 'b', currentValue: '2.0.0' }, ], + packageFile: 'some-file', }, ]; await getLockedVersions(packageFiles); @@ -273,6 +280,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { ], lockFiles: ['package-lock.json'], managerData: { npmLock: 'package-lock.json' }, + packageFile: 'some-file', }, ]); }); @@ -292,6 +300,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { { depName: 'a', currentValue: '1.0.0' }, { depName: 'b', currentValue: '2.0.0' }, ], + packageFile: 'some-file', }, ]; await getLockedVersions(packageFiles); @@ -304,6 +313,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { { currentValue: '1.0.0', depName: 'a', lockedVersion: '1.0.0' }, { currentValue: '2.0.0', depName: 'b', lockedVersion: '2.0.0' }, ], + packageFile: 'some-file', lockFiles: ['package-lock.json'], managerData: { npmLock: 'package-lock.json', @@ -329,6 +339,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { { depName: 'a', currentValue: '1.0.0' }, { depName: 'b', currentValue: '2.0.0' }, ], + packageFile: 'some-file', }, ]; await getLockedVersions(packageFiles); @@ -342,9 +353,8 @@ describe('modules/manager/npm/extract/locked-versions', () => { { currentValue: '2.0.0', depName: 'b', lockedVersion: '2.0.0' }, ], lockFiles: ['package-lock.json'], - managerData: { - npmLock: 'package-lock.json', - }, + managerData: { npmLock: 'package-lock.json' }, + packageFile: 'some-file', }, ]); }); @@ -366,6 +376,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { { depName: 'a', currentValue: '1.0.0' }, { depName: 'b', currentValue: '2.0.0' }, ], + packageFile: 'some-file', }, ]; await getLockedVersions(packageFiles); @@ -379,9 +390,8 @@ describe('modules/manager/npm/extract/locked-versions', () => { { currentValue: '2.0.0', depName: 'b', lockedVersion: '2.0.0' }, ], lockFiles: ['package-lock.json'], - managerData: { - npmLock: 'package-lock.json', - }, + managerData: { npmLock: 'package-lock.json' }, + packageFile: 'some-file', }, ]); }); @@ -413,6 +423,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { currentValue: '2.0.0', }, ], + packageFile: 'some-file', }, ]; await getLockedVersions(packageFiles); @@ -424,9 +435,8 @@ describe('modules/manager/npm/extract/locked-versions', () => { { currentValue: '2.0.0', depName: 'b', lockedVersion: '2.0.0' }, ], lockFiles: ['package-lock.json'], - managerData: { - npmLock: 'package-lock.json', - }, + managerData: { npmLock: 'package-lock.json' }, + packageFile: 'some-file', }, ]); }); @@ -458,6 +468,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { currentValue: '2.0.0', }, ], + packageFile: 'some-file', }, ]; await getLockedVersions(packageFiles); @@ -469,9 +480,8 @@ describe('modules/manager/npm/extract/locked-versions', () => { { currentValue: '2.0.0', depName: 'b', lockedVersion: '2.0.0' }, ], lockFiles: ['package-lock.json'], - managerData: { - npmLock: 'package-lock.json', - }, + managerData: { npmLock: 'package-lock.json' }, + packageFile: 'some-file', }, ]); }); @@ -486,6 +496,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { { depName: 'a', currentValue: '1.0.0' }, { depName: 'b', currentValue: '2.0.0' }, ], + packageFile: 'some-file', }, ]; await getLockedVersions(packageFiles); @@ -496,9 +507,8 @@ describe('modules/manager/npm/extract/locked-versions', () => { { currentValue: '2.0.0', depName: 'b' }, ], lockFiles: ['pnpm-lock.yaml'], - managerData: { - pnpmShrinkwrap: 'pnpm-lock.yaml', - }, + managerData: { pnpmShrinkwrap: 'pnpm-lock.yaml' }, + packageFile: 'some-file', }, ]); }); diff --git a/lib/modules/manager/npm/extract/locked-versions.ts b/lib/modules/manager/npm/extract/locked-versions.ts index ea79021ac40f03..6c3fa3e7a40183 100644 --- a/lib/modules/manager/npm/extract/locked-versions.ts +++ b/lib/modules/manager/npm/extract/locked-versions.ts @@ -1,13 +1,13 @@ import semver from 'semver'; import { logger } from '../../../../logger'; -import type { PackageFileContent } from '../../types'; +import type { PackageFile } from '../../types'; import type { NpmManagerData } from '../types'; import { getNpmLock } from './npm'; import type { LockFile } from './types'; import { getYarnLock } from './yarn'; export async function getLockedVersions( - packageFiles: PackageFileContent[] + packageFiles: PackageFile[] ): Promise { const lockFileCache: Record = {}; logger.debug('Finding locked versions'); @@ -50,8 +50,6 @@ export async function getLockedVersions( } } } else if (npmLock) { - // TODO: types (#7154) - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions logger.debug(`Found ${npmLock} for ${packageFile.packageFile}`); lockFiles.push(npmLock); if (!lockFileCache[npmLock]) { diff --git a/lib/modules/manager/npm/extract/monorepo.spec.ts b/lib/modules/manager/npm/extract/monorepo.spec.ts index 8ee61557e289fb..974906f52c1a2f 100644 --- a/lib/modules/manager/npm/extract/monorepo.spec.ts +++ b/lib/modules/manager/npm/extract/monorepo.spec.ts @@ -1,4 +1,4 @@ -import type { PackageFileContent } from '../../types'; +import type { PackageFile } from '../../types'; import { detectMonorepos } from './monorepo'; jest.mock('./pnpm'); @@ -6,7 +6,7 @@ jest.mock('./pnpm'); describe('modules/manager/npm/extract/monorepo', () => { describe('.extractPackageFile()', () => { it('handles no monorepo', async () => { - const packageFiles: Partial[] = [ + const packageFiles: Partial[] = [ { packageFile: 'package.json', deps: [], @@ -17,7 +17,7 @@ describe('modules/manager/npm/extract/monorepo', () => { }); it('uses lerna package settings', async () => { - const packageFiles: Partial[] = [ + const packageFiles: Partial[] = [ { packageFile: 'package.json', managerData: { @@ -70,7 +70,7 @@ describe('modules/manager/npm/extract/monorepo', () => { }); it('updates internal packages', async () => { - const packageFiles: Partial[] = [ + const packageFiles: Partial[] = [ { packageFile: 'package.json', managerData: { @@ -123,7 +123,7 @@ describe('modules/manager/npm/extract/monorepo', () => { }); it('uses yarn workspaces package settings with lerna', async () => { - const packageFiles: Partial[] = [ + const packageFiles: Partial[] = [ { packageFile: 'package.json', managerData: { @@ -148,7 +148,7 @@ describe('modules/manager/npm/extract/monorepo', () => { }); it('uses yarn workspaces package settings without lerna', async () => { - const packageFiles: Partial[] = [ + const packageFiles: Partial[] = [ { packageFile: 'package.json', npmrc: '@org:registry=//registry.some.org\n', @@ -172,7 +172,7 @@ describe('modules/manager/npm/extract/monorepo', () => { }); it('uses yarn workspaces package settings with extractedConstraints', async () => { - const packageFiles: Partial[] = [ + const packageFiles: Partial[] = [ { packageFile: 'package.json', skipInstalls: true, // coverage @@ -216,7 +216,7 @@ describe('modules/manager/npm/extract/monorepo', () => { }); it('uses yarnZeroInstall and skipInstalls from yarn workspaces package settings', async () => { - const packageFiles: Partial[] = [ + const packageFiles: Partial[] = [ { packageFile: 'package.json', managerData: { diff --git a/lib/modules/manager/npm/extract/monorepo.ts b/lib/modules/manager/npm/extract/monorepo.ts index e30e65096b2fef..ea5db558a15e7c 100644 --- a/lib/modules/manager/npm/extract/monorepo.ts +++ b/lib/modules/manager/npm/extract/monorepo.ts @@ -1,13 +1,13 @@ import is from '@sindresorhus/is'; import { logger } from '../../../../logger'; import { getParentDir, getSiblingFileName } from '../../../../util/fs'; -import type { PackageFileContent } from '../../types'; +import type { PackageFile } from '../../types'; import type { NpmManagerData } from '../types'; import { detectPnpmWorkspaces } from './pnpm'; import { matchesAnyPattern } from './utils'; export async function detectMonorepos( - packageFiles: Partial>[] + packageFiles: Partial>[] ): Promise { await detectPnpmWorkspaces(packageFiles); logger.debug('Detecting Lerna and Yarn Workspaces'); diff --git a/lib/modules/manager/npm/extract/pnpm.ts b/lib/modules/manager/npm/extract/pnpm.ts index fb681e4977e70c..1f566d1e8bb99f 100644 --- a/lib/modules/manager/npm/extract/pnpm.ts +++ b/lib/modules/manager/npm/extract/pnpm.ts @@ -10,7 +10,7 @@ import { localPathExists, readLocalFile, } from '../../../../util/fs'; -import type { PackageFileContent } from '../../types'; +import type { PackageFile } from '../../types'; import type { NpmManagerData } from '../types'; import type { PnpmWorkspaceFile } from './types'; @@ -75,7 +75,7 @@ export async function findPnpmWorkspace( } export async function detectPnpmWorkspaces( - packageFiles: Partial>[] + packageFiles: Partial>[] ): Promise { logger.debug(`Detecting pnpm Workspaces`); const packagePathCache = new Map(); diff --git a/lib/modules/manager/npm/post-update/index.ts b/lib/modules/manager/npm/post-update/index.ts index 868caca3982bc1..0e065f7b169a62 100644 --- a/lib/modules/manager/npm/post-update/index.ts +++ b/lib/modules/manager/npm/post-update/index.ts @@ -23,11 +23,7 @@ import * as hostRules from '../../../../util/host-rules'; import { newlineRegex, regEx } from '../../../../util/regex'; import { ensureTrailingSlash } from '../../../../util/url'; import { NpmDatasource } from '../../../datasource/npm'; -import type { - PackageFileContent, - PostUpdateConfig, - Upgrade, -} from '../../types'; +import type { PackageFile, PostUpdateConfig, Upgrade } from '../../types'; import { getZeroInstallPaths } from '../extract/yarn'; import type { NpmDepType, NpmManagerData } from '../types'; import { composeLockFile, parseLockFile } from '../utils'; @@ -91,7 +87,7 @@ export function determineLockFileDirs( function getPackageFile( fileName: string - ): Partial> { + ): Partial> { logger.trace('Looking for packageFile: ' + fileName); for (const packageFile of packageFiles.npm!) { diff --git a/lib/modules/manager/npm/post-update/lerna.ts b/lib/modules/manager/npm/post-update/lerna.ts index 35ea5cfbf04536..72db5a57ad7aa0 100644 --- a/lib/modules/manager/npm/post-update/lerna.ts +++ b/lib/modules/manager/npm/post-update/lerna.ts @@ -10,14 +10,18 @@ import type { ExtraEnv, ToolConstraint, } from '../../../../util/exec/types'; -import type { PackageFileContent, PostUpdateConfig } from '../../types'; +import type { + PackageFile, + PackageFileContent, + PostUpdateConfig, +} from '../../types'; import type { NpmManagerData } from '../types'; import { getNodeToolConstraint } from './node-version'; import type { GenerateLockFileResult } from './types'; // Exported for testability export function getLernaVersion( - lernaPackageFile: Partial> + lernaPackageFile: Partial> ): string | null { const lernaDep = lernaPackageFile.deps?.find((d) => d.depName === 'lerna'); if (!lernaDep?.currentValue || !semver.validRange(lernaDep.currentValue)) { diff --git a/lib/modules/manager/npm/post-update/types.ts b/lib/modules/manager/npm/post-update/types.ts index e988fd0708eb5b..56b50b78cc9ae7 100644 --- a/lib/modules/manager/npm/post-update/types.ts +++ b/lib/modules/manager/npm/post-update/types.ts @@ -1,5 +1,5 @@ import type { FileChange } from '../../../../util/git/types'; -import type { PackageFileContent } from '../../types'; +import type { PackageFile } from '../../types'; import type { NpmManagerData } from '../types'; export interface DetermineLockFileDirsResult { @@ -10,7 +10,7 @@ export interface DetermineLockFileDirsResult { } export interface AdditionalPackageFiles { - npm?: Partial>[]; + npm?: Partial>[]; } export interface ArtifactError { diff --git a/lib/modules/manager/pub/extract.spec.ts b/lib/modules/manager/pub/extract.spec.ts index 4d0b5eec6b6606..47e76e4d68c086 100644 --- a/lib/modules/manager/pub/extract.spec.ts +++ b/lib/modules/manager/pub/extract.spec.ts @@ -39,7 +39,6 @@ describe('modules/manager/pub/extract', () => { depType: 'dev_dependencies', }, ], - packageFile: 'pubspec.yaml', }); }); }); diff --git a/lib/modules/manager/pub/extract.ts b/lib/modules/manager/pub/extract.ts index 108704a755a31e..6926ae578ff298 100644 --- a/lib/modules/manager/pub/extract.ts +++ b/lib/modules/manager/pub/extract.ts @@ -53,7 +53,6 @@ export function extractPackageFile( if (deps.length) { return { - packageFile, datasource: DartDatasource.id, deps, }; diff --git a/lib/modules/manager/swift/__snapshots__/index.spec.ts.snap b/lib/modules/manager/swift/__snapshots__/index.spec.ts.snap index 45441e342e90a1..0df2720a70afb5 100644 --- a/lib/modules/manager/swift/__snapshots__/index.spec.ts.snap +++ b/lib/modules/manager/swift/__snapshots__/index.spec.ts.snap @@ -61,6 +61,5 @@ exports[`modules/manager/swift/index extractPackageFile() parses multiple packag "packageName": "https://github.com/apple/swift-package-manager.git", }, ], - "packageFile": null, } `; diff --git a/lib/modules/manager/swift/extract.ts b/lib/modules/manager/swift/extract.ts index d6bb1c23841445..a969fd99f905b0 100644 --- a/lib/modules/manager/swift/extract.ts +++ b/lib/modules/manager/swift/extract.ts @@ -136,17 +136,13 @@ function getDepName(url: string | null): string | null { } } -export function extractPackageFile( - content: string, - packageFile: string | null = null -): PackageFileContent | null { +export function extractPackageFile(content: string): PackageFileContent | null { if (!content) { return null; } const deps: PackageDependency[] = []; const result: PackageFileContent = { - packageFile, deps, }; diff --git a/lib/modules/manager/types.ts b/lib/modules/manager/types.ts index 27186b7cd4d714..98ea62bedb9c74 100644 --- a/lib/modules/manager/types.ts +++ b/lib/modules/manager/types.ts @@ -62,13 +62,17 @@ export interface PackageFileContent> deps: PackageDependency[]; lockFiles?: string[]; npmrc?: string; - packageFile?: string | null; packageFileVersion?: string; skipInstalls?: boolean; matchStrings?: string[]; matchStringsStrategy?: MatchStringsStrategy; } +export interface PackageFile> + extends PackageFileContent { + packageFile: string; +} + export interface Package extends ManagerData { currentValue?: string | null; currentDigest?: string; @@ -241,7 +245,7 @@ export interface ManagerApi extends ModuleApi { extractAllPackageFiles?( config: ExtractConfig, files: string[] - ): Result; + ): Result; extractPackageFile?( content: string, diff --git a/lib/util/cache/repository/types.ts b/lib/util/cache/repository/types.ts index 221b9bc9abb779..de6af74256607b 100644 --- a/lib/util/cache/repository/types.ts +++ b/lib/util/cache/repository/types.ts @@ -2,14 +2,14 @@ import type { RepositoryCacheConfig, RepositoryCacheType, } from '../../../config/types'; -import type { PackageFileContent } from '../../../modules/manager/types'; +import type { PackageFile } from '../../../modules/manager/types'; import type { RepoInitConfig } from '../../../workers/repository/init/types'; export interface BaseBranchCache { sha: string; // branch commit sha configHash: string; // object hash of config extractionFingerprints: Record; // matching manager fingerprints - packageFiles: Record; // extract result + packageFiles: Record; // extract result } export interface BranchUpgradeCache { diff --git a/lib/workers/repository/dependency-dashboard.spec.ts b/lib/workers/repository/dependency-dashboard.spec.ts index 8d4aa8698914cd..6170c3dcdc4e68 100644 --- a/lib/workers/repository/dependency-dashboard.spec.ts +++ b/lib/workers/repository/dependency-dashboard.spec.ts @@ -11,7 +11,7 @@ import { import { GlobalConfig } from '../../config/global'; import type { PackageDependency, - PackageFileContent, + PackageFile, } from '../../modules/manager/types'; import type { Platform } from '../../modules/platform'; import { @@ -51,7 +51,7 @@ function genRandString(length: number): string { function genRandPackageFile( depsNum: number, depNameLen: number -): Record { +): Record { const deps: PackageDependency[] = []; for (let i = 0; i < depsNum; i++) { deps.push({ @@ -906,7 +906,7 @@ describe('workers/repository/dependency-dashboard', () => { warnings: [{ message: 'dependency-2', topic: '' }], }, ]; - const packageFiles: Record = { + const packageFiles: Record = { npm: [{ packageFile: 'package.json', deps: dep }], }; await dependencyDashboard.ensureDependencyDashboard( diff --git a/lib/workers/repository/dependency-dashboard.ts b/lib/workers/repository/dependency-dashboard.ts index 910dfc8b8006d4..ac00cdd0fe527e 100644 --- a/lib/workers/repository/dependency-dashboard.ts +++ b/lib/workers/repository/dependency-dashboard.ts @@ -3,7 +3,7 @@ import { nameFromLevel } from 'bunyan'; import { GlobalConfig } from '../../config/global'; import type { RenovateConfig } from '../../config/types'; import { getProblems, logger } from '../../logger'; -import type { PackageFileContent } from '../../modules/manager/types'; +import type { PackageFile } from '../../modules/manager/types'; import { platform } from '../../modules/platform'; import { GitHubMaxPrBodyLen } from '../../modules/platform/github'; import { regEx } from '../../util/regex'; @@ -165,7 +165,7 @@ function appendRepoProblems(config: RenovateConfig, issueBody: string): string { export async function ensureDependencyDashboard( config: SelectAllConfig, allBranches: BranchConfig[], - packageFiles: Record = {} + packageFiles: Record = {} ): Promise { // legacy/migrated issue const reuseTitle = 'Update Dependencies (Renovate Bot)'; diff --git a/lib/workers/repository/errors-warnings.spec.ts b/lib/workers/repository/errors-warnings.spec.ts index a342baa8059331..8fbb5ba7843f9e 100644 --- a/lib/workers/repository/errors-warnings.spec.ts +++ b/lib/workers/repository/errors-warnings.spec.ts @@ -1,5 +1,5 @@ import { RenovateConfig, getConfig } from '../../../test/util'; -import type { PackageFileContent } from '../../modules/manager/types'; +import type { PackageFile } from '../../modules/manager/types'; import { getDepWarningsDashboard, getDepWarningsOnboardingPR, @@ -52,7 +52,7 @@ describe('workers/repository/errors-warnings', () => { it('returns 2 pr warnings text dependencyDashboard true', () => { const dependencyDashboard = true; - const packageFiles: Record = { + const packageFiles: Record = { npm: [ { packageFile: 'package.json', @@ -99,7 +99,7 @@ describe('workers/repository/errors-warnings', () => { it('returns 2 pr warnings text dependencyDashboard false', () => { const dependencyDashboard = false; - const packageFiles: Record = { + const packageFiles: Record = { npm: [ { packageFile: 'package.json', @@ -145,7 +145,7 @@ describe('workers/repository/errors-warnings', () => { }); it('PR warning returns empty string', () => { - const packageFiles: Record = {}; + const packageFiles: Record = {}; const res = getDepWarningsPR(packageFiles); expect(res).toBe(''); }); @@ -157,7 +157,7 @@ describe('workers/repository/errors-warnings', () => { }); it('returns dependency dashboard warning text', () => { - const packageFiles: Record = { + const packageFiles: Record = { npm: [ { packageFile: 'package.json', @@ -206,7 +206,7 @@ describe('workers/repository/errors-warnings', () => { }); it('dependency dashboard warning returns empty string', () => { - const packageFiles: Record = {}; + const packageFiles: Record = {}; const res = getDepWarningsDashboard(packageFiles); expect(res).toBe(''); }); @@ -250,7 +250,7 @@ describe('workers/repository/errors-warnings', () => { describe('getDepWarningsOnboardingPR()', () => { it('returns onboarding warning text', () => { - const packageFiles: Record = { + const packageFiles: Record = { npm: [ { packageFile: 'package.json', diff --git a/lib/workers/repository/errors-warnings.ts b/lib/workers/repository/errors-warnings.ts index 2c8a6c1ff56a06..306cf9a939e667 100644 --- a/lib/workers/repository/errors-warnings.ts +++ b/lib/workers/repository/errors-warnings.ts @@ -1,7 +1,7 @@ // TODO #7154 import type { RenovateConfig } from '../../config/types'; import { logger } from '../../logger'; -import type { PackageFileContent } from '../../modules/manager/types'; +import type { PackageFile } from '../../modules/manager/types'; import { emojify } from '../../util/emoji'; import { regEx } from '../../util/regex'; import type { DepWarnings } from '../types'; @@ -33,7 +33,7 @@ export function getErrors(config: RenovateConfig): string { } function getDepWarnings( - packageFiles: Record + packageFiles: Record ): DepWarnings { const warnings: string[] = []; const warningFiles: string[] = []; @@ -59,7 +59,7 @@ function getDepWarnings( } export function getDepWarningsOnboardingPR( - packageFiles: Record + packageFiles: Record ): string { const { warnings, warningFiles } = getDepWarnings(packageFiles); let warningText = ''; @@ -82,7 +82,7 @@ export function getDepWarningsOnboardingPR( } export function getDepWarningsPR( - packageFiles: Record, + packageFiles: Record, dependencyDashboard?: boolean ): string { const { warnings, warningFiles } = getDepWarnings(packageFiles); @@ -104,7 +104,7 @@ export function getDepWarningsPR( } export function getDepWarningsDashboard( - packageFiles: Record + packageFiles: Record ): string { const { warnings, warningFiles } = getDepWarnings(packageFiles); if (!warnings.length) { diff --git a/lib/workers/repository/extract/manager-files.ts b/lib/workers/repository/extract/manager-files.ts index 01ec48f4d6e219..561456a27bd0f8 100644 --- a/lib/workers/repository/extract/manager-files.ts +++ b/lib/workers/repository/extract/manager-files.ts @@ -5,13 +5,13 @@ import { extractPackageFile, get, } from '../../../modules/manager'; -import type { PackageFileContent } from '../../../modules/manager/types'; +import type { PackageFile } from '../../../modules/manager/types'; import { readLocalFile } from '../../../util/fs'; import type { WorkerExtractConfig } from '../../types'; export async function getManagerPackageFiles( config: WorkerExtractConfig -): Promise { +): Promise { const { enabled, manager, fileList } = config; logger.trace(`getPackageFiles(${manager})`); if (!enabled) { @@ -44,7 +44,7 @@ export async function getManagerPackageFiles( } return allPackageFiles; } - const packageFiles: PackageFileContent[] = []; + const packageFiles: PackageFile[] = []; for (const packageFile of fileList) { const content = await readLocalFile(packageFile, 'utf8'); // istanbul ignore else @@ -60,8 +60,8 @@ export async function getManagerPackageFiles( res.deps[index].depIndex = index; } packageFiles.push({ - packageFile, ...res, + packageFile, }); } } else { diff --git a/lib/workers/repository/onboarding/pr/config-description.spec.ts b/lib/workers/repository/onboarding/pr/config-description.spec.ts index e5efd760356235..39c3a4f8b14ce5 100644 --- a/lib/workers/repository/onboarding/pr/config-description.spec.ts +++ b/lib/workers/repository/onboarding/pr/config-description.spec.ts @@ -1,5 +1,5 @@ import { RenovateConfig, getConfig } from '../../../../../test/util'; -import type { PackageFileContent } from '../../../../modules/manager/types'; +import type { PackageFile } from '../../../../modules/manager/types'; import { getConfigDesc } from './config-description'; describe('workers/repository/onboarding/pr/config-description', () => { @@ -18,7 +18,7 @@ describe('workers/repository/onboarding/pr/config-description', () => { }); it('returns a full list', () => { - const packageFiles: Record = { + const packageFiles: Record = { npm: [], dockerfile: [], }; diff --git a/lib/workers/repository/onboarding/pr/config-description.ts b/lib/workers/repository/onboarding/pr/config-description.ts index 48f6ece51bb8a5..6babae29a9c5a5 100644 --- a/lib/workers/repository/onboarding/pr/config-description.ts +++ b/lib/workers/repository/onboarding/pr/config-description.ts @@ -2,7 +2,7 @@ import is from '@sindresorhus/is'; import { configFileNames } from '../../../../config/app-strings'; import type { RenovateConfig } from '../../../../config/types'; import { logger } from '../../../../logger'; -import type { PackageFileContent } from '../../../../modules/manager/types'; +import type { PackageFile } from '../../../../modules/manager/types'; import { emojify } from '../../../../util/emoji'; const defaultConfigFile = configFileNames[0]; @@ -31,7 +31,7 @@ function getDescriptionArray(config: RenovateConfig): string[] { export function getConfigDesc( config: RenovateConfig, - packageFiles?: Record + packageFiles?: Record ): string { // TODO: type (#7154) const configFile = configFileNames.includes(config.onboardingConfigFileName!) diff --git a/lib/workers/repository/onboarding/pr/index.spec.ts b/lib/workers/repository/onboarding/pr/index.spec.ts index ff91b18dd8f0c0..8ba376a8800361 100644 --- a/lib/workers/repository/onboarding/pr/index.spec.ts +++ b/lib/workers/repository/onboarding/pr/index.spec.ts @@ -8,7 +8,7 @@ import { } from '../../../../../test/util'; import { GlobalConfig } from '../../../../config/global'; import { logger } from '../../../../logger'; -import type { PackageFileContent } from '../../../../modules/manager/types'; +import type { PackageFile } from '../../../../modules/manager/types'; import type { Pr } from '../../../../modules/platform'; import * as memCache from '../../../../util/cache/memory'; import type { BranchConfig } from '../../../types'; @@ -20,7 +20,7 @@ jest.mock('../../../../util/git'); describe('workers/repository/onboarding/pr/index', () => { describe('ensureOnboardingPr()', () => { let config: RenovateConfig; - let packageFiles: Record; + let packageFiles: Record; let branches: BranchConfig[]; const bodyStruct = { diff --git a/lib/workers/repository/onboarding/pr/index.ts b/lib/workers/repository/onboarding/pr/index.ts index d380166de1874e..5c765ad054bbc1 100644 --- a/lib/workers/repository/onboarding/pr/index.ts +++ b/lib/workers/repository/onboarding/pr/index.ts @@ -2,7 +2,7 @@ import is from '@sindresorhus/is'; import { GlobalConfig } from '../../../../config/global'; import type { RenovateConfig } from '../../../../config/types'; import { logger } from '../../../../logger'; -import type { PackageFileContent } from '../../../../modules/manager/types'; +import type { PackageFile } from '../../../../modules/manager/types'; import { platform } from '../../../../modules/platform'; import { hashBody } from '../../../../modules/platform/pr-body'; import { emojify } from '../../../../util/emoji'; @@ -30,7 +30,7 @@ import { getPrList } from './pr-list'; export async function ensureOnboardingPr( config: RenovateConfig, - packageFiles: Record | null, + packageFiles: Record | null, branches: BranchConfig[] ): Promise { if ( @@ -85,8 +85,7 @@ If you need any further assistance then you can also [request help here](${ let files: string[] = []; for (const [manager, managerFiles] of Object.entries(packageFiles)) { files = files.concat( - // TODO: types (#7154) - managerFiles.map((file) => ` * \`${file.packageFile!}\` (${manager})`) + managerFiles.map((file) => ` * \`${file.packageFile}\` (${manager})`) ); } prBody = diff --git a/lib/workers/repository/package-files.ts b/lib/workers/repository/package-files.ts index 0761be3b635575..02887c20c9ca2b 100644 --- a/lib/workers/repository/package-files.ts +++ b/lib/workers/repository/package-files.ts @@ -1,17 +1,14 @@ import is from '@sindresorhus/is'; import { logger } from '../../logger'; -import type { PackageFileContent } from '../../modules/manager/types'; +import type { PackageFile } from '../../modules/manager/types'; import { clone } from '../../util/clone'; export class PackageFiles { - private static data = new Map< - string, - Record | null - >(); + private static data = new Map | null>(); static add( baseBranch: string, - packageFiles: Record | null + packageFiles: Record | null ): void { logger.debug( { baseBranch }, @@ -82,7 +79,7 @@ export class PackageFiles { * @param data */ private static getDashboardMarkdownInternal( - data: Map | null> + data: Map | null> ): string { const none = 'None detected\n\n'; const pad = data.size > 1; // padding condition for a multi base branch repo @@ -108,8 +105,7 @@ export class PackageFiles { for (const manager of managers) { deps += `
${manager}\n
\n\n`; for (const packageFile of packageFiles[manager]) { - // TODO: types (#7154) - deps += `
${packageFile.packageFile!}\n\n`; + deps += `
${packageFile.packageFile}\n\n`; for (const dep of packageFile.deps) { const ver = dep.currentValue; const digest = dep.currentDigest; @@ -136,7 +132,7 @@ export class PackageFiles { * otherwise false is returned */ private static pop( - data: Map | null> + data: Map | null> ): boolean { // get detected managers list of the last listed base branch const [branch, managers] = Array.from(data).pop() ?? []; diff --git a/lib/workers/repository/process/deprecated.ts b/lib/workers/repository/process/deprecated.ts index 40283a9b8b8513..4849f721e3356e 100644 --- a/lib/workers/repository/process/deprecated.ts +++ b/lib/workers/repository/process/deprecated.ts @@ -2,12 +2,12 @@ import { GlobalConfig } from '../../../config/global'; import type { RenovateConfig } from '../../../config/types'; import { logger } from '../../../logger'; -import type { PackageFileContent } from '../../../modules/manager/types'; +import type { PackageFile } from '../../../modules/manager/types'; import { platform } from '../../../modules/platform'; export async function raiseDeprecationWarnings( config: RenovateConfig, - packageFiles: Record + packageFiles: Record ): Promise { if (!config.repoIsOnboarded) { return; @@ -31,7 +31,7 @@ export async function raiseDeprecationWarnings( depPackageFiles: [], }; deprecatedPackages[dep.depName!].depPackageFiles.push( - packageFile.packageFile! + packageFile.packageFile ); } } diff --git a/lib/workers/repository/process/extract-update.spec.ts b/lib/workers/repository/process/extract-update.spec.ts index d8c9e013eeead3..08f8d09343d1df 100644 --- a/lib/workers/repository/process/extract-update.spec.ts +++ b/lib/workers/repository/process/extract-update.spec.ts @@ -1,5 +1,5 @@ import { git, logger, mocked } from '../../../../test/util'; -import type { PackageFileContent } from '../../../modules/manager/types'; +import type { PackageFile } from '../../../modules/manager/types'; import * as _repositoryCache from '../../../util/cache/repository'; import type { BaseBranchCache } from '../../../util/cache/repository/types'; import { fingerprint } from '../../../util/fingerprint'; @@ -88,7 +88,7 @@ describe('workers/repository/process/extract-update', () => { }); it('uses repository cache', async () => { - const packageFiles: Record = {}; + const packageFiles: Record = {}; const config = { repoIsOnboarded: true, suppressNotifications: ['deprecationWarningIssues'], diff --git a/lib/workers/repository/process/extract-update.ts b/lib/workers/repository/process/extract-update.ts index 9805cdcc6fecc0..e806b545281090 100644 --- a/lib/workers/repository/process/extract-update.ts +++ b/lib/workers/repository/process/extract-update.ts @@ -2,7 +2,7 @@ import is from '@sindresorhus/is'; import type { RenovateConfig } from '../../../config/types'; import { logger } from '../../../logger'; import { hashMap } from '../../../modules/manager'; -import type { PackageFileContent } from '../../../modules/manager/types'; +import type { PackageFile } from '../../../modules/manager/types'; import { getCache } from '../../../util/cache/repository'; import type { BaseBranchCache } from '../../../util/cache/repository/types'; import { checkGithubToken as ensureGithubToken } from '../../../util/check-token'; @@ -21,7 +21,7 @@ import { WriteUpdateResult, writeUpdates } from './write'; export interface ExtractResult { branches: BranchConfig[]; branchList: string[]; - packageFiles: Record; + packageFiles: Record; } export interface StatsResult { @@ -36,7 +36,7 @@ export interface Stats { // istanbul ignore next function extractStats( - packageFiles: Record + packageFiles: Record ): Stats | null { if (!packageFiles) { return null; @@ -111,11 +111,11 @@ export function isCacheExtractValid( export async function extract( config: RenovateConfig -): Promise> { +): Promise> { logger.debug('extract()'); const { baseBranch } = config; const baseBranchSha = getBranchCommit(baseBranch!); - let packageFiles: Record; + let packageFiles: Record; const cache = getCache(); cache.scan ||= {}; const cachedExtract = cache.scan[baseBranch!]; @@ -169,7 +169,7 @@ export async function extract( async function fetchVulnerabilities( config: RenovateConfig, - packageFiles: Record + packageFiles: Record ): Promise { if (config.osvVulnerabilityAlerts) { try { @@ -183,7 +183,7 @@ async function fetchVulnerabilities( export async function lookup( config: RenovateConfig, - packageFiles: Record + packageFiles: Record ): Promise { await fetchVulnerabilities(config, packageFiles); await fetchUpdates(config, packageFiles); diff --git a/lib/workers/repository/process/fetch.spec.ts b/lib/workers/repository/process/fetch.spec.ts index 450f0cf5979806..6b033fd1ba4a0c 100644 --- a/lib/workers/repository/process/fetch.spec.ts +++ b/lib/workers/repository/process/fetch.spec.ts @@ -1,6 +1,6 @@ import { RenovateConfig, getConfig, mocked } from '../../../../test/util'; import { MavenDatasource } from '../../../modules/datasource/maven'; -import type { PackageFileContent } from '../../../modules/manager/types'; +import type { PackageFile } from '../../../modules/manager/types'; import { ExternalHostError } from '../../../types/errors/external-host-error'; import { fetchUpdates } from './fetch'; import * as lookup from './lookup'; @@ -19,7 +19,7 @@ describe('workers/repository/process/fetch', () => { }); it('handles empty deps', async () => { - const packageFiles: Record = { + const packageFiles: Record = { npm: [{ packageFile: 'package.json', deps: [] }], }; await fetchUpdates(config, packageFiles); @@ -36,7 +36,7 @@ describe('workers/repository/process/fetch', () => { enabled: false, }, ]; - const packageFiles: Record = { + const packageFiles: Record = { npm: [ { packageFile: 'package.json', @@ -73,7 +73,7 @@ describe('workers/repository/process/fetch', () => { }); it('skips deps with empty names', async () => { - const packageFiles: Record = { + const packageFiles: Record = { docker: [ { packageFile: 'values.yaml', @@ -100,7 +100,7 @@ describe('workers/repository/process/fetch', () => { }); it('skips internal deps by default', async () => { - const packageFiles: Record = { + const packageFiles: Record = { docker: [ { packageFile: 'values.yaml', diff --git a/lib/workers/repository/process/fetch.ts b/lib/workers/repository/process/fetch.ts index 8aedd3832a3c18..6d46cb4402ee98 100644 --- a/lib/workers/repository/process/fetch.ts +++ b/lib/workers/repository/process/fetch.ts @@ -9,7 +9,7 @@ import { } from '../../../modules/datasource'; import type { PackageDependency, - PackageFileContent, + PackageFile, } from '../../../modules/manager/types'; import { ExternalHostError } from '../../../types/errors/external-host-error'; import { clone } from '../../../util/clone'; @@ -20,7 +20,7 @@ import { lookupUpdates } from './lookup'; import type { LookupUpdateConfig } from './lookup/types'; async function fetchDepUpdates( - packageFileConfig: RenovateConfig & PackageFileContent, + packageFileConfig: RenovateConfig & PackageFile, indep: PackageDependency ): Promise { let dep = clone(indep); @@ -83,7 +83,7 @@ async function fetchDepUpdates( async function fetchManagerPackagerFileUpdates( config: RenovateConfig, managerConfig: RenovateConfig, - pFile: PackageFileContent + pFile: PackageFile ): Promise { const { packageFile } = pFile; if (pFile.extractedConstraints) { @@ -110,7 +110,7 @@ async function fetchManagerPackagerFileUpdates( async function fetchManagerUpdates( config: RenovateConfig, - packageFiles: Record, + packageFiles: Record, manager: string ): Promise { const managerConfig = getManagerConfig(config, manager); @@ -128,7 +128,7 @@ async function fetchManagerUpdates( export async function fetchUpdates( config: RenovateConfig, - packageFiles: Record + packageFiles: Record ): Promise { const managers = Object.keys(packageFiles); const allManagerJobs = managers.map((manager) => diff --git a/lib/workers/repository/process/index.ts b/lib/workers/repository/process/index.ts index b65a2d664648c6..b1cd6d8ae49304 100644 --- a/lib/workers/repository/process/index.ts +++ b/lib/workers/repository/process/index.ts @@ -4,7 +4,7 @@ import { GlobalConfig } from '../../../config/global'; import type { RenovateConfig } from '../../../config/types'; import { CONFIG_VALIDATION } from '../../../constants/error-messages'; import { addMeta, logger, removeMeta } from '../../../logger'; -import type { PackageFileContent } from '../../../modules/manager/types'; +import type { PackageFile } from '../../../modules/manager/types'; import { platform } from '../../../modules/platform'; import { getCache } from '../../../util/cache/repository'; import { clone } from '../../../util/clone'; @@ -92,7 +92,7 @@ export async function extractDependencies( }; if (config.baseBranches?.length) { logger.debug({ baseBranches: config.baseBranches }, 'baseBranches'); - const extracted: Record> = {}; + const extracted: Record> = {}; for (const baseBranch of config.baseBranches) { addMeta({ baseBranch }); if (branchExists(baseBranch)) { diff --git a/lib/workers/repository/process/vulnerabilities.spec.ts b/lib/workers/repository/process/vulnerabilities.spec.ts index c5e1da3c67271f..2c0d9f74f17a1a 100644 --- a/lib/workers/repository/process/vulnerabilities.spec.ts +++ b/lib/workers/repository/process/vulnerabilities.spec.ts @@ -2,7 +2,7 @@ import type { Osv, OsvOffline } from '@renovatebot/osv-offline'; import { codeBlock } from 'common-tags'; import { mockFn } from 'jest-mock-extended'; import { RenovateConfig, getConfig, logger } from '../../../../test/util'; -import type { PackageFileContent } from '../../../modules/manager/types'; +import type { PackageFile } from '../../../modules/manager/types'; import { Vulnerabilities } from './vulnerabilities'; const getVulnerabilitiesMock = @@ -71,8 +71,13 @@ describe('workers/repository/process/vulnerabilities', () => { }); it('unsupported datasource', async () => { - const packageFiles: Record = { - dockerfile: [{ deps: [{ depName: 'node', datasource: 'docker' }] }], + const packageFiles: Record = { + dockerfile: [ + { + deps: [{ depName: 'node', datasource: 'docker' }], + packageFile: 'some-file', + }, + ], }; await vulnerabilities.fetchVulnerabilities(config, packageFiles); @@ -82,8 +87,13 @@ describe('workers/repository/process/vulnerabilities', () => { }); it('package found but no vulnerabilities', async () => { - const packageFiles: Record = { - npm: [{ deps: [{ depName: 'lodash', datasource: 'npm' }] }], + const packageFiles: Record = { + npm: [ + { + deps: [{ depName: 'lodash', datasource: 'npm' }], + packageFile: 'some-file', + }, + ], }; getVulnerabilitiesMock.mockResolvedValueOnce([]); @@ -94,12 +104,13 @@ describe('workers/repository/process/vulnerabilities', () => { }); it('vulnerability without affected field', async () => { - const packageFiles: Record = { + const packageFiles: Record = { npm: [ { deps: [ { depName: 'lodash', currentValue: '4.17.11', datasource: 'npm' }, ], + packageFile: 'some-file', }, ], }; @@ -115,7 +126,7 @@ describe('workers/repository/process/vulnerabilities', () => { }); it('invalid dep version', async () => { - const packageFiles: Record = { + const packageFiles: Record = { npm: [ { deps: [ @@ -125,6 +136,7 @@ describe('workers/repository/process/vulnerabilities', () => { datasource: 'npm', }, ], + packageFile: 'some-file', }, ], }; @@ -138,9 +150,10 @@ describe('workers/repository/process/vulnerabilities', () => { it('exception while fetching vulnerabilities', async () => { const err = new Error('unknown'); - const packageFiles: Record = { + const packageFiles: Record = { npm: [ { + packageFile: 'some-file', deps: [ { depName: 'lodash', @@ -162,7 +175,7 @@ describe('workers/repository/process/vulnerabilities', () => { it('log event with invalid version', async () => { const event = { fixed: '^6.0' }; - const packageFiles: Record = { + const packageFiles: Record = { npm: [ { deps: [ @@ -172,6 +185,7 @@ describe('workers/repository/process/vulnerabilities', () => { datasource: 'npm', }, ], + packageFile: 'some-file', }, ], }; @@ -205,12 +219,13 @@ describe('workers/repository/process/vulnerabilities', () => { }); it('no version or range affected', async () => { - const packageFiles: Record = { + const packageFiles: Record = { npm: [ { deps: [ { depName: 'fake', currentValue: '4.17.11', datasource: 'npm' }, ], + packageFile: 'some-file', }, ], }; @@ -231,12 +246,13 @@ describe('workers/repository/process/vulnerabilities', () => { }); it('no fixed version available', async () => { - const packageFiles: Record = { + const packageFiles: Record = { npm: [ { deps: [ { depName: 'fake', currentValue: '4.17.11', datasource: 'npm' }, ], + packageFile: 'some-file', }, ], }; @@ -260,12 +276,13 @@ describe('workers/repository/process/vulnerabilities', () => { }); it('does not accidentally downgrade versions due to fixed version for other range', async () => { - const packageFiles: Record = { + const packageFiles: Record = { npm: [ { deps: [ { depName: 'fake', currentValue: '1.5.1', datasource: 'npm' }, ], + packageFile: 'some-file', }, ], }; @@ -298,12 +315,13 @@ describe('workers/repository/process/vulnerabilities', () => { }); it('vulnerability with multiple unsorted events', async () => { - const packageFiles: Record = { + const packageFiles: Record = { gomod: [ { deps: [ { depName: 'stdlib', currentValue: '1.7.5', datasource: 'go' }, ], + packageFile: 'some-file', }, ], }; @@ -356,12 +374,13 @@ describe('workers/repository/process/vulnerabilities', () => { }); it('vulnerability with multiple affected entries and version ranges', async () => { - const packageFiles: Record = { + const packageFiles: Record = { poetry: [ { deps: [ { depName: 'django', currentValue: '3.2', datasource: 'pypi' }, ], + packageFile: 'some-file', }, ], }; @@ -424,12 +443,13 @@ describe('workers/repository/process/vulnerabilities', () => { }); it('filters not applicable vulnerability', async () => { - const packageFiles: Record = { + const packageFiles: Record = { npm: [ { deps: [ { depName: 'lodash', currentValue: '4.17.11', datasource: 'npm' }, ], + packageFile: 'some-file', }, ], }; @@ -440,7 +460,7 @@ describe('workers/repository/process/vulnerabilities', () => { }); it('returns a single packageRule for regex manager', async () => { - const packageFiles: Record = { + const packageFiles: Record = { regex: [ { deps: [ @@ -450,6 +470,7 @@ describe('workers/repository/process/vulnerabilities', () => { datasource: 'crate', }, ], + packageFile: 'some-file', }, ], }; @@ -539,12 +560,13 @@ describe('workers/repository/process/vulnerabilities', () => { }); it('returns multiple packageRules for different vulnerabilities', async () => { - const packageFiles: Record = { + const packageFiles: Record = { npm: [ { deps: [ { depName: 'lodash', currentValue: '4.17.10', datasource: 'npm' }, ], + packageFile: 'some-file', }, ], }; @@ -595,12 +617,13 @@ describe('workers/repository/process/vulnerabilities', () => { }); it('filters not applicable vulnerability based on last_affected version', async () => { - const packageFiles: Record = { + const packageFiles: Record = { poetry: [ { deps: [ { depName: 'quokka', currentValue: '1.2.3', datasource: 'pypi' }, ], + packageFile: 'some-file', }, ], }; @@ -634,12 +657,13 @@ describe('workers/repository/process/vulnerabilities', () => { }); it('returns packageRule based on last_affected version', async () => { - const packageFiles: Record = { + const packageFiles: Record = { npm: [ { deps: [ { depName: 'lodash', currentValue: '0.5.0', datasource: 'npm' }, ], + packageFile: 'some-file', }, ], }; @@ -706,7 +730,7 @@ describe('workers/repository/process/vulnerabilities', () => { }); it('handles invalid CVSS scores gracefully', async () => { - const packageFiles: Record = { + const packageFiles: Record = { poetry: [ { deps: [ @@ -716,6 +740,7 @@ describe('workers/repository/process/vulnerabilities', () => { datasource: 'pypi', }, ], + packageFile: 'some-file', }, ], }; @@ -785,12 +810,13 @@ describe('workers/repository/process/vulnerabilities', () => { }); it('show severity text in GHSA advisories without CVSS score', async () => { - const packageFiles: Record = { + const packageFiles: Record = { npm: [ { deps: [ { depName: 'lodash', currentValue: '4.17.10', datasource: 'npm' }, ], + packageFile: 'some-file', }, ], }; @@ -842,7 +868,7 @@ describe('workers/repository/process/vulnerabilities', () => { }); it('formats headings of vulnerability details', async () => { - const packageFiles: Record = { + const packageFiles: Record = { regex: [ { deps: [ @@ -852,6 +878,7 @@ describe('workers/repository/process/vulnerabilities', () => { datasource: 'crate', }, ], + packageFile: 'some-file', }, ], }; diff --git a/lib/workers/repository/process/vulnerabilities.ts b/lib/workers/repository/process/vulnerabilities.ts index 8c0375e7a2bb8b..0e903e0a818045 100644 --- a/lib/workers/repository/process/vulnerabilities.ts +++ b/lib/workers/repository/process/vulnerabilities.ts @@ -9,7 +9,7 @@ import { logger } from '../../../logger'; import { getDefaultVersioning } from '../../../modules/datasource'; import type { PackageDependency, - PackageFileContent, + PackageFile, } from '../../../modules/manager/types'; import { VersioningApi, @@ -52,7 +52,7 @@ export class Vulnerabilities { async fetchVulnerabilities( config: RenovateConfig, - packageFiles: Record + packageFiles: Record ): Promise { const managers = Object.keys(packageFiles); const allManagerJobs = managers.map((manager) => @@ -63,7 +63,7 @@ export class Vulnerabilities { private async fetchManagerVulnerabilities( config: RenovateConfig, - packageFiles: Record, + packageFiles: Record, manager: string ): Promise { const managerConfig = getManagerConfig(config, manager); @@ -86,7 +86,7 @@ export class Vulnerabilities { private async fetchManagerPackageFileVulnerabilities( config: RenovateConfig, managerConfig: RenovateConfig, - pFile: PackageFileContent + pFile: PackageFile ): Promise { const { packageFile } = pFile; const packageFileConfig = mergeChildConfig(managerConfig, pFile); @@ -108,7 +108,7 @@ export class Vulnerabilities { } private async fetchDependencyVulnerabilities( - packageFileConfig: RenovateConfig & PackageFileContent, + packageFileConfig: RenovateConfig & PackageFile, dep: PackageDependency ): Promise { const ecosystem = Vulnerabilities.datasourceEcosystemMap[dep.datasource!]; @@ -403,7 +403,7 @@ export class Vulnerabilities { } private convertToPackageRule( - packageFileConfig: RenovateConfig & PackageFileContent, + packageFileConfig: RenovateConfig & PackageFile, dep: PackageDependency, packageName: string, depVersion: string, diff --git a/lib/workers/repository/update/pr/body/index.spec.ts b/lib/workers/repository/update/pr/body/index.spec.ts index 35d316c3b08903..46004205fe594e 100644 --- a/lib/workers/repository/update/pr/body/index.spec.ts +++ b/lib/workers/repository/update/pr/body/index.spec.ts @@ -1,5 +1,5 @@ import { mocked, platform } from '../../../../../../test/util'; -import type { PackageFileContent } from '../../../../../modules/manager/types'; +import type { PackageFile } from '../../../../../modules/manager/types'; import { prDebugDataRe } from '../../../../../modules/platform/pr-body'; import * as _template from '../../../../../util/template'; import * as _changelogs from './changelogs'; @@ -220,7 +220,7 @@ describe('workers/repository/update/pr/body/index', () => { platform.massageMarkdown.mockImplementation((x) => massagedMarkDown); template.compile.mockImplementation((x) => compiledContent); - const packageFiles: Record = { + const packageFiles: Record = { npm: [ { packageFile: 'package.json', diff --git a/lib/workers/types.ts b/lib/workers/types.ts index 9f898a603ba433..8236081cb5cd44 100644 --- a/lib/workers/types.ts +++ b/lib/workers/types.ts @@ -12,7 +12,7 @@ import type { ExtractConfig, LookupUpdate, PackageDependency, - PackageFileContent, + PackageFile, } from '../modules/manager/types'; import type { PlatformPrOptions } from '../modules/platform/types'; import type { FileChange } from '../util/git/types'; @@ -118,7 +118,7 @@ export interface BranchConfig rebaseRequested?: boolean; result?: BranchResult; upgrades: BranchUpgradeConfig[]; - packageFiles?: Record; + packageFiles?: Record; prBlockedBy?: PrBlockedBy; prNo?: number; stopUpdating?: boolean; @@ -189,5 +189,5 @@ export interface UpgradeFingerprintConfig { export interface ExtractResult { extractionFingerprints: Record; - packageFiles: Record; + packageFiles: Record; }