diff options
Diffstat (limited to 'deps/npm/node_modules/read-package-json/node_modules/normalize-package-data')
6 files changed, 150 insertions, 90 deletions
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/fixer.js b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/fixer.js index af2bf55ae..9d832ee17 100644 --- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/fixer.js +++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/fixer.js @@ -6,6 +6,8 @@ var url = require("url") var typos = require("./typos") var coreModuleNames = require("./core_module_names") var githubUserRepo = require("github-url-from-username-repo") +var warningMessages = require('./warning_messages.json') +var format = require('util').format var fixer = module.exports = { // default warning function @@ -13,11 +15,10 @@ var fixer = module.exports = { fixRepositoryField: function(data) { if (data.repositories) { - this.warn("'repositories' (plural) Not supported.\n" + - "Please pick one as the 'repository' field"); + this.warn(warningMessages.repositories); data.repository = data.repositories[0] } - if (!data.repository) return this.warn('No repository field.') + if (!data.repository) return this.warn(warningMessages.missingRepository) if (typeof data.repository === "string") { data.repository = { type: "git", @@ -36,7 +37,7 @@ var fixer = module.exports = { } if (r.match(/github.com\/[^\/]+\/[^\/]+\.git\.git$/)) { - this.warn("Probably broken git url: " + r) + this.warn(format(warningMessages.brokenGitUrl, r)) } } @@ -51,12 +52,12 @@ var fixer = module.exports = { , fixScriptsField: function(data) { if (!data.scripts) return if (typeof data.scripts !== "object") { - this.warn("scripts must be an object") + this.warn(warningMessages.nonObjectScripts) delete data.scripts } Object.keys(data.scripts).forEach(function (k) { if (typeof data.scripts[k] !== "string") { - this.warn("script values must be string commands") + this.warn(warningMessages.nonStringScript) delete data.scripts[k] } else if (typos.script[k]) { this.warn(makeTypoWarning(k, typos.script[k], "scripts")) @@ -67,12 +68,12 @@ var fixer = module.exports = { , fixFilesField: function(data) { var files = data.files if (files && !Array.isArray(files)) { - this.warn("Invalid 'files' member") + this.warn(warningMessages.nonArrayFiles) delete data.files } else if (data.files) { data.files = data.files.filter(function(file) { if (!file || typeof file !== "string") { - this.warn("Invalid filename in 'files' list: " + file) + this.warn(format(warningMessages.invalidFilename, file)) return false } else { return true @@ -104,13 +105,12 @@ var fixer = module.exports = { delete data[bdd] } if (data[bd] && !Array.isArray(data[bd])) { - this.warn("Invalid 'bundleDependencies' list. " + - "Must be array of package names") + this.warn(warningMessages.nonArrayBundleDependencies) delete data[bd] } else if (data[bd]) { data[bd] = data[bd].filter(function(bd) { if (!bd || typeof bd !== 'string') { - this.warn("Invalid bundleDependencies member: " + bd) + this.warn(format(nonStringBundleDependency, bd)) return false } else { return true @@ -128,23 +128,28 @@ var fixer = module.exports = { ;['dependencies','devDependencies'].forEach(function(deps) { if (!(deps in data)) return if (!data[deps] || typeof data[deps] !== "object") { - this.warn(deps + " field must be an object") + this.warn(format(warningMessages.nonObjectDependencies, deps)) delete data[deps] return } Object.keys(data[deps]).forEach(function (d) { var r = data[deps][d] if (typeof r !== 'string') { - this.warn('Invalid dependency: ' + d + ' ' + JSON.stringify(r)) + this.warn(format(nonStringDependency, d, JSON.stringify(r))) delete data[deps][d] } + // "/" is not allowed as packagename for publishing, but for git-urls + // normalize shorthand-urls + if (githubUserRepo(data[deps][d])) { + data[deps][d] = githubUserRepo(data[deps][d]) + } }, this) }, this) } , fixModulesField: function (data) { if (data.modules) { - this.warn("modules field is deprecated") + this.warn(warningMessages.deprecatedModules) delete data.modules } } @@ -155,11 +160,11 @@ var fixer = module.exports = { } if (data.keywords && !Array.isArray(data.keywords)) { delete data.keywords - this.warn("keywords should be an array of strings") + this.warn(warningMessages.nonArrayKeywords) } else if (data.keywords) { data.keywords = data.keywords.filter(function(kw) { if (typeof kw !== "string" || !kw) { - this.warn("keywords should be an array of strings"); + this.warn(warningMessages.nonStringKeyword); return false } else { return true @@ -200,24 +205,24 @@ var fixer = module.exports = { data.name = data.name.trim() ensureValidName(data.name, strict) if (coreModuleNames.indexOf(data.name) !== -1) - this.warn(data.name + " is also the name of a node core module.") + this.warn(format(warningMessages.conflictingName, data.name)) } , fixDescriptionField: function (data) { if (data.description && typeof data.description !== 'string') { - this.warn("'description' field should be a string") + this.warn(warningMessages.nonStringDescription) delete data.description } if (data.readme && !data.description) data.description = extractDescription(data.readme) if(data.description === undefined) delete data.description; - if (!data.description) this.warn('No description') + if (!data.description) this.warn(warningMessages.missingDescription) } , fixReadmeField: function (data) { if (!data.readme) { - this.warn("No README data") + this.warn(warningMessages.missingReadme) data.readme = "ERROR: No README data found!" } } @@ -240,7 +245,7 @@ var fixer = module.exports = { else if(url.parse(data.bugs).protocol) data.bugs = {url: data.bugs} else - this.warn("Bug string field must be url, email, or {email,url}") + this.warn(warningMessages.nonEmailUrlBugsString) } else { bugsTypos(data.bugs, this.warn) @@ -250,18 +255,18 @@ var fixer = module.exports = { if(typeof(oldBugs.url) == "string" && url.parse(oldBugs.url).protocol) data.bugs.url = oldBugs.url else - this.warn("bugs.url field must be a string url. Deleted.") + this.warn(warningMessages.nonUrlBugsUrlField) } if(oldBugs.email) { if(typeof(oldBugs.email) == "string" && emailRe.test(oldBugs.email)) data.bugs.email = oldBugs.email else - this.warn("bugs.email field must be a string email. Deleted.") + this.warn(warningMessages.nonEmailBugsEmailField) } } if(!data.bugs.email && !data.bugs.url) { delete data.bugs - this.warn("Normalized value of bugs field is an empty object. Deleted.") + this.warn(warningMessages.emptyNormalizedBugs) } } } @@ -277,11 +282,11 @@ var fixer = module.exports = { return true if(typeof data.homepage !== "string") { - this.warn("homepage field must be a string url. Deleted.") + this.warn(warningMessages.nonUrlHomepage) return delete data.homepage } if(!url.parse(data.homepage).protocol) { - this.warn("homepage field must start with a protocol.") + this.warn(warningMessages.missingProtocolHomepage) data.homepage = "http://" + data.homepage } } @@ -345,7 +350,7 @@ function depObjectify (deps, type, warn) { deps = deps.trim().split(/[\n\r\s\t ,]+/) } if (!Array.isArray(deps)) return deps - warn("specifying " + type + " as array is deprecated") + warn(format(warningMessages.deprecatedArrayDependencies, type)) var o = {} deps.filter(function (d) { return typeof d === "string" @@ -383,5 +388,5 @@ function makeTypoWarning (providedName, probableName, field) { providedName = field + "['" + providedName + "']" probableName = field + "['" + probableName + "']" } - return providedName + " should probably be " + probableName + "." -} + return format(warningMessages.typo, providedName, probableName) +}
\ No newline at end of file diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/safe_format.js b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/safe_format.js new file mode 100644 index 000000000..08517f142 --- /dev/null +++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/safe_format.js @@ -0,0 +1,9 @@ +var util = require('util') + +module.exports = function() { + var args = Array.prototype.slice.call(arguments, 0) + args.forEach(function(arg) { + if (!arg) throw new TypeError('Bad arguments.') + }) + return util.format.apply(null, arguments) +}
\ No newline at end of file diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/warning_messages.json b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/warning_messages.json new file mode 100644 index 000000000..9605f5cc6 --- /dev/null +++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/warning_messages.json @@ -0,0 +1,28 @@ +{ + "repositories": "'repositories' (plural) Not supported. Please pick one as the 'repository' field" + ,"missingRepository": "No repository field." + ,"brokenGitUrl": "Probably broken git url: %s" + ,"nonObjectScripts": "scripts must be an object" + ,"nonStringScript": "script values must be string commands" + ,"nonArrayFiles": "Invalid 'files' member" + ,"invalidFilename": "Invalid filename in 'files' list: %s" + ,"nonArrayBundleDependencies": "Invalid 'bundleDependencies' list. Must be array of package names" + ,"nonStringBundleDependency": "Invalid bundleDependencies member: %s" + ,"nonObjectDependencies": "%s field must be an object" + ,"nonStringDependency": "Invalid dependency: %s %s" + ,"deprecatedArrayDependencies": "specifying %s as array is deprecated" + ,"deprecatedModules": "modules field is deprecated" + ,"nonArrayKeywords": "keywords should be an array of strings" + ,"nonStringKeyword": "keywords should be an array of strings" + ,"conflictingName": "%s is also the name of a node core module." + ,"nonStringDescription": "'description' field should be a string" + ,"missingDescription": "No description" + ,"missingReadme": "No README data" + ,"nonEmailUrlBugsString": "Bug string field must be url, email, or {email,url}" + ,"nonUrlBugsUrlField": "bugs.url field must be a string url. Deleted." + ,"nonEmailBugsEmailField": "bugs.email field must be a string email. Deleted." + ,"emptyNormalizedBugs": "Normalized value of bugs field is an empty object. Deleted." + ,"nonUrlHomepage": "homepage field must be a string url. Deleted." + ,"missingProtocolHomepage": "homepage field must start with a protocol." + ,"typo": "%s should probably be %s." +}
\ No newline at end of file diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/package.json b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/package.json index 1ea36836a..05037bf92 100644 --- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/package.json +++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/package.json @@ -1,6 +1,6 @@ { "name": "normalize-package-data", - "version": "0.2.8", + "version": "0.2.9", "author": { "name": "Meryn Stol", "email": "merynstol@gmail.com" @@ -44,6 +44,10 @@ "url": "https://github.com/meryn/normalize-package-data/issues" }, "homepage": "https://github.com/meryn/normalize-package-data", - "_id": "normalize-package-data@0.2.8", - "_from": "normalize-package-data@~0.2.7" + "_id": "normalize-package-data@0.2.9", + "dist": { + "shasum": "73fff1f896ce6f95bd089c57037a96389ad5789e" + }, + "_from": "normalize-package-data@~0.2.9", + "_resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-0.2.9.tgz" } diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/normalize.js b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/normalize.js index 6e96e6dc9..dd26c5d01 100644 --- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/normalize.js +++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/normalize.js @@ -5,6 +5,8 @@ var path = require("path") var globals = Object.keys(global) var normalize = require("../lib/normalize") +var warningMessages = require("../lib/warning_messages.json") +var safeFormat = require("../lib/safe_format") var rpjPath = path.resolve(__dirname,"./fixtures/read-package-json.json") tap.test("normalize some package data", function(t) { @@ -48,9 +50,9 @@ tap.test("empty object", function(t) { normalize(packageData, warn) t.same(packageData, expect) t.same(warnings, [ - "No description", - "No repository field.", - "No README data" + warningMessages.missingDescription, + warningMessages.missingRepository, + warningMessages.missingReadme ]) t.end() }) @@ -70,10 +72,10 @@ tap.test("core module name", function(t) { }, warn) var expect = [ - "http is also the name of a node core module.", - "Bug string field must be url, email, or {email,url}", - "Normalized value of bugs field is an empty object. Deleted.", - "homepage field must be a string url. Deleted." + safeFormat(warningMessages.conflictingName, 'http'), + warningMessages.nonEmailUrlBugsString, + warningMessages.emptyNormalizedBugs, + warningMessages.nonUrlHomepage ] t.same(warnings, expect) t.end() @@ -101,15 +103,15 @@ tap.test("urls required", function(t) { console.error(a) var expect = - [ "No description", - "No repository field.", - "bugs.url field must be a string url. Deleted.", - "bugs.email field must be a string email. Deleted.", - "Normalized value of bugs field is an empty object. Deleted.", - "No README data", - "Bug string field must be url, email, or {email,url}", - "Normalized value of bugs field is an empty object. Deleted.", - "homepage field must be a string url. Deleted." ] + [ warningMessages.missingDescription, + warningMessages.missingRepository, + warningMessages.nonUrlBugsUrlField, + warningMessages.nonEmailBugsEmailField, + warningMessages.emptyNormalizedBugs, + warningMessages.missingReadme, + warningMessages.nonEmailUrlBugsString, + warningMessages.emptyNormalizedBugs, + warningMessages.nonUrlHomepage ] t.same(warnings, expect) t.end() }) @@ -127,10 +129,10 @@ tap.test("homepage field must start with a protocol.", function(t) { console.error(a) var expect = - [ "No description", - "No repository field.", - "No README data", - "homepage field must start with a protocol." ] + [ warningMessages.missingDescription, + warningMessages.missingRepository, + warningMessages.missingReadme, + warningMessages.missingProtocolHomepage ] t.same(warnings, expect) t.same(a.homepage, 'http://example.org') t.end() @@ -194,6 +196,13 @@ tap.test("homepage field will set to github gist url if repository is a shorthan t.end() }) +tap.test("treat isaacs/node-graceful-fs as github repo in dependencies", function(t) { + var d = {dependencies: {"node-graceful-fs": "isaacs/node-graceful-fs"}} + normalize(d) + t.same(d.dependencies, {"node-graceful-fs": "git://github.com/isaacs/node-graceful-fs" }) + t.end() +}); + tap.test("deprecation warning for array in dependencies fields", function(t) { var a var warnings = [] @@ -205,9 +214,9 @@ tap.test("deprecation warning for array in dependencies fields", function(t) { devDependencies: [], optionalDependencies: [] }, warn) - t.ok(~warnings.indexOf("specifying dependencies as array is deprecated"), "deprecation warning") - t.ok(~warnings.indexOf("specifying devDependencies as array is deprecated"), "deprecation warning") - t.ok(~warnings.indexOf("specifying optionalDependencies as array is deprecated"), "deprecation warning") + t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'dependencies')), "deprecation warning") + t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'devDependencies')), "deprecation warning") + t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'optionalDependencies')), "deprecation warning") t.end() }) diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/typo.js b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/typo.js index 3eef829fd..eda75545e 100644 --- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/typo.js +++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/typo.js @@ -1,33 +1,38 @@ var test = require('tap').test + var normalize = require('../') var typos = require('../lib/typos.json') +var warningMessages = require("../lib/warning_messages.json") +var safeFormat = require("../lib/safe_format") test('typos', function(t) { var warnings = [] function warn(m) { warnings.push(m) } + + var typoMessage = safeFormat.bind(undefined, warningMessages.typo) var expect = - [ 'No repository field.', - 'dependancies should probably be dependencies.', - 'dependecies should probably be dependencies.', - 'depdenencies should probably be dependencies.', - 'devEependencies should probably be devDependencies.', - 'depends should probably be dependencies.', - 'dev-dependencies should probably be devDependencies.', - 'devDependences should probably be devDependencies.', - 'devDepenencies should probably be devDependencies.', - 'devdependencies should probably be devDependencies.', - 'repostitory should probably be repository.', - 'repo should probably be repository.', - 'prefereGlobal should probably be preferGlobal.', - 'hompage should probably be homepage.', - 'hampage should probably be homepage.', - 'autohr should probably be author.', - 'autor should probably be author.', - 'contributers should probably be contributors.', - 'publicationConfig should probably be publishConfig.' ] + [ warningMessages.missingRepository, + typoMessage('dependancies', 'dependencies'), + typoMessage('dependecies', 'dependencies'), + typoMessage('depdenencies', 'dependencies'), + typoMessage('devEependencies', 'devDependencies'), + typoMessage('depends', 'dependencies'), + typoMessage('dev-dependencies', 'devDependencies'), + typoMessage('devDependences', 'devDependencies'), + typoMessage('devDepenencies', 'devDependencies'), + typoMessage('devdependencies', 'devDependencies'), + typoMessage('repostitory', 'repository'), + typoMessage('repo', 'repository'), + typoMessage('prefereGlobal', 'preferGlobal'), + typoMessage('hompage', 'homepage'), + typoMessage('hampage', 'homepage'), + typoMessage('autohr', 'author'), + typoMessage('autor', 'author'), + typoMessage('contributers', 'contributors'), + typoMessage('publicationConfig', 'publishConfig') ] normalize({"dependancies": "dependencies" ,"dependecies": "dependencies" @@ -55,13 +60,13 @@ test('typos', function(t) { warnings.length = 0 var expect = - [ 'No description', - 'No repository field.', - 'bugs[\'web\'] should probably be bugs[\'url\'].', - 'bugs[\'name\'] should probably be bugs[\'url\'].', - 'bugs.url field must be a string url. Deleted.', - 'Normalized value of bugs field is an empty object. Deleted.', - "No README data" ] + [ warningMessages.missingDescription, + warningMessages.missingRepository, + typoMessage("bugs['web']", "bugs['url']"), + typoMessage("bugs['name']", "bugs['url']"), + warningMessages.nonUrlBugsUrlField, + warningMessages.emptyNormalizedBugs, + warningMessages.missingReadme ] normalize({name:"name" ,version:"1.2.5" @@ -71,10 +76,10 @@ test('typos', function(t) { warnings.length = 0 var expect = - [ 'No description', - 'No repository field.', - "No README data", - 'script should probably be scripts.' ] + [ warningMessages.missingDescription, + warningMessages.missingRepository, + warningMessages.missingReadme, + typoMessage('script', 'scripts') ] normalize({name:"name" ,version:"1.2.5" @@ -84,11 +89,11 @@ test('typos', function(t) { warnings.length = 0 expect = - [ 'No description', - 'No repository field.', - 'scripts[\'server\'] should probably be scripts[\'start\'].', - 'scripts[\'tests\'] should probably be scripts[\'test\'].', - "No README data" ] + [ warningMessages.missingDescription, + warningMessages.missingRepository, + typoMessage("scripts['server']", "scripts['start']"), + typoMessage("scripts['tests']", "scripts['test']"), + warningMessages.missingReadme ] normalize({name:"name" ,version:"1.2.5" |