copyWithPackageDependenciesFromReference function

Iterable<PackageDependency> copyWithPackageDependenciesFromReference(
  1. Iterable<PackageDependency> deps,
  2. Iterable<PackageDependency> references
)

Given the collections of actual package dependencies (deps) and the reference dependencies (references), this function copies deps and for every dependency version different from references, it takes the one from references.

This function is intended to correct package configuration to make it consistent with other packages in a Dart mono repository.

Implementation

Iterable<PackageDependency> copyWithPackageDependenciesFromReference(
  Iterable<PackageDependency> deps,
  Iterable<PackageDependency> references,
) =>
    deps.map(
      (dep) => references
          .firstWhere(
            (ref) => ref.package() == dep.package(),
            orElse: () => dep,
          )
          .iswitch(
            sdk: (d) => PackageDependency.sdk(d.copyWith(type: dep.type())),
            hosted: (d) =>
                PackageDependency.hosted(d.copyWith(type: dep.type())),
            git: (d) => PackageDependency.git(d.copyWith(type: dep.type())),
            path: (d) => PackageDependency.path(d.copyWith(type: dep.type())),
          ),
    );