From 20676fec62beb41affecbfcbd01187e8724aede9 Mon Sep 17 00:00:00 2001 From: Lars Willighagen Date: Mon, 24 Dec 2018 14:03:54 +0100 Subject: [PATCH 1/4] error-message: strip version info from pkg on E404 See https://npm.community/t/4227 --- lib/utils/error-message.js | 6 ++-- test/tap/404.js | 73 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 test/tap/404.js diff --git a/lib/utils/error-message.js b/lib/utils/error-message.js index 55c54634542fa..d90ed483c68de 100644 --- a/lib/utils/error-message.js +++ b/lib/utils/error-message.js @@ -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."]) + detail.push(['404', '', "'" + pkg + "' 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!)']) diff --git a/test/tap/404.js b/test/tap/404.js new file mode 100644 index 0000000000000..9762796f0bf99 --- /dev/null +++ b/test/tap/404.js @@ -0,0 +1,73 @@ +'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 fs = require('fs') + +const e404 = /test-npm-404' 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.ok(stderr.match(e404), 'error output') + t.notOk(stderr.match(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.ok(stderr.match(e404), 'error output') + t.notOk(stderr.match(invalidPackage), 'no invalidity error') + }) +}) + +test('cleanup', function (t) { + common.fakeRegistry.close() + cleanup() + t.done() +}) From bde2774eed527159d17f18139058f74d3577f639 Mon Sep 17 00:00:00 2001 From: Lars Willighagen Date: Tue, 25 Dec 2018 01:36:00 +0100 Subject: [PATCH 2/4] test: use t.match --- test/tap/404.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/tap/404.js b/test/tap/404.js index 9762796f0bf99..cd2a30eb1f32b 100644 --- a/test/tap/404.js +++ b/test/tap/404.js @@ -53,16 +53,16 @@ test('setup', function (t) { 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.ok(stderr.match(e404), 'error output') - t.notOk(stderr.match(invalidPackage), 'no invalidity error') + 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.ok(stderr.match(e404), 'error output') - t.notOk(stderr.match(invalidPackage), 'no invalidity error') + t.match(stderr, e404, 'error output') + t.notMatch(stderr, invalidPackage, 'no invalidity error') }) }) From c9dea2947242ce4fb83dc3721b080f1a65039f52 Mon Sep 17 00:00:00 2001 From: Lars Willighagen Date: Tue, 25 Dec 2018 01:37:39 +0100 Subject: [PATCH 3/4] test: remove fs --- test/tap/404.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/tap/404.js b/test/tap/404.js index cd2a30eb1f32b..65f9c352ec19d 100644 --- a/test/tap/404.js +++ b/test/tap/404.js @@ -5,7 +5,6 @@ const Tacks = require('tacks') const File = Tacks.File const Dir = Tacks.Dir const common = require('../common-tap.js') -const fs = require('fs') const e404 = /test-npm-404' 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/ From 0168d7deb6dd2db03832f24519c92431afaf5035 Mon Sep 17 00:00:00 2001 From: Lars Willighagen Date: Wed, 13 Feb 2019 15:07:30 +0100 Subject: [PATCH 4/4] error-message: keep version in message Keep the version number in the error message. See https://github.com/npm/cli/pull/132#discussion_r245839494 --- lib/utils/error-message.js | 2 +- test/tap/404.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/utils/error-message.js b/lib/utils/error-message.js index d90ed483c68de..bf5d65c0df3ca 100644 --- a/lib/utils/error-message.js +++ b/lib/utils/error-message.js @@ -157,7 +157,7 @@ function errorMessage (er) { var pkg = er.pkgid.replace(/(?!^)@.*$/, '') detail.push(['404', '']) - detail.push(['404', '', "'" + pkg + "' is not in the npm registry."]) + detail.push(['404', '', "'" + er.pkgid + "' is not in the npm registry."]) var valResult = nameValidator(pkg) diff --git a/test/tap/404.js b/test/tap/404.js index 65f9c352ec19d..710780ad26e60 100644 --- a/test/tap/404.js +++ b/test/tap/404.js @@ -6,7 +6,7 @@ const File = Tacks.File const Dir = Tacks.Dir const common = require('../common-tap.js') -const e404 = /test-npm-404' is not in the npm registry/ +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'))