in packages/just-scripts-utils/src/mergePackageJson.ts [13:41]
export function mergePackageJson(original: PackageJson, incoming: PackageJson): PackageJson {
if (!original.just) {
return original;
}
// deep copy the deps and devDeps
const newPackageJson: PackageJson = {
...original,
dependencies: { ...(original.dependencies || {}) },
devDependencies: { ...(original.devDependencies || {}) },
};
const depTypes = ['dependencies', 'devDependencies'];
let packageJsonModified = false;
depTypes.forEach(depType => {
const incomingDeps = incoming[depType] || {};
const originalDeps = original[depType] || {};
Object.keys(incomingDeps).forEach(dep => {
// TODO: should this handle deleting deps that exist in originalDeps but not incomingDeps?
if (_shouldUpdateDep(originalDeps[dep], incomingDeps[dep])) {
newPackageJson[depType][dep] = incomingDeps[dep];
packageJsonModified = true;
}
});
});
return packageJsonModified ? newPackageJson : original;
}