Skip to content

Commit afc9c14

Browse files
BREAKING CHANGE: do not allow "~'!()*" in package names
1 parent 11cc3d2 commit afc9c14

2 files changed

Lines changed: 10 additions & 2 deletions

File tree

index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ var validate = module.exports = function(name) {
6868
warnings.push("name can no longer contain capital letters")
6969
}
7070

71+
if (/[~'!()*]/.test(name.split('/').slice(-1)[0])) {
72+
warnings.push('name can no longer contain special characters ("~\'!()*")')
73+
}
74+
7175
if (encodeURIComponent(name) !== name) {
7276

7377
// Maybe it's a scoped package name, like @user/package

test/index.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,16 @@ test("validate-npm-package-name", function (t) {
1212
t.deepEqual(validate("under_score"), {validForNewPackages: true, validForOldPackages: true})
1313
t.deepEqual(validate("period.js"), {validForNewPackages: true, validForOldPackages: true})
1414
t.deepEqual(validate("123numeric"), {validForNewPackages: true, validForOldPackages: true})
15-
t.deepEqual(validate("crazy!"), {validForNewPackages: true, validForOldPackages: true})
15+
t.deepEqual(validate("crazy!"), {validForNewPackages: false, validForOldPackages: true, warnings: [
16+
'name can no longer contain special characters ("~\'!()*")'
17+
]})
1618

1719
// Scoped (npm 2+)
1820

1921
t.deepEqual(validate("@npm/thingy"), {validForNewPackages: true, validForOldPackages: true})
20-
t.deepEqual(validate("@npm-zors/money!time.js"), {validForNewPackages: true, validForOldPackages: true})
22+
t.deepEqual(validate("@npm-zors/money!time.js"), {validForNewPackages: false, validForOldPackages: true, warnings: [
23+
'name can no longer contain special characters ("~\'!()*")'
24+
]})
2125

2226
// Invalid
2327

0 commit comments

Comments
 (0)