Skip to content

Commit

Permalink
error-message: strip version info from pkg on E404 (npm#132)
Browse files Browse the repository at this point in the history
Fixes: https://npm.community/t/4227
PR-URL: npm#132
Credit: @larsgw
Reviewed-By: @iarna
Reviewed-By: @zkat
  • Loading branch information
larsgw authored and zkat committed Feb 18, 2019
1 parent b8b8afd commit a805a95
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 1 deletion.
4 changes: 3 additions & 1 deletion lib/utils/error-message.js
Original file line number Diff line number Diff line change
Expand Up @@ -154,10 +154,12 @@ function errorMessage (er) {
var msg = er.message.replace(/^404\s+/, '')
short.push(['404', msg])
if (er.pkgid && er.pkgid !== '-') {
var pkg = er.pkgid.replace(/(?!^)@.*$/, '')

detail.push(['404', ''])
detail.push(['404', '', "'" + er.pkgid + "' is not in the npm registry."])

var valResult = nameValidator(er.pkgid)
var valResult = nameValidator(pkg)

if (valResult.validForNewPackages) {
detail.push(['404', 'You should bug the author to publish it (or use the name yourself!)'])
Expand Down
72 changes: 72 additions & 0 deletions test/tap/404.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
'use strict'
const path = require('path')
const test = require('tap').test
const Tacks = require('tacks')
const File = Tacks.File
const Dir = Tacks.Dir
const common = require('../common-tap.js')

const e404 = /test-npm-404@latest' is not in the npm registry/
const invalidPackage = /Your package name is not valid, because[\s\S]+1\. name can only contain URL-friendly characters/

const basedir = path.join(__dirname, path.basename(__filename, '.js'))
const testdir = path.join(basedir, 'testdir')
const cachedir = path.join(basedir, 'cache')
const globaldir = path.join(basedir, 'global')
const tmpdir = path.join(basedir, 'tmp')

const env = common.newEnv().extend({
npm_config_cache: cachedir,
npm_config_tmp: tmpdir,
npm_config_prefix: globaldir,
npm_config_registry: common.registry,
npm_config_loglevel: 'error'
})

const fixture = new Tacks(Dir({
cache: Dir(),
global: Dir(),
tmp: Dir(),
testdir: Dir({
'package.json': File({
name: 'test',
version: '1.0.0'
})
})
}))

function setup () {
cleanup()
fixture.create(basedir)
}

function cleanup () {
fixture.remove(basedir)
}

test('setup', function (t) {
setup()
return common.fakeRegistry.listen()
})

test('404 message for basic package', function (t) {
return common.npm(['install', 'test-npm-404'], {cwd: testdir, env}).then(([code, stdout, stderr]) => {
t.is(code, 1, 'error code')
t.match(stderr, e404, 'error output')
t.notMatch(stderr, invalidPackage, 'no invalidity error')
})
})

test('404 message for scoped package', function (t) {
return common.npm(['install', '@npm/test-npm-404'], {cwd: testdir, env}).then(([code, stdout, stderr]) => {
t.is(code, 1, 'error code')
t.match(stderr, e404, 'error output')
t.notMatch(stderr, invalidPackage, 'no invalidity error')
})
})

test('cleanup', function (t) {
common.fakeRegistry.close()
cleanup()
t.done()
})

0 comments on commit a805a95

Please sign in to comment.