From 16965c5166a6d5782b6080ec443c96ad2f1f6417 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sun, 30 Sep 2018 20:59:46 +0200 Subject: [PATCH] Default latest version in case it is not sent by the npm registry --- __tests__/registries/npm-registry.js | 28 ++++++++++++++++++++++++++++ src/registries/npm-registry.js | 8 +++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/__tests__/registries/npm-registry.js b/__tests__/registries/npm-registry.js index b9a85834cd..6a0c204c8a 100644 --- a/__tests__/registries/npm-registry.js +++ b/__tests__/registries/npm-registry.js @@ -866,4 +866,32 @@ describe('checkOutdated functional test', () => { expect(message).toEqual(expect.stringContaining('No valid versions')); }); + + test('latest version fallback to wanted package manifest', async () => { + const testCwd = '.'; + const {mockRequestManager, mockRegistries, mockReporter} = createMocks(); + const npmRegistry = new NpmRegistry(testCwd, mockRegistries, mockRequestManager, mockReporter, true, []); + + mockRequestManager.request = () => { + return { + 'dist-tags': {}, + versions: { + '2.0.0': { + version: '2.0.0', + repository: { + url: 'http://package.repo.com', + }, + }, + }, + }; + }; + + const result = await npmRegistry.checkOutdated(mockConfig, 'left-pad', '2.0.0'); + + expect(result).toMatchObject({ + latest: '2.0.0', + wanted: '2.0.0', + url: 'http://package.repo.com', + }); + }); }); diff --git a/src/registries/npm-registry.js b/src/registries/npm-registry.js index 5a4f40c421..27981337ee 100644 --- a/src/registries/npm-registry.js +++ b/src/registries/npm-registry.js @@ -206,10 +206,16 @@ export default class NpmRegistry extends Registry { homepage = wantedPkg.homepage; } + let latest = req['dist-tags'].latest; + // In certain cases, registries do not return a 'latest' tag. + if (!latest) { + latest = wantedPkg.version; + } + const url = homepage || (repository && repository.url) || ''; return { - latest: req['dist-tags'].latest, + latest, wanted: wantedPkg.version, url, };