export function mergePackageJson()

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;
}