From 5cdb9a86f05040f1c070826e0d95929fcc6b69d8 Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Sat, 18 Feb 2023 16:06:03 +0100 Subject: [PATCH] refactor: move manager fields to managerData (#20486) --- .../maven/__snapshots__/index.spec.ts.snap | 2 - lib/modules/manager/maven/extract.ts | 14 +- lib/modules/manager/maven/index.spec.ts | 7 - .../extract/__snapshots__/index.spec.ts.snap | 250 +++++++++--------- .../__snapshots__/monorepo.spec.ts.snap | 86 +++--- .../extract/__snapshots__/pnpm.spec.ts.snap | 64 +++-- lib/modules/manager/npm/extract/index.spec.ts | 42 ++- lib/modules/manager/npm/extract/index.ts | 23 +- .../npm/extract/locked-versions.spec.ts | 75 ++++-- .../manager/npm/extract/locked-versions.ts | 6 +- .../manager/npm/extract/monorepo.spec.ts | 54 ++-- lib/modules/manager/npm/extract/monorepo.ts | 32 +-- lib/modules/manager/npm/extract/pnpm.spec.ts | 84 +++--- lib/modules/manager/npm/extract/pnpm.ts | 9 +- .../manager/npm/post-update/index.spec.ts | 56 ++-- lib/modules/manager/npm/post-update/index.ts | 80 ++++-- .../manager/npm/post-update/lerna.spec.ts | 4 +- lib/modules/manager/npm/post-update/lerna.ts | 10 +- lib/modules/manager/npm/post-update/types.ts | 3 +- lib/modules/manager/npm/types.ts | 15 +- lib/modules/manager/types.ts | 26 +- 21 files changed, 539 insertions(+), 403 deletions(-) diff --git a/lib/modules/manager/maven/__snapshots__/index.spec.ts.snap b/lib/modules/manager/maven/__snapshots__/index.spec.ts.snap index 38ea4b5feb..2394584350 100644 --- a/lib/modules/manager/maven/__snapshots__/index.spec.ts.snap +++ b/lib/modules/manager/maven/__snapshots__/index.spec.ts.snap @@ -33,7 +33,6 @@ exports[`modules/manager/maven/index updateDependency should include registryUrl }, ], "packageFile": "parent.pom.xml", - "parent": "child.pom.xml", }, { "datasource": "maven", @@ -188,7 +187,6 @@ exports[`modules/manager/maven/index updateDependency should include registryUrl ], "packageFile": "child.pom.xml", "packageFileVersion": "0.0.1", - "parent": "parent.pom.xml", }, ] `; diff --git a/lib/modules/manager/maven/extract.ts b/lib/modules/manager/maven/extract.ts index c83842f3ae..c43c88d25b 100644 --- a/lib/modules/manager/maven/extract.ts +++ b/lib/modules/manager/maven/extract.ts @@ -245,6 +245,11 @@ function resolveParentFile(packageFile: string, parentPath: string): string { return upath.normalize(upath.join(dir, parentDir, parentFile)); } +interface MavenInterimPackageFile extends PackageFile { + mavenProps?: Record<string, any>; + parent?: string; +} + export function extractPackage( rawContent: string, packageFile: string | null = null @@ -258,7 +263,7 @@ export function extractPackage( return null; } - const result: PackageFile = { + const result: MavenInterimPackageFile = { datasource: MavenDatasource.id, packageFile, deps: [], @@ -366,7 +371,7 @@ export function parseSettings(raw: string): XmlDocument | null { export function resolveParents(packages: PackageFile[]): PackageFile[] { const packageFileNames: string[] = []; - const extractedPackages: Record<string, PackageFile> = {}; + const extractedPackages: Record<string, MavenInterimPackageFile> = {}; const extractedDeps: Record<string, PackageDependency[]> = {}; const extractedProps: Record<string, MavenProp> = {}; const registryUrls: Record<string, Set<string>> = {}; @@ -384,7 +389,7 @@ export function resolveParents(packages: PackageFile[]): PackageFile[] { registryUrls[name] = new Set(); const propsHierarchy: Record<string, MavenProp>[] = []; const visitedPackages: Set<string> = new Set(); - let pkg: PackageFile | null = extractedPackages[name]; + let pkg: MavenInterimPackageFile | null = extractedPackages[name]; while (pkg) { propsHierarchy.unshift(pkg.mavenProps!); @@ -450,10 +455,11 @@ export function resolveParents(packages: PackageFile[]): PackageFile[] { } function cleanResult( - packageFiles: PackageFile<Record<string, any>>[] + packageFiles: MavenInterimPackageFile[] ): PackageFile<Record<string, any>>[] { packageFiles.forEach((packageFile) => { delete packageFile.mavenProps; + delete packageFile.parent; packageFile.deps.forEach((dep) => { delete dep.propSource; }); diff --git a/lib/modules/manager/maven/index.spec.ts b/lib/modules/manager/maven/index.spec.ts index 3040bfaccf..d03c0b169d 100644 --- a/lib/modules/manager/maven/index.spec.ts +++ b/lib/modules/manager/maven/index.spec.ts @@ -55,12 +55,6 @@ describe('modules/manager/maven/index', () => { it('should return package files info', async () => { fs.readLocalFile.mockResolvedValueOnce(pomContent); const packages = await extractAllPackageFiles({}, ['random.pom.xml']); - // windows path fix - for (const p of packages) { - if (p.parent) { - p.parent = p.parent.replace(/\\/g, '/'); - } - } expect(packages).toMatchObject([ { deps: [ @@ -129,7 +123,6 @@ describe('modules/manager/maven/index', () => { }, ], packageFile: 'random.pom.xml', - parent: '../pom.xml', }, ]); }); diff --git a/lib/modules/manager/npm/extract/__snapshots__/index.spec.ts.snap b/lib/modules/manager/npm/extract/__snapshots__/index.spec.ts.snap index 96a7667e98..668bbac7b8 100644 --- a/lib/modules/manager/npm/extract/__snapshots__/index.spec.ts.snap +++ b/lib/modules/manager/npm/extract/__snapshots__/index.spec.ts.snap @@ -11,21 +11,21 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() catches invalid }, ], "extractedConstraints": {}, - "lernaClient": undefined, - "lernaPackages": undefined, "managerData": { "hasPackageManager": false, + "lernaClient": undefined, "lernaJsonFile": undefined, + "lernaPackages": undefined, + "npmLock": undefined, + "packageJsonName": undefined, + "pnpmShrinkwrap": undefined, + "workspacesPackages": undefined, + "yarnLock": undefined, "yarnZeroInstall": false, }, - "npmLock": undefined, "npmrc": undefined, "packageFileVersion": undefined, - "packageJsonName": undefined, - "pnpmShrinkwrap": undefined, "skipInstalls": true, - "workspacesPackages": undefined, - "yarnLock": undefined, } `; @@ -132,21 +132,21 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() extracts engine "vscode": ">=1.49.3", "yarn": "disabled", }, - "lernaClient": undefined, - "lernaPackages": undefined, "managerData": { "hasPackageManager": false, + "lernaClient": undefined, "lernaJsonFile": undefined, + "lernaPackages": undefined, + "npmLock": undefined, + "packageJsonName": undefined, + "pnpmShrinkwrap": undefined, + "workspacesPackages": undefined, + "yarnLock": undefined, "yarnZeroInstall": false, }, - "npmLock": undefined, "npmrc": undefined, "packageFileVersion": undefined, - "packageJsonName": undefined, - "pnpmShrinkwrap": undefined, "skipInstalls": true, - "workspacesPackages": undefined, - "yarnLock": undefined, } `; @@ -312,21 +312,21 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() extracts non-np }, ], "extractedConstraints": {}, - "lernaClient": undefined, - "lernaPackages": undefined, "managerData": { "hasPackageManager": false, + "lernaClient": undefined, "lernaJsonFile": undefined, + "lernaPackages": undefined, + "npmLock": undefined, + "packageJsonName": undefined, + "pnpmShrinkwrap": undefined, + "workspacesPackages": undefined, + "yarnLock": undefined, "yarnZeroInstall": false, }, - "npmLock": undefined, "npmrc": undefined, "packageFileVersion": undefined, - "packageJsonName": undefined, - "pnpmShrinkwrap": undefined, "skipInstalls": true, - "workspacesPackages": undefined, - "yarnLock": undefined, } `; @@ -361,21 +361,21 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() extracts npm pa }, ], "extractedConstraints": {}, - "lernaClient": undefined, - "lernaPackages": undefined, "managerData": { "hasPackageManager": false, + "lernaClient": undefined, "lernaJsonFile": undefined, + "lernaPackages": undefined, + "npmLock": "package-lock.json", + "packageJsonName": undefined, + "pnpmShrinkwrap": undefined, + "workspacesPackages": undefined, + "yarnLock": undefined, "yarnZeroInstall": false, }, - "npmLock": "package-lock.json", "npmrc": undefined, "packageFileVersion": undefined, - "packageJsonName": undefined, - "pnpmShrinkwrap": undefined, "skipInstalls": false, - "workspacesPackages": undefined, - "yarnLock": undefined, } `; @@ -395,21 +395,21 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() extracts packag "extractedConstraints": { "yarn": "3.0.0", }, - "lernaClient": undefined, - "lernaPackages": undefined, "managerData": { "hasPackageManager": true, + "lernaClient": undefined, "lernaJsonFile": undefined, + "lernaPackages": undefined, + "npmLock": undefined, + "packageJsonName": undefined, + "pnpmShrinkwrap": undefined, + "workspacesPackages": undefined, + "yarnLock": undefined, "yarnZeroInstall": false, }, - "npmLock": undefined, "npmrc": undefined, "packageFileVersion": undefined, - "packageJsonName": undefined, - "pnpmShrinkwrap": undefined, "skipInstalls": true, - "workspacesPackages": undefined, - "yarnLock": undefined, } `; @@ -462,21 +462,21 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() extracts volta "extractedConstraints": { "node": "8.9.2", }, - "lernaClient": undefined, - "lernaPackages": undefined, "managerData": { "hasPackageManager": false, + "lernaClient": undefined, "lernaJsonFile": undefined, + "lernaPackages": undefined, + "npmLock": undefined, + "packageJsonName": undefined, + "pnpmShrinkwrap": undefined, + "workspacesPackages": undefined, + "yarnLock": undefined, "yarnZeroInstall": false, }, - "npmLock": undefined, "npmrc": undefined, "packageFileVersion": undefined, - "packageJsonName": undefined, - "pnpmShrinkwrap": undefined, "skipInstalls": true, - "workspacesPackages": undefined, - "yarnLock": undefined, } `; @@ -516,21 +516,21 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() extracts volta "extractedConstraints": { "node": "8.9.2", }, - "lernaClient": undefined, - "lernaPackages": undefined, "managerData": { "hasPackageManager": false, + "lernaClient": undefined, "lernaJsonFile": undefined, + "lernaPackages": undefined, + "npmLock": undefined, + "packageJsonName": undefined, + "pnpmShrinkwrap": undefined, + "workspacesPackages": undefined, + "yarnLock": undefined, "yarnZeroInstall": false, }, - "npmLock": undefined, "npmrc": undefined, "packageFileVersion": undefined, - "packageJsonName": undefined, - "pnpmShrinkwrap": undefined, "skipInstalls": true, - "workspacesPackages": undefined, - "yarnLock": undefined, } `; @@ -652,21 +652,21 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() finds "npmClien }, ], "extractedConstraints": {}, - "lernaClient": "npm", - "lernaPackages": undefined, "managerData": { "hasPackageManager": false, + "lernaClient": "npm", "lernaJsonFile": "lerna.json", + "lernaPackages": undefined, + "npmLock": undefined, + "packageJsonName": "renovate", + "pnpmShrinkwrap": undefined, + "workspacesPackages": undefined, + "yarnLock": undefined, "yarnZeroInstall": false, }, - "npmLock": undefined, "npmrc": undefined, "packageFileVersion": "1.0.0", - "packageJsonName": "renovate", - "pnpmShrinkwrap": undefined, "skipInstalls": true, - "workspacesPackages": undefined, - "yarnLock": undefined, } `; @@ -788,21 +788,21 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() finds "npmClien }, ], "extractedConstraints": {}, - "lernaClient": "yarn", - "lernaPackages": undefined, "managerData": { "hasPackageManager": false, + "lernaClient": "yarn", "lernaJsonFile": "lerna.json", + "lernaPackages": undefined, + "npmLock": undefined, + "packageJsonName": "renovate", + "pnpmShrinkwrap": undefined, + "workspacesPackages": undefined, + "yarnLock": undefined, "yarnZeroInstall": false, }, - "npmLock": undefined, "npmrc": undefined, "packageFileVersion": "1.0.0", - "packageJsonName": "renovate", - "pnpmShrinkwrap": undefined, "skipInstalls": true, - "workspacesPackages": undefined, - "yarnLock": undefined, } `; @@ -924,21 +924,21 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() finds a lock fi }, ], "extractedConstraints": {}, - "lernaClient": undefined, - "lernaPackages": undefined, "managerData": { "hasPackageManager": false, + "lernaClient": undefined, "lernaJsonFile": undefined, + "lernaPackages": undefined, + "npmLock": undefined, + "packageJsonName": "renovate", + "pnpmShrinkwrap": undefined, + "workspacesPackages": undefined, + "yarnLock": "yarn.lock", "yarnZeroInstall": false, }, - "npmLock": undefined, "npmrc": undefined, "packageFileVersion": "1.0.0", - "packageJsonName": "renovate", - "pnpmShrinkwrap": undefined, "skipInstalls": true, - "workspacesPackages": undefined, - "yarnLock": "yarn.lock", } `; @@ -946,23 +946,23 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() finds complex y { "deps": [], "extractedConstraints": {}, - "lernaClient": "npm", - "lernaPackages": undefined, "managerData": { "hasPackageManager": false, + "lernaClient": "npm", "lernaJsonFile": "lerna.json", + "lernaPackages": undefined, + "npmLock": undefined, + "packageJsonName": "@a/b", + "pnpmShrinkwrap": undefined, + "workspacesPackages": [ + "packages/*", + ], + "yarnLock": undefined, "yarnZeroInstall": false, }, - "npmLock": undefined, "npmrc": undefined, "packageFileVersion": "0.0.8", - "packageJsonName": "@a/b", - "pnpmShrinkwrap": undefined, "skipInstalls": true, - "workspacesPackages": [ - "packages/*", - ], - "yarnLock": undefined, } `; @@ -1084,21 +1084,21 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() finds lerna 1`] }, ], "extractedConstraints": {}, - "lernaClient": "npm", - "lernaPackages": undefined, "managerData": { "hasPackageManager": false, + "lernaClient": "npm", "lernaJsonFile": "lerna.json", + "lernaPackages": undefined, + "npmLock": undefined, + "packageJsonName": "renovate", + "pnpmShrinkwrap": undefined, + "workspacesPackages": undefined, + "yarnLock": undefined, "yarnZeroInstall": false, }, - "npmLock": undefined, "npmrc": undefined, "packageFileVersion": "1.0.0", - "packageJsonName": "renovate", - "pnpmShrinkwrap": undefined, "skipInstalls": true, - "workspacesPackages": undefined, - "yarnLock": undefined, } `; @@ -1106,23 +1106,23 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() finds simple ya { "deps": [], "extractedConstraints": {}, - "lernaClient": "npm", - "lernaPackages": undefined, "managerData": { "hasPackageManager": false, + "lernaClient": "npm", "lernaJsonFile": "lerna.json", + "lernaPackages": undefined, + "npmLock": undefined, + "packageJsonName": "@a/b", + "pnpmShrinkwrap": undefined, + "workspacesPackages": [ + "packages/*", + ], + "yarnLock": undefined, "yarnZeroInstall": false, }, - "npmLock": undefined, "npmrc": undefined, "packageFileVersion": "0.0.8", - "packageJsonName": "@a/b", - "pnpmShrinkwrap": undefined, "skipInstalls": true, - "workspacesPackages": [ - "packages/*", - ], - "yarnLock": undefined, } `; @@ -1130,23 +1130,23 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() finds simple ya { "deps": [], "extractedConstraints": {}, - "lernaClient": undefined, - "lernaPackages": undefined, "managerData": { "hasPackageManager": false, + "lernaClient": undefined, "lernaJsonFile": undefined, + "lernaPackages": undefined, + "npmLock": undefined, + "packageJsonName": "@a/b", + "pnpmShrinkwrap": undefined, + "workspacesPackages": [ + "packages/*", + ], + "yarnLock": undefined, "yarnZeroInstall": false, }, - "npmLock": undefined, "npmrc": undefined, "packageFileVersion": "0.0.8", - "packageJsonName": "@a/b", - "pnpmShrinkwrap": undefined, "skipInstalls": true, - "workspacesPackages": [ - "packages/*", - ], - "yarnLock": undefined, } `; @@ -1268,21 +1268,21 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() returns an arra }, ], "extractedConstraints": {}, - "lernaClient": undefined, - "lernaPackages": undefined, "managerData": { "hasPackageManager": false, + "lernaClient": undefined, "lernaJsonFile": undefined, + "lernaPackages": undefined, + "npmLock": undefined, + "packageJsonName": "renovate", + "pnpmShrinkwrap": undefined, + "workspacesPackages": undefined, + "yarnLock": undefined, "yarnZeroInstall": false, }, - "npmLock": undefined, "npmrc": undefined, "packageFileVersion": "1.0.0", - "packageJsonName": "renovate", - "pnpmShrinkwrap": undefined, "skipInstalls": true, - "workspacesPackages": undefined, - "yarnLock": undefined, } `; @@ -1386,21 +1386,21 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() returns an arra }, ], "extractedConstraints": {}, - "lernaClient": undefined, - "lernaPackages": undefined, "managerData": { "hasPackageManager": false, + "lernaClient": undefined, "lernaJsonFile": undefined, + "lernaPackages": undefined, + "npmLock": undefined, + "packageJsonName": "renovate", + "pnpmShrinkwrap": undefined, + "workspacesPackages": [], + "yarnLock": undefined, "yarnZeroInstall": false, }, - "npmLock": undefined, "npmrc": undefined, "packageFileVersion": "1.0.0", - "packageJsonName": "renovate", - "pnpmShrinkwrap": undefined, "skipInstalls": true, - "workspacesPackages": [], - "yarnLock": undefined, } `; @@ -1522,20 +1522,20 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() sets skipInstal }, ], "extractedConstraints": {}, - "lernaClient": undefined, - "lernaPackages": undefined, "managerData": { "hasPackageManager": false, + "lernaClient": undefined, "lernaJsonFile": undefined, + "lernaPackages": undefined, + "npmLock": undefined, + "packageJsonName": "renovate", + "pnpmShrinkwrap": undefined, + "workspacesPackages": undefined, + "yarnLock": "yarn.lock", "yarnZeroInstall": true, }, - "npmLock": undefined, "npmrc": undefined, "packageFileVersion": "1.0.0", - "packageJsonName": "renovate", - "pnpmShrinkwrap": undefined, "skipInstalls": false, - "workspacesPackages": undefined, - "yarnLock": "yarn.lock", } `; diff --git a/lib/modules/manager/npm/extract/__snapshots__/monorepo.spec.ts.snap b/lib/modules/manager/npm/extract/__snapshots__/monorepo.spec.ts.snap index 17eb97b44f..7c1028ec44 100644 --- a/lib/modules/manager/npm/extract/__snapshots__/monorepo.spec.ts.snap +++ b/lib/modules/manager/npm/extract/__snapshots__/monorepo.spec.ts.snap @@ -19,11 +19,11 @@ exports[`modules/manager/npm/extract/monorepo .extractPackageFile() updates inte "depName": "foo", }, ], - "lernaPackages": [ - "packages/*", - ], "managerData": { "lernaJsonFile": "lerna.json", + "lernaPackages": [ + "packages/*", + ], }, "packageFile": "package.json", }, @@ -40,34 +40,34 @@ exports[`modules/manager/npm/extract/monorepo .extractPackageFile() updates inte "depName": "bar", }, ], - "hasWorkspaces": false, - "lernaClient": undefined, "managerData": { "hasPackageManager": undefined, + "hasWorkspaces": false, + "lernaClient": undefined, "lernaJsonFile": "lerna.json", + "npmLock": undefined, + "packageJsonName": "@org/a", + "yarnLock": undefined, "yarnZeroInstall": undefined, }, - "npmLock": undefined, "npmrc": undefined, "packageFile": "packages/a/package.json", - "packageJsonName": "@org/a", "skipInstalls": undefined, - "yarnLock": undefined, }, { - "hasWorkspaces": false, - "lernaClient": undefined, "managerData": { "hasPackageManager": undefined, + "hasWorkspaces": false, + "lernaClient": undefined, "lernaJsonFile": "lerna.json", + "npmLock": undefined, + "packageJsonName": "@org/b", + "yarnLock": undefined, "yarnZeroInstall": undefined, }, - "npmLock": undefined, "npmrc": undefined, "packageFile": "packages/b/package.json", - "packageJsonName": "@org/b", "skipInstalls": undefined, - "yarnLock": undefined, }, ] `; @@ -91,11 +91,11 @@ exports[`modules/manager/npm/extract/monorepo .extractPackageFile() uses lerna p "depName": "foo", }, ], - "lernaPackages": [ - "packages/*", - ], "managerData": { "lernaJsonFile": "lerna.json", + "lernaPackages": [ + "packages/*", + ], }, "packageFile": "package.json", }, @@ -112,34 +112,34 @@ exports[`modules/manager/npm/extract/monorepo .extractPackageFile() uses lerna p "depName": "bar", }, ], - "hasWorkspaces": false, - "lernaClient": undefined, "managerData": { "hasPackageManager": undefined, + "hasWorkspaces": false, + "lernaClient": undefined, "lernaJsonFile": "lerna.json", + "npmLock": undefined, + "packageJsonName": "@org/a", + "yarnLock": undefined, "yarnZeroInstall": undefined, }, - "npmLock": undefined, "npmrc": undefined, "packageFile": "packages/a/package.json", - "packageJsonName": "@org/a", "skipInstalls": undefined, - "yarnLock": undefined, }, { - "hasWorkspaces": false, - "lernaClient": undefined, "managerData": { "hasPackageManager": undefined, + "hasWorkspaces": false, + "lernaClient": undefined, "lernaJsonFile": "lerna.json", + "npmLock": undefined, + "packageJsonName": "@org/b", + "yarnLock": undefined, "yarnZeroInstall": undefined, }, - "npmLock": undefined, "npmrc": undefined, "packageFile": "packages/b/package.json", - "packageJsonName": "@org/b", "skipInstalls": undefined, - "yarnLock": undefined, }, ] `; @@ -147,47 +147,47 @@ exports[`modules/manager/npm/extract/monorepo .extractPackageFile() uses lerna p exports[`modules/manager/npm/extract/monorepo .extractPackageFile() uses yarn workspaces package settings with lerna 1`] = ` [ { - "lernaClient": "yarn", - "lernaPackages": [ - "oldpackages/*", - ], "managerData": { + "lernaClient": "yarn", "lernaJsonFile": "lerna.json", + "lernaPackages": [ + "oldpackages/*", + ], + "workspacesPackages": [ + "packages/*", + ], }, "packageFile": "package.json", - "workspacesPackages": [ - "packages/*", - ], }, { - "hasWorkspaces": true, - "lernaClient": "yarn", "managerData": { "hasPackageManager": undefined, + "hasWorkspaces": true, + "lernaClient": "yarn", "lernaJsonFile": "lerna.json", + "npmLock": undefined, + "packageJsonName": "@org/a", + "yarnLock": undefined, "yarnZeroInstall": undefined, }, - "npmLock": undefined, "npmrc": undefined, "packageFile": "packages/a/package.json", - "packageJsonName": "@org/a", "skipInstalls": undefined, - "yarnLock": undefined, }, { - "hasWorkspaces": true, - "lernaClient": "yarn", "managerData": { "hasPackageManager": undefined, + "hasWorkspaces": true, + "lernaClient": "yarn", "lernaJsonFile": "lerna.json", + "npmLock": undefined, + "packageJsonName": "@org/b", + "yarnLock": undefined, "yarnZeroInstall": undefined, }, - "npmLock": undefined, "npmrc": undefined, "packageFile": "packages/b/package.json", - "packageJsonName": "@org/b", "skipInstalls": undefined, - "yarnLock": undefined, }, ] `; diff --git a/lib/modules/manager/npm/extract/__snapshots__/pnpm.spec.ts.snap b/lib/modules/manager/npm/extract/__snapshots__/pnpm.spec.ts.snap index fe4966f730..ac47e5c085 100644 --- a/lib/modules/manager/npm/extract/__snapshots__/pnpm.spec.ts.snap +++ b/lib/modules/manager/npm/extract/__snapshots__/pnpm.spec.ts.snap @@ -3,58 +3,80 @@ exports[`modules/manager/npm/extract/pnpm .detectPnpmWorkspaces() uses pnpm workspaces 1`] = ` [ { + "managerData": { + "pnpmShrinkwrap": "pnpm-lock.yaml", + }, "packageFile": "package.json", - "pnpmShrinkwrap": "pnpm-lock.yaml", }, { + "managerData": { + "packageJsonName": "@demo/nested-group-a", + "pnpmShrinkwrap": "pnpm-lock.yaml", + }, "packageFile": "nested-packages/group/a/package.json", - "packageJsonName": "@demo/nested-group-a", - "pnpmShrinkwrap": "pnpm-lock.yaml", }, { + "managerData": { + "packageJsonName": "@demo/nested-group-b", + "pnpmShrinkwrap": "pnpm-lock.yaml", + }, "packageFile": "nested-packages/group/b/package.json", - "packageJsonName": "@demo/nested-group-b", - "pnpmShrinkwrap": "pnpm-lock.yaml", }, { + "managerData": { + "packageJsonName": "@demo/non-nested-a", + "pnpmShrinkwrap": "pnpm-lock.yaml", + }, "packageFile": "non-nested-packages/a/package.json", - "packageJsonName": "@demo/non-nested-a", - "pnpmShrinkwrap": "pnpm-lock.yaml", }, { + "managerData": { + "packageJsonName": "@demo/non-nested-b", + "pnpmShrinkwrap": "pnpm-lock.yaml", + }, "packageFile": "non-nested-packages/b/package.json", - "packageJsonName": "@demo/non-nested-b", - "pnpmShrinkwrap": "pnpm-lock.yaml", }, { + "managerData": { + "packageJsonName": "@demo/solo", + "pnpmShrinkwrap": "pnpm-lock.yaml", + }, "packageFile": "solo-package/package.json", - "packageJsonName": "@demo/solo", - "pnpmShrinkwrap": "pnpm-lock.yaml", }, { + "managerData": { + "packageJsonName": "@demo/solo-leading-dot-slash", + "pnpmShrinkwrap": "pnpm-lock.yaml", + }, "packageFile": "solo-package-leading-dot-slash/package.json", - "packageJsonName": "@demo/solo-leading-dot-slash", - "pnpmShrinkwrap": "pnpm-lock.yaml", }, { + "managerData": { + "packageJsonName": "@demo/solo-leading-double-dot-slash", + "pnpmShrinkwrap": "pnpm-lock.yaml", + }, "packageFile": "solo-package-leading-double-dot-slash/package.json", - "packageJsonName": "@demo/solo-leading-double-dot-slash", - "pnpmShrinkwrap": "pnpm-lock.yaml", }, { + "managerData": { + "packageJsonName": "@demo/solo-trailing-slash", + "pnpmShrinkwrap": "pnpm-lock.yaml", + }, "packageFile": "solo-package-trailing-slash/package.json", - "packageJsonName": "@demo/solo-trailing-slash", - "pnpmShrinkwrap": "pnpm-lock.yaml", }, { + "managerData": { + "packageJsonName": "@demo/test-package", + "pnpmShrinkwrap": "pnpm-lock.yaml", + }, "packageFile": "test/test-package/package.json", - "packageJsonName": "@demo/test-package", - "pnpmShrinkwrap": "pnpm-lock.yaml", }, { + "managerData": { + "packageJsonName": "@demo/test-package2", + "pnpmShrinkwrap": "pnpm-lock.yaml", + }, "packageFile": "tests/test-package2/package.json", - "packageJsonName": "@demo/test-package2", - "pnpmShrinkwrap": "pnpm-lock.yaml", }, ] `; diff --git a/lib/modules/manager/npm/extract/index.spec.ts b/lib/modules/manager/npm/extract/index.spec.ts index 2c468d0c61..e6672bd53f 100644 --- a/lib/modules/manager/npm/extract/index.spec.ts +++ b/lib/modules/manager/npm/extract/index.spec.ts @@ -156,7 +156,11 @@ describe('modules/manager/npm/extract/index', () => { 'package.json', defaultConfig ); - expect(res).toMatchSnapshot({ yarnLock: 'yarn.lock' }); + expect(res).toMatchSnapshot({ + managerData: { + yarnLock: 'yarn.lock', + }, + }); }); it('finds and filters .npmrc', async () => { @@ -280,9 +284,11 @@ describe('modules/manager/npm/extract/index', () => { defaultConfig ); expect(res).toMatchSnapshot({ - lernaClient: 'npm', - lernaPackages: undefined, - managerData: { lernaJsonFile: 'lerna.json' }, + managerData: { + lernaClient: 'npm', + lernaJsonFile: 'lerna.json', + lernaPackages: undefined, + }, }); }); @@ -299,9 +305,11 @@ describe('modules/manager/npm/extract/index', () => { defaultConfig ); expect(res).toMatchSnapshot({ - lernaClient: 'npm', - lernaPackages: undefined, - managerData: { lernaJsonFile: 'lerna.json' }, + managerData: { + lernaClient: 'npm', + lernaJsonFile: 'lerna.json', + lernaPackages: undefined, + }, }); }); @@ -318,9 +326,11 @@ describe('modules/manager/npm/extract/index', () => { defaultConfig ); expect(res).toMatchSnapshot({ - lernaClient: 'yarn', - lernaPackages: undefined, - managerData: { lernaJsonFile: 'lerna.json' }, + managerData: { + lernaClient: 'yarn', + lernaJsonFile: 'lerna.json', + lernaPackages: undefined, + }, }); }); @@ -336,7 +346,9 @@ describe('modules/manager/npm/extract/index', () => { 'package.json', defaultConfig ); - expect(res).toMatchSnapshot({ workspacesPackages: ['packages/*'] }); + expect(res).toMatchSnapshot({ + managerData: { workspacesPackages: ['packages/*'] }, + }); }); it('finds simple yarn workspaces with lerna.json and useWorkspaces: true', async () => { @@ -351,7 +363,9 @@ describe('modules/manager/npm/extract/index', () => { 'package.json', defaultConfig ); - expect(res).toMatchSnapshot({ workspacesPackages: ['packages/*'] }); + expect(res).toMatchSnapshot({ + managerData: { workspacesPackages: ['packages/*'] }, + }); }); it('finds complex yarn workspaces', async () => { @@ -366,7 +380,9 @@ describe('modules/manager/npm/extract/index', () => { 'package.json', defaultConfig ); - expect(res).toMatchSnapshot({ workspacesPackages: ['packages/*'] }); + expect(res).toMatchSnapshot({ + managerData: { workspacesPackages: ['packages/*'] }, + }); }); it('extracts engines', async () => { diff --git a/lib/modules/manager/npm/extract/index.ts b/lib/modules/manager/npm/extract/index.ts index d84f3eeee1..bf894685c7 100644 --- a/lib/modules/manager/npm/extract/index.ts +++ b/lib/modules/manager/npm/extract/index.ts @@ -11,11 +11,10 @@ import * as nodeVersioning from '../../../versioning/node'; import { api, isValid, isVersion } from '../../../versioning/npm'; import type { ExtractConfig, - NpmLockFiles, PackageDependency, PackageFile, } from '../../types'; -import type { NpmManagerData } from '../types'; +import type { NpmLockFiles, NpmManagerData } from '../types'; import { getLockedVersions } from './locked-versions'; import { detectMonorepos } from './monorepo'; import type { NpmPackage, NpmPackageDependency } from './types'; @@ -483,26 +482,28 @@ export async function extractPackageFile( return { deps, - packageJsonName, packageFileVersion, npmrc, - ...lockFiles, managerData: { + ...lockFiles, + lernaClient, lernaJsonFile, + lernaPackages, + packageJsonName, yarnZeroInstall, hasPackageManager: is.nonEmptyStringAndNotWhitespace( packageJson.packageManager ), + workspacesPackages, }, - lernaClient, - lernaPackages, skipInstalls, - workspacesPackages, extractedConstraints, }; } -export async function postExtract(packageFiles: PackageFile[]): Promise<void> { +export async function postExtract( + packageFiles: PackageFile<NpmManagerData>[] +): Promise<void> { await detectMonorepos(packageFiles); await getLockedVersions(packageFiles); } @@ -510,8 +511,8 @@ export async function postExtract(packageFiles: PackageFile[]): Promise<void> { export async function extractAllPackageFiles( config: ExtractConfig, packageFiles: string[] -): Promise<PackageFile[]> { - const npmFiles: PackageFile[] = []; +): Promise<PackageFile<NpmManagerData>[]> { + const npmFiles: PackageFile<NpmManagerData>[] = []; for (const packageFile of packageFiles) { const content = await readLocalFile(packageFile, 'utf8'); // istanbul ignore else @@ -532,7 +533,7 @@ export async function extractAllPackageFiles( return npmFiles; } -function setNodeCommitTopic(dep: NpmManagerData): void { +function setNodeCommitTopic(dep: PackageDependency<NpmManagerData>): void { // This is a special case for Node.js to group it together with other managers if (dep.depName === 'node') { dep.commitMessageTopic = 'Node.js'; diff --git a/lib/modules/manager/npm/extract/locked-versions.spec.ts b/lib/modules/manager/npm/extract/locked-versions.spec.ts index 08e7e13e56..095a0f6d5f 100644 --- a/lib/modules/manager/npm/extract/locked-versions.spec.ts +++ b/lib/modules/manager/npm/extract/locked-versions.spec.ts @@ -1,4 +1,5 @@ import type { PackageFile } from '../../types'; +import type { NpmManagerData } from '../types'; import { getLockedVersions } from './locked-versions'; /** @type any */ @@ -11,11 +12,12 @@ jest.mock('./yarn'); describe('modules/manager/npm/extract/locked-versions', () => { describe('.getLockedVersions()', () => { - function getPackageFiles(yarnVersion: string): PackageFile[] { + function getPackageFiles( + yarnVersion: string + ): PackageFile<NpmManagerData>[] { return [ { - npmLock: 'package-lock.json', - yarnLock: 'yarn.lock', + managerData: { npmLock: 'package-lock.json', yarnLock: 'yarn.lock' }, extractedConstraints: {}, deps: [ { depName: 'a', currentValue: '1.0.0' }, @@ -72,8 +74,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { }, ], lockFiles: ['yarn.lock'], - npmLock: 'package-lock.json', - yarnLock: 'yarn.lock', + managerData: { npmLock: 'package-lock.json', yarnLock: 'yarn.lock' }, }, ]); }); @@ -119,8 +120,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { }, ], lockFiles: ['yarn.lock'], - npmLock: 'package-lock.json', - yarnLock: 'yarn.lock', + managerData: { npmLock: 'package-lock.json', yarnLock: 'yarn.lock' }, }, ]); }); @@ -166,8 +166,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { }, ], lockFiles: ['yarn.lock'], - npmLock: 'package-lock.json', - yarnLock: 'yarn.lock', + managerData: { npmLock: 'package-lock.json', yarnLock: 'yarn.lock' }, }, ]); }); @@ -205,8 +204,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { }, ], lockFiles: ['yarn.lock'], - npmLock: 'package-lock.json', - yarnLock: 'yarn.lock', + managerData: { npmLock: 'package-lock.json', yarnLock: 'yarn.lock' }, }, ]); }); @@ -245,8 +243,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { }, ], lockFiles: ['yarn.lock'], - npmLock: 'package-lock.json', - yarnLock: 'yarn.lock', + managerData: { npmLock: 'package-lock.json', yarnLock: 'yarn.lock' }, }, ]); }); @@ -258,7 +255,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { }); const packageFiles = [ { - npmLock: 'package-lock.json', + managerData: { npmLock: 'package-lock.json' }, extractedConstraints: {}, deps: [ { depName: 'a', currentValue: '1.0.0' }, @@ -275,7 +272,7 @@ describe('modules/manager/npm/extract/locked-versions', () => { { currentValue: '2.0.0', depName: 'b', lockedVersion: '2.0.0' }, ], lockFiles: ['package-lock.json'], - npmLock: 'package-lock.json', + managerData: { npmLock: 'package-lock.json' }, }, ]); }); @@ -287,7 +284,9 @@ describe('modules/manager/npm/extract/locked-versions', () => { }); const packageFiles = [ { - npmLock: 'package-lock.json', + managerData: { + npmLock: 'package-lock.json', + }, extractedConstraints: {}, deps: [ { depName: 'a', currentValue: '1.0.0' }, @@ -306,7 +305,9 @@ describe('modules/manager/npm/extract/locked-versions', () => { { currentValue: '2.0.0', depName: 'b', lockedVersion: '2.0.0' }, ], lockFiles: ['package-lock.json'], - npmLock: 'package-lock.json', + managerData: { + npmLock: 'package-lock.json', + }, }, ]); }); @@ -318,7 +319,9 @@ describe('modules/manager/npm/extract/locked-versions', () => { }); const packageFiles = [ { - npmLock: 'package-lock.json', + managerData: { + npmLock: 'package-lock.json', + }, extractedConstraints: { npm: '>=7.0.0', }, @@ -339,7 +342,9 @@ describe('modules/manager/npm/extract/locked-versions', () => { { currentValue: '2.0.0', depName: 'b', lockedVersion: '2.0.0' }, ], lockFiles: ['package-lock.json'], - npmLock: 'package-lock.json', + managerData: { + npmLock: 'package-lock.json', + }, }, ]); }); @@ -351,7 +356,9 @@ describe('modules/manager/npm/extract/locked-versions', () => { }); const packageFiles = [ { - npmLock: 'package-lock.json', + managerData: { + npmLock: 'package-lock.json', + }, extractedConstraints: { npm: '>=9.0.0', }, @@ -372,7 +379,9 @@ describe('modules/manager/npm/extract/locked-versions', () => { { currentValue: '2.0.0', depName: 'b', lockedVersion: '2.0.0' }, ], lockFiles: ['package-lock.json'], - npmLock: 'package-lock.json', + managerData: { + npmLock: 'package-lock.json', + }, }, ]); }); @@ -388,7 +397,9 @@ describe('modules/manager/npm/extract/locked-versions', () => { }); const packageFiles = [ { - npmLock: 'package-lock.json', + managerData: { + npmLock: 'package-lock.json', + }, extractedConstraints: { npm: '>=6.0.0', }, @@ -413,7 +424,9 @@ describe('modules/manager/npm/extract/locked-versions', () => { { currentValue: '2.0.0', depName: 'b', lockedVersion: '2.0.0' }, ], lockFiles: ['package-lock.json'], - npmLock: 'package-lock.json', + managerData: { + npmLock: 'package-lock.json', + }, }, ]); }); @@ -429,7 +442,9 @@ describe('modules/manager/npm/extract/locked-versions', () => { }); const packageFiles = [ { - npmLock: 'package-lock.json', + managerData: { + npmLock: 'package-lock.json', + }, extractedConstraints: { npm: '^8.0.0', }, @@ -454,7 +469,9 @@ describe('modules/manager/npm/extract/locked-versions', () => { { currentValue: '2.0.0', depName: 'b', lockedVersion: '2.0.0' }, ], lockFiles: ['package-lock.json'], - npmLock: 'package-lock.json', + managerData: { + npmLock: 'package-lock.json', + }, }, ]); }); @@ -462,7 +479,9 @@ describe('modules/manager/npm/extract/locked-versions', () => { it('ignores pnpm', async () => { const packageFiles = [ { - pnpmShrinkwrap: 'pnpm-lock.yaml', + managerData: { + pnpmShrinkwrap: 'pnpm-lock.yaml', + }, deps: [ { depName: 'a', currentValue: '1.0.0' }, { depName: 'b', currentValue: '2.0.0' }, @@ -477,7 +496,9 @@ describe('modules/manager/npm/extract/locked-versions', () => { { currentValue: '2.0.0', depName: 'b' }, ], lockFiles: ['pnpm-lock.yaml'], - pnpmShrinkwrap: 'pnpm-lock.yaml', + managerData: { + pnpmShrinkwrap: 'pnpm-lock.yaml', + }, }, ]); }); diff --git a/lib/modules/manager/npm/extract/locked-versions.ts b/lib/modules/manager/npm/extract/locked-versions.ts index fc5bf391d4..8c23d1779a 100644 --- a/lib/modules/manager/npm/extract/locked-versions.ts +++ b/lib/modules/manager/npm/extract/locked-versions.ts @@ -1,17 +1,19 @@ import semver from 'semver'; import { logger } from '../../../../logger'; 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: PackageFile[] + packageFiles: PackageFile<NpmManagerData>[] ): Promise<void> { const lockFileCache: Record<string, LockFile> = {}; logger.debug('Finding locked versions'); for (const packageFile of packageFiles) { - const { yarnLock, npmLock, pnpmShrinkwrap } = packageFile; + const { managerData = {} } = packageFile; + const { yarnLock, npmLock, pnpmShrinkwrap } = managerData; const lockFiles: string[] = []; if (yarnLock) { logger.trace('Found yarnLock'); diff --git a/lib/modules/manager/npm/extract/monorepo.spec.ts b/lib/modules/manager/npm/extract/monorepo.spec.ts index 37bdf48711..974906f52c 100644 --- a/lib/modules/manager/npm/extract/monorepo.spec.ts +++ b/lib/modules/manager/npm/extract/monorepo.spec.ts @@ -5,14 +5,25 @@ jest.mock('./pnpm'); describe('modules/manager/npm/extract/monorepo', () => { describe('.extractPackageFile()', () => { + it('handles no monorepo', async () => { + const packageFiles: Partial<PackageFile>[] = [ + { + packageFile: 'package.json', + deps: [], + }, + ]; + await detectMonorepos(packageFiles); + expect(packageFiles).toHaveLength(1); + }); + it('uses lerna package settings', async () => { const packageFiles: Partial<PackageFile>[] = [ { packageFile: 'package.json', managerData: { lernaJsonFile: 'lerna.json', + lernaPackages: ['packages/*'], }, - lernaPackages: ['packages/*'], deps: [ { depName: '@org/a', @@ -30,7 +41,7 @@ describe('modules/manager/npm/extract/monorepo', () => { }, { packageFile: 'packages/a/package.json', - packageJsonName: '@org/a', + managerData: { packageJsonName: '@org/a' }, deps: [ { depName: '@org/b', @@ -45,7 +56,7 @@ describe('modules/manager/npm/extract/monorepo', () => { }, { packageFile: 'packages/b/package.json', - packageJsonName: '@org/b', + managerData: { packageJsonName: '@org/b' }, }, ]; await detectMonorepos(packageFiles); @@ -64,8 +75,8 @@ describe('modules/manager/npm/extract/monorepo', () => { packageFile: 'package.json', managerData: { lernaJsonFile: 'lerna.json', + lernaPackages: ['packages/*'], }, - lernaPackages: ['packages/*'], deps: [ { depName: '@org/a', @@ -83,7 +94,7 @@ describe('modules/manager/npm/extract/monorepo', () => { }, { packageFile: 'packages/a/package.json', - packageJsonName: '@org/a', + managerData: { packageJsonName: '@org/a' }, deps: [ { depName: '@org/b', @@ -98,7 +109,7 @@ describe('modules/manager/npm/extract/monorepo', () => { }, { packageFile: 'packages/b/package.json', - packageJsonName: '@org/b', + managerData: { packageJsonName: '@org/b' }, }, ]; await detectMonorepos(packageFiles); @@ -116,19 +127,19 @@ describe('modules/manager/npm/extract/monorepo', () => { { packageFile: 'package.json', managerData: { + lernaClient: 'yarn', lernaJsonFile: 'lerna.json', + lernaPackages: ['oldpackages/*'], + workspacesPackages: ['packages/*'], }, - lernaPackages: ['oldpackages/*'], - lernaClient: 'yarn', - workspacesPackages: ['packages/*'], }, { packageFile: 'packages/a/package.json', - packageJsonName: '@org/a', + managerData: { packageJsonName: '@org/a' }, }, { packageFile: 'packages/b/package.json', - packageJsonName: '@org/b', + managerData: { packageJsonName: '@org/b' }, }, ]; await detectMonorepos(packageFiles); @@ -141,16 +152,15 @@ describe('modules/manager/npm/extract/monorepo', () => { { packageFile: 'package.json', npmrc: '@org:registry=//registry.some.org\n', - workspacesPackages: 'packages/*', + managerData: { workspacesPackages: 'packages/*' }, }, { packageFile: 'packages/a/package.json', - packageJsonName: '@org/a', - yarnLock: 'yarn.lock', + managerData: { packageJsonName: '@org/a', yarnLock: 'yarn.lock' }, }, { packageFile: 'packages/b/package.json', - packageJsonName: '@org/b', + managerData: { packageJsonName: '@org/b' }, }, ]; await detectMonorepos(packageFiles); @@ -165,21 +175,20 @@ describe('modules/manager/npm/extract/monorepo', () => { const packageFiles: Partial<PackageFile>[] = [ { packageFile: 'package.json', - workspacesPackages: ['docs'], skipInstalls: true, // coverage extractedConstraints: { node: '^14.15.0 || >=16.13.0', yarn: '3.2.1', }, - yarnLock: 'yarn.lock', managerData: { hasPackageManager: true, + workspacesPackages: ['docs'], }, }, { packageFile: 'docs/package.json', - packageJsonName: 'docs', - yarnLock: 'yarn.lock', + managerData: { packageJsonName: 'docs', yarnLock: 'yarn.lock' }, + extractedConstraints: { yarn: '^3.2.0' }, }, ]; @@ -211,20 +220,19 @@ describe('modules/manager/npm/extract/monorepo', () => { { packageFile: 'package.json', managerData: { + workspacesPackages: 'packages/*', yarnZeroInstall: true, }, skipInstalls: false, npmrc: '@org:registry=//registry.some.org\n', - workspacesPackages: 'packages/*', }, { packageFile: 'packages/a/package.json', - packageJsonName: '@org/a', - yarnLock: 'yarn.lock', + managerData: { packageJsonName: '@org/a', yarnLock: 'yarn.lock' }, }, { packageFile: 'packages/b/package.json', - packageJsonName: '@org/b', + managerData: { packageJsonName: '@org/b' }, skipInstalls: true, }, ]; diff --git a/lib/modules/manager/npm/extract/monorepo.ts b/lib/modules/manager/npm/extract/monorepo.ts index 5a91433640..ea5db558a1 100644 --- a/lib/modules/manager/npm/extract/monorepo.ts +++ b/lib/modules/manager/npm/extract/monorepo.ts @@ -2,29 +2,31 @@ import is from '@sindresorhus/is'; import { logger } from '../../../../logger'; import { getParentDir, getSiblingFileName } from '../../../../util/fs'; import type { PackageFile } from '../../types'; +import type { NpmManagerData } from '../types'; import { detectPnpmWorkspaces } from './pnpm'; import { matchesAnyPattern } from './utils'; export async function detectMonorepos( - packageFiles: Partial<PackageFile>[] + packageFiles: Partial<PackageFile<NpmManagerData>>[] ): Promise<void> { await detectPnpmWorkspaces(packageFiles); logger.debug('Detecting Lerna and Yarn Workspaces'); for (const p of packageFiles) { + const { packageFile, npmrc, managerData = {}, skipInstalls } = p; const { - packageFile, - npmLock, - yarnLock, - npmrc, - managerData = {}, lernaClient, + lernaJsonFile, lernaPackages, + npmLock, + yarnZeroInstall, + hasPackageManager, workspacesPackages, - skipInstalls, - } = p; - const { lernaJsonFile, yarnZeroInstall, hasPackageManager } = managerData; + yarnLock, + } = managerData; - const packages = workspacesPackages ?? lernaPackages; + const packages = (workspacesPackages ?? lernaPackages) as + | string[] + | undefined; if (packages?.length) { const internalPackagePatterns = ( is.array(packages) ? packages : [packages] @@ -36,7 +38,7 @@ export async function detectMonorepos( ) ); const internalPackageNames = internalPackageFiles - .map((sp) => sp.packageJsonName) + .map((sp) => sp.managerData?.packageJsonName) .filter(Boolean); p.deps?.forEach((dep) => { @@ -50,11 +52,11 @@ export async function detectMonorepos( subPackage.managerData.lernaJsonFile = lernaJsonFile; subPackage.managerData.yarnZeroInstall = yarnZeroInstall; subPackage.managerData.hasPackageManager = hasPackageManager; - subPackage.lernaClient = lernaClient; - subPackage.yarnLock = subPackage.yarnLock ?? yarnLock; - subPackage.npmLock = subPackage.npmLock ?? npmLock; + subPackage.managerData.lernaClient = lernaClient; + subPackage.managerData.yarnLock ??= yarnLock; + subPackage.managerData.npmLock ??= npmLock; subPackage.skipInstalls = skipInstalls && subPackage.skipInstalls; // skip if both are true - subPackage.hasWorkspaces = !!workspacesPackages; + subPackage.managerData.hasWorkspaces = !!workspacesPackages; subPackage.npmrc ??= npmrc; if (p.extractedConstraints) { diff --git a/lib/modules/manager/npm/extract/pnpm.spec.ts b/lib/modules/manager/npm/extract/pnpm.spec.ts index 8e4ca91a0b..af0a9fef89 100644 --- a/lib/modules/manager/npm/extract/pnpm.spec.ts +++ b/lib/modules/manager/npm/extract/pnpm.spec.ts @@ -84,64 +84,86 @@ describe('modules/manager/npm/extract/pnpm', () => { const packageFiles = [ { packageFile: 'package.json', - pnpmShrinkwrap: 'pnpm-lock.yaml', + managerData: { pnpmShrinkwrap: 'pnpm-lock.yaml' }, }, { packageFile: 'nested-packages/group/a/package.json', - packageJsonName: '@demo/nested-group-a', - pnpmShrinkwrap: undefined as undefined | string, + managerData: { + pnpmShrinkwrap: undefined as undefined | string, + packageJsonName: '@demo/nested-group-a', + }, }, { packageFile: 'nested-packages/group/b/package.json', - packageJsonName: '@demo/nested-group-b', - pnpmShrinkwrap: undefined as undefined | string, + managerData: { + pnpmShrinkwrap: undefined as undefined | string, + packageJsonName: '@demo/nested-group-b', + }, }, { packageFile: 'non-nested-packages/a/package.json', - packageJsonName: '@demo/non-nested-a', - pnpmShrinkwrap: undefined as undefined | string, + managerData: { + pnpmShrinkwrap: undefined as undefined | string, + packageJsonName: '@demo/non-nested-a', + }, }, { packageFile: 'non-nested-packages/b/package.json', - packageJsonName: '@demo/non-nested-b', - pnpmShrinkwrap: undefined as undefined | string, + managerData: { + pnpmShrinkwrap: undefined as undefined | string, + packageJsonName: '@demo/non-nested-b', + }, }, { packageFile: 'solo-package/package.json', - packageJsonName: '@demo/solo', - pnpmShrinkwrap: undefined as undefined | string, + managerData: { + pnpmShrinkwrap: undefined as undefined | string, + packageJsonName: '@demo/solo', + }, }, { packageFile: 'solo-package-leading-dot-slash/package.json', - packageJsonName: '@demo/solo-leading-dot-slash', - pnpmShrinkwrap: undefined as undefined | string, + managerData: { + pnpmShrinkwrap: undefined as undefined | string, + packageJsonName: '@demo/solo-leading-dot-slash', + }, }, { packageFile: 'solo-package-leading-double-dot-slash/package.json', - packageJsonName: '@demo/solo-leading-double-dot-slash', - pnpmShrinkwrap: undefined as undefined | string, + managerData: { + pnpmShrinkwrap: undefined as undefined | string, + packageJsonName: '@demo/solo-leading-double-dot-slash', + }, }, { packageFile: 'solo-package-trailing-slash/package.json', - packageJsonName: '@demo/solo-trailing-slash', - pnpmShrinkwrap: undefined as undefined | string, + managerData: { + pnpmShrinkwrap: undefined as undefined | string, + packageJsonName: '@demo/solo-trailing-slash', + }, }, { packageFile: 'test/test-package/package.json', - packageJsonName: '@demo/test-package', - pnpmShrinkwrap: undefined as undefined | string, + managerData: { + pnpmShrinkwrap: undefined as undefined | string, + packageJsonName: '@demo/test-package', + }, }, { packageFile: 'tests/test-package2/package.json', - packageJsonName: '@demo/test-package2', - pnpmShrinkwrap: undefined as undefined | string, + managerData: { + pnpmShrinkwrap: undefined as undefined | string, + packageJsonName: '@demo/test-package2', + }, }, ]; await detectPnpmWorkspaces(packageFiles); expect(packageFiles).toMatchSnapshot(); expect( - packageFiles.every((packageFile) => packageFile.pnpmShrinkwrap) + packageFiles.every( + (packageFile) => packageFile.managerData.pnpmShrinkwrap + ) ).toBeTrue(); }); @@ -149,7 +171,7 @@ describe('modules/manager/npm/extract/pnpm', () => { const packageFiles = [ { packageFile: 'package.json', - pnpmShrinkwrap: 'pnpm-lock.yaml', + managerData: { pnpmShrinkwrap: 'pnpm-lock.yaml' }, }, ]; @@ -157,7 +179,7 @@ describe('modules/manager/npm/extract/pnpm', () => { expect(packageFiles).toEqual([ { packageFile: 'package.json', - pnpmShrinkwrap: 'pnpm-lock.yaml', + managerData: { pnpmShrinkwrap: 'pnpm-lock.yaml' }, }, ]); }); @@ -166,17 +188,17 @@ describe('modules/manager/npm/extract/pnpm', () => { const packageFiles = [ { packageFile: 'package.json', - pnpmShrinkwrap: 'pnpm-lock.yaml', + managerData: { pnpmShrinkwrap: 'pnpm-lock.yaml' }, }, { packageFile: 'nested-packages/group/a/package.json', packageJsonName: '@demo/nested-group-a', - pnpmShrinkwrap: undefined as undefined | string, + managerData: { pnpmShrinkwrap: undefined as undefined | string }, }, { packageFile: 'not-matching/b/package.json', packageJsonName: '@not-matching/b', - pnpmShrinkwrap: undefined as undefined | string, + managerData: { pnpmShrinkwrap: undefined as undefined | string }, }, ]; @@ -184,24 +206,24 @@ describe('modules/manager/npm/extract/pnpm', () => { expect(packageFiles).toEqual([ { packageFile: 'package.json', - pnpmShrinkwrap: 'pnpm-lock.yaml', + managerData: { pnpmShrinkwrap: 'pnpm-lock.yaml' }, }, { packageFile: 'nested-packages/group/a/package.json', packageJsonName: '@demo/nested-group-a', - pnpmShrinkwrap: 'pnpm-lock.yaml', + managerData: { pnpmShrinkwrap: 'pnpm-lock.yaml' }, }, { packageFile: 'not-matching/b/package.json', packageJsonName: '@not-matching/b', - pnpmShrinkwrap: undefined, + managerData: { pnpmShrinkwrap: undefined }, }, ]); expect( packageFiles.find( (packageFile) => packageFile.packageFile === 'not-matching/b/package.json' - )?.pnpmShrinkwrap + )?.managerData.pnpmShrinkwrap ).toBeUndefined(); }); }); diff --git a/lib/modules/manager/npm/extract/pnpm.ts b/lib/modules/manager/npm/extract/pnpm.ts index b278088137..1f566d1e8b 100644 --- a/lib/modules/manager/npm/extract/pnpm.ts +++ b/lib/modules/manager/npm/extract/pnpm.ts @@ -11,6 +11,7 @@ import { readLocalFile, } from '../../../../util/fs'; import type { PackageFile } from '../../types'; +import type { NpmManagerData } from '../types'; import type { PnpmWorkspaceFile } from './types'; export async function extractPnpmFilters( @@ -74,13 +75,14 @@ export async function findPnpmWorkspace( } export async function detectPnpmWorkspaces( - packageFiles: Partial<PackageFile>[] + packageFiles: Partial<PackageFile<NpmManagerData>>[] ): Promise<void> { logger.debug(`Detecting pnpm Workspaces`); const packagePathCache = new Map<string, string[] | null>(); for (const p of packageFiles) { - const { packageFile, pnpmShrinkwrap } = p; + const { packageFile, managerData } = p; + const { pnpmShrinkwrap } = managerData as NpmManagerData; // check if pnpmShrinkwrap-file has already been provided if (pnpmShrinkwrap) { @@ -123,7 +125,8 @@ export async function detectPnpmWorkspaces( ); if (isPackageInWorkspace) { - p.pnpmShrinkwrap = lockFilePath; + p.managerData ??= {}; + p.managerData.pnpmShrinkwrap = lockFilePath; } else { logger.trace( { packageFile, workspaceYamlPath }, diff --git a/lib/modules/manager/npm/post-update/index.spec.ts b/lib/modules/manager/npm/post-update/index.spec.ts index dd2b971310..7064727df6 100644 --- a/lib/modules/manager/npm/post-update/index.spec.ts +++ b/lib/modules/manager/npm/post-update/index.spec.ts @@ -35,24 +35,28 @@ describe('modules/manager/npm/post-update/index', () => { packageFile: 'packages/core/package.json', managerData: { lernaJsonFile: 'lerna.json', + npmLock: 'package-lock.json', }, - npmLock: 'package-lock.json', npmrc: '#dummy', }, { packageFile: 'packages/cli/package.json', managerData: { lernaJsonFile: 'lerna.json', + yarnLock: 'yarn.lock', }, - yarnLock: 'yarn.lock', }, { packageFile: 'packages/test/package.json', - yarnLock: 'yarn.lock', + managerData: { + yarnLock: 'yarn.lock', + }, }, { packageFile: 'packages/pnpm/package.json', - pnpmShrinkwrap: 'packages/pnpm/pnpm-lock.yaml', + managerData: { + pnpmShrinkwrap: 'packages/pnpm/pnpm-lock.yaml', + }, }, ], }; @@ -74,8 +78,8 @@ describe('modules/manager/npm/post-update/index', () => { isRemediation: true, managerData: { lernaJsonFile: 'lerna.json', + npmLock: 'package-lock.json', }, - npmLock: 'package-lock.json', rangeStrategy: 'widen', }, { @@ -83,17 +87,21 @@ describe('modules/manager/npm/post-update/index', () => { isRemediation: true, managerData: { lernaJsonFile: 'lerna.json', + npmLock: 'randomFolder/package-lock.json', }, - npmLock: 'randomFolder/package-lock.json', lockFiles: ['randomFolder/package-lock.json'], rangeStrategy: 'pin', }, { isLockfileUpdate: true, - npmLock: 'package-lock.json', + managerData: { + npmLock: 'package-lock.json', + }, }, { - yarnLock: 'yarn.lock', + managerData: { + yarnLock: 'yarn.lock', + }, isLockfileUpdate: true, }, ], @@ -173,7 +181,9 @@ describe('modules/manager/npm/post-update/index', () => { upgrades: [ { isLockfileUpdate: true, - yarnLock: 'yarn.lock', + managerData: { + yarnLock: 'yarn.lock', + }, }, ], }, @@ -223,9 +233,13 @@ describe('modules/manager/npm/post-update/index', () => { await writeExistingFiles(updateConfig, { npm: [ // This package's npmrc should be written verbatim. - { packageFile: 'packages/core/package.json', npmrc: '#dummy' }, + { + packageFile: 'packages/core/package.json', + npmrc: '#dummy', + managerData: {}, + }, // No npmrc content should be written for this package. - { packageFile: 'packages/core/package.json' }, + { packageFile: 'packages/core/package.json', managerData: {} }, ], }); @@ -242,9 +256,13 @@ describe('modules/manager/npm/post-update/index', () => { { npm: [ // This package's npmrc should be written verbatim. - { packageFile: 'packages/core/package.json', npmrc: '#dummy' }, + { + packageFile: 'packages/core/package.json', + npmrc: '#dummy', + managerData: {}, + }, // No npmrc content should be written for this package. - { packageFile: 'packages/core/package.json' }, + { packageFile: 'packages/core/package.json', managerData: {} }, ], } ); @@ -554,10 +572,10 @@ describe('modules/manager/npm/post-update/index', () => { { packageFile: 'package.json', managerData: { + lernaClient: 'npm', lernaJsonFile: 'lerna.json', + npmLock: 'package-lock.json', }, - npmLock: 'package-lock.json', - lernaClient: 'npm', }, ], } @@ -704,7 +722,9 @@ describe('modules/manager/npm/post-update/index', () => { await getAdditionalFiles( { ...updateConfig, - npmLock: 'npm-shrinkwrap.json', + managerData: { + npmLock: 'npm-shrinkwrap.json', + }, updateLockFiles: true, upgrades: [{}], }, @@ -713,10 +733,10 @@ describe('modules/manager/npm/post-update/index', () => { { packageFile: 'package.json', managerData: { + lernaClient: 'npm', lernaJsonFile: 'lerna.json', + npmLock: 'npm-shrinkwrap.json', }, - npmLock: 'npm-shrinkwrap.json', - lernaClient: 'npm', }, ], } diff --git a/lib/modules/manager/npm/post-update/index.ts b/lib/modules/manager/npm/post-update/index.ts index b14b98ac0d..0e065f7b16 100644 --- a/lib/modules/manager/npm/post-update/index.ts +++ b/lib/modules/manager/npm/post-update/index.ts @@ -56,18 +56,18 @@ export function determineLockFileDirs( for (const upgrade of config.upgrades) { if (upgrade.updateType === 'lockFileMaintenance' || upgrade.isRemediation) { // Return every directory that contains a lockfile - if (upgrade.managerData?.lernaJsonFile && upgrade.npmLock) { + if (upgrade.managerData?.lernaJsonFile && upgrade.managerData.npmLock) { lernaJsonFiles.push(upgrade.managerData.lernaJsonFile); } else { - yarnLockDirs.push(upgrade.yarnLock); - npmLockDirs.push(upgrade.npmLock); - pnpmShrinkwrapDirs.push(upgrade.pnpmShrinkwrap); + yarnLockDirs.push(upgrade.managerData?.yarnLock); + npmLockDirs.push(upgrade.managerData?.npmLock); + pnpmShrinkwrapDirs.push(upgrade.managerData?.pnpmShrinkwrap); } continue; } if (upgrade.isLockfileUpdate) { - yarnLockDirs.push(upgrade.yarnLock); - npmLockDirs.push(upgrade.npmLock); + yarnLockDirs.push(upgrade.managerData?.yarnLock); + npmLockDirs.push(upgrade.managerData?.npmLock); } } @@ -85,7 +85,9 @@ export function determineLockFileDirs( }; } - function getPackageFile(fileName: string): Partial<PackageFile> { + function getPackageFile( + fileName: string + ): Partial<PackageFile<NpmManagerData>> { logger.trace('Looking for packageFile: ' + fileName); for (const packageFile of packageFiles.npm!) { @@ -102,21 +104,28 @@ export function determineLockFileDirs( for (const p of config.updatedPackageFiles!) { logger.trace(`Checking ${String(p.path)} for lock files`); const packageFile = getPackageFile(p.path); + // istanbul ignore if + if (!packageFile.managerData) { + continue; + } // lerna first - if (packageFile.managerData?.lernaJsonFile && packageFile.npmLock) { + if ( + packageFile.managerData?.lernaJsonFile && + packageFile.managerData.npmLock + ) { logger.debug(`${packageFile.packageFile} has lerna lock file`); lernaJsonFiles.push(packageFile.managerData.lernaJsonFile); } else if ( packageFile.managerData?.lernaJsonFile && - packageFile.yarnLock && - !packageFile.hasWorkspaces + packageFile.managerData.yarnLock && + !packageFile.managerData.hasWorkspaces ) { lernaJsonFiles.push(packageFile.managerData.lernaJsonFile); } else { // push full lock file names and convert them later - yarnLockDirs.push(packageFile.yarnLock); - npmLockDirs.push(packageFile.npmLock); - pnpmShrinkwrapDirs.push(packageFile.pnpmShrinkwrap); + yarnLockDirs.push(packageFile.managerData.yarnLock); + npmLockDirs.push(packageFile.managerData.npmLock); + pnpmShrinkwrapDirs.push(packageFile.managerData.pnpmShrinkwrap); } } @@ -141,6 +150,10 @@ export async function writeExistingFiles( 'Writing package.json files' ); for (const packageFile of npmFiles) { + // istanbul ignore if + if (!packageFile.managerData) { + continue; + } // TODO #7154 const basedir = upath.dirname(packageFile.packageFile!); const npmrc = packageFile.npmrc; @@ -152,7 +165,7 @@ export async function writeExistingFiles( logger.warn({ npmrcFilename, err }, 'Error writing .npmrc'); } } - const { npmLock } = packageFile; + const npmLock = packageFile.managerData.npmLock; if (npmLock) { const npmLockPath = npmLock; if ( @@ -183,9 +196,12 @@ export async function writeExistingFiles( if (upgrade.lockFiles && !upgrade.lockFiles.includes(npmLock)) { continue; } + if (!upgrade.managerData) { + continue; + } if ( upgrade.rangeStrategy === 'widen' && - upgrade.npmLock === npmLock + upgrade.managerData.npmLock === npmLock ) { // TODO #7154 widens.push(upgrade.depName!); @@ -233,13 +249,16 @@ export async function writeExistingFiles( } } } - const { yarnLock } = packageFile; + const { yarnLock } = packageFile.managerData; if (yarnLock && config.reuseLockFiles === false) { await deleteLocalFile(yarnLock); } // istanbul ignore next - if (packageFile.pnpmShrinkwrap && config.reuseLockFiles === false) { - await deleteLocalFile(packageFile.pnpmShrinkwrap); + if ( + packageFile.managerData.pnpmShrinkwrap && + config.reuseLockFiles === false + ) { + await deleteLocalFile(packageFile.managerData.pnpmShrinkwrap); } } } @@ -540,7 +559,7 @@ export async function getAdditionalFiles( const fileName = upath.basename(npmLock); logger.debug(`Generating ${fileName} for ${lockFileDir}`); const upgrades = config.upgrades.filter( - (upgrade) => upgrade.npmLock === npmLock + (upgrade) => upgrade.managerData?.npmLock === npmLock ); const res = await npm.generateLockFile( lockFileDir, @@ -624,7 +643,7 @@ export async function getAdditionalFiles( logger.debug(`Generating yarn.lock for ${lockFileDir}`); const lockFileName = upath.join(lockFileDir, 'yarn.lock'); const upgrades = config.upgrades.filter( - (upgrade) => upgrade.yarnLock === yarnLock + (upgrade) => upgrade.managerData?.yarnLock === yarnLock ); const res = await yarn.generateLockFile(lockFileDir, env, config, upgrades); if (res.error) { @@ -697,7 +716,7 @@ export async function getAdditionalFiles( await updateNpmrcContent(lockFileDir, npmrcContent, additionalNpmrcContent); logger.debug(`Generating pnpm-lock.yaml for ${lockFileDir}`); const upgrades = config.upgrades.filter( - (upgrade) => upgrade.pnpmShrinkwrap === pnpmShrinkwrap + (upgrade) => upgrade.managerData?.pnpmShrinkwrap === pnpmShrinkwrap ); const res = await pnpm.generateLockFile(lockFileDir, env, config, upgrades); if (res.error) { @@ -759,10 +778,10 @@ export async function getAdditionalFiles( logger.debug('No matching package.json found'); throw new Error('lerna-no-lockfile'); } - if (lernaPackageFile.lernaClient === 'npm') { - lockFile = config.npmLock ?? 'package-lock.json'; + if (lernaPackageFile.managerData?.lernaClient === 'npm') { + lockFile = config.managerData?.npmLock ?? 'package-lock.json'; } else { - lockFile = config.yarnLock ?? 'yarn.lock'; + lockFile = config.managerData?.yarnLock ?? 'yarn.lock'; } const skipInstalls = lockFile === 'npm-shrinkwrap.json' ? false : config.skipInstalls; @@ -829,17 +848,22 @@ export async function getAdditionalFiles( }); } else { for (const packageFile of packageFiles.npm) { - const filename = packageFile.npmLock ?? packageFile.yarnLock; + const filename = + packageFile.managerData?.npmLock ?? packageFile.managerData?.yarnLock; + // istanbul ignore if + if (!is.nonEmptyString(filename)) { + continue; + } logger.trace(`Checking for ${filename}`); const existingContent = await getFile( // TODO #7154 - filename!, + filename, config.reuseExistingBranch ? config.branchName : config.baseBranch ); if (existingContent) { logger.trace('Found lock file'); // TODO #7154 - const lockFilePath = filename!; + const lockFilePath = filename; logger.trace('Checking against ' + lockFilePath); try { const newContent = @@ -859,7 +883,7 @@ export async function getAdditionalFiles( updatedArtifacts.push({ type: 'addition', // TODO #7154 - path: filename!, + path: filename, contents: newContent, }); } diff --git a/lib/modules/manager/npm/post-update/lerna.spec.ts b/lib/modules/manager/npm/post-update/lerna.spec.ts index 9746d1b049..3b05f9c617 100644 --- a/lib/modules/manager/npm/post-update/lerna.spec.ts +++ b/lib/modules/manager/npm/post-update/lerna.spec.ts @@ -14,8 +14,8 @@ process.env.BUILDPACK = 'true'; function lernaPkgFile(lernaClient: string): Partial<PackageFile> { return { - lernaClient, deps: [{ depName: 'lerna', currentValue: '2.0.0' }], + managerData: { lernaClient }, }; } @@ -23,7 +23,7 @@ function lernaPkgFileWithoutLernaDep( lernaClient: string ): Partial<PackageFile> { return { - lernaClient, + managerData: { lernaClient }, }; } diff --git a/lib/modules/manager/npm/post-update/lerna.ts b/lib/modules/manager/npm/post-update/lerna.ts index a195f80c87..a6504816ad 100644 --- a/lib/modules/manager/npm/post-update/lerna.ts +++ b/lib/modules/manager/npm/post-update/lerna.ts @@ -1,3 +1,4 @@ +import is from '@sindresorhus/is'; import semver from 'semver'; import upath from 'upath'; import { GlobalConfig } from '../../../../config/global'; @@ -10,12 +11,13 @@ import type { ToolConstraint, } from '../../../../util/exec/types'; import type { PackageFile, 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<PackageFile> + lernaPackageFile: Partial<PackageFile<NpmManagerData>> ): string | null { const lernaDep = lernaPackageFile.deps?.find((d) => d.depName === 'lerna'); if (!lernaDep?.currentValue || !semver.validRange(lernaDep.currentValue)) { @@ -30,14 +32,14 @@ export function getLernaVersion( } export async function generateLockFiles( - lernaPackageFile: Partial<PackageFile>, + lernaPackageFile: Partial<PackageFile<NpmManagerData>>, lockFileDir: string, config: PostUpdateConfig, env: NodeJS.ProcessEnv, skipInstalls?: boolean ): Promise<GenerateLockFileResult> { - const lernaClient = lernaPackageFile.lernaClient; - if (!lernaClient) { + const lernaClient = lernaPackageFile.managerData?.lernaClient; + if (!is.nonEmptyString(lernaClient)) { logger.warn('No lernaClient specified - returning'); return { error: false }; } diff --git a/lib/modules/manager/npm/post-update/types.ts b/lib/modules/manager/npm/post-update/types.ts index cf282628da..56b50b78cc 100644 --- a/lib/modules/manager/npm/post-update/types.ts +++ b/lib/modules/manager/npm/post-update/types.ts @@ -1,5 +1,6 @@ import type { FileChange } from '../../../../util/git/types'; import type { PackageFile } from '../../types'; +import type { NpmManagerData } from '../types'; export interface DetermineLockFileDirsResult { yarnLockDirs: string[]; @@ -9,7 +10,7 @@ export interface DetermineLockFileDirsResult { } export interface AdditionalPackageFiles { - npm?: Partial<PackageFile>[]; + npm?: Partial<PackageFile<NpmManagerData>>[]; } export interface ArtifactError { diff --git a/lib/modules/manager/npm/types.ts b/lib/modules/manager/npm/types.ts index ed7a7adbad..9fa430cd8d 100644 --- a/lib/modules/manager/npm/types.ts +++ b/lib/modules/manager/npm/types.ts @@ -71,9 +71,22 @@ export type NpmDepType = | 'peerDependencies' | 'resolutions'; -export interface NpmManagerData extends Record<string, any> { +export interface NpmLockFiles { + yarnLock?: string; + packageLock?: string; + shrinkwrapJson?: string; + pnpmShrinkwrap?: string; + npmLock?: string; +} + +export interface NpmManagerData extends NpmLockFiles, Record<string, any> { hasPackageManager?: boolean; + hasWorkspaces?: boolean; + lernaClient?: string; lernaJsonFile?: string; + lernaPackages?: string[]; + packageJsonName?: string; parents?: string[]; yarnZeroInstall?: boolean; + workspacesPackages?: string[] | string; } diff --git a/lib/modules/manager/types.ts b/lib/modules/manager/types.ts index e89fcfa9e2..c805a71a53 100644 --- a/lib/modules/manager/types.ts +++ b/lib/modules/manager/types.ts @@ -51,35 +51,18 @@ export interface RangeConfig<T = Record<string, any>> extends ManagerData<T> { rangeStrategy: RangeStrategy; } -export interface NpmLockFiles { - yarnLock?: string; - packageLock?: string; - shrinkwrapJson?: string; - pnpmShrinkwrap?: string; - npmLock?: string; - lockFiles?: string[]; -} - -export interface PackageFile<T = Record<string, any>> - extends NpmLockFiles, - ManagerData<T> { +export interface PackageFile<T = Record<string, any>> extends ManagerData<T> { autoReplaceStringTemplate?: string; - hasWorkspaces?: boolean; extractedConstraints?: Record<string, string>; datasource?: string; registryUrls?: string[]; additionalRegistryUrls?: string[]; deps: PackageDependency[]; - lernaClient?: string; - lernaPackages?: string[]; - mavenProps?: Record<string, any>; + lockFiles?: string[]; npmrc?: string; packageFile?: string | null; - packageJsonName?: string; packageFileVersion?: string; - parent?: string; skipInstalls?: boolean; - workspacesPackages?: string[] | string; matchStrings?: string[]; matchStringsStrategy?: MatchStringsStrategy; } @@ -166,12 +149,11 @@ export interface PackageDependency<T = Record<string, any>> extends Package<T> { variableName?: string; } -export interface Upgrade<T = Record<string, any>> - extends Package<T>, - NpmLockFiles { +export interface Upgrade<T = Record<string, any>> extends Package<T> { isLockfileUpdate?: boolean; currentRawValue?: any; depGroup?: string; + lockFiles?: string[]; name?: string; newDigest?: string; newFrom?: string; -- GitLab