Sha256: d8dd4956b1d5ce03a30ee8ece995f831e0e9542180b543b30445b4caa91c17ff

Contents?: true

Size: 1.84 KB

Versions: 70

Compression:

Stored size: 1.84 KB

Contents

const parse = require("@dependabot/yarn-lib/lib/lockfile/parse").default;
const stringify = require("@dependabot/yarn-lib/lib/lockfile/stringify")
  .default;
const semver = require("semver");

// Inspired by yarn-tools. Altered to ensure the latest version is always used
// for version ranges which allow it.
module.exports = (data, includePackages = []) => {
  const json = parse(data).object;
  const enableLockfileVersions = Boolean(data.match(/^# yarn v/m));
  const noHeader = !Boolean(data.match(/^# THIS IS AN AU/m));

  const packages = {};
  const re = /^(.*)@([^@]*?)$/;

  Object.entries(json).forEach(([name, pkg]) => {
    if (name.match(re)) {
      const [_, packageName, requestedVersion] = name.match(re);
      packages[packageName] = packages[packageName] || [];
      packages[packageName].push(
        Object.assign({}, { name, pkg, packageName, requestedVersion })
      );
    }
  });

  Object.entries(packages)
    .filter(([name]) => {
      if (includePackages.length === 0) return true;
      return includePackages.includes(name);
    })
    .forEach(([name, packages]) => {
      // Reverse sort, so we'll find the maximum satisfying version first
      const versions = packages.map(p => p.pkg.version).sort(semver.rcompare);
      const ranges = packages.map(p => p.requestedVersion);

      // Dedup each package to its maxSatisfying version
      packages.forEach(p => {
        const targetVersion = semver.maxSatisfying(
          versions,
          p.requestedVersion
        );
        if (targetVersion === null) return;
        if (targetVersion !== p.pkg.version) {
          const dedupedPackage = packages.find(
            p => p.pkg.version === targetVersion
          );
          json[`${name}@${p.requestedVersion}`] = dedupedPackage.pkg;
        }
      });
    });

  return stringify(json, noHeader, enableLockfileVersions);
};

Version data entries

70 entries across 70 versions & 1 rubygems

Version Path
dependabot-core-0.87.5 helpers/yarn/lib/fix-duplicates.js
dependabot-core-0.87.4 helpers/yarn/lib/fix-duplicates.js
dependabot-core-0.87.3 helpers/yarn/lib/fix-duplicates.js
dependabot-core-0.87.2 helpers/yarn/lib/fix-duplicates.js
dependabot-core-0.87.1 helpers/yarn/lib/fix-duplicates.js
dependabot-core-0.87.0 helpers/yarn/lib/fix-duplicates.js
dependabot-core-0.86.25 helpers/yarn/lib/fix-duplicates.js
dependabot-core-0.86.24 helpers/yarn/lib/fix-duplicates.js
dependabot-core-0.86.23 helpers/yarn/lib/fix-duplicates.js
dependabot-core-0.86.22 helpers/yarn/lib/fix-duplicates.js
dependabot-core-0.86.21 helpers/yarn/lib/fix-duplicates.js
dependabot-core-0.86.20 helpers/yarn/lib/fix-duplicates.js
dependabot-core-0.86.19 helpers/yarn/lib/fix-duplicates.js
dependabot-core-0.86.18 helpers/yarn/lib/fix-duplicates.js
dependabot-core-0.86.17 helpers/yarn/lib/fix-duplicates.js
dependabot-core-0.86.16 helpers/yarn/lib/fix-duplicates.js
dependabot-core-0.86.15 helpers/yarn/lib/fix-duplicates.js
dependabot-core-0.86.14 helpers/yarn/lib/fix-duplicates.js
dependabot-core-0.86.13 helpers/yarn/lib/fix-duplicates.js
dependabot-core-0.86.12 helpers/yarn/lib/fix-duplicates.js