fix(devkit): incorrect conditional to decide if package should be added (#12749)
This commit is contained in:
parent
32635992e1
commit
657cdbab60
@ -275,4 +275,37 @@ describe('addDependenciesToPackageJson', () => {
|
|||||||
});
|
});
|
||||||
expect(installTask).toBeDefined();
|
expect(installTask).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should not overwrite dependencies when they exist in devDependencies or vice versa and the new version is tilde', () => {
|
||||||
|
// ARRANGE
|
||||||
|
writeJson(tree, 'package.json', {
|
||||||
|
dependencies: {
|
||||||
|
tslib: '2.4.0',
|
||||||
|
},
|
||||||
|
devDependencies: {
|
||||||
|
nx: '15.0.0',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// ACT
|
||||||
|
const installTask = addDependenciesToPackageJson(
|
||||||
|
tree,
|
||||||
|
{
|
||||||
|
tslib: '~2.3.0',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
nx: '15.0.0',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// ASSERT
|
||||||
|
const { dependencies, devDependencies } = readJson(tree, 'package.json');
|
||||||
|
expect(dependencies).toEqual({
|
||||||
|
tslib: '2.4.0',
|
||||||
|
});
|
||||||
|
expect(devDependencies).toEqual({
|
||||||
|
nx: '15.0.0',
|
||||||
|
});
|
||||||
|
expect(installTask).toBeDefined();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import { GeneratorCallback } from 'nx/src/config/misc-interfaces';
|
|||||||
import { coerce, gt } from 'semver';
|
import { coerce, gt } from 'semver';
|
||||||
|
|
||||||
const NON_SEMVER_TAGS = {
|
const NON_SEMVER_TAGS = {
|
||||||
|
'*': 2,
|
||||||
next: 1,
|
next: 1,
|
||||||
latest: 0,
|
latest: 0,
|
||||||
previous: -1,
|
previous: -1,
|
||||||
@ -24,6 +25,27 @@ function filterExistingDependencies(
|
|||||||
.reduce((acc, d) => ({ ...acc, [d]: dependencies[d] }), {});
|
.reduce((acc, d) => ({ ...acc, [d]: dependencies[d] }), {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isIncomingVersionGreater(
|
||||||
|
incomingVersion: string,
|
||||||
|
existingVersion: string
|
||||||
|
) {
|
||||||
|
if (
|
||||||
|
incomingVersion in NON_SEMVER_TAGS &&
|
||||||
|
existingVersion in NON_SEMVER_TAGS
|
||||||
|
) {
|
||||||
|
return NON_SEMVER_TAGS[incomingVersion] > NON_SEMVER_TAGS[existingVersion];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
incomingVersion in NON_SEMVER_TAGS ||
|
||||||
|
existingVersion in NON_SEMVER_TAGS
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return gt(coerce(incomingVersion), coerce(existingVersion));
|
||||||
|
}
|
||||||
|
|
||||||
function updateExistingDependenciesVersion(
|
function updateExistingDependenciesVersion(
|
||||||
dependencies: Record<string, string>,
|
dependencies: Record<string, string>,
|
||||||
existingAltDependencies: Record<string, string>
|
existingAltDependencies: Record<string, string>
|
||||||
@ -37,23 +59,7 @@ function updateExistingDependenciesVersion(
|
|||||||
const incomingVersion = dependencies[d];
|
const incomingVersion = dependencies[d];
|
||||||
const existingVersion = existingAltDependencies[d];
|
const existingVersion = existingAltDependencies[d];
|
||||||
|
|
||||||
if (
|
return isIncomingVersionGreater(incomingVersion, existingVersion);
|
||||||
incomingVersion in NON_SEMVER_TAGS &&
|
|
||||||
existingVersion in NON_SEMVER_TAGS
|
|
||||||
) {
|
|
||||||
return (
|
|
||||||
NON_SEMVER_TAGS[incomingVersion] > NON_SEMVER_TAGS[existingVersion]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (
|
|
||||||
incomingVersion in NON_SEMVER_TAGS ||
|
|
||||||
existingVersion in NON_SEMVER_TAGS
|
|
||||||
) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return gt(coerce(incomingVersion), coerce(existingVersion));
|
|
||||||
})
|
})
|
||||||
.reduce((acc, d) => ({ ...acc, [d]: dependencies[d] }), {});
|
.reduce((acc, d) => ({ ...acc, [d]: dependencies[d] }), {});
|
||||||
}
|
}
|
||||||
@ -205,21 +211,37 @@ function requiresAddingOfPackages(packageJsonFile, deps, devDeps): boolean {
|
|||||||
packageJsonFile.devDependencies = packageJsonFile.devDependencies || {};
|
packageJsonFile.devDependencies = packageJsonFile.devDependencies || {};
|
||||||
|
|
||||||
if (Object.keys(deps).length > 0) {
|
if (Object.keys(deps).length > 0) {
|
||||||
needsDepsUpdate =
|
needsDepsUpdate = Object.keys(deps).some((entry) => {
|
||||||
Object.keys(deps).some((entry) => !packageJsonFile.dependencies[entry]) ||
|
const incomingVersion = deps[entry];
|
||||||
Object.keys(deps).some(
|
if (packageJsonFile.dependencies[entry]) {
|
||||||
(entry) => !packageJsonFile.devDependencies[entry]
|
const existingVersion = packageJsonFile.dependencies[entry];
|
||||||
);
|
return isIncomingVersionGreater(incomingVersion, existingVersion);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (packageJsonFile.devDependencies[entry]) {
|
||||||
|
const existingVersion = packageJsonFile.devDependencies[entry];
|
||||||
|
return isIncomingVersionGreater(incomingVersion, existingVersion);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Object.keys(devDeps).length > 0) {
|
if (Object.keys(devDeps).length > 0) {
|
||||||
needsDevDepsUpdate =
|
needsDevDepsUpdate = Object.keys(devDeps).some((entry) => {
|
||||||
Object.keys(devDeps).some(
|
const incomingVersion = devDeps[entry];
|
||||||
(entry) => !packageJsonFile.devDependencies[entry]
|
if (packageJsonFile.devDependencies[entry]) {
|
||||||
) ||
|
const existingVersion = packageJsonFile.devDependencies[entry];
|
||||||
Object.keys(devDeps).some(
|
return isIncomingVersionGreater(incomingVersion, existingVersion);
|
||||||
(entry) => !packageJsonFile.dependencies[entry]
|
}
|
||||||
);
|
if (packageJsonFile.dependencies[entry]) {
|
||||||
|
const existingVersion = packageJsonFile.dependencies[entry];
|
||||||
|
|
||||||
|
return isIncomingVersionGreater(incomingVersion, existingVersion);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return needsDepsUpdate || needsDevDepsUpdate;
|
return needsDepsUpdate || needsDevDepsUpdate;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user