Skip to content

Commit 150e4a7

Browse files
chore: release 6.0.1 (npm#137)
🤖 I have created a release *beep* *boop* --- [6.0.1](npm/validate-npm-package-name@v6.0.0...v6.0.1) (2025-06-05) * [`68a5c0e`](npm@68a5c0e) [npm#136](npm#136) adding validation for scoped packages that begin with one or more periods (@shmam) * [`99ced75`](npm@99ced75) [npm#136](npm#136) template-oss fixes (@shmam) * [`c45bc37`](npm@c45bc37) [npm#134](npm#134) bump @npmcli/template-oss from 4.23.3 to 4.24.3 (npm#134) (@dependabot[bot], @npm-cli-bot) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent 99ced75 commit 150e4a7

5 files changed

Lines changed: 124 additions & 61 deletions

File tree

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "6.0.0"
2+
".": "6.0.1"
33
}

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# Changelog
22

3+
## [6.0.1](https://github.com/npm/validate-npm-package-name/compare/v6.0.0...v6.0.1) (2025-06-05)
4+
### Bug Fixes
5+
* [`68a5c0e`](https://github.com/npm/validate-npm-package-name/commit/68a5c0e9776544fc888f93a7deef5a817272ef66) [#136](https://github.com/npm/validate-npm-package-name/pull/136) adding validation for scoped packages that begin with one or more periods (@shmam)
6+
### Chores
7+
* [`99ced75`](https://github.com/npm/validate-npm-package-name/commit/99ced7599aa0f7c315055c1a943075d5460c24d5) [#136](https://github.com/npm/validate-npm-package-name/pull/136) template-oss fixes (@shmam)
8+
* [`c45bc37`](https://github.com/npm/validate-npm-package-name/commit/c45bc3709039088c7f97e89816452d3f04f68023) [#134](https://github.com/npm/validate-npm-package-name/pull/134) bump @npmcli/template-oss from 4.23.3 to 4.24.3 (#134) (@dependabot[bot], @npm-cli-bot)
9+
310
## [6.0.0](https://github.com/npm/validate-npm-package-name/compare/v5.0.1...v6.0.0) (2024-09-24)
411
### ⚠️ BREAKING CHANGES
512
* `validate-npm-package-name` now supports node `^18.17.0 || >=20.5.0`

lib/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ function validate (name) {
6262

6363
// mIxeD CaSe nAMEs
6464
if (name.toLowerCase() !== name) {
65-
warnings.push('name can no longer contain capital letters')
65+
warnings.push(
66+
'name can no longer contain capital letters. Try: ' + name.toLowerCase()
67+
)
6668
}
6769

6870
if (/[~'!()*]/.test(name.split('/').slice(-1)[0])) {

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "validate-npm-package-name",
3-
"version": "6.0.0",
3+
"version": "6.0.1",
44
"description": "Give me a string and I'll tell you if it's a valid npm package name",
55
"main": "lib/",
66
"directories": {

test/index.js

Lines changed: 112 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,143 +1,197 @@
1-
'use strict'
1+
"use strict";
22

3-
var validate = require('..')
4-
var test = require('tap').test
3+
var validate = require("..");
4+
var test = require("tap").test;
55

6-
test('validate-npm-package-name', function (t) {
6+
test("validate-npm-package-name", function (t) {
77
// Traditional
88

9-
t.same(validate('some-package'), { validForNewPackages: true, validForOldPackages: true })
10-
t.same(validate('example.com'), { validForNewPackages: true, validForOldPackages: true })
11-
t.same(validate('under_score'), { validForNewPackages: true, validForOldPackages: true })
12-
t.same(validate('period.js'), { validForNewPackages: true, validForOldPackages: true })
13-
t.same(validate('123numeric'), { validForNewPackages: true, validForOldPackages: true })
14-
t.same(validate('crazy!'), {
9+
t.same(validate("some-package"), {
10+
validForNewPackages: true,
11+
validForOldPackages: true,
12+
});
13+
t.same(validate("example.com"), {
14+
validForNewPackages: true,
15+
validForOldPackages: true,
16+
});
17+
t.same(validate("under_score"), {
18+
validForNewPackages: true,
19+
validForOldPackages: true,
20+
});
21+
t.same(validate("period.js"), {
22+
validForNewPackages: true,
23+
validForOldPackages: true,
24+
});
25+
t.same(validate("123numeric"), {
26+
validForNewPackages: true,
27+
validForOldPackages: true,
28+
});
29+
t.same(validate("crazy!"), {
1530
validForNewPackages: false,
1631
validForOldPackages: true,
1732
warnings: ['name can no longer contain special characters ("~\'!()*")'],
18-
})
33+
});
1934

2035
// Scoped (npm 2+)
2136

22-
t.same(validate('@npm/thingy'), { validForNewPackages: true, validForOldPackages: true })
23-
t.same(validate('@npm-zors/money!time.js'), {
37+
t.same(validate("@npm/thingy"), {
38+
validForNewPackages: true,
39+
validForOldPackages: true,
40+
});
41+
t.same(validate("@npm-zors/money!time.js"), {
2442
validForNewPackages: false,
2543
validForOldPackages: true,
2644
warnings: ['name can no longer contain special characters ("~\'!()*")'],
27-
})
45+
});
2846

2947
// Invalid
3048

3149
t.same(validate(null), {
3250
validForNewPackages: false,
3351
validForOldPackages: false,
34-
errors: ['name cannot be null'] })
52+
errors: ["name cannot be null"],
53+
});
3554

3655
t.same(validate(undefined), {
3756
validForNewPackages: false,
3857
validForOldPackages: false,
39-
errors: ['name cannot be undefined'] })
58+
errors: ["name cannot be undefined"],
59+
});
4060

4161
t.same(validate(42), {
4262
validForNewPackages: false,
4363
validForOldPackages: false,
44-
errors: ['name must be a string'] })
64+
errors: ["name must be a string"],
65+
});
4566

46-
t.same(validate(''), {
67+
t.same(validate(""), {
4768
validForNewPackages: false,
4869
validForOldPackages: false,
49-
errors: ['name length must be greater than zero'] })
70+
errors: ["name length must be greater than zero"],
71+
});
5072

51-
t.same(validate('.start-with-period'), {
73+
t.same(validate(".start-with-period"), {
5274
validForNewPackages: false,
5375
validForOldPackages: false,
54-
errors: ['name cannot start with a period'] })
76+
errors: ["name cannot start with a period"],
77+
});
5578

56-
t.same(validate('@npm/.'), {
79+
t.same(validate("@npm/."), {
5780
validForNewPackages: false,
5881
validForOldPackages: false,
59-
errors: ['name cannot start with a period'] })
82+
errors: ["name cannot start with a period"],
83+
});
6084

61-
t.same(validate('@npm/..'), {
85+
t.same(validate("@npm/.."), {
6286
validForNewPackages: false,
6387
validForOldPackages: false,
64-
errors: ['name cannot start with a period'] })
88+
errors: ["name cannot start with a period"],
89+
});
6590

66-
t.same(validate('@npm/.package'), {
91+
t.same(validate("@npm/.package"), {
6792
validForNewPackages: false,
6893
validForOldPackages: false,
69-
errors: ['name cannot start with a period'] })
94+
errors: ["name cannot start with a period"],
95+
});
7096

71-
t.same(validate('_start-with-underscore'), {
97+
t.same(validate("_start-with-underscore"), {
7298
validForNewPackages: false,
7399
validForOldPackages: false,
74-
errors: ['name cannot start with an underscore'] })
100+
errors: ["name cannot start with an underscore"],
101+
});
75102

76-
t.same(validate('contain:colons'), {
103+
t.same(validate("contain:colons"), {
77104
validForNewPackages: false,
78105
validForOldPackages: false,
79-
errors: ['name can only contain URL-friendly characters'] })
106+
errors: ["name can only contain URL-friendly characters"],
107+
});
80108

81-
t.same(validate(' leading-space'), {
109+
t.same(validate(" leading-space"), {
82110
validForNewPackages: false,
83111
validForOldPackages: false,
84112
/* eslint-disable-next-line max-len */
85-
errors: ['name cannot contain leading or trailing spaces', 'name can only contain URL-friendly characters'] })
113+
errors: [
114+
"name cannot contain leading or trailing spaces",
115+
"name can only contain URL-friendly characters",
116+
],
117+
});
86118

87-
t.same(validate('trailing-space '), {
119+
t.same(validate("trailing-space "), {
88120
validForNewPackages: false,
89121
validForOldPackages: false,
90122
/* eslint-disable-next-line max-len */
91-
errors: ['name cannot contain leading or trailing spaces', 'name can only contain URL-friendly characters'] })
123+
errors: [
124+
"name cannot contain leading or trailing spaces",
125+
"name can only contain URL-friendly characters",
126+
],
127+
});
92128

93-
t.same(validate('s/l/a/s/h/e/s'), {
129+
t.same(validate("s/l/a/s/h/e/s"), {
94130
validForNewPackages: false,
95131
validForOldPackages: false,
96-
errors: ['name can only contain URL-friendly characters'] })
132+
errors: ["name can only contain URL-friendly characters"],
133+
});
97134

98-
t.same(validate('node_modules'), {
135+
t.same(validate("node_modules"), {
99136
validForNewPackages: false,
100137
validForOldPackages: false,
101-
errors: ['node_modules is a blacklisted name'] })
138+
errors: ["node_modules is a blacklisted name"],
139+
});
102140

103-
t.same(validate('favicon.ico'), {
141+
t.same(validate("favicon.ico"), {
104142
validForNewPackages: false,
105143
validForOldPackages: false,
106-
errors: ['favicon.ico is a blacklisted name'] })
144+
errors: ["favicon.ico is a blacklisted name"],
145+
});
107146

108147
// Node/IO Core
109148

110-
t.same(validate('http'), {
149+
t.same(validate("http"), {
111150
validForNewPackages: false,
112151
validForOldPackages: true,
113-
warnings: ['http is a core module name'] })
152+
warnings: ["http is a core module name"],
153+
});
114154

115-
t.deepEqual(validate('process'), {
155+
t.deepEqual(validate("process"), {
116156
validForNewPackages: false,
117157
validForOldPackages: true,
118-
warnings: ['process is a core module name'] })
158+
warnings: ["process is a core module name"],
159+
});
119160

120161
// Long Package Names
121162

122163
/* eslint-disable-next-line max-len */
123-
t.same(validate('ifyouwanttogetthesumoftwonumberswherethosetwonumbersarechosenbyfindingthelargestoftwooutofthreenumbersandsquaringthemwhichismultiplyingthembyitselfthenyoushouldinputthreenumbersintothisfunctionanditwilldothatforyou-'), {
124-
validForNewPackages: false,
125-
validForOldPackages: true,
126-
warnings: ['name can no longer contain more than 214 characters'],
127-
})
164+
t.same(
165+
validate(
166+
"ifyouwanttogetthesumoftwonumberswherethosetwonumbersarechosenbyfindingthelargestoftwooutofthreenumbersandsquaringthemwhichismultiplyingthembyitselfthenyoushouldinputthreenumbersintothisfunctionanditwilldothatforyou-"
167+
),
168+
{
169+
validForNewPackages: false,
170+
validForOldPackages: true,
171+
warnings: ["name can no longer contain more than 214 characters"],
172+
}
173+
);
128174

129175
/* eslint-disable-next-line max-len */
130-
t.same(validate('ifyouwanttogetthesumoftwonumberswherethosetwonumbersarechosenbyfindingthelargestoftwooutofthreenumbersandsquaringthemwhichismultiplyingthembyitselfthenyoushouldinputthreenumbersintothisfunctionanditwilldothatforyou'), {
131-
validForNewPackages: true,
132-
validForOldPackages: true,
133-
})
176+
t.same(
177+
validate(
178+
"ifyouwanttogetthesumoftwonumberswherethosetwonumbersarechosenbyfindingthelargestoftwooutofthreenumbersandsquaringthemwhichismultiplyingthembyitselfthenyoushouldinputthreenumbersintothisfunctionanditwilldothatforyou"
179+
),
180+
{
181+
validForNewPackages: true,
182+
validForOldPackages: true,
183+
}
184+
);
134185

135186
// Legacy Mixed-Case
136187

137-
t.same(validate('CAPITAL-LETTERS'), {
188+
t.same(validate("CAPITAL-LETTERS"), {
138189
validForNewPackages: false,
139190
validForOldPackages: true,
140-
warnings: ['name can no longer contain capital letters'] })
191+
warnings: [
192+
"name can no longer contain capital letters. Try: capital-letterss",
193+
],
194+
});
141195

142-
t.end()
143-
})
196+
t.end();
197+
});

0 commit comments

Comments
 (0)