diff options
Diffstat (limited to 'node_modules/validate-npm-package-name/index.js')
-rw-r--r-- | node_modules/validate-npm-package-name/index.js | 51 |
1 files changed, 27 insertions, 24 deletions
diff --git a/node_modules/validate-npm-package-name/index.js b/node_modules/validate-npm-package-name/index.js index 66a1d4732..eb43fa25e 100644 --- a/node_modules/validate-npm-package-name/index.js +++ b/node_modules/validate-npm-package-name/index.js @@ -1,75 +1,79 @@ -var scopedPackagePattern = new RegExp("^(?:@([^/]+?)[/])?([^/]+?)$"); -var builtins = require("builtins") -var blacklist = [ - "node_modules", - "favicon.ico" -]; +'use strict' -var validate = module.exports = function(name) { +var scopedPackagePattern = new RegExp('^(?:@([^/]+?)[/])?([^/]+?)$') +var builtins = require('builtins') +var blacklist = [ + 'node_modules', + 'favicon.ico' +] +var validate = module.exports = function (name) { var warnings = [] var errors = [] if (name === null) { - errors.push("name cannot be null") + errors.push('name cannot be null') return done(warnings, errors) } if (name === undefined) { - errors.push("name cannot be undefined") + errors.push('name cannot be undefined') return done(warnings, errors) } - if (typeof name !== "string") { - errors.push("name must be a string") + if (typeof name !== 'string') { + errors.push('name must be a string') return done(warnings, errors) } if (!name.length) { - errors.push("name length must be greater than zero") + errors.push('name length must be greater than zero') } if (name.match(/^\./)) { - errors.push("name cannot start with a period") + errors.push('name cannot start with a period') } if (name.match(/^_/)) { - errors.push("name cannot start with an underscore") + errors.push('name cannot start with an underscore') } if (name.trim() !== name) { - errors.push("name cannot contain leading or trailing spaces") + errors.push('name cannot contain leading or trailing spaces') } // No funny business - blacklist.forEach(function(blacklistedName){ + blacklist.forEach(function (blacklistedName) { if (name.toLowerCase() === blacklistedName) { - errors.push(blacklistedName + " is a blacklisted name") + errors.push(blacklistedName + ' is a blacklisted name') } }) // Generate warnings for stuff that used to be allowed // core module names like http, events, util, etc - builtins.forEach(function(builtin){ + builtins.forEach(function (builtin) { if (name.toLowerCase() === builtin) { - warnings.push(builtin + " is a core module name") + warnings.push(builtin + ' is a core module name') } }) // really-long-package-names-------------------------------such--length-----many---wow // the thisisareallyreallylongpackagenameitshouldpublishdowenowhavealimittothelengthofpackagenames-poch. if (name.length > 214) { - warnings.push("name can no longer contain more than 214 characters") + warnings.push('name can no longer contain more than 214 characters') } // mIxeD CaSe nAMEs if (name.toLowerCase() !== name) { - warnings.push("name can no longer contain capital letters") + warnings.push('name can no longer contain capital letters') } - if (encodeURIComponent(name) !== name) { + if (/[~'!()*]/.test(name.split('/').slice(-1)[0])) { + warnings.push('name can no longer contain special characters ("~\'!()*")') + } + if (encodeURIComponent(name) !== name) { // Maybe it's a scoped package name, like @user/package var nameMatch = name.match(scopedPackagePattern) if (nameMatch) { @@ -80,11 +84,10 @@ var validate = module.exports = function(name) { } } - errors.push("name can only contain URL-friendly characters") + errors.push('name can only contain URL-friendly characters') } return done(warnings, errors) - } validate.scopedPackagePattern = scopedPackagePattern |