Comparing version 0.2.0 to 1.0.0
#!/usr/bin/env node | ||
'use strict' | ||
'use strict'; | ||
var npmLateset = require('./../lib/npm-latest') | ||
, path = require('path') | ||
, fs = require('fs') | ||
, colors = require('colors') | ||
, vcsurl = require('vcsurl') | ||
var path = require('path') | ||
var fs = require('fs') | ||
var colors = require('colors') | ||
var vcsurl = require('vcsurl') | ||
function main() { | ||
if (process.argv.length < 3) | ||
displayHelp(); | ||
else | ||
function main () { | ||
if (process.argv.length < 3) { | ||
displayHelp() | ||
} else { | ||
process.argv.slice(2).forEach(function (packageName) { | ||
npmLateset(packageName, function (err, result) { | ||
if (err) { | ||
if (err.error === "not_found") { | ||
console.log(""); | ||
console.log(" Package '%s' not found in NPM.", colors.blue(packageName)); | ||
console.log(""); | ||
if (err.error === 'not_found') { | ||
console.log('') | ||
console.log(" Package '%s' not found in NPM.", colors.blue(packageName)) | ||
console.log('') | ||
} else { | ||
console.log("ERROR"); | ||
console.log(err.reason); | ||
console.log('ERROR') | ||
console.log(err.reason) | ||
} | ||
return; | ||
return | ||
} | ||
console.log(""); | ||
console.log(" " + colors.blue(packageName + ": ")); | ||
console.log(" latest: " + result.version); | ||
console.log(" last updated: " + result.time); | ||
if (result.author && result.author.name) | ||
console.log(" author: " + result.author.name); | ||
if (result.repository && result.repository.url) | ||
console.log(" repo: " + vcsurl(result.repository.url)); | ||
if (result.description) | ||
console.log(" description: " + result.description); | ||
console.log(""); | ||
console.log('') | ||
console.log(' ' + colors.blue(packageName + ': ')) | ||
console.log(' latest: ' + result.version) | ||
console.log(' last updated: ' + result.time) | ||
if (result.author && result.author.name) { | ||
console.log(' author: ' + result.author.name) | ||
} | ||
if (result.repository && result.repository.url) { | ||
console.log(' repo: ' + vcsurl(result.repository.url)) | ||
} | ||
if (result.description) { | ||
console.log(' description: ' + result.description) | ||
} | ||
console.log('') | ||
}) | ||
}); | ||
}) | ||
} | ||
} | ||
function displayHelp() { | ||
var packageJson = path.join(__dirname, '../package.json'); | ||
function displayHelp () { | ||
var packageJson = path.join(__dirname, '../package.json') | ||
if (fs.existsSync(packageJson)) { | ||
var packageConf = JSON.parse(fs.readFileSync(packageJson).toString()); | ||
console.log(""); | ||
console.log(colors.bold(" npm-latest [%s]"), packageConf.version); | ||
console.log(""); | ||
console.log(" Usage: npm-latest [package]"); | ||
console.log(""); | ||
var packageConf = JSON.parse(fs.readFileSync(packageJson).toString()) | ||
console.log('') | ||
console.log(colors.bold(' npm-latest [%s]'), packageConf.version) | ||
console.log('') | ||
console.log(' Usage: npm-latest [package]') | ||
console.log('') | ||
} else { | ||
console.log("Can't locate package.json. Can't display help."); | ||
console.log("Can't locate package.json. Can't display help.") | ||
} | ||
} | ||
main(); | ||
main() |
@@ -0,1 +1,6 @@ | ||
1.0.0 / 2015-04-02 | ||
------------------ | ||
- bug fix npm registery has updated to return (probably different mime type) | ||
- use any npm registery https://github.com/jprichardson/npm-latest/pull/5 | ||
0.1.0 / 2013-03-19 | ||
@@ -2,0 +7,0 @@ ------------------ |
@@ -1,4 +0,4 @@ | ||
'use strict'; | ||
'use strict' | ||
var npmLatest = require('./../lib/npm-latest.js'); | ||
var npmLatest = require('./../lib/npm-latest.js') | ||
@@ -9,11 +9,11 @@ // The request options. For more information please visit: | ||
url: 'https://registry.nodejitsu.com/%s', | ||
timeout:1500 | ||
}; | ||
timeout: 1500 | ||
} | ||
npmLatest('express', options, function (err, result) { | ||
if (err) { | ||
console.error(err); | ||
return; | ||
console.error(err) | ||
return | ||
} | ||
console.log(result.name + ' v'+ result.version); | ||
}); | ||
console.log(result.name + ' v' + result.version) | ||
}) |
@@ -1,11 +0,11 @@ | ||
'use strict'; | ||
'use strict' | ||
var npmLatest = require('./../lib/npm-latest.js'); | ||
var npmLatest = require('./../lib/npm-latest.js') | ||
npmLatest('express', function (err, result) { | ||
if (err) { | ||
console.error(err); | ||
return; | ||
console.error(err) | ||
return | ||
} | ||
console.log(result.name + ' v'+ result.version); | ||
}); | ||
console.log(result.name + ' v' + result.version) | ||
}) |
@@ -1,26 +0,28 @@ | ||
'use strict'; | ||
'use strict' | ||
var request = require('request') | ||
, util = require('util') | ||
, _ = require('lodash') | ||
var util = require('util') | ||
var registryUrl = require('registry-url')().replace(/\/$/, '') | ||
var NPM_URL = "http://registry.npmjs.org/%s"; | ||
var NPM_URL = registryUrl + '/%s' | ||
function getLatest(npmObj) { | ||
var versions = []; | ||
for (var version in npmObj.time) | ||
versions.push(version); | ||
function getLatest (npmObj) { | ||
var time = npmObj.time | ||
delete time.modified | ||
delete time.created | ||
var versions = Object.keys(time) | ||
versions.sort(function (a, b) { return new Date(time[b]) - new Date(time[a]) }) | ||
var lastVersion = versions[versions.length - 1]; | ||
var lastTime = npmObj.time[lastVersion]; | ||
var lastVersion = versions[0] | ||
var lastTime = time[lastVersion] | ||
return { | ||
"version": lastVersion, | ||
"time": new Date(lastTime) | ||
}; | ||
'version': lastVersion, | ||
'time': new Date(lastTime) | ||
} | ||
} | ||
module.exports = function (packageName, options, cb) { | ||
if(typeof options === 'function') { | ||
cb = options; | ||
function npmLatest (packageName, options, callback) { | ||
if (typeof options === 'function') { | ||
callback = options | ||
} | ||
@@ -34,27 +36,30 @@ | ||
// Merge options with defaults | ||
options = _.merge(defaults, options); | ||
Object.keys(options).forEach(function (key) { | ||
defaults[key] = options[key] | ||
}) | ||
options = defaults | ||
// Replace placeholder with the package name | ||
options.url = util.format(options.url, packageName); | ||
options.url = util.format(options.url, packageName) | ||
request(options, function(err, response, body) { | ||
if (err) { | ||
cb(err); | ||
} else { | ||
var npmObj = JSON.parse(body); | ||
if (npmObj.error) { | ||
cb(npmObj); | ||
} else { | ||
var latest = getLatest(npmObj); | ||
cb(null, { | ||
name: packageName, | ||
version: latest.version, | ||
time: latest.time, | ||
author: npmObj.author, | ||
repository: npmObj.repository, | ||
description: npmObj.description | ||
}); | ||
} | ||
} | ||
}); | ||
}; | ||
request(options, function (err, response, body) { | ||
if (err) return callback(err) | ||
if (!body) return callback({error: 'not_found'}) | ||
var npmObj = JSON.parse(body) | ||
if (npmObj.error) return callback(npmObj) | ||
var latest = getLatest(npmObj) | ||
callback(null, { | ||
name: packageName, | ||
version: latest.version, | ||
time: latest.time, | ||
author: npmObj.author, | ||
repository: npmObj.repository, | ||
description: npmObj.description | ||
}) | ||
}) | ||
} | ||
module.exports = npmLatest |
{ | ||
"name": "npm-latest", | ||
"version": "0.2.0", | ||
"version": "1.0.0", | ||
"description": "Quickly find the latest version of a package in npm.", | ||
"homepage": [ | ||
"https://github.com/jprichardson/npm-latest.git" | ||
], | ||
"homepage": "https://github.com/jprichardson/npm-latest.git", | ||
"repository": { | ||
@@ -26,4 +24,4 @@ "type": "git", | ||
"colors": "0.6.x", | ||
"lodash": "^2.4.1", | ||
"request": "2.10.x", | ||
"registry-url": "^3.0.0", | ||
"request": "^2.54.0", | ||
"vcsurl": "~0.1.1" | ||
@@ -35,5 +33,9 @@ }, | ||
}, | ||
"engines": { | ||
"node": ">=0.8.x" | ||
"devDependencies": { | ||
"mocha": "^2.2.1", | ||
"standard": "^3.3.1" | ||
}, | ||
"scripts": { | ||
"test": "standard && mocha" | ||
} | ||
} |
@@ -6,2 +6,3 @@ Node.js - npm-latest | ||
[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) | ||
@@ -14,2 +15,7 @@ | ||
**Update 2015-03-29:** | ||
Support config registry in `~/.npmrc` file,more on [registry-url](https://github.com/sindresorhus/registry-url) | ||
**Update:** | ||
@@ -39,3 +45,3 @@ | ||
express: | ||
express: | ||
@@ -55,3 +61,3 @@ latest: 3.0.0rc2 | ||
Copyright 2012, JP Richardson <jprichardson@gmail.com> | ||
Copyright 2012-2015, JP Richardson <jprichardson@gmail.com> | ||
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
166
0
60
8735
2
11
3
+ Addedregistry-url@^3.0.0
+ Addedajv@6.12.6(transitive)
+ Addedasn1@0.2.6(transitive)
+ Addedassert-plus@1.0.0(transitive)
+ Addedasynckit@0.4.0(transitive)
+ Addedaws-sign2@0.7.0(transitive)
+ Addedaws4@1.13.2(transitive)
+ Addedbcrypt-pbkdf@1.0.2(transitive)
+ Addedcaseless@0.12.0(transitive)
+ Addedcombined-stream@1.0.8(transitive)
+ Addedcore-util-is@1.0.2(transitive)
+ Addeddashdash@1.14.1(transitive)
+ Addeddeep-extend@0.6.0(transitive)
+ Addeddelayed-stream@1.0.0(transitive)
+ Addedecc-jsbn@0.1.2(transitive)
+ Addedextend@3.0.2(transitive)
+ Addedextsprintf@1.3.0(transitive)
+ Addedfast-deep-equal@3.1.3(transitive)
+ Addedfast-json-stable-stringify@2.1.0(transitive)
+ Addedforever-agent@0.6.1(transitive)
+ Addedform-data@2.3.3(transitive)
+ Addedgetpass@0.1.7(transitive)
+ Addedhar-schema@2.0.0(transitive)
+ Addedhar-validator@5.1.5(transitive)
+ Addedhttp-signature@1.2.0(transitive)
+ Addedini@1.3.8(transitive)
+ Addedis-typedarray@1.0.0(transitive)
+ Addedisstream@0.1.2(transitive)
+ Addedjsbn@0.1.1(transitive)
+ Addedjson-schema@0.4.0(transitive)
+ Addedjson-schema-traverse@0.4.1(transitive)
+ Addedjson-stringify-safe@5.0.1(transitive)
+ Addedjsprim@1.4.2(transitive)
+ Addedmime-db@1.52.0(transitive)
+ Addedmime-types@2.1.35(transitive)
+ Addedminimist@1.2.8(transitive)
+ Addedoauth-sign@0.9.0(transitive)
+ Addedperformance-now@2.1.0(transitive)
+ Addedpsl@1.9.0(transitive)
+ Addedpunycode@2.3.1(transitive)
+ Addedqs@6.5.3(transitive)
+ Addedrc@1.2.8(transitive)
+ Addedregistry-url@3.1.0(transitive)
+ Addedrequest@2.88.2(transitive)
+ Addedsafe-buffer@5.2.1(transitive)
+ Addedsafer-buffer@2.1.2(transitive)
+ Addedsshpk@1.18.0(transitive)
+ Addedstrip-json-comments@2.0.1(transitive)
+ Addedtough-cookie@2.5.0(transitive)
+ Addedtunnel-agent@0.6.0(transitive)
+ Addedtweetnacl@0.14.5(transitive)
+ Addeduri-js@4.4.1(transitive)
+ Addeduuid@3.4.0(transitive)
+ Addedverror@1.10.0(transitive)
- Removedlodash@^2.4.1
- Removedlodash@2.4.2(transitive)
- Removedrequest@2.10.0(transitive)
Updatedrequest@^2.54.0