Skip to content
Snippets Groups Projects
Select Git revision
  • ffbf332a32c62f0c1f169804e63ebcf85443db5c
  • master default
2 results

versions.js

Blame
  • versions.js 17.30 KiB
    const semver = require('semver');
    const stable = require('semver-stable');
    const _ = require('lodash');
    const semverUtils = require('semver-utils');
    const moment = require('moment');
    
    module.exports = {
      determineUpgrades,
      isRange,
      isValidVersion,
      isPastLatest,
    };
    
    function determineUpgrades(npmDep, config) {
      const dependency = npmDep.name;
      logger.debug({ dependency }, `determineUpgrades()`);
      logger.trace({ npmDep, config });
      const result = {
        type: 'warning',
      };
      const { lockedVersion, pinVersions, allowedVersions } = config;
      const { versions } = npmDep;
      if (!versions || Object.keys(versions).length === 0) {
        result.message = `No versions returned from registry for this package`;
        logger.warn({ dependency }, result.message);
        return [result];
      }
      let versionList = Object.keys(versions);
      const allUpgrades = {};
      let { currentVersion } = config;
      // filter out versions past latest
      const currentIsPastLatest = isPastLatest(
        npmDep,
        semver.minSatisfying(versionList, currentVersion)
      );
      if (currentIsPastLatest) {
        logger.debug({ name: npmDep.name, currentVersion }, 'currentIsPastLatest');
      }
      versionList = versionList.filter(
        version =>
          currentIsPastLatest || // if current is past latest then don't filter any
          config.respectLatest === false || // if user has configured respectLatest to false
          isPastLatest(npmDep, version) === false // if the version is less than or equal to latest
      );
      let rangeOperator;
      if (config.upgradeInRange && semver.validRange(currentVersion)) {
        logger.debug({ currentVersion }, 'upgradeInRange is true');
        const parsedRange = semverUtils.parseRange(currentVersion);
        if (parsedRange && parsedRange.length === 1) {
          const [range] = parsedRange;
          if (range.major && range.minor && range.patch) {
            if (range.operator === '^' || range.operator === '~') {
              logger.debug('Applying upgradeInRange');
              currentVersion = `${range.major}.${range.minor}.${range.patch}`;
              currentVersion += range.release ? `-${range.release}` : '';
              logger.debug({ currentVersion }, 'upgradeInRange currentVersion');
              rangeOperator = range.operator;
            } else {
              logger.debug({ currentVersion }, 'Unsupported range type');
            }
          } else {
            logger.debug({ currentVersion }, 'Range is not fully specified');
          }
        } else {
          logger.debug({ currentVersion }, 'Skipping complex range');
        }
      }
      let changeLogFromVersion = currentVersion;
      // Check for a current range and pin it
      if (isRange(currentVersion)) {