static getOutdatedPackages(lockfile, install, config, reporter, filterByPatterns, flags) {
    return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* () {
      var _ref5 = yield install.fetchRequestFromCwd();

      const reqPatterns = _ref5.requests,
            workspaceLayout = _ref5.workspaceLayout;

      // Filter out workspace patterns if necessary

      let depReqPatterns = workspaceLayout ? reqPatterns.filter(function (p) {
        return !workspaceLayout.getManifestByPattern(p.pattern);
      }) : reqPatterns;

      // filter the list down to just the packages requested.
      // prevents us from having to query the metadata for all packages.
      if (filterByPatterns && filterByPatterns.length || flags && flags.pattern) {
        const filterByNames = filterByPatterns && filterByPatterns.length ? filterByPatterns.map(function (pattern) {
          return (0, (_normalizePattern4 || _load_normalizePattern()).normalizePattern)(pattern).name;
        }) : [];
        depReqPatterns = depReqPatterns.filter(function (dep) {
          return filterByNames.indexOf((0, (_normalizePattern4 || _load_normalizePattern()).normalizePattern)(dep.pattern).name) >= 0 || flags && flags.pattern && micromatch.contains((0, (_normalizePattern4 || _load_normalizePattern()).normalizePattern)(dep.pattern).name, flags.pattern);
        });
      }

      const deps = yield Promise.all(depReqPatterns.map((() => {
        var _ref6 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ({ pattern, hint, workspaceName, workspaceLoc }) {
          const locked = lockfile.getLocked(pattern);
          if (!locked) {
            throw new (_errors || _load_errors()).MessageError(reporter.lang('lockfileOutdated'));
          }

          const name = locked.name,
                current = locked.version;

          let latest = '';
          let wanted = '';
          let url = '';

          const normalized = (0, (_normalizePattern4 || _load_normalizePattern()).normalizePattern)(pattern);

          if ((0, (_index || _load_index()).getExoticResolver)(pattern) || (0, (_index || _load_index()).getExoticResolver)(normalized.range)) {
            latest = wanted = 'exotic';
            url = normalized.range;
          } else {
            const registry = config.registries[locked.registry];

            var _ref7 = yield registry.checkOutdated(config, name, normalized.range);

            latest = _ref7.latest;
            wanted = _ref7.wanted;
            url = _ref7.url;
          }

          return {
            name,
            current,
            wanted,
            latest,
            url,
            hint,
            range: normalized.range,
            upgradeTo: '',
            workspaceName: workspaceName || '',
            workspaceLoc: workspaceLoc || ''
          };
        });

        return function (_x) {
          return _ref6.apply(this, arguments);
        };
      })()));

      // Make sure to always output `exotic` versions to be compatible with npm
      const isDepOld = function isDepOld({ current, latest, wanted }) {
        return latest === 'exotic' || (_semver || _load_semver()).default.lt(current, wanted) || (_semver || _load_semver()).default.lt(current, latest);
      };
      const orderByName = function orderByName(depA, depB) {
        return depA.name.localeCompare(depB.name);
      };
      return deps.filter(isDepOld).sort(orderByName);
    })();
  }
Gets all of the outdated packages and sorts them appropriately