diff --git a/lib/api/npm.js b/lib/api/npm.js index 52b16396d683863623dba17e6bd0e5a46e31c261..12becdabd14a5e2fb6242dc21b2527e01a75905a 100644 --- a/lib/api/npm.js +++ b/lib/api/npm.js @@ -3,7 +3,7 @@ const got = require('got'); const url = require('url'); const ini = require('ini'); -const registryUrl = require('registry-url'); +const getRegistryUrl = require('registry-auth-token/registry-url'); const registryAuthToken = require('registry-auth-token'); const parse = require('github-url-from-git'); @@ -27,7 +27,7 @@ async function setNpmrc(input) { async function getDependency(name, logger) { logger.debug(`getDependency(${name})`); const scope = name.split('/')[0]; - const regUrl = registryUrl(scope, { npmrc }); + const regUrl = getRegistryUrl(scope, npmrc); const pkgUrl = url.resolve( regUrl, encodeURIComponent(name).replace(/^%40/, '@') diff --git a/package.json b/package.json index 6d36559c8b7de6b6d2b3a6a204cd3b2dbdb79588..283147166c91818a195e1a9a429fd8b8bd9503df 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,6 @@ "moment": "2.18.1", "moment-timezone": "0.5.13", "registry-auth-token": "3.3.1", - "registry-url": "3.1.0", "root-require": "0.3.1", "semver": "5.4.1", "semver-stable": "2.0.4", diff --git a/test/api/__snapshots__/npm.spec.js.snap b/test/api/__snapshots__/npm.spec.js.snap index 6beaef77161449a9cb73182fd88ec39f3c4f11d6..6d70d5a16d61414ec5004ef62a36c08515a5f756 100644 --- a/test/api/__snapshots__/npm.spec.js.snap +++ b/test/api/__snapshots__/npm.spec.js.snap @@ -1,5 +1,34 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`api/npm should fetch package info from custom registry 1`] = ` +Object { + "dist-tags": Object { + "latest": "0.0.1", + }, + "homepage": "https://google.com", + "name": undefined, + "renovate-config": undefined, + "repositoryUrl": "https://google.com", + "versions": Object { + "0.0.1": Object { + "time": "", + }, + }, +} +`; + +exports[`api/npm should fetch package info from custom registry 2`] = ` +Array [ + "https://npm.mycustomregistry.com/foobar", + Object { + "headers": Object { + "authorization": "Bearer undefined", + }, + "json": true, + }, +] +`; + exports[`api/npm should fetch package info from npm 1`] = ` Object { "dist-tags": Object { @@ -19,7 +48,7 @@ Object { exports[`api/npm should fetch package info from npm 2`] = ` Array [ - "https://npm.mycustomregistry.com/foobar", + "https://registry.npmjs.org/foobar", Object { "headers": Object {}, "json": true, @@ -46,7 +75,7 @@ Object { exports[`api/npm should send an authorization header if provided 2`] = ` Array [ - "https://npm.mycustomregistry.com/foobar", + "https://registry.npmjs.org/foobar", Object { "headers": Object { "authorization": "Basic 1234", @@ -75,7 +104,7 @@ Object { exports[`api/npm should use NPM_TOKEN if provided 2`] = ` Array [ - "https://npm.mycustomregistry.com/foobar", + "https://registry.npmjs.org/foobar", Object { "headers": Object { "authorization": "Bearer some-token", @@ -104,7 +133,7 @@ Object { exports[`api/npm should use homepage 2`] = ` Array [ - "https://npm.mycustomregistry.com/foobarhome", + "https://registry.npmjs.org/foobarhome", Object { "headers": Object {}, "json": true, diff --git a/test/api/npm.spec.js b/test/api/npm.spec.js index 168d1ec065e52d4a32b54bf7dd78bd5865912836..bed2cc8ca148b03dad25bc2c240b49b6525f9e4c 100644 --- a/test/api/npm.spec.js +++ b/test/api/npm.spec.js @@ -1,10 +1,8 @@ const npm = require('../../lib/api/npm'); const got = require('got'); -const registryUrl = require('registry-url'); const registryAuthToken = require('registry-auth-token'); const logger = require('../_fixtures/logger'); -jest.mock('registry-url'); jest.mock('registry-auth-token'); jest.mock('got'); @@ -35,7 +33,6 @@ describe('api/npm', () => { npm.resetCache(); }); it('should fetch package info from npm', async () => { - registryUrl.mockImplementation(() => 'https://npm.mycustomregistry.com/'); got.mockImplementation(() => Promise.resolve(npmResponse)); const res = await npm.getDependency('foobar', logger); expect(res).toMatchSnapshot(); @@ -43,7 +40,6 @@ describe('api/npm', () => { expect(call).toMatchSnapshot(); }); it('should use homepage', async () => { - registryUrl.mockImplementation(() => 'https://npm.mycustomregistry.com/'); const npmResponseHomepage = { ...npmResponse }; npmResponseHomepage.body.repository.url = ''; npmResponseHomepage.body.homepage = 'https://google.com'; @@ -54,7 +50,6 @@ describe('api/npm', () => { expect(call).toMatchSnapshot(); }); it('should cache package info from npm', async () => { - registryUrl.mockImplementation(() => 'https://npm.mycustomregistry.com/'); got.mockImplementation(() => Promise.resolve(npmResponse)); const res1 = await npm.getDependency('foobar', logger); const res2 = await npm.getDependency('foobar', logger); @@ -62,7 +57,6 @@ describe('api/npm', () => { expect(got.mock.calls.length).toEqual(1); }); it('should return null if lookup fails', async () => { - registryUrl.mockImplementation(() => 'https://npm.mycustomregistry.com/'); got.mockImplementation(() => { throw new Error('not found'); }); @@ -70,7 +64,6 @@ describe('api/npm', () => { expect(res).toBeNull(); }); it('should send an authorization header if provided', async () => { - registryUrl.mockImplementation(() => 'https://npm.mycustomregistry.com/'); registryAuthToken.mockImplementation(() => ({ type: 'Basic', token: '1234', @@ -82,7 +75,6 @@ describe('api/npm', () => { expect(call).toMatchSnapshot(); }); it('should use NPM_TOKEN if provided', async () => { - registryUrl.mockImplementation(() => 'https://npm.mycustomregistry.com/'); got.mockImplementation(() => Promise.resolve(npmResponse)); const oldToken = process.env.NPM_TOKEN; process.env.NPM_TOKEN = 'some-token'; @@ -92,7 +84,12 @@ describe('api/npm', () => { const call = got.mock.calls[0]; expect(call).toMatchSnapshot(); }); - it('sets .npmrc', () => { - npm.setNpmrc('input'); + it('should fetch package info from custom registry', async () => { + got.mockImplementation(() => Promise.resolve(npmResponse)); + npm.setNpmrc('registry=https://npm.mycustomregistry.com/'); + const res = await npm.getDependency('foobar', logger); + expect(res).toMatchSnapshot(); + const call = got.mock.calls[0]; + expect(call).toMatchSnapshot(); }); }); diff --git a/yarn.lock b/yarn.lock index 087bd425d5bcf4e7d54bc3ef4a23df82b587f9c1..ca2e5c7931b280a7e3f17493af814ac6b9f7147e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -810,13 +810,11 @@ content-type-parser@^1.0.1: resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" conventional-changelog-angular@^1.3.4: - version "1.4.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.4.0.tgz#118b9f7d41a3d99500bfb6bea1f3525e055e8b9b" + version "1.5.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.5.0.tgz#50b2d45008448455fdf67e06ea01972fbd08182a" dependencies: compare-func "^1.3.1" - github-url-from-git "^1.4.0" q "^1.4.1" - read-pkg-up "^2.0.0" conventional-changelog-atom@^0.1.0: version "0.1.1" @@ -831,16 +829,16 @@ conventional-changelog-codemirror@^0.1.0: q "^1.4.1" conventional-changelog-core@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-1.9.0.tgz#de5dfbc091847656508d4a389e35c9a1bc49e7f4" + version "1.9.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-1.9.1.tgz#ddf767c405850dfc8df31726c80fa1a6a10bdc7b" dependencies: - conventional-changelog-writer "^1.1.0" - conventional-commits-parser "^1.0.0" + conventional-changelog-writer "^2.0.1" + conventional-commits-parser "^2.0.0" dateformat "^1.0.12" get-pkg-repo "^1.0.0" git-raw-commits "^1.2.0" git-remote-origin-url "^2.0.0" - git-semver-tags "^1.2.0" + git-semver-tags "^1.2.1" lodash "^4.0.0" normalize-package-data "^2.3.5" q "^1.4.1" @@ -849,8 +847,8 @@ conventional-changelog-core@^1.9.0: through2 "^2.0.0" conventional-changelog-ember@^0.2.6: - version "0.2.6" - resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-0.2.6.tgz#8b7355419f5127493c4c562473ab2fc792f1c2b6" + version "0.2.7" + resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-0.2.7.tgz#c6aff35976284e7222649f81c62bd96ff3217bd2" dependencies: q "^1.4.1" @@ -885,9 +883,9 @@ conventional-changelog-jshint@^0.1.0: compare-func "^1.3.1" q "^1.4.1" -conventional-changelog-writer@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-1.4.1.tgz#3f4cb4d003ebb56989d30d345893b52a43639c8e" +conventional-changelog-writer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-2.0.1.tgz#47c10d0faba526b78d194389d1e931d09ee62372" dependencies: compare-func "^1.3.1" conventional-commits-filter "^1.0.0" @@ -941,9 +939,9 @@ conventional-commits-filter@^1.0.0: is-subset "^0.1.1" modify-values "^1.0.0" -conventional-commits-parser@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-1.3.0.tgz#e327b53194e1a7ad5dc63479ee9099a52b024865" +conventional-commits-parser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-2.0.0.tgz#71d01910cb0a99aeb20c144e50f81f4df3178447" dependencies: JSONStream "^1.0.4" is-text-path "^1.0.0" @@ -1677,7 +1675,7 @@ git-remote-origin-url@^2.0.0: gitconfiglocal "^1.0.0" pify "^2.3.0" -git-semver-tags@^1.2.0: +git-semver-tags@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-1.2.1.tgz#6ccd2a52e735b736748dc762444fcd9588e27490" dependencies: @@ -3430,7 +3428,7 @@ randomatic@^1.1.3: is-number "^3.0.0" kind-of "^4.0.0" -rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: +rc@^1.1.6, rc@^1.1.7: version "1.2.1" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" dependencies: @@ -3530,12 +3528,6 @@ registry-auth-token@3.3.1: rc "^1.1.6" safe-buffer "^5.0.1" -registry-url@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - dependencies: - rc "^1.0.1" - remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"