Skip to content
Snippets Groups Projects
Unverified Commit eab092d7 authored by StinkyLord's avatar StinkyLord Committed by GitHub
Browse files

feat(manager/npm): update yarn metadata versions (#14933)

parent bc69091c
No related branches found
No related tags found
No related merge requests found
{
"name": "renovate-repro",
"dependencies": {
"lodash": "^4.16.0"
"lodash": "^4.16.0",
"mermaid": "8.8.1"
},
"resolutions": {
"lodash": "patch:lodash@npm:4.16.0#patches/lodash.patch"
......@@ -9,6 +10,9 @@
"dependenciesMeta": {
"lodash@4.16.0": {
"unplugged": true
},
"mermaid@8.8.1": {
"optional": true
}
}
}
{
"name": "renovate-repro",
"dependencies": {
"lodash": "4.17.21"
"lodash": "4.17.21",
"mermaid": "8.8.1"
},
"resolutions": {
"lodash": "patch:lodash@npm:4.17.21#patches/lodash.patch"
},
"dependenciesMeta": {
"lodash@4.16.0": {
"lodash@4.17.21": {
"unplugged": true
},
"mermaid@8.8.1": {
"optional": true
}
}
}
import type { PackageJson } from 'type-fest';
export type NpmPackageDependency = PackageJson.Dependency;
export type DependenciesMeta = Record<
string,
{ optional: boolean; built: boolean; unplugged: boolean }
>;
export interface NpmPackage extends PackageJson {
renovate?: unknown;
_from?: any;
_args?: any;
_id?: any;
dependenciesMeta?: DependenciesMeta;
}
export type LockFileEntry = Record<
......
import { dequal } from 'dequal';
import type { PackageJson } from 'type-fest';
import { logger } from '../../../../../logger';
import { escapeRegExp, regEx } from '../../../../../util/regex';
import { matchAt, replaceAt } from '../../../../../util/string';
import type { UpdateDependencyConfig } from '../../../types';
import type { DependenciesMeta, NpmPackage } from '../../extract/types';
function renameObjKey(
oldObj: DependenciesMeta,
oldKey: string,
newKey: string
): DependenciesMeta {
const keys = Object.keys(oldObj);
return keys.reduce((acc, key) => {
if (key === oldKey) {
acc[newKey] = oldObj[oldKey];
} else {
acc[key] = oldObj[key];
}
return acc;
}, {});
}
function replaceAsString(
parsedContents: PackageJson,
parsedContents: NpmPackage,
fileContent: string,
depType: string,
depName: string,
......@@ -20,6 +36,14 @@ function replaceAsString(
delete Object.assign(parsedContents[depType], {
[newValue]: parsedContents[depType][oldValue],
})[oldValue];
} else if (depType === 'dependenciesMeta') {
if (oldValue !== newValue) {
parsedContents.dependenciesMeta = renameObjKey(
parsedContents.dependenciesMeta,
oldValue,
newValue
);
}
} else {
// The old value is the version of the dependency
parsedContents[depType][depName] = newValue;
......@@ -89,7 +113,7 @@ export function updateDependency({
}
logger.debug(`npm.updateDependency(): ${depType}.${depName} = ${newValue}`);
try {
const parsedContents: PackageJson = JSON.parse(fileContent);
const parsedContents: NpmPackage = JSON.parse(fileContent);
// Save the old version
let oldVersion: string;
if (depType === 'packageManager') {
......@@ -173,6 +197,20 @@ export function updateDependency({
}
}
}
if (parsedContents?.dependenciesMeta) {
for (const [depKey] of Object.entries(parsedContents.dependenciesMeta)) {
if (depKey.startsWith(depName + '@')) {
newFileContent = replaceAsString(
parsedContents,
newFileContent,
'dependenciesMeta',
depName,
depKey,
depName + '@' + newValue
);
}
}
}
return newFileContent;
} catch (err) {
logger.debug({ err }, 'updateDependency error');
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment