Skip to content
This repository was archived by the owner on Nov 25, 2017. It is now read-only.

Commit 400b6bf

Browse files
committed
fix: account for rare situation where npme is not returning 404 for not found packages
Closes #1
1 parent ad24990 commit 400b6bf

File tree

3 files changed

+44
-15
lines changed

3 files changed

+44
-15
lines changed

src/index.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,21 @@ const RegClient = require('npm-registry-client')
55

66
module.exports = function (pluginConfig, {pkg, npm, plugins}, cb) {
77
npmlog.level = npm.loglevel || 'warn'
8-
const client = new RegClient({log: npmlog})
8+
let clientConfig = {log: npmlog}
9+
// disable retries for tests
10+
if (pluginConfig.retry) clientConfig.retry = pluginConfig.retry
11+
const client = new RegClient(clientConfig)
912

1013
client.get(`${npm.registry}${pkg.name.replace('/', '%2F')}`, {
1114
auth: npm.auth
1215
}, (err, data) => {
13-
if (err && err.statusCode === 404) return cb(null, {})
16+
if (err && (
17+
err.statusCode === 404 ||
18+
/not found/i.test(err.message)
19+
)) {
20+
return cb(null, {})
21+
}
22+
1423
if (err) return cb(err)
1524

1625
const version = data['dist-tags'][npm.tag]

test/mocks/registry.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,6 @@ module.exports = nock('http://registry.npmjs.org')
2828
.reply(404, {})
2929
.get('/unavailable-no-body')
3030
.reply(404)
31+
.get('/unavailable-no-404')
32+
.times(2)
33+
.replyWithError({message: 'not found', statusCode: 500, code: 'E500'})

test/specs/index.js

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -67,22 +67,39 @@ test('last release from registry', (t) => {
6767
})
6868

6969
t.test('get nothing from not yet published package name', (tt) => {
70-
tt.plan(4)
70+
tt.plan(3)
7171

72-
lastRelease({}, {
73-
pkg: {name: 'unavailable'},
74-
npm
75-
}, (err, release) => {
76-
tt.error(err)
77-
tt.is(release.version, undefined, 'no version')
72+
tt.test('unavailable', (ttt) => {
73+
lastRelease({}, {
74+
pkg: {name: 'unavailable'},
75+
npm
76+
}, (err, release) => {
77+
ttt.error(err)
78+
ttt.is(release.version, undefined, 'no version')
79+
ttt.end()
80+
})
7881
})
7982

80-
lastRelease({}, {
81-
pkg: {name: 'unavailable-no-body'},
82-
npm
83-
}, (err, release) => {
84-
tt.error(err)
85-
tt.is(release.version, undefined, 'no version')
83+
tt.test('unavailable w/o response body', (ttt) => {
84+
lastRelease({}, {
85+
pkg: {name: 'unavailable-no-body'},
86+
npm
87+
}, (err, release) => {
88+
ttt.error(err)
89+
ttt.is(release.version, undefined, 'no version')
90+
ttt.end()
91+
})
92+
})
93+
94+
tt.test('unavailable w/o status code', (ttt) => {
95+
lastRelease({retry: {count: 1, factor: 1, minTimeout: 1, maxTimeout: 2}}, {
96+
pkg: {name: 'unavailable-no-404'},
97+
npm
98+
}, (err, release) => {
99+
ttt.error(err)
100+
ttt.is(release.version, undefined, 'no version')
101+
ttt.end()
102+
})
86103
})
87104
})
88105
})

0 commit comments

Comments
 (0)